[{"data":1,"prerenderedAt":173192},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-04-qiang-hua-xue-xi\u002Fch4-ce-l-e-han-shu":3,"wiki-doc-nav":256},{"id":4,"title":5,"body":6,"description":30,"extension":249,"meta":250,"navigation":251,"path":252,"seo":253,"stem":254,"__hash__":255},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":8,"toc":245},"minimark",[9,13,18,22,25,32,37,40,45,50,53,58,61,66,69,74,77,82,85,90,95,98,103,106,109,114,117,122,127,131,134,137,142,147,150,157,162,165,171,174,177,182,185,190,193,198,204,207,212,217,220,225,228,233,236],[10,11,5],"h1",{"id":12},"_4策略学习",[14,15,17],"h2",{"id":16},"_41概念描述","4.1.概念描述",[19,20,21],"p",{},"用神经网络（策略网络）近似策略函数",[19,23,24],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26,27],{},[28,29],"img",{"alt":30,"src":31},"","..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,33,34],{},[28,35],{"alt":30,"src":36},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,38,39],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,41,42],{},[28,43],{"alt":30,"src":44},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,46,47],{},[28,48],{"alt":30,"src":49},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,51,52],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,54,55],{},[28,56],{"alt":30,"src":57},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,59,60],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,62,63],{},[28,64],{"alt":30,"src":65},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,67,68],{},"改进theta要用到策略梯度算法",[19,70,71],{},[28,72],{"alt":30,"src":73},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,75,76],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,78,79],{},[28,80],{"alt":30,"src":81},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,83,84],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,86,87],{},[28,88],{"alt":30,"src":89},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,91,92],{},[28,93],{"alt":30,"src":94},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,96,97],{},"梯度公式总结：",[19,99,100],{},[28,101],{"alt":30,"src":102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,104,105],{},"两个公式的分别应用场景：",[19,107,108],{},"对于离散的动作：",[19,110,111],{},[28,112],{"alt":30,"src":113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,115,116],{},"对于连续的动作：",[19,118,119],{},[28,120],{"alt":30,"src":121},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,123,124],{},[28,125],{"alt":30,"src":126},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,128,130],{"id":129},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,132,133],{},"使用蒙特卡洛来近似计算策略梯度",[19,135,136],{},"蒙特卡洛法的解释如下：",[19,138,139],{},[28,140],{"alt":30,"src":141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,143,144],{},[28,145],{"alt":30,"src":146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,148,149],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[151,152,153],"ol",{},[154,155,156],"li",{},"方法一：reinforce算法",[19,158,159],{},[28,160],{"alt":30,"src":161},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,163,164],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[151,166,168],{"start":167},2,[154,169,170],{},"方法二：actor-critic算法",[19,172,173],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,175,176],{},"两个网络的构建：",[19,178,179],{},[28,180],{"alt":30,"src":181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,183,184],{},"actor网路：",[19,186,187],{},[28,188],{"alt":30,"src":189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,191,192],{},"critic网络",[19,194,195],{},[28,196],{"alt":30,"src":197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[151,199,201],{"start":200},3,[154,202,203],{},"网络的训练",[19,205,206],{},"网络描述",[19,208,209],{},[28,210],{"alt":30,"src":211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,213,214],{},[28,215],{"alt":30,"src":216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,218,219],{},"TD算法更新梯度：",[19,221,222],{},[28,223],{"alt":30,"src":224},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,226,227],{},"策略网络更新梯度：",[19,229,230],{},[28,231],{"alt":30,"src":232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,234,235],{},"训练整个流程的具体描述：",[19,237,238,241,242],{},[28,239],{"alt":30,"src":240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[28,243],{"alt":30,"src":244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":30,"searchDepth":167,"depth":167,"links":246},[247,248],{"id":16,"depth":167,"text":17},{"id":129,"depth":167,"text":130},"md",{},true,"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":5,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",[257,5369,6477,7897,10886,12237,13726,14815,23578,23591,24190,24216,24340,24517,24582,24600,24613,24660,24784,24953,25152,25332,25537,25673,25768,25805,25818,26128,26869,27577,27598,28618,30249,30400,30413,30425,30726,50538,50553,50570,50603,53475,76823,92968,92989,93102,93223,93993,94656,95017,95055,95161,95261,95304,95330,95391,97045,97146,97171,97662,98162,99242,99525,100267,100769,100781,102797,104461,105964,107662,109579,111498,113520,116990,117422,117885,118634,121578,121926,121948,122304,125611,125623,126026,126049,126196,126363,126568,126869,127426,128083,130014,131612,132261,133755,135186,136421,138115,139867,142277,142393,143328,143539,144424,145659,145887,145900,147055,149467,151835,155156,157633,159277,161054,163067,166119,168299,170826,173020],{"id":258,"title":259,"body":260,"description":30,"extension":249,"meta":5364,"navigation":251,"path":5365,"seo":5366,"stem":5367,"__hash__":5368},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":261,"toc":5336},[262,265,269,272,276,287,291,296,299,302,305,308,311,346,350,353,356,359,362,415,419,438,440,454,457,465,468,1331,1338,1355,1359,1449,1453,1459,1548,1552,1590,1594,1658,1662,1666,1672,1683,1687,1692,1696,1701,1705,1710,1714,1718,1723,1993,1998,2136,2141,2398,2401,2409,2413,2418,2521,2524,2830,2839,2940,2943,2946,2949,2952,3212,3217,3357,3360,3539,3542,3670,3673,3825,3829,3834,3837,3848,3856,3859,3966,3970,3974,3979,4029,4034,4039,4063,4068,4121,4124,4129,4306,4311,4596,4601,4998,5002,5007,5064,5069,5077,5080,5220,5223,5332],[10,263,259],{"id":264},"_1基础入门",[14,266,268],{"id":267},"_11注释","1.1注释",[19,270,271],{},"\u002F\u002F或者\u002F* *\u002F",[14,273,275],{"id":274},"_12命名","1.2命名",[151,277,278,281,284],{},[154,279,280],{},"字母数字下划线",[154,282,283],{},"开头必须是字母或_",[154,285,286],{},"不能使用关键词",[14,288,290],{"id":289},"_13数据类型","1.3数据类型",[292,293,295],"h3",{"id":294},"_131整形","1.3.1整形",[19,297,298],{},"short 短整形 2",[19,300,301],{},"int 整形 4",[19,303,304],{},"long 长整形 win4 linux32位4 linux64位8",[19,306,307],{},"long long 长长整形 8",[19,309,310],{},"利用sizeof可以求数据类型占用的内存空间大小",[312,313,317],"pre",{"className":314,"code":315,"language":316,"meta":30,"style":30},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[318,319,320,339],"code",{"__ignoreMap":30},[321,322,325,329,333,336],"span",{"class":323,"line":324},"line",1,[321,326,328],{"class":327},"szBVR","sizeof",[321,330,332],{"class":331},"sVt8B","(",[321,334,335],{"class":327},"int",[321,337,338],{"class":331},")\n",[321,340,341,343],{"class":323,"line":167},[321,342,328],{"class":327},[321,344,345],{"class":331},"(num)\n",[292,347,349],{"id":348},"_132浮点型","1.3.2浮点型",[19,351,352],{},"float 单精度 4节 7位有效数字",[19,354,355],{},"double 双精度 8节 15-16有效数字",[19,357,358],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,360,361],{},"注意点：",[312,363,365],{"className":314,"code":364,"language":316,"meta":30,"style":30},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[318,366,367,392],{"__ignoreMap":30},[321,368,369,372,375,378,382,385,388],{"class":323,"line":324},[321,370,371],{"class":327},"float",[321,373,374],{"class":331}," f1",[321,376,377],{"class":327},"=",[321,379,381],{"class":380},"sj4cs","3.14",[321,383,384],{"class":327},"f",[321,386,387],{"class":331},";",[321,389,391],{"class":390},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[321,393,394,396,399,401,404,407,410,412],{"class":323,"line":167},[321,395,371],{"class":327},[321,397,398],{"class":331}," f2",[321,400,377],{"class":327},[321,402,403],{"class":380},"3",[321,405,406],{"class":327},"e",[321,408,409],{"class":380},"2",[321,411,387],{"class":331},[321,413,414],{"class":390}," \u002F\u002F科学记数法\n",[292,416,418],{"id":417},"_133字符型","1.3.3字符型",[312,420,422],{"className":314,"code":421,"language":316,"meta":30,"style":30},"char ch='a'\n",[318,423,424],{"__ignoreMap":30},[321,425,426,429,432,434],{"class":323,"line":324},[321,427,428],{"class":327},"char",[321,430,431],{"class":331}," ch",[321,433,377],{"class":327},[321,435,437],{"class":436},"sZZnC","'a'\n",[19,439,361],{},[151,441,442,445,448,451],{},[154,443,444],{},"在显示字符型变量时，只能单引号，双引号x",[154,446,447],{},"单引号内只能一个字符，不能字符串",[154,449,450],{},"c和c++字符型变量只占用一个字符",[154,452,453],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,455,456],{},"ASCII码大致由以下两部分组成：",[151,458,459,462],{},[154,460,461],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[154,463,464],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,466,467],{},"ASCII码表格：",[469,470,471,515],"table",{},[472,473,474],"thead",{},[475,476,477,485,490,494,499,503,507,511],"tr",{},[478,479,480,484],"th",{},[481,482,483],"strong",{},"ASCII","值",[478,486,487],{},[481,488,489],{},"控制字符",[478,491,492,484],{},[481,493,483],{},[478,495,496],{},[481,497,498],{},"字符",[478,500,501,484],{},[481,502,483],{},[478,504,505],{},[481,506,498],{},[478,508,509,484],{},[481,510,483],{},[478,512,513],{},[481,514,498],{},[516,517,518,545,571,596,621,647,672,697,723,748,774,800,826,851,877,903,929,953,978,1003,1028,1053,1078,1103,1128,1153,1178,1204,1229,1254,1279,1305],"tbody",{},[475,519,520,524,527,530,533,536,539,542],{},[521,522,523],"td",{},"0",[521,525,526],{},"NUT",[521,528,529],{},"32",[521,531,532],{},"(space)",[521,534,535],{},"64",[521,537,538],{},"@",[521,540,541],{},"96",[521,543,544],{},"、",[475,546,547,550,553,556,559,562,565,568],{},[521,548,549],{},"1",[521,551,552],{},"SOH",[521,554,555],{},"33",[521,557,558],{},"!",[521,560,561],{},"65",[521,563,564],{},"A",[521,566,567],{},"97",[521,569,570],{},"a",[475,572,573,575,578,581,584,587,590,593],{},[521,574,409],{},[521,576,577],{},"STX",[521,579,580],{},"34",[521,582,583],{},"\"",[521,585,586],{},"66",[521,588,589],{},"B",[521,591,592],{},"98",[521,594,595],{},"b",[475,597,598,600,603,606,609,612,615,618],{},[521,599,403],{},[521,601,602],{},"ETX",[521,604,605],{},"35",[521,607,608],{},"#",[521,610,611],{},"67",[521,613,614],{},"C",[521,616,617],{},"99",[521,619,620],{},"c",[475,622,623,626,629,632,635,638,641,644],{},[521,624,625],{},"4",[521,627,628],{},"EOT",[521,630,631],{},"36",[521,633,634],{},"$",[521,636,637],{},"68",[521,639,640],{},"D",[521,642,643],{},"100",[521,645,646],{},"d",[475,648,649,652,655,658,661,664,667,670],{},[521,650,651],{},"5",[521,653,654],{},"ENQ",[521,656,657],{},"37",[521,659,660],{},"%",[521,662,663],{},"69",[521,665,666],{},"E",[521,668,669],{},"101",[521,671,406],{},[475,673,674,677,680,683,686,689,692,695],{},[521,675,676],{},"6",[521,678,679],{},"ACK",[521,681,682],{},"38",[521,684,685],{},"&",[521,687,688],{},"70",[521,690,691],{},"F",[521,693,694],{},"102",[521,696,384],{},[475,698,699,702,705,708,711,714,717,720],{},[521,700,701],{},"7",[521,703,704],{},"BEL",[521,706,707],{},"39",[521,709,710],{},",",[521,712,713],{},"71",[521,715,716],{},"G",[521,718,719],{},"103",[521,721,722],{},"g",[475,724,725,728,731,734,736,739,742,745],{},[521,726,727],{},"8",[521,729,730],{},"BS",[521,732,733],{},"40",[521,735,332],{},[521,737,738],{},"72",[521,740,741],{},"H",[521,743,744],{},"104",[521,746,747],{},"h",[475,749,750,753,756,759,762,765,768,771],{},[521,751,752],{},"9",[521,754,755],{},"HT",[521,757,758],{},"41",[521,760,761],{},")",[521,763,764],{},"73",[521,766,767],{},"I",[521,769,770],{},"105",[521,772,773],{},"i",[475,775,776,779,782,785,788,791,794,797],{},[521,777,778],{},"10",[521,780,781],{},"LF",[521,783,784],{},"42",[521,786,787],{},"*",[521,789,790],{},"74",[521,792,793],{},"J",[521,795,796],{},"106",[521,798,799],{},"j",[475,801,802,805,808,811,814,817,820,823],{},[521,803,804],{},"11",[521,806,807],{},"VT",[521,809,810],{},"43",[521,812,813],{},"+",[521,815,816],{},"75",[521,818,819],{},"K",[521,821,822],{},"107",[521,824,825],{},"k",[475,827,828,831,834,837,839,842,845,848],{},[521,829,830],{},"12",[521,832,833],{},"FF",[521,835,836],{},"44",[521,838,710],{},[521,840,841],{},"76",[521,843,844],{},"L",[521,846,847],{},"108",[521,849,850],{},"l",[475,852,853,856,859,862,865,868,871,874],{},[521,854,855],{},"13",[521,857,858],{},"CR",[521,860,861],{},"45",[521,863,864],{},"-",[521,866,867],{},"77",[521,869,870],{},"M",[521,872,873],{},"109",[521,875,876],{},"m",[475,878,879,882,885,888,891,894,897,900],{},[521,880,881],{},"14",[521,883,884],{},"SO",[521,886,887],{},"46",[521,889,890],{},".",[521,892,893],{},"78",[521,895,896],{},"N",[521,898,899],{},"110",[521,901,902],{},"n",[475,904,905,908,911,914,917,920,923,926],{},[521,906,907],{},"15",[521,909,910],{},"SI",[521,912,913],{},"47",[521,915,916],{},"\u002F",[521,918,919],{},"79",[521,921,922],{},"O",[521,924,925],{},"111",[521,927,928],{},"o",[475,930,931,934,937,940,942,945,948,951],{},[521,932,933],{},"16",[521,935,936],{},"DLE",[521,938,939],{},"48",[521,941,523],{},[521,943,944],{},"80",[521,946,947],{},"P",[521,949,950],{},"112",[521,952,19],{},[475,954,955,958,961,964,966,969,972,975],{},[521,956,957],{},"17",[521,959,960],{},"DCI",[521,962,963],{},"49",[521,965,549],{},[521,967,968],{},"81",[521,970,971],{},"Q",[521,973,974],{},"113",[521,976,977],{},"q",[475,979,980,983,986,989,991,994,997,1000],{},[521,981,982],{},"18",[521,984,985],{},"DC2",[521,987,988],{},"50",[521,990,409],{},[521,992,993],{},"82",[521,995,996],{},"R",[521,998,999],{},"114",[521,1001,1002],{},"r",[475,1004,1005,1008,1011,1014,1016,1019,1022,1025],{},[521,1006,1007],{},"19",[521,1009,1010],{},"DC3",[521,1012,1013],{},"51",[521,1015,403],{},[521,1017,1018],{},"83",[521,1020,1021],{},"S",[521,1023,1024],{},"115",[521,1026,1027],{},"s",[475,1029,1030,1033,1036,1039,1041,1044,1047,1050],{},[521,1031,1032],{},"20",[521,1034,1035],{},"DC4",[521,1037,1038],{},"52",[521,1040,625],{},[521,1042,1043],{},"84",[521,1045,1046],{},"T",[521,1048,1049],{},"116",[521,1051,1052],{},"t",[475,1054,1055,1058,1061,1064,1066,1069,1072,1075],{},[521,1056,1057],{},"21",[521,1059,1060],{},"NAK",[521,1062,1063],{},"53",[521,1065,651],{},[521,1067,1068],{},"85",[521,1070,1071],{},"U",[521,1073,1074],{},"117",[521,1076,1077],{},"u",[475,1079,1080,1083,1086,1089,1091,1094,1097,1100],{},[521,1081,1082],{},"22",[521,1084,1085],{},"SYN",[521,1087,1088],{},"54",[521,1090,676],{},[521,1092,1093],{},"86",[521,1095,1096],{},"V",[521,1098,1099],{},"118",[521,1101,1102],{},"v",[475,1104,1105,1108,1111,1114,1116,1119,1122,1125],{},[521,1106,1107],{},"23",[521,1109,1110],{},"TB",[521,1112,1113],{},"55",[521,1115,701],{},[521,1117,1118],{},"87",[521,1120,1121],{},"W",[521,1123,1124],{},"119",[521,1126,1127],{},"w",[475,1129,1130,1133,1136,1139,1141,1144,1147,1150],{},[521,1131,1132],{},"24",[521,1134,1135],{},"CAN",[521,1137,1138],{},"56",[521,1140,727],{},[521,1142,1143],{},"88",[521,1145,1146],{},"X",[521,1148,1149],{},"120",[521,1151,1152],{},"x",[475,1154,1155,1158,1161,1164,1166,1169,1172,1175],{},[521,1156,1157],{},"25",[521,1159,1160],{},"EM",[521,1162,1163],{},"57",[521,1165,752],{},[521,1167,1168],{},"89",[521,1170,1171],{},"Y",[521,1173,1174],{},"121",[521,1176,1177],{},"y",[475,1179,1180,1183,1186,1189,1192,1195,1198,1201],{},[521,1181,1182],{},"26",[521,1184,1185],{},"SUB",[521,1187,1188],{},"58",[521,1190,1191],{},":",[521,1193,1194],{},"90",[521,1196,1197],{},"Z",[521,1199,1200],{},"122",[521,1202,1203],{},"z",[475,1205,1206,1209,1212,1215,1217,1220,1223,1226],{},[521,1207,1208],{},"27",[521,1210,1211],{},"ESC",[521,1213,1214],{},"59",[521,1216,387],{},[521,1218,1219],{},"91",[521,1221,1222],{},"[",[521,1224,1225],{},"123",[521,1227,1228],{},"{",[475,1230,1231,1234,1237,1240,1243,1246,1248,1251],{},[521,1232,1233],{},"28",[521,1235,1236],{},"FS",[521,1238,1239],{},"60",[521,1241,1242],{},"\u003C",[521,1244,1245],{},"92",[521,1247,916],{},[521,1249,1250],{},"124",[521,1252,1253],{},"|",[475,1255,1256,1259,1262,1265,1267,1270,1273,1276],{},[521,1257,1258],{},"29",[521,1260,1261],{},"GS",[521,1263,1264],{},"61",[521,1266,377],{},[521,1268,1269],{},"93",[521,1271,1272],{},"]",[521,1274,1275],{},"125",[521,1277,1278],{},"}",[475,1280,1281,1284,1287,1290,1293,1296,1299,1302],{},[521,1282,1283],{},"30",[521,1285,1286],{},"RS",[521,1288,1289],{},"62",[521,1291,1292],{},">",[521,1294,1295],{},"94",[521,1297,1298],{},"^",[521,1300,1301],{},"126",[521,1303,1304],{},"`",[475,1306,1307,1310,1313,1316,1319,1322,1325,1328],{},[521,1308,1309],{},"31",[521,1311,1312],{},"US",[521,1314,1315],{},"63",[521,1317,1318],{},"?",[521,1320,1321],{},"95",[521,1323,1324],{},"_",[521,1326,1327],{},"127",[521,1329,1330],{},"DEL",[19,1332,1333,1334,1337],{},"ASCII 码大致由以下",[481,1335,1336],{},"两部分组","成：",[1339,1340,1341,1348],"ul",{},[154,1342,1343,1344,1347],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[481,1345,1346],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[154,1349,1350,1351,1354],{},"ASCII 打印字符：数字 ",[481,1352,1353],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[292,1356,1358],{"id":1357},"_134转义字符","1.3.4转义字符",[312,1360,1362],{"className":314,"code":1361,"language":316,"meta":30,"style":30},"\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",[318,1363,1364,1369,1385,1399,1405,1419,1425],{"__ignoreMap":30},[321,1365,1366],{"class":323,"line":324},[321,1367,1368],{"class":390},"\u002F\u002F换行符\n",[321,1370,1371,1374,1377,1380,1382],{"class":323,"line":167},[321,1372,1373],{"class":331},"cout ",[321,1375,1376],{"class":327},"\u003C\u003C",[321,1378,1379],{"class":436},"\"hello world\u002Fn\"",[321,1381,387],{"class":331},[321,1383,1384],{"class":390}," \u002F\u002F就等同于如下：\n",[321,1386,1387,1389,1391,1394,1396],{"class":323,"line":200},[321,1388,1373],{"class":331},[321,1390,1376],{"class":327},[321,1392,1393],{"class":436},"\"hello world\"",[321,1395,1376],{"class":327},[321,1397,1398],{"class":331},"endl;\n",[321,1400,1402],{"class":323,"line":1401},4,[321,1403,1404],{"class":390},"\u002F\u002F反斜杠\n",[321,1406,1408,1410,1412,1415,1417],{"class":323,"line":1407},5,[321,1409,1373],{"class":331},[321,1411,1376],{"class":327},[321,1413,1414],{"class":436},"\"\u002F\u002F\"",[321,1416,1376],{"class":327},[321,1418,1398],{"class":331},[321,1420,1422],{"class":323,"line":1421},6,[321,1423,1424],{"class":390},"\u002F\u002F水平制表符\n",[321,1426,1428,1430,1432,1435,1438,1441,1443,1446],{"class":323,"line":1427},7,[321,1429,1373],{"class":331},[321,1431,1376],{"class":327},[321,1433,1434],{"class":436},"\"aaaa",[321,1436,1437],{"class":380},"\\t",[321,1439,1440],{"class":436},"helloworld\"",[321,1442,1376],{"class":327},[321,1444,1445],{"class":331},"endl;",[321,1447,1448],{"class":390}," \u002F\u002F输出窗口时有对齐效果\n",[292,1450,1452],{"id":1451},"_135字符串型","1.3.5字符串型",[19,1454,1455,1456,1458],{},"char 变量名",[321,1457],{},"=\"字符串值\"",[312,1460,1462],{"className":314,"code":1461,"language":316,"meta":30,"style":30},"\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",[318,1463,1464,1469,1474,1479,1484,1498,1511,1516,1522,1534],{"__ignoreMap":30},[321,1465,1466],{"class":323,"line":324},[321,1467,1468],{"class":390},"\u002F\u002Fc风格字符串\n",[321,1470,1471],{"class":323,"line":167},[321,1472,1473],{"class":390},"\u002F\u002F注意事项：\n",[321,1475,1476],{"class":323,"line":200},[321,1477,1478],{"class":390},"\u002F\u002F1.char字符串名[]\n",[321,1480,1481],{"class":323,"line":1401},[321,1482,1483],{"class":390},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[321,1485,1486,1488,1491,1493,1495],{"class":323,"line":1407},[321,1487,428],{"class":327},[321,1489,1490],{"class":331}," str[]",[321,1492,377],{"class":327},[321,1494,1393],{"class":436},[321,1496,1497],{"class":331},";\n",[321,1499,1500,1502,1504,1507,1509],{"class":323,"line":1421},[321,1501,1373],{"class":331},[321,1503,1376],{"class":327},[321,1505,1506],{"class":331},"str",[321,1508,1376],{"class":327},[321,1510,1398],{"class":331},[321,1512,1513],{"class":323,"line":1427},[321,1514,1515],{"class":390},"\u002F\u002Fc++风格字符串\n",[321,1517,1519],{"class":323,"line":1518},8,[321,1520,1521],{"class":390},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[321,1523,1525,1528,1530,1532],{"class":323,"line":1524},9,[321,1526,1527],{"class":331},"string str2",[321,1529,377],{"class":327},[321,1531,1393],{"class":436},[321,1533,1497],{"class":331},[321,1535,1537,1539,1541,1544,1546],{"class":323,"line":1536},10,[321,1538,1373],{"class":331},[321,1540,1376],{"class":327},[321,1542,1543],{"class":331},"str2",[321,1545,1376],{"class":327},[321,1547,1398],{"class":331},[292,1549,1551],{"id":1550},"_136布尔类型bool","1.3.6布尔类型bool",[312,1553,1555],{"className":314,"code":1554,"language":316,"meta":30,"style":30},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[318,1556,1557,1572],{"__ignoreMap":30},[321,1558,1559,1562,1565,1567,1570],{"class":323,"line":324},[321,1560,1561],{"class":327},"bool",[321,1563,1564],{"class":331}," flag",[321,1566,377],{"class":327},[321,1568,1569],{"class":380},"true",[321,1571,1497],{"class":331},[321,1573,1574,1577,1580,1583,1585,1587],{"class":323,"line":167},[321,1575,1576],{"class":331},"cout",[321,1578,1579],{"class":327},"\u003C\u003Csizeof",[321,1581,1582],{"class":331},"(flag)",[321,1584,1376],{"class":327},[321,1586,1445],{"class":331},[321,1588,1589],{"class":390}," \u002F\u002F查看布尔占内存空间\n",[14,1591,1593],{"id":1592},"_14键盘输入cin","1.4键盘输入cin",[312,1595,1597],{"className":314,"code":1596,"language":316,"meta":30,"style":30},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[318,1598,1599,1612,1629,1640],{"__ignoreMap":30},[321,1600,1601,1603,1606,1608,1610],{"class":323,"line":324},[321,1602,335],{"class":327},[321,1604,1605],{"class":331}," a",[321,1607,377],{"class":327},[321,1609,523],{"class":380},[321,1611,1497],{"class":331},[321,1613,1614,1616,1618,1621,1623,1625,1627],{"class":323,"line":167},[321,1615,1576],{"class":331},[321,1617,1376],{"class":327},[321,1619,1620],{"class":436},"\"请给整型变量a赋值\"",[321,1622,1376],{"class":327},[321,1624,570],{"class":331},[321,1626,1376],{"class":327},[321,1628,1398],{"class":331},[321,1630,1631,1634,1637],{"class":323,"line":200},[321,1632,1633],{"class":331},"cin ",[321,1635,1636],{"class":327},">>",[321,1638,1639],{"class":331}," a;\n",[321,1641,1642,1644,1646,1649,1652,1654,1656],{"class":323,"line":1401},[321,1643,1373],{"class":331},[321,1645,1376],{"class":327},[321,1647,1648],{"class":436}," \"整型变量a=\"",[321,1650,1651],{"class":327}," \u003C\u003C",[321,1653,570],{"class":331},[321,1655,1376],{"class":327},[321,1657,1398],{"class":331},[14,1659,1661],{"id":1660},"_15运算符","1.5运算符",[292,1663,1665],{"id":1664},"_151算术运算符","1.5.1算术运算符",[19,1667,1668,1671],{},[28,1669],{"alt":30,"src":1670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[151,1673,1674,1677,1680],{},[154,1675,1676],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[154,1678,1679],{},"两个小数不可以做取模运算",[154,1681,1682],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[292,1684,1686],{"id":1685},"_152赋值运算符","1.5.2赋值运算符",[19,1688,1689],{},[28,1690],{"alt":30,"src":1691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[292,1693,1695],{"id":1694},"_153比较运算符","1.5.3比较运算符",[19,1697,1698],{},[28,1699],{"alt":30,"src":1700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[292,1702,1704],{"id":1703},"_154逻辑运算符","1.5.4逻辑运算符",[19,1706,1707],{},[28,1708],{"alt":30,"src":1709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1711,1713],{"id":1712},"_16程序流程结构","1.6程序流程结构",[292,1715,1717],{"id":1716},"_161选择结构","1.6.1选择结构",[151,1719,1720],{},[154,1721,1722],{},"if语句\n单行、多行、多条件if语句",[312,1724,1726],{"className":314,"code":1725,"language":316,"meta":30,"style":30},"\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",[318,1727,1728,1733,1748,1753,1767,1772,1777,1786,1799,1803,1816,1821,1827,1832,1846,1851,1857,1878,1883,1897,1902,1931,1936,1953,1958,1963,1968,1982,1987],{"__ignoreMap":30},[321,1729,1730],{"class":323,"line":324},[321,1731,1732],{"class":390},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[321,1734,1735,1738,1741,1743,1746],{"class":323,"line":167},[321,1736,1737],{"class":327},"if",[321,1739,1740],{"class":331},"(score",[321,1742,1292],{"class":327},[321,1744,1745],{"class":380},"600",[321,1747,338],{"class":331},[321,1749,1750],{"class":323,"line":200},[321,1751,1752],{"class":331},"{\n",[321,1754,1755,1758,1760,1763,1765],{"class":323,"line":1401},[321,1756,1757],{"class":331},"    cout",[321,1759,1376],{"class":327},[321,1761,1762],{"class":436},"'这是单行if语句'",[321,1764,1376],{"class":327},[321,1766,1398],{"class":331},[321,1768,1769],{"class":323,"line":1407},[321,1770,1771],{"class":331},"}\n",[321,1773,1774],{"class":323,"line":1421},[321,1775,1776],{"class":390},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[321,1778,1779,1781,1783],{"class":323,"line":1427},[321,1780,1633],{"class":331},[321,1782,1636],{"class":327},[321,1784,1785],{"class":331}," score\n",[321,1787,1788,1790,1792,1795,1797],{"class":323,"line":1518},[321,1789,1737],{"class":327},[321,1791,1740],{"class":331},[321,1793,1794],{"class":327},"\u003C=",[321,1796,1745],{"class":380},[321,1798,338],{"class":331},[321,1800,1801],{"class":323,"line":1524},[321,1802,1752],{"class":331},[321,1804,1805,1807,1809,1812,1814],{"class":323,"line":1536},[321,1806,1757],{"class":331},[321,1808,1636],{"class":327},[321,1810,1811],{"class":436},"\"小于等于600\"",[321,1813,1376],{"class":327},[321,1815,1398],{"class":331},[321,1817,1819],{"class":323,"line":1818},11,[321,1820,1771],{"class":331},[321,1822,1824],{"class":323,"line":1823},12,[321,1825,1826],{"class":327},"else\n",[321,1828,1830],{"class":323,"line":1829},13,[321,1831,1752],{"class":331},[321,1833,1835,1837,1839,1842,1844],{"class":323,"line":1834},14,[321,1836,1757],{"class":331},[321,1838,1636],{"class":327},[321,1840,1841],{"class":436},"\"大于600\"",[321,1843,1636],{"class":327},[321,1845,1398],{"class":331},[321,1847,1849],{"class":323,"line":1848},15,[321,1850,1771],{"class":331},[321,1852,1854],{"class":323,"line":1853},16,[321,1855,1856],{"class":390},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[321,1858,1860,1862,1865,1867,1869,1872,1874,1876],{"class":323,"line":1859},17,[321,1861,1737],{"class":327},[321,1863,1864],{"class":331}," (",[321,1866,523],{"class":380},[321,1868,1242],{"class":327},[321,1870,1871],{"class":331},"num",[321,1873,1242],{"class":327},[321,1875,643],{"class":380},[321,1877,338],{"class":331},[321,1879,1881],{"class":323,"line":1880},18,[321,1882,1752],{"class":331},[321,1884,1886,1888,1890,1893,1895],{"class":323,"line":1885},19,[321,1887,1757],{"class":331},[321,1889,1376],{"class":327},[321,1891,1892],{"class":436},"\"小于100\"",[321,1894,1376],{"class":327},[321,1896,1398],{"class":331},[321,1898,1900],{"class":323,"line":1899},20,[321,1901,1771],{"class":331},[321,1903,1905,1908,1911,1914,1917,1919,1922,1924,1926,1929],{"class":323,"line":1904},21,[321,1906,1907],{"class":327},"else",[321,1909,1910],{"class":327}," if",[321,1912,1913],{"class":331}," (nmu",[321,1915,1916],{"class":327},">=",[321,1918,643],{"class":380},[321,1920,1921],{"class":327},"&&",[321,1923,1871],{"class":331},[321,1925,1242],{"class":327},[321,1927,1928],{"class":380},"200",[321,1930,338],{"class":331},[321,1932,1934],{"class":323,"line":1933},22,[321,1935,1752],{"class":331},[321,1937,1939,1941,1943,1946,1948,1950],{"class":323,"line":1938},23,[321,1940,1757],{"class":331},[321,1942,1376],{"class":327},[321,1944,1945],{"class":436},"\"不小于100且小于200\"",[321,1947,1376],{"class":327},[321,1949,1445],{"class":331},[321,1951,1952],{"class":390}," \u002F\u002F可以无限else if,python中是elif：\n",[321,1954,1956],{"class":323,"line":1955},24,[321,1957,1771],{"class":331},[321,1959,1961],{"class":323,"line":1960},25,[321,1962,1826],{"class":327},[321,1964,1966],{"class":323,"line":1965},26,[321,1967,1752],{"class":331},[321,1969,1971,1973,1975,1978,1980],{"class":323,"line":1970},27,[321,1972,1757],{"class":331},[321,1974,1376],{"class":327},[321,1976,1977],{"class":436},"\"不小于200\"",[321,1979,1376],{"class":327},[321,1981,1398],{"class":331},[321,1983,1985],{"class":323,"line":1984},28,[321,1986,1771],{"class":331},[321,1988,1990],{"class":323,"line":1989},29,[321,1991,1992],{"class":390},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[151,1994,1995],{"start":167},[154,1996,1997],{},"三目运算符",[312,1999,2001],{"className":314,"code":2000,"language":316,"meta":30,"style":30},"\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",[318,2002,2003,2008,2013,2039,2061,2078,2083,2106,2121],{"__ignoreMap":30},[321,2004,2005],{"class":323,"line":324},[321,2006,2007],{"class":390},"\u002F\u002F创建三个变量a,b,c\n",[321,2009,2010],{"class":323,"line":167},[321,2011,2012],{"class":390},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[321,2014,2015,2017,2019,2021,2023,2026,2028,2030,2033,2035,2037],{"class":323,"line":200},[321,2016,335],{"class":327},[321,2018,1605],{"class":331},[321,2020,377],{"class":327},[321,2022,1032],{"class":380},[321,2024,2025],{"class":331},",b",[321,2027,377],{"class":327},[321,2029,778],{"class":380},[321,2031,2032],{"class":331},",c",[321,2034,377],{"class":327},[321,2036,523],{"class":380},[321,2038,1497],{"class":331},[321,2040,2041,2043,2045,2048,2050,2052,2054,2056,2058],{"class":323,"line":1401},[321,2042,620],{"class":331},[321,2044,377],{"class":327},[321,2046,2047],{"class":331},"(a",[321,2049,1292],{"class":327},[321,2051,595],{"class":331},[321,2053,1318],{"class":327},[321,2055,570],{"class":331},[321,2057,1191],{"class":327},[321,2059,2060],{"class":331},"b)\n",[321,2062,2063,2065,2067,2070,2072,2074,2076],{"class":323,"line":1407},[321,2064,1576],{"class":331},[321,2066,1376],{"class":327},[321,2068,2069],{"class":436},"\"c=\"",[321,2071,1376],{"class":327},[321,2073,620],{"class":331},[321,2075,1376],{"class":327},[321,2077,1398],{"class":331},[321,2079,2080],{"class":323,"line":1421},[321,2081,2082],{"class":390},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[321,2084,2085,2087,2089,2091,2093,2095,2097,2100,2102,2104],{"class":323,"line":1427},[321,2086,2047],{"class":331},[321,2088,1292],{"class":327},[321,2090,595],{"class":331},[321,2092,1318],{"class":327},[321,2094,570],{"class":331},[321,2096,1191],{"class":327},[321,2098,2099],{"class":331},"b)",[321,2101,377],{"class":327},[321,2103,643],{"class":380},[321,2105,1497],{"class":331},[321,2107,2108,2110,2112,2114,2116,2118],{"class":323,"line":1518},[321,2109,1576],{"class":331},[321,2111,1376],{"class":327},[321,2113,570],{"class":331},[321,2115,1376],{"class":327},[321,2117,1445],{"class":331},[321,2119,2120],{"class":390}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[321,2122,2123,2125,2127,2129,2131,2133],{"class":323,"line":1524},[321,2124,1576],{"class":331},[321,2126,1376],{"class":327},[321,2128,595],{"class":331},[321,2130,1376],{"class":327},[321,2132,1445],{"class":331},[321,2134,2135],{"class":390}," \u002F\u002F10   a>b,b还是原值\n",[151,2137,2138],{"start":200},[154,2139,2140],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[312,2142,2144],{"className":314,"code":2143,"language":316,"meta":30,"style":30},"\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",[318,2145,2146,2151,2159,2173,2183,2187,2201,2214,2224,2232,2237,2262,2283,2305,2326,2348,2369,2389,2394],{"__ignoreMap":30},[321,2147,2148],{"class":323,"line":324},[321,2149,2150],{"class":390},"\u002F\u002F案例-电影打分\n",[321,2152,2153,2156],{"class":323,"line":167},[321,2154,2155],{"class":327},"#include",[321,2157,2158],{"class":436},"\u003Ciostream>\n",[321,2160,2161,2164,2167,2171],{"class":323,"line":200},[321,2162,2163],{"class":327},"using",[321,2165,2166],{"class":327}," namespace",[321,2168,2170],{"class":2169},"sScJk"," std",[321,2172,1497],{"class":331},[321,2174,2175,2177,2180],{"class":323,"line":1401},[321,2176,335],{"class":327},[321,2178,2179],{"class":2169}," main",[321,2181,2182],{"class":331},"()\n",[321,2184,2185],{"class":323,"line":1407},[321,2186,1752],{"class":331},[321,2188,2189,2192,2195,2197,2199],{"class":323,"line":1421},[321,2190,2191],{"class":327},"    int",[321,2193,2194],{"class":331}," score",[321,2196,377],{"class":327},[321,2198,523],{"class":380},[321,2200,1497],{"class":331},[321,2202,2203,2205,2207,2210,2212],{"class":323,"line":1427},[321,2204,1757],{"class":331},[321,2206,1376],{"class":327},[321,2208,2209],{"class":436},"\"电影打分：\"",[321,2211,1376],{"class":327},[321,2213,1398],{"class":331},[321,2215,2216,2219,2221],{"class":323,"line":1518},[321,2217,2218],{"class":331},"    cin",[321,2220,1636],{"class":327},[321,2222,2223],{"class":331},"score;\n",[321,2225,2226,2229],{"class":323,"line":1524},[321,2227,2228],{"class":327},"    switch",[321,2230,2231],{"class":331},"(score)\n",[321,2233,2234],{"class":323,"line":1536},[321,2235,2236],{"class":331},"    {\n",[321,2238,2239,2242,2245,2248,2250,2253,2255,2257,2260],{"class":323,"line":1818},[321,2240,2241],{"class":327},"        case",[321,2243,2244],{"class":380}," 10",[321,2246,2247],{"class":331},":cout",[321,2249,1376],{"class":327},[321,2251,2252],{"class":436},"\"经典\"",[321,2254,1376],{"class":327},[321,2256,1445],{"class":331},[321,2258,2259],{"class":327},"break",[321,2261,1497],{"class":331},[321,2263,2264,2266,2269,2271,2273,2275,2277,2279,2281],{"class":323,"line":1823},[321,2265,2241],{"class":327},[321,2267,2268],{"class":380}," 9",[321,2270,2247],{"class":331},[321,2272,1376],{"class":327},[321,2274,2252],{"class":436},[321,2276,1376],{"class":327},[321,2278,1445],{"class":331},[321,2280,2259],{"class":327},[321,2282,1497],{"class":331},[321,2284,2285,2287,2290,2292,2294,2297,2299,2301,2303],{"class":323,"line":1829},[321,2286,2241],{"class":327},[321,2288,2289],{"class":380}," 8",[321,2291,2247],{"class":331},[321,2293,1376],{"class":327},[321,2295,2296],{"class":436},"\"非常好\"",[321,2298,1376],{"class":327},[321,2300,1445],{"class":331},[321,2302,2259],{"class":327},[321,2304,1497],{"class":331},[321,2306,2307,2309,2312,2314,2316,2318,2320,2322,2324],{"class":323,"line":1834},[321,2308,2241],{"class":327},[321,2310,2311],{"class":380}," 7",[321,2313,2247],{"class":331},[321,2315,1376],{"class":327},[321,2317,2296],{"class":436},[321,2319,1376],{"class":327},[321,2321,1445],{"class":331},[321,2323,2259],{"class":327},[321,2325,1497],{"class":331},[321,2327,2328,2330,2333,2335,2337,2340,2342,2344,2346],{"class":323,"line":1848},[321,2329,2241],{"class":327},[321,2331,2332],{"class":380}," 6",[321,2334,2247],{"class":331},[321,2336,1376],{"class":327},[321,2338,2339],{"class":436},"\"一般\"",[321,2341,1376],{"class":327},[321,2343,1445],{"class":331},[321,2345,2259],{"class":327},[321,2347,1497],{"class":331},[321,2349,2350,2352,2355,2357,2359,2361,2363,2365,2367],{"class":323,"line":1853},[321,2351,2241],{"class":327},[321,2353,2354],{"class":380}," 5",[321,2356,2247],{"class":331},[321,2358,1376],{"class":327},[321,2360,2339],{"class":436},[321,2362,1376],{"class":327},[321,2364,1445],{"class":331},[321,2366,2259],{"class":327},[321,2368,1497],{"class":331},[321,2370,2371,2374,2376,2378,2381,2383,2385,2387],{"class":323,"line":1859},[321,2372,2373],{"class":327},"        default",[321,2375,2247],{"class":331},[321,2377,1376],{"class":327},[321,2379,2380],{"class":436},"\"烂片\"",[321,2382,1376],{"class":327},[321,2384,1445],{"class":331},[321,2386,2259],{"class":327},[321,2388,1497],{"class":331},[321,2390,2391],{"class":323,"line":1880},[321,2392,2393],{"class":331},"    }\n",[321,2395,2396],{"class":323,"line":1885},[321,2397,1771],{"class":331},[19,2399,2400],{},"if和switch区别：",[1339,2402,2403,2406],{},[154,2404,2405],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[154,2407,2408],{},"switch优点：结构清晰，执行效率高",[292,2410,2412],{"id":2411},"_162循环结构","1.6.2循环结构",[151,2414,2415],{},[154,2416,2417],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[312,2419,2421],{"className":314,"code":2420,"language":316,"meta":30,"style":30},"\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",[318,2422,2423,2428,2436,2440,2453,2467,2471,2491,2501,2505,2517],{"__ignoreMap":30},[321,2424,2425],{"class":323,"line":324},[321,2426,2427],{"class":390},"\u002F\u002F打印0-9数字\n",[321,2429,2430,2432,2434],{"class":323,"line":167},[321,2431,335],{"class":327},[321,2433,2179],{"class":2169},[321,2435,2182],{"class":331},[321,2437,2438],{"class":323,"line":200},[321,2439,1752],{"class":331},[321,2441,2442,2444,2447,2449,2451],{"class":323,"line":1401},[321,2443,2191],{"class":327},[321,2445,2446],{"class":331}," num",[321,2448,377],{"class":327},[321,2450,523],{"class":380},[321,2452,1497],{"class":331},[321,2454,2455,2458,2461,2463,2465],{"class":323,"line":1407},[321,2456,2457],{"class":327},"    while",[321,2459,2460],{"class":331},"(num",[321,2462,1242],{"class":327},[321,2464,778],{"class":380},[321,2466,338],{"class":331},[321,2468,2469],{"class":323,"line":1421},[321,2470,2236],{"class":331},[321,2472,2473,2476,2479,2481,2483,2485,2488],{"class":323,"line":1427},[321,2474,2475],{"class":2169},"       std",[321,2477,2478],{"class":331},"::cout",[321,2480,1376],{"class":327},[321,2482,1871],{"class":331},[321,2484,1376],{"class":327},[321,2486,2487],{"class":2169},"std",[321,2489,2490],{"class":331},"::endl;\n",[321,2492,2493,2496,2499],{"class":323,"line":1518},[321,2494,2495],{"class":331},"        num",[321,2497,2498],{"class":327},"++",[321,2500,1497],{"class":331},[321,2502,2503],{"class":323,"line":1524},[321,2504,2393],{"class":331},[321,2506,2507,2510,2512,2515],{"class":323,"line":1536},[321,2508,2509],{"class":2169},"    system",[321,2511,332],{"class":331},[321,2513,2514],{"class":436},"\"pause\"",[321,2516,338],{"class":331},[321,2518,2519],{"class":323,"line":1818},[321,2520,1771],{"class":331},[19,2522,2523],{},"注意：写好循环条件，避免死循环情况",[312,2525,2527],{"className":314,"code":2526,"language":316,"meta":30,"style":30},"\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",[318,2528,2529,2534,2541,2548,2558,2566,2570,2575,2602,2607,2612,2620,2647,2652,2657,2670,2680,2684,2694,2699,2712,2717,2731,2736,2751,2755,2768,2772,2777,2781,2795,2803,2808,2814,2820,2825],{"__ignoreMap":30},[321,2530,2531],{"class":323,"line":324},[321,2532,2533],{"class":390},"\u002F\u002F循环结构-猜数字\n",[321,2535,2536,2538],{"class":323,"line":167},[321,2537,2155],{"class":327},[321,2539,2540],{"class":436}," \u003Ciostream>\n",[321,2542,2543,2545],{"class":323,"line":200},[321,2544,2155],{"class":327},[321,2546,2547],{"class":436}," \u003Cctime>\n",[321,2549,2550,2552,2554,2556],{"class":323,"line":1401},[321,2551,2163],{"class":327},[321,2553,2166],{"class":327},[321,2555,2170],{"class":2169},[321,2557,1497],{"class":331},[321,2559,2560,2562,2564],{"class":323,"line":1407},[321,2561,335],{"class":327},[321,2563,2179],{"class":2169},[321,2565,2182],{"class":331},[321,2567,2568],{"class":323,"line":1421},[321,2569,1752],{"class":331},[321,2571,2572],{"class":323,"line":1427},[321,2573,2574],{"class":390},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[321,2576,2577,2580,2583,2586,2589,2591,2594,2596,2599],{"class":323,"line":1518},[321,2578,2579],{"class":2169},"    srand",[321,2581,2582],{"class":331},"((",[321,2584,2585],{"class":327},"unsigned",[321,2587,2588],{"class":327}," int",[321,2590,761],{"class":331},[321,2592,2593],{"class":2169},"time",[321,2595,332],{"class":331},[321,2597,2598],{"class":380},"NULL",[321,2600,2601],{"class":331},"));\n",[321,2603,2604],{"class":323,"line":1524},[321,2605,2606],{"emptyLinePlaceholder":251},"\n",[321,2608,2609],{"class":323,"line":1536},[321,2610,2611],{"class":390},"    \u002F\u002F1.系统生成随机数\n",[321,2613,2614,2617],{"class":323,"line":1818},[321,2615,2616],{"class":390},"    \u002F\u002Frand()%100",[321,2618,2619],{"class":390}," \u002F\u002F生成0-99的随机数\n",[321,2621,2622,2624,2626,2628,2631,2634,2636,2638,2640,2642,2644],{"class":323,"line":1823},[321,2623,2191],{"class":327},[321,2625,2446],{"class":331},[321,2627,377],{"class":327},[321,2629,2630],{"class":2169},"rand",[321,2632,2633],{"class":331},"()",[321,2635,660],{"class":327},[321,2637,643],{"class":380},[321,2639,813],{"class":327},[321,2641,549],{"class":380},[321,2643,387],{"class":331},[321,2645,2646],{"class":390}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[321,2648,2649],{"class":323,"line":1829},[321,2650,2651],{"class":390},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[321,2653,2654],{"class":323,"line":1834},[321,2655,2656],{"class":390},"    \u002F\u002F2.玩家猜测\n",[321,2658,2659,2661,2664,2666,2668],{"class":323,"line":1848},[321,2660,2191],{"class":327},[321,2662,2663],{"class":331}," val",[321,2665,377],{"class":327},[321,2667,523],{"class":380},[321,2669,1497],{"class":331},[321,2671,2672,2674,2676,2678],{"class":323,"line":1853},[321,2673,2457],{"class":327},[321,2675,1864],{"class":331},[321,2677,549],{"class":380},[321,2679,338],{"class":331},[321,2681,2682],{"class":323,"line":1859},[321,2683,2236],{"class":331},[321,2685,2686,2689,2691],{"class":323,"line":1880},[321,2687,2688],{"class":331},"        cin",[321,2690,1636],{"class":327},[321,2692,2693],{"class":331},"val;\n",[321,2695,2696],{"class":323,"line":1885},[321,2697,2698],{"class":390},"        \u002F\u002F3.判断玩家猜测\n",[321,2700,2701,2704,2707,2709],{"class":323,"line":1899},[321,2702,2703],{"class":327},"        if",[321,2705,2706],{"class":331},"(val",[321,2708,1242],{"class":327},[321,2710,2711],{"class":331},"num) \n",[321,2713,2714],{"class":323,"line":1904},[321,2715,2716],{"class":331},"        {\n",[321,2718,2719,2722,2724,2727,2729],{"class":323,"line":1933},[321,2720,2721],{"class":331},"            cout",[321,2723,1376],{"class":327},[321,2725,2726],{"class":436},"\"猜小了！\"",[321,2728,1376],{"class":327},[321,2730,1398],{"class":331},[321,2732,2733],{"class":323,"line":1938},[321,2734,2735],{"class":331},"        }\n",[321,2737,2738,2741,2743,2746,2748],{"class":323,"line":1955},[321,2739,2740],{"class":327},"        else",[321,2742,1910],{"class":327},[321,2744,2745],{"class":331}," (val",[321,2747,1292],{"class":327},[321,2749,2750],{"class":331},"num)\n",[321,2752,2753],{"class":323,"line":1960},[321,2754,2716],{"class":331},[321,2756,2757,2759,2761,2764,2766],{"class":323,"line":1965},[321,2758,2721],{"class":331},[321,2760,1376],{"class":327},[321,2762,2763],{"class":436},"\"猜大了！\"",[321,2765,1376],{"class":327},[321,2767,1398],{"class":331},[321,2769,2770],{"class":323,"line":1970},[321,2771,2735],{"class":331},[321,2773,2774],{"class":323,"line":1984},[321,2775,2776],{"class":327},"        else\n",[321,2778,2779],{"class":323,"line":1989},[321,2780,2716],{"class":331},[321,2782,2784,2786,2788,2791,2793],{"class":323,"line":2783},30,[321,2785,2721],{"class":331},[321,2787,1376],{"class":327},[321,2789,2790],{"class":436},"\"猜对了！\"",[321,2792,1376],{"class":327},[321,2794,1398],{"class":331},[321,2796,2798,2801],{"class":323,"line":2797},31,[321,2799,2800],{"class":327},"            break",[321,2802,1497],{"class":331},[321,2804,2806],{"class":323,"line":2805},32,[321,2807,2735],{"class":331},[321,2809,2811],{"class":323,"line":2810},33,[321,2812,2813],{"class":390},"        \u002F\u002F猜对 退出游戏\n",[321,2815,2817],{"class":323,"line":2816},34,[321,2818,2819],{"class":390},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[321,2821,2823],{"class":323,"line":2822},35,[321,2824,2393],{"class":331},[321,2826,2828],{"class":323,"line":2827},36,[321,2829,1771],{"class":331},[151,2831,2832],{"start":167},[154,2833,2834,2835,2838],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[481,2836,2837],{},"do...while会先执行一次循环语句","，在判断循环语句",[312,2840,2842],{"className":314,"code":2841,"language":316,"meta":30,"style":30},"\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",[318,2843,2844,2849,2857,2861,2873,2881,2885,2902,2909,2913,2926,2936],{"__ignoreMap":30},[321,2845,2846],{"class":323,"line":324},[321,2847,2848],{"class":390},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[321,2850,2851,2853,2855],{"class":323,"line":167},[321,2852,335],{"class":327},[321,2854,2179],{"class":2169},[321,2856,2182],{"class":331},[321,2858,2859],{"class":323,"line":200},[321,2860,1752],{"class":331},[321,2862,2863,2865,2867,2869,2871],{"class":323,"line":1401},[321,2864,2191],{"class":327},[321,2866,2446],{"class":331},[321,2868,377],{"class":327},[321,2870,523],{"class":380},[321,2872,1497],{"class":331},[321,2874,2875,2878],{"class":323,"line":1407},[321,2876,2877],{"class":327},"    do",[321,2879,2880],{"class":331}," \n",[321,2882,2883],{"class":323,"line":1421},[321,2884,2236],{"class":331},[321,2886,2887,2890,2892,2894,2896,2898,2900],{"class":323,"line":1427},[321,2888,2889],{"class":2169},"        std",[321,2891,2478],{"class":331},[321,2893,1376],{"class":327},[321,2895,1871],{"class":331},[321,2897,1376],{"class":327},[321,2899,2487],{"class":2169},[321,2901,2490],{"class":331},[321,2903,2904,2906],{"class":323,"line":1518},[321,2905,2495],{"class":331},[321,2907,2908],{"class":327},"++\n",[321,2910,2911],{"class":323,"line":1524},[321,2912,2393],{"class":331},[321,2914,2915,2917,2919,2921,2923],{"class":323,"line":1536},[321,2916,2457],{"class":327},[321,2918,2460],{"class":331},[321,2920,1242],{"class":327},[321,2922,778],{"class":380},[321,2924,2925],{"class":331},");\n",[321,2927,2928,2930,2932,2934],{"class":323,"line":1818},[321,2929,2509],{"class":2169},[321,2931,332],{"class":331},[321,2933,2514],{"class":436},[321,2935,2925],{"class":331},[321,2937,2938],{"class":323,"line":1823},[321,2939,1771],{"class":331},[19,2941,2942],{},"案例-水仙花数",[19,2944,2945],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,2947,2948],{},"例如：1^3+5^3+3^3=153",[19,2950,2951],{},"请用do...while语句，求出所有3位数的水仙花数",[312,2953,2955],{"className":314,"code":2954,"language":316,"meta":30,"style":30},"#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",[318,2956,2957,2963,2973,2981,2985,2990,3002,3008,3012,3017,3033,3049,3065,3080,3099,3114,3162,3166,3178,3182,3190,3194,3208],{"__ignoreMap":30},[321,2958,2959,2961],{"class":323,"line":324},[321,2960,2155],{"class":327},[321,2962,2540],{"class":436},[321,2964,2965,2967,2969,2971],{"class":323,"line":167},[321,2966,2163],{"class":327},[321,2968,2166],{"class":327},[321,2970,2170],{"class":2169},[321,2972,1497],{"class":331},[321,2974,2975,2977,2979],{"class":323,"line":200},[321,2976,335],{"class":327},[321,2978,2179],{"class":2169},[321,2980,2182],{"class":331},[321,2982,2983],{"class":323,"line":1401},[321,2984,1752],{"class":331},[321,2986,2987],{"class":323,"line":1407},[321,2988,2989],{"class":390},"    \u002F\u002F1.先打印所有三位数字\n",[321,2991,2992,2994,2996,2998,3000],{"class":323,"line":1421},[321,2993,2191],{"class":327},[321,2995,2446],{"class":331},[321,2997,377],{"class":327},[321,2999,643],{"class":380},[321,3001,1497],{"class":331},[321,3003,3004,3006],{"class":323,"line":1427},[321,3005,2877],{"class":327},[321,3007,2880],{"class":331},[321,3009,3010],{"class":323,"line":1518},[321,3011,2236],{"class":331},[321,3013,3014],{"class":323,"line":1524},[321,3015,3016],{"class":390},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[321,3018,3019,3022,3024,3026,3028,3030],{"class":323,"line":1536},[321,3020,3021],{"class":327},"        int",[321,3023,1605],{"class":331},[321,3025,377],{"class":327},[321,3027,523],{"class":380},[321,3029,387],{"class":331},[321,3031,3032],{"class":390}," \u002F\u002F个位\n",[321,3034,3035,3037,3040,3042,3044,3046],{"class":323,"line":1818},[321,3036,3021],{"class":327},[321,3038,3039],{"class":331}," b",[321,3041,377],{"class":327},[321,3043,523],{"class":380},[321,3045,387],{"class":331},[321,3047,3048],{"class":390}," \u002F\u002F十位\n",[321,3050,3051,3053,3056,3058,3060,3062],{"class":323,"line":1823},[321,3052,3021],{"class":327},[321,3054,3055],{"class":331}," c",[321,3057,377],{"class":327},[321,3059,523],{"class":380},[321,3061,387],{"class":331},[321,3063,3064],{"class":390}," \u002F\u002F百位\n",[321,3066,3067,3070,3072,3074,3076,3078],{"class":323,"line":1829},[321,3068,3069],{"class":331},"        a",[321,3071,377],{"class":327},[321,3073,1871],{"class":331},[321,3075,660],{"class":327},[321,3077,778],{"class":380},[321,3079,1497],{"class":331},[321,3081,3082,3085,3087,3089,3091,3093,3095,3097],{"class":323,"line":1834},[321,3083,3084],{"class":331},"        b",[321,3086,377],{"class":327},[321,3088,1871],{"class":331},[321,3090,916],{"class":327},[321,3092,778],{"class":380},[321,3094,660],{"class":327},[321,3096,778],{"class":380},[321,3098,1497],{"class":331},[321,3100,3101,3104,3106,3108,3110,3112],{"class":323,"line":1848},[321,3102,3103],{"class":331},"        c",[321,3105,377],{"class":327},[321,3107,1871],{"class":331},[321,3109,916],{"class":327},[321,3111,643],{"class":380},[321,3113,1497],{"class":331},[321,3115,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3153,3156,3159],{"class":323,"line":1853},[321,3117,2703],{"class":327},[321,3119,2047],{"class":331},[321,3121,787],{"class":327},[321,3123,570],{"class":331},[321,3125,787],{"class":327},[321,3127,570],{"class":331},[321,3129,813],{"class":327},[321,3131,595],{"class":331},[321,3133,787],{"class":327},[321,3135,595],{"class":331},[321,3137,787],{"class":327},[321,3139,595],{"class":331},[321,3141,813],{"class":327},[321,3143,620],{"class":331},[321,3145,787],{"class":327},[321,3147,620],{"class":331},[321,3149,787],{"class":327},[321,3151,3152],{"class":331},"c ",[321,3154,3155],{"class":327},"==",[321,3157,3158],{"class":331}," num)",[321,3160,3161],{"class":390}," \u002F\u002F如果是水仙花数，才打印\n",[321,3163,3164],{"class":323,"line":1859},[321,3165,2716],{"class":331},[321,3167,3168,3170,3172,3174,3176],{"class":323,"line":1880},[321,3169,2721],{"class":331},[321,3171,1376],{"class":327},[321,3173,1871],{"class":331},[321,3175,1376],{"class":327},[321,3177,1398],{"class":331},[321,3179,3180],{"class":323,"line":1885},[321,3181,2735],{"class":331},[321,3183,3184,3186,3188],{"class":323,"line":1899},[321,3185,2495],{"class":331},[321,3187,2498],{"class":327},[321,3189,1497],{"class":331},[321,3191,3192],{"class":323,"line":1904},[321,3193,2393],{"class":331},[321,3195,3196,3198,3201,3203,3206],{"class":323,"line":1933},[321,3197,2457],{"class":327},[321,3199,3200],{"class":331}," (num ",[321,3202,1242],{"class":327},[321,3204,3205],{"class":380}," 1000",[321,3207,2925],{"class":331},[321,3209,3210],{"class":323,"line":1938},[321,3211,1771],{"class":331},[151,3213,3214],{"start":200},[154,3215,3216],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[312,3218,3220],{"className":314,"code":3219,"language":316,"meta":30,"style":30},"\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",[318,3221,3222,3227,3256,3260,3272,3276,3281,3292,3299,3303,3317,3321,3328,3332,3344,3353],{"__ignoreMap":30},[321,3223,3224],{"class":323,"line":324},[321,3225,3226],{"class":390},"\u002F\u002F从数字0-9打印\n",[321,3228,3229,3232,3234,3236,3239,3241,3243,3246,3248,3250,3252,3254],{"class":323,"line":167},[321,3230,3231],{"class":327},"for",[321,3233,332],{"class":331},[321,3235,335],{"class":327},[321,3237,3238],{"class":331}," i",[321,3240,377],{"class":327},[321,3242,523],{"class":380},[321,3244,3245],{"class":331},";i",[321,3247,1242],{"class":327},[321,3249,778],{"class":380},[321,3251,3245],{"class":331},[321,3253,2498],{"class":327},[321,3255,338],{"class":331},[321,3257,3258],{"class":323,"line":200},[321,3259,1752],{"class":331},[321,3261,3262,3264,3266,3268,3270],{"class":323,"line":1401},[321,3263,1757],{"class":331},[321,3265,1376],{"class":327},[321,3267,773],{"class":331},[321,3269,1376],{"class":327},[321,3271,1398],{"class":331},[321,3273,3274],{"class":323,"line":1407},[321,3275,1771],{"class":331},[321,3277,3278],{"class":323,"line":1421},[321,3279,3280],{"class":390},"\u002F\u002F上式可以进行拆分\n",[321,3282,3283,3285,3287,3289],{"class":323,"line":1427},[321,3284,335],{"class":327},[321,3286,3238],{"class":331},[321,3288,377],{"class":327},[321,3290,3291],{"class":380},"0\n",[321,3293,3294,3296],{"class":323,"line":1518},[321,3295,3231],{"class":327},[321,3297,3298],{"class":331},"(;;;)\n",[321,3300,3301],{"class":323,"line":1524},[321,3302,1752],{"class":331},[321,3304,3305,3308,3311,3313,3315],{"class":323,"line":1536},[321,3306,3307],{"class":327},"    if",[321,3309,3310],{"class":331},"(i",[321,3312,1916],{"class":327},[321,3314,778],{"class":380},[321,3316,338],{"class":331},[321,3318,3319],{"class":323,"line":1818},[321,3320,2236],{"class":331},[321,3322,3323,3326],{"class":323,"line":1823},[321,3324,3325],{"class":327},"        break",[321,3327,1497],{"class":331},[321,3329,3330],{"class":323,"line":1829},[321,3331,2393],{"class":331},[321,3333,3334,3336,3338,3340,3342],{"class":323,"line":1834},[321,3335,1757],{"class":331},[321,3337,1376],{"class":327},[321,3339,773],{"class":331},[321,3341,1376],{"class":327},[321,3343,1398],{"class":331},[321,3345,3346,3349,3351],{"class":323,"line":1848},[321,3347,3348],{"class":331},"    i",[321,3350,2498],{"class":327},[321,3352,1497],{"class":331},[321,3354,3355],{"class":323,"line":1853},[321,3356,1771],{"class":331},[19,3358,3359],{},"小练习",[312,3361,3363],{"className":314,"code":3362,"language":316,"meta":30,"style":30},"#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",[318,3364,3365,3371,3381,3389,3393,3398,3403,3431,3435,3440,3445,3486,3490,3503,3507,3511,3515,3527,3531,3535],{"__ignoreMap":30},[321,3366,3367,3369],{"class":323,"line":324},[321,3368,2155],{"class":327},[321,3370,2158],{"class":436},[321,3372,3373,3375,3377,3379],{"class":323,"line":167},[321,3374,2163],{"class":327},[321,3376,2166],{"class":327},[321,3378,2170],{"class":2169},[321,3380,1497],{"class":331},[321,3382,3383,3385,3387],{"class":323,"line":200},[321,3384,335],{"class":327},[321,3386,2179],{"class":2169},[321,3388,2182],{"class":331},[321,3390,3391],{"class":323,"line":1401},[321,3392,1752],{"class":331},[321,3394,3395],{"class":323,"line":1407},[321,3396,3397],{"class":390},"    \u002F\u002F敲桌子案例\n",[321,3399,3400],{"class":323,"line":1421},[321,3401,3402],{"class":390},"    \u002F\u002F1.先输出1-100的数字\n",[321,3404,3405,3408,3410,3412,3414,3416,3418,3421,3423,3425,3427,3429],{"class":323,"line":1427},[321,3406,3407],{"class":327},"    for",[321,3409,332],{"class":331},[321,3411,335],{"class":327},[321,3413,3238],{"class":331},[321,3415,377],{"class":327},[321,3417,549],{"class":380},[321,3419,3420],{"class":331},"; i",[321,3422,1794],{"class":327},[321,3424,643],{"class":380},[321,3426,3420],{"class":331},[321,3428,2498],{"class":327},[321,3430,338],{"class":331},[321,3432,3433],{"class":323,"line":1518},[321,3434,2236],{"class":331},[321,3436,3437],{"class":323,"line":1524},[321,3438,3439],{"class":390},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[321,3441,3442],{"class":323,"line":1536},[321,3443,3444],{"class":390},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[321,3446,3447,3449,3451,3453,3455,3457,3459,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484],{"class":323,"line":1818},[321,3448,2703],{"class":327},[321,3450,3310],{"class":331},[321,3452,660],{"class":327},[321,3454,701],{"class":380},[321,3456,3155],{"class":327},[321,3458,523],{"class":380},[321,3460,3461],{"class":327}," ||",[321,3463,3238],{"class":331},[321,3465,660],{"class":327},[321,3467,778],{"class":380},[321,3469,3155],{"class":327},[321,3471,701],{"class":380},[321,3473,3461],{"class":327},[321,3475,3238],{"class":331},[321,3477,916],{"class":327},[321,3479,778],{"class":380},[321,3481,3155],{"class":327},[321,3483,701],{"class":380},[321,3485,338],{"class":331},[321,3487,3488],{"class":323,"line":1823},[321,3489,2716],{"class":331},[321,3491,3492,3494,3496,3499,3501],{"class":323,"line":1829},[321,3493,2721],{"class":331},[321,3495,1376],{"class":327},[321,3497,3498],{"class":436},"\"敲桌子\"",[321,3500,1376],{"class":327},[321,3502,1398],{"class":331},[321,3504,3505],{"class":323,"line":1834},[321,3506,2735],{"class":331},[321,3508,3509],{"class":323,"line":1848},[321,3510,2776],{"class":327},[321,3512,3513],{"class":323,"line":1853},[321,3514,2716],{"class":331},[321,3516,3517,3519,3521,3523,3525],{"class":323,"line":1859},[321,3518,2721],{"class":331},[321,3520,1376],{"class":327},[321,3522,773],{"class":331},[321,3524,1376],{"class":327},[321,3526,1398],{"class":331},[321,3528,3529],{"class":323,"line":1880},[321,3530,2735],{"class":331},[321,3532,3533],{"class":323,"line":1885},[321,3534,2393],{"class":331},[321,3536,3537],{"class":323,"line":1899},[321,3538,1771],{"class":331},[19,3540,3541],{},"嵌套实现星图",[312,3543,3545],{"className":314,"code":3544,"language":316,"meta":30,"style":30},"#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",[318,3546,3547,3553,3563,3571,3575,3601,3605,3634,3638,3649,3653,3662,3666],{"__ignoreMap":30},[321,3548,3549,3551],{"class":323,"line":324},[321,3550,2155],{"class":327},[321,3552,2158],{"class":436},[321,3554,3555,3557,3559,3561],{"class":323,"line":167},[321,3556,2163],{"class":327},[321,3558,2166],{"class":327},[321,3560,2170],{"class":2169},[321,3562,1497],{"class":331},[321,3564,3565,3567,3569],{"class":323,"line":200},[321,3566,335],{"class":327},[321,3568,2179],{"class":2169},[321,3570,2182],{"class":331},[321,3572,3573],{"class":323,"line":1401},[321,3574,1752],{"class":331},[321,3576,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599],{"class":323,"line":1407},[321,3578,3407],{"class":327},[321,3580,1864],{"class":331},[321,3582,335],{"class":327},[321,3584,3238],{"class":331},[321,3586,377],{"class":327},[321,3588,523],{"class":380},[321,3590,3245],{"class":331},[321,3592,1242],{"class":327},[321,3594,778],{"class":380},[321,3596,3245],{"class":331},[321,3598,2498],{"class":327},[321,3600,338],{"class":331},[321,3602,3603],{"class":323,"line":1421},[321,3604,2236],{"class":331},[321,3606,3607,3610,3612,3614,3617,3619,3621,3624,3626,3628,3630,3632],{"class":323,"line":1427},[321,3608,3609],{"class":327},"        for",[321,3611,1864],{"class":331},[321,3613,335],{"class":327},[321,3615,3616],{"class":331}," j",[321,3618,377],{"class":327},[321,3620,523],{"class":380},[321,3622,3623],{"class":331},";j",[321,3625,1242],{"class":327},[321,3627,778],{"class":380},[321,3629,3623],{"class":331},[321,3631,2498],{"class":327},[321,3633,338],{"class":331},[321,3635,3636],{"class":323,"line":1518},[321,3637,2716],{"class":331},[321,3639,3640,3642,3644,3647],{"class":323,"line":1524},[321,3641,2721],{"class":331},[321,3643,1376],{"class":327},[321,3645,3646],{"class":436},"\"*\"",[321,3648,1497],{"class":331},[321,3650,3651],{"class":323,"line":1536},[321,3652,2735],{"class":331},[321,3654,3655,3658,3660],{"class":323,"line":1818},[321,3656,3657],{"class":331},"        cout",[321,3659,1376],{"class":327},[321,3661,1398],{"class":331},[321,3663,3664],{"class":323,"line":1823},[321,3665,2393],{"class":331},[321,3667,3668],{"class":323,"line":1829},[321,3669,1771],{"class":331},[19,3671,3672],{},"乘法口诀表",[312,3674,3676],{"className":314,"code":3675,"language":316,"meta":30,"style":30},"#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",[318,3677,3678,3684,3694,3702,3706,3732,3736,3761,3765,3805,3809,3817,3821],{"__ignoreMap":30},[321,3679,3680,3682],{"class":323,"line":324},[321,3681,2155],{"class":327},[321,3683,2540],{"class":436},[321,3685,3686,3688,3690,3692],{"class":323,"line":167},[321,3687,2163],{"class":327},[321,3689,2166],{"class":327},[321,3691,2170],{"class":2169},[321,3693,1497],{"class":331},[321,3695,3696,3698,3700],{"class":323,"line":200},[321,3697,335],{"class":327},[321,3699,2179],{"class":2169},[321,3701,2182],{"class":331},[321,3703,3704],{"class":323,"line":1401},[321,3705,1752],{"class":331},[321,3707,3708,3710,3712,3714,3716,3718,3720,3722,3724,3726,3728,3730],{"class":323,"line":1407},[321,3709,3407],{"class":327},[321,3711,332],{"class":331},[321,3713,335],{"class":327},[321,3715,3238],{"class":331},[321,3717,377],{"class":327},[321,3719,549],{"class":380},[321,3721,3245],{"class":331},[321,3723,1242],{"class":327},[321,3725,778],{"class":380},[321,3727,3245],{"class":331},[321,3729,2498],{"class":327},[321,3731,338],{"class":331},[321,3733,3734],{"class":323,"line":1421},[321,3735,2236],{"class":331},[321,3737,3738,3740,3742,3744,3746,3748,3750,3752,3754,3757,3759],{"class":323,"line":1427},[321,3739,3609],{"class":327},[321,3741,332],{"class":331},[321,3743,335],{"class":327},[321,3745,3616],{"class":331},[321,3747,377],{"class":327},[321,3749,549],{"class":380},[321,3751,3623],{"class":331},[321,3753,1794],{"class":327},[321,3755,3756],{"class":331},"i;j",[321,3758,2498],{"class":327},[321,3760,338],{"class":331},[321,3762,3763],{"class":323,"line":1518},[321,3764,2716],{"class":331},[321,3766,3767,3769,3771,3773,3775,3777,3779,3781,3783,3786,3788,3790,3792,3794,3796,3799,3801,3803],{"class":323,"line":1524},[321,3768,2721],{"class":331},[321,3770,1376],{"class":327},[321,3772,799],{"class":331},[321,3774,1376],{"class":327},[321,3776,3646],{"class":436},[321,3778,1376],{"class":327},[321,3780,773],{"class":331},[321,3782,1376],{"class":327},[321,3784,3785],{"class":436},"\"=\"",[321,3787,1376],{"class":327},[321,3789,773],{"class":331},[321,3791,787],{"class":327},[321,3793,799],{"class":331},[321,3795,1376],{"class":327},[321,3797,3798],{"class":436},"'",[321,3800,1437],{"class":380},[321,3802,3798],{"class":436},[321,3804,1497],{"class":331},[321,3806,3807],{"class":323,"line":1536},[321,3808,2735],{"class":331},[321,3810,3811,3813,3815],{"class":323,"line":1818},[321,3812,3657],{"class":331},[321,3814,1376],{"class":327},[321,3816,1398],{"class":331},[321,3818,3819],{"class":323,"line":1823},[321,3820,2393],{"class":331},[321,3822,3823],{"class":323,"line":1829},[321,3824,1771],{"class":331},[292,3826,3828],{"id":3827},"_163跳出语句","1.6.3跳出语句",[151,3830,3831],{},[154,3832,3833],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3835,3836],{},"break使用时机：",[1339,3838,3839,3842,3845],{},[154,3840,3841],{},"出现在switch条件语句中，作用是终止case并跳出switch",[154,3843,3844],{},"出现在循环结构中，作用是跳出当前的循环结构",[154,3846,3847],{},"出现在嵌套循环中，跳出最近的内层循环语句",[151,3849,3850,3853],{"start":167},[154,3851,3852],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[154,3854,3855],{},"goto语句\n语法：goto 标记;",[19,3857,3858],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[312,3860,3862],{"className":314,"code":3861,"language":316,"meta":30,"style":30},"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",[318,3863,3864,3872,3876,3889,3899,3912,3925,3938,3946,3962],{"__ignoreMap":30},[321,3865,3866,3868,3870],{"class":323,"line":324},[321,3867,335],{"class":327},[321,3869,2179],{"class":2169},[321,3871,2182],{"class":331},[321,3873,3874],{"class":323,"line":167},[321,3875,1752],{"class":331},[321,3877,3878,3880,3882,3885,3887],{"class":323,"line":200},[321,3879,1757],{"class":331},[321,3881,1376],{"class":327},[321,3883,3884],{"class":436},"\"1\"",[321,3886,1376],{"class":327},[321,3888,1398],{"class":331},[321,3890,3891,3894,3897],{"class":323,"line":1401},[321,3892,3893],{"class":327},"    goto",[321,3895,3896],{"class":2169}," FLAG",[321,3898,1497],{"class":331},[321,3900,3901,3903,3905,3908,3910],{"class":323,"line":1407},[321,3902,1757],{"class":331},[321,3904,1376],{"class":327},[321,3906,3907],{"class":436},"\"2\"",[321,3909,1376],{"class":327},[321,3911,1398],{"class":331},[321,3913,3914,3916,3918,3921,3923],{"class":323,"line":1421},[321,3915,1757],{"class":331},[321,3917,1376],{"class":327},[321,3919,3920],{"class":436},"\"3\"",[321,3922,1376],{"class":327},[321,3924,1398],{"class":331},[321,3926,3927,3929,3931,3934,3936],{"class":323,"line":1427},[321,3928,1757],{"class":331},[321,3930,1376],{"class":327},[321,3932,3933],{"class":436},"\"4\"",[321,3935,1376],{"class":327},[321,3937,1398],{"class":331},[321,3939,3940,3943],{"class":323,"line":1518},[321,3941,3942],{"class":2169},"    FLAG",[321,3944,3945],{"class":331},":\n",[321,3947,3948,3950,3952,3955,3957,3959],{"class":323,"line":1524},[321,3949,1757],{"class":331},[321,3951,1376],{"class":327},[321,3953,3954],{"class":436},"\"5\"",[321,3956,1376],{"class":327},[321,3958,1445],{"class":331},[321,3960,3961],{"class":390},"\u002F\u002F跳过了2,3,4,直接到5\n",[321,3963,3964],{"class":323,"line":1536},[321,3965,1771],{"class":331},[14,3967,3969],{"id":3968},"_17数组","1.7数组",[292,3971,3973],{"id":3972},"_171一维数组","1.7.1一维数组",[151,3975,3976],{},[154,3977,3978],{},"一维数组定义方式",[469,3980,3981,3991],{},[472,3982,3983],{},[475,3984,3985,3988],{},[478,3986,3987],{},"方式",[478,3989,3990],{},"注意事项",[516,3992,3993,4007,4017],{},[475,3994,3995,4001],{},[521,3996,3997,3998,387],{},"数据类型 数组名",[321,3999,4000],{},"数组长度",[521,4002,4003,4004,4006],{},"这种方式是先定义再arr",[321,4005,773],{},"赋值",[475,4008,4009,4014],{},[521,4010,3997,4011,4013],{},[321,4012,4000],{},"={值1,值2....};",[521,4015,4016],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[475,4018,4019,4023],{},[521,4020,3997,4021,4013],{},[321,4022],{},[521,4024,4025,4026,4028],{},"int arr",[321,4027],{},";这是不正确的，按照这样的方式定义必须有初始长度",[151,4030,4031],{"start":167},[154,4032,4033],{},"一维数组数组名\n用途：",[1339,4035,4036],{},[154,4037,4038],{},"1.可以统计整个数组在内存中的长度：",[312,4040,4042],{"className":314,"code":4041,"language":316,"meta":30,"style":30},"sizeof(arr);\nsizeof(arr[0]);\n",[318,4043,4044,4051],{"__ignoreMap":30},[321,4045,4046,4048],{"class":323,"line":324},[321,4047,328],{"class":327},[321,4049,4050],{"class":331},"(arr);\n",[321,4052,4053,4055,4058,4060],{"class":323,"line":167},[321,4054,328],{"class":327},[321,4056,4057],{"class":331},"(arr[",[321,4059,523],{"class":380},[321,4061,4062],{"class":331},"]);\n",[1339,4064,4065],{},[154,4066,4067],{},"2.可以获取数组在内存中的首地址:",[312,4069,4071],{"className":314,"code":4070,"language":316,"meta":30,"style":30},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[318,4072,4073,4078,4091,4096],{"__ignoreMap":30},[321,4074,4075],{"class":323,"line":324},[321,4076,4077],{"class":390},"\u002F\u002F查看16进制的首地址\n",[321,4079,4080,4082,4084,4087,4089],{"class":323,"line":167},[321,4081,1576],{"class":331},[321,4083,1376],{"class":327},[321,4085,4086],{"class":331},"arr",[321,4088,1376],{"class":327},[321,4090,1398],{"class":331},[321,4092,4093],{"class":323,"line":200},[321,4094,4095],{"class":390},"\u002F\u002F看10进制数\n",[321,4097,4098,4100,4102,4104,4106,4108,4110,4113,4115,4117,4119],{"class":323,"line":1401},[321,4099,1576],{"class":331},[321,4101,1376],{"class":327},[321,4103,332],{"class":331},[321,4105,335],{"class":327},[321,4107,761],{"class":331},[321,4109,685],{"class":327},[321,4111,4112],{"class":331},"arr[",[321,4114,523],{"class":380},[321,4116,1272],{"class":331},[321,4118,1376],{"class":327},[321,4120,1398],{"class":331},[19,4122,4123],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1339,4125,4126],{},[154,4127,4128],{},"1️⃣五只小猪称体重",[312,4130,4132],{"className":314,"code":4131,"language":316,"meta":30,"style":30},"#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",[318,4133,4134,4140,4150,4158,4162,4202,4215,4241,4245,4257,4261,4271,4275,4279,4292,4302],{"__ignoreMap":30},[321,4135,4136,4138],{"class":323,"line":324},[321,4137,2155],{"class":327},[321,4139,2158],{"class":436},[321,4141,4142,4144,4146,4148],{"class":323,"line":167},[321,4143,2163],{"class":327},[321,4145,2166],{"class":327},[321,4147,2170],{"class":2169},[321,4149,1497],{"class":331},[321,4151,4152,4154,4156],{"class":323,"line":200},[321,4153,335],{"class":327},[321,4155,2179],{"class":2169},[321,4157,2182],{"class":331},[321,4159,4160],{"class":323,"line":1401},[321,4161,1752],{"class":331},[321,4163,4164,4166,4169,4171,4173,4175,4177,4180,4182,4185,4187,4189,4191,4194,4196,4199],{"class":323,"line":1407},[321,4165,2191],{"class":327},[321,4167,4168],{"class":331}," arr[",[321,4170,651],{"class":380},[321,4172,1272],{"class":331},[321,4174,377],{"class":327},[321,4176,1228],{"class":331},[321,4178,4179],{"class":380},"300",[321,4181,710],{"class":331},[321,4183,4184],{"class":380},"350",[321,4186,710],{"class":331},[321,4188,1928],{"class":380},[321,4190,710],{"class":331},[321,4192,4193],{"class":380},"400",[321,4195,710],{"class":331},[321,4197,4198],{"class":380},"250",[321,4200,4201],{"class":331},"};\n",[321,4203,4204,4206,4209,4211,4213],{"class":323,"line":1421},[321,4205,2191],{"class":327},[321,4207,4208],{"class":331}," tmp",[321,4210,377],{"class":327},[321,4212,523],{"class":380},[321,4214,1497],{"class":331},[321,4216,4217,4219,4221,4223,4225,4227,4229,4231,4233,4235,4237,4239],{"class":323,"line":1427},[321,4218,3407],{"class":327},[321,4220,1864],{"class":331},[321,4222,335],{"class":327},[321,4224,3238],{"class":331},[321,4226,377],{"class":327},[321,4228,523],{"class":380},[321,4230,3245],{"class":331},[321,4232,1242],{"class":327},[321,4234,651],{"class":380},[321,4236,3245],{"class":331},[321,4238,2498],{"class":327},[321,4240,338],{"class":331},[321,4242,4243],{"class":323,"line":1518},[321,4244,2236],{"class":331},[321,4246,4247,4249,4252,4254],{"class":323,"line":1524},[321,4248,2703],{"class":327},[321,4250,4251],{"class":331},"(tmp",[321,4253,1242],{"class":327},[321,4255,4256],{"class":331},"arr[i])\n",[321,4258,4259],{"class":323,"line":1536},[321,4260,2716],{"class":331},[321,4262,4263,4266,4268],{"class":323,"line":1818},[321,4264,4265],{"class":331},"            tmp",[321,4267,377],{"class":327},[321,4269,4270],{"class":331},"arr[i];\n",[321,4272,4273],{"class":323,"line":1823},[321,4274,2735],{"class":331},[321,4276,4277],{"class":323,"line":1829},[321,4278,2393],{"class":331},[321,4280,4281,4283,4285,4288,4290],{"class":323,"line":1834},[321,4282,1757],{"class":331},[321,4284,1376],{"class":327},[321,4286,4287],{"class":331},"tmp",[321,4289,1376],{"class":327},[321,4291,1398],{"class":331},[321,4293,4294,4297,4300],{"class":323,"line":1848},[321,4295,4296],{"class":327},"    return",[321,4298,4299],{"class":380}," 0",[321,4301,1497],{"class":331},[321,4303,4304],{"class":323,"line":1853},[321,4305,1771],{"class":331},[1339,4307,4308],{},[154,4309,4310],{},"2️⃣数组元素逆置",[312,4312,4314],{"className":314,"code":4313,"language":316,"meta":30,"style":30},"\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",[318,4315,4316,4321,4327,4337,4345,4349,4384,4400,4432,4445,4450,4455,4467,4477,4487,4492,4501,4511,4516,4521,4548,4552,4568,4572,4583,4592],{"__ignoreMap":30},[321,4317,4318],{"class":323,"line":324},[321,4319,4320],{"class":390},"\u002F\u002F元素逆置\n",[321,4322,4323,4325],{"class":323,"line":167},[321,4324,2155],{"class":327},[321,4326,2158],{"class":436},[321,4328,4329,4331,4333,4335],{"class":323,"line":200},[321,4330,2163],{"class":327},[321,4332,2166],{"class":327},[321,4334,2170],{"class":2169},[321,4336,1497],{"class":331},[321,4338,4339,4341,4343],{"class":323,"line":1401},[321,4340,335],{"class":327},[321,4342,2179],{"class":2169},[321,4344,2182],{"class":331},[321,4346,4347],{"class":323,"line":1407},[321,4348,1752],{"class":331},[321,4350,4351,4354,4356,4358,4360,4362,4364,4366,4368,4370,4372,4374,4376,4378,4380,4382],{"class":323,"line":1421},[321,4352,4353],{"class":327},"   int",[321,4355,4168],{"class":331},[321,4357,651],{"class":380},[321,4359,1272],{"class":331},[321,4361,377],{"class":327},[321,4363,1228],{"class":331},[321,4365,549],{"class":380},[321,4367,710],{"class":331},[321,4369,409],{"class":380},[321,4371,710],{"class":331},[321,4373,403],{"class":380},[321,4375,710],{"class":331},[321,4377,625],{"class":380},[321,4379,710],{"class":331},[321,4381,651],{"class":380},[321,4383,4201],{"class":331},[321,4385,4386,4388,4391,4393,4395,4397],{"class":323,"line":1427},[321,4387,4353],{"class":327},[321,4389,4390],{"class":331}," start",[321,4392,377],{"class":327},[321,4394,523],{"class":380},[321,4396,387],{"class":331},[321,4398,4399],{"class":390},"\u002F\u002F起始下标\n",[321,4401,4402,4404,4407,4410,4413,4416,4418,4420,4423,4425,4427,4429],{"class":323,"line":1518},[321,4403,4353],{"class":327},[321,4405,4406],{"class":331}," end",[321,4408,4409],{"class":327},"=sizeof",[321,4411,4412],{"class":331},"(arr)",[321,4414,4415],{"class":327},"\u002Fsizeof",[321,4417,4057],{"class":331},[321,4419,523],{"class":380},[321,4421,4422],{"class":331},"])",[321,4424,864],{"class":327},[321,4426,549],{"class":380},[321,4428,387],{"class":331},[321,4430,4431],{"class":390},"\u002F\u002F结束下标\n",[321,4433,4434,4437,4440,4442],{"class":323,"line":1524},[321,4435,4436],{"class":327},"   while",[321,4438,4439],{"class":331}," (start",[321,4441,1242],{"class":327},[321,4443,4444],{"class":331},"end)\n",[321,4446,4447],{"class":323,"line":1536},[321,4448,4449],{"class":331},"   {\n",[321,4451,4452],{"class":323,"line":1818},[321,4453,4454],{"class":390},"    \u002F\u002F实现元素互换代码\n",[321,4456,4457,4459,4462,4464],{"class":323,"line":1823},[321,4458,2191],{"class":327},[321,4460,4461],{"class":331}," temp",[321,4463,377],{"class":327},[321,4465,4466],{"class":331},"arr[start];\n",[321,4468,4469,4472,4474],{"class":323,"line":1829},[321,4470,4471],{"class":331},"    arr[start]",[321,4473,377],{"class":327},[321,4475,4476],{"class":331},"arr[end];\n",[321,4478,4479,4482,4484],{"class":323,"line":1834},[321,4480,4481],{"class":331},"    arr[end]",[321,4483,377],{"class":327},[321,4485,4486],{"class":331},"temp;\n",[321,4488,4489],{"class":323,"line":1848},[321,4490,4491],{"class":390},"    \u002F\u002F下标更新\n",[321,4493,4494,4497,4499],{"class":323,"line":1853},[321,4495,4496],{"class":331},"    start",[321,4498,2498],{"class":327},[321,4500,1497],{"class":331},[321,4502,4503,4506,4509],{"class":323,"line":1859},[321,4504,4505],{"class":331},"    end",[321,4507,4508],{"class":327},"--",[321,4510,1497],{"class":331},[321,4512,4513],{"class":323,"line":1880},[321,4514,4515],{"class":331},"   }\n",[321,4517,4518],{"class":323,"line":1885},[321,4519,4520],{"class":390},"   \u002F\u002F输出逆置后的数组\n",[321,4522,4523,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546],{"class":323,"line":1899},[321,4524,4525],{"class":327},"   for",[321,4527,1864],{"class":331},[321,4529,335],{"class":327},[321,4531,3238],{"class":331},[321,4533,377],{"class":327},[321,4535,523],{"class":380},[321,4537,3245],{"class":331},[321,4539,1242],{"class":327},[321,4541,651],{"class":380},[321,4543,3245],{"class":331},[321,4545,2498],{"class":327},[321,4547,338],{"class":331},[321,4549,4550],{"class":323,"line":1904},[321,4551,4449],{"class":331},[321,4553,4554,4556,4558,4561,4563,4566],{"class":323,"line":1933},[321,4555,1757],{"class":331},[321,4557,1376],{"class":327},[321,4559,4560],{"class":331},"arr[i]",[321,4562,1376],{"class":327},[321,4564,4565],{"class":436},"\" \"",[321,4567,1497],{"class":331},[321,4569,4570],{"class":323,"line":1938},[321,4571,4515],{"class":331},[321,4573,4574,4577,4579,4581],{"class":323,"line":1955},[321,4575,4576],{"class":2169},"   system",[321,4578,332],{"class":331},[321,4580,2514],{"class":436},[321,4582,2925],{"class":331},[321,4584,4585,4588,4590],{"class":323,"line":1960},[321,4586,4587],{"class":327},"   return",[321,4589,4299],{"class":380},[321,4591,1497],{"class":331},[321,4593,4594],{"class":323,"line":1965},[321,4595,1771],{"class":331},[1339,4597,4598],{},[154,4599,4600],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[312,4602,4604],{"className":314,"code":4603,"language":316,"meta":30,"style":30},"\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",[318,4605,4606,4611,4617,4627,4635,4639,4691,4704,4730,4734,4748,4752,4757,4762,4792,4796,4801,4835,4839,4844,4864,4869,4881,4897,4912,4917,4921,4925,4938,4964,4968,4982,4986,4994],{"__ignoreMap":30},[321,4607,4608],{"class":323,"line":324},[321,4609,4610],{"class":390},"\u002F\u002F冒泡排序,升序\n",[321,4612,4613,4615],{"class":323,"line":167},[321,4614,2155],{"class":327},[321,4616,2158],{"class":436},[321,4618,4619,4621,4623,4625],{"class":323,"line":200},[321,4620,2163],{"class":327},[321,4622,2166],{"class":327},[321,4624,2170],{"class":2169},[321,4626,1497],{"class":331},[321,4628,4629,4631,4633],{"class":323,"line":1401},[321,4630,335],{"class":327},[321,4632,2179],{"class":2169},[321,4634,2182],{"class":331},[321,4636,4637],{"class":323,"line":1407},[321,4638,1752],{"class":331},[321,4640,4641,4643,4645,4647,4650,4652,4655,4657,4659,4661,4663,4665,4667,4669,4671,4673,4675,4677,4679,4681,4683,4685,4687,4689],{"class":323,"line":1421},[321,4642,2191],{"class":327},[321,4644,4168],{"class":331},[321,4646,752],{"class":380},[321,4648,4649],{"class":331},"] ",[321,4651,377],{"class":327},[321,4653,4654],{"class":331}," {",[321,4656,625],{"class":380},[321,4658,710],{"class":331},[321,4660,409],{"class":380},[321,4662,710],{"class":331},[321,4664,727],{"class":380},[321,4666,710],{"class":331},[321,4668,523],{"class":380},[321,4670,710],{"class":331},[321,4672,651],{"class":380},[321,4674,710],{"class":331},[321,4676,701],{"class":380},[321,4678,710],{"class":331},[321,4680,549],{"class":380},[321,4682,710],{"class":331},[321,4684,403],{"class":380},[321,4686,710],{"class":331},[321,4688,752],{"class":380},[321,4690,4201],{"class":331},[321,4692,4693,4695,4697,4700,4702],{"class":323,"line":1427},[321,4694,1757],{"class":331},[321,4696,1376],{"class":327},[321,4698,4699],{"class":436},"\"排序前：\"",[321,4701,1376],{"class":327},[321,4703,1398],{"class":331},[321,4705,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726,4728],{"class":323,"line":1518},[321,4707,3407],{"class":327},[321,4709,1864],{"class":331},[321,4711,335],{"class":327},[321,4713,3238],{"class":331},[321,4715,377],{"class":327},[321,4717,523],{"class":380},[321,4719,3245],{"class":331},[321,4721,1242],{"class":327},[321,4723,752],{"class":380},[321,4725,3245],{"class":331},[321,4727,2498],{"class":327},[321,4729,338],{"class":331},[321,4731,4732],{"class":323,"line":1524},[321,4733,2236],{"class":331},[321,4735,4736,4738,4740,4742,4744,4746],{"class":323,"line":1536},[321,4737,3657],{"class":331},[321,4739,1376],{"class":327},[321,4741,4560],{"class":331},[321,4743,1376],{"class":327},[321,4745,4565],{"class":436},[321,4747,1497],{"class":331},[321,4749,4750],{"class":323,"line":1818},[321,4751,2393],{"class":331},[321,4753,4754],{"class":323,"line":1823},[321,4755,4756],{"class":390},"    \u002F\u002F开始冒泡排序\n",[321,4758,4759],{"class":323,"line":1829},[321,4760,4761],{"class":390},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[321,4763,4764,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784,4786,4788,4790],{"class":323,"line":1834},[321,4765,3407],{"class":327},[321,4767,1864],{"class":331},[321,4769,335],{"class":327},[321,4771,3238],{"class":331},[321,4773,377],{"class":327},[321,4775,523],{"class":380},[321,4777,3245],{"class":331},[321,4779,1242],{"class":327},[321,4781,752],{"class":380},[321,4783,864],{"class":327},[321,4785,549],{"class":380},[321,4787,3245],{"class":331},[321,4789,2498],{"class":327},[321,4791,338],{"class":331},[321,4793,4794],{"class":323,"line":1848},[321,4795,2236],{"class":331},[321,4797,4798],{"class":323,"line":1853},[321,4799,4800],{"class":390},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[321,4802,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833],{"class":323,"line":1859},[321,4804,3609],{"class":327},[321,4806,1864],{"class":331},[321,4808,335],{"class":327},[321,4810,3616],{"class":331},[321,4812,377],{"class":327},[321,4814,523],{"class":380},[321,4816,3623],{"class":331},[321,4818,1242],{"class":327},[321,4820,752],{"class":380},[321,4822,864],{"class":327},[321,4824,773],{"class":331},[321,4826,864],{"class":327},[321,4828,549],{"class":380},[321,4830,3623],{"class":331},[321,4832,2498],{"class":327},[321,4834,338],{"class":331},[321,4836,4837],{"class":323,"line":1880},[321,4838,2716],{"class":331},[321,4840,4841],{"class":323,"line":1885},[321,4842,4843],{"class":390},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[321,4845,4846,4849,4852,4854,4857,4859,4861],{"class":323,"line":1899},[321,4847,4848],{"class":327},"            if",[321,4850,4851],{"class":331},"(arr[j]",[321,4853,1292],{"class":327},[321,4855,4856],{"class":331},"arr[j",[321,4858,813],{"class":327},[321,4860,549],{"class":380},[321,4862,4863],{"class":331},"])\n",[321,4865,4866],{"class":323,"line":1904},[321,4867,4868],{"class":331},"            {\n",[321,4870,4871,4874,4876,4878],{"class":323,"line":1933},[321,4872,4873],{"class":327},"                int",[321,4875,4461],{"class":331},[321,4877,377],{"class":327},[321,4879,4880],{"class":331},"arr[j];\n",[321,4882,4883,4886,4888,4890,4892,4894],{"class":323,"line":1938},[321,4884,4885],{"class":331},"                arr[j]",[321,4887,377],{"class":327},[321,4889,4856],{"class":331},[321,4891,813],{"class":327},[321,4893,549],{"class":380},[321,4895,4896],{"class":331},"];\n",[321,4898,4899,4902,4904,4906,4908,4910],{"class":323,"line":1955},[321,4900,4901],{"class":331},"                arr[j",[321,4903,813],{"class":327},[321,4905,549],{"class":380},[321,4907,1272],{"class":331},[321,4909,377],{"class":327},[321,4911,4486],{"class":331},[321,4913,4914],{"class":323,"line":1960},[321,4915,4916],{"class":331},"            }\n",[321,4918,4919],{"class":323,"line":1965},[321,4920,2735],{"class":331},[321,4922,4923],{"class":323,"line":1970},[321,4924,2393],{"class":331},[321,4926,4927,4929,4931,4934,4936],{"class":323,"line":1984},[321,4928,1757],{"class":331},[321,4930,1376],{"class":327},[321,4932,4933],{"class":436},"\"排序后：\"",[321,4935,1376],{"class":327},[321,4937,1398],{"class":331},[321,4939,4940,4942,4944,4946,4948,4950,4952,4954,4956,4958,4960,4962],{"class":323,"line":1989},[321,4941,3407],{"class":327},[321,4943,1864],{"class":331},[321,4945,335],{"class":327},[321,4947,3238],{"class":331},[321,4949,377],{"class":327},[321,4951,523],{"class":380},[321,4953,3245],{"class":331},[321,4955,1242],{"class":327},[321,4957,752],{"class":380},[321,4959,3245],{"class":331},[321,4961,2498],{"class":327},[321,4963,338],{"class":331},[321,4965,4966],{"class":323,"line":2783},[321,4967,2236],{"class":331},[321,4969,4970,4972,4974,4976,4978,4980],{"class":323,"line":2797},[321,4971,3657],{"class":331},[321,4973,1376],{"class":327},[321,4975,4560],{"class":331},[321,4977,1376],{"class":327},[321,4979,4565],{"class":436},[321,4981,1497],{"class":331},[321,4983,4984],{"class":323,"line":2805},[321,4985,2393],{"class":331},[321,4987,4988,4990,4992],{"class":323,"line":2810},[321,4989,4296],{"class":327},[321,4991,4299],{"class":380},[321,4993,1497],{"class":331},[321,4995,4996],{"class":323,"line":2816},[321,4997,1771],{"class":331},[292,4999,5001],{"id":5000},"_172二维数组","1.7.2二维数组",[151,5003,5004],{},[154,5005,5006],{},"二维数组的四种定义方式",[469,5008,5009,5018],{},[472,5010,5011],{},[475,5012,5013,5016],{},[478,5014,5015],{},"序号",[478,5017,3987],{},[516,5019,5020,5030,5039,5048,5057],{},[475,5021,5022,5024],{},[521,5023,549],{},[521,5025,5026,5027,387],{},"数据类型 数组名[行数]",[321,5028,5029],{},"列数",[475,5031,5032,5034],{},[521,5033,409],{},[521,5035,5026,5036,5038],{},[321,5037,5029],{},"={ {数据1,数据2}，{数据3，数据4}... }",[475,5040,5041,5043],{},[521,5042,403],{},[521,5044,5026,5045,5047],{},[321,5046,5029],{},"={数据1,数据2,数据3...}",[475,5049,5050,5052],{},[521,5051,625],{},[521,5053,5054,5055,5047],{},"数据类型 数组名[]",[321,5056,5029],{},[475,5058,5059,5062],{},[521,5060,5061],{},"注意：不能只省略列数",[521,5063],{},[151,5065,5066],{"start":167},[154,5067,5068],{},"二维数组数组名",[1339,5070,5071,5074],{},[154,5072,5073],{},"1.查看二维数组所占内存空间",[154,5075,5076],{},"2.获取二维数组首地址",[19,5078,5079],{},"已知二维数组，求二维数组的行数与列数",[312,5081,5083],{"className":314,"code":5082,"language":316,"meta":30,"style":30},"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",[318,5084,5085,5093,5097,5115,5119,5137,5153,5158,5183,5216],{"__ignoreMap":30},[321,5086,5087,5089,5091],{"class":323,"line":324},[321,5088,335],{"class":327},[321,5090,2179],{"class":2169},[321,5092,2182],{"class":331},[321,5094,5095],{"class":323,"line":167},[321,5096,1752],{"class":331},[321,5098,5099,5101,5103,5105,5108,5110,5112],{"class":323,"line":200},[321,5100,2191],{"class":327},[321,5102,4168],{"class":331},[321,5104,409],{"class":380},[321,5106,5107],{"class":331},"][",[321,5109,403],{"class":380},[321,5111,1272],{"class":331},[321,5113,5114],{"class":327},"=\n",[321,5116,5117],{"class":323,"line":1401},[321,5118,2236],{"class":331},[321,5120,5121,5124,5126,5128,5130,5132,5134],{"class":323,"line":1407},[321,5122,5123],{"class":331},"        {",[321,5125,549],{"class":380},[321,5127,710],{"class":331},[321,5129,409],{"class":380},[321,5131,710],{"class":331},[321,5133,403],{"class":380},[321,5135,5136],{"class":331},"},\n",[321,5138,5139,5141,5143,5145,5147,5149,5151],{"class":323,"line":1421},[321,5140,5123],{"class":331},[321,5142,625],{"class":380},[321,5144,710],{"class":331},[321,5146,651],{"class":380},[321,5148,710],{"class":331},[321,5150,676],{"class":380},[321,5152,1771],{"class":331},[321,5154,5155],{"class":323,"line":1427},[321,5156,5157],{"class":331},"    };\n",[321,5159,5160,5162,5164,5167,5169,5171,5173,5175,5177,5179,5181],{"class":323,"line":1518},[321,5161,1757],{"class":331},[321,5163,1376],{"class":327},[321,5165,5166],{"class":436},"\"二维数组的行数\"",[321,5168,1579],{"class":327},[321,5170,4412],{"class":331},[321,5172,4415],{"class":327},[321,5174,4057],{"class":331},[321,5176,523],{"class":380},[321,5178,4422],{"class":331},[321,5180,1376],{"class":327},[321,5182,1398],{"class":331},[321,5184,5185,5187,5189,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212,5214],{"class":323,"line":1524},[321,5186,1757],{"class":331},[321,5188,1376],{"class":327},[321,5190,5191],{"class":436},"\"二维数组的列数\"",[321,5193,1579],{"class":327},[321,5195,4057],{"class":331},[321,5197,523],{"class":380},[321,5199,4422],{"class":331},[321,5201,4415],{"class":327},[321,5203,4057],{"class":331},[321,5205,523],{"class":380},[321,5207,5107],{"class":331},[321,5209,523],{"class":380},[321,5211,4422],{"class":331},[321,5213,1376],{"class":327},[321,5215,1398],{"class":331},[321,5217,5218],{"class":323,"line":1536},[321,5219,1771],{"class":331},[19,5221,5222],{},"查看二维数组首地址",[312,5224,5226],{"className":314,"code":5225,"language":316,"meta":30,"style":30},"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",[318,5227,5228,5245,5271,5296],{"__ignoreMap":30},[321,5229,5230,5232,5234,5237,5239,5241,5243],{"class":323,"line":324},[321,5231,1576],{"class":331},[321,5233,1376],{"class":327},[321,5235,5236],{"class":436},"\"二维数组首地址：\"",[321,5238,1376],{"class":327},[321,5240,4086],{"class":331},[321,5242,1376],{"class":327},[321,5244,1398],{"class":331},[321,5246,5247,5249,5251,5254,5256,5258,5260,5263,5265,5267,5269],{"class":323,"line":167},[321,5248,1576],{"class":331},[321,5250,1376],{"class":327},[321,5252,5253],{"class":436},"\"二维数组第一行的首地址：\"",[321,5255,1376],{"class":327},[321,5257,332],{"class":331},[321,5259,335],{"class":327},[321,5261,5262],{"class":331},")arr[",[321,5264,523],{"class":380},[321,5266,1272],{"class":331},[321,5268,1376],{"class":327},[321,5270,1398],{"class":331},[321,5272,5273,5275,5277,5280,5282,5284,5286,5288,5290,5292,5294],{"class":323,"line":200},[321,5274,1576],{"class":331},[321,5276,1376],{"class":327},[321,5278,5279],{"class":436},"\"二维数组第二行的首地址：\"",[321,5281,1376],{"class":327},[321,5283,332],{"class":331},[321,5285,335],{"class":327},[321,5287,5262],{"class":331},[321,5289,549],{"class":380},[321,5291,1272],{"class":331},[321,5293,1376],{"class":327},[321,5295,1398],{"class":331},[321,5297,5298,5300,5302,5305,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325,5327,5329],{"class":323,"line":1401},[321,5299,1576],{"class":331},[321,5301,1376],{"class":327},[321,5303,5304],{"class":436},"\"二维数组第一个元素的首地址:\"",[321,5306,1376],{"class":327},[321,5308,332],{"class":331},[321,5310,335],{"class":327},[321,5312,761],{"class":331},[321,5314,685],{"class":327},[321,5316,4112],{"class":331},[321,5318,523],{"class":380},[321,5320,5107],{"class":331},[321,5322,523],{"class":380},[321,5324,1272],{"class":331},[321,5326,1376],{"class":327},[321,5328,1445],{"class":331},[321,5330,5331],{"class":390},"\u002F\u002F对于数，要加取址符\n",[5333,5334,5335],"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":30,"searchDepth":167,"depth":167,"links":5337},[5338,5339,5340,5348,5349,5355,5360],{"id":267,"depth":167,"text":268},{"id":274,"depth":167,"text":275},{"id":289,"depth":167,"text":290,"children":5341},[5342,5343,5344,5345,5346,5347],{"id":294,"depth":200,"text":295},{"id":348,"depth":200,"text":349},{"id":417,"depth":200,"text":418},{"id":1357,"depth":200,"text":1358},{"id":1451,"depth":200,"text":1452},{"id":1550,"depth":200,"text":1551},{"id":1592,"depth":167,"text":1593},{"id":1660,"depth":167,"text":1661,"children":5350},[5351,5352,5353,5354],{"id":1664,"depth":200,"text":1665},{"id":1685,"depth":200,"text":1686},{"id":1694,"depth":200,"text":1695},{"id":1703,"depth":200,"text":1704},{"id":1712,"depth":167,"text":1713,"children":5356},[5357,5358,5359],{"id":1716,"depth":200,"text":1717},{"id":2411,"depth":200,"text":2412},{"id":3827,"depth":200,"text":3828},{"id":3968,"depth":167,"text":3969,"children":5361},[5362,5363],{"id":3972,"depth":200,"text":3973},{"id":5000,"depth":200,"text":5001},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":259,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5370,"title":5371,"body":5372,"description":30,"extension":249,"meta":6472,"navigation":251,"path":6473,"seo":6474,"stem":6475,"__hash__":6476},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5373,"toc":6464},[5374,5377,5381,5389,5397,5400,5466,5470,5473,5549,5553,5556,5559,5562,5775,5779,5784,5848,5853,5920,5925,6016,6019,6124,6128,6131,6137,6281,6285,6288,6302,6305,6350,6353,6461],[10,5375,5371],{"id":5376},"_2函数",[14,5378,5380],{"id":5379},"_21函数概述","2.1函数概述",[151,5382,5383,5386],{},[154,5384,5385],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[154,5387,5388],{},"语法：",[312,5390,5395],{"className":5391,"code":5393,"language":5394,"meta":30},[5392],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[318,5396,5393],{"__ignoreMap":30},[19,5398,5399],{},"小案例",[312,5401,5403],{"className":314,"code":5402,"language":316,"meta":30,"style":30},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[318,5404,5405,5410,5434,5438,5455,5462],{"__ignoreMap":30},[321,5406,5407],{"class":323,"line":324},[321,5408,5409],{"class":390},"\u002F\u002Fnum1,num2形参\n",[321,5411,5412,5414,5417,5419,5421,5425,5427,5429,5432],{"class":323,"line":167},[321,5413,335],{"class":327},[321,5415,5416],{"class":2169}," add",[321,5418,332],{"class":331},[321,5420,335],{"class":327},[321,5422,5424],{"class":5423},"s4XuR"," num1",[321,5426,710],{"class":331},[321,5428,335],{"class":327},[321,5430,5431],{"class":5423}," num2",[321,5433,338],{"class":331},[321,5435,5436],{"class":323,"line":200},[321,5437,1752],{"class":331},[321,5439,5440,5442,5445,5447,5450,5452],{"class":323,"line":1401},[321,5441,2191],{"class":327},[321,5443,5444],{"class":331}," sum",[321,5446,377],{"class":327},[321,5448,5449],{"class":331},"num1",[321,5451,813],{"class":327},[321,5453,5454],{"class":331},"num2;\n",[321,5456,5457,5459],{"class":323,"line":1407},[321,5458,4296],{"class":327},[321,5460,5461],{"class":331}," sum;\n",[321,5463,5464],{"class":323,"line":1421},[321,5465,1771],{"class":331},[14,5467,5469],{"id":5468},"_22函数调用","2.2函数调用",[19,5471,5472],{},"调用刚刚写的求和函数",[312,5474,5476],{"className":314,"code":5475,"language":316,"meta":30,"style":30},"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",[318,5477,5478,5486,5490,5495,5507,5519,5528,5533,5545],{"__ignoreMap":30},[321,5479,5480,5482,5484],{"class":323,"line":324},[321,5481,335],{"class":327},[321,5483,2179],{"class":2169},[321,5485,2182],{"class":331},[321,5487,5488],{"class":323,"line":167},[321,5489,1752],{"class":331},[321,5491,5492],{"class":323,"line":200},[321,5493,5494],{"class":390},"    \u002F\u002Fa,b实参\n",[321,5496,5497,5499,5501,5503,5505],{"class":323,"line":1401},[321,5498,2191],{"class":327},[321,5500,1605],{"class":331},[321,5502,377],{"class":327},[321,5504,523],{"class":380},[321,5506,1497],{"class":331},[321,5508,5509,5511,5513,5515,5517],{"class":323,"line":1407},[321,5510,2191],{"class":327},[321,5512,3039],{"class":331},[321,5514,377],{"class":327},[321,5516,523],{"class":380},[321,5518,1497],{"class":331},[321,5520,5521,5523,5525],{"class":323,"line":1421},[321,5522,2218],{"class":331},[321,5524,1636],{"class":327},[321,5526,5527],{"class":331},"a,b;\n",[321,5529,5530],{"class":323,"line":1427},[321,5531,5532],{"class":390},"    \u002F\u002F调用函数时，实参值传给了形参\n",[321,5534,5535,5537,5539,5542],{"class":323,"line":1518},[321,5536,1757],{"class":331},[321,5538,1376],{"class":327},[321,5540,5541],{"class":2169},"add",[321,5543,5544],{"class":331},"(a,b);\n",[321,5546,5547],{"class":323,"line":1524},[321,5548,1771],{"class":331},[14,5550,5552],{"id":5551},"_23值传递","2.3值传递",[19,5554,5555],{},"值传递就是函数调用时实参将数值传给形参",[19,5557,5558],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5560,5561],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[312,5563,5565],{"className":314,"code":5564,"language":316,"meta":30,"style":30},"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",[318,5566,5567,5589,5593,5606,5623,5641,5652,5661,5670,5683,5699,5715,5724,5728,5736,5740,5752,5764,5771],{"__ignoreMap":30},[321,5568,5569,5572,5575,5577,5579,5581,5583,5585,5587],{"class":323,"line":324},[321,5570,5571],{"class":327},"void",[321,5573,5574],{"class":2169}," swap",[321,5576,332],{"class":331},[321,5578,335],{"class":327},[321,5580,5424],{"class":5423},[321,5582,710],{"class":331},[321,5584,335],{"class":327},[321,5586,5431],{"class":5423},[321,5588,338],{"class":331},[321,5590,5591],{"class":323,"line":167},[321,5592,1752],{"class":331},[321,5594,5595,5597,5599,5602,5604],{"class":323,"line":200},[321,5596,1757],{"class":331},[321,5598,1376],{"class":327},[321,5600,5601],{"class":436},"\"交换前：\"",[321,5603,1376],{"class":327},[321,5605,1398],{"class":331},[321,5607,5608,5610,5612,5615,5617,5619,5621],{"class":323,"line":1401},[321,5609,1757],{"class":331},[321,5611,1376],{"class":327},[321,5613,5614],{"class":436},"\"num1=\"",[321,5616,1376],{"class":327},[321,5618,5449],{"class":331},[321,5620,1376],{"class":327},[321,5622,1398],{"class":331},[321,5624,5625,5627,5629,5632,5634,5637,5639],{"class":323,"line":1407},[321,5626,1757],{"class":331},[321,5628,1376],{"class":327},[321,5630,5631],{"class":436},"\"num2=\"",[321,5633,1376],{"class":327},[321,5635,5636],{"class":331},"num2",[321,5638,1376],{"class":327},[321,5640,1398],{"class":331},[321,5642,5643,5645,5647,5649],{"class":323,"line":1421},[321,5644,2191],{"class":327},[321,5646,4461],{"class":331},[321,5648,377],{"class":327},[321,5650,5651],{"class":331},"num1;\n",[321,5653,5654,5657,5659],{"class":323,"line":1427},[321,5655,5656],{"class":331},"    num1",[321,5658,377],{"class":327},[321,5660,5454],{"class":331},[321,5662,5663,5666,5668],{"class":323,"line":1518},[321,5664,5665],{"class":331},"    num2",[321,5667,377],{"class":327},[321,5669,4486],{"class":331},[321,5671,5672,5674,5676,5679,5681],{"class":323,"line":1524},[321,5673,1757],{"class":331},[321,5675,1376],{"class":327},[321,5677,5678],{"class":436},"\"交换后：\"",[321,5680,1376],{"class":327},[321,5682,1398],{"class":331},[321,5684,5685,5687,5689,5691,5693,5695,5697],{"class":323,"line":1536},[321,5686,1757],{"class":331},[321,5688,1376],{"class":327},[321,5690,5614],{"class":436},[321,5692,1376],{"class":327},[321,5694,5449],{"class":331},[321,5696,1376],{"class":327},[321,5698,1398],{"class":331},[321,5700,5701,5703,5705,5707,5709,5711,5713],{"class":323,"line":1818},[321,5702,1757],{"class":331},[321,5704,1376],{"class":327},[321,5706,5631],{"class":436},[321,5708,1376],{"class":327},[321,5710,5636],{"class":331},[321,5712,1376],{"class":327},[321,5714,1398],{"class":331},[321,5716,5717,5719,5721],{"class":323,"line":1823},[321,5718,4296],{"class":327},[321,5720,387],{"class":331},[321,5722,5723],{"class":390},"\u002F\u002F或者不写\n",[321,5725,5726],{"class":323,"line":1829},[321,5727,1771],{"class":331},[321,5729,5730,5732,5734],{"class":323,"line":1834},[321,5731,335],{"class":327},[321,5733,2179],{"class":2169},[321,5735,2182],{"class":331},[321,5737,5738],{"class":323,"line":1848},[321,5739,1752],{"class":331},[321,5741,5742,5744,5746,5748,5750],{"class":323,"line":1853},[321,5743,2191],{"class":327},[321,5745,1605],{"class":331},[321,5747,377],{"class":327},[321,5749,778],{"class":380},[321,5751,1497],{"class":331},[321,5753,5754,5756,5758,5760,5762],{"class":323,"line":1859},[321,5755,2191],{"class":327},[321,5757,3039],{"class":331},[321,5759,377],{"class":327},[321,5761,1032],{"class":380},[321,5763,1497],{"class":331},[321,5765,5766,5769],{"class":323,"line":1880},[321,5767,5768],{"class":2169},"    swap",[321,5770,5544],{"class":331},[321,5772,5773],{"class":323,"line":1885},[321,5774,1771],{"class":331},[14,5776,5778],{"id":5777},"_24函数的常见形式","2.4函数的常见形式",[151,5780,5781],{},[154,5782,5783],{},"无参无返",[312,5785,5787],{"className":314,"code":5786,"language":316,"meta":30,"style":30},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[318,5788,5789,5798,5802,5815,5819,5827,5831,5836,5844],{"__ignoreMap":30},[321,5790,5791,5793,5796],{"class":323,"line":324},[321,5792,5571],{"class":327},[321,5794,5795],{"class":2169}," test01",[321,5797,2182],{"class":331},[321,5799,5800],{"class":323,"line":167},[321,5801,1752],{"class":331},[321,5803,5804,5806,5808,5811,5813],{"class":323,"line":200},[321,5805,1757],{"class":331},[321,5807,1376],{"class":327},[321,5809,5810],{"class":436},"\"你好\"",[321,5812,1376],{"class":327},[321,5814,1398],{"class":331},[321,5816,5817],{"class":323,"line":1401},[321,5818,1771],{"class":331},[321,5820,5821,5823,5825],{"class":323,"line":1407},[321,5822,335],{"class":327},[321,5824,2179],{"class":2169},[321,5826,2182],{"class":331},[321,5828,5829],{"class":323,"line":1421},[321,5830,1752],{"class":331},[321,5832,5833],{"class":323,"line":1427},[321,5834,5835],{"class":390},"    \u002F\u002F函数调用\n",[321,5837,5838,5841],{"class":323,"line":1518},[321,5839,5840],{"class":2169},"    test01",[321,5842,5843],{"class":331},"();\n",[321,5845,5846],{"class":323,"line":1524},[321,5847,1771],{"class":331},[151,5849,5850],{"start":167},[154,5851,5852],{},"有参无返",[312,5854,5856],{"className":314,"code":5855,"language":316,"meta":30,"style":30},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[318,5857,5858,5873,5877,5889,5893,5901,5905,5916],{"__ignoreMap":30},[321,5859,5860,5862,5865,5867,5869,5871],{"class":323,"line":324},[321,5861,5571],{"class":327},[321,5863,5864],{"class":2169}," test02",[321,5866,332],{"class":331},[321,5868,335],{"class":327},[321,5870,1605],{"class":5423},[321,5872,338],{"class":331},[321,5874,5875],{"class":323,"line":167},[321,5876,1752],{"class":331},[321,5878,5879,5881,5883,5885,5887],{"class":323,"line":200},[321,5880,1757],{"class":331},[321,5882,1376],{"class":327},[321,5884,5810],{"class":436},[321,5886,1376],{"class":327},[321,5888,1398],{"class":331},[321,5890,5891],{"class":323,"line":1401},[321,5892,1771],{"class":331},[321,5894,5895,5897,5899],{"class":323,"line":1407},[321,5896,335],{"class":327},[321,5898,2179],{"class":2169},[321,5900,2182],{"class":331},[321,5902,5903],{"class":323,"line":1421},[321,5904,1752],{"class":331},[321,5906,5907,5910,5912,5914],{"class":323,"line":1427},[321,5908,5909],{"class":2169},"    test02",[321,5911,332],{"class":331},[321,5913,643],{"class":380},[321,5915,2925],{"class":331},[321,5917,5918],{"class":323,"line":1518},[321,5919,1771],{"class":331},[151,5921,5922],{"start":200},[154,5923,5924],{},"无参有返",[312,5926,5928],{"className":314,"code":5927,"language":316,"meta":30,"style":30},"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",[318,5929,5930,5939,5943,5955,5964,5968,5976,5980,5993,6012],{"__ignoreMap":30},[321,5931,5932,5934,5937],{"class":323,"line":324},[321,5933,335],{"class":327},[321,5935,5936],{"class":2169}," test03",[321,5938,2182],{"class":331},[321,5940,5941],{"class":323,"line":167},[321,5942,1752],{"class":331},[321,5944,5945,5947,5949,5951,5953],{"class":323,"line":200},[321,5946,1757],{"class":331},[321,5948,1376],{"class":327},[321,5950,5810],{"class":436},[321,5952,1376],{"class":327},[321,5954,1398],{"class":331},[321,5956,5957,5959,5962],{"class":323,"line":1401},[321,5958,4296],{"class":327},[321,5960,5961],{"class":380}," 100",[321,5963,1497],{"class":331},[321,5965,5966],{"class":323,"line":1407},[321,5967,1771],{"class":331},[321,5969,5970,5972,5974],{"class":323,"line":1421},[321,5971,335],{"class":327},[321,5973,2179],{"class":2169},[321,5975,2182],{"class":331},[321,5977,5978],{"class":323,"line":1427},[321,5979,1752],{"class":331},[321,5981,5982,5984,5986,5988,5991],{"class":323,"line":1518},[321,5983,2191],{"class":327},[321,5985,5424],{"class":331},[321,5987,377],{"class":327},[321,5989,5990],{"class":2169},"test03",[321,5992,5843],{"class":331},[321,5994,5995,5997,5999,6001,6003,6005,6007,6009],{"class":323,"line":1524},[321,5996,1757],{"class":331},[321,5998,1376],{"class":327},[321,6000,5614],{"class":436},[321,6002,1376],{"class":327},[321,6004,5449],{"class":331},[321,6006,1376],{"class":327},[321,6008,1445],{"class":331},[321,6010,6011],{"class":390}," \u002F\u002F100\n",[321,6013,6014],{"class":323,"line":1536},[321,6015,1771],{"class":331},[19,6017,6018],{},"4.有参有返",[312,6020,6022],{"className":314,"code":6021,"language":316,"meta":30,"style":30},"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",[318,6023,6024,6039,6043,6056,6062,6066,6075,6079,6091,6105,6120],{"__ignoreMap":30},[321,6025,6026,6028,6031,6033,6035,6037],{"class":323,"line":324},[321,6027,335],{"class":327},[321,6029,6030],{"class":2169}," test04",[321,6032,332],{"class":331},[321,6034,335],{"class":327},[321,6036,1605],{"class":5423},[321,6038,338],{"class":331},[321,6040,6041],{"class":323,"line":167},[321,6042,1752],{"class":331},[321,6044,6045,6047,6049,6052,6054],{"class":323,"line":200},[321,6046,1757],{"class":331},[321,6048,1376],{"class":327},[321,6050,6051],{"class":436},"\"hello\"",[321,6053,1376],{"class":327},[321,6055,1398],{"class":331},[321,6057,6058,6060],{"class":323,"line":1401},[321,6059,4296],{"class":327},[321,6061,1639],{"class":331},[321,6063,6064],{"class":323,"line":1407},[321,6065,1771],{"class":331},[321,6067,6068,6070,6073],{"class":323,"line":1421},[321,6069,335],{"class":327},[321,6071,6072],{"class":2169}," mian",[321,6074,2182],{"class":331},[321,6076,6077],{"class":323,"line":1427},[321,6078,1752],{"class":331},[321,6080,6081,6083,6085,6087,6089],{"class":323,"line":1518},[321,6082,2191],{"class":327},[321,6084,3039],{"class":331},[321,6086,377],{"class":327},[321,6088,549],{"class":380},[321,6090,1497],{"class":331},[321,6092,6093,6095,6097,6099,6102],{"class":323,"line":1524},[321,6094,2191],{"class":327},[321,6096,3055],{"class":331},[321,6098,377],{"class":327},[321,6100,6101],{"class":2169},"test04",[321,6103,6104],{"class":331},"(b);\n",[321,6106,6107,6109,6111,6113,6115,6117],{"class":323,"line":1536},[321,6108,1757],{"class":331},[321,6110,1376],{"class":327},[321,6112,620],{"class":331},[321,6114,1376],{"class":327},[321,6116,1445],{"class":331},[321,6118,6119],{"class":390}," \u002F\u002F1\n",[321,6121,6122],{"class":323,"line":1818},[321,6123,1771],{"class":331},[14,6125,6127],{"id":6126},"_25函数的声明","2.5函数的声明",[19,6129,6130],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6132,6133,6134],{},"函数的",[481,6135,6136],{},"声明可以多次，但是函数的定义只能有一次",[312,6138,6140],{"className":314,"code":6139,"language":316,"meta":30,"style":30},"\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",[318,6141,6142,6147,6152,6177,6186,6190,6202,6214,6230,6234,6254,6258,6277],{"__ignoreMap":30},[321,6143,6144],{"class":323,"line":324},[321,6145,6146],{"class":390},"\u002F\u002F函数声明\n",[321,6148,6149],{"class":323,"line":167},[321,6150,6151],{"class":390},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[321,6153,6154,6156,6159,6161,6163,6165,6167,6169,6171,6174],{"class":323,"line":200},[321,6155,335],{"class":327},[321,6157,6158],{"class":2169}," max",[321,6160,332],{"class":331},[321,6162,335],{"class":327},[321,6164,1605],{"class":5423},[321,6166,710],{"class":331},[321,6168,335],{"class":327},[321,6170,3039],{"class":5423},[321,6172,6173],{"class":331},");",[321,6175,6176],{"class":390},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[321,6178,6179,6181,6183],{"class":323,"line":1401},[321,6180,335],{"class":327},[321,6182,2179],{"class":2169},[321,6184,6185],{"class":331},"() \n",[321,6187,6188],{"class":323,"line":1407},[321,6189,1752],{"class":331},[321,6191,6192,6194,6196,6198,6200],{"class":323,"line":1421},[321,6193,2191],{"class":327},[321,6195,1605],{"class":331},[321,6197,377],{"class":327},[321,6199,778],{"class":380},[321,6201,1497],{"class":331},[321,6203,6204,6206,6208,6210,6212],{"class":323,"line":1427},[321,6205,2191],{"class":327},[321,6207,3039],{"class":331},[321,6209,377],{"class":327},[321,6211,1032],{"class":380},[321,6213,1497],{"class":331},[321,6215,6216,6218,6220,6223,6226,6228],{"class":323,"line":1518},[321,6217,1757],{"class":331},[321,6219,1376],{"class":327},[321,6221,6222],{"class":2169},"max",[321,6224,6225],{"class":331},"(a,b)",[321,6227,1376],{"class":327},[321,6229,1398],{"class":331},[321,6231,6232],{"class":323,"line":1524},[321,6233,1771],{"class":331},[321,6235,6236,6238,6240,6242,6244,6246,6248,6250,6252],{"class":323,"line":1536},[321,6237,335],{"class":327},[321,6239,6158],{"class":2169},[321,6241,332],{"class":331},[321,6243,335],{"class":327},[321,6245,1605],{"class":5423},[321,6247,710],{"class":331},[321,6249,335],{"class":327},[321,6251,3039],{"class":5423},[321,6253,338],{"class":331},[321,6255,6256],{"class":323,"line":1818},[321,6257,1752],{"class":331},[321,6259,6260,6262,6264,6266,6268,6270,6272,6274],{"class":323,"line":1823},[321,6261,4296],{"class":327},[321,6263,1605],{"class":331},[321,6265,1292],{"class":327},[321,6267,595],{"class":331},[321,6269,1318],{"class":327},[321,6271,570],{"class":331},[321,6273,1191],{"class":327},[321,6275,6276],{"class":331},"b;\n",[321,6278,6279],{"class":323,"line":1829},[321,6280,1771],{"class":331},[14,6282,6284],{"id":6283},"_26函数的分文件编写","2.6函数的分文件编写",[19,6286,6287],{},"4个步骤：",[1339,6289,6290,6293,6296,6299],{},[154,6291,6292],{},"1.创建后缀名为.h的头文件",[154,6294,6295],{},"2.创建后缀名为.cpp的源文件",[154,6297,6298],{},"3.在头文件中写函数的定义",[154,6300,6301],{},"4.在源文件中写函数的定义\n示例：",[19,6303,6304],{},"头文件：swap.h",[312,6306,6308],{"className":314,"code":6307,"language":316,"meta":30,"style":30},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[318,6309,6310,6316,6326,6330],{"__ignoreMap":30},[321,6311,6312,6314],{"class":323,"line":324},[321,6313,2155],{"class":327},[321,6315,2158],{"class":436},[321,6317,6318,6320,6322,6324],{"class":323,"line":167},[321,6319,2163],{"class":327},[321,6321,2166],{"class":327},[321,6323,2170],{"class":2169},[321,6325,1497],{"class":331},[321,6327,6328],{"class":323,"line":200},[321,6329,6146],{"class":390},[321,6331,6332,6334,6336,6338,6340,6342,6344,6346,6348],{"class":323,"line":1401},[321,6333,5571],{"class":327},[321,6335,5574],{"class":2169},[321,6337,332],{"class":331},[321,6339,335],{"class":327},[321,6341,1605],{"class":5423},[321,6343,710],{"class":331},[321,6345,335],{"class":327},[321,6347,3039],{"class":5423},[321,6349,2925],{"class":331},[19,6351,6352],{},"源文件：swap.cpp",[312,6354,6356],{"className":314,"code":6355,"language":316,"meta":30,"style":30},"#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",[318,6357,6358,6365,6370,6390,6394,6405,6414,6423,6440,6457],{"__ignoreMap":30},[321,6359,6360,6362],{"class":323,"line":324},[321,6361,2155],{"class":327},[321,6363,6364],{"class":436}," \"swap.h\"\n",[321,6366,6367],{"class":323,"line":167},[321,6368,6369],{"class":390},"\u002F\u002F函数的定义\n",[321,6371,6372,6374,6376,6378,6380,6382,6384,6386,6388],{"class":323,"line":200},[321,6373,5571],{"class":327},[321,6375,5574],{"class":2169},[321,6377,332],{"class":331},[321,6379,335],{"class":327},[321,6381,1605],{"class":5423},[321,6383,710],{"class":331},[321,6385,335],{"class":327},[321,6387,3039],{"class":5423},[321,6389,338],{"class":331},[321,6391,6392],{"class":323,"line":1401},[321,6393,1752],{"class":331},[321,6395,6396,6398,6400,6402],{"class":323,"line":1407},[321,6397,2191],{"class":327},[321,6399,4461],{"class":331},[321,6401,377],{"class":327},[321,6403,6404],{"class":331},"a;\n",[321,6406,6407,6410,6412],{"class":323,"line":1421},[321,6408,6409],{"class":331},"    a",[321,6411,377],{"class":327},[321,6413,6276],{"class":331},[321,6415,6416,6419,6421],{"class":323,"line":1427},[321,6417,6418],{"class":331},"    b",[321,6420,377],{"class":327},[321,6422,4486],{"class":331},[321,6424,6425,6427,6429,6432,6434,6436,6438],{"class":323,"line":1518},[321,6426,1757],{"class":331},[321,6428,1376],{"class":327},[321,6430,6431],{"class":436},"\"a=\"",[321,6433,1376],{"class":327},[321,6435,570],{"class":331},[321,6437,1376],{"class":327},[321,6439,1398],{"class":331},[321,6441,6442,6444,6446,6449,6451,6453,6455],{"class":323,"line":1524},[321,6443,1757],{"class":331},[321,6445,1376],{"class":327},[321,6447,6448],{"class":436},"\"b=\"",[321,6450,1376],{"class":327},[321,6452,595],{"class":331},[321,6454,1376],{"class":327},[321,6456,1398],{"class":331},[321,6458,6459],{"class":323,"line":1536},[321,6460,1771],{"class":331},[5333,6462,6463],{},"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":30,"searchDepth":167,"depth":167,"links":6465},[6466,6467,6468,6469,6470,6471],{"id":5379,"depth":167,"text":5380},{"id":5468,"depth":167,"text":5469},{"id":5551,"depth":167,"text":5552},{"id":5777,"depth":167,"text":5778},{"id":6126,"depth":167,"text":6127},{"id":6283,"depth":167,"text":6284},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5371,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6478,"title":6479,"body":6480,"description":6487,"extension":249,"meta":7892,"navigation":251,"path":7893,"seo":7894,"stem":7895,"__hash__":7896},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6481,"toc":7882},[6482,6485,6488,6492,6654,6658,6661,6664,6667,6670,6810,6814,6817,6820,6823,6888,6892,6897,6964,6967,6971,6974,6985,6990,7010,7013,7018,7037,7040,7044,7063,7066,7070,7305,7309,7312,7315,7318,7480,7483,7487,7490,7496,7879],[10,6483,6479],{"id":6484},"_3指针",[19,6486,6487],{},"通过指针保存一个地址，指针就是个地址",[14,6489,6491],{"id":6490},"_31定义指针","3.1定义指针",[312,6493,6495],{"className":314,"code":6494,"language":316,"meta":30,"style":30},"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",[318,6496,6497,6505,6509,6514,6526,6531,6539,6549,6567,6587,6591,6596,6601,6606,6620,6636,6650],{"__ignoreMap":30},[321,6498,6499,6501,6503],{"class":323,"line":324},[321,6500,335],{"class":327},[321,6502,2179],{"class":2169},[321,6504,2182],{"class":331},[321,6506,6507],{"class":323,"line":167},[321,6508,1752],{"class":331},[321,6510,6511],{"class":323,"line":200},[321,6512,6513],{"class":390},"    \u002F\u002F1.定义指针\n",[321,6515,6516,6518,6520,6522,6524],{"class":323,"line":1401},[321,6517,2191],{"class":327},[321,6519,1605],{"class":331},[321,6521,377],{"class":327},[321,6523,778],{"class":380},[321,6525,1497],{"class":331},[321,6527,6528],{"class":323,"line":1407},[321,6529,6530],{"class":390},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[321,6532,6533,6536],{"class":323,"line":1421},[321,6534,6535],{"class":327},"    int*",[321,6537,6538],{"class":331},"p;\n",[321,6540,6541,6544,6547],{"class":323,"line":1427},[321,6542,6543],{"class":331},"    p",[321,6545,6546],{"class":327},"=&",[321,6548,6404],{"class":331},[321,6550,6551,6553,6555,6558,6561,6563,6565],{"class":323,"line":1518},[321,6552,1757],{"class":331},[321,6554,1376],{"class":327},[321,6556,6557],{"class":436},"\"a的地址为：\"",[321,6559,6560],{"class":327},"\u003C\u003C&",[321,6562,570],{"class":331},[321,6564,1376],{"class":327},[321,6566,1398],{"class":331},[321,6568,6569,6571,6573,6576,6578,6580,6582,6584],{"class":323,"line":1524},[321,6570,1757],{"class":331},[321,6572,1376],{"class":327},[321,6574,6575],{"class":436},"\"指针p为：\"",[321,6577,1376],{"class":327},[321,6579,19],{"class":331},[321,6581,1376],{"class":327},[321,6583,1445],{"class":331},[321,6585,6586],{"class":390},"\u002F\u002F指针p表示的就是a的地址\n",[321,6588,6589],{"class":323,"line":1536},[321,6590,2606],{"emptyLinePlaceholder":251},[321,6592,6593],{"class":323,"line":1818},[321,6594,6595],{"class":390},"    \u002F\u002F2.使用指针\n",[321,6597,6598],{"class":323,"line":1823},[321,6599,6600],{"class":390},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[321,6602,6603],{"class":323,"line":1829},[321,6604,6605],{"class":390},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[321,6607,6608,6611,6613,6615,6618],{"class":323,"line":1834},[321,6609,6610],{"class":327},"    *",[321,6612,19],{"class":331},[321,6614,377],{"class":327},[321,6616,6617],{"class":380},"1000",[321,6619,1497],{"class":331},[321,6621,6622,6624,6627,6629,6631,6633],{"class":323,"line":1848},[321,6623,1757],{"class":331},[321,6625,6626],{"class":327},"\u003C\u003C*",[321,6628,19],{"class":331},[321,6630,1376],{"class":327},[321,6632,1445],{"class":331},[321,6634,6635],{"class":390},"\u002F\u002F1000\n",[321,6637,6638,6640,6642,6644,6646,6648],{"class":323,"line":1853},[321,6639,1757],{"class":331},[321,6641,1376],{"class":327},[321,6643,570],{"class":331},[321,6645,1376],{"class":327},[321,6647,1445],{"class":331},[321,6649,6635],{"class":390},[321,6651,6652],{"class":323,"line":1859},[321,6653,1771],{"class":331},[14,6655,6657],{"id":6656},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6659,6660],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6662,6663],{},"在32位操作系统下：占用4个字节空间",[19,6665,6666],{},"在64位操作系统下：占用8个字节空间",[19,6668,6669],{},"上方是不管啥数据类型的",[312,6671,6673],{"className":314,"code":6672,"language":316,"meta":30,"style":30},"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",[318,6674,6675,6683,6687,6692,6704,6709,6714,6719,6732,6754,6780,6806],{"__ignoreMap":30},[321,6676,6677,6679,6681],{"class":323,"line":324},[321,6678,335],{"class":327},[321,6680,2179],{"class":2169},[321,6682,2182],{"class":331},[321,6684,6685],{"class":323,"line":167},[321,6686,1752],{"class":331},[321,6688,6689],{"class":323,"line":200},[321,6690,6691],{"class":390},"    \u002F\u002F指针所占内存空间\n",[321,6693,6694,6696,6698,6700,6702],{"class":323,"line":1401},[321,6695,2191],{"class":327},[321,6697,1605],{"class":331},[321,6699,377],{"class":327},[321,6701,778],{"class":380},[321,6703,1497],{"class":331},[321,6705,6706],{"class":323,"line":1407},[321,6707,6708],{"class":390},"    \u002F\u002Fint *p;\n",[321,6710,6711],{"class":323,"line":1421},[321,6712,6713],{"class":390},"    \u002F\u002Fp=&a;\n",[321,6715,6716],{"class":323,"line":1427},[321,6717,6718],{"class":390},"    \u002F\u002F上述可以写为以下：\n",[321,6720,6721,6723,6726,6728,6730],{"class":323,"line":1518},[321,6722,2191],{"class":327},[321,6724,6725],{"class":327}," *",[321,6727,19],{"class":331},[321,6729,6546],{"class":327},[321,6731,6404],{"class":331},[321,6733,6734,6737,6739,6742,6744,6747,6749,6751],{"class":323,"line":1524},[321,6735,6736],{"class":331},"    cout ",[321,6738,1376],{"class":327},[321,6740,6741],{"class":436},"\"sizeof(int *)\"",[321,6743,1579],{"class":327},[321,6745,6746],{"class":331},"(p)",[321,6748,1376],{"class":327},[321,6750,1445],{"class":331},[321,6752,6753],{"class":390},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[321,6755,6756,6758,6760,6762,6764,6766,6768,6770,6772,6774,6777],{"class":323,"line":1536},[321,6757,6736],{"class":331},[321,6759,1376],{"class":327},[321,6761,6741],{"class":436},[321,6763,1579],{"class":327},[321,6765,332],{"class":331},[321,6767,335],{"class":327},[321,6769,6725],{"class":327},[321,6771,761],{"class":331},[321,6773,1376],{"class":327},[321,6775,6776],{"class":331},"endl",[321,6778,6779],{"class":390},"  \u002F\u002F4字节(32位的话)\n",[321,6781,6782,6784,6786,6789,6791,6793,6795,6797,6799,6801,6803],{"class":323,"line":1818},[321,6783,6736],{"class":331},[321,6785,1376],{"class":327},[321,6787,6788],{"class":436},"\"sizeof(char *)\"",[321,6790,1579],{"class":327},[321,6792,332],{"class":331},[321,6794,428],{"class":327},[321,6796,6725],{"class":327},[321,6798,761],{"class":331},[321,6800,1376],{"class":327},[321,6802,1445],{"class":331},[321,6804,6805],{"class":390}," \u002F\u002F4字节(32位的话)\n",[321,6807,6808],{"class":323,"line":1823},[321,6809,1771],{"class":331},[14,6811,6813],{"id":6812},"_33空指针","3.3空指针",[19,6815,6816],{},"空指针：指针变量指向内存中编号为0的空间",[19,6818,6819],{},"用途：初始化指针变量",[19,6821,6822],{},"注意：空指针指向的内存是不可以访问的",[312,6824,6826],{"className":314,"code":6825,"language":316,"meta":30,"style":30},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[318,6827,6828,6836,6840,6845,6859,6864,6879,6884],{"__ignoreMap":30},[321,6829,6830,6832,6834],{"class":323,"line":324},[321,6831,335],{"class":327},[321,6833,2179],{"class":2169},[321,6835,2182],{"class":331},[321,6837,6838],{"class":323,"line":167},[321,6839,1752],{"class":331},[321,6841,6842],{"class":323,"line":200},[321,6843,6844],{"class":390},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[321,6846,6847,6849,6851,6853,6855,6857],{"class":323,"line":1401},[321,6848,2191],{"class":327},[321,6850,6725],{"class":327},[321,6852,19],{"class":331},[321,6854,377],{"class":327},[321,6856,2598],{"class":380},[321,6858,1497],{"class":331},[321,6860,6861],{"class":323,"line":1407},[321,6862,6863],{"class":390},"    \u002F\u002F2.空指针不能进行访问\n",[321,6865,6866,6868,6870,6872,6874,6876],{"class":323,"line":1421},[321,6867,6610],{"class":327},[321,6869,19],{"class":331},[321,6871,377],{"class":327},[321,6873,643],{"class":380},[321,6875,387],{"class":331},[321,6877,6878],{"class":390},"\u002F\u002F直接报错，压根不能访问\n",[321,6880,6881],{"class":323,"line":1427},[321,6882,6883],{"class":390},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[321,6885,6886],{"class":323,"line":1518},[321,6887,1771],{"class":331},[14,6889,6891],{"id":6890},"_34野指针","3.4野指针",[19,6893,6894],{},[481,6895,6896],{},"指针变量指向非法的内存空间",[312,6898,6900],{"className":314,"code":6899,"language":316,"meta":30,"style":30},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[318,6901,6902,6910,6914,6943,6948,6960],{"__ignoreMap":30},[321,6903,6904,6906,6908],{"class":323,"line":324},[321,6905,335],{"class":327},[321,6907,2179],{"class":2169},[321,6909,2182],{"class":331},[321,6911,6912],{"class":323,"line":167},[321,6913,1752],{"class":331},[321,6915,6916,6918,6920,6922,6924,6926,6928,6930,6932,6935,6938,6940],{"class":323,"line":200},[321,6917,2191],{"class":327},[321,6919,6725],{"class":327},[321,6921,19],{"class":331},[321,6923,377],{"class":327},[321,6925,332],{"class":331},[321,6927,335],{"class":327},[321,6929,6725],{"class":327},[321,6931,761],{"class":331},[321,6933,6934],{"class":327},"0x",[321,6936,6937],{"class":380},"1100",[321,6939,387],{"class":331},[321,6941,6942],{"class":390}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[321,6944,6945],{"class":323,"line":1401},[321,6946,6947],{"class":390},"    \u002F\u002F访问野指针报错\n",[321,6949,6950,6952,6954,6956,6958],{"class":323,"line":1407},[321,6951,1757],{"class":331},[321,6953,6626],{"class":327},[321,6955,19],{"class":331},[321,6957,1376],{"class":327},[321,6959,1398],{"class":331},[321,6961,6962],{"class":323,"line":1421},[321,6963,1771],{"class":331},[19,6965,6966],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6968,6970],{"id":6969},"_35const修饰指针","3.5const修饰指针",[19,6972,6973],{},"三种情况：",[1339,6975,6976,6979,6982],{},[154,6977,6978],{},"const修饰指针 常量指针",[154,6980,6981],{},"const修饰常量 指针常量",[154,6983,6984],{},"const即修饰指针，又修饰常量",[151,6986,6987],{},[154,6988,6989],{},"常量指针",[312,6991,6993],{"className":314,"code":6992,"language":316,"meta":30,"style":30},"const int *p=&a;\n",[318,6994,6995],{"__ignoreMap":30},[321,6996,6997,7000,7002,7004,7006,7008],{"class":323,"line":324},[321,6998,6999],{"class":327},"const",[321,7001,2588],{"class":327},[321,7003,6725],{"class":327},[321,7005,19],{"class":331},[321,7007,6546],{"class":327},[321,7009,6404],{"class":331},[19,7011,7012],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[151,7014,7015],{"start":167},[154,7016,7017],{},"指针常量",[312,7019,7021],{"className":314,"code":7020,"language":316,"meta":30,"style":30},"int *const p=&a;\n",[318,7022,7023],{"__ignoreMap":30},[321,7024,7025,7027,7030,7033,7035],{"class":323,"line":324},[321,7026,335],{"class":327},[321,7028,7029],{"class":327}," *const",[321,7031,7032],{"class":331}," p",[321,7034,6546],{"class":327},[321,7036,6404],{"class":331},[19,7038,7039],{},"指针的指向不可以改，指针指向的值可以改",[151,7041,7042],{"start":200},[154,7043,6984],{},[312,7045,7047],{"className":314,"code":7046,"language":316,"meta":30,"style":30},"const int *const p=&a;\n",[318,7048,7049],{"__ignoreMap":30},[321,7050,7051,7053,7055,7057,7059,7061],{"class":323,"line":324},[321,7052,6999],{"class":327},[321,7054,2588],{"class":327},[321,7056,7029],{"class":327},[321,7058,7032],{"class":331},[321,7060,6546],{"class":327},[321,7062,6404],{"class":331},[19,7064,7065],{},"指针的指向和指针指向的值都不可以改变",[14,7067,7069],{"id":7068},"_36指针和数组","3.6指针和数组",[312,7071,7073],{"className":314,"code":7072,"language":316,"meta":30,"style":30},"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",[318,7074,7075,7083,7087,7092,7146,7167,7183,7199,7210,7227,7232,7246,7272,7276,7288,7297,7301],{"__ignoreMap":30},[321,7076,7077,7079,7081],{"class":323,"line":324},[321,7078,335],{"class":327},[321,7080,2179],{"class":2169},[321,7082,2182],{"class":331},[321,7084,7085],{"class":323,"line":167},[321,7086,1752],{"class":331},[321,7088,7089],{"class":323,"line":200},[321,7090,7091],{"class":390},"    \u002F\u002F利用指针访问数组中的元素\n",[321,7093,7094,7096,7098,7100,7102,7104,7106,7108,7110,7112,7114,7116,7118,7120,7122,7124,7126,7128,7130,7132,7134,7136,7138,7140,7142,7144],{"class":323,"line":1401},[321,7095,2191],{"class":327},[321,7097,4168],{"class":331},[321,7099,778],{"class":380},[321,7101,1272],{"class":331},[321,7103,377],{"class":327},[321,7105,1228],{"class":331},[321,7107,549],{"class":380},[321,7109,710],{"class":331},[321,7111,409],{"class":380},[321,7113,710],{"class":331},[321,7115,403],{"class":380},[321,7117,710],{"class":331},[321,7119,625],{"class":380},[321,7121,710],{"class":331},[321,7123,651],{"class":380},[321,7125,710],{"class":331},[321,7127,676],{"class":380},[321,7129,710],{"class":331},[321,7131,701],{"class":380},[321,7133,710],{"class":331},[321,7135,727],{"class":380},[321,7137,710],{"class":331},[321,7139,752],{"class":380},[321,7141,710],{"class":331},[321,7143,778],{"class":380},[321,7145,4201],{"class":331},[321,7147,7148,7150,7152,7155,7157,7159,7161,7163,7165],{"class":323,"line":1407},[321,7149,1757],{"class":331},[321,7151,1376],{"class":327},[321,7153,7154],{"class":436},"\"数组的第一个元素为：\"",[321,7156,1376],{"class":327},[321,7158,4112],{"class":331},[321,7160,523],{"class":380},[321,7162,1272],{"class":331},[321,7164,1376],{"class":327},[321,7166,1398],{"class":331},[321,7168,7169,7171,7173,7175,7177,7180],{"class":323,"line":1421},[321,7170,2191],{"class":327},[321,7172,6725],{"class":327},[321,7174,19],{"class":331},[321,7176,377],{"class":327},[321,7178,7179],{"class":331},"arr;",[321,7181,7182],{"class":390},"\u002F\u002F注意数才要加取地址符号&\n",[321,7184,7185,7187,7189,7191,7193,7195,7197],{"class":323,"line":1427},[321,7186,1757],{"class":331},[321,7188,1376],{"class":327},[321,7190,7154],{"class":436},[321,7192,6626],{"class":327},[321,7194,19],{"class":331},[321,7196,1376],{"class":327},[321,7198,1398],{"class":331},[321,7200,7201,7203,7205,7207],{"class":323,"line":1518},[321,7202,6543],{"class":331},[321,7204,2498],{"class":327},[321,7206,387],{"class":331},[321,7208,7209],{"class":390}," \u002F\u002F让指针向后偏移4个字节\n",[321,7211,7212,7214,7216,7219,7221,7223,7225],{"class":323,"line":1524},[321,7213,1757],{"class":331},[321,7215,1376],{"class":327},[321,7217,7218],{"class":436},"\"数组的第二个元素为：\"",[321,7220,6626],{"class":327},[321,7222,19],{"class":331},[321,7224,1376],{"class":327},[321,7226,1398],{"class":331},[321,7228,7229],{"class":323,"line":1536},[321,7230,7231],{"class":390},"    \u002F\u002F利用指针遍历数组\n",[321,7233,7234,7236,7238,7241,7243],{"class":323,"line":1818},[321,7235,2191],{"class":327},[321,7237,6725],{"class":327},[321,7239,7240],{"class":331},"p2",[321,7242,377],{"class":327},[321,7244,7245],{"class":331},"arr;\n",[321,7247,7248,7250,7252,7254,7256,7258,7260,7262,7264,7266,7268,7270],{"class":323,"line":1823},[321,7249,3407],{"class":327},[321,7251,1864],{"class":331},[321,7253,335],{"class":327},[321,7255,3238],{"class":331},[321,7257,377],{"class":327},[321,7259,523],{"class":380},[321,7261,3245],{"class":331},[321,7263,1242],{"class":327},[321,7265,778],{"class":380},[321,7267,3245],{"class":331},[321,7269,2498],{"class":327},[321,7271,338],{"class":331},[321,7273,7274],{"class":323,"line":1829},[321,7275,2236],{"class":331},[321,7277,7278,7280,7282,7284,7286],{"class":323,"line":1834},[321,7279,3657],{"class":331},[321,7281,6626],{"class":327},[321,7283,7240],{"class":331},[321,7285,1376],{"class":327},[321,7287,1398],{"class":331},[321,7289,7290,7293,7295],{"class":323,"line":1848},[321,7291,7292],{"class":331},"        p2",[321,7294,2498],{"class":327},[321,7296,1497],{"class":331},[321,7298,7299],{"class":323,"line":1853},[321,7300,2393],{"class":331},[321,7302,7303],{"class":323,"line":1859},[321,7304,1771],{"class":331},[14,7306,7308],{"id":7307},"_37指针和函数","3.7指针和函数",[19,7310,7311],{},"利用指针做函数参数，可以修改实参的值",[19,7313,7314],{},"值传递：只改变形参，不改变实参",[19,7316,7317],{},"地址传递：",[312,7319,7321],{"className":314,"code":7320,"language":316,"meta":30,"style":30},"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",[318,7322,7323,7348,7352,7364,7375,7385,7389,7397,7401,7413,7425,7430,7446,7461,7476],{"__ignoreMap":30},[321,7324,7325,7327,7329,7331,7333,7335,7338,7340,7342,7344,7346],{"class":323,"line":324},[321,7326,5571],{"class":327},[321,7328,5574],{"class":2169},[321,7330,332],{"class":331},[321,7332,335],{"class":327},[321,7334,6725],{"class":327},[321,7336,7337],{"class":5423},"p1",[321,7339,710],{"class":331},[321,7341,335],{"class":327},[321,7343,6725],{"class":327},[321,7345,7240],{"class":5423},[321,7347,338],{"class":331},[321,7349,7350],{"class":323,"line":167},[321,7351,1752],{"class":331},[321,7353,7354,7356,7358,7361],{"class":323,"line":200},[321,7355,2191],{"class":327},[321,7357,4461],{"class":331},[321,7359,7360],{"class":327},"=*",[321,7362,7363],{"class":331},"p1;\n",[321,7365,7366,7368,7370,7372],{"class":323,"line":1401},[321,7367,6610],{"class":327},[321,7369,7337],{"class":331},[321,7371,7360],{"class":327},[321,7373,7374],{"class":331},"p2;\n",[321,7376,7377,7379,7381,7383],{"class":323,"line":1407},[321,7378,6610],{"class":327},[321,7380,7240],{"class":331},[321,7382,377],{"class":327},[321,7384,4486],{"class":331},[321,7386,7387],{"class":323,"line":1421},[321,7388,1771],{"class":331},[321,7390,7391,7393,7395],{"class":323,"line":1427},[321,7392,335],{"class":327},[321,7394,2179],{"class":2169},[321,7396,2182],{"class":331},[321,7398,7399],{"class":323,"line":1518},[321,7400,1752],{"class":331},[321,7402,7403,7405,7407,7409,7411],{"class":323,"line":1524},[321,7404,2191],{"class":327},[321,7406,1605],{"class":331},[321,7408,377],{"class":327},[321,7410,778],{"class":380},[321,7412,1497],{"class":331},[321,7414,7415,7417,7419,7421,7423],{"class":323,"line":1536},[321,7416,2191],{"class":327},[321,7418,3039],{"class":331},[321,7420,377],{"class":327},[321,7422,1032],{"class":380},[321,7424,1497],{"class":331},[321,7426,7427],{"class":323,"line":1818},[321,7428,7429],{"class":390},"    \u002F\u002F地址传递\n",[321,7431,7432,7434,7436,7438,7441,7443],{"class":323,"line":1823},[321,7433,5768],{"class":2169},[321,7435,332],{"class":331},[321,7437,685],{"class":327},[321,7439,7440],{"class":331},"a,",[321,7442,685],{"class":327},[321,7444,7445],{"class":331},"b);\n",[321,7447,7448,7450,7452,7454,7456,7458],{"class":323,"line":1829},[321,7449,1757],{"class":331},[321,7451,1376],{"class":327},[321,7453,570],{"class":331},[321,7455,1376],{"class":327},[321,7457,1445],{"class":331},[321,7459,7460],{"class":390},"\u002F\u002F20\n",[321,7462,7463,7465,7467,7469,7471,7473],{"class":323,"line":1834},[321,7464,1757],{"class":331},[321,7466,1376],{"class":327},[321,7468,595],{"class":331},[321,7470,1376],{"class":327},[321,7472,1445],{"class":331},[321,7474,7475],{"class":390},"\u002F\u002F10\n",[321,7477,7478],{"class":323,"line":1848},[321,7479,1771],{"class":331},[19,7481,7482],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7484,7486],{"id":7485},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7488,7489],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7491,7492,7493,7495],{},"例如数组：int arr",[321,7494,778],{},"={4,3,6,9,1,2,10,8,7,5}",[312,7497,7499],{"className":314,"code":7498,"language":316,"meta":30,"style":30},"#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",[318,7500,7501,7507,7517,7541,7545,7576,7580,7614,7618,7636,7640,7651,7666,7681,7685,7689,7693,7697,7701,7709,7713,7718,7772,7784,7796,7801,7809,7813,7818,7843,7847,7862,7871,7875],{"__ignoreMap":30},[321,7502,7503,7505],{"class":323,"line":324},[321,7504,2155],{"class":327},[321,7506,2158],{"class":436},[321,7508,7509,7511,7513,7515],{"class":323,"line":167},[321,7510,2163],{"class":327},[321,7512,2166],{"class":327},[321,7514,2170],{"class":2169},[321,7516,1497],{"class":331},[321,7518,7519,7521,7524,7526,7528,7530,7532,7534,7536,7539],{"class":323,"line":200},[321,7520,5571],{"class":327},[321,7522,7523],{"class":2169}," bubbleSort",[321,7525,332],{"class":331},[321,7527,335],{"class":327},[321,7529,6725],{"class":327},[321,7531,19],{"class":5423},[321,7533,710],{"class":331},[321,7535,335],{"class":327},[321,7537,7538],{"class":5423}," len",[321,7540,338],{"class":331},[321,7542,7543],{"class":323,"line":1401},[321,7544,1752],{"class":331},[321,7546,7547,7549,7551,7553,7555,7557,7559,7561,7563,7566,7568,7570,7572,7574],{"class":323,"line":1407},[321,7548,3407],{"class":327},[321,7550,332],{"class":331},[321,7552,335],{"class":327},[321,7554,3238],{"class":331},[321,7556,377],{"class":327},[321,7558,523],{"class":380},[321,7560,3245],{"class":331},[321,7562,1242],{"class":327},[321,7564,7565],{"class":331},"len",[321,7567,864],{"class":327},[321,7569,549],{"class":380},[321,7571,3245],{"class":331},[321,7573,2498],{"class":327},[321,7575,338],{"class":331},[321,7577,7578],{"class":323,"line":1421},[321,7579,2236],{"class":331},[321,7581,7582,7584,7586,7588,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610,7612],{"class":323,"line":1427},[321,7583,3609],{"class":327},[321,7585,332],{"class":331},[321,7587,335],{"class":327},[321,7589,3616],{"class":331},[321,7591,377],{"class":327},[321,7593,523],{"class":380},[321,7595,3623],{"class":331},[321,7597,1242],{"class":327},[321,7599,7565],{"class":331},[321,7601,864],{"class":327},[321,7603,773],{"class":331},[321,7605,864],{"class":327},[321,7607,549],{"class":380},[321,7609,3623],{"class":331},[321,7611,2498],{"class":327},[321,7613,338],{"class":331},[321,7615,7616],{"class":323,"line":1518},[321,7617,2716],{"class":331},[321,7619,7620,7622,7625,7627,7630,7632,7634],{"class":323,"line":1524},[321,7621,4848],{"class":327},[321,7623,7624],{"class":331},"(p[j]",[321,7626,1292],{"class":327},[321,7628,7629],{"class":331},"p[j",[321,7631,813],{"class":327},[321,7633,549],{"class":380},[321,7635,4863],{"class":331},[321,7637,7638],{"class":323,"line":1536},[321,7639,4868],{"class":331},[321,7641,7642,7644,7646,7648],{"class":323,"line":1818},[321,7643,4873],{"class":327},[321,7645,4461],{"class":331},[321,7647,377],{"class":327},[321,7649,7650],{"class":331},"p[j];\n",[321,7652,7653,7656,7658,7660,7662,7664],{"class":323,"line":1823},[321,7654,7655],{"class":331},"                p[j]",[321,7657,377],{"class":327},[321,7659,7629],{"class":331},[321,7661,813],{"class":327},[321,7663,549],{"class":380},[321,7665,4896],{"class":331},[321,7667,7668,7671,7673,7675,7677,7679],{"class":323,"line":1829},[321,7669,7670],{"class":331},"                p[j",[321,7672,813],{"class":327},[321,7674,549],{"class":380},[321,7676,1272],{"class":331},[321,7678,377],{"class":327},[321,7680,4486],{"class":331},[321,7682,7683],{"class":323,"line":1834},[321,7684,4916],{"class":331},[321,7686,7687],{"class":323,"line":1848},[321,7688,2735],{"class":331},[321,7690,7691],{"class":323,"line":1853},[321,7692,2393],{"class":331},[321,7694,7695],{"class":323,"line":1859},[321,7696,1771],{"class":331},[321,7698,7699],{"class":323,"line":1880},[321,7700,2606],{"emptyLinePlaceholder":251},[321,7702,7703,7705,7707],{"class":323,"line":1885},[321,7704,335],{"class":327},[321,7706,2179],{"class":2169},[321,7708,2182],{"class":331},[321,7710,7711],{"class":323,"line":1899},[321,7712,1752],{"class":331},[321,7714,7715],{"class":323,"line":1904},[321,7716,7717],{"class":390},"    \u002F\u002F 1.创建数组\n",[321,7719,7720,7722,7724,7726,7728,7730,7732,7734,7736,7738,7740,7742,7744,7746,7748,7750,7752,7754,7756,7758,7760,7762,7764,7766,7768,7770],{"class":323,"line":1933},[321,7721,2191],{"class":327},[321,7723,4168],{"class":331},[321,7725,778],{"class":380},[321,7727,1272],{"class":331},[321,7729,377],{"class":327},[321,7731,1228],{"class":331},[321,7733,625],{"class":380},[321,7735,710],{"class":331},[321,7737,403],{"class":380},[321,7739,710],{"class":331},[321,7741,676],{"class":380},[321,7743,710],{"class":331},[321,7745,752],{"class":380},[321,7747,710],{"class":331},[321,7749,549],{"class":380},[321,7751,710],{"class":331},[321,7753,409],{"class":380},[321,7755,710],{"class":331},[321,7757,778],{"class":380},[321,7759,710],{"class":331},[321,7761,727],{"class":380},[321,7763,710],{"class":331},[321,7765,701],{"class":380},[321,7767,710],{"class":331},[321,7769,651],{"class":380},[321,7771,4201],{"class":331},[321,7773,7774,7776,7778,7780,7782],{"class":323,"line":1938},[321,7775,2191],{"class":327},[321,7777,7538],{"class":331},[321,7779,377],{"class":327},[321,7781,778],{"class":380},[321,7783,1497],{"class":331},[321,7785,7786,7788,7790,7792,7794],{"class":323,"line":1955},[321,7787,2191],{"class":327},[321,7789,6725],{"class":327},[321,7791,19],{"class":331},[321,7793,377],{"class":327},[321,7795,7245],{"class":331},[321,7797,7798],{"class":323,"line":1960},[321,7799,7800],{"class":390},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[321,7802,7803,7806],{"class":323,"line":1965},[321,7804,7805],{"class":2169},"    bubbleSort",[321,7807,7808],{"class":331},"(p,len);\n",[321,7810,7811],{"class":323,"line":1970},[321,7812,2606],{"emptyLinePlaceholder":251},[321,7814,7815],{"class":323,"line":1984},[321,7816,7817],{"class":390},"    \u002F\u002F 3.打印排序后的数组\n",[321,7819,7820,7822,7824,7826,7828,7830,7832,7834,7836,7839,7841],{"class":323,"line":1989},[321,7821,3407],{"class":327},[321,7823,1864],{"class":331},[321,7825,335],{"class":327},[321,7827,3238],{"class":331},[321,7829,377],{"class":327},[321,7831,523],{"class":380},[321,7833,3420],{"class":331},[321,7835,1242],{"class":327},[321,7837,7838],{"class":331},"len; i",[321,7840,2498],{"class":327},[321,7842,338],{"class":331},[321,7844,7845],{"class":323,"line":2783},[321,7846,2236],{"class":331},[321,7848,7849,7851,7853,7855,7857,7860],{"class":323,"line":2797},[321,7850,3657],{"class":331},[321,7852,6626],{"class":327},[321,7854,19],{"class":331},[321,7856,1376],{"class":327},[321,7858,7859],{"class":436},"\"\"",[321,7861,1497],{"class":331},[321,7863,7864,7867,7869],{"class":323,"line":2805},[321,7865,7866],{"class":331},"        p",[321,7868,2498],{"class":327},[321,7870,1497],{"class":331},[321,7872,7873],{"class":323,"line":2810},[321,7874,2393],{"class":331},[321,7876,7877],{"class":323,"line":2816},[321,7878,1771],{"class":331},[5333,7880,7881],{},"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":30,"searchDepth":167,"depth":167,"links":7883},[7884,7885,7886,7887,7888,7889,7890,7891],{"id":6490,"depth":167,"text":6491},{"id":6656,"depth":167,"text":6657},{"id":6812,"depth":167,"text":6813},{"id":6890,"depth":167,"text":6891},{"id":6969,"depth":167,"text":6970},{"id":7068,"depth":167,"text":7069},{"id":7307,"depth":167,"text":7308},{"id":7485,"depth":167,"text":7486},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6479,"description":6487},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7898,"title":7899,"body":7900,"description":7907,"extension":249,"meta":10881,"navigation":251,"path":10882,"seo":10883,"stem":10884,"__hash__":10885},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7901,"toc":10872},[7902,7905,7908,7912,7915,7918,7929,8267,8270,8274,8277,8284,8539,8543,8546,8549,8704,8708,8711,8714,8920,8924,8927,9230,9233,9241,9245,9248,9399,9401,9412,9469,9473,9478,10135,10143,10146,10240,10243,10863,10869],[10,7903,7899],{"id":7904},"_4结构体",[19,7906,7907],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7909,7911],{"id":7910},"_41结构体定义与使用","4.1结构体定义与使用",[19,7913,7914],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7916,7917],{},"通过结构体创建变量的方式：",[1339,7919,7920,7923,7926],{},[154,7921,7922],{},"struct 结构体名 变量名",[154,7924,7925],{},"struct 结构体名 变量名={成员1值，成员2值...}",[154,7927,7928],{},"定义结构体时顺便创建变量",[312,7930,7932],{"className":314,"code":7931,"language":316,"meta":30,"style":30},"#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",[318,7933,7934,7940,7950,7957,7962,7970,7974,7979,7983,7988,7993,7998,8005,8010,8017,8021,8028,8032,8036,8040,8044,8048,8052,8058,8062,8068,8076,8084,8088,8093,8098,8109,8114,8126,8137,8148,8153,8177,8182,8188,8215,8220,8226,8238,8250,8262],{"__ignoreMap":30},[321,7935,7936,7938],{"class":323,"line":324},[321,7937,2155],{"class":327},[321,7939,2158],{"class":436},[321,7941,7942,7944,7946,7948],{"class":323,"line":167},[321,7943,2163],{"class":327},[321,7945,2166],{"class":327},[321,7947,2170],{"class":2169},[321,7949,1497],{"class":331},[321,7951,7952,7954],{"class":323,"line":200},[321,7953,2155],{"class":327},[321,7955,7956],{"class":436},"\u003Cstring>\n",[321,7958,7959],{"class":323,"line":1401},[321,7960,7961],{"class":390},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[321,7963,7964,7967],{"class":323,"line":1407},[321,7965,7966],{"class":327},"struct",[321,7968,7969],{"class":2169}," Student\n",[321,7971,7972],{"class":323,"line":1421},[321,7973,1752],{"class":331},[321,7975,7976],{"class":323,"line":1427},[321,7977,7978],{"class":390},"    \u002F\u002F成员列表\n",[321,7980,7981],{"class":323,"line":1518},[321,7982,2606],{"emptyLinePlaceholder":251},[321,7984,7985],{"class":323,"line":1524},[321,7986,7987],{"class":390},"    \u002F\u002F姓名\n",[321,7989,7990],{"class":323,"line":1536},[321,7991,7992],{"class":331},"    string name;\n",[321,7994,7995],{"class":323,"line":1818},[321,7996,7997],{"class":390},"    \u002F\u002F年龄\n",[321,7999,8000,8002],{"class":323,"line":1823},[321,8001,2191],{"class":327},[321,8003,8004],{"class":331}," age;\n",[321,8006,8007],{"class":323,"line":1829},[321,8008,8009],{"class":390},"    \u002F\u002F分数\n",[321,8011,8012,8014],{"class":323,"line":1834},[321,8013,2191],{"class":327},[321,8015,8016],{"class":331}," score;\n",[321,8018,8019],{"class":323,"line":1848},[321,8020,4201],{"class":331},[321,8022,8023,8025],{"class":323,"line":1853},[321,8024,7966],{"class":327},[321,8026,8027],{"class":2169}," School\n",[321,8029,8030],{"class":323,"line":1859},[321,8031,1752],{"class":331},[321,8033,8034],{"class":323,"line":1880},[321,8035,7978],{"class":390},[321,8037,8038],{"class":323,"line":1885},[321,8039,2606],{"emptyLinePlaceholder":251},[321,8041,8042],{"class":323,"line":1899},[321,8043,7987],{"class":390},[321,8045,8046],{"class":323,"line":1904},[321,8047,7992],{"class":331},[321,8049,8050],{"class":323,"line":1933},[321,8051,7997],{"class":390},[321,8053,8054,8056],{"class":323,"line":1938},[321,8055,2191],{"class":327},[321,8057,8004],{"class":331},[321,8059,8060],{"class":323,"line":1955},[321,8061,8009],{"class":390},[321,8063,8064,8066],{"class":323,"line":1960},[321,8065,2191],{"class":327},[321,8067,8016],{"class":331},[321,8069,8070,8073],{"class":323,"line":1965},[321,8071,8072],{"class":331},"} s3;",[321,8074,8075],{"class":390}," \u002F\u002F创建结构体时就创建了变量\n",[321,8077,8078,8080,8082],{"class":323,"line":1970},[321,8079,335],{"class":327},[321,8081,2179],{"class":2169},[321,8083,2182],{"class":331},[321,8085,8086],{"class":323,"line":1984},[321,8087,1752],{"class":331},[321,8089,8090],{"class":323,"line":1989},[321,8091,8092],{"class":390},"    \u002F\u002F2.通过学生类型创建具体学生\n",[321,8094,8095],{"class":323,"line":2783},[321,8096,8097],{"class":390},"    \u002F\u002F2.1 struct Student s1;\n",[321,8099,8100,8103,8106],{"class":323,"line":2797},[321,8101,8102],{"class":327},"    struct",[321,8104,8105],{"class":2169}," Student",[321,8107,8108],{"class":331}," s1;\n",[321,8110,8111],{"class":323,"line":2805},[321,8112,8113],{"class":390},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[321,8115,8116,8119,8121,8124],{"class":323,"line":2810},[321,8117,8118],{"class":331},"    s1.name",[321,8120,377],{"class":327},[321,8122,8123],{"class":436},"\"张三\"",[321,8125,1497],{"class":331},[321,8127,8128,8131,8133,8135],{"class":323,"line":2816},[321,8129,8130],{"class":331},"    s1.age",[321,8132,377],{"class":327},[321,8134,982],{"class":380},[321,8136,1497],{"class":331},[321,8138,8139,8142,8144,8146],{"class":323,"line":2822},[321,8140,8141],{"class":331},"    s1.score",[321,8143,377],{"class":327},[321,8145,586],{"class":380},[321,8147,1497],{"class":331},[321,8149,8150],{"class":323,"line":2827},[321,8151,8152],{"class":390},"    \u002F\u002F输出结果\n",[321,8154,8156,8158,8160,8163,8165,8168,8170,8173,8175],{"class":323,"line":8155},37,[321,8157,1757],{"class":331},[321,8159,1376],{"class":327},[321,8161,8162],{"class":331},"s1.name",[321,8164,1376],{"class":327},[321,8166,8167],{"class":331},"s1.age",[321,8169,1376],{"class":327},[321,8171,8172],{"class":331},"s1.score",[321,8174,1376],{"class":327},[321,8176,1398],{"class":331},[321,8178,8180],{"class":323,"line":8179},38,[321,8181,2606],{"emptyLinePlaceholder":251},[321,8183,8185],{"class":323,"line":8184},39,[321,8186,8187],{"class":390},"    \u002F\u002F2.2 struct Student s2={...}\n",[321,8189,8191,8193,8195,8198,8200,8202,8205,8207,8209,8211,8213],{"class":323,"line":8190},40,[321,8192,8102],{"class":327},[321,8194,8105],{"class":2169},[321,8196,8197],{"class":331}," s2",[321,8199,377],{"class":327},[321,8201,1228],{"class":331},[321,8203,8204],{"class":436},"\"王五\"",[321,8206,710],{"class":331},[321,8208,982],{"class":380},[321,8210,710],{"class":331},[321,8212,586],{"class":380},[321,8214,4201],{"class":331},[321,8216,8218],{"class":323,"line":8217},41,[321,8219,2606],{"emptyLinePlaceholder":251},[321,8221,8223],{"class":323,"line":8222},42,[321,8224,8225],{"class":390},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[321,8227,8229,8232,8234,8236],{"class":323,"line":8228},43,[321,8230,8231],{"class":331},"    s3.name",[321,8233,377],{"class":327},[321,8235,3884],{"class":436},[321,8237,1497],{"class":331},[321,8239,8241,8244,8246,8248],{"class":323,"line":8240},44,[321,8242,8243],{"class":331},"    s3.age",[321,8245,377],{"class":327},[321,8247,982],{"class":380},[321,8249,1497],{"class":331},[321,8251,8253,8256,8258,8260],{"class":323,"line":8252},45,[321,8254,8255],{"class":331},"    s3.score",[321,8257,377],{"class":327},[321,8259,1032],{"class":380},[321,8261,1497],{"class":331},[321,8263,8265],{"class":323,"line":8264},46,[321,8266,1771],{"class":331},[19,8268,8269],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8271,8273],{"id":8272},"_42结构体数组","4.2结构体数组",[19,8275,8276],{},"将自定义的结构体放入到数组中方便维护",[19,8278,8279,8280,8283],{},"语法：struct 结构体名 数组名",[321,8281,8282],{},"元素个数","={ {}，{},...{} };",[312,8285,8287],{"className":314,"code":8286,"language":316,"meta":30,"style":30},"#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",[318,8288,8289,8295,8305,8311,8316,8322,8326,8330,8336,8342,8346,8350,8358,8362,8367,8382,8386,8402,8418,8422,8427,8443,8458,8473,8478,8504,8508,8531,8535],{"__ignoreMap":30},[321,8290,8291,8293],{"class":323,"line":324},[321,8292,2155],{"class":327},[321,8294,2158],{"class":436},[321,8296,8297,8299,8301,8303],{"class":323,"line":167},[321,8298,2163],{"class":327},[321,8300,2166],{"class":327},[321,8302,2170],{"class":2169},[321,8304,1497],{"class":331},[321,8306,8307,8309],{"class":323,"line":200},[321,8308,2155],{"class":327},[321,8310,7956],{"class":436},[321,8312,8313],{"class":323,"line":1401},[321,8314,8315],{"class":390},"\u002F\u002F1.定义结构体\n",[321,8317,8318,8320],{"class":323,"line":1407},[321,8319,7966],{"class":327},[321,8321,7969],{"class":2169},[321,8323,8324],{"class":323,"line":1421},[321,8325,1752],{"class":331},[321,8327,8328],{"class":323,"line":1427},[321,8329,7992],{"class":331},[321,8331,8332,8334],{"class":323,"line":1518},[321,8333,2191],{"class":327},[321,8335,8004],{"class":331},[321,8337,8338,8340],{"class":323,"line":1524},[321,8339,2191],{"class":327},[321,8341,8016],{"class":331},[321,8343,8344],{"class":323,"line":1536},[321,8345,2606],{"emptyLinePlaceholder":251},[321,8347,8348],{"class":323,"line":1818},[321,8349,4201],{"class":331},[321,8351,8352,8354,8356],{"class":323,"line":1823},[321,8353,335],{"class":327},[321,8355,2179],{"class":2169},[321,8357,2182],{"class":331},[321,8359,8360],{"class":323,"line":1829},[321,8361,1752],{"class":331},[321,8363,8364],{"class":323,"line":1834},[321,8365,8366],{"class":390},"    \u002F\u002F2.创建结构体数组\n",[321,8368,8369,8371,8373,8376,8378,8380],{"class":323,"line":1848},[321,8370,8102],{"class":327},[321,8372,8105],{"class":2169},[321,8374,8375],{"class":331}," stuArray[",[321,8377,409],{"class":380},[321,8379,1272],{"class":331},[321,8381,5114],{"class":327},[321,8383,8384],{"class":323,"line":1853},[321,8385,2236],{"class":331},[321,8387,8388,8390,8392,8394,8396,8398,8400],{"class":323,"line":1859},[321,8389,5123],{"class":331},[321,8391,8123],{"class":436},[321,8393,710],{"class":331},[321,8395,982],{"class":380},[321,8397,710],{"class":331},[321,8399,643],{"class":380},[321,8401,5136],{"class":331},[321,8403,8404,8406,8408,8410,8412,8414,8416],{"class":323,"line":1880},[321,8405,5123],{"class":331},[321,8407,3884],{"class":436},[321,8409,710],{"class":331},[321,8411,907],{"class":380},[321,8413,710],{"class":331},[321,8415,907],{"class":380},[321,8417,1771],{"class":331},[321,8419,8420],{"class":323,"line":1885},[321,8421,2393],{"class":331},[321,8423,8424],{"class":323,"line":1899},[321,8425,8426],{"class":390},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[321,8428,8429,8432,8434,8437,8439,8441],{"class":323,"line":1904},[321,8430,8431],{"class":331},"    stuArray[",[321,8433,549],{"class":380},[321,8435,8436],{"class":331},"].name",[321,8438,377],{"class":327},[321,8440,3907],{"class":436},[321,8442,1497],{"class":331},[321,8444,8445,8447,8449,8452,8454,8456],{"class":323,"line":1933},[321,8446,8431],{"class":331},[321,8448,549],{"class":380},[321,8450,8451],{"class":331},"].age",[321,8453,377],{"class":327},[321,8455,409],{"class":380},[321,8457,1497],{"class":331},[321,8459,8460,8462,8464,8467,8469,8471],{"class":323,"line":1938},[321,8461,8431],{"class":331},[321,8463,549],{"class":380},[321,8465,8466],{"class":331},"].score",[321,8468,377],{"class":327},[321,8470,409],{"class":380},[321,8472,1497],{"class":331},[321,8474,8475],{"class":323,"line":1955},[321,8476,8477],{"class":390},"    \u002F\u002F4.遍历结构体数组\n",[321,8479,8480,8482,8484,8486,8488,8490,8492,8494,8496,8498,8500,8502],{"class":323,"line":1960},[321,8481,3407],{"class":327},[321,8483,1864],{"class":331},[321,8485,335],{"class":327},[321,8487,3238],{"class":331},[321,8489,377],{"class":327},[321,8491,523],{"class":380},[321,8493,3245],{"class":331},[321,8495,1242],{"class":327},[321,8497,409],{"class":380},[321,8499,3245],{"class":331},[321,8501,2498],{"class":327},[321,8503,338],{"class":331},[321,8505,8506],{"class":323,"line":1965},[321,8507,2236],{"class":331},[321,8509,8510,8512,8514,8517,8519,8522,8524,8527,8529],{"class":323,"line":1970},[321,8511,3657],{"class":331},[321,8513,1376],{"class":327},[321,8515,8516],{"class":331},"stuArray[i].name",[321,8518,1376],{"class":327},[321,8520,8521],{"class":331},"stuArray[i].age",[321,8523,1376],{"class":327},[321,8525,8526],{"class":331},"stuArray[i].score",[321,8528,1376],{"class":327},[321,8530,1398],{"class":331},[321,8532,8533],{"class":323,"line":1984},[321,8534,2393],{"class":331},[321,8536,8537],{"class":323,"line":1989},[321,8538,1771],{"class":331},[14,8540,8542],{"id":8541},"_43结构体指针","4.3结构体指针",[19,8544,8545],{},"作用：通过指针访问结构体中的成员",[19,8547,8548],{},"利用操作符->可以通过结构体指针访问结构体属性",[312,8550,8552],{"className":314,"code":8551,"language":316,"meta":30,"style":30},"#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",[318,8553,8554,8560,8570,8576,8580,8586,8590,8594,8600,8606,8610,8618,8622,8627,8652,8657,8672,8677,8700],{"__ignoreMap":30},[321,8555,8556,8558],{"class":323,"line":324},[321,8557,2155],{"class":327},[321,8559,2158],{"class":436},[321,8561,8562,8564,8566,8568],{"class":323,"line":167},[321,8563,2163],{"class":327},[321,8565,2166],{"class":327},[321,8567,2170],{"class":2169},[321,8569,1497],{"class":331},[321,8571,8572,8574],{"class":323,"line":200},[321,8573,2155],{"class":327},[321,8575,7956],{"class":436},[321,8577,8578],{"class":323,"line":1401},[321,8579,8315],{"class":390},[321,8581,8582,8584],{"class":323,"line":1407},[321,8583,7966],{"class":327},[321,8585,7969],{"class":2169},[321,8587,8588],{"class":323,"line":1421},[321,8589,1752],{"class":331},[321,8591,8592],{"class":323,"line":1427},[321,8593,7992],{"class":331},[321,8595,8596,8598],{"class":323,"line":1518},[321,8597,2191],{"class":327},[321,8599,8004],{"class":331},[321,8601,8602,8604],{"class":323,"line":1524},[321,8603,2191],{"class":327},[321,8605,8016],{"class":331},[321,8607,8608],{"class":323,"line":1536},[321,8609,4201],{"class":331},[321,8611,8612,8614,8616],{"class":323,"line":1818},[321,8613,335],{"class":327},[321,8615,2179],{"class":2169},[321,8617,2182],{"class":331},[321,8619,8620],{"class":323,"line":1823},[321,8621,1752],{"class":331},[321,8623,8624],{"class":323,"line":1829},[321,8625,8626],{"class":390},"    \u002F\u002F创建学生结构体变量\n",[321,8628,8629,8631,8633,8636,8638,8640,8642,8644,8646,8648,8650],{"class":323,"line":1834},[321,8630,8102],{"class":327},[321,8632,8105],{"class":2169},[321,8634,8635],{"class":331}," s",[321,8637,377],{"class":327},[321,8639,1228],{"class":331},[321,8641,8123],{"class":436},[321,8643,710],{"class":331},[321,8645,982],{"class":380},[321,8647,710],{"class":331},[321,8649,1928],{"class":380},[321,8651,4201],{"class":331},[321,8653,8654],{"class":323,"line":1848},[321,8655,8656],{"class":390},"    \u002F\u002F通过指针指向结构体变量\n",[321,8658,8659,8661,8663,8665,8667,8669],{"class":323,"line":1853},[321,8660,8102],{"class":327},[321,8662,8105],{"class":2169},[321,8664,6725],{"class":327},[321,8666,19],{"class":331},[321,8668,6546],{"class":327},[321,8670,8671],{"class":331},"s\n",[321,8673,8674],{"class":323,"line":1859},[321,8675,8676],{"class":390},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[321,8678,8679,8681,8683,8686,8688,8691,8693,8696,8698],{"class":323,"line":1880},[321,8680,1757],{"class":331},[321,8682,1376],{"class":327},[321,8684,8685],{"class":331},"p->name",[321,8687,1376],{"class":327},[321,8689,8690],{"class":331},"p->age",[321,8692,1376],{"class":327},[321,8694,8695],{"class":331},"p->score",[321,8697,1376],{"class":327},[321,8699,1398],{"class":331},[321,8701,8702],{"class":323,"line":1885},[321,8703,1771],{"class":331},[14,8705,8707],{"id":8706},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8709,8710],{},"作用：结构体中的成员可以是另一个结构体",[19,8712,8713],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[312,8715,8717],{"className":314,"code":8716,"language":316,"meta":30,"style":30},"#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",[318,8718,8719,8725,8735,8741,8746,8754,8758,8762,8768,8774,8778,8783,8790,8794,8801,8805,8811,8816,8820,8828,8832,8837,8842,8847,8858,8870,8881,8894,8905,8916],{"__ignoreMap":30},[321,8720,8721,8723],{"class":323,"line":324},[321,8722,2155],{"class":327},[321,8724,2158],{"class":436},[321,8726,8727,8729,8731,8733],{"class":323,"line":167},[321,8728,2163],{"class":327},[321,8730,2166],{"class":327},[321,8732,2170],{"class":2169},[321,8734,1497],{"class":331},[321,8736,8737,8739],{"class":323,"line":200},[321,8738,2155],{"class":327},[321,8740,7956],{"class":436},[321,8742,8743],{"class":323,"line":1401},[321,8744,8745],{"class":390},"\u002F\u002F定义学生结构体\n",[321,8747,8748,8750,8752],{"class":323,"line":1407},[321,8749,7966],{"class":327},[321,8751,8105],{"class":2169},[321,8753,2880],{"class":331},[321,8755,8756],{"class":323,"line":1421},[321,8757,1752],{"class":331},[321,8759,8760],{"class":323,"line":1427},[321,8761,7992],{"class":331},[321,8763,8764,8766],{"class":323,"line":1518},[321,8765,2191],{"class":327},[321,8767,8004],{"class":331},[321,8769,8770,8772],{"class":323,"line":1524},[321,8771,2191],{"class":327},[321,8773,8016],{"class":331},[321,8775,8776],{"class":323,"line":1536},[321,8777,1771],{"class":331},[321,8779,8780],{"class":323,"line":1818},[321,8781,8782],{"class":390},"\u002F\u002F定义老师结构体\n",[321,8784,8785,8787],{"class":323,"line":1823},[321,8786,7966],{"class":327},[321,8788,8789],{"class":2169}," Teacher\n",[321,8791,8792],{"class":323,"line":1829},[321,8793,1752],{"class":331},[321,8795,8796,8798],{"class":323,"line":1834},[321,8797,2191],{"class":327},[321,8799,8800],{"class":331}," id;\n",[321,8802,8803],{"class":323,"line":1848},[321,8804,7992],{"class":331},[321,8806,8807,8809],{"class":323,"line":1853},[321,8808,2191],{"class":327},[321,8810,8004],{"class":331},[321,8812,8813],{"class":323,"line":1859},[321,8814,8815],{"class":331},"    Student stu;\n",[321,8817,8818],{"class":323,"line":1880},[321,8819,1771],{"class":331},[321,8821,8822,8824,8826],{"class":323,"line":1885},[321,8823,335],{"class":327},[321,8825,2179],{"class":2169},[321,8827,6185],{"class":331},[321,8829,8830],{"class":323,"line":1899},[321,8831,1752],{"class":331},[321,8833,8834],{"class":323,"line":1904},[321,8835,8836],{"class":390},"    \u002F\u002F结构体嵌套结构体\n",[321,8838,8839],{"class":323,"line":1933},[321,8840,8841],{"class":390},"    \u002F\u002F创建老师\n",[321,8843,8844],{"class":323,"line":1938},[321,8845,8846],{"class":331},"    Teacher t;\n",[321,8848,8849,8852,8854,8856],{"class":323,"line":1955},[321,8850,8851],{"class":331},"    t.id",[321,8853,377],{"class":327},[321,8855,643],{"class":380},[321,8857,1497],{"class":331},[321,8859,8860,8863,8865,8868],{"class":323,"line":1960},[321,8861,8862],{"class":331},"    t.name",[321,8864,377],{"class":327},[321,8866,8867],{"class":436},"\"老王\"",[321,8869,1497],{"class":331},[321,8871,8872,8875,8877,8879],{"class":323,"line":1965},[321,8873,8874],{"class":331},"    t.age",[321,8876,377],{"class":327},[321,8878,982],{"class":380},[321,8880,1497],{"class":331},[321,8882,8883,8886,8888,8891],{"class":323,"line":1970},[321,8884,8885],{"class":331},"    t.stu.name",[321,8887,377],{"class":327},[321,8889,8890],{"class":436},"\"小王\"",[321,8892,8893],{"class":331},"；\n",[321,8895,8896,8899,8901,8903],{"class":323,"line":1984},[321,8897,8898],{"class":331},"    t.stu.age",[321,8900,377],{"class":327},[321,8902,1032],{"class":380},[321,8904,1497],{"class":331},[321,8906,8907,8910,8912,8914],{"class":323,"line":1989},[321,8908,8909],{"class":331},"    t.stu.score",[321,8911,377],{"class":327},[321,8913,676],{"class":380},[321,8915,1497],{"class":331},[321,8917,8918],{"class":323,"line":2783},[321,8919,1771],{"class":331},[14,8921,8923],{"id":8922},"_45结构体做函数参数","4.5结构体做函数参数",[19,8925,8926],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[312,8928,8930],{"className":314,"code":8929,"language":316,"meta":30,"style":30},"#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",[318,8931,8932,8938,8948,8954,8960,8964,8968,8974,8980,8984,8989,8994,9011,9015,9048,9052,9057,9076,9080,9111,9115,9123,9127,9136,9148,9160,9172,9185,9193,9206,9218,9226],{"__ignoreMap":30},[321,8933,8934,8936],{"class":323,"line":324},[321,8935,2155],{"class":327},[321,8937,2158],{"class":436},[321,8939,8940,8942,8944,8946],{"class":323,"line":167},[321,8941,2163],{"class":327},[321,8943,2166],{"class":327},[321,8945,2170],{"class":2169},[321,8947,1497],{"class":331},[321,8949,8950,8952],{"class":323,"line":200},[321,8951,2155],{"class":327},[321,8953,7956],{"class":436},[321,8955,8956,8958],{"class":323,"line":1401},[321,8957,7966],{"class":327},[321,8959,7969],{"class":2169},[321,8961,8962],{"class":323,"line":1407},[321,8963,1752],{"class":331},[321,8965,8966],{"class":323,"line":1421},[321,8967,7992],{"class":331},[321,8969,8970,8972],{"class":323,"line":1427},[321,8971,2191],{"class":327},[321,8973,8004],{"class":331},[321,8975,8976,8978],{"class":323,"line":1518},[321,8977,2191],{"class":327},[321,8979,8016],{"class":331},[321,8981,8982],{"class":323,"line":1524},[321,8983,4201],{"class":331},[321,8985,8986],{"class":323,"line":1536},[321,8987,8988],{"class":390},"\u002F\u002F打印学生信息的函数\n",[321,8990,8991],{"class":323,"line":1818},[321,8992,8993],{"class":390},"\u002F\u002F值传递\n",[321,8995,8996,8998,9001,9003,9005,9007,9009],{"class":323,"line":1823},[321,8997,5571],{"class":327},[321,8999,9000],{"class":2169}," printStudent1",[321,9002,332],{"class":331},[321,9004,7966],{"class":327},[321,9006,8105],{"class":2169},[321,9008,8635],{"class":5423},[321,9010,338],{"class":331},[321,9012,9013],{"class":323,"line":1829},[321,9014,1752],{"class":331},[321,9016,9017,9019,9021,9024,9026,9029,9031,9034,9036,9038,9040,9043,9045],{"class":323,"line":1834},[321,9018,6736],{"class":331},[321,9020,1376],{"class":327},[321,9022,9023],{"class":331}," s.name ",[321,9025,1376],{"class":327},[321,9027,9028],{"class":436}," \" \"",[321,9030,1651],{"class":327},[321,9032,9033],{"class":331}," s.age ",[321,9035,1376],{"class":327},[321,9037,9028],{"class":436},[321,9039,1651],{"class":327},[321,9041,9042],{"class":331}," s.score ",[321,9044,1376],{"class":327},[321,9046,9047],{"class":331}," endl;\n",[321,9049,9050],{"class":323,"line":1848},[321,9051,1771],{"class":331},[321,9053,9054],{"class":323,"line":1853},[321,9055,9056],{"class":390},"\u002F\u002F地址传递\n",[321,9058,9059,9061,9064,9066,9068,9070,9072,9074],{"class":323,"line":1859},[321,9060,5571],{"class":327},[321,9062,9063],{"class":2169}," printStudent2",[321,9065,332],{"class":331},[321,9067,7966],{"class":327},[321,9069,8105],{"class":2169},[321,9071,6725],{"class":327},[321,9073,1027],{"class":5423},[321,9075,338],{"class":331},[321,9077,9078],{"class":323,"line":1880},[321,9079,1752],{"class":331},[321,9081,9082,9084,9086,9089,9091,9093,9095,9098,9100,9102,9104,9107,9109],{"class":323,"line":1885},[321,9083,6736],{"class":331},[321,9085,1376],{"class":327},[321,9087,9088],{"class":331}," s->name ",[321,9090,1376],{"class":327},[321,9092,9028],{"class":436},[321,9094,1651],{"class":327},[321,9096,9097],{"class":331}," s->age ",[321,9099,1376],{"class":327},[321,9101,9028],{"class":436},[321,9103,1651],{"class":327},[321,9105,9106],{"class":331}," s->score ",[321,9108,1376],{"class":327},[321,9110,9047],{"class":331},[321,9112,9113],{"class":323,"line":1899},[321,9114,1771],{"class":331},[321,9116,9117,9119,9121],{"class":323,"line":1904},[321,9118,335],{"class":327},[321,9120,2179],{"class":2169},[321,9122,2182],{"class":331},[321,9124,9125],{"class":323,"line":1933},[321,9126,1752],{"class":331},[321,9128,9129,9131,9133],{"class":323,"line":1938},[321,9130,8102],{"class":327},[321,9132,8105],{"class":2169},[321,9134,9135],{"class":331}," s;\n",[321,9137,9138,9141,9143,9146],{"class":323,"line":1955},[321,9139,9140],{"class":331},"    s.name ",[321,9142,377],{"class":327},[321,9144,9145],{"class":436}," \"张三\"",[321,9147,1497],{"class":331},[321,9149,9150,9153,9155,9158],{"class":323,"line":1960},[321,9151,9152],{"class":331},"    s.age ",[321,9154,377],{"class":327},[321,9156,9157],{"class":380}," 20",[321,9159,1497],{"class":331},[321,9161,9162,9165,9167,9170],{"class":323,"line":1965},[321,9163,9164],{"class":331},"    s.score ",[321,9166,377],{"class":327},[321,9168,9169],{"class":380}," 85",[321,9171,1497],{"class":331},[321,9173,9174,9176,9178,9181,9183],{"class":323,"line":1970},[321,9175,1757],{"class":331},[321,9177,1376],{"class":327},[321,9179,9180],{"class":436},"\"值传递:\"",[321,9182,1376],{"class":327},[321,9184,1398],{"class":331},[321,9186,9187,9190],{"class":323,"line":1984},[321,9188,9189],{"class":2169},"    printStudent1",[321,9191,9192],{"class":331},"(s);\n",[321,9194,9195,9197,9199,9202,9204],{"class":323,"line":1989},[321,9196,1757],{"class":331},[321,9198,1376],{"class":327},[321,9200,9201],{"class":436},"\"地址传递:\"",[321,9203,1376],{"class":327},[321,9205,1398],{"class":331},[321,9207,9208,9211,9213,9215],{"class":323,"line":2783},[321,9209,9210],{"class":2169},"    printStudent2",[321,9212,332],{"class":331},[321,9214,685],{"class":327},[321,9216,9217],{"class":331},"s); \n",[321,9219,9220,9222,9224],{"class":323,"line":2797},[321,9221,4296],{"class":327},[321,9223,4299],{"class":380},[321,9225,1497],{"class":331},[321,9227,9228],{"class":323,"line":2805},[321,9229,1771],{"class":331},[19,9231,9232],{},"注意：",[1339,9234,9235,9238],{},[154,9236,9237],{},"1.先定义结构体，不要在函数中写结构体的定义",[154,9239,9240],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9242,9244],{"id":9243},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9246,9247],{},"用const防止误操作",[312,9249,9251],{"className":314,"code":9250,"language":316,"meta":30,"style":30},"#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",[318,9252,9253,9259,9269,9275,9280,9284,9288,9294,9300,9304,9320,9324,9347,9351,9359,9363,9384,9391,9395],{"__ignoreMap":30},[321,9254,9255,9257],{"class":323,"line":324},[321,9256,2155],{"class":327},[321,9258,2158],{"class":436},[321,9260,9261,9263,9265,9267],{"class":323,"line":167},[321,9262,2163],{"class":327},[321,9264,2166],{"class":327},[321,9266,2170],{"class":2169},[321,9268,1497],{"class":331},[321,9270,9271,9273],{"class":323,"line":200},[321,9272,2155],{"class":327},[321,9274,7956],{"class":436},[321,9276,9277],{"class":323,"line":1401},[321,9278,9279],{"class":331},"sctuct Student\n",[321,9281,9282],{"class":323,"line":1407},[321,9283,1752],{"class":331},[321,9285,9286],{"class":323,"line":1421},[321,9287,7992],{"class":331},[321,9289,9290,9292],{"class":323,"line":1427},[321,9291,2191],{"class":327},[321,9293,8004],{"class":331},[321,9295,9296,9298],{"class":323,"line":1518},[321,9297,2191],{"class":327},[321,9299,8016],{"class":331},[321,9301,9302],{"class":323,"line":1524},[321,9303,4201],{"class":331},[321,9305,9306,9308,9311,9313,9316,9318],{"class":323,"line":1536},[321,9307,5571],{"class":327},[321,9309,9310],{"class":2169}," printStudents",[321,9312,332],{"class":331},[321,9314,9315],{"class":2169},"student",[321,9317,8635],{"class":5423},[321,9319,338],{"class":331},[321,9321,9322],{"class":323,"line":1818},[321,9323,1752],{"class":331},[321,9325,9326,9328,9330,9333,9335,9338,9340,9343,9345],{"class":323,"line":1823},[321,9327,1757],{"class":331},[321,9329,1376],{"class":327},[321,9331,9332],{"class":331},"s.name",[321,9334,1376],{"class":327},[321,9336,9337],{"class":331},"s.age",[321,9339,1376],{"class":327},[321,9341,9342],{"class":331},"s.score",[321,9344,1376],{"class":327},[321,9346,1398],{"class":331},[321,9348,9349],{"class":323,"line":1829},[321,9350,1771],{"class":331},[321,9352,9353,9355,9357],{"class":323,"line":1834},[321,9354,335],{"class":327},[321,9356,2179],{"class":2169},[321,9358,6185],{"class":331},[321,9360,9361],{"class":323,"line":1848},[321,9362,1752],{"class":331},[321,9364,9365,9368,9370,9372,9374,9376,9378,9380,9382],{"class":323,"line":1853},[321,9366,9367],{"class":331},"    Student s",[321,9369,377],{"class":327},[321,9371,1228],{"class":331},[321,9373,8123],{"class":436},[321,9375,710],{"class":331},[321,9377,982],{"class":380},[321,9379,710],{"class":331},[321,9381,982],{"class":380},[321,9383,4201],{"class":331},[321,9385,9386,9389],{"class":323,"line":1859},[321,9387,9388],{"class":2169},"    printStudent",[321,9390,9192],{"class":331},[321,9392,9393],{"class":323,"line":1880},[321,9394,2606],{"emptyLinePlaceholder":251},[321,9396,9397],{"class":323,"line":1885},[321,9398,1771],{"class":331},[19,9400,9232],{},[1339,9402,9403,9406,9409],{},[154,9404,9405],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[154,9407,9408],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[154,9410,9411],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[312,9413,9415],{"className":314,"code":9414,"language":316,"meta":30,"style":30},"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",[318,9416,9417,9436,9440,9445,9465],{"__ignoreMap":30},[321,9418,9419,9421,9423,9425,9427,9430,9432,9434],{"class":323,"line":324},[321,9420,5571],{"class":327},[321,9422,9310],{"class":2169},[321,9424,332],{"class":331},[321,9426,6999],{"class":327},[321,9428,9429],{"class":2169}," student",[321,9431,6725],{"class":327},[321,9433,1027],{"class":5423},[321,9435,338],{"class":331},[321,9437,9438],{"class":323,"line":167},[321,9439,1752],{"class":331},[321,9441,9442],{"class":323,"line":200},[321,9443,9444],{"class":390},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[321,9446,9447,9449,9451,9453,9455,9457,9459,9461,9463],{"class":323,"line":1401},[321,9448,1757],{"class":331},[321,9450,1376],{"class":327},[321,9452,9332],{"class":331},[321,9454,1376],{"class":327},[321,9456,9337],{"class":331},[321,9458,1376],{"class":327},[321,9460,9342],{"class":331},[321,9462,1376],{"class":327},[321,9464,1398],{"class":331},[321,9466,9467],{"class":323,"line":1407},[321,9468,1771],{"class":331},[14,9470,9472],{"id":9471},"_47案例","4.7案例",[151,9474,9475],{},[154,9476,9477],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[312,9479,9481],{"className":314,"code":9480,"language":316,"meta":30,"style":30},"#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",[318,9482,9483,9489,9499,9505,9512,9516,9522,9526,9531,9537,9543,9547,9551,9557,9561,9566,9571,9584,9588,9593,9619,9623,9635,9662,9666,9678,9688,9692,9697,9726,9730,9742,9751,9778,9789,9799,9803,9807,9811,9816,9840,9844,9868,9872,9891,9917,9921,9946,9969,9993,9998,10003,10008,10017,10022,10028,10049,10055,10069,10075,10102,10111,10117,10125,10130],{"__ignoreMap":30},[321,9484,9485,9487],{"class":323,"line":324},[321,9486,2155],{"class":327},[321,9488,2158],{"class":436},[321,9490,9491,9493,9495,9497],{"class":323,"line":167},[321,9492,2163],{"class":327},[321,9494,2166],{"class":327},[321,9496,2170],{"class":2169},[321,9498,1497],{"class":331},[321,9500,9501,9503],{"class":323,"line":200},[321,9502,2155],{"class":327},[321,9504,7956],{"class":436},[321,9506,9507,9509],{"class":323,"line":1401},[321,9508,2155],{"class":327},[321,9510,9511],{"class":436},"\u003Cctime>\n",[321,9513,9514],{"class":323,"line":1407},[321,9515,8745],{"class":390},[321,9517,9518,9520],{"class":323,"line":1421},[321,9519,7966],{"class":327},[321,9521,7969],{"class":2169},[321,9523,9524],{"class":323,"line":1427},[321,9525,1752],{"class":331},[321,9527,9528],{"class":323,"line":1518},[321,9529,9530],{"class":331},"    string sName;\n",[321,9532,9533,9535],{"class":323,"line":1524},[321,9534,2191],{"class":327},[321,9536,8004],{"class":331},[321,9538,9539,9541],{"class":323,"line":1536},[321,9540,2191],{"class":327},[321,9542,8016],{"class":331},[321,9544,9545],{"class":323,"line":1818},[321,9546,4201],{"class":331},[321,9548,9549],{"class":323,"line":1823},[321,9550,8782],{"class":390},[321,9552,9553,9555],{"class":323,"line":1829},[321,9554,7966],{"class":327},[321,9556,8789],{"class":2169},[321,9558,9559],{"class":323,"line":1834},[321,9560,1752],{"class":331},[321,9562,9563],{"class":323,"line":1848},[321,9564,9565],{"class":331},"    string tName;\n",[321,9567,9568],{"class":323,"line":1853},[321,9569,9570],{"class":390},"    \u002F\u002F学生数组\n",[321,9572,9573,9575,9577,9580,9582],{"class":323,"line":1859},[321,9574,8102],{"class":327},[321,9576,8105],{"class":2169},[321,9578,9579],{"class":331}," sArray[",[321,9581,651],{"class":380},[321,9583,4896],{"class":331},[321,9585,9586],{"class":323,"line":1880},[321,9587,4201],{"class":331},[321,9589,9590],{"class":323,"line":1885},[321,9591,9592],{"class":390},"\u002F\u002F给老师和学生赋值的函数\n",[321,9594,9595,9597,9600,9602,9604,9607,9610,9613,9615,9617],{"class":323,"line":1899},[321,9596,5571],{"class":327},[321,9598,9599],{"class":2169}," allocateSpace",[321,9601,332],{"class":331},[321,9603,7966],{"class":327},[321,9605,9606],{"class":2169}," Teacher",[321,9608,9609],{"class":5423}," tArray",[321,9611,9612],{"class":331},"[],",[321,9614,335],{"class":327},[321,9616,7538],{"class":5423},[321,9618,338],{"class":331},[321,9620,9621],{"class":323,"line":1904},[321,9622,1752],{"class":331},[321,9624,9625,9628,9630,9633],{"class":323,"line":1933},[321,9626,9627],{"class":331},"    string nameSeed",[321,9629,377],{"class":327},[321,9631,9632],{"class":436},"\"ABCDE\"",[321,9634,1497],{"class":331},[321,9636,9637,9639,9641,9643,9646,9648,9650,9653,9655,9658,9660],{"class":323,"line":1938},[321,9638,3407],{"class":327},[321,9640,1864],{"class":331},[321,9642,335],{"class":327},[321,9644,9645],{"class":331}," i ",[321,9647,377],{"class":327},[321,9649,4299],{"class":380},[321,9651,9652],{"class":331},"; i ",[321,9654,1242],{"class":327},[321,9656,9657],{"class":331}," len; i",[321,9659,2498],{"class":327},[321,9661,338],{"class":331},[321,9663,9664],{"class":323,"line":1955},[321,9665,2236],{"class":331},[321,9667,9668,9671,9673,9676],{"class":323,"line":1960},[321,9669,9670],{"class":331},"        tArray[i].tName ",[321,9672,377],{"class":327},[321,9674,9675],{"class":436}," \"Teacher_\"",[321,9677,1497],{"class":331},[321,9679,9680,9682,9685],{"class":323,"line":1965},[321,9681,9670],{"class":331},[321,9683,9684],{"class":327},"+=",[321,9686,9687],{"class":331},"nameSeed[i];\n",[321,9689,9690],{"class":323,"line":1970},[321,9691,2606],{"emptyLinePlaceholder":251},[321,9693,9694],{"class":323,"line":1984},[321,9695,9696],{"class":390},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[321,9698,9699,9701,9703,9705,9708,9710,9712,9715,9717,9719,9722,9724],{"class":323,"line":1989},[321,9700,3609],{"class":327},[321,9702,1864],{"class":331},[321,9704,335],{"class":327},[321,9706,9707],{"class":331}," j ",[321,9709,377],{"class":327},[321,9711,4299],{"class":380},[321,9713,9714],{"class":331},"; j ",[321,9716,1242],{"class":327},[321,9718,2354],{"class":380},[321,9720,9721],{"class":331},"; j",[321,9723,2498],{"class":327},[321,9725,338],{"class":331},[321,9727,9728],{"class":323,"line":2783},[321,9729,2716],{"class":331},[321,9731,9732,9735,9737,9740],{"class":323,"line":2797},[321,9733,9734],{"class":331},"            tArray[i].sArray[j].sName ",[321,9736,377],{"class":327},[321,9738,9739],{"class":436}," \"Student_\"",[321,9741,1497],{"class":331},[321,9743,9744,9746,9748],{"class":323,"line":2805},[321,9745,9734],{"class":331},[321,9747,9684],{"class":327},[321,9749,9750],{"class":331}," nameSeed[j];\n",[321,9752,9753,9756,9759,9761,9763,9765,9767,9769,9771,9773,9775],{"class":323,"line":2810},[321,9754,9755],{"class":327},"            int",[321,9757,9758],{"class":331}," random",[321,9760,377],{"class":327},[321,9762,2630],{"class":2169},[321,9764,2633],{"class":331},[321,9766,660],{"class":327},[321,9768,1239],{"class":380},[321,9770,813],{"class":327},[321,9772,733],{"class":380},[321,9774,387],{"class":331},[321,9776,9777],{"class":390},"\u002F\u002F40~99\n",[321,9779,9780,9783,9785,9787],{"class":323,"line":2816},[321,9781,9782],{"class":331},"            tArray[i].sArray[j].age ",[321,9784,377],{"class":327},[321,9786,9157],{"class":380},[321,9788,1497],{"class":331},[321,9790,9791,9794,9796],{"class":323,"line":2822},[321,9792,9793],{"class":331},"            tArray[i].sArray[j].score ",[321,9795,377],{"class":327},[321,9797,9798],{"class":331}," random;\n",[321,9800,9801],{"class":323,"line":2827},[321,9802,2735],{"class":331},[321,9804,9805],{"class":323,"line":8155},[321,9806,2393],{"class":331},[321,9808,9809],{"class":323,"line":8179},[321,9810,1771],{"class":331},[321,9812,9813],{"class":323,"line":8184},[321,9814,9815],{"class":390},"\u002F\u002F打印所有信息的函数\n",[321,9817,9818,9820,9823,9825,9827,9829,9831,9834,9836,9838],{"class":323,"line":8190},[321,9819,5571],{"class":327},[321,9821,9822],{"class":2169}," printInfo",[321,9824,332],{"class":331},[321,9826,7966],{"class":327},[321,9828,9606],{"class":2169},[321,9830,9609],{"class":5423},[321,9832,9833],{"class":331},"[], ",[321,9835,335],{"class":327},[321,9837,7538],{"class":5423},[321,9839,338],{"class":331},[321,9841,9842],{"class":323,"line":8217},[321,9843,1752],{"class":331},[321,9845,9846,9848,9850,9852,9854,9856,9858,9860,9862,9864,9866],{"class":323,"line":8222},[321,9847,3407],{"class":327},[321,9849,1864],{"class":331},[321,9851,335],{"class":327},[321,9853,9645],{"class":331},[321,9855,377],{"class":327},[321,9857,4299],{"class":380},[321,9859,9652],{"class":331},[321,9861,1242],{"class":327},[321,9863,9657],{"class":331},[321,9865,2498],{"class":327},[321,9867,338],{"class":331},[321,9869,9870],{"class":323,"line":8228},[321,9871,2236],{"class":331},[321,9873,9874,9877,9879,9882,9884,9887,9889],{"class":323,"line":8240},[321,9875,9876],{"class":331},"        cout ",[321,9878,1376],{"class":327},[321,9880,9881],{"class":436}," \"Teacher: \"",[321,9883,1651],{"class":327},[321,9885,9886],{"class":331}," tArray[i].tName ",[321,9888,1376],{"class":327},[321,9890,9047],{"class":331},[321,9892,9893,9895,9897,9899,9901,9903,9905,9907,9909,9911,9913,9915],{"class":323,"line":8252},[321,9894,3609],{"class":327},[321,9896,1864],{"class":331},[321,9898,335],{"class":327},[321,9900,9707],{"class":331},[321,9902,377],{"class":327},[321,9904,4299],{"class":380},[321,9906,9714],{"class":331},[321,9908,1242],{"class":327},[321,9910,2354],{"class":380},[321,9912,9721],{"class":331},[321,9914,2498],{"class":327},[321,9916,338],{"class":331},[321,9918,9919],{"class":323,"line":8264},[321,9920,2716],{"class":331},[321,9922,9924,9927,9929,9932,9934,9937,9939,9942,9944],{"class":323,"line":9923},47,[321,9925,9926],{"class":331},"            cout ",[321,9928,1376],{"class":327},[321,9930,9931],{"class":436}," \"",[321,9933,1437],{"class":380},[321,9935,9936],{"class":436},"Student: \"",[321,9938,1651],{"class":327},[321,9940,9941],{"class":331}," tArray[i].sArray[j].sName",[321,9943,1376],{"class":327},[321,9945,1398],{"class":331},[321,9947,9949,9951,9953,9955,9957,9960,9962,9965,9967],{"class":323,"line":9948},48,[321,9950,9926],{"class":331},[321,9952,1376],{"class":327},[321,9954,9931],{"class":436},[321,9956,1437],{"class":380},[321,9958,9959],{"class":436},"Age: \"",[321,9961,1651],{"class":327},[321,9963,9964],{"class":331}," tArray[i].sArray[j].age ",[321,9966,1376],{"class":327},[321,9968,9047],{"class":331},[321,9970,9972,9974,9976,9978,9980,9983,9985,9988,9990],{"class":323,"line":9971},49,[321,9973,9926],{"class":331},[321,9975,1376],{"class":327},[321,9977,9931],{"class":436},[321,9979,1437],{"class":380},[321,9981,9982],{"class":436},"Score: \"",[321,9984,1651],{"class":327},[321,9986,9987],{"class":331}," tArray[i].sArray[j].score ",[321,9989,1376],{"class":327},[321,9991,9992],{"class":331}," endl;   \n",[321,9994,9996],{"class":323,"line":9995},50,[321,9997,2735],{"class":331},[321,9999,10001],{"class":323,"line":10000},51,[321,10002,2393],{"class":331},[321,10004,10006],{"class":323,"line":10005},52,[321,10007,1771],{"class":331},[321,10009,10011,10013,10015],{"class":323,"line":10010},53,[321,10012,335],{"class":327},[321,10014,2179],{"class":2169},[321,10016,2182],{"class":331},[321,10018,10020],{"class":323,"line":10019},54,[321,10021,1752],{"class":331},[321,10023,10025],{"class":323,"line":10024},55,[321,10026,10027],{"class":390},"    \u002F\u002F随机数种子\n",[321,10029,10031,10033,10035,10037,10039,10041,10043,10045,10047],{"class":323,"line":10030},56,[321,10032,2579],{"class":2169},[321,10034,2582],{"class":331},[321,10036,2585],{"class":327},[321,10038,2588],{"class":327},[321,10040,761],{"class":331},[321,10042,2593],{"class":2169},[321,10044,332],{"class":331},[321,10046,2598],{"class":380},[321,10048,2601],{"class":331},[321,10050,10052],{"class":323,"line":10051},57,[321,10053,10054],{"class":390},"    \u002F\u002F1.创建3名老师的数组\n",[321,10056,10058,10060,10062,10065,10067],{"class":323,"line":10057},58,[321,10059,8102],{"class":327},[321,10061,9606],{"class":2169},[321,10063,10064],{"class":331}," tArray[",[321,10066,403],{"class":380},[321,10068,4896],{"class":331},[321,10070,10072],{"class":323,"line":10071},59,[321,10073,10074],{"class":390},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[321,10076,10078,10080,10083,10085,10088,10091,10093,10095,10098,10100],{"class":323,"line":10077},60,[321,10079,2191],{"class":327},[321,10081,10082],{"class":331}," len ",[321,10084,377],{"class":327},[321,10086,10087],{"class":327}," sizeof",[321,10089,10090],{"class":331},"(tArray) ",[321,10092,916],{"class":327},[321,10094,10087],{"class":327},[321,10096,10097],{"class":331},"(tArray[",[321,10099,523],{"class":380},[321,10101,4062],{"class":331},[321,10103,10105,10108],{"class":323,"line":10104},61,[321,10106,10107],{"class":2169},"    allocateSpace",[321,10109,10110],{"class":331},"(tArray, len);\n",[321,10112,10114],{"class":323,"line":10113},62,[321,10115,10116],{"class":390},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[321,10118,10120,10123],{"class":323,"line":10119},63,[321,10121,10122],{"class":2169},"    printInfo",[321,10124,10110],{"class":331},[321,10126,10128],{"class":323,"line":10127},64,[321,10129,2606],{"emptyLinePlaceholder":251},[321,10131,10133],{"class":323,"line":10132},65,[321,10134,1771],{"class":331},[151,10136,10137],{"start":167},[154,10138,10139,10142],{},[481,10140,10141],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10144,10145],{},"五名英雄信息如下：",[312,10147,10151],{"className":10148,"code":10149,"language":10150,"meta":30,"style":30},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[318,10152,10153,10171,10188,10205,10222],{"__ignoreMap":30},[321,10154,10155,10157,10160,10162,10164,10166,10169],{"class":323,"line":324},[321,10156,5123],{"class":331},[321,10158,10159],{"class":436},"\"刘备\"",[321,10161,710],{"class":331},[321,10163,1107],{"class":380},[321,10165,710],{"class":331},[321,10167,10168],{"class":436},"\"男\"",[321,10170,5136],{"class":331},[321,10172,10173,10175,10178,10180,10182,10184,10186],{"class":323,"line":167},[321,10174,5123],{"class":331},[321,10176,10177],{"class":436},"\"关羽\"",[321,10179,710],{"class":331},[321,10181,1082],{"class":380},[321,10183,710],{"class":331},[321,10185,10168],{"class":436},[321,10187,5136],{"class":331},[321,10189,10190,10192,10195,10197,10199,10201,10203],{"class":323,"line":200},[321,10191,5123],{"class":331},[321,10193,10194],{"class":436},"\"张飞\"",[321,10196,710],{"class":331},[321,10198,1032],{"class":380},[321,10200,710],{"class":331},[321,10202,10168],{"class":436},[321,10204,5136],{"class":331},[321,10206,10207,10209,10212,10214,10216,10218,10220],{"class":323,"line":1401},[321,10208,5123],{"class":331},[321,10210,10211],{"class":436},"\"赵云\"",[321,10213,710],{"class":331},[321,10215,1057],{"class":380},[321,10217,710],{"class":331},[321,10219,10168],{"class":436},[321,10221,5136],{"class":331},[321,10223,10224,10226,10229,10231,10233,10235,10238],{"class":323,"line":1407},[321,10225,5123],{"class":331},[321,10227,10228],{"class":436},"\"貂蝉\"",[321,10230,710],{"class":331},[321,10232,1007],{"class":380},[321,10234,710],{"class":331},[321,10236,10237],{"class":436},"\"女\"",[321,10239,5136],{"class":331},[19,10241,10242],{},"代码：",[312,10244,10246],{"className":314,"code":10245,"language":316,"meta":30,"style":30},"#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",[318,10247,10248,10254,10264,10270,10277,10281,10285,10291,10296,10300,10305,10328,10332,10357,10361,10394,10399,10428,10433,10448,10474,10494,10499,10504,10508,10512,10517,10539,10543,10567,10571,10633,10637,10641,10649,10653,10658,10669,10673,10689,10705,10721,10737,10753,10757,10777,10799,10804,10817,10824,10829,10835,10840,10853,10859],{"__ignoreMap":30},[321,10249,10250,10252],{"class":323,"line":324},[321,10251,2155],{"class":327},[321,10253,2158],{"class":436},[321,10255,10256,10258,10260,10262],{"class":323,"line":167},[321,10257,2163],{"class":327},[321,10259,2166],{"class":327},[321,10261,2170],{"class":2169},[321,10263,1497],{"class":331},[321,10265,10266,10268],{"class":323,"line":200},[321,10267,2155],{"class":327},[321,10269,7956],{"class":436},[321,10271,10272,10274],{"class":323,"line":1401},[321,10273,7966],{"class":327},[321,10275,10276],{"class":2169}," Sanguo\n",[321,10278,10279],{"class":323,"line":1407},[321,10280,1752],{"class":331},[321,10282,10283],{"class":323,"line":1421},[321,10284,7992],{"class":331},[321,10286,10287,10289],{"class":323,"line":1427},[321,10288,2191],{"class":327},[321,10290,8004],{"class":331},[321,10292,10293],{"class":323,"line":1518},[321,10294,10295],{"class":331},"    string gender;\n",[321,10297,10298],{"class":323,"line":1524},[321,10299,4201],{"class":331},[321,10301,10302],{"class":323,"line":1536},[321,10303,10304],{"class":390},"\u002F\u002F定义排序函数\n",[321,10306,10307,10309,10311,10313,10316,10318,10320,10322,10324,10326],{"class":323,"line":1818},[321,10308,5571],{"class":327},[321,10310,7523],{"class":2169},[321,10312,332],{"class":331},[321,10314,10315],{"class":2169},"Sanguo",[321,10317,6725],{"class":327},[321,10319,1027],{"class":5423},[321,10321,710],{"class":331},[321,10323,335],{"class":327},[321,10325,7538],{"class":5423},[321,10327,338],{"class":331},[321,10329,10330],{"class":323,"line":1823},[321,10331,1752],{"class":331},[321,10333,10334,10336,10338,10340,10342,10344,10346,10348,10350,10353,10355],{"class":323,"line":1829},[321,10335,3407],{"class":327},[321,10337,332],{"class":331},[321,10339,335],{"class":327},[321,10341,3238],{"class":331},[321,10343,377],{"class":327},[321,10345,523],{"class":380},[321,10347,3245],{"class":331},[321,10349,1242],{"class":327},[321,10351,10352],{"class":331},"len;i",[321,10354,2498],{"class":327},[321,10356,338],{"class":331},[321,10358,10359],{"class":323,"line":1834},[321,10360,2236],{"class":331},[321,10362,10363,10366,10368,10370,10372,10374,10376,10378,10380,10382,10384,10386,10388,10390,10392],{"class":323,"line":1848},[321,10364,10365],{"class":327},"     for",[321,10367,1864],{"class":331},[321,10369,335],{"class":327},[321,10371,3616],{"class":331},[321,10373,377],{"class":327},[321,10375,523],{"class":380},[321,10377,3623],{"class":331},[321,10379,1242],{"class":327},[321,10381,7565],{"class":331},[321,10383,864],{"class":327},[321,10385,549],{"class":380},[321,10387,864],{"class":327},[321,10389,3756],{"class":331},[321,10391,2498],{"class":327},[321,10393,338],{"class":331},[321,10395,10396],{"class":323,"line":1853},[321,10397,10398],{"class":331},"     {\n",[321,10400,10401,10404,10407,10409,10412,10414,10417,10419,10421,10423,10425],{"class":323,"line":1859},[321,10402,10403],{"class":327},"         if",[321,10405,10406],{"class":331}," ((s",[321,10408,813],{"class":327},[321,10410,10411],{"class":331},"j)->age ",[321,10413,1292],{"class":327},[321,10415,10416],{"class":331}," (s",[321,10418,813],{"class":327},[321,10420,799],{"class":331},[321,10422,813],{"class":327},[321,10424,549],{"class":380},[321,10426,10427],{"class":331},")->age)\n",[321,10429,10430],{"class":323,"line":1880},[321,10431,10432],{"class":331},"         {\n",[321,10434,10435,10438,10440,10443,10445],{"class":323,"line":1885},[321,10436,10437],{"class":331},"             Sanguo temp",[321,10439,7360],{"class":327},[321,10441,10442],{"class":331},"(s",[321,10444,813],{"class":327},[321,10446,10447],{"class":331},"j);\n",[321,10449,10450,10453,10455,10457,10460,10462,10464,10466,10468,10470,10472],{"class":323,"line":1899},[321,10451,10452],{"class":327},"             *",[321,10454,10442],{"class":331},[321,10456,813],{"class":327},[321,10458,10459],{"class":331},"j)",[321,10461,7360],{"class":327},[321,10463,10442],{"class":331},[321,10465,813],{"class":327},[321,10467,799],{"class":331},[321,10469,813],{"class":327},[321,10471,549],{"class":380},[321,10473,2925],{"class":331},[321,10475,10476,10478,10480,10482,10484,10486,10488,10490,10492],{"class":323,"line":1904},[321,10477,10452],{"class":327},[321,10479,10442],{"class":331},[321,10481,813],{"class":327},[321,10483,799],{"class":331},[321,10485,813],{"class":327},[321,10487,549],{"class":380},[321,10489,761],{"class":331},[321,10491,377],{"class":327},[321,10493,4486],{"class":331},[321,10495,10496],{"class":323,"line":1933},[321,10497,10498],{"class":331},"         }\n",[321,10500,10501],{"class":323,"line":1938},[321,10502,10503],{"class":331},"     }\n",[321,10505,10506],{"class":323,"line":1955},[321,10507,2393],{"class":331},[321,10509,10510],{"class":323,"line":1960},[321,10511,1771],{"class":331},[321,10513,10514],{"class":323,"line":1965},[321,10515,10516],{"class":390},"\u002F\u002F定义打印函数\n",[321,10518,10519,10521,10523,10525,10527,10529,10531,10533,10535,10537],{"class":323,"line":1970},[321,10520,5571],{"class":327},[321,10522,9822],{"class":2169},[321,10524,332],{"class":331},[321,10526,10315],{"class":2169},[321,10528,6725],{"class":327},[321,10530,1027],{"class":5423},[321,10532,710],{"class":331},[321,10534,335],{"class":327},[321,10536,7538],{"class":5423},[321,10538,338],{"class":331},[321,10540,10541],{"class":323,"line":1984},[321,10542,1752],{"class":331},[321,10544,10545,10547,10549,10551,10553,10555,10557,10559,10561,10563,10565],{"class":323,"line":1989},[321,10546,3407],{"class":327},[321,10548,1864],{"class":331},[321,10550,335],{"class":327},[321,10552,3238],{"class":331},[321,10554,377],{"class":327},[321,10556,523],{"class":380},[321,10558,3245],{"class":331},[321,10560,1242],{"class":327},[321,10562,10352],{"class":331},[321,10564,2498],{"class":327},[321,10566,338],{"class":331},[321,10568,10569],{"class":323,"line":2783},[321,10570,2236],{"class":331},[321,10572,10573,10575,10577,10579,10581,10584,10586,10588,10590,10593,10595,10597,10599,10602,10604,10606,10608,10611,10613,10615,10617,10620,10622,10624,10626,10629,10631],{"class":323,"line":2797},[321,10574,3657],{"class":331},[321,10576,1376],{"class":327},[321,10578,583],{"class":436},[321,10580,1437],{"class":380},[321,10582,10583],{"class":436},"姓名：\"",[321,10585,1376],{"class":327},[321,10587,10442],{"class":331},[321,10589,813],{"class":327},[321,10591,10592],{"class":331},"i)->name",[321,10594,1376],{"class":327},[321,10596,583],{"class":436},[321,10598,1437],{"class":380},[321,10600,10601],{"class":436},"年龄：\"",[321,10603,1376],{"class":327},[321,10605,10442],{"class":331},[321,10607,813],{"class":327},[321,10609,10610],{"class":331},"i)->age",[321,10612,1376],{"class":327},[321,10614,583],{"class":436},[321,10616,1437],{"class":380},[321,10618,10619],{"class":436},"性别：\"",[321,10621,1376],{"class":327},[321,10623,10442],{"class":331},[321,10625,813],{"class":327},[321,10627,10628],{"class":331},"i)->gender",[321,10630,1376],{"class":327},[321,10632,1398],{"class":331},[321,10634,10635],{"class":323,"line":2805},[321,10636,2393],{"class":331},[321,10638,10639],{"class":323,"line":2810},[321,10640,1771],{"class":331},[321,10642,10643,10645,10647],{"class":323,"line":2816},[321,10644,335],{"class":327},[321,10646,2179],{"class":2169},[321,10648,2182],{"class":331},[321,10650,10651],{"class":323,"line":2822},[321,10652,1752],{"class":331},[321,10654,10655],{"class":323,"line":2827},[321,10656,10657],{"class":390},"    \u002F\u002F定义结构体变量\n",[321,10659,10660,10663,10665,10667],{"class":323,"line":8155},[321,10661,10662],{"class":331},"    Sanguo s1[",[321,10664,651],{"class":380},[321,10666,1272],{"class":331},[321,10668,5114],{"class":327},[321,10670,10671],{"class":323,"line":8179},[321,10672,2236],{"class":331},[321,10674,10675,10677,10679,10681,10683,10685,10687],{"class":323,"line":8184},[321,10676,5123],{"class":331},[321,10678,10159],{"class":436},[321,10680,710],{"class":331},[321,10682,1107],{"class":380},[321,10684,710],{"class":331},[321,10686,10168],{"class":436},[321,10688,5136],{"class":331},[321,10690,10691,10693,10695,10697,10699,10701,10703],{"class":323,"line":8190},[321,10692,5123],{"class":331},[321,10694,10177],{"class":436},[321,10696,710],{"class":331},[321,10698,1082],{"class":380},[321,10700,710],{"class":331},[321,10702,10168],{"class":436},[321,10704,5136],{"class":331},[321,10706,10707,10709,10711,10713,10715,10717,10719],{"class":323,"line":8217},[321,10708,5123],{"class":331},[321,10710,10194],{"class":436},[321,10712,710],{"class":331},[321,10714,1032],{"class":380},[321,10716,710],{"class":331},[321,10718,10168],{"class":436},[321,10720,5136],{"class":331},[321,10722,10723,10725,10727,10729,10731,10733,10735],{"class":323,"line":8222},[321,10724,5123],{"class":331},[321,10726,10211],{"class":436},[321,10728,710],{"class":331},[321,10730,1057],{"class":380},[321,10732,710],{"class":331},[321,10734,10168],{"class":436},[321,10736,5136],{"class":331},[321,10738,10739,10741,10743,10745,10747,10749,10751],{"class":323,"line":8228},[321,10740,5123],{"class":331},[321,10742,10228],{"class":436},[321,10744,710],{"class":331},[321,10746,1007],{"class":380},[321,10748,710],{"class":331},[321,10750,10237],{"class":436},[321,10752,5136],{"class":331},[321,10754,10755],{"class":323,"line":8240},[321,10756,5157],{"class":331},[321,10758,10759,10761,10763,10765,10768,10770,10773,10775],{"class":323,"line":8252},[321,10760,2191],{"class":327},[321,10762,7538],{"class":331},[321,10764,4409],{"class":327},[321,10766,10767],{"class":331},"(s1)",[321,10769,4415],{"class":327},[321,10771,10772],{"class":331},"(s1[",[321,10774,523],{"class":380},[321,10776,4062],{"class":331},[321,10778,10779,10782,10784,10787,10789,10792,10795,10797],{"class":323,"line":8264},[321,10780,10781],{"class":331},"    Sanguo ",[321,10783,787],{"class":327},[321,10785,10786],{"class":331},"s ",[321,10788,377],{"class":327},[321,10790,10791],{"class":327}," &",[321,10793,10794],{"class":331},"s1[",[321,10796,523],{"class":380},[321,10798,4896],{"class":331},[321,10800,10801],{"class":323,"line":9923},[321,10802,10803],{"class":390},"    \u002F\u002F排序前：\n",[321,10805,10806,10808,10810,10813,10815],{"class":323,"line":9948},[321,10807,6736],{"class":331},[321,10809,1376],{"class":327},[321,10811,10812],{"class":436}," \"排序前：\"",[321,10814,1651],{"class":327},[321,10816,9047],{"class":331},[321,10818,10819,10821],{"class":323,"line":9971},[321,10820,10122],{"class":2169},[321,10822,10823],{"class":331},"(s,len);\n",[321,10825,10826],{"class":323,"line":9995},[321,10827,10828],{"class":390},"    \u002F\u002F调用排序函数\n",[321,10830,10831,10833],{"class":323,"line":10000},[321,10832,7805],{"class":2169},[321,10834,10823],{"class":331},[321,10836,10837],{"class":323,"line":10005},[321,10838,10839],{"class":390},"    \u002F\u002F排序后\n",[321,10841,10842,10844,10846,10849,10851],{"class":323,"line":10010},[321,10843,6736],{"class":331},[321,10845,1376],{"class":327},[321,10847,10848],{"class":436}," \"排序后：\"",[321,10850,1651],{"class":327},[321,10852,9047],{"class":331},[321,10854,10855,10857],{"class":323,"line":10019},[321,10856,10122],{"class":2169},[321,10858,10823],{"class":331},[321,10860,10861],{"class":323,"line":10024},[321,10862,1771],{"class":331},[19,10864,10865,10866,10868],{},"注意：使用指针时直接用传首地址**&s",[321,10867,523],{},"**",[5333,10870,10871],{},"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":30,"searchDepth":167,"depth":167,"links":10873},[10874,10875,10876,10877,10878,10879,10880],{"id":7910,"depth":167,"text":7911},{"id":8272,"depth":167,"text":8273},{"id":8541,"depth":167,"text":8542},{"id":8706,"depth":167,"text":8707},{"id":8922,"depth":167,"text":8923},{"id":9243,"depth":167,"text":9244},{"id":9471,"depth":167,"text":9472},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7899,"description":7907},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10887,"title":10888,"body":10889,"description":30,"extension":249,"meta":12232,"navigation":251,"path":12233,"seo":12234,"stem":12235,"__hash__":12236},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10890,"toc":12226},[10891,10894,10898,10904,10918,10923,10926,10930,10937,10943,10946,10953,10959,10964,10967,10970,10973,11537,11540,11554,11558,11563,11579,11719,11722,11728,11731,11736,11744,11852,11855,11860,11863,11868,11871,11877,11880,12223],[10,10892,10888],{"id":10893},"_5程序内存模型",[14,10895,10897],{"id":10896},"_51内存分区模型","5.1内存分区模型",[19,10899,10900,10901],{},"C++程序在执行时，将内存大方向划分为",[481,10902,10903],{},"4个区域",[1339,10905,10906,10909,10912,10915],{},[154,10907,10908],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[154,10910,10911],{},"全局区：存放全局变量和静态变量以及常量",[154,10913,10914],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[154,10916,10917],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10919,10920],{},[481,10921,10922],{},"内存四区意义：",[19,10924,10925],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[292,10927,10929],{"id":10928},"_511程序运行前","5.1.1程序运行前",[19,10931,10932,10933,10936],{},"​\t在程序编译后，生成了exe可执行程序，",[481,10934,10935],{},"未执行该程序前","分为两个区域",[19,10938,10939,10940],{},"​\t",[481,10941,10942],{},"代码区：",[19,10944,10945],{},"​\t\t存放 CPU 执行的机器指令",[19,10947,10948,10949,10952],{},"​\t\t代码区是",[481,10950,10951],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,10954,10948,10955,10958],{},[481,10956,10957],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,10960,10939,10961],{},[481,10962,10963],{},"全局区：",[19,10965,10966],{},"​\t\t全局变量和静态变量存放在此.",[19,10968,10969],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,10971,10972],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[312,10974,10976],{"className":314,"code":10975,"language":316,"meta":30,"style":30},"\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",[318,10977,10978,10983,10996,11009,11013,11018,11033,11048,11052,11061,11065,11070,11083,11096,11100,11105,11131,11157,11161,11188,11214,11218,11223,11239,11254,11258,11284,11310,11314,11339,11364,11368,11394,11420,11424,11440,11455,11481,11507,11511,11521,11525,11533],{"__ignoreMap":30},[321,10979,10980],{"class":323,"line":324},[321,10981,10982],{"class":390},"\u002F\u002F全局变量\n",[321,10984,10985,10987,10990,10992,10994],{"class":323,"line":167},[321,10986,335],{"class":327},[321,10988,10989],{"class":331}," g_a ",[321,10991,377],{"class":327},[321,10993,2244],{"class":380},[321,10995,1497],{"class":331},[321,10997,10998,11000,11003,11005,11007],{"class":323,"line":200},[321,10999,335],{"class":327},[321,11001,11002],{"class":331}," g_b ",[321,11004,377],{"class":327},[321,11006,2244],{"class":380},[321,11008,1497],{"class":331},[321,11010,11011],{"class":323,"line":1401},[321,11012,2606],{"emptyLinePlaceholder":251},[321,11014,11015],{"class":323,"line":1407},[321,11016,11017],{"class":390},"\u002F\u002F全局常量\n",[321,11019,11020,11022,11024,11027,11029,11031],{"class":323,"line":1421},[321,11021,6999],{"class":327},[321,11023,2588],{"class":327},[321,11025,11026],{"class":331}," c_g_a ",[321,11028,377],{"class":327},[321,11030,2244],{"class":380},[321,11032,1497],{"class":331},[321,11034,11035,11037,11039,11042,11044,11046],{"class":323,"line":1427},[321,11036,6999],{"class":327},[321,11038,2588],{"class":327},[321,11040,11041],{"class":331}," c_g_b ",[321,11043,377],{"class":327},[321,11045,2244],{"class":380},[321,11047,1497],{"class":331},[321,11049,11050],{"class":323,"line":1518},[321,11051,2606],{"emptyLinePlaceholder":251},[321,11053,11054,11056,11058],{"class":323,"line":1524},[321,11055,335],{"class":327},[321,11057,2179],{"class":2169},[321,11059,11060],{"class":331},"() {\n",[321,11062,11063],{"class":323,"line":1536},[321,11064,2606],{"emptyLinePlaceholder":251},[321,11066,11067],{"class":323,"line":1818},[321,11068,11069],{"class":390},"    \u002F\u002F局部变量\n",[321,11071,11072,11074,11077,11079,11081],{"class":323,"line":1823},[321,11073,2191],{"class":327},[321,11075,11076],{"class":331}," a ",[321,11078,377],{"class":327},[321,11080,2244],{"class":380},[321,11082,1497],{"class":331},[321,11084,11085,11087,11090,11092,11094],{"class":323,"line":1829},[321,11086,2191],{"class":327},[321,11088,11089],{"class":331}," b ",[321,11091,377],{"class":327},[321,11093,2244],{"class":380},[321,11095,1497],{"class":331},[321,11097,11098],{"class":323,"line":1834},[321,11099,2606],{"emptyLinePlaceholder":251},[321,11101,11102],{"class":323,"line":1848},[321,11103,11104],{"class":390},"    \u002F\u002F打印地址\n",[321,11106,11107,11109,11111,11114,11116,11118,11120,11122,11124,11127,11129],{"class":323,"line":1853},[321,11108,6736],{"class":331},[321,11110,1376],{"class":327},[321,11112,11113],{"class":436}," \"局部变量a地址为： \"",[321,11115,1651],{"class":327},[321,11117,1864],{"class":331},[321,11119,335],{"class":327},[321,11121,761],{"class":331},[321,11123,685],{"class":327},[321,11125,11126],{"class":331},"a ",[321,11128,1376],{"class":327},[321,11130,9047],{"class":331},[321,11132,11133,11135,11137,11140,11142,11144,11146,11148,11150,11153,11155],{"class":323,"line":1859},[321,11134,6736],{"class":331},[321,11136,1376],{"class":327},[321,11138,11139],{"class":436}," \"局部变量b地址为： \"",[321,11141,1651],{"class":327},[321,11143,1864],{"class":331},[321,11145,335],{"class":327},[321,11147,761],{"class":331},[321,11149,685],{"class":327},[321,11151,11152],{"class":331},"b ",[321,11154,1376],{"class":327},[321,11156,9047],{"class":331},[321,11158,11159],{"class":323,"line":1880},[321,11160,2606],{"emptyLinePlaceholder":251},[321,11162,11163,11165,11167,11170,11172,11175,11177,11179,11181,11184,11186],{"class":323,"line":1885},[321,11164,6736],{"class":331},[321,11166,1376],{"class":327},[321,11168,11169],{"class":436}," \"全局变量g_a地址为： \"",[321,11171,1651],{"class":327},[321,11173,11174],{"class":331},"  (",[321,11176,335],{"class":327},[321,11178,761],{"class":331},[321,11180,685],{"class":327},[321,11182,11183],{"class":331},"g_a ",[321,11185,1376],{"class":327},[321,11187,9047],{"class":331},[321,11189,11190,11192,11194,11197,11199,11201,11203,11205,11207,11210,11212],{"class":323,"line":1899},[321,11191,6736],{"class":331},[321,11193,1376],{"class":327},[321,11195,11196],{"class":436}," \"全局变量g_b地址为： \"",[321,11198,1651],{"class":327},[321,11200,11174],{"class":331},[321,11202,335],{"class":327},[321,11204,761],{"class":331},[321,11206,685],{"class":327},[321,11208,11209],{"class":331},"g_b ",[321,11211,1376],{"class":327},[321,11213,9047],{"class":331},[321,11215,11216],{"class":323,"line":1904},[321,11217,2606],{"emptyLinePlaceholder":251},[321,11219,11220],{"class":323,"line":1933},[321,11221,11222],{"class":390},"    \u002F\u002F静态变量\n",[321,11224,11225,11228,11230,11233,11235,11237],{"class":323,"line":1938},[321,11226,11227],{"class":327},"    static",[321,11229,2588],{"class":327},[321,11231,11232],{"class":331}," s_a ",[321,11234,377],{"class":327},[321,11236,2244],{"class":380},[321,11238,1497],{"class":331},[321,11240,11241,11243,11245,11248,11250,11252],{"class":323,"line":1955},[321,11242,11227],{"class":327},[321,11244,2588],{"class":327},[321,11246,11247],{"class":331}," s_b ",[321,11249,377],{"class":327},[321,11251,2244],{"class":380},[321,11253,1497],{"class":331},[321,11255,11256],{"class":323,"line":1960},[321,11257,2606],{"emptyLinePlaceholder":251},[321,11259,11260,11262,11264,11267,11269,11271,11273,11275,11277,11280,11282],{"class":323,"line":1965},[321,11261,6736],{"class":331},[321,11263,1376],{"class":327},[321,11265,11266],{"class":436}," \"静态变量s_a地址为： \"",[321,11268,1651],{"class":327},[321,11270,1864],{"class":331},[321,11272,335],{"class":327},[321,11274,761],{"class":331},[321,11276,685],{"class":327},[321,11278,11279],{"class":331},"s_a ",[321,11281,1376],{"class":327},[321,11283,9047],{"class":331},[321,11285,11286,11288,11290,11293,11295,11297,11299,11301,11303,11306,11308],{"class":323,"line":1970},[321,11287,6736],{"class":331},[321,11289,1376],{"class":327},[321,11291,11292],{"class":436}," \"静态变量s_b地址为： \"",[321,11294,1651],{"class":327},[321,11296,1864],{"class":331},[321,11298,335],{"class":327},[321,11300,761],{"class":331},[321,11302,685],{"class":327},[321,11304,11305],{"class":331},"s_b ",[321,11307,1376],{"class":327},[321,11309,9047],{"class":331},[321,11311,11312],{"class":323,"line":1984},[321,11313,2606],{"emptyLinePlaceholder":251},[321,11315,11316,11318,11320,11323,11325,11327,11329,11331,11333,11335,11337],{"class":323,"line":1989},[321,11317,6736],{"class":331},[321,11319,1376],{"class":327},[321,11321,11322],{"class":436}," \"字符串常量地址为： \"",[321,11324,1651],{"class":327},[321,11326,1864],{"class":331},[321,11328,335],{"class":327},[321,11330,761],{"class":331},[321,11332,685],{"class":327},[321,11334,1393],{"class":436},[321,11336,1651],{"class":327},[321,11338,9047],{"class":331},[321,11340,11341,11343,11345,11347,11349,11351,11353,11355,11357,11360,11362],{"class":323,"line":2783},[321,11342,6736],{"class":331},[321,11344,1376],{"class":327},[321,11346,11322],{"class":436},[321,11348,1651],{"class":327},[321,11350,1864],{"class":331},[321,11352,335],{"class":327},[321,11354,761],{"class":331},[321,11356,685],{"class":327},[321,11358,11359],{"class":436},"\"hello world1\"",[321,11361,1651],{"class":327},[321,11363,9047],{"class":331},[321,11365,11366],{"class":323,"line":2797},[321,11367,2606],{"emptyLinePlaceholder":251},[321,11369,11370,11372,11374,11377,11379,11381,11383,11385,11387,11390,11392],{"class":323,"line":2805},[321,11371,6736],{"class":331},[321,11373,1376],{"class":327},[321,11375,11376],{"class":436}," \"全局常量c_g_a地址为： \"",[321,11378,1651],{"class":327},[321,11380,1864],{"class":331},[321,11382,335],{"class":327},[321,11384,761],{"class":331},[321,11386,685],{"class":327},[321,11388,11389],{"class":331},"c_g_a ",[321,11391,1376],{"class":327},[321,11393,9047],{"class":331},[321,11395,11396,11398,11400,11403,11405,11407,11409,11411,11413,11416,11418],{"class":323,"line":2810},[321,11397,6736],{"class":331},[321,11399,1376],{"class":327},[321,11401,11402],{"class":436}," \"全局常量c_g_b地址为： \"",[321,11404,1651],{"class":327},[321,11406,1864],{"class":331},[321,11408,335],{"class":327},[321,11410,761],{"class":331},[321,11412,685],{"class":327},[321,11414,11415],{"class":331},"c_g_b ",[321,11417,1376],{"class":327},[321,11419,9047],{"class":331},[321,11421,11422],{"class":323,"line":2816},[321,11423,2606],{"emptyLinePlaceholder":251},[321,11425,11426,11429,11431,11434,11436,11438],{"class":323,"line":2822},[321,11427,11428],{"class":327},"    const",[321,11430,2588],{"class":327},[321,11432,11433],{"class":331}," c_l_a ",[321,11435,377],{"class":327},[321,11437,2244],{"class":380},[321,11439,1497],{"class":331},[321,11441,11442,11444,11446,11449,11451,11453],{"class":323,"line":2827},[321,11443,11428],{"class":327},[321,11445,2588],{"class":327},[321,11447,11448],{"class":331}," c_l_b ",[321,11450,377],{"class":327},[321,11452,2244],{"class":380},[321,11454,1497],{"class":331},[321,11456,11457,11459,11461,11464,11466,11468,11470,11472,11474,11477,11479],{"class":323,"line":8155},[321,11458,6736],{"class":331},[321,11460,1376],{"class":327},[321,11462,11463],{"class":436}," \"局部常量c_l_a地址为： \"",[321,11465,1651],{"class":327},[321,11467,1864],{"class":331},[321,11469,335],{"class":327},[321,11471,761],{"class":331},[321,11473,685],{"class":327},[321,11475,11476],{"class":331},"c_l_a ",[321,11478,1376],{"class":327},[321,11480,9047],{"class":331},[321,11482,11483,11485,11487,11490,11492,11494,11496,11498,11500,11503,11505],{"class":323,"line":8179},[321,11484,6736],{"class":331},[321,11486,1376],{"class":327},[321,11488,11489],{"class":436}," \"局部常量c_l_b地址为： \"",[321,11491,1651],{"class":327},[321,11493,1864],{"class":331},[321,11495,335],{"class":327},[321,11497,761],{"class":331},[321,11499,685],{"class":327},[321,11501,11502],{"class":331},"c_l_b ",[321,11504,1376],{"class":327},[321,11506,9047],{"class":331},[321,11508,11509],{"class":323,"line":8184},[321,11510,2606],{"emptyLinePlaceholder":251},[321,11512,11513,11515,11517,11519],{"class":323,"line":8190},[321,11514,2509],{"class":2169},[321,11516,332],{"class":331},[321,11518,2514],{"class":436},[321,11520,2925],{"class":331},[321,11522,11523],{"class":323,"line":8217},[321,11524,2606],{"emptyLinePlaceholder":251},[321,11526,11527,11529,11531],{"class":323,"line":8222},[321,11528,4296],{"class":327},[321,11530,4299],{"class":380},[321,11532,1497],{"class":331},[321,11534,11535],{"class":323,"line":8228},[321,11536,1771],{"class":331},[19,11538,11539],{},"总结：",[1339,11541,11542,11545,11548,11551],{},[154,11543,11544],{},"c++中程序运行前分为全局区和代码区",[154,11546,11547],{},"代码区特点是共享和只读",[154,11549,11550],{},"全局区中存放全局变量、静态变量、常量",[154,11552,11553],{},"常量区中存放const修饰的全局常量和字符串常量",[292,11555,11557],{"id":11556},"_512程序运行后","5.1.2程序运行后",[151,11559,11560],{},[154,11561,11562],{},"栈区：",[1339,11564,11565,11572],{},[154,11566,11567,11568,11571],{},"由编译器自动分配释放, 存放",[481,11569,11570],{},"函数的参数值,局部变量","等",[154,11573,11574,11575,11578],{},"注意事项：",[481,11576,11577],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[312,11580,11582],{"className":314,"code":11581,"language":316,"meta":30,"style":30},"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",[318,11583,11584,11595,11599,11614,11626,11630,11634,11642,11647,11662,11680,11697,11707,11715],{"__ignoreMap":30},[321,11585,11586,11588,11590,11593],{"class":323,"line":324},[321,11587,335],{"class":327},[321,11589,6725],{"class":327},[321,11591,11592],{"class":2169}," func",[321,11594,2182],{"class":331},[321,11596,11597],{"class":323,"line":167},[321,11598,1752],{"class":331},[321,11600,11601,11603,11605,11607,11609,11611],{"class":323,"line":200},[321,11602,2191],{"class":327},[321,11604,11076],{"class":331},[321,11606,377],{"class":327},[321,11608,2244],{"class":380},[321,11610,387],{"class":331},[321,11612,11613],{"class":390}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[321,11615,11616,11618,11620,11623],{"class":323,"line":1401},[321,11617,4296],{"class":327},[321,11619,10791],{"class":327},[321,11621,11622],{"class":331},"a;",[321,11624,11625],{"class":390}," \u002F\u002F放回局部变量的地址\n",[321,11627,11628],{"class":323,"line":1407},[321,11629,1771],{"class":331},[321,11631,11632],{"class":323,"line":1421},[321,11633,2606],{"emptyLinePlaceholder":251},[321,11635,11636,11638,11640],{"class":323,"line":1427},[321,11637,335],{"class":327},[321,11639,2179],{"class":2169},[321,11641,11060],{"class":331},[321,11643,11644],{"class":323,"line":1518},[321,11645,11646],{"class":390},"    \u002F\u002F接受func的返回值\n",[321,11648,11649,11651,11653,11656,11658,11660],{"class":323,"line":1524},[321,11650,2191],{"class":327},[321,11652,6725],{"class":327},[321,11654,11655],{"class":331},"p ",[321,11657,377],{"class":327},[321,11659,11592],{"class":2169},[321,11661,5843],{"class":331},[321,11663,11664,11666,11668,11670,11672,11674,11677],{"class":323,"line":1536},[321,11665,6736],{"class":331},[321,11667,1376],{"class":327},[321,11669,6725],{"class":327},[321,11671,11655],{"class":331},[321,11673,1376],{"class":327},[321,11675,11676],{"class":331}," endl;",[321,11678,11679],{"class":390}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[321,11681,11682,11684,11686,11688,11690,11692,11694],{"class":323,"line":1818},[321,11683,6736],{"class":331},[321,11685,1376],{"class":327},[321,11687,6725],{"class":327},[321,11689,11655],{"class":331},[321,11691,1376],{"class":327},[321,11693,11676],{"class":331},[321,11695,11696],{"class":390}," \u002F\u002F第二次这个数据不再保留\n",[321,11698,11699,11701,11703,11705],{"class":323,"line":1823},[321,11700,2509],{"class":2169},[321,11702,332],{"class":331},[321,11704,2514],{"class":436},[321,11706,2925],{"class":331},[321,11708,11709,11711,11713],{"class":323,"line":1829},[321,11710,4296],{"class":327},[321,11712,4299],{"class":380},[321,11714,1497],{"class":331},[321,11716,11717],{"class":323,"line":1834},[321,11718,1771],{"class":331},[19,11720,11721],{},"输出结果：",[19,11723,11724],{},[28,11725],{"alt":11726,"src":11727},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11729,11730],{},"总结：不要返回局部变量的地址",[151,11732,11733],{"start":167},[154,11734,11735],{},"堆区",[1339,11737,11738,11741],{},[154,11739,11740],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[154,11742,11743],{},"在c++中主要利用new在堆区开辟内存",[312,11745,11747],{"className":314,"code":11746,"language":316,"meta":30,"style":30},"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",[318,11748,11749,11764,11768,11773,11794,11801,11805,11813,11817,11822,11836,11848],{"__ignoreMap":30},[321,11750,11751,11753,11756,11759,11761],{"class":323,"line":324},[321,11752,335],{"class":327},[321,11754,11755],{"class":327},"  *",[321,11757,11758],{"class":2169},"func",[321,11760,2633],{"class":331},[321,11762,11763],{"class":390},"  \u002F\u002F函数返回指针\n",[321,11765,11766],{"class":323,"line":167},[321,11767,1752],{"class":331},[321,11769,11770],{"class":323,"line":200},[321,11771,11772],{"class":390},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[321,11774,11775,11777,11779,11781,11783,11786,11788,11790,11792],{"class":323,"line":1401},[321,11776,4353],{"class":327},[321,11778,6725],{"class":327},[321,11780,19],{"class":331},[321,11782,377],{"class":327},[321,11784,11785],{"class":327}," new",[321,11787,2588],{"class":327},[321,11789,332],{"class":331},[321,11791,778],{"class":380},[321,11793,2925],{"class":331},[321,11795,11796,11798],{"class":323,"line":1407},[321,11797,4587],{"class":327},[321,11799,11800],{"class":331}," p;\n",[321,11802,11803],{"class":323,"line":1421},[321,11804,1771],{"class":331},[321,11806,11807,11809,11811],{"class":323,"line":1427},[321,11808,335],{"class":327},[321,11810,2179],{"class":2169},[321,11812,2182],{"class":331},[321,11814,11815],{"class":323,"line":1518},[321,11816,1752],{"class":331},[321,11818,11819],{"class":323,"line":1524},[321,11820,11821],{"class":390},"    \u002F\u002F在堆区开辟数据\n",[321,11823,11824,11826,11828,11830,11832,11834],{"class":323,"line":1536},[321,11825,2191],{"class":327},[321,11827,6725],{"class":327},[321,11829,19],{"class":331},[321,11831,377],{"class":327},[321,11833,11758],{"class":2169},[321,11835,5843],{"class":331},[321,11837,11838,11840,11842,11844,11846],{"class":323,"line":1818},[321,11839,1757],{"class":331},[321,11841,6626],{"class":327},[321,11843,19],{"class":331},[321,11845,1376],{"class":327},[321,11847,1398],{"class":331},[321,11849,11850],{"class":323,"line":1823},[321,11851,1771],{"class":331},[19,11853,11854],{},"图片展示：",[19,11856,11857],{},[28,11858],{"alt":11726,"src":11859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11861,11862],{},"堆区内存由程序员管生死！！！",[151,11864,11865],{"start":200},[154,11866,11867],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11869,11870],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11872,11873,11874],{},"​语法：",[318,11875,11876],{}," new 数据类型",[19,11878,11879],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[312,11881,11883],{"className":314,"code":11882,"language":316,"meta":30,"style":30},"\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",[318,11884,11885,11890,11900,11904,11909,11914,11936,11940,11948,11952,11966,11978,11990,12002,12007,12012,12023,12027,12032,12040,12044,12049,12071,12097,12101,12119,12123,12149,12153,12165,12169,12174,12179,12187,12191,12195,12203,12207,12213,12219],{"__ignoreMap":30},[321,11886,11887],{"class":323,"line":324},[321,11888,11889],{"class":390},"\u002F\u002F1.new的基本语法\n",[321,11891,11892,11894,11896,11898],{"class":323,"line":167},[321,11893,335],{"class":327},[321,11895,6725],{"class":327},[321,11897,11758],{"class":2169},[321,11899,2182],{"class":331},[321,11901,11902],{"class":323,"line":200},[321,11903,1752],{"class":331},[321,11905,11906],{"class":323,"line":1401},[321,11907,11908],{"class":390},"    \u002F\u002F在堆区创建整型数据\n",[321,11910,11911],{"class":323,"line":1407},[321,11912,11913],{"class":390},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[321,11915,11916,11918,11920,11922,11925,11927,11929,11931,11933],{"class":323,"line":1421},[321,11917,2191],{"class":327},[321,11919,6725],{"class":327},[321,11921,19],{"class":331},[321,11923,11924],{"class":327},"=new",[321,11926,2588],{"class":327},[321,11928,332],{"class":331},[321,11930,778],{"class":380},[321,11932,6173],{"class":331},[321,11934,11935],{"class":390},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[321,11937,11938],{"class":323,"line":1427},[321,11939,1771],{"class":331},[321,11941,11942,11944,11946],{"class":323,"line":1518},[321,11943,5571],{"class":327},[321,11945,5795],{"class":2169},[321,11947,2182],{"class":331},[321,11949,11950],{"class":323,"line":1524},[321,11951,1752],{"class":331},[321,11953,11954,11956,11958,11960,11962,11964],{"class":323,"line":1536},[321,11955,2191],{"class":327},[321,11957,6725],{"class":327},[321,11959,19],{"class":331},[321,11961,377],{"class":327},[321,11963,11758],{"class":2169},[321,11965,5843],{"class":331},[321,11967,11968,11970,11972,11974,11976],{"class":323,"line":1818},[321,11969,1757],{"class":331},[321,11971,6626],{"class":327},[321,11973,19],{"class":331},[321,11975,1376],{"class":327},[321,11977,1398],{"class":331},[321,11979,11980,11982,11984,11986,11988],{"class":323,"line":1823},[321,11981,1757],{"class":331},[321,11983,6626],{"class":327},[321,11985,19],{"class":331},[321,11987,1376],{"class":327},[321,11989,1398],{"class":331},[321,11991,11992,11994,11996,11998,12000],{"class":323,"line":1829},[321,11993,1757],{"class":331},[321,11995,6626],{"class":327},[321,11997,19],{"class":331},[321,11999,1376],{"class":327},[321,12001,1398],{"class":331},[321,12003,12004],{"class":323,"line":1834},[321,12005,12006],{"class":390},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[321,12008,12009],{"class":323,"line":1848},[321,12010,12011],{"class":390},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[321,12013,12014,12017,12020],{"class":323,"line":1853},[321,12015,12016],{"class":327},"    delete",[321,12018,12019],{"class":331}," p;",[321,12021,12022],{"class":390},"\u002F\u002F删除这块地址\n",[321,12024,12025],{"class":323,"line":1859},[321,12026,1771],{"class":331},[321,12028,12029],{"class":323,"line":1880},[321,12030,12031],{"class":390},"\u002F\u002F2.在堆区利用new开辟数组\n",[321,12033,12034,12036,12038],{"class":323,"line":1885},[321,12035,5571],{"class":327},[321,12037,5864],{"class":2169},[321,12039,2182],{"class":331},[321,12041,12042],{"class":323,"line":1899},[321,12043,1752],{"class":331},[321,12045,12046],{"class":323,"line":1904},[321,12047,12048],{"class":390},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[321,12050,12051,12053,12055,12057,12059,12061,12063,12065,12068],{"class":323,"line":1933},[321,12052,2191],{"class":327},[321,12054,6725],{"class":327},[321,12056,4086],{"class":331},[321,12058,11924],{"class":327},[321,12060,2588],{"class":327},[321,12062,1222],{"class":331},[321,12064,778],{"class":380},[321,12066,12067],{"class":331},"];",[321,12069,12070],{"class":390},"\u002F\u002F10代表数组有10个元素\n",[321,12072,12073,12075,12077,12079,12081,12083,12085,12087,12089,12091,12093,12095],{"class":323,"line":1938},[321,12074,3407],{"class":327},[321,12076,1864],{"class":331},[321,12078,335],{"class":327},[321,12080,3238],{"class":331},[321,12082,377],{"class":327},[321,12084,523],{"class":380},[321,12086,3245],{"class":331},[321,12088,1242],{"class":327},[321,12090,778],{"class":380},[321,12092,3245],{"class":331},[321,12094,2498],{"class":327},[321,12096,338],{"class":331},[321,12098,12099],{"class":323,"line":1955},[321,12100,2236],{"class":331},[321,12102,12103,12106,12108,12110,12112,12114,12116],{"class":323,"line":1960},[321,12104,12105],{"class":331},"        arr[i]",[321,12107,377],{"class":327},[321,12109,773],{"class":331},[321,12111,813],{"class":327},[321,12113,643],{"class":380},[321,12115,387],{"class":331},[321,12117,12118],{"class":390},"\u002F\u002F给10个元素赋值100～109\n",[321,12120,12121],{"class":323,"line":1965},[321,12122,2393],{"class":331},[321,12124,12125,12127,12129,12131,12133,12135,12137,12139,12141,12143,12145,12147],{"class":323,"line":1970},[321,12126,3407],{"class":327},[321,12128,1864],{"class":331},[321,12130,335],{"class":327},[321,12132,3238],{"class":331},[321,12134,377],{"class":327},[321,12136,523],{"class":380},[321,12138,3245],{"class":331},[321,12140,1242],{"class":327},[321,12142,778],{"class":380},[321,12144,3245],{"class":331},[321,12146,2498],{"class":327},[321,12148,338],{"class":331},[321,12150,12151],{"class":323,"line":1984},[321,12152,2236],{"class":331},[321,12154,12155,12157,12159,12161,12163],{"class":323,"line":1989},[321,12156,3657],{"class":331},[321,12158,1376],{"class":327},[321,12160,4560],{"class":331},[321,12162,1376],{"class":327},[321,12164,1398],{"class":331},[321,12166,12167],{"class":323,"line":2783},[321,12168,2393],{"class":331},[321,12170,12171],{"class":323,"line":2797},[321,12172,12173],{"class":390},"    \u002F\u002F释放堆区数组\n",[321,12175,12176],{"class":323,"line":2805},[321,12177,12178],{"class":390},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[321,12180,12181,12184],{"class":323,"line":2810},[321,12182,12183],{"class":327},"    delete[]",[321,12185,12186],{"class":331}," arr;\n",[321,12188,12189],{"class":323,"line":2816},[321,12190,1771],{"class":331},[321,12192,12193],{"class":323,"line":2822},[321,12194,2606],{"emptyLinePlaceholder":251},[321,12196,12197,12199,12201],{"class":323,"line":2827},[321,12198,335],{"class":327},[321,12200,2179],{"class":2169},[321,12202,2182],{"class":331},[321,12204,12205],{"class":323,"line":8155},[321,12206,1752],{"class":331},[321,12208,12209,12211],{"class":323,"line":8179},[321,12210,5840],{"class":2169},[321,12212,5843],{"class":331},[321,12214,12215,12217],{"class":323,"line":8184},[321,12216,5909],{"class":2169},[321,12218,5843],{"class":331},[321,12220,12221],{"class":323,"line":8190},[321,12222,1771],{"class":331},[5333,12224,12225],{},"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":30,"searchDepth":167,"depth":167,"links":12227},[12228],{"id":10896,"depth":167,"text":10897,"children":12229},[12230,12231],{"id":10928,"depth":200,"text":10929},{"id":11556,"depth":200,"text":11557},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10888,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12238,"title":12239,"body":12240,"description":30,"extension":249,"meta":13721,"navigation":251,"path":13722,"seo":13723,"stem":13724,"__hash__":13725},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12241,"toc":13713},[12242,12245,12249,12252,12255,12424,12428,12433,12450,12455,12607,12611,12614,12617,13011,13015,13018,13023,13026,13338,13342,13348,13508,13510,13518,13522,13525,13532,13710],[10,12243,12239],{"id":12244},"_6引用",[14,12246,12248],{"id":12247},"_61引用基本用法","6.1引用基本用法",[19,12250,12251],{},"引用的本质：给变量起别名",[19,12253,12254],{},"语法：数据类型 &别名=原名",[312,12256,12258],{"className":314,"code":12257,"language":316,"meta":30,"style":30},"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",[318,12259,12260,12268,12272,12284,12296,12300,12319,12338,12342,12353,12357,12376,12394,12398,12408,12412,12420],{"__ignoreMap":30},[321,12261,12262,12264,12266],{"class":323,"line":324},[321,12263,335],{"class":327},[321,12265,2179],{"class":2169},[321,12267,11060],{"class":331},[321,12269,12270],{"class":323,"line":167},[321,12271,2606],{"emptyLinePlaceholder":251},[321,12273,12274,12276,12278,12280,12282],{"class":323,"line":200},[321,12275,2191],{"class":327},[321,12277,11076],{"class":331},[321,12279,377],{"class":327},[321,12281,2244],{"class":380},[321,12283,1497],{"class":331},[321,12285,12286,12288,12290,12292,12294],{"class":323,"line":1401},[321,12287,2191],{"class":327},[321,12289,10791],{"class":327},[321,12291,11152],{"class":331},[321,12293,377],{"class":327},[321,12295,1639],{"class":331},[321,12297,12298],{"class":323,"line":1407},[321,12299,2606],{"emptyLinePlaceholder":251},[321,12301,12302,12304,12306,12309,12311,12313,12315,12317],{"class":323,"line":1421},[321,12303,6736],{"class":331},[321,12305,1376],{"class":327},[321,12307,12308],{"class":436}," \"a = \"",[321,12310,1651],{"class":327},[321,12312,11076],{"class":331},[321,12314,1376],{"class":327},[321,12316,11676],{"class":331},[321,12318,7475],{"class":390},[321,12320,12321,12323,12325,12328,12330,12332,12334,12336],{"class":323,"line":1427},[321,12322,6736],{"class":331},[321,12324,1376],{"class":327},[321,12326,12327],{"class":436}," \"b = \"",[321,12329,1651],{"class":327},[321,12331,11089],{"class":331},[321,12333,1376],{"class":327},[321,12335,11676],{"class":331},[321,12337,7475],{"class":390},[321,12339,12340],{"class":323,"line":1518},[321,12341,2606],{"emptyLinePlaceholder":251},[321,12343,12344,12347,12349,12351],{"class":323,"line":1524},[321,12345,12346],{"class":331},"    b ",[321,12348,377],{"class":327},[321,12350,5961],{"class":380},[321,12352,1497],{"class":331},[321,12354,12355],{"class":323,"line":1536},[321,12356,2606],{"emptyLinePlaceholder":251},[321,12358,12359,12361,12363,12365,12367,12369,12371,12373],{"class":323,"line":1818},[321,12360,6736],{"class":331},[321,12362,1376],{"class":327},[321,12364,12308],{"class":436},[321,12366,1651],{"class":327},[321,12368,11076],{"class":331},[321,12370,1376],{"class":327},[321,12372,11676],{"class":331},[321,12374,12375],{"class":390},"\u002F\u002F100\n",[321,12377,12378,12380,12382,12384,12386,12388,12390,12392],{"class":323,"line":1823},[321,12379,6736],{"class":331},[321,12381,1376],{"class":327},[321,12383,12327],{"class":436},[321,12385,1651],{"class":327},[321,12387,11089],{"class":331},[321,12389,1376],{"class":327},[321,12391,11676],{"class":331},[321,12393,12375],{"class":390},[321,12395,12396],{"class":323,"line":1829},[321,12397,2606],{"emptyLinePlaceholder":251},[321,12399,12400,12402,12404,12406],{"class":323,"line":1834},[321,12401,2509],{"class":2169},[321,12403,332],{"class":331},[321,12405,2514],{"class":436},[321,12407,2925],{"class":331},[321,12409,12410],{"class":323,"line":1848},[321,12411,2606],{"emptyLinePlaceholder":251},[321,12413,12414,12416,12418],{"class":323,"line":1853},[321,12415,4296],{"class":327},[321,12417,4299],{"class":380},[321,12419,1497],{"class":331},[321,12421,12422],{"class":323,"line":1859},[321,12423,1771],{"class":331},[14,12425,12427],{"id":12426},"_62引用的注意事项","6.2引用的注意事项",[151,12429,12430],{},[154,12431,12432],{},"引用必须要初始化",[312,12434,12436],{"className":314,"code":12435,"language":316,"meta":30,"style":30},"int &b;\u002F\u002F非常错误！\n",[318,12437,12438],{"__ignoreMap":30},[321,12439,12440,12442,12444,12447],{"class":323,"line":324},[321,12441,335],{"class":327},[321,12443,10791],{"class":327},[321,12445,12446],{"class":331},"b;",[321,12448,12449],{"class":390},"\u002F\u002F非常错误！\n",[151,12451,12452],{"start":167},[154,12453,12454],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[312,12456,12458],{"className":314,"code":12457,"language":316,"meta":30,"style":30},"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",[318,12459,12460,12468,12480,12492,12500,12516,12529,12547,12565,12585,12595,12603],{"__ignoreMap":30},[321,12461,12462,12464,12466],{"class":323,"line":324},[321,12463,335],{"class":327},[321,12465,2179],{"class":2169},[321,12467,11060],{"class":331},[321,12469,12470,12472,12474,12476,12478],{"class":323,"line":167},[321,12471,2191],{"class":327},[321,12473,11076],{"class":331},[321,12475,377],{"class":327},[321,12477,2244],{"class":380},[321,12479,1497],{"class":331},[321,12481,12482,12484,12486,12488,12490],{"class":323,"line":200},[321,12483,2191],{"class":327},[321,12485,11089],{"class":331},[321,12487,377],{"class":327},[321,12489,9157],{"class":380},[321,12491,1497],{"class":331},[321,12493,12494,12497],{"class":323,"line":1401},[321,12495,12496],{"class":390},"    \u002F\u002Fint &c;",[321,12498,12499],{"class":390}," \u002F\u002F错误，引用必须初始化\n",[321,12501,12502,12504,12506,12508,12510,12513],{"class":323,"line":1407},[321,12503,2191],{"class":327},[321,12505,10791],{"class":327},[321,12507,3152],{"class":331},[321,12509,377],{"class":327},[321,12511,12512],{"class":331}," a;",[321,12514,12515],{"class":390}," \u002F\u002F一旦初始化后，就不可以更改\n",[321,12517,12518,12521,12523,12526],{"class":323,"line":1421},[321,12519,12520],{"class":331},"    c ",[321,12522,377],{"class":327},[321,12524,12525],{"class":331}," b;",[321,12527,12528],{"class":390}," \u002F\u002F这是赋值操作，不是更改引用\n",[321,12530,12531,12533,12535,12537,12539,12541,12543,12545],{"class":323,"line":1427},[321,12532,6736],{"class":331},[321,12534,1376],{"class":327},[321,12536,12308],{"class":436},[321,12538,1651],{"class":327},[321,12540,11076],{"class":331},[321,12542,1376],{"class":327},[321,12544,11676],{"class":331},[321,12546,7460],{"class":390},[321,12548,12549,12551,12553,12555,12557,12559,12561,12563],{"class":323,"line":1518},[321,12550,6736],{"class":331},[321,12552,1376],{"class":327},[321,12554,12327],{"class":436},[321,12556,1651],{"class":327},[321,12558,11089],{"class":331},[321,12560,1376],{"class":327},[321,12562,11676],{"class":331},[321,12564,7460],{"class":390},[321,12566,12567,12569,12571,12574,12576,12579,12581,12583],{"class":323,"line":1524},[321,12568,6736],{"class":331},[321,12570,1376],{"class":327},[321,12572,12573],{"class":436}," \"c = \"",[321,12575,1651],{"class":327},[321,12577,12578],{"class":331}," c ",[321,12580,1376],{"class":327},[321,12582,11676],{"class":331},[321,12584,7460],{"class":390},[321,12586,12587,12589,12591,12593],{"class":323,"line":1536},[321,12588,2509],{"class":2169},[321,12590,332],{"class":331},[321,12592,2514],{"class":436},[321,12594,2925],{"class":331},[321,12596,12597,12599,12601],{"class":323,"line":1818},[321,12598,4296],{"class":327},[321,12600,4299],{"class":380},[321,12602,1497],{"class":331},[321,12604,12605],{"class":323,"line":1823},[321,12606,1771],{"class":331},[14,12608,12610],{"id":12609},"_63引用做函数参数","6.3引用做函数参数",[19,12612,12613],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12615,12616],{},"优点：可以简化指针修改实参",[312,12618,12620],{"className":314,"code":12619,"language":316,"meta":30,"style":30},"\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",[318,12621,12622,12627,12650,12661,12671,12680,12684,12688,12693,12715,12727,12739,12749,12753,12757,12762,12784,12794,12802,12810,12814,12818,12826,12830,12842,12854,12858,12869,12895,12899,12919,12943,12947,12957,12981,12985,12995,12999,13007],{"__ignoreMap":30},[321,12623,12624],{"class":323,"line":324},[321,12625,12626],{"class":390},"\u002F\u002F1. 值传递\n",[321,12628,12629,12631,12634,12636,12638,12640,12643,12645,12647],{"class":323,"line":167},[321,12630,5571],{"class":327},[321,12632,12633],{"class":2169}," mySwap01",[321,12635,332],{"class":331},[321,12637,335],{"class":327},[321,12639,1605],{"class":5423},[321,12641,12642],{"class":331},", ",[321,12644,335],{"class":327},[321,12646,3039],{"class":5423},[321,12648,12649],{"class":331},") {\n",[321,12651,12652,12654,12657,12659],{"class":323,"line":200},[321,12653,2191],{"class":327},[321,12655,12656],{"class":331}," temp ",[321,12658,377],{"class":327},[321,12660,1639],{"class":331},[321,12662,12663,12666,12668],{"class":323,"line":1401},[321,12664,12665],{"class":331},"    a ",[321,12667,377],{"class":327},[321,12669,12670],{"class":331}," b;\n",[321,12672,12673,12675,12677],{"class":323,"line":1407},[321,12674,12346],{"class":331},[321,12676,377],{"class":327},[321,12678,12679],{"class":331}," temp;\n",[321,12681,12682],{"class":323,"line":1421},[321,12683,1771],{"class":331},[321,12685,12686],{"class":323,"line":1427},[321,12687,2606],{"emptyLinePlaceholder":251},[321,12689,12690],{"class":323,"line":1518},[321,12691,12692],{"class":390},"\u002F\u002F2. 地址传递\n",[321,12694,12695,12697,12700,12702,12705,12707,12709,12711,12713],{"class":323,"line":1524},[321,12696,5571],{"class":327},[321,12698,12699],{"class":2169}," mySwap02",[321,12701,332],{"class":331},[321,12703,12704],{"class":327},"int*",[321,12706,1605],{"class":5423},[321,12708,12642],{"class":331},[321,12710,12704],{"class":327},[321,12712,3039],{"class":5423},[321,12714,12649],{"class":331},[321,12716,12717,12719,12721,12723,12725],{"class":323,"line":1536},[321,12718,2191],{"class":327},[321,12720,12656],{"class":331},[321,12722,377],{"class":327},[321,12724,6725],{"class":327},[321,12726,6404],{"class":331},[321,12728,12729,12731,12733,12735,12737],{"class":323,"line":1818},[321,12730,6610],{"class":327},[321,12732,11126],{"class":331},[321,12734,377],{"class":327},[321,12736,6725],{"class":327},[321,12738,6276],{"class":331},[321,12740,12741,12743,12745,12747],{"class":323,"line":1823},[321,12742,6610],{"class":327},[321,12744,11152],{"class":331},[321,12746,377],{"class":327},[321,12748,12679],{"class":331},[321,12750,12751],{"class":323,"line":1829},[321,12752,1771],{"class":331},[321,12754,12755],{"class":323,"line":1834},[321,12756,2606],{"emptyLinePlaceholder":251},[321,12758,12759],{"class":323,"line":1848},[321,12760,12761],{"class":390},"\u002F\u002F3. 引用传递\n",[321,12763,12764,12766,12769,12771,12774,12776,12778,12780,12782],{"class":323,"line":1853},[321,12765,5571],{"class":327},[321,12767,12768],{"class":2169}," mySwap03",[321,12770,332],{"class":331},[321,12772,12773],{"class":327},"int&",[321,12775,1605],{"class":5423},[321,12777,12642],{"class":331},[321,12779,12773],{"class":327},[321,12781,3039],{"class":5423},[321,12783,12649],{"class":331},[321,12785,12786,12788,12790,12792],{"class":323,"line":1859},[321,12787,2191],{"class":327},[321,12789,12656],{"class":331},[321,12791,377],{"class":327},[321,12793,1639],{"class":331},[321,12795,12796,12798,12800],{"class":323,"line":1880},[321,12797,12665],{"class":331},[321,12799,377],{"class":327},[321,12801,12670],{"class":331},[321,12803,12804,12806,12808],{"class":323,"line":1885},[321,12805,12346],{"class":331},[321,12807,377],{"class":327},[321,12809,12679],{"class":331},[321,12811,12812],{"class":323,"line":1899},[321,12813,1771],{"class":331},[321,12815,12816],{"class":323,"line":1904},[321,12817,2606],{"emptyLinePlaceholder":251},[321,12819,12820,12822,12824],{"class":323,"line":1933},[321,12821,335],{"class":327},[321,12823,2179],{"class":2169},[321,12825,11060],{"class":331},[321,12827,12828],{"class":323,"line":1938},[321,12829,2606],{"emptyLinePlaceholder":251},[321,12831,12832,12834,12836,12838,12840],{"class":323,"line":1955},[321,12833,2191],{"class":327},[321,12835,11076],{"class":331},[321,12837,377],{"class":327},[321,12839,2244],{"class":380},[321,12841,1497],{"class":331},[321,12843,12844,12846,12848,12850,12852],{"class":323,"line":1960},[321,12845,2191],{"class":327},[321,12847,11089],{"class":331},[321,12849,377],{"class":327},[321,12851,9157],{"class":380},[321,12853,1497],{"class":331},[321,12855,12856],{"class":323,"line":1965},[321,12857,2606],{"emptyLinePlaceholder":251},[321,12859,12860,12863,12866],{"class":323,"line":1970},[321,12861,12862],{"class":2169},"    mySwap01",[321,12864,12865],{"class":331},"(a, b);",[321,12867,12868],{"class":390},"\u002F\u002F值传递，形参不会修饰实参\n",[321,12870,12871,12873,12875,12878,12880,12882,12884,12887,12889,12891,12893],{"class":323,"line":1984},[321,12872,6736],{"class":331},[321,12874,1376],{"class":327},[321,12876,12877],{"class":436}," \"a:\"",[321,12879,1651],{"class":327},[321,12881,11076],{"class":331},[321,12883,1376],{"class":327},[321,12885,12886],{"class":436}," \" b:\"",[321,12888,1651],{"class":327},[321,12890,11089],{"class":331},[321,12892,1376],{"class":327},[321,12894,9047],{"class":331},[321,12896,12897],{"class":323,"line":1989},[321,12898,2606],{"emptyLinePlaceholder":251},[321,12900,12901,12904,12906,12908,12911,12913,12916],{"class":323,"line":2783},[321,12902,12903],{"class":2169},"    mySwap02",[321,12905,332],{"class":331},[321,12907,685],{"class":327},[321,12909,12910],{"class":331},"a, ",[321,12912,685],{"class":327},[321,12914,12915],{"class":331},"b);",[321,12917,12918],{"class":390},"\u002F\u002F地址传递，形参会修饰实参\n",[321,12920,12921,12923,12925,12927,12929,12931,12933,12935,12937,12939,12941],{"class":323,"line":2797},[321,12922,6736],{"class":331},[321,12924,1376],{"class":327},[321,12926,12877],{"class":436},[321,12928,1651],{"class":327},[321,12930,11076],{"class":331},[321,12932,1376],{"class":327},[321,12934,12886],{"class":436},[321,12936,1651],{"class":327},[321,12938,11089],{"class":331},[321,12940,1376],{"class":327},[321,12942,9047],{"class":331},[321,12944,12945],{"class":323,"line":2805},[321,12946,2606],{"emptyLinePlaceholder":251},[321,12948,12949,12952,12954],{"class":323,"line":2810},[321,12950,12951],{"class":2169},"    mySwap03",[321,12953,12865],{"class":331},[321,12955,12956],{"class":390},"\u002F\u002F引用传递，形参会修饰实参\n",[321,12958,12959,12961,12963,12965,12967,12969,12971,12973,12975,12977,12979],{"class":323,"line":2816},[321,12960,6736],{"class":331},[321,12962,1376],{"class":327},[321,12964,12877],{"class":436},[321,12966,1651],{"class":327},[321,12968,11076],{"class":331},[321,12970,1376],{"class":327},[321,12972,12886],{"class":436},[321,12974,1651],{"class":327},[321,12976,11089],{"class":331},[321,12978,1376],{"class":327},[321,12980,9047],{"class":331},[321,12982,12983],{"class":323,"line":2822},[321,12984,2606],{"emptyLinePlaceholder":251},[321,12986,12987,12989,12991,12993],{"class":323,"line":2827},[321,12988,2509],{"class":2169},[321,12990,332],{"class":331},[321,12992,2514],{"class":436},[321,12994,2925],{"class":331},[321,12996,12997],{"class":323,"line":8155},[321,12998,2606],{"emptyLinePlaceholder":251},[321,13000,13001,13003,13005],{"class":323,"line":8179},[321,13002,4296],{"class":327},[321,13004,4299],{"class":380},[321,13006,1497],{"class":331},[321,13008,13009],{"class":323,"line":8184},[321,13010,1771],{"class":331},[14,13012,13014],{"id":13013},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13016,13017],{},"作用：引用是可以作为函数的返回值存在的",[19,13019,9232,13020],{},[481,13021,13022],{},"不要返回局部变量引用",[19,13024,13025],{},"用法：函数调用作为左值",[312,13027,13029],{"className":10148,"code":13028,"language":10150,"meta":30,"style":30},"\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",[318,13030,13031,13036,13044,13059,13065,13069,13073,13078,13086,13103,13109,13113,13117,13125,13129,13134,13148,13168,13187,13191,13196,13209,13229,13247,13251,13267,13271,13290,13308,13312,13322,13326,13334],{"__ignoreMap":30},[321,13032,13033],{"class":323,"line":324},[321,13034,13035],{"class":390},"\u002F\u002F返回局部变量引用\n",[321,13037,13038,13040,13042],{"class":323,"line":167},[321,13039,12773],{"class":327},[321,13041,5795],{"class":2169},[321,13043,11060],{"class":331},[321,13045,13046,13048,13050,13052,13054,13056],{"class":323,"line":200},[321,13047,2191],{"class":327},[321,13049,11076],{"class":331},[321,13051,377],{"class":327},[321,13053,2244],{"class":380},[321,13055,387],{"class":331},[321,13057,13058],{"class":390}," \u002F\u002F局部变量\n",[321,13060,13061,13063],{"class":323,"line":1401},[321,13062,4296],{"class":327},[321,13064,1639],{"class":331},[321,13066,13067],{"class":323,"line":1407},[321,13068,1771],{"class":331},[321,13070,13071],{"class":323,"line":1421},[321,13072,2606],{"emptyLinePlaceholder":251},[321,13074,13075],{"class":323,"line":1427},[321,13076,13077],{"class":390},"\u002F\u002F返回静态变量引用\n",[321,13079,13080,13082,13084],{"class":323,"line":1518},[321,13081,12773],{"class":327},[321,13083,5864],{"class":2169},[321,13085,11060],{"class":331},[321,13087,13088,13090,13092,13094,13096,13098,13100],{"class":323,"line":1524},[321,13089,11227],{"class":327},[321,13091,2588],{"class":327},[321,13093,11076],{"class":331},[321,13095,377],{"class":327},[321,13097,9157],{"class":380},[321,13099,387],{"class":331},[321,13101,13102],{"class":390},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[321,13104,13105,13107],{"class":323,"line":1536},[321,13106,4296],{"class":327},[321,13108,1639],{"class":331},[321,13110,13111],{"class":323,"line":1818},[321,13112,1771],{"class":331},[321,13114,13115],{"class":323,"line":1823},[321,13116,2606],{"emptyLinePlaceholder":251},[321,13118,13119,13121,13123],{"class":323,"line":1829},[321,13120,335],{"class":327},[321,13122,2179],{"class":2169},[321,13124,11060],{"class":331},[321,13126,13127],{"class":323,"line":1834},[321,13128,2606],{"emptyLinePlaceholder":251},[321,13130,13131],{"class":323,"line":1848},[321,13132,13133],{"class":390},"    \u002F\u002F不能返回局部变量的引用\n",[321,13135,13136,13139,13142,13144,13146],{"class":323,"line":1853},[321,13137,13138],{"class":327},"    int&",[321,13140,13141],{"class":331}," ref ",[321,13143,377],{"class":327},[321,13145,5795],{"class":2169},[321,13147,5843],{"class":331},[321,13149,13150,13152,13154,13157,13159,13161,13163,13165],{"class":323,"line":1859},[321,13151,6736],{"class":331},[321,13153,1376],{"class":327},[321,13155,13156],{"class":436}," \"ref = \"",[321,13158,1651],{"class":327},[321,13160,13141],{"class":331},[321,13162,1376],{"class":327},[321,13164,11676],{"class":331},[321,13166,13167],{"class":390},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[321,13169,13170,13172,13174,13176,13178,13180,13182,13184],{"class":323,"line":1880},[321,13171,6736],{"class":331},[321,13173,1376],{"class":327},[321,13175,13156],{"class":436},[321,13177,1651],{"class":327},[321,13179,13141],{"class":331},[321,13181,1376],{"class":327},[321,13183,11676],{"class":331},[321,13185,13186],{"class":390},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[321,13188,13189],{"class":323,"line":1885},[321,13190,2606],{"emptyLinePlaceholder":251},[321,13192,13193],{"class":323,"line":1899},[321,13194,13195],{"class":390},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[321,13197,13198,13200,13203,13205,13207],{"class":323,"line":1904},[321,13199,13138],{"class":327},[321,13201,13202],{"class":331}," ref2 ",[321,13204,377],{"class":327},[321,13206,5864],{"class":2169},[321,13208,5843],{"class":331},[321,13210,13211,13213,13215,13218,13220,13222,13224,13226],{"class":323,"line":1933},[321,13212,6736],{"class":331},[321,13214,1376],{"class":327},[321,13216,13217],{"class":436}," \"ref2 = \"",[321,13219,1651],{"class":327},[321,13221,13202],{"class":331},[321,13223,1376],{"class":327},[321,13225,11676],{"class":331},[321,13227,13228],{"class":390}," \u002F\u002F20\n",[321,13230,13231,13233,13235,13237,13239,13241,13243,13245],{"class":323,"line":1938},[321,13232,6736],{"class":331},[321,13234,1376],{"class":327},[321,13236,13217],{"class":436},[321,13238,1651],{"class":327},[321,13240,13202],{"class":331},[321,13242,1376],{"class":327},[321,13244,11676],{"class":331},[321,13246,13228],{"class":390},[321,13248,13249],{"class":323,"line":1955},[321,13250,2606],{"emptyLinePlaceholder":251},[321,13252,13253,13255,13258,13260,13262,13264],{"class":323,"line":1960},[321,13254,5909],{"class":2169},[321,13256,13257],{"class":331},"() ",[321,13259,377],{"class":327},[321,13261,3205],{"class":380},[321,13263,387],{"class":331},[321,13265,13266],{"class":390},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[321,13268,13269],{"class":323,"line":1965},[321,13270,2606],{"emptyLinePlaceholder":251},[321,13272,13273,13275,13277,13279,13281,13283,13285,13287],{"class":323,"line":1970},[321,13274,6736],{"class":331},[321,13276,1376],{"class":327},[321,13278,13217],{"class":436},[321,13280,1651],{"class":327},[321,13282,13202],{"class":331},[321,13284,1376],{"class":327},[321,13286,11676],{"class":331},[321,13288,13289],{"class":390}," \u002F\u002F1000\n",[321,13291,13292,13294,13296,13298,13300,13302,13304,13306],{"class":323,"line":1984},[321,13293,6736],{"class":331},[321,13295,1376],{"class":327},[321,13297,13217],{"class":436},[321,13299,1651],{"class":327},[321,13301,13202],{"class":331},[321,13303,1376],{"class":327},[321,13305,11676],{"class":331},[321,13307,13289],{"class":390},[321,13309,13310],{"class":323,"line":1989},[321,13311,2606],{"emptyLinePlaceholder":251},[321,13313,13314,13316,13318,13320],{"class":323,"line":2783},[321,13315,2509],{"class":2169},[321,13317,332],{"class":331},[321,13319,2514],{"class":436},[321,13321,2925],{"class":331},[321,13323,13324],{"class":323,"line":2797},[321,13325,2606],{"emptyLinePlaceholder":251},[321,13327,13328,13330,13332],{"class":323,"line":2805},[321,13329,4296],{"class":327},[321,13331,4299],{"class":380},[321,13333,1497],{"class":331},[321,13335,13336],{"class":323,"line":2810},[321,13337,1771],{"class":331},[14,13339,13341],{"id":13340},"_65引用的本质","6.5引用的本质",[19,13343,13344,13345],{},"本质：",[481,13346,13347],{},"引用的本质在c++内部实现是一个指针常量.",[312,13349,13351],{"className":314,"code":13350,"language":316,"meta":30,"style":30},"\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",[318,13352,13353,13358,13374,13388,13392,13401,13413,13418,13423,13434,13447,13451,13467,13484,13488,13496,13504],{"__ignoreMap":30},[321,13354,13355],{"class":323,"line":324},[321,13356,13357],{"class":390},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[321,13359,13360,13362,13364,13366,13368,13371],{"class":323,"line":167},[321,13361,5571],{"class":327},[321,13363,11592],{"class":2169},[321,13365,332],{"class":331},[321,13367,12773],{"class":327},[321,13369,13370],{"class":5423}," ref",[321,13372,13373],{"class":331},"){\n",[321,13375,13376,13379,13381,13383,13385],{"class":323,"line":200},[321,13377,13378],{"class":331},"    ref ",[321,13380,377],{"class":327},[321,13382,5961],{"class":380},[321,13384,387],{"class":331},[321,13386,13387],{"class":390}," \u002F\u002F ref是引用，转换为*ref = 100\n",[321,13389,13390],{"class":323,"line":1401},[321,13391,1771],{"class":331},[321,13393,13394,13396,13398],{"class":323,"line":1407},[321,13395,335],{"class":327},[321,13397,2179],{"class":2169},[321,13399,13400],{"class":331},"(){\n",[321,13402,13403,13405,13407,13409,13411],{"class":323,"line":1421},[321,13404,2191],{"class":327},[321,13406,11076],{"class":331},[321,13408,377],{"class":327},[321,13410,2244],{"class":380},[321,13412,1497],{"class":331},[321,13414,13415],{"class":323,"line":1427},[321,13416,13417],{"class":331},"    \n",[321,13419,13420],{"class":323,"line":1518},[321,13421,13422],{"class":390},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[321,13424,13425,13427,13429,13431],{"class":323,"line":1524},[321,13426,13138],{"class":327},[321,13428,13141],{"class":331},[321,13430,377],{"class":327},[321,13432,13433],{"class":331}," a; \n",[321,13435,13436,13438,13440,13442,13444],{"class":323,"line":1536},[321,13437,13378],{"class":331},[321,13439,377],{"class":327},[321,13441,9157],{"class":380},[321,13443,387],{"class":331},[321,13445,13446],{"class":390}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[321,13448,13449],{"class":323,"line":1818},[321,13450,13417],{"class":331},[321,13452,13453,13455,13457,13459,13461,13463,13465],{"class":323,"line":1823},[321,13454,6736],{"class":331},[321,13456,1376],{"class":327},[321,13458,12877],{"class":436},[321,13460,1651],{"class":327},[321,13462,11076],{"class":331},[321,13464,1376],{"class":327},[321,13466,9047],{"class":331},[321,13468,13469,13471,13473,13476,13478,13480,13482],{"class":323,"line":1829},[321,13470,6736],{"class":331},[321,13472,1376],{"class":327},[321,13474,13475],{"class":436}," \"ref:\"",[321,13477,1651],{"class":327},[321,13479,13141],{"class":331},[321,13481,1376],{"class":327},[321,13483,9047],{"class":331},[321,13485,13486],{"class":323,"line":1834},[321,13487,13417],{"class":331},[321,13489,13490,13493],{"class":323,"line":1848},[321,13491,13492],{"class":2169},"    func",[321,13494,13495],{"class":331},"(a);\n",[321,13497,13498,13500,13502],{"class":323,"line":1853},[321,13499,4296],{"class":327},[321,13501,4299],{"class":380},[321,13503,1497],{"class":331},[321,13505,13506],{"class":323,"line":1859},[321,13507,1771],{"class":331},[19,13509,11539],{},[151,13511,13512,13515],{},[154,13513,13514],{},"引用的本质，就是一个指针常量",[154,13516,13517],{},"引用一旦初始化，就不可以发生改变",[14,13519,13521],{"id":13520},"_66常量引用","6.6常量引用",[19,13523,13524],{},"作用：常量引用主要用来修饰形参",[19,13526,13527,13528,13531],{},"在函数形参列表中，可以加",[481,13529,13530],{},"const修饰形参","，防止形参改变实参",[312,13533,13535],{"className":314,"code":13534,"language":316,"meta":30,"style":30},"\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",[318,13536,13537,13542,13547,13566,13571,13584,13588,13592,13600,13604,13609,13614,13628,13632,13640,13652,13656,13661,13673,13680,13684,13694,13698,13706],{"__ignoreMap":30},[321,13538,13539],{"class":323,"line":324},[321,13540,13541],{"class":390},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[321,13543,13544],{"class":323,"line":167},[321,13545,13546],{"class":390},"\u002F\u002F加上const就不能修改实参的\n",[321,13548,13549,13551,13554,13556,13558,13561,13564],{"class":323,"line":200},[321,13550,5571],{"class":327},[321,13552,13553],{"class":2169}," showValue",[321,13555,332],{"class":331},[321,13557,6999],{"class":327},[321,13559,13560],{"class":327}," int&",[321,13562,13563],{"class":5423}," v",[321,13565,12649],{"class":331},[321,13567,13568],{"class":323,"line":1401},[321,13569,13570],{"class":390},"    \u002F\u002Fv += 100;\n",[321,13572,13573,13575,13577,13580,13582],{"class":323,"line":1407},[321,13574,6736],{"class":331},[321,13576,1376],{"class":327},[321,13578,13579],{"class":331}," v ",[321,13581,1376],{"class":327},[321,13583,9047],{"class":331},[321,13585,13586],{"class":323,"line":1421},[321,13587,1771],{"class":331},[321,13589,13590],{"class":323,"line":1427},[321,13591,2606],{"emptyLinePlaceholder":251},[321,13593,13594,13596,13598],{"class":323,"line":1518},[321,13595,335],{"class":327},[321,13597,2179],{"class":2169},[321,13599,11060],{"class":331},[321,13601,13602],{"class":323,"line":1524},[321,13603,2606],{"emptyLinePlaceholder":251},[321,13605,13606],{"class":323,"line":1536},[321,13607,13608],{"class":390},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[321,13610,13611],{"class":323,"line":1818},[321,13612,13613],{"class":390},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[321,13615,13616,13618,13620,13622,13624,13626],{"class":323,"line":1823},[321,13617,11428],{"class":327},[321,13619,13560],{"class":327},[321,13621,13141],{"class":331},[321,13623,377],{"class":327},[321,13625,2244],{"class":380},[321,13627,1497],{"class":331},[321,13629,13630],{"class":323,"line":1829},[321,13631,2606],{"emptyLinePlaceholder":251},[321,13633,13634,13637],{"class":323,"line":1834},[321,13635,13636],{"class":390},"    \u002F\u002Fref = 100;",[321,13638,13639],{"class":390},"  \u002F\u002F加入const后不可以修改变量\n",[321,13641,13642,13644,13646,13648,13650],{"class":323,"line":1848},[321,13643,6736],{"class":331},[321,13645,1376],{"class":327},[321,13647,13141],{"class":331},[321,13649,1376],{"class":327},[321,13651,9047],{"class":331},[321,13653,13654],{"class":323,"line":1853},[321,13655,2606],{"emptyLinePlaceholder":251},[321,13657,13658],{"class":323,"line":1859},[321,13659,13660],{"class":390},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[321,13662,13663,13665,13667,13669,13671],{"class":323,"line":1880},[321,13664,2191],{"class":327},[321,13666,11076],{"class":331},[321,13668,377],{"class":327},[321,13670,2244],{"class":380},[321,13672,1497],{"class":331},[321,13674,13675,13678],{"class":323,"line":1885},[321,13676,13677],{"class":2169},"    showValue",[321,13679,13495],{"class":331},[321,13681,13682],{"class":323,"line":1899},[321,13683,2606],{"emptyLinePlaceholder":251},[321,13685,13686,13688,13690,13692],{"class":323,"line":1904},[321,13687,2509],{"class":2169},[321,13689,332],{"class":331},[321,13691,2514],{"class":436},[321,13693,2925],{"class":331},[321,13695,13696],{"class":323,"line":1933},[321,13697,2606],{"emptyLinePlaceholder":251},[321,13699,13700,13702,13704],{"class":323,"line":1938},[321,13701,4296],{"class":327},[321,13703,4299],{"class":380},[321,13705,1497],{"class":331},[321,13707,13708],{"class":323,"line":1955},[321,13709,1771],{"class":331},[5333,13711,13712],{},"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":30,"searchDepth":167,"depth":167,"links":13714},[13715,13716,13717,13718,13719,13720],{"id":12247,"depth":167,"text":12248},{"id":12426,"depth":167,"text":12427},{"id":12609,"depth":167,"text":12610},{"id":13013,"depth":167,"text":13014},{"id":13340,"depth":167,"text":13341},{"id":13520,"depth":167,"text":13521},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12239,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13727,"title":13728,"body":13729,"description":30,"extension":249,"meta":14810,"navigation":251,"path":14811,"seo":14812,"stem":14813,"__hash__":14814},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13730,"toc":14802},[13731,13734,13738,13741,13746,13978,13980,13991,13995,13998,14006,14110,14113,14117,14120,14124,14127,14132,14154,14160,14487,14490,14494,14502,14799],[10,13732,13728],{"id":13733},"_7函数高级部分",[14,13735,13737],{"id":13736},"_71函数默认参数","7.1函数默认参数",[19,13739,13740],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13742,5388,13743],{},[318,13744,13745],{}," 返回值类型  函数名 （参数= 默认值）{}",[312,13747,13749],{"className":314,"code":13748,"language":316,"meta":30,"style":30},"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",[318,13750,13751,13786,13801,13805,13809,13814,13819,13848,13868,13878,13882,13886,13894,13898,13926,13948,13952,13962,13966,13974],{"__ignoreMap":30},[321,13752,13753,13755,13757,13759,13761,13763,13765,13767,13769,13772,13774,13776,13778,13780,13782,13784],{"class":323,"line":324},[321,13754,335],{"class":327},[321,13756,11592],{"class":2169},[321,13758,332],{"class":331},[321,13760,335],{"class":327},[321,13762,1605],{"class":5423},[321,13764,12642],{"class":331},[321,13766,335],{"class":327},[321,13768,3039],{"class":5423},[321,13770,13771],{"class":327}," =",[321,13773,2244],{"class":380},[321,13775,12642],{"class":331},[321,13777,335],{"class":327},[321,13779,3055],{"class":5423},[321,13781,13771],{"class":327},[321,13783,2244],{"class":380},[321,13785,12649],{"class":331},[321,13787,13788,13790,13792,13794,13796,13798],{"class":323,"line":167},[321,13789,4296],{"class":327},[321,13791,11076],{"class":331},[321,13793,813],{"class":327},[321,13795,11089],{"class":331},[321,13797,813],{"class":327},[321,13799,13800],{"class":331}," c;\n",[321,13802,13803],{"class":323,"line":200},[321,13804,1771],{"class":331},[321,13806,13807],{"class":323,"line":1401},[321,13808,2606],{"emptyLinePlaceholder":251},[321,13810,13811],{"class":323,"line":1407},[321,13812,13813],{"class":390},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[321,13815,13816],{"class":323,"line":1421},[321,13817,13818],{"class":390},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[321,13820,13821,13823,13826,13828,13830,13832,13834,13836,13838,13840,13842,13844,13846],{"class":323,"line":1427},[321,13822,335],{"class":327},[321,13824,13825],{"class":2169}," func2",[321,13827,332],{"class":331},[321,13829,335],{"class":327},[321,13831,1605],{"class":5423},[321,13833,13771],{"class":327},[321,13835,2244],{"class":380},[321,13837,12642],{"class":331},[321,13839,335],{"class":327},[321,13841,3039],{"class":5423},[321,13843,13771],{"class":327},[321,13845,2244],{"class":380},[321,13847,2925],{"class":331},[321,13849,13850,13852,13854,13856,13858,13860,13862,13864,13866],{"class":323,"line":1518},[321,13851,335],{"class":327},[321,13853,13825],{"class":2169},[321,13855,332],{"class":331},[321,13857,335],{"class":327},[321,13859,1605],{"class":5423},[321,13861,12642],{"class":331},[321,13863,335],{"class":327},[321,13865,3039],{"class":5423},[321,13867,12649],{"class":331},[321,13869,13870,13872,13874,13876],{"class":323,"line":1524},[321,13871,4296],{"class":327},[321,13873,11076],{"class":331},[321,13875,813],{"class":327},[321,13877,12670],{"class":331},[321,13879,13880],{"class":323,"line":1536},[321,13881,1771],{"class":331},[321,13883,13884],{"class":323,"line":1818},[321,13885,2606],{"emptyLinePlaceholder":251},[321,13887,13888,13890,13892],{"class":323,"line":1823},[321,13889,335],{"class":327},[321,13891,2179],{"class":2169},[321,13893,11060],{"class":331},[321,13895,13896],{"class":323,"line":1829},[321,13897,2606],{"emptyLinePlaceholder":251},[321,13899,13900,13902,13904,13907,13909,13911,13913,13915,13917,13919,13922,13924],{"class":323,"line":1834},[321,13901,6736],{"class":331},[321,13903,1376],{"class":327},[321,13905,13906],{"class":436}," \"ret = \"",[321,13908,1651],{"class":327},[321,13910,11592],{"class":2169},[321,13912,332],{"class":331},[321,13914,1032],{"class":380},[321,13916,12642],{"class":331},[321,13918,1032],{"class":380},[321,13920,13921],{"class":331},") ",[321,13923,1376],{"class":327},[321,13925,9047],{"class":331},[321,13927,13928,13930,13932,13934,13936,13938,13940,13942,13944,13946],{"class":323,"line":1848},[321,13929,6736],{"class":331},[321,13931,1376],{"class":327},[321,13933,13906],{"class":436},[321,13935,1651],{"class":327},[321,13937,11592],{"class":2169},[321,13939,332],{"class":331},[321,13941,643],{"class":380},[321,13943,13921],{"class":331},[321,13945,1376],{"class":327},[321,13947,9047],{"class":331},[321,13949,13950],{"class":323,"line":1853},[321,13951,2606],{"emptyLinePlaceholder":251},[321,13953,13954,13956,13958,13960],{"class":323,"line":1859},[321,13955,2509],{"class":2169},[321,13957,332],{"class":331},[321,13959,2514],{"class":436},[321,13961,2925],{"class":331},[321,13963,13964],{"class":323,"line":1880},[321,13965,2606],{"emptyLinePlaceholder":251},[321,13967,13968,13970,13972],{"class":323,"line":1885},[321,13969,4296],{"class":327},[321,13971,4299],{"class":380},[321,13973,1497],{"class":331},[321,13975,13976],{"class":323,"line":1899},[321,13977,1771],{"class":331},[19,13979,11539],{},[151,13981,13982,13985,13988],{},[154,13983,13984],{},"我传就用我；没传就用你",[154,13986,13987],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[154,13989,13990],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13992,13994],{"id":13993},"_72函数的占位参数","7.2函数的占位参数",[19,13996,13997],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,13999,14000,14002,14003],{},[481,14001,5388],{}," ",[318,14004,14005],{},"返回值类型 函数名 (数据类型){}",[312,14007,14009],{"className":314,"code":14008,"language":316,"meta":30,"style":30},"\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",[318,14010,14011,14016,14034,14047,14051,14059,14063,14080,14084,14094,14098,14106],{"__ignoreMap":30},[321,14012,14013],{"class":323,"line":324},[321,14014,14015],{"class":390},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[321,14017,14018,14020,14022,14024,14026,14028,14030,14032],{"class":323,"line":167},[321,14019,5571],{"class":327},[321,14021,11592],{"class":2169},[321,14023,332],{"class":331},[321,14025,335],{"class":327},[321,14027,1605],{"class":5423},[321,14029,12642],{"class":331},[321,14031,335],{"class":327},[321,14033,12649],{"class":331},[321,14035,14036,14038,14040,14043,14045],{"class":323,"line":200},[321,14037,6736],{"class":331},[321,14039,1376],{"class":327},[321,14041,14042],{"class":436}," \"this is func\"",[321,14044,1651],{"class":327},[321,14046,9047],{"class":331},[321,14048,14049],{"class":323,"line":1401},[321,14050,1771],{"class":331},[321,14052,14053,14055,14057],{"class":323,"line":1407},[321,14054,335],{"class":327},[321,14056,2179],{"class":2169},[321,14058,11060],{"class":331},[321,14060,14061],{"class":323,"line":1421},[321,14062,2606],{"emptyLinePlaceholder":251},[321,14064,14065,14067,14069,14071,14073,14075,14077],{"class":323,"line":1427},[321,14066,13492],{"class":2169},[321,14068,332],{"class":331},[321,14070,778],{"class":380},[321,14072,710],{"class":331},[321,14074,778],{"class":380},[321,14076,6173],{"class":331},[321,14078,14079],{"class":390}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[321,14081,14082],{"class":323,"line":1518},[321,14083,2606],{"emptyLinePlaceholder":251},[321,14085,14086,14088,14090,14092],{"class":323,"line":1524},[321,14087,2509],{"class":2169},[321,14089,332],{"class":331},[321,14091,2514],{"class":436},[321,14093,2925],{"class":331},[321,14095,14096],{"class":323,"line":1536},[321,14097,2606],{"emptyLinePlaceholder":251},[321,14099,14100,14102,14104],{"class":323,"line":1818},[321,14101,4296],{"class":327},[321,14103,4299],{"class":380},[321,14105,1497],{"class":331},[321,14107,14108],{"class":323,"line":1823},[321,14109,1771],{"class":331},[19,14111,14112],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14114,14116],{"id":14115},"_73函数重载","7.3函数重载",[19,14118,14119],{},"意思是函数名是可以相同的",[292,14121,14123],{"id":14122},"_731基本语法","7.3.1基本语法",[19,14125,14126],{},"作用：函数名可以相同，提高复用性",[19,14128,14129],{},[481,14130,14131],{},"函数重载满足条件：",[1339,14133,14134,14137,14140],{},[154,14135,14136],{},"同一个作用域下",[154,14138,14139],{},"函数名称相同",[154,14141,14142,14143,14146,14147,14150,14151],{},"函数参数",[481,14144,14145],{},"类型不同","  或者 ",[481,14148,14149],{},"个数不同"," 或者 ",[481,14152,14153],{},"顺序不同",[19,14155,14156,14159],{},[481,14157,14158],{},"注意:","  函数的返回值不可以作为函数重载的条件",[312,14161,14163],{"className":10148,"code":14162,"language":10150,"meta":30,"style":30},"\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",[318,14164,14165,14170,14178,14182,14195,14199,14213,14217,14230,14234,14249,14253,14266,14270,14291,14295,14308,14312,14332,14336,14349,14353,14357,14362,14367,14372,14377,14382,14386,14390,14398,14402,14408,14418,14428,14442,14457,14461,14471,14475,14483],{"__ignoreMap":30},[321,14166,14167],{"class":323,"line":324},[321,14168,14169],{"class":390},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[321,14171,14172,14174,14176],{"class":323,"line":167},[321,14173,5571],{"class":327},[321,14175,11592],{"class":2169},[321,14177,2182],{"class":331},[321,14179,14180],{"class":323,"line":200},[321,14181,1752],{"class":331},[321,14183,14184,14186,14188,14191,14193],{"class":323,"line":1401},[321,14185,6736],{"class":331},[321,14187,1376],{"class":327},[321,14189,14190],{"class":436}," \"func 的调用！\"",[321,14192,1651],{"class":327},[321,14194,9047],{"class":331},[321,14196,14197],{"class":323,"line":1407},[321,14198,1771],{"class":331},[321,14200,14201,14203,14205,14207,14209,14211],{"class":323,"line":1421},[321,14202,5571],{"class":327},[321,14204,11592],{"class":2169},[321,14206,332],{"class":331},[321,14208,335],{"class":327},[321,14210,1605],{"class":5423},[321,14212,338],{"class":331},[321,14214,14215],{"class":323,"line":1427},[321,14216,1752],{"class":331},[321,14218,14219,14221,14223,14226,14228],{"class":323,"line":1518},[321,14220,6736],{"class":331},[321,14222,1376],{"class":327},[321,14224,14225],{"class":436}," \"func (int a) 的调用！\"",[321,14227,1651],{"class":327},[321,14229,9047],{"class":331},[321,14231,14232],{"class":323,"line":1524},[321,14233,1771],{"class":331},[321,14235,14236,14238,14240,14242,14245,14247],{"class":323,"line":1536},[321,14237,5571],{"class":327},[321,14239,11592],{"class":2169},[321,14241,332],{"class":331},[321,14243,14244],{"class":327},"double",[321,14246,1605],{"class":5423},[321,14248,338],{"class":331},[321,14250,14251],{"class":323,"line":1818},[321,14252,1752],{"class":331},[321,14254,14255,14257,14259,14262,14264],{"class":323,"line":1823},[321,14256,6736],{"class":331},[321,14258,1376],{"class":327},[321,14260,14261],{"class":436}," \"func (double a)的调用！\"",[321,14263,1651],{"class":327},[321,14265,9047],{"class":331},[321,14267,14268],{"class":323,"line":1829},[321,14269,1771],{"class":331},[321,14271,14272,14274,14276,14278,14280,14282,14285,14287,14289],{"class":323,"line":1834},[321,14273,5571],{"class":327},[321,14275,11592],{"class":2169},[321,14277,332],{"class":331},[321,14279,335],{"class":327},[321,14281,1605],{"class":5423},[321,14283,14284],{"class":331}," ,",[321,14286,14244],{"class":327},[321,14288,3039],{"class":5423},[321,14290,338],{"class":331},[321,14292,14293],{"class":323,"line":1848},[321,14294,1752],{"class":331},[321,14296,14297,14299,14301,14304,14306],{"class":323,"line":1853},[321,14298,6736],{"class":331},[321,14300,1376],{"class":327},[321,14302,14303],{"class":436}," \"func (int a ,double b) 的调用！\"",[321,14305,1651],{"class":327},[321,14307,9047],{"class":331},[321,14309,14310],{"class":323,"line":1859},[321,14311,1771],{"class":331},[321,14313,14314,14316,14318,14320,14322,14324,14326,14328,14330],{"class":323,"line":1880},[321,14315,5571],{"class":327},[321,14317,11592],{"class":2169},[321,14319,332],{"class":331},[321,14321,14244],{"class":327},[321,14323,1605],{"class":5423},[321,14325,14284],{"class":331},[321,14327,335],{"class":327},[321,14329,3039],{"class":5423},[321,14331,338],{"class":331},[321,14333,14334],{"class":323,"line":1885},[321,14335,1752],{"class":331},[321,14337,14338,14340,14342,14345,14347],{"class":323,"line":1899},[321,14339,6736],{"class":331},[321,14341,1376],{"class":327},[321,14343,14344],{"class":436}," \"func (double a ,int b)的调用！\"",[321,14346,1651],{"class":327},[321,14348,9047],{"class":331},[321,14350,14351],{"class":323,"line":1904},[321,14352,1771],{"class":331},[321,14354,14355],{"class":323,"line":1933},[321,14356,2606],{"emptyLinePlaceholder":251},[321,14358,14359],{"class":323,"line":1938},[321,14360,14361],{"class":390},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[321,14363,14364],{"class":323,"line":1955},[321,14365,14366],{"class":390},"\u002F\u002Fint func(double a, int b)\n",[321,14368,14369],{"class":323,"line":1960},[321,14370,14371],{"class":390},"\u002F\u002F{\n",[321,14373,14374],{"class":323,"line":1965},[321,14375,14376],{"class":390},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[321,14378,14379],{"class":323,"line":1970},[321,14380,14381],{"class":390},"\u002F\u002F}\n",[321,14383,14384],{"class":323,"line":1984},[321,14385,2606],{"emptyLinePlaceholder":251},[321,14387,14388],{"class":323,"line":1989},[321,14389,2606],{"emptyLinePlaceholder":251},[321,14391,14392,14394,14396],{"class":323,"line":2783},[321,14393,335],{"class":327},[321,14395,2179],{"class":2169},[321,14397,11060],{"class":331},[321,14399,14400],{"class":323,"line":2797},[321,14401,2606],{"emptyLinePlaceholder":251},[321,14403,14404,14406],{"class":323,"line":2805},[321,14405,13492],{"class":2169},[321,14407,5843],{"class":331},[321,14409,14410,14412,14414,14416],{"class":323,"line":2810},[321,14411,13492],{"class":2169},[321,14413,332],{"class":331},[321,14415,778],{"class":380},[321,14417,2925],{"class":331},[321,14419,14420,14422,14424,14426],{"class":323,"line":2816},[321,14421,13492],{"class":2169},[321,14423,332],{"class":331},[321,14425,381],{"class":380},[321,14427,2925],{"class":331},[321,14429,14430,14432,14434,14436,14438,14440],{"class":323,"line":2822},[321,14431,13492],{"class":2169},[321,14433,332],{"class":331},[321,14435,778],{"class":380},[321,14437,710],{"class":331},[321,14439,381],{"class":380},[321,14441,2925],{"class":331},[321,14443,14444,14446,14448,14450,14453,14455],{"class":323,"line":2827},[321,14445,13492],{"class":2169},[321,14447,332],{"class":331},[321,14449,381],{"class":380},[321,14451,14452],{"class":331}," , ",[321,14454,778],{"class":380},[321,14456,2925],{"class":331},[321,14458,14459],{"class":323,"line":8155},[321,14460,13417],{"class":331},[321,14462,14463,14465,14467,14469],{"class":323,"line":8179},[321,14464,2509],{"class":2169},[321,14466,332],{"class":331},[321,14468,2514],{"class":436},[321,14470,2925],{"class":331},[321,14472,14473],{"class":323,"line":8184},[321,14474,2606],{"emptyLinePlaceholder":251},[321,14476,14477,14479,14481],{"class":323,"line":8190},[321,14478,4296],{"class":327},[321,14480,4299],{"class":380},[321,14482,1497],{"class":331},[321,14484,14485],{"class":323,"line":8217},[321,14486,1771],{"class":331},[19,14488,14489],{},"重点：函数返回值不可以作为函数重载条件！",[292,14491,14493],{"id":14492},"_732注意事项","7.3.2注意事项",[1339,14495,14496,14499],{},[154,14497,14498],{},"引用作为重载条件!!!",[154,14500,14501],{},"函数重载碰到函数默认参数",[312,14503,14505],{"className":314,"code":14504,"language":316,"meta":30,"style":30},"\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",[318,14506,14507,14512,14517,14521,14537,14541,14554,14558,14562,14580,14584,14597,14601,14605,14609,14614,14618,14642,14646,14659,14663,14667,14681,14685,14698,14702,14706,14714,14718,14730,14740,14753,14757,14761,14769,14773,14783,14787,14795],{"__ignoreMap":30},[321,14508,14509],{"class":323,"line":324},[321,14510,14511],{"class":390},"\u002F\u002F函数重载注意事项\n",[321,14513,14514],{"class":323,"line":167},[321,14515,14516],{"class":390},"\u002F\u002F1、引用作为重载条件\n",[321,14518,14519],{"class":323,"line":200},[321,14520,2606],{"emptyLinePlaceholder":251},[321,14522,14523,14525,14527,14529,14531,14533,14535],{"class":323,"line":1401},[321,14524,5571],{"class":327},[321,14526,11592],{"class":2169},[321,14528,332],{"class":331},[321,14530,335],{"class":327},[321,14532,10791],{"class":327},[321,14534,570],{"class":5423},[321,14536,338],{"class":331},[321,14538,14539],{"class":323,"line":1407},[321,14540,1752],{"class":331},[321,14542,14543,14545,14547,14550,14552],{"class":323,"line":1421},[321,14544,6736],{"class":331},[321,14546,1376],{"class":327},[321,14548,14549],{"class":436}," \"func (int &a) 调用 \"",[321,14551,1651],{"class":327},[321,14553,9047],{"class":331},[321,14555,14556],{"class":323,"line":1427},[321,14557,1771],{"class":331},[321,14559,14560],{"class":323,"line":1518},[321,14561,2606],{"emptyLinePlaceholder":251},[321,14563,14564,14566,14568,14570,14572,14574,14576,14578],{"class":323,"line":1524},[321,14565,5571],{"class":327},[321,14567,11592],{"class":2169},[321,14569,332],{"class":331},[321,14571,6999],{"class":327},[321,14573,2588],{"class":327},[321,14575,10791],{"class":327},[321,14577,570],{"class":5423},[321,14579,338],{"class":331},[321,14581,14582],{"class":323,"line":1536},[321,14583,1752],{"class":331},[321,14585,14586,14588,14590,14593,14595],{"class":323,"line":1818},[321,14587,6736],{"class":331},[321,14589,1376],{"class":327},[321,14591,14592],{"class":436}," \"func (const int &a) 调用 \"",[321,14594,1651],{"class":327},[321,14596,9047],{"class":331},[321,14598,14599],{"class":323,"line":1823},[321,14600,1771],{"class":331},[321,14602,14603],{"class":323,"line":1829},[321,14604,2606],{"emptyLinePlaceholder":251},[321,14606,14607],{"class":323,"line":1834},[321,14608,2606],{"emptyLinePlaceholder":251},[321,14610,14611],{"class":323,"line":1848},[321,14612,14613],{"class":390},"\u002F\u002F2、函数重载碰到函数默认参数\n",[321,14615,14616],{"class":323,"line":1853},[321,14617,2606],{"emptyLinePlaceholder":251},[321,14619,14620,14622,14624,14626,14628,14630,14632,14634,14636,14638,14640],{"class":323,"line":1859},[321,14621,5571],{"class":327},[321,14623,13825],{"class":2169},[321,14625,332],{"class":331},[321,14627,335],{"class":327},[321,14629,1605],{"class":5423},[321,14631,12642],{"class":331},[321,14633,335],{"class":327},[321,14635,3039],{"class":5423},[321,14637,13771],{"class":327},[321,14639,2244],{"class":380},[321,14641,338],{"class":331},[321,14643,14644],{"class":323,"line":1880},[321,14645,1752],{"class":331},[321,14647,14648,14650,14652,14655,14657],{"class":323,"line":1885},[321,14649,6736],{"class":331},[321,14651,1376],{"class":327},[321,14653,14654],{"class":436}," \"func2(int a, int b = 10) 调用\"",[321,14656,1651],{"class":327},[321,14658,9047],{"class":331},[321,14660,14661],{"class":323,"line":1899},[321,14662,1771],{"class":331},[321,14664,14665],{"class":323,"line":1904},[321,14666,2606],{"emptyLinePlaceholder":251},[321,14668,14669,14671,14673,14675,14677,14679],{"class":323,"line":1933},[321,14670,5571],{"class":327},[321,14672,13825],{"class":2169},[321,14674,332],{"class":331},[321,14676,335],{"class":327},[321,14678,1605],{"class":5423},[321,14680,338],{"class":331},[321,14682,14683],{"class":323,"line":1938},[321,14684,1752],{"class":331},[321,14686,14687,14689,14691,14694,14696],{"class":323,"line":1955},[321,14688,6736],{"class":331},[321,14690,1376],{"class":327},[321,14692,14693],{"class":436}," \"func2(int a) 调用\"",[321,14695,1651],{"class":327},[321,14697,9047],{"class":331},[321,14699,14700],{"class":323,"line":1960},[321,14701,1771],{"class":331},[321,14703,14704],{"class":323,"line":1965},[321,14705,2606],{"emptyLinePlaceholder":251},[321,14707,14708,14710,14712],{"class":323,"line":1970},[321,14709,335],{"class":327},[321,14711,2179],{"class":2169},[321,14713,11060],{"class":331},[321,14715,14716],{"class":323,"line":1984},[321,14717,13417],{"class":331},[321,14719,14720,14722,14724,14726,14728],{"class":323,"line":1989},[321,14721,2191],{"class":327},[321,14723,11076],{"class":331},[321,14725,377],{"class":327},[321,14727,2244],{"class":380},[321,14729,1497],{"class":331},[321,14731,14732,14734,14737],{"class":323,"line":2783},[321,14733,13492],{"class":2169},[321,14735,14736],{"class":331},"(a);",[321,14738,14739],{"class":390}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[321,14741,14742,14744,14746,14748,14750],{"class":323,"line":2797},[321,14743,13492],{"class":2169},[321,14745,332],{"class":331},[321,14747,778],{"class":380},[321,14749,6173],{"class":331},[321,14751,14752],{"class":390},"\u002F\u002F调用有const   10是个常量\n",[321,14754,14755],{"class":323,"line":2805},[321,14756,2606],{"emptyLinePlaceholder":251},[321,14758,14759],{"class":323,"line":2810},[321,14760,2606],{"emptyLinePlaceholder":251},[321,14762,14763,14766],{"class":323,"line":2816},[321,14764,14765],{"class":390},"    \u002F\u002Ffunc2(10);",[321,14767,14768],{"class":390}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[321,14770,14771],{"class":323,"line":2822},[321,14772,2606],{"emptyLinePlaceholder":251},[321,14774,14775,14777,14779,14781],{"class":323,"line":2827},[321,14776,2509],{"class":2169},[321,14778,332],{"class":331},[321,14780,2514],{"class":436},[321,14782,2925],{"class":331},[321,14784,14785],{"class":323,"line":8155},[321,14786,2606],{"emptyLinePlaceholder":251},[321,14788,14789,14791,14793],{"class":323,"line":8179},[321,14790,4296],{"class":327},[321,14792,4299],{"class":380},[321,14794,1497],{"class":331},[321,14796,14797],{"class":323,"line":8184},[321,14798,1771],{"class":331},[5333,14800,14801],{},"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":30,"searchDepth":167,"depth":167,"links":14803},[14804,14805,14806],{"id":13736,"depth":167,"text":13737},{"id":13993,"depth":167,"text":13994},{"id":14115,"depth":167,"text":14116,"children":14807},[14808,14809],{"id":14122,"depth":200,"text":14123},{"id":14492,"depth":200,"text":14493},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13728,"description":30},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14816,"title":14817,"body":14818,"description":23572,"extension":249,"meta":23573,"navigation":251,"path":23574,"seo":23575,"stem":23576,"__hash__":23577},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14819,"toc":23553},[14820,14823,14829,14836,14841,14844,14847,14850,14854,14858,14861,14864,14872,14877,14880,14887,14892,15051,15054,15307,15310,15313,15316,15321,15324,15327,15338,15343,15579,15583,15593,15596,15604,15751,15755,15758,15761,15765,16210,16214,16222,16230,17142,17149,17154,17782,17785,17788,17791,17910,17913,18000,18003,18129,18132,18226,18229,18582,18586,18594,18598,18605,18608,18611,18622,18628,18633,18645,18653,18673,18681,18698,18884,18887,18891,18894,18897,18900,18903,18906,18909,18912,19372,19378,19382,19385,19396,19983,19986,20475,20479,20482,20485,20488,20491,20494,20502,20898,20902,20905,20908,21355,21358,21361,21366,21369,21374,21377,21381,21384,21386,21392,21395,21701,21711,21752,21756,21759,21761,21794,21797,22104,22106,22121,22124,22147,22156,22162,22165,22169,22172,22175,22180,22191,22196,22204,22209,22339,22342,22345,22520,22525,22737,22741,22744,22858,22863,23102,23106,23110,23113,23116,23121,23226,23229,23232,23235,23239,23350,23353,23356,23361,23413,23416,23419,23424,23470,23473,23478,23546,23548,23551],[10,14821,14817],{"id":14822},"_8类和对象",[19,14824,14825,14826],{},"C++面向对象的三大特性为",[481,14827,14828],{},"封装、继承、多态",[19,14830,14831,14832,14835],{},"C++认为",[481,14833,14834],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14837,14838],{},[481,14839,14840],{},"例如：",[19,14842,14843],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14845,14846],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14848,14849],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14851,14853],{"id":14852},"_81封装","8.1封装",[292,14855,14857],{"id":14856},"_811封装的意义","8.1.1封装的意义",[19,14859,14860],{},"封装是C++面向对象三大特性之一",[19,14862,14863],{},"封装的意义：",[1339,14865,14866,14869],{},[154,14867,14868],{},"将属性和行为作为一个整体，表现生活中的事物",[154,14870,14871],{},"将属性和行为加以权限控制",[19,14873,14874],{},[481,14875,14876],{},"封装意义一：",[19,14878,14879],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14881,14882,14002,14884],{},[481,14883,5388],{},[318,14885,14886],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[151,14888,14889],{},[154,14890,14891],{},"**示例1：**设计一个圆类，求圆的周长",[312,14893,14895],{"className":314,"code":14894,"language":316,"meta":30,"style":30},"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",[318,14896,14897,14905,14909,14914,14919,14924,14929,14936,14941,14951,14955,14973,14977,14981,14989,14993,14998,15003,15008,15013,15024,15047],{"__ignoreMap":30},[321,14898,14899,14902],{"class":323,"line":324},[321,14900,14901],{"class":327},"class",[321,14903,14904],{"class":2169}," Circle\n",[321,14906,14907],{"class":323,"line":167},[321,14908,1752],{"class":331},[321,14910,14911],{"class":323,"line":200},[321,14912,14913],{"class":390},"    \u002F\u002F访问权限\n",[321,14915,14916],{"class":323,"line":1401},[321,14917,14918],{"class":390},"    \u002F\u002F公共权限\n",[321,14920,14921],{"class":323,"line":1407},[321,14922,14923],{"class":327},"public:\n",[321,14925,14926],{"class":323,"line":1421},[321,14927,14928],{"class":390},"    \u002F\u002F属性\n",[321,14930,14931,14933],{"class":323,"line":1427},[321,14932,2191],{"class":327},[321,14934,14935],{"class":331}," m_r;\n",[321,14937,14938],{"class":323,"line":1518},[321,14939,14940],{"class":390},"    \u002F\u002F行为\n",[321,14942,14943,14946,14949],{"class":323,"line":1524},[321,14944,14945],{"class":327},"    double",[321,14947,14948],{"class":2169}," calculateZC",[321,14950,2182],{"class":331},[321,14952,14953],{"class":323,"line":1536},[321,14954,2236],{"class":331},[321,14956,14957,14960,14963,14965,14968,14970],{"class":323,"line":1818},[321,14958,14959],{"class":327},"        return",[321,14961,14962],{"class":380}," 2",[321,14964,787],{"class":327},[321,14966,14967],{"class":331},"PI",[321,14969,787],{"class":327},[321,14971,14972],{"class":331},"m_r;\n",[321,14974,14975],{"class":323,"line":1823},[321,14976,2393],{"class":331},[321,14978,14979],{"class":323,"line":1829},[321,14980,4201],{"class":331},[321,14982,14983,14985,14987],{"class":323,"line":1834},[321,14984,335],{"class":327},[321,14986,2179],{"class":2169},[321,14988,2182],{"class":331},[321,14990,14991],{"class":323,"line":1848},[321,14992,1752],{"class":331},[321,14994,14995],{"class":323,"line":1853},[321,14996,14997],{"class":390},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[321,14999,15000],{"class":323,"line":1859},[321,15001,15002],{"class":390},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[321,15004,15005],{"class":323,"line":1880},[321,15006,15007],{"class":331},"    Circle c1;\n",[321,15009,15010],{"class":323,"line":1885},[321,15011,15012],{"class":390},"    \u002F\u002F给圆对象 的属性进行赋值\n",[321,15014,15015,15018,15020,15022],{"class":323,"line":1899},[321,15016,15017],{"class":331},"    c1.m_r",[321,15019,377],{"class":327},[321,15021,778],{"class":380},[321,15023,1497],{"class":331},[321,15025,15026,15028,15030,15033,15035,15038,15041,15043,15045],{"class":323,"line":1904},[321,15027,1757],{"class":331},[321,15029,1376],{"class":327},[321,15031,15032],{"class":436},"\"圆的周长\"",[321,15034,1376],{"class":327},[321,15036,15037],{"class":331},"c1.",[321,15039,15040],{"class":2169},"calculateZC",[321,15042,2633],{"class":331},[321,15044,1376],{"class":327},[321,15046,1398],{"class":331},[321,15048,15049],{"class":323,"line":1933},[321,15050,1771],{"class":331},[19,15052,15053],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[312,15055,15057],{"className":314,"code":15056,"language":316,"meta":30,"style":30},"#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",[318,15058,15059,15065,15075,15081,15087,15091,15095,15100,15107,15112,15130,15134,15144,15148,15153,15169,15173,15183,15187,15192,15200,15204,15236,15240,15244,15252,15256,15261,15266,15280,15294,15303],{"__ignoreMap":30},[321,15060,15061,15063],{"class":323,"line":324},[321,15062,2155],{"class":327},[321,15064,2158],{"class":436},[321,15066,15067,15069,15071,15073],{"class":323,"line":167},[321,15068,2163],{"class":327},[321,15070,2166],{"class":327},[321,15072,2170],{"class":2169},[321,15074,1497],{"class":331},[321,15076,15077,15079],{"class":323,"line":200},[321,15078,2155],{"class":327},[321,15080,7956],{"class":436},[321,15082,15083,15085],{"class":323,"line":1401},[321,15084,14901],{"class":327},[321,15086,7969],{"class":2169},[321,15088,15089],{"class":323,"line":1407},[321,15090,1752],{"class":331},[321,15092,15093],{"class":323,"line":1421},[321,15094,14923],{"class":327},[321,15096,15097],{"class":323,"line":1427},[321,15098,15099],{"class":331},"    string m_name;\n",[321,15101,15102,15104],{"class":323,"line":1518},[321,15103,2191],{"class":327},[321,15105,15106],{"class":331}," m_id;\n",[321,15108,15109],{"class":323,"line":1524},[321,15110,15111],{"class":390},"    \u002F\u002F赋值姓名\n",[321,15113,15114,15117,15120,15122,15125,15128],{"class":323,"line":1536},[321,15115,15116],{"class":327},"    void",[321,15118,15119],{"class":2169}," setName",[321,15121,332],{"class":331},[321,15123,15124],{"class":2169},"string",[321,15126,15127],{"class":5423}," name",[321,15129,338],{"class":331},[321,15131,15132],{"class":323,"line":1818},[321,15133,2236],{"class":331},[321,15135,15136,15139,15141],{"class":323,"line":1823},[321,15137,15138],{"class":331},"        m_name",[321,15140,377],{"class":327},[321,15142,15143],{"class":331},"name;\n",[321,15145,15146],{"class":323,"line":1829},[321,15147,2393],{"class":331},[321,15149,15150],{"class":323,"line":1834},[321,15151,15152],{"class":390},"    \u002F\u002F赋值学号\n",[321,15154,15155,15157,15160,15162,15164,15167],{"class":323,"line":1848},[321,15156,15116],{"class":327},[321,15158,15159],{"class":2169}," setId",[321,15161,332],{"class":331},[321,15163,335],{"class":327},[321,15165,15166],{"class":5423}," id",[321,15168,338],{"class":331},[321,15170,15171],{"class":323,"line":1853},[321,15172,2236],{"class":331},[321,15174,15175,15178,15180],{"class":323,"line":1859},[321,15176,15177],{"class":331},"        m_id",[321,15179,377],{"class":327},[321,15181,15182],{"class":331},"id;\n",[321,15184,15185],{"class":323,"line":1880},[321,15186,2393],{"class":331},[321,15188,15189],{"class":323,"line":1885},[321,15190,15191],{"class":390},"    \u002F\u002F打印学生信息\n",[321,15193,15194,15196,15198],{"class":323,"line":1899},[321,15195,15116],{"class":327},[321,15197,9822],{"class":2169},[321,15199,2182],{"class":331},[321,15201,15202],{"class":323,"line":1904},[321,15203,2236],{"class":331},[321,15205,15206,15208,15210,15213,15215,15218,15220,15222,15224,15227,15229,15232,15234],{"class":323,"line":1933},[321,15207,3657],{"class":331},[321,15209,1376],{"class":327},[321,15211,15212],{"class":436},"\"姓名：\"",[321,15214,1376],{"class":327},[321,15216,15217],{"class":331},"m_name",[321,15219,1376],{"class":327},[321,15221,4565],{"class":436},[321,15223,1376],{"class":327},[321,15225,15226],{"class":436},"\"学号：\"",[321,15228,1376],{"class":327},[321,15230,15231],{"class":331},"m_id",[321,15233,1376],{"class":327},[321,15235,1398],{"class":331},[321,15237,15238],{"class":323,"line":1938},[321,15239,2393],{"class":331},[321,15241,15242],{"class":323,"line":1955},[321,15243,4201],{"class":331},[321,15245,15246,15248,15250],{"class":323,"line":1960},[321,15247,335],{"class":327},[321,15249,2179],{"class":2169},[321,15251,2182],{"class":331},[321,15253,15254],{"class":323,"line":1965},[321,15255,1752],{"class":331},[321,15257,15258],{"class":323,"line":1970},[321,15259,15260],{"class":390},"    \u002F\u002F实例化\n",[321,15262,15263],{"class":323,"line":1984},[321,15264,15265],{"class":331},"    Student s1;\n",[321,15267,15268,15271,15274,15276,15278],{"class":323,"line":1989},[321,15269,15270],{"class":331},"    s1.",[321,15272,15273],{"class":2169},"setName",[321,15275,332],{"class":331},[321,15277,8123],{"class":436},[321,15279,2925],{"class":331},[321,15281,15282,15284,15287,15289,15292],{"class":323,"line":2783},[321,15283,15270],{"class":331},[321,15285,15286],{"class":2169},"setId",[321,15288,332],{"class":331},[321,15290,15291],{"class":380},"123456",[321,15293,2925],{"class":331},[321,15295,15296,15298,15301],{"class":323,"line":2797},[321,15297,15270],{"class":331},[321,15299,15300],{"class":2169},"printInfo",[321,15302,5843],{"class":331},[321,15304,15305],{"class":323,"line":2805},[321,15306,1771],{"class":331},[19,15308,15309],{},"类中的属性和行为统称为成员",[19,15311,15312],{},"属性：成员属性(成员变量)",[19,15314,15315],{},"方法：成员函数(成员方法)",[19,15317,15318],{},[481,15319,15320],{},"封装意义二：",[19,15322,15323],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15325,15326],{},"访问权限有三种：",[151,15328,15329,15332,15335],{},[154,15330,15331],{},"public        公共权限",[154,15333,15334],{},"protected 保护权限",[154,15336,15337],{},"private      私有权限",[19,15339,15340],{},[481,15341,15342],{},"示例：",[312,15344,15346],{"className":10148,"code":15345,"language":10150,"meta":30,"style":30},"\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",[318,15347,15348,15353,15358,15363,15368,15372,15379,15383,15388,15392,15397,15401,15406,15411,15416,15420,15425,15430,15437,15441,15445,15453,15457,15468,15480,15492,15496,15500,15504,15512,15516,15521,15533,15541,15549,15553,15563,15567,15575],{"__ignoreMap":30},[321,15349,15350],{"class":323,"line":324},[321,15351,15352],{"class":390},"\u002F\u002F三种权限\n",[321,15354,15355],{"class":323,"line":167},[321,15356,15357],{"class":390},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[321,15359,15360],{"class":323,"line":200},[321,15361,15362],{"class":390},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[321,15364,15365],{"class":323,"line":1401},[321,15366,15367],{"class":390},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[321,15369,15370],{"class":323,"line":1407},[321,15371,2606],{"emptyLinePlaceholder":251},[321,15373,15374,15376],{"class":323,"line":1421},[321,15375,14901],{"class":327},[321,15377,15378],{"class":2169}," Person\n",[321,15380,15381],{"class":323,"line":1427},[321,15382,1752],{"class":331},[321,15384,15385],{"class":323,"line":1518},[321,15386,15387],{"class":390},"    \u002F\u002F姓名  公共权限\n",[321,15389,15390],{"class":323,"line":1524},[321,15391,14923],{"class":327},[321,15393,15394],{"class":323,"line":1536},[321,15395,15396],{"class":331},"    string m_Name;\n",[321,15398,15399],{"class":323,"line":1818},[321,15400,2606],{"emptyLinePlaceholder":251},[321,15402,15403],{"class":323,"line":1823},[321,15404,15405],{"class":390},"    \u002F\u002F汽车  保护权限\n",[321,15407,15408],{"class":323,"line":1829},[321,15409,15410],{"class":327},"protected:\n",[321,15412,15413],{"class":323,"line":1834},[321,15414,15415],{"class":331},"    string m_Car;\n",[321,15417,15418],{"class":323,"line":1848},[321,15419,2606],{"emptyLinePlaceholder":251},[321,15421,15422],{"class":323,"line":1853},[321,15423,15424],{"class":390},"    \u002F\u002F银行卡密码  私有权限\n",[321,15426,15427],{"class":323,"line":1859},[321,15428,15429],{"class":327},"private:\n",[321,15431,15432,15434],{"class":323,"line":1880},[321,15433,2191],{"class":327},[321,15435,15436],{"class":331}," m_Password;\n",[321,15438,15439],{"class":323,"line":1885},[321,15440,2606],{"emptyLinePlaceholder":251},[321,15442,15443],{"class":323,"line":1899},[321,15444,14923],{"class":327},[321,15446,15447,15449,15451],{"class":323,"line":1904},[321,15448,15116],{"class":327},[321,15450,11592],{"class":2169},[321,15452,2182],{"class":331},[321,15454,15455],{"class":323,"line":1933},[321,15456,2236],{"class":331},[321,15458,15459,15462,15464,15466],{"class":323,"line":1938},[321,15460,15461],{"class":331},"        m_Name ",[321,15463,377],{"class":327},[321,15465,9145],{"class":436},[321,15467,1497],{"class":331},[321,15469,15470,15473,15475,15478],{"class":323,"line":1955},[321,15471,15472],{"class":331},"        m_Car ",[321,15474,377],{"class":327},[321,15476,15477],{"class":436}," \"拖拉机\"",[321,15479,1497],{"class":331},[321,15481,15482,15485,15487,15490],{"class":323,"line":1960},[321,15483,15484],{"class":331},"        m_Password ",[321,15486,377],{"class":327},[321,15488,15489],{"class":380}," 123456",[321,15491,1497],{"class":331},[321,15493,15494],{"class":323,"line":1965},[321,15495,2393],{"class":331},[321,15497,15498],{"class":323,"line":1970},[321,15499,4201],{"class":331},[321,15501,15502],{"class":323,"line":1984},[321,15503,2606],{"emptyLinePlaceholder":251},[321,15505,15506,15508,15510],{"class":323,"line":1989},[321,15507,335],{"class":327},[321,15509,2179],{"class":2169},[321,15511,11060],{"class":331},[321,15513,15514],{"class":323,"line":2783},[321,15515,2606],{"emptyLinePlaceholder":251},[321,15517,15518],{"class":323,"line":2797},[321,15519,15520],{"class":331},"    Person p;\n",[321,15522,15523,15526,15528,15531],{"class":323,"line":2805},[321,15524,15525],{"class":331},"    p.m_Name ",[321,15527,377],{"class":327},[321,15529,15530],{"class":436}," \"李四\"",[321,15532,1497],{"class":331},[321,15534,15535,15538],{"class":323,"line":2810},[321,15536,15537],{"class":390},"    \u002F\u002Fp.m_Car = \"奔驰\";",[321,15539,15540],{"class":390},"  \u002F\u002F保护权限类外访问不到\n",[321,15542,15543,15546],{"class":323,"line":2816},[321,15544,15545],{"class":390},"    \u002F\u002Fp.m_Password = 123;",[321,15547,15548],{"class":390}," \u002F\u002F私有权限类外访问不到\n",[321,15550,15551],{"class":323,"line":2822},[321,15552,2606],{"emptyLinePlaceholder":251},[321,15554,15555,15557,15559,15561],{"class":323,"line":2827},[321,15556,2509],{"class":2169},[321,15558,332],{"class":331},[321,15560,2514],{"class":436},[321,15562,2925],{"class":331},[321,15564,15565],{"class":323,"line":8155},[321,15566,2606],{"emptyLinePlaceholder":251},[321,15568,15569,15571,15573],{"class":323,"line":8179},[321,15570,4296],{"class":327},[321,15572,4299],{"class":380},[321,15574,1497],{"class":331},[321,15576,15577],{"class":323,"line":8184},[321,15578,1771],{"class":331},[292,15580,15582],{"id":15581},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15584,15585,15586,15589,15590],{},"在C++中 struct和class唯一的",[481,15587,15588],{},"区别","就在于 ",[481,15591,15592],{},"默认的访问权限不同",[19,15594,15595],{},"区别：",[1339,15597,15598,15601],{},[154,15599,15600],{},"struct 默认权限为公共",[154,15602,15603],{},"class   默认权限为私有",[312,15605,15607],{"className":10148,"code":15606,"language":10150,"meta":30,"style":30},"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",[318,15608,15609,15616,15620,15630,15634,15638,15645,15649,15659,15663,15667,15675,15679,15684,15698,15702,15707,15721,15725,15735,15739,15747],{"__ignoreMap":30},[321,15610,15611,15613],{"class":323,"line":324},[321,15612,14901],{"class":327},[321,15614,15615],{"class":2169}," C1\n",[321,15617,15618],{"class":323,"line":167},[321,15619,1752],{"class":331},[321,15621,15622,15624,15627],{"class":323,"line":200},[321,15623,2191],{"class":327},[321,15625,15626],{"class":331},"  m_A;",[321,15628,15629],{"class":390}," \u002F\u002F默认是私有权限\n",[321,15631,15632],{"class":323,"line":1401},[321,15633,4201],{"class":331},[321,15635,15636],{"class":323,"line":1407},[321,15637,2606],{"emptyLinePlaceholder":251},[321,15639,15640,15642],{"class":323,"line":1421},[321,15641,7966],{"class":327},[321,15643,15644],{"class":2169}," C2\n",[321,15646,15647],{"class":323,"line":1427},[321,15648,1752],{"class":331},[321,15650,15651,15653,15656],{"class":323,"line":1518},[321,15652,2191],{"class":327},[321,15654,15655],{"class":331}," m_A;",[321,15657,15658],{"class":390},"  \u002F\u002F默认是公共权限\n",[321,15660,15661],{"class":323,"line":1524},[321,15662,4201],{"class":331},[321,15664,15665],{"class":323,"line":1536},[321,15666,2606],{"emptyLinePlaceholder":251},[321,15668,15669,15671,15673],{"class":323,"line":1818},[321,15670,335],{"class":327},[321,15672,2179],{"class":2169},[321,15674,11060],{"class":331},[321,15676,15677],{"class":323,"line":1823},[321,15678,2606],{"emptyLinePlaceholder":251},[321,15680,15681],{"class":323,"line":1829},[321,15682,15683],{"class":331},"    C1 c1;\n",[321,15685,15686,15689,15691,15693,15695],{"class":323,"line":1834},[321,15687,15688],{"class":331},"    c1.m_A ",[321,15690,377],{"class":327},[321,15692,2244],{"class":380},[321,15694,387],{"class":331},[321,15696,15697],{"class":390}," \u002F\u002F错误，访问权限是私有\n",[321,15699,15700],{"class":323,"line":1848},[321,15701,2606],{"emptyLinePlaceholder":251},[321,15703,15704],{"class":323,"line":1853},[321,15705,15706],{"class":331},"    C2 c2;\n",[321,15708,15709,15712,15714,15716,15718],{"class":323,"line":1859},[321,15710,15711],{"class":331},"    c2.m_A ",[321,15713,377],{"class":327},[321,15715,2244],{"class":380},[321,15717,387],{"class":331},[321,15719,15720],{"class":390}," \u002F\u002F正确，访问权限是公共\n",[321,15722,15723],{"class":323,"line":1880},[321,15724,2606],{"emptyLinePlaceholder":251},[321,15726,15727,15729,15731,15733],{"class":323,"line":1885},[321,15728,2509],{"class":2169},[321,15730,332],{"class":331},[321,15732,2514],{"class":436},[321,15734,2925],{"class":331},[321,15736,15737],{"class":323,"line":1899},[321,15738,2606],{"emptyLinePlaceholder":251},[321,15740,15741,15743,15745],{"class":323,"line":1904},[321,15742,4296],{"class":327},[321,15744,4299],{"class":380},[321,15746,1497],{"class":331},[321,15748,15749],{"class":323,"line":1933},[321,15750,1771],{"class":331},[292,15752,15754],{"id":15753},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15756,15757],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15759,15760],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15762,15763],{},[481,15764,15342],{},[312,15766,15768],{"className":10148,"code":15767,"language":10150,"meta":30,"style":30},"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",[318,15769,15770,15780,15784,15788,15793,15807,15816,15820,15830,15834,15841,15845,15849,15853,15858,15867,15874,15878,15883,15899,15922,15935,15942,15946,15955,15959,15963,15968,15984,15994,15998,16002,16006,16014,16018,16028,16032,16040,16044,16048,16056,16060,16064,16069,16082,16105,16109,16114,16127,16149,16153,16158,16172,16180,16184,16194,16198,16206],{"__ignoreMap":30},[321,15771,15772,15774,15777],{"class":323,"line":324},[321,15773,14901],{"class":327},[321,15775,15776],{"class":2169}," Person",[321,15778,15779],{"class":331}," {\n",[321,15781,15782],{"class":323,"line":167},[321,15783,14923],{"class":327},[321,15785,15786],{"class":323,"line":200},[321,15787,2606],{"emptyLinePlaceholder":251},[321,15789,15790],{"class":323,"line":1401},[321,15791,15792],{"class":390},"    \u002F\u002F姓名设置可读可写\n",[321,15794,15795,15797,15799,15801,15803,15805],{"class":323,"line":1407},[321,15796,15116],{"class":327},[321,15798,15119],{"class":2169},[321,15800,332],{"class":331},[321,15802,15124],{"class":2169},[321,15804,15127],{"class":5423},[321,15806,12649],{"class":331},[321,15808,15809,15811,15813],{"class":323,"line":1421},[321,15810,15461],{"class":331},[321,15812,377],{"class":327},[321,15814,15815],{"class":331}," name;\n",[321,15817,15818],{"class":323,"line":1427},[321,15819,2393],{"class":331},[321,15821,15822,15825,15828],{"class":323,"line":1518},[321,15823,15824],{"class":2169},"    string",[321,15826,15827],{"class":2169}," getName",[321,15829,2182],{"class":331},[321,15831,15832],{"class":323,"line":1524},[321,15833,2236],{"class":331},[321,15835,15836,15838],{"class":323,"line":1536},[321,15837,14959],{"class":327},[321,15839,15840],{"class":331}," m_Name;\n",[321,15842,15843],{"class":323,"line":1818},[321,15844,2393],{"class":331},[321,15846,15847],{"class":323,"line":1823},[321,15848,2606],{"emptyLinePlaceholder":251},[321,15850,15851],{"class":323,"line":1829},[321,15852,2606],{"emptyLinePlaceholder":251},[321,15854,15855],{"class":323,"line":1834},[321,15856,15857],{"class":390},"    \u002F\u002F获取年龄 \n",[321,15859,15860,15862,15865],{"class":323,"line":1848},[321,15861,2191],{"class":327},[321,15863,15864],{"class":2169}," getAge",[321,15866,11060],{"class":331},[321,15868,15869,15871],{"class":323,"line":1853},[321,15870,14959],{"class":327},[321,15872,15873],{"class":331}," m_Age;\n",[321,15875,15876],{"class":323,"line":1859},[321,15877,2393],{"class":331},[321,15879,15880],{"class":323,"line":1880},[321,15881,15882],{"class":390},"    \u002F\u002F设置年龄\n",[321,15884,15885,15887,15890,15892,15894,15897],{"class":323,"line":1885},[321,15886,15116],{"class":327},[321,15888,15889],{"class":2169}," setAge",[321,15891,332],{"class":331},[321,15893,335],{"class":327},[321,15895,15896],{"class":5423}," age",[321,15898,12649],{"class":331},[321,15900,15901,15903,15906,15908,15910,15912,15915,15917,15920],{"class":323,"line":1899},[321,15902,2703],{"class":327},[321,15904,15905],{"class":331}," (age ",[321,15907,1242],{"class":327},[321,15909,4299],{"class":380},[321,15911,3461],{"class":327},[321,15913,15914],{"class":331}," age ",[321,15916,1292],{"class":327},[321,15918,15919],{"class":380}," 150",[321,15921,12649],{"class":331},[321,15923,15924,15926,15928,15931,15933],{"class":323,"line":1904},[321,15925,9926],{"class":331},[321,15927,1376],{"class":327},[321,15929,15930],{"class":436}," \"你个老妖精!\"",[321,15932,1651],{"class":327},[321,15934,9047],{"class":331},[321,15936,15937,15940],{"class":323,"line":1933},[321,15938,15939],{"class":327},"            return",[321,15941,1497],{"class":331},[321,15943,15944],{"class":323,"line":1938},[321,15945,2735],{"class":331},[321,15947,15948,15951,15953],{"class":323,"line":1955},[321,15949,15950],{"class":331},"        m_Age ",[321,15952,377],{"class":327},[321,15954,8004],{"class":331},[321,15956,15957],{"class":323,"line":1960},[321,15958,2393],{"class":331},[321,15960,15961],{"class":323,"line":1965},[321,15962,2606],{"emptyLinePlaceholder":251},[321,15964,15965],{"class":323,"line":1970},[321,15966,15967],{"class":390},"    \u002F\u002F情人设置为只写\n",[321,15969,15970,15972,15975,15977,15979,15982],{"class":323,"line":1984},[321,15971,15116],{"class":327},[321,15973,15974],{"class":2169}," setLover",[321,15976,332],{"class":331},[321,15978,15124],{"class":2169},[321,15980,15981],{"class":5423}," lover",[321,15983,12649],{"class":331},[321,15985,15986,15989,15991],{"class":323,"line":1989},[321,15987,15988],{"class":331},"        m_Lover ",[321,15990,377],{"class":327},[321,15992,15993],{"class":331}," lover;\n",[321,15995,15996],{"class":323,"line":2783},[321,15997,2393],{"class":331},[321,15999,16000],{"class":323,"line":2797},[321,16001,2606],{"emptyLinePlaceholder":251},[321,16003,16004],{"class":323,"line":2805},[321,16005,15429],{"class":327},[321,16007,16008,16011],{"class":323,"line":2810},[321,16009,16010],{"class":331},"    string m_Name;",[321,16012,16013],{"class":390}," \u002F\u002F可读可写  姓名\n",[321,16015,16016],{"class":323,"line":2816},[321,16017,13417],{"class":331},[321,16019,16020,16022,16025],{"class":323,"line":2822},[321,16021,2191],{"class":327},[321,16023,16024],{"class":331}," m_Age;",[321,16026,16027],{"class":390}," \u002F\u002F只读  年龄\n",[321,16029,16030],{"class":323,"line":2827},[321,16031,2606],{"emptyLinePlaceholder":251},[321,16033,16034,16037],{"class":323,"line":8155},[321,16035,16036],{"class":331},"    string m_Lover;",[321,16038,16039],{"class":390}," \u002F\u002F只写  情人\n",[321,16041,16042],{"class":323,"line":8179},[321,16043,4201],{"class":331},[321,16045,16046],{"class":323,"line":8184},[321,16047,2606],{"emptyLinePlaceholder":251},[321,16049,16050,16052,16054],{"class":323,"line":8190},[321,16051,335],{"class":327},[321,16053,2179],{"class":2169},[321,16055,11060],{"class":331},[321,16057,16058],{"class":323,"line":8217},[321,16059,2606],{"emptyLinePlaceholder":251},[321,16061,16062],{"class":323,"line":8222},[321,16063,15520],{"class":331},[321,16065,16066],{"class":323,"line":8228},[321,16067,16068],{"class":390},"    \u002F\u002F姓名设置\n",[321,16070,16071,16074,16076,16078,16080],{"class":323,"line":8240},[321,16072,16073],{"class":331},"    p.",[321,16075,15273],{"class":2169},[321,16077,332],{"class":331},[321,16079,8123],{"class":436},[321,16081,2925],{"class":331},[321,16083,16084,16086,16088,16091,16093,16096,16099,16101,16103],{"class":323,"line":8252},[321,16085,6736],{"class":331},[321,16087,1376],{"class":327},[321,16089,16090],{"class":436}," \"姓名： \"",[321,16092,1651],{"class":327},[321,16094,16095],{"class":331}," p.",[321,16097,16098],{"class":2169},"getName",[321,16100,13257],{"class":331},[321,16102,1376],{"class":327},[321,16104,9047],{"class":331},[321,16106,16107],{"class":323,"line":8264},[321,16108,2606],{"emptyLinePlaceholder":251},[321,16110,16111],{"class":323,"line":9923},[321,16112,16113],{"class":390},"    \u002F\u002F年龄设置\n",[321,16115,16116,16118,16121,16123,16125],{"class":323,"line":9948},[321,16117,16073],{"class":331},[321,16119,16120],{"class":2169},"setAge",[321,16122,332],{"class":331},[321,16124,988],{"class":380},[321,16126,2925],{"class":331},[321,16128,16129,16131,16133,16136,16138,16140,16143,16145,16147],{"class":323,"line":9971},[321,16130,6736],{"class":331},[321,16132,1376],{"class":327},[321,16134,16135],{"class":436}," \"年龄： \"",[321,16137,1651],{"class":327},[321,16139,16095],{"class":331},[321,16141,16142],{"class":2169},"getAge",[321,16144,13257],{"class":331},[321,16146,1376],{"class":327},[321,16148,9047],{"class":331},[321,16150,16151],{"class":323,"line":9995},[321,16152,2606],{"emptyLinePlaceholder":251},[321,16154,16155],{"class":323,"line":10000},[321,16156,16157],{"class":390},"    \u002F\u002F情人设置\n",[321,16159,16160,16162,16165,16167,16170],{"class":323,"line":10005},[321,16161,16073],{"class":331},[321,16163,16164],{"class":2169},"setLover",[321,16166,332],{"class":331},[321,16168,16169],{"class":436},"\"苍井\"",[321,16171,2925],{"class":331},[321,16173,16174,16177],{"class":323,"line":10010},[321,16175,16176],{"class":390},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[321,16178,16179],{"class":390},"  \u002F\u002F只写属性，不可以读取\n",[321,16181,16182],{"class":323,"line":10019},[321,16183,2606],{"emptyLinePlaceholder":251},[321,16185,16186,16188,16190,16192],{"class":323,"line":10024},[321,16187,2509],{"class":2169},[321,16189,332],{"class":331},[321,16191,2514],{"class":436},[321,16193,2925],{"class":331},[321,16195,16196],{"class":323,"line":10030},[321,16197,2606],{"emptyLinePlaceholder":251},[321,16199,16200,16202,16204],{"class":323,"line":10051},[321,16201,4296],{"class":327},[321,16203,4299],{"class":380},[321,16205,1497],{"class":331},[321,16207,16208],{"class":323,"line":10057},[321,16209,1771],{"class":331},[292,16211,16213],{"id":16212},"_814封装案例","8.1.4封装案例",[151,16215,16216],{},[154,16217,16218,16221],{},[481,16219,16220],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1339,16223,16224,16227],{},[154,16225,16226],{},"求出立方体的面积和体积",[154,16228,16229],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[312,16231,16233],{"className":314,"code":16232,"language":316,"meta":30,"style":30},"#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",[318,16234,16235,16241,16251,16258,16262,16266,16271,16301,16305,16315,16325,16335,16339,16348,16352,16388,16392,16401,16405,16421,16425,16430,16439,16443,16450,16454,16463,16467,16474,16478,16487,16491,16498,16502,16507,16524,16528,16574,16578,16587,16591,16595,16599,16608,16612,16616,16621,16625,16631,16637,16643,16647,16651,16656,16678,16682,16736,16740,16748,16752,16757,16762,16775,16782,16798,16809,16815,16838,16844,16867,16881,16901,16907,16918,16941,16963,16968,16974,16988,17001,17006,17020,17025,17031,17036,17050,17055,17060,17074,17086,17091,17104,17109,17114,17119,17132,17137],{"__ignoreMap":30},[321,16236,16237,16239],{"class":323,"line":324},[321,16238,2155],{"class":327},[321,16240,2158],{"class":436},[321,16242,16243,16245,16247,16249],{"class":323,"line":167},[321,16244,2163],{"class":327},[321,16246,2166],{"class":327},[321,16248,2170],{"class":2169},[321,16250,1497],{"class":331},[321,16252,16253,16255],{"class":323,"line":200},[321,16254,14901],{"class":327},[321,16256,16257],{"class":2169}," Cube\n",[321,16259,16260],{"class":323,"line":1401},[321,16261,1752],{"class":331},[321,16263,16264],{"class":323,"line":1407},[321,16265,14923],{"class":327},[321,16267,16268],{"class":323,"line":1421},[321,16269,16270],{"class":390},"    \u002F\u002F输入长宽高\n",[321,16272,16273,16275,16278,16280,16282,16285,16287,16289,16292,16294,16296,16299],{"class":323,"line":1427},[321,16274,15116],{"class":327},[321,16276,16277],{"class":2169}," setLwh",[321,16279,332],{"class":331},[321,16281,335],{"class":327},[321,16283,16284],{"class":5423}," l",[321,16286,710],{"class":331},[321,16288,335],{"class":327},[321,16290,16291],{"class":5423}," w",[321,16293,710],{"class":331},[321,16295,335],{"class":327},[321,16297,16298],{"class":5423}," h",[321,16300,338],{"class":331},[321,16302,16303],{"class":323,"line":1518},[321,16304,2236],{"class":331},[321,16306,16307,16310,16312],{"class":323,"line":1524},[321,16308,16309],{"class":331},"        m_L",[321,16311,377],{"class":327},[321,16313,16314],{"class":331},"l;\n",[321,16316,16317,16320,16322],{"class":323,"line":1536},[321,16318,16319],{"class":331},"        m_W",[321,16321,377],{"class":327},[321,16323,16324],{"class":331},"w;\n",[321,16326,16327,16330,16332],{"class":323,"line":1818},[321,16328,16329],{"class":331},"        m_H",[321,16331,377],{"class":327},[321,16333,16334],{"class":331},"h;\n",[321,16336,16337],{"class":323,"line":1823},[321,16338,2393],{"class":331},[321,16340,16341,16343,16346],{"class":323,"line":1829},[321,16342,2191],{"class":327},[321,16344,16345],{"class":2169}," mianji",[321,16347,2182],{"class":331},[321,16349,16350],{"class":323,"line":1834},[321,16351,2236],{"class":331},[321,16353,16354,16356,16358,16360,16363,16365,16368,16370,16373,16375,16378,16380,16383,16385],{"class":323,"line":1848},[321,16355,14959],{"class":327},[321,16357,14962],{"class":380},[321,16359,787],{"class":327},[321,16361,16362],{"class":331},"(m_L",[321,16364,787],{"class":327},[321,16366,16367],{"class":331},"m_W ",[321,16369,813],{"class":327},[321,16371,16372],{"class":331}," m_L",[321,16374,787],{"class":327},[321,16376,16377],{"class":331},"m_H ",[321,16379,813],{"class":327},[321,16381,16382],{"class":331}," m_W",[321,16384,787],{"class":327},[321,16386,16387],{"class":331},"m_H);\n",[321,16389,16390],{"class":323,"line":1853},[321,16391,2393],{"class":331},[321,16393,16394,16396,16399],{"class":323,"line":1859},[321,16395,2191],{"class":327},[321,16397,16398],{"class":2169}," tiji",[321,16400,2182],{"class":331},[321,16402,16403],{"class":323,"line":1880},[321,16404,2236],{"class":331},[321,16406,16407,16409,16411,16413,16416,16418],{"class":323,"line":1885},[321,16408,14959],{"class":327},[321,16410,16372],{"class":331},[321,16412,787],{"class":327},[321,16414,16415],{"class":331},"m_W",[321,16417,787],{"class":327},[321,16419,16420],{"class":331},"m_H;\n",[321,16422,16423],{"class":323,"line":1899},[321,16424,2393],{"class":331},[321,16426,16427],{"class":323,"line":1904},[321,16428,16429],{"class":390},"    \u002F\u002F获取长宽高\n",[321,16431,16432,16434,16437],{"class":323,"line":1933},[321,16433,2191],{"class":327},[321,16435,16436],{"class":2169}," getLength",[321,16438,2182],{"class":331},[321,16440,16441],{"class":323,"line":1938},[321,16442,2236],{"class":331},[321,16444,16445,16447],{"class":323,"line":1955},[321,16446,14959],{"class":327},[321,16448,16449],{"class":331}," m_L;\n",[321,16451,16452],{"class":323,"line":1960},[321,16453,2393],{"class":331},[321,16455,16456,16458,16461],{"class":323,"line":1965},[321,16457,2191],{"class":327},[321,16459,16460],{"class":2169}," getWidth",[321,16462,2182],{"class":331},[321,16464,16465],{"class":323,"line":1970},[321,16466,2236],{"class":331},[321,16468,16469,16471],{"class":323,"line":1984},[321,16470,14959],{"class":327},[321,16472,16473],{"class":331}," m_W;\n",[321,16475,16476],{"class":323,"line":1989},[321,16477,2393],{"class":331},[321,16479,16480,16482,16485],{"class":323,"line":2783},[321,16481,2191],{"class":327},[321,16483,16484],{"class":2169}," getHeight",[321,16486,2182],{"class":331},[321,16488,16489],{"class":323,"line":2797},[321,16490,2236],{"class":331},[321,16492,16493,16495],{"class":323,"line":2805},[321,16494,14959],{"class":327},[321,16496,16497],{"class":331}," m_H;\n",[321,16499,16500],{"class":323,"line":2810},[321,16501,2393],{"class":331},[321,16503,16504],{"class":323,"line":2816},[321,16505,16506],{"class":390},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[321,16508,16509,16512,16515,16517,16520,16522],{"class":323,"line":2822},[321,16510,16511],{"class":327},"    bool",[321,16513,16514],{"class":2169}," isEqual",[321,16516,332],{"class":331},[321,16518,16519],{"class":2169},"Cube",[321,16521,3055],{"class":5423},[321,16523,338],{"class":331},[321,16525,16526],{"class":323,"line":2827},[321,16527,2236],{"class":331},[321,16529,16530,16532,16535,16538,16540,16542,16545,16547,16550,16553,16555,16557,16560,16562,16564,16567,16569,16571],{"class":323,"line":8155},[321,16531,2703],{"class":327},[321,16533,16534],{"class":331}," (c.",[321,16536,16537],{"class":2169},"getLength",[321,16539,13257],{"class":331},[321,16541,3155],{"class":327},[321,16543,16544],{"class":331}," m_L ",[321,16546,1921],{"class":327},[321,16548,16549],{"class":331}," c.",[321,16551,16552],{"class":2169},"getWidth",[321,16554,13257],{"class":331},[321,16556,3155],{"class":327},[321,16558,16559],{"class":331}," m_W ",[321,16561,1921],{"class":327},[321,16563,16549],{"class":331},[321,16565,16566],{"class":2169},"getHeight",[321,16568,13257],{"class":331},[321,16570,3155],{"class":327},[321,16572,16573],{"class":331}," m_H)\n",[321,16575,16576],{"class":323,"line":8179},[321,16577,2716],{"class":331},[321,16579,16580,16582,16585],{"class":323,"line":8184},[321,16581,15939],{"class":327},[321,16583,16584],{"class":380}," true",[321,16586,1497],{"class":331},[321,16588,16589],{"class":323,"line":8190},[321,16590,2735],{"class":331},[321,16592,16593],{"class":323,"line":8217},[321,16594,2776],{"class":327},[321,16596,16597],{"class":323,"line":8222},[321,16598,2716],{"class":331},[321,16600,16601,16603,16606],{"class":323,"line":8228},[321,16602,15939],{"class":327},[321,16604,16605],{"class":380}," false",[321,16607,1497],{"class":331},[321,16609,16610],{"class":323,"line":8240},[321,16611,2735],{"class":331},[321,16613,16614],{"class":323,"line":8252},[321,16615,2393],{"class":331},[321,16617,16618],{"class":323,"line":8264},[321,16619,16620],{"class":390},"    \u002F\u002F私有属性\n",[321,16622,16623],{"class":323,"line":9923},[321,16624,15429],{"class":327},[321,16626,16627,16629],{"class":323,"line":9948},[321,16628,2191],{"class":327},[321,16630,16449],{"class":331},[321,16632,16633,16635],{"class":323,"line":9971},[321,16634,2191],{"class":327},[321,16636,16473],{"class":331},[321,16638,16639,16641],{"class":323,"line":9995},[321,16640,2191],{"class":327},[321,16642,16497],{"class":331},[321,16644,16645],{"class":323,"line":10000},[321,16646,2606],{"emptyLinePlaceholder":251},[321,16648,16649],{"class":323,"line":10005},[321,16650,4201],{"class":331},[321,16652,16653],{"class":323,"line":10010},[321,16654,16655],{"class":390},"\u002F\u002F全局函数判断两个立方体是否相等\n",[321,16657,16658,16660,16662,16664,16666,16669,16671,16673,16676],{"class":323,"line":10019},[321,16659,1561],{"class":327},[321,16661,16514],{"class":2169},[321,16663,332],{"class":331},[321,16665,16519],{"class":2169},[321,16667,16668],{"class":5423}," c1",[321,16670,710],{"class":331},[321,16672,16519],{"class":2169},[321,16674,16675],{"class":5423}," c2",[321,16677,338],{"class":331},[321,16679,16680],{"class":323,"line":10024},[321,16681,1752],{"class":331},[321,16683,16684,16686,16689,16691,16693,16695,16698,16700,16703,16705,16707,16709,16711,16713,16715,16717,16719,16721,16723,16725,16727,16729,16731,16733],{"class":323,"line":10030},[321,16685,4296],{"class":327},[321,16687,16688],{"class":331}," (c1.",[321,16690,16537],{"class":2169},[321,16692,13257],{"class":331},[321,16694,3155],{"class":327},[321,16696,16697],{"class":331}," c2.",[321,16699,16537],{"class":2169},[321,16701,16702],{"class":331},"()) ",[321,16704,1921],{"class":327},[321,16706,16688],{"class":331},[321,16708,16552],{"class":2169},[321,16710,13257],{"class":331},[321,16712,3155],{"class":327},[321,16714,16697],{"class":331},[321,16716,16552],{"class":2169},[321,16718,16702],{"class":331},[321,16720,1921],{"class":327},[321,16722,16688],{"class":331},[321,16724,16566],{"class":2169},[321,16726,13257],{"class":331},[321,16728,3155],{"class":327},[321,16730,16697],{"class":331},[321,16732,16566],{"class":2169},[321,16734,16735],{"class":331},"());\n",[321,16737,16738],{"class":323,"line":10051},[321,16739,1771],{"class":331},[321,16741,16742,16744,16746],{"class":323,"line":10057},[321,16743,335],{"class":327},[321,16745,2179],{"class":2169},[321,16747,2182],{"class":331},[321,16749,16750],{"class":323,"line":10071},[321,16751,1752],{"class":331},[321,16753,16754],{"class":323,"line":10077},[321,16755,16756],{"class":331},"    Cube c1;\n",[321,16758,16759],{"class":323,"line":10104},[321,16760,16761],{"class":390},"    \u002F\u002F输入立方体的长宽高\n",[321,16763,16764,16766,16768,16771,16773],{"class":323,"line":10113},[321,16765,1757],{"class":331},[321,16767,1376],{"class":327},[321,16769,16770],{"class":436},"\"请输入第一个立方体的长、宽、高：\"",[321,16772,1376],{"class":327},[321,16774,1398],{"class":331},[321,16776,16777,16779],{"class":323,"line":10119},[321,16778,2191],{"class":327},[321,16780,16781],{"class":331}," l,w,h,l1,w1,h1;\n",[321,16783,16784,16786,16788,16790,16792,16794,16796],{"class":323,"line":10127},[321,16785,2218],{"class":331},[321,16787,1636],{"class":327},[321,16789,850],{"class":331},[321,16791,1636],{"class":327},[321,16793,1127],{"class":331},[321,16795,1636],{"class":327},[321,16797,16334],{"class":331},[321,16799,16800,16803,16806],{"class":323,"line":10132},[321,16801,16802],{"class":331},"    c1.",[321,16804,16805],{"class":2169},"setLwh",[321,16807,16808],{"class":331},"(l,w,h);\n",[321,16810,16812],{"class":323,"line":16811},66,[321,16813,16814],{"class":390},"    \u002F\u002F面积\n",[321,16816,16818,16820,16822,16825,16827,16829,16832,16834,16836],{"class":323,"line":16817},67,[321,16819,1757],{"class":331},[321,16821,1376],{"class":327},[321,16823,16824],{"class":436},"\"立方体的表面积为：\"",[321,16826,1376],{"class":327},[321,16828,15037],{"class":331},[321,16830,16831],{"class":2169},"mianji",[321,16833,2633],{"class":331},[321,16835,1376],{"class":327},[321,16837,1398],{"class":331},[321,16839,16841],{"class":323,"line":16840},68,[321,16842,16843],{"class":390},"    \u002F\u002F体积\n",[321,16845,16847,16849,16851,16854,16856,16858,16861,16863,16865],{"class":323,"line":16846},69,[321,16848,1757],{"class":331},[321,16850,1376],{"class":327},[321,16852,16853],{"class":436},"\"立方体的体积为：\"",[321,16855,1376],{"class":327},[321,16857,15037],{"class":331},[321,16859,16860],{"class":2169},"tiji",[321,16862,2633],{"class":331},[321,16864,1376],{"class":327},[321,16866,1398],{"class":331},[321,16868,16870,16872,16874,16877,16879],{"class":323,"line":16869},70,[321,16871,1757],{"class":331},[321,16873,1376],{"class":327},[321,16875,16876],{"class":436},"\"请输入第二个立方体的长、宽、高：\"",[321,16878,1376],{"class":327},[321,16880,1398],{"class":331},[321,16882,16884,16886,16888,16891,16893,16896,16898],{"class":323,"line":16883},71,[321,16885,2218],{"class":331},[321,16887,1636],{"class":327},[321,16889,16890],{"class":331},"l1",[321,16892,1636],{"class":327},[321,16894,16895],{"class":331},"w1",[321,16897,1636],{"class":327},[321,16899,16900],{"class":331},"h1;\n",[321,16902,16904],{"class":323,"line":16903},72,[321,16905,16906],{"class":331},"    Cube c2;\n",[321,16908,16910,16913,16915],{"class":323,"line":16909},73,[321,16911,16912],{"class":331},"    c2.",[321,16914,16805],{"class":2169},[321,16916,16917],{"class":331},"(l1,w1,h1);\n",[321,16919,16921,16923,16925,16928,16930,16933,16935,16937,16939],{"class":323,"line":16920},74,[321,16922,1757],{"class":331},[321,16924,1376],{"class":327},[321,16926,16927],{"class":436},"\"第二个立方体的表面积为：\"",[321,16929,1376],{"class":327},[321,16931,16932],{"class":331},"c2.",[321,16934,16831],{"class":2169},[321,16936,2633],{"class":331},[321,16938,1376],{"class":327},[321,16940,1398],{"class":331},[321,16942,16944,16946,16948,16951,16953,16955,16957,16959,16961],{"class":323,"line":16943},75,[321,16945,1757],{"class":331},[321,16947,1376],{"class":327},[321,16949,16950],{"class":436},"\"第二个立方体的体积为：\"",[321,16952,1376],{"class":327},[321,16954,16932],{"class":331},[321,16956,16860],{"class":2169},[321,16958,2633],{"class":331},[321,16960,1376],{"class":327},[321,16962,1398],{"class":331},[321,16964,16966],{"class":323,"line":16965},76,[321,16967,2606],{"emptyLinePlaceholder":251},[321,16969,16971],{"class":323,"line":16970},77,[321,16972,16973],{"class":390},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[321,16975,16977,16979,16981,16984,16986],{"class":323,"line":16976},78,[321,16978,1757],{"class":331},[321,16980,1376],{"class":327},[321,16982,16983],{"class":436},"\"内部函数判断结果：\"",[321,16985,1376],{"class":327},[321,16987,1398],{"class":331},[321,16989,16991,16993,16995,16998],{"class":323,"line":16990},79,[321,16992,3307],{"class":327},[321,16994,16688],{"class":331},[321,16996,16997],{"class":2169},"isEqual",[321,16999,17000],{"class":331},"(c2))\n",[321,17002,17004],{"class":323,"line":17003},80,[321,17005,2236],{"class":331},[321,17007,17009,17011,17013,17016,17018],{"class":323,"line":17008},81,[321,17010,3657],{"class":331},[321,17012,1376],{"class":327},[321,17014,17015],{"class":436},"\"两个立方体相等\"",[321,17017,1376],{"class":327},[321,17019,1398],{"class":331},[321,17021,17023],{"class":323,"line":17022},82,[321,17024,2393],{"class":331},[321,17026,17028],{"class":323,"line":17027},83,[321,17029,17030],{"class":327},"    else\n",[321,17032,17034],{"class":323,"line":17033},84,[321,17035,2236],{"class":331},[321,17037,17039,17041,17043,17046,17048],{"class":323,"line":17038},85,[321,17040,3657],{"class":331},[321,17042,1376],{"class":327},[321,17044,17045],{"class":436},"\"两个立方体不相等\"",[321,17047,1376],{"class":327},[321,17049,1398],{"class":331},[321,17051,17053],{"class":323,"line":17052},86,[321,17054,2393],{"class":331},[321,17056,17058],{"class":323,"line":17057},87,[321,17059,2606],{"emptyLinePlaceholder":251},[321,17061,17063,17065,17067,17070,17072],{"class":323,"line":17062},88,[321,17064,1757],{"class":331},[321,17066,1376],{"class":327},[321,17068,17069],{"class":436},"\"全局函数判断结果：\"",[321,17071,1376],{"class":327},[321,17073,1398],{"class":331},[321,17075,17077,17079,17081,17083],{"class":323,"line":17076},89,[321,17078,3307],{"class":327},[321,17080,1864],{"class":331},[321,17082,16997],{"class":2169},[321,17084,17085],{"class":331},"(c1, c2))\n",[321,17087,17089],{"class":323,"line":17088},90,[321,17090,2236],{"class":331},[321,17092,17094,17096,17098,17100,17102],{"class":323,"line":17093},91,[321,17095,3657],{"class":331},[321,17097,1376],{"class":327},[321,17099,17015],{"class":436},[321,17101,1376],{"class":327},[321,17103,1398],{"class":331},[321,17105,17107],{"class":323,"line":17106},92,[321,17108,2393],{"class":331},[321,17110,17112],{"class":323,"line":17111},93,[321,17113,17030],{"class":327},[321,17115,17117],{"class":323,"line":17116},94,[321,17118,2236],{"class":331},[321,17120,17122,17124,17126,17128,17130],{"class":323,"line":17121},95,[321,17123,3657],{"class":331},[321,17125,1376],{"class":327},[321,17127,17045],{"class":436},[321,17129,1376],{"class":327},[321,17131,1398],{"class":331},[321,17133,17135],{"class":323,"line":17134},96,[321,17136,2393],{"class":331},[321,17138,17140],{"class":323,"line":17139},97,[321,17141,1771],{"class":331},[151,17143,17144],{"start":167},[154,17145,17146],{},[481,17147,17148],{},"练习案例2：点和圆的关系",[1339,17150,17151],{},[154,17152,17153],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[312,17155,17157],{"className":314,"code":17156,"language":316,"meta":30,"style":30},"#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",[318,17158,17159,17165,17175,17182,17189,17193,17197,17202,17236,17241,17257,17271,17275,17279,17286,17293,17297,17303,17307,17311,17315,17337,17360,17365,17379,17394,17398,17402,17408,17413,17418,17422,17448,17452,17482,17510,17538,17555,17559,17572,17576,17580,17584,17597,17601,17605,17613,17617,17621,17625,17630,17634,17645,17652,17661,17671,17682,17689,17702,17713,17723,17734,17741,17755,17760,17770,17778],{"__ignoreMap":30},[321,17160,17161,17163],{"class":323,"line":324},[321,17162,2155],{"class":327},[321,17164,2158],{"class":436},[321,17166,17167,17169,17171,17173],{"class":323,"line":167},[321,17168,2163],{"class":327},[321,17170,2166],{"class":327},[321,17172,2170],{"class":2169},[321,17174,1497],{"class":331},[321,17176,17177,17179],{"class":323,"line":200},[321,17178,2155],{"class":327},[321,17180,17181],{"class":436},"\u003Ccmath>\n",[321,17183,17184,17186],{"class":323,"line":1401},[321,17185,14901],{"class":327},[321,17187,17188],{"class":2169}," Point\n",[321,17190,17191],{"class":323,"line":1407},[321,17192,1752],{"class":331},[321,17194,17195],{"class":323,"line":1421},[321,17196,14923],{"class":327},[321,17198,17199],{"class":323,"line":1427},[321,17200,17201],{"class":390},"    \u002F\u002F赋值\n",[321,17203,17204,17206,17209,17211,17213,17216,17218,17220,17223,17226,17228,17231,17233],{"class":323,"line":1518},[321,17205,15116],{"class":327},[321,17207,17208],{"class":2169}," setPoint",[321,17210,332],{"class":331},[321,17212,14244],{"class":327},[321,17214,17215],{"class":5423}," x",[321,17217,12642],{"class":331},[321,17219,14244],{"class":327},[321,17221,17222],{"class":5423}," y",[321,17224,17225],{"class":331},") { m_x ",[321,17227,377],{"class":327},[321,17229,17230],{"class":331}," x; m_y ",[321,17232,377],{"class":327},[321,17234,17235],{"class":331}," y; }\n",[321,17237,17238],{"class":323,"line":1524},[321,17239,17240],{"class":390},"    \u002F\u002F获取坐标\n",[321,17242,17243,17245,17248,17251,17254],{"class":323,"line":1536},[321,17244,14945],{"class":327},[321,17246,17247],{"class":2169}," getX",[321,17249,17250],{"class":331},"() { ",[321,17252,17253],{"class":327},"return",[321,17255,17256],{"class":331}," m_x; }\n",[321,17258,17259,17261,17264,17266,17268],{"class":323,"line":1818},[321,17260,14945],{"class":327},[321,17262,17263],{"class":2169}," getY",[321,17265,17250],{"class":331},[321,17267,17253],{"class":327},[321,17269,17270],{"class":331}," m_y; }\n",[321,17272,17273],{"class":323,"line":1823},[321,17274,2606],{"emptyLinePlaceholder":251},[321,17276,17277],{"class":323,"line":1829},[321,17278,15429],{"class":327},[321,17280,17281,17283],{"class":323,"line":1834},[321,17282,14945],{"class":327},[321,17284,17285],{"class":331}," m_x;\n",[321,17287,17288,17290],{"class":323,"line":1848},[321,17289,14945],{"class":327},[321,17291,17292],{"class":331}," m_y;\n",[321,17294,17295],{"class":323,"line":1853},[321,17296,4201],{"class":331},[321,17298,17299,17301],{"class":323,"line":1859},[321,17300,14901],{"class":327},[321,17302,14904],{"class":2169},[321,17304,17305],{"class":323,"line":1880},[321,17306,1752],{"class":331},[321,17308,17309],{"class":323,"line":1885},[321,17310,14923],{"class":327},[321,17312,17313],{"class":323,"line":1899},[321,17314,17201],{"class":390},[321,17316,17317,17319,17322,17324,17326,17329,17332,17334],{"class":323,"line":1904},[321,17318,15116],{"class":327},[321,17320,17321],{"class":2169}," setRadius",[321,17323,332],{"class":331},[321,17325,14244],{"class":327},[321,17327,17328],{"class":5423}," r",[321,17330,17331],{"class":331},") { m_r ",[321,17333,377],{"class":327},[321,17335,17336],{"class":331}," r; }\n",[321,17338,17339,17341,17344,17346,17349,17352,17355,17357],{"class":323,"line":1933},[321,17340,15116],{"class":327},[321,17342,17343],{"class":2169}," setCenter",[321,17345,332],{"class":331},[321,17347,17348],{"class":2169},"Point",[321,17350,17351],{"class":5423}," center",[321,17353,17354],{"class":331},") { m_center ",[321,17356,377],{"class":327},[321,17358,17359],{"class":331}," center; }\n",[321,17361,17362],{"class":323,"line":1938},[321,17363,17364],{"class":390},"    \u002F\u002F获取属性\n",[321,17366,17367,17369,17372,17374,17376],{"class":323,"line":1955},[321,17368,14945],{"class":327},[321,17370,17371],{"class":2169}," getRadius",[321,17373,17250],{"class":331},[321,17375,17253],{"class":327},[321,17377,17378],{"class":331}," m_r; }\n",[321,17380,17381,17384,17387,17389,17391],{"class":323,"line":1960},[321,17382,17383],{"class":2169},"    Point",[321,17385,17386],{"class":2169}," getCenter",[321,17388,17250],{"class":331},[321,17390,17253],{"class":327},[321,17392,17393],{"class":331}," m_center; }\n",[321,17395,17396],{"class":323,"line":1965},[321,17397,2606],{"emptyLinePlaceholder":251},[321,17399,17400],{"class":323,"line":1970},[321,17401,15429],{"class":327},[321,17403,17404,17406],{"class":323,"line":1984},[321,17405,14945],{"class":327},[321,17407,14935],{"class":331},[321,17409,17410],{"class":323,"line":1989},[321,17411,17412],{"class":390},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[321,17414,17415],{"class":323,"line":2783},[321,17416,17417],{"class":331},"    Point m_center;\n",[321,17419,17420],{"class":323,"line":2797},[321,17421,4201],{"class":331},[321,17423,17424,17426,17429,17431,17434,17436,17438,17440,17442,17444,17446],{"class":323,"line":2805},[321,17425,5571],{"class":327},[321,17427,17428],{"class":2169}," isInCircle",[321,17430,332],{"class":331},[321,17432,17433],{"class":2169},"Circle",[321,17435,10791],{"class":327},[321,17437,620],{"class":5423},[321,17439,710],{"class":331},[321,17441,17348],{"class":2169},[321,17443,10791],{"class":327},[321,17445,19],{"class":5423},[321,17447,338],{"class":331},[321,17449,17450],{"class":323,"line":2810},[321,17451,1752],{"class":331},[321,17453,17454,17456,17459,17461,17463,17466,17469,17472,17474,17476,17478,17480],{"class":323,"line":2816},[321,17455,14945],{"class":327},[321,17457,17458],{"class":331}," dx ",[321,17460,377],{"class":327},[321,17462,16549],{"class":331},[321,17464,17465],{"class":2169},"getCenter",[321,17467,17468],{"class":331},"().",[321,17470,17471],{"class":2169},"getX",[321,17473,13257],{"class":331},[321,17475,864],{"class":327},[321,17477,16095],{"class":331},[321,17479,17471],{"class":2169},[321,17481,5843],{"class":331},[321,17483,17484,17486,17489,17491,17493,17495,17497,17500,17502,17504,17506,17508],{"class":323,"line":2822},[321,17485,14945],{"class":327},[321,17487,17488],{"class":331}," dy ",[321,17490,377],{"class":327},[321,17492,16549],{"class":331},[321,17494,17465],{"class":2169},[321,17496,17468],{"class":331},[321,17498,17499],{"class":2169},"getY",[321,17501,13257],{"class":331},[321,17503,864],{"class":327},[321,17505,16095],{"class":331},[321,17507,17499],{"class":2169},[321,17509,5843],{"class":331},[321,17511,17512,17514,17517,17519,17522,17525,17527,17529,17531,17533,17535],{"class":323,"line":2827},[321,17513,14945],{"class":327},[321,17515,17516],{"class":331}," distance ",[321,17518,377],{"class":327},[321,17520,17521],{"class":2169}," sqrt",[321,17523,17524],{"class":331},"(dx ",[321,17526,787],{"class":327},[321,17528,17458],{"class":331},[321,17530,813],{"class":327},[321,17532,17488],{"class":331},[321,17534,787],{"class":327},[321,17536,17537],{"class":331}," dy);\n",[321,17539,17540,17542,17545,17547,17549,17552],{"class":323,"line":8155},[321,17541,3307],{"class":327},[321,17543,17544],{"class":331}," (distance ",[321,17546,1242],{"class":327},[321,17548,16549],{"class":331},[321,17550,17551],{"class":2169},"getRadius",[321,17553,17554],{"class":331},"())\n",[321,17556,17557],{"class":323,"line":8179},[321,17558,2236],{"class":331},[321,17560,17561,17563,17565,17568,17570],{"class":323,"line":8184},[321,17562,9876],{"class":331},[321,17564,1376],{"class":327},[321,17566,17567],{"class":436}," \"点在圆内\"",[321,17569,1651],{"class":327},[321,17571,9047],{"class":331},[321,17573,17574],{"class":323,"line":8190},[321,17575,2393],{"class":331},[321,17577,17578],{"class":323,"line":8217},[321,17579,17030],{"class":327},[321,17581,17582],{"class":323,"line":8222},[321,17583,2236],{"class":331},[321,17585,17586,17588,17590,17593,17595],{"class":323,"line":8228},[321,17587,9876],{"class":331},[321,17589,1376],{"class":327},[321,17591,17592],{"class":436}," \"点在圆外\"",[321,17594,1651],{"class":327},[321,17596,9047],{"class":331},[321,17598,17599],{"class":323,"line":8240},[321,17600,2393],{"class":331},[321,17602,17603],{"class":323,"line":8252},[321,17604,1771],{"class":331},[321,17606,17607,17609,17611],{"class":323,"line":8264},[321,17608,335],{"class":327},[321,17610,2179],{"class":2169},[321,17612,2182],{"class":331},[321,17614,17615],{"class":323,"line":9923},[321,17616,1752],{"class":331},[321,17618,17619],{"class":323,"line":9948},[321,17620,15260],{"class":390},[321,17622,17623],{"class":323,"line":9971},[321,17624,15007],{"class":331},[321,17626,17627],{"class":323,"line":9995},[321,17628,17629],{"class":331},"    Point p1;\n",[321,17631,17632],{"class":323,"line":10000},[321,17633,17201],{"class":390},[321,17635,17636,17638,17640,17643],{"class":323,"line":10005},[321,17637,1757],{"class":331},[321,17639,1376],{"class":327},[321,17641,17642],{"class":436},"\"请输入圆的半径：\"",[321,17644,1497],{"class":331},[321,17646,17647,17649],{"class":323,"line":10010},[321,17648,14945],{"class":327},[321,17650,17651],{"class":331}," r;\n",[321,17653,17654,17656,17658],{"class":323,"line":10019},[321,17655,2218],{"class":331},[321,17657,1636],{"class":327},[321,17659,17660],{"class":331},"r;\n",[321,17662,17663,17665,17668],{"class":323,"line":10024},[321,17664,16802],{"class":331},[321,17666,17667],{"class":2169},"setRadius",[321,17669,17670],{"class":331},"(r);\n",[321,17672,17673,17675,17677,17680],{"class":323,"line":10030},[321,17674,1757],{"class":331},[321,17676,1376],{"class":327},[321,17678,17679],{"class":436},"\"请输入圆心坐标：\"",[321,17681,1497],{"class":331},[321,17683,17684,17686],{"class":323,"line":10051},[321,17685,14945],{"class":327},[321,17687,17688],{"class":331}," x, y;\n",[321,17690,17691,17693,17695,17697,17699],{"class":323,"line":10057},[321,17692,2218],{"class":331},[321,17694,1636],{"class":327},[321,17696,1152],{"class":331},[321,17698,1636],{"class":327},[321,17700,17701],{"class":331},"y;\n",[321,17703,17704,17707,17710],{"class":323,"line":10071},[321,17705,17706],{"class":331},"    p1.",[321,17708,17709],{"class":2169},"setPoint",[321,17711,17712],{"class":331},"(x, y);\n",[321,17714,17715,17717,17720],{"class":323,"line":10077},[321,17716,16802],{"class":331},[321,17718,17719],{"class":2169},"setCenter",[321,17721,17722],{"class":331},"(p1);\n",[321,17724,17725,17727,17729,17732],{"class":323,"line":10104},[321,17726,1757],{"class":331},[321,17728,1376],{"class":327},[321,17730,17731],{"class":436},"\"请输入测试点坐标：\"",[321,17733,1497],{"class":331},[321,17735,17736,17738],{"class":323,"line":10113},[321,17737,14945],{"class":327},[321,17739,17740],{"class":331}," x1, y1;\n",[321,17742,17743,17745,17747,17750,17752],{"class":323,"line":10119},[321,17744,2218],{"class":331},[321,17746,1636],{"class":327},[321,17748,17749],{"class":331},"x1",[321,17751,1636],{"class":327},[321,17753,17754],{"class":331},"y1;\n",[321,17756,17757],{"class":323,"line":10127},[321,17758,17759],{"class":331},"    Point p2;\n",[321,17761,17762,17765,17767],{"class":323,"line":10132},[321,17763,17764],{"class":331},"    p2.",[321,17766,17709],{"class":2169},[321,17768,17769],{"class":331},"(x1, y1);\n",[321,17771,17772,17775],{"class":323,"line":16811},[321,17773,17774],{"class":2169},"    isInCircle",[321,17776,17777],{"class":331},"(c1, p2);\n",[321,17779,17780],{"class":323,"line":16817},[321,17781,1771],{"class":331},[19,17783,17784],{},"在类中可以让另一个类作为本来的成员",[19,17786,17787],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17789,17790],{},"创建point.h",[312,17792,17794],{"className":314,"code":17793,"language":316,"meta":30,"style":30},"#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",[318,17795,17796,17807,17813,17823,17829,17833,17838,17842,17846,17866,17870,17878,17886,17890,17894,17900,17906],{"__ignoreMap":30},[321,17797,17798,17801,17804],{"class":323,"line":324},[321,17799,17800],{"class":327},"#pragma",[321,17802,17803],{"class":2169}," once",[321,17805,17806],{"class":390}," \u002F\u002F防止头文件重复包含\n",[321,17808,17809,17811],{"class":323,"line":167},[321,17810,2155],{"class":327},[321,17812,2158],{"class":436},[321,17814,17815,17817,17819,17821],{"class":323,"line":200},[321,17816,2163],{"class":327},[321,17818,2166],{"class":327},[321,17820,2170],{"class":2169},[321,17822,1497],{"class":331},[321,17824,17825,17827],{"class":323,"line":1401},[321,17826,14901],{"class":327},[321,17828,17188],{"class":2169},[321,17830,17831],{"class":323,"line":1407},[321,17832,1752],{"class":331},[321,17834,17835],{"class":323,"line":1421},[321,17836,17837],{"class":390},"\u002F\u002F做好声明与变量定义就可以\n",[321,17839,17840],{"class":323,"line":1427},[321,17841,14923],{"class":327},[321,17843,17844],{"class":323,"line":1518},[321,17845,17201],{"class":390},[321,17847,17848,17850,17852,17854,17856,17858,17860,17862,17864],{"class":323,"line":1524},[321,17849,15116],{"class":327},[321,17851,17208],{"class":2169},[321,17853,332],{"class":331},[321,17855,14244],{"class":327},[321,17857,17215],{"class":5423},[321,17859,12642],{"class":331},[321,17861,14244],{"class":327},[321,17863,17222],{"class":5423},[321,17865,2925],{"class":331},[321,17867,17868],{"class":323,"line":1536},[321,17869,17240],{"class":390},[321,17871,17872,17874,17876],{"class":323,"line":1818},[321,17873,14945],{"class":327},[321,17875,17247],{"class":2169},[321,17877,5843],{"class":331},[321,17879,17880,17882,17884],{"class":323,"line":1823},[321,17881,14945],{"class":327},[321,17883,17263],{"class":2169},[321,17885,5843],{"class":331},[321,17887,17888],{"class":323,"line":1829},[321,17889,2606],{"emptyLinePlaceholder":251},[321,17891,17892],{"class":323,"line":1834},[321,17893,15429],{"class":327},[321,17895,17896,17898],{"class":323,"line":1848},[321,17897,14945],{"class":327},[321,17899,17285],{"class":331},[321,17901,17902,17904],{"class":323,"line":1853},[321,17903,14945],{"class":327},[321,17905,17292],{"class":331},[321,17907,17908],{"class":323,"line":1859},[321,17909,4201],{"class":331},[19,17911,17912],{},"创建point.cpp",[312,17914,17916],{"className":314,"code":17915,"language":316,"meta":30,"style":30},"#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",[318,17917,17918,17925,17930,17964,17968,17984],{"__ignoreMap":30},[321,17919,17920,17922],{"class":323,"line":324},[321,17921,2155],{"class":327},[321,17923,17924],{"class":436},"\u003Cpoint.h>\n",[321,17926,17927],{"class":323,"line":167},[321,17928,17929],{"class":390},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[321,17931,17932,17934,17937,17940,17942,17944,17946,17948,17950,17952,17954,17956,17958,17960,17962],{"class":323,"line":200},[321,17933,15116],{"class":327},[321,17935,17936],{"class":2169}," Point",[321,17938,17939],{"class":331},"::",[321,17941,17709],{"class":2169},[321,17943,332],{"class":331},[321,17945,14244],{"class":327},[321,17947,17215],{"class":5423},[321,17949,12642],{"class":331},[321,17951,14244],{"class":327},[321,17953,17222],{"class":5423},[321,17955,17225],{"class":331},[321,17957,377],{"class":327},[321,17959,17230],{"class":331},[321,17961,377],{"class":327},[321,17963,17235],{"class":331},[321,17965,17966],{"class":323,"line":1401},[321,17967,17240],{"class":390},[321,17969,17970,17972,17974,17976,17978,17980,17982],{"class":323,"line":1407},[321,17971,14945],{"class":327},[321,17973,17936],{"class":2169},[321,17975,17939],{"class":331},[321,17977,17471],{"class":2169},[321,17979,17250],{"class":331},[321,17981,17253],{"class":327},[321,17983,17256],{"class":331},[321,17985,17986,17988,17990,17992,17994,17996,17998],{"class":323,"line":1421},[321,17987,14945],{"class":327},[321,17989,17936],{"class":2169},[321,17991,17939],{"class":331},[321,17993,17499],{"class":2169},[321,17995,17250],{"class":331},[321,17997,17253],{"class":327},[321,17999,17270],{"class":331},[19,18001,18002],{},"创建circle.h",[312,18004,18006],{"className":314,"code":18005,"language":316,"meta":30,"style":30},"#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",[318,18007,18008,18015,18021,18031,18037,18043,18047,18051,18055,18069,18083,18087,18095,18103,18107,18111,18117,18121,18125],{"__ignoreMap":30},[321,18009,18010,18012],{"class":323,"line":324},[321,18011,17800],{"class":327},[321,18013,18014],{"class":2169}," once\n",[321,18016,18017,18019],{"class":323,"line":167},[321,18018,2155],{"class":327},[321,18020,2158],{"class":436},[321,18022,18023,18025,18027,18029],{"class":323,"line":200},[321,18024,2163],{"class":327},[321,18026,2166],{"class":327},[321,18028,2170],{"class":2169},[321,18030,1497],{"class":331},[321,18032,18033,18035],{"class":323,"line":1401},[321,18034,2155],{"class":327},[321,18036,17924],{"class":436},[321,18038,18039,18041],{"class":323,"line":1407},[321,18040,14901],{"class":327},[321,18042,14904],{"class":2169},[321,18044,18045],{"class":323,"line":1421},[321,18046,1752],{"class":331},[321,18048,18049],{"class":323,"line":1427},[321,18050,14923],{"class":327},[321,18052,18053],{"class":323,"line":1518},[321,18054,17201],{"class":390},[321,18056,18057,18059,18061,18063,18065,18067],{"class":323,"line":1524},[321,18058,15116],{"class":327},[321,18060,17321],{"class":2169},[321,18062,332],{"class":331},[321,18064,14244],{"class":327},[321,18066,17328],{"class":5423},[321,18068,2925],{"class":331},[321,18070,18071,18073,18075,18077,18079,18081],{"class":323,"line":1536},[321,18072,15116],{"class":327},[321,18074,17343],{"class":2169},[321,18076,332],{"class":331},[321,18078,17348],{"class":2169},[321,18080,17351],{"class":5423},[321,18082,2925],{"class":331},[321,18084,18085],{"class":323,"line":1818},[321,18086,17364],{"class":390},[321,18088,18089,18091,18093],{"class":323,"line":1823},[321,18090,14945],{"class":327},[321,18092,17371],{"class":2169},[321,18094,5843],{"class":331},[321,18096,18097,18099,18101],{"class":323,"line":1829},[321,18098,17383],{"class":2169},[321,18100,17386],{"class":2169},[321,18102,5843],{"class":331},[321,18104,18105],{"class":323,"line":1834},[321,18106,2606],{"emptyLinePlaceholder":251},[321,18108,18109],{"class":323,"line":1848},[321,18110,15429],{"class":327},[321,18112,18113,18115],{"class":323,"line":1853},[321,18114,14945],{"class":327},[321,18116,14935],{"class":331},[321,18118,18119],{"class":323,"line":1859},[321,18120,17412],{"class":390},[321,18122,18123],{"class":323,"line":1880},[321,18124,17417],{"class":331},[321,18126,18127],{"class":323,"line":1885},[321,18128,4201],{"class":331},[19,18130,18131],{},"创建circle.cpp",[312,18133,18135],{"className":314,"code":18134,"language":316,"meta":30,"style":30},"#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",[318,18136,18137,18144,18167,18189,18194,18210],{"__ignoreMap":30},[321,18138,18139,18141],{"class":323,"line":324},[321,18140,2155],{"class":327},[321,18142,18143],{"class":436},"\u003Ccircle.h>\n",[321,18145,18146,18148,18151,18153,18155,18157,18159,18161,18163,18165],{"class":323,"line":167},[321,18147,5571],{"class":327},[321,18149,18150],{"class":2169}," Circle",[321,18152,17939],{"class":331},[321,18154,17667],{"class":2169},[321,18156,332],{"class":331},[321,18158,14244],{"class":327},[321,18160,17328],{"class":5423},[321,18162,17331],{"class":331},[321,18164,377],{"class":327},[321,18166,17336],{"class":331},[321,18168,18169,18171,18173,18175,18177,18179,18181,18183,18185,18187],{"class":323,"line":200},[321,18170,5571],{"class":327},[321,18172,18150],{"class":2169},[321,18174,17939],{"class":331},[321,18176,17719],{"class":2169},[321,18178,332],{"class":331},[321,18180,17348],{"class":2169},[321,18182,17351],{"class":5423},[321,18184,17354],{"class":331},[321,18186,377],{"class":327},[321,18188,17359],{"class":331},[321,18190,18191],{"class":323,"line":1401},[321,18192,18193],{"class":390},"\u002F\u002F获取属性\n",[321,18195,18196,18198,18200,18202,18204,18206,18208],{"class":323,"line":1407},[321,18197,14244],{"class":327},[321,18199,18150],{"class":2169},[321,18201,17939],{"class":331},[321,18203,17551],{"class":2169},[321,18205,17250],{"class":331},[321,18207,17253],{"class":327},[321,18209,17378],{"class":331},[321,18211,18212,18214,18216,18218,18220,18222,18224],{"class":323,"line":1421},[321,18213,17348],{"class":2169},[321,18215,18150],{"class":2169},[321,18217,17939],{"class":331},[321,18219,17465],{"class":2169},[321,18221,17250],{"class":331},[321,18223,17253],{"class":327},[321,18225,17393],{"class":331},[19,18227,18228],{},"使用封装的类",[312,18230,18232],{"className":314,"code":18231,"language":316,"meta":30,"style":30},"#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",[318,18233,18234,18240,18250,18256,18262,18286,18290,18316,18342,18366,18380,18384,18396,18400,18404,18408,18420,18424,18428,18436,18440,18444,18448,18452,18456,18466,18472,18480,18488,18498,18504,18516,18524,18532,18542,18548,18560,18564,18572,18578],{"__ignoreMap":30},[321,18235,18236,18238],{"class":323,"line":324},[321,18237,2155],{"class":327},[321,18239,2158],{"class":436},[321,18241,18242,18244,18246,18248],{"class":323,"line":167},[321,18243,2163],{"class":327},[321,18245,2166],{"class":327},[321,18247,2170],{"class":2169},[321,18249,1497],{"class":331},[321,18251,18252,18254],{"class":323,"line":200},[321,18253,2155],{"class":327},[321,18255,18143],{"class":436},[321,18257,18258,18260],{"class":323,"line":1401},[321,18259,2155],{"class":327},[321,18261,17924],{"class":436},[321,18263,18264,18266,18268,18270,18272,18274,18276,18278,18280,18282,18284],{"class":323,"line":1407},[321,18265,5571],{"class":327},[321,18267,17428],{"class":2169},[321,18269,332],{"class":331},[321,18271,17433],{"class":2169},[321,18273,10791],{"class":327},[321,18275,620],{"class":5423},[321,18277,710],{"class":331},[321,18279,17348],{"class":2169},[321,18281,10791],{"class":327},[321,18283,19],{"class":5423},[321,18285,338],{"class":331},[321,18287,18288],{"class":323,"line":1421},[321,18289,1752],{"class":331},[321,18291,18292,18294,18296,18298,18300,18302,18304,18306,18308,18310,18312,18314],{"class":323,"line":1427},[321,18293,14945],{"class":327},[321,18295,17458],{"class":331},[321,18297,377],{"class":327},[321,18299,16549],{"class":331},[321,18301,17465],{"class":2169},[321,18303,17468],{"class":331},[321,18305,17471],{"class":2169},[321,18307,13257],{"class":331},[321,18309,864],{"class":327},[321,18311,16095],{"class":331},[321,18313,17471],{"class":2169},[321,18315,5843],{"class":331},[321,18317,18318,18320,18322,18324,18326,18328,18330,18332,18334,18336,18338,18340],{"class":323,"line":1518},[321,18319,14945],{"class":327},[321,18321,17488],{"class":331},[321,18323,377],{"class":327},[321,18325,16549],{"class":331},[321,18327,17465],{"class":2169},[321,18329,17468],{"class":331},[321,18331,17499],{"class":2169},[321,18333,13257],{"class":331},[321,18335,864],{"class":327},[321,18337,16095],{"class":331},[321,18339,17499],{"class":2169},[321,18341,5843],{"class":331},[321,18343,18344,18346,18348,18350,18352,18354,18356,18358,18360,18362,18364],{"class":323,"line":1524},[321,18345,14945],{"class":327},[321,18347,17516],{"class":331},[321,18349,377],{"class":327},[321,18351,17521],{"class":2169},[321,18353,17524],{"class":331},[321,18355,787],{"class":327},[321,18357,17458],{"class":331},[321,18359,813],{"class":327},[321,18361,17488],{"class":331},[321,18363,787],{"class":327},[321,18365,17537],{"class":331},[321,18367,18368,18370,18372,18374,18376,18378],{"class":323,"line":1536},[321,18369,3307],{"class":327},[321,18371,17544],{"class":331},[321,18373,1242],{"class":327},[321,18375,16549],{"class":331},[321,18377,17551],{"class":2169},[321,18379,17554],{"class":331},[321,18381,18382],{"class":323,"line":1818},[321,18383,2236],{"class":331},[321,18385,18386,18388,18390,18392,18394],{"class":323,"line":1823},[321,18387,9876],{"class":331},[321,18389,1376],{"class":327},[321,18391,17567],{"class":436},[321,18393,1651],{"class":327},[321,18395,9047],{"class":331},[321,18397,18398],{"class":323,"line":1829},[321,18399,2393],{"class":331},[321,18401,18402],{"class":323,"line":1834},[321,18403,17030],{"class":327},[321,18405,18406],{"class":323,"line":1848},[321,18407,2236],{"class":331},[321,18409,18410,18412,18414,18416,18418],{"class":323,"line":1853},[321,18411,9876],{"class":331},[321,18413,1376],{"class":327},[321,18415,17592],{"class":436},[321,18417,1651],{"class":327},[321,18419,9047],{"class":331},[321,18421,18422],{"class":323,"line":1859},[321,18423,2393],{"class":331},[321,18425,18426],{"class":323,"line":1880},[321,18427,1771],{"class":331},[321,18429,18430,18432,18434],{"class":323,"line":1885},[321,18431,335],{"class":327},[321,18433,2179],{"class":2169},[321,18435,2182],{"class":331},[321,18437,18438],{"class":323,"line":1899},[321,18439,1752],{"class":331},[321,18441,18442],{"class":323,"line":1904},[321,18443,15260],{"class":390},[321,18445,18446],{"class":323,"line":1933},[321,18447,15007],{"class":331},[321,18449,18450],{"class":323,"line":1938},[321,18451,17629],{"class":331},[321,18453,18454],{"class":323,"line":1955},[321,18455,17201],{"class":390},[321,18457,18458,18460,18462,18464],{"class":323,"line":1960},[321,18459,1757],{"class":331},[321,18461,1376],{"class":327},[321,18463,17642],{"class":436},[321,18465,1497],{"class":331},[321,18467,18468,18470],{"class":323,"line":1965},[321,18469,14945],{"class":327},[321,18471,17651],{"class":331},[321,18473,18474,18476,18478],{"class":323,"line":1970},[321,18475,2218],{"class":331},[321,18477,1636],{"class":327},[321,18479,17660],{"class":331},[321,18481,18482,18484,18486],{"class":323,"line":1984},[321,18483,16802],{"class":331},[321,18485,17667],{"class":2169},[321,18487,17670],{"class":331},[321,18489,18490,18492,18494,18496],{"class":323,"line":1989},[321,18491,1757],{"class":331},[321,18493,1376],{"class":327},[321,18495,17679],{"class":436},[321,18497,1497],{"class":331},[321,18499,18500,18502],{"class":323,"line":2783},[321,18501,14945],{"class":327},[321,18503,17688],{"class":331},[321,18505,18506,18508,18510,18512,18514],{"class":323,"line":2797},[321,18507,2218],{"class":331},[321,18509,1636],{"class":327},[321,18511,1152],{"class":331},[321,18513,1636],{"class":327},[321,18515,17701],{"class":331},[321,18517,18518,18520,18522],{"class":323,"line":2805},[321,18519,17706],{"class":331},[321,18521,17709],{"class":2169},[321,18523,17712],{"class":331},[321,18525,18526,18528,18530],{"class":323,"line":2810},[321,18527,16802],{"class":331},[321,18529,17719],{"class":2169},[321,18531,17722],{"class":331},[321,18533,18534,18536,18538,18540],{"class":323,"line":2816},[321,18535,1757],{"class":331},[321,18537,1376],{"class":327},[321,18539,17731],{"class":436},[321,18541,1497],{"class":331},[321,18543,18544,18546],{"class":323,"line":2822},[321,18545,14945],{"class":327},[321,18547,17740],{"class":331},[321,18549,18550,18552,18554,18556,18558],{"class":323,"line":2827},[321,18551,2218],{"class":331},[321,18553,1636],{"class":327},[321,18555,17749],{"class":331},[321,18557,1636],{"class":327},[321,18559,17754],{"class":331},[321,18561,18562],{"class":323,"line":8155},[321,18563,17759],{"class":331},[321,18565,18566,18568,18570],{"class":323,"line":8179},[321,18567,17764],{"class":331},[321,18569,17709],{"class":2169},[321,18571,17769],{"class":331},[321,18573,18574,18576],{"class":323,"line":8184},[321,18575,17774],{"class":2169},[321,18577,17777],{"class":331},[321,18579,18580],{"class":323,"line":8190},[321,18581,1771],{"class":331},[14,18583,18585],{"id":18584},"_82对象的初始化清理","8.2对象的初始化清理",[1339,18587,18588,18591],{},[154,18589,18590],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[154,18592,18593],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[292,18595,18597],{"id":18596},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18599,18600,18601,18604],{},"对象的",[481,18602,18603],{},"初始化和清理","也是两个非常重要的安全问题",[19,18606,18607],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18609,18610],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18612,18613,18614,18617,18618,18621],{},"c++利用了",[481,18615,18616],{},"构造函数","和",[481,18619,18620],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18623,18624,18625],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[481,18626,18627],{},"我们不提供构造和析构，编译器会提供",[19,18629,18630],{},[481,18631,18632],{},"编译器提供的构造函数和析构函数是空实现。",[1339,18634,18635,18638],{},[154,18636,18637],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[154,18639,18640,18641,18644],{},"析构函数：主要作用在于对象",[481,18642,18643],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18646,18647,18650],{},[481,18648,18649],{},"构造函数语法：",[318,18651,18652],{},"类名(){}",[151,18654,18655,18658,18661,18664,18667],{},[154,18656,18657],{},"构造函数，没有返回值也不写void",[154,18659,18660],{},"函数名称与类名相同",[154,18662,18663],{},"构造函数可以有参数，因此可以发生重载",[154,18665,18666],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[154,18668,18669,18670,761],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[318,18671,18672],{},"Person(){}",[19,18674,18675,14002,18678],{},[481,18676,18677],{},"析构函数语法：",[318,18679,18680],{},"~类名(){}",[151,18682,18683,18686,18689,18695],{},[154,18684,18685],{},"析构函数，没有返回值也不写void",[154,18687,18688],{},"函数名称与类名相同,在名称前加上符号  ~",[154,18690,18691,18692],{},"析构函数不可以有参数，因此",[481,18693,18694],{},"不可以发生重载",[154,18696,18697],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[312,18699,18701],{"className":314,"code":18700,"language":316,"meta":30,"style":30},"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",[318,18702,18703,18709,18713,18717,18722,18729,18733,18746,18750,18755,18762,18766,18779,18783,18787,18791,18795,18803,18807,18815,18819,18823,18831,18835,18840,18844,18851,18855,18868,18872,18880],{"__ignoreMap":30},[321,18704,18705,18707],{"class":323,"line":324},[321,18706,14901],{"class":327},[321,18708,15378],{"class":2169},[321,18710,18711],{"class":323,"line":167},[321,18712,1752],{"class":331},[321,18714,18715],{"class":323,"line":200},[321,18716,14923],{"class":327},[321,18718,18719],{"class":323,"line":1401},[321,18720,18721],{"class":390},"    \u002F\u002F构造函数\n",[321,18723,18724,18727],{"class":323,"line":1407},[321,18725,18726],{"class":2169},"    Person",[321,18728,2182],{"class":331},[321,18730,18731],{"class":323,"line":1421},[321,18732,2236],{"class":331},[321,18734,18735,18737,18739,18742,18744],{"class":323,"line":1427},[321,18736,9876],{"class":331},[321,18738,1376],{"class":327},[321,18740,18741],{"class":436}," \"Person的构造函数调用\"",[321,18743,1651],{"class":327},[321,18745,9047],{"class":331},[321,18747,18748],{"class":323,"line":1518},[321,18749,2393],{"class":331},[321,18751,18752],{"class":323,"line":1524},[321,18753,18754],{"class":390},"    \u002F\u002F析构函数\n",[321,18756,18757,18760],{"class":323,"line":1536},[321,18758,18759],{"class":2169},"    ~Person",[321,18761,2182],{"class":331},[321,18763,18764],{"class":323,"line":1818},[321,18765,2236],{"class":331},[321,18767,18768,18770,18772,18775,18777],{"class":323,"line":1823},[321,18769,9876],{"class":331},[321,18771,1376],{"class":327},[321,18773,18774],{"class":436}," \"Person的析构函数调用\"",[321,18776,1651],{"class":327},[321,18778,9047],{"class":331},[321,18780,18781],{"class":323,"line":1829},[321,18782,2393],{"class":331},[321,18784,18785],{"class":323,"line":1834},[321,18786,2606],{"emptyLinePlaceholder":251},[321,18788,18789],{"class":323,"line":1848},[321,18790,4201],{"class":331},[321,18792,18793],{"class":323,"line":1853},[321,18794,2606],{"emptyLinePlaceholder":251},[321,18796,18797,18799,18801],{"class":323,"line":1859},[321,18798,5571],{"class":327},[321,18800,5795],{"class":2169},[321,18802,2182],{"class":331},[321,18804,18805],{"class":323,"line":1880},[321,18806,1752],{"class":331},[321,18808,18809,18812],{"class":323,"line":1885},[321,18810,18811],{"class":331},"    Person p;",[321,18813,18814],{"class":390},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[321,18816,18817],{"class":323,"line":1899},[321,18818,1771],{"class":331},[321,18820,18821],{"class":323,"line":1904},[321,18822,2606],{"emptyLinePlaceholder":251},[321,18824,18825,18827,18829],{"class":323,"line":1933},[321,18826,335],{"class":327},[321,18828,2179],{"class":2169},[321,18830,11060],{"class":331},[321,18832,18833],{"class":323,"line":1938},[321,18834,13417],{"class":331},[321,18836,18837],{"class":323,"line":1955},[321,18838,18839],{"class":390},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[321,18841,18842],{"class":323,"line":1960},[321,18843,2606],{"emptyLinePlaceholder":251},[321,18845,18846,18848],{"class":323,"line":1965},[321,18847,18811],{"class":331},[321,18849,18850],{"class":390},"\u002F\u002F只有构造函数\n",[321,18852,18853],{"class":323,"line":1970},[321,18854,2606],{"emptyLinePlaceholder":251},[321,18856,18857,18859,18861,18863,18865],{"class":323,"line":1984},[321,18858,2509],{"class":2169},[321,18860,332],{"class":331},[321,18862,2514],{"class":436},[321,18864,6173],{"class":331},[321,18866,18867],{"class":390},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[321,18869,18870],{"class":323,"line":1989},[321,18871,2606],{"emptyLinePlaceholder":251},[321,18873,18874,18876,18878],{"class":323,"line":2783},[321,18875,4296],{"class":327},[321,18877,4299],{"class":380},[321,18879,1497],{"class":331},[321,18881,18882],{"class":323,"line":2797},[321,18883,1771],{"class":331},[19,18885,18886],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[292,18888,18890],{"id":18889},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18892,18893],{},"两种分类方式：",[19,18895,18896],{},"​\t按参数分为： 有参构造和无参构造",[19,18898,18899],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18901,18902],{},"三种调用方式：",[19,18904,18905],{},"​\t括号法",[19,18907,18908],{},"​\t显示法",[19,18910,18911],{},"​\t隐式转换法",[312,18913,18915],{"className":314,"code":18914,"language":316,"meta":30,"style":30},"#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",[318,18916,18917,18923,18933,18938,18943,18948,18953,18957,18965,18969,18973,18977,18983,18987,19000,19004,19016,19020,19029,19042,19046,19050,19056,19060,19073,19077,19082,19098,19102,19107,19116,19129,19133,19139,19143,19148,19156,19160,19165,19169,19177,19181,19186,19191,19196,19201,19206,19210,19215,19220,19225,19230,19234,19239,19244,19260,19272,19277,19281,19286,19291,19296,19300,19305,19319,19332,19336,19344,19348,19354,19360,19368],{"__ignoreMap":30},[321,18918,18919,18921],{"class":323,"line":324},[321,18920,2155],{"class":327},[321,18922,2158],{"class":436},[321,18924,18925,18927,18929,18931],{"class":323,"line":167},[321,18926,2163],{"class":327},[321,18928,2166],{"class":327},[321,18930,2170],{"class":2169},[321,18932,1497],{"class":331},[321,18934,18935],{"class":323,"line":200},[321,18936,18937],{"class":390},"\u002F\u002F1.构造函数的分类及调用\n",[321,18939,18940],{"class":323,"line":1401},[321,18941,18942],{"class":390},"\u002F\u002F分类\n",[321,18944,18945],{"class":323,"line":1407},[321,18946,18947],{"class":390},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[321,18949,18950],{"class":323,"line":1421},[321,18951,18952],{"class":390},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[321,18954,18955],{"class":323,"line":1427},[321,18956,2606],{"emptyLinePlaceholder":251},[321,18958,18959,18961,18963],{"class":323,"line":1518},[321,18960,14901],{"class":327},[321,18962,15776],{"class":2169},[321,18964,2880],{"class":331},[321,18966,18967],{"class":323,"line":1524},[321,18968,1752],{"class":331},[321,18970,18971],{"class":323,"line":1536},[321,18972,14923],{"class":327},[321,18974,18975],{"class":323,"line":1818},[321,18976,18721],{"class":390},[321,18978,18979,18981],{"class":323,"line":1823},[321,18980,18726],{"class":2169},[321,18982,2182],{"class":331},[321,18984,18985],{"class":323,"line":1829},[321,18986,2236],{"class":331},[321,18988,18989,18991,18993,18996,18998],{"class":323,"line":1834},[321,18990,3657],{"class":331},[321,18992,1376],{"class":327},[321,18994,18995],{"class":436},"\"Person构造函数无参构造\"",[321,18997,1376],{"class":327},[321,18999,1398],{"class":331},[321,19001,19002],{"class":323,"line":1848},[321,19003,2393],{"class":331},[321,19005,19006,19008,19010,19012,19014],{"class":323,"line":1853},[321,19007,18726],{"class":2169},[321,19009,332],{"class":331},[321,19011,335],{"class":327},[321,19013,1605],{"class":5423},[321,19015,338],{"class":331},[321,19017,19018],{"class":323,"line":1859},[321,19019,2236],{"class":331},[321,19021,19022,19025,19027],{"class":323,"line":1880},[321,19023,19024],{"class":331},"        age",[321,19026,377],{"class":327},[321,19028,6404],{"class":331},[321,19030,19031,19033,19035,19038,19040],{"class":323,"line":1885},[321,19032,3657],{"class":331},[321,19034,1376],{"class":327},[321,19036,19037],{"class":436},"\"Person构造函数有参构造\"",[321,19039,1376],{"class":327},[321,19041,1398],{"class":331},[321,19043,19044],{"class":323,"line":1899},[321,19045,2393],{"class":331},[321,19047,19048],{"class":323,"line":1904},[321,19049,18754],{"class":390},[321,19051,19052,19054],{"class":323,"line":1933},[321,19053,18759],{"class":2169},[321,19055,2182],{"class":331},[321,19057,19058],{"class":323,"line":1938},[321,19059,2236],{"class":331},[321,19061,19062,19064,19066,19069,19071],{"class":323,"line":1955},[321,19063,3657],{"class":331},[321,19065,1376],{"class":327},[321,19067,19068],{"class":436},"\"Person析构函数被调用\"",[321,19070,1376],{"class":327},[321,19072,1398],{"class":331},[321,19074,19075],{"class":323,"line":1960},[321,19076,2393],{"class":331},[321,19078,19079],{"class":323,"line":1965},[321,19080,19081],{"class":390},"    \u002F\u002F拷贝构造函数\n",[321,19083,19084,19086,19088,19090,19092,19094,19096],{"class":323,"line":1970},[321,19085,18726],{"class":2169},[321,19087,332],{"class":331},[321,19089,6999],{"class":327},[321,19091,15776],{"class":2169},[321,19093,10791],{"class":327},[321,19095,19],{"class":5423},[321,19097,338],{"class":331},[321,19099,19100],{"class":323,"line":1984},[321,19101,2236],{"class":331},[321,19103,19104],{"class":323,"line":1989},[321,19105,19106],{"class":390},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[321,19108,19109,19111,19113],{"class":323,"line":2783},[321,19110,19024],{"class":331},[321,19112,377],{"class":327},[321,19114,19115],{"class":331},"p.age;\n",[321,19117,19118,19120,19122,19125,19127],{"class":323,"line":2797},[321,19119,3657],{"class":331},[321,19121,1376],{"class":327},[321,19123,19124],{"class":436},"\"Person拷贝构造函数被调用\"",[321,19126,1376],{"class":327},[321,19128,1398],{"class":331},[321,19130,19131],{"class":323,"line":2805},[321,19132,2393],{"class":331},[321,19134,19135,19137],{"class":323,"line":2810},[321,19136,2191],{"class":327},[321,19138,8004],{"class":331},[321,19140,19141],{"class":323,"line":2816},[321,19142,4201],{"class":331},[321,19144,19145],{"class":323,"line":2822},[321,19146,19147],{"class":390},"\u002F\u002F调用\n",[321,19149,19150,19152,19154],{"class":323,"line":2827},[321,19151,5571],{"class":327},[321,19153,5795],{"class":2169},[321,19155,2182],{"class":331},[321,19157,19158],{"class":323,"line":8155},[321,19159,1752],{"class":331},[321,19161,19162],{"class":323,"line":8179},[321,19163,19164],{"class":390},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[321,19166,19167],{"class":323,"line":8184},[321,19168,1771],{"class":331},[321,19170,19171,19173,19175],{"class":323,"line":8190},[321,19172,5571],{"class":327},[321,19174,5864],{"class":2169},[321,19176,2182],{"class":331},[321,19178,19179],{"class":323,"line":8217},[321,19180,1752],{"class":331},[321,19182,19183],{"class":323,"line":8222},[321,19184,19185],{"class":390},"    \u002F\u002F1.括号法\n",[321,19187,19188],{"class":323,"line":8228},[321,19189,19190],{"class":390},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[321,19192,19193],{"class":323,"line":8240},[321,19194,19195],{"class":390},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[321,19197,19198],{"class":323,"line":8252},[321,19199,19200],{"class":390},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[321,19202,19203],{"class":323,"line":8264},[321,19204,19205],{"class":390},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[321,19207,19208],{"class":323,"line":9923},[321,19209,2606],{"emptyLinePlaceholder":251},[321,19211,19212],{"class":323,"line":9948},[321,19213,19214],{"class":390},"    \u002F\u002F注意事项\n",[321,19216,19217],{"class":323,"line":9971},[321,19218,19219],{"class":390},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[321,19221,19222],{"class":323,"line":9995},[321,19223,19224],{"class":390},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[321,19226,19227],{"class":323,"line":10000},[321,19228,19229],{"class":390},"    \u002F\u002F Person p4();\n",[321,19231,19232],{"class":323,"line":10005},[321,19233,2606],{"emptyLinePlaceholder":251},[321,19235,19236],{"class":323,"line":10010},[321,19237,19238],{"class":390},"    \u002F\u002F2.显示法\n",[321,19240,19241],{"class":323,"line":10019},[321,19242,19243],{"class":331},"    Person p1;\n",[321,19245,19246,19249,19251,19254,19256,19258],{"class":323,"line":10024},[321,19247,19248],{"class":331},"    Person p2",[321,19250,377],{"class":327},[321,19252,19253],{"class":2169},"Person",[321,19255,332],{"class":331},[321,19257,778],{"class":380},[321,19259,2925],{"class":331},[321,19261,19262,19265,19267,19269],{"class":323,"line":10030},[321,19263,19264],{"class":331},"    Person p3",[321,19266,377],{"class":327},[321,19268,19253],{"class":2169},[321,19270,19271],{"class":331},"(p2);\n",[321,19273,19274],{"class":323,"line":10051},[321,19275,19276],{"class":390},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[321,19278,19279],{"class":323,"line":10057},[321,19280,2606],{"emptyLinePlaceholder":251},[321,19282,19283],{"class":323,"line":10071},[321,19284,19285],{"class":390},"    \u002F\u002F 注意事项2\n",[321,19287,19288],{"class":323,"line":10077},[321,19289,19290],{"class":390},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[321,19292,19293],{"class":323,"line":10104},[321,19294,19295],{"class":390},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[321,19297,19298],{"class":323,"line":10113},[321,19299,2606],{"emptyLinePlaceholder":251},[321,19301,19302],{"class":323,"line":10119},[321,19303,19304],{"class":390},"    \u002F\u002F3.隐士转换法\n",[321,19306,19307,19310,19312,19314,19316],{"class":323,"line":10127},[321,19308,19309],{"class":331},"    Person p4",[321,19311,377],{"class":327},[321,19313,778],{"class":380},[321,19315,387],{"class":331},[321,19317,19318],{"class":390},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[321,19320,19321,19324,19326,19329],{"class":323,"line":10132},[321,19322,19323],{"class":331},"    Person p5",[321,19325,377],{"class":327},[321,19327,19328],{"class":331},"p4;",[321,19330,19331],{"class":390}," \u002F\u002F 这里会调用拷贝构造函数\n",[321,19333,19334],{"class":323,"line":16811},[321,19335,1771],{"class":331},[321,19337,19338,19340,19342],{"class":323,"line":16817},[321,19339,335],{"class":327},[321,19341,2179],{"class":2169},[321,19343,2182],{"class":331},[321,19345,19346],{"class":323,"line":16840},[321,19347,1752],{"class":331},[321,19349,19350,19352],{"class":323,"line":16846},[321,19351,5840],{"class":2169},[321,19353,5843],{"class":331},[321,19355,19356,19358],{"class":323,"line":16869},[321,19357,5909],{"class":2169},[321,19359,5843],{"class":331},[321,19361,19362,19364,19366],{"class":323,"line":16883},[321,19363,4296],{"class":327},[321,19365,4299],{"class":380},[321,19367,1497],{"class":331},[321,19369,19370],{"class":323,"line":16903},[321,19371,1771],{"class":331},[19,19373,19374,19377],{},[481,19375,19376],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[292,19379,19381],{"id":19380},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19383,19384],{},"C++中拷贝构造函数调用时机通常有三种情况",[1339,19386,19387,19390,19393],{},[154,19388,19389],{},"使用一个已经创建完毕的对象来初始化一个新对象",[154,19391,19392],{},"值传递的方式给函数参数传值",[154,19394,19395],{},"以值方式返回局部对象",[312,19397,19399],{"className":314,"code":19398,"language":316,"meta":30,"style":30},"#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",[318,19400,19401,19407,19417,19421,19426,19430,19435,19440,19445,19451,19455,19459,19465,19469,19482,19486,19491,19503,19507,19515,19528,19532,19536,19552,19556,19565,19578,19582,19588,19592,19604,19608,19614,19618,19622,19630,19634,19647,19655,19673,19677,19682,19687,19702,19706,19719,19723,19731,19735,19739,19747,19751,19756,19765,19769,19773,19798,19808,19812,19820,19824,19835,19860,19864,19868,19872,19880,19884,19889,19894,19901,19906,19911,19916,19921,19925,19930,19934,19939,19943,19948,19953,19957,19961,19966,19971,19979],{"__ignoreMap":30},[321,19402,19403,19405],{"class":323,"line":324},[321,19404,2155],{"class":327},[321,19406,2158],{"class":436},[321,19408,19409,19411,19413,19415],{"class":323,"line":167},[321,19410,2163],{"class":327},[321,19412,2166],{"class":327},[321,19414,2170],{"class":2169},[321,19416,1497],{"class":331},[321,19418,19419],{"class":323,"line":200},[321,19420,2606],{"emptyLinePlaceholder":251},[321,19422,19423],{"class":323,"line":1401},[321,19424,19425],{"class":390},"\u002F\u002F拷贝构造函数调用时机\n",[321,19427,19428],{"class":323,"line":1407},[321,19429,2606],{"emptyLinePlaceholder":251},[321,19431,19432],{"class":323,"line":1421},[321,19433,19434],{"class":390},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[321,19436,19437],{"class":323,"line":1427},[321,19438,19439],{"class":390},"\u002F\u002F2.值传递的方式给函数参数传值\n",[321,19441,19442],{"class":323,"line":1518},[321,19443,19444],{"class":390},"\u002F\u002F3.以值方式返回局部对象\n",[321,19446,19447,19449],{"class":323,"line":1524},[321,19448,14901],{"class":327},[321,19450,15378],{"class":2169},[321,19452,19453],{"class":323,"line":1536},[321,19454,1752],{"class":331},[321,19456,19457],{"class":323,"line":1818},[321,19458,14923],{"class":327},[321,19460,19461,19463],{"class":323,"line":1823},[321,19462,18726],{"class":2169},[321,19464,2182],{"class":331},[321,19466,19467],{"class":323,"line":1829},[321,19468,2236],{"class":331},[321,19470,19471,19473,19475,19478,19480],{"class":323,"line":1834},[321,19472,9876],{"class":331},[321,19474,1376],{"class":327},[321,19476,19477],{"class":436}," \"Person的默认构造函数调用\"",[321,19479,1651],{"class":327},[321,19481,9047],{"class":331},[321,19483,19484],{"class":323,"line":1848},[321,19485,2393],{"class":331},[321,19487,19488],{"class":323,"line":1853},[321,19489,19490],{"class":390},"    \u002F\u002F有参构造\n",[321,19492,19493,19495,19497,19499,19501],{"class":323,"line":1859},[321,19494,18726],{"class":2169},[321,19496,332],{"class":331},[321,19498,335],{"class":327},[321,19500,15896],{"class":5423},[321,19502,338],{"class":331},[321,19504,19505],{"class":323,"line":1880},[321,19506,2236],{"class":331},[321,19508,19509,19511,19513],{"class":323,"line":1885},[321,19510,15950],{"class":331},[321,19512,377],{"class":327},[321,19514,8004],{"class":331},[321,19516,19517,19519,19521,19524,19526],{"class":323,"line":1899},[321,19518,9876],{"class":331},[321,19520,1376],{"class":327},[321,19522,19523],{"class":436}," \"Person的有参构造函数调用\"",[321,19525,1651],{"class":327},[321,19527,9047],{"class":331},[321,19529,19530],{"class":323,"line":1904},[321,19531,2393],{"class":331},[321,19533,19534],{"class":323,"line":1933},[321,19535,19081],{"class":390},[321,19537,19538,19540,19542,19544,19546,19548,19550],{"class":323,"line":1938},[321,19539,18726],{"class":2169},[321,19541,332],{"class":331},[321,19543,6999],{"class":327},[321,19545,15776],{"class":2169},[321,19547,10791],{"class":327},[321,19549,19],{"class":5423},[321,19551,338],{"class":331},[321,19553,19554],{"class":323,"line":1955},[321,19555,2236],{"class":331},[321,19557,19558,19560,19562],{"class":323,"line":1960},[321,19559,15950],{"class":331},[321,19561,377],{"class":327},[321,19563,19564],{"class":331}," p.m_Age;\n",[321,19566,19567,19569,19571,19574,19576],{"class":323,"line":1965},[321,19568,9876],{"class":331},[321,19570,1376],{"class":327},[321,19572,19573],{"class":436}," \"Person的拷贝构造函数调用\"",[321,19575,1651],{"class":327},[321,19577,9047],{"class":331},[321,19579,19580],{"class":323,"line":1970},[321,19581,2393],{"class":331},[321,19583,19584,19586],{"class":323,"line":1984},[321,19585,18759],{"class":2169},[321,19587,2182],{"class":331},[321,19589,19590],{"class":323,"line":1989},[321,19591,2236],{"class":331},[321,19593,19594,19596,19598,19600,19602],{"class":323,"line":2783},[321,19595,9876],{"class":331},[321,19597,1376],{"class":327},[321,19599,18774],{"class":436},[321,19601,1651],{"class":327},[321,19603,9047],{"class":331},[321,19605,19606],{"class":323,"line":2797},[321,19607,2393],{"class":331},[321,19609,19610,19612],{"class":323,"line":2805},[321,19611,2191],{"class":327},[321,19613,15873],{"class":331},[321,19615,19616],{"class":323,"line":2810},[321,19617,4201],{"class":331},[321,19619,19620],{"class":323,"line":2816},[321,19621,19434],{"class":390},[321,19623,19624,19626,19628],{"class":323,"line":2822},[321,19625,5571],{"class":327},[321,19627,5795],{"class":2169},[321,19629,2182],{"class":331},[321,19631,19632],{"class":323,"line":2827},[321,19633,1752],{"class":331},[321,19635,19636,19639,19641,19643,19645],{"class":323,"line":8155},[321,19637,19638],{"class":331},"    Person ",[321,19640,7337],{"class":2169},[321,19642,332],{"class":331},[321,19644,1032],{"class":380},[321,19646,2925],{"class":331},[321,19648,19649,19651,19653],{"class":323,"line":8179},[321,19650,19638],{"class":331},[321,19652,7240],{"class":2169},[321,19654,17722],{"class":331},[321,19656,19657,19659,19661,19664,19666,19669,19671],{"class":323,"line":8184},[321,19658,1757],{"class":331},[321,19660,1376],{"class":327},[321,19662,19663],{"class":436},"\"P2的年龄为：\"",[321,19665,1376],{"class":327},[321,19667,19668],{"class":331},"p2.m_Age",[321,19670,1376],{"class":327},[321,19672,1398],{"class":331},[321,19674,19675],{"class":323,"line":8190},[321,19676,1771],{"class":331},[321,19678,19679],{"class":323,"line":8217},[321,19680,19681],{"class":390},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[321,19683,19684],{"class":323,"line":8222},[321,19685,19686],{"class":390},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[321,19688,19689,19691,19694,19696,19698,19700],{"class":323,"line":8228},[321,19690,5571],{"class":327},[321,19692,19693],{"class":2169}," doWork",[321,19695,332],{"class":331},[321,19697,19253],{"class":2169},[321,19699,7032],{"class":5423},[321,19701,338],{"class":331},[321,19703,19704],{"class":323,"line":8240},[321,19705,1752],{"class":331},[321,19707,19708,19710,19712,19715,19717],{"class":323,"line":8252},[321,19709,6736],{"class":331},[321,19711,1376],{"class":327},[321,19713,19714],{"class":436}," \"doWork函数调用\"",[321,19716,1651],{"class":327},[321,19718,9047],{"class":331},[321,19720,19721],{"class":323,"line":8264},[321,19722,1771],{"class":331},[321,19724,19725,19727,19729],{"class":323,"line":9923},[321,19726,5571],{"class":327},[321,19728,5864],{"class":2169},[321,19730,2182],{"class":331},[321,19732,19733],{"class":323,"line":9948},[321,19734,1752],{"class":331},[321,19736,19737],{"class":323,"line":9971},[321,19738,15520],{"class":331},[321,19740,19741,19744],{"class":323,"line":9995},[321,19742,19743],{"class":2169},"    doWork",[321,19745,19746],{"class":331},"(p);\n",[321,19748,19749],{"class":323,"line":10000},[321,19750,1771],{"class":331},[321,19752,19753],{"class":323,"line":10005},[321,19754,19755],{"class":390},"\u002F\u002F 3.以值方式返回局部对象\n",[321,19757,19758,19760,19763],{"class":323,"line":10010},[321,19759,19253],{"class":2169},[321,19761,19762],{"class":2169}," doWork2",[321,19764,2182],{"class":331},[321,19766,19767],{"class":323,"line":10019},[321,19768,1752],{"class":331},[321,19770,19771],{"class":323,"line":10024},[321,19772,19243],{"class":331},[321,19774,19775,19777,19779,19781,19783,19785,19787,19789,19791,19793,19795],{"class":323,"line":10030},[321,19776,1757],{"class":331},[321,19778,1376],{"class":327},[321,19780,332],{"class":331},[321,19782,335],{"class":327},[321,19784,6725],{"class":327},[321,19786,761],{"class":331},[321,19788,685],{"class":327},[321,19790,7337],{"class":331},[321,19792,1376],{"class":327},[321,19794,1445],{"class":331},[321,19796,19797],{"class":390},"\u002F\u002F打印p1的地址\n",[321,19799,19800,19802,19805],{"class":323,"line":10051},[321,19801,4296],{"class":327},[321,19803,19804],{"class":331}," p1;",[321,19806,19807],{"class":390},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[321,19809,19810],{"class":323,"line":10057},[321,19811,1771],{"class":331},[321,19813,19814,19816,19818],{"class":323,"line":10071},[321,19815,5571],{"class":327},[321,19817,5936],{"class":2169},[321,19819,2182],{"class":331},[321,19821,19822],{"class":323,"line":10077},[321,19823,1752],{"class":331},[321,19825,19826,19829,19831,19833],{"class":323,"line":10104},[321,19827,19828],{"class":331},"    Person p ",[321,19830,377],{"class":327},[321,19832,19762],{"class":2169},[321,19834,5843],{"class":331},[321,19836,19837,19839,19841,19843,19845,19847,19849,19851,19853,19855,19857],{"class":323,"line":10113},[321,19838,1757],{"class":331},[321,19840,1376],{"class":327},[321,19842,332],{"class":331},[321,19844,335],{"class":327},[321,19846,6725],{"class":327},[321,19848,761],{"class":331},[321,19850,685],{"class":327},[321,19852,19],{"class":331},[321,19854,1376],{"class":327},[321,19856,1445],{"class":331},[321,19858,19859],{"class":390},"\u002F\u002F打印p的地址\n",[321,19861,19862],{"class":323,"line":10119},[321,19863,1771],{"class":331},[321,19865,19866],{"class":323,"line":10127},[321,19867,2606],{"emptyLinePlaceholder":251},[321,19869,19870],{"class":323,"line":10132},[321,19871,2606],{"emptyLinePlaceholder":251},[321,19873,19874,19876,19878],{"class":323,"line":16811},[321,19875,335],{"class":327},[321,19877,2179],{"class":2169},[321,19879,2182],{"class":331},[321,19881,19882],{"class":323,"line":16817},[321,19883,1752],{"class":331},[321,19885,19886],{"class":323,"line":16840},[321,19887,19888],{"class":390},"    \u002F\u002F test01();\n",[321,19890,19891],{"class":323,"line":16846},[321,19892,19893],{"class":390},"    \u002F\u002F test02();\n",[321,19895,19896,19899],{"class":323,"line":16869},[321,19897,19898],{"class":2169},"    test03",[321,19900,5843],{"class":331},[321,19902,19903],{"class":323,"line":16883},[321,19904,19905],{"class":390},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[321,19907,19908],{"class":323,"line":16903},[321,19909,19910],{"class":390},"\u002F\u002F 输出结果如下：\n",[321,19912,19913],{"class":323,"line":16909},[321,19914,19915],{"class":390},"\u002F\u002F Person的默认构造函数调用\n",[321,19917,19918],{"class":323,"line":16920},[321,19919,19920],{"class":390},"\u002F\u002F 0x7fffffffceec\n",[321,19922,19923],{"class":323,"line":16943},[321,19924,19920],{"class":390},[321,19926,19927],{"class":323,"line":16965},[321,19928,19929],{"class":390},"\u002F\u002F Person的析构函数调用\n",[321,19931,19932],{"class":323,"line":16970},[321,19933,2606],{"emptyLinePlaceholder":251},[321,19935,19936],{"class":323,"line":16976},[321,19937,19938],{"class":390},"\u002F\u002F 之前的输出结果如下：\n",[321,19940,19941],{"class":323,"line":16990},[321,19942,19915],{"class":390},[321,19944,19945],{"class":323,"line":17003},[321,19946,19947],{"class":390},"\u002F\u002F 地址\n",[321,19949,19950],{"class":323,"line":17008},[321,19951,19952],{"class":390},"\u002F\u002F Person的拷贝构造函数调用\n",[321,19954,19955],{"class":323,"line":17022},[321,19956,19929],{"class":390},[321,19958,19959],{"class":323,"line":17027},[321,19960,19947],{"class":390},[321,19962,19963],{"class":323,"line":17033},[321,19964,19965],{"class":390},"\u002F\u002F (这两次输出的地址也是不同的) \n",[321,19967,19968],{"class":323,"line":17038},[321,19969,19970],{"class":390},"\u002F\u002F Person的析构函数调用     \n",[321,19972,19973,19975,19977],{"class":323,"line":17052},[321,19974,4296],{"class":327},[321,19976,4299],{"class":380},[321,19978,1497],{"class":331},[321,19980,19981],{"class":323,"line":17057},[321,19982,1771],{"class":331},[19,19984,19985],{},"简化版理解",[312,19987,19989],{"className":314,"code":19988,"language":316,"meta":30,"style":30},"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",[318,19990,19991,19999,20003,20009,20022,20033,20037,20049,20062,20070,20074,20090,20103,20112,20116,20121,20127,20140,20144,20148,20155,20159,20163,20168,20176,20180,20196,20209,20222,20226,20231,20239,20243,20247,20252,20257,20273,20281,20288,20294,20298,20302,20307,20315,20319,20323,20346,20353,20357,20361,20369,20373,20383,20405,20409,20413,20417,20425,20429,20434,20439,20445,20449,20459,20463,20471],{"__ignoreMap":30},[321,19992,19993,19995,19997],{"class":323,"line":324},[321,19994,14901],{"class":327},[321,19996,15776],{"class":2169},[321,19998,15779],{"class":331},[321,20000,20001],{"class":323,"line":167},[321,20002,14923],{"class":327},[321,20004,20005,20007],{"class":323,"line":200},[321,20006,18726],{"class":2169},[321,20008,11060],{"class":331},[321,20010,20011,20013,20015,20018,20020],{"class":323,"line":1401},[321,20012,9876],{"class":331},[321,20014,1376],{"class":327},[321,20016,20017],{"class":436}," \"无参构造函数!\"",[321,20019,1651],{"class":327},[321,20021,9047],{"class":331},[321,20023,20024,20027,20029,20031],{"class":323,"line":1407},[321,20025,20026],{"class":331},"        mAge ",[321,20028,377],{"class":327},[321,20030,4299],{"class":380},[321,20032,1497],{"class":331},[321,20034,20035],{"class":323,"line":1421},[321,20036,2393],{"class":331},[321,20038,20039,20041,20043,20045,20047],{"class":323,"line":1427},[321,20040,18726],{"class":2169},[321,20042,332],{"class":331},[321,20044,335],{"class":327},[321,20046,15896],{"class":5423},[321,20048,12649],{"class":331},[321,20050,20051,20053,20055,20058,20060],{"class":323,"line":1518},[321,20052,9876],{"class":331},[321,20054,1376],{"class":327},[321,20056,20057],{"class":436}," \"有参构造函数!\"",[321,20059,1651],{"class":327},[321,20061,9047],{"class":331},[321,20063,20064,20066,20068],{"class":323,"line":1524},[321,20065,20026],{"class":331},[321,20067,377],{"class":327},[321,20069,8004],{"class":331},[321,20071,20072],{"class":323,"line":1536},[321,20073,2393],{"class":331},[321,20075,20076,20078,20080,20082,20084,20086,20088],{"class":323,"line":1818},[321,20077,18726],{"class":2169},[321,20079,332],{"class":331},[321,20081,6999],{"class":327},[321,20083,15776],{"class":2169},[321,20085,685],{"class":327},[321,20087,7032],{"class":5423},[321,20089,12649],{"class":331},[321,20091,20092,20094,20096,20099,20101],{"class":323,"line":1823},[321,20093,9876],{"class":331},[321,20095,1376],{"class":327},[321,20097,20098],{"class":436}," \"拷贝构造函数!\"",[321,20100,1651],{"class":327},[321,20102,9047],{"class":331},[321,20104,20105,20107,20109],{"class":323,"line":1829},[321,20106,20026],{"class":331},[321,20108,377],{"class":327},[321,20110,20111],{"class":331}," p.mAge;\n",[321,20113,20114],{"class":323,"line":1834},[321,20115,2393],{"class":331},[321,20117,20118],{"class":323,"line":1848},[321,20119,20120],{"class":390},"    \u002F\u002F析构函数在释放内存之前调用\n",[321,20122,20123,20125],{"class":323,"line":1853},[321,20124,18759],{"class":2169},[321,20126,11060],{"class":331},[321,20128,20129,20131,20133,20136,20138],{"class":323,"line":1859},[321,20130,9876],{"class":331},[321,20132,1376],{"class":327},[321,20134,20135],{"class":436}," \"析构函数!\"",[321,20137,1651],{"class":327},[321,20139,9047],{"class":331},[321,20141,20142],{"class":323,"line":1880},[321,20143,2393],{"class":331},[321,20145,20146],{"class":323,"line":1885},[321,20147,14923],{"class":327},[321,20149,20150,20152],{"class":323,"line":1899},[321,20151,2191],{"class":327},[321,20153,20154],{"class":331}," mAge;\n",[321,20156,20157],{"class":323,"line":1904},[321,20158,4201],{"class":331},[321,20160,20161],{"class":323,"line":1933},[321,20162,2606],{"emptyLinePlaceholder":251},[321,20164,20165],{"class":323,"line":1938},[321,20166,20167],{"class":390},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[321,20169,20170,20172,20174],{"class":323,"line":1955},[321,20171,5571],{"class":327},[321,20173,5795],{"class":2169},[321,20175,11060],{"class":331},[321,20177,20178],{"class":323,"line":1960},[321,20179,2606],{"emptyLinePlaceholder":251},[321,20181,20182,20184,20187,20189,20191,20193],{"class":323,"line":1965},[321,20183,19638],{"class":331},[321,20185,20186],{"class":2169},"man",[321,20188,332],{"class":331},[321,20190,643],{"class":380},[321,20192,6173],{"class":331},[321,20194,20195],{"class":390}," \u002F\u002Fp对象已经创建完毕\n",[321,20197,20198,20200,20203,20206],{"class":323,"line":1970},[321,20199,19638],{"class":331},[321,20201,20202],{"class":2169},"newman",[321,20204,20205],{"class":331},"(man);",[321,20207,20208],{"class":390}," \u002F\u002F调用拷贝构造函数\n",[321,20210,20211,20214,20216,20219],{"class":323,"line":1984},[321,20212,20213],{"class":331},"    Person newman2 ",[321,20215,377],{"class":327},[321,20217,20218],{"class":331}," man;",[321,20220,20221],{"class":390}," \u002F\u002F拷贝构造\n",[321,20223,20224],{"class":323,"line":1989},[321,20225,2606],{"emptyLinePlaceholder":251},[321,20227,20228],{"class":323,"line":2783},[321,20229,20230],{"class":390},"    \u002F\u002FPerson newman3;\n",[321,20232,20233,20236],{"class":323,"line":2797},[321,20234,20235],{"class":390},"    \u002F\u002Fnewman3 = man;",[321,20237,20238],{"class":390}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[321,20240,20241],{"class":323,"line":2805},[321,20242,1771],{"class":331},[321,20244,20245],{"class":323,"line":2810},[321,20246,2606],{"emptyLinePlaceholder":251},[321,20248,20249],{"class":323,"line":2816},[321,20250,20251],{"class":390},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[321,20253,20254],{"class":323,"line":2822},[321,20255,20256],{"class":390},"\u002F\u002F相当于Person p1 = p;\n",[321,20258,20259,20261,20263,20265,20267,20270],{"class":323,"line":2827},[321,20260,5571],{"class":327},[321,20262,19693],{"class":2169},[321,20264,332],{"class":331},[321,20266,19253],{"class":2169},[321,20268,20269],{"class":5423}," p1",[321,20271,20272],{"class":331},") {}\n",[321,20274,20275,20277,20279],{"class":323,"line":8155},[321,20276,5571],{"class":327},[321,20278,5864],{"class":2169},[321,20280,11060],{"class":331},[321,20282,20283,20285],{"class":323,"line":8179},[321,20284,18811],{"class":331},[321,20286,20287],{"class":390}," \u002F\u002F无参构造函数\n",[321,20289,20290,20292],{"class":323,"line":8184},[321,20291,19743],{"class":2169},[321,20293,19746],{"class":331},[321,20295,20296],{"class":323,"line":8190},[321,20297,1771],{"class":331},[321,20299,20300],{"class":323,"line":8217},[321,20301,2606],{"emptyLinePlaceholder":251},[321,20303,20304],{"class":323,"line":8222},[321,20305,20306],{"class":390},"\u002F\u002F3. 以值方式返回局部对象\n",[321,20308,20309,20311,20313],{"class":323,"line":8228},[321,20310,19253],{"class":2169},[321,20312,19762],{"class":2169},[321,20314,2182],{"class":331},[321,20316,20317],{"class":323,"line":8240},[321,20318,1752],{"class":331},[321,20320,20321],{"class":323,"line":8252},[321,20322,19243],{"class":331},[321,20324,20325,20327,20329,20331,20333,20335,20337,20339,20342,20344],{"class":323,"line":8264},[321,20326,6736],{"class":331},[321,20328,1376],{"class":327},[321,20330,1864],{"class":331},[321,20332,335],{"class":327},[321,20334,6725],{"class":327},[321,20336,761],{"class":331},[321,20338,685],{"class":327},[321,20340,20341],{"class":331},"p1 ",[321,20343,1376],{"class":327},[321,20345,9047],{"class":331},[321,20347,20348,20350],{"class":323,"line":9923},[321,20349,4296],{"class":327},[321,20351,20352],{"class":331}," p1;\n",[321,20354,20355],{"class":323,"line":9948},[321,20356,1771],{"class":331},[321,20358,20359],{"class":323,"line":9971},[321,20360,2606],{"emptyLinePlaceholder":251},[321,20362,20363,20365,20367],{"class":323,"line":9995},[321,20364,5571],{"class":327},[321,20366,5936],{"class":2169},[321,20368,2182],{"class":331},[321,20370,20371],{"class":323,"line":10000},[321,20372,1752],{"class":331},[321,20374,20375,20377,20379,20381],{"class":323,"line":10005},[321,20376,19828],{"class":331},[321,20378,377],{"class":327},[321,20380,19762],{"class":2169},[321,20382,5843],{"class":331},[321,20384,20385,20387,20389,20391,20393,20395,20397,20399,20401,20403],{"class":323,"line":10010},[321,20386,6736],{"class":331},[321,20388,1376],{"class":327},[321,20390,1864],{"class":331},[321,20392,335],{"class":327},[321,20394,6725],{"class":327},[321,20396,761],{"class":331},[321,20398,685],{"class":327},[321,20400,11655],{"class":331},[321,20402,1376],{"class":327},[321,20404,9047],{"class":331},[321,20406,20407],{"class":323,"line":10019},[321,20408,1771],{"class":331},[321,20410,20411],{"class":323,"line":10024},[321,20412,2606],{"emptyLinePlaceholder":251},[321,20414,20415],{"class":323,"line":10030},[321,20416,2606],{"emptyLinePlaceholder":251},[321,20418,20419,20421,20423],{"class":323,"line":10051},[321,20420,335],{"class":327},[321,20422,2179],{"class":2169},[321,20424,11060],{"class":331},[321,20426,20427],{"class":323,"line":10057},[321,20428,2606],{"emptyLinePlaceholder":251},[321,20430,20431],{"class":323,"line":10071},[321,20432,20433],{"class":390},"    \u002F\u002Ftest01();\n",[321,20435,20436],{"class":323,"line":10077},[321,20437,20438],{"class":390},"    \u002F\u002Ftest02();\n",[321,20440,20441,20443],{"class":323,"line":10104},[321,20442,19898],{"class":2169},[321,20444,5843],{"class":331},[321,20446,20447],{"class":323,"line":10113},[321,20448,2606],{"emptyLinePlaceholder":251},[321,20450,20451,20453,20455,20457],{"class":323,"line":10119},[321,20452,2509],{"class":2169},[321,20454,332],{"class":331},[321,20456,2514],{"class":436},[321,20458,2925],{"class":331},[321,20460,20461],{"class":323,"line":10127},[321,20462,2606],{"emptyLinePlaceholder":251},[321,20464,20465,20467,20469],{"class":323,"line":10132},[321,20466,4296],{"class":327},[321,20468,4299],{"class":380},[321,20470,1497],{"class":331},[321,20472,20473],{"class":323,"line":16811},[321,20474,1771],{"class":331},[292,20476,20478],{"id":20477},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20480,20481],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20483,20484],{},"1．默认构造函数(无参，函数体为空)",[19,20486,20487],{},"2．默认析构函数(无参，函数体为空)",[19,20489,20490],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20492,20493],{},"构造函数调用规则如下：",[1339,20495,20496,20499],{},[154,20497,20498],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[154,20500,20501],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[312,20503,20505],{"className":314,"code":20504,"language":316,"meta":30,"style":30},"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",[318,20506,20507,20515,20519,20524,20530,20542,20546,20551,20563,20572,20584,20588,20592,20608,20617,20629,20633,20637,20643,20655,20659,20663,20669,20673,20677,20685,20689,20701,20706,20714,20718,20736,20740,20744,20752,20756,20761,20769,20784,20797,20801,20806,20813,20829,20842,20846,20850,20858,20862,20868,20872,20882,20886,20894],{"__ignoreMap":30},[321,20508,20509,20511,20513],{"class":323,"line":324},[321,20510,14901],{"class":327},[321,20512,15776],{"class":2169},[321,20514,15779],{"class":331},[321,20516,20517],{"class":323,"line":167},[321,20518,14923],{"class":327},[321,20520,20521],{"class":323,"line":200},[321,20522,20523],{"class":390},"    \u002F\u002F无参（默认）构造函数\n",[321,20525,20526,20528],{"class":323,"line":1401},[321,20527,18726],{"class":2169},[321,20529,11060],{"class":331},[321,20531,20532,20534,20536,20538,20540],{"class":323,"line":1407},[321,20533,9876],{"class":331},[321,20535,1376],{"class":327},[321,20537,20017],{"class":436},[321,20539,1651],{"class":327},[321,20541,9047],{"class":331},[321,20543,20544],{"class":323,"line":1421},[321,20545,2393],{"class":331},[321,20547,20548],{"class":323,"line":1427},[321,20549,20550],{"class":390},"    \u002F\u002F有参构造函数\n",[321,20552,20553,20555,20557,20559,20561],{"class":323,"line":1518},[321,20554,18726],{"class":2169},[321,20556,332],{"class":331},[321,20558,335],{"class":327},[321,20560,1605],{"class":5423},[321,20562,12649],{"class":331},[321,20564,20565,20568,20570],{"class":323,"line":1524},[321,20566,20567],{"class":331},"        age ",[321,20569,377],{"class":327},[321,20571,1639],{"class":331},[321,20573,20574,20576,20578,20580,20582],{"class":323,"line":1536},[321,20575,9876],{"class":331},[321,20577,1376],{"class":327},[321,20579,20057],{"class":436},[321,20581,1651],{"class":327},[321,20583,9047],{"class":331},[321,20585,20586],{"class":323,"line":1818},[321,20587,2393],{"class":331},[321,20589,20590],{"class":323,"line":1823},[321,20591,19081],{"class":390},[321,20593,20594,20596,20598,20600,20602,20604,20606],{"class":323,"line":1829},[321,20595,18726],{"class":2169},[321,20597,332],{"class":331},[321,20599,6999],{"class":327},[321,20601,15776],{"class":2169},[321,20603,685],{"class":327},[321,20605,7032],{"class":5423},[321,20607,12649],{"class":331},[321,20609,20610,20612,20614],{"class":323,"line":1834},[321,20611,20567],{"class":331},[321,20613,377],{"class":327},[321,20615,20616],{"class":331}," p.age;\n",[321,20618,20619,20621,20623,20625,20627],{"class":323,"line":1848},[321,20620,9876],{"class":331},[321,20622,1376],{"class":327},[321,20624,20098],{"class":436},[321,20626,1651],{"class":327},[321,20628,9047],{"class":331},[321,20630,20631],{"class":323,"line":1853},[321,20632,2393],{"class":331},[321,20634,20635],{"class":323,"line":1859},[321,20636,18754],{"class":390},[321,20638,20639,20641],{"class":323,"line":1880},[321,20640,18759],{"class":2169},[321,20642,11060],{"class":331},[321,20644,20645,20647,20649,20651,20653],{"class":323,"line":1885},[321,20646,9876],{"class":331},[321,20648,1376],{"class":327},[321,20650,20135],{"class":436},[321,20652,1651],{"class":327},[321,20654,9047],{"class":331},[321,20656,20657],{"class":323,"line":1899},[321,20658,2393],{"class":331},[321,20660,20661],{"class":323,"line":1904},[321,20662,14923],{"class":327},[321,20664,20665,20667],{"class":323,"line":1933},[321,20666,2191],{"class":327},[321,20668,8004],{"class":331},[321,20670,20671],{"class":323,"line":1938},[321,20672,4201],{"class":331},[321,20674,20675],{"class":323,"line":1955},[321,20676,2606],{"emptyLinePlaceholder":251},[321,20678,20679,20681,20683],{"class":323,"line":1960},[321,20680,5571],{"class":327},[321,20682,5795],{"class":2169},[321,20684,2182],{"class":331},[321,20686,20687],{"class":323,"line":1965},[321,20688,1752],{"class":331},[321,20690,20691,20693,20695,20697,20699],{"class":323,"line":1970},[321,20692,19638],{"class":331},[321,20694,7337],{"class":2169},[321,20696,332],{"class":331},[321,20698,982],{"class":380},[321,20700,2925],{"class":331},[321,20702,20703],{"class":323,"line":1984},[321,20704,20705],{"class":390},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[321,20707,20708,20710,20712],{"class":323,"line":1989},[321,20709,19638],{"class":331},[321,20711,7240],{"class":2169},[321,20713,17722],{"class":331},[321,20715,20716],{"class":323,"line":2783},[321,20717,2606],{"emptyLinePlaceholder":251},[321,20719,20720,20722,20724,20727,20729,20732,20734],{"class":323,"line":2797},[321,20721,6736],{"class":331},[321,20723,1376],{"class":327},[321,20725,20726],{"class":436}," \"p2的年龄为： \"",[321,20728,1651],{"class":327},[321,20730,20731],{"class":331}," p2.age ",[321,20733,1376],{"class":327},[321,20735,9047],{"class":331},[321,20737,20738],{"class":323,"line":2805},[321,20739,1771],{"class":331},[321,20741,20742],{"class":323,"line":2810},[321,20743,2606],{"emptyLinePlaceholder":251},[321,20745,20746,20748,20750],{"class":323,"line":2816},[321,20747,5571],{"class":327},[321,20749,5864],{"class":2169},[321,20751,2182],{"class":331},[321,20753,20754],{"class":323,"line":2822},[321,20755,1752],{"class":331},[321,20757,20758],{"class":323,"line":2827},[321,20759,20760],{"class":390},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[321,20762,20763,20766],{"class":323,"line":8155},[321,20764,20765],{"class":331},"    Person p1;",[321,20767,20768],{"class":390}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[321,20770,20771,20773,20775,20777,20779,20781],{"class":323,"line":8179},[321,20772,19638],{"class":331},[321,20774,7240],{"class":2169},[321,20776,332],{"class":331},[321,20778,778],{"class":380},[321,20780,6173],{"class":331},[321,20782,20783],{"class":390}," \u002F\u002F用户提供的有参\n",[321,20785,20786,20788,20791,20794],{"class":323,"line":8184},[321,20787,19638],{"class":331},[321,20789,20790],{"class":2169},"p3",[321,20792,20793],{"class":331},"(p2);",[321,20795,20796],{"class":390}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[321,20798,20799],{"class":323,"line":8190},[321,20800,2606],{"emptyLinePlaceholder":251},[321,20802,20803],{"class":323,"line":8217},[321,20804,20805],{"class":390},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[321,20807,20808,20811],{"class":323,"line":8222},[321,20809,20810],{"class":331},"    Person p4;",[321,20812,20768],{"class":390},[321,20814,20815,20817,20820,20822,20824,20826],{"class":323,"line":8228},[321,20816,19638],{"class":331},[321,20818,20819],{"class":2169},"p5",[321,20821,332],{"class":331},[321,20823,778],{"class":380},[321,20825,6173],{"class":331},[321,20827,20828],{"class":390}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[321,20830,20831,20833,20836,20839],{"class":323,"line":8240},[321,20832,19638],{"class":331},[321,20834,20835],{"class":2169},"p6",[321,20837,20838],{"class":331},"(p5);",[321,20840,20841],{"class":390}," \u002F\u002F用户自己提供拷贝构造\n",[321,20843,20844],{"class":323,"line":8252},[321,20845,1771],{"class":331},[321,20847,20848],{"class":323,"line":8264},[321,20849,2606],{"emptyLinePlaceholder":251},[321,20851,20852,20854,20856],{"class":323,"line":9923},[321,20853,335],{"class":327},[321,20855,2179],{"class":2169},[321,20857,11060],{"class":331},[321,20859,20860],{"class":323,"line":9948},[321,20861,2606],{"emptyLinePlaceholder":251},[321,20863,20864,20866],{"class":323,"line":9971},[321,20865,5840],{"class":2169},[321,20867,5843],{"class":331},[321,20869,20870],{"class":323,"line":9995},[321,20871,2606],{"emptyLinePlaceholder":251},[321,20873,20874,20876,20878,20880],{"class":323,"line":10000},[321,20875,2509],{"class":2169},[321,20877,332],{"class":331},[321,20879,2514],{"class":436},[321,20881,2925],{"class":331},[321,20883,20884],{"class":323,"line":10005},[321,20885,2606],{"emptyLinePlaceholder":251},[321,20887,20888,20890,20892],{"class":323,"line":10010},[321,20889,4296],{"class":327},[321,20891,4299],{"class":380},[321,20893,1497],{"class":331},[321,20895,20896],{"class":323,"line":10019},[321,20897,1771],{"class":331},[292,20899,20901],{"id":20900},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20903,20904],{},"浅拷贝：简单的赋值拷贝操作",[19,20906,20907],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[312,20909,20911],{"className":314,"code":20910,"language":316,"meta":30,"style":30},"#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",[318,20912,20913,20919,20929,20935,20939,20943,20948,20954,20958,20971,20975,20979,20986,20990,21000,21015,21028,21032,21037,21042,21058,21062,21075,21080,21085,21090,21099,21104,21119,21123,21127,21131,21137,21141,21146,21161,21165,21176,21190,21194,21203,21207,21213,21225,21229,21237,21241,21258,21289,21297,21325,21329,21333,21341,21345,21351],{"__ignoreMap":30},[321,20914,20915,20917],{"class":323,"line":324},[321,20916,2155],{"class":327},[321,20918,2158],{"class":436},[321,20920,20921,20923,20925,20927],{"class":323,"line":167},[321,20922,2163],{"class":327},[321,20924,2166],{"class":327},[321,20926,2170],{"class":2169},[321,20928,1497],{"class":331},[321,20930,20931,20933],{"class":323,"line":200},[321,20932,14901],{"class":327},[321,20934,15378],{"class":2169},[321,20936,20937],{"class":323,"line":1401},[321,20938,1752],{"class":331},[321,20940,20941],{"class":323,"line":1407},[321,20942,14923],{"class":327},[321,20944,20945],{"class":323,"line":1421},[321,20946,20947],{"class":390},"    \u002F\u002F默认构造函数\n",[321,20949,20950,20952],{"class":323,"line":1427},[321,20951,18726],{"class":2169},[321,20953,2182],{"class":331},[321,20955,20956],{"class":323,"line":1518},[321,20957,2236],{"class":331},[321,20959,20960,20962,20964,20967,20969],{"class":323,"line":1524},[321,20961,3657],{"class":331},[321,20963,1376],{"class":327},[321,20965,20966],{"class":436},"\"默认构造函数\"",[321,20968,1376],{"class":327},[321,20970,1398],{"class":331},[321,20972,20973],{"class":323,"line":1536},[321,20974,2393],{"class":331},[321,20976,20977],{"class":323,"line":1818},[321,20978,20550],{"class":390},[321,20980,20981,20983],{"class":323,"line":1823},[321,20982,18759],{"class":2169},[321,20984,20985],{"class":331},"(int age,int height)\n",[321,20987,20988],{"class":323,"line":1829},[321,20989,2236],{"class":331},[321,20991,20992,20995,20997],{"class":323,"line":1834},[321,20993,20994],{"class":331},"        m_Age",[321,20996,377],{"class":327},[321,20998,20999],{"class":331},"age;\n",[321,21001,21002,21005,21007,21009,21012],{"class":323,"line":1848},[321,21003,21004],{"class":331},"        m_Height",[321,21006,11924],{"class":327},[321,21008,2588],{"class":327},[321,21010,21011],{"class":331},"(height);",[321,21013,21014],{"class":390},"\u002F\u002F放到堆区\n",[321,21016,21017,21019,21021,21024,21026],{"class":323,"line":1853},[321,21018,3657],{"class":331},[321,21020,1376],{"class":327},[321,21022,21023],{"class":436},"\"有参构造函数\"",[321,21025,1376],{"class":327},[321,21027,1398],{"class":331},[321,21029,21030],{"class":323,"line":1859},[321,21031,2393],{"class":331},[321,21033,21034],{"class":323,"line":1880},[321,21035,21036],{"class":390},"    \u002F\u002F深拷贝解决上述问题\n",[321,21038,21039],{"class":323,"line":1885},[321,21040,21041],{"class":390},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[321,21043,21044,21046,21048,21050,21052,21054,21056],{"class":323,"line":1899},[321,21045,18726],{"class":2169},[321,21047,332],{"class":331},[321,21049,6999],{"class":327},[321,21051,15776],{"class":2169},[321,21053,10791],{"class":327},[321,21055,19],{"class":5423},[321,21057,338],{"class":331},[321,21059,21060],{"class":323,"line":1904},[321,21061,2236],{"class":331},[321,21063,21064,21066,21068,21071,21073],{"class":323,"line":1933},[321,21065,3657],{"class":331},[321,21067,1376],{"class":327},[321,21069,21070],{"class":436},"\"拷贝构造函数\"",[321,21072,1376],{"class":327},[321,21074,1398],{"class":331},[321,21076,21077],{"class":323,"line":1938},[321,21078,21079],{"class":390},"        \u002F\u002F编译器默认的写如下注释部分\n",[321,21081,21082],{"class":323,"line":1955},[321,21083,21084],{"class":390},"        \u002F\u002Fm_Age=p.m_Age;\n",[321,21086,21087],{"class":323,"line":1960},[321,21088,21089],{"class":390},"        \u002F\u002Fm_Height=p.m_Height;\n",[321,21091,21092,21094,21096],{"class":323,"line":1965},[321,21093,20994],{"class":331},[321,21095,377],{"class":327},[321,21097,21098],{"class":331},"p.m_Age;\n",[321,21100,21101],{"class":323,"line":1970},[321,21102,21103],{"class":390},"        \u002F\u002F深拷贝操作\n",[321,21105,21106,21108,21110,21112,21114,21116],{"class":323,"line":1984},[321,21107,21004],{"class":331},[321,21109,11924],{"class":327},[321,21111,2588],{"class":327},[321,21113,332],{"class":331},[321,21115,787],{"class":327},[321,21117,21118],{"class":331},"p.m_Height);\n",[321,21120,21121],{"class":323,"line":1989},[321,21122,2393],{"class":331},[321,21124,21125],{"class":323,"line":2783},[321,21126,2606],{"emptyLinePlaceholder":251},[321,21128,21129],{"class":323,"line":2797},[321,21130,18754],{"class":390},[321,21132,21133,21135],{"class":323,"line":2805},[321,21134,18759],{"class":2169},[321,21136,2182],{"class":331},[321,21138,21139],{"class":323,"line":2810},[321,21140,2236],{"class":331},[321,21142,21143],{"class":323,"line":2816},[321,21144,21145],{"class":390},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[321,21147,21148,21150,21153,21156,21159],{"class":323,"line":2822},[321,21149,2703],{"class":327},[321,21151,21152],{"class":331},"(m_Height ",[321,21154,21155],{"class":327},"!=",[321,21157,21158],{"class":380}," NULL",[321,21160,338],{"class":331},[321,21162,21163],{"class":323,"line":2827},[321,21164,2716],{"class":331},[321,21166,21167,21170,21173],{"class":323,"line":8155},[321,21168,21169],{"class":327},"            delete",[321,21171,21172],{"class":331}," m_Height;",[321,21174,21175],{"class":390}," \u002F\u002F释放堆区内存\n",[321,21177,21178,21181,21183,21185,21187],{"class":323,"line":8179},[321,21179,21180],{"class":331},"            m_Height",[321,21182,377],{"class":327},[321,21184,2598],{"class":380},[321,21186,387],{"class":331},[321,21188,21189],{"class":390}," \u002F\u002F防止野指针\n",[321,21191,21192],{"class":323,"line":8184},[321,21193,2735],{"class":331},[321,21195,21196,21198,21200],{"class":323,"line":8190},[321,21197,3657],{"class":331},[321,21199,1376],{"class":327},[321,21201,21202],{"class":436},"\"Person的析构函数调用\"\n",[321,21204,21205],{"class":323,"line":8217},[321,21206,2393],{"class":331},[321,21208,21209,21211],{"class":323,"line":8222},[321,21210,2191],{"class":327},[321,21212,15873],{"class":331},[321,21214,21215,21217,21219,21222],{"class":323,"line":8228},[321,21216,2191],{"class":327},[321,21218,6725],{"class":327},[321,21220,21221],{"class":331},"m_Height;",[321,21223,21224],{"class":390}," \u002F\u002F定义一个指针，指向身高\n",[321,21226,21227],{"class":323,"line":8240},[321,21228,4201],{"class":331},[321,21230,21231,21233,21235],{"class":323,"line":8252},[321,21232,5571],{"class":327},[321,21234,5795],{"class":2169},[321,21236,2182],{"class":331},[321,21238,21239],{"class":323,"line":8264},[321,21240,1752],{"class":331},[321,21242,21243,21245,21247,21249,21251,21253,21256],{"class":323,"line":9923},[321,21244,19638],{"class":331},[321,21246,7337],{"class":2169},[321,21248,332],{"class":331},[321,21250,982],{"class":380},[321,21252,710],{"class":331},[321,21254,21255],{"class":380},"160",[321,21257,2925],{"class":331},[321,21259,21260,21262,21264,21267,21269,21272,21274,21277,21279,21282,21284,21286],{"class":323,"line":9948},[321,21261,1757],{"class":331},[321,21263,1376],{"class":327},[321,21265,21266],{"class":436},"\"p1的年龄为:\"",[321,21268,1376],{"class":327},[321,21270,21271],{"class":331},"p1.m_Age",[321,21273,1376],{"class":327},[321,21275,21276],{"class":436},"\"身高为：\"",[321,21278,6626],{"class":327},[321,21280,21281],{"class":331},"p1.m_Height",[321,21283,1376],{"class":327},[321,21285,1445],{"class":331},[321,21287,21288],{"class":390},"  \u002F\u002F18\n",[321,21290,21291,21293,21295],{"class":323,"line":9971},[321,21292,19638],{"class":331},[321,21294,7240],{"class":2169},[321,21296,17722],{"class":331},[321,21298,21299,21301,21303,21306,21308,21310,21312,21314,21316,21319,21321,21323],{"class":323,"line":9995},[321,21300,1757],{"class":331},[321,21302,1376],{"class":327},[321,21304,21305],{"class":436},"\"p2的年龄为：\"",[321,21307,1376],{"class":327},[321,21309,19668],{"class":331},[321,21311,1376],{"class":327},[321,21313,21276],{"class":436},[321,21315,6626],{"class":327},[321,21317,21318],{"class":331},"p2.m_Height",[321,21320,1376],{"class":327},[321,21322,1445],{"class":331},[321,21324,21288],{"class":390},[321,21326,21327],{"class":323,"line":10000},[321,21328,13417],{"class":331},[321,21330,21331],{"class":323,"line":10005},[321,21332,1771],{"class":331},[321,21334,21335,21337,21339],{"class":323,"line":10010},[321,21336,335],{"class":327},[321,21338,2179],{"class":2169},[321,21340,2182],{"class":331},[321,21342,21343],{"class":323,"line":10019},[321,21344,1752],{"class":331},[321,21346,21347,21349],{"class":323,"line":10024},[321,21348,5840],{"class":2169},[321,21350,5843],{"class":331},[321,21352,21353],{"class":323,"line":10030},[321,21354,1771],{"class":331},[19,21356,21357],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21359,21360],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21362,21363],{},[28,21364],{"alt":30,"src":21365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21367,21368],{},"浅拷贝问题要使用深拷贝来解决",[19,21370,21371],{},[28,21372],{"alt":30,"src":21373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21375,21376],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[292,21378,21380],{"id":21379},"_826初始化列表","8.2.6初始化列表",[19,21382,21383],{},"作用：初始化属性",[19,21385,5388],{},[312,21387,21390],{"className":21388,"code":21389,"language":5394},[5392],"构造函数():属性1(值1),属性2(值2).....{}\n",[318,21391,21389],{"__ignoreMap":30},[19,21393,21394],{},"例子",[312,21396,21398],{"className":314,"code":21397,"language":316,"meta":30,"style":30},"#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",[318,21399,21400,21406,21416,21422,21426,21431,21435,21440,21445,21450,21455,21460,21465,21469,21474,21479,21522,21531,21549,21567,21585,21589,21593,21600,21607,21614,21618,21622,21630,21634,21638,21658,21667,21671,21675,21685,21689,21697],{"__ignoreMap":30},[321,21401,21402,21404],{"class":323,"line":324},[321,21403,2155],{"class":327},[321,21405,2158],{"class":436},[321,21407,21408,21410,21412,21414],{"class":323,"line":167},[321,21409,2163],{"class":327},[321,21411,2166],{"class":327},[321,21413,2170],{"class":2169},[321,21415,1497],{"class":331},[321,21417,21418,21420],{"class":323,"line":200},[321,21419,14901],{"class":327},[321,21421,15378],{"class":2169},[321,21423,21424],{"class":323,"line":1401},[321,21425,1752],{"class":331},[321,21427,21428],{"class":323,"line":1407},[321,21429,21430],{"class":327},"    public:\n",[321,21432,21433],{"class":323,"line":1421},[321,21434,2606],{"emptyLinePlaceholder":251},[321,21436,21437],{"class":323,"line":1427},[321,21438,21439],{"class":390},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[321,21441,21442],{"class":323,"line":1518},[321,21443,21444],{"class":390},"    \u002F\u002FPerson(int a, int b, int c) {\n",[321,21446,21447],{"class":323,"line":1524},[321,21448,21449],{"class":390},"    \u002F\u002F  m_A = a;\n",[321,21451,21452],{"class":323,"line":1536},[321,21453,21454],{"class":390},"    \u002F\u002F  m_B = b;\n",[321,21456,21457],{"class":323,"line":1818},[321,21458,21459],{"class":390},"    \u002F\u002F  m_C = c;\n",[321,21461,21462],{"class":323,"line":1823},[321,21463,21464],{"class":390},"    \u002F\u002F}\n",[321,21466,21467],{"class":323,"line":1829},[321,21468,2606],{"emptyLinePlaceholder":251},[321,21470,21471],{"class":323,"line":1834},[321,21472,21473],{"class":390},"    \u002F\u002F初始化列表方式初始化\n",[321,21475,21476],{"class":323,"line":1848},[321,21477,21478],{"class":390},"    \u002F\u002F使用有参构造函数\n",[321,21480,21481,21483,21485,21487,21489,21491,21493,21495,21497,21499,21501,21504,21507,21510,21513,21516,21519],{"class":323,"line":1853},[321,21482,18726],{"class":2169},[321,21484,332],{"class":331},[321,21486,335],{"class":327},[321,21488,1605],{"class":5423},[321,21490,12642],{"class":331},[321,21492,335],{"class":327},[321,21494,3039],{"class":5423},[321,21496,12642],{"class":331},[321,21498,335],{"class":327},[321,21500,3055],{"class":5423},[321,21502,21503],{"class":331},") :",[321,21505,21506],{"class":2169},"m_A",[321,21508,21509],{"class":331},"(a), ",[321,21511,21512],{"class":2169},"m_B",[321,21514,21515],{"class":331},"(b), ",[321,21517,21518],{"class":2169},"m_C",[321,21520,21521],{"class":331},"(c) {}\n",[321,21523,21524,21526,21529],{"class":323,"line":1859},[321,21525,15116],{"class":327},[321,21527,21528],{"class":2169}," PrintPerson",[321,21530,11060],{"class":331},[321,21532,21533,21535,21537,21540,21542,21545,21547],{"class":323,"line":1880},[321,21534,9876],{"class":331},[321,21536,1376],{"class":327},[321,21538,21539],{"class":436}," \"mA:\"",[321,21541,1651],{"class":327},[321,21543,21544],{"class":331}," m_A ",[321,21546,1376],{"class":327},[321,21548,9047],{"class":331},[321,21550,21551,21553,21555,21558,21560,21563,21565],{"class":323,"line":1885},[321,21552,9876],{"class":331},[321,21554,1376],{"class":327},[321,21556,21557],{"class":436}," \"mB:\"",[321,21559,1651],{"class":327},[321,21561,21562],{"class":331}," m_B ",[321,21564,1376],{"class":327},[321,21566,9047],{"class":331},[321,21568,21569,21571,21573,21576,21578,21581,21583],{"class":323,"line":1899},[321,21570,9876],{"class":331},[321,21572,1376],{"class":327},[321,21574,21575],{"class":436}," \"mC:\"",[321,21577,1651],{"class":327},[321,21579,21580],{"class":331}," m_C ",[321,21582,1376],{"class":327},[321,21584,9047],{"class":331},[321,21586,21587],{"class":323,"line":1904},[321,21588,2393],{"class":331},[321,21590,21591],{"class":323,"line":1933},[321,21592,15429],{"class":327},[321,21594,21595,21597],{"class":323,"line":1938},[321,21596,2191],{"class":327},[321,21598,21599],{"class":331}," m_A;\n",[321,21601,21602,21604],{"class":323,"line":1955},[321,21603,2191],{"class":327},[321,21605,21606],{"class":331}," m_B;\n",[321,21608,21609,21611],{"class":323,"line":1960},[321,21610,2191],{"class":327},[321,21612,21613],{"class":331}," m_C;\n",[321,21615,21616],{"class":323,"line":1965},[321,21617,4201],{"class":331},[321,21619,21620],{"class":323,"line":1970},[321,21621,2606],{"emptyLinePlaceholder":251},[321,21623,21624,21626,21628],{"class":323,"line":1984},[321,21625,335],{"class":327},[321,21627,2179],{"class":2169},[321,21629,6185],{"class":331},[321,21631,21632],{"class":323,"line":1989},[321,21633,1752],{"class":331},[321,21635,21636],{"class":323,"line":2783},[321,21637,2606],{"emptyLinePlaceholder":251},[321,21639,21640,21642,21644,21646,21648,21650,21652,21654,21656],{"class":323,"line":2797},[321,21641,19638],{"class":331},[321,21643,19],{"class":2169},[321,21645,332],{"class":331},[321,21647,549],{"class":380},[321,21649,12642],{"class":331},[321,21651,409],{"class":380},[321,21653,12642],{"class":331},[321,21655,403],{"class":380},[321,21657,2925],{"class":331},[321,21659,21660,21662,21665],{"class":323,"line":2805},[321,21661,16073],{"class":331},[321,21663,21664],{"class":2169},"PrintPerson",[321,21666,5843],{"class":331},[321,21668,21669],{"class":323,"line":2810},[321,21670,2606],{"emptyLinePlaceholder":251},[321,21672,21673],{"class":323,"line":2816},[321,21674,2606],{"emptyLinePlaceholder":251},[321,21676,21677,21679,21681,21683],{"class":323,"line":2822},[321,21678,2509],{"class":2169},[321,21680,332],{"class":331},[321,21682,2514],{"class":436},[321,21684,2925],{"class":331},[321,21686,21687],{"class":323,"line":2827},[321,21688,2606],{"emptyLinePlaceholder":251},[321,21690,21691,21693,21695],{"class":323,"line":8155},[321,21692,4296],{"class":327},[321,21694,4299],{"class":380},[321,21696,1497],{"class":331},[321,21698,21699],{"class":323,"line":8179},[321,21700,1771],{"class":331},[19,21702,21703,21704,21707,21708],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[481,21705,21706],{},"参数名就是定义的对象属性","，",[481,21709,21710],{},"属性后面的值为有参构造函数的形参",[312,21712,21714],{"className":314,"code":21713,"language":316,"meta":30,"style":30},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[318,21715,21716],{"__ignoreMap":30},[321,21717,21718,21720,21722,21724,21727,21729,21732,21734,21737,21739,21742,21744,21747,21749],{"class":323,"line":324},[321,21719,19253],{"class":2169},[321,21721,332],{"class":331},[321,21723,335],{"class":327},[321,21725,21726],{"class":331}," a.",[321,21728,335],{"class":327},[321,21730,21731],{"class":331}," b,",[321,21733,335],{"class":327},[321,21735,21736],{"class":331}," b):",[321,21738,21506],{"class":2169},[321,21740,21741],{"class":331},"(a),",[321,21743,21512],{"class":2169},[321,21745,21746],{"class":331},"(c),",[321,21748,21518],{"class":2169},[321,21750,21751],{"class":331},"(b) {}\n",[292,21753,21755],{"id":21754},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21757,21758],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21760,14840],{},[312,21762,21764],{"className":314,"code":21763,"language":316,"meta":30,"style":30},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[318,21765,21766,21771,21776,21780,21785,21789],{"__ignoreMap":30},[321,21767,21768],{"class":323,"line":324},[321,21769,21770],{"class":331},"A{};\n",[321,21772,21773],{"class":323,"line":167},[321,21774,21775],{"class":331},"B\n",[321,21777,21778],{"class":323,"line":200},[321,21779,1752],{"class":331},[321,21781,21782],{"class":323,"line":1401},[321,21783,21784],{"class":331},"    A a;\n",[321,21786,21787],{"class":323,"line":1407},[321,21788,1771],{"class":331},[321,21790,21791],{"class":323,"line":1421},[321,21792,21793],{"class":390},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21795,21796],{},"案例",[312,21798,21800],{"className":314,"code":21799,"language":316,"meta":30,"style":30},"\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",[318,21801,21802,21807,21814,21818,21823,21828,21842,21846,21856,21867,21871,21878,21882,21895,21899,21904,21909,21913,21919,21923,21927,21931,21962,21966,21977,21981,21987,21991,22004,22008,22012,22016,22021,22026,22030,22038,22042,22059,22078,22082,22090,22094,22100],{"__ignoreMap":30},[321,21803,21804],{"class":323,"line":324},[321,21805,21806],{"class":390},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[321,21808,21809,21811],{"class":323,"line":167},[321,21810,14901],{"class":327},[321,21812,21813],{"class":2169}," Phone\n",[321,21815,21816],{"class":323,"line":200},[321,21817,1752],{"class":331},[321,21819,21820],{"class":323,"line":1401},[321,21821,21822],{"class":331},"public：\n",[321,21824,21825],{"class":323,"line":1407},[321,21826,21827],{"class":390},"    \u002F\u002F 赋值(构造函数)\n",[321,21829,21830,21833,21835,21837,21840],{"class":323,"line":1421},[321,21831,21832],{"class":2169},"    Phone",[321,21834,332],{"class":331},[321,21836,15124],{"class":2169},[321,21838,21839],{"class":5423}," pName",[321,21841,338],{"class":331},[321,21843,21844],{"class":323,"line":1427},[321,21845,2236],{"class":331},[321,21847,21848,21851,21853],{"class":323,"line":1518},[321,21849,21850],{"class":331},"        m_pName",[321,21852,377],{"class":327},[321,21854,21855],{"class":331},"pName;\n",[321,21857,21858,21860,21862,21865],{"class":323,"line":1524},[321,21859,3657],{"class":331},[321,21861,1376],{"class":327},[321,21863,21864],{"class":436},"\"Phone的构造函数调用\"",[321,21866,1497],{"class":331},[321,21868,21869],{"class":323,"line":1536},[321,21870,2393],{"class":331},[321,21872,21873,21876],{"class":323,"line":1818},[321,21874,21875],{"class":2169},"    ~Phone",[321,21877,2182],{"class":331},[321,21879,21880],{"class":323,"line":1823},[321,21881,2236],{"class":331},[321,21883,21884,21886,21888,21891,21893],{"class":323,"line":1829},[321,21885,3657],{"class":331},[321,21887,1376],{"class":327},[321,21889,21890],{"class":436},"\"Phone析构函数调用\"",[321,21892,1376],{"class":327},[321,21894,1398],{"class":331},[321,21896,21897],{"class":323,"line":1834},[321,21898,2393],{"class":331},[321,21900,21901],{"class":323,"line":1848},[321,21902,21903],{"class":390},"    \u002F\u002F\n",[321,21905,21906],{"class":323,"line":1853},[321,21907,21908],{"class":331},"    string m_PName;\n",[321,21910,21911],{"class":323,"line":1859},[321,21912,4201],{"class":331},[321,21914,21915,21917],{"class":323,"line":1880},[321,21916,14901],{"class":327},[321,21918,15378],{"class":2169},[321,21920,21921],{"class":323,"line":1885},[321,21922,1752],{"class":331},[321,21924,21925],{"class":323,"line":1899},[321,21926,14923],{"class":327},[321,21928,21929],{"class":323,"line":1904},[321,21930,17201],{"class":390},[321,21932,21933,21935,21937,21939,21941,21943,21945,21948,21951,21953,21956,21959],{"class":323,"line":1933},[321,21934,18726],{"class":2169},[321,21936,332],{"class":331},[321,21938,15124],{"class":2169},[321,21940,15127],{"class":5423},[321,21942,710],{"class":331},[321,21944,15124],{"class":2169},[321,21946,21947],{"class":5423}," pname",[321,21949,21950],{"class":331},"):",[321,21952,15217],{"class":2169},[321,21954,21955],{"class":331},"(name),m_phone.",[321,21957,21958],{"class":2169},"m_PName",[321,21960,21961],{"class":331},"(pname) \n",[321,21963,21964],{"class":323,"line":1938},[321,21965,2236],{"class":331},[321,21967,21968,21970,21972,21975],{"class":323,"line":1955},[321,21969,3657],{"class":331},[321,21971,1376],{"class":327},[321,21973,21974],{"class":436},"\"Person的构造函数调用\"",[321,21976,1497],{"class":331},[321,21978,21979],{"class":323,"line":1960},[321,21980,2393],{"class":331},[321,21982,21983,21985],{"class":323,"line":1965},[321,21984,18759],{"class":2169},[321,21986,2182],{"class":331},[321,21988,21989],{"class":323,"line":1970},[321,21990,2236],{"class":331},[321,21992,21993,21995,21997,22000,22002],{"class":323,"line":1984},[321,21994,3657],{"class":331},[321,21996,1376],{"class":327},[321,21998,21999],{"class":436},"\"Person析构函数调用\"",[321,22001,1376],{"class":327},[321,22003,1398],{"class":331},[321,22005,22006],{"class":323,"line":1989},[321,22007,2393],{"class":331},[321,22009,22010],{"class":323,"line":2783},[321,22011,7987],{"class":390},[321,22013,22014],{"class":323,"line":2797},[321,22015,15099],{"class":331},[321,22017,22018],{"class":323,"line":2805},[321,22019,22020],{"class":390},"    \u002F\u002F手机\n",[321,22022,22023],{"class":323,"line":2810},[321,22024,22025],{"class":331},"    Phone m_Phone;\n",[321,22027,22028],{"class":323,"line":2816},[321,22029,4201],{"class":331},[321,22031,22032,22034,22036],{"class":323,"line":2822},[321,22033,5571],{"class":327},[321,22035,5795],{"class":2169},[321,22037,2182],{"class":331},[321,22039,22040],{"class":323,"line":2827},[321,22041,1752],{"class":331},[321,22043,22044,22046,22048,22050,22052,22054,22057],{"class":323,"line":8155},[321,22045,19638],{"class":331},[321,22047,19],{"class":2169},[321,22049,332],{"class":331},[321,22051,8123],{"class":436},[321,22053,710],{"class":331},[321,22055,22056],{"class":436},"\"安卓\"",[321,22058,2925],{"class":331},[321,22060,22061,22063,22065,22068,22070,22073,22075],{"class":323,"line":8179},[321,22062,1757],{"class":331},[321,22064,1376],{"class":327},[321,22066,22067],{"class":331},"p.Name",[321,22069,1376],{"class":327},[321,22071,22072],{"class":436},"\"拿着：\"",[321,22074,1376],{"class":327},[321,22076,22077],{"class":331},"p.m_phone.m_PName;\n",[321,22079,22080],{"class":323,"line":8184},[321,22081,1771],{"class":331},[321,22083,22084,22086,22088],{"class":323,"line":8190},[321,22085,335],{"class":327},[321,22087,2179],{"class":2169},[321,22089,2182],{"class":331},[321,22091,22092],{"class":323,"line":8217},[321,22093,1752],{"class":331},[321,22095,22096,22098],{"class":323,"line":8222},[321,22097,5840],{"class":2169},[321,22099,5843],{"class":331},[321,22101,22102],{"class":323,"line":8228},[321,22103,1771],{"class":331},[19,22105,9232],{},[312,22107,22109],{"className":314,"code":22108,"language":316,"meta":30,"style":30},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[318,22110,22111,22116],{"__ignoreMap":30},[321,22112,22113],{"class":323,"line":324},[321,22114,22115],{"class":390},"    \u002F\u002F不需要写这个：\n",[321,22117,22118],{"class":323,"line":167},[321,22119,22120],{"class":390},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22122,22123],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[312,22125,22127],{"className":314,"code":22126,"language":316,"meta":30,"style":30},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[318,22128,22129],{"__ignoreMap":30},[321,22130,22131,22133,22136,22138,22141,22144],{"class":323,"line":324},[321,22132,19253],{"class":2169},[321,22134,22135],{"class":331},"(string name.string pname):",[321,22137,15217],{"class":2169},[321,22139,22140],{"class":331},"(name),",[321,22142,22143],{"class":2169},"m_phone",[321,22145,22146],{"class":331},"(pname) {}\n",[19,22148,22149,22150,377,22153],{},"采用的是隐式转换法，实际为如下：\n",[318,22151,22152],{},"m_phone(pname)",[318,22154,22155],{},"Phone m_phone=pname",[19,22157,22158,22161],{},[481,22159,22160],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22163,22164],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[292,22166,22168],{"id":22167},"_828静态对象","8.2.8静态对象",[19,22170,22171],{},"静态对象在成员对象前static，称为静态对象",[19,22173,22174],{},"静态对象分为两类：",[151,22176,22177],{},[154,22178,22179],{},"静态成员变量",[1339,22181,22182,22185,22188],{},[154,22183,22184],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[154,22186,22187],{},"②在编译阶段分配内存",[154,22189,22190],{},"③类内声明，类外初始化",[151,22192,22193],{"start":167},[154,22194,22195],{},"静态成员函数",[1339,22197,22198,22201],{},[154,22199,22200],{},"①所有对象共享同一个函数",[154,22202,22203],{},"②静态成员函数只能访问静态成员变量",[22205,22206,22208],"h4",{"id":22207},"_8281静态成员变量","8.2.8.1静态成员变量",[312,22210,22212],{"className":314,"code":22211,"language":316,"meta":30,"style":30},"#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",[318,22213,22214,22220,22230,22236,22240,22244,22249,22254,22259,22267,22271,22275,22279,22287,22291,22295,22300,22313,22317,22325,22329,22335],{"__ignoreMap":30},[321,22215,22216,22218],{"class":323,"line":324},[321,22217,2155],{"class":327},[321,22219,2158],{"class":436},[321,22221,22222,22224,22226,22228],{"class":323,"line":167},[321,22223,2163],{"class":327},[321,22225,2166],{"class":327},[321,22227,2170],{"class":2169},[321,22229,1497],{"class":331},[321,22231,22232,22234],{"class":323,"line":200},[321,22233,14901],{"class":327},[321,22235,15378],{"class":2169},[321,22237,22238],{"class":323,"line":1401},[321,22239,1752],{"class":331},[321,22241,22242],{"class":323,"line":1407},[321,22243,14923],{"class":327},[321,22245,22246],{"class":323,"line":1421},[321,22247,22248],{"class":390},"    \u002F\u002F非静态成员变量\n",[321,22250,22251],{"class":323,"line":1427},[321,22252,22253],{"class":390},"    \u002F\u002F int m_A;\n",[321,22255,22256],{"class":323,"line":1518},[321,22257,22258],{"class":390},"    \u002F\u002F定义静态成员变量\n",[321,22260,22261,22263,22265],{"class":323,"line":1524},[321,22262,11227],{"class":327},[321,22264,2588],{"class":327},[321,22266,21599],{"class":331},[321,22268,22269],{"class":323,"line":1536},[321,22270,2606],{"emptyLinePlaceholder":251},[321,22272,22273],{"class":323,"line":1818},[321,22274,2606],{"emptyLinePlaceholder":251},[321,22276,22277],{"class":323,"line":1823},[321,22278,4201],{"class":331},[321,22280,22281,22283,22285],{"class":323,"line":1829},[321,22282,5571],{"class":327},[321,22284,5795],{"class":2169},[321,22286,2182],{"class":331},[321,22288,22289],{"class":323,"line":1834},[321,22290,1752],{"class":331},[321,22292,22293],{"class":323,"line":1848},[321,22294,15520],{"class":331},[321,22296,22297],{"class":323,"line":1853},[321,22298,22299],{"class":390},"    \u002F\u002F输出类成员变量这块内存\n",[321,22301,22302,22304,22306,22309,22311],{"class":323,"line":1859},[321,22303,1757],{"class":331},[321,22305,1376],{"class":327},[321,22307,22308],{"class":331},"p.m_A",[321,22310,1376],{"class":327},[321,22312,1398],{"class":331},[321,22314,22315],{"class":323,"line":1880},[321,22316,1771],{"class":331},[321,22318,22319,22321,22323],{"class":323,"line":1885},[321,22320,335],{"class":327},[321,22322,2179],{"class":2169},[321,22324,2182],{"class":331},[321,22326,22327],{"class":323,"line":1899},[321,22328,1752],{"class":331},[321,22330,22331,22333],{"class":323,"line":1904},[321,22332,5840],{"class":2169},[321,22334,2182],{"class":331},[321,22336,22337],{"class":323,"line":1933},[321,22338,1771],{"class":331},[19,22340,22341],{},"此时输出是报错的：无法解析外部命令",[19,22343,22344],{},"解决这一问题：必须用到类内声明，类外初始化操作",[312,22346,22348],{"className":314,"code":22347,"language":316,"meta":30,"style":30},"#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",[318,22349,22350,22356,22366,22372,22376,22380,22385,22393,22397,22402,22417,22425,22429,22433,22438,22443,22455,22460,22471,22476,22481,22494,22498,22506,22510,22516],{"__ignoreMap":30},[321,22351,22352,22354],{"class":323,"line":324},[321,22353,2155],{"class":327},[321,22355,2158],{"class":436},[321,22357,22358,22360,22362,22364],{"class":323,"line":167},[321,22359,2163],{"class":327},[321,22361,2166],{"class":327},[321,22363,2170],{"class":2169},[321,22365,1497],{"class":331},[321,22367,22368,22370],{"class":323,"line":200},[321,22369,14901],{"class":327},[321,22371,15378],{"class":2169},[321,22373,22374],{"class":323,"line":1401},[321,22375,1752],{"class":331},[321,22377,22378],{"class":323,"line":1407},[321,22379,14923],{"class":327},[321,22381,22382],{"class":323,"line":1421},[321,22383,22384],{"class":390},"    \u002F\u002F类内声明\n",[321,22386,22387,22389,22391],{"class":323,"line":1427},[321,22388,11227],{"class":327},[321,22390,2588],{"class":327},[321,22392,21599],{"class":331},[321,22394,22395],{"class":323,"line":1518},[321,22396,4201],{"class":331},[321,22398,22399],{"class":323,"line":1524},[321,22400,22401],{"class":390},"\u002F\u002F类外初始化\n",[321,22403,22404,22406,22408,22411,22413,22415],{"class":323,"line":1536},[321,22405,335],{"class":327},[321,22407,15776],{"class":2169},[321,22409,22410],{"class":331},"::m_A",[321,22412,377],{"class":327},[321,22414,778],{"class":380},[321,22416,1497],{"class":331},[321,22418,22419,22421,22423],{"class":323,"line":1818},[321,22420,5571],{"class":327},[321,22422,5795],{"class":2169},[321,22424,2182],{"class":331},[321,22426,22427],{"class":323,"line":1823},[321,22428,1752],{"class":331},[321,22430,22431],{"class":323,"line":1829},[321,22432,15520],{"class":331},[321,22434,22435],{"class":323,"line":1834},[321,22436,22437],{"class":390},"    \u002F\u002F访问变量的原内存空间\n",[321,22439,22440],{"class":323,"line":1848},[321,22441,22442],{"class":390},"    \u002F\u002F100\n",[321,22444,22445,22447,22449,22451,22453],{"class":323,"line":1853},[321,22446,1757],{"class":331},[321,22448,1376],{"class":327},[321,22450,22308],{"class":331},[321,22452,1376],{"class":327},[321,22454,1398],{"class":331},[321,22456,22457],{"class":323,"line":1859},[321,22458,22459],{"class":331},"    Person p2;\n",[321,22461,22462,22465,22467,22469],{"class":323,"line":1880},[321,22463,22464],{"class":331},"    p2.m_A",[321,22466,377],{"class":327},[321,22468,1928],{"class":380},[321,22470,1497],{"class":331},[321,22472,22473],{"class":323,"line":1885},[321,22474,22475],{"class":390},"    \u002F\u002F继续访问这片空间\n",[321,22477,22478],{"class":323,"line":1899},[321,22479,22480],{"class":390},"    \u002F\u002F200\n",[321,22482,22483,22485,22487,22490,22492],{"class":323,"line":1904},[321,22484,1757],{"class":331},[321,22486,1376],{"class":327},[321,22488,22489],{"class":331},"p2.m_A",[321,22491,1376],{"class":327},[321,22493,1398],{"class":331},[321,22495,22496],{"class":323,"line":1933},[321,22497,1771],{"class":331},[321,22499,22500,22502,22504],{"class":323,"line":1938},[321,22501,335],{"class":327},[321,22503,2179],{"class":2169},[321,22505,2182],{"class":331},[321,22507,22508],{"class":323,"line":1955},[321,22509,1752],{"class":331},[321,22511,22512,22514],{"class":323,"line":1960},[321,22513,5840],{"class":2169},[321,22515,5843],{"class":331},[321,22517,22518],{"class":323,"line":1965},[321,22519,1771],{"class":331},[19,22521,22522],{},[481,22523,22524],{},"静态变量的访问",[312,22526,22528],{"className":314,"code":22527,"language":316,"meta":30,"style":30},"#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",[318,22529,22530,22536,22546,22552,22556,22560,22564,22572,22576,22581,22589,22593,22597,22611,22626,22634,22638,22643,22648,22653,22658,22670,22675,22680,22694,22711,22715,22723,22727,22733],{"__ignoreMap":30},[321,22531,22532,22534],{"class":323,"line":324},[321,22533,2155],{"class":327},[321,22535,2158],{"class":436},[321,22537,22538,22540,22542,22544],{"class":323,"line":167},[321,22539,2163],{"class":327},[321,22541,2166],{"class":327},[321,22543,2170],{"class":2169},[321,22545,1497],{"class":331},[321,22547,22548,22550],{"class":323,"line":200},[321,22549,14901],{"class":327},[321,22551,15378],{"class":2169},[321,22553,22554],{"class":323,"line":1401},[321,22555,1752],{"class":331},[321,22557,22558],{"class":323,"line":1407},[321,22559,14923],{"class":327},[321,22561,22562],{"class":323,"line":1421},[321,22563,22384],{"class":390},[321,22565,22566,22568,22570],{"class":323,"line":1427},[321,22567,11227],{"class":327},[321,22569,2588],{"class":327},[321,22571,21599],{"class":331},[321,22573,22574],{"class":323,"line":1518},[321,22575,15429],{"class":327},[321,22577,22578],{"class":323,"line":1524},[321,22579,22580],{"class":390},"    \u002F\u002F静态成员变量也是有访问权限的\n",[321,22582,22583,22585,22587],{"class":323,"line":1536},[321,22584,11227],{"class":327},[321,22586,2588],{"class":327},[321,22588,21606],{"class":331},[321,22590,22591],{"class":323,"line":1818},[321,22592,4201],{"class":331},[321,22594,22595],{"class":323,"line":1823},[321,22596,22401],{"class":390},[321,22598,22599,22601,22603,22605,22607,22609],{"class":323,"line":1829},[321,22600,335],{"class":327},[321,22602,15776],{"class":2169},[321,22604,22410],{"class":331},[321,22606,377],{"class":327},[321,22608,778],{"class":380},[321,22610,1497],{"class":331},[321,22612,22613,22615,22617,22620,22622,22624],{"class":323,"line":1834},[321,22614,335],{"class":327},[321,22616,15776],{"class":2169},[321,22618,22619],{"class":331},"::m_B",[321,22621,377],{"class":327},[321,22623,1032],{"class":380},[321,22625,1497],{"class":331},[321,22627,22628,22630,22632],{"class":323,"line":1848},[321,22629,5571],{"class":327},[321,22631,5864],{"class":2169},[321,22633,2182],{"class":331},[321,22635,22636],{"class":323,"line":1853},[321,22637,1752],{"class":331},[321,22639,22640],{"class":323,"line":1859},[321,22641,22642],{"class":390},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[321,22644,22645],{"class":323,"line":1880},[321,22646,22647],{"class":390},"    \u002F\u002F静态成员变量有两种访问方式：\n",[321,22649,22650],{"class":323,"line":1885},[321,22651,22652],{"class":390},"    \u002F\u002F1.通过对象进行访问\n",[321,22654,22655],{"class":323,"line":1899},[321,22656,22657],{"class":331},"    Person p;  \n",[321,22659,22660,22662,22664,22666,22668],{"class":323,"line":1904},[321,22661,1757],{"class":331},[321,22663,1376],{"class":327},[321,22665,22308],{"class":331},[321,22667,1376],{"class":327},[321,22669,1398],{"class":331},[321,22671,22672],{"class":323,"line":1933},[321,22673,22674],{"class":390},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[321,22676,22677],{"class":323,"line":1938},[321,22678,22679],{"class":390},"    \u002F\u002F2.通过类名进行访问\n",[321,22681,22682,22684,22686,22688,22690,22692],{"class":323,"line":1955},[321,22683,1757],{"class":331},[321,22685,1376],{"class":327},[321,22687,19253],{"class":2169},[321,22689,22410],{"class":331},[321,22691,1376],{"class":327},[321,22693,1398],{"class":331},[321,22695,22696,22698,22700,22702,22704,22706,22708],{"class":323,"line":1960},[321,22697,1757],{"class":331},[321,22699,1376],{"class":327},[321,22701,19253],{"class":2169},[321,22703,22619],{"class":331},[321,22705,1376],{"class":327},[321,22707,1445],{"class":331},[321,22709,22710],{"class":390}," \u002F\u002F没有访问权限，报错\n",[321,22712,22713],{"class":323,"line":1965},[321,22714,1771],{"class":331},[321,22716,22717,22719,22721],{"class":323,"line":1970},[321,22718,335],{"class":327},[321,22720,2179],{"class":2169},[321,22722,2182],{"class":331},[321,22724,22725],{"class":323,"line":1984},[321,22726,1752],{"class":331},[321,22728,22729,22731],{"class":323,"line":1989},[321,22730,5909],{"class":2169},[321,22732,5843],{"class":331},[321,22734,22735],{"class":323,"line":2783},[321,22736,1771],{"class":331},[22205,22738,22740],{"id":22739},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22742,22743],{},"1.静态成员函数定义与访问",[312,22745,22747],{"className":314,"code":22746,"language":316,"meta":30,"style":30},"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",[318,22748,22749,22755,22759,22763,22768,22779,22783,22797,22801,22805,22813,22817,22822,22827,22831,22839,22844,22854],{"__ignoreMap":30},[321,22750,22751,22753],{"class":323,"line":324},[321,22752,14901],{"class":327},[321,22754,15378],{"class":2169},[321,22756,22757],{"class":323,"line":167},[321,22758,1752],{"class":331},[321,22760,22761],{"class":323,"line":200},[321,22762,14923],{"class":327},[321,22764,22765],{"class":323,"line":1401},[321,22766,22767],{"class":390},"    \u002F\u002F在公共权限下定义静态成员函数\n",[321,22769,22770,22772,22775,22777],{"class":323,"line":1407},[321,22771,11227],{"class":327},[321,22773,22774],{"class":327}," void",[321,22776,11592],{"class":2169},[321,22778,2182],{"class":331},[321,22780,22781],{"class":323,"line":1421},[321,22782,2236],{"class":331},[321,22784,22785,22788,22790,22793,22795],{"class":323,"line":1427},[321,22786,22787],{"class":331},"        coout",[321,22789,1376],{"class":327},[321,22791,22792],{"class":436},"\"静态成员函数的调用\"",[321,22794,1376],{"class":327},[321,22796,1398],{"class":331},[321,22798,22799],{"class":323,"line":1518},[321,22800,2393],{"class":331},[321,22802,22803],{"class":323,"line":1524},[321,22804,4201],{"class":331},[321,22806,22807,22809,22811],{"class":323,"line":1536},[321,22808,5571],{"class":327},[321,22810,5795],{"class":2169},[321,22812,2182],{"class":331},[321,22814,22815],{"class":323,"line":1818},[321,22816,1752],{"class":331},[321,22818,22819],{"class":323,"line":1823},[321,22820,22821],{"class":390},"    \u002F\u002F静态成员函数的调用方式:\n",[321,22823,22824],{"class":323,"line":1829},[321,22825,22826],{"class":390},"    \u002F\u002F1.通过对象访问\n",[321,22828,22829],{"class":323,"line":1834},[321,22830,15520],{"class":331},[321,22832,22833,22835,22837],{"class":323,"line":1848},[321,22834,16073],{"class":331},[321,22836,11758],{"class":2169},[321,22838,5843],{"class":331},[321,22840,22841],{"class":323,"line":1853},[321,22842,22843],{"class":390},"    \u002F\u002F2.通过类名访问\n",[321,22845,22846,22848,22850,22852],{"class":323,"line":1859},[321,22847,18726],{"class":2169},[321,22849,17939],{"class":331},[321,22851,11758],{"class":2169},[321,22853,5843],{"class":331},[321,22855,22856],{"class":323,"line":1880},[321,22857,1771],{"class":331},[151,22859,22860],{"start":167},[154,22861,22862],{},"静态成员函数只能访问静态成员变量",[312,22864,22866],{"className":314,"code":22865,"language":316,"meta":30,"style":30},"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",[318,22867,22868,22874,22878,22882,22886,22896,22900,22914,22919,22931,22935,22946,22956,22960,22964,22968,22978,22982,22995,22999,23003,23007,23011,23025,23033,23037,23041,23045,23049,23057,23061,23071,23076,23080,23088,23092,23098],{"__ignoreMap":30},[321,22869,22870,22872],{"class":323,"line":324},[321,22871,14901],{"class":327},[321,22873,15378],{"class":2169},[321,22875,22876],{"class":323,"line":167},[321,22877,1752],{"class":331},[321,22879,22880],{"class":323,"line":200},[321,22881,14923],{"class":327},[321,22883,22884],{"class":323,"line":1401},[321,22885,22767],{"class":390},[321,22887,22888,22890,22892,22894],{"class":323,"line":1407},[321,22889,11227],{"class":327},[321,22891,22774],{"class":327},[321,22893,11592],{"class":2169},[321,22895,2182],{"class":331},[321,22897,22898],{"class":323,"line":1421},[321,22899,2236],{"class":331},[321,22901,22902,22905,22907,22909,22911],{"class":323,"line":1427},[321,22903,22904],{"class":331},"        m_A",[321,22906,377],{"class":327},[321,22908,643],{"class":380},[321,22910,387],{"class":331},[321,22912,22913],{"class":390}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[321,22915,22916],{"class":323,"line":1518},[321,22917,22918],{"class":390},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[321,22920,22921,22923,22925,22927,22929],{"class":323,"line":1524},[321,22922,22787],{"class":331},[321,22924,1376],{"class":327},[321,22926,22792],{"class":436},[321,22928,1376],{"class":327},[321,22930,1398],{"class":331},[321,22932,22933],{"class":323,"line":1536},[321,22934,2393],{"class":331},[321,22936,22937,22939,22941,22943],{"class":323,"line":1818},[321,22938,11227],{"class":327},[321,22940,2588],{"class":327},[321,22942,15655],{"class":331},[321,22944,22945],{"class":390}," \u002F\u002F静态成员变量\n",[321,22947,22948,22950,22953],{"class":323,"line":1823},[321,22949,2191],{"class":327},[321,22951,22952],{"class":331}," m_B;",[321,22954,22955],{"class":390}," \u002F\u002F非静态成员变量\n",[321,22957,22958],{"class":323,"line":1829},[321,22959,2606],{"emptyLinePlaceholder":251},[321,22961,22962],{"class":323,"line":1834},[321,22963,15429],{"class":327},[321,22965,22966],{"class":323,"line":1848},[321,22967,22580],{"class":390},[321,22969,22970,22972,22974,22976],{"class":323,"line":1853},[321,22971,11227],{"class":327},[321,22973,22774],{"class":327},[321,22975,13825],{"class":2169},[321,22977,2182],{"class":331},[321,22979,22980],{"class":323,"line":1859},[321,22981,2236],{"class":331},[321,22983,22984,22986,22988,22991,22993],{"class":323,"line":1880},[321,22985,3657],{"class":331},[321,22987,1376],{"class":327},[321,22989,22990],{"class":436},"\"这是私有权限下的静态函数调用\"",[321,22992,1376],{"class":327},[321,22994,1398],{"class":331},[321,22996,22997],{"class":323,"line":1885},[321,22998,2393],{"class":331},[321,23000,23001],{"class":323,"line":1899},[321,23002,2606],{"emptyLinePlaceholder":251},[321,23004,23005],{"class":323,"line":1904},[321,23006,2606],{"emptyLinePlaceholder":251},[321,23008,23009],{"class":323,"line":1933},[321,23010,4201],{"class":331},[321,23012,23013,23015,23017,23019,23021,23023],{"class":323,"line":1938},[321,23014,335],{"class":327},[321,23016,15776],{"class":2169},[321,23018,22410],{"class":331},[321,23020,377],{"class":327},[321,23022,523],{"class":380},[321,23024,1497],{"class":331},[321,23026,23027,23029,23031],{"class":323,"line":1955},[321,23028,5571],{"class":327},[321,23030,5795],{"class":2169},[321,23032,2182],{"class":331},[321,23034,23035],{"class":323,"line":1960},[321,23036,1752],{"class":331},[321,23038,23039],{"class":323,"line":1965},[321,23040,22821],{"class":390},[321,23042,23043],{"class":323,"line":1970},[321,23044,22826],{"class":390},[321,23046,23047],{"class":323,"line":1984},[321,23048,15520],{"class":331},[321,23050,23051,23053,23055],{"class":323,"line":1989},[321,23052,16073],{"class":331},[321,23054,11758],{"class":2169},[321,23056,5843],{"class":331},[321,23058,23059],{"class":323,"line":2783},[321,23060,22843],{"class":390},[321,23062,23063,23065,23067,23069],{"class":323,"line":2797},[321,23064,18726],{"class":2169},[321,23066,17939],{"class":331},[321,23068,11758],{"class":2169},[321,23070,5843],{"class":331},[321,23072,23073],{"class":323,"line":2805},[321,23074,23075],{"class":390},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[321,23077,23078],{"class":323,"line":2810},[321,23079,1771],{"class":331},[321,23081,23082,23084,23086],{"class":323,"line":2816},[321,23083,335],{"class":327},[321,23085,2179],{"class":2169},[321,23087,2182],{"class":331},[321,23089,23090],{"class":323,"line":2822},[321,23091,1752],{"class":331},[321,23093,23094,23096],{"class":323,"line":2827},[321,23095,5840],{"class":2169},[321,23097,5843],{"class":331},[321,23099,23100],{"class":323,"line":8155},[321,23101,1771],{"class":331},[292,23103,23105],{"id":23104},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22205,23107,23109],{"id":23108},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23111,23112],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23114,23115],{},"只有非静态成员变量才属于类的对象上",[23117,23118,23120],"h5",{"id":23119},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[312,23122,23124],{"className":314,"code":23123,"language":316,"meta":30,"style":30},"#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",[318,23125,23126,23133,23143,23149,23153,23157,23161,23169,23173,23177,23200,23204,23212,23216,23222],{"__ignoreMap":30},[321,23127,23128,23130],{"class":323,"line":324},[321,23129,2155],{"class":327},[321,23131,23132],{"class":436},"\u003Ciostraem>\n",[321,23134,23135,23137,23139,23141],{"class":323,"line":167},[321,23136,2163],{"class":327},[321,23138,2166],{"class":327},[321,23140,2170],{"class":2169},[321,23142,1497],{"class":331},[321,23144,23145,23147],{"class":323,"line":200},[321,23146,14901],{"class":327},[321,23148,15378],{"class":2169},[321,23150,23151],{"class":323,"line":1401},[321,23152,1752],{"class":331},[321,23154,23155],{"class":323,"line":1407},[321,23156,2606],{"emptyLinePlaceholder":251},[321,23158,23159],{"class":323,"line":1421},[321,23160,4201],{"class":331},[321,23162,23163,23165,23167],{"class":323,"line":1427},[321,23164,5571],{"class":327},[321,23166,5795],{"class":2169},[321,23168,2182],{"class":331},[321,23170,23171],{"class":323,"line":1518},[321,23172,1752],{"class":331},[321,23174,23175],{"class":323,"line":1524},[321,23176,15520],{"class":331},[321,23178,23179,23181,23183,23186,23188,23191,23193,23195,23197],{"class":323,"line":1536},[321,23180,1757],{"class":331},[321,23182,1376],{"class":327},[321,23184,23185],{"class":436},"\"size of p=\"",[321,23187,1376],{"class":327},[321,23189,23190],{"class":2169},"sizeoif",[321,23192,6746],{"class":331},[321,23194,1376],{"class":327},[321,23196,1445],{"class":331},[321,23198,23199],{"class":390}," \u002F\u002F查看这个空类的占用的内存空间\n",[321,23201,23202],{"class":323,"line":1818},[321,23203,1771],{"class":331},[321,23205,23206,23208,23210],{"class":323,"line":1823},[321,23207,335],{"class":327},[321,23209,2179],{"class":2169},[321,23211,2182],{"class":331},[321,23213,23214],{"class":323,"line":1829},[321,23215,1752],{"class":331},[321,23217,23218,23220],{"class":323,"line":1834},[321,23219,5840],{"class":2169},[321,23221,5843],{"class":331},[321,23223,23224],{"class":323,"line":1848},[321,23225,1771],{"class":331},[19,23227,23228],{},"输出结果为：size of p=1",[19,23230,23231],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23233,23234],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23117,23236,23238],{"id":23237},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[312,23240,23242],{"className":314,"code":23241,"language":316,"meta":30,"style":30},"#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",[318,23243,23244,23250,23260,23268,23272,23281,23285,23293,23297,23301,23320,23324,23328,23336,23340,23346],{"__ignoreMap":30},[321,23245,23246,23248],{"class":323,"line":324},[321,23247,2155],{"class":327},[321,23249,2158],{"class":436},[321,23251,23252,23254,23256,23258],{"class":323,"line":167},[321,23253,2163],{"class":327},[321,23255,2166],{"class":327},[321,23257,2170],{"class":2169},[321,23259,1497],{"class":331},[321,23261,23262,23264,23266],{"class":323,"line":200},[321,23263,14901],{"class":327},[321,23265,15776],{"class":2169},[321,23267,2880],{"class":331},[321,23269,23270],{"class":323,"line":1401},[321,23271,1752],{"class":331},[321,23273,23274,23276,23278],{"class":323,"line":1407},[321,23275,2191],{"class":327},[321,23277,15655],{"class":331},[321,23279,23280],{"class":390},"\u002F\u002F非静态成员变量\n",[321,23282,23283],{"class":323,"line":1421},[321,23284,4201],{"class":331},[321,23286,23287,23289,23291],{"class":323,"line":1427},[321,23288,5571],{"class":327},[321,23290,5795],{"class":2169},[321,23292,2182],{"class":331},[321,23294,23295],{"class":323,"line":1518},[321,23296,1752],{"class":331},[321,23298,23299],{"class":323,"line":1524},[321,23300,15520],{"class":331},[321,23302,23303,23305,23307,23309,23311,23313,23315,23317],{"class":323,"line":1536},[321,23304,1757],{"class":331},[321,23306,1376],{"class":327},[321,23308,23185],{"class":436},[321,23310,1579],{"class":327},[321,23312,6746],{"class":331},[321,23314,1376],{"class":327},[321,23316,1445],{"class":331},[321,23318,23319],{"class":390}," \u002F\u002F查看不是空对象时占用多少内存\n",[321,23321,23322],{"class":323,"line":1818},[321,23323,2606],{"emptyLinePlaceholder":251},[321,23325,23326],{"class":323,"line":1823},[321,23327,1771],{"class":331},[321,23329,23330,23332,23334],{"class":323,"line":1829},[321,23331,335],{"class":327},[321,23333,2179],{"class":2169},[321,23335,2182],{"class":331},[321,23337,23338],{"class":323,"line":1834},[321,23339,1752],{"class":331},[321,23341,23342,23344],{"class":323,"line":1848},[321,23343,5840],{"class":2169},[321,23345,5843],{"class":331},[321,23347,23348],{"class":323,"line":1853},[321,23349,1771],{"class":331},[19,23351,23352],{},"输出结果：size of p=4",[19,23354,23355],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[151,23357,23358],{},[154,23359,23360],{},"如果加上非静态成员变量，Person类修改如下",[312,23362,23364],{"className":314,"code":23363,"language":316,"meta":30,"style":30},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[318,23365,23366,23372,23376,23382,23390,23394,23399],{"__ignoreMap":30},[321,23367,23368,23370],{"class":323,"line":324},[321,23369,14901],{"class":327},[321,23371,15378],{"class":2169},[321,23373,23374],{"class":323,"line":167},[321,23375,1752],{"class":331},[321,23377,23378,23380],{"class":323,"line":200},[321,23379,2191],{"class":327},[321,23381,21599],{"class":331},[321,23383,23384,23386,23388],{"class":323,"line":1401},[321,23385,11227],{"class":327},[321,23387,2588],{"class":327},[321,23389,21606],{"class":331},[321,23391,23392],{"class":323,"line":1407},[321,23393,4201],{"class":331},[321,23395,23396],{"class":323,"line":1421},[321,23397,23398],{"class":390},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[321,23400,23401,23403,23405,23407,23409,23411],{"class":323,"line":1427},[321,23402,335],{"class":327},[321,23404,15776],{"class":2169},[321,23406,22619],{"class":331},[321,23408,377],{"class":327},[321,23410,523],{"class":380},[321,23412,1497],{"class":331},[19,23414,23415],{},"输出结果：4",[19,23417,23418],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[151,23420,23421],{"start":167},[154,23422,23423],{},"加上非静态成员函数",[312,23425,23427],{"className":314,"code":23426,"language":316,"meta":30,"style":30},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[318,23428,23429,23436,23440,23446,23454,23458,23462,23466],{"__ignoreMap":30},[321,23430,23431,23433],{"class":323,"line":324},[321,23432,14901],{"class":327},[321,23434,23435],{"class":2169},"  Person\n",[321,23437,23438],{"class":323,"line":167},[321,23439,1752],{"class":331},[321,23441,23442,23444],{"class":323,"line":200},[321,23443,2191],{"class":327},[321,23445,21599],{"class":331},[321,23447,23448,23450,23452],{"class":323,"line":1401},[321,23449,15116],{"class":327},[321,23451,11592],{"class":2169},[321,23453,2182],{"class":331},[321,23455,23456],{"class":323,"line":1407},[321,23457,2236],{"class":331},[321,23459,23460],{"class":323,"line":1421},[321,23461,2606],{"emptyLinePlaceholder":251},[321,23463,23464],{"class":323,"line":1427},[321,23465,2393],{"class":331},[321,23467,23468],{"class":323,"line":1518},[321,23469,4201],{"class":331},[19,23471,23472],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[151,23474,23475],{"start":200},[154,23476,23477],{},"加上静态成员函数",[312,23479,23481],{"className":314,"code":23480,"language":316,"meta":30,"style":30},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[318,23482,23483,23489,23493,23499,23507,23511,23515,23519,23530,23534,23538,23542],{"__ignoreMap":30},[321,23484,23485,23487],{"class":323,"line":324},[321,23486,14901],{"class":327},[321,23488,23435],{"class":2169},[321,23490,23491],{"class":323,"line":167},[321,23492,1752],{"class":331},[321,23494,23495,23497],{"class":323,"line":200},[321,23496,2191],{"class":327},[321,23498,21599],{"class":331},[321,23500,23501,23503,23505],{"class":323,"line":1401},[321,23502,15116],{"class":327},[321,23504,11592],{"class":2169},[321,23506,2182],{"class":331},[321,23508,23509],{"class":323,"line":1407},[321,23510,2236],{"class":331},[321,23512,23513],{"class":323,"line":1421},[321,23514,2606],{"emptyLinePlaceholder":251},[321,23516,23517],{"class":323,"line":1427},[321,23518,2393],{"class":331},[321,23520,23521,23523,23525,23528],{"class":323,"line":1518},[321,23522,11227],{"class":327},[321,23524,22774],{"class":327},[321,23526,23527],{"class":2169}," func1",[321,23529,2182],{"class":331},[321,23531,23532],{"class":323,"line":1524},[321,23533,2236],{"class":331},[321,23535,23536],{"class":323,"line":1536},[321,23537,2606],{"emptyLinePlaceholder":251},[321,23539,23540],{"class":323,"line":1818},[321,23541,2393],{"class":331},[321,23543,23544],{"class":323,"line":1823},[321,23545,4201],{"class":331},[19,23547,23415],{},[19,23549,23550],{},"解释：静态成员函数也不属于类上",[5333,23552,7881],{},{"title":30,"searchDepth":167,"depth":167,"links":23554},[23555,23561],{"id":14852,"depth":167,"text":14853,"children":23556},[23557,23558,23559,23560],{"id":14856,"depth":200,"text":14857},{"id":15581,"depth":200,"text":15582},{"id":15753,"depth":200,"text":15754},{"id":16212,"depth":200,"text":16213},{"id":18584,"depth":167,"text":18585,"children":23562},[23563,23564,23565,23566,23567,23568,23569,23570,23571],{"id":18596,"depth":200,"text":18597},{"id":18889,"depth":200,"text":18890},{"id":19380,"depth":200,"text":19381},{"id":20477,"depth":200,"text":20478},{"id":20900,"depth":200,"text":20901},{"id":21379,"depth":200,"text":21380},{"id":21754,"depth":200,"text":21755},{"id":22167,"depth":200,"text":22168},{"id":23104,"depth":200,"text":23105},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14817,"description":23572},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23579,"title":316,"body":23580,"description":23584,"extension":249,"meta":23585,"navigation":251,"path":23587,"seo":23588,"stem":23589,"__hash__":23590},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23581,"toc":23582},[],{"title":30,"searchDepth":167,"depth":167,"links":23583},[],null,{"category":23586},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":316,"description":23584},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23592,"title":23593,"body":23594,"description":30,"extension":249,"meta":24185,"navigation":251,"path":24186,"seo":24187,"stem":24188,"__hash__":24189},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23595,"toc":24167},[23596,23599,23603,23606,23609,23612,23630,23635,23638,23641,23644,23647,23652,23655,23660,23663,23666,23670,23673,23676,23682,23685,23703,23707,23711,23714,23719,23722,23726,23729,23742,23745,23749,23752,23755,23758,23783,23786,23795,23806,23821,23853,23857,23864,23872,23876,23879,23882,23887,23891,23894,23897,23902,23905,23909,23912,23915,23920,23923,23927,23932,23936,24003,24007,24010,24013,24016,24019,24022,24028,24049,24052,24066,24075,24079,24082,24085,24090,24093,24098,24103,24106,24109,24114,24119,24122,24127,24132,24135,24140,24145,24148,24151,24156,24159,24164],[10,23597,23593],{"id":23598},"_1强化学习基本认识",[14,23600,23602],{"id":23601},"_11什么是强化学习","1.1.什么是强化学习",[19,23604,23605],{},"强化学习有两部分组成：智能体和环境；",[19,23607,23608],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23610,23611],{},"强化学习与监督学习的区别:",[151,23613,23614,23617,23620,23623],{},[154,23615,23616],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[154,23618,23619],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[154,23621,23622],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[154,23624,23625,23626,23629],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[481,23627,23628],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23631,23632],{},[28,23633],{"alt":30,"src":23634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23636,23637],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23639,23640],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23642,23643],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23645,23646],{},"获取奖励",[19,23648,23649],{},[28,23650],{"alt":30,"src":23651},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23653,23654],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23656,23657],{},[28,23658],{"alt":30,"src":23659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23661,23662],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23664,23665],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23667,23669],{"id":23668},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23671,23672],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23674,23675],{},"具身智能中的应用",[19,23677,23678,23681],{},[481,23679,23680],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23683,23684],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23686,23687,23688,23691,23692,23695,23696,23699,23700],{},"机器人是",[481,23689,23690],{},"躯体","，深度学习是",[481,23693,23694],{},"神经元****网络","，VLA是",[481,23697,23698],{},"通用的行为逻辑","，而强化学习是",[481,23701,23702],{},"教练",[14,23704,23706],{"id":23705},"_13序列决策","1.3.序列决策",[292,23708,23710],{"id":23709},"_131智能体与环境","1.3.1.智能体与环境",[19,23712,23713],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23715,23716],{},[28,23717],{"alt":30,"src":23718},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23720,23721],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[292,23723,23725],{"id":23724},"_132奖励","1.3.2.奖励",[19,23727,23728],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23730,23731,23732,23741],{},"取某个策略的表现如何。强化学习的目的就是",[481,23733,23734,23735,23740],{},"最大化",[481,23736,23737],{},[481,23738,23739],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23743,23744],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[292,23746,23748],{"id":23747},"_133序列决策","1.3.3.序列决策",[19,23750,23751],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23753,23754],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23756,23757],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23759,23760,23764,23765,23767,23768,23770,23771,23773,23774,14002,23777,14002,23780],{},[23761,23762,23763],"em",{},"Ht"," = ",[23761,23766,928],{},"1*, a",[23761,23769,549],{},", r",[23761,23772,549],{},", . . . ,* ",[23761,23775,23776],{},"ot",[23761,23778,23779],{},", at ,",[23761,23781,23782],{},"rt",[19,23784,23785],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23787,23788,23764,23791,1864,23793,761],{},[23761,23789,23790],{},"st",[23761,23792,384],{},[23761,23794,23763],{},[19,23796,23797,23798,23801,23802,23805],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[481,23799,23800],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[481,23803,23804],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23807,23808,23809,23812,23813,23816,23817,23820],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[481,23810,23811],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[481,23814,23815],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23761,23818,23819],{},"S, A, T, R, Ω, O, γ",")。",[19,23822,23823,23824,23826,23827,23829,23830,332,23832,23835,23836,23838,23839,332,23842,23845,23846,23848,23849,23852],{},"其中 ",[23761,23825,1021],{}," 表示状态空间，为隐变量，",[23761,23828,564],{}," 为动作空间，",[23761,23831,1046],{},[23761,23833,23834],{},"s ′ |s, a",") 为状态转移概率，",[23761,23837,996],{}," 为奖励函数，",[23761,23840,23841],{},"Ω",[23761,23843,23844],{},"o|s, a",") 为观测概率，",[23761,23847,922],{}," 为观测空间，",[23761,23850,23851],{},"γ"," 为折扣因子。",[14,23854,23856],{"id":23855},"_14动作空间","1.4.动作空间",[19,23858,23859,23860,23863],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[481,23861,23862],{},"动作空间"," ，动作空间分为:",[151,23865,23866,23869],{},[154,23867,23868],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[154,23870,23871],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23873,23875],{"id":23874},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23877,23878],{},"由策略、价值函数、模型三部分组成",[19,23880,23881],{},"这三者组成马尔可夫决策过程",[19,23883,23884],{},[28,23885],{"alt":30,"src":23886},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[292,23888,23890],{"id":23889},"_151策略","1.5.1.策略",[19,23892,23893],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23895,23896],{},"策略可分为两种：",[19,23898,23899],{},[28,23900],{"alt":30,"src":23901},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23903,23904],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[292,23906,23908],{"id":23907},"_152价值函数","1.5.2.价值函数",[19,23910,23911],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23913,23914],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23916,23917],{},[28,23918],{"alt":30,"src":23919},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23921,23922],{},"进入某个状态采取的最优动作可以通过Q函数得到",[292,23924,23926],{"id":23925},"_153模型","1.5.3.模型",[19,23928,23929],{},[28,23930],{"alt":30,"src":23931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23933,23935],{"id":23934},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[469,23937,23938,23949],{},[472,23939,23940],{},[475,23941,23942,23946],{},[478,23943,23945],{"align":23944},"left","类型",[478,23947,23948],{"align":23944},"特点",[516,23950,23951,23961,23971,23981,23993],{},[475,23952,23953,23958],{},[521,23954,23955],{"align":23944},[481,23956,23957],{},"基于价值的智能体",[521,23959,23960],{"align":23944},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[475,23962,23963,23968],{},[521,23964,23965],{"align":23944},[481,23966,23967],{},"基于策略的智能体",[521,23969,23970],{"align":23944},"直接学习策略，没有学习价值函数",[475,23972,23973,23978],{},[521,23974,23975],{"align":23944},[481,23976,23977],{},"演员-评论员智能体",[521,23979,23980],{"align":23944},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[475,23982,23983,23988],{},[521,23984,23985],{"align":23944},[481,23986,23987],{},"有模型强化学习智能体",[521,23989,23990],{"align":23944},[28,23991],{"alt":30,"src":23992},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[475,23994,23995,24000],{},[521,23996,23997],{"align":23944},[481,23998,23999],{},"免模型强化学习智能体",[521,24001,24002],{"align":23944},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24004,24006],{"id":24005},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24008,24009],{},"学习和规划是序列决策的两个基本问题",[19,24011,24012],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24014,24015],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24017,24018],{},"强化学习用到的库：Gym",[19,24020,24021],{},"Gym可以检验强化学习算法的优劣",[19,24023,24024,24027],{},[481,24025,24026],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[312,24029,24033],{"className":24030,"code":24031,"language":24032,"meta":30,"style":30},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[318,24034,24035],{"__ignoreMap":30},[321,24036,24037,24040,24043,24046],{"class":323,"line":324},[321,24038,24039],{"class":2169},"pip",[321,24041,24042],{"class":436}," install",[321,24044,24045],{"class":436}," gym==",[321,24047,24048],{"class":380},"0.25.2\n",[19,24050,24051],{},"显示图形界面需要",[312,24053,24055],{"className":24030,"code":24054,"language":24032,"meta":30,"style":30},"pip install pygame\n",[318,24056,24057],{"__ignoreMap":30},[321,24058,24059,24061,24063],{"class":323,"line":324},[321,24060,24039],{"class":2169},[321,24062,24042],{"class":436},[321,24064,24065],{"class":436}," pygame\n",[19,24067,24068,24069],{},"有关Gym库的相关文档介绍：",[570,24070,24074],{"href":24071,"rel":24072},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24073],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24076,24078],{"id":24077},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24080,24081],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24083,24084],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24086,24087],{},[28,24088],{"alt":30,"src":24089},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24091,24092],{},"折扣率需要自己来设定",[19,24094,24095],{},[28,24096],{"alt":30,"src":24097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[151,24099,24100],{},[154,24101,24102],{},"状态转移函数：",[19,24104,24105],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24107,24108],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24110,24111],{},[28,24112],{"alt":30,"src":24113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[151,24115,24116],{"start":167},[154,24117,24118],{},"动作价值函数：",[19,24120,24121],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24123,24124],{},[28,24125],{"alt":30,"src":24126},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[151,24128,24129],{"start":200},[154,24130,24131],{},"最优动作价值函数：",[19,24133,24134],{},"这个函数是对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,24136,24137],{},[28,24138],{"alt":30,"src":24139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[151,24141,24142],{"start":1401},[154,24143,24144],{},"状态价值函数:",[19,24146,24147],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24149,24150],{},"它衡量的是“一个具体动作”的长期价值",[19,24152,24153],{},[28,24154],{"alt":30,"src":24155},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24157,24158],{},"几个价值函数之间的比较：",[19,24160,24161],{},[28,24162],{"alt":30,"src":24163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5333,24165,24166],{},"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":30,"searchDepth":167,"depth":167,"links":24168},[24169,24170,24171,24176,24177,24182,24183,24184],{"id":23601,"depth":167,"text":23602},{"id":23668,"depth":167,"text":23669},{"id":23705,"depth":167,"text":23706,"children":24172},[24173,24174,24175],{"id":23709,"depth":200,"text":23710},{"id":23724,"depth":200,"text":23725},{"id":23747,"depth":200,"text":23748},{"id":23855,"depth":167,"text":23856},{"id":23874,"depth":167,"text":23875,"children":24178},[24179,24180,24181],{"id":23889,"depth":200,"text":23890},{"id":23907,"depth":200,"text":23908},{"id":23925,"depth":200,"text":23926},{"id":23934,"depth":167,"text":23935},{"id":24005,"depth":167,"text":24006},{"id":24077,"depth":167,"text":24078},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23593,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24191,"title":24192,"body":24193,"description":24200,"extension":249,"meta":24211,"navigation":251,"path":24212,"seo":24213,"stem":24214,"__hash__":24215},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24194,"toc":24209},[24195,24198,24201,24206],[10,24196,24192],{"id":24197},"_2马尔可夫决策过程",[19,24199,24200],{},"这是强化学习的基本框架",[19,24202,24203],{},[28,24204],{"alt":30,"src":24205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24207,24208],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":30,"searchDepth":167,"depth":167,"links":24210},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24192,"description":24200},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24217,"title":24218,"body":24219,"description":30,"extension":249,"meta":24335,"navigation":251,"path":24336,"seo":24337,"stem":24338,"__hash__":24339},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24220,"toc":24330},[24221,24224,24228,24231,24236,24241,24244,24249,24252,24257,24260,24264,24269,24272,24277,24282,24287,24290,24294,24299,24302,24307,24312,24317,24322,24325],[10,24222,24218],{"id":24223},"_3动作价值函数",[14,24225,24227],{"id":24226},"_31dqn","3.1.DQN",[19,24229,24230],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24232,24233],{},[28,24234],{"alt":30,"src":24235},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24237,24238],{},[28,24239],{"alt":30,"src":24240},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24242,24243],{},"DQN算法的描述：",[19,24245,24246],{},[28,24247],{"alt":30,"src":24248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24250,24251],{},"这里的Dense指的是全连接层",[19,24253,24254],{},[28,24255],{"alt":30,"src":24256},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24258,24259],{},"当前观测的状态为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,24261,24263],{"id":24262},"_32dqn的举例","3.2.DQN的举例",[19,24265,24266],{},[28,24267],{"alt":30,"src":24268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24270,24271],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24273,24274],{},[28,24275],{"alt":30,"src":24276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24278,24279],{},[28,24280],{"alt":30,"src":24281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24283,24284],{},[28,24285],{"alt":30,"src":24286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24288,24289],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24291,24293],{"id":24292},"_33td算法","3.3.TD算法",[19,24295,24296],{},[28,24297],{"alt":30,"src":24298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24300,24301],{},"强化学习TD算法公式的粗略解释：",[19,24303,24304],{},[28,24305],{"alt":30,"src":24306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24308,24309],{},[28,24310],{"alt":30,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24313,24314],{},[28,24315],{"alt":30,"src":24316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24318,24319],{},[28,24320],{"alt":30,"src":24321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24323,24324],{},"TD算法总结：",[19,24326,24327],{},[28,24328],{"alt":30,"src":24329},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":30,"searchDepth":167,"depth":167,"links":24331},[24332,24333,24334],{"id":24226,"depth":167,"text":24227},{"id":24262,"depth":167,"text":24263},{"id":24292,"depth":167,"text":24293},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24218,"description":30},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":4,"title":5,"body":24341,"description":30,"extension":249,"meta":24515,"navigation":251,"path":252,"seo":24516,"stem":254,"__hash__":255},{"type":7,"value":24342,"toc":24511},[24343,24345,24347,24349,24351,24355,24359,24361,24365,24369,24371,24375,24377,24381,24383,24387,24389,24393,24395,24399,24403,24405,24409,24411,24413,24417,24419,24423,24427,24429,24431,24433,24437,24441,24443,24447,24451,24453,24457,24459,24461,24465,24467,24471,24473,24477,24481,24483,24487,24491,24493,24497,24499,24503,24505],[10,24344,5],{"id":12},[14,24346,17],{"id":16},[19,24348,21],{},[19,24350,24],{},[19,24352,24353],{},[28,24354],{"alt":30,"src":31},[19,24356,24357],{},[28,24358],{"alt":30,"src":36},[19,24360,39],{},[19,24362,24363],{},[28,24364],{"alt":30,"src":44},[19,24366,24367],{},[28,24368],{"alt":30,"src":49},[19,24370,52],{},[19,24372,24373],{},[28,24374],{"alt":30,"src":57},[19,24376,60],{},[19,24378,24379],{},[28,24380],{"alt":30,"src":65},[19,24382,68],{},[19,24384,24385],{},[28,24386],{"alt":30,"src":73},[19,24388,76],{},[19,24390,24391],{},[28,24392],{"alt":30,"src":81},[19,24394,84],{},[19,24396,24397],{},[28,24398],{"alt":30,"src":89},[19,24400,24401],{},[28,24402],{"alt":30,"src":94},[19,24404,97],{},[19,24406,24407],{},[28,24408],{"alt":30,"src":102},[19,24410,105],{},[19,24412,108],{},[19,24414,24415],{},[28,24416],{"alt":30,"src":113},[19,24418,116],{},[19,24420,24421],{},[28,24422],{"alt":30,"src":121},[19,24424,24425],{},[28,24426],{"alt":30,"src":126},[14,24428,130],{"id":129},[19,24430,133],{},[19,24432,136],{},[19,24434,24435],{},[28,24436],{"alt":30,"src":141},[19,24438,24439],{},[28,24440],{"alt":30,"src":146},[19,24442,149],{},[151,24444,24445],{},[154,24446,156],{},[19,24448,24449],{},[28,24450],{"alt":30,"src":161},[19,24452,164],{},[151,24454,24455],{"start":167},[154,24456,170],{},[19,24458,173],{},[19,24460,176],{},[19,24462,24463],{},[28,24464],{"alt":30,"src":181},[19,24466,184],{},[19,24468,24469],{},[28,24470],{"alt":30,"src":189},[19,24472,192],{},[19,24474,24475],{},[28,24476],{"alt":30,"src":197},[151,24478,24479],{"start":200},[154,24480,203],{},[19,24482,206],{},[19,24484,24485],{},[28,24486],{"alt":30,"src":211},[19,24488,24489],{},[28,24490],{"alt":30,"src":216},[19,24492,219],{},[19,24494,24495],{},[28,24496],{"alt":30,"src":224},[19,24498,227],{},[19,24500,24501],{},[28,24502],{"alt":30,"src":232},[19,24504,235],{},[19,24506,24507,241,24509],{},[28,24508],{"alt":30,"src":240},[28,24510],{"alt":30,"src":244},{"title":30,"searchDepth":167,"depth":167,"links":24512},[24513,24514],{"id":16,"depth":167,"text":17},{"id":129,"depth":167,"text":130},{},{"title":5,"description":30},{"id":24518,"title":24519,"body":24520,"description":24527,"extension":249,"meta":24577,"navigation":251,"path":24578,"seo":24579,"stem":24580,"__hash__":24581},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24521,"toc":24573},[24522,24525,24528,24532,24535,24540,24544,24547,24552,24555,24560,24565,24568],[10,24523,24519],{"id":24524},"_5alphago算法",[19,24526,24527],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24529,24531],{"id":24530},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24533,24534],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24536,24537],{},[28,24538],{"alt":30,"src":24539},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24541,24543],{"id":24542},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24545,24546],{},"采用强化学习的方式训练策略网络",[19,24548,24549],{},[28,24550],{"alt":30,"src":24551},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24553,24554],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24556,24557],{},[28,24558],{"alt":30,"src":24559},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24561,24562],{},[28,24563],{"alt":30,"src":24564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24566,24567],{},"强化学习训练策略网络的总结：",[19,24569,24570],{},[28,24571],{"alt":30,"src":24572},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":30,"searchDepth":167,"depth":167,"links":24574},[24575,24576],{"id":24530,"depth":167,"text":24531},{"id":24542,"depth":167,"text":24543},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24519,"description":24527},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24583,"title":24584,"body":24585,"description":24592,"extension":249,"meta":24595,"navigation":251,"path":24596,"seo":24597,"stem":24598,"__hash__":24599},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24586,"toc":24593},[24587,24590],[10,24588,24584],{"id":24589},"_6价值网络",[19,24591,24592],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":30,"searchDepth":167,"depth":167,"links":24594},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24584,"description":24592},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24601,"title":24602,"body":24603,"description":24607,"extension":249,"meta":24608,"navigation":251,"path":24609,"seo":24610,"stem":24611,"__hash__":24612},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24604,"toc":24605},[],{"title":30,"searchDepth":167,"depth":167,"links":24606},[],"记录自己的强化学习笔记。",{"category":23586},"\u002Fwiki\u002F2025-12-04",{"title":24602,"description":24607},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24614,"title":24615,"body":24616,"description":23584,"extension":249,"meta":24655,"navigation":251,"path":24656,"seo":24657,"stem":24658,"__hash__":24659},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24617,"toc":24653},[24618,24621,24624,24630,24633,24639,24642,24647,24650],[10,24619,24615],{"id":24620},"_1-项目概览与官方资源",[19,24622,24623],{},"官方文档：",[19,24625,24626],{},[570,24627,24628],{"href":24628,"rel":24629},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24073],[19,24631,24632],{},"官方代码仓库：",[19,24634,24635],{},[570,24636,24637],{"href":24637,"rel":24638},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24073],[19,24640,24641],{},"复现大体流程：",[19,24643,24644],{},[28,24645],{"alt":30,"src":24646},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24648,24649],{},"本教程的目标是打通这条链路：",[19,24651,24652],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":30,"searchDepth":167,"depth":167,"links":24654},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24615,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24661,"title":24662,"body":24663,"description":23584,"extension":249,"meta":24779,"navigation":251,"path":24780,"seo":24781,"stem":24782,"__hash__":24783},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24664,"toc":24774},[24665,24668,24672,24675,24682,24686,24689,24698,24708,24712,24742,24745,24771],[10,24666,24662],{"id":24667},"_2-环境准备与设备连接",[14,24669,24671],{"id":24670},"_21-系统与环境","2.1 系统与环境",[19,24673,24674],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24676,24677,24678,24681],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[318,24679,24680],{},"lerobot"," 依赖。",[14,24683,24685],{"id":24684},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24687,24688],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[312,24690,24692],{"className":24030,"code":24691,"language":24032,"meta":30,"style":30},"lerobot-find-out\n",[318,24693,24694],{"__ignoreMap":30},[321,24695,24696],{"class":323,"line":324},[321,24697,24691],{"class":2169},[19,24699,24700,24701,544,24704,24707],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[318,24702,24703],{},"\u002Fdev\u002FttyACM0",[318,24705,24706],{},"\u002Fdev\u002FttyACM1","）。",[14,24709,24711],{"id":24710},"_23-串口授权","2.3 串口授权",[312,24713,24715],{"className":24030,"code":24714,"language":24032,"meta":30,"style":30},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[318,24716,24717,24731],{"__ignoreMap":30},[321,24718,24719,24722,24725,24728],{"class":323,"line":324},[321,24720,24721],{"class":2169},"sudo",[321,24723,24724],{"class":436}," chmod",[321,24726,24727],{"class":380}," 666",[321,24729,24730],{"class":436}," \u002Fdev\u002FttyACM0\n",[321,24732,24733,24735,24737,24739],{"class":323,"line":167},[321,24734,24721],{"class":2169},[321,24736,24724],{"class":436},[321,24738,24727],{"class":380},[321,24740,24741],{"class":436}," \u002Fdev\u002FttyACM1\n",[19,24743,24744],{},"说明：",[1339,24746,24747,24752,24758,24768],{},[154,24748,24749,24751],{},[318,24750,24721],{},"：以 root 权限执行命令。",[154,24753,24754,24757],{},[318,24755,24756],{},"chmod","：修改设备节点权限。",[154,24759,24760,24763,24764,24767],{},[318,24761,24762],{},"666","：",[318,24765,24766],{},"rw-rw-rw-","，所有用户可读写。",[154,24769,24770],{},"串口号必须替换为你机器上的真实端口。",[5333,24772,24773],{},"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":30,"searchDepth":167,"depth":167,"links":24775},[24776,24777,24778],{"id":24670,"depth":167,"text":24671},{"id":24684,"depth":167,"text":24685},{"id":24710,"depth":167,"text":24711},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24662,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24785,"title":24786,"body":24787,"description":23584,"extension":249,"meta":24948,"navigation":251,"path":24949,"seo":24950,"stem":24951,"__hash__":24952},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24788,"toc":24944},[24789,24793,24797,24803,24806,24863,24866,24870,24873,24941],[10,24790,24792],{"id":24791},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24794,24796],{"id":24795},"_31-配置电机-id","3.1 配置电机 ID",[19,24798,24799,24800,24802],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[318,24801,549],{},"，需要改成机械臂链路里不冲突的编号。",[19,24804,24805],{},"方式一：用 LeRobot 命令逐步写入。",[312,24807,24809],{"className":24030,"code":24808,"language":24032,"meta":30,"style":30},"# 主臂舵机配置 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",[318,24810,24811,24816,24824,24831,24836,24840,24845,24851,24858],{"__ignoreMap":30},[321,24812,24813],{"class":323,"line":324},[321,24814,24815],{"class":390},"# 主臂舵机配置 ID\n",[321,24817,24818,24821],{"class":323,"line":167},[321,24819,24820],{"class":2169},"lerobot-setup-motors",[321,24822,24823],{"class":380}," \\\n",[321,24825,24826,24829],{"class":323,"line":200},[321,24827,24828],{"class":380},"  --teleop.type=so101_leader",[321,24830,24823],{"class":380},[321,24832,24833],{"class":323,"line":1401},[321,24834,24835],{"class":380},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[321,24837,24838],{"class":323,"line":1407},[321,24839,2606],{"emptyLinePlaceholder":251},[321,24841,24842],{"class":323,"line":1421},[321,24843,24844],{"class":390},"# 从臂舵机配置 ID\n",[321,24846,24847,24849],{"class":323,"line":1427},[321,24848,24820],{"class":2169},[321,24850,24823],{"class":380},[321,24852,24853,24856],{"class":323,"line":1518},[321,24854,24855],{"class":380},"  --robot.type=so101_follower",[321,24857,24823],{"class":380},[321,24859,24860],{"class":323,"line":1524},[321,24861,24862],{"class":380},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24864,24865],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24867,24869],{"id":24868},"_32-机械臂校准","3.2 机械臂校准",[19,24871,24872],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[312,24874,24876],{"className":24030,"code":24875,"language":24032,"meta":30,"style":30},"# 主臂校准\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",[318,24877,24878,24883,24890,24896,24903,24908,24912,24917,24923,24929,24936],{"__ignoreMap":30},[321,24879,24880],{"class":323,"line":324},[321,24881,24882],{"class":390},"# 主臂校准\n",[321,24884,24885,24888],{"class":323,"line":167},[321,24886,24887],{"class":2169},"lerobot-calibrate",[321,24889,24823],{"class":380},[321,24891,24892,24894],{"class":323,"line":200},[321,24893,24828],{"class":380},[321,24895,24823],{"class":380},[321,24897,24898,24901],{"class":323,"line":1401},[321,24899,24900],{"class":380},"  --teleop.port=\u002Fdev\u002FttyACM0",[321,24902,24823],{"class":380},[321,24904,24905],{"class":323,"line":1407},[321,24906,24907],{"class":380},"  --teleop.id=my_awesome_leader_arm\n",[321,24909,24910],{"class":323,"line":1421},[321,24911,2606],{"emptyLinePlaceholder":251},[321,24913,24914],{"class":323,"line":1427},[321,24915,24916],{"class":390},"# 从臂校准\n",[321,24918,24919,24921],{"class":323,"line":1518},[321,24920,24887],{"class":2169},[321,24922,24823],{"class":380},[321,24924,24925,24927],{"class":323,"line":1524},[321,24926,24855],{"class":380},[321,24928,24823],{"class":380},[321,24930,24931,24934],{"class":323,"line":1536},[321,24932,24933],{"class":380},"  --robot.port=\u002Fdev\u002FttyACM1",[321,24935,24823],{"class":380},[321,24937,24938],{"class":323,"line":1818},[321,24939,24940],{"class":380},"  --robot.id=my_awesome_follower_arm\n",[5333,24942,24943],{},"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":30,"searchDepth":167,"depth":167,"links":24945},[24946,24947],{"id":24795,"depth":167,"text":24796},{"id":24868,"depth":167,"text":24869},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24786,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24954,"title":24955,"body":24956,"description":23584,"extension":249,"meta":25147,"navigation":251,"path":25148,"seo":25149,"stem":25150,"__hash__":25151},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24957,"toc":25143},[24958,24961,24965,25012,25016,25029,25092,25095,25140],[10,24959,24955],{"id":24960},"_4-遥操与相机接入",[14,24962,24964],{"id":24963},"_41-不带相机遥操","4.1 不带相机遥操",[312,24966,24968],{"className":24030,"code":24967,"language":24032,"meta":30,"style":30},"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",[318,24969,24970,24977,24983,24989,24996,25002,25008],{"__ignoreMap":30},[321,24971,24972,24975],{"class":323,"line":324},[321,24973,24974],{"class":2169},"lerobot-teleoperate",[321,24976,24823],{"class":380},[321,24978,24979,24981],{"class":323,"line":167},[321,24980,24855],{"class":380},[321,24982,24823],{"class":380},[321,24984,24985,24987],{"class":323,"line":200},[321,24986,24933],{"class":380},[321,24988,24823],{"class":380},[321,24990,24991,24994],{"class":323,"line":1401},[321,24992,24993],{"class":380},"  --robot.id=my_awesome_follower_arm",[321,24995,24823],{"class":380},[321,24997,24998,25000],{"class":323,"line":1407},[321,24999,24828],{"class":380},[321,25001,24823],{"class":380},[321,25003,25004,25006],{"class":323,"line":1421},[321,25005,24900],{"class":380},[321,25007,24823],{"class":380},[321,25009,25010],{"class":323,"line":1427},[321,25011,24907],{"class":380},[14,25013,25015],{"id":25014},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[312,25017,25019],{"className":24030,"code":25018,"language":24032,"meta":30,"style":30},"lerobot-find-cameras opencv\n",[318,25020,25021],{"__ignoreMap":30},[321,25022,25023,25026],{"class":323,"line":324},[321,25024,25025],{"class":2169},"lerobot-find-cameras",[321,25027,25028],{"class":436}," opencv\n",[312,25030,25032],{"className":24030,"code":25031,"language":24032,"meta":30,"style":30},"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",[318,25033,25034,25040,25046,25052,25058,25068,25074,25080,25087],{"__ignoreMap":30},[321,25035,25036,25038],{"class":323,"line":324},[321,25037,24974],{"class":2169},[321,25039,24823],{"class":380},[321,25041,25042,25044],{"class":323,"line":167},[321,25043,24855],{"class":380},[321,25045,24823],{"class":380},[321,25047,25048,25050],{"class":323,"line":200},[321,25049,24933],{"class":380},[321,25051,24823],{"class":380},[321,25053,25054,25056],{"class":323,"line":1401},[321,25055,24993],{"class":380},[321,25057,24823],{"class":380},[321,25059,25060,25063,25066],{"class":323,"line":1407},[321,25061,25062],{"class":380},"  --robot.cameras=",[321,25064,25065],{"class":436},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[321,25067,24823],{"class":380},[321,25069,25070,25072],{"class":323,"line":1421},[321,25071,24828],{"class":380},[321,25073,24823],{"class":380},[321,25075,25076,25078],{"class":323,"line":1427},[321,25077,24900],{"class":380},[321,25079,24823],{"class":380},[321,25081,25082,25085],{"class":323,"line":1518},[321,25083,25084],{"class":380},"  --teleop.id=my_awesome_leader_arm",[321,25086,24823],{"class":380},[321,25088,25089],{"class":323,"line":1524},[321,25090,25091],{"class":380},"  --display_data=true\n",[19,25093,25094],{},"相机参数说明：",[1339,25096,25097,25103,25109,25118,25128,25134],{},[154,25098,25099,25102],{},[318,25100,25101],{},"front","：相机名称。",[154,25104,25105,25108],{},[318,25106,25107],{},"type: opencv","：相机驱动类型。",[154,25110,25111,25114,25115,24707],{},[318,25112,25113],{},"index_or_path","：设备编号或设备路径（如 ",[318,25116,25117],{},"\u002Fdev\u002Fvideo4",[154,25119,25120,25123,25124,25127],{},[318,25121,25122],{},"width"," \u002F ",[318,25125,25126],{},"height","：图像分辨率。",[154,25129,25130,25133],{},[318,25131,25132],{},"fps","：采样帧率。",[154,25135,25136,25139],{},[318,25137,25138],{},"--display_data=true","：启用实时可视化。",[5333,25141,25142],{},"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":30,"searchDepth":167,"depth":167,"links":25144},[25145,25146],{"id":24963,"depth":167,"text":24964},{"id":25014,"depth":167,"text":25015},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24955,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25153,"title":25154,"body":25155,"description":23584,"extension":249,"meta":25327,"navigation":251,"path":25328,"seo":25329,"stem":25330,"__hash__":25331},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25156,"toc":25322},[25157,25161,25165,25170,25175,25178,25220,25226,25230,25279,25284,25288,25291,25299,25304,25309,25314,25319],[10,25158,25160],{"id":25159},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25162,25164],{"id":25163},"_51-生成访问令牌","5.1 生成访问令牌",[19,25166,25167],{},[28,25168],{"alt":30,"src":25169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25171,25172],{},[28,25173],{"alt":30,"src":25174},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25176,25177],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[312,25179,25181],{"className":24030,"code":25180,"language":24032,"meta":30,"style":30},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[318,25182,25183,25196],{"__ignoreMap":30},[321,25184,25185,25188,25191,25193],{"class":323,"line":324},[321,25186,25187],{"class":327},"export",[321,25189,25190],{"class":331}," HF_TOKEN",[321,25192,377],{"class":327},[321,25194,25195],{"class":436},"\"your_huggingface_token\"\n",[321,25197,25198,25201,25204,25207,25210,25212,25215,25217],{"class":323,"line":167},[321,25199,25200],{"class":2169},"hf",[321,25202,25203],{"class":436}," auth",[321,25205,25206],{"class":436}," login",[321,25208,25209],{"class":380}," --token",[321,25211,9931],{"class":436},[321,25213,25214],{"class":331},"$HF_TOKEN",[321,25216,583],{"class":436},[321,25218,25219],{"class":380}," --add-to-git-credential\n",[19,25221,25222,25225],{},[318,25223,25224],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25227,25229],{"id":25228},"_52-验证登录","5.2 验证登录",[312,25231,25233],{"className":24030,"code":25232,"language":24032,"meta":30,"style":30},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[318,25234,25235,25266],{"__ignoreMap":30},[321,25236,25237,25240,25242,25245,25247,25249,25252,25255,25258,25261,25264],{"class":323,"line":324},[321,25238,25239],{"class":331},"HF_USER",[321,25241,377],{"class":327},[321,25243,25244],{"class":331},"$(",[321,25246,25200],{"class":2169},[321,25248,25203],{"class":436},[321,25250,25251],{"class":436}," whoami",[321,25253,25254],{"class":327}," |",[321,25256,25257],{"class":2169}," head",[321,25259,25260],{"class":380}," -n",[321,25262,25263],{"class":380}," 1",[321,25265,338],{"class":331},[321,25267,25268,25271,25273,25276],{"class":323,"line":167},[321,25269,25270],{"class":380},"echo",[321,25272,9931],{"class":436},[321,25274,25275],{"class":331},"$HF_USER",[321,25277,25278],{"class":436},"\"\n",[19,25280,25281],{},[28,25282],{"alt":30,"src":25283},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25285,25287],{"id":25286},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25289,25290],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1339,25292,25293,25296],{},[154,25294,25295],{},"Dataset Repo（用于上传演示数据）",[154,25297,25298],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25300,25301],{},[28,25302],{"alt":30,"src":25303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25305,25306],{},[28,25307],{"alt":30,"src":25308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25310,25311],{},[28,25312],{"alt":30,"src":25313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25315,25316],{},[28,25317],{"alt":30,"src":25318},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5333,25320,25321],{},"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":30,"searchDepth":167,"depth":167,"links":25323},[25324,25325,25326],{"id":25163,"depth":167,"text":25164},{"id":25228,"depth":167,"text":25229},{"id":25286,"depth":167,"text":25287},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25154,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25333,"title":25334,"body":25335,"description":23584,"extension":249,"meta":25532,"navigation":251,"path":25533,"seo":25534,"stem":25535,"__hash__":25536},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25336,"toc":25527},[25337,25341,25345,25441,25449,25454,25458,25474,25477,25481,25524],[10,25338,25340],{"id":25339},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25342,25344],{"id":25343},"_61-录制示教数据","6.1 录制示教数据",[312,25346,25348],{"className":24030,"code":25347,"language":24032,"meta":30,"style":30},"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",[318,25349,25350,25357,25363,25369,25375,25384,25390,25396,25402,25409,25419,25426,25436],{"__ignoreMap":30},[321,25351,25352,25355],{"class":323,"line":324},[321,25353,25354],{"class":2169},"lerobot-record",[321,25356,24823],{"class":380},[321,25358,25359,25361],{"class":323,"line":167},[321,25360,24855],{"class":380},[321,25362,24823],{"class":380},[321,25364,25365,25367],{"class":323,"line":200},[321,25366,24933],{"class":380},[321,25368,24823],{"class":380},[321,25370,25371,25373],{"class":323,"line":1401},[321,25372,24993],{"class":380},[321,25374,24823],{"class":380},[321,25376,25377,25379,25382],{"class":323,"line":1407},[321,25378,25062],{"class":380},[321,25380,25381],{"class":436},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[321,25383,24823],{"class":380},[321,25385,25386,25388],{"class":323,"line":1421},[321,25387,24828],{"class":380},[321,25389,24823],{"class":380},[321,25391,25392,25394],{"class":323,"line":1427},[321,25393,24900],{"class":380},[321,25395,24823],{"class":380},[321,25397,25398,25400],{"class":323,"line":1518},[321,25399,25084],{"class":380},[321,25401,24823],{"class":380},[321,25403,25404,25407],{"class":323,"line":1524},[321,25405,25406],{"class":380},"  --display_data=true",[321,25408,24823],{"class":380},[321,25410,25411,25414,25417],{"class":323,"line":1536},[321,25412,25413],{"class":380},"  --dataset.repo_id=",[321,25415,25416],{"class":436},"\"Embodied-AI-6\u002Fso101_test\"",[321,25418,24823],{"class":380},[321,25420,25421,25424],{"class":323,"line":1818},[321,25422,25423],{"class":380},"  --dataset.num_episodes=10",[321,25425,24823],{"class":380},[321,25427,25428,25431,25434],{"class":323,"line":1823},[321,25429,25430],{"class":380},"  --dataset.single_task=",[321,25432,25433],{"class":436},"\"Grab the green cube\"",[321,25435,24823],{"class":380},[321,25437,25438],{"class":323,"line":1829},[321,25439,25440],{"class":380},"  --resume=true\n",[1339,25442,25443],{},[154,25444,25445,25448],{},[318,25446,25447],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25450,25451],{},[28,25452],{"alt":30,"src":25453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25455,25457],{"id":25456},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[312,25459,25461],{"className":24030,"code":25460,"language":24032,"meta":30,"style":30},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[318,25462,25463],{"__ignoreMap":30},[321,25464,25465,25468,25471],{"class":323,"line":324},[321,25466,25467],{"class":2169},"rm",[321,25469,25470],{"class":380}," -rf",[321,25472,25473],{"class":436}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25475,25476],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25478,25480],{"id":25479},"_63-回放指定-episode","6.3 回放指定 episode",[312,25482,25484],{"className":24030,"code":25483,"language":24032,"meta":30,"style":30},"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",[318,25485,25486,25493,25499,25505,25511,25519],{"__ignoreMap":30},[321,25487,25488,25491],{"class":323,"line":324},[321,25489,25490],{"class":2169},"lerobot-replay",[321,25492,24823],{"class":380},[321,25494,25495,25497],{"class":323,"line":167},[321,25496,24855],{"class":380},[321,25498,24823],{"class":380},[321,25500,25501,25503],{"class":323,"line":200},[321,25502,24933],{"class":380},[321,25504,24823],{"class":380},[321,25506,25507,25509],{"class":323,"line":1401},[321,25508,24993],{"class":380},[321,25510,24823],{"class":380},[321,25512,25513,25515,25517],{"class":323,"line":1407},[321,25514,25413],{"class":380},[321,25516,25416],{"class":436},[321,25518,24823],{"class":380},[321,25520,25521],{"class":323,"line":1421},[321,25522,25523],{"class":380},"  --dataset.episode=0\n",[5333,25525,25526],{},"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":30,"searchDepth":167,"depth":167,"links":25528},[25529,25530,25531],{"id":25343,"depth":167,"text":25344},{"id":25456,"depth":167,"text":25457},{"id":25479,"depth":167,"text":25480},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25334,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25538,"title":25539,"body":25540,"description":23584,"extension":249,"meta":25668,"navigation":251,"path":25669,"seo":25670,"stem":25671,"__hash__":25672},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25541,"toc":25666},[25542,25546,25609,25612,25659,25664],[10,25543,25545],{"id":25544},"_7-act-模型训练","7. ACT 模型训练",[312,25547,25549],{"className":24030,"code":25548,"language":24032,"meta":30,"style":30},"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",[318,25550,25551,25558,25566,25573,25580,25587,25594,25601],{"__ignoreMap":30},[321,25552,25553,25556],{"class":323,"line":324},[321,25554,25555],{"class":2169},"lerobot-train",[321,25557,24823],{"class":380},[321,25559,25560,25562,25564],{"class":323,"line":167},[321,25561,25413],{"class":380},[321,25563,25416],{"class":436},[321,25565,24823],{"class":380},[321,25567,25568,25571],{"class":323,"line":200},[321,25569,25570],{"class":380},"  --policy.type=act",[321,25572,24823],{"class":380},[321,25574,25575,25578],{"class":323,"line":1401},[321,25576,25577],{"class":380},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[321,25579,24823],{"class":380},[321,25581,25582,25585],{"class":323,"line":1407},[321,25583,25584],{"class":380},"  --job_name=act_so101_test",[321,25586,24823],{"class":380},[321,25588,25589,25592],{"class":323,"line":1421},[321,25590,25591],{"class":380},"  --policy.device=cuda",[321,25593,24823],{"class":380},[321,25595,25596,25599],{"class":323,"line":1427},[321,25597,25598],{"class":380},"  --wandb.enable=false",[321,25600,24823],{"class":380},[321,25602,25603,25606],{"class":323,"line":1518},[321,25604,25605],{"class":380},"  --policy.repo_id=",[321,25607,25608],{"class":436},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25610,25611],{},"参数说明：",[1339,25613,25614,25620,25626,25632,25638,25647,25653],{},[154,25615,25616,25619],{},[318,25617,25618],{},"--dataset.repo_id","：训练数据集仓库。",[154,25621,25622,25625],{},[318,25623,25624],{},"--policy.type=act","：策略模型类型为 ACT。",[154,25627,25628,25631],{},[318,25629,25630],{},"--output_dir","：本地训练输出目录。",[154,25633,25634,25637],{},[318,25635,25636],{},"--job_name","：训练任务名称。",[154,25639,25640,25643,25644,24707],{},[318,25641,25642],{},"--policy.device","：训练设备（如 ",[318,25645,25646],{},"cuda",[154,25648,25649,25652],{},[318,25650,25651],{},"--wandb.enable","：是否启用 WandB 可视化。",[154,25654,25655,25658],{},[318,25656,25657],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25660,25661],{},[28,25662],{"alt":30,"src":25663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5333,25665,25526],{},{"title":30,"searchDepth":167,"depth":167,"links":25667},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25539,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25674,"title":25675,"body":25676,"description":23584,"extension":249,"meta":25763,"navigation":251,"path":25764,"seo":25765,"stem":25766,"__hash__":25767},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25677,"toc":25761},[25678,25681,25684,25751,25759],[10,25679,25675],{"id":25680},"_8-策略部署与自动采集",[19,25682,25683],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[312,25685,25687],{"className":24030,"code":25686,"language":24032,"meta":30,"style":30},"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",[318,25688,25689,25695,25701,25707,25715,25721,25728,25736,25744],{"__ignoreMap":30},[321,25690,25691,25693],{"class":323,"line":324},[321,25692,25354],{"class":2169},[321,25694,24823],{"class":380},[321,25696,25697,25699],{"class":323,"line":167},[321,25698,24855],{"class":380},[321,25700,24823],{"class":380},[321,25702,25703,25705],{"class":323,"line":200},[321,25704,24933],{"class":380},[321,25706,24823],{"class":380},[321,25708,25709,25711,25713],{"class":323,"line":1401},[321,25710,25062],{"class":380},[321,25712,25381],{"class":436},[321,25714,24823],{"class":380},[321,25716,25717,25719],{"class":323,"line":1407},[321,25718,24993],{"class":380},[321,25720,24823],{"class":380},[321,25722,25723,25726],{"class":323,"line":1421},[321,25724,25725],{"class":380},"  --display_data=false",[321,25727,24823],{"class":380},[321,25729,25730,25732,25734],{"class":323,"line":1427},[321,25731,25413],{"class":380},[321,25733,25416],{"class":436},[321,25735,24823],{"class":380},[321,25737,25738,25740,25742],{"class":323,"line":1518},[321,25739,25430],{"class":380},[321,25741,25433],{"class":436},[321,25743,24823],{"class":380},[321,25745,25746,25749],{"class":323,"line":1524},[321,25747,25748],{"class":380},"  --policy.path=",[321,25750,25608],{"class":436},[1339,25752,25753],{},[154,25754,25755,25758],{},[318,25756,25757],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5333,25760,25526],{},{"title":30,"searchDepth":167,"depth":167,"links":25762},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25675,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25769,"title":25770,"body":25771,"description":23584,"extension":249,"meta":25800,"navigation":251,"path":25801,"seo":25802,"stem":25803,"__hash__":25804},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25772,"toc":25798},[25773,25777,25780,25786,25789,25795],[10,25774,25776],{"id":25775},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25778,25779],{},"项目地址：",[19,25781,25782],{},[570,25783,25784],{"href":25784,"rel":25785},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24073],[19,25787,25788],{},"参考教程：",[19,25790,25791],{},[570,25792,25793],{"href":25793,"rel":25794},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24073],[19,25796,25797],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":30,"searchDepth":167,"depth":167,"links":25799},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25770,"description":23584},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25806,"title":25807,"body":25808,"description":25812,"extension":249,"meta":25813,"navigation":251,"path":25814,"seo":25815,"stem":25816,"__hash__":25817},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25809,"toc":25810},[],{"title":30,"searchDepth":167,"depth":167,"links":25811},[],"act复现",{"category":23586},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25807,"description":25812},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25819,"title":25820,"body":25821,"description":30,"extension":249,"meta":26123,"navigation":251,"path":26124,"seo":26125,"stem":26126,"__hash__":26127},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25822,"toc":26115},[25823,25826,25830,25840,25847,25854,25857,25864,25867,25870,25874,25886,25890,25936,25939,25942,25945,25948,25951,25955,25993,25999,26003,26057,26062,26065,26068,26073,26076,26081,26084,26087,26091,26094,26097,26101],[10,25824,25820],{"id":25825},"_1简介",[292,25827,25829],{"id":25828},"_11什么是-docker","1.1什么是 Docker？",[19,25831,25832,25833,25836,25837],{},"Docker 是一个开源的 ",[481,25834,25835],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[481,25838,25839],{},"一次构建，到处运行。",[19,25841,25842,25843,25846],{},"“ ",[481,25844,25845],{},"一次构建，到处运行"," ”也就是说：",[151,25848,25849],{},[154,25850,25851],{},[481,25852,25853],{},"之前：",[19,25855,25856],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[151,25858,25859],{},[154,25860,25861],{},[481,25862,25863],{},"使用docker后：",[19,25865,25866],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25868,25869],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[292,25871,25873],{"id":25872},"_12它是怎么工作的","1.2.它是怎么工作的？",[1339,25875,25876,25879],{},[154,25877,25878],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[154,25880,25881,25882,25885],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[481,25883,25884],{},"无论在哪运行都一样稳定"," 。",[292,25887,25889],{"id":25888},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[469,25891,25892,25902],{},[472,25893,25894],{},[475,25895,25896,25899],{},[478,25897,25898],{"align":23944},"概念",[478,25900,25901],{"align":23944},"解释",[516,25903,25904,25912,25920,25928],{},[475,25905,25906,25909],{},[521,25907,25908],{"align":23944},"镜像",[521,25910,25911],{"align":23944},"Image，运行容器的模板，像是一个应用快照",[475,25913,25914,25917],{},[521,25915,25916],{"align":23944},"容器",[521,25918,25919],{"align":23944},"Container，运行中的镜像实例，有自己的文件系统、网络等",[475,25921,25922,25925],{},[521,25923,25924],{"align":23944},"Dockerfile",[521,25926,25927],{"align":23944},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[475,25929,25930,25933],{},[521,25931,25932],{"align":23944},"仓库",[521,25934,25935],{"align":23944},"Registry，存放镜像的地方，比如 Docker Hub",[19,25937,25938],{},"抽象化理解:",[19,25940,25941],{},"Docker镜像≈C++类",[19,25943,25944],{},"Docker容器≈C++类实例(即对象)",[19,25946,25947],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,25949,25950],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[292,25952,25954],{"id":25953},"_14类比理解","1.4.类比理解",[469,25956,25957,25967],{},[472,25958,25959],{},[475,25960,25961,25964],{},[478,25962,25963],{"align":23944},"传统部署",[478,25965,25966],{"align":23944},"Docker部署",[516,25968,25969,25977,25985],{},[475,25970,25971,25974],{},[521,25972,25973],{"align":23944},"手动安装依赖、调试版本不一致问题",[521,25975,25976],{"align":23944},"一次打包环境和代码",[475,25978,25979,25982],{},[521,25980,25981],{"align":23944},"程序“裸奔”跑在系统上",[521,25983,25984],{"align":23944},"程序“穿着容器”隔离运行",[475,25986,25987,25990],{},[521,25988,25989],{"align":23944},"容易“在我电脑上能跑”",[521,25991,25992],{"align":23944},"保证“无论在哪都能跑”",[19,25994,25995,25996],{},"就像快递包裹： ",[481,25997,25998],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[292,26000,26002],{"id":26001},"_15docker-的核心优势","1.5.Docker 的核心优势",[469,26004,26005,26015],{},[472,26006,26007],{},[475,26008,26009,26012],{},[478,26010,26011],{"align":23944},"优势",[478,26013,26014],{"align":23944},"说明",[516,26016,26017,26025,26033,26041,26049],{},[475,26018,26019,26022],{},[521,26020,26021],{"align":23944},"轻量级",[521,26023,26024],{"align":23944},"基于系统内核共享，启动速度快，占资源少",[475,26026,26027,26030],{},[521,26028,26029],{"align":23944},"跨平台",[521,26031,26032],{"align":23944},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[475,26034,26035,26038],{},[521,26036,26037],{"align":23944},"易于迁移部署",[521,26039,26040],{"align":23944},"应用和环境一起封装，不怕依赖不一致",[475,26042,26043,26046],{},[521,26044,26045],{"align":23944},"易于版本控制",[521,26047,26048],{"align":23944},"镜像版本可控，支持回滚",[475,26050,26051,26054],{},[521,26052,26053],{"align":23944},"生态丰富",[521,26055,26056],{"align":23944},"Docker Hub 上有成千上万的现成镜像可用",[151,26058,26059],{},[154,26060,26061],{},"在Linux上可以几乎实现无性能损失。",[19,26063,26064],{},"docker里的发行版和本机共用Linux内核。",[19,26066,26067],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[151,26069,26070],{},[154,26071,26072],{},"可以快速部署在绝大多数Linux发行版",[19,26074,26075],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[151,26077,26078],{},[154,26079,26080],{},"配置环境简单",[19,26082,26083],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26085,26086],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[151,26088,26089],{},[154,26090,26053],{},[19,26092,26093],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26095,26096],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[292,26098,26100],{"id":26099},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1339,26102,26103,26106,26109,26112],{},[154,26104,26105],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[154,26107,26108],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[154,26110,26111],{},"微服务架构：每个服务一个容器，灵活组合",[154,26113,26114],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":30,"searchDepth":167,"depth":167,"links":26116},[26117,26118,26119,26120,26121,26122],{"id":25828,"depth":200,"text":25829},{"id":25872,"depth":200,"text":25873},{"id":25888,"depth":200,"text":25889},{"id":25953,"depth":200,"text":25954},{"id":26001,"depth":200,"text":26002},{"id":26099,"depth":200,"text":26100},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25820,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26129,"title":26130,"body":26131,"description":30,"extension":249,"meta":26864,"navigation":251,"path":26865,"seo":26866,"stem":26867,"__hash__":26868},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26132,"toc":26859},[26133,26136,26140,26143,26146,26152,26158,26162,26171,26174,26231,26234,26285,26288,26371,26374,26411,26415,26426,26439,26446,26449,26529,26532,26582,26585,26608,26612,26619,26622,26638,26644,26647,26663,26669,26672,26688,26702,26708,26728,26734,26737,26749,26755,26758,26772,26778,26781,26801,26806,26809,26812,26816,26819,26822,26825,26832,26835,26838,26841,26846,26851,26856],[10,26134,26130],{"id":26135},"_2安装docker",[292,26137,26139],{"id":26138},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26141,26142],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26144,26145],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26147,26148],{},[570,26149,26150],{"href":26150,"rel":26151},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24073],[19,26153,26154],{},[570,26155,26156],{"href":26156,"rel":26157},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24073],[22205,26159,26161],{"id":26160},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26163,26164,26165,26170],{},"以下内容根据 ",[570,26166,26169],{"href":26167,"rel":26168},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24073],"官方文档"," 修改而来。",[19,26172,26173],{},"如果你过去安装过 docker，先删掉：",[312,26175,26177],{"className":24030,"code":26176,"language":24032,"meta":30,"style":30},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[318,26178,26179],{"__ignoreMap":30},[321,26180,26181,26183,26186,26189,26192,26195,26198,26201,26204,26207,26210,26213,26216,26219,26222,26225,26228],{"class":323,"line":324},[321,26182,3231],{"class":327},[321,26184,26185],{"class":331}," pkg ",[321,26187,26188],{"class":327},"in",[321,26190,26191],{"class":436}," docker.io",[321,26193,26194],{"class":436}," docker-doc",[321,26196,26197],{"class":436}," docker-compose",[321,26199,26200],{"class":436}," docker-compose-v2",[321,26202,26203],{"class":436}," podman-docker",[321,26205,26206],{"class":436}," containerd",[321,26208,26209],{"class":436}," runc",[321,26211,26212],{"class":331},"; ",[321,26214,26215],{"class":327},"do",[321,26217,26218],{"class":2169}," sudo",[321,26220,26221],{"class":436}," apt-get",[321,26223,26224],{"class":436}," remove",[321,26226,26227],{"class":331}," $pkg; ",[321,26229,26230],{"class":327},"done\n",[19,26232,26233],{},"首先安装依赖和GPG：",[312,26235,26239],{"className":26236,"code":26237,"language":26238,"meta":30,"style":30},"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",[318,26240,26241,26246,26251,26256,26261,26266,26271,26275,26280],{"__ignoreMap":30},[321,26242,26243],{"class":323,"line":324},[321,26244,26245],{},"# Add Docker's official GPG key:\n",[321,26247,26248],{"class":323,"line":167},[321,26249,26250],{},"sudo apt-get update\n",[321,26252,26253],{"class":323,"line":200},[321,26254,26255],{},"sudo apt-get install ca-certificates curl\n",[321,26257,26258],{"class":323,"line":1401},[321,26259,26260],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[321,26262,26263],{"class":323,"line":1407},[321,26264,26265],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[321,26267,26268],{"class":323,"line":1421},[321,26269,26270],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[321,26272,26273],{"class":323,"line":1427},[321,26274,2606],{"emptyLinePlaceholder":251},[321,26276,26277],{"class":323,"line":1518},[321,26278,26279],{},"# 如果上面这行报错就弄下面这行\n",[321,26281,26282],{"class":323,"line":1524},[321,26283,26284],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26286,26287],{},"信任 Docker 的 GPG 公钥并添加仓库：",[312,26289,26291],{"className":24030,"code":26290,"language":24032,"meta":30,"style":30},"# 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",[318,26292,26293,26298,26304,26321,26354],{"__ignoreMap":30},[321,26294,26295],{"class":323,"line":324},[321,26296,26297],{"class":390},"# Add the repository to Apt sources:\n",[321,26299,26300,26302],{"class":323,"line":167},[321,26301,25270],{"class":380},[321,26303,24823],{"class":380},[321,26305,26306,26309,26312,26315,26318],{"class":323,"line":200},[321,26307,26308],{"class":436},"  \"deb [arch=$(",[321,26310,26311],{"class":2169},"dpkg",[321,26313,26314],{"class":380}," --print-architecture",[321,26316,26317],{"class":436},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[321,26319,26320],{"class":380},"\\\n",[321,26322,26323,26326,26328,26330,26333,26336,26338,26340,26343,26345,26347,26350,26352],{"class":323,"line":1401},[321,26324,26325],{"class":436},"  \"",[321,26327,25244],{"class":331},[321,26329,890],{"class":380},[321,26331,26332],{"class":436}," \u002Fetc\u002Fos-release",[321,26334,26335],{"class":331}," && ",[321,26337,25270],{"class":380},[321,26339,9931],{"class":436},[321,26341,26342],{"class":331},"$VERSION_CODENAME",[321,26344,583],{"class":436},[321,26346,761],{"class":331},[321,26348,26349],{"class":436},"\" stable\"",[321,26351,25254],{"class":327},[321,26353,24823],{"class":380},[321,26355,26356,26359,26362,26365,26368],{"class":323,"line":1407},[321,26357,26358],{"class":2169},"  sudo",[321,26360,26361],{"class":436}," tee",[321,26363,26364],{"class":436}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[321,26366,26367],{"class":327}," >",[321,26369,26370],{"class":436}," \u002Fdev\u002Fnull\n",[19,26372,26373],{},"最后安装",[312,26375,26377],{"className":24030,"code":26376,"language":24032,"meta":30,"style":30},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[318,26378,26379,26388],{"__ignoreMap":30},[321,26380,26381,26383,26385],{"class":323,"line":324},[321,26382,24721],{"class":2169},[321,26384,26221],{"class":436},[321,26386,26387],{"class":436}," update\n",[321,26389,26390,26392,26394,26396,26399,26402,26405,26408],{"class":323,"line":167},[321,26391,24721],{"class":2169},[321,26393,26221],{"class":436},[321,26395,24042],{"class":436},[321,26397,26398],{"class":436}," docker-ce",[321,26400,26401],{"class":436}," docker-ce-cli",[321,26403,26404],{"class":436}," containerd.io",[321,26406,26407],{"class":436}," docker-buildx-plugin",[321,26409,26410],{"class":436}," docker-compose-plugin\n",[22205,26412,26414],{"id":26413},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26416,26417,26418,26421,26422,26425],{},"查看自己自己包管理工具版本（dnf是 ",[481,26419,26420],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[481,26423,26424],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[312,26427,26429],{"className":24030,"code":26428,"language":24032,"meta":30,"style":30},"dnf --version\n",[318,26430,26431],{"__ignoreMap":30},[321,26432,26433,26436],{"class":323,"line":324},[321,26434,26435],{"class":2169},"dnf",[321,26437,26438],{"class":380}," --version\n",[19,26440,26164,26441,26445],{},[570,26442,26169],{"href":26443,"rel":26444},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24073]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26447,26448],{},"如果你之前安装过 docker，请先删掉",[312,26450,26452],{"className":24030,"code":26451,"language":24032,"meta":30,"style":30},"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",[318,26453,26454,26468,26475,26482,26489,26496,26503,26510,26517,26524],{"__ignoreMap":30},[321,26455,26456,26458,26461,26463,26466],{"class":323,"line":324},[321,26457,24721],{"class":2169},[321,26459,26460],{"class":436}," dnf",[321,26462,26224],{"class":436},[321,26464,26465],{"class":436}," docker",[321,26467,24823],{"class":380},[321,26469,26470,26473],{"class":323,"line":167},[321,26471,26472],{"class":436},"                  docker-client",[321,26474,24823],{"class":380},[321,26476,26477,26480],{"class":323,"line":200},[321,26478,26479],{"class":436},"                  docker-client-latest",[321,26481,24823],{"class":380},[321,26483,26484,26487],{"class":323,"line":1401},[321,26485,26486],{"class":436},"                  docker-common",[321,26488,24823],{"class":380},[321,26490,26491,26494],{"class":323,"line":1407},[321,26492,26493],{"class":436},"                  docker-latest",[321,26495,24823],{"class":380},[321,26497,26498,26501],{"class":323,"line":1421},[321,26499,26500],{"class":436},"                  docker-latest-logrotate",[321,26502,24823],{"class":380},[321,26504,26505,26508],{"class":323,"line":1427},[321,26506,26507],{"class":436},"                  docker-logrotate",[321,26509,24823],{"class":380},[321,26511,26512,26515],{"class":323,"line":1518},[321,26513,26514],{"class":436},"                  docker-selinux",[321,26516,24823],{"class":380},[321,26518,26519,26522],{"class":323,"line":1524},[321,26520,26521],{"class":436},"                  docker-engine-selinux",[321,26523,24823],{"class":380},[321,26525,26526],{"class":323,"line":1536},[321,26527,26528],{"class":436},"                  docker-engine\n",[19,26530,26531],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[312,26533,26535],{"className":24030,"code":26534,"language":24032,"meta":30,"style":30},"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",[318,26536,26537,26551,26566],{"__ignoreMap":30},[321,26538,26539,26541,26543,26546,26548],{"class":323,"line":324},[321,26540,24721],{"class":2169},[321,26542,26460],{"class":436},[321,26544,26545],{"class":380}," -y",[321,26547,24042],{"class":436},[321,26549,26550],{"class":436}," dnf-plugins-core\n",[321,26552,26553,26555,26557,26560,26563],{"class":323,"line":167},[321,26554,24721],{"class":2169},[321,26556,26460],{"class":436},[321,26558,26559],{"class":436}," config-manager",[321,26561,26562],{"class":436}," addrepo",[321,26564,26565],{"class":380}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[321,26567,26568,26570,26573,26576,26579],{"class":323,"line":200},[321,26569,24721],{"class":2169},[321,26571,26572],{"class":436}," sed",[321,26574,26575],{"class":380}," -i",[321,26577,26578],{"class":436}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[321,26580,26581],{"class":436}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26583,26584],{},"最后安装：",[312,26586,26588],{"className":24030,"code":26587,"language":24032,"meta":30,"style":30},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[318,26589,26590],{"__ignoreMap":30},[321,26591,26592,26594,26596,26598,26600,26602,26604,26606],{"class":323,"line":324},[321,26593,24721],{"class":2169},[321,26595,26460],{"class":436},[321,26597,24042],{"class":436},[321,26599,26398],{"class":436},[321,26601,26401],{"class":436},[321,26603,26404],{"class":436},[321,26605,26407],{"class":436},[321,26607,26410],{"class":436},[292,26609,26611],{"id":26610},"_22配置环境","2.2.配置环境",[22205,26613,26615,26618],{"id":26614},"_221检查-docker-服务状态",[481,26616,26617],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26620,26621],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[312,26623,26625],{"className":24030,"code":26624,"language":24032,"meta":30,"style":30},"systemctl status docker\n",[318,26626,26627],{"__ignoreMap":30},[321,26628,26629,26632,26635],{"class":323,"line":324},[321,26630,26631],{"class":2169},"systemctl",[321,26633,26634],{"class":436}," status",[321,26636,26637],{"class":436}," docker\n",[22205,26639,26641,26618],{"id":26640},"_222启动-docker-服务",[481,26642,26643],{},"2.2.2.启动 Docker 服务",[19,26645,26646],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[312,26648,26650],{"className":24030,"code":26649,"language":24032,"meta":30,"style":30},"sudo systemctl start docker\n",[318,26651,26652],{"__ignoreMap":30},[321,26653,26654,26656,26659,26661],{"class":323,"line":324},[321,26655,24721],{"class":2169},[321,26657,26658],{"class":436}," systemctl",[321,26660,4390],{"class":436},[321,26662,26637],{"class":436},[22205,26664,26666,26618],{"id":26665},"_223设置-docker-开机自启",[481,26667,26668],{},"2.2.3.设置 Docker 开机自启",[19,26670,26671],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[312,26673,26675],{"className":24030,"code":26674,"language":24032,"meta":30,"style":30},"sudo systemctl enable docker\n",[318,26676,26677],{"__ignoreMap":30},[321,26678,26679,26681,26683,26686],{"class":323,"line":324},[321,26680,24721],{"class":2169},[321,26682,26658],{"class":436},[321,26684,26685],{"class":436}," enable",[321,26687,26637],{"class":436},[22205,26689,26691,14002,26694,14002,26699,26618],{"id":26690},"_224将用户添加到-docker-组",[481,26692,26693],{},"2.2.4.将用户添加到",[481,26695,26696],{},[318,26697,26698],{},"docker",[481,26700,26701],{},"组",[19,26703,26704,26705,26707],{},"使用以下命令将当前用户添加到 ",[318,26706,26698],{}," 组：",[312,26709,26711],{"className":24030,"code":26710,"language":24032,"meta":30,"style":30},"sudo usermod -aG docker $USER\n",[318,26712,26713],{"__ignoreMap":30},[321,26714,26715,26717,26720,26723,26725],{"class":323,"line":324},[321,26716,24721],{"class":2169},[321,26718,26719],{"class":436}," usermod",[321,26721,26722],{"class":380}," -aG",[321,26724,26465],{"class":436},[321,26726,26727],{"class":331}," $USER\n",[22205,26729,26731,26618],{"id":26730},"_225退出并重新登录",[481,26732,26733],{},"2.2.5.退出并重新登录",[19,26735,26736],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[312,26738,26740],{"className":24030,"code":26739,"language":24032,"meta":30,"style":30},"newgrp docker\n",[318,26741,26742],{"__ignoreMap":30},[321,26743,26744,26747],{"class":323,"line":324},[321,26745,26746],{"class":2169},"newgrp",[321,26748,26637],{"class":436},[22205,26750,26752,26618],{"id":26751},"_226重新启动-docker-服务如果需要",[481,26753,26754],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26756,26757],{},"确保 Docker 服务正在运行，可以使用以下命令：",[312,26759,26760],{"className":24030,"code":26649,"language":24032,"meta":30,"style":30},[318,26761,26762],{"__ignoreMap":30},[321,26763,26764,26766,26768,26770],{"class":323,"line":324},[321,26765,24721],{"class":2169},[321,26767,26658],{"class":436},[321,26769,4390],{"class":436},[321,26771,26637],{"class":436},[22205,26773,26775,26618],{"id":26774},"_227重启电脑后检查-docker-服务状态",[481,26776,26777],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26779,26780],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[312,26782,26784],{"className":24030,"code":26783,"language":24032,"meta":30,"style":30},"sudo reboot\nsystemctl status docker\n",[318,26785,26786,26793],{"__ignoreMap":30},[321,26787,26788,26790],{"class":323,"line":324},[321,26789,24721],{"class":2169},[321,26791,26792],{"class":436}," reboot\n",[321,26794,26795,26797,26799],{"class":323,"line":167},[321,26796,26631],{"class":2169},[321,26798,26634],{"class":436},[321,26800,26637],{"class":436},[19,26802,26803],{},[28,26804],{"alt":30,"src":26805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26807,26808],{},"第三行显示enabled说明开机自启动成功",[19,26810,26811],{},"按q退出",[292,26813,26815],{"id":26814},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26817,26818],{},"优先使用linux来使用docker是比较好的",[19,26820,26821],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26823,26824],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26826,26827,26828],{},"官方下载安装:",[570,26829,26830],{"href":26830,"rel":26831},"https:\u002F\u002Fwww.docker.com\u002F",[24073],[19,26833,26834],{},"Windows的Docker显卡直通与USB直通:",[19,26836,26837],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26839,26840],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26842,26843],{},[28,26844],{"alt":30,"src":26845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26847,26848],{},[28,26849],{"alt":30,"src":26850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26852,26853],{},[28,26854],{"alt":30,"src":26855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5333,26857,26858],{},"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":30,"searchDepth":167,"depth":167,"links":26860},[26861,26862,26863],{"id":26138,"depth":200,"text":26139},{"id":26610,"depth":200,"text":26611},{"id":26814,"depth":200,"text":26815},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26130,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26870,"title":26871,"body":26872,"description":26879,"extension":249,"meta":27572,"navigation":251,"path":27573,"seo":27574,"stem":27575,"__hash__":27576},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26873,"toc":27566},[26874,26877,26880,26884,26889,26894,26897,26925,26930,26939,26942,26947,26951,26958,26963,26969,26973,26976,26980,26985,27077,27082,27100,27105,27126,27131,27147,27151,27156,27185,27190,27236,27241,27285,27293,27310,27315,27331,27336,27350,27353,27356,27359,27362,27391,27394,27399,27403,27406,27409,27415,27418,27421,27424,27486,27493,27498,27501,27519,27523,27526,27543,27546,27549,27563],[10,26875,26871],{"id":26876},"_3docker直通",[19,26878,26879],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[292,26881,26883],{"id":26882},"_31usb直通","3.1.USB直通",[19,26885,26886],{},[28,26887],{"alt":30,"src":26888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[151,26890,26891],{},[154,26892,26893],{},"方法一(不是很推荐新手)：",[19,26895,26896],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[312,26898,26900],{"className":24030,"code":26899,"language":24032,"meta":30,"style":30},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[318,26901,26902,26910,26915],{"__ignoreMap":30},[321,26903,26904,26907],{"class":323,"line":324},[321,26905,26906],{"class":2169},"ls",[321,26908,26909],{"class":436}," \u002Fdev\n",[321,26911,26912],{"class":323,"line":167},[321,26913,26914],{"class":390},"#例如\n",[321,26916,26917,26920,26922],{"class":323,"line":200},[321,26918,26919],{"class":331},"--device",[321,26921,377],{"class":327},[321,26923,26924],{"class":436},"\u002Fdev\u002Ftty_USB0\n",[151,26926,26927],{"start":167},[154,26928,26929],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[312,26931,26933],{"className":24030,"code":26932,"language":24032,"meta":30,"style":30},"--privileged\n",[318,26934,26935],{"__ignoreMap":30},[321,26936,26937],{"class":323,"line":324},[321,26938,26932],{"class":2169},[19,26940,26941],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,26943,26944],{},[28,26945],{"alt":30,"src":26946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[292,26948,26950],{"id":26949},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,26952,26953,26954,26957],{},"NVIDIA Container Toolkit使用户 ",[481,26955,26956],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,26959,26960],{},[28,26961],{"alt":30,"src":26962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,26964,26965],{},[570,26966,26967],{"href":26967,"rel":26968},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24073],[22205,26970,26972],{"id":26971},"_321安装","3.2.1.安装",[19,26974,26975],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23117,26977,26979],{"id":26978},"_3211ubuntu","3.2.1.1.Ubuntu",[151,26981,26982],{},[154,26983,26984],{},"配置存储库 并更新",[312,26986,26988],{"className":24030,"code":26987,"language":24032,"meta":30,"style":30},"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",[318,26989,26990,27019,27039,27051,27063,27069],{"__ignoreMap":30},[321,26991,26992,26995,26998,27001,27003,27005,27008,27011,27014,27017],{"class":323,"line":324},[321,26993,26994],{"class":2169},"curl",[321,26996,26997],{"class":380}," -fsSL",[321,26999,27000],{"class":436}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[321,27002,25254],{"class":327},[321,27004,26218],{"class":2169},[321,27006,27007],{"class":436}," gpg",[321,27009,27010],{"class":380}," --dearmor",[321,27012,27013],{"class":380}," -o",[321,27015,27016],{"class":436}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[321,27018,24823],{"class":380},[321,27020,27021,27024,27026,27029,27032,27035,27037],{"class":323,"line":167},[321,27022,27023],{"class":331},"  && ",[321,27025,26994],{"class":2169},[321,27027,27028],{"class":380}," -s",[321,27030,27031],{"class":380}," -L",[321,27033,27034],{"class":436}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[321,27036,25254],{"class":327},[321,27038,24823],{"class":380},[321,27040,27041,27044,27047,27049],{"class":323,"line":200},[321,27042,27043],{"class":2169},"    sed",[321,27045,27046],{"class":436}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[321,27048,25254],{"class":327},[321,27050,24823],{"class":380},[321,27052,27053,27056,27058,27061],{"class":323,"line":1401},[321,27054,27055],{"class":2169},"    sudo",[321,27057,26361],{"class":436},[321,27059,27060],{"class":436}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[321,27062,24823],{"class":380},[321,27064,27065,27067],{"class":323,"line":1407},[321,27066,27023],{"class":331},[321,27068,26320],{"class":380},[321,27070,27071,27073,27075],{"class":323,"line":1421},[321,27072,27055],{"class":2169},[321,27074,26221],{"class":436},[321,27076,26387],{"class":436},[151,27078,27079],{"start":167},[154,27080,27081],{},"安装nvidia-docker2",[312,27083,27085],{"className":24030,"code":27084,"language":24032,"meta":30,"style":30},"sudo apt-get install -y nvidia-docker2\n",[318,27086,27087],{"__ignoreMap":30},[321,27088,27089,27091,27093,27095,27097],{"class":323,"line":324},[321,27090,24721],{"class":2169},[321,27092,26221],{"class":436},[321,27094,24042],{"class":436},[321,27096,26545],{"class":380},[321,27098,27099],{"class":436}," nvidia-docker2\n",[151,27101,27102],{"start":200},[154,27103,27104],{},"使用nvidia-ctk命令配置container runtime",[312,27106,27108],{"className":24030,"code":27107,"language":24032,"meta":30,"style":30},"sudo nvidia-ctk runtime configure --runtime=docker\n",[318,27109,27110],{"__ignoreMap":30},[321,27111,27112,27114,27117,27120,27123],{"class":323,"line":324},[321,27113,24721],{"class":2169},[321,27115,27116],{"class":436}," nvidia-ctk",[321,27118,27119],{"class":436}," runtime",[321,27121,27122],{"class":436}," configure",[321,27124,27125],{"class":380}," --runtime=docker\n",[151,27127,27128],{"start":1401},[154,27129,27130],{},"重启docker服务:",[312,27132,27134],{"className":24030,"code":27133,"language":24032,"meta":30,"style":30},"sudo systemctl restart docker\n",[318,27135,27136],{"__ignoreMap":30},[321,27137,27138,27140,27142,27145],{"class":323,"line":324},[321,27139,24721],{"class":2169},[321,27141,26658],{"class":436},[321,27143,27144],{"class":436}," restart",[321,27146,26637],{"class":436},[23117,27148,27150],{"id":27149},"_3212fedora","3.2.1.2.Fedora",[151,27152,27153],{},[154,27154,27155],{},"配置存储库",[312,27157,27159],{"className":24030,"code":27158,"language":24032,"meta":30,"style":30},"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",[318,27160,27161,27176],{"__ignoreMap":30},[321,27162,27163,27165,27167,27169,27172,27174],{"class":323,"line":324},[321,27164,26994],{"class":2169},[321,27166,27028],{"class":380},[321,27168,27031],{"class":380},[321,27170,27171],{"class":436}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[321,27173,25254],{"class":327},[321,27175,24823],{"class":380},[321,27177,27178,27180,27182],{"class":323,"line":167},[321,27179,24721],{"class":2169},[321,27181,26361],{"class":436},[321,27183,27184],{"class":436}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[151,27186,27187],{"start":167},[154,27188,27189],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[312,27191,27193],{"className":24030,"code":27192,"language":24032,"meta":30,"style":30},"# 如果是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",[318,27194,27195,27200,27214,27218,27223],{"__ignoreMap":30},[321,27196,27197],{"class":323,"line":324},[321,27198,27199],{"class":390},"# 如果是RHEL或者Rocky（DNF4）\n",[321,27201,27202,27204,27206,27208,27211],{"class":323,"line":167},[321,27203,24721],{"class":2169},[321,27205,26460],{"class":436},[321,27207,26559],{"class":436},[321,27209,27210],{"class":380}," --add-repo",[321,27212,27213],{"class":436}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[321,27215,27216],{"class":323,"line":200},[321,27217,2606],{"emptyLinePlaceholder":251},[321,27219,27220],{"class":323,"line":1401},[321,27221,27222],{"class":390},"# 如果是Feodra41+（DNF5）\n",[321,27224,27225,27227,27229,27231,27233],{"class":323,"line":1407},[321,27226,24721],{"class":2169},[321,27228,26460],{"class":436},[321,27230,26559],{"class":436},[321,27232,26562],{"class":436},[321,27234,27235],{"class":380}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[151,27237,27238],{"start":200},[154,27239,27240],{},"安装NVIDIA Container Toolki包",[312,27242,27244],{"className":24030,"code":27243,"language":24032,"meta":30,"style":30},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[318,27245,27246,27251,27264,27268,27273],{"__ignoreMap":30},[321,27247,27248],{"class":323,"line":324},[321,27249,27250],{"class":390},"# 如果是RHEL或者Rocky\n",[321,27252,27253,27255,27257,27259,27261],{"class":323,"line":167},[321,27254,24721],{"class":2169},[321,27256,26460],{"class":436},[321,27258,24042],{"class":436},[321,27260,26545],{"class":380},[321,27262,27263],{"class":436}," nvidia-container-toolkit\n",[321,27265,27266],{"class":323,"line":200},[321,27267,2606],{"emptyLinePlaceholder":251},[321,27269,27270],{"class":323,"line":1401},[321,27271,27272],{"class":390},"# 如果是Fedora\n",[321,27274,27275,27277,27279,27281,27283],{"class":323,"line":1407},[321,27276,24721],{"class":2169},[321,27278,26460],{"class":436},[321,27280,24042],{"class":436},[321,27282,26545],{"class":380},[321,27284,27263],{"class":436},[151,27286,27287],{"start":1401},[154,27288,27289,27290,27292],{},"安装nvidia-docker2 ： 在Fedora上使用",[318,27291,26435],{},"进行安装",[312,27294,27296],{"className":24030,"code":27295,"language":24032,"meta":30,"style":30},"sudo dnf install -y nvidia-docker2\n",[318,27297,27298],{"__ignoreMap":30},[321,27299,27300,27302,27304,27306,27308],{"class":323,"line":324},[321,27301,24721],{"class":2169},[321,27303,26460],{"class":436},[321,27305,24042],{"class":436},[321,27307,26545],{"class":380},[321,27309,27099],{"class":436},[151,27311,27312],{"start":1407},[154,27313,27314],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[312,27316,27317],{"className":24030,"code":27107,"language":24032,"meta":30,"style":30},[318,27318,27319],{"__ignoreMap":30},[321,27320,27321,27323,27325,27327,27329],{"class":323,"line":324},[321,27322,24721],{"class":2169},[321,27324,27116],{"class":436},[321,27326,27119],{"class":436},[321,27328,27122],{"class":436},[321,27330,27125],{"class":380},[151,27332,27333],{"start":1421},[154,27334,27335],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[312,27337,27338],{"className":24030,"code":27133,"language":24032,"meta":30,"style":30},[318,27339,27340],{"__ignoreMap":30},[321,27341,27342,27344,27346,27348],{"class":323,"line":324},[321,27343,24721],{"class":2169},[321,27345,26658],{"class":436},[321,27347,27144],{"class":436},[321,27349,26637],{"class":436},[19,27351,27352],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27354,27355],{},"方法：",[19,27357,27358],{},"1️⃣nvidia-smi",[19,27360,27361],{},"2️⃣运行nvidia cuda 容器进行测试",[312,27363,27365],{"className":24030,"code":27364,"language":24032,"meta":30,"style":30},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[318,27366,27367],{"__ignoreMap":30},[321,27368,27369,27371,27373,27376,27379,27382,27385,27388],{"class":323,"line":324},[321,27370,24721],{"class":2169},[321,27372,26465],{"class":436},[321,27374,27375],{"class":436}," run",[321,27377,27378],{"class":380}," --rm",[321,27380,27381],{"class":380}," --gpus",[321,27383,27384],{"class":436}," all",[321,27386,27387],{"class":436}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[321,27389,27390],{"class":436}," nvidia-smi\n",[19,27392,27393],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27395,27396],{},[28,27397],{"alt":30,"src":27398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[292,27400,27402],{"id":27401},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27404,27405],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27407,27408],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27410,27411],{},[570,27412,27413],{"href":27413,"rel":27414},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24073],[19,27416,27417],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27419,27420],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27422,27423],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[469,27425,27426,27442],{},[472,27427,27428],{},[475,27429,27430,27433,27436,27439],{},[478,27431,27432],{"align":23944},"镜像类型",[478,27434,27435],{"align":23944},"适用场景",[478,27437,27438],{"align":23944},"示例标签",[478,27440,27441],{"align":23944},"大小",[516,27443,27444,27458,27472],{},[475,27445,27446,27449,27452,27455],{},[521,27447,27448],{"align":23944},"base",[521,27450,27451],{"align":23944},"仅需 CUDA 运行时库",[521,27453,27454],{"align":23944},"12.4.0-base-ubuntu22.04",[521,27456,27457],{"align":23944},"~240MB",[475,27459,27460,27463,27466,27469],{},[521,27461,27462],{"align":23944},"runtime",[521,27464,27465],{"align":23944},"部署编译后的应用（含数学库）",[521,27467,27468],{"align":23944},"12.4.0-runtime-ubuntu22.04",[521,27470,27471],{"align":23944},"~2GB",[475,27473,27474,27477,27480,27483],{},[521,27475,27476],{"align":23944},"devel",[521,27478,27479],{"align":23944},"开发环境（含编译工具）",[521,27481,27482],{"align":23944},"12.4.0-devel-ubuntu22.04",[521,27484,27485],{"align":23944},"~3GB",[19,27487,27488,27489,27492],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[318,27490,27491],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27494,27495],{},[28,27496],{"alt":30,"src":27497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27499,27500],{},"在dockerfile里就可以开头这么写：",[312,27502,27504],{"className":24030,"code":27503,"language":24032,"meta":30,"style":30},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[318,27505,27506,27511],{"__ignoreMap":30},[321,27507,27508],{"class":323,"line":324},[321,27509,27510],{"class":390},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[321,27512,27513,27516],{"class":323,"line":167},[321,27514,27515],{"class":2169},"FROM",[321,27517,27518],{"class":436}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[292,27520,27522],{"id":27521},"_34配置以太网","3.4.配置以太网",[19,27524,27525],{},"指定网络模式",[312,27527,27529],{"className":24030,"code":27528,"language":24032,"meta":30,"style":30},"--net=host \\\n",[318,27530,27531],{"__ignoreMap":30},[321,27532,27533,27536,27538,27541],{"class":323,"line":324},[321,27534,27535],{"class":331},"--net",[321,27537,377],{"class":327},[321,27539,27540],{"class":436},"host",[321,27542,24823],{"class":2169},[19,27544,27545],{},"启动参数里加上这行即可。具体在下方",[19,27547,27548],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1339,27550,27551,27554,27557,27560],{},[154,27552,27553],{},"--net=bridge:默认选项，表示连接到默认的网桥",[154,27555,27556],{},"--net=host:容器使用宿主机的网络",[154,27558,27559],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[154,27561,27562],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5333,27564,27565],{},"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":30,"searchDepth":167,"depth":167,"links":27567},[27568,27569,27570,27571],{"id":26882,"depth":200,"text":26883},{"id":26949,"depth":200,"text":26950},{"id":27401,"depth":200,"text":27402},{"id":27521,"depth":200,"text":27522},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26871,"description":26879},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27578,"title":27579,"body":27580,"description":27587,"extension":249,"meta":27593,"navigation":251,"path":27594,"seo":27595,"stem":27596,"__hash__":27597},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27581,"toc":27591},[27582,27585,27588],[10,27583,27579],{"id":27584},"_4dockerhub换源",[19,27586,27587],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27589,27590],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":30,"searchDepth":167,"depth":167,"links":27592},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27579,"description":27587},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27599,"title":27600,"body":27601,"description":30,"extension":249,"meta":28613,"navigation":251,"path":28614,"seo":28615,"stem":28616,"__hash__":28617},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27602,"toc":28608},[27603,27606,27610,27616,27620,27623,27963,27966,27969,27972,27977,27982,27985,27988,27991,27994,28013,28016,28027,28033,28215,28225,28241,28504,28506,28531,28546,28555,28605],[10,27604,27600],{"id":27605},"_5docker命令学习",[292,27607,27609],{"id":27608},"_51参考文档","5.1.参考文档",[19,27611,27612],{},[570,27613,27614],{"href":27614,"rel":27615},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24073],[292,27617,27619],{"id":27618},"_52常用命令","5.2.常用命令",[19,27621,27622],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[469,27624,27625,27638],{},[472,27626,27627],{},[475,27628,27629,27632,27635],{},[478,27630,27631],{"align":23944},"命令",[478,27633,27634],{"align":23944},"描述",[478,27636,27637],{"align":23944},"示例",[516,27639,27640,27651,27662,27673,27684,27695,27706,27717,27727,27738,27749,27760,27770,27781,27792,27803,27813,27823,27833,27843,27854,27865,27876,27887,27898,27909,27919,27930,27941,27952],{},[475,27641,27642,27645,27648],{},[521,27643,27644],{"align":23944},"docker run",[521,27646,27647],{"align":23944},"创建并启动一个新的容器。",[521,27649,27650],{"align":23944},"docker run -it ubuntu bash",[475,27652,27653,27656,27659],{},[521,27654,27655],{"align":23944},"docker build",[521,27657,27658],{"align":23944},"通过指定的 Dockerfile 创建一个新的镜像。",[521,27660,27661],{"align":23944},"docker build -t myimage .",[475,27663,27664,27667,27670],{},[521,27665,27666],{"align":23944},"docker pull",[521,27668,27669],{"align":23944},"从 Docker 仓库拉取镜像。",[521,27671,27672],{"align":23944},"docker pull ubuntu",[475,27674,27675,27678,27681],{},[521,27676,27677],{"align":23944},"docker push",[521,27679,27680],{"align":23944},"将本地镜像推送到 Docker 仓库。",[521,27682,27683],{"align":23944},"docker push myimage",[475,27685,27686,27689,27692],{},[521,27687,27688],{"align":23944},"docker stop",[521,27690,27691],{"align":23944},"停止一个正在运行的容器。",[521,27693,27694],{"align":23944},"docker stop container_id",[475,27696,27697,27700,27703],{},[521,27698,27699],{"align":23944},"docker start",[521,27701,27702],{"align":23944},"启动一个已经存在的容器。",[521,27704,27705],{"align":23944},"docker start container_id",[475,27707,27708,27711,27714],{},[521,27709,27710],{"align":23944},"docker restart",[521,27712,27713],{"align":23944},"重新启动容器。",[521,27715,27716],{"align":23944},"docker restart container_id",[475,27718,27719,27722,27725],{},[521,27720,27721],{"align":23944},"docker ps",[521,27723,27724],{"align":23944},"列出当前正在运行的容器。",[521,27726,27721],{"align":23944},[475,27728,27729,27732,27735],{},[521,27730,27731],{"align":23944},"docker rm",[521,27733,27734],{"align":23944},"删除一个或多个停止的容器。",[521,27736,27737],{"align":23944},"docker rm container_id",[475,27739,27740,27743,27746],{},[521,27741,27742],{"align":23944},"docker exec",[521,27744,27745],{"align":23944},"在一个正在运行的容器中执行命令。",[521,27747,27748],{"align":23944},"docker exec -it container_id bash",[475,27750,27751,27754,27757],{},[521,27752,27753],{"align":23944},"docker logs",[521,27755,27756],{"align":23944},"查看容器的日志输出。",[521,27758,27759],{"align":23944},"docker logs container_id",[475,27761,27762,27765,27768],{},[521,27763,27764],{"align":23944},"docker images",[521,27766,27767],{"align":23944},"列出本地所有镜像。",[521,27769,27764],{"align":23944},[475,27771,27772,27775,27778],{},[521,27773,27774],{"align":23944},"docker rmi",[521,27776,27777],{"align":23944},"删除一个或多个镜像。",[521,27779,27780],{"align":23944},"docker rmi myimage",[475,27782,27783,27786,27789],{},[521,27784,27785],{"align":23944},"docker network",[521,27787,27788],{"align":23944},"管理 Docker 网络。",[521,27790,27791],{"align":23944},"docker network ls",[475,27793,27794,27797,27800],{},[521,27795,27796],{"align":23944},"docker volume",[521,27798,27799],{"align":23944},"管理 Docker 数据卷。",[521,27801,27802],{"align":23944},"docker volume ls",[475,27804,27805,27808,27811],{},[521,27806,27807],{"align":23944},"docker-compose up",[521,27809,27810],{"align":23944},"启动 docker-compose.yml 中定义的所有服务。",[521,27812,27807],{"align":23944},[475,27814,27815,27818,27821],{},[521,27816,27817],{"align":23944},"docker-compose down",[521,27819,27820],{"align":23944},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[521,27822,27817],{"align":23944},[475,27824,27825,27828,27831],{},[521,27826,27827],{"align":23944},"docker info",[521,27829,27830],{"align":23944},"显示 Docker 系统的详细信息。",[521,27832,27827],{"align":23944},[475,27834,27835,27838,27841],{},[521,27836,27837],{"align":23944},"docker stats",[521,27839,27840],{"align":23944},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[521,27842,27837],{"align":23944},[475,27844,27845,27848,27851],{},[521,27846,27847],{"align":23944},"docker inspect",[521,27849,27850],{"align":23944},"查看容器或镜像的详细信息（JSON 格式）。",[521,27852,27853],{"align":23944},"docker inspect container_id",[475,27855,27856,27859,27862],{},[521,27857,27858],{"align":23944},"docker save",[521,27860,27861],{"align":23944},"将一个镜像保存为 tar 文件。",[521,27863,27864],{"align":23944},"docker save -o myimage.tar myimage",[475,27866,27867,27870,27873],{},[521,27868,27869],{"align":23944},"docker load",[521,27871,27872],{"align":23944},"从 tar 文件中加载镜像。",[521,27874,27875],{"align":23944},"docker load -i myimage.tar",[475,27877,27878,27881,27884],{},[521,27879,27880],{"align":23944},"docker tag",[521,27882,27883],{"align":23944},"为镜像添加标签（tag）。",[521,27885,27886],{"align":23944},"docker tag myimage myimage:v1",[475,27888,27889,27892,27895],{},[521,27890,27891],{"align":23944},"docker buildx build",[521,27893,27894],{"align":23944},"使用 Buildx 构建多架构镜像。",[521,27896,27897],{"align":23944},"docker buildx build -t myimage .",[475,27899,27900,27903,27906],{},[521,27901,27902],{"align":23944},"docker buildx create",[521,27904,27905],{"align":23944},"创建一个新的 Buildx 构建实例。",[521,27907,27908],{"align":23944},"docker buildx create –use",[475,27910,27911,27914,27917],{},[521,27912,27913],{"align":23944},"docker buildx ls",[521,27915,27916],{"align":23944},"列出所有可用的 Buildx 构建实例。",[521,27918,27913],{"align":23944},[475,27920,27921,27924,27927],{},[521,27922,27923],{"align":23944},"docker buildx use",[521,27925,27926],{"align":23944},"设置当前的 Buildx 构建实例。",[521,27928,27929],{"align":23944},"docker buildx use mybuilder",[475,27931,27932,27935,27938],{},[521,27933,27934],{"align":23944},"docker buildx bake",[521,27936,27937],{"align":23944},"使用 Bake 文件批量构建镜像。",[521,27939,27940],{"align":23944},"docker buildx bake -f bake.hcl",[475,27942,27943,27946,27949],{},[521,27944,27945],{"align":23944},"docker buildx build –push",[521,27947,27948],{"align":23944},"构建镜像并推送到镜像仓库。",[521,27950,27951],{"align":23944},"docker buildx build –push -t myimage .",[475,27953,27954,27957,27960],{},[521,27955,27956],{"align":23944},"docker buildx build –platform",[521,27958,27959],{"align":23944},"构建镜像并为多个平台生成支持。",[521,27961,27962],{"align":23944},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,27964,27965],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,27967,27968],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,27970,27971],{},"docker images 可以查看已经下载的镜像",[19,27973,27974],{},[28,27975],{"alt":30,"src":27976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,27978,27979],{},[481,27980,27981],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,27983,27984],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,27986,27987],{},"docker container logs 查看容器日志",[19,27989,27990],{},"docker top 查看容器里的进程",[19,27992,27993],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[312,27995,27997],{"className":24030,"code":27996,"language":24032,"meta":30,"style":30},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[318,27998,27999],{"__ignoreMap":30},[321,28000,28001,28004,28007,28010],{"class":323,"line":324},[321,28002,28003],{"class":2169},"如：docker",[321,28005,28006],{"class":436}," cp",[321,28008,28009],{"class":436}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[321,28011,28012],{"class":436}," \u002Fmydata\u002Fnginx\n",[19,28014,28015],{},"docker run时在启动容器的时候会有几个常用的选项：",[1339,28017,28018,28021,28024],{},[154,28019,28020],{},"-d选项：表示后台运行",[154,28022,28023],{},"-P选项：随机端口映射",[154,28025,28026],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[292,28028,28030],{"id":28029},"_53run命令的参数非常重要",[481,28031,28032],{},"5.3.run命令的参数（非常重要）",[469,28034,28035,28048],{},[472,28036,28037],{},[475,28038,28039,28042,28045],{},[478,28040,28041],{"align":23944},"参数\u002F配置",[478,28043,28044],{"align":23944},"功能说明",[478,28046,28047],{"align":23944},"重要性与参考依据",[516,28049,28050,28061,28072,28083,28094,28105,28116,28127,28138,28149,28160,28171,28182,28193,28204],{},[475,28051,28052,28055,28058],{},[521,28053,28054],{"align":23944},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[521,28056,28057],{"align":23944},"指定容器名称，便于后续管理",[521,28059,28060],{"align":23944},"替代随机生成的容器名。",[475,28062,28063,28066,28069],{},[521,28064,28065],{"align":23944},"–gpus all",[521,28067,28068],{"align":23944},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[521,28070,28071],{"align":23944},"用于CUDA加速等GPU依赖任务。",[475,28073,28074,28077,28080],{},[521,28075,28076],{"align":23944},"-e NVIDIA_DRIVER_CAPABILITIES=all",[521,28078,28079],{"align":23944},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[521,28081,28082],{"align":23944},"确保容器内GPU功能完整67。",[475,28084,28085,28088,28091],{},[521,28086,28087],{"align":23944},"-dit",[521,28089,28090],{"align":23944},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[521,28092,28093],{"align":23944},"允许容器在后台运行并支持交互操作。",[475,28095,28096,28099,28102],{},[521,28097,28098],{"align":23944},"–privileged",[521,28100,28101],{"align":23944},"赋予容器完全主机权限（可访问设备、内核模块等）",[521,28103,28104],{"align":23944},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[475,28106,28107,28110,28113],{},[521,28108,28109],{"align":23944},"–net=host",[521,28111,28112],{"align":23944},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[521,28114,28115],{"align":23944},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[475,28117,28118,28121,28124],{},[521,28119,28120],{"align":23944},"–group-add audio–group-add video–group-add dialout",[521,28122,28123],{"align":23944},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[521,28125,28126],{"align":23944},"避免权限问题（如避免无法调用摄像头、麦克风）。",[475,28128,28129,28132,28135],{},[521,28130,28131],{"align":23944},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[521,28133,28134],{"align":23944},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[521,28136,28137],{"align":23944},"支持容器内运行图形界面应用（如OpenCV可视化）。",[475,28139,28140,28143,28146],{},[521,28141,28142],{"align":23944},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[521,28144,28145],{"align":23944},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[521,28147,28148],{"align":23944},"实现容器内图形显示。",[475,28150,28151,28154,28157],{},[521,28152,28153],{"align":23944},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[521,28155,28156],{"align":23944},"挂载X11认证文件（只读）",[521,28158,28159],{"align":23944},"确保容器有权连接宿主机显示服务。",[475,28161,28162,28165,28168],{},[521,28163,28164],{"align":23944},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[521,28166,28167],{"align":23944},"挂载Wayland显示协议相关目录",[521,28169,28170],{"align":23944},"支持Wayland协议的图形显示。",[475,28172,28173,28176,28179],{},[521,28174,28175],{"align":23944},"–ulimit nofile=1024:524288",[521,28177,28178],{"align":23944},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[521,28180,28181],{"align":23944},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[475,28183,28184,28187,28190],{},[521,28185,28186],{"align":23944},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[521,28188,28189],{"align":23944},"挂载宿主机用户目录到容器内同名路径",[521,28191,28192],{"align":23944},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[475,28194,28195,28198,28201],{},[521,28196,28197],{"align":23944},"-w \u002Fhome\u002Ftungchiahui",[521,28199,28200],{"align":23944},"设置容器启动后的默认工作目录",[521,28202,28203],{"align":23944},"直接进入项目路径，方便执行命令2324。",[475,28205,28206,28209,28212],{},[521,28207,28208],{"align":23944},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[521,28210,28211],{"align":23944},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[521,28213,28214],{"align":23944},"提供预配置的深度学习与机器人开发环境。",[19,28216,28217,28218,28220,28221,28224],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[318,28219,24721],{},"加不加",[318,28222,28223],{},"sudo -E","都无所谓。",[19,28226,28227,28228,28230,28231,28233,28234,28237,28238,28240],{},"用户已经被加到docker组了，不用",[318,28229,24721],{},"也行跑，其次，",[318,28232,24721],{},"运行的话，你的",[318,28235,28236],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[318,28239,28236],{},"更不可能变了。",[312,28242,28244],{"className":24030,"code":28243,"language":24032,"meta":30,"style":30},"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",[318,28245,28246,28259,28269,28279,28291,28298,28305,28312,28322,28331,28340,28354,28366,28378,28387,28397,28406,28421,28454,28481,28492,28499],{"__ignoreMap":30},[321,28247,28248,28250,28252,28254,28257],{"class":323,"line":324},[321,28249,24721],{"class":2169},[321,28251,26465],{"class":436},[321,28253,27375],{"class":436},[321,28255,28256],{"class":380}," --name=ros_opencv_cuda",[321,28258,24823],{"class":380},[321,28260,28261,28264,28267],{"class":323,"line":167},[321,28262,28263],{"class":331},"--gpus ",[321,28265,28266],{"class":436},"all",[321,28268,24823],{"class":380},[321,28270,28271,28274,28277],{"class":323,"line":200},[321,28272,28273],{"class":331},"-e ",[321,28275,28276],{"class":436},"NVIDIA_DRIVER_CAPABILITIES=all",[321,28278,24823],{"class":380},[321,28280,28281,28283,28286,28289],{"class":323,"line":1401},[321,28282,28273],{"class":331},[321,28284,28285],{"class":436},"DISPLAY=",[321,28287,28288],{"class":331},"$DISPLAY ",[321,28290,26320],{"class":380},[321,28292,28293,28296],{"class":323,"line":1407},[321,28294,28295],{"class":331},"-dit ",[321,28297,26320],{"class":380},[321,28299,28300,28303],{"class":323,"line":1421},[321,28301,28302],{"class":331},"--privileged ",[321,28304,26320],{"class":380},[321,28306,28307,28310],{"class":323,"line":1427},[321,28308,28309],{"class":331},"--net=host ",[321,28311,26320],{"class":380},[321,28313,28314,28317,28320],{"class":323,"line":1518},[321,28315,28316],{"class":331},"--group-add ",[321,28318,28319],{"class":436},"audio",[321,28321,24823],{"class":380},[321,28323,28324,28326,28329],{"class":323,"line":1524},[321,28325,28316],{"class":331},[321,28327,28328],{"class":436},"video",[321,28330,24823],{"class":380},[321,28332,28333,28335,28338],{"class":323,"line":1536},[321,28334,28316],{"class":331},[321,28336,28337],{"class":436},"dialout",[321,28339,24823],{"class":380},[321,28341,28342,28344,28347,28349,28352],{"class":323,"line":1818},[321,28343,28273],{"class":331},[321,28345,28346],{"class":436},"XAUTHORITY=",[321,28348,28236],{"class":331},[321,28350,28351],{"class":436},"\u002F.Xauthority",[321,28353,24823],{"class":380},[321,28355,28356,28358,28361,28364],{"class":323,"line":1823},[321,28357,28273],{"class":331},[321,28359,28360],{"class":436},"WAYLAND_DISPLAY=",[321,28362,28363],{"class":331},"$WAYLAND_DISPLAY ",[321,28365,26320],{"class":380},[321,28367,28368,28370,28373,28376],{"class":323,"line":1829},[321,28369,28273],{"class":331},[321,28371,28372],{"class":436},"XDG_RUNTIME_DIR=",[321,28374,28375],{"class":331},"$XDG_RUNTIME_DIR ",[321,28377,26320],{"class":380},[321,28379,28380,28382,28385],{"class":323,"line":1834},[321,28381,28273],{"class":331},[321,28383,28384],{"class":436},"QT_QPA_PLATFORM=xcb",[321,28386,24823],{"class":380},[321,28388,28389,28392,28395],{"class":323,"line":1848},[321,28390,28391],{"class":331},"-v ",[321,28393,28394],{"class":436},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[321,28396,24823],{"class":380},[321,28398,28399,28401,28404],{"class":323,"line":1853},[321,28400,28391],{"class":331},[321,28402,28403],{"class":436},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[321,28405,24823],{"class":380},[321,28407,28408,28411,28414,28416,28419],{"class":323,"line":1859},[321,28409,28410],{"class":331},"-v $HOME",[321,28412,28413],{"class":436},"\u002F.Xauthority:",[321,28415,28236],{"class":331},[321,28417,28418],{"class":436},"\u002F.Xauthority:ro",[321,28420,24823],{"class":380},[321,28422,28423,28425,28428,28430,28433,28436,28438,28441,28443,28445,28447,28449,28452],{"class":323,"line":1880},[321,28424,28391],{"class":331},[321,28426,28427],{"class":436},"\u002Frun\u002Fuser\u002F",[321,28429,25244],{"class":331},[321,28431,28432],{"class":2169},"id",[321,28434,28435],{"class":380}," -u",[321,28437,761],{"class":331},[321,28439,28440],{"class":436},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[321,28442,25244],{"class":331},[321,28444,28432],{"class":2169},[321,28446,28435],{"class":380},[321,28448,761],{"class":331},[321,28450,28451],{"class":436},"\u002Fwayland-0",[321,28453,24823],{"class":380},[321,28455,28456,28458,28460,28462,28464,28466,28468,28471,28473,28475,28477,28479],{"class":323,"line":1885},[321,28457,28391],{"class":331},[321,28459,28427],{"class":436},[321,28461,25244],{"class":331},[321,28463,28432],{"class":2169},[321,28465,28435],{"class":380},[321,28467,761],{"class":331},[321,28469,28470],{"class":436},":\u002Frun\u002Fuser\u002F",[321,28472,25244],{"class":331},[321,28474,28432],{"class":2169},[321,28476,28435],{"class":380},[321,28478,13921],{"class":331},[321,28480,26320],{"class":380},[321,28482,28483,28485,28487,28490],{"class":323,"line":1899},[321,28484,28410],{"class":331},[321,28486,1191],{"class":436},[321,28488,28489],{"class":331},"$HOME ",[321,28491,26320],{"class":380},[321,28493,28494,28497],{"class":323,"line":1904},[321,28495,28496],{"class":331},"-w $HOME ",[321,28498,26320],{"class":380},[321,28500,28501],{"class":323,"line":1933},[321,28502,28503],{"class":331},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28505,9232],{},[151,28507,28508,28516,28519,28522],{},[154,28509,28510,14002,28512,28515],{},[318,28511,28276],{},[318,28513,28514],{},"--gpus all","没有英伟达显卡请注释。",[154,28517,28518],{},"--name后面请自己为容器起名。",[154,28520,28521],{},"最后一行仓库名称请你自己找对应的镜像填上。",[154,28523,28524,28525,28530],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23761,28526,28527],{},[481,28528,28529],{},"请不要加","。",[312,28532,28534],{"className":24030,"code":28533,"language":24032,"meta":30,"style":30},"--ulimit nofile=1024:524288 \\\n",[318,28535,28536],{"__ignoreMap":30},[321,28537,28538,28541,28544],{"class":323,"line":324},[321,28539,28540],{"class":2169},"--ulimit",[321,28542,28543],{"class":436}," nofile=1024:524288",[321,28545,24823],{"class":380},[19,28547,28548,28549,28554],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23761,28550,28551],{},[481,28552,28553],{},"不建议","**.**",[312,28556,28558],{"className":24030,"code":28557,"language":24032,"meta":30,"style":30},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[318,28559,28560,28587,28596],{"__ignoreMap":30},[321,28561,28562,28565,28568,28570,28572,28574,28576,28578,28580,28583,28585],{"class":323,"line":324},[321,28563,28564],{"class":2169},"--user",[321,28566,28567],{"class":331}," $(",[321,28569,28432],{"class":2169},[321,28571,28435],{"class":380},[321,28573,761],{"class":331},[321,28575,1191],{"class":436},[321,28577,25244],{"class":331},[321,28579,28432],{"class":2169},[321,28581,28582],{"class":380}," -g",[321,28584,13921],{"class":331},[321,28586,26320],{"class":380},[321,28588,28589,28591,28594],{"class":323,"line":167},[321,28590,28391],{"class":331},[321,28592,28593],{"class":436},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[321,28595,24823],{"class":380},[321,28597,28598,28600,28603],{"class":323,"line":200},[321,28599,28391],{"class":331},[321,28601,28602],{"class":436},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[321,28604,24823],{"class":380},[5333,28606,28607],{},"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":30,"searchDepth":167,"depth":167,"links":28609},[28610,28611,28612],{"id":27608,"depth":200,"text":27609},{"id":27618,"depth":200,"text":27619},{"id":28029,"depth":200,"text":28032},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27600,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28619,"title":28620,"body":28621,"description":30,"extension":249,"meta":30244,"navigation":251,"path":30245,"seo":30246,"stem":30247,"__hash__":30248},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28622,"toc":30239},[28623,28626,28630,28633,28855,28859,28863,28866,28972,28977,28980,28985,28988,28993,28996,29001,29004,29016,29019,29024,29031,29059,29066,29142,29147,29150,29173,29175,29250,29255,29258,29262,29270,29275,29280,29284,29295,29301,29304,29307,29331,29334,29337,29365,29368,29371,29836,29839,29844,29849,29853,29876,29881,29885,29889,29892,29895,29898,29925,29928,29931,29949,29952,29955,29977,29985,29990,29995,29999,30002,30005,30008,30011,30056,30059,30077,30080,30085,30088,30109,30112,30168,30171,30176,30180,30183,30190,30193,30196,30201,30204,30220,30223,30236],[10,28624,28620],{"id":28625},"_6手动创建docker镜像",[292,28627,28629],{"id":28628},"_61dockerfile","6.1.DockerFile",[19,28631,28632],{},"常用命令：",[469,28634,28635,28646],{},[472,28636,28637],{},[475,28638,28639,28642,28644],{},[478,28640,28641],{"align":23944},"指令",[478,28643,26014],{"align":23944},[478,28645,27637],{"align":23944},[516,28647,28648,28658,28674,28685,28696,28707,28718,28729,28740,28754,28768,28779,28793,28804,28815,28829,28844],{},[475,28649,28650,28652,28655],{},[521,28651,27515],{"align":23944},[521,28653,28654],{"align":23944},"指定基础镜像，是 Dockerfile 的起点",[521,28656,28657],{"align":23944},"FROM ubuntu:22.04",[475,28659,28660,28663,28666],{},[521,28661,28662],{"align":23944},"LABEL",[521,28664,28665],{"align":23944},"添加元数据（如作者、版本等）",[521,28667,28668,28669,28673],{"align":23944},"LABEL maintainer=”",[570,28670,28672],{"href":28671},"mailto:you@example.com","you@example.com","”",[475,28675,28676,28679,28682],{},[521,28677,28678],{"align":23944},"ENV",[521,28680,28681],{"align":23944},"设置环境变量",[521,28683,28684],{"align":23944},"ENV PORT=8080",[475,28686,28687,28690,28693],{},[521,28688,28689],{"align":23944},"ARG",[521,28691,28692],{"align":23944},"构建参数，只在构建期间可用",[521,28694,28695],{"align":23944},"ARG VERSION=1.0",[475,28697,28698,28701,28704],{},[521,28699,28700],{"align":23944},"RUN",[521,28702,28703],{"align":23944},"构建镜像时运行命令",[521,28705,28706],{"align":23944},"RUN apt-get update && apt-get install -y curl",[475,28708,28709,28712,28715],{},[521,28710,28711],{"align":23944},"COPY",[521,28713,28714],{"align":23944},"复制文件到镜像中",[521,28716,28717],{"align":23944},"COPY . \u002Fapp",[475,28719,28720,28723,28726],{},[521,28721,28722],{"align":23944},"ADD",[521,28724,28725],{"align":23944},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[521,28727,28728],{"align":23944},"ADD archive.tar.gz \u002Fdata\u002F",[475,28730,28731,28734,28737],{},[521,28732,28733],{"align":23944},"WORKDIR",[521,28735,28736],{"align":23944},"设置工作目录",[521,28738,28739],{"align":23944},"WORKDIR \u002Fopt",[475,28741,28742,28745,28748],{},[521,28743,28744],{"align":23944},"CMD",[521,28746,28747],{"align":23944},"设置容器启动时默认命令（可被 docker run 覆盖）",[521,28749,28750,28751],{"align":23944},"CMD ",[321,28752,28753],{},"“node”, “index.js”",[475,28755,28756,28759,28762],{},[521,28757,28758],{"align":23944},"ENTRYPOINT",[521,28760,28761],{"align":23944},"设置容器启动时固定命令（通常用于 CLI 工具等）",[521,28763,28764,28765],{"align":23944},"ENTRYPOINT ",[321,28766,28767],{},"“python3”",[475,28769,28770,28773,28776],{},[521,28771,28772],{"align":23944},"EXPOSE",[521,28774,28775],{"align":23944},"声明镜像内服务监听的端口（不会自动映射）",[521,28777,28778],{"align":23944},"EXPOSE 80",[475,28780,28781,28784,28787],{},[521,28782,28783],{"align":23944},"VOLUME",[521,28785,28786],{"align":23944},"声明数据卷挂载点",[521,28788,28789,28790],{"align":23944},"VOLUME ",[321,28791,28792],{},"“\u002Fdata”",[475,28794,28795,28798,28801],{},[521,28796,28797],{"align":23944},"USER",[521,28799,28800],{"align":23944},"设置后续命令执行的用户",[521,28802,28803],{"align":23944},"USER appuser",[475,28805,28806,28809,28812],{},[521,28807,28808],{"align":23944},"ONBUILD",[521,28810,28811],{"align":23944},"当镜像作为其他镜像基础镜像时触发的构建指令",[521,28813,28814],{"align":23944},"ONBUILD COPY . \u002Fsrc",[475,28816,28817,28820,28823],{},[521,28818,28819],{"align":23944},"SHELL",[521,28821,28822],{"align":23944},"更改默认 shell，比如将 sh -c 改为 bash -c",[521,28824,28825,28826],{"align":23944},"SHELL ",[321,28827,28828],{},"“\u002Fbin\u002Fbash”, “-c”",[475,28830,28831,28834,28837],{},[521,28832,28833],{"align":23944},"HEALTHCHECK",[521,28835,28836],{"align":23944},"定义容器运行时的健康检查命令",[521,28838,28839,28840],{"align":23944},"`HEALTHCHECK CMD curl –fail ",[570,28841,28842],{"href":28842,"rel":28843},"http:\u002F\u002Flocalhost:8080",[24073],[475,28845,28846,28849,28852],{},[521,28847,28848],{"align":23944},"STOPSIGNAL",[521,28850,28851],{"align":23944},"容器停止时发送的信号",[521,28853,28854],{"align":23944},"STOPSIGNAL SIGKILL",[292,28856,28858],{"id":28857},"_62自己创建容器","6.2.自己创建容器",[22205,28860,28862],{"id":28861},"_621手动创建","6.2.1.手动创建",[19,28864,28865],{},"在x86电脑上编译x86的：",[312,28867,28869],{"className":24030,"code":28868,"language":24032,"meta":30,"style":30},"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",[318,28870,28871,28887,28891,28904,28908,28921,28925,28938,28942,28955,28959],{"__ignoreMap":30},[321,28872,28873,28875,28878,28881,28884],{"class":323,"line":324},[321,28874,26698],{"class":2169},[321,28876,28877],{"class":436}," build",[321,28879,28880],{"class":380}," -t",[321,28882,28883],{"class":436}," ros-melodic-cuda118-cudnn8-bionic:latest",[321,28885,28886],{"class":436}," .\n",[321,28888,28889],{"class":323,"line":167},[321,28890,2606],{"emptyLinePlaceholder":251},[321,28892,28893,28895,28897,28899,28902],{"class":323,"line":200},[321,28894,26698],{"class":2169},[321,28896,28877],{"class":436},[321,28898,28880],{"class":380},[321,28900,28901],{"class":436}," ros-noetic-focal:latest",[321,28903,28886],{"class":436},[321,28905,28906],{"class":323,"line":1401},[321,28907,2606],{"emptyLinePlaceholder":251},[321,28909,28910,28912,28914,28916,28919],{"class":323,"line":1407},[321,28911,26698],{"class":2169},[321,28913,28877],{"class":436},[321,28915,28880],{"class":380},[321,28917,28918],{"class":436}," ros-humble-jammy:latest",[321,28920,28886],{"class":436},[321,28922,28923],{"class":323,"line":1421},[321,28924,2606],{"emptyLinePlaceholder":251},[321,28926,28927,28929,28931,28933,28936],{"class":323,"line":1427},[321,28928,26698],{"class":2169},[321,28930,28877],{"class":436},[321,28932,28880],{"class":380},[321,28934,28935],{"class":436}," ros-jazzy-noble:latest",[321,28937,28886],{"class":436},[321,28939,28940],{"class":323,"line":1518},[321,28941,2606],{"emptyLinePlaceholder":251},[321,28943,28944,28946,28948,28950,28953],{"class":323,"line":1524},[321,28945,26698],{"class":2169},[321,28947,28877],{"class":436},[321,28949,28880],{"class":380},[321,28951,28952],{"class":436}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[321,28954,28886],{"class":436},[321,28956,28957],{"class":323,"line":1536},[321,28958,2606],{"emptyLinePlaceholder":251},[321,28960,28961,28963,28965,28967,28970],{"class":323,"line":1818},[321,28962,26698],{"class":2169},[321,28964,28877],{"class":436},[321,28966,28880],{"class":380},[321,28968,28969],{"class":436}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[321,28971,28886],{"class":436},[19,28973,28974],{},[28,28975],{"alt":30,"src":28976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,28978,28979],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,28981,28982],{},[28,28983],{"alt":30,"src":28984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,28986,28987],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[151,28989,28990],{},[154,28991,28992],{},"创建 Docker Hub 账户",[19,28994,28995],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[151,28997,28998],{"start":167},[154,28999,29000],{},"登录 Docker Hub",[19,29002,29003],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[312,29005,29007],{"className":24030,"code":29006,"language":24032,"meta":30,"style":30},"docker login\n",[318,29008,29009],{"__ignoreMap":30},[321,29010,29011,29013],{"class":323,"line":324},[321,29012,26698],{"class":2169},[321,29014,29015],{"class":436}," login\n",[19,29017,29018],{},"输入你的 Docker Hub 用户名和密码进行验证。",[151,29020,29021],{},[154,29022,29023],{},"为你的镜像打标签",[19,29025,29026,29027,29030],{},"Docker Hub 使用 ",[318,29028,29029],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[312,29032,29034],{"className":24030,"code":29033,"language":24032,"meta":30,"style":30},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[318,29035,29036],{"__ignoreMap":30},[321,29037,29038,29040,29043,29045,29048,29051,29054,29056],{"class":323,"line":324},[321,29039,26698],{"class":2169},[321,29041,29042],{"class":436}," tag",[321,29044,28935],{"class":436},[321,29046,29047],{"class":327}," \u003C",[321,29049,29050],{"class":436},"你的用户",[321,29052,29053],{"class":331},"名",[321,29055,1292],{"class":327},[321,29057,29058],{"class":436},"\u002Fros-jazzy-noble:latest\n",[19,29060,29061,29062,29065],{},"例如，如果你的 Docker Hub 用户名是 ",[318,29063,29064],{},"tungchiahui","，你应该执行：",[312,29067,29069],{"className":24030,"code":29068,"language":24032,"meta":30,"style":30},"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",[318,29070,29071,29082,29086,29097,29101,29112,29116,29127,29131],{"__ignoreMap":30},[321,29072,29073,29075,29077,29079],{"class":323,"line":324},[321,29074,26698],{"class":2169},[321,29076,29042],{"class":436},[321,29078,28901],{"class":436},[321,29080,29081],{"class":436}," tungchiahui\u002Fros-noetic-focal:latest\n",[321,29083,29084],{"class":323,"line":167},[321,29085,2606],{"emptyLinePlaceholder":251},[321,29087,29088,29090,29092,29094],{"class":323,"line":200},[321,29089,26698],{"class":2169},[321,29091,29042],{"class":436},[321,29093,28918],{"class":436},[321,29095,29096],{"class":436}," tungchiahui\u002Fros-humble-jammy:latest\n",[321,29098,29099],{"class":323,"line":1401},[321,29100,2606],{"emptyLinePlaceholder":251},[321,29102,29103,29105,29107,29109],{"class":323,"line":1407},[321,29104,26698],{"class":2169},[321,29106,29042],{"class":436},[321,29108,28935],{"class":436},[321,29110,29111],{"class":436}," tungchiahui\u002Fros-jazzy-noble:latest\n",[321,29113,29114],{"class":323,"line":1421},[321,29115,2606],{"emptyLinePlaceholder":251},[321,29117,29118,29120,29122,29124],{"class":323,"line":1427},[321,29119,26698],{"class":2169},[321,29121,29042],{"class":436},[321,29123,28952],{"class":436},[321,29125,29126],{"class":436}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[321,29128,29129],{"class":323,"line":1518},[321,29130,2606],{"emptyLinePlaceholder":251},[321,29132,29133,29135,29137,29139],{"class":323,"line":1524},[321,29134,26698],{"class":2169},[321,29136,29042],{"class":436},[321,29138,28969],{"class":436},[321,29140,29141],{"class":436}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[151,29143,29144],{"start":167},[154,29145,29146],{},"推送镜像到 Docker Hub",[19,29148,29149],{},"使用以下命令将镜像推送到 Docker Hub：",[312,29151,29153],{"className":24030,"code":29152,"language":24032,"meta":30,"style":30},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[318,29154,29155],{"__ignoreMap":30},[321,29156,29157,29159,29162,29164,29166,29168,29170],{"class":323,"line":324},[321,29158,26698],{"class":2169},[321,29160,29161],{"class":436}," push",[321,29163,29047],{"class":327},[321,29165,29050],{"class":436},[321,29167,29053],{"class":331},[321,29169,1292],{"class":327},[321,29171,29172],{"class":436},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29174,14840],{},[312,29176,29178],{"className":24030,"code":29177,"language":24032,"meta":30,"style":30},"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",[318,29179,29180,29188,29192,29200,29204,29212,29216,29225,29229,29237,29241],{"__ignoreMap":30},[321,29181,29182,29184,29186],{"class":323,"line":324},[321,29183,26698],{"class":2169},[321,29185,29161],{"class":436},[321,29187,29081],{"class":436},[321,29189,29190],{"class":323,"line":167},[321,29191,2606],{"emptyLinePlaceholder":251},[321,29193,29194,29196,29198],{"class":323,"line":200},[321,29195,26698],{"class":2169},[321,29197,29161],{"class":436},[321,29199,29096],{"class":436},[321,29201,29202],{"class":323,"line":1401},[321,29203,2606],{"emptyLinePlaceholder":251},[321,29205,29206,29208,29210],{"class":323,"line":1407},[321,29207,26698],{"class":2169},[321,29209,29161],{"class":436},[321,29211,29111],{"class":436},[321,29213,29214],{"class":323,"line":1421},[321,29215,2606],{"emptyLinePlaceholder":251},[321,29217,29218,29220,29222],{"class":323,"line":1427},[321,29219,26698],{"class":2169},[321,29221,29161],{"class":436},[321,29223,29224],{"class":436}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[321,29226,29227],{"class":323,"line":1518},[321,29228,2606],{"emptyLinePlaceholder":251},[321,29230,29231,29233,29235],{"class":323,"line":1524},[321,29232,26698],{"class":2169},[321,29234,29161],{"class":436},[321,29236,29141],{"class":436},[321,29238,29239],{"class":323,"line":1536},[321,29240,2606],{"emptyLinePlaceholder":251},[321,29242,29243,29245,29247],{"class":323,"line":1818},[321,29244,26698],{"class":2169},[321,29246,29161],{"class":436},[321,29248,29249],{"class":436}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[151,29251,29252],{"start":200},[154,29253,29254],{},"验证推送成功",[19,29256,29257],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29259,29260],{},[481,29261,3990],{},[1339,29263,29264,29267],{},[154,29265,29266],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[154,29268,29269],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29271,29272],{},[28,29273],{"alt":30,"src":29274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29276,29277],{},[28,29278],{"alt":30,"src":29279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22205,29281,29283],{"id":29282},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29285,29286,29287,29290,29291,29294],{},"如果您想在 ",[481,29288,29289],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[481,29292,29293],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29296,29297,29298],{},"1. ",[481,29299,29300],{},"启用 Docker 跨平台构建",[19,29302,29303],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29305,29306],{},"第一步：启用 buildx（只需执行一次）",[312,29308,29310],{"className":24030,"code":29309,"language":24032,"meta":30,"style":30},"docker buildx create --name multiarch_builder --use\n",[318,29311,29312],{"__ignoreMap":30},[321,29313,29314,29316,29319,29322,29325,29328],{"class":323,"line":324},[321,29315,26698],{"class":2169},[321,29317,29318],{"class":436}," buildx",[321,29320,29321],{"class":436}," create",[321,29323,29324],{"class":380}," --name",[321,29326,29327],{"class":436}," multiarch_builder",[321,29329,29330],{"class":380}," --use\n",[19,29332,29333],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29335,29336],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[312,29338,29340],{"className":24030,"code":29339,"language":24032,"meta":30,"style":30},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[318,29341,29342],{"__ignoreMap":30},[321,29343,29344,29346,29348,29350,29353,29356,29359,29362],{"class":323,"line":324},[321,29345,26698],{"class":2169},[321,29347,27375],{"class":436},[321,29349,27378],{"class":380},[321,29351,29352],{"class":380}," --privileged",[321,29354,29355],{"class":436}," multiarch\u002Fqemu-user-static",[321,29357,29358],{"class":380}," --reset",[321,29360,29361],{"class":380}," -p",[321,29363,29364],{"class":436}," yes\n",[19,29366,29367],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29369,29370],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[312,29372,29374],{"className":24030,"code":29373,"language":24032,"meta":30,"style":30},"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",[318,29375,29376,29418,29422,29427,29437,29447,29456,29462,29466,29470,29480,29488,29497,29503,29507,29511,29521,29529,29538,29544,29548,29552,29562,29570,29579,29585,29589,29593,29603,29611,29620,29626,29630,29634,29644,29652,29661,29667,29671,29675,29685,29693,29702,29708,29712,29716,29726,29734,29743,29749,29753,29757,29767,29775,29784,29790,29794,29798,29809,29817,29826,29832],{"__ignoreMap":30},[321,29377,29378,29380,29382,29384,29387,29390,29392,29394,29397,29399,29401,29403,29405,29408,29411,29413,29416],{"class":323,"line":324},[321,29379,26698],{"class":2169},[321,29381,29318],{"class":436},[321,29383,28877],{"class":436},[321,29385,29386],{"class":380}," --platform",[321,29388,29389],{"class":436}," linux\u002Famd64,linux\u002Farm64",[321,29391,28880],{"class":380},[321,29393,29047],{"class":327},[321,29395,29396],{"class":436},"你的镜像",[321,29398,29053],{"class":331},[321,29400,1292],{"class":327},[321,29402,1191],{"class":436},[321,29404,1242],{"class":327},[321,29406,29407],{"class":436},"标",[321,29409,29410],{"class":331},"签",[321,29412,1292],{"class":327},[321,29414,29415],{"class":380}," --push",[321,29417,28886],{"class":436},[321,29419,29420],{"class":323,"line":167},[321,29421,2606],{"emptyLinePlaceholder":251},[321,29423,29424],{"class":323,"line":200},[321,29425,29426],{"class":390},"# 例子：\n",[321,29428,29429,29431,29433,29435],{"class":323,"line":1401},[321,29430,26698],{"class":2169},[321,29432,29318],{"class":436},[321,29434,28877],{"class":436},[321,29436,24823],{"class":380},[321,29438,29439,29442,29445],{"class":323,"line":1407},[321,29440,29441],{"class":331},"--platform ",[321,29443,29444],{"class":436},"linux\u002Famd64,linux\u002Farm64",[321,29446,24823],{"class":380},[321,29448,29449,29451,29454],{"class":323,"line":1421},[321,29450,28880],{"class":380},[321,29452,29453],{"class":436}," tungchiahui\u002Fros:noetic-focal",[321,29455,24823],{"class":380},[321,29457,29458,29460],{"class":323,"line":1427},[321,29459,29415],{"class":380},[321,29461,24823],{"class":380},[321,29463,29464],{"class":323,"line":1518},[321,29465,28886],{"class":436},[321,29467,29468],{"class":323,"line":1524},[321,29469,2606],{"emptyLinePlaceholder":251},[321,29471,29472,29474,29476,29478],{"class":323,"line":1536},[321,29473,26698],{"class":2169},[321,29475,29318],{"class":436},[321,29477,28877],{"class":436},[321,29479,24823],{"class":380},[321,29481,29482,29484,29486],{"class":323,"line":1818},[321,29483,29441],{"class":331},[321,29485,29444],{"class":436},[321,29487,24823],{"class":380},[321,29489,29490,29492,29495],{"class":323,"line":1823},[321,29491,28880],{"class":380},[321,29493,29494],{"class":436}," tungchiahui\u002Fros:humble-jammy",[321,29496,24823],{"class":380},[321,29498,29499,29501],{"class":323,"line":1829},[321,29500,29415],{"class":380},[321,29502,24823],{"class":380},[321,29504,29505],{"class":323,"line":1834},[321,29506,28886],{"class":436},[321,29508,29509],{"class":323,"line":1848},[321,29510,2606],{"emptyLinePlaceholder":251},[321,29512,29513,29515,29517,29519],{"class":323,"line":1853},[321,29514,26698],{"class":2169},[321,29516,29318],{"class":436},[321,29518,28877],{"class":436},[321,29520,24823],{"class":380},[321,29522,29523,29525,29527],{"class":323,"line":1859},[321,29524,29441],{"class":331},[321,29526,29444],{"class":436},[321,29528,24823],{"class":380},[321,29530,29531,29533,29536],{"class":323,"line":1880},[321,29532,28880],{"class":380},[321,29534,29535],{"class":436}," tungchiahui\u002Fros:jazzy-noble",[321,29537,24823],{"class":380},[321,29539,29540,29542],{"class":323,"line":1885},[321,29541,29415],{"class":380},[321,29543,24823],{"class":380},[321,29545,29546],{"class":323,"line":1899},[321,29547,28886],{"class":436},[321,29549,29550],{"class":323,"line":1904},[321,29551,2606],{"emptyLinePlaceholder":251},[321,29553,29554,29556,29558,29560],{"class":323,"line":1933},[321,29555,26465],{"class":2169},[321,29557,29318],{"class":436},[321,29559,28877],{"class":436},[321,29561,24823],{"class":380},[321,29563,29564,29566,29568],{"class":323,"line":1938},[321,29565,29441],{"class":331},[321,29567,29444],{"class":436},[321,29569,24823],{"class":380},[321,29571,29572,29574,29577],{"class":323,"line":1955},[321,29573,28880],{"class":380},[321,29575,29576],{"class":436}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[321,29578,24823],{"class":380},[321,29580,29581,29583],{"class":323,"line":1960},[321,29582,29415],{"class":380},[321,29584,24823],{"class":380},[321,29586,29587],{"class":323,"line":1965},[321,29588,28886],{"class":436},[321,29590,29591],{"class":323,"line":1970},[321,29592,2606],{"emptyLinePlaceholder":251},[321,29594,29595,29597,29599,29601],{"class":323,"line":1984},[321,29596,26698],{"class":2169},[321,29598,29318],{"class":436},[321,29600,28877],{"class":436},[321,29602,24823],{"class":380},[321,29604,29605,29607,29609],{"class":323,"line":1989},[321,29606,29441],{"class":331},[321,29608,29444],{"class":436},[321,29610,24823],{"class":380},[321,29612,29613,29615,29618],{"class":323,"line":2783},[321,29614,28880],{"class":380},[321,29616,29617],{"class":436}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[321,29619,24823],{"class":380},[321,29621,29622,29624],{"class":323,"line":2797},[321,29623,29415],{"class":380},[321,29625,24823],{"class":380},[321,29627,29628],{"class":323,"line":2805},[321,29629,28886],{"class":436},[321,29631,29632],{"class":323,"line":2810},[321,29633,2606],{"emptyLinePlaceholder":251},[321,29635,29636,29638,29640,29642],{"class":323,"line":2816},[321,29637,26465],{"class":2169},[321,29639,29318],{"class":436},[321,29641,28877],{"class":436},[321,29643,24823],{"class":380},[321,29645,29646,29648,29650],{"class":323,"line":2822},[321,29647,29441],{"class":331},[321,29649,29444],{"class":436},[321,29651,24823],{"class":380},[321,29653,29654,29656,29659],{"class":323,"line":2827},[321,29655,28880],{"class":380},[321,29657,29658],{"class":436}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[321,29660,24823],{"class":380},[321,29662,29663,29665],{"class":323,"line":8155},[321,29664,29415],{"class":380},[321,29666,24823],{"class":380},[321,29668,29669],{"class":323,"line":8179},[321,29670,28886],{"class":436},[321,29672,29673],{"class":323,"line":8184},[321,29674,2606],{"emptyLinePlaceholder":251},[321,29676,29677,29679,29681,29683],{"class":323,"line":8190},[321,29678,26698],{"class":2169},[321,29680,29318],{"class":436},[321,29682,28877],{"class":436},[321,29684,24823],{"class":380},[321,29686,29687,29689,29691],{"class":323,"line":8217},[321,29688,29441],{"class":331},[321,29690,29444],{"class":436},[321,29692,24823],{"class":380},[321,29694,29695,29697,29700],{"class":323,"line":8222},[321,29696,28880],{"class":380},[321,29698,29699],{"class":436}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[321,29701,24823],{"class":380},[321,29703,29704,29706],{"class":323,"line":8228},[321,29705,29415],{"class":380},[321,29707,24823],{"class":380},[321,29709,29710],{"class":323,"line":8240},[321,29711,28886],{"class":436},[321,29713,29714],{"class":323,"line":8252},[321,29715,2606],{"emptyLinePlaceholder":251},[321,29717,29718,29720,29722,29724],{"class":323,"line":8264},[321,29719,26698],{"class":2169},[321,29721,29318],{"class":436},[321,29723,28877],{"class":436},[321,29725,24823],{"class":380},[321,29727,29728,29730,29732],{"class":323,"line":9923},[321,29729,29441],{"class":331},[321,29731,29444],{"class":436},[321,29733,24823],{"class":380},[321,29735,29736,29738,29741],{"class":323,"line":9948},[321,29737,28880],{"class":380},[321,29739,29740],{"class":436}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[321,29742,24823],{"class":380},[321,29744,29745,29747],{"class":323,"line":9971},[321,29746,29415],{"class":380},[321,29748,24823],{"class":380},[321,29750,29751],{"class":323,"line":9995},[321,29752,28886],{"class":436},[321,29754,29755],{"class":323,"line":10000},[321,29756,2606],{"emptyLinePlaceholder":251},[321,29758,29759,29761,29763,29765],{"class":323,"line":10005},[321,29760,26465],{"class":2169},[321,29762,29318],{"class":436},[321,29764,28877],{"class":436},[321,29766,24823],{"class":380},[321,29768,29769,29771,29773],{"class":323,"line":10010},[321,29770,29441],{"class":331},[321,29772,29444],{"class":436},[321,29774,24823],{"class":380},[321,29776,29777,29779,29782],{"class":323,"line":10019},[321,29778,28880],{"class":380},[321,29780,29781],{"class":436}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[321,29783,24823],{"class":380},[321,29785,29786,29788],{"class":323,"line":10024},[321,29787,29415],{"class":380},[321,29789,24823],{"class":380},[321,29791,29792],{"class":323,"line":10030},[321,29793,28886],{"class":436},[321,29795,29796],{"class":323,"line":10051},[321,29797,2606],{"emptyLinePlaceholder":251},[321,29799,29800,29803,29805,29807],{"class":323,"line":10057},[321,29801,29802],{"class":2169},"  docker",[321,29804,29318],{"class":436},[321,29806,28877],{"class":436},[321,29808,24823],{"class":380},[321,29810,29811,29813,29815],{"class":323,"line":10071},[321,29812,29441],{"class":331},[321,29814,29444],{"class":436},[321,29816,24823],{"class":380},[321,29818,29819,29821,29824],{"class":323,"line":10077},[321,29820,28880],{"class":380},[321,29822,29823],{"class":436}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[321,29825,24823],{"class":380},[321,29827,29828,29830],{"class":323,"line":10104},[321,29829,29415],{"class":380},[321,29831,24823],{"class":380},[321,29833,29834],{"class":323,"line":10113},[321,29835,28886],{"class":436},[19,29837,29838],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29840,29841],{},[28,29842],{"alt":30,"src":29843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29845,29846],{},[28,29847],{"alt":30,"src":29848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22205,29850,29852],{"id":29851},"_623清除构建缓存","6.2.3.清除构建缓存",[312,29854,29856],{"className":24030,"code":29855,"language":24032,"meta":30,"style":30},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[318,29857,29858,29863],{"__ignoreMap":30},[321,29859,29860],{"class":323,"line":324},[321,29861,29862],{"class":390},"# 清理BuildKit构建缓存\n",[321,29864,29865,29867,29870,29873],{"class":323,"line":167},[321,29866,26698],{"class":2169},[321,29868,29869],{"class":436}," builder",[321,29871,29872],{"class":436}," prune",[321,29874,29875],{"class":380}," -f\n",[19,29877,29878],{},[28,29879],{"alt":30,"src":29880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[292,29882,29884],{"id":29883},"_63补充","6.3.补充",[22205,29886,29888],{"id":29887},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,29890,29891],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,29893,29894],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,29896,29897],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[312,29899,29901],{"className":24030,"code":29900,"language":24032,"meta":30,"style":30},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[318,29902,29903,29910],{"__ignoreMap":30},[321,29904,29905,29907],{"class":323,"line":324},[321,29906,27515],{"class":2169},[321,29908,29909],{"class":436}," nginx\n",[321,29911,29912,29914,29917,29920,29922],{"class":323,"line":167},[321,29913,28700],{"class":2169},[321,29915,29916],{"class":436}," echo",[321,29918,29919],{"class":436}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[321,29921,26367],{"class":327},[321,29923,29924],{"class":436}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,29926,29927],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,29929,29930],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[312,29932,29934],{"className":24030,"code":29933,"language":24032,"meta":30,"style":30},"docker build -t nginx:tuling .\n",[318,29935,29936],{"__ignoreMap":30},[321,29937,29938,29940,29942,29944,29947],{"class":323,"line":324},[321,29939,26698],{"class":2169},[321,29941,28877],{"class":436},[321,29943,28880],{"class":380},[321,29945,29946],{"class":436}," nginx:tuling",[321,29948,28886],{"class":436},[19,29950,29951],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,29953,29954],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[312,29956,29958],{"className":24030,"code":29957,"language":24032,"meta":30,"style":30},"docker run -d -p 92:80 nginx:tuling\n",[318,29959,29960],{"__ignoreMap":30},[321,29961,29962,29964,29966,29969,29971,29974],{"class":323,"line":324},[321,29963,26698],{"class":2169},[321,29965,27375],{"class":436},[321,29967,29968],{"class":380}," -d",[321,29970,29361],{"class":380},[321,29972,29973],{"class":436}," 92:80",[321,29975,29976],{"class":436}," nginx:tuling\n",[19,29978,29979,29980],{},"4、访问 ",[570,29981,29984],{"href":29982,"rel":29983},"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",[24073],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,29986,29987],{},[28,29988],{"alt":30,"src":29989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,29991,29992],{},[28,29993],{"alt":30,"src":29994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22205,29996,29998],{"id":29997},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30000,30001],{},"只需要知道大体流程即可",[19,30003,30004],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30006,30007],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30009,30010],{},"2、在Dockerfile中添加以下内容",[312,30012,30014],{"className":26236,"code":30013,"language":26238,"meta":30,"style":30},"# 基于哪个镜像\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",[318,30015,30016,30021,30026,30031,30036,30041,30046,30051],{"__ignoreMap":30},[321,30017,30018],{"class":323,"line":324},[321,30019,30020],{},"# 基于哪个镜像\n",[321,30022,30023],{"class":323,"line":167},[321,30024,30025],{},"From java:8\n",[321,30027,30028],{"class":323,"line":200},[321,30029,30030],{},"# 复制文件到容器\n",[321,30032,30033],{"class":323,"line":1401},[321,30034,30035],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[321,30037,30038],{"class":323,"line":1407},[321,30039,30040],{},"# 声明需要暴露的端口\n",[321,30042,30043],{"class":323,"line":1421},[321,30044,30045],{},"EXPOSE 8877\n",[321,30047,30048],{"class":323,"line":1427},[321,30049,30050],{},"# 配置容器启动后执行的命令\n",[321,30052,30053],{"class":323,"line":1518},[321,30054,30055],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30057,30058],{},"3、使用docker build命令构建镜像",[312,30060,30062],{"className":24030,"code":30061,"language":24032,"meta":30,"style":30},"docker build -t tulingmall-member:0.0.5 .\n",[318,30063,30064],{"__ignoreMap":30},[321,30065,30066,30068,30070,30072,30075],{"class":323,"line":324},[321,30067,26698],{"class":2169},[321,30069,28877],{"class":436},[321,30071,28880],{"class":380},[321,30073,30074],{"class":436}," tulingmall-member:0.0.5",[321,30076,28886],{"class":436},[19,30078,30079],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30081,30082],{},[28,30083],{"alt":30,"src":30084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30086,30087],{},"4、启动镜像，加-d可在后台启动",[312,30089,30091],{"className":24030,"code":30090,"language":24032,"meta":30,"style":30},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[318,30092,30093],{"__ignoreMap":30},[321,30094,30095,30097,30099,30101,30103,30106],{"class":323,"line":324},[321,30096,26698],{"class":2169},[321,30098,27375],{"class":436},[321,30100,29968],{"class":380},[321,30102,29361],{"class":380},[321,30104,30105],{"class":436}," 8877:8877",[321,30107,30108],{"class":436}," tulingmall-member:0.0.5\n",[19,30110,30111],{},"加上JVM参数：",[312,30113,30115],{"className":24030,"code":30114,"language":24032,"meta":30,"style":30},"# --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",[318,30116,30117,30122,30137,30147,30156,30163],{"__ignoreMap":30},[321,30118,30119],{"class":323,"line":324},[321,30120,30121],{"class":390},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[321,30123,30124,30126,30128,30131,30133,30135],{"class":323,"line":167},[321,30125,26698],{"class":2169},[321,30127,27375],{"class":436},[321,30129,30130],{"class":380},"  -d",[321,30132,29361],{"class":380},[321,30134,30105],{"class":436},[321,30136,24823],{"class":380},[321,30138,30139,30141,30144],{"class":323,"line":200},[321,30140,28273],{"class":331},[321,30142,30143],{"class":436},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[321,30145,30146],{"class":380},"  \\\n",[321,30148,30149,30151,30154],{"class":323,"line":1401},[321,30150,28273],{"class":331},[321,30152,30153],{"class":436},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[321,30155,30146],{"class":380},[321,30157,30158,30161],{"class":323,"line":1407},[321,30159,30160],{"class":331},"--cap-add=SYS_PTRACE  ",[321,30162,26320],{"class":380},[321,30164,30165],{"class":323,"line":1421},[321,30166,30167],{"class":331},"tulingmall-member:0.0.5\n",[19,30169,30170],{},"5、访问会员服务接口",[19,30172,30173],{},[28,30174],{"alt":30,"src":30175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22205,30177,30179],{"id":30178},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30181,30182],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30184,30185,30186],{},"阿里云docker镜像仓库：",[570,30187,30188],{"href":30188,"rel":30189},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24073],[19,30191,30192],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30194,30195],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30197,30198],{},[28,30199],{"alt":30,"src":30200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30202,30203],{},"要把镜像推送到镜像仓库",[312,30205,30207],{"className":24030,"code":30206,"language":24032,"meta":30,"style":30},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[318,30208,30209],{"__ignoreMap":30},[321,30210,30211,30213,30215,30217],{"class":323,"line":324},[321,30212,26698],{"class":2169},[321,30214,29042],{"class":436},[321,30216,30074],{"class":436},[321,30218,30219],{"class":436}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30221,30222],{},"最后将镜像推送到远程仓库",[312,30224,30226],{"className":24030,"code":30225,"language":24032,"meta":30,"style":30},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[318,30227,30228],{"__ignoreMap":30},[321,30229,30230,30232,30234],{"class":323,"line":324},[321,30231,26698],{"class":2169},[321,30233,29161],{"class":436},[321,30235,30219],{"class":436},[5333,30237,30238],{},"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":30,"searchDepth":167,"depth":167,"links":30240},[30241,30242,30243],{"id":28628,"depth":200,"text":28629},{"id":28857,"depth":200,"text":28858},{"id":29883,"depth":200,"text":29884},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28620,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30250,"title":30251,"body":30252,"description":30,"extension":249,"meta":30395,"navigation":251,"path":30396,"seo":30397,"stem":30398,"__hash__":30399},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30253,"toc":30393},[30254,30257,30262,30267,30270,30275,30280,30283,30288,30293,30296,30301,30304,30307,30310,30313,30316,30319,30339,30361,30364,30367,30387,30390],[10,30255,30251],{"id":30256},"_7vscode远程开发",[151,30258,30259],{},[154,30260,30261],{},"插件1：微软Docker工具",[19,30263,30264],{},[28,30265],{"alt":30,"src":30266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30268,30269],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30271,30272],{},[28,30273],{"alt":30,"src":30274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[151,30276,30277],{"start":167},[154,30278,30279],{},"插件2：微软Docker远程开发工具",[19,30281,30282],{},"下面这是远程开发的插件。",[19,30284,30285],{},[28,30286],{"alt":30,"src":30287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30289,30290],{},[28,30291],{"alt":30,"src":30292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30294,30295],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30297,30298],{},[28,30299],{"alt":30,"src":30300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30302,30303],{},"安装完拓展之后，vscode进行链接：",[19,30305,30306],{},"1.按ctrl+shift+p",[19,30308,30309],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30311,30312],{},"3.选择目前运行的容器",[19,30314,30315],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30317,30318],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[312,30320,30322],{"className":24030,"code":30321,"language":24032,"meta":30,"style":30},"docker run -v 主机目录:容器目录 image-name\n",[318,30323,30324],{"__ignoreMap":30},[321,30325,30326,30328,30330,30333,30336],{"class":323,"line":324},[321,30327,26698],{"class":2169},[321,30329,27375],{"class":436},[321,30331,30332],{"class":380}," -v",[321,30334,30335],{"class":436}," 主机目录:容器目录",[321,30337,30338],{"class":436}," image-name\n",[312,30340,30342],{"className":24030,"code":30341,"language":24032,"meta":30,"style":30},"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",[318,30343,30344],{"__ignoreMap":30},[321,30345,30346,30348,30350,30353,30355,30358],{"class":323,"line":324},[321,30347,26698],{"class":2169},[321,30349,27375],{"class":436},[321,30351,30352],{"class":380}," -it",[321,30354,30332],{"class":380},[321,30356,30357],{"class":436}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[321,30359,30360],{"class":436}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30362,30363],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30365,30366],{},"查看挂载情况：",[312,30368,30370],{"className":24030,"code":30369,"language":24032,"meta":30,"style":30},"mount | grep -i project\n",[318,30371,30372],{"__ignoreMap":30},[321,30373,30374,30377,30379,30382,30384],{"class":323,"line":324},[321,30375,30376],{"class":2169},"mount",[321,30378,25254],{"class":327},[321,30380,30381],{"class":2169}," grep",[321,30383,26575],{"class":380},[321,30385,30386],{"class":436}," project\n",[19,30388,30389],{},"也可以通过ls来进行查看",[5333,30391,30392],{},"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":30,"searchDepth":167,"depth":167,"links":30394},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30251,"description":30},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30401,"title":30402,"body":30403,"description":23584,"extension":249,"meta":30407,"navigation":251,"path":30409,"seo":30410,"stem":30411,"__hash__":30412},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30404,"toc":30405},[],{"title":30,"searchDepth":167,"depth":167,"links":30406},[],{"category":30408},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30402,"description":23584},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30414,"title":30415,"body":30416,"description":23584,"extension":249,"meta":30420,"navigation":251,"path":30421,"seo":30422,"stem":30423,"__hash__":30424},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30417,"toc":30418},[],{"title":30,"searchDepth":167,"depth":167,"links":30419},[],{"category":30408},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30415,"description":23584},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30426,"title":30427,"body":30428,"description":23584,"extension":249,"meta":30721,"navigation":251,"path":30722,"seo":30723,"stem":30724,"__hash__":30725},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30429,"toc":30719},[30430,30433,30441,30456,30461,30512,30515,30521,30708,30713,30716],[10,30431,30427],{"id":30432},"_1验证深度学习环境",[19,30434,30435,30436],{},"关于环境的安装，看",[570,30437,30440],{"href":30438,"rel":30439},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24073],"Pytorch-->深度学习",[19,30442,30443,30444,30447,30448,30451,30452,30455],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[318,30445,30446],{},"pytorch-cuda=12.4"," 是一个“ ",[481,30449,30450],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[481,30453,30454],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30457,30458],{},[28,30459],{"alt":30,"src":30460},"\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",[312,30462,30464],{"className":24030,"code":30463,"language":24032,"meta":30,"style":30},"# 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",[318,30465,30466,30471],{"__ignoreMap":30},[321,30467,30468],{"class":323,"line":324},[321,30469,30470],{"class":390},"# CUDA 12.4\n",[321,30472,30473,30476,30478,30481,30484,30487,30490,30493,30495,30498,30501,30504,30507,30509],{"class":323,"line":167},[321,30474,30475],{"class":2169},"conda",[321,30477,24042],{"class":436},[321,30479,30480],{"class":436}," pytorch==",[321,30482,30483],{"class":380},"2.5.1",[321,30485,30486],{"class":436}," torchvision==",[321,30488,30489],{"class":380},"0.20.1",[321,30491,30492],{"class":436}," torchaudio==",[321,30494,30483],{"class":380},[321,30496,30497],{"class":436}," pytorch-cuda=",[321,30499,30500],{"class":380},"12.4",[321,30502,30503],{"class":380}," -c",[321,30505,30506],{"class":436}," pytorch",[321,30508,30503],{"class":380},[321,30510,30511],{"class":436}," nvidia\n",[19,30513,30514],{},"）：",[19,30516,30517],{},[570,30518,30519],{"href":30519,"rel":30520},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24073],[312,30522,30526],{"className":30523,"code":30524,"language":30525,"meta":30,"style":30},"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",[318,30527,30528,30533,30541,30546,30556,30572,30577,30587,30624,30631,30643,30659,30664,30674,30686,30696],{"__ignoreMap":30},[321,30529,30530],{"class":323,"line":324},[321,30531,30532],{"class":390},"# 对深度学习环境进行测试\n",[321,30534,30535,30538],{"class":323,"line":167},[321,30536,30537],{"class":327},"import",[321,30539,30540],{"class":331}," torch\n",[321,30542,30543],{"class":323,"line":200},[321,30544,30545],{"class":390},"# 查看cuda是否被激活\n",[321,30547,30548,30551,30553],{"class":323,"line":1401},[321,30549,30550],{"class":331},"flag",[321,30552,377],{"class":327},[321,30554,30555],{"class":331},"torch.cuda.is_available()\n",[321,30557,30558,30561,30563,30566,30569],{"class":323,"line":1407},[321,30559,30560],{"class":380},"print",[321,30562,332],{"class":331},[321,30564,30565],{"class":436},"\"cuda:\"",[321,30567,30568],{"class":331},", flag)   ",[321,30570,30571],{"class":390},"#返回true的话说明被激活\n",[321,30573,30574],{"class":323,"line":1421},[321,30575,30576],{"class":390},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[321,30578,30579,30582,30584],{"class":323,"line":1427},[321,30580,30581],{"class":331},"ngpu",[321,30583,377],{"class":327},[321,30585,30586],{"class":380},"1\n",[321,30588,30589,30592,30594,30597,30600,30602,30605,30608,30611,30613,30615,30617,30619,30622],{"class":323,"line":1518},[321,30590,30591],{"class":331},"device",[321,30593,377],{"class":327},[321,30595,30596],{"class":331},"torch.device(",[321,30598,30599],{"class":436},"\"cuda:0\"",[321,30601,1910],{"class":327},[321,30603,30604],{"class":331},"(torch.cuda.is_available() ",[321,30606,30607],{"class":327},"and",[321,30609,30610],{"class":331}," ngpu",[321,30612,1292],{"class":327},[321,30614,523],{"class":380},[321,30616,13921],{"class":331},[321,30618,1907],{"class":327},[321,30620,30621],{"class":436}," \"cpu\"",[321,30623,338],{"class":331},[321,30625,30626,30628],{"class":323,"line":1524},[321,30627,30560],{"class":380},[321,30629,30630],{"class":331},"(device)\n",[321,30632,30633,30635,30638,30640],{"class":323,"line":1536},[321,30634,30560],{"class":380},[321,30636,30637],{"class":331},"(torch.cuda.get_device_name(",[321,30639,523],{"class":380},[321,30641,30642],{"class":331},"))\n",[321,30644,30645,30647,30650,30652,30654,30656],{"class":323,"line":1818},[321,30646,30560],{"class":380},[321,30648,30649],{"class":331},"(torch.rand(",[321,30651,403],{"class":380},[321,30653,710],{"class":331},[321,30655,403],{"class":380},[321,30657,30658],{"class":331},").cuda())\n",[321,30660,30661],{"class":323,"line":1823},[321,30662,30663],{"class":390},"# 查看cuda和cudnn的版本\n",[321,30665,30666,30669,30671],{"class":323,"line":1829},[321,30667,30668],{"class":331},"cuda_version",[321,30670,377],{"class":327},[321,30672,30673],{"class":331},"torch.version.cuda\n",[321,30675,30676,30678,30680,30683],{"class":323,"line":1834},[321,30677,30560],{"class":380},[321,30679,332],{"class":331},[321,30681,30682],{"class":436},"\"cuda version\"",[321,30684,30685],{"class":331},",cuda_version)\n",[321,30687,30688,30691,30693],{"class":323,"line":1848},[321,30689,30690],{"class":331},"cudnn_version",[321,30692,377],{"class":327},[321,30694,30695],{"class":331},"torch.backends.cudnn.version()\n",[321,30697,30698,30700,30702,30705],{"class":323,"line":1853},[321,30699,30560],{"class":380},[321,30701,332],{"class":331},[321,30703,30704],{"class":436},"\"cudnn version\"",[321,30706,30707],{"class":331},",cudnn_version)\n",[19,30709,30710],{},[28,30711],{"alt":30,"src":30712},"\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,30714,30715],{},"cuda:0 指的是一块显卡",[5333,30717,30718],{},"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":30,"searchDepth":167,"depth":167,"links":30720},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30427,"description":23584},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30727,"title":30728,"body":30729,"description":23584,"extension":249,"meta":50533,"navigation":251,"path":50534,"seo":50535,"stem":50536,"__hash__":50537},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30730,"toc":50527},[30731,30734,30738,30742,30745,30750,30755,30758,30763,30768,30773,30776,30780,30785,30789,30794,30797,30802,30805,30808,30811,30814,30819,30822,30827,30832,30837,30842,30845,30849,30852,30857,31461,31466,31469,31474,31477,31480,31944,31947,31950,31953,31956,34007,34010,34015,34020,34815,34818,34823,35601,35605,37264,37268,37982,37986,37990,37995,38000,38005,38008,38013,38018,38023,38028,38033,38037,38042,39324,39329,39332,39335,39338,39493,39496,39499,40715,40720,41415,41419,41423,41428,41433,41436,41441,41446,41451,41456,41461,41466,41471,41476,41481,41486,41491,41496,41501,41506,41511,41516,41521,41526,41531,41536,41541,41546,41551,41556,41561,41566,41571,41576,41581,41586,41590,41594,41597,43075,43079,44726,44730,45424,45428,45431,45434,45978,45981,45985,45988,47385,47389,47392,47970,49757,49761,49764,50524],[10,30732,30728],{"id":30733},"_2经典神经网络",[292,30735,30737],{"id":30736},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22205,30739,30741],{"id":30740},"_211原理介绍","2.1.1.原理介绍",[19,30743,30744],{},"LeNet-5",[151,30746,30747],{},[154,30748,30749],{},"原理",[19,30751,30752],{},[28,30753],{"alt":30,"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-003.png",[19,30756,30757],{},"B是batch批次；C是channel通道",[151,30759,30760],{"start":167},[154,30761,30762],{},"网络参数详细",[19,30764,30765],{},[28,30766],{"alt":30,"src":30767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,30769,30770],{},[28,30771],{"alt":30,"src":30772},"\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,30774,30775],{},"AlexNet",[151,30777,30778],{},[154,30779,30749],{},[19,30781,30782],{},[28,30783],{"alt":30,"src":30784},"\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",[151,30786,30787],{"start":167},[154,30788,30762],{},[19,30790,30791],{},[28,30792],{"alt":30,"src":30793},"\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,30795,30796],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30798,30799],{},[28,30800],{"alt":30,"src":30801},"\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,30803,30804],{},"数据处理中的图像增强操作:",[19,30806,30807],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30809,30810],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30812,30813],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30815,30816],{},[28,30817],{"alt":30,"src":30818},"\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,30820,30821],{},"提升网络精确度的方法：LRN正则化",[19,30823,30824],{},[28,30825],{"alt":30,"src":30826},"\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,30828,30829],{},[28,30830],{"alt":30,"src":30831},"\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",[151,30833,30834],{"start":200},[154,30835,30836],{},"AlexNet的总结",[19,30838,30839],{},[28,30840],{"alt":30,"src":30841},"\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,30843,30844],{},"比LeNet模型要深一丢丢",[22205,30846,30848],{"id":30847},"_212代码实现","2.1.2.代码实现",[19,30850,30851],{},"（1）LeNet",[151,30853,30854],{},[154,30855,30856],{},"模型搭建",[312,30858,30860],{"className":30523,"code":30859,"language":30525,"meta":30,"style":30},"# 导入库\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",[318,30861,30862,30867,30873,30878,30891,30896,30908,30912,30932,30937,30942,30953,30958,30977,30981,30986,31035,31047,31052,31081,31116,31143,31148,31160,31165,31185,31204,31223,31227,31232,31242,31259,31270,31285,31296,31307,31322,31337,31348,31355,31359,31373,31378,31401,31406,31411,31416,31420,31425,31430,31440],{"__ignoreMap":30},[321,30863,30864],{"class":323,"line":324},[321,30865,30866],{"class":390},"# 导入库\n",[321,30868,30869,30871],{"class":323,"line":167},[321,30870,30537],{"class":327},[321,30872,30540],{"class":331},[321,30874,30875],{"class":323,"line":200},[321,30876,30877],{"class":390},"# 导入神经网络层\n",[321,30879,30880,30883,30886,30888],{"class":323,"line":1401},[321,30881,30882],{"class":327},"from",[321,30884,30885],{"class":331}," torch ",[321,30887,30537],{"class":327},[321,30889,30890],{"class":331}," nn\n",[321,30892,30893],{"class":323,"line":1407},[321,30894,30895],{"class":390},"# 导入展示神经网络参数的包\n",[321,30897,30898,30900,30903,30905],{"class":323,"line":1421},[321,30899,30882],{"class":327},[321,30901,30902],{"class":331}," torchsummary ",[321,30904,30537],{"class":327},[321,30906,30907],{"class":331}," summary\n",[321,30909,30910],{"class":323,"line":1427},[321,30911,2606],{"emptyLinePlaceholder":251},[321,30913,30914,30916,30919,30921,30924,30926,30929],{"class":323,"line":1518},[321,30915,14901],{"class":327},[321,30917,30918],{"class":2169}," LeNet",[321,30920,332],{"class":331},[321,30922,30923],{"class":2169},"nn",[321,30925,890],{"class":331},[321,30927,30928],{"class":2169},"Module",[321,30930,30931],{"class":331},"):\n",[321,30933,30934],{"class":323,"line":1524},[321,30935,30936],{"class":390},"    # 模型初始化:\n",[321,30938,30939],{"class":323,"line":1536},[321,30940,30941],{"class":390},"    # 定义一些网络层和激活函数\n",[321,30943,30944,30947,30950],{"class":323,"line":1818},[321,30945,30946],{"class":327},"    def",[321,30948,30949],{"class":380}," __init__",[321,30951,30952],{"class":331},"(self):\n",[321,30954,30955],{"class":323,"line":1823},[321,30956,30957],{"class":390},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[321,30959,30960,30963,30966,30969,30972,30975],{"class":323,"line":1829},[321,30961,30962],{"class":380},"        super",[321,30964,30965],{"class":331},"(LeNet,",[321,30967,30968],{"class":380},"self",[321,30970,30971],{"class":331},").",[321,30973,30974],{"class":380},"__init__",[321,30976,2182],{"class":331},[321,30978,30979],{"class":323,"line":1834},[321,30980,2606],{"emptyLinePlaceholder":251},[321,30982,30983],{"class":323,"line":1848},[321,30984,30985],{"class":390},"        # 定义网络层\n",[321,30987,30988,30991,30994,30996,30999,31002,31004,31006,31008,31011,31013,31015,31017,31020,31022,31024,31026,31029,31031,31033],{"class":323,"line":1853},[321,30989,30990],{"class":380},"        self",[321,30992,30993],{"class":331},".c1",[321,30995,377],{"class":327},[321,30997,30998],{"class":331},"nn.Conv2d(",[321,31000,31001],{"class":5423},"in_channels",[321,31003,377],{"class":327},[321,31005,549],{"class":380},[321,31007,710],{"class":331},[321,31009,31010],{"class":5423},"out_channels",[321,31012,377],{"class":327},[321,31014,676],{"class":380},[321,31016,710],{"class":331},[321,31018,31019],{"class":5423},"kernel_size",[321,31021,377],{"class":327},[321,31023,651],{"class":380},[321,31025,710],{"class":331},[321,31027,31028],{"class":5423},"padding",[321,31030,377],{"class":327},[321,31032,409],{"class":380},[321,31034,338],{"class":331},[321,31036,31037,31039,31042,31044],{"class":323,"line":1859},[321,31038,30990],{"class":380},[321,31040,31041],{"class":331},".sig",[321,31043,377],{"class":327},[321,31045,31046],{"class":331},"nn.Sigmoid()\n",[321,31048,31049],{"class":323,"line":1880},[321,31050,31051],{"class":390},"        # 定义池化\n",[321,31053,31054,31056,31059,31061,31064,31066,31068,31070,31072,31075,31077,31079],{"class":323,"line":1885},[321,31055,30990],{"class":380},[321,31057,31058],{"class":331},".s2",[321,31060,377],{"class":327},[321,31062,31063],{"class":331},"nn.AvgPool2d(",[321,31065,31019],{"class":5423},[321,31067,377],{"class":327},[321,31069,409],{"class":380},[321,31071,710],{"class":331},[321,31073,31074],{"class":5423},"stride",[321,31076,377],{"class":327},[321,31078,409],{"class":380},[321,31080,338],{"class":331},[321,31082,31083,31085,31088,31090,31092,31094,31096,31098,31100,31102,31104,31106,31108,31110,31112,31114],{"class":323,"line":1899},[321,31084,30990],{"class":380},[321,31086,31087],{"class":331},".c3",[321,31089,377],{"class":327},[321,31091,30998],{"class":331},[321,31093,31001],{"class":5423},[321,31095,377],{"class":327},[321,31097,676],{"class":380},[321,31099,710],{"class":331},[321,31101,31010],{"class":5423},[321,31103,377],{"class":327},[321,31105,933],{"class":380},[321,31107,710],{"class":331},[321,31109,31019],{"class":5423},[321,31111,377],{"class":327},[321,31113,651],{"class":380},[321,31115,338],{"class":331},[321,31117,31118,31120,31123,31125,31127,31129,31131,31133,31135,31137,31139,31141],{"class":323,"line":1904},[321,31119,30990],{"class":380},[321,31121,31122],{"class":331},".s4",[321,31124,377],{"class":327},[321,31126,31063],{"class":331},[321,31128,31019],{"class":5423},[321,31130,377],{"class":327},[321,31132,409],{"class":380},[321,31134,710],{"class":331},[321,31136,31074],{"class":5423},[321,31138,377],{"class":327},[321,31140,409],{"class":380},[321,31142,338],{"class":331},[321,31144,31145],{"class":323,"line":1933},[321,31146,31147],{"class":390},"        # 定义平展层\n",[321,31149,31150,31152,31155,31157],{"class":323,"line":1938},[321,31151,30990],{"class":380},[321,31153,31154],{"class":331},".flatten",[321,31156,377],{"class":327},[321,31158,31159],{"class":331},"nn.Flatten()\n",[321,31161,31162],{"class":323,"line":1955},[321,31163,31164],{"class":390},"        # 定义全连接层\n",[321,31166,31167,31169,31172,31174,31177,31179,31181,31183],{"class":323,"line":1960},[321,31168,30990],{"class":380},[321,31170,31171],{"class":331},".f5",[321,31173,377],{"class":327},[321,31175,31176],{"class":331},"nn.Linear(",[321,31178,4193],{"class":380},[321,31180,710],{"class":331},[321,31182,1149],{"class":380},[321,31184,338],{"class":331},[321,31186,31187,31189,31192,31194,31196,31198,31200,31202],{"class":323,"line":1965},[321,31188,30990],{"class":380},[321,31190,31191],{"class":331},".f6",[321,31193,377],{"class":327},[321,31195,31176],{"class":331},[321,31197,1149],{"class":380},[321,31199,710],{"class":331},[321,31201,1043],{"class":380},[321,31203,338],{"class":331},[321,31205,31206,31208,31211,31213,31215,31217,31219,31221],{"class":323,"line":1970},[321,31207,30990],{"class":380},[321,31209,31210],{"class":331},".f7",[321,31212,377],{"class":327},[321,31214,31176],{"class":331},[321,31216,1043],{"class":380},[321,31218,710],{"class":331},[321,31220,778],{"class":380},[321,31222,338],{"class":331},[321,31224,31225],{"class":323,"line":1984},[321,31226,2606],{"emptyLinePlaceholder":251},[321,31228,31229],{"class":323,"line":1989},[321,31230,31231],{"class":390},"    # 写工具->写前向传播\n",[321,31233,31234,31236,31239],{"class":323,"line":2783},[321,31235,30946],{"class":327},[321,31237,31238],{"class":2169}," forward",[321,31240,31241],{"class":331},"(self,x):\n",[321,31243,31244,31247,31249,31251,31254,31256],{"class":323,"line":2797},[321,31245,31246],{"class":331},"        x",[321,31248,377],{"class":327},[321,31250,30968],{"class":380},[321,31252,31253],{"class":331},".sig(",[321,31255,30968],{"class":380},[321,31257,31258],{"class":331},".c1(x))\n",[321,31260,31261,31263,31265,31267],{"class":323,"line":2805},[321,31262,31246],{"class":331},[321,31264,377],{"class":327},[321,31266,30968],{"class":380},[321,31268,31269],{"class":331},".s2(x)\n",[321,31271,31272,31274,31276,31278,31280,31282],{"class":323,"line":2810},[321,31273,31246],{"class":331},[321,31275,377],{"class":327},[321,31277,30968],{"class":380},[321,31279,31253],{"class":331},[321,31281,30968],{"class":380},[321,31283,31284],{"class":331},".c3(x))\n",[321,31286,31287,31289,31291,31293],{"class":323,"line":2816},[321,31288,31246],{"class":331},[321,31290,377],{"class":327},[321,31292,30968],{"class":380},[321,31294,31295],{"class":331},".s4(x)\n",[321,31297,31298,31300,31302,31304],{"class":323,"line":2822},[321,31299,31246],{"class":331},[321,31301,377],{"class":327},[321,31303,30968],{"class":380},[321,31305,31306],{"class":331},".flatten(x)\n",[321,31308,31309,31311,31313,31315,31317,31319],{"class":323,"line":2827},[321,31310,31246],{"class":331},[321,31312,377],{"class":327},[321,31314,30968],{"class":380},[321,31316,31253],{"class":331},[321,31318,30968],{"class":380},[321,31320,31321],{"class":331},".f5(x))\n",[321,31323,31324,31326,31328,31330,31332,31334],{"class":323,"line":8155},[321,31325,31246],{"class":331},[321,31327,377],{"class":327},[321,31329,30968],{"class":380},[321,31331,31253],{"class":331},[321,31333,30968],{"class":380},[321,31335,31336],{"class":331},".f6(x))\n",[321,31338,31339,31341,31343,31345],{"class":323,"line":8179},[321,31340,31246],{"class":331},[321,31342,377],{"class":327},[321,31344,30968],{"class":380},[321,31346,31347],{"class":331},".f7(x)\n",[321,31349,31350,31352],{"class":323,"line":8184},[321,31351,14959],{"class":327},[321,31353,31354],{"class":331}," x\n",[321,31356,31357],{"class":323,"line":8190},[321,31358,2606],{"emptyLinePlaceholder":251},[321,31360,31361,31363,31366,31368,31371],{"class":323,"line":8217},[321,31362,1737],{"class":327},[321,31364,31365],{"class":380}," __name__",[321,31367,3155],{"class":327},[321,31369,31370],{"class":436},"\"__main__\"",[321,31372,3945],{"class":331},[321,31374,31375],{"class":323,"line":8222},[321,31376,31377],{"class":390},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[321,31379,31380,31383,31385,31387,31390,31392,31395,31397,31399],{"class":323,"line":8228},[321,31381,31382],{"class":331},"    device",[321,31384,377],{"class":327},[321,31386,30596],{"class":331},[321,31388,31389],{"class":436},"\"cuda\"",[321,31391,1910],{"class":327},[321,31393,31394],{"class":331}," torch.cuda.is_available() ",[321,31396,1907],{"class":327},[321,31398,30621],{"class":436},[321,31400,338],{"class":331},[321,31402,31403],{"class":323,"line":8240},[321,31404,31405],{"class":390},"    # 如果就是想指定用cpu用下方代码:\n",[321,31407,31408],{"class":323,"line":8252},[321,31409,31410],{"class":390},"    # device=\"cpu\"\n",[321,31412,31413],{"class":323,"line":8264},[321,31414,31415],{"class":390},"    # print(device)\n",[321,31417,31418],{"class":323,"line":9923},[321,31419,2606],{"emptyLinePlaceholder":251},[321,31421,31422],{"class":323,"line":9948},[321,31423,31424],{"class":390},"    # 实例化模型\n",[321,31426,31427],{"class":323,"line":9971},[321,31428,31429],{"class":390},"    # 将模型放到设备中去运行\n",[321,31431,31432,31435,31437],{"class":323,"line":9995},[321,31433,31434],{"class":331},"    model",[321,31436,377],{"class":327},[321,31438,31439],{"class":331},"LeNet().to(device)\n",[321,31441,31442,31445,31448,31450,31452,31454,31456,31458],{"class":323,"line":10000},[321,31443,31444],{"class":380},"    print",[321,31446,31447],{"class":331},"(summary(model,(",[321,31449,549],{"class":380},[321,31451,710],{"class":331},[321,31453,1233],{"class":380},[321,31455,710],{"class":331},[321,31457,1233],{"class":380},[321,31459,31460],{"class":331},")))\n",[19,31462,31463],{},[28,31464],{"alt":30,"src":31465},"\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,31467,31468],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[151,31470,31471],{"start":167},[154,31472,31473],{},"训练",[19,31475,31476],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31478,31479],{},"在训练之前可以将数据展示看一下",[312,31481,31483],{"className":30523,"code":31482,"language":30525,"meta":30,"style":30},"# 建立画图的函数，用于展示数据\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",[318,31484,31485,31490,31495,31507,31519,31532,31537,31549,31554,31566,31571,31583,31587,31591,31612,31624,31629,31650,31661,31665,31670,31688,31699,31704,31715,31720,31731,31735,31740,31755,31768,31773,31778,31791,31804,31817,31822,31826,31831,31851,31868,31888,31901,31914,31924,31939],{"__ignoreMap":30},[321,31486,31487],{"class":323,"line":324},[321,31488,31489],{"class":390},"# 建立画图的函数，用于展示数据\n",[321,31491,31492],{"class":323,"line":167},[321,31493,31494],{"class":390},"# torchvision中包含很多内置的数据集\n",[321,31496,31497,31499,31502,31504],{"class":323,"line":200},[321,31498,30882],{"class":327},[321,31500,31501],{"class":331}," sklearn.externals.array_api_compat.torch ",[321,31503,30537],{"class":327},[321,31505,31506],{"class":331}," squeeze\n",[321,31508,31509,31511,31514,31516],{"class":323,"line":1401},[321,31510,30882],{"class":327},[321,31512,31513],{"class":331}," torchvision.datasets ",[321,31515,30537],{"class":327},[321,31517,31518],{"class":331}," FashionMNIST\n",[321,31520,31521,31523,31526,31529],{"class":323,"line":1407},[321,31522,30537],{"class":327},[321,31524,31525],{"class":331}," numpy ",[321,31527,31528],{"class":327},"as",[321,31530,31531],{"class":331}," np\n",[321,31533,31534],{"class":323,"line":1421},[321,31535,31536],{"class":390},"# 引入处理数据集的包\n",[321,31538,31539,31541,31544,31546],{"class":323,"line":1427},[321,31540,30882],{"class":327},[321,31542,31543],{"class":331}," torchvision ",[321,31545,30537],{"class":327},[321,31547,31548],{"class":331}," transforms\n",[321,31550,31551],{"class":323,"line":1518},[321,31552,31553],{"class":390},"# 从torch库中引入数据处理的包\n",[321,31555,31556,31558,31561,31563],{"class":323,"line":1524},[321,31557,30537],{"class":327},[321,31559,31560],{"class":331}," torch.utils.data ",[321,31562,31528],{"class":327},[321,31564,31565],{"class":331}," Data\n",[321,31567,31568],{"class":323,"line":1536},[321,31569,31570],{"class":390},"# 导入画图的库\n",[321,31572,31573,31575,31578,31580],{"class":323,"line":1818},[321,31574,30537],{"class":327},[321,31576,31577],{"class":331}," matplotlib.pyplot ",[321,31579,31528],{"class":327},[321,31581,31582],{"class":331}," plt\n",[321,31584,31585],{"class":323,"line":1823},[321,31586,2606],{"emptyLinePlaceholder":251},[321,31588,31589],{"class":323,"line":1829},[321,31590,2606],{"emptyLinePlaceholder":251},[321,31592,31593,31596,31598,31601,31604,31606,31609],{"class":323,"line":1834},[321,31594,31595],{"class":331},"train_data",[321,31597,377],{"class":327},[321,31599,31600],{"class":331},"FashionMNIST(",[321,31602,31603],{"class":5423},"root",[321,31605,377],{"class":327},[321,31607,31608],{"class":436},"'.\u002Fdata'",[321,31610,31611],{"class":331},",\n",[321,31613,31614,31617,31619,31622],{"class":323,"line":1848},[321,31615,31616],{"class":5423},"                        train",[321,31618,377],{"class":327},[321,31620,31621],{"class":380},"True",[321,31623,31611],{"class":331},[321,31625,31626],{"class":323,"line":1853},[321,31627,31628],{"class":390},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[321,31630,31631,31634,31636,31639,31642,31644,31647],{"class":323,"line":1859},[321,31632,31633],{"class":5423},"                        transform",[321,31635,377],{"class":327},[321,31637,31638],{"class":331},"transforms.Compose([transforms.Resize(",[321,31640,31641],{"class":5423},"size",[321,31643,377],{"class":327},[321,31645,31646],{"class":380},"224",[321,31648,31649],{"class":331},"),transforms.ToTensor()]),\n",[321,31651,31652,31655,31657,31659],{"class":323,"line":1880},[321,31653,31654],{"class":5423},"                        download",[321,31656,377],{"class":327},[321,31658,31621],{"class":380},[321,31660,338],{"class":331},[321,31662,31663],{"class":323,"line":1885},[321,31664,2606],{"emptyLinePlaceholder":251},[321,31666,31667],{"class":323,"line":1899},[321,31668,31669],{"class":390},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[321,31671,31672,31675,31677,31680,31683,31685],{"class":323,"line":1904},[321,31673,31674],{"class":331},"train_loader",[321,31676,377],{"class":327},[321,31678,31679],{"class":331},"Data.DataLoader(",[321,31681,31682],{"class":5423},"dataset",[321,31684,377],{"class":327},[321,31686,31687],{"class":331},"train_data,\n",[321,31689,31690,31693,31695,31697],{"class":323,"line":1933},[321,31691,31692],{"class":5423},"                             batch_size",[321,31694,377],{"class":327},[321,31696,535],{"class":380},[321,31698,31611],{"class":331},[321,31700,31701],{"class":323,"line":1938},[321,31702,31703],{"class":390},"                             # 数据是否打乱\n",[321,31705,31706,31709,31711,31713],{"class":323,"line":1955},[321,31707,31708],{"class":5423},"                             shuffle",[321,31710,377],{"class":327},[321,31712,31621],{"class":380},[321,31714,31611],{"class":331},[321,31716,31717],{"class":323,"line":1960},[321,31718,31719],{"class":390},"                             # 规定加载数据的进程\n",[321,31721,31722,31725,31727,31729],{"class":323,"line":1965},[321,31723,31724],{"class":5423},"                             num_workers",[321,31726,377],{"class":327},[321,31728,523],{"class":380},[321,31730,338],{"class":331},[321,31732,31733],{"class":323,"line":1970},[321,31734,2606],{"emptyLinePlaceholder":251},[321,31736,31737],{"class":323,"line":1984},[321,31738,31739],{"class":390},"# 获得一个batch的数据\n",[321,31741,31742,31744,31747,31749,31752],{"class":323,"line":1989},[321,31743,3231],{"class":327},[321,31745,31746],{"class":331}," step,(b_x,b_y) ",[321,31748,26188],{"class":327},[321,31750,31751],{"class":380}," enumerate",[321,31753,31754],{"class":331},"(train_loader):\n",[321,31756,31757,31759,31762,31764,31766],{"class":323,"line":2783},[321,31758,3307],{"class":327},[321,31760,31761],{"class":331}," step ",[321,31763,1292],{"class":327},[321,31765,4299],{"class":380},[321,31767,3945],{"class":331},[321,31769,31770],{"class":323,"line":2797},[321,31771,31772],{"class":327},"        break\n",[321,31774,31775],{"class":323,"line":2805},[321,31776,31777],{"class":390},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[321,31779,31780,31783,31785,31788],{"class":323,"line":2810},[321,31781,31782],{"class":331},"batch_x",[321,31784,377],{"class":327},[321,31786,31787],{"class":331},"b_x.squeeze().numpy()  ",[321,31789,31790],{"class":390},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[321,31792,31793,31796,31798,31801],{"class":323,"line":2816},[321,31794,31795],{"class":331},"batch_y",[321,31797,377],{"class":327},[321,31799,31800],{"class":331},"b_y.numpy()   ",[321,31802,31803],{"class":390},"#将张量转换成功numpy数组\n",[321,31805,31806,31809,31811,31814],{"class":323,"line":2822},[321,31807,31808],{"class":331},"class_label",[321,31810,377],{"class":327},[321,31812,31813],{"class":331},"train_data.classes  ",[321,31815,31816],{"class":390},"#训练集标签\n",[321,31818,31819],{"class":323,"line":2827},[321,31820,31821],{"class":390},"# print(class_label)\n",[321,31823,31824],{"class":323,"line":8155},[321,31825,2606],{"emptyLinePlaceholder":251},[321,31827,31828],{"class":323,"line":8179},[321,31829,31830],{"class":390},"# 可视化一个batch的图像\n",[321,31832,31833,31836,31839,31841,31843,31845,31847,31849],{"class":323,"line":8184},[321,31834,31835],{"class":331},"plt.figure(",[321,31837,31838],{"class":5423},"figsize",[321,31840,377],{"class":327},[321,31842,332],{"class":331},[321,31844,830],{"class":380},[321,31846,710],{"class":331},[321,31848,651],{"class":380},[321,31850,30642],{"class":331},[321,31852,31853,31855,31858,31860,31863,31865],{"class":323,"line":8190},[321,31854,3231],{"class":327},[321,31856,31857],{"class":331}," ii ",[321,31859,26188],{"class":327},[321,31861,31862],{"class":331}," np.arange(",[321,31864,7565],{"class":380},[321,31866,31867],{"class":331},"(batch_y)):\n",[321,31869,31870,31873,31875,31877,31879,31882,31884,31886],{"class":323,"line":8217},[321,31871,31872],{"class":331},"    plt.subplot(",[321,31874,625],{"class":380},[321,31876,710],{"class":331},[321,31878,933],{"class":380},[321,31880,31881],{"class":331},",ii ",[321,31883,813],{"class":327},[321,31885,25263],{"class":380},[321,31887,338],{"class":331},[321,31889,31890,31893,31896,31898],{"class":323,"line":8222},[321,31891,31892],{"class":331},"    plt.imshow(batch_x[ii,:,:],",[321,31894,31895],{"class":5423},"cmap",[321,31897,377],{"class":327},[321,31899,31900],{"class":331},"plt.cm.gray)\n",[321,31902,31903,31906,31908,31910,31912],{"class":323,"line":8228},[321,31904,31905],{"class":331},"    plt.title(class_label[batch_y[ii]],",[321,31907,31641],{"class":5423},[321,31909,377],{"class":327},[321,31911,778],{"class":380},[321,31913,338],{"class":331},[321,31915,31916,31919,31922],{"class":323,"line":8240},[321,31917,31918],{"class":331},"    plt.axis(",[321,31920,31921],{"class":436},"\"off\"",[321,31923,338],{"class":331},[321,31925,31926,31929,31932,31934,31937],{"class":323,"line":8252},[321,31927,31928],{"class":331},"    plt.subplots_adjust(",[321,31930,31931],{"class":5423},"wspace",[321,31933,377],{"class":327},[321,31935,31936],{"class":380},"0.05",[321,31938,338],{"class":331},[321,31940,31941],{"class":323,"line":8264},[321,31942,31943],{"class":331},"plt.show()\n",[19,31945,31946],{},"用matplotlib进行展示的过程可以后续再补",[19,31948,31949],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,31951,31952],{},"训练次数就是按照批次过整个训练集数据的次数",[19,31954,31955],{},"模型训练：",[312,31957,31959],{"className":30523,"code":31958,"language":30525,"meta":30,"style":30},"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",[318,31960,31961,31968,31975,31979,31991,31997,32008,32018,32028,32038,32048,32053,32065,32075,32079,32083,32088,32099,32112,32123,32140,32151,32190,32206,32218,32229,32234,32245,32261,32272,32283,32294,32301,32305,32310,32315,32319,32324,32334,32355,32359,32363,32368,32373,32378,32398,32402,32407,32417,32421,32426,32435,32440,32445,32450,32460,32464,32468,32473,32478,32488,32493,32503,32508,32517,32522,32531,32536,32545,32549,32554,32564,32568,32572,32577,32592,32620,32635,32639,32644,32649,32658,32663,32672,32677,32686,32691,32700,32705,32714,32719,32728,32733,32746,32751,32761,32766,32776,32782,32788,32794,32800,32811,32817,32837,32843,32854,32860,32866,32872,32878,32884,32890,32896,32916,32922,32938,32944,32958,32964,32979,32985,32994,33000,33009,33015,33021,33030,33036,33047,33053,33072,33078,33089,33095,33115,33131,33137,33151,33157,33163,33174,33180,33186,33196,33202,33213,33219,33229,33234,33240,33289,33336,33341,33347,33366,33372,33392,33398,33404,33414,33419,33425,33441,33486,33492,33498,33504,33515,33521,33527,33533,33551,33565,33574,33583,33592,33601,33607,33613,33621,33626,33632,33643,33649,33669,33675,33681,33687,33704,33710,33716,33722,33728,33734,33761,33785,33791,33797,33803,33814,33825,33831,33848,33871,33894,33900,33905,33914,33924,33930,33935,33941,33954,33960,33971,33982,34001],{"__ignoreMap":30},[321,31962,31963,31965],{"class":323,"line":324},[321,31964,30537],{"class":327},[321,31966,31967],{"class":331}," copy\n",[321,31969,31970,31972],{"class":323,"line":167},[321,31971,30537],{"class":327},[321,31973,31974],{"class":331}," time\n",[321,31976,31977],{"class":323,"line":200},[321,31978,2606],{"emptyLinePlaceholder":251},[321,31980,31981,31983,31986,31988],{"class":323,"line":1401},[321,31982,30537],{"class":327},[321,31984,31985],{"class":331}," pandas ",[321,31987,31528],{"class":327},[321,31989,31990],{"class":331}," pd\n",[321,31992,31993,31995],{"class":323,"line":1407},[321,31994,30537],{"class":327},[321,31996,30540],{"class":331},[321,31998,31999,32001,32003,32005],{"class":323,"line":1421},[321,32000,30882],{"class":327},[321,32002,31560],{"class":331},[321,32004,30537],{"class":327},[321,32006,32007],{"class":331}," Dataset\n",[321,32009,32010,32012,32014,32016],{"class":323,"line":1427},[321,32011,30882],{"class":327},[321,32013,31513],{"class":331},[321,32015,30537],{"class":327},[321,32017,31518],{"class":331},[321,32019,32020,32022,32024,32026],{"class":323,"line":1518},[321,32021,30882],{"class":327},[321,32023,31543],{"class":331},[321,32025,30537],{"class":327},[321,32027,31548],{"class":331},[321,32029,32030,32032,32034,32036],{"class":323,"line":1524},[321,32031,30537],{"class":327},[321,32033,31560],{"class":331},[321,32035,31528],{"class":327},[321,32037,31565],{"class":331},[321,32039,32040,32042,32044,32046],{"class":323,"line":1536},[321,32041,30537],{"class":327},[321,32043,31577],{"class":331},[321,32045,31528],{"class":327},[321,32047,31582],{"class":331},[321,32049,32050],{"class":323,"line":1818},[321,32051,32052],{"class":390},"# 导入模型\n",[321,32054,32055,32057,32060,32062],{"class":323,"line":1823},[321,32056,30882],{"class":327},[321,32058,32059],{"class":331}," model ",[321,32061,30537],{"class":327},[321,32063,32064],{"class":331}," LeNet\n",[321,32066,32067,32069,32071,32073],{"class":323,"line":1829},[321,32068,30882],{"class":327},[321,32070,30885],{"class":331},[321,32072,30537],{"class":327},[321,32074,30890],{"class":331},[321,32076,32077],{"class":323,"line":1834},[321,32078,2606],{"emptyLinePlaceholder":251},[321,32080,32081],{"class":323,"line":1848},[321,32082,2606],{"emptyLinePlaceholder":251},[321,32084,32085],{"class":323,"line":1853},[321,32086,32087],{"class":390},"# 处理训练集与验证集函数--->划分数据集\n",[321,32089,32090,32093,32096],{"class":323,"line":1859},[321,32091,32092],{"class":327},"def",[321,32094,32095],{"class":2169}," train_val_data_process",[321,32097,32098],{"class":331},"():\n",[321,32100,32101,32104,32106,32108,32110],{"class":323,"line":1880},[321,32102,32103],{"class":331},"    train_data",[321,32105,377],{"class":327},[321,32107,31600],{"class":331},[321,32109,31608],{"class":436},[321,32111,31611],{"class":331},[321,32113,32114,32117,32119,32121],{"class":323,"line":1885},[321,32115,32116],{"class":5423},"                            train",[321,32118,377],{"class":327},[321,32120,31621],{"class":380},[321,32122,31611],{"class":331},[321,32124,32125,32128,32130,32132,32134,32136,32138],{"class":323,"line":1899},[321,32126,32127],{"class":5423},"                            transform",[321,32129,377],{"class":327},[321,32131,31638],{"class":331},[321,32133,31641],{"class":5423},[321,32135,377],{"class":327},[321,32137,1233],{"class":380},[321,32139,31649],{"class":331},[321,32141,32142,32145,32147,32149],{"class":323,"line":1904},[321,32143,32144],{"class":5423},"                            download",[321,32146,377],{"class":327},[321,32148,31621],{"class":380},[321,32150,338],{"class":331},[321,32152,32153,32156,32158,32161,32164,32166,32169,32171,32173,32176,32178,32180,32183,32185,32187],{"class":323,"line":1933},[321,32154,32155],{"class":331},"    train_data,val_data",[321,32157,377],{"class":327},[321,32159,32160],{"class":331},"Data.random_split(train_data,[",[321,32162,32163],{"class":380},"round",[321,32165,332],{"class":331},[321,32167,32168],{"class":380},"0.8",[321,32170,787],{"class":327},[321,32172,7565],{"class":380},[321,32174,32175],{"class":331},"(train_data)),",[321,32177,32163],{"class":380},[321,32179,332],{"class":331},[321,32181,32182],{"class":380},"0.2",[321,32184,787],{"class":327},[321,32186,7565],{"class":380},[321,32188,32189],{"class":331},"(train_data))])\n",[321,32191,32192,32195,32197,32200,32202,32204],{"class":323,"line":1938},[321,32193,32194],{"class":331},"    train_dataloader ",[321,32196,377],{"class":327},[321,32198,32199],{"class":331}," Data.DataLoader(",[321,32201,31682],{"class":5423},[321,32203,377],{"class":327},[321,32205,31687],{"class":331},[321,32207,32208,32211,32213,32216],{"class":323,"line":1955},[321,32209,32210],{"class":5423},"                                       batch_size",[321,32212,377],{"class":327},[321,32214,32215],{"class":380},"128",[321,32217,31611],{"class":331},[321,32219,32220,32223,32225,32227],{"class":323,"line":1960},[321,32221,32222],{"class":5423},"                                       shuffle",[321,32224,377],{"class":327},[321,32226,31621],{"class":380},[321,32228,31611],{"class":331},[321,32230,32231],{"class":323,"line":1965},[321,32232,32233],{"class":390},"                                       # 规定8个进程\n",[321,32235,32236,32239,32241,32243],{"class":323,"line":1970},[321,32237,32238],{"class":5423},"                                       num_workers",[321,32240,377],{"class":327},[321,32242,727],{"class":380},[321,32244,338],{"class":331},[321,32246,32247,32250,32252,32254,32256,32258],{"class":323,"line":1984},[321,32248,32249],{"class":331},"    val_dataloader",[321,32251,377],{"class":327},[321,32253,31679],{"class":331},[321,32255,31682],{"class":5423},[321,32257,377],{"class":327},[321,32259,32260],{"class":331},"val_data,\n",[321,32262,32263,32266,32268,32270],{"class":323,"line":1989},[321,32264,32265],{"class":5423},"                                   batch_size",[321,32267,377],{"class":327},[321,32269,32215],{"class":380},[321,32271,31611],{"class":331},[321,32273,32274,32277,32279,32281],{"class":323,"line":2783},[321,32275,32276],{"class":5423},"                                   shuffle",[321,32278,377],{"class":327},[321,32280,31621],{"class":380},[321,32282,31611],{"class":331},[321,32284,32285,32288,32290,32292],{"class":323,"line":2797},[321,32286,32287],{"class":5423},"                                   num_workers",[321,32289,377],{"class":327},[321,32291,727],{"class":380},[321,32293,338],{"class":331},[321,32295,32296,32298],{"class":323,"line":2805},[321,32297,4296],{"class":327},[321,32299,32300],{"class":331}," train_dataloader,val_dataloader\n",[321,32302,32303],{"class":323,"line":2810},[321,32304,2606],{"emptyLinePlaceholder":251},[321,32306,32307],{"class":323,"line":2816},[321,32308,32309],{"class":390},"# 验证是否出错\n",[321,32311,32312],{"class":323,"line":2822},[321,32313,32314],{"class":390},"# train_val_data_process()\n",[321,32316,32317],{"class":323,"line":2827},[321,32318,2606],{"emptyLinePlaceholder":251},[321,32320,32321],{"class":323,"line":8155},[321,32322,32323],{"class":390},"# 定义模型训练函数\n",[321,32325,32326,32328,32331],{"class":323,"line":8179},[321,32327,32092],{"class":327},[321,32329,32330],{"class":2169}," train_model_process",[321,32332,32333],{"class":331},"(model,train_dataloader,val_dataloader,num_epochs):\n",[321,32335,32336,32338,32340,32342,32344,32346,32348,32350,32353],{"class":323,"line":8184},[321,32337,31382],{"class":331},[321,32339,377],{"class":327},[321,32341,30596],{"class":331},[321,32343,31389],{"class":436},[321,32345,1910],{"class":327},[321,32347,31394],{"class":331},[321,32349,1907],{"class":327},[321,32351,32352],{"class":436}," 'cpu'",[321,32354,338],{"class":331},[321,32356,32357],{"class":323,"line":8190},[321,32358,2606],{"emptyLinePlaceholder":251},[321,32360,32361],{"class":323,"line":8217},[321,32362,2606],{"emptyLinePlaceholder":251},[321,32364,32365],{"class":323,"line":8222},[321,32366,32367],{"class":390},"    # 定义优化器\n",[321,32369,32370],{"class":323,"line":8228},[321,32371,32372],{"class":390},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[321,32374,32375],{"class":323,"line":8240},[321,32376,32377],{"class":390},"    # lr为学习率\n",[321,32379,32380,32383,32385,32388,32391,32393,32396],{"class":323,"line":8252},[321,32381,32382],{"class":331},"    optimizer",[321,32384,377],{"class":327},[321,32386,32387],{"class":331},"torch.optim.Adam(model.parameters(),",[321,32389,32390],{"class":5423},"lr",[321,32392,377],{"class":327},[321,32394,32395],{"class":380},"0.001",[321,32397,338],{"class":331},[321,32399,32400],{"class":323,"line":8264},[321,32401,2606],{"emptyLinePlaceholder":251},[321,32403,32404],{"class":323,"line":9923},[321,32405,32406],{"class":390},"    # 定义损失函数使用交叉熵损失函数\n",[321,32408,32409,32412,32414],{"class":323,"line":9948},[321,32410,32411],{"class":331},"    criterion",[321,32413,377],{"class":327},[321,32415,32416],{"class":331},"nn.CrossEntropyLoss()\n",[321,32418,32419],{"class":323,"line":9971},[321,32420,2606],{"emptyLinePlaceholder":251},[321,32422,32423],{"class":323,"line":9995},[321,32424,32425],{"class":390},"    # 将模型放到GPU中进行训练\n",[321,32427,32428,32430,32432],{"class":323,"line":10000},[321,32429,31434],{"class":331},[321,32431,377],{"class":327},[321,32433,32434],{"class":331},"model.to(device)\n",[321,32436,32437],{"class":323,"line":10005},[321,32438,32439],{"class":390},"    # 复制当前模型的参数\n",[321,32441,32442],{"class":323,"line":10010},[321,32443,32444],{"class":390},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[321,32446,32447],{"class":323,"line":10019},[321,32448,32449],{"class":390},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[321,32451,32452,32455,32457],{"class":323,"line":10024},[321,32453,32454],{"class":331},"    best_model_wts",[321,32456,377],{"class":327},[321,32458,32459],{"class":331},"copy.deepcopy(model.state_dict())\n",[321,32461,32462],{"class":323,"line":10030},[321,32463,2606],{"emptyLinePlaceholder":251},[321,32465,32466],{"class":323,"line":10051},[321,32467,2606],{"emptyLinePlaceholder":251},[321,32469,32470],{"class":323,"line":10057},[321,32471,32472],{"class":390},"    # 初始化参数\n",[321,32474,32475],{"class":323,"line":10071},[321,32476,32477],{"class":390},"    # 最高准确度\n",[321,32479,32480,32483,32485],{"class":323,"line":10077},[321,32481,32482],{"class":331},"    best_acc",[321,32484,377],{"class":327},[321,32486,32487],{"class":380},"0.0\n",[321,32489,32490],{"class":323,"line":10104},[321,32491,32492],{"class":390},"    # 训练集损失列表\n",[321,32494,32495,32498,32500],{"class":323,"line":10113},[321,32496,32497],{"class":331},"    train_loss_all",[321,32499,377],{"class":327},[321,32501,32502],{"class":331},"[]\n",[321,32504,32505],{"class":323,"line":10119},[321,32506,32507],{"class":390},"    # 验证集函数列表\n",[321,32509,32510,32513,32515],{"class":323,"line":10127},[321,32511,32512],{"class":331},"    val_loss_all",[321,32514,377],{"class":327},[321,32516,32502],{"class":331},[321,32518,32519],{"class":323,"line":10132},[321,32520,32521],{"class":390},"    # 训练集准确度列表\n",[321,32523,32524,32527,32529],{"class":323,"line":16811},[321,32525,32526],{"class":331},"    train_acc_all",[321,32528,377],{"class":327},[321,32530,32502],{"class":331},[321,32532,32533],{"class":323,"line":16817},[321,32534,32535],{"class":390},"    # 验证集准确度列表\n",[321,32537,32538,32541,32543],{"class":323,"line":16840},[321,32539,32540],{"class":331},"    val_acc_all",[321,32542,377],{"class":327},[321,32544,32502],{"class":331},[321,32546,32547],{"class":323,"line":16846},[321,32548,2606],{"emptyLinePlaceholder":251},[321,32550,32551],{"class":323,"line":16869},[321,32552,32553],{"class":390},"    # 保存当前时间--->方便看每轮训练的时间\n",[321,32555,32556,32559,32561],{"class":323,"line":16883},[321,32557,32558],{"class":331},"    since",[321,32560,377],{"class":327},[321,32562,32563],{"class":331},"time.time()\n",[321,32565,32566],{"class":323,"line":16903},[321,32567,2606],{"emptyLinePlaceholder":251},[321,32569,32570],{"class":323,"line":16909},[321,32571,2606],{"emptyLinePlaceholder":251},[321,32573,32574],{"class":323,"line":16920},[321,32575,32576],{"class":390},"    # 准备工作完成--->开始训练模型\n",[321,32578,32579,32581,32584,32586,32589],{"class":323,"line":16943},[321,32580,3407],{"class":327},[321,32582,32583],{"class":331}," epoch ",[321,32585,26188],{"class":327},[321,32587,32588],{"class":380}," range",[321,32590,32591],{"class":331},"(num_epochs):\n",[321,32593,32594,32597,32599,32602,32605,32607,32609,32611,32614,32616,32618],{"class":323,"line":16965},[321,32595,32596],{"class":380},"        print",[321,32598,332],{"class":331},[321,32600,32601],{"class":436},"\"Epoch ",[321,32603,32604],{"class":380},"{}",[321,32606,916],{"class":436},[321,32608,32604],{"class":380},[321,32610,583],{"class":436},[321,32612,32613],{"class":331},".format(epoch,num_epochs",[321,32615,864],{"class":327},[321,32617,549],{"class":380},[321,32619,30642],{"class":331},[321,32621,32622,32624,32626,32629,32631,32633],{"class":323,"line":16970},[321,32623,32596],{"class":380},[321,32625,332],{"class":331},[321,32627,32628],{"class":436},"\"-\"",[321,32630,787],{"class":327},[321,32632,778],{"class":380},[321,32634,338],{"class":331},[321,32636,32637],{"class":323,"line":16976},[321,32638,2606],{"emptyLinePlaceholder":251},[321,32640,32641],{"class":323,"line":16990},[321,32642,32643],{"class":390},"        # 初始化参数\n",[321,32645,32646],{"class":323,"line":17003},[321,32647,32648],{"class":390},"        # 训练集损失函数\n",[321,32650,32651,32654,32656],{"class":323,"line":17008},[321,32652,32653],{"class":331},"        train_loss",[321,32655,377],{"class":327},[321,32657,32487],{"class":380},[321,32659,32660],{"class":323,"line":17022},[321,32661,32662],{"class":390},"        # 训练集准确度\n",[321,32664,32665,32668,32670],{"class":323,"line":17027},[321,32666,32667],{"class":331},"        train_corrects",[321,32669,377],{"class":327},[321,32671,3291],{"class":380},[321,32673,32674],{"class":323,"line":17033},[321,32675,32676],{"class":390},"        # 验证集损失函数\n",[321,32678,32679,32682,32684],{"class":323,"line":17038},[321,32680,32681],{"class":331},"        val_loss",[321,32683,377],{"class":327},[321,32685,32487],{"class":380},[321,32687,32688],{"class":323,"line":17052},[321,32689,32690],{"class":390},"        # 验证集准确度\n",[321,32692,32693,32696,32698],{"class":323,"line":17057},[321,32694,32695],{"class":331},"        val_corrects",[321,32697,377],{"class":327},[321,32699,3291],{"class":380},[321,32701,32702],{"class":323,"line":17062},[321,32703,32704],{"class":390},"        # 训练集样本数量\n",[321,32706,32707,32710,32712],{"class":323,"line":17076},[321,32708,32709],{"class":331},"        train_num",[321,32711,377],{"class":327},[321,32713,3291],{"class":380},[321,32715,32716],{"class":323,"line":17088},[321,32717,32718],{"class":390},"        # 验证集样本数量\n",[321,32720,32721,32724,32726],{"class":323,"line":17093},[321,32722,32723],{"class":331},"        val_num",[321,32725,377],{"class":327},[321,32727,3291],{"class":380},[321,32729,32730],{"class":323,"line":17106},[321,32731,32732],{"class":390},"        # 将数据放到设备,并开始训练\n",[321,32734,32735,32737,32739,32741,32743],{"class":323,"line":17111},[321,32736,3609],{"class":327},[321,32738,31746],{"class":331},[321,32740,26188],{"class":327},[321,32742,31751],{"class":380},[321,32744,32745],{"class":331},"(train_dataloader):\n",[321,32747,32748],{"class":323,"line":17116},[321,32749,32750],{"class":390},"            # 将特征放入到训练设备\n",[321,32752,32753,32756,32758],{"class":323,"line":17121},[321,32754,32755],{"class":331},"            b_x",[321,32757,377],{"class":327},[321,32759,32760],{"class":331},"b_x.to(device)\n",[321,32762,32763],{"class":323,"line":17134},[321,32764,32765],{"class":390},"            # 将标签放入到训练设备当中\n",[321,32767,32768,32771,32773],{"class":323,"line":17139},[321,32769,32770],{"class":331},"            b_y",[321,32772,377],{"class":327},[321,32774,32775],{"class":331},"b_y.to(device)\n",[321,32777,32779],{"class":323,"line":32778},98,[321,32780,32781],{"class":390},"            # 设置模型为训练模式\n",[321,32783,32785],{"class":323,"line":32784},99,[321,32786,32787],{"class":331},"            model.train()\n",[321,32789,32791],{"class":323,"line":32790},100,[321,32792,32793],{"class":390},"            # 将数据放到模型当中,开始前向传播\n",[321,32795,32797],{"class":323,"line":32796},101,[321,32798,32799],{"class":390},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[321,32801,32803,32806,32808],{"class":323,"line":32802},102,[321,32804,32805],{"class":331},"            output",[321,32807,377],{"class":327},[321,32809,32810],{"class":331},"model(b_x)\n",[321,32812,32814],{"class":323,"line":32813},103,[321,32815,32816],{"class":390},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[321,32818,32820,32823,32825,32828,32831,32833,32835],{"class":323,"line":32819},104,[321,32821,32822],{"class":331},"            pre_lab",[321,32824,377],{"class":327},[321,32826,32827],{"class":331},"torch.argmax(output,",[321,32829,32830],{"class":5423},"dim",[321,32832,377],{"class":327},[321,32834,549],{"class":380},[321,32836,338],{"class":331},[321,32838,32840],{"class":323,"line":32839},105,[321,32841,32842],{"class":390},"            # 计算每一个batch的损失函数\n",[321,32844,32846,32849,32851],{"class":323,"line":32845},106,[321,32847,32848],{"class":331},"            loss",[321,32850,377],{"class":327},[321,32852,32853],{"class":331},"criterion(output,b_y)\n",[321,32855,32857],{"class":323,"line":32856},107,[321,32858,32859],{"class":390},"            # 将梯度初始化为0\n",[321,32861,32863],{"class":323,"line":32862},108,[321,32864,32865],{"class":331},"            optimizer.zero_grad()\n",[321,32867,32869],{"class":323,"line":32868},109,[321,32870,32871],{"class":390},"            # 梯度置为0后再进行反向传播\n",[321,32873,32875],{"class":323,"line":32874},110,[321,32876,32877],{"class":331},"            loss.backward()\n",[321,32879,32881],{"class":323,"line":32880},111,[321,32882,32883],{"class":390},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[321,32885,32887],{"class":323,"line":32886},112,[321,32888,32889],{"class":331},"            optimizer.step()\n",[321,32891,32893],{"class":323,"line":32892},113,[321,32894,32895],{"class":390},"            # loss.item()指的是batch的平均损失\n",[321,32897,32899,32902,32904,32907,32909,32912,32914],{"class":323,"line":32898},114,[321,32900,32901],{"class":331},"            train_loss",[321,32903,9684],{"class":327},[321,32905,32906],{"class":331},"loss.item()",[321,32908,787],{"class":327},[321,32910,32911],{"class":331},"b_x.size(",[321,32913,523],{"class":380},[321,32915,338],{"class":331},[321,32917,32919],{"class":323,"line":32918},115,[321,32920,32921],{"class":390},"            # 计算每个批次中正确预测的数量\n",[321,32923,32925,32928,32930,32933,32935],{"class":323,"line":32924},116,[321,32926,32927],{"class":331},"            train_corrects",[321,32929,9684],{"class":327},[321,32931,32932],{"class":331},"torch.sum(pre_lab",[321,32934,3155],{"class":327},[321,32936,32937],{"class":331},"b_y.data)\n",[321,32939,32941],{"class":323,"line":32940},117,[321,32942,32943],{"class":390},"            # 计算目前为止一共处理了多少样本\n",[321,32945,32947,32950,32952,32954,32956],{"class":323,"line":32946},118,[321,32948,32949],{"class":331},"            train_num",[321,32951,9684],{"class":327},[321,32953,32911],{"class":331},[321,32955,523],{"class":380},[321,32957,338],{"class":331},[321,32959,32961],{"class":323,"line":32960},119,[321,32962,32963],{"class":390},"        # 验证数据\n",[321,32965,32967,32969,32972,32974,32976],{"class":323,"line":32966},120,[321,32968,3609],{"class":327},[321,32970,32971],{"class":331}," step ,(b_x,b_y) ",[321,32973,26188],{"class":327},[321,32975,31751],{"class":380},[321,32977,32978],{"class":331},"(val_dataloader):\n",[321,32980,32982],{"class":323,"line":32981},121,[321,32983,32984],{"class":390},"            # 将特征放到验证设备当中\n",[321,32986,32988,32990,32992],{"class":323,"line":32987},122,[321,32989,32755],{"class":331},[321,32991,377],{"class":327},[321,32993,32760],{"class":331},[321,32995,32997],{"class":323,"line":32996},123,[321,32998,32999],{"class":390},"            # 将标签放到放到训练设备当中\n",[321,33001,33003,33005,33007],{"class":323,"line":33002},124,[321,33004,32770],{"class":331},[321,33006,377],{"class":327},[321,33008,32775],{"class":331},[321,33010,33012],{"class":323,"line":33011},125,[321,33013,33014],{"class":390},"            # 开启验证模式，设置模型为评估模式\n",[321,33016,33018],{"class":323,"line":33017},126,[321,33019,33020],{"class":331},"            model.eval()\n",[321,33022,33024,33027],{"class":323,"line":33023},127,[321,33025,33026],{"class":327},"            with",[321,33028,33029],{"class":331}," torch.no_grad():\n",[321,33031,33033],{"class":323,"line":33032},128,[321,33034,33035],{"class":390},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[321,33037,33039,33042,33044],{"class":323,"line":33038},129,[321,33040,33041],{"class":331},"                output ",[321,33043,377],{"class":327},[321,33045,33046],{"class":331}," model(b_x)\n",[321,33048,33050],{"class":323,"line":33049},130,[321,33051,33052],{"class":390},"                # 查找每一行中最大值对应的下标\n",[321,33054,33056,33059,33061,33064,33066,33068,33070],{"class":323,"line":33055},131,[321,33057,33058],{"class":331},"                pre_lab ",[321,33060,377],{"class":327},[321,33062,33063],{"class":331}," torch.argmax(output, ",[321,33065,32830],{"class":5423},[321,33067,377],{"class":327},[321,33069,549],{"class":380},[321,33071,338],{"class":331},[321,33073,33075],{"class":323,"line":33074},132,[321,33076,33077],{"class":390},"                # 计算验证集上的当前 batch 损失\n",[321,33079,33081,33084,33086],{"class":323,"line":33080},133,[321,33082,33083],{"class":331},"                val_batch_loss ",[321,33085,377],{"class":327},[321,33087,33088],{"class":331}," criterion(output, b_y)\n",[321,33090,33092],{"class":323,"line":33091},134,[321,33093,33094],{"class":390},"                # 对损失函数进行累加（按样本数加权）\n",[321,33096,33098,33101,33103,33106,33108,33111,33113],{"class":323,"line":33097},135,[321,33099,33100],{"class":331},"                val_loss ",[321,33102,9684],{"class":327},[321,33104,33105],{"class":331}," val_batch_loss.item() ",[321,33107,787],{"class":327},[321,33109,33110],{"class":331}," b_x.size(",[321,33112,523],{"class":380},[321,33114,338],{"class":331},[321,33116,33118,33121,33123,33126,33128],{"class":323,"line":33117},136,[321,33119,33120],{"class":331},"                val_corrects ",[321,33122,9684],{"class":327},[321,33124,33125],{"class":331}," torch.sum(pre_lab ",[321,33127,3155],{"class":327},[321,33129,33130],{"class":331}," b_y.data)\n",[321,33132,33134],{"class":323,"line":33133},137,[321,33135,33136],{"class":390},"                # 当前用于验证的样本数量\n",[321,33138,33140,33143,33145,33147,33149],{"class":323,"line":33139},138,[321,33141,33142],{"class":331},"            val_num ",[321,33144,9684],{"class":327},[321,33146,33110],{"class":331},[321,33148,523],{"class":380},[321,33150,338],{"class":331},[321,33152,33154],{"class":323,"line":33153},139,[321,33155,33156],{"class":390},"        # 计算并保存每一次迭代的loss值和准确率\n",[321,33158,33160],{"class":323,"line":33159},140,[321,33161,33162],{"class":390},"        # 计算并保存训练集的loss值\n",[321,33164,33166,33169,33171],{"class":323,"line":33165},141,[321,33167,33168],{"class":331},"        train_loss_all.append(train_loss",[321,33170,916],{"class":327},[321,33172,33173],{"class":331},"train_num)\n",[321,33175,33177],{"class":323,"line":33176},142,[321,33178,33179],{"class":390},"        # 取双精度\n",[321,33181,33183],{"class":323,"line":33182},143,[321,33184,33185],{"class":390},"        # 计算并保存训练集的准确率\n",[321,33187,33189,33192,33194],{"class":323,"line":33188},144,[321,33190,33191],{"class":331},"        train_acc_all.append(train_corrects.double().item()",[321,33193,916],{"class":327},[321,33195,33173],{"class":331},[321,33197,33199],{"class":323,"line":33198},145,[321,33200,33201],{"class":390},"        # 计算并保存验证集的loss值\n",[321,33203,33205,33208,33210],{"class":323,"line":33204},146,[321,33206,33207],{"class":331},"        val_loss_all.append(val_loss",[321,33209,916],{"class":327},[321,33211,33212],{"class":331},"val_num)\n",[321,33214,33216],{"class":323,"line":33215},147,[321,33217,33218],{"class":390},"        # 计算并保存验证集的准确率\n",[321,33220,33222,33225,33227],{"class":323,"line":33221},148,[321,33223,33224],{"class":331},"        val_acc_all.append(val_corrects.double().item()",[321,33226,916],{"class":327},[321,33228,33212],{"class":331},[321,33230,33232],{"class":323,"line":33231},149,[321,33233,2606],{"emptyLinePlaceholder":251},[321,33235,33237],{"class":323,"line":33236},150,[321,33238,33239],{"class":390},"        # 打印训练一轮的loss值和准确率\n",[321,33241,33243,33245,33247,33249,33251,33254,33256,33259,33261,33264,33266,33268,33270,33272,33275,33277,33279,33282,33284,33286],{"class":323,"line":33242},151,[321,33244,32596],{"class":380},[321,33246,332],{"class":331},[321,33248,3798],{"class":436},[321,33250,32604],{"class":380},[321,33252,33253],{"class":436},"train loss:",[321,33255,1228],{"class":380},[321,33257,33258],{"class":327},":.4f",[321,33260,1278],{"class":380},[321,33262,33263],{"class":436}," train acc:",[321,33265,1228],{"class":380},[321,33267,33258],{"class":327},[321,33269,1278],{"class":380},[321,33271,3798],{"class":436},[321,33273,33274],{"class":331},".format(epoch,train_loss_all[",[321,33276,864],{"class":327},[321,33278,549],{"class":380},[321,33280,33281],{"class":331},"],train_acc_all[",[321,33283,864],{"class":327},[321,33285,549],{"class":380},[321,33287,33288],{"class":331},"]))\n",[321,33290,33292,33294,33296,33298,33300,33303,33305,33307,33309,33312,33314,33316,33318,33320,33323,33325,33327,33330,33332,33334],{"class":323,"line":33291},152,[321,33293,32596],{"class":380},[321,33295,332],{"class":331},[321,33297,3798],{"class":436},[321,33299,32604],{"class":380},[321,33301,33302],{"class":436},"val loss:",[321,33304,1228],{"class":380},[321,33306,33258],{"class":327},[321,33308,1278],{"class":380},[321,33310,33311],{"class":436}," val acc:",[321,33313,1228],{"class":380},[321,33315,33258],{"class":327},[321,33317,1278],{"class":380},[321,33319,3798],{"class":436},[321,33321,33322],{"class":331},".format(epoch,val_loss_all[",[321,33324,864],{"class":327},[321,33326,549],{"class":380},[321,33328,33329],{"class":331},"],val_acc_all[",[321,33331,864],{"class":327},[321,33333,549],{"class":380},[321,33335,33288],{"class":331},[321,33337,33339],{"class":323,"line":33338},153,[321,33340,2606],{"emptyLinePlaceholder":251},[321,33342,33344],{"class":323,"line":33343},154,[321,33345,33346],{"class":390},"        # 判断准确度--->保存最优模型\n",[321,33348,33350,33352,33355,33357,33359,33361,33363],{"class":323,"line":33349},155,[321,33351,2703],{"class":327},[321,33353,33354],{"class":331}," val_acc_all[",[321,33356,864],{"class":327},[321,33358,549],{"class":380},[321,33360,1272],{"class":331},[321,33362,1292],{"class":327},[321,33364,33365],{"class":331},"best_acc:\n",[321,33367,33369],{"class":323,"line":33368},156,[321,33370,33371],{"class":390},"            # 保存当前模型准确度\n",[321,33373,33375,33378,33380,33382,33385,33387,33389],{"class":323,"line":33374},157,[321,33376,33377],{"class":331},"            best_acc:",[321,33379,371],{"class":380},[321,33381,377],{"class":327},[321,33383,33384],{"class":331},"val_acc_all[",[321,33386,864],{"class":327},[321,33388,549],{"class":380},[321,33390,33391],{"class":331},"]\n",[321,33393,33395],{"class":323,"line":33394},158,[321,33396,33397],{"class":390},"            # 保存当前的准确度\n",[321,33399,33401],{"class":323,"line":33400},159,[321,33402,33403],{"class":390},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[321,33405,33407,33410,33412],{"class":323,"line":33406},160,[321,33408,33409],{"class":331},"            best_model_wts",[321,33411,377],{"class":327},[321,33413,32459],{"class":331},[321,33415,33417],{"class":323,"line":33416},161,[321,33418,2606],{"emptyLinePlaceholder":251},[321,33420,33422],{"class":323,"line":33421},162,[321,33423,33424],{"class":390},"        # 计算耗时\n",[321,33426,33428,33431,33433,33436,33438],{"class":323,"line":33427},163,[321,33429,33430],{"class":331},"        time_use",[321,33432,377],{"class":327},[321,33434,33435],{"class":331},"time.time()",[321,33437,864],{"class":327},[321,33439,33440],{"class":331},"since\n",[321,33442,33444,33446,33448,33451,33453,33456,33458,33460,33462,33464,33466,33469,33472,33475,33477,33480,33482,33484],{"class":323,"line":33443},164,[321,33445,32596],{"class":380},[321,33447,332],{"class":331},[321,33449,33450],{"class":436},"'训练和验证耗费的时间",[321,33452,1228],{"class":380},[321,33454,33455],{"class":327},":.0f",[321,33457,1278],{"class":380},[321,33459,876],{"class":436},[321,33461,1228],{"class":380},[321,33463,33455],{"class":327},[321,33465,1278],{"class":380},[321,33467,33468],{"class":436},"s'",[321,33470,33471],{"class":331},".format(time_use",[321,33473,33474],{"class":327},"\u002F\u002F",[321,33476,1239],{"class":380},[321,33478,33479],{"class":331},",time_use",[321,33481,660],{"class":327},[321,33483,1239],{"class":380},[321,33485,30642],{"class":331},[321,33487,33489],{"class":323,"line":33488},165,[321,33490,33491],{"class":390},"    # 选择最优参数\n",[321,33493,33495],{"class":323,"line":33494},166,[321,33496,33497],{"class":390},"    # 加载最高准确率下的模型参数\n",[321,33499,33501],{"class":323,"line":33500},167,[321,33502,33503],{"class":390},"    # model.load_state_dict(best_model_wts)\n",[321,33505,33507,33510,33513],{"class":323,"line":33506},168,[321,33508,33509],{"class":331},"    torch.save(model.state_dict(best_model_wts), ",[321,33511,33512],{"class":436},"'.\u002Fbest_model.pth'",[321,33514,338],{"class":331},[321,33516,33518],{"class":323,"line":33517},169,[321,33519,33520],{"class":390},"    # 或者写成\n",[321,33522,33524],{"class":323,"line":33523},170,[321,33525,33526],{"class":390},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[321,33528,33530],{"class":323,"line":33529},171,[321,33531,33532],{"class":390},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[321,33534,33536,33539,33541,33544,33547,33549],{"class":323,"line":33535},172,[321,33537,33538],{"class":331},"    train_process",[321,33540,377],{"class":327},[321,33542,33543],{"class":331},"pd.DataFrame(",[321,33545,33546],{"class":5423},"data",[321,33548,377],{"class":327},[321,33550,1752],{"class":331},[321,33552,33554,33557,33559,33562],{"class":323,"line":33553},173,[321,33555,33556],{"class":436},"        \"epoch\"",[321,33558,1191],{"class":331},[321,33560,33561],{"class":380},"range",[321,33563,33564],{"class":331},"(num_epochs),\n",[321,33566,33568,33571],{"class":323,"line":33567},174,[321,33569,33570],{"class":436},"        \"train_loss_all\"",[321,33572,33573],{"class":331},":train_loss_all,\n",[321,33575,33577,33580],{"class":323,"line":33576},175,[321,33578,33579],{"class":436},"        \"val_loss_all\"",[321,33581,33582],{"class":331},":val_loss_all,\n",[321,33584,33586,33589],{"class":323,"line":33585},176,[321,33587,33588],{"class":436},"        \"train_acc_all\"",[321,33590,33591],{"class":331},":train_acc_all,\n",[321,33593,33595,33598],{"class":323,"line":33594},177,[321,33596,33597],{"class":436},"        \"val_acc_all\"",[321,33599,33600],{"class":331},":val_acc_all\n",[321,33602,33604],{"class":323,"line":33603},178,[321,33605,33606],{"class":331},"    })\n",[321,33608,33610],{"class":323,"line":33609},179,[321,33611,33612],{"class":390},"    # 返回训练保存的过程\n",[321,33614,33616,33618],{"class":323,"line":33615},180,[321,33617,4296],{"class":327},[321,33619,33620],{"class":331}," train_process\n",[321,33622,33624],{"class":323,"line":33623},181,[321,33625,2606],{"emptyLinePlaceholder":251},[321,33627,33629],{"class":323,"line":33628},182,[321,33630,33631],{"class":390},"# 将loss值和精度按照图片的形式展示出来\n",[321,33633,33635,33637,33640],{"class":323,"line":33634},183,[321,33636,32092],{"class":327},[321,33638,33639],{"class":2169}," matplot_acc_loss",[321,33641,33642],{"class":331},"(train_process):\n",[321,33644,33646],{"class":323,"line":33645},184,[321,33647,33648],{"class":390},"    # 设置图的大小\n",[321,33650,33652,33655,33657,33659,33661,33663,33665,33667],{"class":323,"line":33651},185,[321,33653,33654],{"class":331},"    plt.figure(",[321,33656,31838],{"class":5423},[321,33658,377],{"class":327},[321,33660,332],{"class":331},[321,33662,830],{"class":380},[321,33664,710],{"class":331},[321,33666,625],{"class":380},[321,33668,30642],{"class":331},[321,33670,33672],{"class":323,"line":33671},186,[321,33673,33674],{"class":390},"    # 设置图中有几张图\n",[321,33676,33678],{"class":323,"line":33677},187,[321,33679,33680],{"class":390},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[321,33682,33684],{"class":323,"line":33683},188,[321,33685,33686],{"class":390},"    # ①loss图\n",[321,33688,33690,33692,33694,33696,33698,33700,33702],{"class":323,"line":33689},189,[321,33691,31872],{"class":331},[321,33693,549],{"class":380},[321,33695,710],{"class":331},[321,33697,409],{"class":380},[321,33699,710],{"class":331},[321,33701,549],{"class":380},[321,33703,338],{"class":331},[321,33705,33707],{"class":323,"line":33706},190,[321,33708,33709],{"class":390},"    # 补充:\n",[321,33711,33713],{"class":323,"line":33712},191,[321,33714,33715],{"class":390},"    # plt.subplot(nrows, ncols, index)\n",[321,33717,33719],{"class":323,"line":33718},192,[321,33720,33721],{"class":390},"    # nrows：行数\n",[321,33723,33725],{"class":323,"line":33724},193,[321,33726,33727],{"class":390},"    # ncols：列数\n",[321,33729,33731],{"class":323,"line":33730},194,[321,33732,33733],{"class":390},"    # index：目前选中第几个子图（从1开始）\n",[321,33735,33737,33740,33743,33746,33749,33751,33754,33756,33759],{"class":323,"line":33736},195,[321,33738,33739],{"class":331},"    plt.plot(train_process[",[321,33741,33742],{"class":436},"\"epoch\"",[321,33744,33745],{"class":331},"],train_process.train_loss_all,",[321,33747,33748],{"class":436},"'ro-'",[321,33750,710],{"class":331},[321,33752,33753],{"class":5423},"label",[321,33755,377],{"class":327},[321,33757,33758],{"class":436},"'train loss'",[321,33760,338],{"class":331},[321,33762,33764,33766,33768,33771,33774,33776,33778,33780,33783],{"class":323,"line":33763},196,[321,33765,33739],{"class":331},[321,33767,33742],{"class":436},[321,33769,33770],{"class":331},"],train_process.val_loss_all,",[321,33772,33773],{"class":436},"'bs--'",[321,33775,710],{"class":331},[321,33777,33753],{"class":5423},[321,33779,377],{"class":327},[321,33781,33782],{"class":436},"'val loss'",[321,33784,338],{"class":331},[321,33786,33788],{"class":323,"line":33787},197,[321,33789,33790],{"class":390},"    # 添加一个图例\n",[321,33792,33794],{"class":323,"line":33793},198,[321,33795,33796],{"class":331},"    plt.legend()\n",[321,33798,33800],{"class":323,"line":33799},199,[321,33801,33802],{"class":390},"    # 给轴添加标签\n",[321,33804,33806,33809,33812],{"class":323,"line":33805},200,[321,33807,33808],{"class":331},"    plt.xlabel(",[321,33810,33811],{"class":436},"'epoch'",[321,33813,338],{"class":331},[321,33815,33817,33820,33823],{"class":323,"line":33816},201,[321,33818,33819],{"class":331},"    plt.ylabel(",[321,33821,33822],{"class":436},"'loss'",[321,33824,338],{"class":331},[321,33826,33828],{"class":323,"line":33827},202,[321,33829,33830],{"class":390},"    # ②准确度图\n",[321,33832,33834,33836,33838,33840,33842,33844,33846],{"class":323,"line":33833},203,[321,33835,31872],{"class":331},[321,33837,549],{"class":380},[321,33839,710],{"class":331},[321,33841,409],{"class":380},[321,33843,710],{"class":331},[321,33845,409],{"class":380},[321,33847,338],{"class":331},[321,33849,33851,33853,33855,33858,33860,33862,33864,33866,33869],{"class":323,"line":33850},204,[321,33852,33739],{"class":331},[321,33854,33742],{"class":436},[321,33856,33857],{"class":331},"],train_process.train_acc_all,",[321,33859,33748],{"class":436},[321,33861,710],{"class":331},[321,33863,33753],{"class":5423},[321,33865,377],{"class":327},[321,33867,33868],{"class":436},"'train acc'",[321,33870,338],{"class":331},[321,33872,33874,33876,33878,33881,33883,33885,33887,33889,33892],{"class":323,"line":33873},205,[321,33875,33739],{"class":331},[321,33877,33742],{"class":436},[321,33879,33880],{"class":331},"],train_process.val_acc_all,",[321,33882,33773],{"class":436},[321,33884,710],{"class":331},[321,33886,33753],{"class":5423},[321,33888,377],{"class":327},[321,33890,33891],{"class":436},"'val acc'",[321,33893,338],{"class":331},[321,33895,33897],{"class":323,"line":33896},206,[321,33898,33899],{"class":390},"    # 添加图例\n",[321,33901,33903],{"class":323,"line":33902},207,[321,33904,33796],{"class":331},[321,33906,33908,33910,33912],{"class":323,"line":33907},208,[321,33909,33808],{"class":331},[321,33911,33742],{"class":436},[321,33913,338],{"class":331},[321,33915,33917,33919,33922],{"class":323,"line":33916},209,[321,33918,33819],{"class":331},[321,33920,33921],{"class":436},"\"acc\"",[321,33923,338],{"class":331},[321,33925,33927],{"class":323,"line":33926},210,[321,33928,33929],{"class":331},"    plt.show()\n",[321,33931,33933],{"class":323,"line":33932},211,[321,33934,2606],{"emptyLinePlaceholder":251},[321,33936,33938],{"class":323,"line":33937},212,[321,33939,33940],{"class":390},"# 正式开始训练:\n",[321,33942,33944,33946,33948,33950,33952],{"class":323,"line":33943},213,[321,33945,1737],{"class":327},[321,33947,31365],{"class":380},[321,33949,3155],{"class":327},[321,33951,31370],{"class":436},[321,33953,3945],{"class":331},[321,33955,33957],{"class":323,"line":33956},214,[321,33958,33959],{"class":390},"    # 将模型实例化\n",[321,33961,33963,33966,33968],{"class":323,"line":33962},215,[321,33964,33965],{"class":331},"    LeNet",[321,33967,377],{"class":327},[321,33969,33970],{"class":331},"LeNet()\n",[321,33972,33974,33977,33979],{"class":323,"line":33973},216,[321,33975,33976],{"class":331},"    train_dataloader,val_dataloader",[321,33978,377],{"class":327},[321,33980,33981],{"class":331},"train_val_data_process()\n",[321,33983,33985,33987,33989,33992,33995,33997,33999],{"class":323,"line":33984},217,[321,33986,33538],{"class":331},[321,33988,377],{"class":327},[321,33990,33991],{"class":331},"train_model_process(LeNet,train_dataloader,val_dataloader,",[321,33993,33994],{"class":5423},"num_epochs",[321,33996,377],{"class":327},[321,33998,1032],{"class":380},[321,34000,338],{"class":331},[321,34002,34004],{"class":323,"line":34003},218,[321,34005,34006],{"class":331},"    matplot_acc_loss(train_process)\n",[19,34008,34009],{},"画图的补充点学习：",[19,34011,34012],{},[28,34013],{"alt":30,"src":34014},"\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",[151,34016,34017],{"start":200},[154,34018,34019],{},"测试",[312,34021,34023],{"className":30523,"code":34022,"language":30525,"meta":30,"style":30},"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",[318,34024,34025,34031,34041,34053,34063,34068,34078,34088,34092,34097,34106,34123,34135,34152,34163,34179,34184,34195,34206,34217,34224,34228,34233,34243,34248,34265,34273,34277,34282,34291,34300,34304,34309,34314,34319,34326,34331,34343,34353,34363,34368,34372,34377,34386,34391,34407,34412,34417,34422,34436,34441,34455,34459,34464,34479,34484,34496,34500,34505,34517,34522,34530,34535,34540,34550,34555,34564,34569,34574,34578,34583,34588,34604,34612,34617,34622,34681,34687,34692,34703,34711,34719,34723,34728,34732,34737,34745,34750,34766,34771,34781,34791],{"__ignoreMap":30},[321,34026,34027,34029],{"class":323,"line":324},[321,34028,30537],{"class":327},[321,34030,30540],{"class":331},[321,34032,34033,34035,34037,34039],{"class":323,"line":167},[321,34034,30537],{"class":327},[321,34036,31560],{"class":331},[321,34038,31528],{"class":327},[321,34040,31565],{"class":331},[321,34042,34043,34045,34048,34050],{"class":323,"line":200},[321,34044,30882],{"class":327},[321,34046,34047],{"class":331}," jupyter_client.consoleapp ",[321,34049,30537],{"class":327},[321,34051,34052],{"class":331}," classes\n",[321,34054,34055,34057,34059,34061],{"class":323,"line":1401},[321,34056,30882],{"class":327},[321,34058,31543],{"class":331},[321,34060,30537],{"class":327},[321,34062,31548],{"class":331},[321,34064,34065],{"class":323,"line":1407},[321,34066,34067],{"class":390},"# 导入数据集\n",[321,34069,34070,34072,34074,34076],{"class":323,"line":1421},[321,34071,30882],{"class":327},[321,34073,31513],{"class":331},[321,34075,30537],{"class":327},[321,34077,31518],{"class":331},[321,34079,34080,34082,34084,34086],{"class":323,"line":1427},[321,34081,30882],{"class":327},[321,34083,32059],{"class":331},[321,34085,30537],{"class":327},[321,34087,32064],{"class":331},[321,34089,34090],{"class":323,"line":1518},[321,34091,2606],{"emptyLinePlaceholder":251},[321,34093,34094],{"class":323,"line":1524},[321,34095,34096],{"class":390},"# 测试数据处理\n",[321,34098,34099,34101,34104],{"class":323,"line":1536},[321,34100,32092],{"class":327},[321,34102,34103],{"class":2169}," test_data_process",[321,34105,32098],{"class":331},[321,34107,34108,34111,34113,34115,34117,34119,34121],{"class":323,"line":1818},[321,34109,34110],{"class":331},"    test_data",[321,34112,377],{"class":327},[321,34114,31600],{"class":331},[321,34116,31603],{"class":5423},[321,34118,377],{"class":327},[321,34120,31608],{"class":436},[321,34122,31611],{"class":331},[321,34124,34125,34128,34130,34133],{"class":323,"line":1823},[321,34126,34127],{"class":5423},"                           train",[321,34129,377],{"class":327},[321,34131,34132],{"class":380},"False",[321,34134,31611],{"class":331},[321,34136,34137,34140,34142,34144,34146,34148,34150],{"class":323,"line":1829},[321,34138,34139],{"class":5423},"                           transform",[321,34141,377],{"class":327},[321,34143,31638],{"class":331},[321,34145,31641],{"class":5423},[321,34147,377],{"class":327},[321,34149,1233],{"class":380},[321,34151,31649],{"class":331},[321,34153,34154,34157,34159,34161],{"class":323,"line":1834},[321,34155,34156],{"class":5423},"                           download",[321,34158,377],{"class":327},[321,34160,31621],{"class":380},[321,34162,338],{"class":331},[321,34164,34165,34168,34170,34172,34174,34176],{"class":323,"line":1848},[321,34166,34167],{"class":331},"    test_dataloader",[321,34169,377],{"class":327},[321,34171,31679],{"class":331},[321,34173,31682],{"class":5423},[321,34175,377],{"class":327},[321,34177,34178],{"class":331},"test_data,\n",[321,34180,34181],{"class":323,"line":1853},[321,34182,34183],{"class":390},"                                    # 这里是一张一张进行测试\n",[321,34185,34186,34189,34191,34193],{"class":323,"line":1859},[321,34187,34188],{"class":5423},"                                    batch_size",[321,34190,377],{"class":327},[321,34192,549],{"class":380},[321,34194,31611],{"class":331},[321,34196,34197,34200,34202,34204],{"class":323,"line":1880},[321,34198,34199],{"class":5423},"                                    shuffle",[321,34201,377],{"class":327},[321,34203,31621],{"class":380},[321,34205,31611],{"class":331},[321,34207,34208,34211,34213,34215],{"class":323,"line":1885},[321,34209,34210],{"class":5423},"                                    num_workers",[321,34212,377],{"class":327},[321,34214,523],{"class":380},[321,34216,338],{"class":331},[321,34218,34219,34221],{"class":323,"line":1899},[321,34220,4296],{"class":327},[321,34222,34223],{"class":331}," test_dataloader\n",[321,34225,34226],{"class":323,"line":1904},[321,34227,2606],{"emptyLinePlaceholder":251},[321,34229,34230],{"class":323,"line":1933},[321,34231,34232],{"class":390},"# 定义模型测试函数\n",[321,34234,34235,34237,34240],{"class":323,"line":1938},[321,34236,32092],{"class":327},[321,34238,34239],{"class":2169}," test_model_process",[321,34241,34242],{"class":331},"(model,test_dataloader):\n",[321,34244,34245],{"class":323,"line":1955},[321,34246,34247],{"class":390},"    # 将模型放到设备当中，先进行判断\n",[321,34249,34250,34252,34254,34256,34258,34260,34262],{"class":323,"line":1960},[321,34251,31382],{"class":331},[321,34253,377],{"class":327},[321,34255,31389],{"class":436},[321,34257,1910],{"class":327},[321,34259,31394],{"class":331},[321,34261,1907],{"class":327},[321,34263,34264],{"class":436}," \"cpu\"\n",[321,34266,34267,34269,34271],{"class":323,"line":1965},[321,34268,31434],{"class":331},[321,34270,377],{"class":327},[321,34272,32434],{"class":331},[321,34274,34275],{"class":323,"line":1970},[321,34276,2606],{"emptyLinePlaceholder":251},[321,34278,34279],{"class":323,"line":1984},[321,34280,34281],{"class":390},"    # 设置初始化参数\n",[321,34283,34284,34287,34289],{"class":323,"line":1989},[321,34285,34286],{"class":331},"    test_corrects",[321,34288,377],{"class":327},[321,34290,32487],{"class":380},[321,34292,34293,34296,34298],{"class":323,"line":2783},[321,34294,34295],{"class":331},"    test_num",[321,34297,377],{"class":327},[321,34299,3291],{"class":380},[321,34301,34302],{"class":323,"line":2797},[321,34303,2606],{"emptyLinePlaceholder":251},[321,34305,34306],{"class":323,"line":2805},[321,34307,34308],{"class":390},"    # 进行模型测试\n",[321,34310,34311],{"class":323,"line":2810},[321,34312,34313],{"class":390},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[321,34315,34316],{"class":323,"line":2816},[321,34317,34318],{"class":390},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[321,34320,34321,34324],{"class":323,"line":2822},[321,34322,34323],{"class":327},"    with",[321,34325,33029],{"class":331},[321,34327,34328],{"class":323,"line":2827},[321,34329,34330],{"class":390},"        # 从数据中进行\n",[321,34332,34333,34335,34338,34340],{"class":323,"line":8155},[321,34334,3609],{"class":327},[321,34336,34337],{"class":331}," test_data_x,test_data_y ",[321,34339,26188],{"class":327},[321,34341,34342],{"class":331}," test_dataloader:\n",[321,34344,34345,34348,34350],{"class":323,"line":8179},[321,34346,34347],{"class":331},"            test_data_x",[321,34349,377],{"class":327},[321,34351,34352],{"class":331},"test_data_x.to(device)\n",[321,34354,34355,34358,34360],{"class":323,"line":8184},[321,34356,34357],{"class":331},"            test_data_y",[321,34359,377],{"class":327},[321,34361,34362],{"class":331},"test_data_y.to(device)\n",[321,34364,34365],{"class":323,"line":8190},[321,34366,34367],{"class":390},"            # 设置为验证模式\n",[321,34369,34370],{"class":323,"line":8217},[321,34371,33020],{"class":331},[321,34373,34374],{"class":323,"line":8222},[321,34375,34376],{"class":390},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[321,34378,34379,34381,34383],{"class":323,"line":8228},[321,34380,32805],{"class":331},[321,34382,377],{"class":327},[321,34384,34385],{"class":331},"model(test_data_x)\n",[321,34387,34388],{"class":323,"line":8240},[321,34389,34390],{"class":390},"            # 查找每一行中最大值对应的下标\n",[321,34392,34393,34395,34397,34399,34401,34403,34405],{"class":323,"line":8252},[321,34394,32822],{"class":331},[321,34396,377],{"class":327},[321,34398,32827],{"class":331},[321,34400,32830],{"class":5423},[321,34402,377],{"class":327},[321,34404,549],{"class":380},[321,34406,338],{"class":331},[321,34408,34409],{"class":323,"line":8264},[321,34410,34411],{"class":390},"            # 计算正确率\n",[321,34413,34414],{"class":323,"line":9923},[321,34415,34416],{"class":390},"            # .data表示是一个不带梯度信息的tensor\n",[321,34418,34419],{"class":323,"line":9948},[321,34420,34421],{"class":390},"            # 如果预测正确，则准确度test_corrects加1\n",[321,34423,34424,34427,34429,34431,34433],{"class":323,"line":9971},[321,34425,34426],{"class":331},"            test_corrects",[321,34428,9684],{"class":327},[321,34430,32932],{"class":331},[321,34432,3155],{"class":327},[321,34434,34435],{"class":331},"test_data_y.data)\n",[321,34437,34438],{"class":323,"line":9995},[321,34439,34440],{"class":390},"            # 将所有的测试样本进行累计\n",[321,34442,34443,34446,34448,34451,34453],{"class":323,"line":10000},[321,34444,34445],{"class":331},"            test_num",[321,34447,9684],{"class":327},[321,34449,34450],{"class":331},"test_data_x.size(",[321,34452,523],{"class":380},[321,34454,338],{"class":331},[321,34456,34457],{"class":323,"line":10005},[321,34458,2606],{"emptyLinePlaceholder":251},[321,34460,34461],{"class":323,"line":10010},[321,34462,34463],{"class":390},"        # 计算准确度\n",[321,34465,34466,34469,34471,34474,34476],{"class":323,"line":10019},[321,34467,34468],{"class":331},"        test_acc",[321,34470,377],{"class":327},[321,34472,34473],{"class":331},"test_corrects.double().item()",[321,34475,916],{"class":327},[321,34477,34478],{"class":331},"test_num\n",[321,34480,34481],{"class":323,"line":10024},[321,34482,34483],{"class":390},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[321,34485,34486,34488,34490,34493],{"class":323,"line":10030},[321,34487,32596],{"class":380},[321,34489,332],{"class":331},[321,34491,34492],{"class":436},"\"测试的准确率：\"",[321,34494,34495],{"class":331},",test_acc)\n",[321,34497,34498],{"class":323,"line":10051},[321,34499,2606],{"emptyLinePlaceholder":251},[321,34501,34502],{"class":323,"line":10057},[321,34503,34504],{"class":390},"# 实现模型的测试功能\n",[321,34506,34507,34509,34511,34513,34515],{"class":323,"line":10071},[321,34508,1737],{"class":327},[321,34510,31365],{"class":380},[321,34512,3155],{"class":327},[321,34514,31370],{"class":436},[321,34516,3945],{"class":331},[321,34518,34519],{"class":323,"line":10077},[321,34520,34521],{"class":390},"    # 加载模型\n",[321,34523,34524,34526,34528],{"class":323,"line":10104},[321,34525,31434],{"class":331},[321,34527,377],{"class":327},[321,34529,33970],{"class":331},[321,34531,34532],{"class":323,"line":10113},[321,34533,34534],{"class":390},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[321,34536,34537],{"class":323,"line":10119},[321,34538,34539],{"class":390},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[321,34541,34542,34545,34548],{"class":323,"line":10127},[321,34543,34544],{"class":331},"    model.load_state_dict(torch.load(",[321,34546,34547],{"class":436},"'best_model.pth'",[321,34549,30642],{"class":331},[321,34551,34552],{"class":323,"line":10132},[321,34553,34554],{"class":390},"    # 数据加载\n",[321,34556,34557,34559,34561],{"class":323,"line":16811},[321,34558,34167],{"class":331},[321,34560,377],{"class":327},[321,34562,34563],{"class":331},"test_data_process()\n",[321,34565,34566],{"class":323,"line":16817},[321,34567,34568],{"class":390},"    # 加载模型测试的函数\n",[321,34570,34571],{"class":323,"line":16840},[321,34572,34573],{"class":331},"    test_model_process(model,test_dataloader)\n",[321,34575,34576],{"class":323,"line":16846},[321,34577,2606],{"emptyLinePlaceholder":251},[321,34579,34580],{"class":323,"line":16869},[321,34581,34582],{"class":390},"    # 验证集推理实现：\n",[321,34584,34585],{"class":323,"line":16883},[321,34586,34587],{"class":390},"    # 加载数据加载的更详细一些\n",[321,34589,34590,34592,34594,34596,34598,34600,34602],{"class":323,"line":16903},[321,34591,31382],{"class":331},[321,34593,377],{"class":327},[321,34595,31389],{"class":436},[321,34597,1910],{"class":327},[321,34599,31394],{"class":331},[321,34601,1907],{"class":327},[321,34603,34264],{"class":436},[321,34605,34606,34608,34610],{"class":323,"line":16909},[321,34607,31434],{"class":331},[321,34609,377],{"class":327},[321,34611,32434],{"class":331},[321,34613,34614],{"class":323,"line":16920},[321,34615,34616],{"class":390},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[321,34618,34619],{"class":323,"line":16943},[321,34620,34621],{"class":390},"    # 顺序不可改变\n",[321,34623,34624,34627,34629,34631,34634,34636,34639,34641,34644,34646,34649,34651,34654,34656,34659,34661,34664,34666,34669,34671,34674,34676,34679],{"class":323,"line":16965},[321,34625,34626],{"class":331},"    classes",[321,34628,377],{"class":327},[321,34630,1222],{"class":331},[321,34632,34633],{"class":436},"'T-shirt\u002Ftop'",[321,34635,710],{"class":331},[321,34637,34638],{"class":436},"'Trouser'",[321,34640,710],{"class":331},[321,34642,34643],{"class":436},"'Pullover'",[321,34645,710],{"class":331},[321,34647,34648],{"class":436},"'Dress'",[321,34650,710],{"class":331},[321,34652,34653],{"class":436},"'Coat'",[321,34655,710],{"class":331},[321,34657,34658],{"class":436},"'Sandal'",[321,34660,710],{"class":331},[321,34662,34663],{"class":436},"'Shirt'",[321,34665,710],{"class":331},[321,34667,34668],{"class":436},"'Sneaker'",[321,34670,710],{"class":331},[321,34672,34673],{"class":436},"'Bag'",[321,34675,710],{"class":331},[321,34677,34678],{"class":436},"'Ankle boot'",[321,34680,33391],{"class":331},[321,34682,34683,34685],{"class":323,"line":16970},[321,34684,34323],{"class":327},[321,34686,33029],{"class":331},[321,34688,34689],{"class":323,"line":16976},[321,34690,34691],{"class":390},"        # 将数据和标签都放到设备当中\n",[321,34693,34694,34696,34699,34701],{"class":323,"line":16990},[321,34695,3609],{"class":327},[321,34697,34698],{"class":331}," b_x,b_y ",[321,34700,26188],{"class":327},[321,34702,34342],{"class":331},[321,34704,34705,34707,34709],{"class":323,"line":17003},[321,34706,32755],{"class":331},[321,34708,377],{"class":327},[321,34710,32760],{"class":331},[321,34712,34713,34715,34717],{"class":323,"line":17008},[321,34714,32770],{"class":331},[321,34716,377],{"class":327},[321,34718,32775],{"class":331},[321,34720,34721],{"class":323,"line":17022},[321,34722,2606],{"emptyLinePlaceholder":251},[321,34724,34725],{"class":323,"line":17027},[321,34726,34727],{"class":390},"            # 设置模型为验证模式\n",[321,34729,34730],{"class":323,"line":17033},[321,34731,33020],{"class":331},[321,34733,34734],{"class":323,"line":17038},[321,34735,34736],{"class":390},"            # 模型推理结果\n",[321,34738,34739,34741,34743],{"class":323,"line":17052},[321,34740,32805],{"class":331},[321,34742,377],{"class":327},[321,34744,32810],{"class":331},[321,34746,34747],{"class":323,"line":17057},[321,34748,34749],{"class":390},"            # 获取最大下标，最大下标就是类别号\n",[321,34751,34752,34754,34756,34758,34760,34762,34764],{"class":323,"line":17062},[321,34753,32822],{"class":331},[321,34755,377],{"class":327},[321,34757,32827],{"class":331},[321,34759,32830],{"class":5423},[321,34761,377],{"class":327},[321,34763,549],{"class":380},[321,34765,338],{"class":331},[321,34767,34768],{"class":323,"line":17076},[321,34769,34770],{"class":390},"            # 取出张量中的数值\n",[321,34772,34773,34776,34778],{"class":323,"line":17088},[321,34774,34775],{"class":331},"            result",[321,34777,377],{"class":327},[321,34779,34780],{"class":331},"pre_lab.item()\n",[321,34782,34783,34786,34788],{"class":323,"line":17093},[321,34784,34785],{"class":331},"            label",[321,34787,377],{"class":327},[321,34789,34790],{"class":331},"b_y.item()\n",[321,34792,34793,34796,34798,34801,34804,34807,34809,34812],{"class":323,"line":17106},[321,34794,34795],{"class":380},"            print",[321,34797,332],{"class":331},[321,34799,34800],{"class":436},"\"预测值：\"",[321,34802,34803],{"class":331},",classes[result],",[321,34805,34806],{"class":436},"\"------\"",[321,34808,710],{"class":331},[321,34810,34811],{"class":436},"\"真实值：\"",[321,34813,34814],{"class":331},",classes[label])\n",[19,34816,34817],{},"（2）AlexNet",[151,34819,34820],{},[154,34821,34822],{},"神经网络构建",[312,34824,34826],{"className":30523,"code":34825,"language":30525,"meta":30,"style":30},"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",[318,34827,34828,34834,34844,34854,34866,34870,34887,34895,34910,34922,34964,34991,35034,35060,35104,35147,35190,35217,35221,35231,35236,35264,35283,35302,35306,35311,35319,35334,35344,35358,35368,35383,35398,35413,35424,35428,35433,35443,35458,35463,35477,35492,35504,35509,35520,35525,35531,35536,35548,35568,35573,35582],{"__ignoreMap":30},[321,34829,34830,34832],{"class":323,"line":324},[321,34831,30537],{"class":327},[321,34833,30540],{"class":331},[321,34835,34836,34838,34840,34842],{"class":323,"line":167},[321,34837,30882],{"class":327},[321,34839,30885],{"class":331},[321,34841,30537],{"class":327},[321,34843,30890],{"class":331},[321,34845,34846,34848,34850,34852],{"class":323,"line":200},[321,34847,30882],{"class":327},[321,34849,30902],{"class":331},[321,34851,30537],{"class":327},[321,34853,30907],{"class":331},[321,34855,34856,34858,34861,34863],{"class":323,"line":1401},[321,34857,30537],{"class":327},[321,34859,34860],{"class":331}," torch.nn.functional ",[321,34862,31528],{"class":327},[321,34864,34865],{"class":331}," F\n",[321,34867,34868],{"class":323,"line":1407},[321,34869,2606],{"emptyLinePlaceholder":251},[321,34871,34872,34874,34877,34879,34881,34883,34885],{"class":323,"line":1421},[321,34873,14901],{"class":327},[321,34875,34876],{"class":2169}," AlexNet",[321,34878,332],{"class":331},[321,34880,30923],{"class":2169},[321,34882,890],{"class":331},[321,34884,30928],{"class":2169},[321,34886,30931],{"class":331},[321,34888,34889,34891,34893],{"class":323,"line":1427},[321,34890,30946],{"class":327},[321,34892,30949],{"class":380},[321,34894,30952],{"class":331},[321,34896,34897,34899,34902,34904,34906,34908],{"class":323,"line":1518},[321,34898,30962],{"class":380},[321,34900,34901],{"class":331},"(AlexNet,",[321,34903,30968],{"class":380},[321,34905,30971],{"class":331},[321,34907,30974],{"class":380},[321,34909,2182],{"class":331},[321,34911,34912,34914,34917,34919],{"class":323,"line":1524},[321,34913,30990],{"class":380},[321,34915,34916],{"class":331},".ReLu",[321,34918,377],{"class":327},[321,34920,34921],{"class":331},"nn.ReLU()\n",[321,34923,34924,34926,34928,34930,34932,34934,34936,34938,34940,34942,34944,34946,34948,34950,34952,34954,34956,34958,34960,34962],{"class":323,"line":1536},[321,34925,30990],{"class":380},[321,34927,30993],{"class":331},[321,34929,377],{"class":327},[321,34931,30998],{"class":331},[321,34933,31001],{"class":5423},[321,34935,377],{"class":327},[321,34937,549],{"class":380},[321,34939,710],{"class":331},[321,34941,31010],{"class":5423},[321,34943,377],{"class":327},[321,34945,541],{"class":380},[321,34947,710],{"class":331},[321,34949,31019],{"class":5423},[321,34951,377],{"class":327},[321,34953,804],{"class":380},[321,34955,710],{"class":331},[321,34957,31074],{"class":5423},[321,34959,377],{"class":327},[321,34961,625],{"class":380},[321,34963,338],{"class":331},[321,34965,34966,34968,34970,34972,34975,34977,34979,34981,34983,34985,34987,34989],{"class":323,"line":1818},[321,34967,30990],{"class":380},[321,34969,31058],{"class":331},[321,34971,377],{"class":327},[321,34973,34974],{"class":331},"nn.MaxPool2d(",[321,34976,31019],{"class":5423},[321,34978,377],{"class":327},[321,34980,403],{"class":380},[321,34982,710],{"class":331},[321,34984,31074],{"class":5423},[321,34986,377],{"class":327},[321,34988,409],{"class":380},[321,34990,338],{"class":331},[321,34992,34993,34995,34997,34999,35001,35003,35005,35007,35009,35011,35013,35016,35018,35020,35022,35024,35026,35028,35030,35032],{"class":323,"line":1823},[321,34994,30990],{"class":380},[321,34996,31087],{"class":331},[321,34998,377],{"class":327},[321,35000,30998],{"class":331},[321,35002,31001],{"class":5423},[321,35004,377],{"class":327},[321,35006,541],{"class":380},[321,35008,710],{"class":331},[321,35010,31010],{"class":5423},[321,35012,377],{"class":327},[321,35014,35015],{"class":380},"256",[321,35017,710],{"class":331},[321,35019,31019],{"class":5423},[321,35021,377],{"class":327},[321,35023,651],{"class":380},[321,35025,710],{"class":331},[321,35027,31028],{"class":5423},[321,35029,377],{"class":327},[321,35031,409],{"class":380},[321,35033,338],{"class":331},[321,35035,35036,35038,35040,35042,35044,35046,35048,35050,35052,35054,35056,35058],{"class":323,"line":1829},[321,35037,30990],{"class":380},[321,35039,31122],{"class":331},[321,35041,377],{"class":327},[321,35043,34974],{"class":331},[321,35045,31019],{"class":5423},[321,35047,377],{"class":327},[321,35049,403],{"class":380},[321,35051,710],{"class":331},[321,35053,31074],{"class":5423},[321,35055,377],{"class":327},[321,35057,409],{"class":380},[321,35059,338],{"class":331},[321,35061,35062,35064,35067,35069,35071,35073,35075,35077,35079,35081,35083,35086,35088,35090,35092,35094,35096,35098,35100,35102],{"class":323,"line":1834},[321,35063,30990],{"class":380},[321,35065,35066],{"class":331},".c5",[321,35068,377],{"class":327},[321,35070,30998],{"class":331},[321,35072,31001],{"class":5423},[321,35074,377],{"class":327},[321,35076,35015],{"class":380},[321,35078,710],{"class":331},[321,35080,31010],{"class":5423},[321,35082,377],{"class":327},[321,35084,35085],{"class":380},"384",[321,35087,710],{"class":331},[321,35089,31019],{"class":5423},[321,35091,377],{"class":327},[321,35093,403],{"class":380},[321,35095,710],{"class":331},[321,35097,31028],{"class":5423},[321,35099,377],{"class":327},[321,35101,549],{"class":380},[321,35103,338],{"class":331},[321,35105,35106,35108,35111,35113,35115,35117,35119,35121,35123,35125,35127,35129,35131,35133,35135,35137,35139,35141,35143,35145],{"class":323,"line":1848},[321,35107,30990],{"class":380},[321,35109,35110],{"class":331},".c6",[321,35112,377],{"class":327},[321,35114,30998],{"class":331},[321,35116,31001],{"class":5423},[321,35118,377],{"class":327},[321,35120,35085],{"class":380},[321,35122,710],{"class":331},[321,35124,31010],{"class":5423},[321,35126,377],{"class":327},[321,35128,35085],{"class":380},[321,35130,710],{"class":331},[321,35132,31019],{"class":5423},[321,35134,377],{"class":327},[321,35136,403],{"class":380},[321,35138,710],{"class":331},[321,35140,31028],{"class":5423},[321,35142,377],{"class":327},[321,35144,549],{"class":380},[321,35146,338],{"class":331},[321,35148,35149,35151,35154,35156,35158,35160,35162,35164,35166,35168,35170,35172,35174,35176,35178,35180,35182,35184,35186,35188],{"class":323,"line":1853},[321,35150,30990],{"class":380},[321,35152,35153],{"class":331},".c7",[321,35155,377],{"class":327},[321,35157,30998],{"class":331},[321,35159,31001],{"class":5423},[321,35161,377],{"class":327},[321,35163,35085],{"class":380},[321,35165,710],{"class":331},[321,35167,31010],{"class":5423},[321,35169,377],{"class":327},[321,35171,35015],{"class":380},[321,35173,710],{"class":331},[321,35175,31019],{"class":5423},[321,35177,377],{"class":327},[321,35179,403],{"class":380},[321,35181,710],{"class":331},[321,35183,31028],{"class":5423},[321,35185,377],{"class":327},[321,35187,549],{"class":380},[321,35189,338],{"class":331},[321,35191,35192,35194,35197,35199,35201,35203,35205,35207,35209,35211,35213,35215],{"class":323,"line":1859},[321,35193,30990],{"class":380},[321,35195,35196],{"class":331},".s8",[321,35198,377],{"class":327},[321,35200,34974],{"class":331},[321,35202,31019],{"class":5423},[321,35204,377],{"class":327},[321,35206,403],{"class":380},[321,35208,710],{"class":331},[321,35210,31074],{"class":5423},[321,35212,377],{"class":327},[321,35214,409],{"class":380},[321,35216,338],{"class":331},[321,35218,35219],{"class":323,"line":1880},[321,35220,31147],{"class":390},[321,35222,35223,35225,35227,35229],{"class":323,"line":1885},[321,35224,30990],{"class":380},[321,35226,31154],{"class":331},[321,35228,377],{"class":327},[321,35230,31159],{"class":331},[321,35232,35233],{"class":323,"line":1899},[321,35234,35235],{"class":390},"       # 定义全连接层\n",[321,35237,35238,35240,35243,35245,35247,35249,35251,35253,35255,35257,35259,35262],{"class":323,"line":1904},[321,35239,30990],{"class":380},[321,35241,35242],{"class":331},".f1",[321,35244,377],{"class":327},[321,35246,31176],{"class":331},[321,35248,676],{"class":380},[321,35250,787],{"class":327},[321,35252,676],{"class":380},[321,35254,787],{"class":327},[321,35256,35015],{"class":380},[321,35258,710],{"class":331},[321,35260,35261],{"class":380},"4096",[321,35263,338],{"class":331},[321,35265,35266,35268,35271,35273,35275,35277,35279,35281],{"class":323,"line":1933},[321,35267,30990],{"class":380},[321,35269,35270],{"class":331},".f2",[321,35272,377],{"class":327},[321,35274,31176],{"class":331},[321,35276,35261],{"class":380},[321,35278,710],{"class":331},[321,35280,35261],{"class":380},[321,35282,338],{"class":331},[321,35284,35285,35287,35290,35292,35294,35296,35298,35300],{"class":323,"line":1938},[321,35286,30990],{"class":380},[321,35288,35289],{"class":331},".f3",[321,35291,377],{"class":327},[321,35293,31176],{"class":331},[321,35295,35261],{"class":380},[321,35297,710],{"class":331},[321,35299,778],{"class":380},[321,35301,338],{"class":331},[321,35303,35304],{"class":323,"line":1955},[321,35305,2606],{"emptyLinePlaceholder":251},[321,35307,35308],{"class":323,"line":1960},[321,35309,35310],{"class":390},"    # 定义前向传播\n",[321,35312,35313,35315,35317],{"class":323,"line":1965},[321,35314,30946],{"class":327},[321,35316,31238],{"class":2169},[321,35318,31241],{"class":331},[321,35320,35321,35323,35325,35327,35330,35332],{"class":323,"line":1970},[321,35322,31246],{"class":331},[321,35324,377],{"class":327},[321,35326,30968],{"class":380},[321,35328,35329],{"class":331},".ReLu(",[321,35331,30968],{"class":380},[321,35333,31258],{"class":331},[321,35335,35336,35338,35340,35342],{"class":323,"line":1984},[321,35337,31246],{"class":331},[321,35339,377],{"class":327},[321,35341,30968],{"class":380},[321,35343,31269],{"class":331},[321,35345,35346,35348,35350,35352,35354,35356],{"class":323,"line":1989},[321,35347,31246],{"class":331},[321,35349,377],{"class":327},[321,35351,30968],{"class":380},[321,35353,35329],{"class":331},[321,35355,30968],{"class":380},[321,35357,31284],{"class":331},[321,35359,35360,35362,35364,35366],{"class":323,"line":2783},[321,35361,31246],{"class":331},[321,35363,377],{"class":327},[321,35365,30968],{"class":380},[321,35367,31295],{"class":331},[321,35369,35370,35372,35374,35376,35378,35380],{"class":323,"line":2797},[321,35371,31246],{"class":331},[321,35373,377],{"class":327},[321,35375,30968],{"class":380},[321,35377,35329],{"class":331},[321,35379,30968],{"class":380},[321,35381,35382],{"class":331},".c5(x))\n",[321,35384,35385,35387,35389,35391,35393,35395],{"class":323,"line":2805},[321,35386,31246],{"class":331},[321,35388,377],{"class":327},[321,35390,30968],{"class":380},[321,35392,35329],{"class":331},[321,35394,30968],{"class":380},[321,35396,35397],{"class":331},".c6(x))\n",[321,35399,35400,35402,35404,35406,35408,35410],{"class":323,"line":2810},[321,35401,31246],{"class":331},[321,35403,377],{"class":327},[321,35405,30968],{"class":380},[321,35407,35329],{"class":331},[321,35409,30968],{"class":380},[321,35411,35412],{"class":331},".c7(x))\n",[321,35414,35415,35417,35419,35421],{"class":323,"line":2816},[321,35416,31246],{"class":331},[321,35418,377],{"class":327},[321,35420,30968],{"class":380},[321,35422,35423],{"class":331},".s8(x)\n",[321,35425,35426],{"class":323,"line":2822},[321,35427,2606],{"emptyLinePlaceholder":251},[321,35429,35430],{"class":323,"line":2827},[321,35431,35432],{"class":390},"        # 展平加线性全连接层\n",[321,35434,35435,35437,35439,35441],{"class":323,"line":8155},[321,35436,31246],{"class":331},[321,35438,377],{"class":327},[321,35440,30968],{"class":380},[321,35442,31306],{"class":331},[321,35444,35445,35447,35449,35451,35453,35455],{"class":323,"line":8179},[321,35446,31246],{"class":331},[321,35448,377],{"class":327},[321,35450,30968],{"class":380},[321,35452,35329],{"class":331},[321,35454,30968],{"class":380},[321,35456,35457],{"class":331},".f1(x))\n",[321,35459,35460],{"class":323,"line":8184},[321,35461,35462],{"class":390},"        # 还需要dropout对神经元随机进行失活\n",[321,35464,35465,35467,35469,35472,35475],{"class":323,"line":8190},[321,35466,31246],{"class":331},[321,35468,377],{"class":327},[321,35470,35471],{"class":331},"F.dropout(x,",[321,35473,35474],{"class":380},"0.5",[321,35476,338],{"class":331},[321,35478,35479,35481,35483,35485,35487,35489],{"class":323,"line":8217},[321,35480,31246],{"class":331},[321,35482,377],{"class":327},[321,35484,30968],{"class":380},[321,35486,35329],{"class":331},[321,35488,30968],{"class":380},[321,35490,35491],{"class":331},".f2(x))\n",[321,35493,35494,35496,35498,35500,35502],{"class":323,"line":8222},[321,35495,31246],{"class":331},[321,35497,377],{"class":327},[321,35499,35471],{"class":331},[321,35501,35474],{"class":380},[321,35503,338],{"class":331},[321,35505,35506],{"class":323,"line":8228},[321,35507,35508],{"class":390},"        # 直接输出\n",[321,35510,35511,35513,35515,35517],{"class":323,"line":8240},[321,35512,31246],{"class":331},[321,35514,377],{"class":327},[321,35516,30968],{"class":380},[321,35518,35519],{"class":331},".f3(x)\n",[321,35521,35522],{"class":323,"line":8252},[321,35523,35524],{"class":390},"        # 前向传播输出\n",[321,35526,35527,35529],{"class":323,"line":8264},[321,35528,14959],{"class":327},[321,35530,31354],{"class":331},[321,35532,35533],{"class":323,"line":9923},[321,35534,35535],{"class":390},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[321,35537,35538,35540,35542,35544,35546],{"class":323,"line":9948},[321,35539,1737],{"class":327},[321,35541,31365],{"class":380},[321,35543,3155],{"class":327},[321,35545,31370],{"class":436},[321,35547,3945],{"class":331},[321,35549,35550,35552,35554,35556,35558,35560,35562,35564,35566],{"class":323,"line":9971},[321,35551,31382],{"class":331},[321,35553,377],{"class":327},[321,35555,30596],{"class":331},[321,35557,31389],{"class":436},[321,35559,1910],{"class":327},[321,35561,31394],{"class":331},[321,35563,1907],{"class":327},[321,35565,30621],{"class":436},[321,35567,338],{"class":331},[321,35569,35570],{"class":323,"line":9995},[321,35571,35572],{"class":390},"    # 模型实例化，然后将实例化的模型放到设备中\n",[321,35574,35575,35577,35579],{"class":323,"line":10000},[321,35576,31434],{"class":331},[321,35578,377],{"class":327},[321,35580,35581],{"class":331},"AlexNet().to(device)\n",[321,35583,35584,35586,35588,35590,35592,35595,35597,35599],{"class":323,"line":10005},[321,35585,31444],{"class":380},[321,35587,31447],{"class":331},[321,35589,549],{"class":380},[321,35591,710],{"class":331},[321,35593,35594],{"class":380},"227",[321,35596,710],{"class":331},[321,35598,35594],{"class":380},[321,35600,31460],{"class":331},[151,35602,35603],{"start":167},[154,35604,31473],{},[312,35606,35608],{"className":30523,"code":35607,"language":30525,"meta":30,"style":30},"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",[318,35609,35610,35616,35622,35632,35638,35648,35658,35668,35678,35688,35692,35703,35713,35717,35721,35725,35733,35745,35755,35771,35781,35813,35827,35837,35847,35851,35861,35875,35885,35895,35905,35911,35915,35919,35923,35927,35931,35939,35959,35963,35967,35971,35975,35979,35995,35999,36003,36011,36015,36019,36027,36031,36035,36039,36047,36051,36055,36059,36063,36071,36075,36083,36087,36095,36099,36107,36111,36119,36123,36127,36135,36139,36143,36147,36159,36183,36197,36201,36205,36209,36217,36221,36229,36233,36241,36245,36253,36257,36265,36269,36277,36281,36293,36297,36305,36309,36317,36321,36325,36329,36333,36341,36345,36361,36365,36373,36377,36381,36385,36389,36393,36397,36401,36417,36421,36433,36437,36449,36453,36465,36469,36477,36481,36489,36493,36497,36502,36508,36512,36521,36525,36542,36546,36555,36559,36577,36590,36595,36608,36612,36616,36624,36628,36632,36640,36644,36652,36656,36664,36668,36672,36714,36756,36760,36764,36780,36784,36800,36804,36808,36816,36820,36824,36836,36874,36879,36884,36893,36897,36911,36921,36927,36933,36939,36945,36949,36953,36959,36963,36967,36975,36979,36997,37001,37005,37009,37025,37029,37033,37037,37041,37045,37065,37085,37089,37093,37097,37105,37113,37117,37133,37153,37173,37177,37181,37189,37197,37201,37205,37209,37221,37225,37235,37243,37260],{"__ignoreMap":30},[321,35611,35612,35614],{"class":323,"line":324},[321,35613,30537],{"class":327},[321,35615,31967],{"class":331},[321,35617,35618,35620],{"class":323,"line":167},[321,35619,30537],{"class":327},[321,35621,31974],{"class":331},[321,35623,35624,35626,35628,35630],{"class":323,"line":200},[321,35625,30537],{"class":327},[321,35627,31985],{"class":331},[321,35629,31528],{"class":327},[321,35631,31990],{"class":331},[321,35633,35634,35636],{"class":323,"line":1401},[321,35635,30537],{"class":327},[321,35637,30540],{"class":331},[321,35639,35640,35642,35644,35646],{"class":323,"line":1407},[321,35641,30882],{"class":327},[321,35643,31560],{"class":331},[321,35645,30537],{"class":327},[321,35647,32007],{"class":331},[321,35649,35650,35652,35654,35656],{"class":323,"line":1421},[321,35651,30882],{"class":327},[321,35653,31513],{"class":331},[321,35655,30537],{"class":327},[321,35657,31518],{"class":331},[321,35659,35660,35662,35664,35666],{"class":323,"line":1427},[321,35661,30882],{"class":327},[321,35663,31543],{"class":331},[321,35665,30537],{"class":327},[321,35667,31548],{"class":331},[321,35669,35670,35672,35674,35676],{"class":323,"line":1518},[321,35671,30537],{"class":327},[321,35673,31560],{"class":331},[321,35675,31528],{"class":327},[321,35677,31565],{"class":331},[321,35679,35680,35682,35684,35686],{"class":323,"line":1524},[321,35681,30537],{"class":327},[321,35683,31577],{"class":331},[321,35685,31528],{"class":327},[321,35687,31582],{"class":331},[321,35689,35690],{"class":323,"line":1536},[321,35691,32052],{"class":390},[321,35693,35694,35696,35698,35700],{"class":323,"line":1818},[321,35695,30882],{"class":327},[321,35697,32059],{"class":331},[321,35699,30537],{"class":327},[321,35701,35702],{"class":331}," AlexNet\n",[321,35704,35705,35707,35709,35711],{"class":323,"line":1823},[321,35706,30882],{"class":327},[321,35708,30885],{"class":331},[321,35710,30537],{"class":327},[321,35712,30890],{"class":331},[321,35714,35715],{"class":323,"line":1829},[321,35716,2606],{"emptyLinePlaceholder":251},[321,35718,35719],{"class":323,"line":1834},[321,35720,2606],{"emptyLinePlaceholder":251},[321,35722,35723],{"class":323,"line":1848},[321,35724,32087],{"class":390},[321,35726,35727,35729,35731],{"class":323,"line":1853},[321,35728,32092],{"class":327},[321,35730,32095],{"class":2169},[321,35732,32098],{"class":331},[321,35734,35735,35737,35739,35741,35743],{"class":323,"line":1859},[321,35736,32103],{"class":331},[321,35738,377],{"class":327},[321,35740,31600],{"class":331},[321,35742,31608],{"class":436},[321,35744,31611],{"class":331},[321,35746,35747,35749,35751,35753],{"class":323,"line":1880},[321,35748,32116],{"class":5423},[321,35750,377],{"class":327},[321,35752,31621],{"class":380},[321,35754,31611],{"class":331},[321,35756,35757,35759,35761,35763,35765,35767,35769],{"class":323,"line":1885},[321,35758,32127],{"class":5423},[321,35760,377],{"class":327},[321,35762,31638],{"class":331},[321,35764,31641],{"class":5423},[321,35766,377],{"class":327},[321,35768,35594],{"class":380},[321,35770,31649],{"class":331},[321,35772,35773,35775,35777,35779],{"class":323,"line":1899},[321,35774,32144],{"class":5423},[321,35776,377],{"class":327},[321,35778,31621],{"class":380},[321,35780,338],{"class":331},[321,35782,35783,35785,35787,35789,35791,35793,35795,35797,35799,35801,35803,35805,35807,35809,35811],{"class":323,"line":1904},[321,35784,32155],{"class":331},[321,35786,377],{"class":327},[321,35788,32160],{"class":331},[321,35790,32163],{"class":380},[321,35792,332],{"class":331},[321,35794,32168],{"class":380},[321,35796,787],{"class":327},[321,35798,7565],{"class":380},[321,35800,32175],{"class":331},[321,35802,32163],{"class":380},[321,35804,332],{"class":331},[321,35806,32182],{"class":380},[321,35808,787],{"class":327},[321,35810,7565],{"class":380},[321,35812,32189],{"class":331},[321,35814,35815,35817,35819,35821,35823,35825],{"class":323,"line":1933},[321,35816,32194],{"class":331},[321,35818,377],{"class":327},[321,35820,32199],{"class":331},[321,35822,31682],{"class":5423},[321,35824,377],{"class":327},[321,35826,31687],{"class":331},[321,35828,35829,35831,35833,35835],{"class":323,"line":1938},[321,35830,32210],{"class":5423},[321,35832,377],{"class":327},[321,35834,32215],{"class":380},[321,35836,31611],{"class":331},[321,35838,35839,35841,35843,35845],{"class":323,"line":1955},[321,35840,32222],{"class":5423},[321,35842,377],{"class":327},[321,35844,31621],{"class":380},[321,35846,31611],{"class":331},[321,35848,35849],{"class":323,"line":1960},[321,35850,32233],{"class":390},[321,35852,35853,35855,35857,35859],{"class":323,"line":1965},[321,35854,32238],{"class":5423},[321,35856,377],{"class":327},[321,35858,727],{"class":380},[321,35860,338],{"class":331},[321,35862,35863,35865,35867,35869,35871,35873],{"class":323,"line":1970},[321,35864,32249],{"class":331},[321,35866,377],{"class":327},[321,35868,31679],{"class":331},[321,35870,31682],{"class":5423},[321,35872,377],{"class":327},[321,35874,32260],{"class":331},[321,35876,35877,35879,35881,35883],{"class":323,"line":1984},[321,35878,32265],{"class":5423},[321,35880,377],{"class":327},[321,35882,32215],{"class":380},[321,35884,31611],{"class":331},[321,35886,35887,35889,35891,35893],{"class":323,"line":1989},[321,35888,32276],{"class":5423},[321,35890,377],{"class":327},[321,35892,31621],{"class":380},[321,35894,31611],{"class":331},[321,35896,35897,35899,35901,35903],{"class":323,"line":2783},[321,35898,32287],{"class":5423},[321,35900,377],{"class":327},[321,35902,727],{"class":380},[321,35904,338],{"class":331},[321,35906,35907,35909],{"class":323,"line":2797},[321,35908,4296],{"class":327},[321,35910,32300],{"class":331},[321,35912,35913],{"class":323,"line":2805},[321,35914,2606],{"emptyLinePlaceholder":251},[321,35916,35917],{"class":323,"line":2810},[321,35918,32309],{"class":390},[321,35920,35921],{"class":323,"line":2816},[321,35922,32314],{"class":390},[321,35924,35925],{"class":323,"line":2822},[321,35926,2606],{"emptyLinePlaceholder":251},[321,35928,35929],{"class":323,"line":2827},[321,35930,32323],{"class":390},[321,35932,35933,35935,35937],{"class":323,"line":8155},[321,35934,32092],{"class":327},[321,35936,32330],{"class":2169},[321,35938,32333],{"class":331},[321,35940,35941,35943,35945,35947,35949,35951,35953,35955,35957],{"class":323,"line":8179},[321,35942,31382],{"class":331},[321,35944,377],{"class":327},[321,35946,30596],{"class":331},[321,35948,31389],{"class":436},[321,35950,1910],{"class":327},[321,35952,31394],{"class":331},[321,35954,1907],{"class":327},[321,35956,32352],{"class":436},[321,35958,338],{"class":331},[321,35960,35961],{"class":323,"line":8184},[321,35962,2606],{"emptyLinePlaceholder":251},[321,35964,35965],{"class":323,"line":8190},[321,35966,2606],{"emptyLinePlaceholder":251},[321,35968,35969],{"class":323,"line":8217},[321,35970,32367],{"class":390},[321,35972,35973],{"class":323,"line":8222},[321,35974,32372],{"class":390},[321,35976,35977],{"class":323,"line":8228},[321,35978,32377],{"class":390},[321,35980,35981,35983,35985,35987,35989,35991,35993],{"class":323,"line":8240},[321,35982,32382],{"class":331},[321,35984,377],{"class":327},[321,35986,32387],{"class":331},[321,35988,32390],{"class":5423},[321,35990,377],{"class":327},[321,35992,32395],{"class":380},[321,35994,338],{"class":331},[321,35996,35997],{"class":323,"line":8252},[321,35998,2606],{"emptyLinePlaceholder":251},[321,36000,36001],{"class":323,"line":8264},[321,36002,32406],{"class":390},[321,36004,36005,36007,36009],{"class":323,"line":9923},[321,36006,32411],{"class":331},[321,36008,377],{"class":327},[321,36010,32416],{"class":331},[321,36012,36013],{"class":323,"line":9948},[321,36014,2606],{"emptyLinePlaceholder":251},[321,36016,36017],{"class":323,"line":9971},[321,36018,32425],{"class":390},[321,36020,36021,36023,36025],{"class":323,"line":9995},[321,36022,31434],{"class":331},[321,36024,377],{"class":327},[321,36026,32434],{"class":331},[321,36028,36029],{"class":323,"line":10000},[321,36030,32439],{"class":390},[321,36032,36033],{"class":323,"line":10005},[321,36034,32444],{"class":390},[321,36036,36037],{"class":323,"line":10010},[321,36038,32449],{"class":390},[321,36040,36041,36043,36045],{"class":323,"line":10019},[321,36042,32454],{"class":331},[321,36044,377],{"class":327},[321,36046,32459],{"class":331},[321,36048,36049],{"class":323,"line":10024},[321,36050,2606],{"emptyLinePlaceholder":251},[321,36052,36053],{"class":323,"line":10030},[321,36054,2606],{"emptyLinePlaceholder":251},[321,36056,36057],{"class":323,"line":10051},[321,36058,32472],{"class":390},[321,36060,36061],{"class":323,"line":10057},[321,36062,32477],{"class":390},[321,36064,36065,36067,36069],{"class":323,"line":10071},[321,36066,32482],{"class":331},[321,36068,377],{"class":327},[321,36070,32487],{"class":380},[321,36072,36073],{"class":323,"line":10077},[321,36074,32492],{"class":390},[321,36076,36077,36079,36081],{"class":323,"line":10104},[321,36078,32497],{"class":331},[321,36080,377],{"class":327},[321,36082,32502],{"class":331},[321,36084,36085],{"class":323,"line":10113},[321,36086,32507],{"class":390},[321,36088,36089,36091,36093],{"class":323,"line":10119},[321,36090,32512],{"class":331},[321,36092,377],{"class":327},[321,36094,32502],{"class":331},[321,36096,36097],{"class":323,"line":10127},[321,36098,32521],{"class":390},[321,36100,36101,36103,36105],{"class":323,"line":10132},[321,36102,32526],{"class":331},[321,36104,377],{"class":327},[321,36106,32502],{"class":331},[321,36108,36109],{"class":323,"line":16811},[321,36110,32535],{"class":390},[321,36112,36113,36115,36117],{"class":323,"line":16817},[321,36114,32540],{"class":331},[321,36116,377],{"class":327},[321,36118,32502],{"class":331},[321,36120,36121],{"class":323,"line":16840},[321,36122,2606],{"emptyLinePlaceholder":251},[321,36124,36125],{"class":323,"line":16846},[321,36126,32553],{"class":390},[321,36128,36129,36131,36133],{"class":323,"line":16869},[321,36130,32558],{"class":331},[321,36132,377],{"class":327},[321,36134,32563],{"class":331},[321,36136,36137],{"class":323,"line":16883},[321,36138,2606],{"emptyLinePlaceholder":251},[321,36140,36141],{"class":323,"line":16903},[321,36142,2606],{"emptyLinePlaceholder":251},[321,36144,36145],{"class":323,"line":16909},[321,36146,32576],{"class":390},[321,36148,36149,36151,36153,36155,36157],{"class":323,"line":16920},[321,36150,3407],{"class":327},[321,36152,32583],{"class":331},[321,36154,26188],{"class":327},[321,36156,32588],{"class":380},[321,36158,32591],{"class":331},[321,36160,36161,36163,36165,36167,36169,36171,36173,36175,36177,36179,36181],{"class":323,"line":16943},[321,36162,32596],{"class":380},[321,36164,332],{"class":331},[321,36166,32601],{"class":436},[321,36168,32604],{"class":380},[321,36170,916],{"class":436},[321,36172,32604],{"class":380},[321,36174,583],{"class":436},[321,36176,32613],{"class":331},[321,36178,864],{"class":327},[321,36180,549],{"class":380},[321,36182,30642],{"class":331},[321,36184,36185,36187,36189,36191,36193,36195],{"class":323,"line":16965},[321,36186,32596],{"class":380},[321,36188,332],{"class":331},[321,36190,32628],{"class":436},[321,36192,787],{"class":327},[321,36194,778],{"class":380},[321,36196,338],{"class":331},[321,36198,36199],{"class":323,"line":16970},[321,36200,2606],{"emptyLinePlaceholder":251},[321,36202,36203],{"class":323,"line":16976},[321,36204,32643],{"class":390},[321,36206,36207],{"class":323,"line":16990},[321,36208,32648],{"class":390},[321,36210,36211,36213,36215],{"class":323,"line":17003},[321,36212,32653],{"class":331},[321,36214,377],{"class":327},[321,36216,32487],{"class":380},[321,36218,36219],{"class":323,"line":17008},[321,36220,32662],{"class":390},[321,36222,36223,36225,36227],{"class":323,"line":17022},[321,36224,32667],{"class":331},[321,36226,377],{"class":327},[321,36228,3291],{"class":380},[321,36230,36231],{"class":323,"line":17027},[321,36232,32676],{"class":390},[321,36234,36235,36237,36239],{"class":323,"line":17033},[321,36236,32681],{"class":331},[321,36238,377],{"class":327},[321,36240,32487],{"class":380},[321,36242,36243],{"class":323,"line":17038},[321,36244,32690],{"class":390},[321,36246,36247,36249,36251],{"class":323,"line":17052},[321,36248,32695],{"class":331},[321,36250,377],{"class":327},[321,36252,3291],{"class":380},[321,36254,36255],{"class":323,"line":17057},[321,36256,32704],{"class":390},[321,36258,36259,36261,36263],{"class":323,"line":17062},[321,36260,32709],{"class":331},[321,36262,377],{"class":327},[321,36264,3291],{"class":380},[321,36266,36267],{"class":323,"line":17076},[321,36268,32718],{"class":390},[321,36270,36271,36273,36275],{"class":323,"line":17088},[321,36272,32723],{"class":331},[321,36274,377],{"class":327},[321,36276,3291],{"class":380},[321,36278,36279],{"class":323,"line":17093},[321,36280,32732],{"class":390},[321,36282,36283,36285,36287,36289,36291],{"class":323,"line":17106},[321,36284,3609],{"class":327},[321,36286,31746],{"class":331},[321,36288,26188],{"class":327},[321,36290,31751],{"class":380},[321,36292,32745],{"class":331},[321,36294,36295],{"class":323,"line":17111},[321,36296,32750],{"class":390},[321,36298,36299,36301,36303],{"class":323,"line":17116},[321,36300,32755],{"class":331},[321,36302,377],{"class":327},[321,36304,32760],{"class":331},[321,36306,36307],{"class":323,"line":17121},[321,36308,32765],{"class":390},[321,36310,36311,36313,36315],{"class":323,"line":17134},[321,36312,32770],{"class":331},[321,36314,377],{"class":327},[321,36316,32775],{"class":331},[321,36318,36319],{"class":323,"line":17139},[321,36320,32781],{"class":390},[321,36322,36323],{"class":323,"line":32778},[321,36324,32787],{"class":331},[321,36326,36327],{"class":323,"line":32784},[321,36328,32793],{"class":390},[321,36330,36331],{"class":323,"line":32790},[321,36332,32799],{"class":390},[321,36334,36335,36337,36339],{"class":323,"line":32796},[321,36336,32805],{"class":331},[321,36338,377],{"class":327},[321,36340,32810],{"class":331},[321,36342,36343],{"class":323,"line":32802},[321,36344,32816],{"class":390},[321,36346,36347,36349,36351,36353,36355,36357,36359],{"class":323,"line":32813},[321,36348,32822],{"class":331},[321,36350,377],{"class":327},[321,36352,32827],{"class":331},[321,36354,32830],{"class":5423},[321,36356,377],{"class":327},[321,36358,549],{"class":380},[321,36360,338],{"class":331},[321,36362,36363],{"class":323,"line":32819},[321,36364,32842],{"class":390},[321,36366,36367,36369,36371],{"class":323,"line":32839},[321,36368,32848],{"class":331},[321,36370,377],{"class":327},[321,36372,32853],{"class":331},[321,36374,36375],{"class":323,"line":32845},[321,36376,32859],{"class":390},[321,36378,36379],{"class":323,"line":32856},[321,36380,32865],{"class":331},[321,36382,36383],{"class":323,"line":32862},[321,36384,32871],{"class":390},[321,36386,36387],{"class":323,"line":32868},[321,36388,32877],{"class":331},[321,36390,36391],{"class":323,"line":32874},[321,36392,32883],{"class":390},[321,36394,36395],{"class":323,"line":32880},[321,36396,32889],{"class":331},[321,36398,36399],{"class":323,"line":32886},[321,36400,32895],{"class":390},[321,36402,36403,36405,36407,36409,36411,36413,36415],{"class":323,"line":32892},[321,36404,32901],{"class":331},[321,36406,9684],{"class":327},[321,36408,32906],{"class":331},[321,36410,787],{"class":327},[321,36412,32911],{"class":331},[321,36414,523],{"class":380},[321,36416,338],{"class":331},[321,36418,36419],{"class":323,"line":32898},[321,36420,32921],{"class":390},[321,36422,36423,36425,36427,36429,36431],{"class":323,"line":32918},[321,36424,32927],{"class":331},[321,36426,9684],{"class":327},[321,36428,32932],{"class":331},[321,36430,3155],{"class":327},[321,36432,32937],{"class":331},[321,36434,36435],{"class":323,"line":32924},[321,36436,32943],{"class":390},[321,36438,36439,36441,36443,36445,36447],{"class":323,"line":32940},[321,36440,32949],{"class":331},[321,36442,9684],{"class":327},[321,36444,32911],{"class":331},[321,36446,523],{"class":380},[321,36448,338],{"class":331},[321,36450,36451],{"class":323,"line":32946},[321,36452,32963],{"class":390},[321,36454,36455,36457,36459,36461,36463],{"class":323,"line":32960},[321,36456,3609],{"class":327},[321,36458,32971],{"class":331},[321,36460,26188],{"class":327},[321,36462,31751],{"class":380},[321,36464,32978],{"class":331},[321,36466,36467],{"class":323,"line":32966},[321,36468,32984],{"class":390},[321,36470,36471,36473,36475],{"class":323,"line":32981},[321,36472,32755],{"class":331},[321,36474,377],{"class":327},[321,36476,32760],{"class":331},[321,36478,36479],{"class":323,"line":32987},[321,36480,32999],{"class":390},[321,36482,36483,36485,36487],{"class":323,"line":32996},[321,36484,32770],{"class":331},[321,36486,377],{"class":327},[321,36488,32775],{"class":331},[321,36490,36491],{"class":323,"line":33002},[321,36492,33014],{"class":390},[321,36494,36495],{"class":323,"line":33011},[321,36496,33020],{"class":331},[321,36498,36499],{"class":323,"line":33017},[321,36500,36501],{"class":390},"            # 验证时不计算梯度以节省内存\u002F计算\n",[321,36503,36504,36506],{"class":323,"line":33023},[321,36505,33026],{"class":327},[321,36507,33029],{"class":331},[321,36509,36510],{"class":323,"line":33032},[321,36511,33035],{"class":390},[321,36513,36514,36517,36519],{"class":323,"line":33038},[321,36515,36516],{"class":331},"                output",[321,36518,377],{"class":327},[321,36520,32810],{"class":331},[321,36522,36523],{"class":323,"line":33049},[321,36524,33052],{"class":390},[321,36526,36527,36530,36532,36534,36536,36538,36540],{"class":323,"line":33055},[321,36528,36529],{"class":331},"                pre_lab",[321,36531,377],{"class":327},[321,36533,32827],{"class":331},[321,36535,32830],{"class":5423},[321,36537,377],{"class":327},[321,36539,549],{"class":380},[321,36541,338],{"class":331},[321,36543,36544],{"class":323,"line":33074},[321,36545,33077],{"class":390},[321,36547,36548,36551,36553],{"class":323,"line":33080},[321,36549,36550],{"class":331},"                val_batch_loss",[321,36552,377],{"class":327},[321,36554,32853],{"class":331},[321,36556,36557],{"class":323,"line":33091},[321,36558,33094],{"class":390},[321,36560,36561,36564,36566,36569,36571,36573,36575],{"class":323,"line":33097},[321,36562,36563],{"class":331},"                val_loss",[321,36565,9684],{"class":327},[321,36567,36568],{"class":331},"val_batch_loss.item()",[321,36570,787],{"class":327},[321,36572,32911],{"class":331},[321,36574,523],{"class":380},[321,36576,338],{"class":331},[321,36578,36579,36582,36584,36586,36588],{"class":323,"line":33117},[321,36580,36581],{"class":331},"                val_corrects",[321,36583,9684],{"class":327},[321,36585,32932],{"class":331},[321,36587,3155],{"class":327},[321,36589,32937],{"class":331},[321,36591,36592],{"class":323,"line":33133},[321,36593,36594],{"class":390},"            # 当前用于验证的样本数量\n",[321,36596,36597,36600,36602,36604,36606],{"class":323,"line":33139},[321,36598,36599],{"class":331},"            val_num",[321,36601,9684],{"class":327},[321,36603,32911],{"class":331},[321,36605,523],{"class":380},[321,36607,338],{"class":331},[321,36609,36610],{"class":323,"line":33153},[321,36611,33156],{"class":390},[321,36613,36614],{"class":323,"line":33159},[321,36615,33162],{"class":390},[321,36617,36618,36620,36622],{"class":323,"line":33165},[321,36619,33168],{"class":331},[321,36621,916],{"class":327},[321,36623,33173],{"class":331},[321,36625,36626],{"class":323,"line":33176},[321,36627,33179],{"class":390},[321,36629,36630],{"class":323,"line":33182},[321,36631,33185],{"class":390},[321,36633,36634,36636,36638],{"class":323,"line":33188},[321,36635,33191],{"class":331},[321,36637,916],{"class":327},[321,36639,33173],{"class":331},[321,36641,36642],{"class":323,"line":33198},[321,36643,33201],{"class":390},[321,36645,36646,36648,36650],{"class":323,"line":33204},[321,36647,33207],{"class":331},[321,36649,916],{"class":327},[321,36651,33212],{"class":331},[321,36653,36654],{"class":323,"line":33215},[321,36655,33218],{"class":390},[321,36657,36658,36660,36662],{"class":323,"line":33221},[321,36659,33224],{"class":331},[321,36661,916],{"class":327},[321,36663,33212],{"class":331},[321,36665,36666],{"class":323,"line":33231},[321,36667,2606],{"emptyLinePlaceholder":251},[321,36669,36670],{"class":323,"line":33236},[321,36671,33239],{"class":390},[321,36673,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712],{"class":323,"line":33242},[321,36675,32596],{"class":380},[321,36677,332],{"class":331},[321,36679,3798],{"class":436},[321,36681,32604],{"class":380},[321,36683,33253],{"class":436},[321,36685,1228],{"class":380},[321,36687,33258],{"class":327},[321,36689,1278],{"class":380},[321,36691,33263],{"class":436},[321,36693,1228],{"class":380},[321,36695,33258],{"class":327},[321,36697,1278],{"class":380},[321,36699,3798],{"class":436},[321,36701,33274],{"class":331},[321,36703,864],{"class":327},[321,36705,549],{"class":380},[321,36707,33281],{"class":331},[321,36709,864],{"class":327},[321,36711,549],{"class":380},[321,36713,33288],{"class":331},[321,36715,36716,36718,36720,36722,36724,36726,36728,36730,36732,36734,36736,36738,36740,36742,36744,36746,36748,36750,36752,36754],{"class":323,"line":33291},[321,36717,32596],{"class":380},[321,36719,332],{"class":331},[321,36721,3798],{"class":436},[321,36723,32604],{"class":380},[321,36725,33302],{"class":436},[321,36727,1228],{"class":380},[321,36729,33258],{"class":327},[321,36731,1278],{"class":380},[321,36733,33311],{"class":436},[321,36735,1228],{"class":380},[321,36737,33258],{"class":327},[321,36739,1278],{"class":380},[321,36741,3798],{"class":436},[321,36743,33322],{"class":331},[321,36745,864],{"class":327},[321,36747,549],{"class":380},[321,36749,33329],{"class":331},[321,36751,864],{"class":327},[321,36753,549],{"class":380},[321,36755,33288],{"class":331},[321,36757,36758],{"class":323,"line":33338},[321,36759,2606],{"emptyLinePlaceholder":251},[321,36761,36762],{"class":323,"line":33343},[321,36763,33346],{"class":390},[321,36765,36766,36768,36770,36772,36774,36776,36778],{"class":323,"line":33349},[321,36767,2703],{"class":327},[321,36769,33354],{"class":331},[321,36771,864],{"class":327},[321,36773,549],{"class":380},[321,36775,1272],{"class":331},[321,36777,1292],{"class":327},[321,36779,33365],{"class":331},[321,36781,36782],{"class":323,"line":33368},[321,36783,33371],{"class":390},[321,36785,36786,36788,36790,36792,36794,36796,36798],{"class":323,"line":33374},[321,36787,33377],{"class":331},[321,36789,371],{"class":380},[321,36791,377],{"class":327},[321,36793,33384],{"class":331},[321,36795,864],{"class":327},[321,36797,549],{"class":380},[321,36799,33391],{"class":331},[321,36801,36802],{"class":323,"line":33394},[321,36803,33397],{"class":390},[321,36805,36806],{"class":323,"line":33400},[321,36807,33403],{"class":390},[321,36809,36810,36812,36814],{"class":323,"line":33406},[321,36811,33409],{"class":331},[321,36813,377],{"class":327},[321,36815,32459],{"class":331},[321,36817,36818],{"class":323,"line":33416},[321,36819,2606],{"emptyLinePlaceholder":251},[321,36821,36822],{"class":323,"line":33421},[321,36823,33424],{"class":390},[321,36825,36826,36828,36830,36832,36834],{"class":323,"line":33427},[321,36827,33430],{"class":331},[321,36829,377],{"class":327},[321,36831,33435],{"class":331},[321,36833,864],{"class":327},[321,36835,33440],{"class":331},[321,36837,36838,36840,36842,36844,36846,36848,36850,36852,36854,36856,36858,36860,36862,36864,36866,36868,36870,36872],{"class":323,"line":33443},[321,36839,32596],{"class":380},[321,36841,332],{"class":331},[321,36843,33450],{"class":436},[321,36845,1228],{"class":380},[321,36847,33455],{"class":327},[321,36849,1278],{"class":380},[321,36851,876],{"class":436},[321,36853,1228],{"class":380},[321,36855,33455],{"class":327},[321,36857,1278],{"class":380},[321,36859,33468],{"class":436},[321,36861,33471],{"class":331},[321,36863,33474],{"class":327},[321,36865,1239],{"class":380},[321,36867,33479],{"class":331},[321,36869,660],{"class":327},[321,36871,1239],{"class":380},[321,36873,30642],{"class":331},[321,36875,36876],{"class":323,"line":33488},[321,36877,36878],{"class":390},"    # 选择最优参数并保存\n",[321,36880,36881],{"class":323,"line":33494},[321,36882,36883],{"class":390},"    # 保存最佳模型权重字典\n",[321,36885,36886,36889,36891],{"class":323,"line":33500},[321,36887,36888],{"class":331},"    torch.save(best_model_wts,",[321,36890,33512],{"class":436},[321,36892,338],{"class":331},[321,36894,36895],{"class":323,"line":33506},[321,36896,33532],{"class":390},[321,36898,36899,36901,36903,36905,36907,36909],{"class":323,"line":33517},[321,36900,33538],{"class":331},[321,36902,377],{"class":327},[321,36904,33543],{"class":331},[321,36906,33546],{"class":5423},[321,36908,377],{"class":327},[321,36910,1752],{"class":331},[321,36912,36913,36915,36917,36919],{"class":323,"line":33523},[321,36914,33556],{"class":436},[321,36916,1191],{"class":331},[321,36918,33561],{"class":380},[321,36920,33564],{"class":331},[321,36922,36923,36925],{"class":323,"line":33529},[321,36924,33570],{"class":436},[321,36926,33573],{"class":331},[321,36928,36929,36931],{"class":323,"line":33535},[321,36930,33579],{"class":436},[321,36932,33582],{"class":331},[321,36934,36935,36937],{"class":323,"line":33553},[321,36936,33588],{"class":436},[321,36938,33591],{"class":331},[321,36940,36941,36943],{"class":323,"line":33567},[321,36942,33597],{"class":436},[321,36944,33600],{"class":331},[321,36946,36947],{"class":323,"line":33576},[321,36948,33606],{"class":331},[321,36950,36951],{"class":323,"line":33585},[321,36952,33612],{"class":390},[321,36954,36955,36957],{"class":323,"line":33594},[321,36956,4296],{"class":327},[321,36958,33620],{"class":331},[321,36960,36961],{"class":323,"line":33603},[321,36962,2606],{"emptyLinePlaceholder":251},[321,36964,36965],{"class":323,"line":33609},[321,36966,33631],{"class":390},[321,36968,36969,36971,36973],{"class":323,"line":33615},[321,36970,32092],{"class":327},[321,36972,33639],{"class":2169},[321,36974,33642],{"class":331},[321,36976,36977],{"class":323,"line":33623},[321,36978,33648],{"class":390},[321,36980,36981,36983,36985,36987,36989,36991,36993,36995],{"class":323,"line":33628},[321,36982,33654],{"class":331},[321,36984,31838],{"class":5423},[321,36986,377],{"class":327},[321,36988,332],{"class":331},[321,36990,830],{"class":380},[321,36992,710],{"class":331},[321,36994,625],{"class":380},[321,36996,30642],{"class":331},[321,36998,36999],{"class":323,"line":33634},[321,37000,33674],{"class":390},[321,37002,37003],{"class":323,"line":33645},[321,37004,33680],{"class":390},[321,37006,37007],{"class":323,"line":33651},[321,37008,33686],{"class":390},[321,37010,37011,37013,37015,37017,37019,37021,37023],{"class":323,"line":33671},[321,37012,31872],{"class":331},[321,37014,549],{"class":380},[321,37016,710],{"class":331},[321,37018,409],{"class":380},[321,37020,710],{"class":331},[321,37022,549],{"class":380},[321,37024,338],{"class":331},[321,37026,37027],{"class":323,"line":33677},[321,37028,33709],{"class":390},[321,37030,37031],{"class":323,"line":33683},[321,37032,33715],{"class":390},[321,37034,37035],{"class":323,"line":33689},[321,37036,33721],{"class":390},[321,37038,37039],{"class":323,"line":33706},[321,37040,33727],{"class":390},[321,37042,37043],{"class":323,"line":33712},[321,37044,33733],{"class":390},[321,37046,37047,37049,37051,37053,37055,37057,37059,37061,37063],{"class":323,"line":33718},[321,37048,33739],{"class":331},[321,37050,33742],{"class":436},[321,37052,33745],{"class":331},[321,37054,33748],{"class":436},[321,37056,710],{"class":331},[321,37058,33753],{"class":5423},[321,37060,377],{"class":327},[321,37062,33758],{"class":436},[321,37064,338],{"class":331},[321,37066,37067,37069,37071,37073,37075,37077,37079,37081,37083],{"class":323,"line":33724},[321,37068,33739],{"class":331},[321,37070,33742],{"class":436},[321,37072,33770],{"class":331},[321,37074,33773],{"class":436},[321,37076,710],{"class":331},[321,37078,33753],{"class":5423},[321,37080,377],{"class":327},[321,37082,33782],{"class":436},[321,37084,338],{"class":331},[321,37086,37087],{"class":323,"line":33730},[321,37088,33790],{"class":390},[321,37090,37091],{"class":323,"line":33736},[321,37092,33796],{"class":331},[321,37094,37095],{"class":323,"line":33763},[321,37096,33802],{"class":390},[321,37098,37099,37101,37103],{"class":323,"line":33787},[321,37100,33808],{"class":331},[321,37102,33811],{"class":436},[321,37104,338],{"class":331},[321,37106,37107,37109,37111],{"class":323,"line":33793},[321,37108,33819],{"class":331},[321,37110,33822],{"class":436},[321,37112,338],{"class":331},[321,37114,37115],{"class":323,"line":33799},[321,37116,33830],{"class":390},[321,37118,37119,37121,37123,37125,37127,37129,37131],{"class":323,"line":33805},[321,37120,31872],{"class":331},[321,37122,549],{"class":380},[321,37124,710],{"class":331},[321,37126,409],{"class":380},[321,37128,710],{"class":331},[321,37130,409],{"class":380},[321,37132,338],{"class":331},[321,37134,37135,37137,37139,37141,37143,37145,37147,37149,37151],{"class":323,"line":33816},[321,37136,33739],{"class":331},[321,37138,33742],{"class":436},[321,37140,33857],{"class":331},[321,37142,33748],{"class":436},[321,37144,710],{"class":331},[321,37146,33753],{"class":5423},[321,37148,377],{"class":327},[321,37150,33868],{"class":436},[321,37152,338],{"class":331},[321,37154,37155,37157,37159,37161,37163,37165,37167,37169,37171],{"class":323,"line":33827},[321,37156,33739],{"class":331},[321,37158,33742],{"class":436},[321,37160,33880],{"class":331},[321,37162,33773],{"class":436},[321,37164,710],{"class":331},[321,37166,33753],{"class":5423},[321,37168,377],{"class":327},[321,37170,33891],{"class":436},[321,37172,338],{"class":331},[321,37174,37175],{"class":323,"line":33833},[321,37176,33899],{"class":390},[321,37178,37179],{"class":323,"line":33850},[321,37180,33796],{"class":331},[321,37182,37183,37185,37187],{"class":323,"line":33873},[321,37184,33808],{"class":331},[321,37186,33742],{"class":436},[321,37188,338],{"class":331},[321,37190,37191,37193,37195],{"class":323,"line":33896},[321,37192,33819],{"class":331},[321,37194,33921],{"class":436},[321,37196,338],{"class":331},[321,37198,37199],{"class":323,"line":33902},[321,37200,33929],{"class":331},[321,37202,37203],{"class":323,"line":33907},[321,37204,2606],{"emptyLinePlaceholder":251},[321,37206,37207],{"class":323,"line":33916},[321,37208,33940],{"class":390},[321,37210,37211,37213,37215,37217,37219],{"class":323,"line":33926},[321,37212,1737],{"class":327},[321,37214,31365],{"class":380},[321,37216,3155],{"class":327},[321,37218,31370],{"class":436},[321,37220,3945],{"class":331},[321,37222,37223],{"class":323,"line":33932},[321,37224,33959],{"class":390},[321,37226,37227,37230,37232],{"class":323,"line":33937},[321,37228,37229],{"class":331},"    AlexNet",[321,37231,377],{"class":327},[321,37233,37234],{"class":331},"AlexNet()\n",[321,37236,37237,37239,37241],{"class":323,"line":33943},[321,37238,33976],{"class":331},[321,37240,377],{"class":327},[321,37242,33981],{"class":331},[321,37244,37245,37247,37249,37252,37254,37256,37258],{"class":323,"line":33956},[321,37246,33538],{"class":331},[321,37248,377],{"class":327},[321,37250,37251],{"class":331},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[321,37253,33994],{"class":5423},[321,37255,377],{"class":327},[321,37257,1032],{"class":380},[321,37259,338],{"class":331},[321,37261,37262],{"class":323,"line":33962},[321,37263,34006],{"class":331},[151,37265,37266],{"start":200},[154,37267,34019],{},[312,37269,37271],{"className":30523,"code":37270,"language":30525,"meta":30,"style":30},"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",[318,37272,37273,37279,37289,37299,37309,37313,37323,37333,37344,37348,37352,37356,37364,37380,37390,37406,37416,37430,37434,37444,37454,37464,37470,37474,37478,37486,37490,37506,37514,37518,37522,37530,37538,37542,37546,37550,37554,37560,37564,37574,37582,37590,37594,37598,37602,37610,37614,37630,37634,37638,37642,37654,37658,37670,37674,37678,37690,37694,37704,37708,37712,37724,37728,37736,37740,37744,37752,37756,37764,37768,37772,37776,37780,37784,37800,37808,37812,37816,37864,37870,37874,37884,37892,37900,37904,37908,37912,37916,37924,37928,37944,37948,37956,37964],{"__ignoreMap":30},[321,37274,37275,37277],{"class":323,"line":324},[321,37276,30537],{"class":327},[321,37278,30540],{"class":331},[321,37280,37281,37283,37285,37287],{"class":323,"line":167},[321,37282,30537],{"class":327},[321,37284,31560],{"class":331},[321,37286,31528],{"class":327},[321,37288,31565],{"class":331},[321,37290,37291,37293,37295,37297],{"class":323,"line":200},[321,37292,30882],{"class":327},[321,37294,34047],{"class":331},[321,37296,30537],{"class":327},[321,37298,34052],{"class":331},[321,37300,37301,37303,37305,37307],{"class":323,"line":1401},[321,37302,30882],{"class":327},[321,37304,31543],{"class":331},[321,37306,30537],{"class":327},[321,37308,31548],{"class":331},[321,37310,37311],{"class":323,"line":1407},[321,37312,34067],{"class":390},[321,37314,37315,37317,37319,37321],{"class":323,"line":1421},[321,37316,30882],{"class":327},[321,37318,31513],{"class":331},[321,37320,30537],{"class":327},[321,37322,31518],{"class":331},[321,37324,37325,37327,37329,37331],{"class":323,"line":1427},[321,37326,30882],{"class":327},[321,37328,32059],{"class":331},[321,37330,30537],{"class":327},[321,37332,35702],{"class":331},[321,37334,37335,37337,37340,37342],{"class":323,"line":1518},[321,37336,30882],{"class":327},[321,37338,37339],{"class":331}," 练习.AlexNet.model ",[321,37341,30537],{"class":327},[321,37343,35702],{"class":331},[321,37345,37346],{"class":323,"line":1524},[321,37347,2606],{"emptyLinePlaceholder":251},[321,37349,37350],{"class":323,"line":1536},[321,37351,2606],{"emptyLinePlaceholder":251},[321,37353,37354],{"class":323,"line":1818},[321,37355,34096],{"class":390},[321,37357,37358,37360,37362],{"class":323,"line":1823},[321,37359,32092],{"class":327},[321,37361,34103],{"class":2169},[321,37363,32098],{"class":331},[321,37365,37366,37368,37370,37372,37374,37376,37378],{"class":323,"line":1829},[321,37367,34110],{"class":331},[321,37369,377],{"class":327},[321,37371,31600],{"class":331},[321,37373,31603],{"class":5423},[321,37375,377],{"class":327},[321,37377,31608],{"class":436},[321,37379,31611],{"class":331},[321,37381,37382,37384,37386,37388],{"class":323,"line":1834},[321,37383,34127],{"class":5423},[321,37385,377],{"class":327},[321,37387,34132],{"class":380},[321,37389,31611],{"class":331},[321,37391,37392,37394,37396,37398,37400,37402,37404],{"class":323,"line":1848},[321,37393,34139],{"class":5423},[321,37395,377],{"class":327},[321,37397,31638],{"class":331},[321,37399,31641],{"class":5423},[321,37401,377],{"class":327},[321,37403,35594],{"class":380},[321,37405,31649],{"class":331},[321,37407,37408,37410,37412,37414],{"class":323,"line":1853},[321,37409,34156],{"class":5423},[321,37411,377],{"class":327},[321,37413,31621],{"class":380},[321,37415,338],{"class":331},[321,37417,37418,37420,37422,37424,37426,37428],{"class":323,"line":1859},[321,37419,34167],{"class":331},[321,37421,377],{"class":327},[321,37423,31679],{"class":331},[321,37425,31682],{"class":5423},[321,37427,377],{"class":327},[321,37429,34178],{"class":331},[321,37431,37432],{"class":323,"line":1880},[321,37433,34183],{"class":390},[321,37435,37436,37438,37440,37442],{"class":323,"line":1885},[321,37437,34188],{"class":5423},[321,37439,377],{"class":327},[321,37441,549],{"class":380},[321,37443,31611],{"class":331},[321,37445,37446,37448,37450,37452],{"class":323,"line":1899},[321,37447,34199],{"class":5423},[321,37449,377],{"class":327},[321,37451,31621],{"class":380},[321,37453,31611],{"class":331},[321,37455,37456,37458,37460,37462],{"class":323,"line":1904},[321,37457,34210],{"class":5423},[321,37459,377],{"class":327},[321,37461,523],{"class":380},[321,37463,338],{"class":331},[321,37465,37466,37468],{"class":323,"line":1933},[321,37467,4296],{"class":327},[321,37469,34223],{"class":331},[321,37471,37472],{"class":323,"line":1938},[321,37473,2606],{"emptyLinePlaceholder":251},[321,37475,37476],{"class":323,"line":1955},[321,37477,34232],{"class":390},[321,37479,37480,37482,37484],{"class":323,"line":1960},[321,37481,32092],{"class":327},[321,37483,34239],{"class":2169},[321,37485,34242],{"class":331},[321,37487,37488],{"class":323,"line":1965},[321,37489,34247],{"class":390},[321,37491,37492,37494,37496,37498,37500,37502,37504],{"class":323,"line":1970},[321,37493,31382],{"class":331},[321,37495,377],{"class":327},[321,37497,31389],{"class":436},[321,37499,1910],{"class":327},[321,37501,31394],{"class":331},[321,37503,1907],{"class":327},[321,37505,34264],{"class":436},[321,37507,37508,37510,37512],{"class":323,"line":1984},[321,37509,31434],{"class":331},[321,37511,377],{"class":327},[321,37513,32434],{"class":331},[321,37515,37516],{"class":323,"line":1989},[321,37517,2606],{"emptyLinePlaceholder":251},[321,37519,37520],{"class":323,"line":2783},[321,37521,34281],{"class":390},[321,37523,37524,37526,37528],{"class":323,"line":2797},[321,37525,34286],{"class":331},[321,37527,377],{"class":327},[321,37529,32487],{"class":380},[321,37531,37532,37534,37536],{"class":323,"line":2805},[321,37533,34295],{"class":331},[321,37535,377],{"class":327},[321,37537,3291],{"class":380},[321,37539,37540],{"class":323,"line":2810},[321,37541,2606],{"emptyLinePlaceholder":251},[321,37543,37544],{"class":323,"line":2816},[321,37545,34308],{"class":390},[321,37547,37548],{"class":323,"line":2822},[321,37549,34313],{"class":390},[321,37551,37552],{"class":323,"line":2827},[321,37553,34318],{"class":390},[321,37555,37556,37558],{"class":323,"line":8155},[321,37557,34323],{"class":327},[321,37559,33029],{"class":331},[321,37561,37562],{"class":323,"line":8179},[321,37563,34330],{"class":390},[321,37565,37566,37568,37570,37572],{"class":323,"line":8184},[321,37567,3609],{"class":327},[321,37569,34337],{"class":331},[321,37571,26188],{"class":327},[321,37573,34342],{"class":331},[321,37575,37576,37578,37580],{"class":323,"line":8190},[321,37577,34347],{"class":331},[321,37579,377],{"class":327},[321,37581,34352],{"class":331},[321,37583,37584,37586,37588],{"class":323,"line":8217},[321,37585,34357],{"class":331},[321,37587,377],{"class":327},[321,37589,34362],{"class":331},[321,37591,37592],{"class":323,"line":8222},[321,37593,34367],{"class":390},[321,37595,37596],{"class":323,"line":8228},[321,37597,33020],{"class":331},[321,37599,37600],{"class":323,"line":8240},[321,37601,34376],{"class":390},[321,37603,37604,37606,37608],{"class":323,"line":8252},[321,37605,32805],{"class":331},[321,37607,377],{"class":327},[321,37609,34385],{"class":331},[321,37611,37612],{"class":323,"line":8264},[321,37613,34390],{"class":390},[321,37615,37616,37618,37620,37622,37624,37626,37628],{"class":323,"line":9923},[321,37617,32822],{"class":331},[321,37619,377],{"class":327},[321,37621,32827],{"class":331},[321,37623,32830],{"class":5423},[321,37625,377],{"class":327},[321,37627,549],{"class":380},[321,37629,338],{"class":331},[321,37631,37632],{"class":323,"line":9948},[321,37633,34411],{"class":390},[321,37635,37636],{"class":323,"line":9971},[321,37637,34416],{"class":390},[321,37639,37640],{"class":323,"line":9995},[321,37641,34421],{"class":390},[321,37643,37644,37646,37648,37650,37652],{"class":323,"line":10000},[321,37645,34426],{"class":331},[321,37647,9684],{"class":327},[321,37649,32932],{"class":331},[321,37651,3155],{"class":327},[321,37653,34435],{"class":331},[321,37655,37656],{"class":323,"line":10005},[321,37657,34440],{"class":390},[321,37659,37660,37662,37664,37666,37668],{"class":323,"line":10010},[321,37661,34445],{"class":331},[321,37663,9684],{"class":327},[321,37665,34450],{"class":331},[321,37667,523],{"class":380},[321,37669,338],{"class":331},[321,37671,37672],{"class":323,"line":10019},[321,37673,2606],{"emptyLinePlaceholder":251},[321,37675,37676],{"class":323,"line":10024},[321,37677,34463],{"class":390},[321,37679,37680,37682,37684,37686,37688],{"class":323,"line":10030},[321,37681,34468],{"class":331},[321,37683,377],{"class":327},[321,37685,34473],{"class":331},[321,37687,916],{"class":327},[321,37689,34478],{"class":331},[321,37691,37692],{"class":323,"line":10051},[321,37693,34483],{"class":390},[321,37695,37696,37698,37700,37702],{"class":323,"line":10057},[321,37697,32596],{"class":380},[321,37699,332],{"class":331},[321,37701,34492],{"class":436},[321,37703,34495],{"class":331},[321,37705,37706],{"class":323,"line":10071},[321,37707,2606],{"emptyLinePlaceholder":251},[321,37709,37710],{"class":323,"line":10077},[321,37711,34504],{"class":390},[321,37713,37714,37716,37718,37720,37722],{"class":323,"line":10104},[321,37715,1737],{"class":327},[321,37717,31365],{"class":380},[321,37719,3155],{"class":327},[321,37721,31370],{"class":436},[321,37723,3945],{"class":331},[321,37725,37726],{"class":323,"line":10113},[321,37727,34521],{"class":390},[321,37729,37730,37732,37734],{"class":323,"line":10119},[321,37731,31434],{"class":331},[321,37733,377],{"class":327},[321,37735,37234],{"class":331},[321,37737,37738],{"class":323,"line":10127},[321,37739,34534],{"class":390},[321,37741,37742],{"class":323,"line":10132},[321,37743,34539],{"class":390},[321,37745,37746,37748,37750],{"class":323,"line":16811},[321,37747,34544],{"class":331},[321,37749,34547],{"class":436},[321,37751,30642],{"class":331},[321,37753,37754],{"class":323,"line":16817},[321,37755,34554],{"class":390},[321,37757,37758,37760,37762],{"class":323,"line":16840},[321,37759,34167],{"class":331},[321,37761,377],{"class":327},[321,37763,34563],{"class":331},[321,37765,37766],{"class":323,"line":16846},[321,37767,34568],{"class":390},[321,37769,37770],{"class":323,"line":16869},[321,37771,34573],{"class":331},[321,37773,37774],{"class":323,"line":16883},[321,37775,2606],{"emptyLinePlaceholder":251},[321,37777,37778],{"class":323,"line":16903},[321,37779,34582],{"class":390},[321,37781,37782],{"class":323,"line":16909},[321,37783,34587],{"class":390},[321,37785,37786,37788,37790,37792,37794,37796,37798],{"class":323,"line":16920},[321,37787,31382],{"class":331},[321,37789,377],{"class":327},[321,37791,31389],{"class":436},[321,37793,1910],{"class":327},[321,37795,31394],{"class":331},[321,37797,1907],{"class":327},[321,37799,34264],{"class":436},[321,37801,37802,37804,37806],{"class":323,"line":16943},[321,37803,31434],{"class":331},[321,37805,377],{"class":327},[321,37807,32434],{"class":331},[321,37809,37810],{"class":323,"line":16965},[321,37811,34616],{"class":390},[321,37813,37814],{"class":323,"line":16970},[321,37815,34621],{"class":390},[321,37817,37818,37820,37822,37824,37826,37828,37830,37832,37834,37836,37838,37840,37842,37844,37846,37848,37850,37852,37854,37856,37858,37860,37862],{"class":323,"line":16976},[321,37819,34626],{"class":331},[321,37821,377],{"class":327},[321,37823,1222],{"class":331},[321,37825,34633],{"class":436},[321,37827,710],{"class":331},[321,37829,34638],{"class":436},[321,37831,710],{"class":331},[321,37833,34643],{"class":436},[321,37835,710],{"class":331},[321,37837,34648],{"class":436},[321,37839,710],{"class":331},[321,37841,34653],{"class":436},[321,37843,710],{"class":331},[321,37845,34658],{"class":436},[321,37847,710],{"class":331},[321,37849,34663],{"class":436},[321,37851,710],{"class":331},[321,37853,34668],{"class":436},[321,37855,710],{"class":331},[321,37857,34673],{"class":436},[321,37859,710],{"class":331},[321,37861,34678],{"class":436},[321,37863,33391],{"class":331},[321,37865,37866,37868],{"class":323,"line":16990},[321,37867,34323],{"class":327},[321,37869,33029],{"class":331},[321,37871,37872],{"class":323,"line":17003},[321,37873,34691],{"class":390},[321,37875,37876,37878,37880,37882],{"class":323,"line":17008},[321,37877,3609],{"class":327},[321,37879,34698],{"class":331},[321,37881,26188],{"class":327},[321,37883,34342],{"class":331},[321,37885,37886,37888,37890],{"class":323,"line":17022},[321,37887,32755],{"class":331},[321,37889,377],{"class":327},[321,37891,32760],{"class":331},[321,37893,37894,37896,37898],{"class":323,"line":17027},[321,37895,32770],{"class":331},[321,37897,377],{"class":327},[321,37899,32775],{"class":331},[321,37901,37902],{"class":323,"line":17033},[321,37903,2606],{"emptyLinePlaceholder":251},[321,37905,37906],{"class":323,"line":17038},[321,37907,34727],{"class":390},[321,37909,37910],{"class":323,"line":17052},[321,37911,33020],{"class":331},[321,37913,37914],{"class":323,"line":17057},[321,37915,34736],{"class":390},[321,37917,37918,37920,37922],{"class":323,"line":17062},[321,37919,32805],{"class":331},[321,37921,377],{"class":327},[321,37923,32810],{"class":331},[321,37925,37926],{"class":323,"line":17076},[321,37927,34749],{"class":390},[321,37929,37930,37932,37934,37936,37938,37940,37942],{"class":323,"line":17088},[321,37931,32822],{"class":331},[321,37933,377],{"class":327},[321,37935,32827],{"class":331},[321,37937,32830],{"class":5423},[321,37939,377],{"class":327},[321,37941,549],{"class":380},[321,37943,338],{"class":331},[321,37945,37946],{"class":323,"line":17093},[321,37947,34770],{"class":390},[321,37949,37950,37952,37954],{"class":323,"line":17106},[321,37951,34775],{"class":331},[321,37953,377],{"class":327},[321,37955,34780],{"class":331},[321,37957,37958,37960,37962],{"class":323,"line":17111},[321,37959,34785],{"class":331},[321,37961,377],{"class":327},[321,37963,34790],{"class":331},[321,37965,37966,37968,37970,37972,37974,37976,37978,37980],{"class":323,"line":17116},[321,37967,34795],{"class":380},[321,37969,332],{"class":331},[321,37971,34800],{"class":436},[321,37973,34803],{"class":331},[321,37975,34806],{"class":436},[321,37977,710],{"class":331},[321,37979,34811],{"class":436},[321,37981,34814],{"class":331},[292,37983,37985],{"id":37984},"_22vgg","2.2.VGG",[22205,37987,37989],{"id":37988},"_221原理","2.2.1.原理",[19,37991,37992],{},[28,37993],{"alt":30,"src":37994},"\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,37996,37997],{},[28,37998],{"alt":30,"src":37999},"\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,38001,38002],{},[28,38003],{"alt":30,"src":38004},"\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,38006,38007],{},"参数详细描述：",[19,38009,38010],{},[28,38011],{"alt":30,"src":38012},"\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,38014,38015],{},[28,38016],{"alt":30,"src":38017},"\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,38019,38020],{},[28,38021],{"alt":30,"src":38022},"\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,38024,38025],{},[28,38026],{"alt":30,"src":38027},"\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,38029,38030],{},[28,38031],{"alt":30,"src":38032},"\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",[22205,38034,38036],{"id":38035},"_222代码实现","2.2.2.代码实现",[151,38038,38039],{},[154,38040,38041],{},"网络搭建",[312,38043,38045],{"className":30523,"code":38044,"language":30525,"meta":30,"style":30},"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",[318,38046,38047,38053,38065,38075,38085,38089,38106,38114,38133,38138,38143,38155,38193,38198,38234,38238,38267,38272,38277,38288,38324,38328,38364,38368,38396,38400,38405,38416,38452,38456,38492,38496,38532,38536,38564,38568,38573,38584,38621,38625,38661,38665,38701,38705,38733,38737,38742,38753,38789,38793,38829,38833,38869,38873,38901,38905,38910,38921,38926,38931,38936,38957,38961,38973,38977,38989,38993,38997,39002,39007,39022,39027,39037,39042,39057,39062,39081,39086,39095,39100,39110,39115,39120,39134,39139,39153,39161,39165,39169,39177,39188,39199,39210,39221,39232,39243,39249,39253,39258,39271,39291,39297,39306],{"__ignoreMap":30},[321,38048,38049,38051],{"class":323,"line":324},[321,38050,30537],{"class":327},[321,38052,30540],{"class":331},[321,38054,38055,38057,38060,38062],{"class":323,"line":167},[321,38056,30882],{"class":327},[321,38058,38059],{"class":331}," sympy.core.sympify ",[321,38061,30537],{"class":327},[321,38063,38064],{"class":331}," kernS\n",[321,38066,38067,38069,38071,38073],{"class":323,"line":200},[321,38068,30882],{"class":327},[321,38070,30885],{"class":331},[321,38072,30537],{"class":327},[321,38074,30890],{"class":331},[321,38076,38077,38079,38081,38083],{"class":323,"line":1401},[321,38078,30882],{"class":327},[321,38080,30902],{"class":331},[321,38082,30537],{"class":327},[321,38084,30907],{"class":331},[321,38086,38087],{"class":323,"line":1407},[321,38088,2606],{"emptyLinePlaceholder":251},[321,38090,38091,38093,38096,38098,38100,38102,38104],{"class":323,"line":1421},[321,38092,14901],{"class":327},[321,38094,38095],{"class":2169}," VGG16",[321,38097,332],{"class":331},[321,38099,30923],{"class":2169},[321,38101,890],{"class":331},[321,38103,30928],{"class":2169},[321,38105,30931],{"class":331},[321,38107,38108,38110,38112],{"class":323,"line":1427},[321,38109,30946],{"class":327},[321,38111,30949],{"class":380},[321,38113,30952],{"class":331},[321,38115,38116,38118,38120,38123,38125,38127,38129,38131],{"class":323,"line":1518},[321,38117,30962],{"class":380},[321,38119,332],{"class":331},[321,38121,38122],{"class":380},"VGG16",[321,38124,12642],{"class":331},[321,38126,30968],{"class":380},[321,38128,30971],{"class":331},[321,38130,30974],{"class":380},[321,38132,2182],{"class":331},[321,38134,38135],{"class":323,"line":1524},[321,38136,38137],{"class":390},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[321,38139,38140],{"class":323,"line":1536},[321,38141,38142],{"class":390},"        # 这里用的是灰度图\n",[321,38144,38145,38147,38150,38152],{"class":323,"line":1818},[321,38146,30990],{"class":380},[321,38148,38149],{"class":331},".block1",[321,38151,377],{"class":327},[321,38153,38154],{"class":331},"nn.Sequential(\n",[321,38156,38157,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190],{"class":323,"line":1823},[321,38158,38159],{"class":331},"            nn.Conv2d(",[321,38161,31001],{"class":5423},[321,38163,377],{"class":327},[321,38165,549],{"class":380},[321,38167,710],{"class":331},[321,38169,31010],{"class":5423},[321,38171,377],{"class":327},[321,38173,535],{"class":380},[321,38175,710],{"class":331},[321,38177,31019],{"class":5423},[321,38179,377],{"class":327},[321,38181,403],{"class":380},[321,38183,710],{"class":331},[321,38185,31028],{"class":5423},[321,38187,377],{"class":327},[321,38189,549],{"class":380},[321,38191,38192],{"class":331},"),\n",[321,38194,38195],{"class":323,"line":1829},[321,38196,38197],{"class":331},"            nn.ReLU(),\n",[321,38199,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232],{"class":323,"line":1834},[321,38201,38159],{"class":331},[321,38203,31001],{"class":5423},[321,38205,377],{"class":327},[321,38207,535],{"class":380},[321,38209,710],{"class":331},[321,38211,31010],{"class":5423},[321,38213,377],{"class":327},[321,38215,535],{"class":380},[321,38217,710],{"class":331},[321,38219,31019],{"class":5423},[321,38221,377],{"class":327},[321,38223,403],{"class":380},[321,38225,710],{"class":331},[321,38227,31028],{"class":5423},[321,38229,377],{"class":327},[321,38231,549],{"class":380},[321,38233,38192],{"class":331},[321,38235,38236],{"class":323,"line":1848},[321,38237,38197],{"class":331},[321,38239,38240,38243,38245,38247,38249,38251,38253,38255,38257,38259,38261,38263,38265],{"class":323,"line":1853},[321,38241,38242],{"class":331},"            nn.MaxPool2d(",[321,38244,31019],{"class":5423},[321,38246,377],{"class":327},[321,38248,409],{"class":380},[321,38250,710],{"class":331},[321,38252,31074],{"class":5423},[321,38254,377],{"class":327},[321,38256,409],{"class":380},[321,38258,710],{"class":331},[321,38260,31028],{"class":5423},[321,38262,377],{"class":327},[321,38264,523],{"class":380},[321,38266,338],{"class":331},[321,38268,38269],{"class":323,"line":1859},[321,38270,38271],{"class":331},"        )\n",[321,38273,38274],{"class":323,"line":1880},[321,38275,38276],{"class":390},"        # 第二层\n",[321,38278,38279,38281,38284,38286],{"class":323,"line":1885},[321,38280,30990],{"class":380},[321,38282,38283],{"class":331},".block2",[321,38285,377],{"class":327},[321,38287,38154],{"class":331},[321,38289,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322],{"class":323,"line":1899},[321,38291,38159],{"class":331},[321,38293,31001],{"class":5423},[321,38295,377],{"class":327},[321,38297,535],{"class":380},[321,38299,710],{"class":331},[321,38301,31010],{"class":5423},[321,38303,377],{"class":327},[321,38305,32215],{"class":380},[321,38307,710],{"class":331},[321,38309,31019],{"class":5423},[321,38311,377],{"class":327},[321,38313,403],{"class":380},[321,38315,710],{"class":331},[321,38317,31028],{"class":5423},[321,38319,377],{"class":327},[321,38321,549],{"class":380},[321,38323,38192],{"class":331},[321,38325,38326],{"class":323,"line":1904},[321,38327,38197],{"class":331},[321,38329,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362],{"class":323,"line":1933},[321,38331,38159],{"class":331},[321,38333,31001],{"class":5423},[321,38335,377],{"class":327},[321,38337,32215],{"class":380},[321,38339,710],{"class":331},[321,38341,31010],{"class":5423},[321,38343,377],{"class":327},[321,38345,32215],{"class":380},[321,38347,710],{"class":331},[321,38349,31019],{"class":5423},[321,38351,377],{"class":327},[321,38353,403],{"class":380},[321,38355,710],{"class":331},[321,38357,31028],{"class":5423},[321,38359,377],{"class":327},[321,38361,549],{"class":380},[321,38363,38192],{"class":331},[321,38365,38366],{"class":323,"line":1938},[321,38367,38197],{"class":331},[321,38369,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394],{"class":323,"line":1955},[321,38371,38242],{"class":331},[321,38373,31019],{"class":5423},[321,38375,377],{"class":327},[321,38377,409],{"class":380},[321,38379,710],{"class":331},[321,38381,31074],{"class":5423},[321,38383,377],{"class":327},[321,38385,409],{"class":380},[321,38387,710],{"class":331},[321,38389,31028],{"class":5423},[321,38391,377],{"class":327},[321,38393,523],{"class":380},[321,38395,338],{"class":331},[321,38397,38398],{"class":323,"line":1960},[321,38399,38271],{"class":331},[321,38401,38402],{"class":323,"line":1965},[321,38403,38404],{"class":390},"        # 第三层\n",[321,38406,38407,38409,38412,38414],{"class":323,"line":1970},[321,38408,30990],{"class":380},[321,38410,38411],{"class":331},".block3",[321,38413,377],{"class":327},[321,38415,38154],{"class":331},[321,38417,38418,38420,38422,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446,38448,38450],{"class":323,"line":1984},[321,38419,38159],{"class":331},[321,38421,31001],{"class":5423},[321,38423,377],{"class":327},[321,38425,32215],{"class":380},[321,38427,710],{"class":331},[321,38429,31010],{"class":5423},[321,38431,377],{"class":327},[321,38433,35015],{"class":380},[321,38435,710],{"class":331},[321,38437,31019],{"class":5423},[321,38439,377],{"class":327},[321,38441,403],{"class":380},[321,38443,710],{"class":331},[321,38445,31028],{"class":5423},[321,38447,377],{"class":327},[321,38449,549],{"class":380},[321,38451,38192],{"class":331},[321,38453,38454],{"class":323,"line":1989},[321,38455,38197],{"class":331},[321,38457,38458,38460,38462,38464,38466,38468,38470,38472,38474,38476,38478,38480,38482,38484,38486,38488,38490],{"class":323,"line":2783},[321,38459,38159],{"class":331},[321,38461,31001],{"class":5423},[321,38463,377],{"class":327},[321,38465,35015],{"class":380},[321,38467,710],{"class":331},[321,38469,31010],{"class":5423},[321,38471,377],{"class":327},[321,38473,35015],{"class":380},[321,38475,710],{"class":331},[321,38477,31019],{"class":5423},[321,38479,377],{"class":327},[321,38481,403],{"class":380},[321,38483,710],{"class":331},[321,38485,31028],{"class":5423},[321,38487,377],{"class":327},[321,38489,549],{"class":380},[321,38491,38192],{"class":331},[321,38493,38494],{"class":323,"line":2797},[321,38495,38197],{"class":331},[321,38497,38498,38500,38502,38504,38506,38508,38510,38512,38514,38516,38518,38520,38522,38524,38526,38528,38530],{"class":323,"line":2805},[321,38499,38159],{"class":331},[321,38501,31001],{"class":5423},[321,38503,377],{"class":327},[321,38505,35015],{"class":380},[321,38507,710],{"class":331},[321,38509,31010],{"class":5423},[321,38511,377],{"class":327},[321,38513,35015],{"class":380},[321,38515,710],{"class":331},[321,38517,31019],{"class":5423},[321,38519,377],{"class":327},[321,38521,403],{"class":380},[321,38523,710],{"class":331},[321,38525,31028],{"class":5423},[321,38527,377],{"class":327},[321,38529,549],{"class":380},[321,38531,38192],{"class":331},[321,38533,38534],{"class":323,"line":2810},[321,38535,38197],{"class":331},[321,38537,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558,38560,38562],{"class":323,"line":2816},[321,38539,38242],{"class":331},[321,38541,31019],{"class":5423},[321,38543,377],{"class":327},[321,38545,409],{"class":380},[321,38547,710],{"class":331},[321,38549,31074],{"class":5423},[321,38551,377],{"class":327},[321,38553,409],{"class":380},[321,38555,710],{"class":331},[321,38557,31028],{"class":5423},[321,38559,377],{"class":327},[321,38561,523],{"class":380},[321,38563,338],{"class":331},[321,38565,38566],{"class":323,"line":2822},[321,38567,38271],{"class":331},[321,38569,38570],{"class":323,"line":2827},[321,38571,38572],{"class":390},"        # 第四层\n",[321,38574,38575,38577,38580,38582],{"class":323,"line":8155},[321,38576,30990],{"class":380},[321,38578,38579],{"class":331},".block4",[321,38581,377],{"class":327},[321,38583,38154],{"class":331},[321,38585,38586,38588,38590,38592,38594,38596,38598,38600,38603,38605,38607,38609,38611,38613,38615,38617,38619],{"class":323,"line":8179},[321,38587,38159],{"class":331},[321,38589,31001],{"class":5423},[321,38591,377],{"class":327},[321,38593,35015],{"class":380},[321,38595,710],{"class":331},[321,38597,31010],{"class":5423},[321,38599,377],{"class":327},[321,38601,38602],{"class":380},"512",[321,38604,710],{"class":331},[321,38606,31019],{"class":5423},[321,38608,377],{"class":327},[321,38610,403],{"class":380},[321,38612,710],{"class":331},[321,38614,31028],{"class":5423},[321,38616,377],{"class":327},[321,38618,549],{"class":380},[321,38620,38192],{"class":331},[321,38622,38623],{"class":323,"line":8184},[321,38624,38197],{"class":331},[321,38626,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659],{"class":323,"line":8190},[321,38628,38159],{"class":331},[321,38630,31001],{"class":5423},[321,38632,377],{"class":327},[321,38634,38602],{"class":380},[321,38636,710],{"class":331},[321,38638,31010],{"class":5423},[321,38640,377],{"class":327},[321,38642,38602],{"class":380},[321,38644,710],{"class":331},[321,38646,31019],{"class":5423},[321,38648,377],{"class":327},[321,38650,403],{"class":380},[321,38652,710],{"class":331},[321,38654,31028],{"class":5423},[321,38656,377],{"class":327},[321,38658,549],{"class":380},[321,38660,38192],{"class":331},[321,38662,38663],{"class":323,"line":8217},[321,38664,38197],{"class":331},[321,38666,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699],{"class":323,"line":8222},[321,38668,38159],{"class":331},[321,38670,31001],{"class":5423},[321,38672,377],{"class":327},[321,38674,38602],{"class":380},[321,38676,710],{"class":331},[321,38678,31010],{"class":5423},[321,38680,377],{"class":327},[321,38682,38602],{"class":380},[321,38684,710],{"class":331},[321,38686,31019],{"class":5423},[321,38688,377],{"class":327},[321,38690,403],{"class":380},[321,38692,710],{"class":331},[321,38694,31028],{"class":5423},[321,38696,377],{"class":327},[321,38698,549],{"class":380},[321,38700,38192],{"class":331},[321,38702,38703],{"class":323,"line":8228},[321,38704,38197],{"class":331},[321,38706,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731],{"class":323,"line":8240},[321,38708,38242],{"class":331},[321,38710,31019],{"class":5423},[321,38712,377],{"class":327},[321,38714,409],{"class":380},[321,38716,710],{"class":331},[321,38718,31074],{"class":5423},[321,38720,377],{"class":327},[321,38722,409],{"class":380},[321,38724,710],{"class":331},[321,38726,31028],{"class":5423},[321,38728,377],{"class":327},[321,38730,523],{"class":380},[321,38732,338],{"class":331},[321,38734,38735],{"class":323,"line":8252},[321,38736,38271],{"class":331},[321,38738,38739],{"class":323,"line":8264},[321,38740,38741],{"class":390},"        # 第五层\n",[321,38743,38744,38746,38749,38751],{"class":323,"line":9923},[321,38745,30990],{"class":380},[321,38747,38748],{"class":331},".block5",[321,38750,377],{"class":327},[321,38752,38154],{"class":331},[321,38754,38755,38757,38759,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785,38787],{"class":323,"line":9948},[321,38756,38159],{"class":331},[321,38758,31001],{"class":5423},[321,38760,377],{"class":327},[321,38762,38602],{"class":380},[321,38764,710],{"class":331},[321,38766,31010],{"class":5423},[321,38768,377],{"class":327},[321,38770,38602],{"class":380},[321,38772,710],{"class":331},[321,38774,31019],{"class":5423},[321,38776,377],{"class":327},[321,38778,403],{"class":380},[321,38780,710],{"class":331},[321,38782,31028],{"class":5423},[321,38784,377],{"class":327},[321,38786,549],{"class":380},[321,38788,38192],{"class":331},[321,38790,38791],{"class":323,"line":9971},[321,38792,38197],{"class":331},[321,38794,38795,38797,38799,38801,38803,38805,38807,38809,38811,38813,38815,38817,38819,38821,38823,38825,38827],{"class":323,"line":9995},[321,38796,38159],{"class":331},[321,38798,31001],{"class":5423},[321,38800,377],{"class":327},[321,38802,38602],{"class":380},[321,38804,710],{"class":331},[321,38806,31010],{"class":5423},[321,38808,377],{"class":327},[321,38810,38602],{"class":380},[321,38812,710],{"class":331},[321,38814,31019],{"class":5423},[321,38816,377],{"class":327},[321,38818,403],{"class":380},[321,38820,710],{"class":331},[321,38822,31028],{"class":5423},[321,38824,377],{"class":327},[321,38826,549],{"class":380},[321,38828,38192],{"class":331},[321,38830,38831],{"class":323,"line":10000},[321,38832,38197],{"class":331},[321,38834,38835,38837,38839,38841,38843,38845,38847,38849,38851,38853,38855,38857,38859,38861,38863,38865,38867],{"class":323,"line":10005},[321,38836,38159],{"class":331},[321,38838,31001],{"class":5423},[321,38840,377],{"class":327},[321,38842,38602],{"class":380},[321,38844,710],{"class":331},[321,38846,31010],{"class":5423},[321,38848,377],{"class":327},[321,38850,38602],{"class":380},[321,38852,710],{"class":331},[321,38854,31019],{"class":5423},[321,38856,377],{"class":327},[321,38858,403],{"class":380},[321,38860,710],{"class":331},[321,38862,31028],{"class":5423},[321,38864,377],{"class":327},[321,38866,549],{"class":380},[321,38868,38192],{"class":331},[321,38870,38871],{"class":323,"line":10010},[321,38872,38197],{"class":331},[321,38874,38875,38877,38879,38881,38883,38885,38887,38889,38891,38893,38895,38897,38899],{"class":323,"line":10019},[321,38876,38242],{"class":331},[321,38878,31019],{"class":5423},[321,38880,377],{"class":327},[321,38882,409],{"class":380},[321,38884,710],{"class":331},[321,38886,31074],{"class":5423},[321,38888,377],{"class":327},[321,38890,409],{"class":380},[321,38892,710],{"class":331},[321,38894,31028],{"class":5423},[321,38896,377],{"class":327},[321,38898,523],{"class":380},[321,38900,338],{"class":331},[321,38902,38903],{"class":323,"line":10024},[321,38904,38271],{"class":331},[321,38906,38907],{"class":323,"line":10030},[321,38908,38909],{"class":390},"        # 全连接层\n",[321,38911,38912,38914,38917,38919],{"class":323,"line":10051},[321,38913,30990],{"class":380},[321,38915,38916],{"class":331},".block6",[321,38918,377],{"class":327},[321,38920,38154],{"class":331},[321,38922,38923],{"class":323,"line":10057},[321,38924,38925],{"class":390},"            # 平展操作\n",[321,38927,38928],{"class":323,"line":10071},[321,38929,38930],{"class":390},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[321,38932,38933],{"class":323,"line":10077},[321,38934,38935],{"class":331},"            nn.Flatten(),\n",[321,38937,38938,38941,38943,38945,38947,38949,38951,38953,38955],{"class":323,"line":10104},[321,38939,38940],{"class":331},"            nn.Linear(",[321,38942,701],{"class":380},[321,38944,787],{"class":327},[321,38946,701],{"class":380},[321,38948,787],{"class":327},[321,38950,38602],{"class":380},[321,38952,710],{"class":331},[321,38954,35015],{"class":380},[321,38956,38192],{"class":331},[321,38958,38959],{"class":323,"line":10113},[321,38960,38197],{"class":331},[321,38962,38963,38965,38967,38969,38971],{"class":323,"line":10119},[321,38964,38940],{"class":331},[321,38966,35015],{"class":380},[321,38968,710],{"class":331},[321,38970,32215],{"class":380},[321,38972,38192],{"class":331},[321,38974,38975],{"class":323,"line":10127},[321,38976,38197],{"class":331},[321,38978,38979,38981,38983,38985,38987],{"class":323,"line":10132},[321,38980,38940],{"class":331},[321,38982,32215],{"class":380},[321,38984,710],{"class":331},[321,38986,778],{"class":380},[321,38988,338],{"class":331},[321,38990,38991],{"class":323,"line":16811},[321,38992,38271],{"class":331},[321,38994,38995],{"class":323,"line":16817},[321,38996,2606],{"emptyLinePlaceholder":251},[321,38998,38999],{"class":323,"line":16840},[321,39000,39001],{"class":390},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[321,39003,39004],{"class":323,"line":16846},[321,39005,39006],{"class":390},"        # 循环遍历模型\n",[321,39008,39009,39011,39014,39016,39019],{"class":323,"line":16869},[321,39010,3609],{"class":327},[321,39012,39013],{"class":331}," m ",[321,39015,26188],{"class":327},[321,39017,39018],{"class":380}," self",[321,39020,39021],{"class":331},".modules():\n",[321,39023,39024],{"class":323,"line":16883},[321,39025,39026],{"class":390},"            # print(m)\n",[321,39028,39029,39031,39034],{"class":323,"line":16903},[321,39030,4848],{"class":327},[321,39032,39033],{"class":380}," isinstance",[321,39035,39036],{"class":331},"(m,nn.Conv2d):\n",[321,39038,39039],{"class":323,"line":16909},[321,39040,39041],{"class":390},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[321,39043,39044,39047,39050,39052,39055],{"class":323,"line":16920},[321,39045,39046],{"class":331},"                nn.init.kaiming_normal_(m.weight,",[321,39048,39049],{"class":5423},"nonlinearity",[321,39051,377],{"class":327},[321,39053,39054],{"class":436},"'relu'",[321,39056,338],{"class":331},[321,39058,39059],{"class":323,"line":16943},[321,39060,39061],{"class":390},"                # 判断b参数是否存在\n",[321,39063,39064,39067,39070,39073,39076,39079],{"class":323,"line":16965},[321,39065,39066],{"class":327},"                if",[321,39068,39069],{"class":331}," m.bias ",[321,39071,39072],{"class":327},"is",[321,39074,39075],{"class":327}," not",[321,39077,39078],{"class":380}," None",[321,39080,3945],{"class":331},[321,39082,39083],{"class":323,"line":16970},[321,39084,39085],{"class":390},"                    # 如果参数不存在的化初始化b=0\n",[321,39087,39088,39091,39093],{"class":323,"line":16976},[321,39089,39090],{"class":331},"                    nn.init.constant_(m.bias,",[321,39092,523],{"class":380},[321,39094,338],{"class":331},[321,39096,39097],{"class":323,"line":16990},[321,39098,39099],{"class":390},"            # 全连接层初始化\n",[321,39101,39102,39105,39107],{"class":323,"line":17003},[321,39103,39104],{"class":327},"            elif",[321,39106,39033],{"class":380},[321,39108,39109],{"class":331},"(m,nn.Linear):\n",[321,39111,39112],{"class":323,"line":17008},[321,39113,39114],{"class":390},"                # 这个初始化方法是利用的是正太分布的方式\n",[321,39116,39117],{"class":323,"line":17022},[321,39118,39119],{"class":390},"                # 均值为0，方差为0.01\n",[321,39121,39122,39125,39127,39129,39132],{"class":323,"line":17027},[321,39123,39124],{"class":331},"                nn.init.normal_(m.weight,",[321,39126,523],{"class":380},[321,39128,710],{"class":331},[321,39130,39131],{"class":380},"0.01",[321,39133,338],{"class":331},[321,39135,39136],{"class":323,"line":17033},[321,39137,39138],{"class":390},"                # 初始化b参数\n",[321,39140,39141,39143,39145,39147,39149,39151],{"class":323,"line":17038},[321,39142,39066],{"class":327},[321,39144,39069],{"class":331},[321,39146,39072],{"class":327},[321,39148,39075],{"class":327},[321,39150,39078],{"class":380},[321,39152,3945],{"class":331},[321,39154,39155,39157,39159],{"class":323,"line":17052},[321,39156,39090],{"class":331},[321,39158,523],{"class":380},[321,39160,338],{"class":331},[321,39162,39163],{"class":323,"line":17057},[321,39164,2606],{"emptyLinePlaceholder":251},[321,39166,39167],{"class":323,"line":17062},[321,39168,35310],{"class":390},[321,39170,39171,39173,39175],{"class":323,"line":17076},[321,39172,30946],{"class":327},[321,39174,31238],{"class":2169},[321,39176,31241],{"class":331},[321,39178,39179,39181,39183,39185],{"class":323,"line":17088},[321,39180,31246],{"class":331},[321,39182,377],{"class":327},[321,39184,30968],{"class":380},[321,39186,39187],{"class":331},".block1(x)\n",[321,39189,39190,39192,39194,39196],{"class":323,"line":17093},[321,39191,31246],{"class":331},[321,39193,377],{"class":327},[321,39195,30968],{"class":380},[321,39197,39198],{"class":331},".block2(x)\n",[321,39200,39201,39203,39205,39207],{"class":323,"line":17106},[321,39202,31246],{"class":331},[321,39204,377],{"class":327},[321,39206,30968],{"class":380},[321,39208,39209],{"class":331},".block3(x)\n",[321,39211,39212,39214,39216,39218],{"class":323,"line":17111},[321,39213,31246],{"class":331},[321,39215,377],{"class":327},[321,39217,30968],{"class":380},[321,39219,39220],{"class":331},".block4(x)\n",[321,39222,39223,39225,39227,39229],{"class":323,"line":17116},[321,39224,31246],{"class":331},[321,39226,377],{"class":327},[321,39228,30968],{"class":380},[321,39230,39231],{"class":331},".block5(x)\n",[321,39233,39234,39236,39238,39240],{"class":323,"line":17121},[321,39235,31246],{"class":331},[321,39237,377],{"class":327},[321,39239,30968],{"class":380},[321,39241,39242],{"class":331},".block6(x)\n",[321,39244,39245,39247],{"class":323,"line":17134},[321,39246,14959],{"class":327},[321,39248,31354],{"class":331},[321,39250,39251],{"class":323,"line":17139},[321,39252,2606],{"emptyLinePlaceholder":251},[321,39254,39255],{"class":323,"line":32778},[321,39256,39257],{"class":390},"# 验证模型\n",[321,39259,39260,39262,39264,39266,39269],{"class":323,"line":32784},[321,39261,1737],{"class":327},[321,39263,31365],{"class":380},[321,39265,3155],{"class":327},[321,39267,39268],{"class":436},"'__main__'",[321,39270,3945],{"class":331},[321,39272,39273,39275,39277,39279,39281,39283,39285,39287,39289],{"class":323,"line":32790},[321,39274,31382],{"class":331},[321,39276,377],{"class":327},[321,39278,30596],{"class":331},[321,39280,31389],{"class":436},[321,39282,1910],{"class":327},[321,39284,31394],{"class":331},[321,39286,1907],{"class":327},[321,39288,30621],{"class":436},[321,39290,338],{"class":331},[321,39292,39293,39295],{"class":323,"line":32796},[321,39294,31444],{"class":380},[321,39296,30630],{"class":331},[321,39298,39299,39301,39303],{"class":323,"line":32802},[321,39300,31434],{"class":331},[321,39302,377],{"class":327},[321,39304,39305],{"class":331},"VGG16().to(device)\n",[321,39307,39308,39310,39312,39314,39316,39318,39320,39322],{"class":323,"line":32813},[321,39309,31444],{"class":380},[321,39311,31447],{"class":331},[321,39313,549],{"class":380},[321,39315,710],{"class":331},[321,39317,31646],{"class":380},[321,39319,710],{"class":331},[321,39321,31646],{"class":380},[321,39323,31460],{"class":331},[151,39325,39326],{"start":167},[154,39327,39328],{},"训练代码",[19,39330,39331],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39333,39334],{},"解决方式:",[19,39336,39337],{},"①权重初始化",[312,39339,39341],{"className":30523,"code":39340,"language":30525,"meta":30,"style":30},"# 权重初始化,保证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",[318,39342,39343,39348,39353,39365,39370,39378,39383,39396,39401,39415,39420,39429,39434,39443,39448,39453,39466,39471,39485],{"__ignoreMap":30},[321,39344,39345],{"class":323,"line":324},[321,39346,39347],{"class":390},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[321,39349,39350],{"class":323,"line":167},[321,39351,39352],{"class":390},"# 循环遍历模型\n",[321,39354,39355,39357,39359,39361,39363],{"class":323,"line":200},[321,39356,3231],{"class":327},[321,39358,39013],{"class":331},[321,39360,26188],{"class":327},[321,39362,39018],{"class":380},[321,39364,39021],{"class":331},[321,39366,39367],{"class":323,"line":1401},[321,39368,39369],{"class":390},"    # print(m)\n",[321,39371,39372,39374,39376],{"class":323,"line":1407},[321,39373,3307],{"class":327},[321,39375,39033],{"class":380},[321,39377,39036],{"class":331},[321,39379,39380],{"class":323,"line":1421},[321,39381,39382],{"class":390},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[321,39384,39385,39388,39390,39392,39394],{"class":323,"line":1427},[321,39386,39387],{"class":331},"        nn.init.kaiming_normal_(m.weight,",[321,39389,39049],{"class":5423},[321,39391,377],{"class":327},[321,39393,39054],{"class":436},[321,39395,338],{"class":331},[321,39397,39398],{"class":323,"line":1518},[321,39399,39400],{"class":390},"        # 判断b参数是否存在\n",[321,39402,39403,39405,39407,39409,39411,39413],{"class":323,"line":1524},[321,39404,2703],{"class":327},[321,39406,39069],{"class":331},[321,39408,39072],{"class":327},[321,39410,39075],{"class":327},[321,39412,39078],{"class":380},[321,39414,3945],{"class":331},[321,39416,39417],{"class":323,"line":1536},[321,39418,39419],{"class":390},"            # 如果参数不存在的化初始化b=0\n",[321,39421,39422,39425,39427],{"class":323,"line":1818},[321,39423,39424],{"class":331},"            nn.init.constant_(m.bias,",[321,39426,523],{"class":380},[321,39428,338],{"class":331},[321,39430,39431],{"class":323,"line":1823},[321,39432,39433],{"class":390},"    # 全连接层初始化\n",[321,39435,39436,39439,39441],{"class":323,"line":1829},[321,39437,39438],{"class":327},"    elif",[321,39440,39033],{"class":380},[321,39442,39109],{"class":331},[321,39444,39445],{"class":323,"line":1834},[321,39446,39447],{"class":390},"        # 这个初始化方法是利用的是正太分布的方式\n",[321,39449,39450],{"class":323,"line":1848},[321,39451,39452],{"class":390},"        # 均值为0，方差为0.01\n",[321,39454,39455,39458,39460,39462,39464],{"class":323,"line":1853},[321,39456,39457],{"class":331},"        nn.init.normal_(m.weight,",[321,39459,523],{"class":380},[321,39461,710],{"class":331},[321,39463,39131],{"class":380},[321,39465,338],{"class":331},[321,39467,39468],{"class":323,"line":1859},[321,39469,39470],{"class":390},"        # 初始化b参数\n",[321,39472,39473,39475,39477,39479,39481,39483],{"class":323,"line":1880},[321,39474,2703],{"class":327},[321,39476,39069],{"class":331},[321,39478,39072],{"class":327},[321,39480,39075],{"class":327},[321,39482,39078],{"class":380},[321,39484,3945],{"class":331},[321,39486,39487,39489,39491],{"class":323,"line":1885},[321,39488,39424],{"class":331},[321,39490,523],{"class":380},[321,39492,338],{"class":331},[19,39494,39495],{},"②尽可能地增加批次",[19,39497,39498],{},"训练完整代码：",[312,39500,39501],{"className":30523,"code":38044,"language":30525,"meta":30,"style":30},[318,39502,39503,39509,39519,39529,39539,39543,39559,39567,39585,39589,39593,39603,39639,39643,39679,39683,39711,39715,39719,39729,39765,39769,39805,39809,39837,39841,39845,39855,39891,39895,39931,39935,39971,39975,40003,40007,40011,40021,40057,40061,40097,40101,40137,40141,40169,40173,40177,40187,40223,40227,40263,40267,40303,40307,40335,40339,40343,40353,40357,40361,40365,40385,40389,40401,40405,40417,40421,40425,40429,40433,40445,40449,40457,40461,40473,40477,40491,40495,40503,40507,40515,40519,40523,40535,40539,40553,40561,40565,40569,40577,40587,40597,40607,40617,40627,40637,40643,40647,40651,40663,40683,40689,40697],{"__ignoreMap":30},[321,39504,39505,39507],{"class":323,"line":324},[321,39506,30537],{"class":327},[321,39508,30540],{"class":331},[321,39510,39511,39513,39515,39517],{"class":323,"line":167},[321,39512,30882],{"class":327},[321,39514,38059],{"class":331},[321,39516,30537],{"class":327},[321,39518,38064],{"class":331},[321,39520,39521,39523,39525,39527],{"class":323,"line":200},[321,39522,30882],{"class":327},[321,39524,30885],{"class":331},[321,39526,30537],{"class":327},[321,39528,30890],{"class":331},[321,39530,39531,39533,39535,39537],{"class":323,"line":1401},[321,39532,30882],{"class":327},[321,39534,30902],{"class":331},[321,39536,30537],{"class":327},[321,39538,30907],{"class":331},[321,39540,39541],{"class":323,"line":1407},[321,39542,2606],{"emptyLinePlaceholder":251},[321,39544,39545,39547,39549,39551,39553,39555,39557],{"class":323,"line":1421},[321,39546,14901],{"class":327},[321,39548,38095],{"class":2169},[321,39550,332],{"class":331},[321,39552,30923],{"class":2169},[321,39554,890],{"class":331},[321,39556,30928],{"class":2169},[321,39558,30931],{"class":331},[321,39560,39561,39563,39565],{"class":323,"line":1427},[321,39562,30946],{"class":327},[321,39564,30949],{"class":380},[321,39566,30952],{"class":331},[321,39568,39569,39571,39573,39575,39577,39579,39581,39583],{"class":323,"line":1518},[321,39570,30962],{"class":380},[321,39572,332],{"class":331},[321,39574,38122],{"class":380},[321,39576,12642],{"class":331},[321,39578,30968],{"class":380},[321,39580,30971],{"class":331},[321,39582,30974],{"class":380},[321,39584,2182],{"class":331},[321,39586,39587],{"class":323,"line":1524},[321,39588,38137],{"class":390},[321,39590,39591],{"class":323,"line":1536},[321,39592,38142],{"class":390},[321,39594,39595,39597,39599,39601],{"class":323,"line":1818},[321,39596,30990],{"class":380},[321,39598,38149],{"class":331},[321,39600,377],{"class":327},[321,39602,38154],{"class":331},[321,39604,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637],{"class":323,"line":1823},[321,39606,38159],{"class":331},[321,39608,31001],{"class":5423},[321,39610,377],{"class":327},[321,39612,549],{"class":380},[321,39614,710],{"class":331},[321,39616,31010],{"class":5423},[321,39618,377],{"class":327},[321,39620,535],{"class":380},[321,39622,710],{"class":331},[321,39624,31019],{"class":5423},[321,39626,377],{"class":327},[321,39628,403],{"class":380},[321,39630,710],{"class":331},[321,39632,31028],{"class":5423},[321,39634,377],{"class":327},[321,39636,549],{"class":380},[321,39638,38192],{"class":331},[321,39640,39641],{"class":323,"line":1829},[321,39642,38197],{"class":331},[321,39644,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677],{"class":323,"line":1834},[321,39646,38159],{"class":331},[321,39648,31001],{"class":5423},[321,39650,377],{"class":327},[321,39652,535],{"class":380},[321,39654,710],{"class":331},[321,39656,31010],{"class":5423},[321,39658,377],{"class":327},[321,39660,535],{"class":380},[321,39662,710],{"class":331},[321,39664,31019],{"class":5423},[321,39666,377],{"class":327},[321,39668,403],{"class":380},[321,39670,710],{"class":331},[321,39672,31028],{"class":5423},[321,39674,377],{"class":327},[321,39676,549],{"class":380},[321,39678,38192],{"class":331},[321,39680,39681],{"class":323,"line":1848},[321,39682,38197],{"class":331},[321,39684,39685,39687,39689,39691,39693,39695,39697,39699,39701,39703,39705,39707,39709],{"class":323,"line":1853},[321,39686,38242],{"class":331},[321,39688,31019],{"class":5423},[321,39690,377],{"class":327},[321,39692,409],{"class":380},[321,39694,710],{"class":331},[321,39696,31074],{"class":5423},[321,39698,377],{"class":327},[321,39700,409],{"class":380},[321,39702,710],{"class":331},[321,39704,31028],{"class":5423},[321,39706,377],{"class":327},[321,39708,523],{"class":380},[321,39710,338],{"class":331},[321,39712,39713],{"class":323,"line":1859},[321,39714,38271],{"class":331},[321,39716,39717],{"class":323,"line":1880},[321,39718,38276],{"class":390},[321,39720,39721,39723,39725,39727],{"class":323,"line":1885},[321,39722,30990],{"class":380},[321,39724,38283],{"class":331},[321,39726,377],{"class":327},[321,39728,38154],{"class":331},[321,39730,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763],{"class":323,"line":1899},[321,39732,38159],{"class":331},[321,39734,31001],{"class":5423},[321,39736,377],{"class":327},[321,39738,535],{"class":380},[321,39740,710],{"class":331},[321,39742,31010],{"class":5423},[321,39744,377],{"class":327},[321,39746,32215],{"class":380},[321,39748,710],{"class":331},[321,39750,31019],{"class":5423},[321,39752,377],{"class":327},[321,39754,403],{"class":380},[321,39756,710],{"class":331},[321,39758,31028],{"class":5423},[321,39760,377],{"class":327},[321,39762,549],{"class":380},[321,39764,38192],{"class":331},[321,39766,39767],{"class":323,"line":1904},[321,39768,38197],{"class":331},[321,39770,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803],{"class":323,"line":1933},[321,39772,38159],{"class":331},[321,39774,31001],{"class":5423},[321,39776,377],{"class":327},[321,39778,32215],{"class":380},[321,39780,710],{"class":331},[321,39782,31010],{"class":5423},[321,39784,377],{"class":327},[321,39786,32215],{"class":380},[321,39788,710],{"class":331},[321,39790,31019],{"class":5423},[321,39792,377],{"class":327},[321,39794,403],{"class":380},[321,39796,710],{"class":331},[321,39798,31028],{"class":5423},[321,39800,377],{"class":327},[321,39802,549],{"class":380},[321,39804,38192],{"class":331},[321,39806,39807],{"class":323,"line":1938},[321,39808,38197],{"class":331},[321,39810,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835],{"class":323,"line":1955},[321,39812,38242],{"class":331},[321,39814,31019],{"class":5423},[321,39816,377],{"class":327},[321,39818,409],{"class":380},[321,39820,710],{"class":331},[321,39822,31074],{"class":5423},[321,39824,377],{"class":327},[321,39826,409],{"class":380},[321,39828,710],{"class":331},[321,39830,31028],{"class":5423},[321,39832,377],{"class":327},[321,39834,523],{"class":380},[321,39836,338],{"class":331},[321,39838,39839],{"class":323,"line":1960},[321,39840,38271],{"class":331},[321,39842,39843],{"class":323,"line":1965},[321,39844,38404],{"class":390},[321,39846,39847,39849,39851,39853],{"class":323,"line":1970},[321,39848,30990],{"class":380},[321,39850,38411],{"class":331},[321,39852,377],{"class":327},[321,39854,38154],{"class":331},[321,39856,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889],{"class":323,"line":1984},[321,39858,38159],{"class":331},[321,39860,31001],{"class":5423},[321,39862,377],{"class":327},[321,39864,32215],{"class":380},[321,39866,710],{"class":331},[321,39868,31010],{"class":5423},[321,39870,377],{"class":327},[321,39872,35015],{"class":380},[321,39874,710],{"class":331},[321,39876,31019],{"class":5423},[321,39878,377],{"class":327},[321,39880,403],{"class":380},[321,39882,710],{"class":331},[321,39884,31028],{"class":5423},[321,39886,377],{"class":327},[321,39888,549],{"class":380},[321,39890,38192],{"class":331},[321,39892,39893],{"class":323,"line":1989},[321,39894,38197],{"class":331},[321,39896,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929],{"class":323,"line":2783},[321,39898,38159],{"class":331},[321,39900,31001],{"class":5423},[321,39902,377],{"class":327},[321,39904,35015],{"class":380},[321,39906,710],{"class":331},[321,39908,31010],{"class":5423},[321,39910,377],{"class":327},[321,39912,35015],{"class":380},[321,39914,710],{"class":331},[321,39916,31019],{"class":5423},[321,39918,377],{"class":327},[321,39920,403],{"class":380},[321,39922,710],{"class":331},[321,39924,31028],{"class":5423},[321,39926,377],{"class":327},[321,39928,549],{"class":380},[321,39930,38192],{"class":331},[321,39932,39933],{"class":323,"line":2797},[321,39934,38197],{"class":331},[321,39936,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969],{"class":323,"line":2805},[321,39938,38159],{"class":331},[321,39940,31001],{"class":5423},[321,39942,377],{"class":327},[321,39944,35015],{"class":380},[321,39946,710],{"class":331},[321,39948,31010],{"class":5423},[321,39950,377],{"class":327},[321,39952,35015],{"class":380},[321,39954,710],{"class":331},[321,39956,31019],{"class":5423},[321,39958,377],{"class":327},[321,39960,403],{"class":380},[321,39962,710],{"class":331},[321,39964,31028],{"class":5423},[321,39966,377],{"class":327},[321,39968,549],{"class":380},[321,39970,38192],{"class":331},[321,39972,39973],{"class":323,"line":2810},[321,39974,38197],{"class":331},[321,39976,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001],{"class":323,"line":2816},[321,39978,38242],{"class":331},[321,39980,31019],{"class":5423},[321,39982,377],{"class":327},[321,39984,409],{"class":380},[321,39986,710],{"class":331},[321,39988,31074],{"class":5423},[321,39990,377],{"class":327},[321,39992,409],{"class":380},[321,39994,710],{"class":331},[321,39996,31028],{"class":5423},[321,39998,377],{"class":327},[321,40000,523],{"class":380},[321,40002,338],{"class":331},[321,40004,40005],{"class":323,"line":2822},[321,40006,38271],{"class":331},[321,40008,40009],{"class":323,"line":2827},[321,40010,38572],{"class":390},[321,40012,40013,40015,40017,40019],{"class":323,"line":8155},[321,40014,30990],{"class":380},[321,40016,38579],{"class":331},[321,40018,377],{"class":327},[321,40020,38154],{"class":331},[321,40022,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055],{"class":323,"line":8179},[321,40024,38159],{"class":331},[321,40026,31001],{"class":5423},[321,40028,377],{"class":327},[321,40030,35015],{"class":380},[321,40032,710],{"class":331},[321,40034,31010],{"class":5423},[321,40036,377],{"class":327},[321,40038,38602],{"class":380},[321,40040,710],{"class":331},[321,40042,31019],{"class":5423},[321,40044,377],{"class":327},[321,40046,403],{"class":380},[321,40048,710],{"class":331},[321,40050,31028],{"class":5423},[321,40052,377],{"class":327},[321,40054,549],{"class":380},[321,40056,38192],{"class":331},[321,40058,40059],{"class":323,"line":8184},[321,40060,38197],{"class":331},[321,40062,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095],{"class":323,"line":8190},[321,40064,38159],{"class":331},[321,40066,31001],{"class":5423},[321,40068,377],{"class":327},[321,40070,38602],{"class":380},[321,40072,710],{"class":331},[321,40074,31010],{"class":5423},[321,40076,377],{"class":327},[321,40078,38602],{"class":380},[321,40080,710],{"class":331},[321,40082,31019],{"class":5423},[321,40084,377],{"class":327},[321,40086,403],{"class":380},[321,40088,710],{"class":331},[321,40090,31028],{"class":5423},[321,40092,377],{"class":327},[321,40094,549],{"class":380},[321,40096,38192],{"class":331},[321,40098,40099],{"class":323,"line":8217},[321,40100,38197],{"class":331},[321,40102,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135],{"class":323,"line":8222},[321,40104,38159],{"class":331},[321,40106,31001],{"class":5423},[321,40108,377],{"class":327},[321,40110,38602],{"class":380},[321,40112,710],{"class":331},[321,40114,31010],{"class":5423},[321,40116,377],{"class":327},[321,40118,38602],{"class":380},[321,40120,710],{"class":331},[321,40122,31019],{"class":5423},[321,40124,377],{"class":327},[321,40126,403],{"class":380},[321,40128,710],{"class":331},[321,40130,31028],{"class":5423},[321,40132,377],{"class":327},[321,40134,549],{"class":380},[321,40136,38192],{"class":331},[321,40138,40139],{"class":323,"line":8228},[321,40140,38197],{"class":331},[321,40142,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167],{"class":323,"line":8240},[321,40144,38242],{"class":331},[321,40146,31019],{"class":5423},[321,40148,377],{"class":327},[321,40150,409],{"class":380},[321,40152,710],{"class":331},[321,40154,31074],{"class":5423},[321,40156,377],{"class":327},[321,40158,409],{"class":380},[321,40160,710],{"class":331},[321,40162,31028],{"class":5423},[321,40164,377],{"class":327},[321,40166,523],{"class":380},[321,40168,338],{"class":331},[321,40170,40171],{"class":323,"line":8252},[321,40172,38271],{"class":331},[321,40174,40175],{"class":323,"line":8264},[321,40176,38741],{"class":390},[321,40178,40179,40181,40183,40185],{"class":323,"line":9923},[321,40180,30990],{"class":380},[321,40182,38748],{"class":331},[321,40184,377],{"class":327},[321,40186,38154],{"class":331},[321,40188,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221],{"class":323,"line":9948},[321,40190,38159],{"class":331},[321,40192,31001],{"class":5423},[321,40194,377],{"class":327},[321,40196,38602],{"class":380},[321,40198,710],{"class":331},[321,40200,31010],{"class":5423},[321,40202,377],{"class":327},[321,40204,38602],{"class":380},[321,40206,710],{"class":331},[321,40208,31019],{"class":5423},[321,40210,377],{"class":327},[321,40212,403],{"class":380},[321,40214,710],{"class":331},[321,40216,31028],{"class":5423},[321,40218,377],{"class":327},[321,40220,549],{"class":380},[321,40222,38192],{"class":331},[321,40224,40225],{"class":323,"line":9971},[321,40226,38197],{"class":331},[321,40228,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261],{"class":323,"line":9995},[321,40230,38159],{"class":331},[321,40232,31001],{"class":5423},[321,40234,377],{"class":327},[321,40236,38602],{"class":380},[321,40238,710],{"class":331},[321,40240,31010],{"class":5423},[321,40242,377],{"class":327},[321,40244,38602],{"class":380},[321,40246,710],{"class":331},[321,40248,31019],{"class":5423},[321,40250,377],{"class":327},[321,40252,403],{"class":380},[321,40254,710],{"class":331},[321,40256,31028],{"class":5423},[321,40258,377],{"class":327},[321,40260,549],{"class":380},[321,40262,38192],{"class":331},[321,40264,40265],{"class":323,"line":10000},[321,40266,38197],{"class":331},[321,40268,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301],{"class":323,"line":10005},[321,40270,38159],{"class":331},[321,40272,31001],{"class":5423},[321,40274,377],{"class":327},[321,40276,38602],{"class":380},[321,40278,710],{"class":331},[321,40280,31010],{"class":5423},[321,40282,377],{"class":327},[321,40284,38602],{"class":380},[321,40286,710],{"class":331},[321,40288,31019],{"class":5423},[321,40290,377],{"class":327},[321,40292,403],{"class":380},[321,40294,710],{"class":331},[321,40296,31028],{"class":5423},[321,40298,377],{"class":327},[321,40300,549],{"class":380},[321,40302,38192],{"class":331},[321,40304,40305],{"class":323,"line":10010},[321,40306,38197],{"class":331},[321,40308,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329,40331,40333],{"class":323,"line":10019},[321,40310,38242],{"class":331},[321,40312,31019],{"class":5423},[321,40314,377],{"class":327},[321,40316,409],{"class":380},[321,40318,710],{"class":331},[321,40320,31074],{"class":5423},[321,40322,377],{"class":327},[321,40324,409],{"class":380},[321,40326,710],{"class":331},[321,40328,31028],{"class":5423},[321,40330,377],{"class":327},[321,40332,523],{"class":380},[321,40334,338],{"class":331},[321,40336,40337],{"class":323,"line":10024},[321,40338,38271],{"class":331},[321,40340,40341],{"class":323,"line":10030},[321,40342,38909],{"class":390},[321,40344,40345,40347,40349,40351],{"class":323,"line":10051},[321,40346,30990],{"class":380},[321,40348,38916],{"class":331},[321,40350,377],{"class":327},[321,40352,38154],{"class":331},[321,40354,40355],{"class":323,"line":10057},[321,40356,38925],{"class":390},[321,40358,40359],{"class":323,"line":10071},[321,40360,38930],{"class":390},[321,40362,40363],{"class":323,"line":10077},[321,40364,38935],{"class":331},[321,40366,40367,40369,40371,40373,40375,40377,40379,40381,40383],{"class":323,"line":10104},[321,40368,38940],{"class":331},[321,40370,701],{"class":380},[321,40372,787],{"class":327},[321,40374,701],{"class":380},[321,40376,787],{"class":327},[321,40378,38602],{"class":380},[321,40380,710],{"class":331},[321,40382,35015],{"class":380},[321,40384,38192],{"class":331},[321,40386,40387],{"class":323,"line":10113},[321,40388,38197],{"class":331},[321,40390,40391,40393,40395,40397,40399],{"class":323,"line":10119},[321,40392,38940],{"class":331},[321,40394,35015],{"class":380},[321,40396,710],{"class":331},[321,40398,32215],{"class":380},[321,40400,38192],{"class":331},[321,40402,40403],{"class":323,"line":10127},[321,40404,38197],{"class":331},[321,40406,40407,40409,40411,40413,40415],{"class":323,"line":10132},[321,40408,38940],{"class":331},[321,40410,32215],{"class":380},[321,40412,710],{"class":331},[321,40414,778],{"class":380},[321,40416,338],{"class":331},[321,40418,40419],{"class":323,"line":16811},[321,40420,38271],{"class":331},[321,40422,40423],{"class":323,"line":16817},[321,40424,2606],{"emptyLinePlaceholder":251},[321,40426,40427],{"class":323,"line":16840},[321,40428,39001],{"class":390},[321,40430,40431],{"class":323,"line":16846},[321,40432,39006],{"class":390},[321,40434,40435,40437,40439,40441,40443],{"class":323,"line":16869},[321,40436,3609],{"class":327},[321,40438,39013],{"class":331},[321,40440,26188],{"class":327},[321,40442,39018],{"class":380},[321,40444,39021],{"class":331},[321,40446,40447],{"class":323,"line":16883},[321,40448,39026],{"class":390},[321,40450,40451,40453,40455],{"class":323,"line":16903},[321,40452,4848],{"class":327},[321,40454,39033],{"class":380},[321,40456,39036],{"class":331},[321,40458,40459],{"class":323,"line":16909},[321,40460,39041],{"class":390},[321,40462,40463,40465,40467,40469,40471],{"class":323,"line":16920},[321,40464,39046],{"class":331},[321,40466,39049],{"class":5423},[321,40468,377],{"class":327},[321,40470,39054],{"class":436},[321,40472,338],{"class":331},[321,40474,40475],{"class":323,"line":16943},[321,40476,39061],{"class":390},[321,40478,40479,40481,40483,40485,40487,40489],{"class":323,"line":16965},[321,40480,39066],{"class":327},[321,40482,39069],{"class":331},[321,40484,39072],{"class":327},[321,40486,39075],{"class":327},[321,40488,39078],{"class":380},[321,40490,3945],{"class":331},[321,40492,40493],{"class":323,"line":16970},[321,40494,39085],{"class":390},[321,40496,40497,40499,40501],{"class":323,"line":16976},[321,40498,39090],{"class":331},[321,40500,523],{"class":380},[321,40502,338],{"class":331},[321,40504,40505],{"class":323,"line":16990},[321,40506,39099],{"class":390},[321,40508,40509,40511,40513],{"class":323,"line":17003},[321,40510,39104],{"class":327},[321,40512,39033],{"class":380},[321,40514,39109],{"class":331},[321,40516,40517],{"class":323,"line":17008},[321,40518,39114],{"class":390},[321,40520,40521],{"class":323,"line":17022},[321,40522,39119],{"class":390},[321,40524,40525,40527,40529,40531,40533],{"class":323,"line":17027},[321,40526,39124],{"class":331},[321,40528,523],{"class":380},[321,40530,710],{"class":331},[321,40532,39131],{"class":380},[321,40534,338],{"class":331},[321,40536,40537],{"class":323,"line":17033},[321,40538,39138],{"class":390},[321,40540,40541,40543,40545,40547,40549,40551],{"class":323,"line":17038},[321,40542,39066],{"class":327},[321,40544,39069],{"class":331},[321,40546,39072],{"class":327},[321,40548,39075],{"class":327},[321,40550,39078],{"class":380},[321,40552,3945],{"class":331},[321,40554,40555,40557,40559],{"class":323,"line":17052},[321,40556,39090],{"class":331},[321,40558,523],{"class":380},[321,40560,338],{"class":331},[321,40562,40563],{"class":323,"line":17057},[321,40564,2606],{"emptyLinePlaceholder":251},[321,40566,40567],{"class":323,"line":17062},[321,40568,35310],{"class":390},[321,40570,40571,40573,40575],{"class":323,"line":17076},[321,40572,30946],{"class":327},[321,40574,31238],{"class":2169},[321,40576,31241],{"class":331},[321,40578,40579,40581,40583,40585],{"class":323,"line":17088},[321,40580,31246],{"class":331},[321,40582,377],{"class":327},[321,40584,30968],{"class":380},[321,40586,39187],{"class":331},[321,40588,40589,40591,40593,40595],{"class":323,"line":17093},[321,40590,31246],{"class":331},[321,40592,377],{"class":327},[321,40594,30968],{"class":380},[321,40596,39198],{"class":331},[321,40598,40599,40601,40603,40605],{"class":323,"line":17106},[321,40600,31246],{"class":331},[321,40602,377],{"class":327},[321,40604,30968],{"class":380},[321,40606,39209],{"class":331},[321,40608,40609,40611,40613,40615],{"class":323,"line":17111},[321,40610,31246],{"class":331},[321,40612,377],{"class":327},[321,40614,30968],{"class":380},[321,40616,39220],{"class":331},[321,40618,40619,40621,40623,40625],{"class":323,"line":17116},[321,40620,31246],{"class":331},[321,40622,377],{"class":327},[321,40624,30968],{"class":380},[321,40626,39231],{"class":331},[321,40628,40629,40631,40633,40635],{"class":323,"line":17121},[321,40630,31246],{"class":331},[321,40632,377],{"class":327},[321,40634,30968],{"class":380},[321,40636,39242],{"class":331},[321,40638,40639,40641],{"class":323,"line":17134},[321,40640,14959],{"class":327},[321,40642,31354],{"class":331},[321,40644,40645],{"class":323,"line":17139},[321,40646,2606],{"emptyLinePlaceholder":251},[321,40648,40649],{"class":323,"line":32778},[321,40650,39257],{"class":390},[321,40652,40653,40655,40657,40659,40661],{"class":323,"line":32784},[321,40654,1737],{"class":327},[321,40656,31365],{"class":380},[321,40658,3155],{"class":327},[321,40660,39268],{"class":436},[321,40662,3945],{"class":331},[321,40664,40665,40667,40669,40671,40673,40675,40677,40679,40681],{"class":323,"line":32790},[321,40666,31382],{"class":331},[321,40668,377],{"class":327},[321,40670,30596],{"class":331},[321,40672,31389],{"class":436},[321,40674,1910],{"class":327},[321,40676,31394],{"class":331},[321,40678,1907],{"class":327},[321,40680,30621],{"class":436},[321,40682,338],{"class":331},[321,40684,40685,40687],{"class":323,"line":32796},[321,40686,31444],{"class":380},[321,40688,30630],{"class":331},[321,40690,40691,40693,40695],{"class":323,"line":32802},[321,40692,31434],{"class":331},[321,40694,377],{"class":327},[321,40696,39305],{"class":331},[321,40698,40699,40701,40703,40705,40707,40709,40711,40713],{"class":323,"line":32813},[321,40700,31444],{"class":380},[321,40702,31447],{"class":331},[321,40704,549],{"class":380},[321,40706,710],{"class":331},[321,40708,31646],{"class":380},[321,40710,710],{"class":331},[321,40712,31646],{"class":380},[321,40714,31460],{"class":331},[151,40716,40717],{"start":200},[154,40718,40719],{},"测试代码",[312,40721,40723],{"className":30523,"code":40722,"language":30525,"meta":30,"style":30},"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",[318,40724,40725,40731,40741,40751,40755,40765,40776,40780,40784,40788,40796,40812,40822,40838,40848,40862,40866,40876,40886,40896,40902,40906,40910,40918,40922,40938,40946,40950,40954,40962,40970,40974,40978,40982,40986,40992,40996,41006,41014,41022,41026,41030,41034,41042,41046,41062,41066,41070,41074,41086,41090,41102,41106,41110,41122,41126,41136,41140,41144,41156,41160,41169,41173,41177,41185,41189,41197,41201,41205,41209,41213,41217,41233,41241,41245,41249,41297,41303,41307,41317,41325,41333,41337,41341,41345,41349,41357,41361,41377,41381,41389,41397],{"__ignoreMap":30},[321,40726,40727,40729],{"class":323,"line":324},[321,40728,30537],{"class":327},[321,40730,30540],{"class":331},[321,40732,40733,40735,40737,40739],{"class":323,"line":167},[321,40734,30537],{"class":327},[321,40736,31560],{"class":331},[321,40738,31528],{"class":327},[321,40740,31565],{"class":331},[321,40742,40743,40745,40747,40749],{"class":323,"line":200},[321,40744,30882],{"class":327},[321,40746,31543],{"class":331},[321,40748,30537],{"class":327},[321,40750,31548],{"class":331},[321,40752,40753],{"class":323,"line":1401},[321,40754,34067],{"class":390},[321,40756,40757,40759,40761,40763],{"class":323,"line":1407},[321,40758,30882],{"class":327},[321,40760,31513],{"class":331},[321,40762,30537],{"class":327},[321,40764,31518],{"class":331},[321,40766,40767,40769,40771,40773],{"class":323,"line":1421},[321,40768,30882],{"class":327},[321,40770,32059],{"class":331},[321,40772,30537],{"class":327},[321,40774,40775],{"class":380}," VGG16\n",[321,40777,40778],{"class":323,"line":1427},[321,40779,2606],{"emptyLinePlaceholder":251},[321,40781,40782],{"class":323,"line":1518},[321,40783,2606],{"emptyLinePlaceholder":251},[321,40785,40786],{"class":323,"line":1524},[321,40787,34096],{"class":390},[321,40789,40790,40792,40794],{"class":323,"line":1536},[321,40791,32092],{"class":327},[321,40793,34103],{"class":2169},[321,40795,32098],{"class":331},[321,40797,40798,40800,40802,40804,40806,40808,40810],{"class":323,"line":1818},[321,40799,34110],{"class":331},[321,40801,377],{"class":327},[321,40803,31600],{"class":331},[321,40805,31603],{"class":5423},[321,40807,377],{"class":327},[321,40809,31608],{"class":436},[321,40811,31611],{"class":331},[321,40813,40814,40816,40818,40820],{"class":323,"line":1823},[321,40815,34127],{"class":5423},[321,40817,377],{"class":327},[321,40819,34132],{"class":380},[321,40821,31611],{"class":331},[321,40823,40824,40826,40828,40830,40832,40834,40836],{"class":323,"line":1829},[321,40825,34139],{"class":5423},[321,40827,377],{"class":327},[321,40829,31638],{"class":331},[321,40831,31641],{"class":5423},[321,40833,377],{"class":327},[321,40835,31646],{"class":380},[321,40837,31649],{"class":331},[321,40839,40840,40842,40844,40846],{"class":323,"line":1834},[321,40841,34156],{"class":5423},[321,40843,377],{"class":327},[321,40845,31621],{"class":380},[321,40847,338],{"class":331},[321,40849,40850,40852,40854,40856,40858,40860],{"class":323,"line":1848},[321,40851,34167],{"class":331},[321,40853,377],{"class":327},[321,40855,31679],{"class":331},[321,40857,31682],{"class":5423},[321,40859,377],{"class":327},[321,40861,34178],{"class":331},[321,40863,40864],{"class":323,"line":1853},[321,40865,34183],{"class":390},[321,40867,40868,40870,40872,40874],{"class":323,"line":1859},[321,40869,34188],{"class":5423},[321,40871,377],{"class":327},[321,40873,549],{"class":380},[321,40875,31611],{"class":331},[321,40877,40878,40880,40882,40884],{"class":323,"line":1880},[321,40879,34199],{"class":5423},[321,40881,377],{"class":327},[321,40883,31621],{"class":380},[321,40885,31611],{"class":331},[321,40887,40888,40890,40892,40894],{"class":323,"line":1885},[321,40889,34210],{"class":5423},[321,40891,377],{"class":327},[321,40893,523],{"class":380},[321,40895,338],{"class":331},[321,40897,40898,40900],{"class":323,"line":1899},[321,40899,4296],{"class":327},[321,40901,34223],{"class":331},[321,40903,40904],{"class":323,"line":1904},[321,40905,2606],{"emptyLinePlaceholder":251},[321,40907,40908],{"class":323,"line":1933},[321,40909,34232],{"class":390},[321,40911,40912,40914,40916],{"class":323,"line":1938},[321,40913,32092],{"class":327},[321,40915,34239],{"class":2169},[321,40917,34242],{"class":331},[321,40919,40920],{"class":323,"line":1955},[321,40921,34247],{"class":390},[321,40923,40924,40926,40928,40930,40932,40934,40936],{"class":323,"line":1960},[321,40925,31382],{"class":331},[321,40927,377],{"class":327},[321,40929,31389],{"class":436},[321,40931,1910],{"class":327},[321,40933,31394],{"class":331},[321,40935,1907],{"class":327},[321,40937,34264],{"class":436},[321,40939,40940,40942,40944],{"class":323,"line":1965},[321,40941,31434],{"class":331},[321,40943,377],{"class":327},[321,40945,32434],{"class":331},[321,40947,40948],{"class":323,"line":1970},[321,40949,2606],{"emptyLinePlaceholder":251},[321,40951,40952],{"class":323,"line":1984},[321,40953,34281],{"class":390},[321,40955,40956,40958,40960],{"class":323,"line":1989},[321,40957,34286],{"class":331},[321,40959,377],{"class":327},[321,40961,32487],{"class":380},[321,40963,40964,40966,40968],{"class":323,"line":2783},[321,40965,34295],{"class":331},[321,40967,377],{"class":327},[321,40969,3291],{"class":380},[321,40971,40972],{"class":323,"line":2797},[321,40973,2606],{"emptyLinePlaceholder":251},[321,40975,40976],{"class":323,"line":2805},[321,40977,34308],{"class":390},[321,40979,40980],{"class":323,"line":2810},[321,40981,34313],{"class":390},[321,40983,40984],{"class":323,"line":2816},[321,40985,34318],{"class":390},[321,40987,40988,40990],{"class":323,"line":2822},[321,40989,34323],{"class":327},[321,40991,33029],{"class":331},[321,40993,40994],{"class":323,"line":2827},[321,40995,34330],{"class":390},[321,40997,40998,41000,41002,41004],{"class":323,"line":8155},[321,40999,3609],{"class":327},[321,41001,34337],{"class":331},[321,41003,26188],{"class":327},[321,41005,34342],{"class":331},[321,41007,41008,41010,41012],{"class":323,"line":8179},[321,41009,34347],{"class":331},[321,41011,377],{"class":327},[321,41013,34352],{"class":331},[321,41015,41016,41018,41020],{"class":323,"line":8184},[321,41017,34357],{"class":331},[321,41019,377],{"class":327},[321,41021,34362],{"class":331},[321,41023,41024],{"class":323,"line":8190},[321,41025,34367],{"class":390},[321,41027,41028],{"class":323,"line":8217},[321,41029,33020],{"class":331},[321,41031,41032],{"class":323,"line":8222},[321,41033,34376],{"class":390},[321,41035,41036,41038,41040],{"class":323,"line":8228},[321,41037,32805],{"class":331},[321,41039,377],{"class":327},[321,41041,34385],{"class":331},[321,41043,41044],{"class":323,"line":8240},[321,41045,34390],{"class":390},[321,41047,41048,41050,41052,41054,41056,41058,41060],{"class":323,"line":8252},[321,41049,32822],{"class":331},[321,41051,377],{"class":327},[321,41053,32827],{"class":331},[321,41055,32830],{"class":5423},[321,41057,377],{"class":327},[321,41059,549],{"class":380},[321,41061,338],{"class":331},[321,41063,41064],{"class":323,"line":8264},[321,41065,34411],{"class":390},[321,41067,41068],{"class":323,"line":9923},[321,41069,34416],{"class":390},[321,41071,41072],{"class":323,"line":9948},[321,41073,34421],{"class":390},[321,41075,41076,41078,41080,41082,41084],{"class":323,"line":9971},[321,41077,34426],{"class":331},[321,41079,9684],{"class":327},[321,41081,32932],{"class":331},[321,41083,3155],{"class":327},[321,41085,34435],{"class":331},[321,41087,41088],{"class":323,"line":9995},[321,41089,34440],{"class":390},[321,41091,41092,41094,41096,41098,41100],{"class":323,"line":10000},[321,41093,34445],{"class":331},[321,41095,9684],{"class":327},[321,41097,34450],{"class":331},[321,41099,523],{"class":380},[321,41101,338],{"class":331},[321,41103,41104],{"class":323,"line":10005},[321,41105,2606],{"emptyLinePlaceholder":251},[321,41107,41108],{"class":323,"line":10010},[321,41109,34463],{"class":390},[321,41111,41112,41114,41116,41118,41120],{"class":323,"line":10019},[321,41113,34468],{"class":331},[321,41115,377],{"class":327},[321,41117,34473],{"class":331},[321,41119,916],{"class":327},[321,41121,34478],{"class":331},[321,41123,41124],{"class":323,"line":10024},[321,41125,34483],{"class":390},[321,41127,41128,41130,41132,41134],{"class":323,"line":10030},[321,41129,32596],{"class":380},[321,41131,332],{"class":331},[321,41133,34492],{"class":436},[321,41135,34495],{"class":331},[321,41137,41138],{"class":323,"line":10051},[321,41139,2606],{"emptyLinePlaceholder":251},[321,41141,41142],{"class":323,"line":10057},[321,41143,34504],{"class":390},[321,41145,41146,41148,41150,41152,41154],{"class":323,"line":10071},[321,41147,1737],{"class":327},[321,41149,31365],{"class":380},[321,41151,3155],{"class":327},[321,41153,31370],{"class":436},[321,41155,3945],{"class":331},[321,41157,41158],{"class":323,"line":10077},[321,41159,34521],{"class":390},[321,41161,41162,41164,41166],{"class":323,"line":10104},[321,41163,31434],{"class":331},[321,41165,377],{"class":327},[321,41167,41168],{"class":331},"VGG16()\n",[321,41170,41171],{"class":323,"line":10113},[321,41172,34534],{"class":390},[321,41174,41175],{"class":323,"line":10119},[321,41176,34539],{"class":390},[321,41178,41179,41181,41183],{"class":323,"line":10127},[321,41180,34544],{"class":331},[321,41182,34547],{"class":436},[321,41184,30642],{"class":331},[321,41186,41187],{"class":323,"line":10132},[321,41188,34554],{"class":390},[321,41190,41191,41193,41195],{"class":323,"line":16811},[321,41192,34167],{"class":331},[321,41194,377],{"class":327},[321,41196,34563],{"class":331},[321,41198,41199],{"class":323,"line":16817},[321,41200,34568],{"class":390},[321,41202,41203],{"class":323,"line":16840},[321,41204,34573],{"class":331},[321,41206,41207],{"class":323,"line":16846},[321,41208,2606],{"emptyLinePlaceholder":251},[321,41210,41211],{"class":323,"line":16869},[321,41212,34582],{"class":390},[321,41214,41215],{"class":323,"line":16883},[321,41216,34587],{"class":390},[321,41218,41219,41221,41223,41225,41227,41229,41231],{"class":323,"line":16903},[321,41220,31382],{"class":331},[321,41222,377],{"class":327},[321,41224,31389],{"class":436},[321,41226,1910],{"class":327},[321,41228,31394],{"class":331},[321,41230,1907],{"class":327},[321,41232,34264],{"class":436},[321,41234,41235,41237,41239],{"class":323,"line":16909},[321,41236,31434],{"class":331},[321,41238,377],{"class":327},[321,41240,32434],{"class":331},[321,41242,41243],{"class":323,"line":16920},[321,41244,34616],{"class":390},[321,41246,41247],{"class":323,"line":16943},[321,41248,34621],{"class":390},[321,41250,41251,41253,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279,41281,41283,41285,41287,41289,41291,41293,41295],{"class":323,"line":16965},[321,41252,34626],{"class":331},[321,41254,377],{"class":327},[321,41256,1222],{"class":331},[321,41258,34633],{"class":436},[321,41260,710],{"class":331},[321,41262,34638],{"class":436},[321,41264,710],{"class":331},[321,41266,34643],{"class":436},[321,41268,710],{"class":331},[321,41270,34648],{"class":436},[321,41272,710],{"class":331},[321,41274,34653],{"class":436},[321,41276,710],{"class":331},[321,41278,34658],{"class":436},[321,41280,710],{"class":331},[321,41282,34663],{"class":436},[321,41284,710],{"class":331},[321,41286,34668],{"class":436},[321,41288,710],{"class":331},[321,41290,34673],{"class":436},[321,41292,710],{"class":331},[321,41294,34678],{"class":436},[321,41296,33391],{"class":331},[321,41298,41299,41301],{"class":323,"line":16970},[321,41300,34323],{"class":327},[321,41302,33029],{"class":331},[321,41304,41305],{"class":323,"line":16976},[321,41306,34691],{"class":390},[321,41308,41309,41311,41313,41315],{"class":323,"line":16990},[321,41310,3609],{"class":327},[321,41312,34698],{"class":331},[321,41314,26188],{"class":327},[321,41316,34342],{"class":331},[321,41318,41319,41321,41323],{"class":323,"line":17003},[321,41320,32755],{"class":331},[321,41322,377],{"class":327},[321,41324,32760],{"class":331},[321,41326,41327,41329,41331],{"class":323,"line":17008},[321,41328,32770],{"class":331},[321,41330,377],{"class":327},[321,41332,32775],{"class":331},[321,41334,41335],{"class":323,"line":17022},[321,41336,2606],{"emptyLinePlaceholder":251},[321,41338,41339],{"class":323,"line":17027},[321,41340,34727],{"class":390},[321,41342,41343],{"class":323,"line":17033},[321,41344,33020],{"class":331},[321,41346,41347],{"class":323,"line":17038},[321,41348,34736],{"class":390},[321,41350,41351,41353,41355],{"class":323,"line":17052},[321,41352,32805],{"class":331},[321,41354,377],{"class":327},[321,41356,32810],{"class":331},[321,41358,41359],{"class":323,"line":17057},[321,41360,34749],{"class":390},[321,41362,41363,41365,41367,41369,41371,41373,41375],{"class":323,"line":17062},[321,41364,32822],{"class":331},[321,41366,377],{"class":327},[321,41368,32827],{"class":331},[321,41370,32830],{"class":5423},[321,41372,377],{"class":327},[321,41374,549],{"class":380},[321,41376,338],{"class":331},[321,41378,41379],{"class":323,"line":17076},[321,41380,34770],{"class":390},[321,41382,41383,41385,41387],{"class":323,"line":17088},[321,41384,34775],{"class":331},[321,41386,377],{"class":327},[321,41388,34780],{"class":331},[321,41390,41391,41393,41395],{"class":323,"line":17093},[321,41392,34785],{"class":331},[321,41394,377],{"class":327},[321,41396,34790],{"class":331},[321,41398,41399,41401,41403,41405,41407,41409,41411,41413],{"class":323,"line":17106},[321,41400,34795],{"class":380},[321,41402,332],{"class":331},[321,41404,34800],{"class":436},[321,41406,34803],{"class":331},[321,41408,34806],{"class":436},[321,41410,710],{"class":331},[321,41412,34811],{"class":436},[321,41414,34814],{"class":331},[292,41416,41418],{"id":41417},"_23googlenet","2.3.GoogLeNet",[22205,41420,41422],{"id":41421},"_231原理","2.3.1.原理",[151,41424,41425],{},[154,41426,41427],{},"网络结构",[19,41429,41430],{},[28,41431],{"alt":30,"src":41432},"\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,41434,41435],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41437,41438],{},[28,41439],{"alt":30,"src":41440},"\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,41442,41443],{},[28,41444],{"alt":30,"src":41445},"\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,41447,41448],{},[28,41449],{"alt":30,"src":41450},"\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",[151,41452,41453],{"start":167},[154,41454,41455],{},"1x1卷积的优点",[19,41457,41458],{},[28,41459],{"alt":30,"src":41460},"\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",[151,41462,41463],{"start":200},[154,41464,41465],{},"全局平均池化层优点",[19,41467,41468],{},[28,41469],{"alt":30,"src":41470},"\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,41472,41473],{},[28,41474],{"alt":30,"src":41475},"\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",[151,41477,41478],{"start":1401},[154,41479,41480],{},"参数详细描述",[19,41482,41483],{},[28,41484],{"alt":30,"src":41485},"\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,41487,41488],{},[28,41489],{"alt":30,"src":41490},"\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,41492,41493],{},[28,41494],{"alt":30,"src":41495},"\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,41497,41498],{},[28,41499],{"alt":30,"src":41500},"\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,41502,41503],{},[28,41504],{"alt":30,"src":41505},"\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,41507,41508],{},[28,41509],{"alt":30,"src":41510},"\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,41512,41513],{},[28,41514],{"alt":30,"src":41515},"\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,41517,41518],{},[28,41519],{"alt":30,"src":41520},"\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,41522,41523],{},[28,41524],{"alt":30,"src":41525},"\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,41527,41528],{},[28,41529],{"alt":30,"src":41530},"\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,41532,41533],{},[28,41534],{"alt":30,"src":41535},"\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,41537,41538],{},[28,41539],{"alt":30,"src":41540},"\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,41542,41543],{},[28,41544],{"alt":30,"src":41545},"\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,41547,41548],{},[28,41549],{"alt":30,"src":41550},"\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,41552,41553],{},[28,41554],{"alt":30,"src":41555},"\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,41557,41558],{},[28,41559],{"alt":30,"src":41560},"\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,41562,41563],{},[28,41564],{"alt":30,"src":41565},"\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,41567,41568],{},[28,41569],{"alt":30,"src":41570},"\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,41572,41573],{},[28,41574],{"alt":30,"src":41575},"\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,41577,41578],{},[28,41579],{"alt":30,"src":41580},"\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,41582,41583],{},[28,41584],{"alt":30,"src":41585},"\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",[22205,41587,41589],{"id":41588},"_232代码实现","2.3.2.代码实现",[151,41591,41592],{},[154,41593,30856],{},[19,41595,41596],{},"根据原理一步一步搭建即可",[312,41598,41600],{"className":30523,"code":41599,"language":30525,"meta":30,"style":30},"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",[318,41601,41602,41608,41618,41628,41632,41649,41658,41673,41683,41688,41721,41726,41763,41810,41815,41851,41898,41903,41908,41943,41975,41979,41987,42003,42027,42052,42073,42078,42093,42097,42101,42106,42123,42128,42137,42152,42163,42207,42211,42239,42243,42254,42282,42286,42323,42327,42355,42359,42370,42406,42438,42466,42470,42481,42515,42547,42579,42612,42646,42674,42678,42689,42722,42754,42768,42772,42785,42789,42794,42806,42814,42836,42841,42846,42851,42856,42861,42866,42880,42888,42897,42910,42925,42934,42938,42946,42957,42968,42979,42990,43001,43007,43011,43016,43028,43048,43057],{"__ignoreMap":30},[321,41603,41604,41606],{"class":323,"line":324},[321,41605,30537],{"class":327},[321,41607,30540],{"class":331},[321,41609,41610,41612,41614,41616],{"class":323,"line":167},[321,41611,30882],{"class":327},[321,41613,30885],{"class":331},[321,41615,30537],{"class":327},[321,41617,30890],{"class":331},[321,41619,41620,41622,41624,41626],{"class":323,"line":200},[321,41621,30882],{"class":327},[321,41623,30902],{"class":331},[321,41625,30537],{"class":327},[321,41627,30907],{"class":331},[321,41629,41630],{"class":323,"line":1401},[321,41631,2606],{"emptyLinePlaceholder":251},[321,41633,41634,41636,41639,41641,41643,41645,41647],{"class":323,"line":1407},[321,41635,14901],{"class":327},[321,41637,41638],{"class":2169}," Inception",[321,41640,332],{"class":331},[321,41642,30923],{"class":2169},[321,41644,890],{"class":331},[321,41646,30928],{"class":2169},[321,41648,30931],{"class":331},[321,41650,41651,41653,41655],{"class":323,"line":1421},[321,41652,30946],{"class":327},[321,41654,30949],{"class":380},[321,41656,41657],{"class":331},"(self,in_channels,c1,c2,c3,c4):\n",[321,41659,41660,41662,41665,41667,41669,41671],{"class":323,"line":1427},[321,41661,30962],{"class":380},[321,41663,41664],{"class":331},"(Inception,",[321,41666,30968],{"class":380},[321,41668,30971],{"class":331},[321,41670,30974],{"class":380},[321,41672,2182],{"class":331},[321,41674,41675,41677,41679,41681],{"class":323,"line":1518},[321,41676,30990],{"class":380},[321,41678,34916],{"class":331},[321,41680,377],{"class":327},[321,41682,34921],{"class":331},[321,41684,41685],{"class":323,"line":1524},[321,41686,41687],{"class":390},"        # 路线1：定义1*1卷积\n",[321,41689,41690,41692,41695,41697,41699,41701,41703,41706,41708,41710,41713,41715,41717,41719],{"class":323,"line":1536},[321,41691,30990],{"class":380},[321,41693,41694],{"class":331},".p1_1",[321,41696,377],{"class":327},[321,41698,30998],{"class":331},[321,41700,31001],{"class":5423},[321,41702,377],{"class":327},[321,41704,41705],{"class":331},"in_channels,",[321,41707,31010],{"class":5423},[321,41709,377],{"class":327},[321,41711,41712],{"class":331},"c1,",[321,41714,31019],{"class":5423},[321,41716,377],{"class":327},[321,41718,549],{"class":380},[321,41720,338],{"class":331},[321,41722,41723],{"class":323,"line":1818},[321,41724,41725],{"class":390},"        # 路线2：定义1*1卷积和3*3\n",[321,41727,41728,41730,41733,41735,41737,41739,41741,41743,41745,41747,41750,41752,41755,41757,41759,41761],{"class":323,"line":1823},[321,41729,30990],{"class":380},[321,41731,41732],{"class":331},".p2_1",[321,41734,377],{"class":327},[321,41736,30998],{"class":331},[321,41738,31001],{"class":5423},[321,41740,377],{"class":327},[321,41742,41705],{"class":331},[321,41744,31010],{"class":5423},[321,41746,377],{"class":327},[321,41748,41749],{"class":331},"c2[",[321,41751,523],{"class":380},[321,41753,41754],{"class":331},"],",[321,41756,31019],{"class":5423},[321,41758,377],{"class":327},[321,41760,549],{"class":380},[321,41762,338],{"class":331},[321,41764,41765,41767,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802,41804,41806,41808],{"class":323,"line":1829},[321,41766,30990],{"class":380},[321,41768,41769],{"class":331},".p2_2",[321,41771,377],{"class":327},[321,41773,30998],{"class":331},[321,41775,31001],{"class":5423},[321,41777,377],{"class":327},[321,41779,41749],{"class":331},[321,41781,523],{"class":380},[321,41783,41754],{"class":331},[321,41785,31010],{"class":5423},[321,41787,377],{"class":327},[321,41789,41749],{"class":331},[321,41791,549],{"class":380},[321,41793,41754],{"class":331},[321,41795,31019],{"class":5423},[321,41797,377],{"class":327},[321,41799,403],{"class":380},[321,41801,710],{"class":331},[321,41803,31028],{"class":5423},[321,41805,377],{"class":327},[321,41807,549],{"class":380},[321,41809,338],{"class":331},[321,41811,41812],{"class":323,"line":1834},[321,41813,41814],{"class":390},"        # 路线3：定义1*1卷积和5*5\n",[321,41816,41817,41819,41822,41824,41826,41828,41830,41832,41834,41836,41839,41841,41843,41845,41847,41849],{"class":323,"line":1848},[321,41818,30990],{"class":380},[321,41820,41821],{"class":331},".p3_1",[321,41823,377],{"class":327},[321,41825,30998],{"class":331},[321,41827,31001],{"class":5423},[321,41829,377],{"class":327},[321,41831,41705],{"class":331},[321,41833,31010],{"class":5423},[321,41835,377],{"class":327},[321,41837,41838],{"class":331},"c3[",[321,41840,523],{"class":380},[321,41842,41754],{"class":331},[321,41844,31019],{"class":5423},[321,41846,377],{"class":327},[321,41848,549],{"class":380},[321,41850,338],{"class":331},[321,41852,41853,41855,41858,41860,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892,41894,41896],{"class":323,"line":1853},[321,41854,30990],{"class":380},[321,41856,41857],{"class":331},".p3_2",[321,41859,377],{"class":327},[321,41861,30998],{"class":331},[321,41863,31001],{"class":5423},[321,41865,377],{"class":327},[321,41867,41838],{"class":331},[321,41869,523],{"class":380},[321,41871,41754],{"class":331},[321,41873,31010],{"class":5423},[321,41875,377],{"class":327},[321,41877,41838],{"class":331},[321,41879,549],{"class":380},[321,41881,41754],{"class":331},[321,41883,31019],{"class":5423},[321,41885,377],{"class":327},[321,41887,651],{"class":380},[321,41889,710],{"class":331},[321,41891,31028],{"class":5423},[321,41893,377],{"class":327},[321,41895,409],{"class":380},[321,41897,338],{"class":331},[321,41899,41900],{"class":323,"line":1859},[321,41901,41902],{"class":390},"        # 路线4：定义3*3最大池化和1*1卷积\n",[321,41904,41905],{"class":323,"line":1880},[321,41906,41907],{"class":390},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[321,41909,41910,41912,41915,41917,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937,41939,41941],{"class":323,"line":1885},[321,41911,30990],{"class":380},[321,41913,41914],{"class":331},".p4_1",[321,41916,377],{"class":327},[321,41918,34974],{"class":331},[321,41920,31019],{"class":5423},[321,41922,377],{"class":327},[321,41924,403],{"class":380},[321,41926,710],{"class":331},[321,41928,31074],{"class":5423},[321,41930,377],{"class":327},[321,41932,549],{"class":380},[321,41934,710],{"class":331},[321,41936,31028],{"class":5423},[321,41938,377],{"class":327},[321,41940,549],{"class":380},[321,41942,338],{"class":331},[321,41944,41945,41947,41950,41952,41954,41956,41958,41960,41962,41964,41967,41969,41971,41973],{"class":323,"line":1899},[321,41946,30990],{"class":380},[321,41948,41949],{"class":331},".p4_2",[321,41951,377],{"class":327},[321,41953,30998],{"class":331},[321,41955,31001],{"class":5423},[321,41957,377],{"class":327},[321,41959,41705],{"class":331},[321,41961,31010],{"class":5423},[321,41963,377],{"class":327},[321,41965,41966],{"class":331},"c4,",[321,41968,31019],{"class":5423},[321,41970,377],{"class":327},[321,41972,549],{"class":380},[321,41974,338],{"class":331},[321,41976,41977],{"class":323,"line":1904},[321,41978,2606],{"emptyLinePlaceholder":251},[321,41980,41981,41983,41985],{"class":323,"line":1933},[321,41982,30946],{"class":327},[321,41984,31238],{"class":2169},[321,41986,31241],{"class":331},[321,41988,41989,41992,41994,41996,41998,42000],{"class":323,"line":1938},[321,41990,41991],{"class":331},"        p1",[321,41993,377],{"class":327},[321,41995,30968],{"class":380},[321,41997,35329],{"class":331},[321,41999,30968],{"class":380},[321,42001,42002],{"class":331},".p1_1(x))\n",[321,42004,42005,42007,42009,42011,42013,42015,42018,42020,42022,42024],{"class":323,"line":1955},[321,42006,7292],{"class":331},[321,42008,377],{"class":327},[321,42010,30968],{"class":380},[321,42012,35329],{"class":331},[321,42014,30968],{"class":380},[321,42016,42017],{"class":331},".p2_2(",[321,42019,30968],{"class":380},[321,42021,35329],{"class":331},[321,42023,30968],{"class":380},[321,42025,42026],{"class":331},".p2_1(x))))\n",[321,42028,42029,42032,42034,42036,42038,42040,42043,42045,42047,42049],{"class":323,"line":1960},[321,42030,42031],{"class":331},"        p3",[321,42033,377],{"class":327},[321,42035,30968],{"class":380},[321,42037,35329],{"class":331},[321,42039,30968],{"class":380},[321,42041,42042],{"class":331},".p3_2(",[321,42044,30968],{"class":380},[321,42046,35329],{"class":331},[321,42048,30968],{"class":380},[321,42050,42051],{"class":331},".p3_1(x))))\n",[321,42053,42054,42057,42059,42061,42063,42065,42068,42070],{"class":323,"line":1965},[321,42055,42056],{"class":331},"        p4",[321,42058,377],{"class":327},[321,42060,30968],{"class":380},[321,42062,35329],{"class":331},[321,42064,30968],{"class":380},[321,42066,42067],{"class":331},".p4_2(",[321,42069,30968],{"class":380},[321,42071,42072],{"class":331},".p4_1(x)))\n",[321,42074,42075],{"class":323,"line":1970},[321,42076,42077],{"class":390},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[321,42079,42080,42082,42085,42087,42089,42091],{"class":323,"line":1984},[321,42081,14959],{"class":327},[321,42083,42084],{"class":331}," torch.cat((p1,p2,p3,p4),",[321,42086,32830],{"class":5423},[321,42088,377],{"class":327},[321,42090,549],{"class":380},[321,42092,338],{"class":331},[321,42094,42095],{"class":323,"line":1989},[321,42096,2606],{"emptyLinePlaceholder":251},[321,42098,42099],{"class":323,"line":2783},[321,42100,2606],{"emptyLinePlaceholder":251},[321,42102,42103],{"class":323,"line":2797},[321,42104,42105],{"class":390},"# 搭建GoogLeNet网络\n",[321,42107,42108,42110,42113,42115,42117,42119,42121],{"class":323,"line":2805},[321,42109,14901],{"class":327},[321,42111,42112],{"class":2169}," GoogLeNet",[321,42114,332],{"class":331},[321,42116,30923],{"class":2169},[321,42118,890],{"class":331},[321,42120,30928],{"class":2169},[321,42122,30931],{"class":331},[321,42124,42125],{"class":323,"line":2810},[321,42126,42127],{"class":390},"    # 必须把Inception导入到里边\n",[321,42129,42130,42132,42134],{"class":323,"line":2816},[321,42131,30946],{"class":327},[321,42133,30949],{"class":380},[321,42135,42136],{"class":331},"(self,Inception):\n",[321,42138,42139,42141,42144,42146,42148,42150],{"class":323,"line":2822},[321,42140,30962],{"class":380},[321,42142,42143],{"class":331},"(GoogLeNet,",[321,42145,30968],{"class":380},[321,42147,30971],{"class":331},[321,42149,30974],{"class":380},[321,42151,2182],{"class":331},[321,42153,42154,42156,42159,42161],{"class":323,"line":2827},[321,42155,30990],{"class":380},[321,42157,42158],{"class":331},".b1",[321,42160,377],{"class":327},[321,42162,38154],{"class":331},[321,42164,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205],{"class":323,"line":8155},[321,42166,38159],{"class":331},[321,42168,31001],{"class":5423},[321,42170,377],{"class":327},[321,42172,549],{"class":380},[321,42174,710],{"class":331},[321,42176,31010],{"class":5423},[321,42178,377],{"class":327},[321,42180,535],{"class":380},[321,42182,710],{"class":331},[321,42184,31019],{"class":5423},[321,42186,377],{"class":327},[321,42188,701],{"class":380},[321,42190,710],{"class":331},[321,42192,31074],{"class":5423},[321,42194,377],{"class":327},[321,42196,409],{"class":380},[321,42198,710],{"class":331},[321,42200,31028],{"class":5423},[321,42202,377],{"class":327},[321,42204,403],{"class":380},[321,42206,38192],{"class":331},[321,42208,42209],{"class":323,"line":8179},[321,42210,38197],{"class":331},[321,42212,42213,42215,42217,42219,42221,42223,42225,42227,42229,42231,42233,42235,42237],{"class":323,"line":8184},[321,42214,38242],{"class":331},[321,42216,31019],{"class":5423},[321,42218,377],{"class":327},[321,42220,403],{"class":380},[321,42222,710],{"class":331},[321,42224,31074],{"class":5423},[321,42226,377],{"class":327},[321,42228,409],{"class":380},[321,42230,710],{"class":331},[321,42232,31028],{"class":5423},[321,42234,377],{"class":327},[321,42236,549],{"class":380},[321,42238,338],{"class":331},[321,42240,42241],{"class":323,"line":8190},[321,42242,38271],{"class":331},[321,42244,42245,42247,42250,42252],{"class":323,"line":8217},[321,42246,30990],{"class":380},[321,42248,42249],{"class":331},".b2",[321,42251,377],{"class":327},[321,42253,38154],{"class":331},[321,42255,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280],{"class":323,"line":8222},[321,42257,38159],{"class":331},[321,42259,31001],{"class":5423},[321,42261,377],{"class":327},[321,42263,535],{"class":380},[321,42265,710],{"class":331},[321,42267,31010],{"class":5423},[321,42269,377],{"class":327},[321,42271,535],{"class":380},[321,42273,710],{"class":331},[321,42275,31019],{"class":5423},[321,42277,377],{"class":327},[321,42279,549],{"class":380},[321,42281,38192],{"class":331},[321,42283,42284],{"class":323,"line":8228},[321,42285,38197],{"class":331},[321,42287,42288,42290,42292,42294,42296,42298,42300,42302,42305,42307,42309,42311,42313,42315,42317,42319,42321],{"class":323,"line":8240},[321,42289,38159],{"class":331},[321,42291,31001],{"class":5423},[321,42293,377],{"class":327},[321,42295,535],{"class":380},[321,42297,710],{"class":331},[321,42299,31010],{"class":5423},[321,42301,377],{"class":327},[321,42303,42304],{"class":380},"192",[321,42306,710],{"class":331},[321,42308,31019],{"class":5423},[321,42310,377],{"class":327},[321,42312,403],{"class":380},[321,42314,710],{"class":331},[321,42316,31028],{"class":5423},[321,42318,377],{"class":327},[321,42320,549],{"class":380},[321,42322,38192],{"class":331},[321,42324,42325],{"class":323,"line":8252},[321,42326,38197],{"class":331},[321,42328,42329,42331,42333,42335,42337,42339,42341,42343,42345,42347,42349,42351,42353],{"class":323,"line":8264},[321,42330,38242],{"class":331},[321,42332,31019],{"class":5423},[321,42334,377],{"class":327},[321,42336,403],{"class":380},[321,42338,710],{"class":331},[321,42340,31074],{"class":5423},[321,42342,377],{"class":327},[321,42344,409],{"class":380},[321,42346,710],{"class":331},[321,42348,31028],{"class":5423},[321,42350,377],{"class":327},[321,42352,549],{"class":380},[321,42354,338],{"class":331},[321,42356,42357],{"class":323,"line":9923},[321,42358,38271],{"class":331},[321,42360,42361,42363,42366,42368],{"class":323,"line":9948},[321,42362,30990],{"class":380},[321,42364,42365],{"class":331},".b3",[321,42367,377],{"class":327},[321,42369,38154],{"class":331},[321,42371,42372,42375,42377,42379,42381,42384,42386,42388,42390,42393,42395,42397,42399,42402,42404],{"class":323,"line":9971},[321,42373,42374],{"class":331},"            Inception(",[321,42376,42304],{"class":380},[321,42378,710],{"class":331},[321,42380,535],{"class":380},[321,42382,42383],{"class":331},",(",[321,42385,541],{"class":380},[321,42387,710],{"class":331},[321,42389,32215],{"class":380},[321,42391,42392],{"class":331},"),(",[321,42394,933],{"class":380},[321,42396,710],{"class":331},[321,42398,529],{"class":380},[321,42400,42401],{"class":331},"),",[321,42403,529],{"class":380},[321,42405,38192],{"class":331},[321,42407,42408,42410,42412,42414,42416,42418,42420,42422,42424,42426,42428,42430,42432,42434,42436],{"class":323,"line":9995},[321,42409,42374],{"class":331},[321,42411,35015],{"class":380},[321,42413,710],{"class":331},[321,42415,32215],{"class":380},[321,42417,42383],{"class":331},[321,42419,32215],{"class":380},[321,42421,710],{"class":331},[321,42423,42304],{"class":380},[321,42425,42392],{"class":331},[321,42427,529],{"class":380},[321,42429,710],{"class":331},[321,42431,541],{"class":380},[321,42433,42401],{"class":331},[321,42435,535],{"class":380},[321,42437,38192],{"class":331},[321,42439,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464],{"class":323,"line":10000},[321,42441,38242],{"class":331},[321,42443,31019],{"class":5423},[321,42445,377],{"class":327},[321,42447,403],{"class":380},[321,42449,710],{"class":331},[321,42451,31074],{"class":5423},[321,42453,377],{"class":327},[321,42455,409],{"class":380},[321,42457,710],{"class":331},[321,42459,31028],{"class":5423},[321,42461,377],{"class":327},[321,42463,549],{"class":380},[321,42465,338],{"class":331},[321,42467,42468],{"class":323,"line":10005},[321,42469,38271],{"class":331},[321,42471,42472,42474,42477,42479],{"class":323,"line":10010},[321,42473,30990],{"class":380},[321,42475,42476],{"class":331},".b4",[321,42478,377],{"class":327},[321,42480,38154],{"class":331},[321,42482,42483,42485,42488,42490,42492,42494,42496,42498,42501,42503,42505,42507,42509,42511,42513],{"class":323,"line":10019},[321,42484,42374],{"class":331},[321,42486,42487],{"class":380},"480",[321,42489,710],{"class":331},[321,42491,42304],{"class":380},[321,42493,42383],{"class":331},[321,42495,541],{"class":380},[321,42497,710],{"class":331},[321,42499,42500],{"class":380},"208",[321,42502,42392],{"class":331},[321,42504,933],{"class":380},[321,42506,710],{"class":331},[321,42508,939],{"class":380},[321,42510,42401],{"class":331},[321,42512,535],{"class":380},[321,42514,38192],{"class":331},[321,42516,42517,42519,42521,42523,42525,42527,42529,42531,42533,42535,42537,42539,42541,42543,42545],{"class":323,"line":10024},[321,42518,42374],{"class":331},[321,42520,38602],{"class":380},[321,42522,710],{"class":331},[321,42524,21255],{"class":380},[321,42526,42383],{"class":331},[321,42528,950],{"class":380},[321,42530,710],{"class":331},[321,42532,31646],{"class":380},[321,42534,42392],{"class":331},[321,42536,1132],{"class":380},[321,42538,710],{"class":331},[321,42540,535],{"class":380},[321,42542,42401],{"class":331},[321,42544,535],{"class":380},[321,42546,38192],{"class":331},[321,42548,42549,42551,42553,42555,42557,42559,42561,42563,42565,42567,42569,42571,42573,42575,42577],{"class":323,"line":10030},[321,42550,42374],{"class":331},[321,42552,38602],{"class":380},[321,42554,710],{"class":331},[321,42556,32215],{"class":380},[321,42558,42383],{"class":331},[321,42560,32215],{"class":380},[321,42562,710],{"class":331},[321,42564,35015],{"class":380},[321,42566,42392],{"class":331},[321,42568,1132],{"class":380},[321,42570,710],{"class":331},[321,42572,535],{"class":380},[321,42574,42401],{"class":331},[321,42576,535],{"class":380},[321,42578,38192],{"class":331},[321,42580,42581,42583,42585,42587,42589,42591,42593,42595,42598,42600,42602,42604,42606,42608,42610],{"class":323,"line":10051},[321,42582,42374],{"class":331},[321,42584,38602],{"class":380},[321,42586,710],{"class":331},[321,42588,950],{"class":380},[321,42590,42383],{"class":331},[321,42592,32215],{"class":380},[321,42594,710],{"class":331},[321,42596,42597],{"class":380},"288",[321,42599,42392],{"class":331},[321,42601,529],{"class":380},[321,42603,710],{"class":331},[321,42605,535],{"class":380},[321,42607,42401],{"class":331},[321,42609,535],{"class":380},[321,42611,38192],{"class":331},[321,42613,42614,42616,42619,42621,42623,42625,42627,42629,42632,42634,42636,42638,42640,42642,42644],{"class":323,"line":10057},[321,42615,42374],{"class":331},[321,42617,42618],{"class":380},"528",[321,42620,710],{"class":331},[321,42622,35015],{"class":380},[321,42624,42383],{"class":331},[321,42626,21255],{"class":380},[321,42628,710],{"class":331},[321,42630,42631],{"class":380},"320",[321,42633,42392],{"class":331},[321,42635,529],{"class":380},[321,42637,710],{"class":331},[321,42639,32215],{"class":380},[321,42641,42401],{"class":331},[321,42643,32215],{"class":380},[321,42645,38192],{"class":331},[321,42647,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672],{"class":323,"line":10071},[321,42649,38242],{"class":331},[321,42651,31019],{"class":5423},[321,42653,377],{"class":327},[321,42655,403],{"class":380},[321,42657,710],{"class":331},[321,42659,31074],{"class":5423},[321,42661,377],{"class":327},[321,42663,409],{"class":380},[321,42665,710],{"class":331},[321,42667,31028],{"class":5423},[321,42669,377],{"class":327},[321,42671,549],{"class":380},[321,42673,338],{"class":331},[321,42675,42676],{"class":323,"line":10077},[321,42677,38271],{"class":331},[321,42679,42680,42682,42685,42687],{"class":323,"line":10104},[321,42681,30990],{"class":380},[321,42683,42684],{"class":331},".b5",[321,42686,377],{"class":327},[321,42688,38154],{"class":331},[321,42690,42691,42693,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718,42720],{"class":323,"line":10113},[321,42692,42374],{"class":331},[321,42694,42695],{"class":380},"832",[321,42697,710],{"class":331},[321,42699,35015],{"class":380},[321,42701,42383],{"class":331},[321,42703,21255],{"class":380},[321,42705,710],{"class":331},[321,42707,42631],{"class":380},[321,42709,42392],{"class":331},[321,42711,529],{"class":380},[321,42713,710],{"class":331},[321,42715,32215],{"class":380},[321,42717,42401],{"class":331},[321,42719,32215],{"class":380},[321,42721,38192],{"class":331},[321,42723,42724,42726,42728,42730,42732,42734,42736,42738,42740,42742,42744,42746,42748,42750,42752],{"class":323,"line":10119},[321,42725,42374],{"class":331},[321,42727,42695],{"class":380},[321,42729,710],{"class":331},[321,42731,35085],{"class":380},[321,42733,42383],{"class":331},[321,42735,42304],{"class":380},[321,42737,710],{"class":331},[321,42739,35085],{"class":380},[321,42741,42392],{"class":331},[321,42743,939],{"class":380},[321,42745,710],{"class":331},[321,42747,32215],{"class":380},[321,42749,42401],{"class":331},[321,42751,32215],{"class":380},[321,42753,38192],{"class":331},[321,42755,42756,42759,42761,42763,42765],{"class":323,"line":10127},[321,42757,42758],{"class":331},"            nn.AdaptiveAvgPool2d((",[321,42760,549],{"class":380},[321,42762,710],{"class":331},[321,42764,549],{"class":380},[321,42766,42767],{"class":331},")),\n",[321,42769,42770],{"class":323,"line":10132},[321,42771,38935],{"class":331},[321,42773,42774,42776,42779,42781,42783],{"class":323,"line":16811},[321,42775,38940],{"class":331},[321,42777,42778],{"class":380},"1024",[321,42780,710],{"class":331},[321,42782,778],{"class":380},[321,42784,338],{"class":331},[321,42786,42787],{"class":323,"line":16817},[321,42788,38271],{"class":331},[321,42790,42791],{"class":323,"line":16840},[321,42792,42793],{"class":390},"        # 对模型参数初始化\n",[321,42795,42796,42798,42800,42802,42804],{"class":323,"line":16846},[321,42797,3609],{"class":327},[321,42799,39013],{"class":331},[321,42801,26188],{"class":327},[321,42803,39018],{"class":380},[321,42805,39021],{"class":331},[321,42807,42808,42810,42812],{"class":323,"line":16869},[321,42809,4848],{"class":327},[321,42811,39033],{"class":380},[321,42813,39036],{"class":331},[321,42815,42816,42818,42821,42823,42826,42828,42830,42832,42834],{"class":323,"line":16883},[321,42817,39046],{"class":331},[321,42819,42820],{"class":5423},"mode",[321,42822,377],{"class":327},[321,42824,42825],{"class":436},"'fan_out'",[321,42827,710],{"class":331},[321,42829,39049],{"class":5423},[321,42831,377],{"class":327},[321,42833,39054],{"class":436},[321,42835,338],{"class":331},[321,42837,42838],{"class":323,"line":16903},[321,42839,42840],{"class":390},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[321,42842,42843],{"class":323,"line":16909},[321,42844,42845],{"class":390},"                # ② mode = 'fan_out'决定使用的fan值：\n",[321,42847,42848],{"class":323,"line":16920},[321,42849,42850],{"class":390},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[321,42852,42853],{"class":323,"line":16943},[321,42854,42855],{"class":390},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[321,42857,42858],{"class":323,"line":16965},[321,42859,42860],{"class":390},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[321,42862,42863],{"class":323,"line":16970},[321,42864,42865],{"class":390},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[321,42867,42868,42870,42872,42874,42876,42878],{"class":323,"line":16976},[321,42869,39066],{"class":327},[321,42871,39069],{"class":331},[321,42873,39072],{"class":327},[321,42875,39075],{"class":327},[321,42877,39078],{"class":380},[321,42879,3945],{"class":331},[321,42881,42882,42884,42886],{"class":323,"line":16990},[321,42883,39090],{"class":331},[321,42885,523],{"class":380},[321,42887,338],{"class":331},[321,42889,42890,42893,42895],{"class":323,"line":17003},[321,42891,42892],{"class":327},"                elif",[321,42894,39033],{"class":380},[321,42896,39109],{"class":331},[321,42898,42899,42902,42904,42906,42908],{"class":323,"line":17008},[321,42900,42901],{"class":331},"                    nn.init.normal_(m.weight,",[321,42903,523],{"class":380},[321,42905,710],{"class":331},[321,42907,39131],{"class":380},[321,42909,338],{"class":331},[321,42911,42912,42915,42917,42919,42921,42923],{"class":323,"line":17022},[321,42913,42914],{"class":327},"                    if",[321,42916,39069],{"class":331},[321,42918,39072],{"class":327},[321,42920,39075],{"class":327},[321,42922,39078],{"class":380},[321,42924,3945],{"class":331},[321,42926,42927,42930,42932],{"class":323,"line":17027},[321,42928,42929],{"class":331},"                        nn.init.constant_(m.bias,",[321,42931,523],{"class":380},[321,42933,338],{"class":331},[321,42935,42936],{"class":323,"line":17033},[321,42937,35310],{"class":390},[321,42939,42940,42942,42944],{"class":323,"line":17038},[321,42941,30946],{"class":327},[321,42943,31238],{"class":2169},[321,42945,31241],{"class":331},[321,42947,42948,42950,42952,42954],{"class":323,"line":17052},[321,42949,31246],{"class":331},[321,42951,377],{"class":327},[321,42953,30968],{"class":380},[321,42955,42956],{"class":331},".b1(x)\n",[321,42958,42959,42961,42963,42965],{"class":323,"line":17057},[321,42960,31246],{"class":331},[321,42962,377],{"class":327},[321,42964,30968],{"class":380},[321,42966,42967],{"class":331},".b2(x)\n",[321,42969,42970,42972,42974,42976],{"class":323,"line":17062},[321,42971,31246],{"class":331},[321,42973,377],{"class":327},[321,42975,30968],{"class":380},[321,42977,42978],{"class":331},".b3(x)\n",[321,42980,42981,42983,42985,42987],{"class":323,"line":17076},[321,42982,31246],{"class":331},[321,42984,377],{"class":327},[321,42986,30968],{"class":380},[321,42988,42989],{"class":331},".b4(x)\n",[321,42991,42992,42994,42996,42998],{"class":323,"line":17088},[321,42993,31246],{"class":331},[321,42995,377],{"class":327},[321,42997,30968],{"class":380},[321,42999,43000],{"class":331},".b5(x)\n",[321,43002,43003,43005],{"class":323,"line":17093},[321,43004,14959],{"class":327},[321,43006,31354],{"class":331},[321,43008,43009],{"class":323,"line":17106},[321,43010,2606],{"emptyLinePlaceholder":251},[321,43012,43013],{"class":323,"line":17111},[321,43014,43015],{"class":390},"# 模型展示\n",[321,43017,43018,43020,43022,43024,43026],{"class":323,"line":17116},[321,43019,1737],{"class":327},[321,43021,31365],{"class":380},[321,43023,3155],{"class":327},[321,43025,31370],{"class":436},[321,43027,3945],{"class":331},[321,43029,43030,43032,43034,43036,43038,43040,43042,43044,43046],{"class":323,"line":17121},[321,43031,31382],{"class":331},[321,43033,377],{"class":327},[321,43035,30596],{"class":331},[321,43037,31389],{"class":436},[321,43039,1910],{"class":327},[321,43041,31394],{"class":331},[321,43043,1907],{"class":327},[321,43045,30621],{"class":436},[321,43047,338],{"class":331},[321,43049,43050,43052,43054],{"class":323,"line":17134},[321,43051,31434],{"class":331},[321,43053,377],{"class":327},[321,43055,43056],{"class":331},"GoogLeNet(Inception).to(device)\n",[321,43058,43059,43061,43063,43065,43067,43069,43071,43073],{"class":323,"line":17139},[321,43060,31444],{"class":380},[321,43062,31447],{"class":331},[321,43064,549],{"class":380},[321,43066,710],{"class":331},[321,43068,31646],{"class":380},[321,43070,710],{"class":331},[321,43072,31646],{"class":380},[321,43074,31460],{"class":331},[151,43076,43077],{"start":167},[154,43078,39328],{},[312,43080,43082],{"className":30523,"code":43081,"language":30525,"meta":30,"style":30},"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",[318,43083,43084,43090,43096,43106,43112,43122,43132,43142,43152,43162,43166,43177,43187,43191,43195,43199,43207,43219,43229,43245,43255,43287,43301,43311,43321,43325,43335,43349,43359,43369,43379,43385,43389,43393,43397,43401,43405,43413,43433,43437,43441,43445,43449,43453,43469,43473,43477,43485,43489,43493,43501,43505,43509,43513,43521,43525,43529,43533,43537,43545,43549,43557,43561,43569,43573,43581,43585,43593,43597,43601,43609,43613,43617,43621,43633,43657,43671,43675,43679,43683,43691,43695,43703,43707,43715,43719,43727,43731,43739,43743,43751,43755,43767,43771,43779,43783,43791,43795,43799,43803,43807,43815,43819,43835,43839,43847,43851,43855,43859,43863,43867,43871,43875,43891,43895,43907,43911,43923,43927,43939,43943,43951,43955,43963,43967,43971,43975,43981,43985,43993,43997,44013,44017,44025,44029,44045,44057,44061,44073,44077,44081,44089,44093,44097,44105,44109,44117,44121,44129,44133,44137,44179,44221,44225,44229,44245,44249,44265,44269,44273,44281,44285,44289,44301,44339,44343,44347,44355,44359,44373,44383,44389,44395,44401,44407,44411,44415,44421,44425,44429,44437,44441,44459,44463,44467,44471,44487,44491,44495,44499,44503,44507,44527,44547,44551,44555,44559,44567,44575,44579,44595,44615,44635,44639,44643,44651,44659,44663,44667,44671,44683,44687,44697,44705,44722],{"__ignoreMap":30},[321,43085,43086,43088],{"class":323,"line":324},[321,43087,30537],{"class":327},[321,43089,31967],{"class":331},[321,43091,43092,43094],{"class":323,"line":167},[321,43093,30537],{"class":327},[321,43095,31974],{"class":331},[321,43097,43098,43100,43102,43104],{"class":323,"line":200},[321,43099,30537],{"class":327},[321,43101,31985],{"class":331},[321,43103,31528],{"class":327},[321,43105,31990],{"class":331},[321,43107,43108,43110],{"class":323,"line":1401},[321,43109,30537],{"class":327},[321,43111,30540],{"class":331},[321,43113,43114,43116,43118,43120],{"class":323,"line":1407},[321,43115,30882],{"class":327},[321,43117,31560],{"class":331},[321,43119,30537],{"class":327},[321,43121,32007],{"class":331},[321,43123,43124,43126,43128,43130],{"class":323,"line":1421},[321,43125,30882],{"class":327},[321,43127,31513],{"class":331},[321,43129,30537],{"class":327},[321,43131,31518],{"class":331},[321,43133,43134,43136,43138,43140],{"class":323,"line":1427},[321,43135,30882],{"class":327},[321,43137,31543],{"class":331},[321,43139,30537],{"class":327},[321,43141,31548],{"class":331},[321,43143,43144,43146,43148,43150],{"class":323,"line":1518},[321,43145,30537],{"class":327},[321,43147,31560],{"class":331},[321,43149,31528],{"class":327},[321,43151,31565],{"class":331},[321,43153,43154,43156,43158,43160],{"class":323,"line":1524},[321,43155,30537],{"class":327},[321,43157,31577],{"class":331},[321,43159,31528],{"class":327},[321,43161,31582],{"class":331},[321,43163,43164],{"class":323,"line":1536},[321,43165,32052],{"class":390},[321,43167,43168,43170,43172,43174],{"class":323,"line":1818},[321,43169,30882],{"class":327},[321,43171,32059],{"class":331},[321,43173,30537],{"class":327},[321,43175,43176],{"class":331}," GoogLeNet, Inception\n",[321,43178,43179,43181,43183,43185],{"class":323,"line":1823},[321,43180,30882],{"class":327},[321,43182,30885],{"class":331},[321,43184,30537],{"class":327},[321,43186,30890],{"class":331},[321,43188,43189],{"class":323,"line":1829},[321,43190,2606],{"emptyLinePlaceholder":251},[321,43192,43193],{"class":323,"line":1834},[321,43194,2606],{"emptyLinePlaceholder":251},[321,43196,43197],{"class":323,"line":1848},[321,43198,32087],{"class":390},[321,43200,43201,43203,43205],{"class":323,"line":1853},[321,43202,32092],{"class":327},[321,43204,32095],{"class":2169},[321,43206,32098],{"class":331},[321,43208,43209,43211,43213,43215,43217],{"class":323,"line":1859},[321,43210,32103],{"class":331},[321,43212,377],{"class":327},[321,43214,31600],{"class":331},[321,43216,31608],{"class":436},[321,43218,31611],{"class":331},[321,43220,43221,43223,43225,43227],{"class":323,"line":1880},[321,43222,32116],{"class":5423},[321,43224,377],{"class":327},[321,43226,31621],{"class":380},[321,43228,31611],{"class":331},[321,43230,43231,43233,43235,43237,43239,43241,43243],{"class":323,"line":1885},[321,43232,32127],{"class":5423},[321,43234,377],{"class":327},[321,43236,31638],{"class":331},[321,43238,31641],{"class":5423},[321,43240,377],{"class":327},[321,43242,35594],{"class":380},[321,43244,31649],{"class":331},[321,43246,43247,43249,43251,43253],{"class":323,"line":1899},[321,43248,32144],{"class":5423},[321,43250,377],{"class":327},[321,43252,31621],{"class":380},[321,43254,338],{"class":331},[321,43256,43257,43259,43261,43263,43265,43267,43269,43271,43273,43275,43277,43279,43281,43283,43285],{"class":323,"line":1904},[321,43258,32155],{"class":331},[321,43260,377],{"class":327},[321,43262,32160],{"class":331},[321,43264,32163],{"class":380},[321,43266,332],{"class":331},[321,43268,32168],{"class":380},[321,43270,787],{"class":327},[321,43272,7565],{"class":380},[321,43274,32175],{"class":331},[321,43276,32163],{"class":380},[321,43278,332],{"class":331},[321,43280,32182],{"class":380},[321,43282,787],{"class":327},[321,43284,7565],{"class":380},[321,43286,32189],{"class":331},[321,43288,43289,43291,43293,43295,43297,43299],{"class":323,"line":1933},[321,43290,32194],{"class":331},[321,43292,377],{"class":327},[321,43294,32199],{"class":331},[321,43296,31682],{"class":5423},[321,43298,377],{"class":327},[321,43300,31687],{"class":331},[321,43302,43303,43305,43307,43309],{"class":323,"line":1938},[321,43304,32210],{"class":5423},[321,43306,377],{"class":327},[321,43308,529],{"class":380},[321,43310,31611],{"class":331},[321,43312,43313,43315,43317,43319],{"class":323,"line":1955},[321,43314,32222],{"class":5423},[321,43316,377],{"class":327},[321,43318,31621],{"class":380},[321,43320,31611],{"class":331},[321,43322,43323],{"class":323,"line":1960},[321,43324,32233],{"class":390},[321,43326,43327,43329,43331,43333],{"class":323,"line":1965},[321,43328,32238],{"class":5423},[321,43330,377],{"class":327},[321,43332,727],{"class":380},[321,43334,338],{"class":331},[321,43336,43337,43339,43341,43343,43345,43347],{"class":323,"line":1970},[321,43338,32249],{"class":331},[321,43340,377],{"class":327},[321,43342,31679],{"class":331},[321,43344,31682],{"class":5423},[321,43346,377],{"class":327},[321,43348,32260],{"class":331},[321,43350,43351,43353,43355,43357],{"class":323,"line":1984},[321,43352,32265],{"class":5423},[321,43354,377],{"class":327},[321,43356,529],{"class":380},[321,43358,31611],{"class":331},[321,43360,43361,43363,43365,43367],{"class":323,"line":1989},[321,43362,32276],{"class":5423},[321,43364,377],{"class":327},[321,43366,31621],{"class":380},[321,43368,31611],{"class":331},[321,43370,43371,43373,43375,43377],{"class":323,"line":2783},[321,43372,32287],{"class":5423},[321,43374,377],{"class":327},[321,43376,727],{"class":380},[321,43378,338],{"class":331},[321,43380,43381,43383],{"class":323,"line":2797},[321,43382,4296],{"class":327},[321,43384,32300],{"class":331},[321,43386,43387],{"class":323,"line":2805},[321,43388,2606],{"emptyLinePlaceholder":251},[321,43390,43391],{"class":323,"line":2810},[321,43392,32309],{"class":390},[321,43394,43395],{"class":323,"line":2816},[321,43396,32314],{"class":390},[321,43398,43399],{"class":323,"line":2822},[321,43400,2606],{"emptyLinePlaceholder":251},[321,43402,43403],{"class":323,"line":2827},[321,43404,32323],{"class":390},[321,43406,43407,43409,43411],{"class":323,"line":8155},[321,43408,32092],{"class":327},[321,43410,32330],{"class":2169},[321,43412,32333],{"class":331},[321,43414,43415,43417,43419,43421,43423,43425,43427,43429,43431],{"class":323,"line":8179},[321,43416,31382],{"class":331},[321,43418,377],{"class":327},[321,43420,30596],{"class":331},[321,43422,31389],{"class":436},[321,43424,1910],{"class":327},[321,43426,31394],{"class":331},[321,43428,1907],{"class":327},[321,43430,32352],{"class":436},[321,43432,338],{"class":331},[321,43434,43435],{"class":323,"line":8184},[321,43436,2606],{"emptyLinePlaceholder":251},[321,43438,43439],{"class":323,"line":8190},[321,43440,2606],{"emptyLinePlaceholder":251},[321,43442,43443],{"class":323,"line":8217},[321,43444,32367],{"class":390},[321,43446,43447],{"class":323,"line":8222},[321,43448,32372],{"class":390},[321,43450,43451],{"class":323,"line":8228},[321,43452,32377],{"class":390},[321,43454,43455,43457,43459,43461,43463,43465,43467],{"class":323,"line":8240},[321,43456,32382],{"class":331},[321,43458,377],{"class":327},[321,43460,32387],{"class":331},[321,43462,32390],{"class":5423},[321,43464,377],{"class":327},[321,43466,32395],{"class":380},[321,43468,338],{"class":331},[321,43470,43471],{"class":323,"line":8252},[321,43472,2606],{"emptyLinePlaceholder":251},[321,43474,43475],{"class":323,"line":8264},[321,43476,32406],{"class":390},[321,43478,43479,43481,43483],{"class":323,"line":9923},[321,43480,32411],{"class":331},[321,43482,377],{"class":327},[321,43484,32416],{"class":331},[321,43486,43487],{"class":323,"line":9948},[321,43488,2606],{"emptyLinePlaceholder":251},[321,43490,43491],{"class":323,"line":9971},[321,43492,32425],{"class":390},[321,43494,43495,43497,43499],{"class":323,"line":9995},[321,43496,31434],{"class":331},[321,43498,377],{"class":327},[321,43500,32434],{"class":331},[321,43502,43503],{"class":323,"line":10000},[321,43504,32439],{"class":390},[321,43506,43507],{"class":323,"line":10005},[321,43508,32444],{"class":390},[321,43510,43511],{"class":323,"line":10010},[321,43512,32449],{"class":390},[321,43514,43515,43517,43519],{"class":323,"line":10019},[321,43516,32454],{"class":331},[321,43518,377],{"class":327},[321,43520,32459],{"class":331},[321,43522,43523],{"class":323,"line":10024},[321,43524,2606],{"emptyLinePlaceholder":251},[321,43526,43527],{"class":323,"line":10030},[321,43528,2606],{"emptyLinePlaceholder":251},[321,43530,43531],{"class":323,"line":10051},[321,43532,32472],{"class":390},[321,43534,43535],{"class":323,"line":10057},[321,43536,32477],{"class":390},[321,43538,43539,43541,43543],{"class":323,"line":10071},[321,43540,32482],{"class":331},[321,43542,377],{"class":327},[321,43544,32487],{"class":380},[321,43546,43547],{"class":323,"line":10077},[321,43548,32492],{"class":390},[321,43550,43551,43553,43555],{"class":323,"line":10104},[321,43552,32497],{"class":331},[321,43554,377],{"class":327},[321,43556,32502],{"class":331},[321,43558,43559],{"class":323,"line":10113},[321,43560,32507],{"class":390},[321,43562,43563,43565,43567],{"class":323,"line":10119},[321,43564,32512],{"class":331},[321,43566,377],{"class":327},[321,43568,32502],{"class":331},[321,43570,43571],{"class":323,"line":10127},[321,43572,32521],{"class":390},[321,43574,43575,43577,43579],{"class":323,"line":10132},[321,43576,32526],{"class":331},[321,43578,377],{"class":327},[321,43580,32502],{"class":331},[321,43582,43583],{"class":323,"line":16811},[321,43584,32535],{"class":390},[321,43586,43587,43589,43591],{"class":323,"line":16817},[321,43588,32540],{"class":331},[321,43590,377],{"class":327},[321,43592,32502],{"class":331},[321,43594,43595],{"class":323,"line":16840},[321,43596,2606],{"emptyLinePlaceholder":251},[321,43598,43599],{"class":323,"line":16846},[321,43600,32553],{"class":390},[321,43602,43603,43605,43607],{"class":323,"line":16869},[321,43604,32558],{"class":331},[321,43606,377],{"class":327},[321,43608,32563],{"class":331},[321,43610,43611],{"class":323,"line":16883},[321,43612,2606],{"emptyLinePlaceholder":251},[321,43614,43615],{"class":323,"line":16903},[321,43616,2606],{"emptyLinePlaceholder":251},[321,43618,43619],{"class":323,"line":16909},[321,43620,32576],{"class":390},[321,43622,43623,43625,43627,43629,43631],{"class":323,"line":16920},[321,43624,3407],{"class":327},[321,43626,32583],{"class":331},[321,43628,26188],{"class":327},[321,43630,32588],{"class":380},[321,43632,32591],{"class":331},[321,43634,43635,43637,43639,43641,43643,43645,43647,43649,43651,43653,43655],{"class":323,"line":16943},[321,43636,32596],{"class":380},[321,43638,332],{"class":331},[321,43640,32601],{"class":436},[321,43642,32604],{"class":380},[321,43644,916],{"class":436},[321,43646,32604],{"class":380},[321,43648,583],{"class":436},[321,43650,32613],{"class":331},[321,43652,864],{"class":327},[321,43654,549],{"class":380},[321,43656,30642],{"class":331},[321,43658,43659,43661,43663,43665,43667,43669],{"class":323,"line":16965},[321,43660,32596],{"class":380},[321,43662,332],{"class":331},[321,43664,32628],{"class":436},[321,43666,787],{"class":327},[321,43668,778],{"class":380},[321,43670,338],{"class":331},[321,43672,43673],{"class":323,"line":16970},[321,43674,2606],{"emptyLinePlaceholder":251},[321,43676,43677],{"class":323,"line":16976},[321,43678,32643],{"class":390},[321,43680,43681],{"class":323,"line":16990},[321,43682,32648],{"class":390},[321,43684,43685,43687,43689],{"class":323,"line":17003},[321,43686,32653],{"class":331},[321,43688,377],{"class":327},[321,43690,32487],{"class":380},[321,43692,43693],{"class":323,"line":17008},[321,43694,32662],{"class":390},[321,43696,43697,43699,43701],{"class":323,"line":17022},[321,43698,32667],{"class":331},[321,43700,377],{"class":327},[321,43702,3291],{"class":380},[321,43704,43705],{"class":323,"line":17027},[321,43706,32676],{"class":390},[321,43708,43709,43711,43713],{"class":323,"line":17033},[321,43710,32681],{"class":331},[321,43712,377],{"class":327},[321,43714,32487],{"class":380},[321,43716,43717],{"class":323,"line":17038},[321,43718,32690],{"class":390},[321,43720,43721,43723,43725],{"class":323,"line":17052},[321,43722,32695],{"class":331},[321,43724,377],{"class":327},[321,43726,3291],{"class":380},[321,43728,43729],{"class":323,"line":17057},[321,43730,32704],{"class":390},[321,43732,43733,43735,43737],{"class":323,"line":17062},[321,43734,32709],{"class":331},[321,43736,377],{"class":327},[321,43738,3291],{"class":380},[321,43740,43741],{"class":323,"line":17076},[321,43742,32718],{"class":390},[321,43744,43745,43747,43749],{"class":323,"line":17088},[321,43746,32723],{"class":331},[321,43748,377],{"class":327},[321,43750,3291],{"class":380},[321,43752,43753],{"class":323,"line":17093},[321,43754,32732],{"class":390},[321,43756,43757,43759,43761,43763,43765],{"class":323,"line":17106},[321,43758,3609],{"class":327},[321,43760,31746],{"class":331},[321,43762,26188],{"class":327},[321,43764,31751],{"class":380},[321,43766,32745],{"class":331},[321,43768,43769],{"class":323,"line":17111},[321,43770,32750],{"class":390},[321,43772,43773,43775,43777],{"class":323,"line":17116},[321,43774,32755],{"class":331},[321,43776,377],{"class":327},[321,43778,32760],{"class":331},[321,43780,43781],{"class":323,"line":17121},[321,43782,32765],{"class":390},[321,43784,43785,43787,43789],{"class":323,"line":17134},[321,43786,32770],{"class":331},[321,43788,377],{"class":327},[321,43790,32775],{"class":331},[321,43792,43793],{"class":323,"line":17139},[321,43794,32781],{"class":390},[321,43796,43797],{"class":323,"line":32778},[321,43798,32787],{"class":331},[321,43800,43801],{"class":323,"line":32784},[321,43802,32793],{"class":390},[321,43804,43805],{"class":323,"line":32790},[321,43806,32799],{"class":390},[321,43808,43809,43811,43813],{"class":323,"line":32796},[321,43810,32805],{"class":331},[321,43812,377],{"class":327},[321,43814,32810],{"class":331},[321,43816,43817],{"class":323,"line":32802},[321,43818,32816],{"class":390},[321,43820,43821,43823,43825,43827,43829,43831,43833],{"class":323,"line":32813},[321,43822,32822],{"class":331},[321,43824,377],{"class":327},[321,43826,32827],{"class":331},[321,43828,32830],{"class":5423},[321,43830,377],{"class":327},[321,43832,549],{"class":380},[321,43834,338],{"class":331},[321,43836,43837],{"class":323,"line":32819},[321,43838,32842],{"class":390},[321,43840,43841,43843,43845],{"class":323,"line":32839},[321,43842,32848],{"class":331},[321,43844,377],{"class":327},[321,43846,32853],{"class":331},[321,43848,43849],{"class":323,"line":32845},[321,43850,32859],{"class":390},[321,43852,43853],{"class":323,"line":32856},[321,43854,32865],{"class":331},[321,43856,43857],{"class":323,"line":32862},[321,43858,32871],{"class":390},[321,43860,43861],{"class":323,"line":32868},[321,43862,32877],{"class":331},[321,43864,43865],{"class":323,"line":32874},[321,43866,32883],{"class":390},[321,43868,43869],{"class":323,"line":32880},[321,43870,32889],{"class":331},[321,43872,43873],{"class":323,"line":32886},[321,43874,32895],{"class":390},[321,43876,43877,43879,43881,43883,43885,43887,43889],{"class":323,"line":32892},[321,43878,32901],{"class":331},[321,43880,9684],{"class":327},[321,43882,32906],{"class":331},[321,43884,787],{"class":327},[321,43886,32911],{"class":331},[321,43888,523],{"class":380},[321,43890,338],{"class":331},[321,43892,43893],{"class":323,"line":32898},[321,43894,32921],{"class":390},[321,43896,43897,43899,43901,43903,43905],{"class":323,"line":32918},[321,43898,32927],{"class":331},[321,43900,9684],{"class":327},[321,43902,32932],{"class":331},[321,43904,3155],{"class":327},[321,43906,32937],{"class":331},[321,43908,43909],{"class":323,"line":32924},[321,43910,32943],{"class":390},[321,43912,43913,43915,43917,43919,43921],{"class":323,"line":32940},[321,43914,32949],{"class":331},[321,43916,9684],{"class":327},[321,43918,32911],{"class":331},[321,43920,523],{"class":380},[321,43922,338],{"class":331},[321,43924,43925],{"class":323,"line":32946},[321,43926,32963],{"class":390},[321,43928,43929,43931,43933,43935,43937],{"class":323,"line":32960},[321,43930,3609],{"class":327},[321,43932,32971],{"class":331},[321,43934,26188],{"class":327},[321,43936,31751],{"class":380},[321,43938,32978],{"class":331},[321,43940,43941],{"class":323,"line":32966},[321,43942,32984],{"class":390},[321,43944,43945,43947,43949],{"class":323,"line":32981},[321,43946,32755],{"class":331},[321,43948,377],{"class":327},[321,43950,32760],{"class":331},[321,43952,43953],{"class":323,"line":32987},[321,43954,32999],{"class":390},[321,43956,43957,43959,43961],{"class":323,"line":32996},[321,43958,32770],{"class":331},[321,43960,377],{"class":327},[321,43962,32775],{"class":331},[321,43964,43965],{"class":323,"line":33002},[321,43966,33014],{"class":390},[321,43968,43969],{"class":323,"line":33011},[321,43970,33020],{"class":331},[321,43972,43973],{"class":323,"line":33017},[321,43974,36501],{"class":390},[321,43976,43977,43979],{"class":323,"line":33023},[321,43978,33026],{"class":327},[321,43980,33029],{"class":331},[321,43982,43983],{"class":323,"line":33032},[321,43984,33035],{"class":390},[321,43986,43987,43989,43991],{"class":323,"line":33038},[321,43988,36516],{"class":331},[321,43990,377],{"class":327},[321,43992,32810],{"class":331},[321,43994,43995],{"class":323,"line":33049},[321,43996,33052],{"class":390},[321,43998,43999,44001,44003,44005,44007,44009,44011],{"class":323,"line":33055},[321,44000,36529],{"class":331},[321,44002,377],{"class":327},[321,44004,32827],{"class":331},[321,44006,32830],{"class":5423},[321,44008,377],{"class":327},[321,44010,549],{"class":380},[321,44012,338],{"class":331},[321,44014,44015],{"class":323,"line":33074},[321,44016,33077],{"class":390},[321,44018,44019,44021,44023],{"class":323,"line":33080},[321,44020,36550],{"class":331},[321,44022,377],{"class":327},[321,44024,32853],{"class":331},[321,44026,44027],{"class":323,"line":33091},[321,44028,33094],{"class":390},[321,44030,44031,44033,44035,44037,44039,44041,44043],{"class":323,"line":33097},[321,44032,36563],{"class":331},[321,44034,9684],{"class":327},[321,44036,36568],{"class":331},[321,44038,787],{"class":327},[321,44040,32911],{"class":331},[321,44042,523],{"class":380},[321,44044,338],{"class":331},[321,44046,44047,44049,44051,44053,44055],{"class":323,"line":33117},[321,44048,36581],{"class":331},[321,44050,9684],{"class":327},[321,44052,32932],{"class":331},[321,44054,3155],{"class":327},[321,44056,32937],{"class":331},[321,44058,44059],{"class":323,"line":33133},[321,44060,36594],{"class":390},[321,44062,44063,44065,44067,44069,44071],{"class":323,"line":33139},[321,44064,36599],{"class":331},[321,44066,9684],{"class":327},[321,44068,32911],{"class":331},[321,44070,523],{"class":380},[321,44072,338],{"class":331},[321,44074,44075],{"class":323,"line":33153},[321,44076,33156],{"class":390},[321,44078,44079],{"class":323,"line":33159},[321,44080,33162],{"class":390},[321,44082,44083,44085,44087],{"class":323,"line":33165},[321,44084,33168],{"class":331},[321,44086,916],{"class":327},[321,44088,33173],{"class":331},[321,44090,44091],{"class":323,"line":33176},[321,44092,33179],{"class":390},[321,44094,44095],{"class":323,"line":33182},[321,44096,33185],{"class":390},[321,44098,44099,44101,44103],{"class":323,"line":33188},[321,44100,33191],{"class":331},[321,44102,916],{"class":327},[321,44104,33173],{"class":331},[321,44106,44107],{"class":323,"line":33198},[321,44108,33201],{"class":390},[321,44110,44111,44113,44115],{"class":323,"line":33204},[321,44112,33207],{"class":331},[321,44114,916],{"class":327},[321,44116,33212],{"class":331},[321,44118,44119],{"class":323,"line":33215},[321,44120,33218],{"class":390},[321,44122,44123,44125,44127],{"class":323,"line":33221},[321,44124,33224],{"class":331},[321,44126,916],{"class":327},[321,44128,33212],{"class":331},[321,44130,44131],{"class":323,"line":33231},[321,44132,2606],{"emptyLinePlaceholder":251},[321,44134,44135],{"class":323,"line":33236},[321,44136,33239],{"class":390},[321,44138,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177],{"class":323,"line":33242},[321,44140,32596],{"class":380},[321,44142,332],{"class":331},[321,44144,3798],{"class":436},[321,44146,32604],{"class":380},[321,44148,33253],{"class":436},[321,44150,1228],{"class":380},[321,44152,33258],{"class":327},[321,44154,1278],{"class":380},[321,44156,33263],{"class":436},[321,44158,1228],{"class":380},[321,44160,33258],{"class":327},[321,44162,1278],{"class":380},[321,44164,3798],{"class":436},[321,44166,33274],{"class":331},[321,44168,864],{"class":327},[321,44170,549],{"class":380},[321,44172,33281],{"class":331},[321,44174,864],{"class":327},[321,44176,549],{"class":380},[321,44178,33288],{"class":331},[321,44180,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219],{"class":323,"line":33291},[321,44182,32596],{"class":380},[321,44184,332],{"class":331},[321,44186,3798],{"class":436},[321,44188,32604],{"class":380},[321,44190,33302],{"class":436},[321,44192,1228],{"class":380},[321,44194,33258],{"class":327},[321,44196,1278],{"class":380},[321,44198,33311],{"class":436},[321,44200,1228],{"class":380},[321,44202,33258],{"class":327},[321,44204,1278],{"class":380},[321,44206,3798],{"class":436},[321,44208,33322],{"class":331},[321,44210,864],{"class":327},[321,44212,549],{"class":380},[321,44214,33329],{"class":331},[321,44216,864],{"class":327},[321,44218,549],{"class":380},[321,44220,33288],{"class":331},[321,44222,44223],{"class":323,"line":33338},[321,44224,2606],{"emptyLinePlaceholder":251},[321,44226,44227],{"class":323,"line":33343},[321,44228,33346],{"class":390},[321,44230,44231,44233,44235,44237,44239,44241,44243],{"class":323,"line":33349},[321,44232,2703],{"class":327},[321,44234,33354],{"class":331},[321,44236,864],{"class":327},[321,44238,549],{"class":380},[321,44240,1272],{"class":331},[321,44242,1292],{"class":327},[321,44244,33365],{"class":331},[321,44246,44247],{"class":323,"line":33368},[321,44248,33371],{"class":390},[321,44250,44251,44253,44255,44257,44259,44261,44263],{"class":323,"line":33374},[321,44252,33377],{"class":331},[321,44254,371],{"class":380},[321,44256,377],{"class":327},[321,44258,33384],{"class":331},[321,44260,864],{"class":327},[321,44262,549],{"class":380},[321,44264,33391],{"class":331},[321,44266,44267],{"class":323,"line":33394},[321,44268,33397],{"class":390},[321,44270,44271],{"class":323,"line":33400},[321,44272,33403],{"class":390},[321,44274,44275,44277,44279],{"class":323,"line":33406},[321,44276,33409],{"class":331},[321,44278,377],{"class":327},[321,44280,32459],{"class":331},[321,44282,44283],{"class":323,"line":33416},[321,44284,2606],{"emptyLinePlaceholder":251},[321,44286,44287],{"class":323,"line":33421},[321,44288,33424],{"class":390},[321,44290,44291,44293,44295,44297,44299],{"class":323,"line":33427},[321,44292,33430],{"class":331},[321,44294,377],{"class":327},[321,44296,33435],{"class":331},[321,44298,864],{"class":327},[321,44300,33440],{"class":331},[321,44302,44303,44305,44307,44309,44311,44313,44315,44317,44319,44321,44323,44325,44327,44329,44331,44333,44335,44337],{"class":323,"line":33443},[321,44304,32596],{"class":380},[321,44306,332],{"class":331},[321,44308,33450],{"class":436},[321,44310,1228],{"class":380},[321,44312,33455],{"class":327},[321,44314,1278],{"class":380},[321,44316,876],{"class":436},[321,44318,1228],{"class":380},[321,44320,33455],{"class":327},[321,44322,1278],{"class":380},[321,44324,33468],{"class":436},[321,44326,33471],{"class":331},[321,44328,33474],{"class":327},[321,44330,1239],{"class":380},[321,44332,33479],{"class":331},[321,44334,660],{"class":327},[321,44336,1239],{"class":380},[321,44338,30642],{"class":331},[321,44340,44341],{"class":323,"line":33488},[321,44342,36878],{"class":390},[321,44344,44345],{"class":323,"line":33494},[321,44346,36883],{"class":390},[321,44348,44349,44351,44353],{"class":323,"line":33500},[321,44350,36888],{"class":331},[321,44352,33512],{"class":436},[321,44354,338],{"class":331},[321,44356,44357],{"class":323,"line":33506},[321,44358,33532],{"class":390},[321,44360,44361,44363,44365,44367,44369,44371],{"class":323,"line":33517},[321,44362,33538],{"class":331},[321,44364,377],{"class":327},[321,44366,33543],{"class":331},[321,44368,33546],{"class":5423},[321,44370,377],{"class":327},[321,44372,1752],{"class":331},[321,44374,44375,44377,44379,44381],{"class":323,"line":33523},[321,44376,33556],{"class":436},[321,44378,1191],{"class":331},[321,44380,33561],{"class":380},[321,44382,33564],{"class":331},[321,44384,44385,44387],{"class":323,"line":33529},[321,44386,33570],{"class":436},[321,44388,33573],{"class":331},[321,44390,44391,44393],{"class":323,"line":33535},[321,44392,33579],{"class":436},[321,44394,33582],{"class":331},[321,44396,44397,44399],{"class":323,"line":33553},[321,44398,33588],{"class":436},[321,44400,33591],{"class":331},[321,44402,44403,44405],{"class":323,"line":33567},[321,44404,33597],{"class":436},[321,44406,33600],{"class":331},[321,44408,44409],{"class":323,"line":33576},[321,44410,33606],{"class":331},[321,44412,44413],{"class":323,"line":33585},[321,44414,33612],{"class":390},[321,44416,44417,44419],{"class":323,"line":33594},[321,44418,4296],{"class":327},[321,44420,33620],{"class":331},[321,44422,44423],{"class":323,"line":33603},[321,44424,2606],{"emptyLinePlaceholder":251},[321,44426,44427],{"class":323,"line":33609},[321,44428,33631],{"class":390},[321,44430,44431,44433,44435],{"class":323,"line":33615},[321,44432,32092],{"class":327},[321,44434,33639],{"class":2169},[321,44436,33642],{"class":331},[321,44438,44439],{"class":323,"line":33623},[321,44440,33648],{"class":390},[321,44442,44443,44445,44447,44449,44451,44453,44455,44457],{"class":323,"line":33628},[321,44444,33654],{"class":331},[321,44446,31838],{"class":5423},[321,44448,377],{"class":327},[321,44450,332],{"class":331},[321,44452,830],{"class":380},[321,44454,710],{"class":331},[321,44456,625],{"class":380},[321,44458,30642],{"class":331},[321,44460,44461],{"class":323,"line":33634},[321,44462,33674],{"class":390},[321,44464,44465],{"class":323,"line":33645},[321,44466,33680],{"class":390},[321,44468,44469],{"class":323,"line":33651},[321,44470,33686],{"class":390},[321,44472,44473,44475,44477,44479,44481,44483,44485],{"class":323,"line":33671},[321,44474,31872],{"class":331},[321,44476,549],{"class":380},[321,44478,710],{"class":331},[321,44480,409],{"class":380},[321,44482,710],{"class":331},[321,44484,549],{"class":380},[321,44486,338],{"class":331},[321,44488,44489],{"class":323,"line":33677},[321,44490,33709],{"class":390},[321,44492,44493],{"class":323,"line":33683},[321,44494,33715],{"class":390},[321,44496,44497],{"class":323,"line":33689},[321,44498,33721],{"class":390},[321,44500,44501],{"class":323,"line":33706},[321,44502,33727],{"class":390},[321,44504,44505],{"class":323,"line":33712},[321,44506,33733],{"class":390},[321,44508,44509,44511,44513,44515,44517,44519,44521,44523,44525],{"class":323,"line":33718},[321,44510,33739],{"class":331},[321,44512,33742],{"class":436},[321,44514,33745],{"class":331},[321,44516,33748],{"class":436},[321,44518,710],{"class":331},[321,44520,33753],{"class":5423},[321,44522,377],{"class":327},[321,44524,33758],{"class":436},[321,44526,338],{"class":331},[321,44528,44529,44531,44533,44535,44537,44539,44541,44543,44545],{"class":323,"line":33724},[321,44530,33739],{"class":331},[321,44532,33742],{"class":436},[321,44534,33770],{"class":331},[321,44536,33773],{"class":436},[321,44538,710],{"class":331},[321,44540,33753],{"class":5423},[321,44542,377],{"class":327},[321,44544,33782],{"class":436},[321,44546,338],{"class":331},[321,44548,44549],{"class":323,"line":33730},[321,44550,33790],{"class":390},[321,44552,44553],{"class":323,"line":33736},[321,44554,33796],{"class":331},[321,44556,44557],{"class":323,"line":33763},[321,44558,33802],{"class":390},[321,44560,44561,44563,44565],{"class":323,"line":33787},[321,44562,33808],{"class":331},[321,44564,33811],{"class":436},[321,44566,338],{"class":331},[321,44568,44569,44571,44573],{"class":323,"line":33793},[321,44570,33819],{"class":331},[321,44572,33822],{"class":436},[321,44574,338],{"class":331},[321,44576,44577],{"class":323,"line":33799},[321,44578,33830],{"class":390},[321,44580,44581,44583,44585,44587,44589,44591,44593],{"class":323,"line":33805},[321,44582,31872],{"class":331},[321,44584,549],{"class":380},[321,44586,710],{"class":331},[321,44588,409],{"class":380},[321,44590,710],{"class":331},[321,44592,409],{"class":380},[321,44594,338],{"class":331},[321,44596,44597,44599,44601,44603,44605,44607,44609,44611,44613],{"class":323,"line":33816},[321,44598,33739],{"class":331},[321,44600,33742],{"class":436},[321,44602,33857],{"class":331},[321,44604,33748],{"class":436},[321,44606,710],{"class":331},[321,44608,33753],{"class":5423},[321,44610,377],{"class":327},[321,44612,33868],{"class":436},[321,44614,338],{"class":331},[321,44616,44617,44619,44621,44623,44625,44627,44629,44631,44633],{"class":323,"line":33827},[321,44618,33739],{"class":331},[321,44620,33742],{"class":436},[321,44622,33880],{"class":331},[321,44624,33773],{"class":436},[321,44626,710],{"class":331},[321,44628,33753],{"class":5423},[321,44630,377],{"class":327},[321,44632,33891],{"class":436},[321,44634,338],{"class":331},[321,44636,44637],{"class":323,"line":33833},[321,44638,33899],{"class":390},[321,44640,44641],{"class":323,"line":33850},[321,44642,33796],{"class":331},[321,44644,44645,44647,44649],{"class":323,"line":33873},[321,44646,33808],{"class":331},[321,44648,33742],{"class":436},[321,44650,338],{"class":331},[321,44652,44653,44655,44657],{"class":323,"line":33896},[321,44654,33819],{"class":331},[321,44656,33921],{"class":436},[321,44658,338],{"class":331},[321,44660,44661],{"class":323,"line":33902},[321,44662,33929],{"class":331},[321,44664,44665],{"class":323,"line":33907},[321,44666,2606],{"emptyLinePlaceholder":251},[321,44668,44669],{"class":323,"line":33916},[321,44670,33940],{"class":390},[321,44672,44673,44675,44677,44679,44681],{"class":323,"line":33926},[321,44674,1737],{"class":327},[321,44676,31365],{"class":380},[321,44678,3155],{"class":327},[321,44680,31370],{"class":436},[321,44682,3945],{"class":331},[321,44684,44685],{"class":323,"line":33932},[321,44686,33959],{"class":390},[321,44688,44689,44692,44694],{"class":323,"line":33937},[321,44690,44691],{"class":331},"    GoogLeNet",[321,44693,377],{"class":327},[321,44695,44696],{"class":331},"GoogLeNet(Inception)\n",[321,44698,44699,44701,44703],{"class":323,"line":33943},[321,44700,33976],{"class":331},[321,44702,377],{"class":327},[321,44704,33981],{"class":331},[321,44706,44707,44709,44711,44714,44716,44718,44720],{"class":323,"line":33956},[321,44708,33538],{"class":331},[321,44710,377],{"class":327},[321,44712,44713],{"class":331},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[321,44715,33994],{"class":5423},[321,44717,377],{"class":327},[321,44719,1283],{"class":380},[321,44721,338],{"class":331},[321,44723,44724],{"class":323,"line":33962},[321,44725,34006],{"class":331},[151,44727,44728],{"start":200},[154,44729,40719],{},[312,44731,44733],{"className":30523,"code":44732,"language":30525,"meta":30,"style":30},"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",[318,44734,44735,44741,44751,44761,44765,44775,44786,44790,44794,44798,44806,44822,44832,44848,44858,44872,44876,44886,44896,44906,44912,44916,44920,44928,44932,44948,44956,44960,44964,44972,44980,44984,44988,44992,44996,45002,45006,45016,45024,45032,45036,45040,45044,45052,45056,45072,45076,45080,45084,45096,45100,45112,45116,45120,45132,45136,45146,45150,45154,45166,45170,45178,45182,45186,45194,45198,45206,45210,45214,45218,45222,45226,45242,45250,45254,45258,45306,45312,45316,45326,45334,45342,45346,45350,45354,45358,45366,45370,45386,45390,45398,45406],{"__ignoreMap":30},[321,44736,44737,44739],{"class":323,"line":324},[321,44738,30537],{"class":327},[321,44740,30540],{"class":331},[321,44742,44743,44745,44747,44749],{"class":323,"line":167},[321,44744,30537],{"class":327},[321,44746,31560],{"class":331},[321,44748,31528],{"class":327},[321,44750,31565],{"class":331},[321,44752,44753,44755,44757,44759],{"class":323,"line":200},[321,44754,30882],{"class":327},[321,44756,31543],{"class":331},[321,44758,30537],{"class":327},[321,44760,31548],{"class":331},[321,44762,44763],{"class":323,"line":1401},[321,44764,34067],{"class":390},[321,44766,44767,44769,44771,44773],{"class":323,"line":1407},[321,44768,30882],{"class":327},[321,44770,31513],{"class":331},[321,44772,30537],{"class":327},[321,44774,31518],{"class":331},[321,44776,44777,44779,44781,44783],{"class":323,"line":1421},[321,44778,30882],{"class":327},[321,44780,32059],{"class":331},[321,44782,30537],{"class":327},[321,44784,44785],{"class":331}," GoogLeNet,Inception\n",[321,44787,44788],{"class":323,"line":1427},[321,44789,2606],{"emptyLinePlaceholder":251},[321,44791,44792],{"class":323,"line":1518},[321,44793,2606],{"emptyLinePlaceholder":251},[321,44795,44796],{"class":323,"line":1524},[321,44797,34096],{"class":390},[321,44799,44800,44802,44804],{"class":323,"line":1536},[321,44801,32092],{"class":327},[321,44803,34103],{"class":2169},[321,44805,32098],{"class":331},[321,44807,44808,44810,44812,44814,44816,44818,44820],{"class":323,"line":1818},[321,44809,34110],{"class":331},[321,44811,377],{"class":327},[321,44813,31600],{"class":331},[321,44815,31603],{"class":5423},[321,44817,377],{"class":327},[321,44819,31608],{"class":436},[321,44821,31611],{"class":331},[321,44823,44824,44826,44828,44830],{"class":323,"line":1823},[321,44825,34127],{"class":5423},[321,44827,377],{"class":327},[321,44829,34132],{"class":380},[321,44831,31611],{"class":331},[321,44833,44834,44836,44838,44840,44842,44844,44846],{"class":323,"line":1829},[321,44835,34139],{"class":5423},[321,44837,377],{"class":327},[321,44839,31638],{"class":331},[321,44841,31641],{"class":5423},[321,44843,377],{"class":327},[321,44845,35594],{"class":380},[321,44847,31649],{"class":331},[321,44849,44850,44852,44854,44856],{"class":323,"line":1834},[321,44851,34156],{"class":5423},[321,44853,377],{"class":327},[321,44855,31621],{"class":380},[321,44857,338],{"class":331},[321,44859,44860,44862,44864,44866,44868,44870],{"class":323,"line":1848},[321,44861,34167],{"class":331},[321,44863,377],{"class":327},[321,44865,31679],{"class":331},[321,44867,31682],{"class":5423},[321,44869,377],{"class":327},[321,44871,34178],{"class":331},[321,44873,44874],{"class":323,"line":1853},[321,44875,34183],{"class":390},[321,44877,44878,44880,44882,44884],{"class":323,"line":1859},[321,44879,34188],{"class":5423},[321,44881,377],{"class":327},[321,44883,549],{"class":380},[321,44885,31611],{"class":331},[321,44887,44888,44890,44892,44894],{"class":323,"line":1880},[321,44889,34199],{"class":5423},[321,44891,377],{"class":327},[321,44893,31621],{"class":380},[321,44895,31611],{"class":331},[321,44897,44898,44900,44902,44904],{"class":323,"line":1885},[321,44899,34210],{"class":5423},[321,44901,377],{"class":327},[321,44903,523],{"class":380},[321,44905,338],{"class":331},[321,44907,44908,44910],{"class":323,"line":1899},[321,44909,4296],{"class":327},[321,44911,34223],{"class":331},[321,44913,44914],{"class":323,"line":1904},[321,44915,2606],{"emptyLinePlaceholder":251},[321,44917,44918],{"class":323,"line":1933},[321,44919,34232],{"class":390},[321,44921,44922,44924,44926],{"class":323,"line":1938},[321,44923,32092],{"class":327},[321,44925,34239],{"class":2169},[321,44927,34242],{"class":331},[321,44929,44930],{"class":323,"line":1955},[321,44931,34247],{"class":390},[321,44933,44934,44936,44938,44940,44942,44944,44946],{"class":323,"line":1960},[321,44935,31382],{"class":331},[321,44937,377],{"class":327},[321,44939,31389],{"class":436},[321,44941,1910],{"class":327},[321,44943,31394],{"class":331},[321,44945,1907],{"class":327},[321,44947,34264],{"class":436},[321,44949,44950,44952,44954],{"class":323,"line":1965},[321,44951,31434],{"class":331},[321,44953,377],{"class":327},[321,44955,32434],{"class":331},[321,44957,44958],{"class":323,"line":1970},[321,44959,2606],{"emptyLinePlaceholder":251},[321,44961,44962],{"class":323,"line":1984},[321,44963,34281],{"class":390},[321,44965,44966,44968,44970],{"class":323,"line":1989},[321,44967,34286],{"class":331},[321,44969,377],{"class":327},[321,44971,32487],{"class":380},[321,44973,44974,44976,44978],{"class":323,"line":2783},[321,44975,34295],{"class":331},[321,44977,377],{"class":327},[321,44979,3291],{"class":380},[321,44981,44982],{"class":323,"line":2797},[321,44983,2606],{"emptyLinePlaceholder":251},[321,44985,44986],{"class":323,"line":2805},[321,44987,34308],{"class":390},[321,44989,44990],{"class":323,"line":2810},[321,44991,34313],{"class":390},[321,44993,44994],{"class":323,"line":2816},[321,44995,34318],{"class":390},[321,44997,44998,45000],{"class":323,"line":2822},[321,44999,34323],{"class":327},[321,45001,33029],{"class":331},[321,45003,45004],{"class":323,"line":2827},[321,45005,34330],{"class":390},[321,45007,45008,45010,45012,45014],{"class":323,"line":8155},[321,45009,3609],{"class":327},[321,45011,34337],{"class":331},[321,45013,26188],{"class":327},[321,45015,34342],{"class":331},[321,45017,45018,45020,45022],{"class":323,"line":8179},[321,45019,34347],{"class":331},[321,45021,377],{"class":327},[321,45023,34352],{"class":331},[321,45025,45026,45028,45030],{"class":323,"line":8184},[321,45027,34357],{"class":331},[321,45029,377],{"class":327},[321,45031,34362],{"class":331},[321,45033,45034],{"class":323,"line":8190},[321,45035,34367],{"class":390},[321,45037,45038],{"class":323,"line":8217},[321,45039,33020],{"class":331},[321,45041,45042],{"class":323,"line":8222},[321,45043,34376],{"class":390},[321,45045,45046,45048,45050],{"class":323,"line":8228},[321,45047,32805],{"class":331},[321,45049,377],{"class":327},[321,45051,34385],{"class":331},[321,45053,45054],{"class":323,"line":8240},[321,45055,34390],{"class":390},[321,45057,45058,45060,45062,45064,45066,45068,45070],{"class":323,"line":8252},[321,45059,32822],{"class":331},[321,45061,377],{"class":327},[321,45063,32827],{"class":331},[321,45065,32830],{"class":5423},[321,45067,377],{"class":327},[321,45069,549],{"class":380},[321,45071,338],{"class":331},[321,45073,45074],{"class":323,"line":8264},[321,45075,34411],{"class":390},[321,45077,45078],{"class":323,"line":9923},[321,45079,34416],{"class":390},[321,45081,45082],{"class":323,"line":9948},[321,45083,34421],{"class":390},[321,45085,45086,45088,45090,45092,45094],{"class":323,"line":9971},[321,45087,34426],{"class":331},[321,45089,9684],{"class":327},[321,45091,32932],{"class":331},[321,45093,3155],{"class":327},[321,45095,34435],{"class":331},[321,45097,45098],{"class":323,"line":9995},[321,45099,34440],{"class":390},[321,45101,45102,45104,45106,45108,45110],{"class":323,"line":10000},[321,45103,34445],{"class":331},[321,45105,9684],{"class":327},[321,45107,34450],{"class":331},[321,45109,523],{"class":380},[321,45111,338],{"class":331},[321,45113,45114],{"class":323,"line":10005},[321,45115,2606],{"emptyLinePlaceholder":251},[321,45117,45118],{"class":323,"line":10010},[321,45119,34463],{"class":390},[321,45121,45122,45124,45126,45128,45130],{"class":323,"line":10019},[321,45123,34468],{"class":331},[321,45125,377],{"class":327},[321,45127,34473],{"class":331},[321,45129,916],{"class":327},[321,45131,34478],{"class":331},[321,45133,45134],{"class":323,"line":10024},[321,45135,34483],{"class":390},[321,45137,45138,45140,45142,45144],{"class":323,"line":10030},[321,45139,32596],{"class":380},[321,45141,332],{"class":331},[321,45143,34492],{"class":436},[321,45145,34495],{"class":331},[321,45147,45148],{"class":323,"line":10051},[321,45149,2606],{"emptyLinePlaceholder":251},[321,45151,45152],{"class":323,"line":10057},[321,45153,34504],{"class":390},[321,45155,45156,45158,45160,45162,45164],{"class":323,"line":10071},[321,45157,1737],{"class":327},[321,45159,31365],{"class":380},[321,45161,3155],{"class":327},[321,45163,31370],{"class":436},[321,45165,3945],{"class":331},[321,45167,45168],{"class":323,"line":10077},[321,45169,34521],{"class":390},[321,45171,45172,45174,45176],{"class":323,"line":10104},[321,45173,31434],{"class":331},[321,45175,377],{"class":327},[321,45177,44696],{"class":331},[321,45179,45180],{"class":323,"line":10113},[321,45181,34534],{"class":390},[321,45183,45184],{"class":323,"line":10119},[321,45185,34539],{"class":390},[321,45187,45188,45190,45192],{"class":323,"line":10127},[321,45189,34544],{"class":331},[321,45191,34547],{"class":436},[321,45193,30642],{"class":331},[321,45195,45196],{"class":323,"line":10132},[321,45197,34554],{"class":390},[321,45199,45200,45202,45204],{"class":323,"line":16811},[321,45201,34167],{"class":331},[321,45203,377],{"class":327},[321,45205,34563],{"class":331},[321,45207,45208],{"class":323,"line":16817},[321,45209,34568],{"class":390},[321,45211,45212],{"class":323,"line":16840},[321,45213,34573],{"class":331},[321,45215,45216],{"class":323,"line":16846},[321,45217,2606],{"emptyLinePlaceholder":251},[321,45219,45220],{"class":323,"line":16869},[321,45221,34582],{"class":390},[321,45223,45224],{"class":323,"line":16883},[321,45225,34587],{"class":390},[321,45227,45228,45230,45232,45234,45236,45238,45240],{"class":323,"line":16903},[321,45229,31382],{"class":331},[321,45231,377],{"class":327},[321,45233,31389],{"class":436},[321,45235,1910],{"class":327},[321,45237,31394],{"class":331},[321,45239,1907],{"class":327},[321,45241,34264],{"class":436},[321,45243,45244,45246,45248],{"class":323,"line":16909},[321,45245,31434],{"class":331},[321,45247,377],{"class":327},[321,45249,32434],{"class":331},[321,45251,45252],{"class":323,"line":16920},[321,45253,34616],{"class":390},[321,45255,45256],{"class":323,"line":16943},[321,45257,34621],{"class":390},[321,45259,45260,45262,45264,45266,45268,45270,45272,45274,45276,45278,45280,45282,45284,45286,45288,45290,45292,45294,45296,45298,45300,45302,45304],{"class":323,"line":16965},[321,45261,34626],{"class":331},[321,45263,377],{"class":327},[321,45265,1222],{"class":331},[321,45267,34633],{"class":436},[321,45269,710],{"class":331},[321,45271,34638],{"class":436},[321,45273,710],{"class":331},[321,45275,34643],{"class":436},[321,45277,710],{"class":331},[321,45279,34648],{"class":436},[321,45281,710],{"class":331},[321,45283,34653],{"class":436},[321,45285,710],{"class":331},[321,45287,34658],{"class":436},[321,45289,710],{"class":331},[321,45291,34663],{"class":436},[321,45293,710],{"class":331},[321,45295,34668],{"class":436},[321,45297,710],{"class":331},[321,45299,34673],{"class":436},[321,45301,710],{"class":331},[321,45303,34678],{"class":436},[321,45305,33391],{"class":331},[321,45307,45308,45310],{"class":323,"line":16970},[321,45309,34323],{"class":327},[321,45311,33029],{"class":331},[321,45313,45314],{"class":323,"line":16976},[321,45315,34691],{"class":390},[321,45317,45318,45320,45322,45324],{"class":323,"line":16990},[321,45319,3609],{"class":327},[321,45321,34698],{"class":331},[321,45323,26188],{"class":327},[321,45325,34342],{"class":331},[321,45327,45328,45330,45332],{"class":323,"line":17003},[321,45329,32755],{"class":331},[321,45331,377],{"class":327},[321,45333,32760],{"class":331},[321,45335,45336,45338,45340],{"class":323,"line":17008},[321,45337,32770],{"class":331},[321,45339,377],{"class":327},[321,45341,32775],{"class":331},[321,45343,45344],{"class":323,"line":17022},[321,45345,2606],{"emptyLinePlaceholder":251},[321,45347,45348],{"class":323,"line":17027},[321,45349,34727],{"class":390},[321,45351,45352],{"class":323,"line":17033},[321,45353,33020],{"class":331},[321,45355,45356],{"class":323,"line":17038},[321,45357,34736],{"class":390},[321,45359,45360,45362,45364],{"class":323,"line":17052},[321,45361,32805],{"class":331},[321,45363,377],{"class":327},[321,45365,32810],{"class":331},[321,45367,45368],{"class":323,"line":17057},[321,45369,34749],{"class":390},[321,45371,45372,45374,45376,45378,45380,45382,45384],{"class":323,"line":17062},[321,45373,32822],{"class":331},[321,45375,377],{"class":327},[321,45377,32827],{"class":331},[321,45379,32830],{"class":5423},[321,45381,377],{"class":327},[321,45383,549],{"class":380},[321,45385,338],{"class":331},[321,45387,45388],{"class":323,"line":17076},[321,45389,34770],{"class":390},[321,45391,45392,45394,45396],{"class":323,"line":17088},[321,45393,34775],{"class":331},[321,45395,377],{"class":327},[321,45397,34780],{"class":331},[321,45399,45400,45402,45404],{"class":323,"line":17093},[321,45401,34785],{"class":331},[321,45403,377],{"class":327},[321,45405,34790],{"class":331},[321,45407,45408,45410,45412,45414,45416,45418,45420,45422],{"class":323,"line":17106},[321,45409,34795],{"class":380},[321,45411,332],{"class":331},[321,45413,34800],{"class":436},[321,45415,34803],{"class":331},[321,45417,34806],{"class":436},[321,45419,710],{"class":331},[321,45421,34811],{"class":436},[321,45423,34814],{"class":331},[292,45425,45427],{"id":45426},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45429,45430],{},"猫狗分类任务",[19,45432,45433],{},"划分数据集和验证集",[312,45435,45437],{"className":30523,"code":45436,"language":30525,"meta":30,"style":30},"# 创建脚本，用于划分数据集和验证集\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",[318,45438,45439,45444,45451,45456,45467,45474,45478,45488,45502,45511,45515,45520,45530,45550,45554,45559,45569,45580,45593,45597,45602,45611,45621,45632,45636,45641,45651,45655,45660,45665,45670,45675,45680,45684,45694,45721,45734,45746,45773,45778,45783,45797,45802,45814,45829,45844,45852,45856,45861,45867,45879,45892,45897,45902,45907,45957,45963,45967],{"__ignoreMap":30},[321,45440,45441],{"class":323,"line":324},[321,45442,45443],{"class":390},"# 创建脚本，用于划分数据集和验证集\n",[321,45445,45446,45448],{"class":323,"line":167},[321,45447,30537],{"class":327},[321,45449,45450],{"class":331}," os\n",[321,45452,45453],{"class":323,"line":200},[321,45454,45455],{"class":390},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[321,45457,45458,45460,45463,45465],{"class":323,"line":1401},[321,45459,30882],{"class":327},[321,45461,45462],{"class":331}," shutil ",[321,45464,30537],{"class":327},[321,45466,31967],{"class":331},[321,45468,45469,45471],{"class":323,"line":1407},[321,45470,30537],{"class":327},[321,45472,45473],{"class":331}," random\n",[321,45475,45476],{"class":323,"line":1421},[321,45477,2606],{"emptyLinePlaceholder":251},[321,45479,45480,45482,45485],{"class":323,"line":1427},[321,45481,32092],{"class":327},[321,45483,45484],{"class":2169}," mkfile",[321,45486,45487],{"class":331},"(file):\n",[321,45489,45490,45492,45494,45497,45500],{"class":323,"line":1518},[321,45491,3307],{"class":327},[321,45493,39075],{"class":327},[321,45495,45496],{"class":331}," os.path.exists(",[321,45498,45499],{"class":5423},"file",[321,45501,30931],{"class":331},[321,45503,45504,45507,45509],{"class":323,"line":1524},[321,45505,45506],{"class":331},"        os.makedirs(",[321,45508,45499],{"class":5423},[321,45510,338],{"class":331},[321,45512,45513],{"class":323,"line":1536},[321,45514,2606],{"emptyLinePlaceholder":251},[321,45516,45517],{"class":323,"line":1818},[321,45518,45519],{"class":390},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[321,45521,45522,45525,45527],{"class":323,"line":1823},[321,45523,45524],{"class":331},"file_path",[321,45526,377],{"class":327},[321,45528,45529],{"class":436},"'data_cat_dog'\n",[321,45531,45532,45535,45537,45540,45542,45545,45547],{"class":323,"line":1829},[321,45533,45534],{"class":331},"flower_class",[321,45536,377],{"class":327},[321,45538,45539],{"class":331},"[cla ",[321,45541,3231],{"class":327},[321,45543,45544],{"class":331}," cla ",[321,45546,26188],{"class":327},[321,45548,45549],{"class":331}," os.listdir(file_path)]\n",[321,45551,45552],{"class":323,"line":1834},[321,45553,2606],{"emptyLinePlaceholder":251},[321,45555,45556],{"class":323,"line":1848},[321,45557,45558],{"class":390},"# 创建训练集train文件夹\n",[321,45560,45561,45564,45567],{"class":323,"line":1853},[321,45562,45563],{"class":331},"mkfile(",[321,45565,45566],{"class":436},"'data\u002Ftrain'",[321,45568,338],{"class":331},[321,45570,45571,45573,45575,45577],{"class":323,"line":1859},[321,45572,3231],{"class":327},[321,45574,45544],{"class":331},[321,45576,26188],{"class":327},[321,45578,45579],{"class":331}," flower_class:\n",[321,45581,45582,45585,45588,45590],{"class":323,"line":1880},[321,45583,45584],{"class":331},"    mkfile(",[321,45586,45587],{"class":436},"'data\u002Ftrain\u002F'",[321,45589,813],{"class":327},[321,45591,45592],{"class":331},"cla)\n",[321,45594,45595],{"class":323,"line":1885},[321,45596,2606],{"emptyLinePlaceholder":251},[321,45598,45599],{"class":323,"line":1899},[321,45600,45601],{"class":390},"# 创建验证集val文件夹\n",[321,45603,45604,45606,45609],{"class":323,"line":1904},[321,45605,45563],{"class":331},[321,45607,45608],{"class":436},"'data\u002Ftest'",[321,45610,338],{"class":331},[321,45612,45613,45615,45617,45619],{"class":323,"line":1933},[321,45614,3231],{"class":327},[321,45616,45544],{"class":331},[321,45618,26188],{"class":327},[321,45620,45579],{"class":331},[321,45622,45623,45625,45628,45630],{"class":323,"line":1938},[321,45624,45584],{"class":331},[321,45626,45627],{"class":436},"'data\u002Ftest\u002F'",[321,45629,813],{"class":327},[321,45631,45592],{"class":331},[321,45633,45634],{"class":323,"line":1955},[321,45635,2606],{"emptyLinePlaceholder":251},[321,45637,45638],{"class":323,"line":1960},[321,45639,45640],{"class":390},"# 划分比例，训练集：测试集=9：1\n",[321,45642,45643,45646,45648],{"class":323,"line":1965},[321,45644,45645],{"class":331},"split_rate",[321,45647,377],{"class":327},[321,45649,45650],{"class":380},"0.1\n",[321,45652,45653],{"class":323,"line":1970},[321,45654,2606],{"emptyLinePlaceholder":251},[321,45656,45657],{"class":323,"line":1984},[321,45658,45659],{"class":390},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[321,45661,45662],{"class":323,"line":1989},[321,45663,45664],{"class":390},"# cla_path：当前类别的原始图片路径\n",[321,45666,45667],{"class":323,"line":2783},[321,45668,45669],{"class":390},"# images：当前类别下所有图片的文件名列表\n",[321,45671,45672],{"class":323,"line":2797},[321,45673,45674],{"class":390},"# num：该类别图片总数\n",[321,45676,45677],{"class":323,"line":2805},[321,45678,45679],{"class":390},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[321,45681,45682],{"class":323,"line":2810},[321,45683,2606],{"emptyLinePlaceholder":251},[321,45685,45686,45688,45690,45692],{"class":323,"line":2816},[321,45687,3231],{"class":327},[321,45689,45544],{"class":331},[321,45691,26188],{"class":327},[321,45693,45579],{"class":331},[321,45695,45696,45699,45701,45704,45706,45709,45712,45714,45716,45718],{"class":323,"line":2822},[321,45697,45698],{"class":331},"    cla_path ",[321,45700,377],{"class":327},[321,45702,45703],{"class":331}," file_path ",[321,45705,813],{"class":327},[321,45707,45708],{"class":436}," '\u002F'",[321,45710,45711],{"class":327}," +",[321,45713,45544],{"class":331},[321,45715,813],{"class":327},[321,45717,45708],{"class":436},[321,45719,45720],{"class":390},"  # 某一类别的子目录\n",[321,45722,45723,45726,45728,45731],{"class":323,"line":2827},[321,45724,45725],{"class":331},"    images ",[321,45727,377],{"class":327},[321,45729,45730],{"class":331}," os.listdir(cla_path)  ",[321,45732,45733],{"class":390},"# iamges 列表存储了该目录下所有图像的名称\n",[321,45735,45736,45739,45741,45743],{"class":323,"line":8155},[321,45737,45738],{"class":331},"    num ",[321,45740,377],{"class":327},[321,45742,7538],{"class":380},[321,45744,45745],{"class":331},"(images)\n",[321,45747,45748,45751,45753,45756,45758,45760,45762,45765,45767,45770],{"class":323,"line":8179},[321,45749,45750],{"class":331},"    eval_index ",[321,45752,377],{"class":327},[321,45754,45755],{"class":331}," random.sample(images, ",[321,45757,825],{"class":5423},[321,45759,377],{"class":327},[321,45761,335],{"class":380},[321,45763,45764],{"class":331},"(num ",[321,45766,787],{"class":327},[321,45768,45769],{"class":331}," split_rate))  ",[321,45771,45772],{"class":390},"# 从images列表中随机抽取 k 个图像名称\n",[321,45774,45775],{"class":323,"line":8184},[321,45776,45777],{"class":390},"    # 遍历该类别下的所有图片\n",[321,45779,45780],{"class":323,"line":8190},[321,45781,45782],{"class":390},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[321,45784,45785,45787,45790,45792,45794],{"class":323,"line":8217},[321,45786,3407],{"class":327},[321,45788,45789],{"class":331}," index, image ",[321,45791,26188],{"class":327},[321,45793,31751],{"class":380},[321,45795,45796],{"class":331},"(images):\n",[321,45798,45799],{"class":323,"line":8222},[321,45800,45801],{"class":390},"        # eval_index 中保存验证集val的图像名称\n",[321,45803,45804,45806,45809,45811],{"class":323,"line":8228},[321,45805,2703],{"class":327},[321,45807,45808],{"class":331}," image ",[321,45810,26188],{"class":327},[321,45812,45813],{"class":331}," eval_index:\n",[321,45815,45816,45819,45821,45824,45826],{"class":323,"line":8240},[321,45817,45818],{"class":331},"            image_path ",[321,45820,377],{"class":327},[321,45822,45823],{"class":331}," cla_path ",[321,45825,813],{"class":327},[321,45827,45828],{"class":331}," image\n",[321,45830,45831,45834,45836,45839,45841],{"class":323,"line":8252},[321,45832,45833],{"class":331},"            new_path ",[321,45835,377],{"class":327},[321,45837,45838],{"class":436}," 'data\u002Ftest\u002F'",[321,45840,45711],{"class":327},[321,45842,45843],{"class":331}," cla\n",[321,45845,45846,45849],{"class":323,"line":8264},[321,45847,45848],{"class":331},"            copy(image_path, new_path)  ",[321,45850,45851],{"class":390},"# 将选中的图像复制到新路径\n",[321,45853,45854],{"class":323,"line":9923},[321,45855,2606],{"emptyLinePlaceholder":251},[321,45857,45858],{"class":323,"line":9948},[321,45859,45860],{"class":390},"        # 其余的图像保存在训练集train中\n",[321,45862,45863,45865],{"class":323,"line":9971},[321,45864,2740],{"class":327},[321,45866,3945],{"class":331},[321,45868,45869,45871,45873,45875,45877],{"class":323,"line":9995},[321,45870,45818],{"class":331},[321,45872,377],{"class":327},[321,45874,45823],{"class":331},[321,45876,813],{"class":327},[321,45878,45828],{"class":331},[321,45880,45881,45883,45885,45888,45890],{"class":323,"line":10000},[321,45882,45833],{"class":331},[321,45884,377],{"class":327},[321,45886,45887],{"class":436}," 'data\u002Ftrain\u002F'",[321,45889,45711],{"class":327},[321,45891,45843],{"class":331},[321,45893,45894],{"class":323,"line":10005},[321,45895,45896],{"class":331},"            copy(image_path, new_path)\n",[321,45898,45899],{"class":323,"line":10010},[321,45900,45901],{"class":390},"            # 打印进度条信息\n",[321,45903,45904],{"class":323,"line":10019},[321,45905,45906],{"class":390},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[321,45908,45909,45911,45913,45915,45918,45920,45922,45925,45927,45929,45931,45934,45937,45939,45941,45944,45947,45949,45951,45954],{"class":323,"line":10024},[321,45910,32596],{"class":380},[321,45912,332],{"class":331},[321,45914,583],{"class":436},[321,45916,45917],{"class":380},"\\r",[321,45919,1222],{"class":436},[321,45921,32604],{"class":380},[321,45923,45924],{"class":436},"] processing [",[321,45926,32604],{"class":380},[321,45928,916],{"class":436},[321,45930,32604],{"class":380},[321,45932,45933],{"class":436},"]\"",[321,45935,45936],{"class":331},".format(cla, index ",[321,45938,813],{"class":327},[321,45940,25263],{"class":380},[321,45942,45943],{"class":331},", num), ",[321,45945,45946],{"class":5423},"end",[321,45948,377],{"class":327},[321,45950,7859],{"class":436},[321,45952,45953],{"class":331},")  ",[321,45955,45956],{"class":390},"# processing bar\n",[321,45958,45959,45961],{"class":323,"line":10030},[321,45960,31444],{"class":380},[321,45962,2182],{"class":331},[321,45964,45965],{"class":323,"line":10051},[321,45966,2606],{"emptyLinePlaceholder":251},[321,45968,45969,45971,45973,45976],{"class":323,"line":10057},[321,45970,30560],{"class":380},[321,45972,332],{"class":331},[321,45974,45975],{"class":436},"\"processing done!\"",[321,45977,338],{"class":331},[19,45979,45980],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22205,45982,45984],{"id":45983},"_242模型代码","2.4.2.模型代码",[19,45986,45987],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[312,45989,45991],{"className":30523,"code":45990,"language":30525,"meta":30,"style":30},"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",[318,45992,45993,45999,46009,46019,46023,46039,46047,46061,46071,46075,46105,46109,46143,46189,46193,46227,46273,46277,46281,46315,46345,46349,46357,46371,46393,46415,46433,46437,46451,46455,46459,46475,46479,46487,46501,46511,46555,46559,46587,46591,46601,46629,46633,46669,46673,46701,46705,46715,46747,46779,46807,46811,46821,46853,46885,46917,46949,46981,47009,47013,47023,47055,47087,47099,47103,47115,47119,47123,47135,47143,47163,47167,47171,47175,47179,47183,47187,47201,47209,47217,47229,47243,47251,47255,47263,47273,47283,47293,47303,47313,47319,47323,47327,47339,47359,47367],{"__ignoreMap":30},[321,45994,45995,45997],{"class":323,"line":324},[321,45996,30537],{"class":327},[321,45998,30540],{"class":331},[321,46000,46001,46003,46005,46007],{"class":323,"line":167},[321,46002,30882],{"class":327},[321,46004,30885],{"class":331},[321,46006,30537],{"class":327},[321,46008,30890],{"class":331},[321,46010,46011,46013,46015,46017],{"class":323,"line":200},[321,46012,30882],{"class":327},[321,46014,30902],{"class":331},[321,46016,30537],{"class":327},[321,46018,30907],{"class":331},[321,46020,46021],{"class":323,"line":1401},[321,46022,2606],{"emptyLinePlaceholder":251},[321,46024,46025,46027,46029,46031,46033,46035,46037],{"class":323,"line":1407},[321,46026,14901],{"class":327},[321,46028,41638],{"class":2169},[321,46030,332],{"class":331},[321,46032,30923],{"class":2169},[321,46034,890],{"class":331},[321,46036,30928],{"class":2169},[321,46038,30931],{"class":331},[321,46040,46041,46043,46045],{"class":323,"line":1421},[321,46042,30946],{"class":327},[321,46044,30949],{"class":380},[321,46046,41657],{"class":331},[321,46048,46049,46051,46053,46055,46057,46059],{"class":323,"line":1427},[321,46050,30962],{"class":380},[321,46052,41664],{"class":331},[321,46054,30968],{"class":380},[321,46056,30971],{"class":331},[321,46058,30974],{"class":380},[321,46060,2182],{"class":331},[321,46062,46063,46065,46067,46069],{"class":323,"line":1518},[321,46064,30990],{"class":380},[321,46066,34916],{"class":331},[321,46068,377],{"class":327},[321,46070,34921],{"class":331},[321,46072,46073],{"class":323,"line":1524},[321,46074,41687],{"class":390},[321,46076,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103],{"class":323,"line":1536},[321,46078,30990],{"class":380},[321,46080,41694],{"class":331},[321,46082,377],{"class":327},[321,46084,30998],{"class":331},[321,46086,31001],{"class":5423},[321,46088,377],{"class":327},[321,46090,41705],{"class":331},[321,46092,31010],{"class":5423},[321,46094,377],{"class":327},[321,46096,41712],{"class":331},[321,46098,31019],{"class":5423},[321,46100,377],{"class":327},[321,46102,549],{"class":380},[321,46104,338],{"class":331},[321,46106,46107],{"class":323,"line":1818},[321,46108,41725],{"class":390},[321,46110,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141],{"class":323,"line":1823},[321,46112,30990],{"class":380},[321,46114,41732],{"class":331},[321,46116,377],{"class":327},[321,46118,30998],{"class":331},[321,46120,31001],{"class":5423},[321,46122,377],{"class":327},[321,46124,41705],{"class":331},[321,46126,31010],{"class":5423},[321,46128,377],{"class":327},[321,46130,41749],{"class":331},[321,46132,523],{"class":380},[321,46134,41754],{"class":331},[321,46136,31019],{"class":5423},[321,46138,377],{"class":327},[321,46140,549],{"class":380},[321,46142,338],{"class":331},[321,46144,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187],{"class":323,"line":1829},[321,46146,30990],{"class":380},[321,46148,41769],{"class":331},[321,46150,377],{"class":327},[321,46152,30998],{"class":331},[321,46154,31001],{"class":5423},[321,46156,377],{"class":327},[321,46158,41749],{"class":331},[321,46160,523],{"class":380},[321,46162,41754],{"class":331},[321,46164,31010],{"class":5423},[321,46166,377],{"class":327},[321,46168,41749],{"class":331},[321,46170,549],{"class":380},[321,46172,41754],{"class":331},[321,46174,31019],{"class":5423},[321,46176,377],{"class":327},[321,46178,403],{"class":380},[321,46180,710],{"class":331},[321,46182,31028],{"class":5423},[321,46184,377],{"class":327},[321,46186,549],{"class":380},[321,46188,338],{"class":331},[321,46190,46191],{"class":323,"line":1834},[321,46192,41814],{"class":390},[321,46194,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225],{"class":323,"line":1848},[321,46196,30990],{"class":380},[321,46198,41821],{"class":331},[321,46200,377],{"class":327},[321,46202,30998],{"class":331},[321,46204,31001],{"class":5423},[321,46206,377],{"class":327},[321,46208,41705],{"class":331},[321,46210,31010],{"class":5423},[321,46212,377],{"class":327},[321,46214,41838],{"class":331},[321,46216,523],{"class":380},[321,46218,41754],{"class":331},[321,46220,31019],{"class":5423},[321,46222,377],{"class":327},[321,46224,549],{"class":380},[321,46226,338],{"class":331},[321,46228,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249,46251,46253,46255,46257,46259,46261,46263,46265,46267,46269,46271],{"class":323,"line":1853},[321,46230,30990],{"class":380},[321,46232,41857],{"class":331},[321,46234,377],{"class":327},[321,46236,30998],{"class":331},[321,46238,31001],{"class":5423},[321,46240,377],{"class":327},[321,46242,41838],{"class":331},[321,46244,523],{"class":380},[321,46246,41754],{"class":331},[321,46248,31010],{"class":5423},[321,46250,377],{"class":327},[321,46252,41838],{"class":331},[321,46254,549],{"class":380},[321,46256,41754],{"class":331},[321,46258,31019],{"class":5423},[321,46260,377],{"class":327},[321,46262,651],{"class":380},[321,46264,710],{"class":331},[321,46266,31028],{"class":5423},[321,46268,377],{"class":327},[321,46270,409],{"class":380},[321,46272,338],{"class":331},[321,46274,46275],{"class":323,"line":1859},[321,46276,41902],{"class":390},[321,46278,46279],{"class":323,"line":1880},[321,46280,41907],{"class":390},[321,46282,46283,46285,46287,46289,46291,46293,46295,46297,46299,46301,46303,46305,46307,46309,46311,46313],{"class":323,"line":1885},[321,46284,30990],{"class":380},[321,46286,41914],{"class":331},[321,46288,377],{"class":327},[321,46290,34974],{"class":331},[321,46292,31019],{"class":5423},[321,46294,377],{"class":327},[321,46296,403],{"class":380},[321,46298,710],{"class":331},[321,46300,31074],{"class":5423},[321,46302,377],{"class":327},[321,46304,549],{"class":380},[321,46306,710],{"class":331},[321,46308,31028],{"class":5423},[321,46310,377],{"class":327},[321,46312,549],{"class":380},[321,46314,338],{"class":331},[321,46316,46317,46319,46321,46323,46325,46327,46329,46331,46333,46335,46337,46339,46341,46343],{"class":323,"line":1899},[321,46318,30990],{"class":380},[321,46320,41949],{"class":331},[321,46322,377],{"class":327},[321,46324,30998],{"class":331},[321,46326,31001],{"class":5423},[321,46328,377],{"class":327},[321,46330,41705],{"class":331},[321,46332,31010],{"class":5423},[321,46334,377],{"class":327},[321,46336,41966],{"class":331},[321,46338,31019],{"class":5423},[321,46340,377],{"class":327},[321,46342,549],{"class":380},[321,46344,338],{"class":331},[321,46346,46347],{"class":323,"line":1904},[321,46348,2606],{"emptyLinePlaceholder":251},[321,46350,46351,46353,46355],{"class":323,"line":1933},[321,46352,30946],{"class":327},[321,46354,31238],{"class":2169},[321,46356,31241],{"class":331},[321,46358,46359,46361,46363,46365,46367,46369],{"class":323,"line":1938},[321,46360,41991],{"class":331},[321,46362,377],{"class":327},[321,46364,30968],{"class":380},[321,46366,35329],{"class":331},[321,46368,30968],{"class":380},[321,46370,42002],{"class":331},[321,46372,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391],{"class":323,"line":1955},[321,46374,7292],{"class":331},[321,46376,377],{"class":327},[321,46378,30968],{"class":380},[321,46380,35329],{"class":331},[321,46382,30968],{"class":380},[321,46384,42017],{"class":331},[321,46386,30968],{"class":380},[321,46388,35329],{"class":331},[321,46390,30968],{"class":380},[321,46392,42026],{"class":331},[321,46394,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413],{"class":323,"line":1960},[321,46396,42031],{"class":331},[321,46398,377],{"class":327},[321,46400,30968],{"class":380},[321,46402,35329],{"class":331},[321,46404,30968],{"class":380},[321,46406,42042],{"class":331},[321,46408,30968],{"class":380},[321,46410,35329],{"class":331},[321,46412,30968],{"class":380},[321,46414,42051],{"class":331},[321,46416,46417,46419,46421,46423,46425,46427,46429,46431],{"class":323,"line":1965},[321,46418,42056],{"class":331},[321,46420,377],{"class":327},[321,46422,30968],{"class":380},[321,46424,35329],{"class":331},[321,46426,30968],{"class":380},[321,46428,42067],{"class":331},[321,46430,30968],{"class":380},[321,46432,42072],{"class":331},[321,46434,46435],{"class":323,"line":1970},[321,46436,42077],{"class":390},[321,46438,46439,46441,46443,46445,46447,46449],{"class":323,"line":1984},[321,46440,14959],{"class":327},[321,46442,42084],{"class":331},[321,46444,32830],{"class":5423},[321,46446,377],{"class":327},[321,46448,549],{"class":380},[321,46450,338],{"class":331},[321,46452,46453],{"class":323,"line":1989},[321,46454,2606],{"emptyLinePlaceholder":251},[321,46456,46457],{"class":323,"line":2783},[321,46458,42105],{"class":390},[321,46460,46461,46463,46465,46467,46469,46471,46473],{"class":323,"line":2797},[321,46462,14901],{"class":327},[321,46464,42112],{"class":2169},[321,46466,332],{"class":331},[321,46468,30923],{"class":2169},[321,46470,890],{"class":331},[321,46472,30928],{"class":2169},[321,46474,30931],{"class":331},[321,46476,46477],{"class":323,"line":2805},[321,46478,42127],{"class":390},[321,46480,46481,46483,46485],{"class":323,"line":2810},[321,46482,30946],{"class":327},[321,46484,30949],{"class":380},[321,46486,42136],{"class":331},[321,46488,46489,46491,46493,46495,46497,46499],{"class":323,"line":2816},[321,46490,30962],{"class":380},[321,46492,42143],{"class":331},[321,46494,30968],{"class":380},[321,46496,30971],{"class":331},[321,46498,30974],{"class":380},[321,46500,2182],{"class":331},[321,46502,46503,46505,46507,46509],{"class":323,"line":2822},[321,46504,30990],{"class":380},[321,46506,42158],{"class":331},[321,46508,377],{"class":327},[321,46510,38154],{"class":331},[321,46512,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553],{"class":323,"line":2827},[321,46514,38159],{"class":331},[321,46516,31001],{"class":5423},[321,46518,377],{"class":327},[321,46520,403],{"class":380},[321,46522,710],{"class":331},[321,46524,31010],{"class":5423},[321,46526,377],{"class":327},[321,46528,535],{"class":380},[321,46530,710],{"class":331},[321,46532,31019],{"class":5423},[321,46534,377],{"class":327},[321,46536,701],{"class":380},[321,46538,710],{"class":331},[321,46540,31074],{"class":5423},[321,46542,377],{"class":327},[321,46544,409],{"class":380},[321,46546,710],{"class":331},[321,46548,31028],{"class":5423},[321,46550,377],{"class":327},[321,46552,403],{"class":380},[321,46554,38192],{"class":331},[321,46556,46557],{"class":323,"line":8155},[321,46558,38197],{"class":331},[321,46560,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585],{"class":323,"line":8179},[321,46562,38242],{"class":331},[321,46564,31019],{"class":5423},[321,46566,377],{"class":327},[321,46568,403],{"class":380},[321,46570,710],{"class":331},[321,46572,31074],{"class":5423},[321,46574,377],{"class":327},[321,46576,409],{"class":380},[321,46578,710],{"class":331},[321,46580,31028],{"class":5423},[321,46582,377],{"class":327},[321,46584,549],{"class":380},[321,46586,338],{"class":331},[321,46588,46589],{"class":323,"line":8184},[321,46590,38271],{"class":331},[321,46592,46593,46595,46597,46599],{"class":323,"line":8190},[321,46594,30990],{"class":380},[321,46596,42249],{"class":331},[321,46598,377],{"class":327},[321,46600,38154],{"class":331},[321,46602,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627],{"class":323,"line":8217},[321,46604,38159],{"class":331},[321,46606,31001],{"class":5423},[321,46608,377],{"class":327},[321,46610,535],{"class":380},[321,46612,710],{"class":331},[321,46614,31010],{"class":5423},[321,46616,377],{"class":327},[321,46618,535],{"class":380},[321,46620,710],{"class":331},[321,46622,31019],{"class":5423},[321,46624,377],{"class":327},[321,46626,549],{"class":380},[321,46628,38192],{"class":331},[321,46630,46631],{"class":323,"line":8222},[321,46632,38197],{"class":331},[321,46634,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667],{"class":323,"line":8228},[321,46636,38159],{"class":331},[321,46638,31001],{"class":5423},[321,46640,377],{"class":327},[321,46642,535],{"class":380},[321,46644,710],{"class":331},[321,46646,31010],{"class":5423},[321,46648,377],{"class":327},[321,46650,42304],{"class":380},[321,46652,710],{"class":331},[321,46654,31019],{"class":5423},[321,46656,377],{"class":327},[321,46658,403],{"class":380},[321,46660,710],{"class":331},[321,46662,31028],{"class":5423},[321,46664,377],{"class":327},[321,46666,549],{"class":380},[321,46668,38192],{"class":331},[321,46670,46671],{"class":323,"line":8240},[321,46672,38197],{"class":331},[321,46674,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699],{"class":323,"line":8252},[321,46676,38242],{"class":331},[321,46678,31019],{"class":5423},[321,46680,377],{"class":327},[321,46682,403],{"class":380},[321,46684,710],{"class":331},[321,46686,31074],{"class":5423},[321,46688,377],{"class":327},[321,46690,409],{"class":380},[321,46692,710],{"class":331},[321,46694,31028],{"class":5423},[321,46696,377],{"class":327},[321,46698,549],{"class":380},[321,46700,338],{"class":331},[321,46702,46703],{"class":323,"line":8264},[321,46704,38271],{"class":331},[321,46706,46707,46709,46711,46713],{"class":323,"line":9923},[321,46708,30990],{"class":380},[321,46710,42365],{"class":331},[321,46712,377],{"class":327},[321,46714,38154],{"class":331},[321,46716,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745],{"class":323,"line":9948},[321,46718,42374],{"class":331},[321,46720,42304],{"class":380},[321,46722,710],{"class":331},[321,46724,535],{"class":380},[321,46726,42383],{"class":331},[321,46728,541],{"class":380},[321,46730,710],{"class":331},[321,46732,32215],{"class":380},[321,46734,42392],{"class":331},[321,46736,933],{"class":380},[321,46738,710],{"class":331},[321,46740,529],{"class":380},[321,46742,42401],{"class":331},[321,46744,529],{"class":380},[321,46746,38192],{"class":331},[321,46748,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777],{"class":323,"line":9971},[321,46750,42374],{"class":331},[321,46752,35015],{"class":380},[321,46754,710],{"class":331},[321,46756,32215],{"class":380},[321,46758,42383],{"class":331},[321,46760,32215],{"class":380},[321,46762,710],{"class":331},[321,46764,42304],{"class":380},[321,46766,42392],{"class":331},[321,46768,529],{"class":380},[321,46770,710],{"class":331},[321,46772,541],{"class":380},[321,46774,42401],{"class":331},[321,46776,535],{"class":380},[321,46778,38192],{"class":331},[321,46780,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805],{"class":323,"line":9995},[321,46782,38242],{"class":331},[321,46784,31019],{"class":5423},[321,46786,377],{"class":327},[321,46788,403],{"class":380},[321,46790,710],{"class":331},[321,46792,31074],{"class":5423},[321,46794,377],{"class":327},[321,46796,409],{"class":380},[321,46798,710],{"class":331},[321,46800,31028],{"class":5423},[321,46802,377],{"class":327},[321,46804,549],{"class":380},[321,46806,338],{"class":331},[321,46808,46809],{"class":323,"line":10000},[321,46810,38271],{"class":331},[321,46812,46813,46815,46817,46819],{"class":323,"line":10005},[321,46814,30990],{"class":380},[321,46816,42476],{"class":331},[321,46818,377],{"class":327},[321,46820,38154],{"class":331},[321,46822,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851],{"class":323,"line":10010},[321,46824,42374],{"class":331},[321,46826,42487],{"class":380},[321,46828,710],{"class":331},[321,46830,42304],{"class":380},[321,46832,42383],{"class":331},[321,46834,541],{"class":380},[321,46836,710],{"class":331},[321,46838,42500],{"class":380},[321,46840,42392],{"class":331},[321,46842,933],{"class":380},[321,46844,710],{"class":331},[321,46846,939],{"class":380},[321,46848,42401],{"class":331},[321,46850,535],{"class":380},[321,46852,38192],{"class":331},[321,46854,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883],{"class":323,"line":10019},[321,46856,42374],{"class":331},[321,46858,38602],{"class":380},[321,46860,710],{"class":331},[321,46862,21255],{"class":380},[321,46864,42383],{"class":331},[321,46866,950],{"class":380},[321,46868,710],{"class":331},[321,46870,31646],{"class":380},[321,46872,42392],{"class":331},[321,46874,1132],{"class":380},[321,46876,710],{"class":331},[321,46878,535],{"class":380},[321,46880,42401],{"class":331},[321,46882,535],{"class":380},[321,46884,38192],{"class":331},[321,46886,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915],{"class":323,"line":10024},[321,46888,42374],{"class":331},[321,46890,38602],{"class":380},[321,46892,710],{"class":331},[321,46894,32215],{"class":380},[321,46896,42383],{"class":331},[321,46898,32215],{"class":380},[321,46900,710],{"class":331},[321,46902,35015],{"class":380},[321,46904,42392],{"class":331},[321,46906,1132],{"class":380},[321,46908,710],{"class":331},[321,46910,535],{"class":380},[321,46912,42401],{"class":331},[321,46914,535],{"class":380},[321,46916,38192],{"class":331},[321,46918,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943,46945,46947],{"class":323,"line":10030},[321,46920,42374],{"class":331},[321,46922,38602],{"class":380},[321,46924,710],{"class":331},[321,46926,950],{"class":380},[321,46928,42383],{"class":331},[321,46930,32215],{"class":380},[321,46932,710],{"class":331},[321,46934,42597],{"class":380},[321,46936,42392],{"class":331},[321,46938,529],{"class":380},[321,46940,710],{"class":331},[321,46942,535],{"class":380},[321,46944,42401],{"class":331},[321,46946,535],{"class":380},[321,46948,38192],{"class":331},[321,46950,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971,46973,46975,46977,46979],{"class":323,"line":10051},[321,46952,42374],{"class":331},[321,46954,42618],{"class":380},[321,46956,710],{"class":331},[321,46958,35015],{"class":380},[321,46960,42383],{"class":331},[321,46962,21255],{"class":380},[321,46964,710],{"class":331},[321,46966,42631],{"class":380},[321,46968,42392],{"class":331},[321,46970,529],{"class":380},[321,46972,710],{"class":331},[321,46974,32215],{"class":380},[321,46976,42401],{"class":331},[321,46978,32215],{"class":380},[321,46980,38192],{"class":331},[321,46982,46983,46985,46987,46989,46991,46993,46995,46997,46999,47001,47003,47005,47007],{"class":323,"line":10057},[321,46984,38242],{"class":331},[321,46986,31019],{"class":5423},[321,46988,377],{"class":327},[321,46990,403],{"class":380},[321,46992,710],{"class":331},[321,46994,31074],{"class":5423},[321,46996,377],{"class":327},[321,46998,409],{"class":380},[321,47000,710],{"class":331},[321,47002,31028],{"class":5423},[321,47004,377],{"class":327},[321,47006,549],{"class":380},[321,47008,338],{"class":331},[321,47010,47011],{"class":323,"line":10071},[321,47012,38271],{"class":331},[321,47014,47015,47017,47019,47021],{"class":323,"line":10077},[321,47016,30990],{"class":380},[321,47018,42684],{"class":331},[321,47020,377],{"class":327},[321,47022,38154],{"class":331},[321,47024,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053],{"class":323,"line":10104},[321,47026,42374],{"class":331},[321,47028,42695],{"class":380},[321,47030,710],{"class":331},[321,47032,35015],{"class":380},[321,47034,42383],{"class":331},[321,47036,21255],{"class":380},[321,47038,710],{"class":331},[321,47040,42631],{"class":380},[321,47042,42392],{"class":331},[321,47044,529],{"class":380},[321,47046,710],{"class":331},[321,47048,32215],{"class":380},[321,47050,42401],{"class":331},[321,47052,32215],{"class":380},[321,47054,38192],{"class":331},[321,47056,47057,47059,47061,47063,47065,47067,47069,47071,47073,47075,47077,47079,47081,47083,47085],{"class":323,"line":10113},[321,47058,42374],{"class":331},[321,47060,42695],{"class":380},[321,47062,710],{"class":331},[321,47064,35085],{"class":380},[321,47066,42383],{"class":331},[321,47068,42304],{"class":380},[321,47070,710],{"class":331},[321,47072,35085],{"class":380},[321,47074,42392],{"class":331},[321,47076,939],{"class":380},[321,47078,710],{"class":331},[321,47080,32215],{"class":380},[321,47082,42401],{"class":331},[321,47084,32215],{"class":380},[321,47086,38192],{"class":331},[321,47088,47089,47091,47093,47095,47097],{"class":323,"line":10119},[321,47090,42758],{"class":331},[321,47092,549],{"class":380},[321,47094,710],{"class":331},[321,47096,549],{"class":380},[321,47098,42767],{"class":331},[321,47100,47101],{"class":323,"line":10127},[321,47102,38935],{"class":331},[321,47104,47105,47107,47109,47111,47113],{"class":323,"line":10132},[321,47106,38940],{"class":331},[321,47108,42778],{"class":380},[321,47110,710],{"class":331},[321,47112,409],{"class":380},[321,47114,338],{"class":331},[321,47116,47117],{"class":323,"line":16811},[321,47118,38271],{"class":331},[321,47120,47121],{"class":323,"line":16817},[321,47122,42793],{"class":390},[321,47124,47125,47127,47129,47131,47133],{"class":323,"line":16840},[321,47126,3609],{"class":327},[321,47128,39013],{"class":331},[321,47130,26188],{"class":327},[321,47132,39018],{"class":380},[321,47134,39021],{"class":331},[321,47136,47137,47139,47141],{"class":323,"line":16846},[321,47138,4848],{"class":327},[321,47140,39033],{"class":380},[321,47142,39036],{"class":331},[321,47144,47145,47147,47149,47151,47153,47155,47157,47159,47161],{"class":323,"line":16869},[321,47146,39046],{"class":331},[321,47148,42820],{"class":5423},[321,47150,377],{"class":327},[321,47152,42825],{"class":436},[321,47154,710],{"class":331},[321,47156,39049],{"class":5423},[321,47158,377],{"class":327},[321,47160,39054],{"class":436},[321,47162,338],{"class":331},[321,47164,47165],{"class":323,"line":16883},[321,47166,42840],{"class":390},[321,47168,47169],{"class":323,"line":16903},[321,47170,42845],{"class":390},[321,47172,47173],{"class":323,"line":16909},[321,47174,42850],{"class":390},[321,47176,47177],{"class":323,"line":16920},[321,47178,42855],{"class":390},[321,47180,47181],{"class":323,"line":16943},[321,47182,42860],{"class":390},[321,47184,47185],{"class":323,"line":16965},[321,47186,42865],{"class":390},[321,47188,47189,47191,47193,47195,47197,47199],{"class":323,"line":16970},[321,47190,39066],{"class":327},[321,47192,39069],{"class":331},[321,47194,39072],{"class":327},[321,47196,39075],{"class":327},[321,47198,39078],{"class":380},[321,47200,3945],{"class":331},[321,47202,47203,47205,47207],{"class":323,"line":16976},[321,47204,39090],{"class":331},[321,47206,523],{"class":380},[321,47208,338],{"class":331},[321,47210,47211,47213,47215],{"class":323,"line":16990},[321,47212,42892],{"class":327},[321,47214,39033],{"class":380},[321,47216,39109],{"class":331},[321,47218,47219,47221,47223,47225,47227],{"class":323,"line":17003},[321,47220,42901],{"class":331},[321,47222,523],{"class":380},[321,47224,710],{"class":331},[321,47226,39131],{"class":380},[321,47228,338],{"class":331},[321,47230,47231,47233,47235,47237,47239,47241],{"class":323,"line":17008},[321,47232,42914],{"class":327},[321,47234,39069],{"class":331},[321,47236,39072],{"class":327},[321,47238,39075],{"class":327},[321,47240,39078],{"class":380},[321,47242,3945],{"class":331},[321,47244,47245,47247,47249],{"class":323,"line":17022},[321,47246,42929],{"class":331},[321,47248,523],{"class":380},[321,47250,338],{"class":331},[321,47252,47253],{"class":323,"line":17027},[321,47254,35310],{"class":390},[321,47256,47257,47259,47261],{"class":323,"line":17033},[321,47258,30946],{"class":327},[321,47260,31238],{"class":2169},[321,47262,31241],{"class":331},[321,47264,47265,47267,47269,47271],{"class":323,"line":17038},[321,47266,31246],{"class":331},[321,47268,377],{"class":327},[321,47270,30968],{"class":380},[321,47272,42956],{"class":331},[321,47274,47275,47277,47279,47281],{"class":323,"line":17052},[321,47276,31246],{"class":331},[321,47278,377],{"class":327},[321,47280,30968],{"class":380},[321,47282,42967],{"class":331},[321,47284,47285,47287,47289,47291],{"class":323,"line":17057},[321,47286,31246],{"class":331},[321,47288,377],{"class":327},[321,47290,30968],{"class":380},[321,47292,42978],{"class":331},[321,47294,47295,47297,47299,47301],{"class":323,"line":17062},[321,47296,31246],{"class":331},[321,47298,377],{"class":327},[321,47300,30968],{"class":380},[321,47302,42989],{"class":331},[321,47304,47305,47307,47309,47311],{"class":323,"line":17076},[321,47306,31246],{"class":331},[321,47308,377],{"class":327},[321,47310,30968],{"class":380},[321,47312,43000],{"class":331},[321,47314,47315,47317],{"class":323,"line":17088},[321,47316,14959],{"class":327},[321,47318,31354],{"class":331},[321,47320,47321],{"class":323,"line":17093},[321,47322,2606],{"emptyLinePlaceholder":251},[321,47324,47325],{"class":323,"line":17106},[321,47326,43015],{"class":390},[321,47328,47329,47331,47333,47335,47337],{"class":323,"line":17111},[321,47330,1737],{"class":327},[321,47332,31365],{"class":380},[321,47334,3155],{"class":327},[321,47336,31370],{"class":436},[321,47338,3945],{"class":331},[321,47340,47341,47343,47345,47347,47349,47351,47353,47355,47357],{"class":323,"line":17116},[321,47342,31382],{"class":331},[321,47344,377],{"class":327},[321,47346,30596],{"class":331},[321,47348,31389],{"class":436},[321,47350,1910],{"class":327},[321,47352,31394],{"class":331},[321,47354,1907],{"class":327},[321,47356,30621],{"class":436},[321,47358,338],{"class":331},[321,47360,47361,47363,47365],{"class":323,"line":17121},[321,47362,31434],{"class":331},[321,47364,377],{"class":327},[321,47366,43056],{"class":331},[321,47368,47369,47371,47373,47375,47377,47379,47381,47383],{"class":323,"line":17134},[321,47370,31444],{"class":380},[321,47372,31447],{"class":331},[321,47374,549],{"class":380},[321,47376,710],{"class":331},[321,47378,31646],{"class":380},[321,47380,710],{"class":331},[321,47382,31646],{"class":380},[321,47384,31460],{"class":331},[22205,47386,47388],{"id":47387},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47390,47391],{},"计算图片的均值与方差，用于训练中归一化处理操作",[312,47393,47395],{"className":30523,"code":47394,"language":30525,"meta":30,"style":30},"# 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",[318,47396,47397,47402,47415,47420,47426,47431,47441,47445,47450,47460,47464,47469,47479,47496,47500,47505,47517,47529,47560,47569,47579,47589,47593,47598,47613,47617,47622,47627,47632,47642,47647,47672,47676,47681,47696,47700,47713,47717,47722,47727,47732,47737,47742,47752,47762,47785,47793,47801,47809,47813,47825,47829,47834,47838,47842,47849,47869,47893,47900,47914,47919,47924,47928,47942,47946,47958],{"__ignoreMap":30},[321,47398,47399],{"class":323,"line":324},[321,47400,47401],{"class":390},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[321,47403,47404,47406,47409,47412],{"class":323,"line":167},[321,47405,30882],{"class":327},[321,47407,47408],{"class":380}," PIL",[321,47410,47411],{"class":327}," import",[321,47413,47414],{"class":331}," Image\n",[321,47416,47417],{"class":323,"line":200},[321,47418,47419],{"class":390},"# os 用来处理文件夹和文件路径\n",[321,47421,47422,47424],{"class":323,"line":1401},[321,47423,30537],{"class":327},[321,47425,45450],{"class":331},[321,47427,47428],{"class":323,"line":1407},[321,47429,47430],{"class":390},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[321,47432,47433,47435,47437,47439],{"class":323,"line":1421},[321,47434,30537],{"class":327},[321,47436,31525],{"class":331},[321,47438,31528],{"class":327},[321,47440,31531],{"class":331},[321,47442,47443],{"class":323,"line":1427},[321,47444,2606],{"emptyLinePlaceholder":251},[321,47446,47447],{"class":323,"line":1518},[321,47448,47449],{"class":390},"# 文件夹路径，包含所有图片文件\n",[321,47451,47452,47455,47457],{"class":323,"line":1524},[321,47453,47454],{"class":331},"folder_path ",[321,47456,377],{"class":327},[321,47458,47459],{"class":436}," 'data_cat_dog'\n",[321,47461,47462],{"class":323,"line":1536},[321,47463,2606],{"emptyLinePlaceholder":251},[321,47465,47466],{"class":323,"line":1818},[321,47467,47468],{"class":390},"# 初始化累积变量\n",[321,47470,47471,47474,47476],{"class":323,"line":1823},[321,47472,47473],{"class":331},"total_pixels ",[321,47475,377],{"class":327},[321,47477,47478],{"class":380}," 0\n",[321,47480,47481,47484,47486,47489,47491,47493],{"class":323,"line":1829},[321,47482,47483],{"class":331},"sum_normalized_pixel_values ",[321,47485,377],{"class":327},[321,47487,47488],{"class":331}," np.zeros(",[321,47490,403],{"class":380},[321,47492,45953],{"class":331},[321,47494,47495],{"class":390},"# 如果是RGB图像，需要三个通道的均值和方差\n",[321,47497,47498],{"class":323,"line":1834},[321,47499,2606],{"emptyLinePlaceholder":251},[321,47501,47502],{"class":323,"line":1848},[321,47503,47504],{"class":390},"# 遍历文件夹中的图片文件\n",[321,47506,47507,47509,47512,47514],{"class":323,"line":1853},[321,47508,3231],{"class":327},[321,47510,47511],{"class":331}," root, dirs, files ",[321,47513,26188],{"class":327},[321,47515,47516],{"class":331}," os.walk(folder_path):\n",[321,47518,47519,47521,47524,47526],{"class":323,"line":1859},[321,47520,3407],{"class":327},[321,47522,47523],{"class":331}," filename ",[321,47525,26188],{"class":327},[321,47527,47528],{"class":331}," files:\n",[321,47530,47531,47533,47536,47539,47541,47544,47546,47549,47551,47554,47557],{"class":323,"line":1880},[321,47532,2703],{"class":327},[321,47534,47535],{"class":331}," filename.endswith((",[321,47537,47538],{"class":436},"'.jpg'",[321,47540,12642],{"class":331},[321,47542,47543],{"class":436},"'.jpeg'",[321,47545,12642],{"class":331},[321,47547,47548],{"class":436},"'.png'",[321,47550,12642],{"class":331},[321,47552,47553],{"class":436},"'.bmp'",[321,47555,47556],{"class":331},")):  ",[321,47558,47559],{"class":390},"# 可根据实际情况添加其他格式\n",[321,47561,47562,47564,47566],{"class":323,"line":1885},[321,47563,45818],{"class":331},[321,47565,377],{"class":327},[321,47567,47568],{"class":331}," os.path.join(root, filename)\n",[321,47570,47571,47574,47576],{"class":323,"line":1899},[321,47572,47573],{"class":331},"            image ",[321,47575,377],{"class":327},[321,47577,47578],{"class":331}," Image.open(image_path)\n",[321,47580,47581,47584,47586],{"class":323,"line":1904},[321,47582,47583],{"class":331},"            image_array ",[321,47585,377],{"class":327},[321,47587,47588],{"class":331}," np.array(image)\n",[321,47590,47591],{"class":323,"line":1933},[321,47592,2606],{"emptyLinePlaceholder":251},[321,47594,47595],{"class":323,"line":1938},[321,47596,47597],{"class":390},"            # 归一化像素值到0-1之间\n",[321,47599,47600,47603,47605,47608,47610],{"class":323,"line":1955},[321,47601,47602],{"class":331},"            normalized_image_array ",[321,47604,377],{"class":327},[321,47606,47607],{"class":331}," image_array ",[321,47609,916],{"class":327},[321,47611,47612],{"class":380}," 255.0\n",[321,47614,47615],{"class":323,"line":1960},[321,47616,2606],{"emptyLinePlaceholder":251},[321,47618,47619],{"class":323,"line":1965},[321,47620,47621],{"class":390},"            # print(image_path)\n",[321,47623,47624],{"class":323,"line":1970},[321,47625,47626],{"class":390},"            # print(normalized_image_array.shape)\n",[321,47628,47629],{"class":323,"line":1984},[321,47630,47631],{"class":390},"            # 累积归一化后的像素值和像素数量\n",[321,47633,47634,47637,47639],{"class":323,"line":1989},[321,47635,47636],{"class":331},"            total_pixels ",[321,47638,9684],{"class":327},[321,47640,47641],{"class":331}," normalized_image_array.size\n",[321,47643,47644],{"class":323,"line":2783},[321,47645,47646],{"class":390},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[321,47648,47649,47652,47654,47657,47660,47662,47664,47666,47668,47670],{"class":323,"line":2797},[321,47650,47651],{"class":331},"            sum_normalized_pixel_values ",[321,47653,9684],{"class":327},[321,47655,47656],{"class":331}," np.sum(normalized_image_array, ",[321,47658,47659],{"class":5423},"axis",[321,47661,377],{"class":327},[321,47663,332],{"class":331},[321,47665,523],{"class":380},[321,47667,12642],{"class":331},[321,47669,549],{"class":380},[321,47671,30642],{"class":331},[321,47673,47674],{"class":323,"line":2805},[321,47675,2606],{"emptyLinePlaceholder":251},[321,47677,47678],{"class":323,"line":2810},[321,47679,47680],{"class":390},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[321,47682,47683,47686,47688,47691,47693],{"class":323,"line":2816},[321,47684,47685],{"class":331},"mean ",[321,47687,377],{"class":327},[321,47689,47690],{"class":331}," sum_normalized_pixel_values ",[321,47692,916],{"class":327},[321,47694,47695],{"class":331}," total_pixels\n",[321,47697,47698],{"class":323,"line":2822},[321,47699,2606],{"emptyLinePlaceholder":251},[321,47701,47702,47705,47707,47709,47711],{"class":323,"line":2827},[321,47703,47704],{"class":331},"sum_squared_diff ",[321,47706,377],{"class":327},[321,47708,47488],{"class":331},[321,47710,403],{"class":380},[321,47712,338],{"class":331},[321,47714,47715],{"class":323,"line":8155},[321,47716,2606],{"emptyLinePlaceholder":251},[321,47718,47719],{"class":323,"line":8179},[321,47720,47721],{"class":390},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[321,47723,47724],{"class":323,"line":8184},[321,47725,47726],{"class":390},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[321,47728,47729],{"class":323,"line":8190},[321,47730,47731],{"class":390},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[321,47733,47734],{"class":323,"line":8217},[321,47735,47736],{"class":390},"# Image.open(image_path)：打开图片\n",[321,47738,47739],{"class":323,"line":8222},[321,47740,47741],{"class":390},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[321,47743,47744,47746,47748,47750],{"class":323,"line":8228},[321,47745,3231],{"class":327},[321,47747,47511],{"class":331},[321,47749,26188],{"class":327},[321,47751,47516],{"class":331},[321,47753,47754,47756,47758,47760],{"class":323,"line":8240},[321,47755,3407],{"class":327},[321,47757,47523],{"class":331},[321,47759,26188],{"class":327},[321,47761,47528],{"class":331},[321,47763,47764,47766,47768,47770,47772,47774,47776,47778,47780,47782],{"class":323,"line":8252},[321,47765,2703],{"class":327},[321,47767,47535],{"class":331},[321,47769,47538],{"class":436},[321,47771,12642],{"class":331},[321,47773,47543],{"class":436},[321,47775,12642],{"class":331},[321,47777,47548],{"class":436},[321,47779,12642],{"class":331},[321,47781,47553],{"class":436},[321,47783,47784],{"class":331},")):\n",[321,47786,47787,47789,47791],{"class":323,"line":8264},[321,47788,45818],{"class":331},[321,47790,377],{"class":327},[321,47792,47568],{"class":331},[321,47794,47795,47797,47799],{"class":323,"line":9923},[321,47796,47573],{"class":331},[321,47798,377],{"class":327},[321,47800,47578],{"class":331},[321,47802,47803,47805,47807],{"class":323,"line":9948},[321,47804,47583],{"class":331},[321,47806,377],{"class":327},[321,47808,47588],{"class":331},[321,47810,47811],{"class":323,"line":9971},[321,47812,47597],{"class":390},[321,47814,47815,47817,47819,47821,47823],{"class":323,"line":9995},[321,47816,47602],{"class":331},[321,47818,377],{"class":327},[321,47820,47607],{"class":331},[321,47822,916],{"class":327},[321,47824,47612],{"class":380},[321,47826,47827],{"class":323,"line":10000},[321,47828,47626],{"class":390},[321,47830,47831],{"class":323,"line":10005},[321,47832,47833],{"class":390},"            # print(mean.shape)\n",[321,47835,47836],{"class":323,"line":10010},[321,47837,47621],{"class":390},[321,47839,47840],{"class":323,"line":10019},[321,47841,2606],{"emptyLinePlaceholder":251},[321,47843,47844,47847],{"class":323,"line":10024},[321,47845,47846],{"class":327},"            try",[321,47848,3945],{"class":331},[321,47850,47851,47854,47856,47859,47861,47864,47866],{"class":323,"line":10030},[321,47852,47853],{"class":331},"                diff ",[321,47855,377],{"class":327},[321,47857,47858],{"class":331}," (normalized_image_array ",[321,47860,864],{"class":327},[321,47862,47863],{"class":331}," mean) ",[321,47865,10868],{"class":327},[321,47867,47868],{"class":380}," 2\n",[321,47870,47871,47874,47876,47879,47881,47883,47885,47887,47889,47891],{"class":323,"line":10051},[321,47872,47873],{"class":331},"                sum_squared_diff ",[321,47875,9684],{"class":327},[321,47877,47878],{"class":331}," np.sum(diff, ",[321,47880,47659],{"class":5423},[321,47882,377],{"class":327},[321,47884,332],{"class":331},[321,47886,523],{"class":380},[321,47888,12642],{"class":331},[321,47890,549],{"class":380},[321,47892,30642],{"class":331},[321,47894,47895,47898],{"class":323,"line":10057},[321,47896,47897],{"class":327},"            except",[321,47899,3945],{"class":331},[321,47901,47902,47905,47907,47909,47912],{"class":323,"line":10071},[321,47903,47904],{"class":380},"                print",[321,47906,332],{"class":331},[321,47908,384],{"class":327},[321,47910,47911],{"class":436},"\"捕获到自定义异常\"",[321,47913,338],{"class":331},[321,47915,47916],{"class":323,"line":10077},[321,47917,47918],{"class":390},"            # diff = (normalized_image_array - mean) ** 2\n",[321,47920,47921],{"class":323,"line":10104},[321,47922,47923],{"class":390},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[321,47925,47926],{"class":323,"line":10113},[321,47927,2606],{"emptyLinePlaceholder":251},[321,47929,47930,47933,47935,47938,47940],{"class":323,"line":10119},[321,47931,47932],{"class":331},"variance ",[321,47934,377],{"class":327},[321,47936,47937],{"class":331}," sum_squared_diff ",[321,47939,916],{"class":327},[321,47941,47695],{"class":331},[321,47943,47944],{"class":323,"line":10127},[321,47945,2606],{"emptyLinePlaceholder":251},[321,47947,47948,47950,47952,47955],{"class":323,"line":10132},[321,47949,30560],{"class":380},[321,47951,332],{"class":331},[321,47953,47954],{"class":436},"\"Mean:\"",[321,47956,47957],{"class":331},", mean)\n",[321,47959,47960,47962,47964,47967],{"class":323,"line":16811},[321,47961,30560],{"class":380},[321,47963,332],{"class":331},[321,47965,47966],{"class":436},"\"Variance:\"",[321,47968,47969],{"class":331},", variance)\n",[312,47971,47973],{"className":30523,"code":47972,"language":30525,"meta":30,"style":30},"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",[318,47974,47975,47981,47987,47997,48003,48013,48027,48037,48047,48057,48061,48071,48081,48085,48089,48097,48102,48107,48126,48130,48135,48140,48145,48150,48191,48196,48206,48211,48224,48229,48234,48239,48244,48249,48253,48258,48263,48285,48289,48321,48335,48345,48355,48359,48369,48383,48393,48403,48413,48419,48423,48427,48431,48435,48439,48447,48467,48471,48475,48479,48483,48499,48503,48507,48515,48519,48523,48531,48535,48539,48543,48551,48555,48559,48563,48571,48575,48583,48587,48595,48599,48607,48611,48619,48623,48627,48635,48639,48643,48655,48679,48693,48697,48701,48705,48713,48717,48725,48729,48737,48741,48749,48753,48761,48765,48773,48777,48789,48793,48801,48805,48813,48817,48821,48825,48829,48837,48841,48857,48861,48869,48873,48877,48881,48885,48889,48893,48897,48913,48917,48929,48933,48945,48949,48961,48965,48973,48977,48985,48989,48993,48997,49003,49007,49015,49019,49035,49039,49047,49051,49067,49079,49083,49095,49099,49103,49111,49115,49119,49127,49131,49139,49143,49151,49155,49159,49201,49243,49247,49251,49267,49271,49287,49291,49295,49303,49307,49311,49323,49361,49365,49369,49377,49381,49395,49405,49411,49417,49423,49429,49433,49437,49443,49447,49451,49459,49463,49481,49485,49489,49493,49509,49513,49517,49521,49525,49529,49549,49569,49573,49577,49581,49589,49597,49601,49617,49637,49657,49661,49666,49675,49684,49689,49694,49699,49712,49717,49726,49735,49752],{"__ignoreMap":30},[321,47976,47977,47979],{"class":323,"line":324},[321,47978,30537],{"class":327},[321,47980,31967],{"class":331},[321,47982,47983,47985],{"class":323,"line":167},[321,47984,30537],{"class":327},[321,47986,31974],{"class":331},[321,47988,47989,47991,47993,47995],{"class":323,"line":200},[321,47990,30537],{"class":327},[321,47992,31985],{"class":331},[321,47994,31528],{"class":327},[321,47996,31990],{"class":331},[321,47998,47999,48001],{"class":323,"line":1401},[321,48000,30537],{"class":327},[321,48002,30540],{"class":331},[321,48004,48005,48007,48009,48011],{"class":323,"line":1407},[321,48006,30882],{"class":327},[321,48008,31560],{"class":331},[321,48010,30537],{"class":327},[321,48012,32007],{"class":331},[321,48014,48015,48017,48019,48021,48024],{"class":323,"line":1421},[321,48016,30882],{"class":327},[321,48018,31513],{"class":331},[321,48020,30537],{"class":327},[321,48022,48023],{"class":331}," ImageFolder ",[321,48025,48026],{"class":390},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[321,48028,48029,48031,48033,48035],{"class":323,"line":1427},[321,48030,30882],{"class":327},[321,48032,31543],{"class":331},[321,48034,30537],{"class":327},[321,48036,31548],{"class":331},[321,48038,48039,48041,48043,48045],{"class":323,"line":1518},[321,48040,30537],{"class":327},[321,48042,31560],{"class":331},[321,48044,31528],{"class":327},[321,48046,31565],{"class":331},[321,48048,48049,48051,48053,48055],{"class":323,"line":1524},[321,48050,30537],{"class":327},[321,48052,31577],{"class":331},[321,48054,31528],{"class":327},[321,48056,31582],{"class":331},[321,48058,48059],{"class":323,"line":1536},[321,48060,32052],{"class":390},[321,48062,48063,48065,48067,48069],{"class":323,"line":1818},[321,48064,30882],{"class":327},[321,48066,32059],{"class":331},[321,48068,30537],{"class":327},[321,48070,43176],{"class":331},[321,48072,48073,48075,48077,48079],{"class":323,"line":1823},[321,48074,30882],{"class":327},[321,48076,30885],{"class":331},[321,48078,30537],{"class":327},[321,48080,30890],{"class":331},[321,48082,48083],{"class":323,"line":1829},[321,48084,2606],{"emptyLinePlaceholder":251},[321,48086,48087],{"class":323,"line":1834},[321,48088,32087],{"class":390},[321,48090,48091,48093,48095],{"class":323,"line":1848},[321,48092,32092],{"class":327},[321,48094,32095],{"class":2169},[321,48096,32098],{"class":331},[321,48098,48099],{"class":323,"line":1853},[321,48100,48101],{"class":390},"    # 导入自己的数据集，并进行数据处理\n",[321,48103,48104],{"class":323,"line":1859},[321,48105,48106],{"class":390},"    # 定义数据集的路径\n",[321,48108,48109,48112,48114,48116,48118,48120,48124],{"class":323,"line":1880},[321,48110,48111],{"class":380},"    ROOT_PATH",[321,48113,377],{"class":327},[321,48115,1002],{"class":327},[321,48117,583],{"class":436},[321,48119,890],{"class":380},[321,48121,48123],{"class":48122},"sA_wV","\u002Fdata\u002Ftrain",[321,48125,25278],{"class":436},[321,48127,48128],{"class":323,"line":1885},[321,48129,2606],{"emptyLinePlaceholder":251},[321,48131,48132],{"class":323,"line":1899},[321,48133,48134],{"class":390},"    # 定义归一化方法\n",[321,48136,48137],{"class":323,"line":1904},[321,48138,48139],{"class":390},"    # 这里需要先计算一下数据集的均值和方差\n",[321,48141,48142],{"class":323,"line":1933},[321,48143,48144],{"class":390},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[321,48146,48147],{"class":323,"line":1938},[321,48148,48149],{"class":390},"    # 第一个参数是均值，第二个参数是方差\n",[321,48151,48152,48155,48157,48160,48163,48165,48168,48170,48173,48176,48179,48181,48184,48186,48189],{"class":323,"line":1955},[321,48153,48154],{"class":331},"    normalize",[321,48156,377],{"class":327},[321,48158,48159],{"class":331},"transforms.Normalize([",[321,48161,48162],{"class":380},"0.162",[321,48164,710],{"class":331},[321,48166,48167],{"class":380},"0.151",[321,48169,710],{"class":331},[321,48171,48172],{"class":380},"0.138",[321,48174,48175],{"class":331},"],[",[321,48177,48178],{"class":380},"0.058",[321,48180,710],{"class":331},[321,48182,48183],{"class":380},"0.052",[321,48185,710],{"class":331},[321,48187,48188],{"class":380},"0.048",[321,48190,4863],{"class":331},[321,48192,48193],{"class":323,"line":1960},[321,48194,48195],{"class":390},"    # 定义数据集处理方法变量\n",[321,48197,48198,48201,48203],{"class":323,"line":1965},[321,48199,48200],{"class":331},"    train_transform",[321,48202,377],{"class":327},[321,48204,48205],{"class":331},"transforms.Compose([\n",[321,48207,48208],{"class":323,"line":1970},[321,48209,48210],{"class":390},"        # 调整图像大小为224*224\n",[321,48212,48213,48216,48218,48220,48222],{"class":323,"line":1984},[321,48214,48215],{"class":331},"        transforms.Resize((",[321,48217,31646],{"class":380},[321,48219,710],{"class":331},[321,48221,31646],{"class":380},[321,48223,42767],{"class":331},[321,48225,48226],{"class":323,"line":1989},[321,48227,48228],{"class":390},"        # 将图像转换为张量\n",[321,48230,48231],{"class":323,"line":2783},[321,48232,48233],{"class":331},"        transforms.ToTensor(),\n",[321,48235,48236],{"class":323,"line":2797},[321,48237,48238],{"class":331},"        normalize])\n",[321,48240,48241],{"class":323,"line":2805},[321,48242,48243],{"class":390},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[321,48245,48246],{"class":323,"line":2810},[321,48247,48248],{"class":390},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[321,48250,48251],{"class":323,"line":2816},[321,48252,2606],{"emptyLinePlaceholder":251},[321,48254,48255],{"class":323,"line":2822},[321,48256,48257],{"class":390},"    # 加载数据集\n",[321,48259,48260],{"class":323,"line":2827},[321,48261,48262],{"class":390},"    # 传入数据集路径与处理方法\n",[321,48264,48265,48267,48269,48272,48275,48277,48280,48282],{"class":323,"line":8155},[321,48266,32103],{"class":331},[321,48268,377],{"class":327},[321,48270,48271],{"class":331},"ImageFolder(",[321,48273,48274],{"class":380},"ROOT_PATH",[321,48276,710],{"class":331},[321,48278,48279],{"class":5423},"transform",[321,48281,377],{"class":327},[321,48283,48284],{"class":331},"train_transform)\n",[321,48286,48287],{"class":323,"line":8179},[321,48288,2606],{"emptyLinePlaceholder":251},[321,48290,48291,48293,48295,48297,48299,48301,48303,48305,48307,48309,48311,48313,48315,48317,48319],{"class":323,"line":8184},[321,48292,32155],{"class":331},[321,48294,377],{"class":327},[321,48296,32160],{"class":331},[321,48298,32163],{"class":380},[321,48300,332],{"class":331},[321,48302,32168],{"class":380},[321,48304,787],{"class":327},[321,48306,7565],{"class":380},[321,48308,32175],{"class":331},[321,48310,32163],{"class":380},[321,48312,332],{"class":331},[321,48314,32182],{"class":380},[321,48316,787],{"class":327},[321,48318,7565],{"class":380},[321,48320,32189],{"class":331},[321,48322,48323,48325,48327,48329,48331,48333],{"class":323,"line":8190},[321,48324,32194],{"class":331},[321,48326,377],{"class":327},[321,48328,32199],{"class":331},[321,48330,31682],{"class":5423},[321,48332,377],{"class":327},[321,48334,31687],{"class":331},[321,48336,48337,48339,48341,48343],{"class":323,"line":8217},[321,48338,32210],{"class":5423},[321,48340,377],{"class":327},[321,48342,529],{"class":380},[321,48344,31611],{"class":331},[321,48346,48347,48349,48351,48353],{"class":323,"line":8222},[321,48348,32222],{"class":5423},[321,48350,377],{"class":327},[321,48352,31621],{"class":380},[321,48354,31611],{"class":331},[321,48356,48357],{"class":323,"line":8228},[321,48358,32233],{"class":390},[321,48360,48361,48363,48365,48367],{"class":323,"line":8240},[321,48362,32238],{"class":5423},[321,48364,377],{"class":327},[321,48366,727],{"class":380},[321,48368,338],{"class":331},[321,48370,48371,48373,48375,48377,48379,48381],{"class":323,"line":8252},[321,48372,32249],{"class":331},[321,48374,377],{"class":327},[321,48376,31679],{"class":331},[321,48378,31682],{"class":5423},[321,48380,377],{"class":327},[321,48382,32260],{"class":331},[321,48384,48385,48387,48389,48391],{"class":323,"line":8264},[321,48386,32265],{"class":5423},[321,48388,377],{"class":327},[321,48390,529],{"class":380},[321,48392,31611],{"class":331},[321,48394,48395,48397,48399,48401],{"class":323,"line":9923},[321,48396,32276],{"class":5423},[321,48398,377],{"class":327},[321,48400,31621],{"class":380},[321,48402,31611],{"class":331},[321,48404,48405,48407,48409,48411],{"class":323,"line":9948},[321,48406,32287],{"class":5423},[321,48408,377],{"class":327},[321,48410,727],{"class":380},[321,48412,338],{"class":331},[321,48414,48415,48417],{"class":323,"line":9971},[321,48416,4296],{"class":327},[321,48418,32300],{"class":331},[321,48420,48421],{"class":323,"line":9995},[321,48422,2606],{"emptyLinePlaceholder":251},[321,48424,48425],{"class":323,"line":10000},[321,48426,32309],{"class":390},[321,48428,48429],{"class":323,"line":10005},[321,48430,32314],{"class":390},[321,48432,48433],{"class":323,"line":10010},[321,48434,2606],{"emptyLinePlaceholder":251},[321,48436,48437],{"class":323,"line":10019},[321,48438,32323],{"class":390},[321,48440,48441,48443,48445],{"class":323,"line":10024},[321,48442,32092],{"class":327},[321,48444,32330],{"class":2169},[321,48446,32333],{"class":331},[321,48448,48449,48451,48453,48455,48457,48459,48461,48463,48465],{"class":323,"line":10030},[321,48450,31382],{"class":331},[321,48452,377],{"class":327},[321,48454,30596],{"class":331},[321,48456,31389],{"class":436},[321,48458,1910],{"class":327},[321,48460,31394],{"class":331},[321,48462,1907],{"class":327},[321,48464,32352],{"class":436},[321,48466,338],{"class":331},[321,48468,48469],{"class":323,"line":10051},[321,48470,2606],{"emptyLinePlaceholder":251},[321,48472,48473],{"class":323,"line":10057},[321,48474,32367],{"class":390},[321,48476,48477],{"class":323,"line":10071},[321,48478,32372],{"class":390},[321,48480,48481],{"class":323,"line":10077},[321,48482,32377],{"class":390},[321,48484,48485,48487,48489,48491,48493,48495,48497],{"class":323,"line":10104},[321,48486,32382],{"class":331},[321,48488,377],{"class":327},[321,48490,32387],{"class":331},[321,48492,32390],{"class":5423},[321,48494,377],{"class":327},[321,48496,32395],{"class":380},[321,48498,338],{"class":331},[321,48500,48501],{"class":323,"line":10113},[321,48502,2606],{"emptyLinePlaceholder":251},[321,48504,48505],{"class":323,"line":10119},[321,48506,32406],{"class":390},[321,48508,48509,48511,48513],{"class":323,"line":10127},[321,48510,32411],{"class":331},[321,48512,377],{"class":327},[321,48514,32416],{"class":331},[321,48516,48517],{"class":323,"line":10132},[321,48518,2606],{"emptyLinePlaceholder":251},[321,48520,48521],{"class":323,"line":16811},[321,48522,32425],{"class":390},[321,48524,48525,48527,48529],{"class":323,"line":16817},[321,48526,31434],{"class":331},[321,48528,377],{"class":327},[321,48530,32434],{"class":331},[321,48532,48533],{"class":323,"line":16840},[321,48534,32439],{"class":390},[321,48536,48537],{"class":323,"line":16846},[321,48538,32444],{"class":390},[321,48540,48541],{"class":323,"line":16869},[321,48542,32449],{"class":390},[321,48544,48545,48547,48549],{"class":323,"line":16883},[321,48546,32454],{"class":331},[321,48548,377],{"class":327},[321,48550,32459],{"class":331},[321,48552,48553],{"class":323,"line":16903},[321,48554,2606],{"emptyLinePlaceholder":251},[321,48556,48557],{"class":323,"line":16909},[321,48558,32472],{"class":390},[321,48560,48561],{"class":323,"line":16920},[321,48562,32477],{"class":390},[321,48564,48565,48567,48569],{"class":323,"line":16943},[321,48566,32482],{"class":331},[321,48568,377],{"class":327},[321,48570,32487],{"class":380},[321,48572,48573],{"class":323,"line":16965},[321,48574,32492],{"class":390},[321,48576,48577,48579,48581],{"class":323,"line":16970},[321,48578,32497],{"class":331},[321,48580,377],{"class":327},[321,48582,32502],{"class":331},[321,48584,48585],{"class":323,"line":16976},[321,48586,32507],{"class":390},[321,48588,48589,48591,48593],{"class":323,"line":16990},[321,48590,32512],{"class":331},[321,48592,377],{"class":327},[321,48594,32502],{"class":331},[321,48596,48597],{"class":323,"line":17003},[321,48598,32521],{"class":390},[321,48600,48601,48603,48605],{"class":323,"line":17008},[321,48602,32526],{"class":331},[321,48604,377],{"class":327},[321,48606,32502],{"class":331},[321,48608,48609],{"class":323,"line":17022},[321,48610,32535],{"class":390},[321,48612,48613,48615,48617],{"class":323,"line":17027},[321,48614,32540],{"class":331},[321,48616,377],{"class":327},[321,48618,32502],{"class":331},[321,48620,48621],{"class":323,"line":17033},[321,48622,2606],{"emptyLinePlaceholder":251},[321,48624,48625],{"class":323,"line":17038},[321,48626,32553],{"class":390},[321,48628,48629,48631,48633],{"class":323,"line":17052},[321,48630,32558],{"class":331},[321,48632,377],{"class":327},[321,48634,32563],{"class":331},[321,48636,48637],{"class":323,"line":17057},[321,48638,2606],{"emptyLinePlaceholder":251},[321,48640,48641],{"class":323,"line":17062},[321,48642,32576],{"class":390},[321,48644,48645,48647,48649,48651,48653],{"class":323,"line":17076},[321,48646,3407],{"class":327},[321,48648,32583],{"class":331},[321,48650,26188],{"class":327},[321,48652,32588],{"class":380},[321,48654,32591],{"class":331},[321,48656,48657,48659,48661,48663,48665,48667,48669,48671,48673,48675,48677],{"class":323,"line":17088},[321,48658,32596],{"class":380},[321,48660,332],{"class":331},[321,48662,32601],{"class":436},[321,48664,32604],{"class":380},[321,48666,916],{"class":436},[321,48668,32604],{"class":380},[321,48670,583],{"class":436},[321,48672,32613],{"class":331},[321,48674,864],{"class":327},[321,48676,549],{"class":380},[321,48678,30642],{"class":331},[321,48680,48681,48683,48685,48687,48689,48691],{"class":323,"line":17093},[321,48682,32596],{"class":380},[321,48684,332],{"class":331},[321,48686,32628],{"class":436},[321,48688,787],{"class":327},[321,48690,778],{"class":380},[321,48692,338],{"class":331},[321,48694,48695],{"class":323,"line":17106},[321,48696,2606],{"emptyLinePlaceholder":251},[321,48698,48699],{"class":323,"line":17111},[321,48700,32643],{"class":390},[321,48702,48703],{"class":323,"line":17116},[321,48704,32648],{"class":390},[321,48706,48707,48709,48711],{"class":323,"line":17121},[321,48708,32653],{"class":331},[321,48710,377],{"class":327},[321,48712,32487],{"class":380},[321,48714,48715],{"class":323,"line":17134},[321,48716,32662],{"class":390},[321,48718,48719,48721,48723],{"class":323,"line":17139},[321,48720,32667],{"class":331},[321,48722,377],{"class":327},[321,48724,3291],{"class":380},[321,48726,48727],{"class":323,"line":32778},[321,48728,32676],{"class":390},[321,48730,48731,48733,48735],{"class":323,"line":32784},[321,48732,32681],{"class":331},[321,48734,377],{"class":327},[321,48736,32487],{"class":380},[321,48738,48739],{"class":323,"line":32790},[321,48740,32690],{"class":390},[321,48742,48743,48745,48747],{"class":323,"line":32796},[321,48744,32695],{"class":331},[321,48746,377],{"class":327},[321,48748,3291],{"class":380},[321,48750,48751],{"class":323,"line":32802},[321,48752,32704],{"class":390},[321,48754,48755,48757,48759],{"class":323,"line":32813},[321,48756,32709],{"class":331},[321,48758,377],{"class":327},[321,48760,3291],{"class":380},[321,48762,48763],{"class":323,"line":32819},[321,48764,32718],{"class":390},[321,48766,48767,48769,48771],{"class":323,"line":32839},[321,48768,32723],{"class":331},[321,48770,377],{"class":327},[321,48772,3291],{"class":380},[321,48774,48775],{"class":323,"line":32845},[321,48776,32732],{"class":390},[321,48778,48779,48781,48783,48785,48787],{"class":323,"line":32856},[321,48780,3609],{"class":327},[321,48782,31746],{"class":331},[321,48784,26188],{"class":327},[321,48786,31751],{"class":380},[321,48788,32745],{"class":331},[321,48790,48791],{"class":323,"line":32862},[321,48792,32750],{"class":390},[321,48794,48795,48797,48799],{"class":323,"line":32868},[321,48796,32755],{"class":331},[321,48798,377],{"class":327},[321,48800,32760],{"class":331},[321,48802,48803],{"class":323,"line":32874},[321,48804,32765],{"class":390},[321,48806,48807,48809,48811],{"class":323,"line":32880},[321,48808,32770],{"class":331},[321,48810,377],{"class":327},[321,48812,32775],{"class":331},[321,48814,48815],{"class":323,"line":32886},[321,48816,32781],{"class":390},[321,48818,48819],{"class":323,"line":32892},[321,48820,32787],{"class":331},[321,48822,48823],{"class":323,"line":32898},[321,48824,32793],{"class":390},[321,48826,48827],{"class":323,"line":32918},[321,48828,32799],{"class":390},[321,48830,48831,48833,48835],{"class":323,"line":32924},[321,48832,32805],{"class":331},[321,48834,377],{"class":327},[321,48836,32810],{"class":331},[321,48838,48839],{"class":323,"line":32940},[321,48840,32816],{"class":390},[321,48842,48843,48845,48847,48849,48851,48853,48855],{"class":323,"line":32946},[321,48844,32822],{"class":331},[321,48846,377],{"class":327},[321,48848,32827],{"class":331},[321,48850,32830],{"class":5423},[321,48852,377],{"class":327},[321,48854,549],{"class":380},[321,48856,338],{"class":331},[321,48858,48859],{"class":323,"line":32960},[321,48860,32842],{"class":390},[321,48862,48863,48865,48867],{"class":323,"line":32966},[321,48864,32848],{"class":331},[321,48866,377],{"class":327},[321,48868,32853],{"class":331},[321,48870,48871],{"class":323,"line":32981},[321,48872,32859],{"class":390},[321,48874,48875],{"class":323,"line":32987},[321,48876,32865],{"class":331},[321,48878,48879],{"class":323,"line":32996},[321,48880,32871],{"class":390},[321,48882,48883],{"class":323,"line":33002},[321,48884,32877],{"class":331},[321,48886,48887],{"class":323,"line":33011},[321,48888,32883],{"class":390},[321,48890,48891],{"class":323,"line":33017},[321,48892,32889],{"class":331},[321,48894,48895],{"class":323,"line":33023},[321,48896,32895],{"class":390},[321,48898,48899,48901,48903,48905,48907,48909,48911],{"class":323,"line":33032},[321,48900,32901],{"class":331},[321,48902,9684],{"class":327},[321,48904,32906],{"class":331},[321,48906,787],{"class":327},[321,48908,32911],{"class":331},[321,48910,523],{"class":380},[321,48912,338],{"class":331},[321,48914,48915],{"class":323,"line":33038},[321,48916,32921],{"class":390},[321,48918,48919,48921,48923,48925,48927],{"class":323,"line":33049},[321,48920,32927],{"class":331},[321,48922,9684],{"class":327},[321,48924,32932],{"class":331},[321,48926,3155],{"class":327},[321,48928,32937],{"class":331},[321,48930,48931],{"class":323,"line":33055},[321,48932,32943],{"class":390},[321,48934,48935,48937,48939,48941,48943],{"class":323,"line":33074},[321,48936,32949],{"class":331},[321,48938,9684],{"class":327},[321,48940,32911],{"class":331},[321,48942,523],{"class":380},[321,48944,338],{"class":331},[321,48946,48947],{"class":323,"line":33080},[321,48948,32963],{"class":390},[321,48950,48951,48953,48955,48957,48959],{"class":323,"line":33091},[321,48952,3609],{"class":327},[321,48954,32971],{"class":331},[321,48956,26188],{"class":327},[321,48958,31751],{"class":380},[321,48960,32978],{"class":331},[321,48962,48963],{"class":323,"line":33097},[321,48964,32984],{"class":390},[321,48966,48967,48969,48971],{"class":323,"line":33117},[321,48968,32755],{"class":331},[321,48970,377],{"class":327},[321,48972,32760],{"class":331},[321,48974,48975],{"class":323,"line":33133},[321,48976,32999],{"class":390},[321,48978,48979,48981,48983],{"class":323,"line":33139},[321,48980,32770],{"class":331},[321,48982,377],{"class":327},[321,48984,32775],{"class":331},[321,48986,48987],{"class":323,"line":33153},[321,48988,33014],{"class":390},[321,48990,48991],{"class":323,"line":33159},[321,48992,33020],{"class":331},[321,48994,48995],{"class":323,"line":33165},[321,48996,36501],{"class":390},[321,48998,48999,49001],{"class":323,"line":33176},[321,49000,33026],{"class":327},[321,49002,33029],{"class":331},[321,49004,49005],{"class":323,"line":33182},[321,49006,33035],{"class":390},[321,49008,49009,49011,49013],{"class":323,"line":33188},[321,49010,36516],{"class":331},[321,49012,377],{"class":327},[321,49014,32810],{"class":331},[321,49016,49017],{"class":323,"line":33198},[321,49018,33052],{"class":390},[321,49020,49021,49023,49025,49027,49029,49031,49033],{"class":323,"line":33204},[321,49022,36529],{"class":331},[321,49024,377],{"class":327},[321,49026,32827],{"class":331},[321,49028,32830],{"class":5423},[321,49030,377],{"class":327},[321,49032,549],{"class":380},[321,49034,338],{"class":331},[321,49036,49037],{"class":323,"line":33215},[321,49038,33077],{"class":390},[321,49040,49041,49043,49045],{"class":323,"line":33221},[321,49042,36550],{"class":331},[321,49044,377],{"class":327},[321,49046,32853],{"class":331},[321,49048,49049],{"class":323,"line":33231},[321,49050,33094],{"class":390},[321,49052,49053,49055,49057,49059,49061,49063,49065],{"class":323,"line":33236},[321,49054,36563],{"class":331},[321,49056,9684],{"class":327},[321,49058,36568],{"class":331},[321,49060,787],{"class":327},[321,49062,32911],{"class":331},[321,49064,523],{"class":380},[321,49066,338],{"class":331},[321,49068,49069,49071,49073,49075,49077],{"class":323,"line":33242},[321,49070,36581],{"class":331},[321,49072,9684],{"class":327},[321,49074,32932],{"class":331},[321,49076,3155],{"class":327},[321,49078,32937],{"class":331},[321,49080,49081],{"class":323,"line":33291},[321,49082,36594],{"class":390},[321,49084,49085,49087,49089,49091,49093],{"class":323,"line":33338},[321,49086,36599],{"class":331},[321,49088,9684],{"class":327},[321,49090,32911],{"class":331},[321,49092,523],{"class":380},[321,49094,338],{"class":331},[321,49096,49097],{"class":323,"line":33343},[321,49098,33156],{"class":390},[321,49100,49101],{"class":323,"line":33349},[321,49102,33162],{"class":390},[321,49104,49105,49107,49109],{"class":323,"line":33368},[321,49106,33168],{"class":331},[321,49108,916],{"class":327},[321,49110,33173],{"class":331},[321,49112,49113],{"class":323,"line":33374},[321,49114,33179],{"class":390},[321,49116,49117],{"class":323,"line":33394},[321,49118,33185],{"class":390},[321,49120,49121,49123,49125],{"class":323,"line":33400},[321,49122,33191],{"class":331},[321,49124,916],{"class":327},[321,49126,33173],{"class":331},[321,49128,49129],{"class":323,"line":33406},[321,49130,33201],{"class":390},[321,49132,49133,49135,49137],{"class":323,"line":33416},[321,49134,33207],{"class":331},[321,49136,916],{"class":327},[321,49138,33212],{"class":331},[321,49140,49141],{"class":323,"line":33421},[321,49142,33218],{"class":390},[321,49144,49145,49147,49149],{"class":323,"line":33427},[321,49146,33224],{"class":331},[321,49148,916],{"class":327},[321,49150,33212],{"class":331},[321,49152,49153],{"class":323,"line":33443},[321,49154,2606],{"emptyLinePlaceholder":251},[321,49156,49157],{"class":323,"line":33488},[321,49158,33239],{"class":390},[321,49160,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199],{"class":323,"line":33494},[321,49162,32596],{"class":380},[321,49164,332],{"class":331},[321,49166,3798],{"class":436},[321,49168,32604],{"class":380},[321,49170,33253],{"class":436},[321,49172,1228],{"class":380},[321,49174,33258],{"class":327},[321,49176,1278],{"class":380},[321,49178,33263],{"class":436},[321,49180,1228],{"class":380},[321,49182,33258],{"class":327},[321,49184,1278],{"class":380},[321,49186,3798],{"class":436},[321,49188,33274],{"class":331},[321,49190,864],{"class":327},[321,49192,549],{"class":380},[321,49194,33281],{"class":331},[321,49196,864],{"class":327},[321,49198,549],{"class":380},[321,49200,33288],{"class":331},[321,49202,49203,49205,49207,49209,49211,49213,49215,49217,49219,49221,49223,49225,49227,49229,49231,49233,49235,49237,49239,49241],{"class":323,"line":33500},[321,49204,32596],{"class":380},[321,49206,332],{"class":331},[321,49208,3798],{"class":436},[321,49210,32604],{"class":380},[321,49212,33302],{"class":436},[321,49214,1228],{"class":380},[321,49216,33258],{"class":327},[321,49218,1278],{"class":380},[321,49220,33311],{"class":436},[321,49222,1228],{"class":380},[321,49224,33258],{"class":327},[321,49226,1278],{"class":380},[321,49228,3798],{"class":436},[321,49230,33322],{"class":331},[321,49232,864],{"class":327},[321,49234,549],{"class":380},[321,49236,33329],{"class":331},[321,49238,864],{"class":327},[321,49240,549],{"class":380},[321,49242,33288],{"class":331},[321,49244,49245],{"class":323,"line":33506},[321,49246,2606],{"emptyLinePlaceholder":251},[321,49248,49249],{"class":323,"line":33517},[321,49250,33346],{"class":390},[321,49252,49253,49255,49257,49259,49261,49263,49265],{"class":323,"line":33523},[321,49254,2703],{"class":327},[321,49256,33354],{"class":331},[321,49258,864],{"class":327},[321,49260,549],{"class":380},[321,49262,1272],{"class":331},[321,49264,1292],{"class":327},[321,49266,33365],{"class":331},[321,49268,49269],{"class":323,"line":33529},[321,49270,33371],{"class":390},[321,49272,49273,49275,49277,49279,49281,49283,49285],{"class":323,"line":33535},[321,49274,33377],{"class":331},[321,49276,371],{"class":380},[321,49278,377],{"class":327},[321,49280,33384],{"class":331},[321,49282,864],{"class":327},[321,49284,549],{"class":380},[321,49286,33391],{"class":331},[321,49288,49289],{"class":323,"line":33553},[321,49290,33397],{"class":390},[321,49292,49293],{"class":323,"line":33567},[321,49294,33403],{"class":390},[321,49296,49297,49299,49301],{"class":323,"line":33576},[321,49298,33409],{"class":331},[321,49300,377],{"class":327},[321,49302,32459],{"class":331},[321,49304,49305],{"class":323,"line":33585},[321,49306,2606],{"emptyLinePlaceholder":251},[321,49308,49309],{"class":323,"line":33594},[321,49310,33424],{"class":390},[321,49312,49313,49315,49317,49319,49321],{"class":323,"line":33603},[321,49314,33430],{"class":331},[321,49316,377],{"class":327},[321,49318,33435],{"class":331},[321,49320,864],{"class":327},[321,49322,33440],{"class":331},[321,49324,49325,49327,49329,49331,49333,49335,49337,49339,49341,49343,49345,49347,49349,49351,49353,49355,49357,49359],{"class":323,"line":33609},[321,49326,32596],{"class":380},[321,49328,332],{"class":331},[321,49330,33450],{"class":436},[321,49332,1228],{"class":380},[321,49334,33455],{"class":327},[321,49336,1278],{"class":380},[321,49338,876],{"class":436},[321,49340,1228],{"class":380},[321,49342,33455],{"class":327},[321,49344,1278],{"class":380},[321,49346,33468],{"class":436},[321,49348,33471],{"class":331},[321,49350,33474],{"class":327},[321,49352,1239],{"class":380},[321,49354,33479],{"class":331},[321,49356,660],{"class":327},[321,49358,1239],{"class":380},[321,49360,30642],{"class":331},[321,49362,49363],{"class":323,"line":33615},[321,49364,36878],{"class":390},[321,49366,49367],{"class":323,"line":33623},[321,49368,36883],{"class":390},[321,49370,49371,49373,49375],{"class":323,"line":33628},[321,49372,36888],{"class":331},[321,49374,33512],{"class":436},[321,49376,338],{"class":331},[321,49378,49379],{"class":323,"line":33634},[321,49380,33532],{"class":390},[321,49382,49383,49385,49387,49389,49391,49393],{"class":323,"line":33645},[321,49384,33538],{"class":331},[321,49386,377],{"class":327},[321,49388,33543],{"class":331},[321,49390,33546],{"class":5423},[321,49392,377],{"class":327},[321,49394,1752],{"class":331},[321,49396,49397,49399,49401,49403],{"class":323,"line":33651},[321,49398,33556],{"class":436},[321,49400,1191],{"class":331},[321,49402,33561],{"class":380},[321,49404,33564],{"class":331},[321,49406,49407,49409],{"class":323,"line":33671},[321,49408,33570],{"class":436},[321,49410,33573],{"class":331},[321,49412,49413,49415],{"class":323,"line":33677},[321,49414,33579],{"class":436},[321,49416,33582],{"class":331},[321,49418,49419,49421],{"class":323,"line":33683},[321,49420,33588],{"class":436},[321,49422,33591],{"class":331},[321,49424,49425,49427],{"class":323,"line":33689},[321,49426,33597],{"class":436},[321,49428,33600],{"class":331},[321,49430,49431],{"class":323,"line":33706},[321,49432,33606],{"class":331},[321,49434,49435],{"class":323,"line":33712},[321,49436,33612],{"class":390},[321,49438,49439,49441],{"class":323,"line":33718},[321,49440,4296],{"class":327},[321,49442,33620],{"class":331},[321,49444,49445],{"class":323,"line":33724},[321,49446,2606],{"emptyLinePlaceholder":251},[321,49448,49449],{"class":323,"line":33730},[321,49450,33631],{"class":390},[321,49452,49453,49455,49457],{"class":323,"line":33736},[321,49454,32092],{"class":327},[321,49456,33639],{"class":2169},[321,49458,33642],{"class":331},[321,49460,49461],{"class":323,"line":33763},[321,49462,33648],{"class":390},[321,49464,49465,49467,49469,49471,49473,49475,49477,49479],{"class":323,"line":33787},[321,49466,33654],{"class":331},[321,49468,31838],{"class":5423},[321,49470,377],{"class":327},[321,49472,332],{"class":331},[321,49474,830],{"class":380},[321,49476,710],{"class":331},[321,49478,625],{"class":380},[321,49480,30642],{"class":331},[321,49482,49483],{"class":323,"line":33793},[321,49484,33674],{"class":390},[321,49486,49487],{"class":323,"line":33799},[321,49488,33680],{"class":390},[321,49490,49491],{"class":323,"line":33805},[321,49492,33686],{"class":390},[321,49494,49495,49497,49499,49501,49503,49505,49507],{"class":323,"line":33816},[321,49496,31872],{"class":331},[321,49498,549],{"class":380},[321,49500,710],{"class":331},[321,49502,409],{"class":380},[321,49504,710],{"class":331},[321,49506,549],{"class":380},[321,49508,338],{"class":331},[321,49510,49511],{"class":323,"line":33827},[321,49512,33709],{"class":390},[321,49514,49515],{"class":323,"line":33833},[321,49516,33715],{"class":390},[321,49518,49519],{"class":323,"line":33850},[321,49520,33721],{"class":390},[321,49522,49523],{"class":323,"line":33873},[321,49524,33727],{"class":390},[321,49526,49527],{"class":323,"line":33896},[321,49528,33733],{"class":390},[321,49530,49531,49533,49535,49537,49539,49541,49543,49545,49547],{"class":323,"line":33902},[321,49532,33739],{"class":331},[321,49534,33742],{"class":436},[321,49536,33745],{"class":331},[321,49538,33748],{"class":436},[321,49540,710],{"class":331},[321,49542,33753],{"class":5423},[321,49544,377],{"class":327},[321,49546,33758],{"class":436},[321,49548,338],{"class":331},[321,49550,49551,49553,49555,49557,49559,49561,49563,49565,49567],{"class":323,"line":33907},[321,49552,33739],{"class":331},[321,49554,33742],{"class":436},[321,49556,33770],{"class":331},[321,49558,33773],{"class":436},[321,49560,710],{"class":331},[321,49562,33753],{"class":5423},[321,49564,377],{"class":327},[321,49566,33782],{"class":436},[321,49568,338],{"class":331},[321,49570,49571],{"class":323,"line":33916},[321,49572,33790],{"class":390},[321,49574,49575],{"class":323,"line":33926},[321,49576,33796],{"class":331},[321,49578,49579],{"class":323,"line":33932},[321,49580,33802],{"class":390},[321,49582,49583,49585,49587],{"class":323,"line":33937},[321,49584,33808],{"class":331},[321,49586,33811],{"class":436},[321,49588,338],{"class":331},[321,49590,49591,49593,49595],{"class":323,"line":33943},[321,49592,33819],{"class":331},[321,49594,33822],{"class":436},[321,49596,338],{"class":331},[321,49598,49599],{"class":323,"line":33956},[321,49600,33830],{"class":390},[321,49602,49603,49605,49607,49609,49611,49613,49615],{"class":323,"line":33962},[321,49604,31872],{"class":331},[321,49606,549],{"class":380},[321,49608,710],{"class":331},[321,49610,409],{"class":380},[321,49612,710],{"class":331},[321,49614,409],{"class":380},[321,49616,338],{"class":331},[321,49618,49619,49621,49623,49625,49627,49629,49631,49633,49635],{"class":323,"line":33973},[321,49620,33739],{"class":331},[321,49622,33742],{"class":436},[321,49624,33857],{"class":331},[321,49626,33748],{"class":436},[321,49628,710],{"class":331},[321,49630,33753],{"class":5423},[321,49632,377],{"class":327},[321,49634,33868],{"class":436},[321,49636,338],{"class":331},[321,49638,49639,49641,49643,49645,49647,49649,49651,49653,49655],{"class":323,"line":33984},[321,49640,33739],{"class":331},[321,49642,33742],{"class":436},[321,49644,33880],{"class":331},[321,49646,33773],{"class":436},[321,49648,710],{"class":331},[321,49650,33753],{"class":5423},[321,49652,377],{"class":327},[321,49654,33891],{"class":436},[321,49656,338],{"class":331},[321,49658,49659],{"class":323,"line":34003},[321,49660,33899],{"class":390},[321,49662,49664],{"class":323,"line":49663},219,[321,49665,33796],{"class":331},[321,49667,49669,49671,49673],{"class":323,"line":49668},220,[321,49670,33808],{"class":331},[321,49672,33742],{"class":436},[321,49674,338],{"class":331},[321,49676,49678,49680,49682],{"class":323,"line":49677},221,[321,49679,33819],{"class":331},[321,49681,33921],{"class":436},[321,49683,338],{"class":331},[321,49685,49687],{"class":323,"line":49686},222,[321,49688,33929],{"class":331},[321,49690,49692],{"class":323,"line":49691},223,[321,49693,2606],{"emptyLinePlaceholder":251},[321,49695,49697],{"class":323,"line":49696},224,[321,49698,33940],{"class":390},[321,49700,49702,49704,49706,49708,49710],{"class":323,"line":49701},225,[321,49703,1737],{"class":327},[321,49705,31365],{"class":380},[321,49707,3155],{"class":327},[321,49709,31370],{"class":436},[321,49711,3945],{"class":331},[321,49713,49715],{"class":323,"line":49714},226,[321,49716,33959],{"class":390},[321,49718,49720,49722,49724],{"class":323,"line":49719},227,[321,49721,44691],{"class":331},[321,49723,377],{"class":327},[321,49725,44696],{"class":331},[321,49727,49729,49731,49733],{"class":323,"line":49728},228,[321,49730,33976],{"class":331},[321,49732,377],{"class":327},[321,49734,33981],{"class":331},[321,49736,49738,49740,49742,49744,49746,49748,49750],{"class":323,"line":49737},229,[321,49739,33538],{"class":331},[321,49741,377],{"class":327},[321,49743,44713],{"class":331},[321,49745,33994],{"class":5423},[321,49747,377],{"class":327},[321,49749,1239],{"class":380},[321,49751,338],{"class":331},[321,49753,49755],{"class":323,"line":49754},230,[321,49756,34006],{"class":331},[22205,49758,49760],{"id":49759},"_242测试代码","2.4.2.测试代码",[19,49762,49763],{},"使用测试集进行测试与推理",[312,49765,49767],{"className":30523,"code":49766,"language":30525,"meta":30,"style":30},"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",[318,49768,49769,49775,49785,49795,49806,49816,49820,49824,49832,49837,49841,49858,49862,49866,49870,49874,49878,49910,49914,49922,49926,49938,49942,49946,49950,49954,49958,49962,49966,49970,49988,50002,50006,50016,50026,50036,50042,50046,50050,50058,50062,50078,50086,50090,50094,50102,50110,50114,50118,50122,50126,50132,50136,50146,50154,50162,50166,50170,50174,50182,50186,50202,50206,50210,50214,50226,50230,50242,50246,50250,50262,50266,50276,50280,50284,50296,50300,50308,50312,50316,50324,50328,50336,50340,50344,50348,50352,50356,50372,50380,50384,50388,50406,50412,50416,50426,50434,50442,50446,50450,50454,50458,50466,50470,50486,50490,50498,50506],{"__ignoreMap":30},[321,49770,49771,49773],{"class":323,"line":324},[321,49772,30537],{"class":327},[321,49774,30540],{"class":331},[321,49776,49777,49779,49781,49783],{"class":323,"line":167},[321,49778,30537],{"class":327},[321,49780,31560],{"class":331},[321,49782,31528],{"class":327},[321,49784,31565],{"class":331},[321,49786,49787,49789,49791,49793],{"class":323,"line":200},[321,49788,30882],{"class":327},[321,49790,31543],{"class":331},[321,49792,30537],{"class":327},[321,49794,31548],{"class":331},[321,49796,49797,49799,49801,49803],{"class":323,"line":1401},[321,49798,30882],{"class":327},[321,49800,31513],{"class":331},[321,49802,30537],{"class":327},[321,49804,49805],{"class":331}," ImageFolder\n",[321,49807,49808,49810,49812,49814],{"class":323,"line":1407},[321,49809,30882],{"class":327},[321,49811,32059],{"class":331},[321,49813,30537],{"class":327},[321,49815,44785],{"class":331},[321,49817,49818],{"class":323,"line":1421},[321,49819,2606],{"emptyLinePlaceholder":251},[321,49821,49822],{"class":323,"line":1427},[321,49823,34096],{"class":390},[321,49825,49826,49828,49830],{"class":323,"line":1518},[321,49827,32092],{"class":327},[321,49829,34103],{"class":2169},[321,49831,32098],{"class":331},[321,49833,49834],{"class":323,"line":1524},[321,49835,49836],{"class":390},"   # 导入自己的数据集，并进行数据处理\n",[321,49838,49839],{"class":323,"line":1536},[321,49840,48106],{"class":390},[321,49842,49843,49845,49847,49849,49851,49853,49856],{"class":323,"line":1818},[321,49844,48111],{"class":380},[321,49846,377],{"class":327},[321,49848,1002],{"class":327},[321,49850,583],{"class":436},[321,49852,890],{"class":380},[321,49854,49855],{"class":48122},"\u002Fdata\u002Ftest",[321,49857,25278],{"class":436},[321,49859,49860],{"class":323,"line":1823},[321,49861,2606],{"emptyLinePlaceholder":251},[321,49863,49864],{"class":323,"line":1829},[321,49865,48134],{"class":390},[321,49867,49868],{"class":323,"line":1834},[321,49869,48139],{"class":390},[321,49871,49872],{"class":323,"line":1848},[321,49873,48144],{"class":390},[321,49875,49876],{"class":323,"line":1853},[321,49877,48149],{"class":390},[321,49879,49880,49882,49884,49886,49888,49890,49892,49894,49896,49898,49900,49902,49904,49906,49908],{"class":323,"line":1859},[321,49881,48154],{"class":331},[321,49883,377],{"class":327},[321,49885,48159],{"class":331},[321,49887,48162],{"class":380},[321,49889,710],{"class":331},[321,49891,48167],{"class":380},[321,49893,710],{"class":331},[321,49895,48172],{"class":380},[321,49897,48175],{"class":331},[321,49899,48178],{"class":380},[321,49901,710],{"class":331},[321,49903,48183],{"class":380},[321,49905,710],{"class":331},[321,49907,48188],{"class":380},[321,49909,4863],{"class":331},[321,49911,49912],{"class":323,"line":1880},[321,49913,48195],{"class":390},[321,49915,49916,49918,49920],{"class":323,"line":1885},[321,49917,48200],{"class":331},[321,49919,377],{"class":327},[321,49921,48205],{"class":331},[321,49923,49924],{"class":323,"line":1899},[321,49925,48210],{"class":390},[321,49927,49928,49930,49932,49934,49936],{"class":323,"line":1904},[321,49929,48215],{"class":331},[321,49931,31646],{"class":380},[321,49933,710],{"class":331},[321,49935,31646],{"class":380},[321,49937,42767],{"class":331},[321,49939,49940],{"class":323,"line":1933},[321,49941,48228],{"class":390},[321,49943,49944],{"class":323,"line":1938},[321,49945,48233],{"class":331},[321,49947,49948],{"class":323,"line":1955},[321,49949,48238],{"class":331},[321,49951,49952],{"class":323,"line":1960},[321,49953,48243],{"class":390},[321,49955,49956],{"class":323,"line":1965},[321,49957,48248],{"class":390},[321,49959,49960],{"class":323,"line":1970},[321,49961,2606],{"emptyLinePlaceholder":251},[321,49963,49964],{"class":323,"line":1984},[321,49965,48257],{"class":390},[321,49967,49968],{"class":323,"line":1989},[321,49969,48262],{"class":390},[321,49971,49972,49974,49976,49978,49980,49982,49984,49986],{"class":323,"line":2783},[321,49973,34110],{"class":331},[321,49975,377],{"class":327},[321,49977,48271],{"class":331},[321,49979,48274],{"class":380},[321,49981,710],{"class":331},[321,49983,48279],{"class":5423},[321,49985,377],{"class":327},[321,49987,48284],{"class":331},[321,49989,49990,49992,49994,49996,49998,50000],{"class":323,"line":2797},[321,49991,34167],{"class":331},[321,49993,377],{"class":327},[321,49995,31679],{"class":331},[321,49997,31682],{"class":5423},[321,49999,377],{"class":327},[321,50001,34178],{"class":331},[321,50003,50004],{"class":323,"line":2805},[321,50005,34183],{"class":390},[321,50007,50008,50010,50012,50014],{"class":323,"line":2810},[321,50009,34188],{"class":5423},[321,50011,377],{"class":327},[321,50013,549],{"class":380},[321,50015,31611],{"class":331},[321,50017,50018,50020,50022,50024],{"class":323,"line":2816},[321,50019,34199],{"class":5423},[321,50021,377],{"class":327},[321,50023,31621],{"class":380},[321,50025,31611],{"class":331},[321,50027,50028,50030,50032,50034],{"class":323,"line":2822},[321,50029,34210],{"class":5423},[321,50031,377],{"class":327},[321,50033,523],{"class":380},[321,50035,338],{"class":331},[321,50037,50038,50040],{"class":323,"line":2827},[321,50039,4296],{"class":327},[321,50041,34223],{"class":331},[321,50043,50044],{"class":323,"line":8155},[321,50045,2606],{"emptyLinePlaceholder":251},[321,50047,50048],{"class":323,"line":8179},[321,50049,34232],{"class":390},[321,50051,50052,50054,50056],{"class":323,"line":8184},[321,50053,32092],{"class":327},[321,50055,34239],{"class":2169},[321,50057,34242],{"class":331},[321,50059,50060],{"class":323,"line":8190},[321,50061,34247],{"class":390},[321,50063,50064,50066,50068,50070,50072,50074,50076],{"class":323,"line":8217},[321,50065,31382],{"class":331},[321,50067,377],{"class":327},[321,50069,31389],{"class":436},[321,50071,1910],{"class":327},[321,50073,31394],{"class":331},[321,50075,1907],{"class":327},[321,50077,34264],{"class":436},[321,50079,50080,50082,50084],{"class":323,"line":8222},[321,50081,31434],{"class":331},[321,50083,377],{"class":327},[321,50085,32434],{"class":331},[321,50087,50088],{"class":323,"line":8228},[321,50089,2606],{"emptyLinePlaceholder":251},[321,50091,50092],{"class":323,"line":8240},[321,50093,34281],{"class":390},[321,50095,50096,50098,50100],{"class":323,"line":8252},[321,50097,34286],{"class":331},[321,50099,377],{"class":327},[321,50101,32487],{"class":380},[321,50103,50104,50106,50108],{"class":323,"line":8264},[321,50105,34295],{"class":331},[321,50107,377],{"class":327},[321,50109,3291],{"class":380},[321,50111,50112],{"class":323,"line":9923},[321,50113,2606],{"emptyLinePlaceholder":251},[321,50115,50116],{"class":323,"line":9948},[321,50117,34308],{"class":390},[321,50119,50120],{"class":323,"line":9971},[321,50121,34313],{"class":390},[321,50123,50124],{"class":323,"line":9995},[321,50125,34318],{"class":390},[321,50127,50128,50130],{"class":323,"line":10000},[321,50129,34323],{"class":327},[321,50131,33029],{"class":331},[321,50133,50134],{"class":323,"line":10005},[321,50135,34330],{"class":390},[321,50137,50138,50140,50142,50144],{"class":323,"line":10010},[321,50139,3609],{"class":327},[321,50141,34337],{"class":331},[321,50143,26188],{"class":327},[321,50145,34342],{"class":331},[321,50147,50148,50150,50152],{"class":323,"line":10019},[321,50149,34347],{"class":331},[321,50151,377],{"class":327},[321,50153,34352],{"class":331},[321,50155,50156,50158,50160],{"class":323,"line":10024},[321,50157,34357],{"class":331},[321,50159,377],{"class":327},[321,50161,34362],{"class":331},[321,50163,50164],{"class":323,"line":10030},[321,50165,34367],{"class":390},[321,50167,50168],{"class":323,"line":10051},[321,50169,33020],{"class":331},[321,50171,50172],{"class":323,"line":10057},[321,50173,34376],{"class":390},[321,50175,50176,50178,50180],{"class":323,"line":10071},[321,50177,32805],{"class":331},[321,50179,377],{"class":327},[321,50181,34385],{"class":331},[321,50183,50184],{"class":323,"line":10077},[321,50185,34390],{"class":390},[321,50187,50188,50190,50192,50194,50196,50198,50200],{"class":323,"line":10104},[321,50189,32822],{"class":331},[321,50191,377],{"class":327},[321,50193,32827],{"class":331},[321,50195,32830],{"class":5423},[321,50197,377],{"class":327},[321,50199,549],{"class":380},[321,50201,338],{"class":331},[321,50203,50204],{"class":323,"line":10113},[321,50205,34411],{"class":390},[321,50207,50208],{"class":323,"line":10119},[321,50209,34416],{"class":390},[321,50211,50212],{"class":323,"line":10127},[321,50213,34421],{"class":390},[321,50215,50216,50218,50220,50222,50224],{"class":323,"line":10132},[321,50217,34426],{"class":331},[321,50219,9684],{"class":327},[321,50221,32932],{"class":331},[321,50223,3155],{"class":327},[321,50225,34435],{"class":331},[321,50227,50228],{"class":323,"line":16811},[321,50229,34440],{"class":390},[321,50231,50232,50234,50236,50238,50240],{"class":323,"line":16817},[321,50233,34445],{"class":331},[321,50235,9684],{"class":327},[321,50237,34450],{"class":331},[321,50239,523],{"class":380},[321,50241,338],{"class":331},[321,50243,50244],{"class":323,"line":16840},[321,50245,2606],{"emptyLinePlaceholder":251},[321,50247,50248],{"class":323,"line":16846},[321,50249,34463],{"class":390},[321,50251,50252,50254,50256,50258,50260],{"class":323,"line":16869},[321,50253,34468],{"class":331},[321,50255,377],{"class":327},[321,50257,34473],{"class":331},[321,50259,916],{"class":327},[321,50261,34478],{"class":331},[321,50263,50264],{"class":323,"line":16883},[321,50265,34483],{"class":390},[321,50267,50268,50270,50272,50274],{"class":323,"line":16903},[321,50269,32596],{"class":380},[321,50271,332],{"class":331},[321,50273,34492],{"class":436},[321,50275,34495],{"class":331},[321,50277,50278],{"class":323,"line":16909},[321,50279,2606],{"emptyLinePlaceholder":251},[321,50281,50282],{"class":323,"line":16920},[321,50283,34504],{"class":390},[321,50285,50286,50288,50290,50292,50294],{"class":323,"line":16943},[321,50287,1737],{"class":327},[321,50289,31365],{"class":380},[321,50291,3155],{"class":327},[321,50293,31370],{"class":436},[321,50295,3945],{"class":331},[321,50297,50298],{"class":323,"line":16965},[321,50299,34521],{"class":390},[321,50301,50302,50304,50306],{"class":323,"line":16970},[321,50303,31434],{"class":331},[321,50305,377],{"class":327},[321,50307,44696],{"class":331},[321,50309,50310],{"class":323,"line":16976},[321,50311,34534],{"class":390},[321,50313,50314],{"class":323,"line":16990},[321,50315,34539],{"class":390},[321,50317,50318,50320,50322],{"class":323,"line":17003},[321,50319,34544],{"class":331},[321,50321,34547],{"class":436},[321,50323,30642],{"class":331},[321,50325,50326],{"class":323,"line":17008},[321,50327,34554],{"class":390},[321,50329,50330,50332,50334],{"class":323,"line":17022},[321,50331,34167],{"class":331},[321,50333,377],{"class":327},[321,50335,34563],{"class":331},[321,50337,50338],{"class":323,"line":17027},[321,50339,34568],{"class":390},[321,50341,50342],{"class":323,"line":17033},[321,50343,34573],{"class":331},[321,50345,50346],{"class":323,"line":17038},[321,50347,2606],{"emptyLinePlaceholder":251},[321,50349,50350],{"class":323,"line":17052},[321,50351,34582],{"class":390},[321,50353,50354],{"class":323,"line":17057},[321,50355,34587],{"class":390},[321,50357,50358,50360,50362,50364,50366,50368,50370],{"class":323,"line":17062},[321,50359,31382],{"class":331},[321,50361,377],{"class":327},[321,50363,31389],{"class":436},[321,50365,1910],{"class":327},[321,50367,31394],{"class":331},[321,50369,1907],{"class":327},[321,50371,34264],{"class":436},[321,50373,50374,50376,50378],{"class":323,"line":17076},[321,50375,31434],{"class":331},[321,50377,377],{"class":327},[321,50379,32434],{"class":331},[321,50381,50382],{"class":323,"line":17088},[321,50383,34616],{"class":390},[321,50385,50386],{"class":323,"line":17093},[321,50387,34621],{"class":390},[321,50389,50390,50392,50394,50396,50399,50401,50404],{"class":323,"line":17106},[321,50391,34626],{"class":331},[321,50393,377],{"class":327},[321,50395,1222],{"class":331},[321,50397,50398],{"class":436},"'猫'",[321,50400,710],{"class":331},[321,50402,50403],{"class":436},"'狗'",[321,50405,33391],{"class":331},[321,50407,50408,50410],{"class":323,"line":17111},[321,50409,34323],{"class":327},[321,50411,33029],{"class":331},[321,50413,50414],{"class":323,"line":17116},[321,50415,34691],{"class":390},[321,50417,50418,50420,50422,50424],{"class":323,"line":17121},[321,50419,3609],{"class":327},[321,50421,34698],{"class":331},[321,50423,26188],{"class":327},[321,50425,34342],{"class":331},[321,50427,50428,50430,50432],{"class":323,"line":17134},[321,50429,32755],{"class":331},[321,50431,377],{"class":327},[321,50433,32760],{"class":331},[321,50435,50436,50438,50440],{"class":323,"line":17139},[321,50437,32770],{"class":331},[321,50439,377],{"class":327},[321,50441,32775],{"class":331},[321,50443,50444],{"class":323,"line":32778},[321,50445,2606],{"emptyLinePlaceholder":251},[321,50447,50448],{"class":323,"line":32784},[321,50449,34727],{"class":390},[321,50451,50452],{"class":323,"line":32790},[321,50453,33020],{"class":331},[321,50455,50456],{"class":323,"line":32796},[321,50457,34736],{"class":390},[321,50459,50460,50462,50464],{"class":323,"line":32802},[321,50461,32805],{"class":331},[321,50463,377],{"class":327},[321,50465,32810],{"class":331},[321,50467,50468],{"class":323,"line":32813},[321,50469,34749],{"class":390},[321,50471,50472,50474,50476,50478,50480,50482,50484],{"class":323,"line":32819},[321,50473,32822],{"class":331},[321,50475,377],{"class":327},[321,50477,32827],{"class":331},[321,50479,32830],{"class":5423},[321,50481,377],{"class":327},[321,50483,549],{"class":380},[321,50485,338],{"class":331},[321,50487,50488],{"class":323,"line":32839},[321,50489,34770],{"class":390},[321,50491,50492,50494,50496],{"class":323,"line":32845},[321,50493,34775],{"class":331},[321,50495,377],{"class":327},[321,50497,34780],{"class":331},[321,50499,50500,50502,50504],{"class":323,"line":32856},[321,50501,34785],{"class":331},[321,50503,377],{"class":327},[321,50505,34790],{"class":331},[321,50507,50508,50510,50512,50514,50516,50518,50520,50522],{"class":323,"line":32862},[321,50509,34795],{"class":380},[321,50511,332],{"class":331},[321,50513,34800],{"class":436},[321,50515,34803],{"class":331},[321,50517,34806],{"class":436},[321,50519,710],{"class":331},[321,50521,34811],{"class":436},[321,50523,34814],{"class":331},[5333,50525,50526],{},"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":30,"searchDepth":167,"depth":167,"links":50528},[50529,50530,50531,50532],{"id":30736,"depth":200,"text":30737},{"id":37984,"depth":200,"text":37985},{"id":41417,"depth":200,"text":41418},{"id":45426,"depth":200,"text":45427},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30728,"description":23584},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50539,"title":50540,"body":50541,"description":23584,"extension":249,"meta":50548,"navigation":251,"path":50549,"seo":50550,"stem":50551,"__hash__":50552},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50542,"toc":50546},[50543],[10,50544,50540],{"id":50545},"_3yolo模型学习",{"title":30,"searchDepth":167,"depth":167,"links":50547},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50540,"description":23584},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50554,"title":50555,"body":50556,"description":50563,"extension":249,"meta":50564,"navigation":251,"path":50566,"seo":50567,"stem":50568,"__hash__":50569},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50557,"toc":50561},[50558],[19,50559,50560],{},"yolo模型还未补充",{"title":30,"searchDepth":167,"depth":167,"links":50562},[],"深度学习学习",{"category":50565},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50555,"description":50563},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50571,"title":50572,"body":50573,"description":23584,"extension":249,"meta":50598,"navigation":251,"path":50599,"seo":50600,"stem":50601,"__hash__":50602},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50574,"toc":50596},[50575,50578,50581,50586,50593],[10,50576,50572],{"id":50577},"_1工具",[19,50579,50580],{},"提示错误插件：有问题会提前报错",[19,50582,50583],{},[28,50584],{"alt":30,"src":50585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50587,50588],{},[570,50589,50592],{"href":50590,"rel":50591},"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",[24073],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50594,50595],{},"alt键加上下箭头可以实现语句的移动",{"title":30,"searchDepth":167,"depth":167,"links":50597},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50572,"description":23584},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50604,"title":50605,"body":50606,"description":23584,"extension":249,"meta":53470,"navigation":251,"path":53471,"seo":53472,"stem":53473,"__hash__":53474},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50607,"toc":53421},[50608,50611,50615,50619,50624,50627,50632,50636,50643,50648,50655,50660,50667,50672,50676,50681,50684,50688,50693,50697,50702,50705,50708,50711,50714,50717,50720,50723,50726,50731,50736,50741,50745,50748,50751,50755,50760,50763,50771,50776,50793,50801,50806,50811,50816,50821,50826,50829,50834,50839,50843,50852,50857,50862,50866,50871,50874,50878,50883,50891,50896,50901,50904,50909,50914,50919,50922,50925,50928,50933,50938,50941,50946,50949,50954,50957,50960,50963,50968,50971,50974,50989,50994,50999,51004,51007,51010,51013,51027,51030,51035,51040,51043,51046,51049,51052,51055,51058,51061,51065,51069,51074,51078,51081,51086,51091,51094,51099,51102,51106,51111,51114,51117,51120,51123,51126,51129,51132,51135,51138,51142,51147,51152,51157,51160,51163,51167,51172,51175,51179,51182,51185,51190,51193,51196,51200,51204,51207,51212,51217,51220,51249,51254,51259,51264,51269,51273,51278,51282,51287,51290,51294,51298,51303,51307,51312,51317,51321,51326,51329,51331,51334,51339,51343,51348,51352,51356,51361,51366,51371,51376,51380,51385,51390,51395,51398,51401,51406,51409,51414,51419,51424,51429,51433,52240,52244,52587,52592,52595,52598,52601,52604,52607,52610,52613,52616,52618,52621,52623,52626,52630,52635,52638,52641,52644,52648,52653,52658,52678,52681,52685,52690,52695,52712,52716,52745,52749,52771,52773,52812,52820,52826,52830,52833,52836,52841,52846,52849,52852,52855,52860,52865,52868,52871,52874,52877,52880,52883,52886,52889,52892,52895,52898,52900,52903,52906,52909,52912,52915,52918,52921,52924,52928,52933,52936,52941,52944,52947,52950,52953,52956,52959,52962,52964,52967,52970,52973,52976,52979,52982,52986,52989,52998,53001,53006,53009,53014,53017,53020,53023,53026,53029,53032,53035,53039,53043,53046,53049,53054,53059,53064,53068,53073,53078,53081,53084,53087,53090,53093,53098,53101,53106,53108,53113,53116,53120,53125,53128,53131,53136,53140,53143,53148,53151,53154,53183,53188,53191,53194,53197,53200,53203,53207,53210,53296,53300,53303,53308,53313,53320,53323,53326,53329,53332,53335,53340,53345,53348,53351,53354,53357,53360,53363,53366,53369,53372,53374,53377,53381,53386,53391,53396,53399,53404,53409,53412,53415,53418],[10,50609,50605],{"id":50610},"_2基础语法",[14,50612,50614],{"id":50613},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[292,50616,50618],{"id":50617},"_211-js组成","2.1.1 js组成",[151,50620,50621],{},[154,50622,50623],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50625,50626],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[151,50628,50629],{"start":167},[154,50630,50631],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[292,50633,50635],{"id":50634},"_212-js书写位置","2.1.2 js书写位置",[151,50637,50638],{},[154,50639,50640],{},[481,50641,50642],{},"内部 JavaScript",[19,50644,50645],{},[28,50646],{"alt":30,"src":50647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[151,50649,50650],{"start":167},[154,50651,50652],{},[481,50653,50654],{},"外部 JavaScript",[19,50656,50657],{},[28,50658],{"alt":30,"src":50659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[151,50661,50662],{"start":200},[154,50663,50664],{},[481,50665,50666],{},"内联 JavaScript",[19,50668,50669],{},[28,50670],{"alt":30,"src":50671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[292,50673,50675],{"id":50674},"_213-javascript注释","2.1.3 JavaScript注释",[19,50677,50678],{},[28,50679],{"alt":30,"src":50680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50682,50683],{},"alt+shift+a一定要记住！",[292,50685,50687],{"id":50686},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50689,50690],{},[28,50691],{"alt":30,"src":50692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[292,50694,50696],{"id":50695},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[151,50698,50699],{},[154,50700,50701],{},"输出语法：",[19,50703,50704],{},"①document.write('要出的内容')",[19,50706,50707],{},"向body内输出内容；",[19,50709,50710],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50712,50713],{},"②alert('要出的内容')",[19,50715,50716],{},"页面弹出警告对话框",[19,50718,50719],{},"③console.log('控制台打印')",[19,50721,50722],{},"控制台输出语法，程序员调试使用",[19,50724,50725],{},"输入log就行，自动生成：",[19,50727,50728],{},[28,50729],{"alt":30,"src":50730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[151,50732,50733],{"start":167},[154,50734,50735],{},"输入语法：",[19,50737,50738],{},[28,50739],{"alt":30,"src":50740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[292,50742,50744],{"id":50743},"_2116-字面量","21.1.6 字面量",[19,50746,50747],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50749,50750],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50752,50754],{"id":50753},"_22-变量","2.2 变量",[151,50756,50757],{},[154,50758,50759],{},"变量声明",[19,50761,50762],{},"let 变量名",[1339,50764,50765,50768],{},[154,50766,50767],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[154,50769,50770],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[151,50772,50773],{"start":167},[154,50774,50775],{},"变量赋值",[312,50777,50781],{"className":50778,"code":50779,"language":50780,"meta":30,"style":30},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[318,50782,50783,50788],{"__ignoreMap":30},[321,50784,50785],{"class":323,"line":324},[321,50786,50787],{"class":331},"let age\n",[321,50789,50790],{"class":323,"line":167},[321,50791,50792],{"class":331},"age=18\n",[151,50794,50795,50798],{"start":200},[154,50796,50797],{},"连这些（变量的初始化）：let age=18",[154,50799,50800],{},"更新变量",[19,50802,50803],{},[28,50804],{"alt":30,"src":50805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[151,50807,50808],{"start":1407},[154,50809,50810],{},"声明多个变量",[19,50812,50813],{},[28,50814],{"alt":30,"src":50815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[151,50817,50818],{"start":1421},[154,50819,50820],{},"变量命名规则与规范",[19,50822,50823],{},[28,50824],{"alt":30,"src":50825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50827,50828],{},"遵守小驼峰！",[151,50830,50831],{"start":1427},[154,50832,50833],{},"变量拓展-let和var的区别",[19,50835,50836],{},[28,50837],{"alt":30,"src":50838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50840,50842],{"id":50841},"_23-数组","2.3 数组",[312,50844,50846],{"className":50778,"code":50845,"language":50780,"meta":30,"style":30},"let arr = []\n",[318,50847,50848],{"__ignoreMap":30},[321,50849,50850],{"class":323,"line":324},[321,50851,50845],{"class":331},[19,50853,50854],{},[28,50855],{"alt":30,"src":50856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50858,50859],{},[28,50860],{"alt":30,"src":50861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50863,50865],{"id":50864},"_24-常量","2.4 常量",[19,50867,50868],{},[28,50869],{"alt":30,"src":50870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,50872,50873],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50875,50877],{"id":50876},"_25-数据类型","2.5 数据类型",[19,50879,50880],{},[28,50881],{"alt":30,"src":50882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[151,50884,50885,50888],{},[154,50886,50887],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[154,50889,50890],{},"算数运算符：",[19,50892,50893],{},[28,50894],{"alt":30,"src":50895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[151,50897,50898],{"start":200},[154,50899,50900],{},"数字类型（Number）",[19,50902,50903],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,50905,50906],{},[28,50907],{"alt":30,"src":50908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[151,50910,50911],{"start":1401},[154,50912,50913],{},"字符串类型（string）",[19,50915,50916],{},[28,50917],{"alt":30,"src":50918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,50920,50921],{},"反引号也是可以使用的",[19,50923,50924],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,50926,50927],{},"例如：document.write(\"我今年\"+age+\"岁\")",[151,50929,50930],{"start":1407},[154,50931,50932],{},"模板字符串",[19,50934,50935],{},[28,50936],{"alt":30,"src":50937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,50939,50940],{},"类似于python的字符串格式化",[151,50942,50943],{"start":1421},[154,50944,50945],{},"布尔类型",[19,50947,50948],{},"true 和 false",[151,50950,50951],{"start":1427},[154,50952,50953],{},"未定义类型（underfined）",[19,50955,50956],{},"表示没有赋值",[19,50958,50959],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,50961,50962],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[151,50964,50965],{"start":1518},[154,50966,50967],{},"null（空类型）",[19,50969,50970],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,50972,50973],{},"赋值了，但是内容为空",[312,50975,50977],{"className":50778,"code":50976,"language":50780,"meta":30,"style":30},"typeof null\n输出的是'object'，是一个对象数据类型\n",[318,50978,50979,50984],{"__ignoreMap":30},[321,50980,50981],{"class":323,"line":324},[321,50982,50983],{"class":331},"typeof null\n",[321,50985,50986],{"class":323,"line":167},[321,50987,50988],{"class":331},"输出的是'object'，是一个对象数据类型\n",[151,50990,50991],{"start":1524},[154,50992,50993],{},"控制台检测数据类型",[19,50995,50996],{},[28,50997],{"alt":30,"src":50998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[151,51000,51001],{"start":1536},[154,51002,51003],{},"类型转换",[19,51005,51006],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51008,51009],{},"转换方式：隐式转换和显示转换",[19,51011,51012],{},"①隐式转换",[1339,51014,51015,51018,51021,51024],{},[154,51016,51017],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[154,51019,51020],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[154,51022,51023],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[154,51025,51026],{},"任何数据和字符串相加结果都是字符串",[19,51028,51029],{},"②显示转换",[19,51031,51032],{},[28,51033],{"alt":30,"src":51034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51036,51037],{},[28,51038],{"alt":30,"src":51039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51041,51042],{},"在输入的时候要用好隐式转换，简单写起来",[19,51044,51045],{},"let num = +prompt(’请输入数字：‘)",[19,51047,51048],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51050,51051],{},"console.log(parseInt('12.333px'))",[19,51053,51054],{},"输出为：12",[19,51056,51057],{},"console.log(parseInt('a'a'a12.333px'))",[19,51059,51060],{},"输出：NaN",[14,51062,51064],{"id":51063},"_26-运算符","2.6 运算符",[292,51066,51068],{"id":51067},"_261-赋值运算符","2.6.1 赋值运算符",[19,51070,51071],{},[28,51072],{"alt":30,"src":51073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[292,51075,51077],{"id":51076},"_262-一元运算符","2.6.2 一元运算符",[19,51079,51080],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51082,51083],{},[28,51084],{"alt":30,"src":51085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51087,51088],{},[28,51089],{"alt":30,"src":51090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51092,51093],{},"两者的区别：",[19,51095,51096],{},[28,51097],{"alt":30,"src":51098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51100,51101],{},"前置先自加；后置后加，代码执行完之后再加",[292,51103,51105],{"id":51104},"_263-比较运算符","2.6.3 比较运算符",[19,51107,51108],{},[28,51109],{"alt":30,"src":51110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51112,51113],{},"比较运算符也有隐式转换",[19,51115,51116],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51118,51119],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51121,51122],{},"要使用三等，开发的时候",[19,51124,51125],{},"NaN不等于任何人，包括它自己",[19,51127,51128],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51130,51131],{},"7\u002F10=0.7",[19,51133,51134],{},"最后：0.5+0.2=0.7",[19,51136,51137],{},"字符串比较，比较的是字符对应的ASCII码",[292,51139,51141],{"id":51140},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51143,51144],{},[28,51145],{"alt":30,"src":51146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51148,51149],{},[28,51150],{"alt":30,"src":51151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51153,51154],{},[28,51155],{"alt":30,"src":51156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51158,51159],{},"上述题目选D",[19,51161,51162],{},"与真2假1；或真1假2",[292,51164,51166],{"id":51165},"_265-运算符优先级","2.6.5 运算符优先级",[19,51168,51169],{},[28,51170],{"alt":30,"src":51171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51173,51174],{},"先算逻辑与，后算逻辑或",[14,51176,51178],{"id":51177},"_27-语句","2.7 语句",[19,51180,51181],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51183,51184],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51186,51187],{},[28,51188],{"alt":30,"src":51189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51191,51192],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51194,51195],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[292,51197,51199],{"id":51198},"_271-分支语句","2.7.1 分支语句",[22205,51201,51203],{"id":51202},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51205,51206],{},"if语句单行简单的话，可以不写{}，写在一行就行",[151,51208,51209],{},[154,51210,51211],{},"单分支语句",[19,51213,51214],{},[28,51215],{"alt":30,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51218,51219],{},"除了0，所有数字都为真",[312,51221,51223],{"className":50778,"code":51222,"language":50780,"meta":30,"style":30},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[318,51224,51225,51230,51235,51240,51244],{"__ignoreMap":30},[321,51226,51227],{"class":323,"line":324},[321,51228,51229],{"class":331},"if（0) {\n",[321,51231,51232],{"class":323,"line":167},[321,51233,51234],{"class":331},"    let a=1\n",[321,51236,51237],{"class":323,"line":200},[321,51238,51239],{"class":331},"    alert(typeof a)\n",[321,51241,51242],{"class":323,"line":1401},[321,51243,1771],{"class":331},[321,51245,51246],{"class":323,"line":1407},[321,51247,51248],{"class":331},"不输出，括号为假\n",[151,51250,51251],{"start":167},[154,51252,51253],{},"双分支语句",[19,51255,51256],{},[28,51257],{"alt":30,"src":51258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[151,51260,51261],{"start":200},[154,51262,51263],{},"多分支语句",[19,51265,51266],{},[28,51267],{"alt":30,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22205,51270,51272],{"id":51271},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51274,51275],{},[28,51276],{"alt":30,"src":51277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22205,51279,51281],{"id":51280},"_2713-switch语句","2.7.1.3 switch语句",[19,51283,51284],{},[28,51285],{"alt":30,"src":51286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51288,51289],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[292,51291,51293],{"id":51292},"_272-循环语句","2.7.2 循环语句",[22205,51295,51297],{"id":51296},"_2721-断点演示","2.7.2.1 断点演示",[19,51299,51300],{},[28,51301],{"alt":30,"src":51302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22205,51304,51306],{"id":51305},"_2722-while循环","2.7.2.2 while循环",[19,51308,51309],{},[28,51310],{"alt":30,"src":51311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51313,51314],{},[28,51315],{"alt":30,"src":51316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22205,51318,51320],{"id":51319},"_2723-for循环","2.7.2.3 for循环",[19,51322,51323],{},[28,51324],{"alt":30,"src":51325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51327,51328],{},"for(;;) {",[19,51330,1278],{},[19,51332,51333],{},"表示无限循环",[19,51335,51336],{},[28,51337],{"alt":30,"src":51338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22205,51340,51342],{"id":51341},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51344,51345],{},[28,51346],{"alt":30,"src":51347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51349,51351],{"id":51350},"_28-数组","2.8 数组",[292,51353,51355],{"id":51354},"_281-基础认识","2.8.1 基础认识",[19,51357,51358],{},[28,51359],{"alt":30,"src":51360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51362,51363],{},[28,51364],{"alt":30,"src":51365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51367,51368],{},[28,51369],{"alt":30,"src":51370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51372,51373],{},[28,51374],{"alt":30,"src":51375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[292,51377,51379],{"id":51378},"_282-操作数组","2.8.2 操作数组",[19,51381,51382],{},[28,51383],{"alt":30,"src":51384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[151,51386,51387],{},[154,51388,51389],{},"添加元素",[19,51391,51392],{},[28,51393],{"alt":30,"src":51394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51396,51397],{},"console.log(arr.push('green'))",[19,51399,51400],{},"输出结果：为新数组的长度",[19,51402,51403],{},[28,51404],{"alt":30,"src":51405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51407,51408],{},"push用的非常多，一定要记住",[151,51410,51411],{},[154,51412,51413],{},"删除元素",[19,51415,51416],{},[28,51417],{"alt":30,"src":51418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51420,51421],{},[28,51422],{"alt":30,"src":51423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51425,51426],{},[28,51427],{"alt":30,"src":51428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[292,51430,51432],{"id":51431},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[312,51434,51436],{"className":50778,"code":51435,"language":50780,"meta":30,"style":30},"\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",[318,51437,51438,51453,51469,51473,51482,51500,51524,51546,51560,51568,51575,51587,51598,51602,51606,51613,51625,51640,51653,51672,51689,51704,51716,51728,51740,51744,51748,51759,51769,51781,51793,51805,51816,51820,51824,51836,51840,51854,51858,51862,51873,51887,51899,51913,51917,51926,51935,51939,51948,51952,51961,51966,51971,51984,52012,52017,52022,52047,52052,52056,52061,52066,52081,52085,52090,52120,52132,52148,52164,52178,52183,52190,52194,52199,52212,52220,52228,52232],{"__ignoreMap":30},[321,51439,51440,51443,51447,51450],{"class":323,"line":324},[321,51441,51442],{"class":331},"\u003C!",[321,51444,51446],{"class":51445},"s9eBZ","DOCTYPE",[321,51448,51449],{"class":2169}," html",[321,51451,51452],{"class":331},">\n",[321,51454,51455,51457,51459,51462,51464,51467],{"class":323,"line":167},[321,51456,1242],{"class":331},[321,51458,50780],{"class":51445},[321,51460,51461],{"class":2169}," lang",[321,51463,377],{"class":331},[321,51465,51466],{"class":436},"\"en\"",[321,51468,51452],{"class":331},[321,51470,51471],{"class":323,"line":200},[321,51472,2606],{"emptyLinePlaceholder":251},[321,51474,51475,51477,51480],{"class":323,"line":1401},[321,51476,1242],{"class":331},[321,51478,51479],{"class":51445},"head",[321,51481,51452],{"class":331},[321,51483,51484,51487,51490,51493,51495,51498],{"class":323,"line":1407},[321,51485,51486],{"class":331},"    \u003C",[321,51488,51489],{"class":51445},"meta",[321,51491,51492],{"class":2169}," charset",[321,51494,377],{"class":331},[321,51496,51497],{"class":436},"\"UTF-8\"",[321,51499,51452],{"class":331},[321,51501,51502,51504,51506,51509,51511,51514,51517,51519,51522],{"class":323,"line":1421},[321,51503,51486],{"class":331},[321,51505,51489],{"class":51445},[321,51507,51508],{"class":2169}," http-equiv",[321,51510,377],{"class":331},[321,51512,51513],{"class":436},"\"X-UA-Compatible\"",[321,51515,51516],{"class":2169}," content",[321,51518,377],{"class":331},[321,51520,51521],{"class":436},"\"IE=edge\"",[321,51523,51452],{"class":331},[321,51525,51526,51528,51530,51532,51534,51537,51539,51541,51544],{"class":323,"line":1427},[321,51527,51486],{"class":331},[321,51529,51489],{"class":51445},[321,51531,15127],{"class":2169},[321,51533,377],{"class":331},[321,51535,51536],{"class":436},"\"viewport\"",[321,51538,51516],{"class":2169},[321,51540,377],{"class":331},[321,51542,51543],{"class":436},"\"width=device-width, initial-scale=1.0\"",[321,51545,51452],{"class":331},[321,51547,51548,51550,51553,51556,51558],{"class":323,"line":1518},[321,51549,51486],{"class":331},[321,51551,51552],{"class":51445},"title",[321,51554,51555],{"class":331},">Document\u003C\u002F",[321,51557,51552],{"class":51445},[321,51559,51452],{"class":331},[321,51561,51562,51564,51566],{"class":323,"line":1524},[321,51563,51486],{"class":331},[321,51565,5333],{"class":51445},[321,51567,51452],{"class":331},[321,51569,51570,51573],{"class":323,"line":1536},[321,51571,51572],{"class":51445},"        *",[321,51574,15779],{"class":331},[321,51576,51577,51580,51583,51585],{"class":323,"line":1818},[321,51578,51579],{"class":380},"            margin",[321,51581,51582],{"class":331},": ",[321,51584,523],{"class":380},[321,51586,1497],{"class":331},[321,51588,51589,51592,51594,51596],{"class":323,"line":1823},[321,51590,51591],{"class":380},"            padding",[321,51593,51582],{"class":331},[321,51595,523],{"class":380},[321,51597,1497],{"class":331},[321,51599,51600],{"class":323,"line":1829},[321,51601,2735],{"class":331},[321,51603,51604],{"class":323,"line":1834},[321,51605,2606],{"emptyLinePlaceholder":251},[321,51607,51608,51611],{"class":323,"line":1848},[321,51609,51610],{"class":2169},"        .box",[321,51612,15779],{"class":331},[321,51614,51615,51618,51620,51623],{"class":323,"line":1853},[321,51616,51617],{"class":380},"            display",[321,51619,51582],{"class":331},[321,51621,51622],{"class":380},"flex",[321,51624,1497],{"class":331},[321,51626,51627,51630,51632,51635,51638],{"class":323,"line":1859},[321,51628,51629],{"class":380},"            width",[321,51631,51582],{"class":331},[321,51633,51634],{"class":380},"700",[321,51636,51637],{"class":327},"px",[321,51639,1497],{"class":331},[321,51641,51642,51645,51647,51649,51651],{"class":323,"line":1880},[321,51643,51644],{"class":380},"            height",[321,51646,51582],{"class":331},[321,51648,4179],{"class":380},[321,51650,51637],{"class":327},[321,51652,1497],{"class":331},[321,51654,51655,51658,51660,51662,51664,51667,51670],{"class":323,"line":1885},[321,51656,51657],{"class":380},"            border-left",[321,51659,51582],{"class":331},[321,51661,549],{"class":380},[321,51663,51637],{"class":327},[321,51665,51666],{"class":380}," solid",[321,51668,51669],{"class":380}," pink",[321,51671,1497],{"class":331},[321,51673,51674,51677,51679,51681,51683,51685,51687],{"class":323,"line":1899},[321,51675,51676],{"class":380},"            border-bottom",[321,51678,51582],{"class":331},[321,51680,549],{"class":380},[321,51682,51637],{"class":327},[321,51684,51666],{"class":380},[321,51686,51669],{"class":380},[321,51688,1497],{"class":331},[321,51690,51691,51693,51695,51697,51699,51702],{"class":323,"line":1904},[321,51692,51579],{"class":380},[321,51694,51582],{"class":331},[321,51696,988],{"class":380},[321,51698,51637],{"class":327},[321,51700,51701],{"class":380}," auto",[321,51703,1497],{"class":331},[321,51705,51706,51709,51711,51714],{"class":323,"line":1933},[321,51707,51708],{"class":380},"            justify-content",[321,51710,51582],{"class":331},[321,51712,51713],{"class":380},"space-around",[321,51715,1497],{"class":331},[321,51717,51718,51721,51723,51726],{"class":323,"line":1938},[321,51719,51720],{"class":380},"            align-items",[321,51722,51582],{"class":331},[321,51724,51725],{"class":380},"flex-end",[321,51727,1497],{"class":331},[321,51729,51730,51733,51735,51738],{"class":323,"line":1955},[321,51731,51732],{"class":380},"            text-align",[321,51734,51582],{"class":331},[321,51736,51737],{"class":380},"center",[321,51739,1497],{"class":331},[321,51741,51742],{"class":323,"line":1960},[321,51743,2735],{"class":331},[321,51745,51746],{"class":323,"line":1965},[321,51747,2606],{"emptyLinePlaceholder":251},[321,51749,51750,51752,51754,51757],{"class":323,"line":1970},[321,51751,51610],{"class":2169},[321,51753,1292],{"class":327},[321,51755,51756],{"class":51445},"div",[321,51758,15779],{"class":331},[321,51760,51761,51763,51765,51767],{"class":323,"line":1984},[321,51762,51617],{"class":380},[321,51764,51582],{"class":331},[321,51766,51622],{"class":380},[321,51768,1497],{"class":331},[321,51770,51771,51773,51775,51777,51779],{"class":323,"line":1989},[321,51772,51629],{"class":380},[321,51774,51582],{"class":331},[321,51776,988],{"class":380},[321,51778,51637],{"class":327},[321,51780,1497],{"class":331},[321,51782,51783,51786,51788,51791],{"class":323,"line":2783},[321,51784,51785],{"class":380},"            background-color",[321,51787,51582],{"class":331},[321,51789,51790],{"class":380},"pink",[321,51792,1497],{"class":331},[321,51794,51795,51798,51800,51803],{"class":323,"line":2797},[321,51796,51797],{"class":380},"            flex-direction",[321,51799,51582],{"class":331},[321,51801,51802],{"class":380},"column",[321,51804,1497],{"class":331},[321,51806,51807,51809,51811,51814],{"class":323,"line":2805},[321,51808,51708],{"class":380},[321,51810,51582],{"class":331},[321,51812,51813],{"class":380},"space-between",[321,51815,1497],{"class":331},[321,51817,51818],{"class":323,"line":2810},[321,51819,2735],{"class":331},[321,51821,51822],{"class":323,"line":2816},[321,51823,2606],{"emptyLinePlaceholder":251},[321,51825,51826,51828,51831,51834],{"class":323,"line":2822},[321,51827,51610],{"class":2169},[321,51829,51830],{"class":51445}," div",[321,51832,51833],{"class":51445}," span",[321,51835,15779],{"class":331},[321,51837,51838],{"class":323,"line":2827},[321,51839,2606],{"emptyLinePlaceholder":251},[321,51841,51842,51845,51847,51850,51852],{"class":323,"line":8155},[321,51843,51844],{"class":380},"            margin-top",[321,51846,51582],{"class":331},[321,51848,51849],{"class":380},"-20",[321,51851,51637],{"class":327},[321,51853,1497],{"class":331},[321,51855,51856],{"class":323,"line":8179},[321,51857,2735],{"class":331},[321,51859,51860],{"class":323,"line":8184},[321,51861,2606],{"emptyLinePlaceholder":251},[321,51863,51864,51866,51868,51871],{"class":323,"line":8190},[321,51865,51610],{"class":2169},[321,51867,51830],{"class":51445},[321,51869,51870],{"class":51445}," h4",[321,51872,15779],{"class":331},[321,51874,51875,51878,51880,51883,51885],{"class":323,"line":8217},[321,51876,51877],{"class":380},"            margin-bottom",[321,51879,51582],{"class":331},[321,51881,51882],{"class":380},"-35",[321,51884,51637],{"class":327},[321,51886,1497],{"class":331},[321,51888,51889,51891,51893,51895,51897],{"class":323,"line":8222},[321,51890,51629],{"class":380},[321,51892,51582],{"class":331},[321,51894,688],{"class":380},[321,51896,51637],{"class":327},[321,51898,1497],{"class":331},[321,51900,51901,51904,51906,51909,51911],{"class":323,"line":8228},[321,51902,51903],{"class":380},"            margin-left",[321,51905,51582],{"class":331},[321,51907,51908],{"class":380},"-10",[321,51910,51637],{"class":327},[321,51912,1497],{"class":331},[321,51914,51915],{"class":323,"line":8240},[321,51916,2735],{"class":331},[321,51918,51919,51922,51924],{"class":323,"line":8252},[321,51920,51921],{"class":331},"    \u003C\u002F",[321,51923,5333],{"class":51445},[321,51925,51452],{"class":331},[321,51927,51928,51931,51933],{"class":323,"line":8264},[321,51929,51930],{"class":331},"\u003C\u002F",[321,51932,51479],{"class":51445},[321,51934,51452],{"class":331},[321,51936,51937],{"class":323,"line":9923},[321,51938,2606],{"emptyLinePlaceholder":251},[321,51940,51941,51943,51946],{"class":323,"line":9948},[321,51942,1242],{"class":331},[321,51944,51945],{"class":51445},"body",[321,51947,51452],{"class":331},[321,51949,51950],{"class":323,"line":9971},[321,51951,2606],{"emptyLinePlaceholder":251},[321,51953,51954,51956,51959],{"class":323,"line":9995},[321,51955,51486],{"class":331},[321,51957,51958],{"class":51445},"script",[321,51960,51452],{"class":331},[321,51962,51963],{"class":323,"line":10000},[321,51964,51965],{"class":390},"        \u002F\u002F 1. 四次弹框效果\n",[321,51967,51968],{"class":323,"line":10005},[321,51969,51970],{"class":390},"        \u002F\u002F 声明一个新的数组\n",[321,51972,51973,51976,51979,51981],{"class":323,"line":10010},[321,51974,51975],{"class":327},"        let",[321,51977,51978],{"class":331}," arr ",[321,51980,377],{"class":327},[321,51982,51983],{"class":331}," []\n",[321,51985,51986,51988,51990,51993,51995,51997,51999,52001,52003,52006,52008,52010],{"class":323,"line":10019},[321,51987,3609],{"class":327},[321,51989,1864],{"class":331},[321,51991,51992],{"class":327},"let",[321,51994,9645],{"class":331},[321,51996,377],{"class":327},[321,51998,25263],{"class":380},[321,52000,9652],{"class":331},[321,52002,1794],{"class":327},[321,52004,52005],{"class":380}," 4",[321,52007,3420],{"class":331},[321,52009,2498],{"class":327},[321,52011,12649],{"class":331},[321,52013,52014],{"class":323,"line":10024},[321,52015,52016],{"class":390},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[321,52018,52019],{"class":323,"line":10030},[321,52020,52021],{"class":390},"            \u002F\u002F arr.push(num)\n",[321,52023,52024,52027,52030,52032,52035,52037,52040,52042,52045],{"class":323,"line":10051},[321,52025,52026],{"class":331},"            arr.",[321,52028,52029],{"class":2169},"push",[321,52031,332],{"class":331},[321,52033,52034],{"class":2169},"prompt",[321,52036,332],{"class":331},[321,52038,52039],{"class":436},"`请输入第${",[321,52041,773],{"class":331},[321,52043,52044],{"class":436},"}季度的数据:`",[321,52046,30642],{"class":331},[321,52048,52049],{"class":323,"line":10057},[321,52050,52051],{"class":390},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[321,52053,52054],{"class":323,"line":10071},[321,52055,2735],{"class":331},[321,52057,52058],{"class":323,"line":10077},[321,52059,52060],{"class":390},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[321,52062,52063],{"class":323,"line":10104},[321,52064,52065],{"class":390},"        \u002F\u002F 盒子开头\n",[321,52067,52068,52071,52074,52076,52079],{"class":323,"line":10113},[321,52069,52070],{"class":331},"        document.",[321,52072,52073],{"class":2169},"write",[321,52075,332],{"class":331},[321,52077,52078],{"class":436},"` \u003Cdiv class=\"box\">`",[321,52080,338],{"class":331},[321,52082,52083],{"class":323,"line":10119},[321,52084,2606],{"emptyLinePlaceholder":251},[321,52086,52087],{"class":323,"line":10127},[321,52088,52089],{"class":390},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[321,52091,52092,52094,52096,52098,52100,52102,52104,52106,52108,52111,52114,52116,52118],{"class":323,"line":10132},[321,52093,3609],{"class":327},[321,52095,1864],{"class":331},[321,52097,51992],{"class":327},[321,52099,9645],{"class":331},[321,52101,377],{"class":327},[321,52103,4299],{"class":380},[321,52105,9652],{"class":331},[321,52107,1242],{"class":327},[321,52109,52110],{"class":331}," arr.",[321,52112,52113],{"class":380},"length",[321,52115,3420],{"class":331},[321,52117,2498],{"class":327},[321,52119,12649],{"class":331},[321,52121,52122,52125,52127,52129],{"class":323,"line":16811},[321,52123,52124],{"class":331},"            document.",[321,52126,52073],{"class":2169},[321,52128,332],{"class":331},[321,52130,52131],{"class":436},"`\n",[321,52133,52134,52137,52139,52141,52143,52145],{"class":323,"line":16817},[321,52135,52136],{"class":436},"              \u003Cdiv style=\"height: ${",[321,52138,4086],{"class":331},[321,52140,1222],{"class":436},[321,52142,773],{"class":331},[321,52144,1272],{"class":436},[321,52146,52147],{"class":436},"}px;\">\n",[321,52149,52150,52153,52155,52157,52159,52161],{"class":323,"line":16840},[321,52151,52152],{"class":436},"                \u003Cspan>${",[321,52154,4086],{"class":331},[321,52156,1222],{"class":436},[321,52158,773],{"class":331},[321,52160,1272],{"class":436},[321,52162,52163],{"class":436},"}\u003C\u002Fspan>\n",[321,52165,52166,52169,52171,52173,52175],{"class":323,"line":16846},[321,52167,52168],{"class":436},"                \u003Ch4>第${",[321,52170,773],{"class":331},[321,52172,45711],{"class":327},[321,52174,25263],{"class":380},[321,52176,52177],{"class":436},"}季度\u003C\u002Fh4>\n",[321,52179,52180],{"class":323,"line":16869},[321,52181,52182],{"class":436},"              \u003C\u002Fdiv>          \n",[321,52184,52185,52188],{"class":323,"line":16883},[321,52186,52187],{"class":436},"            `",[321,52189,338],{"class":331},[321,52191,52192],{"class":323,"line":16903},[321,52193,2735],{"class":331},[321,52195,52196],{"class":323,"line":16909},[321,52197,52198],{"class":390},"        \u002F\u002F 盒子结尾\n",[321,52200,52201,52203,52205,52207,52210],{"class":323,"line":16920},[321,52202,52070],{"class":331},[321,52204,52073],{"class":2169},[321,52206,332],{"class":331},[321,52208,52209],{"class":436},"` \u003C\u002Fdiv>`",[321,52211,338],{"class":331},[321,52213,52214,52216,52218],{"class":323,"line":16943},[321,52215,51921],{"class":331},[321,52217,51958],{"class":51445},[321,52219,51452],{"class":331},[321,52221,52222,52224,52226],{"class":323,"line":16965},[321,52223,51930],{"class":331},[321,52225,51945],{"class":51445},[321,52227,51452],{"class":331},[321,52229,52230],{"class":323,"line":16970},[321,52231,2606],{"emptyLinePlaceholder":251},[321,52233,52234,52236,52238],{"class":323,"line":16976},[321,52235,51930],{"class":331},[321,52237,50780],{"class":51445},[321,52239,51452],{"class":331},[292,52241,52243],{"id":52242},"_284-冒泡排序","2.8.4 冒泡排序",[312,52245,52247],{"className":50778,"code":52246,"language":50780,"meta":30,"style":30},"\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",[318,52248,52249,52259,52273,52277,52285,52300,52320,52332,52340,52344,52352,52360,52392,52425,52462,52467,52486,52491,52504,52519,52535,52539,52544,52548,52558,52567,52575,52579],{"__ignoreMap":30},[321,52250,52251,52253,52255,52257],{"class":323,"line":324},[321,52252,51442],{"class":331},[321,52254,51446],{"class":51445},[321,52256,51449],{"class":2169},[321,52258,51452],{"class":331},[321,52260,52261,52263,52265,52267,52269,52271],{"class":323,"line":167},[321,52262,1242],{"class":331},[321,52264,50780],{"class":51445},[321,52266,51461],{"class":2169},[321,52268,377],{"class":331},[321,52270,51466],{"class":436},[321,52272,51452],{"class":331},[321,52274,52275],{"class":323,"line":200},[321,52276,2606],{"emptyLinePlaceholder":251},[321,52278,52279,52281,52283],{"class":323,"line":1401},[321,52280,1242],{"class":331},[321,52282,51479],{"class":51445},[321,52284,51452],{"class":331},[321,52286,52287,52290,52292,52294,52296,52298],{"class":323,"line":1407},[321,52288,52289],{"class":331},"  \u003C",[321,52291,51489],{"class":51445},[321,52293,51492],{"class":2169},[321,52295,377],{"class":331},[321,52297,51497],{"class":436},[321,52299,51452],{"class":331},[321,52301,52302,52304,52306,52308,52310,52312,52314,52316,52318],{"class":323,"line":1421},[321,52303,52289],{"class":331},[321,52305,51489],{"class":51445},[321,52307,15127],{"class":2169},[321,52309,377],{"class":331},[321,52311,51536],{"class":436},[321,52313,51516],{"class":2169},[321,52315,377],{"class":331},[321,52317,51543],{"class":436},[321,52319,51452],{"class":331},[321,52321,52322,52324,52326,52328,52330],{"class":323,"line":1427},[321,52323,52289],{"class":331},[321,52325,51552],{"class":51445},[321,52327,51555],{"class":331},[321,52329,51552],{"class":51445},[321,52331,51452],{"class":331},[321,52333,52334,52336,52338],{"class":323,"line":1518},[321,52335,51930],{"class":331},[321,52337,51479],{"class":51445},[321,52339,51452],{"class":331},[321,52341,52342],{"class":323,"line":1524},[321,52343,2606],{"emptyLinePlaceholder":251},[321,52345,52346,52348,52350],{"class":323,"line":1536},[321,52347,1242],{"class":331},[321,52349,51945],{"class":51445},[321,52351,51452],{"class":331},[321,52353,52354,52356,52358],{"class":323,"line":1818},[321,52355,52289],{"class":331},[321,52357,51958],{"class":51445},[321,52359,51452],{"class":331},[321,52361,52362,52365,52367,52369,52372,52374,52376,52378,52380,52382,52384,52386,52388,52390],{"class":323,"line":1823},[321,52363,52364],{"class":327},"    let",[321,52366,51978],{"class":331},[321,52368,377],{"class":327},[321,52370,52371],{"class":331}," [",[321,52373,651],{"class":380},[321,52375,12642],{"class":331},[321,52377,625],{"class":380},[321,52379,12642],{"class":331},[321,52381,403],{"class":380},[321,52383,12642],{"class":331},[321,52385,409],{"class":380},[321,52387,12642],{"class":331},[321,52389,549],{"class":380},[321,52391,33391],{"class":331},[321,52393,52394,52396,52398,52400,52402,52404,52406,52408,52410,52412,52414,52417,52419,52421,52423],{"class":323,"line":1829},[321,52395,3407],{"class":327},[321,52397,1864],{"class":331},[321,52399,51992],{"class":327},[321,52401,9645],{"class":331},[321,52403,377],{"class":327},[321,52405,4299],{"class":380},[321,52407,9652],{"class":331},[321,52409,1242],{"class":327},[321,52411,52110],{"class":331},[321,52413,52113],{"class":380},[321,52415,52416],{"class":327}," -",[321,52418,25263],{"class":380},[321,52420,3420],{"class":331},[321,52422,2498],{"class":327},[321,52424,12649],{"class":331},[321,52426,52427,52430,52432,52434,52436,52438,52440,52442,52444,52446,52448,52450,52452,52454,52456,52458,52460],{"class":323,"line":1834},[321,52428,52429],{"class":327},"      for",[321,52431,1864],{"class":331},[321,52433,51992],{"class":327},[321,52435,9707],{"class":331},[321,52437,377],{"class":327},[321,52439,4299],{"class":380},[321,52441,9714],{"class":331},[321,52443,1242],{"class":327},[321,52445,52110],{"class":331},[321,52447,52113],{"class":380},[321,52449,52416],{"class":327},[321,52451,9645],{"class":331},[321,52453,864],{"class":327},[321,52455,25263],{"class":380},[321,52457,9721],{"class":331},[321,52459,2498],{"class":327},[321,52461,12649],{"class":331},[321,52463,52464],{"class":323,"line":1848},[321,52465,52466],{"class":390},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[321,52468,52469,52471,52474,52476,52479,52481,52483],{"class":323,"line":1853},[321,52470,2703],{"class":327},[321,52472,52473],{"class":331}," (arr[j] ",[321,52475,1292],{"class":327},[321,52477,52478],{"class":331}," arr[j ",[321,52480,813],{"class":327},[321,52482,25263],{"class":380},[321,52484,52485],{"class":331},"]) {\n",[321,52487,52488],{"class":323,"line":1859},[321,52489,52490],{"class":390},"          \u002F\u002F 交换两个变量\n",[321,52492,52493,52496,52499,52501],{"class":323,"line":1880},[321,52494,52495],{"class":327},"          let",[321,52497,52498],{"class":331}," tmp ",[321,52500,377],{"class":327},[321,52502,52503],{"class":331}," arr[j]\n",[321,52505,52506,52509,52511,52513,52515,52517],{"class":323,"line":1885},[321,52507,52508],{"class":331},"          arr[j] ",[321,52510,377],{"class":327},[321,52512,52478],{"class":331},[321,52514,813],{"class":327},[321,52516,25263],{"class":380},[321,52518,33391],{"class":331},[321,52520,52521,52524,52526,52528,52530,52532],{"class":323,"line":1899},[321,52522,52523],{"class":331},"          arr[j ",[321,52525,813],{"class":327},[321,52527,25263],{"class":380},[321,52529,4649],{"class":331},[321,52531,377],{"class":327},[321,52533,52534],{"class":331}," tmp\n",[321,52536,52537],{"class":323,"line":1904},[321,52538,2735],{"class":331},[321,52540,52541],{"class":323,"line":1933},[321,52542,52543],{"class":331},"      }\n",[321,52545,52546],{"class":323,"line":1938},[321,52547,2393],{"class":331},[321,52549,52550,52553,52555],{"class":323,"line":1955},[321,52551,52552],{"class":331},"    document.",[321,52554,52073],{"class":2169},[321,52556,52557],{"class":331},"(arr)\n",[321,52559,52560,52563,52565],{"class":323,"line":1960},[321,52561,52562],{"class":331},"  \u003C\u002F",[321,52564,51958],{"class":51445},[321,52566,51452],{"class":331},[321,52568,52569,52571,52573],{"class":323,"line":1965},[321,52570,51930],{"class":331},[321,52572,51945],{"class":51445},[321,52574,51452],{"class":331},[321,52576,52577],{"class":323,"line":1970},[321,52578,2606],{"emptyLinePlaceholder":251},[321,52580,52581,52583,52585],{"class":323,"line":1984},[321,52582,51930],{"class":331},[321,52584,50780],{"class":51445},[321,52586,51452],{"class":331},[19,52588,52589],{},[28,52590],{"alt":30,"src":52591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52593,52594],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52596,52597],{},"let arr = [4, 2, 5, 1, 3]",[19,52599,52600],{},"\u002F\u002F 1.升序排列写法",[19,52602,52603],{},"arr.sort(function (a, b) {",[19,52605,52606],{},"return a - b",[19,52608,52609],{},"})",[19,52611,52612],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52614,52615],{},"\u002F\u002F 降序排列写法",[19,52617,52603],{},[19,52619,52620],{},"return b - a",[19,52622,52609],{},[19,52624,52625],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52627,52629],{"id":52628},"_29-函数","2.9 函数",[19,52631,52632],{},[28,52633],{"alt":30,"src":52634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52636,52637],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52639,52640],{},"函数的声明用function",[19,52642,52643],{},"函数里边可以嵌套函数",[292,52645,52647],{"id":52646},"_291-函数传参","2.9.1 函数传参",[19,52649,52650],{},[28,52651],{"alt":30,"src":52652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52654,52655],{},[28,52656],{"alt":30,"src":52657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1339,52659,52660,52663,52666,52669,52672,52675],{},[154,52661,52662],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[154,52664,52665],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[154,52667,52668],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[154,52670,52671],{},"开发中尽量保持形参和实参个数一致",[154,52673,52674],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[154,52676,52677],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52679,52680],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[292,52682,52684],{"id":52683},"_292-函数的返回值","2.9.2 函数的返回值",[19,52686,52687],{},[28,52688],{"alt":30,"src":52689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52691,52692],{},[28,52693],{"alt":30,"src":52694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1339,52696,52697,52700,52703,52706,52709],{},[154,52698,52699],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[154,52701,52702],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[154,52704,52705],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[154,52707,52708],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[154,52710,52711],{},"断点调试:进入函数内部看执行过程F11",[292,52713,52715],{"id":52714},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[312,52717,52719],{"className":50778,"code":52718,"language":50780,"meta":30,"style":30},"    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",[318,52720,52721,52726,52731,52735,52740],{"__ignoreMap":30},[321,52722,52723],{"class":323,"line":324},[321,52724,52725],{"class":331},"    function fn(a, b) {\n",[321,52727,52728],{"class":323,"line":167},[321,52729,52730],{"class":331},"      console.log(a + b);\n",[321,52732,52733],{"class":323,"line":200},[321,52734,2393],{"class":331},[321,52736,52737],{"class":323,"line":1401},[321,52738,52739],{"class":331},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[321,52741,52742],{"class":323,"line":1407},[321,52743,52744],{"class":331},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[292,52746,52748],{"id":52747},"_294-作用域","2.9.4 作用域",[1339,52750,52751,52757,52762,52765,52768],{},[154,52752,52753,52754],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[481,52755,52756],{},"作用域",[154,52758,52759],{},[481,52760,52761],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[154,52763,52764],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[154,52766,52767],{},"函数内部可以直接所使用全局变量",[154,52769,52770],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52772,14840],{},[312,52774,52776],{"className":50778,"code":52775,"language":50780,"meta":30,"style":30},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[318,52777,52778,52783,52788,52792,52797,52802,52807],{"__ignoreMap":30},[321,52779,52780],{"class":323,"line":324},[321,52781,52782],{"class":331},"    function fun() {\n",[321,52784,52785],{"class":323,"line":167},[321,52786,52787],{"class":331},"      num = 10\n",[321,52789,52790],{"class":323,"line":200},[321,52791,2393],{"class":331},[321,52793,52794],{"class":323,"line":1401},[321,52795,52796],{"class":331},"    fun()\n",[321,52798,52799],{"class":323,"line":1407},[321,52800,52801],{"class":331},"    console.log(num)\n",[321,52803,52804],{"class":323,"line":1421},[321,52805,52806],{"class":331},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[321,52808,52809],{"class":323,"line":1427},[321,52810,52811],{"class":331},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1339,52813,52814,52817],{},[154,52815,52816],{},"函数内部的形参可以看做是局部变量",[154,52818,52819],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52821,52822,52823],{},"变量访问原则： ",[481,52824,52825],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[292,52827,52829],{"id":52828},"_295-匿名函数","2.9.5 匿名函数",[19,52831,52832],{},"函数可以分为具名函数和匿名函数",[19,52834,52835],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[151,52837,52838],{},[154,52839,52840],{},"函数表达式",[19,52842,52843],{},[28,52844],{"alt":30,"src":52845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52847,52848],{},"里边也可以写参数",[19,52850,52851],{},"具名函数调用位置可以随意调整；",[19,52853,52854],{},"匿名函数函数表达式形式只能在声明后才可以使用",[151,52856,52857],{"start":167},[154,52858,52859],{},"立即执行函数",[19,52861,52862],{},[28,52863],{"alt":30,"src":52864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52866,52867],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52869,52870],{},"写法：两个小括号，然后在第一个小括号中写function",[19,52872,52873],{},"(function () {})();",[19,52875,52876],{},"不要落下最后的;",[19,52878,52879],{},"立即执行函数必须要加;",[19,52881,52882],{},"分号写前写后都没问题",[19,52884,52885],{},"写前：",[19,52887,52888],{},"(function() {})()",[19,52890,52891],{},";(function () {})();",[19,52893,52894],{},"写后:",[19,52896,52897],{},"(function() {})();",[19,52899,52873],{},[19,52901,52902],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,52904,52905],{},"还有一种写法：",[19,52907,52908],{},"(function(){}());",[19,52910,52911],{},"或者:",[19,52913,52914],{},"!function(){}();",[19,52916,52917],{},"立即执行函数有时候也是可以加名字的：",[19,52919,52920],{},"(function flexible(window,document) {}(window,document));",[19,52922,52923],{},"省一些调用方法",[292,52925,52927],{"id":52926},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,52929,52930],{},[28,52931],{"alt":30,"src":52932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,52934,52935],{},"这样就不用非得给x,y初始化了",[19,52937,52938],{},[28,52939],{"alt":30,"src":52940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,52942,52943],{},"代码执行时先看左边",[19,52945,52946],{},"例如：console.log(false && 3+5)",[19,52948,52949],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,52951,52952],{},"&&都是真时，就返回最后一个真值",[19,52954,52955],{},"console.log(11 && 22)",[19,52957,52958],{},"输出22",[19,52960,52961],{},"逻辑与：遇真则真",[19,52963,14840],{},[19,52965,52966],{},"let age=1",[19,52968,52969],{},"console.log(11 || age++)",[19,52971,52972],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,52974,52975],{},"console.log(11 || 22)",[19,52977,52978],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,52980,52981],{},"||如果都是假的话，就取最后一个假的值了",[292,52983,52985],{"id":52984},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,52987,52988],{},"显示转换：",[19,52990,52991,52994,52995],{},[481,52992,52993],{},"记忆","： ",[481,52996,52997],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,52999,53000],{},"空字符串为假，其他字符串全为真",[19,53002,53003],{},[28,53004],{"alt":30,"src":53005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53007,53008],{},"隐式转换：",[19,53010,53011],{},[28,53012],{"alt":30,"src":53013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53015,53016],{},"隐式转换:",[19,53018,53019],{},"null+3=3",[19,53021,53022],{},"undefined+3=NaN",[19,53024,53025],{},"null==undefined 输出true,他两个都当0看",[19,53027,53028],{},"null===undefined 输出false",[19,53030,53031],{},"undefined做任何操作都是NaN",[19,53033,53034],{},"NaN不等于NaN，NaN表示计算错误",[14,53036,53038],{"id":53037},"_210-对象","2.10 对象",[292,53040,53042],{"id":53041},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53044,53045],{},"对象也是一种数据类型，里边的数据是无序的",[19,53047,53048],{},"对象由属性和方法组成",[19,53050,53051],{},[28,53052],{"alt":30,"src":53053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53055,53056],{},[28,53057],{"alt":30,"src":53058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53060,53061],{},[28,53062],{"alt":30,"src":53063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[292,53065,53067],{"id":53066},"_2102-对象属性","2.10.2 对象属性",[19,53069,53070],{},[28,53071],{"alt":30,"src":53072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[151,53074,53075],{},[154,53076,53077],{},"查询对象",[19,53079,53080],{},"对象名.属性 goods.uname",[19,53082,53083],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53085,53086],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53088,53089],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53091,53092],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[151,53094,53095],{"start":167},[154,53096,53097],{},"重新赋值",[19,53099,53100],{},"对象名.属性=新值",[151,53102,53103],{"start":200},[154,53104,53105],{},"增加新数据",[19,53107,53100],{},[151,53109,53110],{"start":1401},[154,53111,53112],{},"删除对象中的属性",[19,53114,53115],{},"delete 对象名.属性",[292,53117,53119],{"id":53118},"_2103-对象方法","2.10.3 对象方法",[19,53121,53122],{},[28,53123],{"alt":30,"src":53124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53126,53127],{},"后边跟的是匿名函数",[19,53129,53130],{},"对象外面的叫函数；对象内部的叫方法",[19,53132,53133],{},[28,53134],{"alt":30,"src":53135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[292,53137,53139],{"id":53138},"_2104-遍历对象","2.10.4 遍历对象",[19,53141,53142],{},"理解为加括号的python字典遍历",[19,53144,53145],{},[28,53146],{"alt":30,"src":53147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53149,53150],{},"k是字符串类型",[19,53152,53153],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[312,53155,53157],{"className":50778,"code":53156,"language":50780,"meta":30,"style":30},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[318,53158,53159,53164,53169,53174,53179],{"__ignoreMap":30},[321,53160,53161],{"class":323,"line":324},[321,53162,53163],{"class":331},"   let arr = [1, 2, 3]\n",[321,53165,53166],{"class":323,"line":167},[321,53167,53168],{"class":331},"    for (let k in arr) {\n",[321,53170,53171],{"class":323,"line":200},[321,53172,53173],{"class":331},"      console.log(k)\n",[321,53175,53176],{"class":323,"line":1401},[321,53177,53178],{"class":331},"      console.log(arr[k])\n",[321,53180,53181],{"class":323,"line":1407},[321,53182,2393],{"class":331},[19,53184,53185],{},[28,53186],{"alt":30,"src":53187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53189,53190],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53192,53193],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53195,53196],{},"for in 得到的k是属性名",[51958,53198,53199],{},"\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,53201,53202],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[292,53204,53206],{"id":53205},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53208,53209],{},"数组中放对象信息",[312,53211,53215],{"className":53212,"code":53213,"language":53214,"meta":30,"style":30},"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",[318,53216,53217,53225,53230,53235,53240,53245,53250,53255,53260,53265,53270,53275,53280,53284,53288],{"__ignoreMap":30},[321,53218,53219,53221,53223],{"class":323,"line":324},[321,53220,1242],{"class":331},[321,53222,51958],{"class":51445},[321,53224,51452],{"class":331},[321,53226,53227],{"class":323,"line":167},[321,53228,53229],{"class":331},"    let students = [\n",[321,53231,53232],{"class":323,"line":200},[321,53233,53234],{"class":331},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[321,53236,53237],{"class":323,"line":1401},[321,53238,53239],{"class":331},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[321,53241,53242],{"class":323,"line":1407},[321,53243,53244],{"class":331},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[321,53246,53247],{"class":323,"line":1421},[321,53248,53249],{"class":331},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[321,53251,53252],{"class":323,"line":1427},[321,53253,53254],{"class":331},"    ]\n",[321,53256,53257],{"class":323,"line":1518},[321,53258,53259],{"class":331},"    for (let i = 0; i \u003C students.length; i++) {\n",[321,53261,53262],{"class":323,"line":1524},[321,53263,53264],{"class":331},"      for (let k in students[i]) {\n",[321,53266,53267],{"class":323,"line":1536},[321,53268,53269],{"class":331},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[321,53271,53272],{"class":323,"line":1818},[321,53273,53274],{"class":331},"        \u002F\u002F输出每个人的名字：\n",[321,53276,53277],{"class":323,"line":1823},[321,53278,53279],{"class":331},"        \u002F\u002Fconsole.log(students[i].name)\n",[321,53281,53282],{"class":323,"line":1829},[321,53283,52543],{"class":331},[321,53285,53286],{"class":323,"line":1834},[321,53287,2393],{"class":331},[321,53289,53290,53292,53294],{"class":323,"line":1848},[321,53291,52562],{"class":331},[321,53293,51958],{"class":51445},[321,53295,51452],{"class":331},[292,53297,53299],{"id":53298},"_2106-内置对象","2.10.6 内置对象",[19,53301,53302],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[151,53304,53305],{},[154,53306,53307],{},"数学对象Math",[19,53309,53310],{},[28,53311],{"alt":30,"src":53312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53314,53315],{},[570,53316,53319],{"href":53317,"rel":53318},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24073],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53321,53322],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53324,53325],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53327,53328],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53330,53331],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53333,53334],{},"null属于对象数据类型",[151,53336,53337],{"start":167},[154,53338,53339],{},"生成任意范围随机数",[19,53341,53342],{},[28,53343],{"alt":30,"src":53344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53346,53347],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53349,53350],{},"乘以几就取不到几",[19,53352,53353],{},"取数组中的随机元素：",[19,53355,53356],{},"let arr = ['red', 'green', 'blue']",[19,53358,53359],{},"let random = Math.floor(Math.random() * arr.length)",[19,53361,53362],{},"console.log(arr[random])",[19,53364,53365],{},"这个函数得到的是全闭区间",[19,53367,53368],{},"function getRandom(N, M) {",[19,53370,53371],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53373,1278],{},[19,53375,53376],{},"console.log(getRandom(4, 8))",[292,53378,53380],{"id":53379},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53382,53383],{},[28,53384],{"alt":30,"src":53385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53387,53388],{},[28,53389],{"alt":30,"src":53390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53392,53393],{},[28,53394],{"alt":30,"src":53395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53397,53398],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53400,53401],{},[28,53402],{"alt":30,"src":53403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53405,53406],{},[28,53407],{"alt":30,"src":53408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53410,53411],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53413,53414],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53416,53417],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5333,53419,53420],{},"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":30,"searchDepth":167,"depth":167,"links":53422},[53423,53431,53432,53433,53434,53435,53442,53446,53452,53461],{"id":50613,"depth":167,"text":50614,"children":53424},[53425,53426,53427,53428,53429,53430],{"id":50617,"depth":200,"text":50618},{"id":50634,"depth":200,"text":50635},{"id":50674,"depth":200,"text":50675},{"id":50686,"depth":200,"text":50687},{"id":50695,"depth":200,"text":50696},{"id":50743,"depth":200,"text":50744},{"id":50753,"depth":167,"text":50754},{"id":50841,"depth":167,"text":50842},{"id":50864,"depth":167,"text":50865},{"id":50876,"depth":167,"text":50877},{"id":51063,"depth":167,"text":51064,"children":53436},[53437,53438,53439,53440,53441],{"id":51067,"depth":200,"text":51068},{"id":51076,"depth":200,"text":51077},{"id":51104,"depth":200,"text":51105},{"id":51140,"depth":200,"text":51141},{"id":51165,"depth":200,"text":51166},{"id":51177,"depth":167,"text":51178,"children":53443},[53444,53445],{"id":51198,"depth":200,"text":51199},{"id":51292,"depth":200,"text":51293},{"id":51350,"depth":167,"text":51351,"children":53447},[53448,53449,53450,53451],{"id":51354,"depth":200,"text":51355},{"id":51378,"depth":200,"text":51379},{"id":51431,"depth":200,"text":51432},{"id":52242,"depth":200,"text":52243},{"id":52628,"depth":167,"text":52629,"children":53453},[53454,53455,53456,53457,53458,53459,53460],{"id":52646,"depth":200,"text":52647},{"id":52683,"depth":200,"text":52684},{"id":52714,"depth":200,"text":52715},{"id":52747,"depth":200,"text":52748},{"id":52828,"depth":200,"text":52829},{"id":52926,"depth":200,"text":52927},{"id":52984,"depth":200,"text":52985},{"id":53037,"depth":167,"text":53038,"children":53462},[53463,53464,53465,53466,53467,53468,53469],{"id":53041,"depth":200,"text":53042},{"id":53066,"depth":200,"text":53067},{"id":53118,"depth":200,"text":53119},{"id":53138,"depth":200,"text":53139},{"id":53205,"depth":200,"text":53206},{"id":53298,"depth":200,"text":53299},{"id":53379,"depth":200,"text":53380},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50605,"description":23584},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53476,"title":53477,"body":53478,"description":23584,"extension":249,"meta":76818,"navigation":251,"path":76819,"seo":76820,"stem":76821,"__hash__":76822},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53479,"toc":76758},[53480,53483,53486,53489,53494,53497,53500,53503,53507,53511,53517,53522,53530,53537,53540,53544,53549,53554,53559,53562,53565,53576,53579,53583,53586,53589,53594,53599,53604,53607,53610,53702,53705,53710,53713,53718,53721,53724,53729,53732,53737,53741,53744,53758,53762,53767,53770,53773,53777,53782,53785,53789,53793,53798,53802,53807,53810,53813,53816,53819,53822,53825,53830,53835,53863,53866,53869,53872,53877,53880,53883,53886,53889,53893,53922,53926,53931,53936,53939,53942,53945,53950,54065,54070,54075,54236,54241,54244,54248,54253,54258,54261,54264,54267,54270,54273,54276,54279,54282,54285,54288,54291,54294,54297,54300,54302,54305,54308,54311,54316,54320,54717,54720,54726,54730,54735,56017,56022,56025,56028,56031,56036,57232,57236,57242,57247,57250,57255,57260,57264,57268,57273,57276,57281,57284,57287,57291,58199,58202,58206,58427,58430,58433,58436,58662,58665,58889,58892,58896,58901,58904,58907,59135,59138,59171,59174,59178,59183,59187,59190,59193,59196,59199,59202,59205,59208,59213,60493,60497,60500,61593,61597,61600,61603,61606,61609,61613,61616,61619,61621,61629,63110,63114,63117,63120,63123,63332,63335,63339,63343,63348,63353,63356,63359,63364,63368,63373,63376,63485,63489,63494,63499,63502,63505,63509,63514,63519,63524,63527,63530,63541,63544,63549,63554,63557,63560,63633,63637,63642,63645,63647,63658,63662,63667,64993,64996,64999,65002,65004,65007,65010,65013,65016,65019,65022,65025,65028,65031,65034,65037,65040,65042,65044,65047,65051,66145,66148,66151,66167,66181,66184,66189,66195,66200,66204,66208,66213,66217,66222,66664,66669,66672,66676,66681,66684,66687,66691,66696,66700,66705,66710,66714,66719,66724,66727,66732,66737,66741,66746,66751,66855,66858,66862,66867,67233,67236,67239,67242,67245,67248,67251,67254,67257,68553,68557,68562,68567,68570,68573,68576,68579,68581,68586,68591,68594,68598,68603,68608,68613,68616,68619,68622,68625,68628,68633,68636,68640,68645,68650,68654,68659,68662,68667,68670,68673,68676,68679,68682,68687,68690,68693,68696,68699,68703,68708,68711,68715,68720,68723,68726,68730,68759,68762,68766,68770,68775,68779,68784,68787,68790,68793,68796,68799,68802,68805,68808,68811,68814,68817,68820,68823,68826,68830,68835,68840,68843,68847,68851,68856,68859,68863,68866,68869,68874,68879,68884,68889,68894,68897,68900,68905,68910,68914,68919,68922,68927,68930,68933,68936,68939,68944,68947,68956,68960,68965,68968,68971,68975,68978,68983,68987,68990,68996,69002,69006,69032,69035,70596,70599,71095,71098,71103,71108,71113,71117,71122,71127,71132,71136,71141,71144,71147,71150,71153,71157,71160,71165,71168,71173,71177,71182,71185,71190,71195,71200,71203,71206,71211,71216,71219,71222,71226,71229,71234,71237,71242,71245,71250,71255,71260,71263,71268,71333,71336,71347,71351,71356,71528,71532,71537,71540,71543,71546,71550,71561,71565,71568,71573,71578,71581,71584,71587,71590,71593,71595,71598,71601,71604,71609,71612,71617,71620,71624,71627,71630,71644,71648,71651,71706,71711,71714,71717,71722,71725,71729,71734,71864,71868,71873,71878,71959,71964,71968,71971,71976,71981,71987,71990,71993,71996,72000,72005,72008,72019,72023,72040,75087,75091,75094,75097,75100,75121,75125,75128,75136,75139,75144,75147,75150,75155,75160,75164,75185,75189,75194,75197,75200,75203,75206,75210,75215,75218,75222,75227,75230,75235,75238,75243,75246,75251,76454,76458,76463,76466,76471,76755],[10,53481,53477],{"id":53482},"_3web-apis",[19,53484,53485],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53487,53488],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53490,53491],{},[28,53492],{"alt":30,"src":53493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53495,53496],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53498,53499],{},"建议数组和对象使用 const 来声明",[19,53501,53502],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53504,53506],{"id":53505},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[292,53508,53510],{"id":53509},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53512,53513,53516],{},[318,53514,53515],{},"document"," = HTML 文件解析后的对象化表示；",[19,53518,53519,53521],{},[318,53520,53515],{}," ≠ HTML 文件本身",[19,53523,53524,53529],{},[481,53525,53526],{},[318,53527,53528],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53531,53532,53536],{},[481,53533,53534],{},[318,53535,53515],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53538,53539],{},"document实际上为window.document的简写",[292,53541,53543],{"id":53542},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53545,53546],{},[28,53547],{"alt":30,"src":53548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53550,53551],{},[28,53552],{"alt":30,"src":53553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53555,53556],{},[28,53557],{"alt":30,"src":53558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53560,53561],{},"console.dir()",[19,53563,53564],{},"dir用来打印对象",[1339,53566,53567,53570,53573],{},[154,53568,53569],{},"任何一个标签，都是一个对象",[154,53571,53572],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[154,53574,53575],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53577,53578],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[292,53580,53582],{"id":53581},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53584,53585],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53587,53588],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53590,53591],{},[481,53592,53593],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[151,53595,53596],{},[154,53597,53598],{},"利用CSS选择器来获取标签元素",[19,53600,53601],{},[28,53602],{"alt":30,"src":53603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53605,53606],{},"里边的选择器必须必须加引号！！！",[19,53608,53609],{},"只选择第一个元素",[312,53611,53613],{"className":53212,"code":53612,"language":53214,"meta":30,"style":30},"\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",[318,53614,53615,53623,53644,53663,53671,53676,53681,53686,53694],{"__ignoreMap":30},[321,53616,53617,53619,53621],{"class":323,"line":324},[321,53618,1242],{"class":331},[321,53620,51945],{"class":51445},[321,53622,51452],{"class":331},[321,53624,53625,53627,53629,53632,53634,53637,53640,53642],{"class":323,"line":167},[321,53626,52289],{"class":331},[321,53628,51756],{"class":51445},[321,53630,53631],{"class":2169}," class",[321,53633,377],{"class":331},[321,53635,53636],{"class":436},"\"box\"",[321,53638,53639],{"class":331},">123\u003C\u002F",[321,53641,51756],{"class":51445},[321,53643,51452],{"class":331},[321,53645,53646,53648,53650,53652,53654,53656,53659,53661],{"class":323,"line":200},[321,53647,52289],{"class":331},[321,53649,51756],{"class":51445},[321,53651,53631],{"class":2169},[321,53653,377],{"class":331},[321,53655,53636],{"class":436},[321,53657,53658],{"class":331},">456\u003C\u002F",[321,53660,51756],{"class":51445},[321,53662,51452],{"class":331},[321,53664,53665,53667,53669],{"class":323,"line":1401},[321,53666,52289],{"class":331},[321,53668,51958],{"class":51445},[321,53670,51452],{"class":331},[321,53672,53673],{"class":323,"line":1407},[321,53674,53675],{"class":331},"    \u002F\u002F 1.获取匹配的第一个元素\n",[321,53677,53678],{"class":323,"line":1421},[321,53679,53680],{"class":331},"    const box = document.querySelector('div')\n",[321,53682,53683],{"class":323,"line":1427},[321,53684,53685],{"class":331},"    console.dir(box)\n",[321,53687,53688,53690,53692],{"class":323,"line":1518},[321,53689,52562],{"class":331},[321,53691,51958],{"class":51445},[321,53693,51452],{"class":331},[321,53695,53696,53698,53700],{"class":323,"line":1524},[321,53697,51930],{"class":331},[321,53699,51945],{"class":51445},[321,53701,51452],{"class":331},[19,53703,53704],{},"只选123，不选456",[19,53706,53707],{},[28,53708],{"alt":30,"src":53709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53711,53712],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53714,53715],{},[28,53716],{"alt":30,"src":53717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53719,53720],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53722,53723],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[151,53725,53726],{"start":167},[154,53727,53728],{},"其他方法来获取标签元素",[19,53730,53731],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53733,53734],{},[28,53735],{"alt":30,"src":53736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[292,53738,53740],{"id":53739},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53742,53743],{},"设置修改DOM元素内容有两种方式：",[1339,53745,53746,53749,53752,53755],{},[154,53747,53748],{},"元素.innerText=''",[154,53750,53751],{},"元素.innerHTML=''",[154,53753,53754],{},"不写字符串输出数字也是可以的",[154,53756,53757],{},"元素.innerHtml=1",[22205,53759,53761],{"id":53760},"_3131-innertext","3.1.3.1 innerText",[19,53763,53764],{},[28,53765],{"alt":30,"src":53766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53768,53769],{},"思路：实现了修改盒子中的内容！",[19,53771,53772],{},"它只显示纯文本，不解析标签",[22205,53774,53776],{"id":53775},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53778,53779],{},[28,53780],{"alt":30,"src":53781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53783,53784],{},"相比于innerText，他的强大之处在于可以解析标签",[292,53786,53788],{"id":53787},"_314-操作元素属性","3.1.4 操作元素属性",[22205,53790,53792],{"id":53791},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53794,53795],{},[28,53796],{"alt":30,"src":53797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22205,53799,53801],{"id":53800},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53803,53804],{},[28,53805],{"alt":30,"src":53806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53808,53809],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53811,53812],{},"div.style.backgroundColor = 'hotpink'",[19,53814,53815],{},"如果按照css的写法，-表示减，就会出错",[19,53817,53818],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53820,53821],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53823,53824],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53826,53827],{},[28,53828],{"alt":30,"src":53829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53831,53832],{},[28,53833],{"alt":30,"src":53834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[151,53836,53837,53840,53843,53846,53849,53852],{},[154,53838,53839],{},"className这个方式就是修改很多样式的时候来使用的！",[154,53841,53842],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[154,53844,53845],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[154,53847,53848],{},"className为属性名，如果还用class的话就导致与关键字冲突",[154,53850,53851],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[154,53853,53854,53855,53860],{},"解析标签的时候就变为了",[51756,53856],{"className":53857},[53858,53859],"nav","box",[53861,53862],"br",{},[19,53864,53865],{},"例子：",[51756,53867],{"className":53868},[53858],[51958,53870,53871],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,53873,53874],{},[28,53875],{"alt":30,"src":53876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,53878,53879],{},"追加和删除类名用classList",[19,53881,53882],{},"常用于类似于开关的操作",[19,53884,53885],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,53887,53888],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22205,53890,53892],{"id":53891},"_3143-牢记点","3.1.4.3 牢记点",[151,53894,53895,53898,53901,53904,53907,53910,53913,53916,53919],{},[154,53896,53897],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[154,53899,53900],{},"使用style属性操作css时不要忘记引号",[154,53902,53903],{},"使用className或者classList时也不要忘记引号",[154,53905,53906],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[154,53908,53909],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[154,53911,53912],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[154,53914,53915],{},"若： let arr=['1','2',3] arr[0]=1",[154,53917,53918],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[154,53920,53921],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[292,53923,53925],{"id":53924},"_315-操作表单元素","3.1.5 操作表单元素",[151,53927,53928],{},[154,53929,53930],{},"天生的属性",[19,53932,53933],{},[28,53934],{"alt":30,"src":53935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,53937,53938],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,53940,53941],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,53943,53944],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,53946,53947],{},[28,53948],{"alt":30,"src":53949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[312,53951,53953],{"className":50778,"code":53952,"language":50780,"meta":30,"style":30},"在复选框中如果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",[318,53954,53955,53960,53992,53997,54002,54007,54012,54016,54021,54026,54043,54055,54060],{"__ignoreMap":30},[321,53956,53957],{"class":323,"line":324},[321,53958,53959],{"class":331},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[321,53961,53962,53964,53967,53970,53972,53975,53977,53979,53981,53983,53985,53987,53990],{"class":323,"line":167},[321,53963,1242],{"class":331},[321,53965,53966],{"class":51445},"input",[321,53968,53969],{"class":2169}," type",[321,53971,377],{"class":331},[321,53973,53974],{"class":436},"\"checkbox\"",[321,53976,15127],{"class":2169},[321,53978,377],{"class":331},[321,53980,7859],{"class":436},[321,53982,15166],{"class":2169},[321,53984,377],{"class":331},[321,53986,7859],{"class":436},[321,53988,53989],{"class":2169}," checked",[321,53991,51452],{"class":331},[321,53993,53994],{"class":323,"line":200},[321,53995,53996],{"class":331},"不选的话：\n",[321,53998,53999],{"class":323,"line":1401},[321,54000,54001],{"class":331},"const input = document.querySelector('input')\n",[321,54003,54004],{"class":323,"line":1407},[321,54005,54006],{"class":331},"input.checked=false\n",[321,54008,54009],{"class":323,"line":1421},[321,54010,54011],{"class":331},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[321,54013,54014],{"class":323,"line":1427},[321,54015,2606],{"emptyLinePlaceholder":251},[321,54017,54018],{"class":323,"line":1518},[321,54019,54020],{"class":331},"禁用按钮：\n",[321,54022,54023],{"class":323,"line":1524},[321,54024,54025],{"class":331},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[321,54027,54028,54030,54033,54036,54039,54041],{"class":323,"line":1536},[321,54029,1242],{"class":331},[321,54031,54032],{"class":51445},"button",[321,54034,54035],{"class":2169}," disabled",[321,54037,54038],{"class":331},">点击\u003C\u002F",[321,54040,54032],{"class":51445},[321,54042,51452],{"class":331},[321,54044,54045,54047,54049,54051,54053],{"class":323,"line":1818},[321,54046,1242],{"class":331},[321,54048,54032],{"class":51445},[321,54050,54038],{"class":331},[321,54052,54032],{"class":51445},[321,54054,51452],{"class":331},[321,54056,54057],{"class":323,"line":1823},[321,54058,54059],{"class":331},"const bt = document.querySelector('button')\n",[321,54061,54062],{"class":323,"line":1829},[321,54063,54064],{"class":331},"bt.disabled = false\n",[151,54066,54067],{"start":167},[154,54068,54069],{},"自定义属性",[19,54071,54072],{},[28,54073],{"alt":30,"src":54074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[312,54076,54078],{"className":53212,"code":54077,"language":53214,"meta":30,"style":30},"\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",[318,54079,54080,54088,54116,54135,54154,54173,54192,54200,54205,54210,54215,54220,54228],{"__ignoreMap":30},[321,54081,54082,54084,54086],{"class":323,"line":324},[321,54083,1242],{"class":331},[321,54085,51945],{"class":51445},[321,54087,51452],{"class":331},[321,54089,54090,54092,54094,54097,54099,54101,54104,54106,54109,54112,54114],{"class":323,"line":167},[321,54091,52289],{"class":331},[321,54093,51756],{"class":51445},[321,54095,54096],{"class":2169}," data-id",[321,54098,377],{"class":331},[321,54100,3884],{"class":436},[321,54102,54103],{"class":2169}," data-spm",[321,54105,377],{"class":331},[321,54107,54108],{"class":436},"\"我不知道\"",[321,54110,54111],{"class":331},">1\u003C\u002F",[321,54113,51756],{"class":51445},[321,54115,51452],{"class":331},[321,54117,54118,54120,54122,54124,54126,54128,54131,54133],{"class":323,"line":200},[321,54119,52289],{"class":331},[321,54121,51756],{"class":51445},[321,54123,54096],{"class":2169},[321,54125,377],{"class":331},[321,54127,3907],{"class":436},[321,54129,54130],{"class":331},">2\u003C\u002F",[321,54132,51756],{"class":51445},[321,54134,51452],{"class":331},[321,54136,54137,54139,54141,54143,54145,54147,54150,54152],{"class":323,"line":1401},[321,54138,52289],{"class":331},[321,54140,51756],{"class":51445},[321,54142,54096],{"class":2169},[321,54144,377],{"class":331},[321,54146,3920],{"class":436},[321,54148,54149],{"class":331},">3\u003C\u002F",[321,54151,51756],{"class":51445},[321,54153,51452],{"class":331},[321,54155,54156,54158,54160,54162,54164,54166,54169,54171],{"class":323,"line":1407},[321,54157,52289],{"class":331},[321,54159,51756],{"class":51445},[321,54161,54096],{"class":2169},[321,54163,377],{"class":331},[321,54165,3933],{"class":436},[321,54167,54168],{"class":331},">4\u003C\u002F",[321,54170,51756],{"class":51445},[321,54172,51452],{"class":331},[321,54174,54175,54177,54179,54181,54183,54185,54188,54190],{"class":323,"line":1421},[321,54176,52289],{"class":331},[321,54178,51756],{"class":51445},[321,54180,54096],{"class":2169},[321,54182,377],{"class":331},[321,54184,3954],{"class":436},[321,54186,54187],{"class":331},">5\u003C\u002F",[321,54189,51756],{"class":51445},[321,54191,51452],{"class":331},[321,54193,54194,54196,54198],{"class":323,"line":1427},[321,54195,52289],{"class":331},[321,54197,51958],{"class":51445},[321,54199,51452],{"class":331},[321,54201,54202],{"class":323,"line":1518},[321,54203,54204],{"class":331},"    const one = document.querySelector('div')\n",[321,54206,54207],{"class":323,"line":1524},[321,54208,54209],{"class":331},"    console.log(one.dataset)\n",[321,54211,54212],{"class":323,"line":1536},[321,54213,54214],{"class":331},"    console.log(one.dataset.id)\n",[321,54216,54217],{"class":323,"line":1818},[321,54218,54219],{"class":331},"    console.log(one.dataset.spm)\n",[321,54221,54222,54224,54226],{"class":323,"line":1823},[321,54223,52562],{"class":331},[321,54225,51958],{"class":51445},[321,54227,51452],{"class":331},[321,54229,54230,54232,54234],{"class":323,"line":1829},[321,54231,51930],{"class":331},[321,54233,51945],{"class":51445},[321,54235,51452],{"class":331},[19,54237,54238],{},[28,54239],{"alt":30,"src":54240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54242,54243],{},"document.querySelector选择的是第一个对象（元素）",[292,54245,54247],{"id":54246},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54249,54250],{},[28,54251],{"alt":30,"src":54252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54254,54255],{},[28,54256],{"alt":30,"src":54257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54259,54260],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51958,54262,54263],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54265,54266],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51958,54268,54269],{},"\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,54271,54272],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54274,54275],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54277,54278],{},"单位为毫秒！！！",[19,54280,54281],{},"可以搭配匿名函数来用！！！",[19,54283,54284],{},"setInterval(function () {",[19,54286,54287],{},"alert('两秒执行一次')",[19,54289,54290],{},"}, 2000)",[19,54292,54293],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54295,54296],{},"function fn() {",[19,54298,54299],{},"document.write(1)",[19,54301,1278],{},[19,54303,54304],{},"setInterval(fn, 1000)",[19,54306,54307],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54309,54310],{},"setInterval('fn()', 1000)",[19,54312,54313],{},[28,54314],{"alt":30,"src":54315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22205,54317,54319],{"id":54318},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[312,54321,54323],{"className":50778,"code":54322,"language":50780,"meta":30,"style":30},"\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",[318,54324,54325,54335,54349,54353,54361,54375,54395,54407,54415,54419,54427,54464,54469,54474,54479,54487,54495,54517,54525,54530,54552,54557,54562,54573,54578,54598,54606,54621,54636,54647,54652,54662,54672,54676,54685,54689,54697,54705,54709],{"__ignoreMap":30},[321,54326,54327,54329,54331,54333],{"class":323,"line":324},[321,54328,51442],{"class":331},[321,54330,51446],{"class":51445},[321,54332,51449],{"class":2169},[321,54334,51452],{"class":331},[321,54336,54337,54339,54341,54343,54345,54347],{"class":323,"line":167},[321,54338,1242],{"class":331},[321,54340,50780],{"class":51445},[321,54342,51461],{"class":2169},[321,54344,377],{"class":331},[321,54346,51466],{"class":436},[321,54348,51452],{"class":331},[321,54350,54351],{"class":323,"line":200},[321,54352,2606],{"emptyLinePlaceholder":251},[321,54354,54355,54357,54359],{"class":323,"line":1401},[321,54356,1242],{"class":331},[321,54358,51479],{"class":51445},[321,54360,51452],{"class":331},[321,54362,54363,54365,54367,54369,54371,54373],{"class":323,"line":1407},[321,54364,52289],{"class":331},[321,54366,51489],{"class":51445},[321,54368,51492],{"class":2169},[321,54370,377],{"class":331},[321,54372,51497],{"class":436},[321,54374,51452],{"class":331},[321,54376,54377,54379,54381,54383,54385,54387,54389,54391,54393],{"class":323,"line":1421},[321,54378,52289],{"class":331},[321,54380,51489],{"class":51445},[321,54382,15127],{"class":2169},[321,54384,377],{"class":331},[321,54386,51536],{"class":436},[321,54388,51516],{"class":2169},[321,54390,377],{"class":331},[321,54392,51543],{"class":436},[321,54394,51452],{"class":331},[321,54396,54397,54399,54401,54403,54405],{"class":323,"line":1427},[321,54398,52289],{"class":331},[321,54400,51552],{"class":51445},[321,54402,51555],{"class":331},[321,54404,51552],{"class":51445},[321,54406,51452],{"class":331},[321,54408,54409,54411,54413],{"class":323,"line":1518},[321,54410,51930],{"class":331},[321,54412,51479],{"class":51445},[321,54414,51452],{"class":331},[321,54416,54417],{"class":323,"line":1524},[321,54418,2606],{"emptyLinePlaceholder":251},[321,54420,54421,54423,54425],{"class":323,"line":1536},[321,54422,1242],{"class":331},[321,54424,51945],{"class":51445},[321,54426,51452],{"class":331},[321,54428,54429,54431,54434,54436,54438,54440,54442,54444,54446,54449,54451,54454,54457,54459,54462],{"class":323,"line":1818},[321,54430,52289],{"class":331},[321,54432,54433],{"class":51445},"textarea",[321,54435,15127],{"class":2169},[321,54437,377],{"class":331},[321,54439,7859],{"class":436},[321,54441,15166],{"class":2169},[321,54443,377],{"class":331},[321,54445,7859],{"class":436},[321,54447,54448],{"class":2169}," cols",[321,54450,377],{"class":331},[321,54452,54453],{"class":436},"\"30\"",[321,54455,54456],{"class":2169}," rows",[321,54458,377],{"class":331},[321,54460,54461],{"class":436},"\"10\"",[321,54463,51452],{"class":331},[321,54465,54466],{"class":323,"line":1823},[321,54467,54468],{"class":331},"        用户注册协议\n",[321,54470,54471],{"class":323,"line":1829},[321,54472,54473],{"class":331},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[321,54475,54476],{"class":323,"line":1834},[321,54477,54478],{"class":331},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[321,54480,54481,54483,54485],{"class":323,"line":1848},[321,54482,51921],{"class":331},[321,54484,54433],{"class":51445},[321,54486,51452],{"class":331},[321,54488,54489,54491,54493],{"class":323,"line":1853},[321,54490,52289],{"class":331},[321,54492,53861],{"class":51445},[321,54494,51452],{"class":331},[321,54496,54497,54499,54501,54503,54505,54508,54510,54513,54515],{"class":323,"line":1859},[321,54498,52289],{"class":331},[321,54500,54032],{"class":51445},[321,54502,53631],{"class":2169},[321,54504,377],{"class":331},[321,54506,54507],{"class":436},"\"btn\"",[321,54509,54035],{"class":2169},[321,54511,54512],{"class":331},">我已经阅读用户协议(5)\u003C\u002F",[321,54514,54032],{"class":51445},[321,54516,51452],{"class":331},[321,54518,54519,54521,54523],{"class":323,"line":1880},[321,54520,52289],{"class":331},[321,54522,51958],{"class":51445},[321,54524,51452],{"class":331},[321,54526,54527],{"class":323,"line":1885},[321,54528,54529],{"class":390},"    \u002F\u002F 1. 获取元素\n",[321,54531,54532,54534,54537,54539,54542,54545,54547,54550],{"class":323,"line":1899},[321,54533,11428],{"class":327},[321,54535,54536],{"class":380}," btn",[321,54538,13771],{"class":327},[321,54540,54541],{"class":331}," document.",[321,54543,54544],{"class":2169},"querySelector",[321,54546,332],{"class":331},[321,54548,54549],{"class":436},"'.btn'",[321,54551,338],{"class":331},[321,54553,54554],{"class":323,"line":1904},[321,54555,54556],{"class":390},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[321,54558,54559],{"class":323,"line":1933},[321,54560,54561],{"class":390},"    \u002F\u002F 2. 倒计时\n",[321,54563,54564,54566,54568,54570],{"class":323,"line":1938},[321,54565,52364],{"class":327},[321,54567,9645],{"class":331},[321,54569,377],{"class":327},[321,54571,54572],{"class":380}," 5\n",[321,54574,54575],{"class":323,"line":1955},[321,54576,54577],{"class":390},"    \u002F\u002F 2.1 开启定时器\n",[321,54579,54580,54582,54585,54587,54590,54592,54595],{"class":323,"line":1960},[321,54581,52364],{"class":327},[321,54583,54584],{"class":331}," n ",[321,54586,377],{"class":327},[321,54588,54589],{"class":2169}," setInterval",[321,54591,332],{"class":331},[321,54593,54594],{"class":327},"function",[321,54596,54597],{"class":331}," () {\n",[321,54599,54600,54603],{"class":323,"line":1965},[321,54601,54602],{"class":331},"      i",[321,54604,54605],{"class":327},"--\n",[321,54607,54608,54611,54613,54616,54618],{"class":323,"line":1970},[321,54609,54610],{"class":331},"      btn.innerHTML ",[321,54612,377],{"class":327},[321,54614,54615],{"class":436}," `我已经阅读用户协议(${",[321,54617,773],{"class":331},[321,54619,54620],{"class":436},"})`\n",[321,54622,54623,54626,54629,54632,54634],{"class":323,"line":1984},[321,54624,54625],{"class":327},"      if",[321,54627,54628],{"class":331}," (i ",[321,54630,54631],{"class":327},"===",[321,54633,4299],{"class":380},[321,54635,12649],{"class":331},[321,54637,54638,54641,54644],{"class":323,"line":1989},[321,54639,54640],{"class":2169},"        clearInterval",[321,54642,54643],{"class":331},"(n)  ",[321,54645,54646],{"class":390},"\u002F\u002F 关闭定时器\n",[321,54648,54649],{"class":323,"line":2783},[321,54650,54651],{"class":390},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[321,54653,54654,54657,54659],{"class":323,"line":2797},[321,54655,54656],{"class":331},"        btn.disabled ",[321,54658,377],{"class":327},[321,54660,54661],{"class":380}," false\n",[321,54663,54664,54667,54669],{"class":323,"line":2805},[321,54665,54666],{"class":331},"        btn.innerHTML ",[321,54668,377],{"class":327},[321,54670,54671],{"class":436}," '同意'\n",[321,54673,54674],{"class":323,"line":2810},[321,54675,52543],{"class":331},[321,54677,54678,54681,54683],{"class":323,"line":2816},[321,54679,54680],{"class":331},"    }, ",[321,54682,6617],{"class":380},[321,54684,338],{"class":331},[321,54686,54687],{"class":323,"line":2822},[321,54688,2606],{"emptyLinePlaceholder":251},[321,54690,54691,54693,54695],{"class":323,"line":2827},[321,54692,52562],{"class":331},[321,54694,51958],{"class":51445},[321,54696,51452],{"class":331},[321,54698,54699,54701,54703],{"class":323,"line":8155},[321,54700,51930],{"class":331},[321,54702,51945],{"class":51445},[321,54704,51452],{"class":331},[321,54706,54707],{"class":323,"line":8179},[321,54708,2606],{"emptyLinePlaceholder":251},[321,54710,54711,54713,54715],{"class":323,"line":8184},[321,54712,51930],{"class":331},[321,54714,50780],{"class":51445},[321,54716,51452],{"class":331},[19,54718,54719],{},"不要一直想着用死循环,避免死循环",[19,54721,54722,54725],{},[318,54723,54724],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22205,54727,54729],{"id":54728},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[151,54731,54732],{},[154,54733,54734],{},"法1",[312,54736,54738],{"className":50778,"code":54737,"language":50780,"meta":30,"style":30},"\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",[318,54739,54740,54750,54764,54768,54776,54790,54810,54822,54830,54836,54847,54858,54862,54866,54873,54885,54889,54893,54900,54912,54926,54939,54953,54957,54961,54968,54979,54990,55001,55013,55025,55037,55041,55045,55053,55063,55076,55088,55101,55105,55109,55116,55126,55138,55150,55161,55172,55182,55194,55206,55210,55214,55223,55235,55247,55275,55288,55292,55296,55303,55314,55318,55326,55334,55338,55346,55360,55375,55399,55407,55422,55435,55443,55464,55476,55488,55500,55512,55524,55536,55548,55557,55565,55573,55581,55593,55616,55635,55654,55673,55692,55711,55730,55750,55754,55774,55793,55813,55834,55845,55862,55872,55882,55892,55897,55902,55907,55912,55937,55950,55954,55977,55981,55989,55997,56005,56009],{"__ignoreMap":30},[321,54741,54742,54744,54746,54748],{"class":323,"line":324},[321,54743,51442],{"class":331},[321,54745,51446],{"class":51445},[321,54747,51449],{"class":2169},[321,54749,51452],{"class":331},[321,54751,54752,54754,54756,54758,54760,54762],{"class":323,"line":167},[321,54753,1242],{"class":331},[321,54755,50780],{"class":51445},[321,54757,51461],{"class":2169},[321,54759,377],{"class":331},[321,54761,51466],{"class":436},[321,54763,51452],{"class":331},[321,54765,54766],{"class":323,"line":200},[321,54767,2606],{"emptyLinePlaceholder":251},[321,54769,54770,54772,54774],{"class":323,"line":1401},[321,54771,1242],{"class":331},[321,54773,51479],{"class":51445},[321,54775,51452],{"class":331},[321,54777,54778,54780,54782,54784,54786,54788],{"class":323,"line":1407},[321,54779,52289],{"class":331},[321,54781,51489],{"class":51445},[321,54783,51492],{"class":2169},[321,54785,377],{"class":331},[321,54787,51497],{"class":436},[321,54789,51452],{"class":331},[321,54791,54792,54794,54796,54798,54800,54802,54804,54806,54808],{"class":323,"line":1421},[321,54793,52289],{"class":331},[321,54795,51489],{"class":51445},[321,54797,15127],{"class":2169},[321,54799,377],{"class":331},[321,54801,51536],{"class":436},[321,54803,51516],{"class":2169},[321,54805,377],{"class":331},[321,54807,51543],{"class":436},[321,54809,51452],{"class":331},[321,54811,54812,54814,54816,54818,54820],{"class":323,"line":1427},[321,54813,52289],{"class":331},[321,54815,51552],{"class":51445},[321,54817,51555],{"class":331},[321,54819,51552],{"class":51445},[321,54821,51452],{"class":331},[321,54823,54824,54826,54828],{"class":323,"line":1518},[321,54825,52289],{"class":331},[321,54827,5333],{"class":51445},[321,54829,51452],{"class":331},[321,54831,54832,54834],{"class":323,"line":1524},[321,54833,6610],{"class":51445},[321,54835,15779],{"class":331},[321,54837,54838,54841,54843,54845],{"class":323,"line":1536},[321,54839,54840],{"class":380},"      padding",[321,54842,51582],{"class":331},[321,54844,523],{"class":380},[321,54846,1497],{"class":331},[321,54848,54849,54852,54854,54856],{"class":323,"line":1818},[321,54850,54851],{"class":380},"      margin",[321,54853,51582],{"class":331},[321,54855,523],{"class":380},[321,54857,1497],{"class":331},[321,54859,54860],{"class":323,"line":1823},[321,54861,2393],{"class":331},[321,54863,54864],{"class":323,"line":1829},[321,54865,2606],{"emptyLinePlaceholder":251},[321,54867,54868,54871],{"class":323,"line":1834},[321,54869,54870],{"class":51445},"    li",[321,54872,15779],{"class":331},[321,54874,54875,54878,54880,54883],{"class":323,"line":1848},[321,54876,54877],{"class":380},"      list-style",[321,54879,51582],{"class":331},[321,54881,54882],{"class":380},"none",[321,54884,1497],{"class":331},[321,54886,54887],{"class":323,"line":1853},[321,54888,2393],{"class":331},[321,54890,54891],{"class":323,"line":1859},[321,54892,2606],{"emptyLinePlaceholder":251},[321,54894,54895,54898],{"class":323,"line":1880},[321,54896,54897],{"class":2169},"    .box",[321,54899,15779],{"class":331},[321,54901,54902,54905,54907,54910],{"class":323,"line":1885},[321,54903,54904],{"class":380},"      position",[321,54906,51582],{"class":331},[321,54908,54909],{"class":380},"relative",[321,54911,1497],{"class":331},[321,54913,54914,54917,54919,54922,54924],{"class":323,"line":1899},[321,54915,54916],{"class":380},"      width",[321,54918,51582],{"class":331},[321,54920,54921],{"class":380},"976",[321,54923,51637],{"class":327},[321,54925,1497],{"class":331},[321,54927,54928,54931,54933,54935,54937],{"class":323,"line":1904},[321,54929,54930],{"class":380},"      height",[321,54932,51582],{"class":331},[321,54934,1745],{"class":380},[321,54936,51637],{"class":327},[321,54938,1497],{"class":331},[321,54940,54941,54943,54945,54947,54949,54951],{"class":323,"line":1933},[321,54942,54851],{"class":380},[321,54944,51582],{"class":331},[321,54946,643],{"class":380},[321,54948,51637],{"class":327},[321,54950,51701],{"class":380},[321,54952,1497],{"class":331},[321,54954,54955],{"class":323,"line":1938},[321,54956,2393],{"class":331},[321,54958,54959],{"class":323,"line":1955},[321,54960,2606],{"emptyLinePlaceholder":251},[321,54962,54963,54966],{"class":323,"line":1960},[321,54964,54965],{"class":2169},"    .slider-footer",[321,54967,15779],{"class":331},[321,54969,54970,54972,54974,54977],{"class":323,"line":1965},[321,54971,54904],{"class":380},[321,54973,51582],{"class":331},[321,54975,54976],{"class":380},"absolute",[321,54978,1497],{"class":331},[321,54980,54981,54984,54986,54988],{"class":323,"line":1970},[321,54982,54983],{"class":380},"      left",[321,54985,51582],{"class":331},[321,54987,523],{"class":380},[321,54989,1497],{"class":331},[321,54991,54992,54995,54997,54999],{"class":323,"line":1984},[321,54993,54994],{"class":380},"      bottom",[321,54996,51582],{"class":331},[321,54998,523],{"class":380},[321,55000,1497],{"class":331},[321,55002,55003,55005,55007,55009,55011],{"class":323,"line":1989},[321,55004,54916],{"class":380},[321,55006,51582],{"class":331},[321,55008,643],{"class":380},[321,55010,660],{"class":327},[321,55012,1497],{"class":331},[321,55014,55015,55017,55019,55021,55023],{"class":323,"line":2783},[321,55016,54930],{"class":380},[321,55018,51582],{"class":331},[321,55020,907],{"class":380},[321,55022,660],{"class":327},[321,55024,1497],{"class":331},[321,55026,55027,55030,55032,55035],{"class":323,"line":2797},[321,55028,55029],{"class":380},"      background-color",[321,55031,51582],{"class":331},[321,55033,55034],{"class":380},"skyblue",[321,55036,1497],{"class":331},[321,55038,55039],{"class":323,"line":2805},[321,55040,2393],{"class":331},[321,55042,55043],{"class":323,"line":2810},[321,55044,2606],{"emptyLinePlaceholder":251},[321,55046,55047,55049,55051],{"class":323,"line":2816},[321,55048,54965],{"class":2169},[321,55050,7032],{"class":51445},[321,55052,15779],{"class":331},[321,55054,55055,55057,55059,55061],{"class":323,"line":2822},[321,55056,54904],{"class":380},[321,55058,51582],{"class":331},[321,55060,54976],{"class":380},[321,55062,1497],{"class":331},[321,55064,55065,55068,55070,55072,55074],{"class":323,"line":2827},[321,55066,55067],{"class":380},"      font-size",[321,55069,51582],{"class":331},[321,55071,1233],{"class":380},[321,55073,51637],{"class":327},[321,55075,1497],{"class":331},[321,55077,55078,55080,55082,55084,55086],{"class":323,"line":8155},[321,55079,54983],{"class":380},[321,55081,51582],{"class":331},[321,55083,1032],{"class":380},[321,55085,51637],{"class":327},[321,55087,1497],{"class":331},[321,55089,55090,55093,55095,55097,55099],{"class":323,"line":8179},[321,55091,55092],{"class":380},"      top",[321,55094,51582],{"class":331},[321,55096,651],{"class":380},[321,55098,51637],{"class":327},[321,55100,1497],{"class":331},[321,55102,55103],{"class":323,"line":8184},[321,55104,2393],{"class":331},[321,55106,55107],{"class":323,"line":8190},[321,55108,2606],{"emptyLinePlaceholder":251},[321,55110,55111,55114],{"class":323,"line":8217},[321,55112,55113],{"class":51445},"    ul",[321,55115,15779],{"class":331},[321,55117,55118,55120,55122,55124],{"class":323,"line":8222},[321,55119,54904],{"class":380},[321,55121,51582],{"class":331},[321,55123,54976],{"class":380},[321,55125,1497],{"class":331},[321,55127,55128,55130,55132,55134,55136],{"class":323,"line":8228},[321,55129,55092],{"class":380},[321,55131,51582],{"class":331},[321,55133,1113],{"class":380},[321,55135,51637],{"class":327},[321,55137,1497],{"class":331},[321,55139,55140,55142,55144,55146,55148],{"class":323,"line":8240},[321,55141,54983],{"class":380},[321,55143,51582],{"class":331},[321,55145,1032],{"class":380},[321,55147,51637],{"class":327},[321,55149,1497],{"class":331},[321,55151,55152,55155,55157,55159],{"class":323,"line":8252},[321,55153,55154],{"class":380},"      display",[321,55156,51582],{"class":331},[321,55158,51622],{"class":380},[321,55160,1497],{"class":331},[321,55162,55163,55166,55168,55170],{"class":323,"line":8264},[321,55164,55165],{"class":380},"      justify-content",[321,55167,51582],{"class":331},[321,55169,51813],{"class":380},[321,55171,1497],{"class":331},[321,55173,55174,55176,55178,55180],{"class":323,"line":9923},[321,55175,54904],{"class":380},[321,55177,51582],{"class":331},[321,55179,54976],{"class":380},[321,55181,1497],{"class":331},[321,55183,55184,55186,55188,55190,55192],{"class":323,"line":9948},[321,55185,54916],{"class":380},[321,55187,51582],{"class":331},[321,55189,4198],{"class":380},[321,55191,51637],{"class":327},[321,55193,1497],{"class":331},[321,55195,55196,55198,55200,55202,55204],{"class":323,"line":9971},[321,55197,54930],{"class":380},[321,55199,51582],{"class":331},[321,55201,1032],{"class":380},[321,55203,51637],{"class":327},[321,55205,1497],{"class":331},[321,55207,55208],{"class":323,"line":9995},[321,55209,2393],{"class":331},[321,55211,55212],{"class":323,"line":10000},[321,55213,2606],{"emptyLinePlaceholder":251},[321,55215,55216,55218,55221],{"class":323,"line":10005},[321,55217,55113],{"class":51445},[321,55219,55220],{"class":51445}," li",[321,55222,15779],{"class":331},[321,55224,55225,55227,55229,55231,55233],{"class":323,"line":10010},[321,55226,54916],{"class":380},[321,55228,51582],{"class":331},[321,55230,1032],{"class":380},[321,55232,51637],{"class":327},[321,55234,1497],{"class":331},[321,55236,55237,55239,55241,55243,55245],{"class":323,"line":10019},[321,55238,54930],{"class":380},[321,55240,51582],{"class":331},[321,55242,1032],{"class":380},[321,55244,51637],{"class":327},[321,55246,1497],{"class":331},[321,55248,55249,55251,55253,55256,55258,55260,55262,55264,55266,55268,55270,55273],{"class":323,"line":10024},[321,55250,55029],{"class":380},[321,55252,51582],{"class":331},[321,55254,55255],{"class":380},"rgba",[321,55257,332],{"class":331},[321,55259,523],{"class":380},[321,55261,12642],{"class":331},[321,55263,523],{"class":380},[321,55265,12642],{"class":331},[321,55267,523],{"class":380},[321,55269,12642],{"class":331},[321,55271,55272],{"class":380},".4",[321,55274,2925],{"class":331},[321,55276,55277,55280,55282,55284,55286],{"class":323,"line":10030},[321,55278,55279],{"class":380},"      border-radius",[321,55281,51582],{"class":331},[321,55283,778],{"class":380},[321,55285,51637],{"class":327},[321,55287,1497],{"class":331},[321,55289,55290],{"class":323,"line":10051},[321,55291,2393],{"class":331},[321,55293,55294],{"class":323,"line":10057},[321,55295,2606],{"emptyLinePlaceholder":251},[321,55297,55298,55301],{"class":323,"line":10071},[321,55299,55300],{"class":2169},"    .activate",[321,55302,15779],{"class":331},[321,55304,55305,55307,55309,55312],{"class":323,"line":10077},[321,55306,55029],{"class":380},[321,55308,51582],{"class":331},[321,55310,55311],{"class":380},"#f7f7f7",[321,55313,1497],{"class":331},[321,55315,55316],{"class":323,"line":10104},[321,55317,2393],{"class":331},[321,55319,55320,55322,55324],{"class":323,"line":10113},[321,55321,52562],{"class":331},[321,55323,5333],{"class":51445},[321,55325,51452],{"class":331},[321,55327,55328,55330,55332],{"class":323,"line":10119},[321,55329,51930],{"class":331},[321,55331,51479],{"class":51445},[321,55333,51452],{"class":331},[321,55335,55336],{"class":323,"line":10127},[321,55337,2606],{"emptyLinePlaceholder":251},[321,55339,55340,55342,55344],{"class":323,"line":10132},[321,55341,1242],{"class":331},[321,55343,51945],{"class":51445},[321,55345,51452],{"class":331},[321,55347,55348,55350,55352,55354,55356,55358],{"class":323,"line":16811},[321,55349,52289],{"class":331},[321,55351,51756],{"class":51445},[321,55353,53631],{"class":2169},[321,55355,377],{"class":331},[321,55357,53636],{"class":436},[321,55359,51452],{"class":331},[321,55361,55362,55364,55366,55368,55370,55373],{"class":323,"line":16817},[321,55363,51486],{"class":331},[321,55365,51756],{"class":51445},[321,55367,53631],{"class":2169},[321,55369,377],{"class":331},[321,55371,55372],{"class":436},"\"slider-wrapper\"",[321,55374,51452],{"class":331},[321,55376,55377,55380,55382,55385,55387,55390,55393,55395,55397],{"class":323,"line":16840},[321,55378,55379],{"class":331},"      \u003C",[321,55381,28],{"class":51445},[321,55383,55384],{"class":2169}," src",[321,55386,377],{"class":331},[321,55388,55389],{"class":436},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[321,55391,55392],{"class":2169}," alt",[321,55394,377],{"class":331},[321,55396,7859],{"class":436},[321,55398,51452],{"class":331},[321,55400,55401,55403,55405],{"class":323,"line":16846},[321,55402,51921],{"class":331},[321,55404,51756],{"class":51445},[321,55406,51452],{"class":331},[321,55408,55409,55411,55413,55415,55417,55420],{"class":323,"line":16869},[321,55410,51486],{"class":331},[321,55412,51756],{"class":51445},[321,55414,53631],{"class":2169},[321,55416,377],{"class":331},[321,55418,55419],{"class":436},"\"slider-footer\"",[321,55421,51452],{"class":331},[321,55423,55424,55426,55428,55431,55433],{"class":323,"line":16883},[321,55425,55379],{"class":331},[321,55427,19],{"class":51445},[321,55429,55430],{"class":331},">对人类来说会不会太超前了?\u003C\u002F",[321,55432,19],{"class":51445},[321,55434,51452],{"class":331},[321,55436,55437,55439,55441],{"class":323,"line":16903},[321,55438,55379],{"class":331},[321,55440,1339],{"class":51445},[321,55442,51452],{"class":331},[321,55444,55445,55448,55450,55452,55454,55457,55460,55462],{"class":323,"line":16909},[321,55446,55447],{"class":331},"        \u003C",[321,55449,154],{"class":51445},[321,55451,53631],{"class":2169},[321,55453,377],{"class":331},[321,55455,55456],{"class":436},"\"activate\"",[321,55458,55459],{"class":331},">\u003C\u002F",[321,55461,154],{"class":51445},[321,55463,51452],{"class":331},[321,55465,55466,55468,55470,55472,55474],{"class":323,"line":16920},[321,55467,55447],{"class":331},[321,55469,154],{"class":51445},[321,55471,55459],{"class":331},[321,55473,154],{"class":51445},[321,55475,51452],{"class":331},[321,55477,55478,55480,55482,55484,55486],{"class":323,"line":16943},[321,55479,55447],{"class":331},[321,55481,154],{"class":51445},[321,55483,55459],{"class":331},[321,55485,154],{"class":51445},[321,55487,51452],{"class":331},[321,55489,55490,55492,55494,55496,55498],{"class":323,"line":16965},[321,55491,55447],{"class":331},[321,55493,154],{"class":51445},[321,55495,55459],{"class":331},[321,55497,154],{"class":51445},[321,55499,51452],{"class":331},[321,55501,55502,55504,55506,55508,55510],{"class":323,"line":16970},[321,55503,55447],{"class":331},[321,55505,154],{"class":51445},[321,55507,55459],{"class":331},[321,55509,154],{"class":51445},[321,55511,51452],{"class":331},[321,55513,55514,55516,55518,55520,55522],{"class":323,"line":16976},[321,55515,55447],{"class":331},[321,55517,154],{"class":51445},[321,55519,55459],{"class":331},[321,55521,154],{"class":51445},[321,55523,51452],{"class":331},[321,55525,55526,55528,55530,55532,55534],{"class":323,"line":16990},[321,55527,55447],{"class":331},[321,55529,154],{"class":51445},[321,55531,55459],{"class":331},[321,55533,154],{"class":51445},[321,55535,51452],{"class":331},[321,55537,55538,55540,55542,55544,55546],{"class":323,"line":17003},[321,55539,55447],{"class":331},[321,55541,154],{"class":51445},[321,55543,55459],{"class":331},[321,55545,154],{"class":51445},[321,55547,51452],{"class":331},[321,55549,55550,55553,55555],{"class":323,"line":17008},[321,55551,55552],{"class":331},"      \u003C\u002F",[321,55554,1339],{"class":51445},[321,55556,51452],{"class":331},[321,55558,55559,55561,55563],{"class":323,"line":17022},[321,55560,51921],{"class":331},[321,55562,51756],{"class":51445},[321,55564,51452],{"class":331},[321,55566,55567,55569,55571],{"class":323,"line":17027},[321,55568,52562],{"class":331},[321,55570,51756],{"class":51445},[321,55572,51452],{"class":331},[321,55574,55575,55577,55579],{"class":323,"line":17033},[321,55576,52289],{"class":331},[321,55578,51958],{"class":51445},[321,55580,51452],{"class":331},[321,55582,55583,55585,55588,55590],{"class":323,"line":17038},[321,55584,11428],{"class":327},[321,55586,55587],{"class":380}," arrImage",[321,55589,13771],{"class":327},[321,55591,55592],{"class":331}," [\n",[321,55594,55595,55598,55601,55604,55607,55610,55613],{"class":323,"line":17052},[321,55596,55597],{"class":331},"      { url: ",[321,55599,55600],{"class":436},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[321,55602,55603],{"class":331},", title: ",[321,55605,55606],{"class":436},"'对人类来说会不会太超前了?'",[321,55608,55609],{"class":331},", color: ",[321,55611,55612],{"class":436},"'rgba(100,67,68)'",[321,55614,55615],{"class":331}," },\n",[321,55617,55618,55620,55623,55625,55628,55630,55633],{"class":323,"line":17057},[321,55619,55597],{"class":331},[321,55621,55622],{"class":436},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[321,55624,55603],{"class":331},[321,55626,55627],{"class":436},"'开启剑与雪的黑暗传说!'",[321,55629,55609],{"class":331},[321,55631,55632],{"class":436},"'rgba(43,35,26)'",[321,55634,55615],{"class":331},[321,55636,55637,55639,55642,55644,55647,55649,55652],{"class":323,"line":17062},[321,55638,55597],{"class":331},[321,55640,55641],{"class":436},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[321,55643,55603],{"class":331},[321,55645,55646],{"class":436},"'真正的jo厨出现了!'",[321,55648,55609],{"class":331},[321,55650,55651],{"class":436},"'rgba(36,31,33)'",[321,55653,55615],{"class":331},[321,55655,55656,55658,55661,55663,55666,55668,55671],{"class":323,"line":17076},[321,55657,55597],{"class":331},[321,55659,55660],{"class":436},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[321,55662,55603],{"class":331},[321,55664,55665],{"class":436},"'李玉刚:让世界通过b站看到东方大国文化'",[321,55667,55609],{"class":331},[321,55669,55670],{"class":436},"'rgba(139,98,66)'",[321,55672,55615],{"class":331},[321,55674,55675,55677,55680,55682,55685,55687,55690],{"class":323,"line":17088},[321,55676,55597],{"class":331},[321,55678,55679],{"class":436},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[321,55681,55603],{"class":331},[321,55683,55684],{"class":436},"'快来分享你的寒假日常吧'",[321,55686,55609],{"class":331},[321,55688,55689],{"class":436},"'rgba(67,90,92)'",[321,55691,55615],{"class":331},[321,55693,55694,55696,55699,55701,55704,55706,55709],{"class":323,"line":17093},[321,55695,55597],{"class":331},[321,55697,55698],{"class":436},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[321,55700,55603],{"class":331},[321,55702,55703],{"class":436},"'哔哩哔哩小年YEAR'",[321,55705,55609],{"class":331},[321,55707,55708],{"class":436},"'rgba(166,131,143)'",[321,55710,55615],{"class":331},[321,55712,55713,55715,55718,55720,55723,55725,55728],{"class":323,"line":17106},[321,55714,55597],{"class":331},[321,55716,55717],{"class":436},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[321,55719,55603],{"class":331},[321,55721,55722],{"class":436},"'一站式解决你的电脑配置问题'",[321,55724,55609],{"class":331},[321,55726,55727],{"class":436},"'rgba(53,29,25)'",[321,55729,55615],{"class":331},[321,55731,55732,55734,55737,55739,55742,55744,55747],{"class":323,"line":17111},[321,55733,55597],{"class":331},[321,55735,55736],{"class":436},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[321,55738,55603],{"class":331},[321,55740,55741],{"class":436},"'谁不想和小猫咪贴贴呢?'",[321,55743,55609],{"class":331},[321,55745,55746],{"class":436},"'rgba(99,72,114)'",[321,55748,55749],{"class":331}," }\n",[321,55751,55752],{"class":323,"line":17116},[321,55753,53254],{"class":331},[321,55755,55756,55758,55761,55763,55765,55767,55769,55772],{"class":323,"line":17121},[321,55757,11428],{"class":327},[321,55759,55760],{"class":380}," img",[321,55762,13771],{"class":327},[321,55764,54541],{"class":331},[321,55766,54544],{"class":2169},[321,55768,332],{"class":331},[321,55770,55771],{"class":436},"'.slider-wrapper img'",[321,55773,338],{"class":331},[321,55775,55776,55778,55780,55782,55784,55786,55788,55791],{"class":323,"line":17134},[321,55777,11428],{"class":327},[321,55779,7032],{"class":380},[321,55781,13771],{"class":327},[321,55783,54541],{"class":331},[321,55785,54544],{"class":2169},[321,55787,332],{"class":331},[321,55789,55790],{"class":436},"'.slider-footer p'",[321,55792,338],{"class":331},[321,55794,55795,55797,55800,55802,55804,55806,55808,55811],{"class":323,"line":17139},[321,55796,11428],{"class":327},[321,55798,55799],{"class":380}," color",[321,55801,13771],{"class":327},[321,55803,54541],{"class":331},[321,55805,54544],{"class":2169},[321,55807,332],{"class":331},[321,55809,55810],{"class":436},"'.slider-footer'",[321,55812,338],{"class":331},[321,55814,55815,55817,55820,55822,55824,55827,55829,55832],{"class":323,"line":32778},[321,55816,11428],{"class":327},[321,55818,55819],{"class":380}," lis",[321,55821,13771],{"class":327},[321,55823,54541],{"class":331},[321,55825,55826],{"class":2169},"querySelectorAll",[321,55828,332],{"class":331},[321,55830,55831],{"class":436},"'.slider-footer ul li'",[321,55833,338],{"class":331},[321,55835,55836,55838,55840,55842],{"class":323,"line":32784},[321,55837,52364],{"class":327},[321,55839,9645],{"class":331},[321,55841,377],{"class":327},[321,55843,55844],{"class":380}," 1\n",[321,55846,55847,55849,55852,55854,55856,55858,55860],{"class":323,"line":32790},[321,55848,52364],{"class":327},[321,55850,55851],{"class":331}," timer ",[321,55853,377],{"class":327},[321,55855,54589],{"class":2169},[321,55857,332],{"class":331},[321,55859,54594],{"class":327},[321,55861,54597],{"class":331},[321,55863,55864,55867,55869],{"class":323,"line":32796},[321,55865,55866],{"class":331},"      img.src ",[321,55868,377],{"class":327},[321,55870,55871],{"class":331}," arrImage[i].url\n",[321,55873,55874,55877,55879],{"class":323,"line":32802},[321,55875,55876],{"class":331},"      p.innerHTML ",[321,55878,377],{"class":327},[321,55880,55881],{"class":331}," arrImage[i].title\n",[321,55883,55884,55887,55889],{"class":323,"line":32813},[321,55885,55886],{"class":331},"      color.style.backgroundColor ",[321,55888,377],{"class":327},[321,55890,55891],{"class":331}," arrImage[i].color\n",[321,55893,55894],{"class":323,"line":32819},[321,55895,55896],{"class":390},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[321,55898,55899],{"class":323,"line":32839},[321,55900,55901],{"class":390},"      \u002F\u002F li.classList.add('activate')\n",[321,55903,55904],{"class":323,"line":32845},[321,55905,55906],{"class":390},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[321,55908,55909],{"class":323,"line":32856},[321,55910,55911],{"class":390},"      \u002F\u002F lis[i].classList.remove('activate')\n",[321,55913,55914,55917,55919,55921,55924,55927,55930,55932,55935],{"class":323,"line":32862},[321,55915,55916],{"class":331},"      document.",[321,55918,54544],{"class":2169},[321,55920,332],{"class":331},[321,55922,55923],{"class":436},"'.activate'",[321,55925,55926],{"class":331},")?.classList.",[321,55928,55929],{"class":2169},"toggle",[321,55931,332],{"class":331},[321,55933,55934],{"class":436},"'activate'",[321,55936,338],{"class":331},[321,55938,55939,55942,55944,55946,55948],{"class":323,"line":32868},[321,55940,55941],{"class":331},"      lis[i].classList.",[321,55943,5541],{"class":2169},[321,55945,332],{"class":331},[321,55947,55934],{"class":436},[321,55949,338],{"class":331},[321,55951,55952],{"class":323,"line":32874},[321,55953,2606],{"emptyLinePlaceholder":251},[321,55955,55956,55959,55961,55963,55965,55967,55969,55971,55974],{"class":323,"line":32880},[321,55957,55958],{"class":331},"      i ",[321,55960,377],{"class":327},[321,55962,54628],{"class":331},[321,55964,813],{"class":327},[321,55966,25263],{"class":380},[321,55968,13921],{"class":331},[321,55970,660],{"class":327},[321,55972,55973],{"class":331}," arrImage.",[321,55975,55976],{"class":380},"length\n",[321,55978,55979],{"class":323,"line":32886},[321,55980,2606],{"emptyLinePlaceholder":251},[321,55982,55983,55985,55987],{"class":323,"line":32892},[321,55984,54680],{"class":331},[321,55986,6617],{"class":380},[321,55988,338],{"class":331},[321,55990,55991,55993,55995],{"class":323,"line":32898},[321,55992,52562],{"class":331},[321,55994,51958],{"class":51445},[321,55996,51452],{"class":331},[321,55998,55999,56001,56003],{"class":323,"line":32918},[321,56000,51930],{"class":331},[321,56002,51945],{"class":51445},[321,56004,51452],{"class":331},[321,56006,56007],{"class":323,"line":32924},[321,56008,2606],{"emptyLinePlaceholder":251},[321,56010,56011,56013,56015],{"class":323,"line":32940},[321,56012,51930],{"class":331},[321,56014,50780],{"class":51445},[321,56016,51452],{"class":331},[19,56018,56019],{},[28,56020],{"alt":30,"src":56021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56023,56024],{},"?.就是短路保护,确保输出正常进行",[19,56026,56027],{},"不要忘记取余%,有时候可以用",[19,56029,56030],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[151,56032,56033],{"start":167},[154,56034,56035],{},"法2",[312,56037,56039],{"className":50778,"code":56038,"language":50780,"meta":30,"style":30},"\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",[318,56040,56041,56051,56065,56069,56077,56091,56111,56123,56131,56137,56147,56157,56161,56165,56171,56181,56185,56189,56195,56205,56217,56229,56243,56247,56251,56257,56267,56277,56287,56299,56311,56321,56325,56329,56337,56347,56359,56371,56383,56387,56391,56397,56407,56419,56431,56441,56451,56461,56473,56485,56489,56493,56501,56513,56525,56551,56563,56567,56571,56577,56587,56591,56599,56607,56611,56619,56633,56647,56667,56675,56689,56701,56709,56727,56739,56751,56763,56775,56787,56799,56811,56819,56827,56835,56843,56854,56870,56886,56902,56918,56934,56950,56966,56982,56986,56991,57009,57027,57037,57042,57047,57058,57064,57079,57088,57092,57097,57106,57111,57120,57125,57130,57135,57158,57188,57192,57200,57204,57212,57220,57224],{"__ignoreMap":30},[321,56042,56043,56045,56047,56049],{"class":323,"line":324},[321,56044,51442],{"class":331},[321,56046,51446],{"class":51445},[321,56048,51449],{"class":2169},[321,56050,51452],{"class":331},[321,56052,56053,56055,56057,56059,56061,56063],{"class":323,"line":167},[321,56054,1242],{"class":331},[321,56056,50780],{"class":51445},[321,56058,51461],{"class":2169},[321,56060,377],{"class":331},[321,56062,51466],{"class":436},[321,56064,51452],{"class":331},[321,56066,56067],{"class":323,"line":200},[321,56068,2606],{"emptyLinePlaceholder":251},[321,56070,56071,56073,56075],{"class":323,"line":1401},[321,56072,1242],{"class":331},[321,56074,51479],{"class":51445},[321,56076,51452],{"class":331},[321,56078,56079,56081,56083,56085,56087,56089],{"class":323,"line":1407},[321,56080,52289],{"class":331},[321,56082,51489],{"class":51445},[321,56084,51492],{"class":2169},[321,56086,377],{"class":331},[321,56088,51497],{"class":436},[321,56090,51452],{"class":331},[321,56092,56093,56095,56097,56099,56101,56103,56105,56107,56109],{"class":323,"line":1421},[321,56094,52289],{"class":331},[321,56096,51489],{"class":51445},[321,56098,15127],{"class":2169},[321,56100,377],{"class":331},[321,56102,51536],{"class":436},[321,56104,51516],{"class":2169},[321,56106,377],{"class":331},[321,56108,51543],{"class":436},[321,56110,51452],{"class":331},[321,56112,56113,56115,56117,56119,56121],{"class":323,"line":1427},[321,56114,52289],{"class":331},[321,56116,51552],{"class":51445},[321,56118,51555],{"class":331},[321,56120,51552],{"class":51445},[321,56122,51452],{"class":331},[321,56124,56125,56127,56129],{"class":323,"line":1518},[321,56126,52289],{"class":331},[321,56128,5333],{"class":51445},[321,56130,51452],{"class":331},[321,56132,56133,56135],{"class":323,"line":1524},[321,56134,6610],{"class":51445},[321,56136,15779],{"class":331},[321,56138,56139,56141,56143,56145],{"class":323,"line":1536},[321,56140,54840],{"class":380},[321,56142,51582],{"class":331},[321,56144,523],{"class":380},[321,56146,1497],{"class":331},[321,56148,56149,56151,56153,56155],{"class":323,"line":1818},[321,56150,54851],{"class":380},[321,56152,51582],{"class":331},[321,56154,523],{"class":380},[321,56156,1497],{"class":331},[321,56158,56159],{"class":323,"line":1823},[321,56160,2393],{"class":331},[321,56162,56163],{"class":323,"line":1829},[321,56164,2606],{"emptyLinePlaceholder":251},[321,56166,56167,56169],{"class":323,"line":1834},[321,56168,54870],{"class":51445},[321,56170,15779],{"class":331},[321,56172,56173,56175,56177,56179],{"class":323,"line":1848},[321,56174,54877],{"class":380},[321,56176,51582],{"class":331},[321,56178,54882],{"class":380},[321,56180,1497],{"class":331},[321,56182,56183],{"class":323,"line":1853},[321,56184,2393],{"class":331},[321,56186,56187],{"class":323,"line":1859},[321,56188,2606],{"emptyLinePlaceholder":251},[321,56190,56191,56193],{"class":323,"line":1880},[321,56192,54897],{"class":2169},[321,56194,15779],{"class":331},[321,56196,56197,56199,56201,56203],{"class":323,"line":1885},[321,56198,54904],{"class":380},[321,56200,51582],{"class":331},[321,56202,54909],{"class":380},[321,56204,1497],{"class":331},[321,56206,56207,56209,56211,56213,56215],{"class":323,"line":1899},[321,56208,54916],{"class":380},[321,56210,51582],{"class":331},[321,56212,54921],{"class":380},[321,56214,51637],{"class":327},[321,56216,1497],{"class":331},[321,56218,56219,56221,56223,56225,56227],{"class":323,"line":1904},[321,56220,54930],{"class":380},[321,56222,51582],{"class":331},[321,56224,1745],{"class":380},[321,56226,51637],{"class":327},[321,56228,1497],{"class":331},[321,56230,56231,56233,56235,56237,56239,56241],{"class":323,"line":1933},[321,56232,54851],{"class":380},[321,56234,51582],{"class":331},[321,56236,643],{"class":380},[321,56238,51637],{"class":327},[321,56240,51701],{"class":380},[321,56242,1497],{"class":331},[321,56244,56245],{"class":323,"line":1938},[321,56246,2393],{"class":331},[321,56248,56249],{"class":323,"line":1955},[321,56250,2606],{"emptyLinePlaceholder":251},[321,56252,56253,56255],{"class":323,"line":1960},[321,56254,54965],{"class":2169},[321,56256,15779],{"class":331},[321,56258,56259,56261,56263,56265],{"class":323,"line":1965},[321,56260,54904],{"class":380},[321,56262,51582],{"class":331},[321,56264,54976],{"class":380},[321,56266,1497],{"class":331},[321,56268,56269,56271,56273,56275],{"class":323,"line":1970},[321,56270,54983],{"class":380},[321,56272,51582],{"class":331},[321,56274,523],{"class":380},[321,56276,1497],{"class":331},[321,56278,56279,56281,56283,56285],{"class":323,"line":1984},[321,56280,54994],{"class":380},[321,56282,51582],{"class":331},[321,56284,523],{"class":380},[321,56286,1497],{"class":331},[321,56288,56289,56291,56293,56295,56297],{"class":323,"line":1989},[321,56290,54916],{"class":380},[321,56292,51582],{"class":331},[321,56294,643],{"class":380},[321,56296,660],{"class":327},[321,56298,1497],{"class":331},[321,56300,56301,56303,56305,56307,56309],{"class":323,"line":2783},[321,56302,54930],{"class":380},[321,56304,51582],{"class":331},[321,56306,907],{"class":380},[321,56308,660],{"class":327},[321,56310,1497],{"class":331},[321,56312,56313,56315,56317,56319],{"class":323,"line":2797},[321,56314,55029],{"class":380},[321,56316,51582],{"class":331},[321,56318,55034],{"class":380},[321,56320,1497],{"class":331},[321,56322,56323],{"class":323,"line":2805},[321,56324,2393],{"class":331},[321,56326,56327],{"class":323,"line":2810},[321,56328,2606],{"emptyLinePlaceholder":251},[321,56330,56331,56333,56335],{"class":323,"line":2816},[321,56332,54965],{"class":2169},[321,56334,7032],{"class":51445},[321,56336,15779],{"class":331},[321,56338,56339,56341,56343,56345],{"class":323,"line":2822},[321,56340,54904],{"class":380},[321,56342,51582],{"class":331},[321,56344,54976],{"class":380},[321,56346,1497],{"class":331},[321,56348,56349,56351,56353,56355,56357],{"class":323,"line":2827},[321,56350,55067],{"class":380},[321,56352,51582],{"class":331},[321,56354,1233],{"class":380},[321,56356,51637],{"class":327},[321,56358,1497],{"class":331},[321,56360,56361,56363,56365,56367,56369],{"class":323,"line":8155},[321,56362,54983],{"class":380},[321,56364,51582],{"class":331},[321,56366,1032],{"class":380},[321,56368,51637],{"class":327},[321,56370,1497],{"class":331},[321,56372,56373,56375,56377,56379,56381],{"class":323,"line":8179},[321,56374,55092],{"class":380},[321,56376,51582],{"class":331},[321,56378,651],{"class":380},[321,56380,51637],{"class":327},[321,56382,1497],{"class":331},[321,56384,56385],{"class":323,"line":8184},[321,56386,2393],{"class":331},[321,56388,56389],{"class":323,"line":8190},[321,56390,2606],{"emptyLinePlaceholder":251},[321,56392,56393,56395],{"class":323,"line":8217},[321,56394,55113],{"class":51445},[321,56396,15779],{"class":331},[321,56398,56399,56401,56403,56405],{"class":323,"line":8222},[321,56400,54904],{"class":380},[321,56402,51582],{"class":331},[321,56404,54976],{"class":380},[321,56406,1497],{"class":331},[321,56408,56409,56411,56413,56415,56417],{"class":323,"line":8228},[321,56410,55092],{"class":380},[321,56412,51582],{"class":331},[321,56414,1113],{"class":380},[321,56416,51637],{"class":327},[321,56418,1497],{"class":331},[321,56420,56421,56423,56425,56427,56429],{"class":323,"line":8240},[321,56422,54983],{"class":380},[321,56424,51582],{"class":331},[321,56426,1032],{"class":380},[321,56428,51637],{"class":327},[321,56430,1497],{"class":331},[321,56432,56433,56435,56437,56439],{"class":323,"line":8252},[321,56434,55154],{"class":380},[321,56436,51582],{"class":331},[321,56438,51622],{"class":380},[321,56440,1497],{"class":331},[321,56442,56443,56445,56447,56449],{"class":323,"line":8264},[321,56444,55165],{"class":380},[321,56446,51582],{"class":331},[321,56448,51813],{"class":380},[321,56450,1497],{"class":331},[321,56452,56453,56455,56457,56459],{"class":323,"line":9923},[321,56454,54904],{"class":380},[321,56456,51582],{"class":331},[321,56458,54976],{"class":380},[321,56460,1497],{"class":331},[321,56462,56463,56465,56467,56469,56471],{"class":323,"line":9948},[321,56464,54916],{"class":380},[321,56466,51582],{"class":331},[321,56468,4198],{"class":380},[321,56470,51637],{"class":327},[321,56472,1497],{"class":331},[321,56474,56475,56477,56479,56481,56483],{"class":323,"line":9971},[321,56476,54930],{"class":380},[321,56478,51582],{"class":331},[321,56480,1032],{"class":380},[321,56482,51637],{"class":327},[321,56484,1497],{"class":331},[321,56486,56487],{"class":323,"line":9995},[321,56488,2393],{"class":331},[321,56490,56491],{"class":323,"line":10000},[321,56492,2606],{"emptyLinePlaceholder":251},[321,56494,56495,56497,56499],{"class":323,"line":10005},[321,56496,55113],{"class":51445},[321,56498,55220],{"class":51445},[321,56500,15779],{"class":331},[321,56502,56503,56505,56507,56509,56511],{"class":323,"line":10010},[321,56504,54916],{"class":380},[321,56506,51582],{"class":331},[321,56508,1032],{"class":380},[321,56510,51637],{"class":327},[321,56512,1497],{"class":331},[321,56514,56515,56517,56519,56521,56523],{"class":323,"line":10019},[321,56516,54930],{"class":380},[321,56518,51582],{"class":331},[321,56520,1032],{"class":380},[321,56522,51637],{"class":327},[321,56524,1497],{"class":331},[321,56526,56527,56529,56531,56533,56535,56537,56539,56541,56543,56545,56547,56549],{"class":323,"line":10024},[321,56528,55029],{"class":380},[321,56530,51582],{"class":331},[321,56532,55255],{"class":380},[321,56534,332],{"class":331},[321,56536,523],{"class":380},[321,56538,12642],{"class":331},[321,56540,523],{"class":380},[321,56542,12642],{"class":331},[321,56544,523],{"class":380},[321,56546,12642],{"class":331},[321,56548,55272],{"class":380},[321,56550,2925],{"class":331},[321,56552,56553,56555,56557,56559,56561],{"class":323,"line":10030},[321,56554,55279],{"class":380},[321,56556,51582],{"class":331},[321,56558,778],{"class":380},[321,56560,51637],{"class":327},[321,56562,1497],{"class":331},[321,56564,56565],{"class":323,"line":10051},[321,56566,2393],{"class":331},[321,56568,56569],{"class":323,"line":10057},[321,56570,2606],{"emptyLinePlaceholder":251},[321,56572,56573,56575],{"class":323,"line":10071},[321,56574,55300],{"class":2169},[321,56576,15779],{"class":331},[321,56578,56579,56581,56583,56585],{"class":323,"line":10077},[321,56580,55029],{"class":380},[321,56582,51582],{"class":331},[321,56584,55311],{"class":380},[321,56586,1497],{"class":331},[321,56588,56589],{"class":323,"line":10104},[321,56590,2393],{"class":331},[321,56592,56593,56595,56597],{"class":323,"line":10113},[321,56594,52562],{"class":331},[321,56596,5333],{"class":51445},[321,56598,51452],{"class":331},[321,56600,56601,56603,56605],{"class":323,"line":10119},[321,56602,51930],{"class":331},[321,56604,51479],{"class":51445},[321,56606,51452],{"class":331},[321,56608,56609],{"class":323,"line":10127},[321,56610,2606],{"emptyLinePlaceholder":251},[321,56612,56613,56615,56617],{"class":323,"line":10132},[321,56614,1242],{"class":331},[321,56616,51945],{"class":51445},[321,56618,51452],{"class":331},[321,56620,56621,56623,56625,56627,56629,56631],{"class":323,"line":16811},[321,56622,52289],{"class":331},[321,56624,51756],{"class":51445},[321,56626,53631],{"class":2169},[321,56628,377],{"class":331},[321,56630,53636],{"class":436},[321,56632,51452],{"class":331},[321,56634,56635,56637,56639,56641,56643,56645],{"class":323,"line":16817},[321,56636,51486],{"class":331},[321,56638,51756],{"class":51445},[321,56640,53631],{"class":2169},[321,56642,377],{"class":331},[321,56644,55372],{"class":436},[321,56646,51452],{"class":331},[321,56648,56649,56651,56653,56655,56657,56659,56661,56663,56665],{"class":323,"line":16840},[321,56650,55379],{"class":331},[321,56652,28],{"class":51445},[321,56654,55384],{"class":2169},[321,56656,377],{"class":331},[321,56658,55389],{"class":436},[321,56660,55392],{"class":2169},[321,56662,377],{"class":331},[321,56664,7859],{"class":436},[321,56666,51452],{"class":331},[321,56668,56669,56671,56673],{"class":323,"line":16846},[321,56670,51921],{"class":331},[321,56672,51756],{"class":51445},[321,56674,51452],{"class":331},[321,56676,56677,56679,56681,56683,56685,56687],{"class":323,"line":16869},[321,56678,51486],{"class":331},[321,56680,51756],{"class":51445},[321,56682,53631],{"class":2169},[321,56684,377],{"class":331},[321,56686,55419],{"class":436},[321,56688,51452],{"class":331},[321,56690,56691,56693,56695,56697,56699],{"class":323,"line":16883},[321,56692,55379],{"class":331},[321,56694,19],{"class":51445},[321,56696,55430],{"class":331},[321,56698,19],{"class":51445},[321,56700,51452],{"class":331},[321,56702,56703,56705,56707],{"class":323,"line":16903},[321,56704,55379],{"class":331},[321,56706,1339],{"class":51445},[321,56708,51452],{"class":331},[321,56710,56711,56713,56715,56717,56719,56721,56723,56725],{"class":323,"line":16909},[321,56712,55447],{"class":331},[321,56714,154],{"class":51445},[321,56716,53631],{"class":2169},[321,56718,377],{"class":331},[321,56720,55456],{"class":436},[321,56722,55459],{"class":331},[321,56724,154],{"class":51445},[321,56726,51452],{"class":331},[321,56728,56729,56731,56733,56735,56737],{"class":323,"line":16920},[321,56730,55447],{"class":331},[321,56732,154],{"class":51445},[321,56734,55459],{"class":331},[321,56736,154],{"class":51445},[321,56738,51452],{"class":331},[321,56740,56741,56743,56745,56747,56749],{"class":323,"line":16943},[321,56742,55447],{"class":331},[321,56744,154],{"class":51445},[321,56746,55459],{"class":331},[321,56748,154],{"class":51445},[321,56750,51452],{"class":331},[321,56752,56753,56755,56757,56759,56761],{"class":323,"line":16965},[321,56754,55447],{"class":331},[321,56756,154],{"class":51445},[321,56758,55459],{"class":331},[321,56760,154],{"class":51445},[321,56762,51452],{"class":331},[321,56764,56765,56767,56769,56771,56773],{"class":323,"line":16970},[321,56766,55447],{"class":331},[321,56768,154],{"class":51445},[321,56770,55459],{"class":331},[321,56772,154],{"class":51445},[321,56774,51452],{"class":331},[321,56776,56777,56779,56781,56783,56785],{"class":323,"line":16976},[321,56778,55447],{"class":331},[321,56780,154],{"class":51445},[321,56782,55459],{"class":331},[321,56784,154],{"class":51445},[321,56786,51452],{"class":331},[321,56788,56789,56791,56793,56795,56797],{"class":323,"line":16990},[321,56790,55447],{"class":331},[321,56792,154],{"class":51445},[321,56794,55459],{"class":331},[321,56796,154],{"class":51445},[321,56798,51452],{"class":331},[321,56800,56801,56803,56805,56807,56809],{"class":323,"line":17003},[321,56802,55447],{"class":331},[321,56804,154],{"class":51445},[321,56806,55459],{"class":331},[321,56808,154],{"class":51445},[321,56810,51452],{"class":331},[321,56812,56813,56815,56817],{"class":323,"line":17008},[321,56814,55552],{"class":331},[321,56816,1339],{"class":51445},[321,56818,51452],{"class":331},[321,56820,56821,56823,56825],{"class":323,"line":17022},[321,56822,51921],{"class":331},[321,56824,51756],{"class":51445},[321,56826,51452],{"class":331},[321,56828,56829,56831,56833],{"class":323,"line":17027},[321,56830,52562],{"class":331},[321,56832,51756],{"class":51445},[321,56834,51452],{"class":331},[321,56836,56837,56839,56841],{"class":323,"line":17033},[321,56838,52289],{"class":331},[321,56840,51958],{"class":51445},[321,56842,51452],{"class":331},[321,56844,56845,56847,56850,56852],{"class":323,"line":17038},[321,56846,11428],{"class":327},[321,56848,56849],{"class":380}," sliderData",[321,56851,13771],{"class":327},[321,56853,55592],{"class":331},[321,56855,56856,56858,56860,56862,56864,56866,56868],{"class":323,"line":17052},[321,56857,55597],{"class":331},[321,56859,55600],{"class":436},[321,56861,55603],{"class":331},[321,56863,55606],{"class":436},[321,56865,55609],{"class":331},[321,56867,55612],{"class":436},[321,56869,55615],{"class":331},[321,56871,56872,56874,56876,56878,56880,56882,56884],{"class":323,"line":17057},[321,56873,55597],{"class":331},[321,56875,55622],{"class":436},[321,56877,55603],{"class":331},[321,56879,55627],{"class":436},[321,56881,55609],{"class":331},[321,56883,55632],{"class":436},[321,56885,55615],{"class":331},[321,56887,56888,56890,56892,56894,56896,56898,56900],{"class":323,"line":17062},[321,56889,55597],{"class":331},[321,56891,55641],{"class":436},[321,56893,55603],{"class":331},[321,56895,55646],{"class":436},[321,56897,55609],{"class":331},[321,56899,55651],{"class":436},[321,56901,55615],{"class":331},[321,56903,56904,56906,56908,56910,56912,56914,56916],{"class":323,"line":17076},[321,56905,55597],{"class":331},[321,56907,55660],{"class":436},[321,56909,55603],{"class":331},[321,56911,55665],{"class":436},[321,56913,55609],{"class":331},[321,56915,55670],{"class":436},[321,56917,55615],{"class":331},[321,56919,56920,56922,56924,56926,56928,56930,56932],{"class":323,"line":17088},[321,56921,55597],{"class":331},[321,56923,55679],{"class":436},[321,56925,55603],{"class":331},[321,56927,55684],{"class":436},[321,56929,55609],{"class":331},[321,56931,55689],{"class":436},[321,56933,55615],{"class":331},[321,56935,56936,56938,56940,56942,56944,56946,56948],{"class":323,"line":17093},[321,56937,55597],{"class":331},[321,56939,55698],{"class":436},[321,56941,55603],{"class":331},[321,56943,55703],{"class":436},[321,56945,55609],{"class":331},[321,56947,55708],{"class":436},[321,56949,55615],{"class":331},[321,56951,56952,56954,56956,56958,56960,56962,56964],{"class":323,"line":17106},[321,56953,55597],{"class":331},[321,56955,55717],{"class":436},[321,56957,55603],{"class":331},[321,56959,55722],{"class":436},[321,56961,55609],{"class":331},[321,56963,55727],{"class":436},[321,56965,55615],{"class":331},[321,56967,56968,56970,56972,56974,56976,56978,56980],{"class":323,"line":17111},[321,56969,55597],{"class":331},[321,56971,55736],{"class":436},[321,56973,55603],{"class":331},[321,56975,55741],{"class":436},[321,56977,55609],{"class":331},[321,56979,55746],{"class":436},[321,56981,55749],{"class":331},[321,56983,56984],{"class":323,"line":17116},[321,56985,53254],{"class":331},[321,56987,56988],{"class":323,"line":17121},[321,56989,56990],{"class":390},"    \u002F\u002F 1.获取元素\n",[321,56992,56993,56995,56997,56999,57001,57003,57005,57007],{"class":323,"line":17134},[321,56994,11428],{"class":327},[321,56996,55760],{"class":380},[321,56998,13771],{"class":327},[321,57000,54541],{"class":331},[321,57002,54544],{"class":2169},[321,57004,332],{"class":331},[321,57006,55771],{"class":436},[321,57008,338],{"class":331},[321,57010,57011,57013,57015,57017,57019,57021,57023,57025],{"class":323,"line":17139},[321,57012,11428],{"class":327},[321,57014,7032],{"class":380},[321,57016,13771],{"class":327},[321,57018,54541],{"class":331},[321,57020,54544],{"class":2169},[321,57022,332],{"class":331},[321,57024,55790],{"class":436},[321,57026,338],{"class":331},[321,57028,57029,57031,57033,57035],{"class":323,"line":32778},[321,57030,52364],{"class":327},[321,57032,9645],{"class":331},[321,57034,377],{"class":327},[321,57036,47478],{"class":380},[321,57038,57039],{"class":323,"line":32784},[321,57040,57041],{"class":390},"    \u002F\u002F 2.开启定时器\n",[321,57043,57044],{"class":323,"line":32790},[321,57045,57046],{"class":390},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[321,57048,57049,57052,57054,57056],{"class":323,"line":32796},[321,57050,57051],{"class":2169},"    setInterval",[321,57053,332],{"class":331},[321,57055,54594],{"class":327},[321,57057,54597],{"class":331},[321,57059,57060,57062],{"class":323,"line":32802},[321,57061,54602],{"class":331},[321,57063,2908],{"class":327},[321,57065,57066,57068,57070,57072,57075,57077],{"class":323,"line":32813},[321,57067,54625],{"class":327},[321,57069,54628],{"class":331},[321,57071,1916],{"class":327},[321,57073,57074],{"class":331}," sliderData.",[321,57076,52113],{"class":380},[321,57078,12649],{"class":331},[321,57080,57081,57084,57086],{"class":323,"line":32819},[321,57082,57083],{"class":331},"        i ",[321,57085,377],{"class":327},[321,57087,47478],{"class":380},[321,57089,57090],{"class":323,"line":32839},[321,57091,52543],{"class":331},[321,57093,57094],{"class":323,"line":32845},[321,57095,57096],{"class":390},"      \u002F\u002F 更换图片路径\n",[321,57098,57099,57101,57103],{"class":323,"line":32856},[321,57100,55866],{"class":331},[321,57102,377],{"class":327},[321,57104,57105],{"class":331}," sliderData[i].url\n",[321,57107,57108],{"class":323,"line":32862},[321,57109,57110],{"class":390},"      \u002F\u002F 把文字写到p里面\n",[321,57112,57113,57115,57117],{"class":323,"line":32868},[321,57114,55876],{"class":331},[321,57116,377],{"class":327},[321,57118,57119],{"class":331}," sliderData[i].title\n",[321,57121,57122],{"class":323,"line":32874},[321,57123,57124],{"class":390},"      \u002F\u002F 小圆点\n",[321,57126,57127],{"class":323,"line":32880},[321,57128,57129],{"class":390},"      \u002F\u002F 先删除以前的active\n",[321,57131,57132],{"class":323,"line":32886},[321,57133,57134],{"class":390},"      \u002F\u002F 只让当前li添加active\n",[321,57136,57137,57139,57141,57143,57146,57149,57152,57154,57156],{"class":323,"line":32892},[321,57138,55916],{"class":331},[321,57140,54544],{"class":2169},[321,57142,332],{"class":331},[321,57144,57145],{"class":436},"'.slider-footer .activate'",[321,57147,57148],{"class":331},").classList.",[321,57150,57151],{"class":2169},"remove",[321,57153,332],{"class":331},[321,57155,55934],{"class":436},[321,57157,338],{"class":331},[321,57159,57160,57162,57164,57166,57169,57171,57173,57175,57178,57180,57182,57184,57186],{"class":323,"line":32898},[321,57161,55916],{"class":331},[321,57163,54544],{"class":2169},[321,57165,332],{"class":331},[321,57167,57168],{"class":436},"`.slider-footer ul li:nth-child(${",[321,57170,773],{"class":331},[321,57172,45711],{"class":327},[321,57174,25263],{"class":380},[321,57176,57177],{"class":436},"})`",[321,57179,57148],{"class":331},[321,57181,5541],{"class":2169},[321,57183,332],{"class":331},[321,57185,55934],{"class":436},[321,57187,338],{"class":331},[321,57189,57190],{"class":323,"line":32918},[321,57191,2606],{"emptyLinePlaceholder":251},[321,57193,57194,57196,57198],{"class":323,"line":32924},[321,57195,54680],{"class":331},[321,57197,6617],{"class":380},[321,57199,338],{"class":331},[321,57201,57202],{"class":323,"line":32940},[321,57203,2606],{"emptyLinePlaceholder":251},[321,57205,57206,57208,57210],{"class":323,"line":32946},[321,57207,52562],{"class":331},[321,57209,51958],{"class":51445},[321,57211,51452],{"class":331},[321,57213,57214,57216,57218],{"class":323,"line":32960},[321,57215,51930],{"class":331},[321,57217,51945],{"class":51445},[321,57219,51452],{"class":331},[321,57221,57222],{"class":323,"line":32966},[321,57223,2606],{"emptyLinePlaceholder":251},[321,57225,57226,57228,57230],{"class":323,"line":32981},[321,57227,51930],{"class":331},[321,57229,50780],{"class":51445},[321,57231,51452],{"class":331},[292,57233,57235],{"id":57234},"_317-重要知识点","3.1.7 重要知识点",[19,57237,57238,57239],{},"浏览器在渲染文本时， ",[481,57240,57241],{},"没有空格或换行符就没有“断行点”",[19,57243,57244],{},[28,57245],{"alt":30,"src":57246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57248,57249],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57251,57252],{},[28,57253],{"alt":30,"src":57254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57256,57257],{},[28,57258],{"alt":30,"src":57259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57261,57263],{"id":57262},"_32-dom事件基础","3.2 DOM事件基础",[292,57265,57267],{"id":57266},"_321-事件监听","3.2.1 事件监听",[19,57269,57270],{},[28,57271],{"alt":30,"src":57272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57274,57275],{},"事件监听有响应的发生",[19,57277,57278],{},[28,57279],{"alt":30,"src":57280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57282,57283],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57285,57286],{},"对于有名函数,要执行的函数名后边不要加()",[292,57288,57290],{"id":57289},"_322-随机点名案例","3.2.2 随机点名案例",[312,57292,57294],{"className":50778,"code":57293,"language":50780,"meta":30,"style":30},"\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",[318,57295,57296,57306,57320,57324,57332,57346,57366,57378,57386,57392,57402,57412,57416,57420,57427,57438,57442,57446,57452,57464,57478,57488,57500,57513,57517,57521,57528,57532,57545,57557,57569,57573,57577,57581,57588,57598,57602,57606,57615,57627,57639,57654,57658,57666,57674,57678,57686,57699,57713,57726,57746,57754,57769,57789,57809,57817,57821,57829,57834,57870,57890,57895,57914,57919,57930,57935,57946,57951,57970,57985,57990,58016,58026,58035,58040,58056,58061,58066,58071,58086,58090,58094,58099,58118,58135,58143,58148,58163,58167,58171,58179,58187,58191],{"__ignoreMap":30},[321,57297,57298,57300,57302,57304],{"class":323,"line":324},[321,57299,51442],{"class":331},[321,57301,51446],{"class":51445},[321,57303,51449],{"class":2169},[321,57305,51452],{"class":331},[321,57307,57308,57310,57312,57314,57316,57318],{"class":323,"line":167},[321,57309,1242],{"class":331},[321,57311,50780],{"class":51445},[321,57313,51461],{"class":2169},[321,57315,377],{"class":331},[321,57317,51466],{"class":436},[321,57319,51452],{"class":331},[321,57321,57322],{"class":323,"line":200},[321,57323,2606],{"emptyLinePlaceholder":251},[321,57325,57326,57328,57330],{"class":323,"line":1401},[321,57327,1242],{"class":331},[321,57329,51479],{"class":51445},[321,57331,51452],{"class":331},[321,57333,57334,57336,57338,57340,57342,57344],{"class":323,"line":1407},[321,57335,52289],{"class":331},[321,57337,51489],{"class":51445},[321,57339,51492],{"class":2169},[321,57341,377],{"class":331},[321,57343,51497],{"class":436},[321,57345,51452],{"class":331},[321,57347,57348,57350,57352,57354,57356,57358,57360,57362,57364],{"class":323,"line":1421},[321,57349,52289],{"class":331},[321,57351,51489],{"class":51445},[321,57353,15127],{"class":2169},[321,57355,377],{"class":331},[321,57357,51536],{"class":436},[321,57359,51516],{"class":2169},[321,57361,377],{"class":331},[321,57363,51543],{"class":436},[321,57365,51452],{"class":331},[321,57367,57368,57370,57372,57374,57376],{"class":323,"line":1427},[321,57369,52289],{"class":331},[321,57371,51552],{"class":51445},[321,57373,51555],{"class":331},[321,57375,51552],{"class":51445},[321,57377,51452],{"class":331},[321,57379,57380,57382,57384],{"class":323,"line":1518},[321,57381,52289],{"class":331},[321,57383,5333],{"class":51445},[321,57385,51452],{"class":331},[321,57387,57388,57390],{"class":323,"line":1524},[321,57389,6610],{"class":51445},[321,57391,15779],{"class":331},[321,57393,57394,57396,57398,57400],{"class":323,"line":1536},[321,57395,54851],{"class":380},[321,57397,51582],{"class":331},[321,57399,523],{"class":380},[321,57401,1497],{"class":331},[321,57403,57404,57406,57408,57410],{"class":323,"line":1818},[321,57405,54840],{"class":380},[321,57407,51582],{"class":331},[321,57409,523],{"class":380},[321,57411,1497],{"class":331},[321,57413,57414],{"class":323,"line":1823},[321,57415,2393],{"class":331},[321,57417,57418],{"class":323,"line":1829},[321,57419,2606],{"emptyLinePlaceholder":251},[321,57421,57422,57425],{"class":323,"line":1834},[321,57423,57424],{"class":51445},"    h2",[321,57426,15779],{"class":331},[321,57428,57429,57432,57434,57436],{"class":323,"line":1848},[321,57430,57431],{"class":380},"      text-align",[321,57433,51582],{"class":331},[321,57435,51737],{"class":380},[321,57437,1497],{"class":331},[321,57439,57440],{"class":323,"line":1853},[321,57441,2393],{"class":331},[321,57443,57444],{"class":323,"line":1859},[321,57445,2606],{"emptyLinePlaceholder":251},[321,57447,57448,57450],{"class":323,"line":1880},[321,57449,54897],{"class":2169},[321,57451,15779],{"class":331},[321,57453,57454,57456,57458,57460,57462],{"class":323,"line":1885},[321,57455,54916],{"class":380},[321,57457,51582],{"class":331},[321,57459,1745],{"class":380},[321,57461,51637],{"class":327},[321,57463,1497],{"class":331},[321,57465,57466,57468,57470,57472,57474,57476],{"class":323,"line":1899},[321,57467,54851],{"class":380},[321,57469,51582],{"class":331},[321,57471,988],{"class":380},[321,57473,51637],{"class":327},[321,57475,51701],{"class":380},[321,57477,1497],{"class":331},[321,57479,57480,57482,57484,57486],{"class":323,"line":1904},[321,57481,55154],{"class":380},[321,57483,51582],{"class":331},[321,57485,51622],{"class":380},[321,57487,1497],{"class":331},[321,57489,57490,57492,57494,57496,57498],{"class":323,"line":1933},[321,57491,55067],{"class":380},[321,57493,51582],{"class":331},[321,57495,1157],{"class":380},[321,57497,51637],{"class":327},[321,57499,1497],{"class":331},[321,57501,57502,57505,57507,57509,57511],{"class":323,"line":1938},[321,57503,57504],{"class":380},"      line-height",[321,57506,51582],{"class":331},[321,57508,733],{"class":380},[321,57510,51637],{"class":327},[321,57512,1497],{"class":331},[321,57514,57515],{"class":323,"line":1955},[321,57516,2393],{"class":331},[321,57518,57519],{"class":323,"line":1960},[321,57520,2606],{"emptyLinePlaceholder":251},[321,57522,57523,57526],{"class":323,"line":1965},[321,57524,57525],{"class":2169},"    .qs",[321,57527,15779],{"class":331},[321,57529,57530],{"class":323,"line":1970},[321,57531,2606],{"emptyLinePlaceholder":251},[321,57533,57534,57536,57538,57541,57543],{"class":323,"line":1984},[321,57535,54916],{"class":380},[321,57537,51582],{"class":331},[321,57539,57540],{"class":380},"450",[321,57542,51637],{"class":327},[321,57544,1497],{"class":331},[321,57546,57547,57549,57551,57553,57555],{"class":323,"line":1989},[321,57548,54930],{"class":380},[321,57550,51582],{"class":331},[321,57552,733],{"class":380},[321,57554,51637],{"class":327},[321,57556,1497],{"class":331},[321,57558,57559,57562,57564,57567],{"class":323,"line":2783},[321,57560,57561],{"class":380},"      color",[321,57563,51582],{"class":331},[321,57565,57566],{"class":380},"red",[321,57568,1497],{"class":331},[321,57570,57571],{"class":323,"line":2797},[321,57572,2606],{"emptyLinePlaceholder":251},[321,57574,57575],{"class":323,"line":2805},[321,57576,2393],{"class":331},[321,57578,57579],{"class":323,"line":2810},[321,57580,2606],{"emptyLinePlaceholder":251},[321,57582,57583,57586],{"class":323,"line":2816},[321,57584,57585],{"class":2169},"    .btns",[321,57587,15779],{"class":331},[321,57589,57590,57592,57594,57596],{"class":323,"line":2822},[321,57591,57431],{"class":380},[321,57593,51582],{"class":331},[321,57595,51737],{"class":380},[321,57597,1497],{"class":331},[321,57599,57600],{"class":323,"line":2827},[321,57601,2393],{"class":331},[321,57603,57604],{"class":323,"line":8155},[321,57605,2606],{"emptyLinePlaceholder":251},[321,57607,57608,57610,57613],{"class":323,"line":8179},[321,57609,57585],{"class":2169},[321,57611,57612],{"class":51445}," button",[321,57614,15779],{"class":331},[321,57616,57617,57619,57621,57623,57625],{"class":323,"line":8184},[321,57618,54916],{"class":380},[321,57620,51582],{"class":331},[321,57622,1149],{"class":380},[321,57624,51637],{"class":327},[321,57626,1497],{"class":331},[321,57628,57629,57631,57633,57635,57637],{"class":323,"line":8190},[321,57630,54930],{"class":380},[321,57632,51582],{"class":331},[321,57634,605],{"class":380},[321,57636,51637],{"class":327},[321,57638,1497],{"class":331},[321,57640,57641,57643,57645,57647,57650,57652],{"class":323,"line":8217},[321,57642,54851],{"class":380},[321,57644,51582],{"class":331},[321,57646,523],{"class":380},[321,57648,57649],{"class":380}," 50",[321,57651,51637],{"class":327},[321,57653,1497],{"class":331},[321,57655,57656],{"class":323,"line":8222},[321,57657,2393],{"class":331},[321,57659,57660,57662,57664],{"class":323,"line":8228},[321,57661,52562],{"class":331},[321,57663,5333],{"class":51445},[321,57665,51452],{"class":331},[321,57667,57668,57670,57672],{"class":323,"line":8240},[321,57669,51930],{"class":331},[321,57671,51479],{"class":51445},[321,57673,51452],{"class":331},[321,57675,57676],{"class":323,"line":8252},[321,57677,2606],{"emptyLinePlaceholder":251},[321,57679,57680,57682,57684],{"class":323,"line":8264},[321,57681,1242],{"class":331},[321,57683,51945],{"class":51445},[321,57685,51452],{"class":331},[321,57687,57688,57690,57692,57695,57697],{"class":323,"line":9923},[321,57689,52289],{"class":331},[321,57691,14],{"class":51445},[321,57693,57694],{"class":331},">随机点名\u003C\u002F",[321,57696,14],{"class":51445},[321,57698,51452],{"class":331},[321,57700,57701,57703,57705,57707,57709,57711],{"class":323,"line":9948},[321,57702,52289],{"class":331},[321,57704,51756],{"class":51445},[321,57706,53631],{"class":2169},[321,57708,377],{"class":331},[321,57710,53636],{"class":436},[321,57712,51452],{"class":331},[321,57714,57715,57717,57719,57722,57724],{"class":323,"line":9971},[321,57716,51486],{"class":331},[321,57718,321],{"class":51445},[321,57720,57721],{"class":331},">名字是：\u003C\u002F",[321,57723,321],{"class":51445},[321,57725,51452],{"class":331},[321,57727,57728,57730,57732,57734,57736,57739,57742,57744],{"class":323,"line":9995},[321,57729,51486],{"class":331},[321,57731,51756],{"class":51445},[321,57733,53631],{"class":2169},[321,57735,377],{"class":331},[321,57737,57738],{"class":436},"\"qs\"",[321,57740,57741],{"class":331},">这里显示姓名\u003C\u002F",[321,57743,51756],{"class":51445},[321,57745,51452],{"class":331},[321,57747,57748,57750,57752],{"class":323,"line":10000},[321,57749,52562],{"class":331},[321,57751,51756],{"class":51445},[321,57753,51452],{"class":331},[321,57755,57756,57758,57760,57762,57764,57767],{"class":323,"line":10005},[321,57757,52289],{"class":331},[321,57759,51756],{"class":51445},[321,57761,53631],{"class":2169},[321,57763,377],{"class":331},[321,57765,57766],{"class":436},"\"btns\"",[321,57768,51452],{"class":331},[321,57770,57771,57773,57775,57777,57779,57782,57785,57787],{"class":323,"line":10010},[321,57772,51486],{"class":331},[321,57774,54032],{"class":51445},[321,57776,53631],{"class":2169},[321,57778,377],{"class":331},[321,57780,57781],{"class":436},"\"start\"",[321,57783,57784],{"class":331},">开始\u003C\u002F",[321,57786,54032],{"class":51445},[321,57788,51452],{"class":331},[321,57790,57791,57793,57795,57797,57799,57802,57805,57807],{"class":323,"line":10019},[321,57792,51486],{"class":331},[321,57794,54032],{"class":51445},[321,57796,53631],{"class":2169},[321,57798,377],{"class":331},[321,57800,57801],{"class":436},"\"end\"",[321,57803,57804],{"class":331},">结束\u003C\u002F",[321,57806,54032],{"class":51445},[321,57808,51452],{"class":331},[321,57810,57811,57813,57815],{"class":323,"line":10024},[321,57812,52562],{"class":331},[321,57814,51756],{"class":51445},[321,57816,51452],{"class":331},[321,57818,57819],{"class":323,"line":10030},[321,57820,2606],{"emptyLinePlaceholder":251},[321,57822,57823,57825,57827],{"class":323,"line":10051},[321,57824,52289],{"class":331},[321,57826,51958],{"class":51445},[321,57828,51452],{"class":331},[321,57830,57831],{"class":323,"line":10057},[321,57832,57833],{"class":390},"    \u002F\u002F 数据数组\n",[321,57835,57836,57838,57841,57843,57845,57848,57850,57853,57855,57858,57860,57863,57865,57868],{"class":323,"line":10071},[321,57837,11428],{"class":327},[321,57839,57840],{"class":380}," arr",[321,57842,13771],{"class":327},[321,57844,52371],{"class":331},[321,57846,57847],{"class":436},"'马超'",[321,57849,12642],{"class":331},[321,57851,57852],{"class":436},"'黄忠'",[321,57854,12642],{"class":331},[321,57856,57857],{"class":436},"'赵云'",[321,57859,12642],{"class":331},[321,57861,57862],{"class":436},"'关羽'",[321,57864,12642],{"class":331},[321,57866,57867],{"class":436},"'张飞'",[321,57869,33391],{"class":331},[321,57871,57872,57874,57877,57879,57881,57883,57885,57888],{"class":323,"line":10077},[321,57873,11428],{"class":327},[321,57875,57876],{"class":380}," qs",[321,57878,13771],{"class":327},[321,57880,54541],{"class":331},[321,57882,54544],{"class":2169},[321,57884,332],{"class":331},[321,57886,57887],{"class":436},"'.qs'",[321,57889,338],{"class":331},[321,57891,57892],{"class":323,"line":10104},[321,57893,57894],{"class":390},"    \u002F\u002F 1.业务1.开始按钮模块\n",[321,57896,57897,57899,57901,57903,57905,57907,57909,57912],{"class":323,"line":10113},[321,57898,11428],{"class":327},[321,57900,4390],{"class":380},[321,57902,13771],{"class":327},[321,57904,54541],{"class":331},[321,57906,54544],{"class":2169},[321,57908,332],{"class":331},[321,57910,57911],{"class":436},"'.start'",[321,57913,338],{"class":331},[321,57915,57916],{"class":323,"line":10119},[321,57917,57918],{"class":390},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[321,57920,57921,57923,57926,57928],{"class":323,"line":10127},[321,57922,52364],{"class":327},[321,57924,57925],{"class":331}," timerId ",[321,57927,377],{"class":327},[321,57929,47478],{"class":380},[321,57931,57932],{"class":323,"line":10132},[321,57933,57934],{"class":390},"    \u002F\u002F 随机号要全局变量\n",[321,57936,57937,57939,57942,57944],{"class":323,"line":16811},[321,57938,52364],{"class":327},[321,57940,57941],{"class":331}," random ",[321,57943,377],{"class":327},[321,57945,47478],{"class":380},[321,57947,57948],{"class":323,"line":16817},[321,57949,57950],{"class":390},"    \u002F\u002F 1.1 添加点击事件\n",[321,57952,57953,57956,57959,57961,57964,57966,57968],{"class":323,"line":16840},[321,57954,57955],{"class":331},"    start.",[321,57957,57958],{"class":2169},"addEventListener",[321,57960,332],{"class":331},[321,57962,57963],{"class":436},"'click'",[321,57965,12642],{"class":331},[321,57967,54594],{"class":327},[321,57969,54597],{"class":331},[321,57971,57972,57975,57977,57979,57981,57983],{"class":323,"line":16846},[321,57973,57974],{"class":331},"      timerId ",[321,57976,377],{"class":327},[321,57978,54589],{"class":2169},[321,57980,332],{"class":331},[321,57982,54594],{"class":327},[321,57984,54597],{"class":331},[321,57986,57987],{"class":323,"line":16869},[321,57988,57989],{"class":390},"        \u002F\u002F 随机数\n",[321,57991,57992,57995,57997,58000,58003,58006,58008,58010,58012,58014],{"class":323,"line":16883},[321,57993,57994],{"class":331},"        random ",[321,57996,377],{"class":327},[321,57998,57999],{"class":2169}," parseInt",[321,58001,58002],{"class":331},"(Math.",[321,58004,58005],{"class":2169},"random",[321,58007,13257],{"class":331},[321,58009,787],{"class":327},[321,58011,52110],{"class":331},[321,58013,52113],{"class":380},[321,58015,338],{"class":331},[321,58017,58018,58021,58023],{"class":323,"line":16903},[321,58019,58020],{"class":331},"        qs.innerHTML ",[321,58022,377],{"class":327},[321,58024,58025],{"class":331}," arr[random]\n",[321,58027,58028,58031,58033],{"class":323,"line":16909},[321,58029,58030],{"class":331},"      }, ",[321,58032,605],{"class":380},[321,58034,338],{"class":331},[321,58036,58037],{"class":323,"line":16920},[321,58038,58039],{"class":390},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[321,58041,58042,58044,58047,58049,58052,58054],{"class":323,"line":16943},[321,58043,54625],{"class":327},[321,58045,58046],{"class":331}," (arr.",[321,58048,52113],{"class":380},[321,58050,58051],{"class":327}," ===",[321,58053,25263],{"class":380},[321,58055,12649],{"class":331},[321,58057,58058],{"class":323,"line":16965},[321,58059,58060],{"class":390},"        \u002F\u002F start.disabled = true\n",[321,58062,58063],{"class":323,"line":16970},[321,58064,58065],{"class":390},"        \u002F\u002F end.disabled = true\n",[321,58067,58068],{"class":323,"line":16976},[321,58069,58070],{"class":390},"        \u002F\u002F 可以合起来写\n",[321,58072,58073,58076,58078,58081,58083],{"class":323,"line":16990},[321,58074,58075],{"class":331},"        start.disabled ",[321,58077,377],{"class":327},[321,58079,58080],{"class":331}," end.disabled ",[321,58082,377],{"class":327},[321,58084,58085],{"class":380}," true\n",[321,58087,58088],{"class":323,"line":17003},[321,58089,52543],{"class":331},[321,58091,58092],{"class":323,"line":17008},[321,58093,33606],{"class":331},[321,58095,58096],{"class":323,"line":17022},[321,58097,58098],{"class":390},"    \u002F\u002F 1.2 关闭按钮模块\n",[321,58100,58101,58103,58105,58107,58109,58111,58113,58116],{"class":323,"line":17027},[321,58102,11428],{"class":327},[321,58104,4406],{"class":380},[321,58106,13771],{"class":327},[321,58108,54541],{"class":331},[321,58110,54544],{"class":2169},[321,58112,332],{"class":331},[321,58114,58115],{"class":436},"'.end'",[321,58117,338],{"class":331},[321,58119,58120,58123,58125,58127,58129,58131,58133],{"class":323,"line":17033},[321,58121,58122],{"class":331},"    end.",[321,58124,57958],{"class":2169},[321,58126,332],{"class":331},[321,58128,57963],{"class":436},[321,58130,12642],{"class":331},[321,58132,54594],{"class":327},[321,58134,54597],{"class":331},[321,58136,58137,58140],{"class":323,"line":17038},[321,58138,58139],{"class":2169},"      clearInterval",[321,58141,58142],{"class":331},"(timerId)\n",[321,58144,58145],{"class":323,"line":17052},[321,58146,58147],{"class":390},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[321,58149,58150,58153,58156,58159,58161],{"class":323,"line":17057},[321,58151,58152],{"class":331},"      arr.",[321,58154,58155],{"class":2169},"splice",[321,58157,58158],{"class":331},"(random, ",[321,58160,549],{"class":380},[321,58162,338],{"class":331},[321,58164,58165],{"class":323,"line":17062},[321,58166,33606],{"class":331},[321,58168,58169],{"class":323,"line":17076},[321,58170,2606],{"emptyLinePlaceholder":251},[321,58172,58173,58175,58177],{"class":323,"line":17088},[321,58174,52562],{"class":331},[321,58176,51958],{"class":51445},[321,58178,51452],{"class":331},[321,58180,58181,58183,58185],{"class":323,"line":17093},[321,58182,51930],{"class":331},[321,58184,51945],{"class":51445},[321,58186,51452],{"class":331},[321,58188,58189],{"class":323,"line":17106},[321,58190,2606],{"emptyLinePlaceholder":251},[321,58192,58193,58195,58197],{"class":323,"line":17111},[321,58194,51930],{"class":331},[321,58196,50780],{"class":51445},[321,58198,51452],{"class":331},[19,58200,58201],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[292,58203,58205],{"id":58204},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[312,58207,58209],{"className":50778,"code":58208,"language":50780,"meta":30,"style":30},"\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",[318,58210,58211,58221,58235,58239,58247,58261,58281,58293,58301,58305,58313,58325,58333,58352,58369,58385,58395,58399,58407,58415,58419],{"__ignoreMap":30},[321,58212,58213,58215,58217,58219],{"class":323,"line":324},[321,58214,51442],{"class":331},[321,58216,51446],{"class":51445},[321,58218,51449],{"class":2169},[321,58220,51452],{"class":331},[321,58222,58223,58225,58227,58229,58231,58233],{"class":323,"line":167},[321,58224,1242],{"class":331},[321,58226,50780],{"class":51445},[321,58228,51461],{"class":2169},[321,58230,377],{"class":331},[321,58232,51466],{"class":436},[321,58234,51452],{"class":331},[321,58236,58237],{"class":323,"line":200},[321,58238,2606],{"emptyLinePlaceholder":251},[321,58240,58241,58243,58245],{"class":323,"line":1401},[321,58242,1242],{"class":331},[321,58244,51479],{"class":51445},[321,58246,51452],{"class":331},[321,58248,58249,58251,58253,58255,58257,58259],{"class":323,"line":1407},[321,58250,52289],{"class":331},[321,58252,51489],{"class":51445},[321,58254,51492],{"class":2169},[321,58256,377],{"class":331},[321,58258,51497],{"class":436},[321,58260,51452],{"class":331},[321,58262,58263,58265,58267,58269,58271,58273,58275,58277,58279],{"class":323,"line":1421},[321,58264,52289],{"class":331},[321,58266,51489],{"class":51445},[321,58268,15127],{"class":2169},[321,58270,377],{"class":331},[321,58272,51536],{"class":436},[321,58274,51516],{"class":2169},[321,58276,377],{"class":331},[321,58278,51543],{"class":436},[321,58280,51452],{"class":331},[321,58282,58283,58285,58287,58289,58291],{"class":323,"line":1427},[321,58284,52289],{"class":331},[321,58286,51552],{"class":51445},[321,58288,51555],{"class":331},[321,58290,51552],{"class":51445},[321,58292,51452],{"class":331},[321,58294,58295,58297,58299],{"class":323,"line":1518},[321,58296,51930],{"class":331},[321,58298,51479],{"class":51445},[321,58300,51452],{"class":331},[321,58302,58303],{"class":323,"line":1524},[321,58304,2606],{"emptyLinePlaceholder":251},[321,58306,58307,58309,58311],{"class":323,"line":1536},[321,58308,1242],{"class":331},[321,58310,51945],{"class":51445},[321,58312,51452],{"class":331},[321,58314,58315,58317,58319,58321,58323],{"class":323,"line":1818},[321,58316,52289],{"class":331},[321,58318,54032],{"class":51445},[321,58320,54038],{"class":331},[321,58322,54032],{"class":51445},[321,58324,51452],{"class":331},[321,58326,58327,58329,58331],{"class":323,"line":1823},[321,58328,52289],{"class":331},[321,58330,51958],{"class":51445},[321,58332,51452],{"class":331},[321,58334,58335,58337,58339,58341,58343,58345,58347,58350],{"class":323,"line":1829},[321,58336,11428],{"class":327},[321,58338,54536],{"class":380},[321,58340,13771],{"class":327},[321,58342,54541],{"class":331},[321,58344,54544],{"class":2169},[321,58346,332],{"class":331},[321,58348,58349],{"class":436},"'button'",[321,58351,338],{"class":331},[321,58353,58354,58357,58359,58361,58363,58365,58367],{"class":323,"line":1834},[321,58355,58356],{"class":331},"    btn.",[321,58358,57958],{"class":2169},[321,58360,332],{"class":331},[321,58362,57963],{"class":436},[321,58364,12642],{"class":331},[321,58366,54594],{"class":327},[321,58368,54597],{"class":331},[321,58370,58371,58374,58376,58378,58381,58383],{"class":323,"line":1848},[321,58372,58373],{"class":327},"      const",[321,58375,2446],{"class":380},[321,58377,13771],{"class":327},[321,58379,58380],{"class":331}," Math.",[321,58382,58005],{"class":2169},[321,58384,2182],{"class":331},[321,58386,58387,58390,58393],{"class":323,"line":1853},[321,58388,58389],{"class":331},"      console.",[321,58391,58392],{"class":2169},"log",[321,58394,345],{"class":331},[321,58396,58397],{"class":323,"line":1859},[321,58398,33606],{"class":331},[321,58400,58401,58403,58405],{"class":323,"line":1880},[321,58402,52562],{"class":331},[321,58404,51958],{"class":51445},[321,58406,51452],{"class":331},[321,58408,58409,58411,58413],{"class":323,"line":1885},[321,58410,51930],{"class":331},[321,58412,51945],{"class":51445},[321,58414,51452],{"class":331},[321,58416,58417],{"class":323,"line":1899},[321,58418,2606],{"emptyLinePlaceholder":251},[321,58420,58421,58423,58425],{"class":323,"line":1904},[321,58422,51930],{"class":331},[321,58424,50780],{"class":51445},[321,58426,51452],{"class":331},[19,58428,58429],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58431,58432],{},"常量不可以重新赋值",[19,58434,58435],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[312,58437,58439],{"className":50778,"code":58438,"language":50780,"meta":30,"style":30},"\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",[318,58440,58441,58451,58465,58469,58477,58491,58511,58523,58531,58535,58543,58555,58563,58574,58592,58608,58622,58630,58634,58642,58650,58654],{"__ignoreMap":30},[321,58442,58443,58445,58447,58449],{"class":323,"line":324},[321,58444,51442],{"class":331},[321,58446,51446],{"class":51445},[321,58448,51449],{"class":2169},[321,58450,51452],{"class":331},[321,58452,58453,58455,58457,58459,58461,58463],{"class":323,"line":167},[321,58454,1242],{"class":331},[321,58456,50780],{"class":51445},[321,58458,51461],{"class":2169},[321,58460,377],{"class":331},[321,58462,51466],{"class":436},[321,58464,51452],{"class":331},[321,58466,58467],{"class":323,"line":200},[321,58468,2606],{"emptyLinePlaceholder":251},[321,58470,58471,58473,58475],{"class":323,"line":1401},[321,58472,1242],{"class":331},[321,58474,51479],{"class":51445},[321,58476,51452],{"class":331},[321,58478,58479,58481,58483,58485,58487,58489],{"class":323,"line":1407},[321,58480,52289],{"class":331},[321,58482,51489],{"class":51445},[321,58484,51492],{"class":2169},[321,58486,377],{"class":331},[321,58488,51497],{"class":436},[321,58490,51452],{"class":331},[321,58492,58493,58495,58497,58499,58501,58503,58505,58507,58509],{"class":323,"line":1421},[321,58494,52289],{"class":331},[321,58496,51489],{"class":51445},[321,58498,15127],{"class":2169},[321,58500,377],{"class":331},[321,58502,51536],{"class":436},[321,58504,51516],{"class":2169},[321,58506,377],{"class":331},[321,58508,51543],{"class":436},[321,58510,51452],{"class":331},[321,58512,58513,58515,58517,58519,58521],{"class":323,"line":1427},[321,58514,52289],{"class":331},[321,58516,51552],{"class":51445},[321,58518,51555],{"class":331},[321,58520,51552],{"class":51445},[321,58522,51452],{"class":331},[321,58524,58525,58527,58529],{"class":323,"line":1518},[321,58526,51930],{"class":331},[321,58528,51479],{"class":51445},[321,58530,51452],{"class":331},[321,58532,58533],{"class":323,"line":1524},[321,58534,2606],{"emptyLinePlaceholder":251},[321,58536,58537,58539,58541],{"class":323,"line":1536},[321,58538,1242],{"class":331},[321,58540,51945],{"class":51445},[321,58542,51452],{"class":331},[321,58544,58545,58547,58549,58551,58553],{"class":323,"line":1818},[321,58546,52289],{"class":331},[321,58548,54032],{"class":51445},[321,58550,54038],{"class":331},[321,58552,54032],{"class":51445},[321,58554,51452],{"class":331},[321,58556,58557,58559,58561],{"class":323,"line":1823},[321,58558,52289],{"class":331},[321,58560,51958],{"class":51445},[321,58562,51452],{"class":331},[321,58564,58565,58567,58569,58571],{"class":323,"line":1829},[321,58566,11428],{"class":327},[321,58568,2446],{"class":380},[321,58570,13771],{"class":327},[321,58572,58573],{"class":380}," 10\n",[321,58575,58576,58578,58580,58582,58584,58586,58588,58590],{"class":323,"line":1834},[321,58577,11428],{"class":327},[321,58579,54536],{"class":380},[321,58581,13771],{"class":327},[321,58583,54541],{"class":331},[321,58585,54544],{"class":2169},[321,58587,332],{"class":331},[321,58589,58349],{"class":436},[321,58591,338],{"class":331},[321,58593,58594,58596,58598,58600,58602,58604,58606],{"class":323,"line":1848},[321,58595,58356],{"class":331},[321,58597,57958],{"class":2169},[321,58599,332],{"class":331},[321,58601,57963],{"class":436},[321,58603,12642],{"class":331},[321,58605,54594],{"class":327},[321,58607,54597],{"class":331},[321,58609,58610,58612,58614,58616,58618,58620],{"class":323,"line":1853},[321,58611,58373],{"class":327},[321,58613,2446],{"class":380},[321,58615,13771],{"class":327},[321,58617,58380],{"class":331},[321,58619,58005],{"class":2169},[321,58621,2182],{"class":331},[321,58623,58624,58626,58628],{"class":323,"line":1859},[321,58625,58389],{"class":331},[321,58627,58392],{"class":2169},[321,58629,345],{"class":331},[321,58631,58632],{"class":323,"line":1880},[321,58633,33606],{"class":331},[321,58635,58636,58638,58640],{"class":323,"line":1885},[321,58637,52562],{"class":331},[321,58639,51958],{"class":51445},[321,58641,51452],{"class":331},[321,58643,58644,58646,58648],{"class":323,"line":1899},[321,58645,51930],{"class":331},[321,58647,51945],{"class":51445},[321,58649,51452],{"class":331},[321,58651,58652],{"class":323,"line":1904},[321,58653,2606],{"emptyLinePlaceholder":251},[321,58655,58656,58658,58660],{"class":323,"line":1933},[321,58657,51930],{"class":331},[321,58659,50780],{"class":51445},[321,58661,51452],{"class":331},[19,58663,58664],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[312,58666,58668],{"className":50778,"code":58667,"language":50780,"meta":30,"style":30},"\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",[318,58669,58670,58680,58694,58698,58706,58720,58740,58752,58760,58764,58772,58784,58792,58802,58820,58836,58849,58857,58861,58869,58877,58881],{"__ignoreMap":30},[321,58671,58672,58674,58676,58678],{"class":323,"line":324},[321,58673,51442],{"class":331},[321,58675,51446],{"class":51445},[321,58677,51449],{"class":2169},[321,58679,51452],{"class":331},[321,58681,58682,58684,58686,58688,58690,58692],{"class":323,"line":167},[321,58683,1242],{"class":331},[321,58685,50780],{"class":51445},[321,58687,51461],{"class":2169},[321,58689,377],{"class":331},[321,58691,51466],{"class":436},[321,58693,51452],{"class":331},[321,58695,58696],{"class":323,"line":200},[321,58697,2606],{"emptyLinePlaceholder":251},[321,58699,58700,58702,58704],{"class":323,"line":1401},[321,58701,1242],{"class":331},[321,58703,51479],{"class":51445},[321,58705,51452],{"class":331},[321,58707,58708,58710,58712,58714,58716,58718],{"class":323,"line":1407},[321,58709,52289],{"class":331},[321,58711,51489],{"class":51445},[321,58713,51492],{"class":2169},[321,58715,377],{"class":331},[321,58717,51497],{"class":436},[321,58719,51452],{"class":331},[321,58721,58722,58724,58726,58728,58730,58732,58734,58736,58738],{"class":323,"line":1421},[321,58723,52289],{"class":331},[321,58725,51489],{"class":51445},[321,58727,15127],{"class":2169},[321,58729,377],{"class":331},[321,58731,51536],{"class":436},[321,58733,51516],{"class":2169},[321,58735,377],{"class":331},[321,58737,51543],{"class":436},[321,58739,51452],{"class":331},[321,58741,58742,58744,58746,58748,58750],{"class":323,"line":1427},[321,58743,52289],{"class":331},[321,58745,51552],{"class":51445},[321,58747,51555],{"class":331},[321,58749,51552],{"class":51445},[321,58751,51452],{"class":331},[321,58753,58754,58756,58758],{"class":323,"line":1518},[321,58755,51930],{"class":331},[321,58757,51479],{"class":51445},[321,58759,51452],{"class":331},[321,58761,58762],{"class":323,"line":1524},[321,58763,2606],{"emptyLinePlaceholder":251},[321,58765,58766,58768,58770],{"class":323,"line":1536},[321,58767,1242],{"class":331},[321,58769,51945],{"class":51445},[321,58771,51452],{"class":331},[321,58773,58774,58776,58778,58780,58782],{"class":323,"line":1818},[321,58775,52289],{"class":331},[321,58777,54032],{"class":51445},[321,58779,54038],{"class":331},[321,58781,54032],{"class":51445},[321,58783,51452],{"class":331},[321,58785,58786,58788,58790],{"class":323,"line":1823},[321,58787,52289],{"class":331},[321,58789,51958],{"class":51445},[321,58791,51452],{"class":331},[321,58793,58794,58796,58798,58800],{"class":323,"line":1829},[321,58795,11428],{"class":327},[321,58797,2446],{"class":380},[321,58799,13771],{"class":327},[321,58801,58573],{"class":380},[321,58803,58804,58806,58808,58810,58812,58814,58816,58818],{"class":323,"line":1834},[321,58805,11428],{"class":327},[321,58807,54536],{"class":380},[321,58809,13771],{"class":327},[321,58811,54541],{"class":331},[321,58813,54544],{"class":2169},[321,58815,332],{"class":331},[321,58817,58349],{"class":436},[321,58819,338],{"class":331},[321,58821,58822,58824,58826,58828,58830,58832,58834],{"class":323,"line":1848},[321,58823,58356],{"class":331},[321,58825,57958],{"class":2169},[321,58827,332],{"class":331},[321,58829,57963],{"class":436},[321,58831,12642],{"class":331},[321,58833,54594],{"class":327},[321,58835,54597],{"class":331},[321,58837,58838,58841,58843,58845,58847],{"class":323,"line":1853},[321,58839,58840],{"class":331},"      num ",[321,58842,377],{"class":327},[321,58844,58380],{"class":331},[321,58846,58005],{"class":2169},[321,58848,2182],{"class":331},[321,58850,58851,58853,58855],{"class":323,"line":1859},[321,58852,58389],{"class":331},[321,58854,58392],{"class":2169},[321,58856,345],{"class":331},[321,58858,58859],{"class":323,"line":1880},[321,58860,33606],{"class":331},[321,58862,58863,58865,58867],{"class":323,"line":1885},[321,58864,52562],{"class":331},[321,58866,51958],{"class":51445},[321,58868,51452],{"class":331},[321,58870,58871,58873,58875],{"class":323,"line":1899},[321,58872,51930],{"class":331},[321,58874,51945],{"class":51445},[321,58876,51452],{"class":331},[321,58878,58879],{"class":323,"line":1904},[321,58880,2606],{"emptyLinePlaceholder":251},[321,58882,58883,58885,58887],{"class":323,"line":1933},[321,58884,51930],{"class":331},[321,58886,50780],{"class":51445},[321,58888,51452],{"class":331},[19,58890,58891],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[292,58893,58895],{"id":58894},"_324-事件监听版本","3.2.4 事件监听版本",[19,58897,58898],{},[28,58899],{"alt":30,"src":58900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,58902,58903],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,58905,58906],{},"这种方式会覆盖前边的事件监听:",[312,58908,58910],{"className":50778,"code":58909,"language":50780,"meta":30,"style":30},"\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",[318,58911,58912,58922,58936,58940,58948,58962,58982,58994,59002,59006,59014,59026,59034,59052,59066,59077,59081,59093,59103,59107,59115,59123,59127],{"__ignoreMap":30},[321,58913,58914,58916,58918,58920],{"class":323,"line":324},[321,58915,51442],{"class":331},[321,58917,51446],{"class":51445},[321,58919,51449],{"class":2169},[321,58921,51452],{"class":331},[321,58923,58924,58926,58928,58930,58932,58934],{"class":323,"line":167},[321,58925,1242],{"class":331},[321,58927,50780],{"class":51445},[321,58929,51461],{"class":2169},[321,58931,377],{"class":331},[321,58933,51466],{"class":436},[321,58935,51452],{"class":331},[321,58937,58938],{"class":323,"line":200},[321,58939,2606],{"emptyLinePlaceholder":251},[321,58941,58942,58944,58946],{"class":323,"line":1401},[321,58943,1242],{"class":331},[321,58945,51479],{"class":51445},[321,58947,51452],{"class":331},[321,58949,58950,58952,58954,58956,58958,58960],{"class":323,"line":1407},[321,58951,52289],{"class":331},[321,58953,51489],{"class":51445},[321,58955,51492],{"class":2169},[321,58957,377],{"class":331},[321,58959,51497],{"class":436},[321,58961,51452],{"class":331},[321,58963,58964,58966,58968,58970,58972,58974,58976,58978,58980],{"class":323,"line":1421},[321,58965,52289],{"class":331},[321,58967,51489],{"class":51445},[321,58969,15127],{"class":2169},[321,58971,377],{"class":331},[321,58973,51536],{"class":436},[321,58975,51516],{"class":2169},[321,58977,377],{"class":331},[321,58979,51543],{"class":436},[321,58981,51452],{"class":331},[321,58983,58984,58986,58988,58990,58992],{"class":323,"line":1427},[321,58985,52289],{"class":331},[321,58987,51552],{"class":51445},[321,58989,51555],{"class":331},[321,58991,51552],{"class":51445},[321,58993,51452],{"class":331},[321,58995,58996,58998,59000],{"class":323,"line":1518},[321,58997,51930],{"class":331},[321,58999,51479],{"class":51445},[321,59001,51452],{"class":331},[321,59003,59004],{"class":323,"line":1524},[321,59005,2606],{"emptyLinePlaceholder":251},[321,59007,59008,59010,59012],{"class":323,"line":1536},[321,59009,1242],{"class":331},[321,59011,51945],{"class":51445},[321,59013,51452],{"class":331},[321,59015,59016,59018,59020,59022,59024],{"class":323,"line":1818},[321,59017,52289],{"class":331},[321,59019,54032],{"class":51445},[321,59021,54038],{"class":331},[321,59023,54032],{"class":51445},[321,59025,51452],{"class":331},[321,59027,59028,59030,59032],{"class":323,"line":1823},[321,59029,52289],{"class":331},[321,59031,51958],{"class":51445},[321,59033,51452],{"class":331},[321,59035,59036,59038,59040,59042,59044,59046,59048,59050],{"class":323,"line":1829},[321,59037,11428],{"class":327},[321,59039,54536],{"class":380},[321,59041,13771],{"class":327},[321,59043,54541],{"class":331},[321,59045,54544],{"class":2169},[321,59047,332],{"class":331},[321,59049,58349],{"class":436},[321,59051,338],{"class":331},[321,59053,59054,59056,59059,59061,59064],{"class":323,"line":1834},[321,59055,58356],{"class":331},[321,59057,59058],{"class":2169},"onclick",[321,59060,13771],{"class":327},[321,59062,59063],{"class":327}," function",[321,59065,54597],{"class":331},[321,59067,59068,59071,59073,59075],{"class":323,"line":1848},[321,59069,59070],{"class":2169},"      alert",[321,59072,332],{"class":331},[321,59074,804],{"class":380},[321,59076,338],{"class":331},[321,59078,59079],{"class":323,"line":1853},[321,59080,2393],{"class":331},[321,59082,59083,59085,59087,59089,59091],{"class":323,"line":1859},[321,59084,58356],{"class":331},[321,59086,59058],{"class":2169},[321,59088,13771],{"class":327},[321,59090,59063],{"class":327},[321,59092,54597],{"class":331},[321,59094,59095,59097,59099,59101],{"class":323,"line":1880},[321,59096,59070],{"class":2169},[321,59098,332],{"class":331},[321,59100,1082],{"class":380},[321,59102,338],{"class":331},[321,59104,59105],{"class":323,"line":1885},[321,59106,2393],{"class":331},[321,59108,59109,59111,59113],{"class":323,"line":1899},[321,59110,52562],{"class":331},[321,59112,51958],{"class":51445},[321,59114,51452],{"class":331},[321,59116,59117,59119,59121],{"class":323,"line":1904},[321,59118,51930],{"class":331},[321,59120,51945],{"class":51445},[321,59122,51452],{"class":331},[321,59124,59125],{"class":323,"line":1933},[321,59126,2606],{"emptyLinePlaceholder":251},[321,59128,59129,59131,59133],{"class":323,"line":1938},[321,59130,51930],{"class":331},[321,59132,50780],{"class":51445},[321,59134,51452],{"class":331},[19,59136,59137],{},"只要点击就输出结果为22,前边11被覆盖了",[312,59139,59141],{"className":50778,"code":59140,"language":50780,"meta":30,"style":30},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[318,59142,59143,59148,59153,59157,59162,59167],{"__ignoreMap":30},[321,59144,59145],{"class":323,"line":324},[321,59146,59147],{"class":331},"  btn.addEventListener('click', function () {\n",[321,59149,59150],{"class":323,"line":167},[321,59151,59152],{"class":331},"      alert(11)\n",[321,59154,59155],{"class":323,"line":200},[321,59156,33606],{"class":331},[321,59158,59159],{"class":323,"line":1401},[321,59160,59161],{"class":331},"    btn.addEventListener('click', function () {\n",[321,59163,59164],{"class":323,"line":1407},[321,59165,59166],{"class":331},"      alert(22)\n",[321,59168,59169],{"class":323,"line":1421},[321,59170,33606],{"class":331},[19,59172,59173],{},"点击第一次输出11,第二次点击为22",[292,59175,59177],{"id":59176},"_325-事件类型","3.2.5 事件类型",[19,59179,59180],{},[28,59181],{"alt":30,"src":59182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22205,59184,59186],{"id":59185},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59188,59189],{},"补充知识:",[19,59191,59192],{},"轮播图自动播放模块,可以使用",[19,59194,59195],{},"let timerId = setInterval(function () {",[19,59197,59198],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59200,59201],{},"用js方法模拟进行点击事件,click必须加()",[19,59203,59204],{},"next.click()",[19,59206,59207],{},"}, 1000)",[19,59209,59210],{},[28,59211],{"alt":30,"src":59212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[312,59214,59216],{"className":53212,"code":59215,"language":53214,"meta":30,"style":30},"\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",[318,59217,59218,59222,59232,59246,59250,59258,59273,59293,59313,59326,59334,59339,59344,59348,59352,59357,59362,59367,59372,59376,59380,59385,59390,59395,59399,59403,59408,59412,59417,59422,59426,59430,59435,59440,59445,59450,59455,59459,59463,59468,59473,59478,59483,59488,59492,59496,59501,59506,59511,59516,59521,59526,59531,59536,59541,59546,59550,59554,59559,59564,59568,59572,59577,59582,59586,59591,59596,59600,59604,59609,59613,59618,59623,59627,59632,59636,59640,59645,59650,59655,59660,59665,59670,59675,59679,59683,59687,59692,59697,59702,59707,59711,59719,59727,59731,59739,59754,59768,59789,59797,59811,59824,59839,59858,59870,59882,59894,59906,59918,59930,59942,59950,59965,59989,60013,60021,60029,60037,60045,60050,60055,60060,60065,60070,60075,60080,60085,60090,60095,60099,60104,60109,60114,60119,60124,60129,60134,60139,60144,60148,60153,60158,60163,60168,60173,60178,60183,60188,60193,60198,60203,60208,60212,60216,60221,60226,60231,60235,60240,60245,60250,60255,60260,60264,60269,60273,60277,60281,60285,60289,60293,60298,60303,60308,60313,60318,60323,60328,60333,60338,60342,60346,60351,60356,60361,60366,60371,60375,60380,60385,60390,60395,60400,60405,60409,60413,60418,60422,60427,60431,60436,60441,60446,60451,60456,60461,60465,60473,60481,60485],{"__ignoreMap":30},[321,59219,59220],{"class":323,"line":324},[321,59221,2606],{"emptyLinePlaceholder":251},[321,59223,59224,59226,59228,59230],{"class":323,"line":167},[321,59225,51442],{"class":331},[321,59227,51446],{"class":327},[321,59229,51449],{"class":380},[321,59231,51452],{"class":331},[321,59233,59234,59236,59238,59240,59242,59244],{"class":323,"line":200},[321,59235,1242],{"class":331},[321,59237,50780],{"class":51445},[321,59239,51461],{"class":2169},[321,59241,377],{"class":331},[321,59243,51466],{"class":436},[321,59245,51452],{"class":331},[321,59247,59248],{"class":323,"line":1401},[321,59249,2606],{"emptyLinePlaceholder":251},[321,59251,59252,59254,59256],{"class":323,"line":1407},[321,59253,1242],{"class":331},[321,59255,51479],{"class":51445},[321,59257,51452],{"class":331},[321,59259,59260,59262,59264,59266,59268,59270],{"class":323,"line":1421},[321,59261,52289],{"class":331},[321,59263,51489],{"class":51445},[321,59265,51492],{"class":2169},[321,59267,377],{"class":331},[321,59269,51497],{"class":436},[321,59271,59272],{"class":331}," \u002F>\n",[321,59274,59275,59277,59279,59281,59283,59285,59287,59289,59291],{"class":323,"line":1427},[321,59276,52289],{"class":331},[321,59278,51489],{"class":51445},[321,59280,51508],{"class":2169},[321,59282,377],{"class":331},[321,59284,51513],{"class":436},[321,59286,51516],{"class":2169},[321,59288,377],{"class":331},[321,59290,51521],{"class":436},[321,59292,59272],{"class":331},[321,59294,59295,59297,59299,59301,59303,59305,59307,59309,59311],{"class":323,"line":1518},[321,59296,52289],{"class":331},[321,59298,51489],{"class":51445},[321,59300,15127],{"class":2169},[321,59302,377],{"class":331},[321,59304,51536],{"class":436},[321,59306,51516],{"class":2169},[321,59308,377],{"class":331},[321,59310,51543],{"class":436},[321,59312,59272],{"class":331},[321,59314,59315,59317,59319,59322,59324],{"class":323,"line":1524},[321,59316,52289],{"class":331},[321,59318,51552],{"class":51445},[321,59320,59321],{"class":331},">轮播图点击切换\u003C\u002F",[321,59323,51552],{"class":51445},[321,59325,51452],{"class":331},[321,59327,59328,59330,59332],{"class":323,"line":1536},[321,59329,52289],{"class":331},[321,59331,5333],{"class":51445},[321,59333,51452],{"class":331},[321,59335,59336],{"class":323,"line":1818},[321,59337,59338],{"class":331},"    * {\n",[321,59340,59341],{"class":323,"line":1823},[321,59342,59343],{"class":331},"      box-sizing: border-box;\n",[321,59345,59346],{"class":323,"line":1829},[321,59347,2393],{"class":331},[321,59349,59350],{"class":323,"line":1834},[321,59351,2606],{"emptyLinePlaceholder":251},[321,59353,59354],{"class":323,"line":1848},[321,59355,59356],{"class":331},"    .slider {\n",[321,59358,59359],{"class":323,"line":1853},[321,59360,59361],{"class":331},"      width: 560px;\n",[321,59363,59364],{"class":323,"line":1859},[321,59365,59366],{"class":331},"      height: 400px;\n",[321,59368,59369],{"class":323,"line":1880},[321,59370,59371],{"class":331},"      overflow: hidden;\n",[321,59373,59374],{"class":323,"line":1885},[321,59375,2393],{"class":331},[321,59377,59378],{"class":323,"line":1899},[321,59379,2606],{"emptyLinePlaceholder":251},[321,59381,59382],{"class":323,"line":1904},[321,59383,59384],{"class":331},"    .slider-wrapper {\n",[321,59386,59387],{"class":323,"line":1933},[321,59388,59389],{"class":331},"      width: 100%;\n",[321,59391,59392],{"class":323,"line":1938},[321,59393,59394],{"class":331},"      height: 320px;\n",[321,59396,59397],{"class":323,"line":1955},[321,59398,2393],{"class":331},[321,59400,59401],{"class":323,"line":1960},[321,59402,2606],{"emptyLinePlaceholder":251},[321,59404,59405],{"class":323,"line":1965},[321,59406,59407],{"class":331},"    .slider-wrapper img {\n",[321,59409,59410],{"class":323,"line":1970},[321,59411,59389],{"class":331},[321,59413,59414],{"class":323,"line":1984},[321,59415,59416],{"class":331},"      height: 100%;\n",[321,59418,59419],{"class":323,"line":1989},[321,59420,59421],{"class":331},"      display: block;\n",[321,59423,59424],{"class":323,"line":2783},[321,59425,2393],{"class":331},[321,59427,59428],{"class":323,"line":2797},[321,59429,2606],{"emptyLinePlaceholder":251},[321,59431,59432],{"class":323,"line":2805},[321,59433,59434],{"class":331},"    .slider-footer {\n",[321,59436,59437],{"class":323,"line":2810},[321,59438,59439],{"class":331},"      height: 80px;\n",[321,59441,59442],{"class":323,"line":2816},[321,59443,59444],{"class":331},"      background-color: rgb(100, 67, 68);\n",[321,59446,59447],{"class":323,"line":2822},[321,59448,59449],{"class":331},"      padding: 12px 12px 0 12px;\n",[321,59451,59452],{"class":323,"line":2827},[321,59453,59454],{"class":331},"      position: relative;\n",[321,59456,59457],{"class":323,"line":8155},[321,59458,2393],{"class":331},[321,59460,59461],{"class":323,"line":8179},[321,59462,2606],{"emptyLinePlaceholder":251},[321,59464,59465],{"class":323,"line":8184},[321,59466,59467],{"class":331},"    .slider-footer .toggle {\n",[321,59469,59470],{"class":323,"line":8190},[321,59471,59472],{"class":331},"      position: absolute;\n",[321,59474,59475],{"class":323,"line":8217},[321,59476,59477],{"class":331},"      right: 0;\n",[321,59479,59480],{"class":323,"line":8222},[321,59481,59482],{"class":331},"      top: 12px;\n",[321,59484,59485],{"class":323,"line":8228},[321,59486,59487],{"class":331},"      display: flex;\n",[321,59489,59490],{"class":323,"line":8240},[321,59491,2393],{"class":331},[321,59493,59494],{"class":323,"line":8252},[321,59495,2606],{"emptyLinePlaceholder":251},[321,59497,59498],{"class":323,"line":8264},[321,59499,59500],{"class":331},"    .slider-footer .toggle button {\n",[321,59502,59503],{"class":323,"line":9923},[321,59504,59505],{"class":331},"      margin-right: 12px;\n",[321,59507,59508],{"class":323,"line":9948},[321,59509,59510],{"class":331},"      width: 28px;\n",[321,59512,59513],{"class":323,"line":9971},[321,59514,59515],{"class":331},"      height: 28px;\n",[321,59517,59518],{"class":323,"line":9995},[321,59519,59520],{"class":331},"      appearance: none;\n",[321,59522,59523],{"class":323,"line":10000},[321,59524,59525],{"class":331},"      border: none;\n",[321,59527,59528],{"class":323,"line":10005},[321,59529,59530],{"class":331},"      background: rgba(255, 255, 255, 0.1);\n",[321,59532,59533],{"class":323,"line":10010},[321,59534,59535],{"class":331},"      color: #fff;\n",[321,59537,59538],{"class":323,"line":10019},[321,59539,59540],{"class":331},"      border-radius: 4px;\n",[321,59542,59543],{"class":323,"line":10024},[321,59544,59545],{"class":331},"      cursor: pointer;\n",[321,59547,59548],{"class":323,"line":10030},[321,59549,2393],{"class":331},[321,59551,59552],{"class":323,"line":10051},[321,59553,2606],{"emptyLinePlaceholder":251},[321,59555,59556],{"class":323,"line":10057},[321,59557,59558],{"class":331},"    .slider-footer .toggle button:hover {\n",[321,59560,59561],{"class":323,"line":10071},[321,59562,59563],{"class":331},"      background: rgba(255, 255, 255, 0.2);\n",[321,59565,59566],{"class":323,"line":10077},[321,59567,2393],{"class":331},[321,59569,59570],{"class":323,"line":10104},[321,59571,2606],{"emptyLinePlaceholder":251},[321,59573,59574],{"class":323,"line":10113},[321,59575,59576],{"class":331},"    .slider-footer p {\n",[321,59578,59579],{"class":323,"line":10119},[321,59580,59581],{"class":331},"      margin: 0;\n",[321,59583,59584],{"class":323,"line":10127},[321,59585,59535],{"class":331},[321,59587,59588],{"class":323,"line":10132},[321,59589,59590],{"class":331},"      font-size: 18px;\n",[321,59592,59593],{"class":323,"line":16811},[321,59594,59595],{"class":331},"      margin-bottom: 10px;\n",[321,59597,59598],{"class":323,"line":16817},[321,59599,2393],{"class":331},[321,59601,59602],{"class":323,"line":16840},[321,59603,2606],{"emptyLinePlaceholder":251},[321,59605,59606],{"class":323,"line":16846},[321,59607,59608],{"class":331},"    .slider-indicator {\n",[321,59610,59611],{"class":323,"line":16869},[321,59612,59581],{"class":331},[321,59614,59615],{"class":323,"line":16883},[321,59616,59617],{"class":331},"      padding: 0;\n",[321,59619,59620],{"class":323,"line":16903},[321,59621,59622],{"class":331},"      list-style: none;\n",[321,59624,59625],{"class":323,"line":16909},[321,59626,59487],{"class":331},[321,59628,59629],{"class":323,"line":16920},[321,59630,59631],{"class":331},"      align-items: center;\n",[321,59633,59634],{"class":323,"line":16943},[321,59635,2393],{"class":331},[321,59637,59638],{"class":323,"line":16965},[321,59639,2606],{"emptyLinePlaceholder":251},[321,59641,59642],{"class":323,"line":16970},[321,59643,59644],{"class":331},"    .slider-indicator li {\n",[321,59646,59647],{"class":323,"line":16976},[321,59648,59649],{"class":331},"      width: 8px;\n",[321,59651,59652],{"class":323,"line":16990},[321,59653,59654],{"class":331},"      height: 8px;\n",[321,59656,59657],{"class":323,"line":17003},[321,59658,59659],{"class":331},"      margin: 4px;\n",[321,59661,59662],{"class":323,"line":17008},[321,59663,59664],{"class":331},"      border-radius: 50%;\n",[321,59666,59667],{"class":323,"line":17022},[321,59668,59669],{"class":331},"      background: #fff;\n",[321,59671,59672],{"class":323,"line":17027},[321,59673,59674],{"class":331},"      opacity: 0.4;\n",[321,59676,59677],{"class":323,"line":17033},[321,59678,59545],{"class":331},[321,59680,59681],{"class":323,"line":17038},[321,59682,2393],{"class":331},[321,59684,59685],{"class":323,"line":17052},[321,59686,2606],{"emptyLinePlaceholder":251},[321,59688,59689],{"class":323,"line":17057},[321,59690,59691],{"class":331},"    .slider-indicator li.active {\n",[321,59693,59694],{"class":323,"line":17062},[321,59695,59696],{"class":331},"      width: 12px;\n",[321,59698,59699],{"class":323,"line":17076},[321,59700,59701],{"class":331},"      height: 12px;\n",[321,59703,59704],{"class":323,"line":17088},[321,59705,59706],{"class":331},"      opacity: 1;\n",[321,59708,59709],{"class":323,"line":17093},[321,59710,2393],{"class":331},[321,59712,59713,59715,59717],{"class":323,"line":17106},[321,59714,52562],{"class":331},[321,59716,5333],{"class":51445},[321,59718,51452],{"class":331},[321,59720,59721,59723,59725],{"class":323,"line":17111},[321,59722,51930],{"class":331},[321,59724,51479],{"class":51445},[321,59726,51452],{"class":331},[321,59728,59729],{"class":323,"line":17116},[321,59730,2606],{"emptyLinePlaceholder":251},[321,59732,59733,59735,59737],{"class":323,"line":17121},[321,59734,1242],{"class":331},[321,59736,51945],{"class":51445},[321,59738,51452],{"class":331},[321,59740,59741,59743,59745,59747,59749,59752],{"class":323,"line":17134},[321,59742,52289],{"class":331},[321,59744,51756],{"class":51445},[321,59746,53631],{"class":2169},[321,59748,377],{"class":331},[321,59750,59751],{"class":436},"\"slider\"",[321,59753,51452],{"class":331},[321,59755,59756,59758,59760,59762,59764,59766],{"class":323,"line":17139},[321,59757,51486],{"class":331},[321,59759,51756],{"class":51445},[321,59761,53631],{"class":2169},[321,59763,377],{"class":331},[321,59765,55372],{"class":436},[321,59767,51452],{"class":331},[321,59769,59770,59772,59774,59776,59778,59781,59783,59785,59787],{"class":323,"line":32778},[321,59771,55379],{"class":331},[321,59773,28],{"class":51445},[321,59775,55384],{"class":2169},[321,59777,377],{"class":331},[321,59779,59780],{"class":436},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[321,59782,55392],{"class":2169},[321,59784,377],{"class":331},[321,59786,7859],{"class":436},[321,59788,59272],{"class":331},[321,59790,59791,59793,59795],{"class":323,"line":32784},[321,59792,51921],{"class":331},[321,59794,51756],{"class":51445},[321,59796,51452],{"class":331},[321,59798,59799,59801,59803,59805,59807,59809],{"class":323,"line":32790},[321,59800,51486],{"class":331},[321,59802,51756],{"class":51445},[321,59804,53631],{"class":2169},[321,59806,377],{"class":331},[321,59808,55419],{"class":436},[321,59810,51452],{"class":331},[321,59812,59813,59815,59817,59820,59822],{"class":323,"line":32796},[321,59814,55379],{"class":331},[321,59816,19],{"class":51445},[321,59818,59819],{"class":331},">对人类来说会不会太超前了？\u003C\u002F",[321,59821,19],{"class":51445},[321,59823,51452],{"class":331},[321,59825,59826,59828,59830,59832,59834,59837],{"class":323,"line":32802},[321,59827,55379],{"class":331},[321,59829,1339],{"class":51445},[321,59831,53631],{"class":2169},[321,59833,377],{"class":331},[321,59835,59836],{"class":436},"\"slider-indicator\"",[321,59838,51452],{"class":331},[321,59840,59841,59843,59845,59847,59849,59852,59854,59856],{"class":323,"line":32813},[321,59842,55447],{"class":331},[321,59844,154],{"class":51445},[321,59846,53631],{"class":2169},[321,59848,377],{"class":331},[321,59850,59851],{"class":436},"\"active\"",[321,59853,55459],{"class":331},[321,59855,154],{"class":51445},[321,59857,51452],{"class":331},[321,59859,59860,59862,59864,59866,59868],{"class":323,"line":32819},[321,59861,55447],{"class":331},[321,59863,154],{"class":51445},[321,59865,55459],{"class":331},[321,59867,154],{"class":51445},[321,59869,51452],{"class":331},[321,59871,59872,59874,59876,59878,59880],{"class":323,"line":32839},[321,59873,55447],{"class":331},[321,59875,154],{"class":51445},[321,59877,55459],{"class":331},[321,59879,154],{"class":51445},[321,59881,51452],{"class":331},[321,59883,59884,59886,59888,59890,59892],{"class":323,"line":32845},[321,59885,55447],{"class":331},[321,59887,154],{"class":51445},[321,59889,55459],{"class":331},[321,59891,154],{"class":51445},[321,59893,51452],{"class":331},[321,59895,59896,59898,59900,59902,59904],{"class":323,"line":32856},[321,59897,55447],{"class":331},[321,59899,154],{"class":51445},[321,59901,55459],{"class":331},[321,59903,154],{"class":51445},[321,59905,51452],{"class":331},[321,59907,59908,59910,59912,59914,59916],{"class":323,"line":32862},[321,59909,55447],{"class":331},[321,59911,154],{"class":51445},[321,59913,55459],{"class":331},[321,59915,154],{"class":51445},[321,59917,51452],{"class":331},[321,59919,59920,59922,59924,59926,59928],{"class":323,"line":32868},[321,59921,55447],{"class":331},[321,59923,154],{"class":51445},[321,59925,55459],{"class":331},[321,59927,154],{"class":51445},[321,59929,51452],{"class":331},[321,59931,59932,59934,59936,59938,59940],{"class":323,"line":32874},[321,59933,55447],{"class":331},[321,59935,154],{"class":51445},[321,59937,55459],{"class":331},[321,59939,154],{"class":51445},[321,59941,51452],{"class":331},[321,59943,59944,59946,59948],{"class":323,"line":32880},[321,59945,55552],{"class":331},[321,59947,1339],{"class":51445},[321,59949,51452],{"class":331},[321,59951,59952,59954,59956,59958,59960,59963],{"class":323,"line":32886},[321,59953,55379],{"class":331},[321,59955,51756],{"class":51445},[321,59957,53631],{"class":2169},[321,59959,377],{"class":331},[321,59961,59962],{"class":436},"\"toggle\"",[321,59964,51452],{"class":331},[321,59966,59967,59969,59971,59973,59975,59978,59980,59983,59985,59987],{"class":323,"line":32892},[321,59968,55447],{"class":331},[321,59970,54032],{"class":51445},[321,59972,53631],{"class":2169},[321,59974,377],{"class":331},[321,59976,59977],{"class":436},"\"prev\"",[321,59979,1292],{"class":331},[321,59981,59982],{"class":380},"&lt;",[321,59984,51930],{"class":331},[321,59986,54032],{"class":51445},[321,59988,51452],{"class":331},[321,59990,59991,59993,59995,59997,59999,60002,60004,60007,60009,60011],{"class":323,"line":32898},[321,59992,55447],{"class":331},[321,59994,54032],{"class":51445},[321,59996,53631],{"class":2169},[321,59998,377],{"class":331},[321,60000,60001],{"class":436},"\"next\"",[321,60003,1292],{"class":331},[321,60005,60006],{"class":380},"&gt;",[321,60008,51930],{"class":331},[321,60010,54032],{"class":51445},[321,60012,51452],{"class":331},[321,60014,60015,60017,60019],{"class":323,"line":32918},[321,60016,55552],{"class":331},[321,60018,51756],{"class":51445},[321,60020,51452],{"class":331},[321,60022,60023,60025,60027],{"class":323,"line":32924},[321,60024,51921],{"class":331},[321,60026,51756],{"class":51445},[321,60028,51452],{"class":331},[321,60030,60031,60033,60035],{"class":323,"line":32940},[321,60032,52562],{"class":331},[321,60034,51756],{"class":51445},[321,60036,51452],{"class":331},[321,60038,60039,60041,60043],{"class":323,"line":32946},[321,60040,52289],{"class":331},[321,60042,51958],{"class":51445},[321,60044,51452],{"class":331},[321,60046,60047],{"class":323,"line":32960},[321,60048,60049],{"class":331},"    \u002F\u002F 1. 初始数据\n",[321,60051,60052],{"class":323,"line":32966},[321,60053,60054],{"class":331},"    const data = [\n",[321,60056,60057],{"class":323,"line":32981},[321,60058,60059],{"class":331},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[321,60061,60062],{"class":323,"line":32987},[321,60063,60064],{"class":331},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[321,60066,60067],{"class":323,"line":32996},[321,60068,60069],{"class":331},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[321,60071,60072],{"class":323,"line":33002},[321,60073,60074],{"class":331},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[321,60076,60077],{"class":323,"line":33011},[321,60078,60079],{"class":331},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[321,60081,60082],{"class":323,"line":33017},[321,60083,60084],{"class":331},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[321,60086,60087],{"class":323,"line":33023},[321,60088,60089],{"class":331},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[321,60091,60092],{"class":323,"line":33032},[321,60093,60094],{"class":331},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[321,60096,60097],{"class":323,"line":33038},[321,60098,53254],{"class":331},[321,60100,60101],{"class":323,"line":33049},[321,60102,60103],{"class":331},"    \u002F\u002F 获取元素\n",[321,60105,60106],{"class":323,"line":33055},[321,60107,60108],{"class":331},"    const img = document.querySelector('.slider-wrapper img')\n",[321,60110,60111],{"class":323,"line":33074},[321,60112,60113],{"class":331},"    const p = document.querySelector('.slider-footer p')\n",[321,60115,60116],{"class":323,"line":33080},[321,60117,60118],{"class":331},"    const footer = document.querySelector('.slider-footer')\n",[321,60120,60121],{"class":323,"line":33091},[321,60122,60123],{"class":331},"    \u002F\u002F 1. 右按钮业务\n",[321,60125,60126],{"class":323,"line":33097},[321,60127,60128],{"class":331},"    \u002F\u002F 1.1 获取右侧按钮 \n",[321,60130,60131],{"class":323,"line":33117},[321,60132,60133],{"class":331},"    const next = document.querySelector('.next')\n",[321,60135,60136],{"class":323,"line":33133},[321,60137,60138],{"class":331},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[321,60140,60141],{"class":323,"line":33139},[321,60142,60143],{"class":331},"    \u002F\u002F 1.2 注册点击事件\n",[321,60145,60146],{"class":323,"line":33153},[321,60147,2606],{"emptyLinePlaceholder":251},[321,60149,60150],{"class":323,"line":33159},[321,60151,60152],{"class":331},"    next.addEventListener('click', function () {\n",[321,60154,60155],{"class":323,"line":33165},[321,60156,60157],{"class":331},"      \u002F\u002F console.log(11)\n",[321,60159,60160],{"class":323,"line":33176},[321,60161,60162],{"class":331},"      i++\n",[321,60164,60165],{"class":323,"line":33182},[321,60166,60167],{"class":331},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[321,60169,60170],{"class":323,"line":33188},[321,60171,60172],{"class":331},"      \u002F\u002F if (i >= 8) {\n",[321,60174,60175],{"class":323,"line":33198},[321,60176,60177],{"class":331},"      \u002F\u002F   i = 0\n",[321,60179,60180],{"class":323,"line":33204},[321,60181,60182],{"class":331},"      \u002F\u002F }\n",[321,60184,60185],{"class":323,"line":33215},[321,60186,60187],{"class":331},"      i = i >= data.length ? 0 : i\n",[321,60189,60190],{"class":323,"line":33221},[321,60191,60192],{"class":331},"      \u002F\u002F 1.3 得到对应的对象\n",[321,60194,60195],{"class":323,"line":33231},[321,60196,60197],{"class":331},"      \u002F\u002F console.log(data[i])\n",[321,60199,60200],{"class":323,"line":33236},[321,60201,60202],{"class":331},"      \u002F\u002F 调用函数\n",[321,60204,60205],{"class":323,"line":33242},[321,60206,60207],{"class":331},"      toggle()\n",[321,60209,60210],{"class":323,"line":33291},[321,60211,33606],{"class":331},[321,60213,60214],{"class":323,"line":33338},[321,60215,2606],{"emptyLinePlaceholder":251},[321,60217,60218],{"class":323,"line":33343},[321,60219,60220],{"class":331},"    \u002F\u002F 2. 左侧按钮业务\n",[321,60222,60223],{"class":323,"line":33349},[321,60224,60225],{"class":331},"    \u002F\u002F 2.1 获取左侧按钮 \n",[321,60227,60228],{"class":323,"line":33368},[321,60229,60230],{"class":331},"    const prev = document.querySelector('.prev')\n",[321,60232,60233],{"class":323,"line":33374},[321,60234,60143],{"class":331},[321,60236,60237],{"class":323,"line":33394},[321,60238,60239],{"class":331},"    prev.addEventListener('click', function () {\n",[321,60241,60242],{"class":323,"line":33400},[321,60243,60244],{"class":331},"      i--\n",[321,60246,60247],{"class":323,"line":33406},[321,60248,60249],{"class":331},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[321,60251,60252],{"class":323,"line":33416},[321,60253,60254],{"class":331},"      \u002F\u002F if (i \u003C 0) {\n",[321,60256,60257],{"class":323,"line":33421},[321,60258,60259],{"class":331},"      \u002F\u002F   i = 7\n",[321,60261,60262],{"class":323,"line":33427},[321,60263,60182],{"class":331},[321,60265,60266],{"class":323,"line":33443},[321,60267,60268],{"class":331},"      i = i \u003C 0 ? data.length - 1 : i\n",[321,60270,60271],{"class":323,"line":33488},[321,60272,60192],{"class":331},[321,60274,60275],{"class":323,"line":33494},[321,60276,60197],{"class":331},[321,60278,60279],{"class":323,"line":33500},[321,60280,60202],{"class":331},[321,60282,60283],{"class":323,"line":33506},[321,60284,60207],{"class":331},[321,60286,60287],{"class":323,"line":33517},[321,60288,33606],{"class":331},[321,60290,60291],{"class":323,"line":33523},[321,60292,2606],{"emptyLinePlaceholder":251},[321,60294,60295],{"class":323,"line":33529},[321,60296,60297],{"class":331},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[321,60299,60300],{"class":323,"line":33535},[321,60301,60302],{"class":331},"    function toggle() {\n",[321,60304,60305],{"class":323,"line":33553},[321,60306,60307],{"class":331},"      \u002F\u002F 1.4 渲染对应的数据\n",[321,60309,60310],{"class":323,"line":33567},[321,60311,60312],{"class":331},"      img.src = data[i].url\n",[321,60314,60315],{"class":323,"line":33576},[321,60316,60317],{"class":331},"      p.innerHTML = data[i].title\n",[321,60319,60320],{"class":323,"line":33585},[321,60321,60322],{"class":331},"      footer.style.backgroundColor = data[i].color\n",[321,60324,60325],{"class":323,"line":33594},[321,60326,60327],{"class":331},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[321,60329,60330],{"class":323,"line":33603},[321,60331,60332],{"class":331},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[321,60334,60335],{"class":323,"line":33609},[321,60336,60337],{"class":331},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[321,60339,60340],{"class":323,"line":33615},[321,60341,2393],{"class":331},[321,60343,60344],{"class":323,"line":33623},[321,60345,2606],{"emptyLinePlaceholder":251},[321,60347,60348],{"class":323,"line":33628},[321,60349,60350],{"class":331},"    \u002F\u002F 3. 自动播放模块\n",[321,60352,60353],{"class":323,"line":33634},[321,60354,60355],{"class":331},"    let timerId = setInterval(function () {\n",[321,60357,60358],{"class":323,"line":33645},[321,60359,60360],{"class":331},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[321,60362,60363],{"class":323,"line":33651},[321,60364,60365],{"class":331},"      next.click()\n",[321,60367,60368],{"class":323,"line":33671},[321,60369,60370],{"class":331},"    }, 1000)\n",[321,60372,60373],{"class":323,"line":33677},[321,60374,2606],{"emptyLinePlaceholder":251},[321,60376,60377],{"class":323,"line":33683},[321,60378,60379],{"class":331},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[321,60381,60382],{"class":323,"line":33689},[321,60383,60384],{"class":331},"    const slider = document.querySelector('.slider')\n",[321,60386,60387],{"class":323,"line":33706},[321,60388,60389],{"class":331},"    \u002F\u002F 注册事件\n",[321,60391,60392],{"class":323,"line":33712},[321,60393,60394],{"class":331},"    slider.addEventListener('mouseenter', function () {\n",[321,60396,60397],{"class":323,"line":33718},[321,60398,60399],{"class":331},"      \u002F\u002F 停止定时器\n",[321,60401,60402],{"class":323,"line":33724},[321,60403,60404],{"class":331},"      clearInterval(timerId)\n",[321,60406,60407],{"class":323,"line":33730},[321,60408,33606],{"class":331},[321,60410,60411],{"class":323,"line":33736},[321,60412,2606],{"emptyLinePlaceholder":251},[321,60414,60415],{"class":323,"line":33763},[321,60416,60417],{"class":331},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[321,60419,60420],{"class":323,"line":33787},[321,60421,60389],{"class":331},[321,60423,60424],{"class":323,"line":33793},[321,60425,60426],{"class":331},"    slider.addEventListener('mouseleave', function () {\n",[321,60428,60429],{"class":323,"line":33799},[321,60430,60399],{"class":331},[321,60432,60433],{"class":323,"line":33805},[321,60434,60435],{"class":331},"      if (timerId) clearInterval(timerId)\n",[321,60437,60438],{"class":323,"line":33816},[321,60439,60440],{"class":331},"      \u002F\u002F 开启定时器\n",[321,60442,60443],{"class":323,"line":33827},[321,60444,60445],{"class":331},"      timerId = setInterval(function () {\n",[321,60447,60448],{"class":323,"line":33833},[321,60449,60450],{"class":331},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[321,60452,60453],{"class":323,"line":33850},[321,60454,60455],{"class":331},"        next.click()\n",[321,60457,60458],{"class":323,"line":33873},[321,60459,60460],{"class":331},"      }, 1000)\n",[321,60462,60463],{"class":323,"line":33896},[321,60464,33606],{"class":331},[321,60466,60467,60469,60471],{"class":323,"line":33902},[321,60468,52562],{"class":331},[321,60470,51958],{"class":51445},[321,60472,51452],{"class":331},[321,60474,60475,60477,60479],{"class":323,"line":33907},[321,60476,51930],{"class":331},[321,60478,51945],{"class":51445},[321,60480,51452],{"class":331},[321,60482,60483],{"class":323,"line":33916},[321,60484,2606],{"emptyLinePlaceholder":251},[321,60486,60487,60489,60491],{"class":323,"line":33926},[321,60488,51930],{"class":331},[321,60490,50780],{"class":51445},[321,60492,51452],{"class":331},[22205,60494,60496],{"id":60495},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60498,60499],{},"小米搜索框案例：",[312,60501,60503],{"className":50778,"code":60502,"language":50780,"meta":30,"style":30},"\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",[318,60504,60505,60515,60529,60533,60541,60555,60575,60595,60607,60615,60621,60631,60641,60653,60657,60661,60668,60672,60683,60687,60691,60698,60709,60722,60736,60740,60744,60753,60765,60777,60791,60804,60817,60835,60846,60850,60854,60863,60880,60884,60888,60895,60905,60915,60926,60939,60951,60967,60978,60990,60994,60998,61006,61017,61034,61046,61058,61069,61073,61077,61088,61099,61103,61111,61115,61123,61127,61135,61150,61173,61188,61219,61246,61273,61300,61327,61354,61381,61390,61398,61406,61411,61431,61451,61456,61461,61479,61484,61494,61499,61513,61518,61523,61540,61549,61561,61565,61573,61581,61585],{"__ignoreMap":30},[321,60506,60507,60509,60511,60513],{"class":323,"line":324},[321,60508,51442],{"class":331},[321,60510,51446],{"class":51445},[321,60512,51449],{"class":2169},[321,60514,51452],{"class":331},[321,60516,60517,60519,60521,60523,60525,60527],{"class":323,"line":167},[321,60518,1242],{"class":331},[321,60520,50780],{"class":51445},[321,60522,51461],{"class":2169},[321,60524,377],{"class":331},[321,60526,51466],{"class":436},[321,60528,51452],{"class":331},[321,60530,60531],{"class":323,"line":200},[321,60532,2606],{"emptyLinePlaceholder":251},[321,60534,60535,60537,60539],{"class":323,"line":1401},[321,60536,1242],{"class":331},[321,60538,51479],{"class":51445},[321,60540,51452],{"class":331},[321,60542,60543,60545,60547,60549,60551,60553],{"class":323,"line":1407},[321,60544,51486],{"class":331},[321,60546,51489],{"class":51445},[321,60548,51492],{"class":2169},[321,60550,377],{"class":331},[321,60552,51497],{"class":436},[321,60554,51452],{"class":331},[321,60556,60557,60559,60561,60563,60565,60567,60569,60571,60573],{"class":323,"line":1421},[321,60558,51486],{"class":331},[321,60560,51489],{"class":51445},[321,60562,51508],{"class":2169},[321,60564,377],{"class":331},[321,60566,51513],{"class":436},[321,60568,51516],{"class":2169},[321,60570,377],{"class":331},[321,60572,51521],{"class":436},[321,60574,51452],{"class":331},[321,60576,60577,60579,60581,60583,60585,60587,60589,60591,60593],{"class":323,"line":1427},[321,60578,51486],{"class":331},[321,60580,51489],{"class":51445},[321,60582,15127],{"class":2169},[321,60584,377],{"class":331},[321,60586,51536],{"class":436},[321,60588,51516],{"class":2169},[321,60590,377],{"class":331},[321,60592,51543],{"class":436},[321,60594,51452],{"class":331},[321,60596,60597,60599,60601,60603,60605],{"class":323,"line":1518},[321,60598,51486],{"class":331},[321,60600,51552],{"class":51445},[321,60602,51555],{"class":331},[321,60604,51552],{"class":51445},[321,60606,51452],{"class":331},[321,60608,60609,60611,60613],{"class":323,"line":1524},[321,60610,51486],{"class":331},[321,60612,5333],{"class":51445},[321,60614,51452],{"class":331},[321,60616,60617,60619],{"class":323,"line":1536},[321,60618,51572],{"class":51445},[321,60620,15779],{"class":331},[321,60622,60623,60625,60627,60629],{"class":323,"line":1818},[321,60624,51579],{"class":380},[321,60626,51582],{"class":331},[321,60628,523],{"class":380},[321,60630,1497],{"class":331},[321,60632,60633,60635,60637,60639],{"class":323,"line":1823},[321,60634,51591],{"class":380},[321,60636,51582],{"class":331},[321,60638,523],{"class":380},[321,60640,1497],{"class":331},[321,60642,60643,60646,60648,60651],{"class":323,"line":1829},[321,60644,60645],{"class":380},"            box-sizing",[321,60647,51582],{"class":331},[321,60649,60650],{"class":380},"border-box",[321,60652,1497],{"class":331},[321,60654,60655],{"class":323,"line":1834},[321,60656,2735],{"class":331},[321,60658,60659],{"class":323,"line":1848},[321,60660,2606],{"emptyLinePlaceholder":251},[321,60662,60663,60666],{"class":323,"line":1853},[321,60664,60665],{"class":51445},"        ul",[321,60667,15779],{"class":331},[321,60669,60670],{"class":323,"line":1859},[321,60671,2606],{"emptyLinePlaceholder":251},[321,60673,60674,60677,60679,60681],{"class":323,"line":1880},[321,60675,60676],{"class":380},"            list-style",[321,60678,51582],{"class":331},[321,60680,54882],{"class":380},[321,60682,1497],{"class":331},[321,60684,60685],{"class":323,"line":1885},[321,60686,2735],{"class":331},[321,60688,60689],{"class":323,"line":1899},[321,60690,2606],{"emptyLinePlaceholder":251},[321,60692,60693,60696],{"class":323,"line":1904},[321,60694,60695],{"class":2169},"        .mi",[321,60697,15779],{"class":331},[321,60699,60700,60703,60705,60707],{"class":323,"line":1933},[321,60701,60702],{"class":380},"            position",[321,60704,51582],{"class":331},[321,60706,54909],{"class":380},[321,60708,1497],{"class":331},[321,60710,60711,60713,60715,60718,60720],{"class":323,"line":1938},[321,60712,51629],{"class":380},[321,60714,51582],{"class":331},[321,60716,60717],{"class":380},"223",[321,60719,51637],{"class":327},[321,60721,1497],{"class":331},[321,60723,60724,60726,60728,60730,60732,60734],{"class":323,"line":1955},[321,60725,51579],{"class":380},[321,60727,51582],{"class":331},[321,60729,643],{"class":380},[321,60731,51637],{"class":327},[321,60733,51701],{"class":380},[321,60735,1497],{"class":331},[321,60737,60738],{"class":323,"line":1960},[321,60739,2735],{"class":331},[321,60741,60742],{"class":323,"line":1965},[321,60743,2606],{"emptyLinePlaceholder":251},[321,60745,60746,60748,60751],{"class":323,"line":1970},[321,60747,60695],{"class":2169},[321,60749,60750],{"class":51445}," input",[321,60752,15779],{"class":331},[321,60754,60755,60757,60759,60761,60763],{"class":323,"line":1984},[321,60756,51629],{"class":380},[321,60758,51582],{"class":331},[321,60760,60717],{"class":380},[321,60762,51637],{"class":327},[321,60764,1497],{"class":331},[321,60766,60767,60769,60771,60773,60775],{"class":323,"line":1989},[321,60768,51644],{"class":380},[321,60770,51582],{"class":331},[321,60772,939],{"class":380},[321,60774,51637],{"class":327},[321,60776,1497],{"class":331},[321,60778,60779,60781,60783,60785,60787,60789],{"class":323,"line":2783},[321,60780,51591],{"class":380},[321,60782,51582],{"class":331},[321,60784,523],{"class":380},[321,60786,2244],{"class":380},[321,60788,51637],{"class":327},[321,60790,1497],{"class":331},[321,60792,60793,60796,60798,60800,60802],{"class":323,"line":2797},[321,60794,60795],{"class":380},"            font-size",[321,60797,51582],{"class":331},[321,60799,881],{"class":380},[321,60801,51637],{"class":327},[321,60803,1497],{"class":331},[321,60805,60806,60809,60811,60813,60815],{"class":323,"line":2805},[321,60807,60808],{"class":380},"            line-height",[321,60810,51582],{"class":331},[321,60812,939],{"class":380},[321,60814,51637],{"class":327},[321,60816,1497],{"class":331},[321,60818,60819,60822,60824,60826,60828,60830,60833],{"class":323,"line":2810},[321,60820,60821],{"class":380},"            border",[321,60823,51582],{"class":331},[321,60825,549],{"class":380},[321,60827,51637],{"class":327},[321,60829,51666],{"class":380},[321,60831,60832],{"class":380}," #e0e0e0",[321,60834,1497],{"class":331},[321,60836,60837,60840,60842,60844],{"class":323,"line":2816},[321,60838,60839],{"class":380},"            outline",[321,60841,51582],{"class":331},[321,60843,54882],{"class":380},[321,60845,1497],{"class":331},[321,60847,60848],{"class":323,"line":2822},[321,60849,2735],{"class":331},[321,60851,60852],{"class":323,"line":2827},[321,60853,2606],{"emptyLinePlaceholder":251},[321,60855,60856,60858,60861],{"class":323,"line":8155},[321,60857,60695],{"class":2169},[321,60859,60860],{"class":2169}," .search",[321,60862,15779],{"class":331},[321,60864,60865,60867,60869,60871,60873,60875,60878],{"class":323,"line":8179},[321,60866,60821],{"class":380},[321,60868,51582],{"class":331},[321,60870,549],{"class":380},[321,60872,51637],{"class":327},[321,60874,51666],{"class":380},[321,60876,60877],{"class":380}," #ff6700",[321,60879,1497],{"class":331},[321,60881,60882],{"class":323,"line":8184},[321,60883,2735],{"class":331},[321,60885,60886],{"class":323,"line":8190},[321,60887,2606],{"emptyLinePlaceholder":251},[321,60889,60890,60893],{"class":323,"line":8217},[321,60891,60892],{"class":2169},"        .result-list",[321,60894,15779],{"class":331},[321,60896,60897,60899,60901,60903],{"class":323,"line":8222},[321,60898,51617],{"class":380},[321,60900,51582],{"class":331},[321,60902,54882],{"class":380},[321,60904,1497],{"class":331},[321,60906,60907,60909,60911,60913],{"class":323,"line":8228},[321,60908,60702],{"class":380},[321,60910,51582],{"class":331},[321,60912,54976],{"class":380},[321,60914,1497],{"class":331},[321,60916,60917,60920,60922,60924],{"class":323,"line":8240},[321,60918,60919],{"class":380},"            left",[321,60921,51582],{"class":331},[321,60923,523],{"class":380},[321,60925,1497],{"class":331},[321,60927,60928,60931,60933,60935,60937],{"class":323,"line":8252},[321,60929,60930],{"class":380},"            top",[321,60932,51582],{"class":331},[321,60934,939],{"class":380},[321,60936,51637],{"class":327},[321,60938,1497],{"class":331},[321,60940,60941,60943,60945,60947,60949],{"class":323,"line":8264},[321,60942,51629],{"class":380},[321,60944,51582],{"class":331},[321,60946,60717],{"class":380},[321,60948,51637],{"class":327},[321,60950,1497],{"class":331},[321,60952,60953,60955,60957,60959,60961,60963,60965],{"class":323,"line":9923},[321,60954,60821],{"class":380},[321,60956,51582],{"class":331},[321,60958,549],{"class":380},[321,60960,51637],{"class":327},[321,60962,51666],{"class":380},[321,60964,60877],{"class":380},[321,60966,1497],{"class":331},[321,60968,60969,60972,60974,60976],{"class":323,"line":9948},[321,60970,60971],{"class":380},"            border-top",[321,60973,51582],{"class":331},[321,60975,523],{"class":380},[321,60977,1497],{"class":331},[321,60979,60980,60983,60985,60988],{"class":323,"line":9971},[321,60981,60982],{"class":380},"            background",[321,60984,51582],{"class":331},[321,60986,60987],{"class":380},"#fff",[321,60989,1497],{"class":331},[321,60991,60992],{"class":323,"line":9995},[321,60993,2735],{"class":331},[321,60995,60996],{"class":323,"line":10000},[321,60997,2606],{"emptyLinePlaceholder":251},[321,60999,61000,61002,61004],{"class":323,"line":10005},[321,61001,60892],{"class":2169},[321,61003,1605],{"class":51445},[321,61005,15779],{"class":331},[321,61007,61008,61010,61012,61015],{"class":323,"line":10010},[321,61009,51617],{"class":380},[321,61011,51582],{"class":331},[321,61013,61014],{"class":380},"block",[321,61016,1497],{"class":331},[321,61018,61019,61021,61023,61025,61027,61030,61032],{"class":323,"line":10019},[321,61020,51591],{"class":380},[321,61022,51582],{"class":331},[321,61024,676],{"class":380},[321,61026,51637],{"class":327},[321,61028,61029],{"class":380}," 15",[321,61031,51637],{"class":327},[321,61033,1497],{"class":331},[321,61035,61036,61038,61040,61042,61044],{"class":323,"line":10024},[321,61037,60795],{"class":380},[321,61039,51582],{"class":331},[321,61041,830],{"class":380},[321,61043,51637],{"class":327},[321,61045,1497],{"class":331},[321,61047,61048,61051,61053,61056],{"class":323,"line":10030},[321,61049,61050],{"class":380},"            color",[321,61052,51582],{"class":331},[321,61054,61055],{"class":380},"#424242",[321,61057,1497],{"class":331},[321,61059,61060,61063,61065,61067],{"class":323,"line":10051},[321,61061,61062],{"class":380},"            text-decoration",[321,61064,51582],{"class":331},[321,61066,54882],{"class":380},[321,61068,1497],{"class":331},[321,61070,61071],{"class":323,"line":10057},[321,61072,2735],{"class":331},[321,61074,61075],{"class":323,"line":10071},[321,61076,2606],{"emptyLinePlaceholder":251},[321,61078,61079,61081,61083,61086],{"class":323,"line":10077},[321,61080,60892],{"class":2169},[321,61082,1605],{"class":51445},[321,61084,61085],{"class":2169},":hover",[321,61087,15779],{"class":331},[321,61089,61090,61092,61094,61097],{"class":323,"line":10104},[321,61091,51785],{"class":380},[321,61093,51582],{"class":331},[321,61095,61096],{"class":380},"#eee",[321,61098,1497],{"class":331},[321,61100,61101],{"class":323,"line":10113},[321,61102,2735],{"class":331},[321,61104,61105,61107,61109],{"class":323,"line":10119},[321,61106,51921],{"class":331},[321,61108,5333],{"class":51445},[321,61110,51452],{"class":331},[321,61112,61113],{"class":323,"line":10127},[321,61114,2606],{"emptyLinePlaceholder":251},[321,61116,61117,61119,61121],{"class":323,"line":10132},[321,61118,51930],{"class":331},[321,61120,51479],{"class":51445},[321,61122,51452],{"class":331},[321,61124,61125],{"class":323,"line":16811},[321,61126,2606],{"emptyLinePlaceholder":251},[321,61128,61129,61131,61133],{"class":323,"line":16817},[321,61130,1242],{"class":331},[321,61132,51945],{"class":51445},[321,61134,51452],{"class":331},[321,61136,61137,61139,61141,61143,61145,61148],{"class":323,"line":16840},[321,61138,51486],{"class":331},[321,61140,51756],{"class":51445},[321,61142,53631],{"class":2169},[321,61144,377],{"class":331},[321,61146,61147],{"class":436},"\"mi\"",[321,61149,51452],{"class":331},[321,61151,61152,61154,61156,61158,61160,61163,61166,61168,61171],{"class":323,"line":16846},[321,61153,55447],{"class":331},[321,61155,53966],{"class":51445},[321,61157,53969],{"class":2169},[321,61159,377],{"class":331},[321,61161,61162],{"class":436},"\"search\"",[321,61164,61165],{"class":2169}," placeholder",[321,61167,377],{"class":331},[321,61169,61170],{"class":436},"\"小米笔记本\"",[321,61172,51452],{"class":331},[321,61174,61175,61177,61179,61181,61183,61186],{"class":323,"line":16869},[321,61176,55447],{"class":331},[321,61178,1339],{"class":51445},[321,61180,53631],{"class":2169},[321,61182,377],{"class":331},[321,61184,61185],{"class":436},"\"result-list\"",[321,61187,51452],{"class":331},[321,61189,61190,61193,61195,61198,61200,61203,61205,61208,61211,61213,61215,61217],{"class":323,"line":16883},[321,61191,61192],{"class":331},"            \u003C",[321,61194,154],{"class":51445},[321,61196,61197],{"class":331},">\u003C",[321,61199,570],{"class":51445},[321,61201,61202],{"class":2169}," href",[321,61204,377],{"class":331},[321,61206,61207],{"class":436},"\"#\"",[321,61209,61210],{"class":331},">全部商品\u003C\u002F",[321,61212,570],{"class":51445},[321,61214,55459],{"class":331},[321,61216,154],{"class":51445},[321,61218,51452],{"class":331},[321,61220,61221,61223,61225,61227,61229,61231,61233,61235,61238,61240,61242,61244],{"class":323,"line":16903},[321,61222,61192],{"class":331},[321,61224,154],{"class":51445},[321,61226,61197],{"class":331},[321,61228,570],{"class":51445},[321,61230,61202],{"class":2169},[321,61232,377],{"class":331},[321,61234,61207],{"class":436},[321,61236,61237],{"class":331},">小米11\u003C\u002F",[321,61239,570],{"class":51445},[321,61241,55459],{"class":331},[321,61243,154],{"class":51445},[321,61245,51452],{"class":331},[321,61247,61248,61250,61252,61254,61256,61258,61260,61262,61265,61267,61269,61271],{"class":323,"line":16909},[321,61249,61192],{"class":331},[321,61251,154],{"class":51445},[321,61253,61197],{"class":331},[321,61255,570],{"class":51445},[321,61257,61202],{"class":2169},[321,61259,377],{"class":331},[321,61261,61207],{"class":436},[321,61263,61264],{"class":331},">小米10S\u003C\u002F",[321,61266,570],{"class":51445},[321,61268,55459],{"class":331},[321,61270,154],{"class":51445},[321,61272,51452],{"class":331},[321,61274,61275,61277,61279,61281,61283,61285,61287,61289,61292,61294,61296,61298],{"class":323,"line":16920},[321,61276,61192],{"class":331},[321,61278,154],{"class":51445},[321,61280,61197],{"class":331},[321,61282,570],{"class":51445},[321,61284,61202],{"class":2169},[321,61286,377],{"class":331},[321,61288,61207],{"class":436},[321,61290,61291],{"class":331},">小米笔记本\u003C\u002F",[321,61293,570],{"class":51445},[321,61295,55459],{"class":331},[321,61297,154],{"class":51445},[321,61299,51452],{"class":331},[321,61301,61302,61304,61306,61308,61310,61312,61314,61316,61319,61321,61323,61325],{"class":323,"line":16943},[321,61303,61192],{"class":331},[321,61305,154],{"class":51445},[321,61307,61197],{"class":331},[321,61309,570],{"class":51445},[321,61311,61202],{"class":2169},[321,61313,377],{"class":331},[321,61315,61207],{"class":436},[321,61317,61318],{"class":331},">小米手机\u003C\u002F",[321,61320,570],{"class":51445},[321,61322,55459],{"class":331},[321,61324,154],{"class":51445},[321,61326,51452],{"class":331},[321,61328,61329,61331,61333,61335,61337,61339,61341,61343,61346,61348,61350,61352],{"class":323,"line":16965},[321,61330,61192],{"class":331},[321,61332,154],{"class":51445},[321,61334,61197],{"class":331},[321,61336,570],{"class":51445},[321,61338,61202],{"class":2169},[321,61340,377],{"class":331},[321,61342,61207],{"class":436},[321,61344,61345],{"class":331},">黑鲨4\u003C\u002F",[321,61347,570],{"class":51445},[321,61349,55459],{"class":331},[321,61351,154],{"class":51445},[321,61353,51452],{"class":331},[321,61355,61356,61358,61360,61362,61364,61366,61368,61370,61373,61375,61377,61379],{"class":323,"line":16970},[321,61357,61192],{"class":331},[321,61359,154],{"class":51445},[321,61361,61197],{"class":331},[321,61363,570],{"class":51445},[321,61365,61202],{"class":2169},[321,61367,377],{"class":331},[321,61369,61207],{"class":436},[321,61371,61372],{"class":331},">空调\u003C\u002F",[321,61374,570],{"class":51445},[321,61376,55459],{"class":331},[321,61378,154],{"class":51445},[321,61380,51452],{"class":331},[321,61382,61383,61386,61388],{"class":323,"line":16976},[321,61384,61385],{"class":331},"        \u003C\u002F",[321,61387,1339],{"class":51445},[321,61389,51452],{"class":331},[321,61391,61392,61394,61396],{"class":323,"line":16990},[321,61393,51921],{"class":331},[321,61395,51756],{"class":51445},[321,61397,51452],{"class":331},[321,61399,61400,61402,61404],{"class":323,"line":17003},[321,61401,51486],{"class":331},[321,61403,51958],{"class":51445},[321,61405,51452],{"class":331},[321,61407,61408],{"class":323,"line":17008},[321,61409,61410],{"class":390},"        \u002F\u002F 1. 获取元素\n",[321,61412,61413,61416,61418,61420,61422,61424,61426,61429],{"class":323,"line":17022},[321,61414,61415],{"class":327},"        const",[321,61417,60750],{"class":380},[321,61419,13771],{"class":327},[321,61421,54541],{"class":331},[321,61423,54544],{"class":2169},[321,61425,332],{"class":331},[321,61427,61428],{"class":436},"'[type=search]'",[321,61430,338],{"class":331},[321,61432,61433,61435,61438,61440,61442,61444,61446,61449],{"class":323,"line":17027},[321,61434,61415],{"class":327},[321,61436,61437],{"class":380}," ul",[321,61439,13771],{"class":327},[321,61441,54541],{"class":331},[321,61443,54544],{"class":2169},[321,61445,332],{"class":331},[321,61447,61448],{"class":436},"'.result-list'",[321,61450,338],{"class":331},[321,61452,61453],{"class":323,"line":17033},[321,61454,61455],{"class":390},"        \u002F\u002F console.log(input)\n",[321,61457,61458],{"class":323,"line":17038},[321,61459,61460],{"class":390},"        \u002F\u002F 2. 监听事件 获得焦点\n",[321,61462,61463,61466,61468,61470,61473,61475,61477],{"class":323,"line":17052},[321,61464,61465],{"class":331},"        input.",[321,61467,57958],{"class":2169},[321,61469,332],{"class":331},[321,61471,61472],{"class":436},"'focus'",[321,61474,12642],{"class":331},[321,61476,54594],{"class":327},[321,61478,54597],{"class":331},[321,61480,61481],{"class":323,"line":17057},[321,61482,61483],{"class":390},"            \u002F\u002F ul显示\n",[321,61485,61486,61489,61491],{"class":323,"line":17062},[321,61487,61488],{"class":331},"            ul.style.display ",[321,61490,377],{"class":327},[321,61492,61493],{"class":436}," 'block'\n",[321,61495,61496],{"class":323,"line":17076},[321,61497,61498],{"class":390},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[321,61500,61501,61504,61506,61508,61511],{"class":323,"line":17088},[321,61502,61503],{"class":331},"            input.classList.",[321,61505,5541],{"class":2169},[321,61507,332],{"class":331},[321,61509,61510],{"class":436},"'search'",[321,61512,338],{"class":331},[321,61514,61515],{"class":323,"line":17093},[321,61516,61517],{"class":331},"        })\n",[321,61519,61520],{"class":323,"line":17106},[321,61521,61522],{"class":390},"        \u002F\u002F 3. 监听事件 失去焦点\n",[321,61524,61525,61527,61529,61531,61534,61536,61538],{"class":323,"line":17111},[321,61526,61465],{"class":331},[321,61528,57958],{"class":2169},[321,61530,332],{"class":331},[321,61532,61533],{"class":436},"'blur'",[321,61535,12642],{"class":331},[321,61537,54594],{"class":327},[321,61539,54597],{"class":331},[321,61541,61542,61544,61546],{"class":323,"line":17116},[321,61543,61488],{"class":331},[321,61545,377],{"class":327},[321,61547,61548],{"class":436}," 'none'\n",[321,61550,61551,61553,61555,61557,61559],{"class":323,"line":17121},[321,61552,61503],{"class":331},[321,61554,57151],{"class":2169},[321,61556,332],{"class":331},[321,61558,61510],{"class":436},[321,61560,338],{"class":331},[321,61562,61563],{"class":323,"line":17134},[321,61564,61517],{"class":331},[321,61566,61567,61569,61571],{"class":323,"line":17139},[321,61568,51921],{"class":331},[321,61570,51958],{"class":51445},[321,61572,51452],{"class":331},[321,61574,61575,61577,61579],{"class":323,"line":32778},[321,61576,51930],{"class":331},[321,61578,51945],{"class":51445},[321,61580,51452],{"class":331},[321,61582,61583],{"class":323,"line":32784},[321,61584,2606],{"emptyLinePlaceholder":251},[321,61586,61587,61589,61591],{"class":323,"line":32790},[321,61588,51930],{"class":331},[321,61590,50780],{"class":51445},[321,61592,51452],{"class":331},[22205,61594,61596],{"id":61595},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61598,61599],{},"评论字数统计案例",[19,61601,61602],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61604,61605],{},"牢记focus伪类选择器",[51489,61607],{"charSet":61608},"UTF-8",[51489,61610],{"name":61611,"content":61612},"viewport","width=device-width, initial-scale=1.0",[51552,61614,61615],{},"Document",[5333,61617,61618],{},"\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",[53966,61620],{"type":5394},[1339,61622,61623,61626],{},[154,61624,61625],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[154,61627,61628],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[312,61630,61632],{"className":50778,"code":61631,"language":50780,"meta":30,"style":30},"\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",[318,61633,61634,61644,61658,61662,61670,61684,61704,61724,61737,61745,61752,61765,61779,61789,61799,61803,61807,61814,61826,61838,61850,61862,61891,61904,61908,61912,61921,61932,61944,61955,61966,61978,61989,62001,62017,62029,62033,62037,62048,62059,62069,62081,62085,62089,62097,62108,62118,62129,62141,62154,62166,62178,62182,62186,62195,62207,62218,62231,62242,62256,62260,62264,62271,62283,62295,62305,62309,62313,62322,62334,62344,62348,62352,62363,62373,62392,62405,62409,62413,62423,62433,62437,62441,62452,62463,62475,62487,62491,62495,62506,62517,62531,62535,62539,62550,62560,62572,62576,62584,62592,62596,62604,62619,62638,62678,62691,62699,62713,62733,62741,62756,62779,62797,62812,62832,62852,62872,62880,62888,62896,62904,62924,62944,62949,62966,62975,62979,62984,63000,63008,63012,63017,63034,63039,63064,63068,63072,63077,63082,63090,63098,63102],{"__ignoreMap":30},[321,61635,61636,61638,61640,61642],{"class":323,"line":324},[321,61637,51442],{"class":331},[321,61639,51446],{"class":51445},[321,61641,51449],{"class":2169},[321,61643,51452],{"class":331},[321,61645,61646,61648,61650,61652,61654,61656],{"class":323,"line":167},[321,61647,1242],{"class":331},[321,61649,50780],{"class":51445},[321,61651,51461],{"class":2169},[321,61653,377],{"class":331},[321,61655,51466],{"class":436},[321,61657,51452],{"class":331},[321,61659,61660],{"class":323,"line":200},[321,61661,2606],{"emptyLinePlaceholder":251},[321,61663,61664,61666,61668],{"class":323,"line":1401},[321,61665,1242],{"class":331},[321,61667,51479],{"class":51445},[321,61669,51452],{"class":331},[321,61671,61672,61674,61676,61678,61680,61682],{"class":323,"line":1407},[321,61673,52289],{"class":331},[321,61675,51489],{"class":51445},[321,61677,51492],{"class":2169},[321,61679,377],{"class":331},[321,61681,51497],{"class":436},[321,61683,51452],{"class":331},[321,61685,61686,61688,61690,61692,61694,61696,61698,61700,61702],{"class":323,"line":1421},[321,61687,52289],{"class":331},[321,61689,51489],{"class":51445},[321,61691,51508],{"class":2169},[321,61693,377],{"class":331},[321,61695,51513],{"class":436},[321,61697,51516],{"class":2169},[321,61699,377],{"class":331},[321,61701,51521],{"class":436},[321,61703,51452],{"class":331},[321,61705,61706,61708,61710,61712,61714,61716,61718,61720,61722],{"class":323,"line":1427},[321,61707,52289],{"class":331},[321,61709,51489],{"class":51445},[321,61711,15127],{"class":2169},[321,61713,377],{"class":331},[321,61715,51536],{"class":436},[321,61717,51516],{"class":2169},[321,61719,377],{"class":331},[321,61721,51543],{"class":436},[321,61723,51452],{"class":331},[321,61725,61726,61728,61730,61733,61735],{"class":323,"line":1518},[321,61727,52289],{"class":331},[321,61729,51552],{"class":51445},[321,61731,61732],{"class":331},">评论回车发布\u003C\u002F",[321,61734,51552],{"class":51445},[321,61736,51452],{"class":331},[321,61738,61739,61741,61743],{"class":323,"line":1524},[321,61740,52289],{"class":331},[321,61742,5333],{"class":51445},[321,61744,51452],{"class":331},[321,61746,61747,61750],{"class":323,"line":1536},[321,61748,61749],{"class":2169},"    .wrapper",[321,61751,15779],{"class":331},[321,61753,61754,61757,61759,61761,61763],{"class":323,"line":1818},[321,61755,61756],{"class":380},"      min-width",[321,61758,51582],{"class":331},[321,61760,4193],{"class":380},[321,61762,51637],{"class":327},[321,61764,1497],{"class":331},[321,61766,61767,61770,61772,61775,61777],{"class":323,"line":1823},[321,61768,61769],{"class":380},"      max-width",[321,61771,51582],{"class":331},[321,61773,61774],{"class":380},"800",[321,61776,51637],{"class":327},[321,61778,1497],{"class":331},[321,61780,61781,61783,61785,61787],{"class":323,"line":1829},[321,61782,55154],{"class":380},[321,61784,51582],{"class":331},[321,61786,51622],{"class":380},[321,61788,1497],{"class":331},[321,61790,61791,61793,61795,61797],{"class":323,"line":1834},[321,61792,55165],{"class":380},[321,61794,51582],{"class":331},[321,61796,51725],{"class":380},[321,61798,1497],{"class":331},[321,61800,61801],{"class":323,"line":1848},[321,61802,2393],{"class":331},[321,61804,61805],{"class":323,"line":1853},[321,61806,2606],{"emptyLinePlaceholder":251},[321,61808,61809,61812],{"class":323,"line":1859},[321,61810,61811],{"class":2169},"    .avatar",[321,61813,15779],{"class":331},[321,61815,61816,61818,61820,61822,61824],{"class":323,"line":1880},[321,61817,54916],{"class":380},[321,61819,51582],{"class":331},[321,61821,939],{"class":380},[321,61823,51637],{"class":327},[321,61825,1497],{"class":331},[321,61827,61828,61830,61832,61834,61836],{"class":323,"line":1885},[321,61829,54930],{"class":380},[321,61831,51582],{"class":331},[321,61833,939],{"class":380},[321,61835,51637],{"class":327},[321,61837,1497],{"class":331},[321,61839,61840,61842,61844,61846,61848],{"class":323,"line":1899},[321,61841,55279],{"class":380},[321,61843,51582],{"class":331},[321,61845,988],{"class":380},[321,61847,660],{"class":327},[321,61849,1497],{"class":331},[321,61851,61852,61855,61857,61860],{"class":323,"line":1904},[321,61853,61854],{"class":380},"      overflow",[321,61856,51582],{"class":331},[321,61858,61859],{"class":380},"hidden",[321,61861,1497],{"class":331},[321,61863,61864,61867,61869,61872,61874,61877,61879,61882,61884,61886,61889],{"class":323,"line":1933},[321,61865,61866],{"class":380},"      background",[321,61868,51582],{"class":331},[321,61870,61871],{"class":380},"url",[321,61873,332],{"class":331},[321,61875,61876],{"class":5423},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[321,61878,13921],{"class":331},[321,61880,61881],{"class":380},"no-repeat",[321,61883,17351],{"class":380},[321,61885,25123],{"class":331},[321,61887,61888],{"class":380},"cover",[321,61890,1497],{"class":331},[321,61892,61893,61896,61898,61900,61902],{"class":323,"line":1938},[321,61894,61895],{"class":380},"      margin-right",[321,61897,51582],{"class":331},[321,61899,1032],{"class":380},[321,61901,51637],{"class":327},[321,61903,1497],{"class":331},[321,61905,61906],{"class":323,"line":1955},[321,61907,2393],{"class":331},[321,61909,61910],{"class":323,"line":1960},[321,61911,2606],{"emptyLinePlaceholder":251},[321,61913,61914,61916,61919],{"class":323,"line":1965},[321,61915,61749],{"class":2169},[321,61917,61918],{"class":51445}," textarea",[321,61920,15779],{"class":331},[321,61922,61923,61926,61928,61930],{"class":323,"line":1970},[321,61924,61925],{"class":380},"      outline",[321,61927,51582],{"class":331},[321,61929,54882],{"class":380},[321,61931,1497],{"class":331},[321,61933,61934,61937,61939,61942],{"class":323,"line":1984},[321,61935,61936],{"class":380},"      border-color",[321,61938,51582],{"class":331},[321,61940,61941],{"class":380},"transparent",[321,61943,1497],{"class":331},[321,61945,61946,61949,61951,61953],{"class":323,"line":1989},[321,61947,61948],{"class":380},"      resize",[321,61950,51582],{"class":331},[321,61952,54882],{"class":380},[321,61954,1497],{"class":331},[321,61956,61957,61959,61961,61964],{"class":323,"line":2783},[321,61958,61866],{"class":380},[321,61960,51582],{"class":331},[321,61962,61963],{"class":380},"#f5f5f5",[321,61965,1497],{"class":331},[321,61967,61968,61970,61972,61974,61976],{"class":323,"line":2797},[321,61969,55279],{"class":380},[321,61971,51582],{"class":331},[321,61973,625],{"class":380},[321,61975,51637],{"class":327},[321,61977,1497],{"class":331},[321,61979,61980,61983,61985,61987],{"class":323,"line":2805},[321,61981,61982],{"class":380},"      flex",[321,61984,51582],{"class":331},[321,61986,549],{"class":380},[321,61988,1497],{"class":331},[321,61990,61991,61993,61995,61997,61999],{"class":323,"line":2810},[321,61992,54840],{"class":380},[321,61994,51582],{"class":331},[321,61996,778],{"class":380},[321,61998,51637],{"class":327},[321,62000,1497],{"class":331},[321,62002,62003,62006,62008,62010,62013,62015],{"class":323,"line":2816},[321,62004,62005],{"class":380},"      transition",[321,62007,51582],{"class":331},[321,62009,28266],{"class":380},[321,62011,62012],{"class":380}," 0.5",[321,62014,1027],{"class":327},[321,62016,1497],{"class":331},[321,62018,62019,62021,62023,62025,62027],{"class":323,"line":2822},[321,62020,54930],{"class":380},[321,62022,51582],{"class":331},[321,62024,1283],{"class":380},[321,62026,51637],{"class":327},[321,62028,1497],{"class":331},[321,62030,62031],{"class":323,"line":2827},[321,62032,2393],{"class":331},[321,62034,62035],{"class":323,"line":8155},[321,62036,2606],{"emptyLinePlaceholder":251},[321,62038,62039,62041,62043,62046],{"class":323,"line":8179},[321,62040,61749],{"class":2169},[321,62042,61918],{"class":51445},[321,62044,62045],{"class":2169},":focus",[321,62047,15779],{"class":331},[321,62049,62050,62052,62054,62057],{"class":323,"line":8184},[321,62051,61936],{"class":380},[321,62053,51582],{"class":331},[321,62055,62056],{"class":380},"#e4e4e4",[321,62058,1497],{"class":331},[321,62060,62061,62063,62065,62067],{"class":323,"line":8190},[321,62062,61866],{"class":380},[321,62064,51582],{"class":331},[321,62066,60987],{"class":380},[321,62068,1497],{"class":331},[321,62070,62071,62073,62075,62077,62079],{"class":323,"line":8217},[321,62072,54930],{"class":380},[321,62074,51582],{"class":331},[321,62076,988],{"class":380},[321,62078,51637],{"class":327},[321,62080,1497],{"class":331},[321,62082,62083],{"class":323,"line":8222},[321,62084,2393],{"class":331},[321,62086,62087],{"class":323,"line":8228},[321,62088,2606],{"emptyLinePlaceholder":251},[321,62090,62091,62093,62095],{"class":323,"line":8240},[321,62092,61749],{"class":2169},[321,62094,57612],{"class":51445},[321,62096,15779],{"class":331},[321,62098,62099,62101,62103,62106],{"class":323,"line":8252},[321,62100,61866],{"class":380},[321,62102,51582],{"class":331},[321,62104,62105],{"class":380},"#00aeec",[321,62107,1497],{"class":331},[321,62109,62110,62112,62114,62116],{"class":323,"line":8264},[321,62111,57561],{"class":380},[321,62113,51582],{"class":331},[321,62115,60987],{"class":380},[321,62117,1497],{"class":331},[321,62119,62120,62123,62125,62127],{"class":323,"line":9923},[321,62121,62122],{"class":380},"      border",[321,62124,51582],{"class":331},[321,62126,54882],{"class":380},[321,62128,1497],{"class":331},[321,62130,62131,62133,62135,62137,62139],{"class":323,"line":9948},[321,62132,55279],{"class":380},[321,62134,51582],{"class":331},[321,62136,625],{"class":380},[321,62138,51637],{"class":327},[321,62140,1497],{"class":331},[321,62142,62143,62146,62148,62150,62152],{"class":323,"line":9971},[321,62144,62145],{"class":380},"      margin-left",[321,62147,51582],{"class":331},[321,62149,778],{"class":380},[321,62151,51637],{"class":327},[321,62153,1497],{"class":331},[321,62155,62156,62158,62160,62162,62164],{"class":323,"line":9995},[321,62157,54916],{"class":380},[321,62159,51582],{"class":331},[321,62161,688],{"class":380},[321,62163,51637],{"class":327},[321,62165,1497],{"class":331},[321,62167,62168,62171,62173,62176],{"class":323,"line":10000},[321,62169,62170],{"class":380},"      cursor",[321,62172,51582],{"class":331},[321,62174,62175],{"class":380},"pointer",[321,62177,1497],{"class":331},[321,62179,62180],{"class":323,"line":10005},[321,62181,2393],{"class":331},[321,62183,62184],{"class":323,"line":10010},[321,62185,2606],{"emptyLinePlaceholder":251},[321,62187,62188,62190,62193],{"class":323,"line":10019},[321,62189,61749],{"class":2169},[321,62191,62192],{"class":2169}," .total",[321,62194,15779],{"class":331},[321,62196,62197,62199,62201,62203,62205],{"class":323,"line":10024},[321,62198,61895],{"class":380},[321,62200,51582],{"class":331},[321,62202,944],{"class":380},[321,62204,51637],{"class":327},[321,62206,1497],{"class":331},[321,62208,62209,62211,62213,62216],{"class":323,"line":10030},[321,62210,57561],{"class":380},[321,62212,51582],{"class":331},[321,62214,62215],{"class":380},"#999",[321,62217,1497],{"class":331},[321,62219,62220,62223,62225,62227,62229],{"class":323,"line":10051},[321,62221,62222],{"class":380},"      margin-top",[321,62224,51582],{"class":331},[321,62226,651],{"class":380},[321,62228,51637],{"class":327},[321,62230,1497],{"class":331},[321,62232,62233,62236,62238,62240],{"class":323,"line":10057},[321,62234,62235],{"class":380},"      opacity",[321,62237,51582],{"class":331},[321,62239,523],{"class":380},[321,62241,1497],{"class":331},[321,62243,62244,62246,62248,62250,62252,62254],{"class":323,"line":10071},[321,62245,62005],{"class":380},[321,62247,51582],{"class":331},[321,62249,28266],{"class":380},[321,62251,62012],{"class":380},[321,62253,1027],{"class":327},[321,62255,1497],{"class":331},[321,62257,62258],{"class":323,"line":10077},[321,62259,2393],{"class":331},[321,62261,62262],{"class":323,"line":10104},[321,62263,2606],{"emptyLinePlaceholder":251},[321,62265,62266,62269],{"class":323,"line":10113},[321,62267,62268],{"class":2169},"    .list",[321,62270,15779],{"class":331},[321,62272,62273,62275,62277,62279,62281],{"class":323,"line":10119},[321,62274,61756],{"class":380},[321,62276,51582],{"class":331},[321,62278,4193],{"class":380},[321,62280,51637],{"class":327},[321,62282,1497],{"class":331},[321,62284,62285,62287,62289,62291,62293],{"class":323,"line":10127},[321,62286,61769],{"class":380},[321,62288,51582],{"class":331},[321,62290,61774],{"class":380},[321,62292,51637],{"class":327},[321,62294,1497],{"class":331},[321,62296,62297,62299,62301,62303],{"class":323,"line":10132},[321,62298,55154],{"class":380},[321,62300,51582],{"class":331},[321,62302,51622],{"class":380},[321,62304,1497],{"class":331},[321,62306,62307],{"class":323,"line":16811},[321,62308,2393],{"class":331},[321,62310,62311],{"class":323,"line":16817},[321,62312,2606],{"emptyLinePlaceholder":251},[321,62314,62315,62317,62320],{"class":323,"line":16840},[321,62316,62268],{"class":2169},[321,62318,62319],{"class":2169}," .item",[321,62321,15779],{"class":331},[321,62323,62324,62326,62328,62330,62332],{"class":323,"line":16846},[321,62325,54916],{"class":380},[321,62327,51582],{"class":331},[321,62329,643],{"class":380},[321,62331,660],{"class":327},[321,62333,1497],{"class":331},[321,62335,62336,62338,62340,62342],{"class":323,"line":16869},[321,62337,55154],{"class":380},[321,62339,51582],{"class":331},[321,62341,51622],{"class":380},[321,62343,1497],{"class":331},[321,62345,62346],{"class":323,"line":16883},[321,62347,2393],{"class":331},[321,62349,62350],{"class":323,"line":16903},[321,62351,2606],{"emptyLinePlaceholder":251},[321,62353,62354,62356,62358,62361],{"class":323,"line":16909},[321,62355,62268],{"class":2169},[321,62357,62319],{"class":2169},[321,62359,62360],{"class":2169}," .info",[321,62362,15779],{"class":331},[321,62364,62365,62367,62369,62371],{"class":323,"line":16920},[321,62366,61982],{"class":380},[321,62368,51582],{"class":331},[321,62370,549],{"class":380},[321,62372,1497],{"class":331},[321,62374,62375,62378,62380,62382,62384,62387,62390],{"class":323,"line":16943},[321,62376,62377],{"class":380},"      border-bottom",[321,62379,51582],{"class":331},[321,62381,549],{"class":380},[321,62383,51637],{"class":327},[321,62385,62386],{"class":380}," dashed",[321,62388,62389],{"class":380}," #e4e4e4",[321,62391,1497],{"class":331},[321,62393,62394,62397,62399,62401,62403],{"class":323,"line":16965},[321,62395,62396],{"class":380},"      padding-bottom",[321,62398,51582],{"class":331},[321,62400,778],{"class":380},[321,62402,51637],{"class":327},[321,62404,1497],{"class":331},[321,62406,62407],{"class":323,"line":16970},[321,62408,2393],{"class":331},[321,62410,62411],{"class":323,"line":16976},[321,62412,2606],{"emptyLinePlaceholder":251},[321,62414,62415,62417,62419,62421],{"class":323,"line":16990},[321,62416,62268],{"class":2169},[321,62418,62319],{"class":2169},[321,62420,7032],{"class":51445},[321,62422,15779],{"class":331},[321,62424,62425,62427,62429,62431],{"class":323,"line":17003},[321,62426,54851],{"class":380},[321,62428,51582],{"class":331},[321,62430,523],{"class":380},[321,62432,1497],{"class":331},[321,62434,62435],{"class":323,"line":17008},[321,62436,2393],{"class":331},[321,62438,62439],{"class":323,"line":17022},[321,62440,2606],{"emptyLinePlaceholder":251},[321,62442,62443,62445,62447,62450],{"class":323,"line":17027},[321,62444,62268],{"class":2169},[321,62446,62319],{"class":2169},[321,62448,62449],{"class":2169}," .name",[321,62451,15779],{"class":331},[321,62453,62454,62456,62458,62461],{"class":323,"line":17033},[321,62455,57561],{"class":380},[321,62457,51582],{"class":331},[321,62459,62460],{"class":380},"#FB7299",[321,62462,1497],{"class":331},[321,62464,62465,62467,62469,62471,62473],{"class":323,"line":17038},[321,62466,55067],{"class":380},[321,62468,51582],{"class":331},[321,62470,881],{"class":380},[321,62472,51637],{"class":327},[321,62474,1497],{"class":331},[321,62476,62477,62480,62482,62485],{"class":323,"line":17052},[321,62478,62479],{"class":380},"      font-weight",[321,62481,51582],{"class":331},[321,62483,62484],{"class":380},"bold",[321,62486,1497],{"class":331},[321,62488,62489],{"class":323,"line":17057},[321,62490,2393],{"class":331},[321,62492,62493],{"class":323,"line":17062},[321,62494,2606],{"emptyLinePlaceholder":251},[321,62496,62497,62499,62501,62504],{"class":323,"line":17076},[321,62498,62268],{"class":2169},[321,62500,62319],{"class":2169},[321,62502,62503],{"class":2169}," .text",[321,62505,15779],{"class":331},[321,62507,62508,62510,62512,62515],{"class":323,"line":17088},[321,62509,57561],{"class":380},[321,62511,51582],{"class":331},[321,62513,62514],{"class":380},"#333",[321,62516,1497],{"class":331},[321,62518,62519,62521,62523,62525,62527,62529],{"class":323,"line":17093},[321,62520,54840],{"class":380},[321,62522,51582],{"class":331},[321,62524,778],{"class":380},[321,62526,51637],{"class":327},[321,62528,4299],{"class":380},[321,62530,1497],{"class":331},[321,62532,62533],{"class":323,"line":17106},[321,62534,2393],{"class":331},[321,62536,62537],{"class":323,"line":17111},[321,62538,2606],{"emptyLinePlaceholder":251},[321,62540,62541,62543,62545,62548],{"class":323,"line":17116},[321,62542,62268],{"class":2169},[321,62544,62319],{"class":2169},[321,62546,62547],{"class":2169}," .time",[321,62549,15779],{"class":331},[321,62551,62552,62554,62556,62558],{"class":323,"line":17121},[321,62553,57561],{"class":380},[321,62555,51582],{"class":331},[321,62557,62215],{"class":380},[321,62559,1497],{"class":331},[321,62561,62562,62564,62566,62568,62570],{"class":323,"line":17134},[321,62563,55067],{"class":380},[321,62565,51582],{"class":331},[321,62567,830],{"class":380},[321,62569,51637],{"class":327},[321,62571,1497],{"class":331},[321,62573,62574],{"class":323,"line":17139},[321,62575,2393],{"class":331},[321,62577,62578,62580,62582],{"class":323,"line":32778},[321,62579,52562],{"class":331},[321,62581,5333],{"class":51445},[321,62583,51452],{"class":331},[321,62585,62586,62588,62590],{"class":323,"line":32784},[321,62587,51930],{"class":331},[321,62589,51479],{"class":51445},[321,62591,51452],{"class":331},[321,62593,62594],{"class":323,"line":32790},[321,62595,2606],{"emptyLinePlaceholder":251},[321,62597,62598,62600,62602],{"class":323,"line":32796},[321,62599,1242],{"class":331},[321,62601,51945],{"class":51445},[321,62603,51452],{"class":331},[321,62605,62606,62608,62610,62612,62614,62617],{"class":323,"line":32802},[321,62607,52289],{"class":331},[321,62609,51756],{"class":51445},[321,62611,53631],{"class":2169},[321,62613,377],{"class":331},[321,62615,62616],{"class":436},"\"wrapper\"",[321,62618,51452],{"class":331},[321,62620,62621,62623,62625,62627,62629,62632,62634,62636],{"class":323,"line":32813},[321,62622,51486],{"class":331},[321,62624,773],{"class":51445},[321,62626,53631],{"class":2169},[321,62628,377],{"class":331},[321,62630,62631],{"class":436},"\"avatar\"",[321,62633,55459],{"class":331},[321,62635,773],{"class":51445},[321,62637,51452],{"class":331},[321,62639,62640,62642,62644,62646,62648,62651,62653,62655,62658,62660,62662,62664,62667,62669,62672,62674,62676],{"class":323,"line":32819},[321,62641,51486],{"class":331},[321,62643,54433],{"class":51445},[321,62645,15166],{"class":2169},[321,62647,377],{"class":331},[321,62649,62650],{"class":436},"\"tx\"",[321,62652,61165],{"class":2169},[321,62654,377],{"class":331},[321,62656,62657],{"class":436},"\"发一条友善的评论\"",[321,62659,54456],{"class":2169},[321,62661,377],{"class":331},[321,62663,3907],{"class":436},[321,62665,62666],{"class":2169}," maxlength",[321,62668,377],{"class":331},[321,62670,62671],{"class":436},"\"200\"",[321,62673,55459],{"class":331},[321,62675,54433],{"class":51445},[321,62677,51452],{"class":331},[321,62679,62680,62682,62684,62687,62689],{"class":323,"line":32839},[321,62681,51486],{"class":331},[321,62683,54032],{"class":51445},[321,62685,62686],{"class":331},">发布\u003C\u002F",[321,62688,54032],{"class":51445},[321,62690,51452],{"class":331},[321,62692,62693,62695,62697],{"class":323,"line":32845},[321,62694,52562],{"class":331},[321,62696,51756],{"class":51445},[321,62698,51452],{"class":331},[321,62700,62701,62703,62705,62707,62709,62711],{"class":323,"line":32856},[321,62702,52289],{"class":331},[321,62704,51756],{"class":51445},[321,62706,53631],{"class":2169},[321,62708,377],{"class":331},[321,62710,62616],{"class":436},[321,62712,51452],{"class":331},[321,62714,62715,62717,62719,62721,62723,62726,62729,62731],{"class":323,"line":32862},[321,62716,51486],{"class":331},[321,62718,321],{"class":51445},[321,62720,53631],{"class":2169},[321,62722,377],{"class":331},[321,62724,62725],{"class":436},"\"total\"",[321,62727,62728],{"class":331},">0\u002F200字\u003C\u002F",[321,62730,321],{"class":51445},[321,62732,51452],{"class":331},[321,62734,62735,62737,62739],{"class":323,"line":32868},[321,62736,52562],{"class":331},[321,62738,51756],{"class":51445},[321,62740,51452],{"class":331},[321,62742,62743,62745,62747,62749,62751,62754],{"class":323,"line":32874},[321,62744,52289],{"class":331},[321,62746,51756],{"class":51445},[321,62748,53631],{"class":2169},[321,62750,377],{"class":331},[321,62752,62753],{"class":436},"\"list\"",[321,62755,51452],{"class":331},[321,62757,62758,62760,62762,62764,62766,62769,62772,62774,62777],{"class":323,"line":32880},[321,62759,51486],{"class":331},[321,62761,51756],{"class":51445},[321,62763,53631],{"class":2169},[321,62765,377],{"class":331},[321,62767,62768],{"class":436},"\"item\"",[321,62770,62771],{"class":2169}," style",[321,62773,377],{"class":331},[321,62775,62776],{"class":436},"\"display: none;\"",[321,62778,51452],{"class":331},[321,62780,62781,62783,62785,62787,62789,62791,62793,62795],{"class":323,"line":32886},[321,62782,55379],{"class":331},[321,62784,773],{"class":51445},[321,62786,53631],{"class":2169},[321,62788,377],{"class":331},[321,62790,62631],{"class":436},[321,62792,55459],{"class":331},[321,62794,773],{"class":51445},[321,62796,51452],{"class":331},[321,62798,62799,62801,62803,62805,62807,62810],{"class":323,"line":32892},[321,62800,55379],{"class":331},[321,62802,51756],{"class":51445},[321,62804,53631],{"class":2169},[321,62806,377],{"class":331},[321,62808,62809],{"class":436},"\"info\"",[321,62811,51452],{"class":331},[321,62813,62814,62816,62818,62820,62822,62825,62828,62830],{"class":323,"line":32898},[321,62815,55447],{"class":331},[321,62817,19],{"class":51445},[321,62819,53631],{"class":2169},[321,62821,377],{"class":331},[321,62823,62824],{"class":436},"\"name\"",[321,62826,62827],{"class":331},">清风徐来\u003C\u002F",[321,62829,19],{"class":51445},[321,62831,51452],{"class":331},[321,62833,62834,62836,62838,62840,62842,62845,62848,62850],{"class":323,"line":32918},[321,62835,55447],{"class":331},[321,62837,19],{"class":51445},[321,62839,53631],{"class":2169},[321,62841,377],{"class":331},[321,62843,62844],{"class":436},"\"text\"",[321,62846,62847],{"class":331},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[321,62849,19],{"class":51445},[321,62851,51452],{"class":331},[321,62853,62854,62856,62858,62860,62862,62865,62868,62870],{"class":323,"line":32924},[321,62855,55447],{"class":331},[321,62857,19],{"class":51445},[321,62859,53631],{"class":2169},[321,62861,377],{"class":331},[321,62863,62864],{"class":436},"\"time\"",[321,62866,62867],{"class":331},">2022-10-10 20:29:21\u003C\u002F",[321,62869,19],{"class":51445},[321,62871,51452],{"class":331},[321,62873,62874,62876,62878],{"class":323,"line":32940},[321,62875,55552],{"class":331},[321,62877,51756],{"class":51445},[321,62879,51452],{"class":331},[321,62881,62882,62884,62886],{"class":323,"line":32946},[321,62883,51921],{"class":331},[321,62885,51756],{"class":51445},[321,62887,51452],{"class":331},[321,62889,62890,62892,62894],{"class":323,"line":32960},[321,62891,52562],{"class":331},[321,62893,51756],{"class":51445},[321,62895,51452],{"class":331},[321,62897,62898,62900,62902],{"class":323,"line":32966},[321,62899,52289],{"class":331},[321,62901,51958],{"class":51445},[321,62903,51452],{"class":331},[321,62905,62906,62908,62911,62913,62915,62917,62919,62922],{"class":323,"line":32981},[321,62907,11428],{"class":327},[321,62909,62910],{"class":380}," tx",[321,62912,13771],{"class":327},[321,62914,54541],{"class":331},[321,62916,54544],{"class":2169},[321,62918,332],{"class":331},[321,62920,62921],{"class":436},"'#tx'",[321,62923,338],{"class":331},[321,62925,62926,62928,62931,62933,62935,62937,62939,62942],{"class":323,"line":32987},[321,62927,11428],{"class":327},[321,62929,62930],{"class":380}," total",[321,62932,13771],{"class":327},[321,62934,54541],{"class":331},[321,62936,54544],{"class":2169},[321,62938,332],{"class":331},[321,62940,62941],{"class":436},"'.total'",[321,62943,338],{"class":331},[321,62945,62946],{"class":323,"line":32996},[321,62947,62948],{"class":390},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[321,62950,62951,62954,62956,62958,62960,62962,62964],{"class":323,"line":33002},[321,62952,62953],{"class":331},"    tx.",[321,62955,57958],{"class":2169},[321,62957,332],{"class":331},[321,62959,61472],{"class":436},[321,62961,12642],{"class":331},[321,62963,54594],{"class":327},[321,62965,54597],{"class":331},[321,62967,62968,62971,62973],{"class":323,"line":33011},[321,62969,62970],{"class":331},"      total.style.opacity ",[321,62972,377],{"class":327},[321,62974,55844],{"class":380},[321,62976,62977],{"class":323,"line":33017},[321,62978,33606],{"class":331},[321,62980,62981],{"class":323,"line":33023},[321,62982,62983],{"class":390},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[321,62985,62986,62988,62990,62992,62994,62996,62998],{"class":323,"line":33032},[321,62987,62953],{"class":331},[321,62989,57958],{"class":2169},[321,62991,332],{"class":331},[321,62993,61533],{"class":436},[321,62995,12642],{"class":331},[321,62997,54594],{"class":327},[321,62999,54597],{"class":331},[321,63001,63002,63004,63006],{"class":323,"line":33038},[321,63003,62970],{"class":331},[321,63005,377],{"class":327},[321,63007,47478],{"class":380},[321,63009,63010],{"class":323,"line":33049},[321,63011,33606],{"class":331},[321,63013,63014],{"class":323,"line":33055},[321,63015,63016],{"class":390},"    \u002F\u002F 3. 检测用户输入\n",[321,63018,63019,63021,63023,63025,63028,63030,63032],{"class":323,"line":33074},[321,63020,62953],{"class":331},[321,63022,57958],{"class":2169},[321,63024,332],{"class":331},[321,63026,63027],{"class":436},"'input'",[321,63029,12642],{"class":331},[321,63031,54594],{"class":327},[321,63033,54597],{"class":331},[321,63035,63036],{"class":323,"line":33080},[321,63037,63038],{"class":390},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[321,63040,63041,63044,63046,63049,63052,63054,63057,63059,63061],{"class":323,"line":33091},[321,63042,63043],{"class":331},"      total.innerHTML ",[321,63045,377],{"class":327},[321,63047,63048],{"class":436}," `${",[321,63050,63051],{"class":331},"tx",[321,63053,890],{"class":436},[321,63055,63056],{"class":331},"value",[321,63058,890],{"class":436},[321,63060,52113],{"class":380},[321,63062,63063],{"class":436},"}\u002F200字`\n",[321,63065,63066],{"class":323,"line":33097},[321,63067,33606],{"class":331},[321,63069,63070],{"class":323,"line":33117},[321,63071,2606],{"emptyLinePlaceholder":251},[321,63073,63074],{"class":323,"line":33133},[321,63075,63076],{"class":390},"    \u002F\u002F const str = 'andy'\n",[321,63078,63079],{"class":323,"line":33139},[321,63080,63081],{"class":390},"    \u002F\u002F console.log(str.length)\n",[321,63083,63084,63086,63088],{"class":323,"line":33153},[321,63085,52562],{"class":331},[321,63087,51958],{"class":51445},[321,63089,51452],{"class":331},[321,63091,63092,63094,63096],{"class":323,"line":33159},[321,63093,51930],{"class":331},[321,63095,51945],{"class":51445},[321,63097,51452],{"class":331},[321,63099,63100],{"class":323,"line":33165},[321,63101,2606],{"emptyLinePlaceholder":251},[321,63103,63104,63106,63108],{"class":323,"line":33176},[321,63105,51930],{"class":331},[321,63107,50780],{"class":51445},[321,63109,51452],{"class":331},[22205,63111,63113],{"id":63112},"_3254-change事件","3.2.5.4 change事件",[19,63115,63116],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63118,63119],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63121,63122],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[312,63124,63126],{"className":50778,"code":63125,"language":50780,"meta":30,"style":30},"\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",[318,63127,63128,63138,63152,63156,63164,63178,63198,63210,63218,63222,63230,63244,63252,63270,63288,63300,63304,63312,63320,63324],{"__ignoreMap":30},[321,63129,63130,63132,63134,63136],{"class":323,"line":324},[321,63131,51442],{"class":331},[321,63133,51446],{"class":51445},[321,63135,51449],{"class":2169},[321,63137,51452],{"class":331},[321,63139,63140,63142,63144,63146,63148,63150],{"class":323,"line":167},[321,63141,1242],{"class":331},[321,63143,50780],{"class":51445},[321,63145,51461],{"class":2169},[321,63147,377],{"class":331},[321,63149,51466],{"class":436},[321,63151,51452],{"class":331},[321,63153,63154],{"class":323,"line":200},[321,63155,2606],{"emptyLinePlaceholder":251},[321,63157,63158,63160,63162],{"class":323,"line":1401},[321,63159,1242],{"class":331},[321,63161,51479],{"class":51445},[321,63163,51452],{"class":331},[321,63165,63166,63168,63170,63172,63174,63176],{"class":323,"line":1407},[321,63167,52289],{"class":331},[321,63169,51489],{"class":51445},[321,63171,51492],{"class":2169},[321,63173,377],{"class":331},[321,63175,51497],{"class":436},[321,63177,51452],{"class":331},[321,63179,63180,63182,63184,63186,63188,63190,63192,63194,63196],{"class":323,"line":1421},[321,63181,52289],{"class":331},[321,63183,51489],{"class":51445},[321,63185,15127],{"class":2169},[321,63187,377],{"class":331},[321,63189,51536],{"class":436},[321,63191,51516],{"class":2169},[321,63193,377],{"class":331},[321,63195,51543],{"class":436},[321,63197,51452],{"class":331},[321,63199,63200,63202,63204,63206,63208],{"class":323,"line":1427},[321,63201,52289],{"class":331},[321,63203,51552],{"class":51445},[321,63205,51555],{"class":331},[321,63207,51552],{"class":51445},[321,63209,51452],{"class":331},[321,63211,63212,63214,63216],{"class":323,"line":1518},[321,63213,51930],{"class":331},[321,63215,51479],{"class":51445},[321,63217,51452],{"class":331},[321,63219,63220],{"class":323,"line":1524},[321,63221,2606],{"emptyLinePlaceholder":251},[321,63223,63224,63226,63228],{"class":323,"line":1536},[321,63225,1242],{"class":331},[321,63227,51945],{"class":51445},[321,63229,51452],{"class":331},[321,63231,63232,63234,63236,63238,63240,63242],{"class":323,"line":1818},[321,63233,52289],{"class":331},[321,63235,53966],{"class":51445},[321,63237,53969],{"class":2169},[321,63239,377],{"class":331},[321,63241,62844],{"class":436},[321,63243,51452],{"class":331},[321,63245,63246,63248,63250],{"class":323,"line":1823},[321,63247,52289],{"class":331},[321,63249,51958],{"class":51445},[321,63251,51452],{"class":331},[321,63253,63254,63256,63258,63260,63262,63264,63266,63268],{"class":323,"line":1829},[321,63255,11428],{"class":327},[321,63257,60750],{"class":380},[321,63259,13771],{"class":327},[321,63261,54541],{"class":331},[321,63263,54544],{"class":2169},[321,63265,332],{"class":331},[321,63267,63027],{"class":436},[321,63269,338],{"class":331},[321,63271,63272,63275,63277,63279,63282,63284,63286],{"class":323,"line":1834},[321,63273,63274],{"class":331},"    input.",[321,63276,57958],{"class":2169},[321,63278,332],{"class":331},[321,63280,63281],{"class":436},"'change'",[321,63283,12642],{"class":331},[321,63285,54594],{"class":327},[321,63287,54597],{"class":331},[321,63289,63290,63292,63294,63296,63298],{"class":323,"line":1848},[321,63291,58389],{"class":331},[321,63293,58392],{"class":2169},[321,63295,332],{"class":331},[321,63297,925],{"class":380},[321,63299,338],{"class":331},[321,63301,63302],{"class":323,"line":1853},[321,63303,33606],{"class":331},[321,63305,63306,63308,63310],{"class":323,"line":1859},[321,63307,52562],{"class":331},[321,63309,51958],{"class":51445},[321,63311,51452],{"class":331},[321,63313,63314,63316,63318],{"class":323,"line":1880},[321,63315,51930],{"class":331},[321,63317,51945],{"class":51445},[321,63319,51452],{"class":331},[321,63321,63322],{"class":323,"line":1885},[321,63323,2606],{"emptyLinePlaceholder":251},[321,63325,63326,63328,63330],{"class":323,"line":1899},[321,63327,51930],{"class":331},[321,63329,50780],{"class":51445},[321,63331,51452],{"class":331},[19,63333,63334],{},"总结：内容发生改变才回去触发",[292,63336,63338],{"id":63337},"_326-事件对象","3.2.6 事件对象",[22205,63340,63342],{"id":63341},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63344,63345],{},[28,63346],{"alt":30,"src":63347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63349,63350],{},[28,63351],{"alt":30,"src":63352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63354,63355],{},"点击一次，就输出了事件对象，它是个对象",[19,63357,63358],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63360,63361],{},[28,63362],{"alt":30,"src":63363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22205,63365,63367],{"id":63366},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63369,63370],{},[28,63371],{"alt":30,"src":63372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63374,63375],{},"实现按特殊字符才是实现打印输出效果：",[312,63377,63379],{"className":53212,"code":63378,"language":53214,"meta":30,"style":30},"\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",[318,63380,63381,63389,63394,63408,63416,63421,63426,63431,63436,63441,63446,63451,63456,63461,63465,63469,63477],{"__ignoreMap":30},[321,63382,63383,63385,63387],{"class":323,"line":324},[321,63384,1242],{"class":331},[321,63386,51945],{"class":51445},[321,63388,51452],{"class":331},[321,63390,63391],{"class":323,"line":167},[321,63392,63393],{"class":390},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[321,63395,63396,63398,63400,63402,63404,63406],{"class":323,"line":200},[321,63397,52289],{"class":331},[321,63399,53966],{"class":51445},[321,63401,53969],{"class":2169},[321,63403,377],{"class":331},[321,63405,62844],{"class":436},[321,63407,51452],{"class":331},[321,63409,63410,63412,63414],{"class":323,"line":1401},[321,63411,52289],{"class":331},[321,63413,51958],{"class":51445},[321,63415,51452],{"class":331},[321,63417,63418],{"class":323,"line":1407},[321,63419,63420],{"class":331},"    \u002F\u002F const btn = document.querySelector('button')\n",[321,63422,63423],{"class":323,"line":1421},[321,63424,63425],{"class":331},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[321,63427,63428],{"class":323,"line":1427},[321,63429,63430],{"class":331},"    \u002F\u002F   console.log(e);\n",[321,63432,63433],{"class":323,"line":1518},[321,63434,63435],{"class":331},"    \u002F\u002F })\n",[321,63437,63438],{"class":323,"line":1524},[321,63439,63440],{"class":331},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[321,63442,63443],{"class":323,"line":1536},[321,63444,63445],{"class":331},"    const input = document.querySelector('input')\n",[321,63447,63448],{"class":323,"line":1818},[321,63449,63450],{"class":331},"    input.addEventListener('keyup', function (e) {\n",[321,63452,63453],{"class":323,"line":1823},[321,63454,63455],{"class":331},"      if (e.key === 'Enter') {\n",[321,63457,63458],{"class":323,"line":1829},[321,63459,63460],{"class":331},"        console.log('我按下了回车键')\n",[321,63462,63463],{"class":323,"line":1834},[321,63464,52543],{"class":331},[321,63466,63467],{"class":323,"line":1848},[321,63468,33606],{"class":331},[321,63470,63471,63473,63475],{"class":323,"line":1853},[321,63472,52562],{"class":331},[321,63474,51958],{"class":51445},[321,63476,51452],{"class":331},[321,63478,63479,63481,63483],{"class":323,"line":1859},[321,63480,51930],{"class":331},[321,63482,51945],{"class":51445},[321,63484,51452],{"class":331},[22205,63486,63488],{"id":63487},"_3263-trim方法","3.2.6.3 trim方法",[19,63490,63491],{},[28,63492],{"alt":30,"src":63493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63495,63496],{},[28,63497],{"alt":30,"src":63498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63500,63501],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63503,63504],{},"str.trim()",[292,63506,63508],{"id":63507},"_327-环境对象","3.2.7 环境对象",[19,63510,63511],{},[28,63512],{"alt":30,"src":63513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63515,63516],{},[28,63517],{"alt":30,"src":63518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63520,63521],{},[28,63522],{"alt":30,"src":63523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63525,63526],{},"实际函数调用是window.fn()",[19,63528,63529],{},"普通函数里面this指向的是window",[1339,63531,63532,63535,63538],{},[154,63533,63534],{},"在普通函数下，this指向的是window",[154,63536,63537],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[154,63539,63540],{},"箭头函数没有this",[19,63542,63543],{},"粗略记法就是：谁调用，this就指向谁",[19,63545,63546],{},[28,63547],{"alt":30,"src":63548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63550,63551],{},[28,63552],{"alt":30,"src":63553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63555,63556],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63558,63559],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[312,63561,63563],{"className":53212,"code":63562,"language":53214,"meta":30,"style":30},"\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",[318,63564,63565,63573,63585,63593,63598,63603,63608,63613,63617,63625],{"__ignoreMap":30},[321,63566,63567,63569,63571],{"class":323,"line":324},[321,63568,1242],{"class":331},[321,63570,51945],{"class":51445},[321,63572,51452],{"class":331},[321,63574,63575,63577,63579,63581,63583],{"class":323,"line":167},[321,63576,52289],{"class":331},[321,63578,54032],{"class":51445},[321,63580,54038],{"class":331},[321,63582,54032],{"class":51445},[321,63584,51452],{"class":331},[321,63586,63587,63589,63591],{"class":323,"line":200},[321,63588,52289],{"class":331},[321,63590,51958],{"class":51445},[321,63592,51452],{"class":331},[321,63594,63595],{"class":323,"line":1401},[321,63596,63597],{"class":331},"    const button = document.querySelector('button')\n",[321,63599,63600],{"class":323,"line":1407},[321,63601,63602],{"class":331},"    button.addEventListener('click', function () {\n",[321,63604,63605],{"class":323,"line":1421},[321,63606,63607],{"class":331},"      \u002F\u002F console.log(this);\n",[321,63609,63610],{"class":323,"line":1427},[321,63611,63612],{"class":331},"      this.style.color = 'pink'\n",[321,63614,63615],{"class":323,"line":1518},[321,63616,33606],{"class":331},[321,63618,63619,63621,63623],{"class":323,"line":1524},[321,63620,52562],{"class":331},[321,63622,51958],{"class":51445},[321,63624,51452],{"class":331},[321,63626,63627,63629,63631],{"class":323,"line":1536},[321,63628,51930],{"class":331},[321,63630,51945],{"class":51445},[321,63632,51452],{"class":331},[292,63634,63636],{"id":63635},"_328-回调函数","3.2.8 回调函数",[19,63638,63639],{},[28,63640],{"alt":30,"src":63641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63643,63644],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63646,11539],{},[1339,63648,63649,63652,63655],{},[154,63650,63651],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[154,63653,63654],{},"回调函数本质还是函数，只不过把它当成参数使用",[154,63656,63657],{},"使用匿名函数做为回调函数比较常见",[292,63659,63661],{"id":63660},"_329-tab栏切换","3.2.9 tab栏切换",[19,63663,63664],{},[28,63665],{"alt":30,"src":63666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[312,63668,63670],{"className":50778,"code":63669,"language":50780,"meta":30,"style":30},"\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",[318,63671,63672,63682,63696,63700,63708,63722,63742,63762,63775,63783,63789,63799,63809,63813,63817,63824,63837,63850,63862,63878,63882,63886,63893,63905,63917,63929,63939,63949,63953,63957,63966,63978,63989,64001,64005,64009,64017,64027,64037,64047,64051,64055,64065,64079,64091,64095,64099,64111,64122,64139,64149,64153,64157,64172,64183,64193,64197,64201,64208,64223,64227,64231,64239,64249,64253,64257,64266,64276,64280,64288,64296,64300,64308,64323,64338,64351,64359,64393,64420,64447,64474,64501,64509,64517,64532,64569,64604,64639,64674,64709,64717,64725,64733,64738,64743,64763,64768,64797,64802,64807,64825,64830,64835,64840,64862,64867,64883,64887,64892,64897,64918,64923,64952,64956,64961,64965,64973,64981,64985],{"__ignoreMap":30},[321,63673,63674,63676,63678,63680],{"class":323,"line":324},[321,63675,51442],{"class":331},[321,63677,51446],{"class":51445},[321,63679,51449],{"class":2169},[321,63681,51452],{"class":331},[321,63683,63684,63686,63688,63690,63692,63694],{"class":323,"line":167},[321,63685,1242],{"class":331},[321,63687,50780],{"class":51445},[321,63689,51461],{"class":2169},[321,63691,377],{"class":331},[321,63693,51466],{"class":436},[321,63695,51452],{"class":331},[321,63697,63698],{"class":323,"line":200},[321,63699,2606],{"emptyLinePlaceholder":251},[321,63701,63702,63704,63706],{"class":323,"line":1401},[321,63703,1242],{"class":331},[321,63705,51479],{"class":51445},[321,63707,51452],{"class":331},[321,63709,63710,63712,63714,63716,63718,63720],{"class":323,"line":1407},[321,63711,52289],{"class":331},[321,63713,51489],{"class":51445},[321,63715,51492],{"class":2169},[321,63717,377],{"class":331},[321,63719,51497],{"class":436},[321,63721,59272],{"class":331},[321,63723,63724,63726,63728,63730,63732,63734,63736,63738,63740],{"class":323,"line":1421},[321,63725,52289],{"class":331},[321,63727,51489],{"class":51445},[321,63729,51508],{"class":2169},[321,63731,377],{"class":331},[321,63733,51513],{"class":436},[321,63735,51516],{"class":2169},[321,63737,377],{"class":331},[321,63739,51521],{"class":436},[321,63741,59272],{"class":331},[321,63743,63744,63746,63748,63750,63752,63754,63756,63758,63760],{"class":323,"line":1427},[321,63745,52289],{"class":331},[321,63747,51489],{"class":51445},[321,63749,15127],{"class":2169},[321,63751,377],{"class":331},[321,63753,51536],{"class":436},[321,63755,51516],{"class":2169},[321,63757,377],{"class":331},[321,63759,51543],{"class":436},[321,63761,59272],{"class":331},[321,63763,63764,63766,63768,63771,63773],{"class":323,"line":1518},[321,63765,52289],{"class":331},[321,63767,51552],{"class":51445},[321,63769,63770],{"class":331},">tab栏切换\u003C\u002F",[321,63772,51552],{"class":51445},[321,63774,51452],{"class":331},[321,63776,63777,63779,63781],{"class":323,"line":1524},[321,63778,52289],{"class":331},[321,63780,5333],{"class":51445},[321,63782,51452],{"class":331},[321,63784,63785,63787],{"class":323,"line":1536},[321,63786,6610],{"class":51445},[321,63788,15779],{"class":331},[321,63790,63791,63793,63795,63797],{"class":323,"line":1818},[321,63792,54851],{"class":380},[321,63794,51582],{"class":331},[321,63796,523],{"class":380},[321,63798,1497],{"class":331},[321,63800,63801,63803,63805,63807],{"class":323,"line":1823},[321,63802,54840],{"class":380},[321,63804,51582],{"class":331},[321,63806,523],{"class":380},[321,63808,1497],{"class":331},[321,63810,63811],{"class":323,"line":1829},[321,63812,2393],{"class":331},[321,63814,63815],{"class":323,"line":1834},[321,63816,2606],{"emptyLinePlaceholder":251},[321,63818,63819,63822],{"class":323,"line":1848},[321,63820,63821],{"class":2169},"    .tab",[321,63823,15779],{"class":331},[321,63825,63826,63828,63830,63833,63835],{"class":323,"line":1853},[321,63827,54916],{"class":380},[321,63829,51582],{"class":331},[321,63831,63832],{"class":380},"590",[321,63834,51637],{"class":327},[321,63836,1497],{"class":331},[321,63838,63839,63841,63843,63846,63848],{"class":323,"line":1859},[321,63840,54930],{"class":380},[321,63842,51582],{"class":331},[321,63844,63845],{"class":380},"340",[321,63847,51637],{"class":327},[321,63849,1497],{"class":331},[321,63851,63852,63854,63856,63858,63860],{"class":323,"line":1880},[321,63853,54851],{"class":380},[321,63855,51582],{"class":331},[321,63857,1032],{"class":380},[321,63859,51637],{"class":327},[321,63861,1497],{"class":331},[321,63863,63864,63866,63868,63870,63872,63874,63876],{"class":323,"line":1885},[321,63865,62122],{"class":380},[321,63867,51582],{"class":331},[321,63869,549],{"class":380},[321,63871,51637],{"class":327},[321,63873,51666],{"class":380},[321,63875,62389],{"class":380},[321,63877,1497],{"class":331},[321,63879,63880],{"class":323,"line":1899},[321,63881,2393],{"class":331},[321,63883,63884],{"class":323,"line":1904},[321,63885,2606],{"emptyLinePlaceholder":251},[321,63887,63888,63891],{"class":323,"line":1933},[321,63889,63890],{"class":2169},"    .tab-nav",[321,63892,15779],{"class":331},[321,63894,63895,63897,63899,63901,63903],{"class":323,"line":1938},[321,63896,54916],{"class":380},[321,63898,51582],{"class":331},[321,63900,643],{"class":380},[321,63902,660],{"class":327},[321,63904,1497],{"class":331},[321,63906,63907,63909,63911,63913,63915],{"class":323,"line":1955},[321,63908,54930],{"class":380},[321,63910,51582],{"class":331},[321,63912,1239],{"class":380},[321,63914,51637],{"class":327},[321,63916,1497],{"class":331},[321,63918,63919,63921,63923,63925,63927],{"class":323,"line":1960},[321,63920,57504],{"class":380},[321,63922,51582],{"class":331},[321,63924,1239],{"class":380},[321,63926,51637],{"class":327},[321,63928,1497],{"class":331},[321,63930,63931,63933,63935,63937],{"class":323,"line":1965},[321,63932,55154],{"class":380},[321,63934,51582],{"class":331},[321,63936,51622],{"class":380},[321,63938,1497],{"class":331},[321,63940,63941,63943,63945,63947],{"class":323,"line":1970},[321,63942,55165],{"class":380},[321,63944,51582],{"class":331},[321,63946,51813],{"class":380},[321,63948,1497],{"class":331},[321,63950,63951],{"class":323,"line":1984},[321,63952,2393],{"class":331},[321,63954,63955],{"class":323,"line":1989},[321,63956,2606],{"emptyLinePlaceholder":251},[321,63958,63959,63961,63964],{"class":323,"line":2783},[321,63960,63890],{"class":2169},[321,63962,63963],{"class":51445}," h3",[321,63965,15779],{"class":331},[321,63967,63968,63970,63972,63974,63976],{"class":323,"line":2797},[321,63969,55067],{"class":380},[321,63971,51582],{"class":331},[321,63973,1132],{"class":380},[321,63975,51637],{"class":327},[321,63977,1497],{"class":331},[321,63979,63980,63982,63984,63987],{"class":323,"line":2805},[321,63981,62479],{"class":380},[321,63983,51582],{"class":331},[321,63985,63986],{"class":380},"normal",[321,63988,1497],{"class":331},[321,63990,63991,63993,63995,63997,63999],{"class":323,"line":2810},[321,63992,62145],{"class":380},[321,63994,51582],{"class":331},[321,63996,1032],{"class":380},[321,63998,51637],{"class":327},[321,64000,1497],{"class":331},[321,64002,64003],{"class":323,"line":2816},[321,64004,2393],{"class":331},[321,64006,64007],{"class":323,"line":2822},[321,64008,2606],{"emptyLinePlaceholder":251},[321,64010,64011,64013,64015],{"class":323,"line":2827},[321,64012,63890],{"class":2169},[321,64014,61437],{"class":51445},[321,64016,15779],{"class":331},[321,64018,64019,64021,64023,64025],{"class":323,"line":8155},[321,64020,54877],{"class":380},[321,64022,51582],{"class":331},[321,64024,54882],{"class":380},[321,64026,1497],{"class":331},[321,64028,64029,64031,64033,64035],{"class":323,"line":8179},[321,64030,55154],{"class":380},[321,64032,51582],{"class":331},[321,64034,51622],{"class":380},[321,64036,1497],{"class":331},[321,64038,64039,64041,64043,64045],{"class":323,"line":8184},[321,64040,55165],{"class":380},[321,64042,51582],{"class":331},[321,64044,51725],{"class":380},[321,64046,1497],{"class":331},[321,64048,64049],{"class":323,"line":8190},[321,64050,2393],{"class":331},[321,64052,64053],{"class":323,"line":8217},[321,64054,2606],{"emptyLinePlaceholder":251},[321,64056,64057,64059,64061,64063],{"class":323,"line":8222},[321,64058,63890],{"class":2169},[321,64060,61437],{"class":51445},[321,64062,55220],{"class":51445},[321,64064,15779],{"class":331},[321,64066,64067,64069,64071,64073,64075,64077],{"class":323,"line":8228},[321,64068,54851],{"class":380},[321,64070,51582],{"class":331},[321,64072,523],{"class":380},[321,64074,9157],{"class":380},[321,64076,51637],{"class":327},[321,64078,1497],{"class":331},[321,64080,64081,64083,64085,64087,64089],{"class":323,"line":8240},[321,64082,55067],{"class":380},[321,64084,51582],{"class":331},[321,64086,881],{"class":380},[321,64088,51637],{"class":327},[321,64090,1497],{"class":331},[321,64092,64093],{"class":323,"line":8252},[321,64094,2393],{"class":331},[321,64096,64097],{"class":323,"line":8264},[321,64098,2606],{"emptyLinePlaceholder":251},[321,64100,64101,64103,64105,64107,64109],{"class":323,"line":9923},[321,64102,63890],{"class":2169},[321,64104,61437],{"class":51445},[321,64106,55220],{"class":51445},[321,64108,1605],{"class":51445},[321,64110,15779],{"class":331},[321,64112,64113,64116,64118,64120],{"class":323,"line":9948},[321,64114,64115],{"class":380},"      text-decoration",[321,64117,51582],{"class":331},[321,64119,54882],{"class":380},[321,64121,1497],{"class":331},[321,64123,64124,64126,64128,64130,64132,64134,64137],{"class":323,"line":9971},[321,64125,62377],{"class":380},[321,64127,51582],{"class":331},[321,64129,409],{"class":380},[321,64131,51637],{"class":327},[321,64133,51666],{"class":380},[321,64135,64136],{"class":380}," transparent",[321,64138,1497],{"class":331},[321,64140,64141,64143,64145,64147],{"class":323,"line":9995},[321,64142,57561],{"class":380},[321,64144,51582],{"class":331},[321,64146,62514],{"class":380},[321,64148,1497],{"class":331},[321,64150,64151],{"class":323,"line":10000},[321,64152,2393],{"class":331},[321,64154,64155],{"class":323,"line":10005},[321,64156,2606],{"emptyLinePlaceholder":251},[321,64158,64159,64161,64163,64165,64167,64170],{"class":323,"line":10010},[321,64160,63890],{"class":2169},[321,64162,61437],{"class":51445},[321,64164,55220],{"class":51445},[321,64166,1605],{"class":51445},[321,64168,64169],{"class":2169},".active",[321,64171,15779],{"class":331},[321,64173,64174,64176,64178,64181],{"class":323,"line":10019},[321,64175,61936],{"class":380},[321,64177,51582],{"class":331},[321,64179,64180],{"class":380},"#e1251b",[321,64182,1497],{"class":331},[321,64184,64185,64187,64189,64191],{"class":323,"line":10024},[321,64186,57561],{"class":380},[321,64188,51582],{"class":331},[321,64190,64180],{"class":380},[321,64192,1497],{"class":331},[321,64194,64195],{"class":323,"line":10030},[321,64196,2393],{"class":331},[321,64198,64199],{"class":323,"line":10051},[321,64200,2606],{"emptyLinePlaceholder":251},[321,64202,64203,64206],{"class":323,"line":10057},[321,64204,64205],{"class":2169},"    .tab-content",[321,64207,15779],{"class":331},[321,64209,64210,64212,64214,64216,64219,64221],{"class":323,"line":10071},[321,64211,54840],{"class":380},[321,64213,51582],{"class":331},[321,64215,523],{"class":380},[321,64217,64218],{"class":380}," 16",[321,64220,51637],{"class":327},[321,64222,1497],{"class":331},[321,64224,64225],{"class":323,"line":10077},[321,64226,2393],{"class":331},[321,64228,64229],{"class":323,"line":10104},[321,64230,2606],{"emptyLinePlaceholder":251},[321,64232,64233,64235,64237],{"class":323,"line":10113},[321,64234,64205],{"class":2169},[321,64236,62319],{"class":2169},[321,64238,15779],{"class":331},[321,64240,64241,64243,64245,64247],{"class":323,"line":10119},[321,64242,55154],{"class":380},[321,64244,51582],{"class":331},[321,64246,54882],{"class":380},[321,64248,1497],{"class":331},[321,64250,64251],{"class":323,"line":10127},[321,64252,2393],{"class":331},[321,64254,64255],{"class":323,"line":10132},[321,64256,2606],{"emptyLinePlaceholder":251},[321,64258,64259,64261,64264],{"class":323,"line":16811},[321,64260,64205],{"class":2169},[321,64262,64263],{"class":2169}," .item.active",[321,64265,15779],{"class":331},[321,64267,64268,64270,64272,64274],{"class":323,"line":16817},[321,64269,55154],{"class":380},[321,64271,51582],{"class":331},[321,64273,61014],{"class":380},[321,64275,1497],{"class":331},[321,64277,64278],{"class":323,"line":16840},[321,64279,2393],{"class":331},[321,64281,64282,64284,64286],{"class":323,"line":16846},[321,64283,52562],{"class":331},[321,64285,5333],{"class":51445},[321,64287,51452],{"class":331},[321,64289,64290,64292,64294],{"class":323,"line":16869},[321,64291,51930],{"class":331},[321,64293,51479],{"class":51445},[321,64295,51452],{"class":331},[321,64297,64298],{"class":323,"line":16883},[321,64299,2606],{"emptyLinePlaceholder":251},[321,64301,64302,64304,64306],{"class":323,"line":16903},[321,64303,1242],{"class":331},[321,64305,51945],{"class":51445},[321,64307,51452],{"class":331},[321,64309,64310,64312,64314,64316,64318,64321],{"class":323,"line":16909},[321,64311,52289],{"class":331},[321,64313,51756],{"class":51445},[321,64315,53631],{"class":2169},[321,64317,377],{"class":331},[321,64319,64320],{"class":436},"\"tab\"",[321,64322,51452],{"class":331},[321,64324,64325,64327,64329,64331,64333,64336],{"class":323,"line":16920},[321,64326,51486],{"class":331},[321,64328,51756],{"class":51445},[321,64330,53631],{"class":2169},[321,64332,377],{"class":331},[321,64334,64335],{"class":436},"\"tab-nav\"",[321,64337,51452],{"class":331},[321,64339,64340,64342,64344,64347,64349],{"class":323,"line":16943},[321,64341,55379],{"class":331},[321,64343,292],{"class":51445},[321,64345,64346],{"class":331},">每日特价\u003C\u002F",[321,64348,292],{"class":51445},[321,64350,51452],{"class":331},[321,64352,64353,64355,64357],{"class":323,"line":16965},[321,64354,55379],{"class":331},[321,64356,1339],{"class":51445},[321,64358,51452],{"class":331},[321,64360,64361,64363,64365,64367,64369,64371,64373,64375,64377,64379,64382,64385,64387,64389,64391],{"class":323,"line":16970},[321,64362,55447],{"class":331},[321,64364,154],{"class":51445},[321,64366,61197],{"class":331},[321,64368,570],{"class":51445},[321,64370,53631],{"class":2169},[321,64372,377],{"class":331},[321,64374,59851],{"class":436},[321,64376,61202],{"class":2169},[321,64378,377],{"class":331},[321,64380,64381],{"class":436},"\"javascript:;\"",[321,64383,64384],{"class":331},">精选\u003C\u002F",[321,64386,570],{"class":51445},[321,64388,55459],{"class":331},[321,64390,154],{"class":51445},[321,64392,51452],{"class":331},[321,64394,64395,64397,64399,64401,64403,64405,64407,64409,64412,64414,64416,64418],{"class":323,"line":16976},[321,64396,55447],{"class":331},[321,64398,154],{"class":51445},[321,64400,61197],{"class":331},[321,64402,570],{"class":51445},[321,64404,61202],{"class":2169},[321,64406,377],{"class":331},[321,64408,64381],{"class":436},[321,64410,64411],{"class":331},">美食\u003C\u002F",[321,64413,570],{"class":51445},[321,64415,55459],{"class":331},[321,64417,154],{"class":51445},[321,64419,51452],{"class":331},[321,64421,64422,64424,64426,64428,64430,64432,64434,64436,64439,64441,64443,64445],{"class":323,"line":16990},[321,64423,55447],{"class":331},[321,64425,154],{"class":51445},[321,64427,61197],{"class":331},[321,64429,570],{"class":51445},[321,64431,61202],{"class":2169},[321,64433,377],{"class":331},[321,64435,64381],{"class":436},[321,64437,64438],{"class":331},">百货\u003C\u002F",[321,64440,570],{"class":51445},[321,64442,55459],{"class":331},[321,64444,154],{"class":51445},[321,64446,51452],{"class":331},[321,64448,64449,64451,64453,64455,64457,64459,64461,64463,64466,64468,64470,64472],{"class":323,"line":17003},[321,64450,55447],{"class":331},[321,64452,154],{"class":51445},[321,64454,61197],{"class":331},[321,64456,570],{"class":51445},[321,64458,61202],{"class":2169},[321,64460,377],{"class":331},[321,64462,64381],{"class":436},[321,64464,64465],{"class":331},">个护\u003C\u002F",[321,64467,570],{"class":51445},[321,64469,55459],{"class":331},[321,64471,154],{"class":51445},[321,64473,51452],{"class":331},[321,64475,64476,64478,64480,64482,64484,64486,64488,64490,64493,64495,64497,64499],{"class":323,"line":17008},[321,64477,55447],{"class":331},[321,64479,154],{"class":51445},[321,64481,61197],{"class":331},[321,64483,570],{"class":51445},[321,64485,61202],{"class":2169},[321,64487,377],{"class":331},[321,64489,64381],{"class":436},[321,64491,64492],{"class":331},">预告\u003C\u002F",[321,64494,570],{"class":51445},[321,64496,55459],{"class":331},[321,64498,154],{"class":51445},[321,64500,51452],{"class":331},[321,64502,64503,64505,64507],{"class":323,"line":17022},[321,64504,55552],{"class":331},[321,64506,1339],{"class":51445},[321,64508,51452],{"class":331},[321,64510,64511,64513,64515],{"class":323,"line":17027},[321,64512,51921],{"class":331},[321,64514,51756],{"class":51445},[321,64516,51452],{"class":331},[321,64518,64519,64521,64523,64525,64527,64530],{"class":323,"line":17033},[321,64520,51486],{"class":331},[321,64522,51756],{"class":51445},[321,64524,53631],{"class":2169},[321,64526,377],{"class":331},[321,64528,64529],{"class":436},"\"tab-content\"",[321,64531,51452],{"class":331},[321,64533,64534,64536,64538,64540,64542,64545,64547,64549,64551,64553,64556,64558,64560,64562,64565,64567],{"class":323,"line":17038},[321,64535,55379],{"class":331},[321,64537,51756],{"class":51445},[321,64539,53631],{"class":2169},[321,64541,377],{"class":331},[321,64543,64544],{"class":436},"\"item active\"",[321,64546,61197],{"class":331},[321,64548,28],{"class":51445},[321,64550,55384],{"class":2169},[321,64552,377],{"class":331},[321,64554,64555],{"class":436},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[321,64557,55392],{"class":2169},[321,64559,377],{"class":331},[321,64561,7859],{"class":436},[321,64563,64564],{"class":331}," \u002F>\u003C\u002F",[321,64566,51756],{"class":51445},[321,64568,51452],{"class":331},[321,64570,64571,64573,64575,64577,64579,64581,64583,64585,64587,64589,64592,64594,64596,64598,64600,64602],{"class":323,"line":17052},[321,64572,55379],{"class":331},[321,64574,51756],{"class":51445},[321,64576,53631],{"class":2169},[321,64578,377],{"class":331},[321,64580,62768],{"class":436},[321,64582,61197],{"class":331},[321,64584,28],{"class":51445},[321,64586,55384],{"class":2169},[321,64588,377],{"class":331},[321,64590,64591],{"class":436},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[321,64593,55392],{"class":2169},[321,64595,377],{"class":331},[321,64597,7859],{"class":436},[321,64599,64564],{"class":331},[321,64601,51756],{"class":51445},[321,64603,51452],{"class":331},[321,64605,64606,64608,64610,64612,64614,64616,64618,64620,64622,64624,64627,64629,64631,64633,64635,64637],{"class":323,"line":17057},[321,64607,55379],{"class":331},[321,64609,51756],{"class":51445},[321,64611,53631],{"class":2169},[321,64613,377],{"class":331},[321,64615,62768],{"class":436},[321,64617,61197],{"class":331},[321,64619,28],{"class":51445},[321,64621,55384],{"class":2169},[321,64623,377],{"class":331},[321,64625,64626],{"class":436},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[321,64628,55392],{"class":2169},[321,64630,377],{"class":331},[321,64632,7859],{"class":436},[321,64634,64564],{"class":331},[321,64636,51756],{"class":51445},[321,64638,51452],{"class":331},[321,64640,64641,64643,64645,64647,64649,64651,64653,64655,64657,64659,64662,64664,64666,64668,64670,64672],{"class":323,"line":17062},[321,64642,55379],{"class":331},[321,64644,51756],{"class":51445},[321,64646,53631],{"class":2169},[321,64648,377],{"class":331},[321,64650,62768],{"class":436},[321,64652,61197],{"class":331},[321,64654,28],{"class":51445},[321,64656,55384],{"class":2169},[321,64658,377],{"class":331},[321,64660,64661],{"class":436},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[321,64663,55392],{"class":2169},[321,64665,377],{"class":331},[321,64667,7859],{"class":436},[321,64669,64564],{"class":331},[321,64671,51756],{"class":51445},[321,64673,51452],{"class":331},[321,64675,64676,64678,64680,64682,64684,64686,64688,64690,64692,64694,64697,64699,64701,64703,64705,64707],{"class":323,"line":17076},[321,64677,55379],{"class":331},[321,64679,51756],{"class":51445},[321,64681,53631],{"class":2169},[321,64683,377],{"class":331},[321,64685,62768],{"class":436},[321,64687,61197],{"class":331},[321,64689,28],{"class":51445},[321,64691,55384],{"class":2169},[321,64693,377],{"class":331},[321,64695,64696],{"class":436},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[321,64698,55392],{"class":2169},[321,64700,377],{"class":331},[321,64702,7859],{"class":436},[321,64704,64564],{"class":331},[321,64706,51756],{"class":51445},[321,64708,51452],{"class":331},[321,64710,64711,64713,64715],{"class":323,"line":17088},[321,64712,51921],{"class":331},[321,64714,51756],{"class":51445},[321,64716,51452],{"class":331},[321,64718,64719,64721,64723],{"class":323,"line":17093},[321,64720,52562],{"class":331},[321,64722,51756],{"class":51445},[321,64724,51452],{"class":331},[321,64726,64727,64729,64731],{"class":323,"line":17106},[321,64728,52289],{"class":331},[321,64730,51958],{"class":51445},[321,64732,51452],{"class":331},[321,64734,64735],{"class":323,"line":17111},[321,64736,64737],{"class":390},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[321,64739,64740],{"class":323,"line":17116},[321,64741,64742],{"class":390},"    \u002F\u002F 1.1 获取 a 元素 \n",[321,64744,64745,64747,64750,64752,64754,64756,64758,64761],{"class":323,"line":17121},[321,64746,11428],{"class":327},[321,64748,64749],{"class":380}," as",[321,64751,13771],{"class":327},[321,64753,54541],{"class":331},[321,64755,55826],{"class":2169},[321,64757,332],{"class":331},[321,64759,64760],{"class":436},"'.tab-nav a'",[321,64762,338],{"class":331},[321,64764,64765],{"class":323,"line":17134},[321,64766,64767],{"class":390},"    \u002F\u002F console.log(as) \n",[321,64769,64770,64772,64774,64776,64778,64780,64782,64784,64786,64789,64791,64793,64795],{"class":323,"line":17139},[321,64771,3407],{"class":327},[321,64773,1864],{"class":331},[321,64775,51992],{"class":327},[321,64777,9645],{"class":331},[321,64779,377],{"class":327},[321,64781,4299],{"class":380},[321,64783,9652],{"class":331},[321,64785,1242],{"class":327},[321,64787,64788],{"class":331}," as.",[321,64790,52113],{"class":380},[321,64792,3420],{"class":331},[321,64794,2498],{"class":327},[321,64796,12649],{"class":331},[321,64798,64799],{"class":323,"line":32778},[321,64800,64801],{"class":390},"      \u002F\u002F console.log(as[i])\n",[321,64803,64804],{"class":323,"line":32784},[321,64805,64806],{"class":390},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[321,64808,64809,64812,64814,64816,64819,64821,64823],{"class":323,"line":32790},[321,64810,64811],{"class":331},"      as[i].",[321,64813,57958],{"class":2169},[321,64815,332],{"class":331},[321,64817,64818],{"class":436},"'mouseenter'",[321,64820,12642],{"class":331},[321,64822,54594],{"class":327},[321,64824,54597],{"class":331},[321,64826,64827],{"class":323,"line":32796},[321,64828,64829],{"class":390},"        \u002F\u002F console.log('鼠标经过')\n",[321,64831,64832],{"class":323,"line":32802},[321,64833,64834],{"class":390},"        \u002F\u002F 排他思想  \n",[321,64836,64837],{"class":323,"line":32813},[321,64838,64839],{"class":390},"        \u002F\u002F 干掉别人 移除类active\n",[321,64841,64842,64844,64846,64848,64851,64853,64855,64857,64860],{"class":323,"line":32819},[321,64843,52070],{"class":331},[321,64845,54544],{"class":2169},[321,64847,332],{"class":331},[321,64849,64850],{"class":436},"'.tab-nav .active'",[321,64852,57148],{"class":331},[321,64854,57151],{"class":2169},[321,64856,332],{"class":331},[321,64858,64859],{"class":436},"'active'",[321,64861,338],{"class":331},[321,64863,64864],{"class":323,"line":32839},[321,64865,64866],{"class":390},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[321,64868,64869,64872,64875,64877,64879,64881],{"class":323,"line":32845},[321,64870,64871],{"class":380},"        this",[321,64873,64874],{"class":331},".classList.",[321,64876,5541],{"class":2169},[321,64878,332],{"class":331},[321,64880,64859],{"class":436},[321,64882,338],{"class":331},[321,64884,64885],{"class":323,"line":32856},[321,64886,2606],{"emptyLinePlaceholder":251},[321,64888,64889],{"class":323,"line":32862},[321,64890,64891],{"class":390},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[321,64893,64894],{"class":323,"line":32868},[321,64895,64896],{"class":390},"        \u002F\u002F 干掉别人\n",[321,64898,64899,64901,64903,64905,64908,64910,64912,64914,64916],{"class":323,"line":32874},[321,64900,52070],{"class":331},[321,64902,54544],{"class":2169},[321,64904,332],{"class":331},[321,64906,64907],{"class":436},"'.tab-content .active'",[321,64909,57148],{"class":331},[321,64911,57151],{"class":2169},[321,64913,332],{"class":331},[321,64915,64859],{"class":436},[321,64917,338],{"class":331},[321,64919,64920],{"class":323,"line":32880},[321,64921,64922],{"class":390},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[321,64924,64925,64927,64929,64931,64934,64936,64938,64940,64942,64944,64946,64948,64950],{"class":323,"line":32886},[321,64926,52070],{"class":331},[321,64928,54544],{"class":2169},[321,64930,332],{"class":331},[321,64932,64933],{"class":436},"`.tab-content .item:nth-child(${",[321,64935,773],{"class":331},[321,64937,45711],{"class":327},[321,64939,25263],{"class":380},[321,64941,57177],{"class":436},[321,64943,57148],{"class":331},[321,64945,5541],{"class":2169},[321,64947,332],{"class":331},[321,64949,64859],{"class":436},[321,64951,338],{"class":331},[321,64953,64954],{"class":323,"line":32892},[321,64955,2606],{"emptyLinePlaceholder":251},[321,64957,64958],{"class":323,"line":32898},[321,64959,64960],{"class":331},"      })\n",[321,64962,64963],{"class":323,"line":32918},[321,64964,2393],{"class":331},[321,64966,64967,64969,64971],{"class":323,"line":32924},[321,64968,52562],{"class":331},[321,64970,51958],{"class":51445},[321,64972,51452],{"class":331},[321,64974,64975,64977,64979],{"class":323,"line":32940},[321,64976,51930],{"class":331},[321,64978,51945],{"class":51445},[321,64980,51452],{"class":331},[321,64982,64983],{"class":323,"line":32946},[321,64984,2606],{"emptyLinePlaceholder":251},[321,64986,64987,64989,64991],{"class":323,"line":32960},[321,64988,51930],{"class":331},[321,64990,50780],{"class":51445},[321,64992,51452],{"class":331},[19,64994,64995],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,64997,64998],{},"在监听事件中，this指向的就是他的调用者",[19,65000,65001],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65003,53865],{},[19,65005,65006],{},"(function () {",[19,65008,65009],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65011,65012],{},"list.addEventListener('click', function (e) {",[19,65014,65015],{},"if (e.target.tagName === 'A') {",[19,65017,65018],{},"\u002F\u002F 排他思想",[19,65020,65021],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65023,65024],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65026,65027],{},"\u002F\u002F console.log(old);",[19,65029,65030],{},"\u002F\u002F 判断",[19,65032,65033],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65035,65036],{},"if (old) old.classList.remove('active')",[19,65038,65039],{},"e.target.classList.add('active')",[19,65041,1278],{},[19,65043,52609],{},[19,65045,65046],{},"})();",[292,65048,65050],{"id":65049},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[312,65052,65054],{"className":50778,"code":65053,"language":50780,"meta":30,"style":30},"\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",[318,65055,65056,65066,65070,65078,65082,65096,65110,65122,65130,65136,65146,65156,65160,65164,65171,65183,65194,65211,65224,65238,65248,65252,65256,65263,65274,65292,65302,65314,65318,65322,65329,65346,65357,65369,65373,65377,65384,65396,65400,65408,65416,65420,65428,65436,65444,65459,65503,65511,65524,65537,65550,65558,65566,65574,65602,65610,65622,65635,65648,65656,65664,65672,65698,65706,65719,65731,65744,65752,65760,65768,65794,65802,65815,65827,65840,65848,65856,65864,65869,65889,65894,65914,65919,65936,65941,65949,65954,65983,65996,66000,66004,66009,66013,66041,66046,66063,66068,66073,66078,66083,66109,66113,66117,66125,66133,66137],{"__ignoreMap":30},[321,65057,65058,65060,65062,65064],{"class":323,"line":324},[321,65059,51442],{"class":331},[321,65061,51446],{"class":51445},[321,65063,51449],{"class":2169},[321,65065,51452],{"class":331},[321,65067,65068],{"class":323,"line":167},[321,65069,2606],{"emptyLinePlaceholder":251},[321,65071,65072,65074,65076],{"class":323,"line":200},[321,65073,1242],{"class":331},[321,65075,50780],{"class":51445},[321,65077,51452],{"class":331},[321,65079,65080],{"class":323,"line":1401},[321,65081,2606],{"emptyLinePlaceholder":251},[321,65083,65084,65086,65088,65090,65092,65094],{"class":323,"line":1407},[321,65085,1242],{"class":331},[321,65087,51479],{"class":51445},[321,65089,51461],{"class":2169},[321,65091,377],{"class":331},[321,65093,51466],{"class":436},[321,65095,51452],{"class":331},[321,65097,65098,65100,65102,65104,65106,65108],{"class":323,"line":1421},[321,65099,52289],{"class":331},[321,65101,51489],{"class":51445},[321,65103,51492],{"class":2169},[321,65105,377],{"class":331},[321,65107,51497],{"class":436},[321,65109,51452],{"class":331},[321,65111,65112,65114,65116,65118,65120],{"class":323,"line":1427},[321,65113,52289],{"class":331},[321,65115,51552],{"class":51445},[321,65117,55459],{"class":331},[321,65119,51552],{"class":51445},[321,65121,51452],{"class":331},[321,65123,65124,65126,65128],{"class":323,"line":1518},[321,65125,52289],{"class":331},[321,65127,5333],{"class":51445},[321,65129,51452],{"class":331},[321,65131,65132,65134],{"class":323,"line":1524},[321,65133,6610],{"class":51445},[321,65135,15779],{"class":331},[321,65137,65138,65140,65142,65144],{"class":323,"line":1536},[321,65139,54851],{"class":380},[321,65141,51582],{"class":331},[321,65143,523],{"class":380},[321,65145,1497],{"class":331},[321,65147,65148,65150,65152,65154],{"class":323,"line":1818},[321,65149,54840],{"class":380},[321,65151,51582],{"class":331},[321,65153,523],{"class":380},[321,65155,1497],{"class":331},[321,65157,65158],{"class":323,"line":1823},[321,65159,2393],{"class":331},[321,65161,65162],{"class":323,"line":1829},[321,65163,2606],{"emptyLinePlaceholder":251},[321,65165,65166,65169],{"class":323,"line":1834},[321,65167,65168],{"class":51445},"    table",[321,65170,15779],{"class":331},[321,65172,65173,65176,65178,65181],{"class":323,"line":1848},[321,65174,65175],{"class":380},"      border-collapse",[321,65177,51582],{"class":331},[321,65179,65180],{"class":380},"collapse",[321,65182,1497],{"class":331},[321,65184,65185,65188,65190,65192],{"class":323,"line":1853},[321,65186,65187],{"class":380},"      border-spacing",[321,65189,51582],{"class":331},[321,65191,523],{"class":380},[321,65193,1497],{"class":331},[321,65195,65196,65198,65200,65202,65204,65206,65209],{"class":323,"line":1859},[321,65197,62122],{"class":380},[321,65199,51582],{"class":331},[321,65201,549],{"class":380},[321,65203,51637],{"class":327},[321,65205,51666],{"class":380},[321,65207,65208],{"class":380}," #c0c0c0",[321,65210,1497],{"class":331},[321,65212,65213,65215,65217,65220,65222],{"class":323,"line":1880},[321,65214,54916],{"class":380},[321,65216,51582],{"class":331},[321,65218,65219],{"class":380},"500",[321,65221,51637],{"class":327},[321,65223,1497],{"class":331},[321,65225,65226,65228,65230,65232,65234,65236],{"class":323,"line":1885},[321,65227,54851],{"class":380},[321,65229,51582],{"class":331},[321,65231,643],{"class":380},[321,65233,51637],{"class":327},[321,65235,51701],{"class":380},[321,65237,1497],{"class":331},[321,65239,65240,65242,65244,65246],{"class":323,"line":1899},[321,65241,57431],{"class":380},[321,65243,51582],{"class":331},[321,65245,51737],{"class":380},[321,65247,1497],{"class":331},[321,65249,65250],{"class":323,"line":1904},[321,65251,2393],{"class":331},[321,65253,65254],{"class":323,"line":1933},[321,65255,2606],{"emptyLinePlaceholder":251},[321,65257,65258,65261],{"class":323,"line":1938},[321,65259,65260],{"class":51445},"    th",[321,65262,15779],{"class":331},[321,65264,65265,65267,65269,65272],{"class":323,"line":1955},[321,65266,55029],{"class":380},[321,65268,51582],{"class":331},[321,65270,65271],{"class":380},"#09c",[321,65273,1497],{"class":331},[321,65275,65276,65279,65281,65283,65285,65287,65290],{"class":323,"line":1960},[321,65277,65278],{"class":380},"      font",[321,65280,51582],{"class":331},[321,65282,62484],{"class":380},[321,65284,64218],{"class":380},[321,65286,51637],{"class":327},[321,65288,65289],{"class":436}," \"微软雅黑\"",[321,65291,1497],{"class":331},[321,65293,65294,65296,65298,65300],{"class":323,"line":1965},[321,65295,57561],{"class":380},[321,65297,51582],{"class":331},[321,65299,60987],{"class":380},[321,65301,1497],{"class":331},[321,65303,65304,65306,65308,65310,65312],{"class":323,"line":1970},[321,65305,54930],{"class":380},[321,65307,51582],{"class":331},[321,65309,1132],{"class":380},[321,65311,51637],{"class":327},[321,65313,1497],{"class":331},[321,65315,65316],{"class":323,"line":1984},[321,65317,2393],{"class":331},[321,65319,65320],{"class":323,"line":1989},[321,65321,2606],{"emptyLinePlaceholder":251},[321,65323,65324,65327],{"class":323,"line":2783},[321,65325,65326],{"class":51445},"    td",[321,65328,15779],{"class":331},[321,65330,65331,65333,65335,65337,65339,65341,65344],{"class":323,"line":2797},[321,65332,62122],{"class":380},[321,65334,51582],{"class":331},[321,65336,549],{"class":380},[321,65338,51637],{"class":327},[321,65340,51666],{"class":380},[321,65342,65343],{"class":380}," #d0d0d0",[321,65345,1497],{"class":331},[321,65347,65348,65350,65352,65355],{"class":323,"line":2805},[321,65349,57561],{"class":380},[321,65351,51582],{"class":331},[321,65353,65354],{"class":380},"#404060",[321,65356,1497],{"class":331},[321,65358,65359,65361,65363,65365,65367],{"class":323,"line":2810},[321,65360,54840],{"class":380},[321,65362,51582],{"class":331},[321,65364,778],{"class":380},[321,65366,51637],{"class":327},[321,65368,1497],{"class":331},[321,65370,65371],{"class":323,"line":2816},[321,65372,2393],{"class":331},[321,65374,65375],{"class":323,"line":2822},[321,65376,2606],{"emptyLinePlaceholder":251},[321,65378,65379,65382],{"class":323,"line":2827},[321,65380,65381],{"class":2169},"    .allCheck",[321,65383,15779],{"class":331},[321,65385,65386,65388,65390,65392,65394],{"class":323,"line":8155},[321,65387,54916],{"class":380},[321,65389,51582],{"class":331},[321,65391,944],{"class":380},[321,65393,51637],{"class":327},[321,65395,1497],{"class":331},[321,65397,65398],{"class":323,"line":8179},[321,65399,2393],{"class":331},[321,65401,65402,65404,65406],{"class":323,"line":8184},[321,65403,52562],{"class":331},[321,65405,5333],{"class":51445},[321,65407,51452],{"class":331},[321,65409,65410,65412,65414],{"class":323,"line":8190},[321,65411,51930],{"class":331},[321,65413,51479],{"class":51445},[321,65415,51452],{"class":331},[321,65417,65418],{"class":323,"line":8217},[321,65419,2606],{"emptyLinePlaceholder":251},[321,65421,65422,65424,65426],{"class":323,"line":8222},[321,65423,1242],{"class":331},[321,65425,51945],{"class":51445},[321,65427,51452],{"class":331},[321,65429,65430,65432,65434],{"class":323,"line":8228},[321,65431,52289],{"class":331},[321,65433,469],{"class":51445},[321,65435,51452],{"class":331},[321,65437,65438,65440,65442],{"class":323,"line":8240},[321,65439,51486],{"class":331},[321,65441,475],{"class":51445},[321,65443,51452],{"class":331},[321,65445,65446,65448,65450,65452,65454,65457],{"class":323,"line":8252},[321,65447,55379],{"class":331},[321,65449,478],{"class":51445},[321,65451,53631],{"class":2169},[321,65453,377],{"class":331},[321,65455,65456],{"class":436},"\"allCheck\"",[321,65458,51452],{"class":331},[321,65460,65461,65463,65465,65467,65469,65471,65473,65475,65477,65479,65481,65484,65487,65489,65491,65493,65496,65499,65501],{"class":323,"line":8264},[321,65462,55447],{"class":331},[321,65464,53966],{"class":51445},[321,65466,53969],{"class":2169},[321,65468,377],{"class":331},[321,65470,53974],{"class":436},[321,65472,15127],{"class":2169},[321,65474,377],{"class":331},[321,65476,7859],{"class":436},[321,65478,15166],{"class":2169},[321,65480,377],{"class":331},[321,65482,65483],{"class":436},"\"checkAll\"",[321,65485,65486],{"class":331},"> \u003C",[321,65488,321],{"class":51445},[321,65490,53631],{"class":2169},[321,65492,377],{"class":331},[321,65494,65495],{"class":436},"\"all\"",[321,65497,65498],{"class":331},">全选\u003C\u002F",[321,65500,321],{"class":51445},[321,65502,51452],{"class":331},[321,65504,65505,65507,65509],{"class":323,"line":9923},[321,65506,55552],{"class":331},[321,65508,478],{"class":51445},[321,65510,51452],{"class":331},[321,65512,65513,65515,65517,65520,65522],{"class":323,"line":9948},[321,65514,55379],{"class":331},[321,65516,478],{"class":51445},[321,65518,65519],{"class":331},">商品\u003C\u002F",[321,65521,478],{"class":51445},[321,65523,51452],{"class":331},[321,65525,65526,65528,65530,65533,65535],{"class":323,"line":9971},[321,65527,55379],{"class":331},[321,65529,478],{"class":51445},[321,65531,65532],{"class":331},">商家\u003C\u002F",[321,65534,478],{"class":51445},[321,65536,51452],{"class":331},[321,65538,65539,65541,65543,65546,65548],{"class":323,"line":9995},[321,65540,55379],{"class":331},[321,65542,478],{"class":51445},[321,65544,65545],{"class":331},">价格\u003C\u002F",[321,65547,478],{"class":51445},[321,65549,51452],{"class":331},[321,65551,65552,65554,65556],{"class":323,"line":10000},[321,65553,51921],{"class":331},[321,65555,475],{"class":51445},[321,65557,51452],{"class":331},[321,65559,65560,65562,65564],{"class":323,"line":10005},[321,65561,51486],{"class":331},[321,65563,475],{"class":51445},[321,65565,51452],{"class":331},[321,65567,65568,65570,65572],{"class":323,"line":10010},[321,65569,55379],{"class":331},[321,65571,521],{"class":51445},[321,65573,51452],{"class":331},[321,65575,65576,65578,65580,65582,65584,65586,65588,65590,65593,65595,65597,65600],{"class":323,"line":10019},[321,65577,55447],{"class":331},[321,65579,53966],{"class":51445},[321,65581,53969],{"class":2169},[321,65583,377],{"class":331},[321,65585,53974],{"class":436},[321,65587,15127],{"class":2169},[321,65589,377],{"class":331},[321,65591,65592],{"class":436},"\"check\"",[321,65594,53631],{"class":2169},[321,65596,377],{"class":331},[321,65598,65599],{"class":436},"\"ck\"",[321,65601,51452],{"class":331},[321,65603,65604,65606,65608],{"class":323,"line":10024},[321,65605,55552],{"class":331},[321,65607,521],{"class":51445},[321,65609,51452],{"class":331},[321,65611,65612,65614,65616,65618,65620],{"class":323,"line":10030},[321,65613,55379],{"class":331},[321,65615,521],{"class":51445},[321,65617,61318],{"class":331},[321,65619,521],{"class":51445},[321,65621,51452],{"class":331},[321,65623,65624,65626,65628,65631,65633],{"class":323,"line":10051},[321,65625,55379],{"class":331},[321,65627,521],{"class":51445},[321,65629,65630],{"class":331},">小米\u003C\u002F",[321,65632,521],{"class":51445},[321,65634,51452],{"class":331},[321,65636,65637,65639,65641,65644,65646],{"class":323,"line":10057},[321,65638,55379],{"class":331},[321,65640,521],{"class":51445},[321,65642,65643],{"class":331},">￥1999\u003C\u002F",[321,65645,521],{"class":51445},[321,65647,51452],{"class":331},[321,65649,65650,65652,65654],{"class":323,"line":10071},[321,65651,51921],{"class":331},[321,65653,475],{"class":51445},[321,65655,51452],{"class":331},[321,65657,65658,65660,65662],{"class":323,"line":10077},[321,65659,51486],{"class":331},[321,65661,475],{"class":51445},[321,65663,51452],{"class":331},[321,65665,65666,65668,65670],{"class":323,"line":10104},[321,65667,55379],{"class":331},[321,65669,521],{"class":51445},[321,65671,51452],{"class":331},[321,65673,65674,65676,65678,65680,65682,65684,65686,65688,65690,65692,65694,65696],{"class":323,"line":10113},[321,65675,55447],{"class":331},[321,65677,53966],{"class":51445},[321,65679,53969],{"class":2169},[321,65681,377],{"class":331},[321,65683,53974],{"class":436},[321,65685,15127],{"class":2169},[321,65687,377],{"class":331},[321,65689,65592],{"class":436},[321,65691,53631],{"class":2169},[321,65693,377],{"class":331},[321,65695,65599],{"class":436},[321,65697,51452],{"class":331},[321,65699,65700,65702,65704],{"class":323,"line":10119},[321,65701,55552],{"class":331},[321,65703,521],{"class":51445},[321,65705,51452],{"class":331},[321,65707,65708,65710,65712,65715,65717],{"class":323,"line":10127},[321,65709,55379],{"class":331},[321,65711,521],{"class":51445},[321,65713,65714],{"class":331},">小米净水器\u003C\u002F",[321,65716,521],{"class":51445},[321,65718,51452],{"class":331},[321,65720,65721,65723,65725,65727,65729],{"class":323,"line":10132},[321,65722,55379],{"class":331},[321,65724,521],{"class":51445},[321,65726,65630],{"class":331},[321,65728,521],{"class":51445},[321,65730,51452],{"class":331},[321,65732,65733,65735,65737,65740,65742],{"class":323,"line":16811},[321,65734,55379],{"class":331},[321,65736,521],{"class":51445},[321,65738,65739],{"class":331},">￥4999\u003C\u002F",[321,65741,521],{"class":51445},[321,65743,51452],{"class":331},[321,65745,65746,65748,65750],{"class":323,"line":16817},[321,65747,51921],{"class":331},[321,65749,475],{"class":51445},[321,65751,51452],{"class":331},[321,65753,65754,65756,65758],{"class":323,"line":16840},[321,65755,51486],{"class":331},[321,65757,475],{"class":51445},[321,65759,51452],{"class":331},[321,65761,65762,65764,65766],{"class":323,"line":16846},[321,65763,55379],{"class":331},[321,65765,521],{"class":51445},[321,65767,51452],{"class":331},[321,65769,65770,65772,65774,65776,65778,65780,65782,65784,65786,65788,65790,65792],{"class":323,"line":16869},[321,65771,55447],{"class":331},[321,65773,53966],{"class":51445},[321,65775,53969],{"class":2169},[321,65777,377],{"class":331},[321,65779,53974],{"class":436},[321,65781,15127],{"class":2169},[321,65783,377],{"class":331},[321,65785,65592],{"class":436},[321,65787,53631],{"class":2169},[321,65789,377],{"class":331},[321,65791,65599],{"class":436},[321,65793,51452],{"class":331},[321,65795,65796,65798,65800],{"class":323,"line":16883},[321,65797,55552],{"class":331},[321,65799,521],{"class":51445},[321,65801,51452],{"class":331},[321,65803,65804,65806,65808,65811,65813],{"class":323,"line":16903},[321,65805,55379],{"class":331},[321,65807,521],{"class":51445},[321,65809,65810],{"class":331},">小米电视\u003C\u002F",[321,65812,521],{"class":51445},[321,65814,51452],{"class":331},[321,65816,65817,65819,65821,65823,65825],{"class":323,"line":16909},[321,65818,55379],{"class":331},[321,65820,521],{"class":51445},[321,65822,65630],{"class":331},[321,65824,521],{"class":51445},[321,65826,51452],{"class":331},[321,65828,65829,65831,65833,65836,65838],{"class":323,"line":16920},[321,65830,55379],{"class":331},[321,65832,521],{"class":51445},[321,65834,65835],{"class":331},">￥5999\u003C\u002F",[321,65837,521],{"class":51445},[321,65839,51452],{"class":331},[321,65841,65842,65844,65846],{"class":323,"line":16943},[321,65843,51921],{"class":331},[321,65845,475],{"class":51445},[321,65847,51452],{"class":331},[321,65849,65850,65852,65854],{"class":323,"line":16965},[321,65851,52562],{"class":331},[321,65853,469],{"class":51445},[321,65855,51452],{"class":331},[321,65857,65858,65860,65862],{"class":323,"line":16970},[321,65859,52289],{"class":331},[321,65861,51958],{"class":51445},[321,65863,51452],{"class":331},[321,65865,65866],{"class":323,"line":16976},[321,65867,65868],{"class":390},"    \u002F\u002F 1. 获取大复选框\n",[321,65870,65871,65873,65876,65878,65880,65882,65884,65887],{"class":323,"line":16990},[321,65872,11428],{"class":327},[321,65874,65875],{"class":380}," checkAll",[321,65877,13771],{"class":327},[321,65879,54541],{"class":331},[321,65881,54544],{"class":2169},[321,65883,332],{"class":331},[321,65885,65886],{"class":436},"'#checkAll'",[321,65888,338],{"class":331},[321,65890,65891],{"class":323,"line":17003},[321,65892,65893],{"class":390},"    \u002F\u002F 2. 获取所有的小复选框\n",[321,65895,65896,65898,65901,65903,65905,65907,65909,65912],{"class":323,"line":17008},[321,65897,11428],{"class":327},[321,65899,65900],{"class":380}," cks",[321,65902,13771],{"class":327},[321,65904,54541],{"class":331},[321,65906,55826],{"class":2169},[321,65908,332],{"class":331},[321,65910,65911],{"class":436},"'.ck'",[321,65913,338],{"class":331},[321,65915,65916],{"class":323,"line":17022},[321,65917,65918],{"class":390},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[321,65920,65921,65924,65926,65928,65930,65932,65934],{"class":323,"line":17027},[321,65922,65923],{"class":331},"    checkAll.",[321,65925,57958],{"class":2169},[321,65927,332],{"class":331},[321,65929,57963],{"class":436},[321,65931,12642],{"class":331},[321,65933,54594],{"class":327},[321,65935,54597],{"class":331},[321,65937,65938],{"class":323,"line":17033},[321,65939,65940],{"class":390},"      \u002F\u002F 得到当前大复选框的选中状态\n",[321,65942,65943,65946],{"class":323,"line":17038},[321,65944,65945],{"class":390},"      \u002F\u002F console.log(checkAll.checked)",[321,65947,65948],{"class":390},"  \u002F\u002F 得到 是 true 或者是 false\n",[321,65950,65951],{"class":323,"line":17052},[321,65952,65953],{"class":390},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[321,65955,65956,65958,65960,65962,65964,65966,65968,65970,65972,65975,65977,65979,65981],{"class":323,"line":17057},[321,65957,52429],{"class":327},[321,65959,1864],{"class":331},[321,65961,51992],{"class":327},[321,65963,9645],{"class":331},[321,65965,377],{"class":327},[321,65967,4299],{"class":380},[321,65969,9652],{"class":331},[321,65971,1242],{"class":327},[321,65973,65974],{"class":331}," cks.",[321,65976,52113],{"class":380},[321,65978,3420],{"class":331},[321,65980,2498],{"class":327},[321,65982,12649],{"class":331},[321,65984,65985,65988,65990,65993],{"class":323,"line":17062},[321,65986,65987],{"class":331},"        cks[i].checked ",[321,65989,377],{"class":327},[321,65991,65992],{"class":380}," this",[321,65994,65995],{"class":331},".checked\n",[321,65997,65998],{"class":323,"line":17076},[321,65999,52543],{"class":331},[321,66001,66002],{"class":323,"line":17088},[321,66003,33606],{"class":331},[321,66005,66006],{"class":323,"line":17093},[321,66007,66008],{"class":390},"    \u002F\u002F 5. 小复选框控制大复选框\n",[321,66010,66011],{"class":323,"line":17106},[321,66012,2606],{"emptyLinePlaceholder":251},[321,66014,66015,66017,66019,66021,66023,66025,66027,66029,66031,66033,66035,66037,66039],{"class":323,"line":17111},[321,66016,3407],{"class":327},[321,66018,1864],{"class":331},[321,66020,51992],{"class":327},[321,66022,9645],{"class":331},[321,66024,377],{"class":327},[321,66026,4299],{"class":380},[321,66028,9652],{"class":331},[321,66030,1242],{"class":327},[321,66032,65974],{"class":331},[321,66034,52113],{"class":380},[321,66036,3420],{"class":331},[321,66038,2498],{"class":327},[321,66040,12649],{"class":331},[321,66042,66043],{"class":323,"line":17116},[321,66044,66045],{"class":390},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[321,66047,66048,66051,66053,66055,66057,66059,66061],{"class":323,"line":17121},[321,66049,66050],{"class":331},"      cks[i].",[321,66052,57958],{"class":2169},[321,66054,332],{"class":331},[321,66056,57963],{"class":436},[321,66058,12642],{"class":331},[321,66060,54594],{"class":327},[321,66062,54597],{"class":331},[321,66064,66065],{"class":323,"line":17134},[321,66066,66067],{"class":390},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[321,66069,66070],{"class":323,"line":17139},[321,66071,66072],{"class":390},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[321,66074,66075],{"class":323,"line":32778},[321,66076,66077],{"class":390},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[321,66079,66080],{"class":323,"line":32784},[321,66081,66082],{"class":390},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[321,66084,66085,66088,66090,66092,66094,66096,66099,66101,66103,66105,66107],{"class":323,"line":32790},[321,66086,66087],{"class":331},"        checkAll.checked ",[321,66089,377],{"class":327},[321,66091,54541],{"class":331},[321,66093,55826],{"class":2169},[321,66095,332],{"class":331},[321,66097,66098],{"class":436},"'.ck:checked'",[321,66100,30971],{"class":331},[321,66102,52113],{"class":380},[321,66104,58051],{"class":327},[321,66106,65974],{"class":331},[321,66108,55976],{"class":380},[321,66110,66111],{"class":323,"line":32796},[321,66112,64960],{"class":331},[321,66114,66115],{"class":323,"line":32802},[321,66116,2393],{"class":331},[321,66118,66119,66121,66123],{"class":323,"line":32813},[321,66120,52562],{"class":331},[321,66122,51958],{"class":51445},[321,66124,51452],{"class":331},[321,66126,66127,66129,66131],{"class":323,"line":32819},[321,66128,51930],{"class":331},[321,66130,51945],{"class":51445},[321,66132,51452],{"class":331},[321,66134,66135],{"class":323,"line":32839},[321,66136,2606],{"emptyLinePlaceholder":251},[321,66138,66139,66141,66143],{"class":323,"line":32845},[321,66140,51930],{"class":331},[321,66142,50780],{"class":51445},[321,66144,51452],{"class":331},[19,66146,66147],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66149,66150],{},"用好之间比较得到的布尔值！！！",[19,66152,66153,66154,66157,66158,1864,66161,916,66163,66166],{},"在 JS 里访问的时候，",[318,66155,66156],{},"checkbox.checked"," 是一个 ",[481,66159,66160],{},"布尔值",[318,66162,1569],{},[318,66164,66165],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66168,66169,66170,66173,66174],{},"HTML 的 ",[318,66171,66172],{},"checked=\"checked\""," 只是 ",[481,66175,66176,66177,66180],{},"初始值；JS 的 ",[318,66178,66179],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66182,66183],{},"：checked是一个伪类选择器",[19,66185,66186],{},[28,66187],{"alt":30,"src":66188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66190,66191,66194],{},[66192,66193],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66196,66197],{},[28,66198],{"alt":30,"src":66199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66201,66203],{"id":66202},"_33-dom事件进阶","3.3 DOM事件进阶",[292,66205,66207],{"id":66206},"_331-事件流","3.3.1 事件流",[19,66209,66210],{},[28,66211],{"alt":30,"src":66212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22205,66214,66216],{"id":66215},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66218,66219],{},[28,66220],{"alt":30,"src":66221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[312,66223,66225],{"className":50778,"code":66224,"language":50780,"meta":30,"style":30},"\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",[318,66226,66227,66237,66251,66255,66263,66277,66297,66309,66317,66324,66336,66348,66358,66362,66366,66373,66385,66397,66407,66411,66419,66427,66431,66439,66454,66473,66481,66489,66509,66529,66545,66556,66564,66581,66592,66600,66617,66628,66636,66644,66652,66656],{"__ignoreMap":30},[321,66228,66229,66231,66233,66235],{"class":323,"line":324},[321,66230,51442],{"class":331},[321,66232,51446],{"class":51445},[321,66234,51449],{"class":2169},[321,66236,51452],{"class":331},[321,66238,66239,66241,66243,66245,66247,66249],{"class":323,"line":167},[321,66240,1242],{"class":331},[321,66242,50780],{"class":51445},[321,66244,51461],{"class":2169},[321,66246,377],{"class":331},[321,66248,51466],{"class":436},[321,66250,51452],{"class":331},[321,66252,66253],{"class":323,"line":200},[321,66254,2606],{"emptyLinePlaceholder":251},[321,66256,66257,66259,66261],{"class":323,"line":1401},[321,66258,1242],{"class":331},[321,66260,51479],{"class":51445},[321,66262,51452],{"class":331},[321,66264,66265,66267,66269,66271,66273,66275],{"class":323,"line":1407},[321,66266,52289],{"class":331},[321,66268,51489],{"class":51445},[321,66270,51492],{"class":2169},[321,66272,377],{"class":331},[321,66274,51497],{"class":436},[321,66276,51452],{"class":331},[321,66278,66279,66281,66283,66285,66287,66289,66291,66293,66295],{"class":323,"line":1421},[321,66280,52289],{"class":331},[321,66282,51489],{"class":51445},[321,66284,15127],{"class":2169},[321,66286,377],{"class":331},[321,66288,51536],{"class":436},[321,66290,51516],{"class":2169},[321,66292,377],{"class":331},[321,66294,51543],{"class":436},[321,66296,51452],{"class":331},[321,66298,66299,66301,66303,66305,66307],{"class":323,"line":1427},[321,66300,52289],{"class":331},[321,66302,51552],{"class":51445},[321,66304,51555],{"class":331},[321,66306,51552],{"class":51445},[321,66308,51452],{"class":331},[321,66310,66311,66313,66315],{"class":323,"line":1518},[321,66312,52289],{"class":331},[321,66314,5333],{"class":51445},[321,66316,51452],{"class":331},[321,66318,66319,66322],{"class":323,"line":1524},[321,66320,66321],{"class":2169},"    .father",[321,66323,15779],{"class":331},[321,66325,66326,66328,66330,66332,66334],{"class":323,"line":1536},[321,66327,54916],{"class":380},[321,66329,51582],{"class":331},[321,66331,65219],{"class":380},[321,66333,51637],{"class":327},[321,66335,1497],{"class":331},[321,66337,66338,66340,66342,66344,66346],{"class":323,"line":1818},[321,66339,54930],{"class":380},[321,66341,51582],{"class":331},[321,66343,65219],{"class":380},[321,66345,51637],{"class":327},[321,66347,1497],{"class":331},[321,66349,66350,66352,66354,66356],{"class":323,"line":1823},[321,66351,55029],{"class":380},[321,66353,51582],{"class":331},[321,66355,51790],{"class":380},[321,66357,1497],{"class":331},[321,66359,66360],{"class":323,"line":1829},[321,66361,2393],{"class":331},[321,66363,66364],{"class":323,"line":1834},[321,66365,2606],{"emptyLinePlaceholder":251},[321,66367,66368,66371],{"class":323,"line":1848},[321,66369,66370],{"class":2169},"    .son",[321,66372,15779],{"class":331},[321,66374,66375,66377,66379,66381,66383],{"class":323,"line":1853},[321,66376,54916],{"class":380},[321,66378,51582],{"class":331},[321,66380,1928],{"class":380},[321,66382,51637],{"class":327},[321,66384,1497],{"class":331},[321,66386,66387,66389,66391,66393,66395],{"class":323,"line":1859},[321,66388,54930],{"class":380},[321,66390,51582],{"class":331},[321,66392,1928],{"class":380},[321,66394,51637],{"class":327},[321,66396,1497],{"class":331},[321,66398,66399,66401,66403,66405],{"class":323,"line":1880},[321,66400,55029],{"class":380},[321,66402,51582],{"class":331},[321,66404,55034],{"class":380},[321,66406,1497],{"class":331},[321,66408,66409],{"class":323,"line":1885},[321,66410,2393],{"class":331},[321,66412,66413,66415,66417],{"class":323,"line":1899},[321,66414,52562],{"class":331},[321,66416,5333],{"class":51445},[321,66418,51452],{"class":331},[321,66420,66421,66423,66425],{"class":323,"line":1904},[321,66422,51930],{"class":331},[321,66424,51479],{"class":51445},[321,66426,51452],{"class":331},[321,66428,66429],{"class":323,"line":1933},[321,66430,2606],{"emptyLinePlaceholder":251},[321,66432,66433,66435,66437],{"class":323,"line":1938},[321,66434,1242],{"class":331},[321,66436,51945],{"class":51445},[321,66438,51452],{"class":331},[321,66440,66441,66443,66445,66447,66449,66452],{"class":323,"line":1955},[321,66442,52289],{"class":331},[321,66444,51756],{"class":51445},[321,66446,53631],{"class":2169},[321,66448,377],{"class":331},[321,66450,66451],{"class":436},"\"father\"",[321,66453,51452],{"class":331},[321,66455,66456,66458,66460,66462,66464,66467,66469,66471],{"class":323,"line":1960},[321,66457,51486],{"class":331},[321,66459,51756],{"class":51445},[321,66461,53631],{"class":2169},[321,66463,377],{"class":331},[321,66465,66466],{"class":436},"\"son\"",[321,66468,55459],{"class":331},[321,66470,51756],{"class":51445},[321,66472,51452],{"class":331},[321,66474,66475,66477,66479],{"class":323,"line":1965},[321,66476,52562],{"class":331},[321,66478,51756],{"class":51445},[321,66480,51452],{"class":331},[321,66482,66483,66485,66487],{"class":323,"line":1970},[321,66484,52289],{"class":331},[321,66486,51958],{"class":51445},[321,66488,51452],{"class":331},[321,66490,66491,66493,66496,66498,66500,66502,66504,66507],{"class":323,"line":1984},[321,66492,11428],{"class":327},[321,66494,66495],{"class":380}," fa",[321,66497,13771],{"class":327},[321,66499,54541],{"class":331},[321,66501,54544],{"class":2169},[321,66503,332],{"class":331},[321,66505,66506],{"class":436},"'.father'",[321,66508,338],{"class":331},[321,66510,66511,66513,66516,66518,66520,66522,66524,66527],{"class":323,"line":1989},[321,66512,11428],{"class":327},[321,66514,66515],{"class":380}," son",[321,66517,13771],{"class":327},[321,66519,54541],{"class":331},[321,66521,54544],{"class":2169},[321,66523,332],{"class":331},[321,66525,66526],{"class":436},"'.son'",[321,66528,338],{"class":331},[321,66530,66531,66533,66535,66537,66539,66541,66543],{"class":323,"line":2783},[321,66532,52552],{"class":331},[321,66534,57958],{"class":2169},[321,66536,332],{"class":331},[321,66538,57963],{"class":436},[321,66540,12642],{"class":331},[321,66542,54594],{"class":327},[321,66544,54597],{"class":331},[321,66546,66547,66549,66551,66554],{"class":323,"line":2797},[321,66548,59070],{"class":2169},[321,66550,332],{"class":331},[321,66552,66553],{"class":436},"'woshiu1'",[321,66555,338],{"class":331},[321,66557,66558,66560,66562],{"class":323,"line":2805},[321,66559,54680],{"class":331},[321,66561,1569],{"class":380},[321,66563,338],{"class":331},[321,66565,66566,66569,66571,66573,66575,66577,66579],{"class":323,"line":2810},[321,66567,66568],{"class":331},"    fa.",[321,66570,57958],{"class":2169},[321,66572,332],{"class":331},[321,66574,57963],{"class":436},[321,66576,12642],{"class":331},[321,66578,54594],{"class":327},[321,66580,54597],{"class":331},[321,66582,66583,66585,66587,66590],{"class":323,"line":2816},[321,66584,59070],{"class":2169},[321,66586,332],{"class":331},[321,66588,66589],{"class":436},"'1'",[321,66591,338],{"class":331},[321,66593,66594,66596,66598],{"class":323,"line":2822},[321,66595,54680],{"class":331},[321,66597,1569],{"class":380},[321,66599,338],{"class":331},[321,66601,66602,66605,66607,66609,66611,66613,66615],{"class":323,"line":2827},[321,66603,66604],{"class":331},"    son.",[321,66606,57958],{"class":2169},[321,66608,332],{"class":331},[321,66610,57963],{"class":436},[321,66612,12642],{"class":331},[321,66614,54594],{"class":327},[321,66616,54597],{"class":331},[321,66618,66619,66621,66623,66626],{"class":323,"line":8155},[321,66620,59070],{"class":2169},[321,66622,332],{"class":331},[321,66624,66625],{"class":436},"'2'",[321,66627,338],{"class":331},[321,66629,66630,66632,66634],{"class":323,"line":8179},[321,66631,54680],{"class":331},[321,66633,1569],{"class":380},[321,66635,338],{"class":331},[321,66637,66638,66640,66642],{"class":323,"line":8184},[321,66639,52562],{"class":331},[321,66641,51958],{"class":51445},[321,66643,51452],{"class":331},[321,66645,66646,66648,66650],{"class":323,"line":8190},[321,66647,51930],{"class":331},[321,66649,51945],{"class":51445},[321,66651,51452],{"class":331},[321,66653,66654],{"class":323,"line":8217},[321,66655,2606],{"emptyLinePlaceholder":251},[321,66657,66658,66660,66662],{"class":323,"line":8222},[321,66659,51930],{"class":331},[321,66661,50780],{"class":51445},[321,66663,51452],{"class":331},[19,66665,66666],{},[28,66667],{"alt":30,"src":66668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66670,66671],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22205,66673,66675],{"id":66674},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66677,66678],{},[28,66679],{"alt":30,"src":66680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66682,66683],{},"反着来",[19,66685,66686],{},"注意是同名事件，比如都是‘click’",[22205,66688,66690],{"id":66689},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66692,66693],{},[28,66694],{"alt":30,"src":66695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22205,66697,66699],{"id":66698},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66701,66702],{},[28,66703],{"alt":30,"src":66704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66706,66707],{},[28,66708],{"alt":30,"src":66709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22205,66711,66713],{"id":66712},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[151,66715,66716],{},[154,66717,66718],{},"事件类型的区别",[19,66720,66721],{},[28,66722],{"alt":30,"src":66723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66725,66726],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[151,66728,66729],{"start":167},[154,66730,66731],{},"注册事件的区别",[19,66733,66734],{},[28,66735],{"alt":30,"src":66736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22205,66738,66740],{"id":66739},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66742,66743],{},[28,66744],{"alt":30,"src":66745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66747,66748],{},[28,66749],{"alt":30,"src":66750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[312,66752,66754],{"className":53212,"code":66753,"language":53214,"meta":30,"style":30},"\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",[318,66755,66756,66764,66781,66804,66812,66817,66822,66827,66831,66839,66847],{"__ignoreMap":30},[321,66757,66758,66760,66762],{"class":323,"line":324},[321,66759,1242],{"class":331},[321,66761,51945],{"class":51445},[321,66763,51452],{"class":331},[321,66765,66766,66768,66771,66774,66776,66779],{"class":323,"line":167},[321,66767,52289],{"class":331},[321,66769,66770],{"class":51445},"form",[321,66772,66773],{"class":2169}," action",[321,66775,377],{"class":331},[321,66777,66778],{"class":436},"\"http:\u002F\u002Fwww.itcast.cn\"",[321,66780,51452],{"class":331},[321,66782,66783,66785,66787,66789,66791,66794,66797,66799,66802],{"class":323,"line":200},[321,66784,51486],{"class":331},[321,66786,53966],{"class":51445},[321,66788,53969],{"class":2169},[321,66790,377],{"class":331},[321,66792,66793],{"class":436},"\"submit\"",[321,66795,66796],{"class":2169}," value",[321,66798,377],{"class":331},[321,66800,66801],{"class":436},"\"免费注册\"",[321,66803,51452],{"class":331},[321,66805,66806,66808,66810],{"class":323,"line":1401},[321,66807,51486],{"class":331},[321,66809,51958],{"class":51445},[321,66811,51452],{"class":331},[321,66813,66814],{"class":323,"line":1407},[321,66815,66816],{"class":331},"      const form = document.querySelector('form')\n",[321,66818,66819],{"class":323,"line":1421},[321,66820,66821],{"class":331},"      form.addEventListener('submit', function (e) {\n",[321,66823,66824],{"class":323,"line":1427},[321,66825,66826],{"class":331},"        e.preventDefault()\n",[321,66828,66829],{"class":323,"line":1518},[321,66830,64960],{"class":331},[321,66832,66833,66835,66837],{"class":323,"line":1524},[321,66834,51921],{"class":331},[321,66836,51958],{"class":51445},[321,66838,51452],{"class":331},[321,66840,66841,66843,66845],{"class":323,"line":1536},[321,66842,52562],{"class":331},[321,66844,66770],{"class":51445},[321,66846,51452],{"class":331},[321,66848,66849,66851,66853],{"class":323,"line":1818},[321,66850,51930],{"class":331},[321,66852,51945],{"class":51445},[321,66854,51452],{"class":331},[19,66856,66857],{},"点击不在跳转！！！",[292,66859,66861],{"id":66860},"_332-事件委托","3.3.2 事件委托",[19,66863,66864],{},[28,66865],{"alt":30,"src":66866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[312,66868,66870],{"className":50778,"code":66869,"language":50780,"meta":30,"style":30},"\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",[318,66871,66872,66882,66896,66900,66908,66922,66942,66954,66962,66966,66974,66982,66994,67006,67018,67030,67042,67055,67063,67071,67076,67095,67116,67121,67126,67131,67136,67145,67149,67159,67163,67168,67173,67187,67197,67201,67205,67213,67221,67225],{"__ignoreMap":30},[321,66873,66874,66876,66878,66880],{"class":323,"line":324},[321,66875,51442],{"class":331},[321,66877,51446],{"class":51445},[321,66879,51449],{"class":2169},[321,66881,51452],{"class":331},[321,66883,66884,66886,66888,66890,66892,66894],{"class":323,"line":167},[321,66885,1242],{"class":331},[321,66887,50780],{"class":51445},[321,66889,51461],{"class":2169},[321,66891,377],{"class":331},[321,66893,51466],{"class":436},[321,66895,51452],{"class":331},[321,66897,66898],{"class":323,"line":200},[321,66899,2606],{"emptyLinePlaceholder":251},[321,66901,66902,66904,66906],{"class":323,"line":1401},[321,66903,1242],{"class":331},[321,66905,51479],{"class":51445},[321,66907,51452],{"class":331},[321,66909,66910,66912,66914,66916,66918,66920],{"class":323,"line":1407},[321,66911,52289],{"class":331},[321,66913,51489],{"class":51445},[321,66915,51492],{"class":2169},[321,66917,377],{"class":331},[321,66919,51497],{"class":436},[321,66921,51452],{"class":331},[321,66923,66924,66926,66928,66930,66932,66934,66936,66938,66940],{"class":323,"line":1421},[321,66925,52289],{"class":331},[321,66927,51489],{"class":51445},[321,66929,15127],{"class":2169},[321,66931,377],{"class":331},[321,66933,51536],{"class":436},[321,66935,51516],{"class":2169},[321,66937,377],{"class":331},[321,66939,51543],{"class":436},[321,66941,51452],{"class":331},[321,66943,66944,66946,66948,66950,66952],{"class":323,"line":1427},[321,66945,52289],{"class":331},[321,66947,51552],{"class":51445},[321,66949,51555],{"class":331},[321,66951,51552],{"class":51445},[321,66953,51452],{"class":331},[321,66955,66956,66958,66960],{"class":323,"line":1518},[321,66957,51930],{"class":331},[321,66959,51479],{"class":51445},[321,66961,51452],{"class":331},[321,66963,66964],{"class":323,"line":1524},[321,66965,2606],{"emptyLinePlaceholder":251},[321,66967,66968,66970,66972],{"class":323,"line":1536},[321,66969,1242],{"class":331},[321,66971,51945],{"class":51445},[321,66973,51452],{"class":331},[321,66975,66976,66978,66980],{"class":323,"line":1818},[321,66977,52289],{"class":331},[321,66979,1339],{"class":51445},[321,66981,51452],{"class":331},[321,66983,66984,66986,66988,66990,66992],{"class":323,"line":1823},[321,66985,51486],{"class":331},[321,66987,154],{"class":51445},[321,66989,54111],{"class":331},[321,66991,154],{"class":51445},[321,66993,51452],{"class":331},[321,66995,66996,66998,67000,67002,67004],{"class":323,"line":1829},[321,66997,51486],{"class":331},[321,66999,154],{"class":51445},[321,67001,54130],{"class":331},[321,67003,154],{"class":51445},[321,67005,51452],{"class":331},[321,67007,67008,67010,67012,67014,67016],{"class":323,"line":1834},[321,67009,51486],{"class":331},[321,67011,154],{"class":51445},[321,67013,54149],{"class":331},[321,67015,154],{"class":51445},[321,67017,51452],{"class":331},[321,67019,67020,67022,67024,67026,67028],{"class":323,"line":1848},[321,67021,51486],{"class":331},[321,67023,154],{"class":51445},[321,67025,54168],{"class":331},[321,67027,154],{"class":51445},[321,67029,51452],{"class":331},[321,67031,67032,67034,67036,67038,67040],{"class":323,"line":1853},[321,67033,51486],{"class":331},[321,67035,154],{"class":51445},[321,67037,54187],{"class":331},[321,67039,154],{"class":51445},[321,67041,51452],{"class":331},[321,67043,67044,67046,67048,67051,67053],{"class":323,"line":1859},[321,67045,51486],{"class":331},[321,67047,19],{"class":51445},[321,67049,67050],{"class":331},">我不需要变色\u003C\u002F",[321,67052,19],{"class":51445},[321,67054,51452],{"class":331},[321,67056,67057,67059,67061],{"class":323,"line":1880},[321,67058,52562],{"class":331},[321,67060,1339],{"class":51445},[321,67062,51452],{"class":331},[321,67064,67065,67067,67069],{"class":323,"line":1885},[321,67066,52289],{"class":331},[321,67068,51958],{"class":51445},[321,67070,51452],{"class":331},[321,67072,67073],{"class":323,"line":1899},[321,67074,67075],{"class":390},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[321,67077,67078,67080,67082,67084,67086,67088,67090,67093],{"class":323,"line":1904},[321,67079,11428],{"class":327},[321,67081,61437],{"class":380},[321,67083,13771],{"class":327},[321,67085,54541],{"class":331},[321,67087,54544],{"class":2169},[321,67089,332],{"class":331},[321,67091,67092],{"class":436},"'ul'",[321,67094,338],{"class":331},[321,67096,67097,67100,67102,67104,67106,67108,67110,67112,67114],{"class":323,"line":1933},[321,67098,67099],{"class":331},"    ul.",[321,67101,57958],{"class":2169},[321,67103,332],{"class":331},[321,67105,57963],{"class":436},[321,67107,12642],{"class":331},[321,67109,54594],{"class":327},[321,67111,1864],{"class":331},[321,67113,406],{"class":5423},[321,67115,12649],{"class":331},[321,67117,67118],{"class":323,"line":1938},[321,67119,67120],{"class":390},"      \u002F\u002F alert(1)\n",[321,67122,67123],{"class":323,"line":1955},[321,67124,67125],{"class":390},"      \u002F\u002F e.target就是我们点击的对象\n",[321,67127,67128],{"class":323,"line":1960},[321,67129,67130],{"class":390},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[321,67132,67133],{"class":323,"line":1965},[321,67134,67135],{"class":390},"      \u002F\u002F e.target.style.color = 'red'\n",[321,67137,67138,67140,67142],{"class":323,"line":1970},[321,67139,58389],{"class":331},[321,67141,58392],{"class":2169},[321,67143,67144],{"class":331},"(e)\n",[321,67146,67147],{"class":323,"line":1984},[321,67148,2606],{"emptyLinePlaceholder":251},[321,67150,67151,67153,67156],{"class":323,"line":1989},[321,67152,58389],{"class":331},[321,67154,67155],{"class":2169},"dir",[321,67157,67158],{"class":331},"(e.target)\n",[321,67160,67161],{"class":323,"line":2783},[321,67162,2606],{"emptyLinePlaceholder":251},[321,67164,67165],{"class":323,"line":2797},[321,67166,67167],{"class":390},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[321,67169,67170],{"class":323,"line":2805},[321,67171,67172],{"class":390},"      \u002F\u002F 通过tagName来进行判断\n",[321,67174,67175,67177,67180,67182,67185],{"class":323,"line":2810},[321,67176,54625],{"class":327},[321,67178,67179],{"class":331}," (e.target.tagName ",[321,67181,54631],{"class":327},[321,67183,67184],{"class":436}," 'LI'",[321,67186,12649],{"class":331},[321,67188,67189,67192,67194],{"class":323,"line":2816},[321,67190,67191],{"class":331},"        e.target.style.color ",[321,67193,377],{"class":327},[321,67195,67196],{"class":436}," 'red'\n",[321,67198,67199],{"class":323,"line":2822},[321,67200,52543],{"class":331},[321,67202,67203],{"class":323,"line":2827},[321,67204,33606],{"class":331},[321,67206,67207,67209,67211],{"class":323,"line":8155},[321,67208,52562],{"class":331},[321,67210,51958],{"class":51445},[321,67212,51452],{"class":331},[321,67214,67215,67217,67219],{"class":323,"line":8179},[321,67216,51930],{"class":331},[321,67218,51945],{"class":51445},[321,67220,51452],{"class":331},[321,67222,67223],{"class":323,"line":8184},[321,67224,2606],{"emptyLinePlaceholder":251},[321,67226,67227,67229,67231],{"class":323,"line":8190},[321,67228,51930],{"class":331},[321,67230,50780],{"class":51445},[321,67232,51452],{"class":331},[19,67234,67235],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67237,67238],{},"if(e.target.ragName==='P') {}",[19,67240,67241],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67243,67244],{},"通过事件委托的方式实现tab栏切换改造：",[19,67246,67247],{},"一定要记住自定义属性！！！！！！",[19,67249,67250],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67252,67253],{},"id是自定义的属性名",[19,67255,67256],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[312,67258,67260],{"className":50778,"code":67259,"language":50780,"meta":30,"style":30},"\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",[318,67261,67262,67272,67286,67290,67298,67312,67332,67352,67364,67372,67378,67388,67398,67402,67406,67412,67424,67436,67448,67464,67468,67472,67478,67490,67502,67514,67524,67534,67538,67542,67550,67562,67572,67584,67588,67592,67600,67610,67620,67630,67634,67638,67648,67662,67674,67678,67682,67694,67704,67720,67730,67734,67738,67752,67762,67772,67776,67780,67786,67800,67804,67808,67816,67826,67830,67834,67843,67853,67857,67865,67873,67877,67885,67899,67913,67925,67933,67972,68004,68036,68068,68100,68108,68116,68130,68164,68198,68232,68266,68300,68308,68316,68324,68329,68334,68353,68358,68378,68386,68391,68404,68425,68438,68442,68447,68452,68465,68485,68513,68517,68521,68525,68533,68541,68545],{"__ignoreMap":30},[321,67263,67264,67266,67268,67270],{"class":323,"line":324},[321,67265,51442],{"class":331},[321,67267,51446],{"class":51445},[321,67269,51449],{"class":2169},[321,67271,51452],{"class":331},[321,67273,67274,67276,67278,67280,67282,67284],{"class":323,"line":167},[321,67275,1242],{"class":331},[321,67277,50780],{"class":51445},[321,67279,51461],{"class":2169},[321,67281,377],{"class":331},[321,67283,51466],{"class":436},[321,67285,51452],{"class":331},[321,67287,67288],{"class":323,"line":200},[321,67289,2606],{"emptyLinePlaceholder":251},[321,67291,67292,67294,67296],{"class":323,"line":1401},[321,67293,1242],{"class":331},[321,67295,51479],{"class":51445},[321,67297,51452],{"class":331},[321,67299,67300,67302,67304,67306,67308,67310],{"class":323,"line":1407},[321,67301,52289],{"class":331},[321,67303,51489],{"class":51445},[321,67305,51492],{"class":2169},[321,67307,377],{"class":331},[321,67309,51497],{"class":436},[321,67311,59272],{"class":331},[321,67313,67314,67316,67318,67320,67322,67324,67326,67328,67330],{"class":323,"line":1421},[321,67315,52289],{"class":331},[321,67317,51489],{"class":51445},[321,67319,51508],{"class":2169},[321,67321,377],{"class":331},[321,67323,51513],{"class":436},[321,67325,51516],{"class":2169},[321,67327,377],{"class":331},[321,67329,51521],{"class":436},[321,67331,59272],{"class":331},[321,67333,67334,67336,67338,67340,67342,67344,67346,67348,67350],{"class":323,"line":1427},[321,67335,52289],{"class":331},[321,67337,51489],{"class":51445},[321,67339,15127],{"class":2169},[321,67341,377],{"class":331},[321,67343,51536],{"class":436},[321,67345,51516],{"class":2169},[321,67347,377],{"class":331},[321,67349,51543],{"class":436},[321,67351,59272],{"class":331},[321,67353,67354,67356,67358,67360,67362],{"class":323,"line":1518},[321,67355,52289],{"class":331},[321,67357,51552],{"class":51445},[321,67359,63770],{"class":331},[321,67361,51552],{"class":51445},[321,67363,51452],{"class":331},[321,67365,67366,67368,67370],{"class":323,"line":1524},[321,67367,52289],{"class":331},[321,67369,5333],{"class":51445},[321,67371,51452],{"class":331},[321,67373,67374,67376],{"class":323,"line":1536},[321,67375,6610],{"class":51445},[321,67377,15779],{"class":331},[321,67379,67380,67382,67384,67386],{"class":323,"line":1818},[321,67381,54851],{"class":380},[321,67383,51582],{"class":331},[321,67385,523],{"class":380},[321,67387,1497],{"class":331},[321,67389,67390,67392,67394,67396],{"class":323,"line":1823},[321,67391,54840],{"class":380},[321,67393,51582],{"class":331},[321,67395,523],{"class":380},[321,67397,1497],{"class":331},[321,67399,67400],{"class":323,"line":1829},[321,67401,2393],{"class":331},[321,67403,67404],{"class":323,"line":1834},[321,67405,2606],{"emptyLinePlaceholder":251},[321,67407,67408,67410],{"class":323,"line":1848},[321,67409,63821],{"class":2169},[321,67411,15779],{"class":331},[321,67413,67414,67416,67418,67420,67422],{"class":323,"line":1853},[321,67415,54916],{"class":380},[321,67417,51582],{"class":331},[321,67419,63832],{"class":380},[321,67421,51637],{"class":327},[321,67423,1497],{"class":331},[321,67425,67426,67428,67430,67432,67434],{"class":323,"line":1859},[321,67427,54930],{"class":380},[321,67429,51582],{"class":331},[321,67431,63845],{"class":380},[321,67433,51637],{"class":327},[321,67435,1497],{"class":331},[321,67437,67438,67440,67442,67444,67446],{"class":323,"line":1880},[321,67439,54851],{"class":380},[321,67441,51582],{"class":331},[321,67443,1032],{"class":380},[321,67445,51637],{"class":327},[321,67447,1497],{"class":331},[321,67449,67450,67452,67454,67456,67458,67460,67462],{"class":323,"line":1885},[321,67451,62122],{"class":380},[321,67453,51582],{"class":331},[321,67455,549],{"class":380},[321,67457,51637],{"class":327},[321,67459,51666],{"class":380},[321,67461,62389],{"class":380},[321,67463,1497],{"class":331},[321,67465,67466],{"class":323,"line":1899},[321,67467,2393],{"class":331},[321,67469,67470],{"class":323,"line":1904},[321,67471,2606],{"emptyLinePlaceholder":251},[321,67473,67474,67476],{"class":323,"line":1933},[321,67475,63890],{"class":2169},[321,67477,15779],{"class":331},[321,67479,67480,67482,67484,67486,67488],{"class":323,"line":1938},[321,67481,54916],{"class":380},[321,67483,51582],{"class":331},[321,67485,643],{"class":380},[321,67487,660],{"class":327},[321,67489,1497],{"class":331},[321,67491,67492,67494,67496,67498,67500],{"class":323,"line":1955},[321,67493,54930],{"class":380},[321,67495,51582],{"class":331},[321,67497,1239],{"class":380},[321,67499,51637],{"class":327},[321,67501,1497],{"class":331},[321,67503,67504,67506,67508,67510,67512],{"class":323,"line":1960},[321,67505,57504],{"class":380},[321,67507,51582],{"class":331},[321,67509,1239],{"class":380},[321,67511,51637],{"class":327},[321,67513,1497],{"class":331},[321,67515,67516,67518,67520,67522],{"class":323,"line":1965},[321,67517,55154],{"class":380},[321,67519,51582],{"class":331},[321,67521,51622],{"class":380},[321,67523,1497],{"class":331},[321,67525,67526,67528,67530,67532],{"class":323,"line":1970},[321,67527,55165],{"class":380},[321,67529,51582],{"class":331},[321,67531,51813],{"class":380},[321,67533,1497],{"class":331},[321,67535,67536],{"class":323,"line":1984},[321,67537,2393],{"class":331},[321,67539,67540],{"class":323,"line":1989},[321,67541,2606],{"emptyLinePlaceholder":251},[321,67543,67544,67546,67548],{"class":323,"line":2783},[321,67545,63890],{"class":2169},[321,67547,63963],{"class":51445},[321,67549,15779],{"class":331},[321,67551,67552,67554,67556,67558,67560],{"class":323,"line":2797},[321,67553,55067],{"class":380},[321,67555,51582],{"class":331},[321,67557,1132],{"class":380},[321,67559,51637],{"class":327},[321,67561,1497],{"class":331},[321,67563,67564,67566,67568,67570],{"class":323,"line":2805},[321,67565,62479],{"class":380},[321,67567,51582],{"class":331},[321,67569,63986],{"class":380},[321,67571,1497],{"class":331},[321,67573,67574,67576,67578,67580,67582],{"class":323,"line":2810},[321,67575,62145],{"class":380},[321,67577,51582],{"class":331},[321,67579,1032],{"class":380},[321,67581,51637],{"class":327},[321,67583,1497],{"class":331},[321,67585,67586],{"class":323,"line":2816},[321,67587,2393],{"class":331},[321,67589,67590],{"class":323,"line":2822},[321,67591,2606],{"emptyLinePlaceholder":251},[321,67593,67594,67596,67598],{"class":323,"line":2827},[321,67595,63890],{"class":2169},[321,67597,61437],{"class":51445},[321,67599,15779],{"class":331},[321,67601,67602,67604,67606,67608],{"class":323,"line":8155},[321,67603,54877],{"class":380},[321,67605,51582],{"class":331},[321,67607,54882],{"class":380},[321,67609,1497],{"class":331},[321,67611,67612,67614,67616,67618],{"class":323,"line":8179},[321,67613,55154],{"class":380},[321,67615,51582],{"class":331},[321,67617,51622],{"class":380},[321,67619,1497],{"class":331},[321,67621,67622,67624,67626,67628],{"class":323,"line":8184},[321,67623,55165],{"class":380},[321,67625,51582],{"class":331},[321,67627,51725],{"class":380},[321,67629,1497],{"class":331},[321,67631,67632],{"class":323,"line":8190},[321,67633,2393],{"class":331},[321,67635,67636],{"class":323,"line":8217},[321,67637,2606],{"emptyLinePlaceholder":251},[321,67639,67640,67642,67644,67646],{"class":323,"line":8222},[321,67641,63890],{"class":2169},[321,67643,61437],{"class":51445},[321,67645,55220],{"class":51445},[321,67647,15779],{"class":331},[321,67649,67650,67652,67654,67656,67658,67660],{"class":323,"line":8228},[321,67651,54851],{"class":380},[321,67653,51582],{"class":331},[321,67655,523],{"class":380},[321,67657,9157],{"class":380},[321,67659,51637],{"class":327},[321,67661,1497],{"class":331},[321,67663,67664,67666,67668,67670,67672],{"class":323,"line":8240},[321,67665,55067],{"class":380},[321,67667,51582],{"class":331},[321,67669,881],{"class":380},[321,67671,51637],{"class":327},[321,67673,1497],{"class":331},[321,67675,67676],{"class":323,"line":8252},[321,67677,2393],{"class":331},[321,67679,67680],{"class":323,"line":8264},[321,67681,2606],{"emptyLinePlaceholder":251},[321,67683,67684,67686,67688,67690,67692],{"class":323,"line":9923},[321,67685,63890],{"class":2169},[321,67687,61437],{"class":51445},[321,67689,55220],{"class":51445},[321,67691,1605],{"class":51445},[321,67693,15779],{"class":331},[321,67695,67696,67698,67700,67702],{"class":323,"line":9948},[321,67697,64115],{"class":380},[321,67699,51582],{"class":331},[321,67701,54882],{"class":380},[321,67703,1497],{"class":331},[321,67705,67706,67708,67710,67712,67714,67716,67718],{"class":323,"line":9971},[321,67707,62377],{"class":380},[321,67709,51582],{"class":331},[321,67711,409],{"class":380},[321,67713,51637],{"class":327},[321,67715,51666],{"class":380},[321,67717,64136],{"class":380},[321,67719,1497],{"class":331},[321,67721,67722,67724,67726,67728],{"class":323,"line":9995},[321,67723,57561],{"class":380},[321,67725,51582],{"class":331},[321,67727,62514],{"class":380},[321,67729,1497],{"class":331},[321,67731,67732],{"class":323,"line":10000},[321,67733,2393],{"class":331},[321,67735,67736],{"class":323,"line":10005},[321,67737,2606],{"emptyLinePlaceholder":251},[321,67739,67740,67742,67744,67746,67748,67750],{"class":323,"line":10010},[321,67741,63890],{"class":2169},[321,67743,61437],{"class":51445},[321,67745,55220],{"class":51445},[321,67747,1605],{"class":51445},[321,67749,64169],{"class":2169},[321,67751,15779],{"class":331},[321,67753,67754,67756,67758,67760],{"class":323,"line":10019},[321,67755,61936],{"class":380},[321,67757,51582],{"class":331},[321,67759,64180],{"class":380},[321,67761,1497],{"class":331},[321,67763,67764,67766,67768,67770],{"class":323,"line":10024},[321,67765,57561],{"class":380},[321,67767,51582],{"class":331},[321,67769,64180],{"class":380},[321,67771,1497],{"class":331},[321,67773,67774],{"class":323,"line":10030},[321,67775,2393],{"class":331},[321,67777,67778],{"class":323,"line":10051},[321,67779,2606],{"emptyLinePlaceholder":251},[321,67781,67782,67784],{"class":323,"line":10057},[321,67783,64205],{"class":2169},[321,67785,15779],{"class":331},[321,67787,67788,67790,67792,67794,67796,67798],{"class":323,"line":10071},[321,67789,54840],{"class":380},[321,67791,51582],{"class":331},[321,67793,523],{"class":380},[321,67795,64218],{"class":380},[321,67797,51637],{"class":327},[321,67799,1497],{"class":331},[321,67801,67802],{"class":323,"line":10077},[321,67803,2393],{"class":331},[321,67805,67806],{"class":323,"line":10104},[321,67807,2606],{"emptyLinePlaceholder":251},[321,67809,67810,67812,67814],{"class":323,"line":10113},[321,67811,64205],{"class":2169},[321,67813,62319],{"class":2169},[321,67815,15779],{"class":331},[321,67817,67818,67820,67822,67824],{"class":323,"line":10119},[321,67819,55154],{"class":380},[321,67821,51582],{"class":331},[321,67823,54882],{"class":380},[321,67825,1497],{"class":331},[321,67827,67828],{"class":323,"line":10127},[321,67829,2393],{"class":331},[321,67831,67832],{"class":323,"line":10132},[321,67833,2606],{"emptyLinePlaceholder":251},[321,67835,67836,67838,67841],{"class":323,"line":16811},[321,67837,64205],{"class":2169},[321,67839,67840],{"class":2169}," .active",[321,67842,15779],{"class":331},[321,67844,67845,67847,67849,67851],{"class":323,"line":16817},[321,67846,55154],{"class":380},[321,67848,51582],{"class":331},[321,67850,61014],{"class":380},[321,67852,1497],{"class":331},[321,67854,67855],{"class":323,"line":16840},[321,67856,2393],{"class":331},[321,67858,67859,67861,67863],{"class":323,"line":16846},[321,67860,52562],{"class":331},[321,67862,5333],{"class":51445},[321,67864,51452],{"class":331},[321,67866,67867,67869,67871],{"class":323,"line":16869},[321,67868,51930],{"class":331},[321,67870,51479],{"class":51445},[321,67872,51452],{"class":331},[321,67874,67875],{"class":323,"line":16883},[321,67876,2606],{"emptyLinePlaceholder":251},[321,67878,67879,67881,67883],{"class":323,"line":16903},[321,67880,1242],{"class":331},[321,67882,51945],{"class":51445},[321,67884,51452],{"class":331},[321,67886,67887,67889,67891,67893,67895,67897],{"class":323,"line":16909},[321,67888,52289],{"class":331},[321,67890,51756],{"class":51445},[321,67892,53631],{"class":2169},[321,67894,377],{"class":331},[321,67896,64320],{"class":436},[321,67898,51452],{"class":331},[321,67900,67901,67903,67905,67907,67909,67911],{"class":323,"line":16920},[321,67902,51486],{"class":331},[321,67904,51756],{"class":51445},[321,67906,53631],{"class":2169},[321,67908,377],{"class":331},[321,67910,64335],{"class":436},[321,67912,51452],{"class":331},[321,67914,67915,67917,67919,67921,67923],{"class":323,"line":16943},[321,67916,55379],{"class":331},[321,67918,292],{"class":51445},[321,67920,64346],{"class":331},[321,67922,292],{"class":51445},[321,67924,51452],{"class":331},[321,67926,67927,67929,67931],{"class":323,"line":16965},[321,67928,55379],{"class":331},[321,67930,1339],{"class":51445},[321,67932,51452],{"class":331},[321,67934,67935,67937,67939,67941,67943,67945,67947,67949,67951,67953,67955,67957,67959,67962,67964,67966,67968,67970],{"class":323,"line":16970},[321,67936,55447],{"class":331},[321,67938,154],{"class":51445},[321,67940,61197],{"class":331},[321,67942,570],{"class":51445},[321,67944,53631],{"class":2169},[321,67946,377],{"class":331},[321,67948,59851],{"class":436},[321,67950,61202],{"class":2169},[321,67952,377],{"class":331},[321,67954,64381],{"class":436},[321,67956,54096],{"class":2169},[321,67958,377],{"class":331},[321,67960,67961],{"class":436},"\"0\"",[321,67963,64384],{"class":331},[321,67965,570],{"class":51445},[321,67967,55459],{"class":331},[321,67969,154],{"class":51445},[321,67971,51452],{"class":331},[321,67973,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002],{"class":323,"line":16976},[321,67975,55447],{"class":331},[321,67977,154],{"class":51445},[321,67979,61197],{"class":331},[321,67981,570],{"class":51445},[321,67983,61202],{"class":2169},[321,67985,377],{"class":331},[321,67987,64381],{"class":436},[321,67989,54096],{"class":2169},[321,67991,377],{"class":331},[321,67993,3884],{"class":436},[321,67995,64411],{"class":331},[321,67997,570],{"class":51445},[321,67999,55459],{"class":331},[321,68001,154],{"class":51445},[321,68003,51452],{"class":331},[321,68005,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034],{"class":323,"line":16990},[321,68007,55447],{"class":331},[321,68009,154],{"class":51445},[321,68011,61197],{"class":331},[321,68013,570],{"class":51445},[321,68015,61202],{"class":2169},[321,68017,377],{"class":331},[321,68019,64381],{"class":436},[321,68021,54096],{"class":2169},[321,68023,377],{"class":331},[321,68025,3907],{"class":436},[321,68027,64438],{"class":331},[321,68029,570],{"class":51445},[321,68031,55459],{"class":331},[321,68033,154],{"class":51445},[321,68035,51452],{"class":331},[321,68037,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066],{"class":323,"line":17003},[321,68039,55447],{"class":331},[321,68041,154],{"class":51445},[321,68043,61197],{"class":331},[321,68045,570],{"class":51445},[321,68047,61202],{"class":2169},[321,68049,377],{"class":331},[321,68051,64381],{"class":436},[321,68053,54096],{"class":2169},[321,68055,377],{"class":331},[321,68057,3920],{"class":436},[321,68059,64465],{"class":331},[321,68061,570],{"class":51445},[321,68063,55459],{"class":331},[321,68065,154],{"class":51445},[321,68067,51452],{"class":331},[321,68069,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098],{"class":323,"line":17008},[321,68071,55447],{"class":331},[321,68073,154],{"class":51445},[321,68075,61197],{"class":331},[321,68077,570],{"class":51445},[321,68079,61202],{"class":2169},[321,68081,377],{"class":331},[321,68083,64381],{"class":436},[321,68085,54096],{"class":2169},[321,68087,377],{"class":331},[321,68089,3933],{"class":436},[321,68091,64492],{"class":331},[321,68093,570],{"class":51445},[321,68095,55459],{"class":331},[321,68097,154],{"class":51445},[321,68099,51452],{"class":331},[321,68101,68102,68104,68106],{"class":323,"line":17022},[321,68103,55552],{"class":331},[321,68105,1339],{"class":51445},[321,68107,51452],{"class":331},[321,68109,68110,68112,68114],{"class":323,"line":17027},[321,68111,51921],{"class":331},[321,68113,51756],{"class":51445},[321,68115,51452],{"class":331},[321,68117,68118,68120,68122,68124,68126,68128],{"class":323,"line":17033},[321,68119,51486],{"class":331},[321,68121,51756],{"class":51445},[321,68123,53631],{"class":2169},[321,68125,377],{"class":331},[321,68127,64529],{"class":436},[321,68129,51452],{"class":331},[321,68131,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162],{"class":323,"line":17038},[321,68133,55379],{"class":331},[321,68135,51756],{"class":51445},[321,68137,53631],{"class":2169},[321,68139,377],{"class":331},[321,68141,64544],{"class":436},[321,68143,61197],{"class":331},[321,68145,28],{"class":51445},[321,68147,55384],{"class":2169},[321,68149,377],{"class":331},[321,68151,64555],{"class":436},[321,68153,55392],{"class":2169},[321,68155,377],{"class":331},[321,68157,7859],{"class":436},[321,68159,64564],{"class":331},[321,68161,51756],{"class":51445},[321,68163,51452],{"class":331},[321,68165,68166,68168,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192,68194,68196],{"class":323,"line":17052},[321,68167,55379],{"class":331},[321,68169,51756],{"class":51445},[321,68171,53631],{"class":2169},[321,68173,377],{"class":331},[321,68175,62768],{"class":436},[321,68177,61197],{"class":331},[321,68179,28],{"class":51445},[321,68181,55384],{"class":2169},[321,68183,377],{"class":331},[321,68185,64591],{"class":436},[321,68187,55392],{"class":2169},[321,68189,377],{"class":331},[321,68191,7859],{"class":436},[321,68193,64564],{"class":331},[321,68195,51756],{"class":51445},[321,68197,51452],{"class":331},[321,68199,68200,68202,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224,68226,68228,68230],{"class":323,"line":17057},[321,68201,55379],{"class":331},[321,68203,51756],{"class":51445},[321,68205,53631],{"class":2169},[321,68207,377],{"class":331},[321,68209,62768],{"class":436},[321,68211,61197],{"class":331},[321,68213,28],{"class":51445},[321,68215,55384],{"class":2169},[321,68217,377],{"class":331},[321,68219,64626],{"class":436},[321,68221,55392],{"class":2169},[321,68223,377],{"class":331},[321,68225,7859],{"class":436},[321,68227,64564],{"class":331},[321,68229,51756],{"class":51445},[321,68231,51452],{"class":331},[321,68233,68234,68236,68238,68240,68242,68244,68246,68248,68250,68252,68254,68256,68258,68260,68262,68264],{"class":323,"line":17062},[321,68235,55379],{"class":331},[321,68237,51756],{"class":51445},[321,68239,53631],{"class":2169},[321,68241,377],{"class":331},[321,68243,62768],{"class":436},[321,68245,61197],{"class":331},[321,68247,28],{"class":51445},[321,68249,55384],{"class":2169},[321,68251,377],{"class":331},[321,68253,64661],{"class":436},[321,68255,55392],{"class":2169},[321,68257,377],{"class":331},[321,68259,7859],{"class":436},[321,68261,64564],{"class":331},[321,68263,51756],{"class":51445},[321,68265,51452],{"class":331},[321,68267,68268,68270,68272,68274,68276,68278,68280,68282,68284,68286,68288,68290,68292,68294,68296,68298],{"class":323,"line":17076},[321,68269,55379],{"class":331},[321,68271,51756],{"class":51445},[321,68273,53631],{"class":2169},[321,68275,377],{"class":331},[321,68277,62768],{"class":436},[321,68279,61197],{"class":331},[321,68281,28],{"class":51445},[321,68283,55384],{"class":2169},[321,68285,377],{"class":331},[321,68287,64696],{"class":436},[321,68289,55392],{"class":2169},[321,68291,377],{"class":331},[321,68293,7859],{"class":436},[321,68295,64564],{"class":331},[321,68297,51756],{"class":51445},[321,68299,51452],{"class":331},[321,68301,68302,68304,68306],{"class":323,"line":17088},[321,68303,51921],{"class":331},[321,68305,51756],{"class":51445},[321,68307,51452],{"class":331},[321,68309,68310,68312,68314],{"class":323,"line":17093},[321,68311,52562],{"class":331},[321,68313,51756],{"class":51445},[321,68315,51452],{"class":331},[321,68317,68318,68320,68322],{"class":323,"line":17106},[321,68319,52289],{"class":331},[321,68321,51958],{"class":51445},[321,68323,51452],{"class":331},[321,68325,68326],{"class":323,"line":17111},[321,68327,68328],{"class":390},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[321,68330,68331],{"class":323,"line":17116},[321,68332,68333],{"class":390},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[321,68335,68336,68338,68340,68342,68344,68346,68348,68351],{"class":323,"line":17121},[321,68337,11428],{"class":327},[321,68339,61437],{"class":380},[321,68341,13771],{"class":327},[321,68343,54541],{"class":331},[321,68345,54544],{"class":2169},[321,68347,332],{"class":331},[321,68349,68350],{"class":436},"'.tab-nav ul'",[321,68352,338],{"class":331},[321,68354,68355],{"class":323,"line":17134},[321,68356,68357],{"class":390},"    \u002F\u002F 2.添加事件\n",[321,68359,68360,68362,68364,68366,68368,68370,68372,68374,68376],{"class":323,"line":17139},[321,68361,67099],{"class":331},[321,68363,57958],{"class":2169},[321,68365,332],{"class":331},[321,68367,57963],{"class":436},[321,68369,12642],{"class":331},[321,68371,54594],{"class":327},[321,68373,1864],{"class":331},[321,68375,406],{"class":5423},[321,68377,12649],{"class":331},[321,68379,68380,68382,68384],{"class":323,"line":32778},[321,68381,58389],{"class":331},[321,68383,67155],{"class":2169},[321,68385,67158],{"class":331},[321,68387,68388],{"class":323,"line":32784},[321,68389,68390],{"class":390},"      \u002F\u002Fe.targer是我们点击的对象\n",[321,68392,68393,68395,68397,68399,68402],{"class":323,"line":32790},[321,68394,54625],{"class":327},[321,68396,67179],{"class":331},[321,68398,54631],{"class":327},[321,68400,68401],{"class":436}," 'A'",[321,68403,12649],{"class":331},[321,68405,68406,68408,68410,68412,68415,68417,68419,68421,68423],{"class":323,"line":32796},[321,68407,52070],{"class":331},[321,68409,54544],{"class":2169},[321,68411,332],{"class":331},[321,68413,68414],{"class":436},"'.active'",[321,68416,57148],{"class":331},[321,68418,57151],{"class":2169},[321,68420,332],{"class":331},[321,68422,64859],{"class":436},[321,68424,338],{"class":331},[321,68426,68427,68430,68432,68434,68436],{"class":323,"line":32802},[321,68428,68429],{"class":331},"        e.target.classList.",[321,68431,5541],{"class":2169},[321,68433,332],{"class":331},[321,68435,64859],{"class":436},[321,68437,338],{"class":331},[321,68439,68440],{"class":323,"line":32813},[321,68441,2606],{"emptyLinePlaceholder":251},[321,68443,68444],{"class":323,"line":32819},[321,68445,68446],{"class":390},"        \u002F\u002F 下面大盒子模块\n",[321,68448,68449],{"class":323,"line":32839},[321,68450,68451],{"class":390},"        \u002F\u002F console.log(e.target.dataset.id)\n",[321,68453,68454,68456,68458,68460,68462],{"class":323,"line":32845},[321,68455,61415],{"class":327},[321,68457,3238],{"class":380},[321,68459,13771],{"class":327},[321,68461,45711],{"class":327},[321,68463,68464],{"class":331},"e.target.dataset.id\n",[321,68466,68467,68469,68471,68473,68475,68477,68479,68481,68483],{"class":323,"line":32856},[321,68468,52070],{"class":331},[321,68470,54544],{"class":2169},[321,68472,332],{"class":331},[321,68474,64907],{"class":436},[321,68476,57148],{"class":331},[321,68478,57151],{"class":2169},[321,68480,332],{"class":331},[321,68482,64859],{"class":436},[321,68484,338],{"class":331},[321,68486,68487,68489,68491,68493,68495,68497,68499,68501,68503,68505,68507,68509,68511],{"class":323,"line":32862},[321,68488,52070],{"class":331},[321,68490,54544],{"class":2169},[321,68492,332],{"class":331},[321,68494,64933],{"class":436},[321,68496,773],{"class":331},[321,68498,45711],{"class":327},[321,68500,25263],{"class":380},[321,68502,57177],{"class":436},[321,68504,57148],{"class":331},[321,68506,5541],{"class":2169},[321,68508,332],{"class":331},[321,68510,64859],{"class":436},[321,68512,338],{"class":331},[321,68514,68515],{"class":323,"line":32868},[321,68516,2606],{"emptyLinePlaceholder":251},[321,68518,68519],{"class":323,"line":32874},[321,68520,52543],{"class":331},[321,68522,68523],{"class":323,"line":32880},[321,68524,33606],{"class":331},[321,68526,68527,68529,68531],{"class":323,"line":32886},[321,68528,52562],{"class":331},[321,68530,51958],{"class":51445},[321,68532,51452],{"class":331},[321,68534,68535,68537,68539],{"class":323,"line":32892},[321,68536,51930],{"class":331},[321,68538,51945],{"class":51445},[321,68540,51452],{"class":331},[321,68542,68543],{"class":323,"line":32898},[321,68544,2606],{"emptyLinePlaceholder":251},[321,68546,68547,68549,68551],{"class":323,"line":32918},[321,68548,51930],{"class":331},[321,68550,50780],{"class":51445},[321,68552,51452],{"class":331},[292,68554,68556],{"id":68555},"_333-页面加载事件","3.3.3 页面加载事件",[151,68558,68559],{},[154,68560,68561],{},"load",[19,68563,68564],{},[28,68565],{"alt":30,"src":68566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68568,68569],{},"window代表整个窗口，比document还要大",[19,68571,68572],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68574,68575],{},"img.addEventListener('load', function () {",[19,68577,68578],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68580,52609],{},[151,68582,68583],{"start":167},[154,68584,68585],{},"DOMContentLoaded",[19,68587,68588],{},[28,68589],{"alt":30,"src":68590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68592,68593],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[292,68595,68597],{"id":68596},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68599,68600],{},[28,68601],{"alt":30,"src":68602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68604,68605],{},[28,68606],{"alt":30,"src":68607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68609,68610],{},[28,68611],{"alt":30,"src":68612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68614,68615],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68617,68618],{},"获得的是数字型数据，不带单位",[19,68620,68621],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68623,68624],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68626,68627],{},"它是通过document.documentElement来获取",[19,68629,68630],{},[28,68631],{"alt":30,"src":68632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68634,68635],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[292,68637,68639],{"id":68638},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68641,68642],{},[28,68643],{"alt":30,"src":68644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68646,68647],{},[28,68648],{"alt":30,"src":68649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[292,68651,68653],{"id":68652},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68655,68656],{},[28,68657],{"alt":30,"src":68658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68660,68661],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68663,68664],{},[28,68665],{"alt":30,"src":68666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68668,68669],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68671,68672],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68674,68675],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68677,68678],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68680,68681],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68683,68684],{},[28,68685],{"alt":30,"src":68686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68688,68689],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68691,68692],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68694,68695],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68697,68698],{},"e.pageX-box.getBoundingClientRect()",[292,68700,68702],{"id":68701},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68704,68705],{},[28,68706],{"alt":30,"src":68707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68709,68710],{},"这个是相对于视口来说的，它是个方法，不是属性值",[292,68712,68714],{"id":68713},"_338-总结","3.3.8 总结",[19,68716,68717],{},[28,68718],{"alt":30,"src":68719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68721,68722],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68724,68725],{},"修改盒子的宽高只能通过width和height来实现",[292,68727,68729],{"id":68728},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[312,68731,68733],{"className":50778,"code":68732,"language":50780,"meta":30,"style":30},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[318,68734,68735,68740,68745,68750,68755],{"__ignoreMap":30},[321,68736,68737],{"class":323,"line":324},[321,68738,68739],{"class":331},"\u002F* 页面滑动 *\u002F\n",[321,68741,68742],{"class":323,"line":167},[321,68743,68744],{"class":331},"html {\n",[321,68746,68747],{"class":323,"line":200},[321,68748,68749],{"class":331},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[321,68751,68752],{"class":323,"line":1401},[321,68753,68754],{"class":331},"  scroll-behavior: smooth;\n",[321,68756,68757],{"class":323,"line":1407},[321,68758,1771],{"class":331},[19,68760,68761],{},"默认是auto",[292,68763,68765],{"id":68764},"_3310-日期对象","3.3.10 日期对象",[22205,68767,68769],{"id":68768},"_33101-实例化","3.3.10.1 实例化",[19,68771,68772],{},[28,68773],{"alt":30,"src":68774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22205,68776,68778],{"id":68777},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68780,68781],{},[28,68782],{"alt":30,"src":68783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68785,68786],{},"月份+1",[19,68788,68789],{},"老外认为第一天为0，星期天",[19,68791,68792],{},"方法使用的时候必须要跟括号",[19,68794,68795],{},"快速获得日期",[19,68797,68798],{},"\u002F\u002F 得到年月日",[19,68800,68801],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68803,68804],{},"\u002F\u002F 得到当地日期",[19,68806,68807],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68809,68810],{},"\u002F\u002F 得到当地时间",[19,68812,68813],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68815,68816],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68818,68819],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51958,68821,68822],{},"\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,68824,68825],{},"学会去封装函数！",[22205,68827,68829],{"id":68828},"_33103-时间戳","3.3.10.3 时间戳",[19,68831,68832],{},[28,68833],{"alt":30,"src":68834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68836,68837],{},[28,68838],{"alt":30,"src":68839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68841,68842],{},"三种方法记住一个就可以",[292,68844,68846],{"id":68845},"_3311-节点操作","3.3.11 节点操作",[22205,68848,68850],{"id":68849},"_33111-dom节点","3.3.11.1 DOM节点",[19,68852,68853],{},[28,68854],{"alt":30,"src":68855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68857,68858],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22205,68860,68862],{"id":68861},"_33112-查找节点","3.3.11.2 查找节点",[19,68864,68865],{},"前边的document.querySelector()是获取的元素",[19,68867,68868],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68870,68871],{},[28,68872],{"alt":30,"src":68873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[151,68875,68876],{},[154,68877,68878],{},"父节点",[19,68880,68881],{},[28,68882],{"alt":30,"src":68883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[151,68885,68886],{"start":167},[154,68887,68888],{},"子节点",[19,68890,68891],{},[28,68892],{"alt":30,"src":68893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,68895,68896],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,68898,68899],{},"children获得的是伪数组，是亲儿子",[151,68901,68902],{"start":200},[154,68903,68904],{},"兄弟节点",[19,68906,68907],{},[28,68908],{"alt":30,"src":68909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22205,68911,68913],{"id":68912},"_33113-增加节点","3.3.11.3 增加节点",[19,68915,68916],{},[28,68917],{"alt":30,"src":68918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,68920,68921],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,68923,68924],{},[28,68925],{"alt":30,"src":68926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,68928,68929],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,68931,68932],{},"下面是写法的部分展示，就按照下边的格式来写",[19,68934,68935],{},"例：",[51958,68937,68938],{},"\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,68940,68941],{},[28,68942],{"alt":30,"src":68943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,68945,68946],{},"false只克隆标签，里边的内容不会克隆过来",[312,68948,68950],{"className":50778,"code":68949,"language":50780,"meta":30,"style":30},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[318,68951,68952],{"__ignoreMap":30},[321,68953,68954],{"class":323,"line":324},[321,68955,68949],{"class":331},[22205,68957,68959],{"id":68958},"_33114-删除节点","3.3.11.4 删除节点",[19,68961,68962],{},[28,68963],{"alt":30,"src":68964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,68966,68967],{},"父亲删儿子",[19,68969,68970],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[292,68972,68974],{"id":68973},"_3312-m端事件","3.3.12 M端事件",[19,68976,68977],{},"M端就是移动端",[19,68979,68980],{},[28,68981],{"alt":30,"src":68982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[292,68984,68986],{"id":68985},"_3313-插件","3.3.13 插件",[19,68988,68989],{},"要熟悉官网！！！",[19,68991,68992],{},[570,68993,68994],{"href":68994,"rel":68995},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24073],[19,68997,68998],{},[570,68999,69000],{"href":69000,"rel":69001},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24073],[292,69003,69005],{"id":69004},"_3314-学生信息表","3.3.14 学生信息表",[151,69007,69008,69011,69014,69017,69020,69023,69026,69029],{},[154,69009,69010],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[154,69012,69013],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[154,69015,69016],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[154,69018,69019],{},"用好表单元素自带的属性，value,name等",[154,69021,69022],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[154,69024,69025],{},"不要忘记事件对象",[154,69027,69028],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[154,69030,69031],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69033,69034],{},"结构：",[312,69036,69038],{"className":50778,"code":69037,"language":50780,"meta":30,"style":30},"\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",[318,69039,69040,69050,69064,69068,69076,69090,69110,69131,69144,69168,69176,69180,69188,69201,69222,69250,69278,69283,69305,69325,69344,69352,69380,69402,69422,69442,69462,69482,69502,69510,69530,69538,69542,69555,69563,69571,69579,69592,69605,69618,69631,69644,69657,69670,69678,69686,69694,69699,69704,69709,69714,69719,69724,69729,69734,69739,69744,69749,69754,69759,69767,69775,69783,69787,69807,69826,69846,69866,69886,69906,69910,69915,69935,69940,69950,69955,69960,69980,70002,70007,70017,70021,70025,70030,70035,70064,70078,70093,70097,70101,70105,70110,70121,70134,70139,70144,70149,70154,70159,70163,70168,70173,70182,70187,70192,70204,70209,70216,70220,70225,70235,70240,70250,70255,70283,70304,70314,70334,70352,70369,70386,70403,70420,70424,70434,70439,70444,70449,70460,70464,70468,70472,70477,70482,70503,70515,70520,70525,70530,70544,70549,70556,70560,70564,70572,70576,70584,70588],{"__ignoreMap":30},[321,69041,69042,69044,69046,69048],{"class":323,"line":324},[321,69043,51442],{"class":331},[321,69045,51446],{"class":51445},[321,69047,51449],{"class":2169},[321,69049,51452],{"class":331},[321,69051,69052,69054,69056,69058,69060,69062],{"class":323,"line":167},[321,69053,1242],{"class":331},[321,69055,50780],{"class":51445},[321,69057,51461],{"class":2169},[321,69059,377],{"class":331},[321,69061,51466],{"class":436},[321,69063,51452],{"class":331},[321,69065,69066],{"class":323,"line":200},[321,69067,2606],{"emptyLinePlaceholder":251},[321,69069,69070,69072,69074],{"class":323,"line":1401},[321,69071,1242],{"class":331},[321,69073,51479],{"class":51445},[321,69075,51452],{"class":331},[321,69077,69078,69080,69082,69084,69086,69088],{"class":323,"line":1407},[321,69079,52289],{"class":331},[321,69081,51489],{"class":51445},[321,69083,51492],{"class":2169},[321,69085,377],{"class":331},[321,69087,51497],{"class":436},[321,69089,59272],{"class":331},[321,69091,69092,69094,69096,69098,69100,69102,69104,69106,69108],{"class":323,"line":1421},[321,69093,52289],{"class":331},[321,69095,51489],{"class":51445},[321,69097,15127],{"class":2169},[321,69099,377],{"class":331},[321,69101,51536],{"class":436},[321,69103,51516],{"class":2169},[321,69105,377],{"class":331},[321,69107,51543],{"class":436},[321,69109,59272],{"class":331},[321,69111,69112,69114,69116,69118,69120,69122,69124,69126,69129],{"class":323,"line":1427},[321,69113,52289],{"class":331},[321,69115,51489],{"class":51445},[321,69117,51508],{"class":2169},[321,69119,377],{"class":331},[321,69121,51513],{"class":436},[321,69123,51516],{"class":2169},[321,69125,377],{"class":331},[321,69127,69128],{"class":436},"\"ie=edge\"",[321,69130,59272],{"class":331},[321,69132,69133,69135,69137,69140,69142],{"class":323,"line":1518},[321,69134,52289],{"class":331},[321,69136,51552],{"class":51445},[321,69138,69139],{"class":331},">学生信息管理\u003C\u002F",[321,69141,51552],{"class":51445},[321,69143,51452],{"class":331},[321,69145,69146,69148,69151,69154,69156,69159,69161,69163,69166],{"class":323,"line":1524},[321,69147,52289],{"class":331},[321,69149,69150],{"class":51445},"link",[321,69152,69153],{"class":2169}," rel",[321,69155,377],{"class":331},[321,69157,69158],{"class":436},"\"stylesheet\"",[321,69160,61202],{"class":2169},[321,69162,377],{"class":331},[321,69164,69165],{"class":436},"\"css\u002Findex.css\"",[321,69167,59272],{"class":331},[321,69169,69170,69172,69174],{"class":323,"line":1536},[321,69171,51930],{"class":331},[321,69173,51479],{"class":51445},[321,69175,51452],{"class":331},[321,69177,69178],{"class":323,"line":1818},[321,69179,2606],{"emptyLinePlaceholder":251},[321,69181,69182,69184,69186],{"class":323,"line":1823},[321,69183,1242],{"class":331},[321,69185,51945],{"class":51445},[321,69187,51452],{"class":331},[321,69189,69190,69192,69194,69197,69199],{"class":323,"line":1829},[321,69191,52289],{"class":331},[321,69193,10],{"class":51445},[321,69195,69196],{"class":331},">新增学员\u003C\u002F",[321,69198,10],{"class":51445},[321,69200,51452],{"class":331},[321,69202,69203,69205,69207,69209,69211,69213,69216,69218,69220],{"class":323,"line":1834},[321,69204,52289],{"class":331},[321,69206,66770],{"class":51445},[321,69208,53631],{"class":2169},[321,69210,377],{"class":331},[321,69212,62809],{"class":436},[321,69214,69215],{"class":2169}," autocomplete",[321,69217,377],{"class":331},[321,69219,31921],{"class":436},[321,69221,51452],{"class":331},[321,69223,69224,69227,69229,69231,69233,69235,69237,69239,69242,69244,69246,69248],{"class":323,"line":1848},[321,69225,69226],{"class":331},"    姓名：\u003C",[321,69228,53966],{"class":51445},[321,69230,53969],{"class":2169},[321,69232,377],{"class":331},[321,69234,62844],{"class":436},[321,69236,53631],{"class":2169},[321,69238,377],{"class":331},[321,69240,69241],{"class":436},"\"uname\"",[321,69243,15127],{"class":2169},[321,69245,377],{"class":331},[321,69247,69241],{"class":436},[321,69249,59272],{"class":331},[321,69251,69252,69255,69257,69259,69261,69263,69265,69267,69270,69272,69274,69276],{"class":323,"line":1853},[321,69253,69254],{"class":331},"    年龄：\u003C",[321,69256,53966],{"class":51445},[321,69258,53969],{"class":2169},[321,69260,377],{"class":331},[321,69262,62844],{"class":436},[321,69264,53631],{"class":2169},[321,69266,377],{"class":331},[321,69268,69269],{"class":436},"\"age\"",[321,69271,15127],{"class":2169},[321,69273,377],{"class":331},[321,69275,69269],{"class":436},[321,69277,59272],{"class":331},[321,69279,69280],{"class":323,"line":1859},[321,69281,69282],{"class":331},"    性别:\n",[321,69284,69285,69287,69290,69292,69294,69297,69299,69301,69303],{"class":323,"line":1880},[321,69286,51486],{"class":331},[321,69288,69289],{"class":51445},"select",[321,69291,15127],{"class":2169},[321,69293,377],{"class":331},[321,69295,69296],{"class":436},"\"gender\"",[321,69298,53631],{"class":2169},[321,69300,377],{"class":331},[321,69302,69296],{"class":436},[321,69304,51452],{"class":331},[321,69306,69307,69309,69312,69314,69316,69318,69321,69323],{"class":323,"line":1885},[321,69308,55379],{"class":331},[321,69310,69311],{"class":51445},"option",[321,69313,66796],{"class":2169},[321,69315,377],{"class":331},[321,69317,10168],{"class":436},[321,69319,69320],{"class":331},">男\u003C\u002F",[321,69322,69311],{"class":51445},[321,69324,51452],{"class":331},[321,69326,69327,69329,69331,69333,69335,69337,69340,69342],{"class":323,"line":1899},[321,69328,55379],{"class":331},[321,69330,69311],{"class":51445},[321,69332,66796],{"class":2169},[321,69334,377],{"class":331},[321,69336,10237],{"class":436},[321,69338,69339],{"class":331},">女\u003C\u002F",[321,69341,69311],{"class":51445},[321,69343,51452],{"class":331},[321,69345,69346,69348,69350],{"class":323,"line":1904},[321,69347,51921],{"class":331},[321,69349,69289],{"class":51445},[321,69351,51452],{"class":331},[321,69353,69354,69357,69359,69361,69363,69365,69367,69369,69372,69374,69376,69378],{"class":323,"line":1933},[321,69355,69356],{"class":331},"    薪资：\u003C",[321,69358,53966],{"class":51445},[321,69360,53969],{"class":2169},[321,69362,377],{"class":331},[321,69364,62844],{"class":436},[321,69366,53631],{"class":2169},[321,69368,377],{"class":331},[321,69370,69371],{"class":436},"\"salary\"",[321,69373,15127],{"class":2169},[321,69375,377],{"class":331},[321,69377,69371],{"class":436},[321,69379,59272],{"class":331},[321,69381,69382,69385,69387,69389,69391,69394,69396,69398,69400],{"class":323,"line":1938},[321,69383,69384],{"class":331},"    就业城市：\u003C",[321,69386,69289],{"class":51445},[321,69388,15127],{"class":2169},[321,69390,377],{"class":331},[321,69392,69393],{"class":436},"\"city\"",[321,69395,53631],{"class":2169},[321,69397,377],{"class":331},[321,69399,69393],{"class":436},[321,69401,51452],{"class":331},[321,69403,69404,69406,69408,69410,69412,69415,69418,69420],{"class":323,"line":1955},[321,69405,55379],{"class":331},[321,69407,69311],{"class":51445},[321,69409,66796],{"class":2169},[321,69411,377],{"class":331},[321,69413,69414],{"class":436},"\"北京\"",[321,69416,69417],{"class":331},">北京\u003C\u002F",[321,69419,69311],{"class":51445},[321,69421,51452],{"class":331},[321,69423,69424,69426,69428,69430,69432,69435,69438,69440],{"class":323,"line":1960},[321,69425,55379],{"class":331},[321,69427,69311],{"class":51445},[321,69429,66796],{"class":2169},[321,69431,377],{"class":331},[321,69433,69434],{"class":436},"\"上海\"",[321,69436,69437],{"class":331},">上海\u003C\u002F",[321,69439,69311],{"class":51445},[321,69441,51452],{"class":331},[321,69443,69444,69446,69448,69450,69452,69455,69458,69460],{"class":323,"line":1965},[321,69445,55379],{"class":331},[321,69447,69311],{"class":51445},[321,69449,66796],{"class":2169},[321,69451,377],{"class":331},[321,69453,69454],{"class":436},"\"广州\"",[321,69456,69457],{"class":331},">广州\u003C\u002F",[321,69459,69311],{"class":51445},[321,69461,51452],{"class":331},[321,69463,69464,69466,69468,69470,69472,69475,69478,69480],{"class":323,"line":1970},[321,69465,55379],{"class":331},[321,69467,69311],{"class":51445},[321,69469,66796],{"class":2169},[321,69471,377],{"class":331},[321,69473,69474],{"class":436},"\"深圳\"",[321,69476,69477],{"class":331},">深圳\u003C\u002F",[321,69479,69311],{"class":51445},[321,69481,51452],{"class":331},[321,69483,69484,69486,69488,69490,69492,69495,69498,69500],{"class":323,"line":1984},[321,69485,55379],{"class":331},[321,69487,69311],{"class":51445},[321,69489,66796],{"class":2169},[321,69491,377],{"class":331},[321,69493,69494],{"class":436},"\"曹县\"",[321,69496,69497],{"class":331},">曹县\u003C\u002F",[321,69499,69311],{"class":51445},[321,69501,51452],{"class":331},[321,69503,69504,69506,69508],{"class":323,"line":1989},[321,69505,51921],{"class":331},[321,69507,69289],{"class":51445},[321,69509,51452],{"class":331},[321,69511,69512,69514,69516,69518,69520,69523,69526,69528],{"class":323,"line":2783},[321,69513,51486],{"class":331},[321,69515,54032],{"class":51445},[321,69517,53631],{"class":2169},[321,69519,377],{"class":331},[321,69521,69522],{"class":436},"\"add\"",[321,69524,69525],{"class":331},">录入\u003C\u002F",[321,69527,54032],{"class":51445},[321,69529,51452],{"class":331},[321,69531,69532,69534,69536],{"class":323,"line":2797},[321,69533,52562],{"class":331},[321,69535,66770],{"class":51445},[321,69537,51452],{"class":331},[321,69539,69540],{"class":323,"line":2805},[321,69541,2606],{"emptyLinePlaceholder":251},[321,69543,69544,69546,69548,69551,69553],{"class":323,"line":2810},[321,69545,52289],{"class":331},[321,69547,10],{"class":51445},[321,69549,69550],{"class":331},">就业榜\u003C\u002F",[321,69552,10],{"class":51445},[321,69554,51452],{"class":331},[321,69556,69557,69559,69561],{"class":323,"line":2816},[321,69558,52289],{"class":331},[321,69560,469],{"class":51445},[321,69562,51452],{"class":331},[321,69564,69565,69567,69569],{"class":323,"line":2822},[321,69566,51486],{"class":331},[321,69568,472],{"class":51445},[321,69570,51452],{"class":331},[321,69572,69573,69575,69577],{"class":323,"line":2827},[321,69574,55379],{"class":331},[321,69576,475],{"class":51445},[321,69578,51452],{"class":331},[321,69580,69581,69583,69585,69588,69590],{"class":323,"line":8155},[321,69582,55447],{"class":331},[321,69584,478],{"class":51445},[321,69586,69587],{"class":331},">序号\u003C\u002F",[321,69589,478],{"class":51445},[321,69591,51452],{"class":331},[321,69593,69594,69596,69598,69601,69603],{"class":323,"line":8179},[321,69595,55447],{"class":331},[321,69597,478],{"class":51445},[321,69599,69600],{"class":331},">姓名\u003C\u002F",[321,69602,478],{"class":51445},[321,69604,51452],{"class":331},[321,69606,69607,69609,69611,69614,69616],{"class":323,"line":8184},[321,69608,55447],{"class":331},[321,69610,478],{"class":51445},[321,69612,69613],{"class":331},">年龄\u003C\u002F",[321,69615,478],{"class":51445},[321,69617,51452],{"class":331},[321,69619,69620,69622,69624,69627,69629],{"class":323,"line":8190},[321,69621,55447],{"class":331},[321,69623,478],{"class":51445},[321,69625,69626],{"class":331},">性别\u003C\u002F",[321,69628,478],{"class":51445},[321,69630,51452],{"class":331},[321,69632,69633,69635,69637,69640,69642],{"class":323,"line":8217},[321,69634,55447],{"class":331},[321,69636,478],{"class":51445},[321,69638,69639],{"class":331},">薪资\u003C\u002F",[321,69641,478],{"class":51445},[321,69643,51452],{"class":331},[321,69645,69646,69648,69650,69653,69655],{"class":323,"line":8222},[321,69647,55447],{"class":331},[321,69649,478],{"class":51445},[321,69651,69652],{"class":331},">就业城市\u003C\u002F",[321,69654,478],{"class":51445},[321,69656,51452],{"class":331},[321,69658,69659,69661,69663,69666,69668],{"class":323,"line":8228},[321,69660,55447],{"class":331},[321,69662,478],{"class":51445},[321,69664,69665],{"class":331},">操作\u003C\u002F",[321,69667,478],{"class":51445},[321,69669,51452],{"class":331},[321,69671,69672,69674,69676],{"class":323,"line":8240},[321,69673,55552],{"class":331},[321,69675,475],{"class":51445},[321,69677,51452],{"class":331},[321,69679,69680,69682,69684],{"class":323,"line":8252},[321,69681,51921],{"class":331},[321,69683,472],{"class":51445},[321,69685,51452],{"class":331},[321,69687,69688,69690,69692],{"class":323,"line":8264},[321,69689,51486],{"class":331},[321,69691,516],{"class":51445},[321,69693,51452],{"class":331},[321,69695,69696],{"class":323,"line":9923},[321,69697,69698],{"class":390},"      \u003C!-- \n",[321,69700,69701],{"class":323,"line":9948},[321,69702,69703],{"class":390},"        \u003Ctr>\n",[321,69705,69706],{"class":323,"line":9971},[321,69707,69708],{"class":390},"          \u003Ctd>1001\u003C\u002Ftd>\n",[321,69710,69711],{"class":323,"line":9995},[321,69712,69713],{"class":390},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[321,69715,69716],{"class":323,"line":10000},[321,69717,69718],{"class":390},"          \u003Ctd>19\u003C\u002Ftd>\n",[321,69720,69721],{"class":323,"line":10005},[321,69722,69723],{"class":390},"          \u003Ctd>男\u003C\u002Ftd>\n",[321,69725,69726],{"class":323,"line":10010},[321,69727,69728],{"class":390},"          \u003Ctd>15000\u003C\u002Ftd>\n",[321,69730,69731],{"class":323,"line":10019},[321,69732,69733],{"class":390},"          \u003Ctd>上海\u003C\u002Ftd>\n",[321,69735,69736],{"class":323,"line":10024},[321,69737,69738],{"class":390},"          \u003Ctd>\n",[321,69740,69741],{"class":323,"line":10030},[321,69742,69743],{"class":390},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[321,69745,69746],{"class":323,"line":10051},[321,69747,69748],{"class":390},"          \u003C\u002Ftd>\n",[321,69750,69751],{"class":323,"line":10057},[321,69752,69753],{"class":390},"        \u003C\u002Ftr> \n",[321,69755,69756],{"class":323,"line":10071},[321,69757,69758],{"class":390},"        -->\n",[321,69760,69761,69763,69765],{"class":323,"line":10077},[321,69762,51921],{"class":331},[321,69764,516],{"class":51445},[321,69766,51452],{"class":331},[321,69768,69769,69771,69773],{"class":323,"line":10104},[321,69770,52562],{"class":331},[321,69772,469],{"class":51445},[321,69774,51452],{"class":331},[321,69776,69777,69779,69781],{"class":323,"line":10113},[321,69778,52289],{"class":331},[321,69780,51958],{"class":51445},[321,69782,51452],{"class":331},[321,69784,69785],{"class":323,"line":10119},[321,69786,60103],{"class":390},[321,69788,69789,69791,69794,69796,69798,69800,69802,69805],{"class":323,"line":10127},[321,69790,11428],{"class":327},[321,69792,69793],{"class":380}," uname",[321,69795,13771],{"class":327},[321,69797,54541],{"class":331},[321,69799,54544],{"class":2169},[321,69801,332],{"class":331},[321,69803,69804],{"class":436},"'.uname'",[321,69806,338],{"class":331},[321,69808,69809,69811,69813,69815,69817,69819,69821,69824],{"class":323,"line":10132},[321,69810,11428],{"class":327},[321,69812,15896],{"class":380},[321,69814,13771],{"class":327},[321,69816,54541],{"class":331},[321,69818,54544],{"class":2169},[321,69820,332],{"class":331},[321,69822,69823],{"class":436},"'.age'",[321,69825,338],{"class":331},[321,69827,69828,69830,69833,69835,69837,69839,69841,69844],{"class":323,"line":16811},[321,69829,11428],{"class":327},[321,69831,69832],{"class":380}," gender",[321,69834,13771],{"class":327},[321,69836,54541],{"class":331},[321,69838,54544],{"class":2169},[321,69840,332],{"class":331},[321,69842,69843],{"class":436},"'.gender'",[321,69845,338],{"class":331},[321,69847,69848,69850,69853,69855,69857,69859,69861,69864],{"class":323,"line":16817},[321,69849,11428],{"class":327},[321,69851,69852],{"class":380}," salary",[321,69854,13771],{"class":327},[321,69856,54541],{"class":331},[321,69858,54544],{"class":2169},[321,69860,332],{"class":331},[321,69862,69863],{"class":436},"'.salary'",[321,69865,338],{"class":331},[321,69867,69868,69870,69873,69875,69877,69879,69881,69884],{"class":323,"line":16840},[321,69869,11428],{"class":327},[321,69871,69872],{"class":380}," city",[321,69874,13771],{"class":327},[321,69876,54541],{"class":331},[321,69878,54544],{"class":2169},[321,69880,332],{"class":331},[321,69882,69883],{"class":436},"'.city'",[321,69885,338],{"class":331},[321,69887,69888,69890,69893,69895,69897,69899,69901,69904],{"class":323,"line":16846},[321,69889,11428],{"class":327},[321,69891,69892],{"class":380}," tbody",[321,69894,13771],{"class":327},[321,69896,54541],{"class":331},[321,69898,54544],{"class":2169},[321,69900,332],{"class":331},[321,69902,69903],{"class":436},"'tbody'",[321,69905,338],{"class":331},[321,69907,69908],{"class":323,"line":16869},[321,69909,2606],{"emptyLinePlaceholder":251},[321,69911,69912],{"class":323,"line":16883},[321,69913,69914],{"class":390},"    \u002F\u002F 获取所有带有name属性的元素\n",[321,69916,69917,69919,69922,69924,69926,69928,69930,69933],{"class":323,"line":16903},[321,69918,11428],{"class":327},[321,69920,69921],{"class":380}," items",[321,69923,13771],{"class":327},[321,69925,54541],{"class":331},[321,69927,55826],{"class":2169},[321,69929,332],{"class":331},[321,69931,69932],{"class":436},"'[name]'",[321,69934,338],{"class":331},[321,69936,69937],{"class":323,"line":16909},[321,69938,69939],{"class":390},"    \u002F\u002F 声明一个空的数组\n",[321,69941,69942,69944,69946,69948],{"class":323,"line":16920},[321,69943,11428],{"class":327},[321,69945,57840],{"class":380},[321,69947,13771],{"class":327},[321,69949,51983],{"class":331},[321,69951,69952],{"class":323,"line":16943},[321,69953,69954],{"class":390},"    \u002F\u002F 1.录入模块\n",[321,69956,69957],{"class":323,"line":16965},[321,69958,69959],{"class":390},"    \u002F\u002F 1.1这是一个表单提交事件\n",[321,69961,69962,69964,69967,69969,69971,69973,69975,69978],{"class":323,"line":16970},[321,69963,11428],{"class":327},[321,69965,69966],{"class":380}," info",[321,69968,13771],{"class":327},[321,69970,54541],{"class":331},[321,69972,54544],{"class":2169},[321,69974,332],{"class":331},[321,69976,69977],{"class":436},"'.info'",[321,69979,338],{"class":331},[321,69981,69982,69985,69987,69989,69992,69994,69996,69998,70000],{"class":323,"line":16976},[321,69983,69984],{"class":331},"    info.",[321,69986,57958],{"class":2169},[321,69988,332],{"class":331},[321,69990,69991],{"class":436},"'submit'",[321,69993,12642],{"class":331},[321,69995,54594],{"class":327},[321,69997,1864],{"class":331},[321,69999,406],{"class":5423},[321,70001,12649],{"class":331},[321,70003,70004],{"class":323,"line":16990},[321,70005,70006],{"class":390},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[321,70008,70009,70012,70015],{"class":323,"line":17003},[321,70010,70011],{"class":331},"      e.",[321,70013,70014],{"class":2169},"preventDefault",[321,70016,2182],{"class":331},[321,70018,70019],{"class":323,"line":17008},[321,70020,60157],{"class":390},[321,70022,70023],{"class":323,"line":17022},[321,70024,2606],{"emptyLinePlaceholder":251},[321,70026,70027],{"class":323,"line":17027},[321,70028,70029],{"class":390},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[321,70031,70032],{"class":323,"line":17033},[321,70033,70034],{"class":390},"      \u002F\u002F 先遍历循环\n",[321,70036,70037,70039,70041,70043,70045,70047,70049,70051,70053,70056,70058,70060,70062],{"class":323,"line":17038},[321,70038,52429],{"class":327},[321,70040,1864],{"class":331},[321,70042,51992],{"class":327},[321,70044,9645],{"class":331},[321,70046,377],{"class":327},[321,70048,4299],{"class":380},[321,70050,9652],{"class":331},[321,70052,1242],{"class":327},[321,70054,70055],{"class":331}," items.",[321,70057,52113],{"class":380},[321,70059,3420],{"class":331},[321,70061,2498],{"class":327},[321,70063,12649],{"class":331},[321,70065,70066,70068,70071,70073,70076],{"class":323,"line":17052},[321,70067,2703],{"class":327},[321,70069,70070],{"class":331}," (items[i].value ",[321,70072,54631],{"class":327},[321,70074,70075],{"class":436}," ''",[321,70077,12649],{"class":331},[321,70079,70080,70083,70086,70088,70091],{"class":323,"line":17057},[321,70081,70082],{"class":327},"          return",[321,70084,70085],{"class":2169}," alert",[321,70087,332],{"class":331},[321,70089,70090],{"class":436},"'输入内容不能为空'",[321,70092,338],{"class":331},[321,70094,70095],{"class":323,"line":17062},[321,70096,2735],{"class":331},[321,70098,70099],{"class":323,"line":17076},[321,70100,52543],{"class":331},[321,70102,70103],{"class":323,"line":17088},[321,70104,2606],{"emptyLinePlaceholder":251},[321,70106,70107],{"class":323,"line":17093},[321,70108,70109],{"class":390},"      \u002F\u002F 创建新的对象\n",[321,70111,70112,70114,70117,70119],{"class":323,"line":17106},[321,70113,58373],{"class":327},[321,70115,70116],{"class":380}," obj",[321,70118,13771],{"class":327},[321,70120,15779],{"class":331},[321,70122,70123,70126,70128,70130,70132],{"class":323,"line":17111},[321,70124,70125],{"class":331},"        stuID: arr.",[321,70127,52113],{"class":380},[321,70129,45711],{"class":327},[321,70131,25263],{"class":380},[321,70133,31611],{"class":331},[321,70135,70136],{"class":323,"line":17116},[321,70137,70138],{"class":331},"        uname: uname.value,\n",[321,70140,70141],{"class":323,"line":17121},[321,70142,70143],{"class":331},"        age: age.value,\n",[321,70145,70146],{"class":323,"line":17134},[321,70147,70148],{"class":331},"        gender: gender.value,\n",[321,70150,70151],{"class":323,"line":17139},[321,70152,70153],{"class":331},"        salary: salary.value,\n",[321,70155,70156],{"class":323,"line":32778},[321,70157,70158],{"class":331},"        city: city.value\n",[321,70160,70161],{"class":323,"line":32784},[321,70162,52543],{"class":331},[321,70164,70165],{"class":323,"line":32790},[321,70166,70167],{"class":390},"      \u002F\u002F console.log(obj);\n",[321,70169,70170],{"class":323,"line":32796},[321,70171,70172],{"class":390},"      \u002F\u002F 追加到数组里面\n",[321,70174,70175,70177,70179],{"class":323,"line":32802},[321,70176,58152],{"class":331},[321,70178,52029],{"class":2169},[321,70180,70181],{"class":331},"(obj)\n",[321,70183,70184],{"class":323,"line":32813},[321,70185,70186],{"class":390},"      \u002F\u002F console.log(arr);\n",[321,70188,70189],{"class":323,"line":32819},[321,70190,70191],{"class":390},"      \u002F\u002F 清空表单  reset重置表单\n",[321,70193,70194,70197,70199,70202],{"class":323,"line":32839},[321,70195,70196],{"class":380},"      this",[321,70198,890],{"class":331},[321,70200,70201],{"class":2169},"reset",[321,70203,2182],{"class":331},[321,70205,70206],{"class":323,"line":32845},[321,70207,70208],{"class":390},"      \u002F\u002F 调用渲染函数\n",[321,70210,70211,70214],{"class":323,"line":32856},[321,70212,70213],{"class":2169},"      render",[321,70215,2182],{"class":331},[321,70217,70218],{"class":323,"line":32862},[321,70219,33606],{"class":331},[321,70221,70222],{"class":323,"line":32868},[321,70223,70224],{"class":390},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[321,70226,70227,70230,70233],{"class":323,"line":32874},[321,70228,70229],{"class":327},"    function",[321,70231,70232],{"class":2169}," render",[321,70234,11060],{"class":331},[321,70236,70237],{"class":323,"line":32880},[321,70238,70239],{"class":390},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[321,70241,70242,70245,70247],{"class":323,"line":32886},[321,70243,70244],{"class":331},"      tbody.innerHTML ",[321,70246,377],{"class":327},[321,70248,70249],{"class":436}," ''\n",[321,70251,70252],{"class":323,"line":32892},[321,70253,70254],{"class":390},"      \u002F\u002F 遍历数组\n",[321,70256,70257,70259,70261,70263,70265,70267,70269,70271,70273,70275,70277,70279,70281],{"class":323,"line":32898},[321,70258,52429],{"class":327},[321,70260,1864],{"class":331},[321,70262,51992],{"class":327},[321,70264,9645],{"class":331},[321,70266,377],{"class":327},[321,70268,4299],{"class":380},[321,70270,9652],{"class":331},[321,70272,1242],{"class":327},[321,70274,52110],{"class":331},[321,70276,52113],{"class":380},[321,70278,3420],{"class":331},[321,70280,2498],{"class":327},[321,70282,12649],{"class":331},[321,70284,70285,70287,70290,70292,70294,70297,70299,70302],{"class":323,"line":32918},[321,70286,61415],{"class":327},[321,70288,70289],{"class":380}," tr",[321,70291,13771],{"class":327},[321,70293,54541],{"class":331},[321,70295,70296],{"class":2169},"createElement",[321,70298,332],{"class":331},[321,70300,70301],{"class":436},"'tr'",[321,70303,338],{"class":331},[321,70305,70306,70309,70311],{"class":323,"line":32924},[321,70307,70308],{"class":331},"        tr.innerHTML ",[321,70310,377],{"class":327},[321,70312,70313],{"class":436}," `\n",[321,70315,70316,70319,70321,70323,70325,70328,70331],{"class":323,"line":32940},[321,70317,70318],{"class":436},"        \u003Ctd>${",[321,70320,4086],{"class":331},[321,70322,1222],{"class":436},[321,70324,773],{"class":331},[321,70326,70327],{"class":436},"].",[321,70329,70330],{"class":331},"stuID",[321,70332,70333],{"class":436},"}\u003C\u002Ftd>\n",[321,70335,70336,70339,70341,70343,70345,70347,70350],{"class":323,"line":32946},[321,70337,70338],{"class":436},"          \u003Ctd>${",[321,70340,4086],{"class":331},[321,70342,1222],{"class":436},[321,70344,773],{"class":331},[321,70346,70327],{"class":436},[321,70348,70349],{"class":331},"uname",[321,70351,70333],{"class":436},[321,70353,70354,70356,70358,70360,70362,70364,70367],{"class":323,"line":32960},[321,70355,70338],{"class":436},[321,70357,4086],{"class":331},[321,70359,1222],{"class":436},[321,70361,773],{"class":331},[321,70363,70327],{"class":436},[321,70365,70366],{"class":331},"age",[321,70368,70333],{"class":436},[321,70370,70371,70373,70375,70377,70379,70381,70384],{"class":323,"line":32966},[321,70372,70338],{"class":436},[321,70374,4086],{"class":331},[321,70376,1222],{"class":436},[321,70378,773],{"class":331},[321,70380,70327],{"class":436},[321,70382,70383],{"class":331},"gender",[321,70385,70333],{"class":436},[321,70387,70388,70390,70392,70394,70396,70398,70401],{"class":323,"line":32981},[321,70389,70338],{"class":436},[321,70391,4086],{"class":331},[321,70393,1222],{"class":436},[321,70395,773],{"class":331},[321,70397,70327],{"class":436},[321,70399,70400],{"class":331},"salary",[321,70402,70333],{"class":436},[321,70404,70405,70407,70409,70411,70413,70415,70418],{"class":323,"line":32987},[321,70406,70338],{"class":436},[321,70408,4086],{"class":331},[321,70410,1222],{"class":436},[321,70412,773],{"class":331},[321,70414,70327],{"class":436},[321,70416,70417],{"class":331},"city",[321,70419,70333],{"class":436},[321,70421,70422],{"class":323,"line":32996},[321,70423,69738],{"class":436},[321,70425,70426,70429,70431],{"class":323,"line":33002},[321,70427,70428],{"class":436},"            \u003Ca href=\"javascript:\" data-id=${",[321,70430,773],{"class":331},[321,70432,70433],{"class":436},"}>删除\u003C\u002Fa>\n",[321,70435,70436],{"class":323,"line":33011},[321,70437,70438],{"class":436},"          \u003C\u002Ftd> \n",[321,70440,70441],{"class":323,"line":33017},[321,70442,70443],{"class":436},"          `\n",[321,70445,70446],{"class":323,"line":33023},[321,70447,70448],{"class":390},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[321,70450,70451,70454,70457],{"class":323,"line":33032},[321,70452,70453],{"class":331},"        tbody.",[321,70455,70456],{"class":2169},"appendChild",[321,70458,70459],{"class":331},"(tr)\n",[321,70461,70462],{"class":323,"line":33038},[321,70463,52543],{"class":331},[321,70465,70466],{"class":323,"line":33049},[321,70467,2393],{"class":331},[321,70469,70470],{"class":323,"line":33055},[321,70471,2606],{"emptyLinePlaceholder":251},[321,70473,70474],{"class":323,"line":33074},[321,70475,70476],{"class":390},"    \u002F\u002F 3.删除委托\n",[321,70478,70479],{"class":323,"line":33080},[321,70480,70481],{"class":390},"    \u002F\u002F 3.1 事件委托 tbody\n",[321,70483,70484,70487,70489,70491,70493,70495,70497,70499,70501],{"class":323,"line":33091},[321,70485,70486],{"class":331},"    tbody.",[321,70488,57958],{"class":2169},[321,70490,332],{"class":331},[321,70492,57963],{"class":436},[321,70494,12642],{"class":331},[321,70496,54594],{"class":327},[321,70498,1864],{"class":331},[321,70500,406],{"class":5423},[321,70502,12649],{"class":331},[321,70504,70505,70507,70509,70511,70513],{"class":323,"line":33097},[321,70506,54625],{"class":327},[321,70508,67179],{"class":331},[321,70510,54631],{"class":327},[321,70512,68401],{"class":436},[321,70514,12649],{"class":331},[321,70516,70517],{"class":323,"line":33117},[321,70518,70519],{"class":390},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[321,70521,70522],{"class":323,"line":33133},[321,70523,70524],{"class":390},"        \u002F\u002F console.log(e.target.dataset.id);\n",[321,70526,70527],{"class":323,"line":33139},[321,70528,70529],{"class":390},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[321,70531,70532,70535,70537,70540,70542],{"class":323,"line":33153},[321,70533,70534],{"class":331},"        arr.",[321,70536,58155],{"class":2169},[321,70538,70539],{"class":331},"(e.target.dataset.id, ",[321,70541,549],{"class":380},[321,70543,338],{"class":331},[321,70545,70546],{"class":323,"line":33159},[321,70547,70548],{"class":390},"        \u002F\u002F 重新渲染一次\n",[321,70550,70551,70554],{"class":323,"line":33165},[321,70552,70553],{"class":2169},"        render",[321,70555,2182],{"class":331},[321,70557,70558],{"class":323,"line":33176},[321,70559,52543],{"class":331},[321,70561,70562],{"class":323,"line":33182},[321,70563,33606],{"class":331},[321,70565,70566,70568,70570],{"class":323,"line":33188},[321,70567,52562],{"class":331},[321,70569,51958],{"class":51445},[321,70571,51452],{"class":331},[321,70573,70574],{"class":323,"line":33198},[321,70575,2606],{"emptyLinePlaceholder":251},[321,70577,70578,70580,70582],{"class":323,"line":33204},[321,70579,51930],{"class":331},[321,70581,51945],{"class":51445},[321,70583,51452],{"class":331},[321,70585,70586],{"class":323,"line":33215},[321,70587,2606],{"emptyLinePlaceholder":251},[321,70589,70590,70592,70594],{"class":323,"line":33221},[321,70591,51930],{"class":331},[321,70593,50780],{"class":51445},[321,70595,51452],{"class":331},[19,70597,70598],{},"样式：",[312,70600,70604],{"className":70601,"code":70602,"language":70603,"meta":30,"style":30},"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",[318,70605,70606,70611,70621,70630,70634,70638,70643,70653,70658,70662,70667,70677,70682,70691,70695,70699,70704,70709,70719,70729,70734,70738,70743,70752,70762,70767,70777,70787,70791,70796,70804,70808,70813,70818,70823,70831,70840,70844,70849,70858,70862,70867,70876,70880,70885,70894,70903,70911,70915,70920,70929,70939,70948,70958,70964,70973,70983,70993,70997,71002,71011,71019,71029,71037,71046,71055,71065,71073,71077,71082,71091],{"__ignoreMap":30},[321,70607,70608],{"class":323,"line":324},[321,70609,70610],{"class":331},"* {\n",[321,70612,70613,70616,70618],{"class":323,"line":167},[321,70614,70615],{"class":51445},"  margin",[321,70617,51582],{"class":331},[321,70619,70620],{"class":436},"0;\n",[321,70622,70623,70626,70628],{"class":323,"line":200},[321,70624,70625],{"class":436},"  padding",[321,70627,51582],{"class":331},[321,70629,70620],{"class":436},[321,70631,70632],{"class":323,"line":1401},[321,70633,1771],{"class":331},[321,70635,70636],{"class":323,"line":1407},[321,70637,2606],{"emptyLinePlaceholder":251},[321,70639,70640],{"class":323,"line":1421},[321,70641,70642],{"class":436},"a {\n",[321,70644,70645,70648,70650],{"class":323,"line":1427},[321,70646,70647],{"class":51445},"  text-decoration",[321,70649,51582],{"class":331},[321,70651,70652],{"class":436},"none;\n",[321,70654,70655],{"class":323,"line":1518},[321,70656,70657],{"class":436},"  color:#721c24;\n",[321,70659,70660],{"class":323,"line":1524},[321,70661,1771],{"class":331},[321,70663,70664],{"class":323,"line":1536},[321,70665,70666],{"class":436},"h1 {\n",[321,70668,70669,70672,70674],{"class":323,"line":1818},[321,70670,70671],{"class":51445},"  text-align",[321,70673,51582],{"class":331},[321,70675,70676],{"class":436},"center;\n",[321,70678,70679],{"class":323,"line":1823},[321,70680,70681],{"class":436},"  color:#333;\n",[321,70683,70684,70686,70688],{"class":323,"line":1829},[321,70685,70615],{"class":51445},[321,70687,51582],{"class":331},[321,70689,70690],{"class":436},"20px 0;\n",[321,70692,70693],{"class":323,"line":1834},[321,70694,2880],{"class":331},[321,70696,70697],{"class":323,"line":1848},[321,70698,1771],{"class":331},[321,70700,70701],{"class":323,"line":1853},[321,70702,70703],{"class":436},"table {\n",[321,70705,70706],{"class":323,"line":1859},[321,70707,70708],{"class":436},"  margin:0 auto;\n",[321,70710,70711,70714,70716],{"class":323,"line":1880},[321,70712,70713],{"class":51445},"  width",[321,70715,51582],{"class":331},[321,70717,70718],{"class":436},"800px;\n",[321,70720,70721,70724,70726],{"class":323,"line":1885},[321,70722,70723],{"class":51445},"  border-collapse",[321,70725,51582],{"class":331},[321,70727,70728],{"class":436},"collapse;\n",[321,70730,70731],{"class":323,"line":1899},[321,70732,70733],{"class":436},"  color:#004085;\n",[321,70735,70736],{"class":323,"line":1904},[321,70737,1771],{"class":331},[321,70739,70740],{"class":323,"line":1933},[321,70741,70742],{"class":436},"th {\n",[321,70744,70745,70747,70749],{"class":323,"line":1938},[321,70746,70625],{"class":51445},[321,70748,51582],{"class":331},[321,70750,70751],{"class":436},"10px;\n",[321,70753,70754,70757,70759],{"class":323,"line":1955},[321,70755,70756],{"class":51445},"  background",[321,70758,51582],{"class":331},[321,70760,70761],{"class":390},"#cfe5ff;\n",[321,70763,70764],{"class":323,"line":1960},[321,70765,70766],{"class":331},"  \n",[321,70768,70769,70772,70774],{"class":323,"line":1965},[321,70770,70771],{"class":51445},"  font-size",[321,70773,51582],{"class":331},[321,70775,70776],{"class":436},"20px;\n",[321,70778,70779,70782,70784],{"class":323,"line":1970},[321,70780,70781],{"class":51445},"  font-weight",[321,70783,51582],{"class":331},[321,70785,70786],{"class":436},"400;\n",[321,70788,70789],{"class":323,"line":1984},[321,70790,1771],{"class":331},[321,70792,70793],{"class":323,"line":1989},[321,70794,70795],{"class":436},"td,th {\n",[321,70797,70798,70801],{"class":323,"line":2783},[321,70799,70800],{"class":436},"  border:1px solid",[321,70802,70803],{"class":390}," #b8daff;\n",[321,70805,70806],{"class":323,"line":2797},[321,70807,1771],{"class":331},[321,70809,70810],{"class":323,"line":2805},[321,70811,70812],{"class":436},"td {\n",[321,70814,70815],{"class":323,"line":2810},[321,70816,70817],{"class":436},"  padding:10px;\n",[321,70819,70820],{"class":323,"line":2816},[321,70821,70822],{"class":436},"  color:#666;\n",[321,70824,70825,70827,70829],{"class":323,"line":2822},[321,70826,70671],{"class":51445},[321,70828,51582],{"class":331},[321,70830,70676],{"class":436},[321,70832,70833,70835,70837],{"class":323,"line":2827},[321,70834,70771],{"class":51445},[321,70836,51582],{"class":331},[321,70838,70839],{"class":436},"16px;\n",[321,70841,70842],{"class":323,"line":8155},[321,70843,1771],{"class":331},[321,70845,70846],{"class":323,"line":8179},[321,70847,70848],{"class":436},"tbody tr {\n",[321,70850,70851,70853,70855],{"class":323,"line":8184},[321,70852,70756],{"class":51445},[321,70854,51582],{"class":331},[321,70856,70857],{"class":390},"#fff;\n",[321,70859,70860],{"class":323,"line":8190},[321,70861,1771],{"class":331},[321,70863,70864],{"class":323,"line":8217},[321,70865,70866],{"class":436},"tbody tr:hover {\n",[321,70868,70869,70871,70873],{"class":323,"line":8222},[321,70870,70756],{"class":51445},[321,70872,51582],{"class":331},[321,70874,70875],{"class":390},"#e1ecf8;\n",[321,70877,70878],{"class":323,"line":8228},[321,70879,1771],{"class":331},[321,70881,70882],{"class":323,"line":8240},[321,70883,70884],{"class":436},".info {\n",[321,70886,70887,70889,70891],{"class":323,"line":8252},[321,70888,70713],{"class":51445},[321,70890,51582],{"class":331},[321,70892,70893],{"class":436},"900px;\n",[321,70895,70896,70898,70900],{"class":323,"line":8264},[321,70897,70615],{"class":51445},[321,70899,51582],{"class":331},[321,70901,70902],{"class":436},"50px auto;\n",[321,70904,70905,70907,70909],{"class":323,"line":9923},[321,70906,70671],{"class":51445},[321,70908,51582],{"class":331},[321,70910,70676],{"class":436},[321,70912,70913],{"class":323,"line":9948},[321,70914,1771],{"class":331},[321,70916,70917],{"class":323,"line":9971},[321,70918,70919],{"class":436},".info  input, .info select {\n",[321,70921,70922,70924,70926],{"class":323,"line":9995},[321,70923,70713],{"class":51445},[321,70925,51582],{"class":331},[321,70927,70928],{"class":436},"80px;\n",[321,70930,70931,70934,70936],{"class":323,"line":10000},[321,70932,70933],{"class":51445},"  height",[321,70935,51582],{"class":331},[321,70937,70938],{"class":436},"27px;\n",[321,70940,70941,70944,70946],{"class":323,"line":10005},[321,70942,70943],{"class":51445},"  outline",[321,70945,51582],{"class":331},[321,70947,70652],{"class":436},[321,70949,70950,70953,70955],{"class":323,"line":10010},[321,70951,70952],{"class":51445},"  border-radius",[321,70954,51582],{"class":331},[321,70956,70957],{"class":436},"5px;\n",[321,70959,70960,70962],{"class":323,"line":10019},[321,70961,70800],{"class":436},[321,70963,70803],{"class":390},[321,70965,70966,70969,70971],{"class":323,"line":10024},[321,70967,70968],{"class":51445},"  padding-left",[321,70970,51582],{"class":331},[321,70972,70957],{"class":436},[321,70974,70975,70978,70980],{"class":323,"line":10030},[321,70976,70977],{"class":51445},"  box-sizing",[321,70979,51582],{"class":331},[321,70981,70982],{"class":436},"border-box;\n",[321,70984,70985,70988,70990],{"class":323,"line":10051},[321,70986,70987],{"class":51445},"  margin-right",[321,70989,51582],{"class":331},[321,70991,70992],{"class":436},"15px;\n",[321,70994,70995],{"class":323,"line":10057},[321,70996,1771],{"class":331},[321,70998,70999],{"class":323,"line":10071},[321,71000,71001],{"class":436},".info button {\n",[321,71003,71004,71006,71008],{"class":323,"line":10077},[321,71005,70713],{"class":51445},[321,71007,51582],{"class":331},[321,71009,71010],{"class":436},"60px;\n",[321,71012,71013,71015,71017],{"class":323,"line":10104},[321,71014,70933],{"class":51445},[321,71016,51582],{"class":331},[321,71018,70938],{"class":436},[321,71020,71021,71024,71026],{"class":323,"line":10113},[321,71022,71023],{"class":51445},"  background-color",[321,71025,51582],{"class":331},[321,71027,71028],{"class":390},"#004085;\n",[321,71030,71031,71033,71035],{"class":323,"line":10119},[321,71032,70943],{"class":51445},[321,71034,51582],{"class":331},[321,71036,70652],{"class":436},[321,71038,71039,71042,71044],{"class":323,"line":10127},[321,71040,71041],{"class":51445},"  border",[321,71043,51582],{"class":331},[321,71045,70620],{"class":436},[321,71047,71048,71051,71053],{"class":323,"line":10132},[321,71049,71050],{"class":51445},"  color",[321,71052,51582],{"class":331},[321,71054,70857],{"class":390},[321,71056,71057,71060,71062],{"class":323,"line":16811},[321,71058,71059],{"class":51445},"  cursor",[321,71061,51582],{"class":331},[321,71063,71064],{"class":436},"pointer;\n",[321,71066,71067,71069,71071],{"class":323,"line":16817},[321,71068,70952],{"class":51445},[321,71070,51582],{"class":331},[321,71072,70957],{"class":436},[321,71074,71075],{"class":323,"line":16840},[321,71076,1771],{"class":331},[321,71078,71079],{"class":323,"line":16846},[321,71080,71081],{"class":436},".info .age {\n",[321,71083,71084,71086,71088],{"class":323,"line":16869},[321,71085,70713],{"class":51445},[321,71087,51582],{"class":331},[321,71089,71090],{"class":436},"50px;\n",[321,71092,71093],{"class":323,"line":16883},[321,71094,1771],{"class":331},[19,71096,71097],{},"思路：",[19,71099,71100],{},[28,71101],{"alt":30,"src":71102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71104,71105],{},[28,71106],{"alt":30,"src":71107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71109,71110],{},[28,71111],{"alt":30,"src":71112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[292,71114,71116],{"id":71115},"_3315-重绘回流","3.3.15 重绘回流",[19,71118,71119],{},[28,71120],{"alt":30,"src":71121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71123,71124],{},[28,71125],{"alt":30,"src":71126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71128,71129],{},[28,71130],{"alt":30,"src":71131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71133,71135],{"id":71134},"_34-bom","3.4 BOM",[19,71137,71138],{},[28,71139],{"alt":30,"src":71140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71142,71143],{},"平时写的document省略了window而已，实际上是window.document",[19,71145,71146],{},"函数也是这样，调用的时候实际为window.fn()",[19,71148,71149],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71151,71152],{},"window大部分情况下可以省略",[292,71154,71156],{"id":71155},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71158,71159],{},"只执行一次",[19,71161,71162],{},[28,71163],{"alt":30,"src":71164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71166,71167],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71169,71170],{},[28,71171],{"alt":30,"src":71172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[292,71174,71176],{"id":71175},"_342-js执行机制","3.4.2 JS执行机制",[19,71178,71179],{},[28,71180],{"alt":30,"src":71181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71183,71184],{},"两个的结果都是1111 3333 2222",[19,71186,71187],{},[28,71188],{"alt":30,"src":71189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71191,71192],{},[28,71193],{"alt":30,"src":71194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71196,71197],{},[28,71198],{"alt":30,"src":71199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71201,71202],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71204,71205],{},"工作流程：",[19,71207,71208],{},[28,71209],{"alt":30,"src":71210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71212,71213],{},[28,71214],{"alt":30,"src":71215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71217,71218],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71220,71221],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[292,71223,71225],{"id":71224},"_343-location对象","3.4.3 location对象",[19,71227,71228],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71230,71231],{},[28,71232],{"alt":30,"src":71233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71235,71236],{},"href可以跳转页面",[151,71238,71239],{},[154,71240,71241],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71243,71244],{},"search得到提交信息之后网站后边的地址",[19,71246,71247],{},[28,71248],{"alt":30,"src":71249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71251,71252],{},[28,71253],{"alt":30,"src":71254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[151,71256,71257],{"start":167},[154,71258,71259],{},"hash:这个获取单页面应用#后边的地址",[19,71261,71262],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71264,71265],{},[28,71266],{"alt":30,"src":71267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[312,71269,71271],{"className":53212,"code":71270,"language":53214,"meta":30,"style":30},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[318,71272,71273,71293,71313],{"__ignoreMap":30},[321,71274,71275,71277,71279,71281,71283,71286,71289,71291],{"class":323,"line":324},[321,71276,52289],{"class":331},[321,71278,570],{"class":51445},[321,71280,61202],{"class":2169},[321,71282,377],{"class":331},[321,71284,71285],{"class":436},"\"#\u002Fmy\"",[321,71287,71288],{"class":331},">我的\u003C\u002F",[321,71290,570],{"class":51445},[321,71292,51452],{"class":331},[321,71294,71295,71297,71299,71301,71303,71306,71309,71311],{"class":323,"line":167},[321,71296,52289],{"class":331},[321,71298,570],{"class":51445},[321,71300,61202],{"class":2169},[321,71302,377],{"class":331},[321,71304,71305],{"class":436},"\"#\u002Ffriend\"",[321,71307,71308],{"class":331},">关注\u003C\u002F",[321,71310,570],{"class":51445},[321,71312,51452],{"class":331},[321,71314,71315,71317,71319,71321,71323,71326,71329,71331],{"class":323,"line":200},[321,71316,52289],{"class":331},[321,71318,570],{"class":51445},[321,71320,61202],{"class":2169},[321,71322,377],{"class":331},[321,71324,71325],{"class":436},"\"#\u002Fdownload\"",[321,71327,71328],{"class":331},">下载\u003C\u002F",[321,71330,570],{"class":51445},[321,71332,51452],{"class":331},[19,71334,71335],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[151,71337,71338],{"start":200},[154,71339,71340,71341,71343,71344,71346],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53861,71342],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53861,71345],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[292,71348,71350],{"id":71349},"_345-navigator对象","3.4.5 navigator对象",[19,71352,71353],{},[28,71354],{"alt":30,"src":71355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[312,71357,71361],{"className":71358,"code":71359,"language":71360,"meta":30,"style":30},"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",[318,71362,71363,71368,71379,71391,71396,71447,71488,71493,71506,71518,71523],{"__ignoreMap":30},[321,71364,71365],{"class":323,"line":324},[321,71366,71367],{"class":390},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[321,71369,71370,71372,71374,71376],{"class":323,"line":167},[321,71371,558],{"class":327},[321,71373,332],{"class":331},[321,71375,54594],{"class":327},[321,71377,71378],{"class":331}," () { \n",[321,71380,71381,71383,71386,71388],{"class":323,"line":200},[321,71382,6999],{"class":327},[321,71384,71385],{"class":380}," userAgent",[321,71387,13771],{"class":327},[321,71389,71390],{"class":331}," navigator.userAgent \n",[321,71392,71393],{"class":323,"line":1401},[321,71394,71395],{"class":390},"\u002F\u002F 验证是否为Android或iPhone \n",[321,71397,71398,71400,71403,71405,71408,71411,71413,71415,71418,71420,71423,71427,71429,71431,71433,71436,71438,71440,71442,71444],{"class":323,"line":1407},[321,71399,6999],{"class":327},[321,71401,71402],{"class":380}," android",[321,71404,13771],{"class":327},[321,71406,71407],{"class":331}," userAgent.",[321,71409,71410],{"class":2169},"match",[321,71412,332],{"class":331},[321,71414,916],{"class":436},[321,71416,71417],{"class":48122},"(Android);",[321,71419,1318],{"class":327},[321,71421,71422],{"class":380},"[\\s",[321,71424,71426],{"class":71425},"snhLl","\\\u002F",[321,71428,1272],{"class":380},[321,71430,813],{"class":327},[321,71432,332],{"class":48122},[321,71434,71435],{"class":380},"[\\d.]",[321,71437,813],{"class":327},[321,71439,761],{"class":48122},[321,71441,1318],{"class":327},[321,71443,916],{"class":436},[321,71445,71446],{"class":331},") \n",[321,71448,71449,71451,71454,71456,71458,71460,71462,71464,71467,71470,71473,71475,71477,71480,71482,71484,71486],{"class":323,"line":1421},[321,71450,6999],{"class":327},[321,71452,71453],{"class":380}," iphone",[321,71455,13771],{"class":327},[321,71457,71407],{"class":331},[321,71459,71410],{"class":2169},[321,71461,332],{"class":331},[321,71463,916],{"class":436},[321,71465,71466],{"class":48122},"(iPhone",[321,71468,71469],{"class":380},"\\s",[321,71471,71472],{"class":48122},"OS)",[321,71474,71469],{"class":380},[321,71476,332],{"class":48122},[321,71478,71479],{"class":380},"[\\d_]",[321,71481,813],{"class":327},[321,71483,761],{"class":48122},[321,71485,916],{"class":436},[321,71487,71446],{"class":331},[321,71489,71490],{"class":323,"line":1427},[321,71491,71492],{"class":390},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[321,71494,71495,71497,71500,71503],{"class":323,"line":1518},[321,71496,1737],{"class":327},[321,71498,71499],{"class":331}," (android ",[321,71501,71502],{"class":327},"||",[321,71504,71505],{"class":331}," iphone) { \n",[321,71507,71508,71511,71513,71516],{"class":323,"line":1524},[321,71509,71510],{"class":331},"location.href ",[321,71512,377],{"class":327},[321,71514,71515],{"class":436}," 'http:\u002F\u002Fm.itcast.cn'",[321,71517,2880],{"class":331},[321,71519,71520],{"class":323,"line":1536},[321,71521,71522],{"class":331},"} \n",[321,71524,71525],{"class":323,"line":1818},[321,71526,71527],{"class":331},"})()\n",[292,71529,71531],{"id":71530},"_346-histroy对象","3.4.6 histroy对象",[19,71533,71534],{},[28,71535],{"alt":30,"src":71536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71538,71539],{},"浏览器地址的前进与后退!!!",[19,71541,71542],{},"history.back() 等效于 history.go(-1)",[19,71544,71545],{},"history.forward() 等效于 history.go(1)",[14,71547,71549],{"id":71548},"_35-本地存储","3.5 本地存储",[151,71551,71552,71555,71558],{},[154,71553,71554],{},"数据存储在用户浏览器中",[154,71556,71557],{},"设置、读取方便、甚至页面刷新不丢失数据",[154,71559,71560],{},"容量较大，sessionStorage和localStorage约 5M 左右",[292,71562,71564],{"id":71563},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71566,71567],{},"只能存储字符串",[19,71569,71570],{},[28,71571],{"alt":30,"src":71572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71574,71575],{},[28,71576],{"alt":30,"src":71577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71579,71580],{},"键值对要加引号,不然就会当变量来看了",[19,71582,71583],{},"localStorage.setItem('uname', 'pink')",[19,71585,71586],{},"刷新之后信息不再丢失",[19,71588,71589],{},"操作key,value会跟着变",[19,71591,71592],{},"删除只删除键就可以,即名字",[19,71594,71583],{},[19,71596,71597],{},"改:",[19,71599,71600],{},"localStorage.setItem('uname','red')",[19,71602,71603],{},"有这个键就是改,没有这个键就是改",[19,71605,71606],{},[28,71607],{"alt":30,"src":71608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71610,71611],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71613,71614],{},[28,71615],{"alt":30,"src":71616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71618,71619],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[292,71621,71623],{"id":71622},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71625,71626],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71628,71629],{},"特性:",[151,71631,71632,71635,71638,71641],{},[154,71633,71634],{},"生命周期为关闭浏览器窗口",[154,71636,71637],{},"在同一个窗口(页面)下数据可以共享",[154,71639,71640],{},"以键值对的形式存储使用",[154,71642,71643],{},"用法跟localStorage 基本相同",[292,71645,71647],{"id":71646},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71649,71650],{},"本地只能存储字符串,无法直接存储复杂数据类型",[312,71652,71654],{"className":53212,"code":71653,"language":53214,"meta":30,"style":30},"\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",[318,71655,71656,71664,71669,71674,71679,71684,71688,71693,71698],{"__ignoreMap":30},[321,71657,71658,71660,71662],{"class":323,"line":324},[321,71659,1242],{"class":331},[321,71661,51958],{"class":51445},[321,71663,51452],{"class":331},[321,71665,71666],{"class":323,"line":167},[321,71667,71668],{"class":331},"    const obj = {\n",[321,71670,71671],{"class":323,"line":200},[321,71672,71673],{"class":331},"      uname: 'pink老师',\n",[321,71675,71676],{"class":323,"line":1401},[321,71677,71678],{"class":331},"      age: 18,\n",[321,71680,71681],{"class":323,"line":1407},[321,71682,71683],{"class":331},"      gender: '女'\n",[321,71685,71686],{"class":323,"line":1421},[321,71687,2393],{"class":331},[321,71689,71690],{"class":323,"line":1427},[321,71691,71692],{"class":331},"    \u002F\u002F 存储复杂数据类型\n",[321,71694,71695],{"class":323,"line":1518},[321,71696,71697],{"class":331},"    localStorage.setItem('obj', obj)\n",[321,71699,71700,71702,71704],{"class":323,"line":1524},[321,71701,52562],{"class":331},[321,71703,51958],{"class":51445},[321,71705,51452],{"class":331},[19,71707,71708],{},[28,71709],{"alt":30,"src":71710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71712,71713],{},"如果获取一下数据:",[19,71715,71716],{},"log(localStorage.getItem('obj'))",[19,71718,71719],{},[28,71720],{"alt":30,"src":71721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71723,71724],{},"发现直接存对象是使用不了的!!!",[22205,71726,71728],{"id":71727},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71730,71731],{},[28,71732],{"alt":30,"src":71733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[312,71735,71737],{"className":50778,"code":71736,"language":50780,"meta":30,"style":30},"\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",[318,71738,71739,71747,71757,71767,71776,71784,71788,71792,71818,71837,71845,71849,71854,71859],{"__ignoreMap":30},[321,71740,71741,71743,71745],{"class":323,"line":324},[321,71742,1242],{"class":331},[321,71744,51958],{"class":51445},[321,71746,51452],{"class":331},[321,71748,71749,71751,71753,71755],{"class":323,"line":167},[321,71750,11428],{"class":327},[321,71752,70116],{"class":380},[321,71754,13771],{"class":327},[321,71756,15779],{"class":331},[321,71758,71759,71762,71765],{"class":323,"line":200},[321,71760,71761],{"class":331},"      uname: ",[321,71763,71764],{"class":436},"'pink老师'",[321,71766,31611],{"class":331},[321,71768,71769,71772,71774],{"class":323,"line":1401},[321,71770,71771],{"class":331},"      age: ",[321,71773,982],{"class":380},[321,71775,31611],{"class":331},[321,71777,71778,71781],{"class":323,"line":1407},[321,71779,71780],{"class":331},"      gender: ",[321,71782,71783],{"class":436},"'女'\n",[321,71785,71786],{"class":323,"line":1421},[321,71787,2393],{"class":331},[321,71789,71790],{"class":323,"line":1427},[321,71791,71692],{"class":390},[321,71793,71794,71797,71800,71802,71805,71807,71810,71812,71815],{"class":323,"line":1518},[321,71795,71796],{"class":331},"  localStorage.",[321,71798,71799],{"class":2169},"setItem",[321,71801,332],{"class":331},[321,71803,71804],{"class":436},"'obj'",[321,71806,12642],{"class":331},[321,71808,71809],{"class":380},"JSON",[321,71811,890],{"class":331},[321,71813,71814],{"class":2169},"stringify",[321,71816,71817],{"class":331},"(obj))\n",[321,71819,71820,71823,71825,71828,71831,71833,71835],{"class":323,"line":1524},[321,71821,71822],{"class":331},"  console.",[321,71824,58392],{"class":2169},[321,71826,71827],{"class":331},"(localStorage.",[321,71829,71830],{"class":2169},"getItem",[321,71832,332],{"class":331},[321,71834,71804],{"class":436},[321,71836,30642],{"class":331},[321,71838,71839,71841,71843],{"class":323,"line":1536},[321,71840,52562],{"class":331},[321,71842,51958],{"class":51445},[321,71844,51452],{"class":331},[321,71846,71847],{"class":323,"line":1818},[321,71848,70766],{"class":331},[321,71850,71851],{"class":323,"line":1823},[321,71852,71853],{"class":331},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[321,71855,71856],{"class":323,"line":1829},[321,71857,71858],{"class":331},"  类型是字符串的\n",[321,71860,71861],{"class":323,"line":1834},[321,71862,71863],{"class":331},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22205,71865,71867],{"id":71866},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71869,71870],{},[28,71871],{"alt":30,"src":71872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,71874,71875],{},[28,71876],{"alt":30,"src":71877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[312,71879,71881],{"className":53212,"code":71880,"language":53214,"meta":30,"style":30},"  \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",[318,71882,71883,71891,71895,71899,71903,71907,71911,71916,71921,71926,71931,71936,71941,71946,71951],{"__ignoreMap":30},[321,71884,71885,71887,71889],{"class":323,"line":324},[321,71886,52289],{"class":331},[321,71888,51958],{"class":51445},[321,71890,51452],{"class":331},[321,71892,71893],{"class":323,"line":167},[321,71894,71668],{"class":331},[321,71896,71897],{"class":323,"line":200},[321,71898,71673],{"class":331},[321,71900,71901],{"class":323,"line":1401},[321,71902,71678],{"class":331},[321,71904,71905],{"class":323,"line":1407},[321,71906,71683],{"class":331},[321,71908,71909],{"class":323,"line":1421},[321,71910,2393],{"class":331},[321,71912,71913],{"class":323,"line":1427},[321,71914,71915],{"class":331},"    \u002F\u002F 1.存储复杂数据类型\n",[321,71917,71918],{"class":323,"line":1518},[321,71919,71920],{"class":331},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[321,71922,71923],{"class":323,"line":1524},[321,71924,71925],{"class":331},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[321,71927,71928],{"class":323,"line":1536},[321,71929,71930],{"class":331},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[321,71932,71933],{"class":323,"line":1818},[321,71934,71935],{"class":331},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[321,71937,71938],{"class":323,"line":1823},[321,71939,71940],{"class":331},"    \u002F\u002F 取\n",[321,71942,71943],{"class":323,"line":1829},[321,71944,71945],{"class":331},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[321,71947,71948],{"class":323,"line":1834},[321,71949,71950],{"class":331},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[321,71952,71953,71955,71957],{"class":323,"line":1848},[321,71954,52562],{"class":331},[321,71956,51958],{"class":51445},[321,71958,51452],{"class":331},[19,71960,71961],{},[28,71962],{"alt":30,"src":71963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[292,71965,71967],{"id":71966},"_356-数组map方法","3.5.6 数组map方法",[19,71969,71970],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,71972,71973],{},[28,71974],{"alt":30,"src":71975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,71977,71978],{},[28,71979],{"alt":30,"src":71980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,71982,71983,71986],{},[481,71984,71985],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,71988,71989],{},"map有返回值，但是forEach没有返回值",[19,71991,71992],{},"map是个方法。用的时候要加 ()",[19,71994,71995],{},"map返回的是一个数组",[292,71997,71999],{"id":71998},"_357-数组中join方法","3.5.7 数组中join方法",[19,72001,72002],{},[28,72003],{"alt":30,"src":72004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72006,72007],{},"类似于python中拼接字符串一样！",[151,72009,72010,72013,72016],{},[154,72011,72012],{},"小括号为空则逗号分开",[154,72014,72015],{},"小括号为空字符串 ''，则元素之间没有分隔符",[154,72017,72018],{},"小括号用啥符号就用进行分割",[292,72020,72022],{"id":72021},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[151,72024,72025,72028,72031,72034,72037],{},[154,72026,72027],{},"记住本地时间获取快速方式：new Date().toDateString()",[154,72029,72030],{},"尽量减少DOM操作，用好map+join的渲染方式",[154,72032,72033],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[154,72035,72036],{},"return可以实现函数的结束",[154,72038,72039],{},"禁止跳转是 preventDefault() 不要忘记",[312,72041,72043],{"className":50778,"code":72042,"language":50780,"meta":30,"style":30},"\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",[318,72044,72045,72055,72069,72073,72081,72095,72115,72127,72135,72141,72151,72161,72165,72169,72175,72185,72197,72201,72205,72212,72224,72238,72248,72252,72256,72263,72270,72277,72289,72301,72311,72323,72327,72331,72338,72345,72357,72369,72379,72391,72421,72425,72429,72436,72448,72460,72484,72494,72504,72508,72512,72520,72531,72543,72555,72567,72584,72596,72608,72612,72616,72623,72635,72647,72659,72670,72688,72701,72713,72737,72748,72752,72756,72764,72774,72778,72782,72788,72800,72811,72821,72825,72829,72835,72857,72861,72865,72871,72877,72889,72899,72911,72941,72954,72971,72975,72979,72990,73012,73022,73026,73030,73043,73053,73065,73077,73089,73101,73111,73121,73131,73142,73155,73159,73167,73175,73179,73187,73200,73220,73253,73286,73319,73345,73363,73381,73389,73415,73433,73451,73469,73487,73505,73513,73521,73539,73547,73576,73584,73592,73600,73613,73625,73637,73649,73661,73673,73686,73698,73706,73714,73722,73727,73732,73736,73740,73744,73748,73752,73756,73761,73766,73771,73776,73784,73792,73800,73805,73810,73815,73820,73825,73830,73835,73840,73845,73850,73855,73860,73865,73870,73874,73879,73884,73894,73903,73907,73912,73921,73937,73979,74019,74058,74123,74131,74135,74140,74158,74166,74171,74176,74206,74212,74217,74230,74242,74254,74266,74278,74290,74302,74306,74316,74320,74325,74330,74334,74343,74347,74352,74357,74376,74381,74401,74405,74410,74414,74419,74437,74455,74473,74492,74511,74530,74535,74541,74562,74568,74577,74583,74589,74595,74622,74635,74640,74650,74656,74662,74668,74674,74679,74685,74691,74697,74703,74736,74741,74746,74751,74756,74762,74768,74774,74785,74790,74796,74803,74817,74823,74847,74852,74857,74863,74869,74890,74896,74909,74915,74921,74927,74933,74938,74944,74950,74956,74974,74988,74994,75002,75008,75030,75035,75040,75045,75050,75055,75064,75073,75078],{"__ignoreMap":30},[321,72046,72047,72049,72051,72053],{"class":323,"line":324},[321,72048,51442],{"class":331},[321,72050,51446],{"class":51445},[321,72052,51449],{"class":2169},[321,72054,51452],{"class":331},[321,72056,72057,72059,72061,72063,72065,72067],{"class":323,"line":167},[321,72058,1242],{"class":331},[321,72060,50780],{"class":51445},[321,72062,51461],{"class":2169},[321,72064,377],{"class":331},[321,72066,51466],{"class":436},[321,72068,51452],{"class":331},[321,72070,72071],{"class":323,"line":200},[321,72072,2606],{"emptyLinePlaceholder":251},[321,72074,72075,72077,72079],{"class":323,"line":1401},[321,72076,1242],{"class":331},[321,72078,51479],{"class":51445},[321,72080,51452],{"class":331},[321,72082,72083,72085,72087,72089,72091,72093],{"class":323,"line":1407},[321,72084,52289],{"class":331},[321,72086,51489],{"class":51445},[321,72088,51492],{"class":2169},[321,72090,377],{"class":331},[321,72092,51497],{"class":436},[321,72094,51452],{"class":331},[321,72096,72097,72099,72101,72103,72105,72107,72109,72111,72113],{"class":323,"line":1421},[321,72098,52289],{"class":331},[321,72100,51489],{"class":51445},[321,72102,15127],{"class":2169},[321,72104,377],{"class":331},[321,72106,51536],{"class":436},[321,72108,51516],{"class":2169},[321,72110,377],{"class":331},[321,72112,51543],{"class":436},[321,72114,51452],{"class":331},[321,72116,72117,72119,72121,72123,72125],{"class":323,"line":1427},[321,72118,52289],{"class":331},[321,72120,51552],{"class":51445},[321,72122,51555],{"class":331},[321,72124,51552],{"class":51445},[321,72126,51452],{"class":331},[321,72128,72129,72131,72133],{"class":323,"line":1518},[321,72130,52289],{"class":331},[321,72132,5333],{"class":51445},[321,72134,51452],{"class":331},[321,72136,72137,72139],{"class":323,"line":1524},[321,72138,6610],{"class":51445},[321,72140,15779],{"class":331},[321,72142,72143,72145,72147,72149],{"class":323,"line":1536},[321,72144,54840],{"class":380},[321,72146,51582],{"class":331},[321,72148,523],{"class":380},[321,72150,1497],{"class":331},[321,72152,72153,72155,72157,72159],{"class":323,"line":1818},[321,72154,54851],{"class":380},[321,72156,51582],{"class":331},[321,72158,523],{"class":380},[321,72160,1497],{"class":331},[321,72162,72163],{"class":323,"line":1823},[321,72164,2393],{"class":331},[321,72166,72167],{"class":323,"line":1829},[321,72168,2606],{"emptyLinePlaceholder":251},[321,72170,72171,72173],{"class":323,"line":1834},[321,72172,57424],{"class":51445},[321,72174,15779],{"class":331},[321,72176,72177,72179,72181,72183],{"class":323,"line":1848},[321,72178,57431],{"class":380},[321,72180,51582],{"class":331},[321,72182,51737],{"class":380},[321,72184,1497],{"class":331},[321,72186,72187,72189,72191,72193,72195],{"class":323,"line":1853},[321,72188,62222],{"class":380},[321,72190,51582],{"class":331},[321,72192,1032],{"class":380},[321,72194,51637],{"class":327},[321,72196,1497],{"class":331},[321,72198,72199],{"class":323,"line":1859},[321,72200,2393],{"class":331},[321,72202,72203],{"class":323,"line":1880},[321,72204,2606],{"emptyLinePlaceholder":251},[321,72206,72207,72210],{"class":323,"line":1885},[321,72208,72209],{"class":2169},"    .info",[321,72211,15779],{"class":331},[321,72213,72214,72216,72218,72220,72222],{"class":323,"line":1899},[321,72215,54916],{"class":380},[321,72217,51582],{"class":331},[321,72219,51634],{"class":380},[321,72221,51637],{"class":327},[321,72223,1497],{"class":331},[321,72225,72226,72228,72230,72232,72234,72236],{"class":323,"line":1904},[321,72227,54851],{"class":380},[321,72229,51582],{"class":331},[321,72231,778],{"class":380},[321,72233,51637],{"class":327},[321,72235,51701],{"class":380},[321,72237,1497],{"class":331},[321,72239,72240,72242,72244,72246],{"class":323,"line":1933},[321,72241,57431],{"class":380},[321,72243,51582],{"class":331},[321,72245,51737],{"class":380},[321,72247,1497],{"class":331},[321,72249,72250],{"class":323,"line":1938},[321,72251,2393],{"class":331},[321,72253,72254],{"class":323,"line":1955},[321,72255,2606],{"emptyLinePlaceholder":251},[321,72257,72258,72261],{"class":323,"line":1960},[321,72259,72260],{"class":2169},"    .uname",[321,72262,31611],{"class":331},[321,72264,72265,72268],{"class":323,"line":1965},[321,72266,72267],{"class":2169},"    .age",[321,72269,31611],{"class":331},[321,72271,72272,72275],{"class":323,"line":1970},[321,72273,72274],{"class":2169},"    .salary",[321,72276,15779],{"class":331},[321,72278,72279,72281,72283,72285,72287],{"class":323,"line":1984},[321,72280,54916],{"class":380},[321,72282,51582],{"class":331},[321,72284,643],{"class":380},[321,72286,51637],{"class":327},[321,72288,1497],{"class":331},[321,72290,72291,72293,72295,72297,72299],{"class":323,"line":1989},[321,72292,54930],{"class":380},[321,72294,51582],{"class":331},[321,72296,1032],{"class":380},[321,72298,51637],{"class":327},[321,72300,1497],{"class":331},[321,72302,72303,72305,72307,72309],{"class":323,"line":2783},[321,72304,61925],{"class":380},[321,72306,51582],{"class":331},[321,72308,54882],{"class":380},[321,72310,1497],{"class":331},[321,72312,72313,72315,72317,72319,72321],{"class":323,"line":2797},[321,72314,61895],{"class":380},[321,72316,51582],{"class":331},[321,72318,907],{"class":380},[321,72320,51637],{"class":327},[321,72322,1497],{"class":331},[321,72324,72325],{"class":323,"line":2805},[321,72326,2393],{"class":331},[321,72328,72329],{"class":323,"line":2810},[321,72330,2606],{"emptyLinePlaceholder":251},[321,72332,72333,72336],{"class":323,"line":2816},[321,72334,72335],{"class":2169},"    .gender",[321,72337,31611],{"class":331},[321,72339,72340,72343],{"class":323,"line":2822},[321,72341,72342],{"class":2169},"    .city",[321,72344,15779],{"class":331},[321,72346,72347,72349,72351,72353,72355],{"class":323,"line":2827},[321,72348,54916],{"class":380},[321,72350,51582],{"class":331},[321,72352,643],{"class":380},[321,72354,51637],{"class":327},[321,72356,1497],{"class":331},[321,72358,72359,72361,72363,72365,72367],{"class":323,"line":8155},[321,72360,54930],{"class":380},[321,72362,51582],{"class":331},[321,72364,1157],{"class":380},[321,72366,51637],{"class":327},[321,72368,1497],{"class":331},[321,72370,72371,72373,72375,72377],{"class":323,"line":8179},[321,72372,61925],{"class":380},[321,72374,51582],{"class":331},[321,72376,54882],{"class":380},[321,72378,1497],{"class":331},[321,72380,72381,72383,72385,72387,72389],{"class":323,"line":8184},[321,72382,61895],{"class":380},[321,72384,51582],{"class":331},[321,72386,907],{"class":380},[321,72388,51637],{"class":327},[321,72390,1497],{"class":331},[321,72392,72393,72395,72397,72399,72401,72403,72406,72408,72410,72412,72415,72417,72419],{"class":323,"line":8190},[321,72394,62122],{"class":380},[321,72396,51582],{"class":331},[321,72398,549],{"class":380},[321,72400,51637],{"class":327},[321,72402,51666],{"class":380},[321,72404,72405],{"class":380}," rgb",[321,72407,332],{"class":331},[321,72409,1928],{"class":380},[321,72411,12642],{"class":331},[321,72413,72414],{"class":380},"197",[321,72416,12642],{"class":331},[321,72418,72414],{"class":380},[321,72420,2925],{"class":331},[321,72422,72423],{"class":323,"line":8217},[321,72424,2393],{"class":331},[321,72426,72427],{"class":323,"line":8222},[321,72428,2606],{"emptyLinePlaceholder":251},[321,72430,72431,72434],{"class":323,"line":8228},[321,72432,72433],{"class":51445},"    button",[321,72435,15779],{"class":331},[321,72437,72438,72440,72442,72444,72446],{"class":323,"line":8240},[321,72439,54930],{"class":380},[321,72441,51582],{"class":331},[321,72443,1157],{"class":380},[321,72445,51637],{"class":327},[321,72447,1497],{"class":331},[321,72449,72450,72452,72454,72456,72458],{"class":323,"line":8252},[321,72451,54916],{"class":380},[321,72453,51582],{"class":331},[321,72455,816],{"class":380},[321,72457,51637],{"class":327},[321,72459,1497],{"class":331},[321,72461,72462,72464,72466,72469,72471,72473,72475,72478,72480,72482],{"class":323,"line":8264},[321,72463,55029],{"class":380},[321,72465,51582],{"class":331},[321,72467,72468],{"class":380},"rgb",[321,72470,332],{"class":331},[321,72472,1301],{"class":380},[321,72474,12642],{"class":331},[321,72476,72477],{"class":380},"187",[321,72479,12642],{"class":331},[321,72481,631],{"class":380},[321,72483,2925],{"class":331},[321,72485,72486,72488,72490,72492],{"class":323,"line":9923},[321,72487,57561],{"class":380},[321,72489,51582],{"class":331},[321,72491,60987],{"class":380},[321,72493,1497],{"class":331},[321,72495,72496,72498,72500,72502],{"class":323,"line":9948},[321,72497,62122],{"class":380},[321,72499,51582],{"class":331},[321,72501,523],{"class":380},[321,72503,1497],{"class":331},[321,72505,72506],{"class":323,"line":9971},[321,72507,2393],{"class":331},[321,72509,72510],{"class":323,"line":9995},[321,72511,2606],{"emptyLinePlaceholder":251},[321,72513,72514,72516,72518],{"class":323,"line":10000},[321,72515,72433],{"class":51445},[321,72517,51833],{"class":51445},[321,72519,15779],{"class":331},[321,72521,72522,72524,72526,72529],{"class":323,"line":10005},[321,72523,55154],{"class":380},[321,72525,51582],{"class":331},[321,72527,72528],{"class":380},"inline-block",[321,72530,1497],{"class":331},[321,72532,72533,72535,72537,72539,72541],{"class":323,"line":10010},[321,72534,54916],{"class":380},[321,72536,51582],{"class":331},[321,72538,778],{"class":380},[321,72540,51637],{"class":327},[321,72542,1497],{"class":331},[321,72544,72545,72547,72549,72551,72553],{"class":323,"line":10019},[321,72546,54930],{"class":380},[321,72548,51582],{"class":331},[321,72550,778],{"class":380},[321,72552,51637],{"class":327},[321,72554,1497],{"class":331},[321,72556,72557,72559,72561,72563,72565],{"class":323,"line":10024},[321,72558,57504],{"class":380},[321,72560,51582],{"class":331},[321,72562,804],{"class":380},[321,72564,51637],{"class":327},[321,72566,1497],{"class":331},[321,72568,72569,72571,72573,72575,72577,72579,72582],{"class":323,"line":10030},[321,72570,62122],{"class":380},[321,72572,51582],{"class":331},[321,72574,549],{"class":380},[321,72576,51637],{"class":327},[321,72578,51666],{"class":380},[321,72580,72581],{"class":380}," #fff",[321,72583,1497],{"class":331},[321,72585,72586,72588,72590,72592,72594],{"class":323,"line":10051},[321,72587,55279],{"class":380},[321,72589,51582],{"class":331},[321,72591,651],{"class":380},[321,72593,51637],{"class":327},[321,72595,1497],{"class":331},[321,72597,72598,72600,72602,72604,72606],{"class":323,"line":10057},[321,72599,61895],{"class":380},[321,72601,51582],{"class":331},[321,72603,549],{"class":380},[321,72605,51637],{"class":327},[321,72607,1497],{"class":331},[321,72609,72610],{"class":323,"line":10071},[321,72611,2393],{"class":331},[321,72613,72614],{"class":323,"line":10077},[321,72615,2606],{"emptyLinePlaceholder":251},[321,72617,72618,72621],{"class":323,"line":10104},[321,72619,72620],{"class":2169},"    .total",[321,72622,15779],{"class":331},[321,72624,72625,72627,72629,72631,72633],{"class":323,"line":10113},[321,72626,54916],{"class":380},[321,72628,51582],{"class":331},[321,72630,61774],{"class":380},[321,72632,51637],{"class":327},[321,72634,1497],{"class":331},[321,72636,72637,72639,72641,72643,72645],{"class":323,"line":10119},[321,72638,54930],{"class":380},[321,72640,51582],{"class":331},[321,72642,733],{"class":380},[321,72644,51637],{"class":327},[321,72646,1497],{"class":331},[321,72648,72649,72651,72653,72655,72657],{"class":323,"line":10127},[321,72650,57504],{"class":380},[321,72652,51582],{"class":331},[321,72654,733],{"class":380},[321,72656,51637],{"class":327},[321,72658,1497],{"class":331},[321,72660,72661,72663,72665,72668],{"class":323,"line":10132},[321,72662,57431],{"class":380},[321,72664,51582],{"class":331},[321,72666,72667],{"class":380},"right",[321,72669,1497],{"class":331},[321,72671,72672,72674,72676,72678,72680,72682,72684,72686],{"class":323,"line":16811},[321,72673,54851],{"class":380},[321,72675,51582],{"class":331},[321,72677,733],{"class":380},[321,72679,51637],{"class":327},[321,72681,51701],{"class":380},[321,72683,2244],{"class":380},[321,72685,51637],{"class":327},[321,72687,1497],{"class":331},[321,72689,72690,72693,72695,72697,72699],{"class":323,"line":16817},[321,72691,72692],{"class":380},"      padding-right",[321,72694,51582],{"class":331},[321,72696,778],{"class":380},[321,72698,51637],{"class":327},[321,72700,1497],{"class":331},[321,72702,72703,72705,72707,72709,72711],{"class":323,"line":16840},[321,72704,55067],{"class":380},[321,72706,51582],{"class":331},[321,72708,855],{"class":380},[321,72710,51637],{"class":327},[321,72712,1497],{"class":331},[321,72714,72715,72717,72719,72721,72723,72726,72728,72731,72733,72735],{"class":323,"line":16846},[321,72716,55029],{"class":380},[321,72718,51582],{"class":331},[321,72720,72468],{"class":380},[321,72722,332],{"class":331},[321,72724,72725],{"class":380},"237",[321,72727,12642],{"class":331},[321,72729,72730],{"class":380},"235",[321,72732,12642],{"class":331},[321,72734,72730],{"class":380},[321,72736,2925],{"class":331},[321,72738,72739,72742,72744,72746],{"class":323,"line":16869},[321,72740,72741],{"class":380},"      box-sizing",[321,72743,51582],{"class":331},[321,72745,60650],{"class":380},[321,72747,1497],{"class":331},[321,72749,72750],{"class":323,"line":16883},[321,72751,2393],{"class":331},[321,72753,72754],{"class":323,"line":16903},[321,72755,2606],{"emptyLinePlaceholder":251},[321,72757,72758,72760,72762],{"class":323,"line":16909},[321,72759,72620],{"class":2169},[321,72761,51833],{"class":51445},[321,72763,15779],{"class":331},[321,72765,72766,72768,72770,72772],{"class":323,"line":16920},[321,72767,57561],{"class":380},[321,72769,51582],{"class":331},[321,72771,57566],{"class":380},[321,72773,1497],{"class":331},[321,72775,72776],{"class":323,"line":16943},[321,72777,2393],{"class":331},[321,72779,72780],{"class":323,"line":16965},[321,72781,2606],{"emptyLinePlaceholder":251},[321,72783,72784,72786],{"class":323,"line":16970},[321,72785,65168],{"class":51445},[321,72787,15779],{"class":331},[321,72789,72790,72792,72794,72796,72798],{"class":323,"line":16976},[321,72791,54916],{"class":380},[321,72793,51582],{"class":331},[321,72795,61774],{"class":380},[321,72797,51637],{"class":327},[321,72799,1497],{"class":331},[321,72801,72802,72804,72806,72809],{"class":323,"line":16990},[321,72803,54851],{"class":380},[321,72805,51582],{"class":331},[321,72807,72808],{"class":380},"auto",[321,72810,1497],{"class":331},[321,72812,72813,72815,72817,72819],{"class":323,"line":17003},[321,72814,65175],{"class":380},[321,72816,51582],{"class":331},[321,72818,65180],{"class":380},[321,72820,1497],{"class":331},[321,72822,72823],{"class":323,"line":17008},[321,72824,2393],{"class":331},[321,72826,72827],{"class":323,"line":17022},[321,72828,2606],{"emptyLinePlaceholder":251},[321,72830,72831,72833],{"class":323,"line":17027},[321,72832,65260],{"class":51445},[321,72834,15779],{"class":331},[321,72836,72837,72839,72841,72843,72845,72847,72849,72851,72853,72855],{"class":323,"line":17033},[321,72838,55029],{"class":380},[321,72840,51582],{"class":331},[321,72842,72468],{"class":380},[321,72844,332],{"class":331},[321,72846,72725],{"class":380},[321,72848,12642],{"class":331},[321,72850,72730],{"class":380},[321,72852,12642],{"class":331},[321,72854,72730],{"class":380},[321,72856,2925],{"class":331},[321,72858,72859],{"class":323,"line":17038},[321,72860,2393],{"class":331},[321,72862,72863],{"class":323,"line":17052},[321,72864,2606],{"emptyLinePlaceholder":251},[321,72866,72867,72869],{"class":323,"line":17057},[321,72868,65260],{"class":51445},[321,72870,31611],{"class":331},[321,72872,72873,72875],{"class":323,"line":17062},[321,72874,65326],{"class":51445},[321,72876,15779],{"class":331},[321,72878,72879,72881,72883,72885,72887],{"class":323,"line":17076},[321,72880,54930],{"class":380},[321,72882,51582],{"class":331},[321,72884,605],{"class":380},[321,72886,51637],{"class":327},[321,72888,1497],{"class":331},[321,72890,72891,72893,72895,72897],{"class":323,"line":17088},[321,72892,57431],{"class":380},[321,72894,51582],{"class":331},[321,72896,23944],{"class":380},[321,72898,1497],{"class":331},[321,72900,72901,72903,72905,72907,72909],{"class":323,"line":17093},[321,72902,55067],{"class":380},[321,72904,51582],{"class":331},[321,72906,881],{"class":380},[321,72908,51637],{"class":327},[321,72910,1497],{"class":331},[321,72912,72913,72915,72917,72919,72921,72923,72925,72927,72930,72932,72935,72937,72939],{"class":323,"line":17106},[321,72914,62122],{"class":380},[321,72916,51582],{"class":331},[321,72918,549],{"class":380},[321,72920,51637],{"class":327},[321,72922,51666],{"class":380},[321,72924,72405],{"class":380},[321,72926,332],{"class":331},[321,72928,72929],{"class":380},"228",[321,72931,12642],{"class":331},[321,72933,72934],{"class":380},"225",[321,72936,12642],{"class":331},[321,72938,72934],{"class":380},[321,72940,2925],{"class":331},[321,72942,72943,72946,72948,72950,72952],{"class":323,"line":17111},[321,72944,72945],{"class":380},"      padding-left",[321,72947,51582],{"class":331},[321,72949,651],{"class":380},[321,72951,51637],{"class":327},[321,72953,1497],{"class":331},[321,72955,72956,72958,72960,72962,72965,72967,72969],{"class":323,"line":17116},[321,72957,62005],{"class":380},[321,72959,51582],{"class":331},[321,72961,28266],{"class":380},[321,72963,72964],{"class":380}," linear",[321,72966,62012],{"class":380},[321,72968,1027],{"class":327},[321,72970,1497],{"class":331},[321,72972,72973],{"class":323,"line":17121},[321,72974,2393],{"class":331},[321,72976,72977],{"class":323,"line":17134},[321,72978,2606],{"emptyLinePlaceholder":251},[321,72980,72981,72984,72986,72988],{"class":323,"line":17139},[321,72982,72983],{"class":51445},"    tbody",[321,72985,70289],{"class":51445},[321,72987,61085],{"class":2169},[321,72989,15779],{"class":331},[321,72991,72992,72994,72996,72998,73000,73002,73004,73006,73008,73010],{"class":323,"line":32778},[321,72993,55029],{"class":380},[321,72995,51582],{"class":331},[321,72997,72468],{"class":380},[321,72999,332],{"class":331},[321,73001,72725],{"class":380},[321,73003,12642],{"class":331},[321,73005,72730],{"class":380},[321,73007,12642],{"class":331},[321,73009,72730],{"class":380},[321,73011,2925],{"class":331},[321,73013,73014,73016,73018,73020],{"class":323,"line":32784},[321,73015,62170],{"class":380},[321,73017,51582],{"class":331},[321,73019,62175],{"class":380},[321,73021,1497],{"class":331},[321,73023,73024],{"class":323,"line":32790},[321,73025,2393],{"class":331},[321,73027,73028],{"class":323,"line":32796},[321,73029,2606],{"emptyLinePlaceholder":251},[321,73031,73032,73034,73036,73039,73041],{"class":323,"line":32802},[321,73033,72983],{"class":51445},[321,73035,70289],{"class":51445},[321,73037,73038],{"class":51445}," td",[321,73040,1605],{"class":51445},[321,73042,15779],{"class":331},[321,73044,73045,73047,73049,73051],{"class":323,"line":32813},[321,73046,55154],{"class":380},[321,73048,51582],{"class":331},[321,73050,61014],{"class":380},[321,73052,1497],{"class":331},[321,73054,73055,73057,73059,73061,73063],{"class":323,"line":32819},[321,73056,54916],{"class":380},[321,73058,51582],{"class":331},[321,73060,1239],{"class":380},[321,73062,51637],{"class":327},[321,73064,1497],{"class":331},[321,73066,73067,73069,73071,73073,73075],{"class":323,"line":32839},[321,73068,54930],{"class":380},[321,73070,51582],{"class":331},[321,73072,1157],{"class":380},[321,73074,51637],{"class":327},[321,73076,1497],{"class":331},[321,73078,73079,73081,73083,73085,73087],{"class":323,"line":32845},[321,73080,57504],{"class":380},[321,73082,51582],{"class":331},[321,73084,1157],{"class":380},[321,73086,51637],{"class":327},[321,73088,1497],{"class":331},[321,73090,73091,73093,73095,73097,73099],{"class":323,"line":32856},[321,73092,62222],{"class":380},[321,73094,51582],{"class":331},[321,73096,409],{"class":380},[321,73098,51637],{"class":327},[321,73100,1497],{"class":331},[321,73102,73103,73105,73107,73109],{"class":323,"line":32862},[321,73104,57561],{"class":380},[321,73106,51582],{"class":331},[321,73108,60987],{"class":380},[321,73110,1497],{"class":331},[321,73112,73113,73115,73117,73119],{"class":323,"line":32868},[321,73114,57431],{"class":380},[321,73116,51582],{"class":331},[321,73118,51737],{"class":380},[321,73120,1497],{"class":331},[321,73122,73123,73125,73127,73129],{"class":323,"line":32874},[321,73124,64115],{"class":380},[321,73126,51582],{"class":331},[321,73128,54882],{"class":380},[321,73130,1497],{"class":331},[321,73132,73133,73135,73137,73140],{"class":323,"line":32880},[321,73134,55029],{"class":380},[321,73136,51582],{"class":331},[321,73138,73139],{"class":380},"orange",[321,73141,1497],{"class":331},[321,73143,73144,73146,73148,73151,73153],{"class":323,"line":32886},[321,73145,55279],{"class":380},[321,73147,51582],{"class":331},[321,73149,73150],{"class":380},"12.5",[321,73152,51637],{"class":327},[321,73154,1497],{"class":331},[321,73156,73157],{"class":323,"line":32892},[321,73158,2393],{"class":331},[321,73160,73161,73163,73165],{"class":323,"line":32898},[321,73162,52562],{"class":331},[321,73164,5333],{"class":51445},[321,73166,51452],{"class":331},[321,73168,73169,73171,73173],{"class":323,"line":32918},[321,73170,51930],{"class":331},[321,73172,51479],{"class":51445},[321,73174,51452],{"class":331},[321,73176,73177],{"class":323,"line":32924},[321,73178,2606],{"emptyLinePlaceholder":251},[321,73180,73181,73183,73185],{"class":323,"line":32940},[321,73182,1242],{"class":331},[321,73184,51945],{"class":51445},[321,73186,51452],{"class":331},[321,73188,73189,73191,73193,73196,73198],{"class":323,"line":32946},[321,73190,52289],{"class":331},[321,73192,14],{"class":51445},[321,73194,73195],{"class":331},">学生就业统计表\u003C\u002F",[321,73197,14],{"class":51445},[321,73199,51452],{"class":331},[321,73201,73202,73204,73206,73208,73210,73212,73214,73216,73218],{"class":323,"line":32960},[321,73203,52289],{"class":331},[321,73205,66770],{"class":51445},[321,73207,53631],{"class":2169},[321,73209,377],{"class":331},[321,73211,62809],{"class":436},[321,73213,69215],{"class":2169},[321,73215,377],{"class":331},[321,73217,31921],{"class":436},[321,73219,51452],{"class":331},[321,73221,73222,73224,73226,73228,73230,73232,73234,73236,73238,73240,73242,73245,73247,73249,73251],{"class":323,"line":32966},[321,73223,51486],{"class":331},[321,73225,53966],{"class":51445},[321,73227,53969],{"class":2169},[321,73229,377],{"class":331},[321,73231,62844],{"class":436},[321,73233,15127],{"class":2169},[321,73235,377],{"class":331},[321,73237,69241],{"class":436},[321,73239,61165],{"class":2169},[321,73241,377],{"class":331},[321,73243,73244],{"class":436},"\"姓名\"",[321,73246,53631],{"class":2169},[321,73248,377],{"class":331},[321,73250,69241],{"class":436},[321,73252,51452],{"class":331},[321,73254,73255,73257,73259,73261,73263,73265,73267,73269,73271,73273,73275,73278,73280,73282,73284],{"class":323,"line":32981},[321,73256,51486],{"class":331},[321,73258,53966],{"class":51445},[321,73260,53969],{"class":2169},[321,73262,377],{"class":331},[321,73264,62844],{"class":436},[321,73266,15127],{"class":2169},[321,73268,377],{"class":331},[321,73270,69269],{"class":436},[321,73272,61165],{"class":2169},[321,73274,377],{"class":331},[321,73276,73277],{"class":436},"\"年龄\"",[321,73279,53631],{"class":2169},[321,73281,377],{"class":331},[321,73283,69269],{"class":436},[321,73285,51452],{"class":331},[321,73287,73288,73290,73292,73294,73296,73298,73300,73302,73304,73306,73308,73311,73313,73315,73317],{"class":323,"line":32987},[321,73289,51486],{"class":331},[321,73291,53966],{"class":51445},[321,73293,53969],{"class":2169},[321,73295,377],{"class":331},[321,73297,62844],{"class":436},[321,73299,15127],{"class":2169},[321,73301,377],{"class":331},[321,73303,69371],{"class":436},[321,73305,61165],{"class":2169},[321,73307,377],{"class":331},[321,73309,73310],{"class":436},"\"薪资\"",[321,73312,53631],{"class":2169},[321,73314,377],{"class":331},[321,73316,69371],{"class":436},[321,73318,51452],{"class":331},[321,73320,73321,73323,73325,73327,73329,73331,73333,73335,73337,73339,73341,73343],{"class":323,"line":32996},[321,73322,51486],{"class":331},[321,73324,69289],{"class":51445},[321,73326,15127],{"class":2169},[321,73328,377],{"class":331},[321,73330,69296],{"class":436},[321,73332,15166],{"class":2169},[321,73334,377],{"class":331},[321,73336,7859],{"class":436},[321,73338,53631],{"class":2169},[321,73340,377],{"class":331},[321,73342,69296],{"class":436},[321,73344,51452],{"class":331},[321,73346,73347,73349,73351,73353,73355,73357,73359,73361],{"class":323,"line":33002},[321,73348,55379],{"class":331},[321,73350,69311],{"class":51445},[321,73352,66796],{"class":2169},[321,73354,377],{"class":331},[321,73356,10168],{"class":436},[321,73358,69320],{"class":331},[321,73360,69311],{"class":51445},[321,73362,51452],{"class":331},[321,73364,73365,73367,73369,73371,73373,73375,73377,73379],{"class":323,"line":33011},[321,73366,55379],{"class":331},[321,73368,69311],{"class":51445},[321,73370,66796],{"class":2169},[321,73372,377],{"class":331},[321,73374,10237],{"class":436},[321,73376,69339],{"class":331},[321,73378,69311],{"class":51445},[321,73380,51452],{"class":331},[321,73382,73383,73385,73387],{"class":323,"line":33017},[321,73384,51921],{"class":331},[321,73386,69289],{"class":51445},[321,73388,51452],{"class":331},[321,73390,73391,73393,73395,73397,73399,73401,73403,73405,73407,73409,73411,73413],{"class":323,"line":33023},[321,73392,51486],{"class":331},[321,73394,69289],{"class":51445},[321,73396,15127],{"class":2169},[321,73398,377],{"class":331},[321,73400,69393],{"class":436},[321,73402,15166],{"class":2169},[321,73404,377],{"class":331},[321,73406,7859],{"class":436},[321,73408,53631],{"class":2169},[321,73410,377],{"class":331},[321,73412,69393],{"class":436},[321,73414,51452],{"class":331},[321,73416,73417,73419,73421,73423,73425,73427,73429,73431],{"class":323,"line":33032},[321,73418,55379],{"class":331},[321,73420,69311],{"class":51445},[321,73422,66796],{"class":2169},[321,73424,377],{"class":331},[321,73426,69414],{"class":436},[321,73428,69417],{"class":331},[321,73430,69311],{"class":51445},[321,73432,51452],{"class":331},[321,73434,73435,73437,73439,73441,73443,73445,73447,73449],{"class":323,"line":33038},[321,73436,55379],{"class":331},[321,73438,69311],{"class":51445},[321,73440,66796],{"class":2169},[321,73442,377],{"class":331},[321,73444,69434],{"class":436},[321,73446,69437],{"class":331},[321,73448,69311],{"class":51445},[321,73450,51452],{"class":331},[321,73452,73453,73455,73457,73459,73461,73463,73465,73467],{"class":323,"line":33049},[321,73454,55379],{"class":331},[321,73456,69311],{"class":51445},[321,73458,66796],{"class":2169},[321,73460,377],{"class":331},[321,73462,69454],{"class":436},[321,73464,69457],{"class":331},[321,73466,69311],{"class":51445},[321,73468,51452],{"class":331},[321,73470,73471,73473,73475,73477,73479,73481,73483,73485],{"class":323,"line":33055},[321,73472,55379],{"class":331},[321,73474,69311],{"class":51445},[321,73476,66796],{"class":2169},[321,73478,377],{"class":331},[321,73480,69474],{"class":436},[321,73482,69477],{"class":331},[321,73484,69311],{"class":51445},[321,73486,51452],{"class":331},[321,73488,73489,73491,73493,73495,73497,73499,73501,73503],{"class":323,"line":33074},[321,73490,55379],{"class":331},[321,73492,69311],{"class":51445},[321,73494,66796],{"class":2169},[321,73496,377],{"class":331},[321,73498,69494],{"class":436},[321,73500,69497],{"class":331},[321,73502,69311],{"class":51445},[321,73504,51452],{"class":331},[321,73506,73507,73509,73511],{"class":323,"line":33080},[321,73508,51921],{"class":331},[321,73510,69289],{"class":51445},[321,73512,51452],{"class":331},[321,73514,73515,73517,73519],{"class":323,"line":33091},[321,73516,51486],{"class":331},[321,73518,54032],{"class":51445},[321,73520,51452],{"class":331},[321,73522,73523,73525,73527,73530,73532,73535,73537],{"class":323,"line":33097},[321,73524,55379],{"class":331},[321,73526,321],{"class":51445},[321,73528,73529],{"class":331},">+\u003C\u002F",[321,73531,321],{"class":51445},[321,73533,73534],{"class":331},">添加\u003C\u002F",[321,73536,54032],{"class":51445},[321,73538,51452],{"class":331},[321,73540,73541,73543,73545],{"class":323,"line":33117},[321,73542,52562],{"class":331},[321,73544,66770],{"class":51445},[321,73546,51452],{"class":331},[321,73548,73549,73551,73553,73555,73557,73559,73562,73564,73567,73569,73572,73574],{"class":323,"line":33133},[321,73550,52289],{"class":331},[321,73552,51756],{"class":51445},[321,73554,53631],{"class":2169},[321,73556,377],{"class":331},[321,73558,62725],{"class":436},[321,73560,73561],{"class":331},">共有数据 \u003C",[321,73563,321],{"class":51445},[321,73565,73566],{"class":331},">0\u003C\u002F",[321,73568,321],{"class":51445},[321,73570,73571],{"class":331},"> 条\u003C\u002F",[321,73573,51756],{"class":51445},[321,73575,51452],{"class":331},[321,73577,73578,73580,73582],{"class":323,"line":33139},[321,73579,52289],{"class":331},[321,73581,469],{"class":51445},[321,73583,51452],{"class":331},[321,73585,73586,73588,73590],{"class":323,"line":33153},[321,73587,51486],{"class":331},[321,73589,472],{"class":51445},[321,73591,51452],{"class":331},[321,73593,73594,73596,73598],{"class":323,"line":33159},[321,73595,55379],{"class":331},[321,73597,475],{"class":51445},[321,73599,51452],{"class":331},[321,73601,73602,73604,73606,73609,73611],{"class":323,"line":33165},[321,73603,55447],{"class":331},[321,73605,478],{"class":51445},[321,73607,73608],{"class":331},">ID\u003C\u002F",[321,73610,478],{"class":51445},[321,73612,51452],{"class":331},[321,73614,73615,73617,73619,73621,73623],{"class":323,"line":33176},[321,73616,55447],{"class":331},[321,73618,478],{"class":51445},[321,73620,69600],{"class":331},[321,73622,478],{"class":51445},[321,73624,51452],{"class":331},[321,73626,73627,73629,73631,73633,73635],{"class":323,"line":33182},[321,73628,55447],{"class":331},[321,73630,478],{"class":51445},[321,73632,69613],{"class":331},[321,73634,478],{"class":51445},[321,73636,51452],{"class":331},[321,73638,73639,73641,73643,73645,73647],{"class":323,"line":33188},[321,73640,55447],{"class":331},[321,73642,478],{"class":51445},[321,73644,69626],{"class":331},[321,73646,478],{"class":51445},[321,73648,51452],{"class":331},[321,73650,73651,73653,73655,73657,73659],{"class":323,"line":33198},[321,73652,55447],{"class":331},[321,73654,478],{"class":51445},[321,73656,69639],{"class":331},[321,73658,478],{"class":51445},[321,73660,51452],{"class":331},[321,73662,73663,73665,73667,73669,73671],{"class":323,"line":33204},[321,73664,55447],{"class":331},[321,73666,478],{"class":51445},[321,73668,69652],{"class":331},[321,73670,478],{"class":51445},[321,73672,51452],{"class":331},[321,73674,73675,73677,73679,73682,73684],{"class":323,"line":33215},[321,73676,55447],{"class":331},[321,73678,478],{"class":51445},[321,73680,73681],{"class":331},">录入时间\u003C\u002F",[321,73683,478],{"class":51445},[321,73685,51452],{"class":331},[321,73687,73688,73690,73692,73694,73696],{"class":323,"line":33221},[321,73689,55447],{"class":331},[321,73691,478],{"class":51445},[321,73693,69665],{"class":331},[321,73695,478],{"class":51445},[321,73697,51452],{"class":331},[321,73699,73700,73702,73704],{"class":323,"line":33231},[321,73701,55552],{"class":331},[321,73703,475],{"class":51445},[321,73705,51452],{"class":331},[321,73707,73708,73710,73712],{"class":323,"line":33236},[321,73709,51921],{"class":331},[321,73711,472],{"class":51445},[321,73713,51452],{"class":331},[321,73715,73716,73718,73720],{"class":323,"line":33242},[321,73717,51486],{"class":331},[321,73719,516],{"class":51445},[321,73721,51452],{"class":331},[321,73723,73724],{"class":323,"line":33291},[321,73725,73726],{"class":390},"      \u003C!-- \u003Ctr>\n",[321,73728,73729],{"class":323,"line":33338},[321,73730,73731],{"class":390},"        \u003Ctd>1\u003C\u002Ftd>\n",[321,73733,73734],{"class":323,"line":33343},[321,73735,73731],{"class":390},[321,73737,73738],{"class":323,"line":33349},[321,73739,73731],{"class":390},[321,73741,73742],{"class":323,"line":33368},[321,73743,73731],{"class":390},[321,73745,73746],{"class":323,"line":33374},[321,73747,73731],{"class":390},[321,73749,73750],{"class":323,"line":33394},[321,73751,73731],{"class":390},[321,73753,73754],{"class":323,"line":33400},[321,73755,73731],{"class":390},[321,73757,73758],{"class":323,"line":33406},[321,73759,73760],{"class":390},"        \u003Ctd>\n",[321,73762,73763],{"class":323,"line":33416},[321,73764,73765],{"class":390},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[321,73767,73768],{"class":323,"line":33421},[321,73769,73770],{"class":390},"        \u003C\u002Ftd>\n",[321,73772,73773],{"class":323,"line":33427},[321,73774,73775],{"class":390},"      \u003C\u002Ftr> -->\n",[321,73777,73778,73780,73782],{"class":323,"line":33443},[321,73779,51921],{"class":331},[321,73781,516],{"class":51445},[321,73783,51452],{"class":331},[321,73785,73786,73788,73790],{"class":323,"line":33488},[321,73787,52562],{"class":331},[321,73789,469],{"class":51445},[321,73791,51452],{"class":331},[321,73793,73794,73796,73798],{"class":323,"line":33494},[321,73795,52289],{"class":331},[321,73797,51958],{"class":51445},[321,73799,51452],{"class":331},[321,73801,73802],{"class":323,"line":33500},[321,73803,73804],{"class":390},"    \u002F\u002F const initData = [{\n",[321,73806,73807],{"class":323,"line":33506},[321,73808,73809],{"class":390},"    \u002F\u002F   unameId: 1,\n",[321,73811,73812],{"class":323,"line":33517},[321,73813,73814],{"class":390},"    \u002F\u002F   uname: '华晨宇',\n",[321,73816,73817],{"class":323,"line":33523},[321,73818,73819],{"class":390},"    \u002F\u002F   age: 22,\n",[321,73821,73822],{"class":323,"line":33529},[321,73823,73824],{"class":390},"    \u002F\u002F   salary: 12000,\n",[321,73826,73827],{"class":323,"line":33535},[321,73828,73829],{"class":390},"    \u002F\u002F   gender: '男',\n",[321,73831,73832],{"class":323,"line":33553},[321,73833,73834],{"class":390},"    \u002F\u002F   city: '北京',\n",[321,73836,73837],{"class":323,"line":33567},[321,73838,73839],{"class":390},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[321,73841,73842],{"class":323,"line":33576},[321,73843,73844],{"class":390},"    \u002F\u002F }]\n",[321,73846,73847],{"class":323,"line":33585},[321,73848,73849],{"class":390},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[321,73851,73852],{"class":323,"line":33594},[321,73853,73854],{"class":390},"    \u002F\u002F 1.渲染业务\n",[321,73856,73857],{"class":323,"line":33603},[321,73858,73859],{"class":390},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[321,73861,73862],{"class":323,"line":33609},[321,73863,73864],{"class":390},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[321,73866,73867],{"class":323,"line":33615},[321,73868,73869],{"class":390},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[321,73871,73872],{"class":323,"line":33623},[321,73873,2606],{"emptyLinePlaceholder":251},[321,73875,73876],{"class":323,"line":33628},[321,73877,73878],{"class":390},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[321,73880,73881],{"class":323,"line":33634},[321,73882,73883],{"class":390},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[321,73885,73886,73888,73890,73892],{"class":323,"line":33645},[321,73887,11428],{"class":327},[321,73889,57840],{"class":380},[321,73891,13771],{"class":327},[321,73893,51983],{"class":331},[321,73895,73896,73899,73901],{"class":323,"line":33651},[321,73897,73898],{"class":331},"    console.",[321,73900,58392],{"class":2169},[321,73902,52557],{"class":331},[321,73904,73905],{"class":323,"line":33671},[321,73906,2606],{"emptyLinePlaceholder":251},[321,73908,73909],{"class":323,"line":33677},[321,73910,73911],{"class":390},"    \u002F\u002F 时间函数\n",[321,73913,73914,73916,73919],{"class":323,"line":33683},[321,73915,70229],{"class":327},[321,73917,73918],{"class":2169}," getTime",[321,73920,11060],{"class":331},[321,73922,73923,73925,73928,73930,73932,73935],{"class":323,"line":33689},[321,73924,58373],{"class":327},[321,73926,73927],{"class":380}," date",[321,73929,13771],{"class":327},[321,73931,11785],{"class":327},[321,73933,73934],{"class":2169}," Date",[321,73936,2182],{"class":331},[321,73938,73939,73941,73943,73945,73948,73951,73953,73955,73957,73960,73963,73965,73967,73969,73971,73973,73975,73977],{"class":323,"line":33706},[321,73940,58373],{"class":327},[321,73942,16298],{"class":380},[321,73944,13771],{"class":327},[321,73946,73947],{"class":331}," date.",[321,73949,73950],{"class":2169},"getHours",[321,73952,13257],{"class":331},[321,73954,1242],{"class":327},[321,73956,2244],{"class":380},[321,73958,73959],{"class":327}," ?",[321,73961,73962],{"class":436}," '0'",[321,73964,45711],{"class":327},[321,73966,73947],{"class":331},[321,73968,73950],{"class":2169},[321,73970,13257],{"class":331},[321,73972,1191],{"class":327},[321,73974,73947],{"class":331},[321,73976,73950],{"class":2169},[321,73978,2182],{"class":331},[321,73980,73981,73983,73986,73988,73990,73993,73995,73997,73999,74001,74003,74005,74007,74009,74011,74013,74015,74017],{"class":323,"line":33712},[321,73982,58373],{"class":327},[321,73984,73985],{"class":380}," m",[321,73987,13771],{"class":327},[321,73989,73947],{"class":331},[321,73991,73992],{"class":2169},"getMinutes",[321,73994,13257],{"class":331},[321,73996,1242],{"class":327},[321,73998,2244],{"class":380},[321,74000,73959],{"class":327},[321,74002,73962],{"class":436},[321,74004,45711],{"class":327},[321,74006,73947],{"class":331},[321,74008,73992],{"class":2169},[321,74010,13257],{"class":331},[321,74012,1191],{"class":327},[321,74014,73947],{"class":331},[321,74016,73992],{"class":2169},[321,74018,2182],{"class":331},[321,74020,74021,74023,74025,74027,74029,74032,74034,74036,74038,74040,74042,74044,74046,74048,74050,74052,74054,74056],{"class":323,"line":33718},[321,74022,58373],{"class":327},[321,74024,8635],{"class":380},[321,74026,13771],{"class":327},[321,74028,73947],{"class":331},[321,74030,74031],{"class":2169},"getSeconds",[321,74033,13257],{"class":331},[321,74035,1242],{"class":327},[321,74037,2244],{"class":380},[321,74039,73959],{"class":327},[321,74041,73962],{"class":436},[321,74043,45711],{"class":327},[321,74045,73947],{"class":331},[321,74047,74031],{"class":2169},[321,74049,13257],{"class":331},[321,74051,1191],{"class":327},[321,74053,73947],{"class":331},[321,74055,74031],{"class":2169},[321,74057,2182],{"class":331},[321,74059,74060,74062,74065,74067,74069,74072,74074,74077,74079,74082,74084,74086,74089,74091,74093,74095,74097,74099,74101,74104,74106,74109,74111,74114,74116,74118,74120],{"class":323,"line":33724},[321,74061,58373],{"class":327},[321,74063,74064],{"class":380}," str",[321,74066,13771],{"class":327},[321,74068,63048],{"class":436},[321,74070,74071],{"class":331},"date",[321,74073,890],{"class":436},[321,74075,74076],{"class":2169},"getFullYear",[321,74078,2633],{"class":436},[321,74080,74081],{"class":436},"}\u002F${",[321,74083,74071],{"class":331},[321,74085,890],{"class":436},[321,74087,74088],{"class":2169},"getMonth",[321,74090,13257],{"class":436},[321,74092,813],{"class":327},[321,74094,25263],{"class":380},[321,74096,74081],{"class":436},[321,74098,74071],{"class":331},[321,74100,890],{"class":436},[321,74102,74103],{"class":2169},"getDate",[321,74105,2633],{"class":436},[321,74107,74108],{"class":436},"} ${",[321,74110,747],{"class":331},[321,74112,74113],{"class":436},"}:${",[321,74115,876],{"class":331},[321,74117,74113],{"class":436},[321,74119,1027],{"class":331},[321,74121,74122],{"class":436},"}`\n",[321,74124,74125,74128],{"class":323,"line":33730},[321,74126,74127],{"class":327},"      return",[321,74129,74130],{"class":331}," str\n",[321,74132,74133],{"class":323,"line":33736},[321,74134,2393],{"class":331},[321,74136,74137],{"class":323,"line":33763},[321,74138,74139],{"class":390},"    \u002F\u002F 渲染函数\n",[321,74141,74142,74144,74146,74148,74150,74152,74154,74156],{"class":323,"line":33787},[321,74143,11428],{"class":327},[321,74145,69892],{"class":380},[321,74147,13771],{"class":327},[321,74149,54541],{"class":331},[321,74151,54544],{"class":2169},[321,74153,332],{"class":331},[321,74155,69903],{"class":436},[321,74157,338],{"class":331},[321,74159,74160,74162,74164],{"class":323,"line":33793},[321,74161,70229],{"class":327},[321,74163,70232],{"class":2169},[321,74165,11060],{"class":331},[321,74167,74168],{"class":323,"line":33799},[321,74169,74170],{"class":390},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[321,74172,74173],{"class":323,"line":33805},[321,74174,74175],{"class":390},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[321,74177,74178,74180,74183,74185,74187,74190,74192,74194,74196,74199,74201,74204],{"class":323,"line":33816},[321,74179,58373],{"class":327},[321,74181,74182],{"class":380}," trArr",[321,74184,13771],{"class":327},[321,74186,52110],{"class":331},[321,74188,74189],{"class":2169},"map",[321,74191,332],{"class":331},[321,74193,54594],{"class":327},[321,74195,1864],{"class":331},[321,74197,74198],{"class":5423},"ele",[321,74200,12642],{"class":331},[321,74202,74203],{"class":5423},"index",[321,74205,12649],{"class":331},[321,74207,74208,74210],{"class":323,"line":33827},[321,74209,14959],{"class":327},[321,74211,70313],{"class":436},[321,74213,74214],{"class":323,"line":33833},[321,74215,74216],{"class":436},"      \u003Ctr>\n",[321,74218,74219,74221,74223,74225,74228],{"class":323,"line":33850},[321,74220,70318],{"class":436},[321,74222,74198],{"class":331},[321,74224,890],{"class":436},[321,74226,74227],{"class":331},"unameId",[321,74229,70333],{"class":436},[321,74231,74232,74234,74236,74238,74240],{"class":323,"line":33873},[321,74233,70318],{"class":436},[321,74235,74198],{"class":331},[321,74237,890],{"class":436},[321,74239,70349],{"class":331},[321,74241,70333],{"class":436},[321,74243,74244,74246,74248,74250,74252],{"class":323,"line":33896},[321,74245,70318],{"class":436},[321,74247,74198],{"class":331},[321,74249,890],{"class":436},[321,74251,70366],{"class":331},[321,74253,70333],{"class":436},[321,74255,74256,74258,74260,74262,74264],{"class":323,"line":33902},[321,74257,70318],{"class":436},[321,74259,74198],{"class":331},[321,74261,890],{"class":436},[321,74263,70383],{"class":331},[321,74265,70333],{"class":436},[321,74267,74268,74270,74272,74274,74276],{"class":323,"line":33907},[321,74269,70318],{"class":436},[321,74271,74198],{"class":331},[321,74273,890],{"class":436},[321,74275,70400],{"class":331},[321,74277,70333],{"class":436},[321,74279,74280,74282,74284,74286,74288],{"class":323,"line":33916},[321,74281,70318],{"class":436},[321,74283,74198],{"class":331},[321,74285,890],{"class":436},[321,74287,70417],{"class":331},[321,74289,70333],{"class":436},[321,74291,74292,74294,74296,74298,74300],{"class":323,"line":33926},[321,74293,70318],{"class":436},[321,74295,74198],{"class":331},[321,74297,890],{"class":436},[321,74299,2593],{"class":331},[321,74301,70333],{"class":436},[321,74303,74304],{"class":323,"line":33932},[321,74305,73760],{"class":436},[321,74307,74308,74311,74313],{"class":323,"line":33937},[321,74309,74310],{"class":436},"          \u003Ca href=\"#\" data-id=\"${",[321,74312,74203],{"class":331},[321,74314,74315],{"class":436},"}\">删除\u003C\u002Fa>\n",[321,74317,74318],{"class":323,"line":33943},[321,74319,73770],{"class":436},[321,74321,74322],{"class":323,"line":33956},[321,74323,74324],{"class":436},"      \u003C\u002Ftr>\n",[321,74326,74327],{"class":323,"line":33962},[321,74328,74329],{"class":436},"  `\n",[321,74331,74332],{"class":323,"line":33973},[321,74333,64960],{"class":331},[321,74335,74336,74338,74340],{"class":323,"line":33984},[321,74337,58389],{"class":331},[321,74339,58392],{"class":2169},[321,74341,74342],{"class":331},"(trArr)\n",[321,74344,74345],{"class":323,"line":34003},[321,74346,2606],{"emptyLinePlaceholder":251},[321,74348,74349],{"class":323,"line":49663},[321,74350,74351],{"class":390},"      \u002F\u002F (2) 把数组转换为字符串join\n",[321,74353,74354],{"class":323,"line":49668},[321,74355,74356],{"class":390},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[321,74358,74359,74361,74363,74366,74369,74371,74374],{"class":323,"line":49677},[321,74360,70244],{"class":331},[321,74362,377],{"class":327},[321,74364,74365],{"class":331}," trArr.",[321,74367,74368],{"class":2169},"join",[321,74370,332],{"class":331},[321,74372,74373],{"class":436},"''",[321,74375,338],{"class":331},[321,74377,74378],{"class":323,"line":49686},[321,74379,74380],{"class":390},"      \u002F\u002F 显示共有几条\n",[321,74382,74383,74385,74387,74389,74392,74395,74397,74399],{"class":323,"line":49691},[321,74384,55916],{"class":331},[321,74386,54544],{"class":2169},[321,74388,332],{"class":331},[321,74390,74391],{"class":436},"'.total span'",[321,74393,74394],{"class":331},").innerHTML ",[321,74396,377],{"class":327},[321,74398,52110],{"class":331},[321,74400,55976],{"class":380},[321,74402,74403],{"class":323,"line":49696},[321,74404,2393],{"class":331},[321,74406,74407],{"class":323,"line":49701},[321,74408,74409],{"class":390},"    \u002F\u002F render()\n",[321,74411,74412],{"class":323,"line":49714},[321,74413,2606],{"emptyLinePlaceholder":251},[321,74415,74416],{"class":323,"line":49719},[321,74417,74418],{"class":390},"    \u002F\u002F 获取DOM对象\n",[321,74420,74421,74423,74425,74427,74429,74431,74433,74435],{"class":323,"line":49728},[321,74422,11428],{"class":327},[321,74424,69966],{"class":380},[321,74426,13771],{"class":327},[321,74428,54541],{"class":331},[321,74430,54544],{"class":2169},[321,74432,332],{"class":331},[321,74434,69977],{"class":436},[321,74436,338],{"class":331},[321,74438,74439,74441,74443,74445,74447,74449,74451,74453],{"class":323,"line":49737},[321,74440,11428],{"class":327},[321,74442,69793],{"class":380},[321,74444,13771],{"class":327},[321,74446,54541],{"class":331},[321,74448,54544],{"class":2169},[321,74450,332],{"class":331},[321,74452,69804],{"class":436},[321,74454,338],{"class":331},[321,74456,74457,74459,74461,74463,74465,74467,74469,74471],{"class":323,"line":49754},[321,74458,11428],{"class":327},[321,74460,15896],{"class":380},[321,74462,13771],{"class":327},[321,74464,54541],{"class":331},[321,74466,54544],{"class":2169},[321,74468,332],{"class":331},[321,74470,69823],{"class":436},[321,74472,338],{"class":331},[321,74474,74476,74478,74480,74482,74484,74486,74488,74490],{"class":323,"line":74475},231,[321,74477,11428],{"class":327},[321,74479,69852],{"class":380},[321,74481,13771],{"class":327},[321,74483,54541],{"class":331},[321,74485,54544],{"class":2169},[321,74487,332],{"class":331},[321,74489,69863],{"class":436},[321,74491,338],{"class":331},[321,74493,74495,74497,74499,74501,74503,74505,74507,74509],{"class":323,"line":74494},232,[321,74496,11428],{"class":327},[321,74498,69832],{"class":380},[321,74500,13771],{"class":327},[321,74502,54541],{"class":331},[321,74504,54544],{"class":2169},[321,74506,332],{"class":331},[321,74508,69843],{"class":436},[321,74510,338],{"class":331},[321,74512,74514,74516,74518,74520,74522,74524,74526,74528],{"class":323,"line":74513},233,[321,74515,11428],{"class":327},[321,74517,69872],{"class":380},[321,74519,13771],{"class":327},[321,74521,54541],{"class":331},[321,74523,54544],{"class":2169},[321,74525,332],{"class":331},[321,74527,69883],{"class":436},[321,74529,338],{"class":331},[321,74531,74533],{"class":323,"line":74532},234,[321,74534,2606],{"emptyLinePlaceholder":251},[321,74536,74538],{"class":323,"line":74537},235,[321,74539,74540],{"class":390},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[321,74542,74544,74546,74548,74550,74552,74554,74556,74558,74560],{"class":323,"line":74543},236,[321,74545,69984],{"class":331},[321,74547,57958],{"class":2169},[321,74549,332],{"class":331},[321,74551,69991],{"class":436},[321,74553,12642],{"class":331},[321,74555,54594],{"class":327},[321,74557,1864],{"class":331},[321,74559,406],{"class":5423},[321,74561,12649],{"class":331},[321,74563,74565],{"class":323,"line":74564},237,[321,74566,74567],{"class":390},"      \u002F\u002F 禁止浏览器跳转\n",[321,74569,74571,74573,74575],{"class":323,"line":74570},238,[321,74572,70011],{"class":331},[321,74574,70014],{"class":2169},[321,74576,2182],{"class":331},[321,74578,74580],{"class":323,"line":74579},239,[321,74581,74582],{"class":390},"      \u002F\u002F 非空判断\n",[321,74584,74586],{"class":323,"line":74585},240,[321,74587,74588],{"class":390},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[321,74590,74592],{"class":323,"line":74591},241,[321,74593,74594],{"class":390},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[321,74596,74598,74600,74602,74604,74607,74609,74612,74615,74617,74619],{"class":323,"line":74597},242,[321,74599,54625],{"class":327},[321,74601,1864],{"class":331},[321,74603,558],{"class":327},[321,74605,74606],{"class":331},"uname.value ",[321,74608,71502],{"class":327},[321,74610,74611],{"class":327}," !",[321,74613,74614],{"class":331},"age.value ",[321,74616,71502],{"class":327},[321,74618,74611],{"class":327},[321,74620,74621],{"class":331},"salary.value) {\n",[321,74623,74625,74627,74629,74631,74633],{"class":323,"line":74624},243,[321,74626,14959],{"class":327},[321,74628,70085],{"class":2169},[321,74630,332],{"class":331},[321,74632,70090],{"class":436},[321,74634,338],{"class":331},[321,74636,74638],{"class":323,"line":74637},244,[321,74639,52543],{"class":331},[321,74641,74643,74645,74647],{"class":323,"line":74642},245,[321,74644,58152],{"class":331},[321,74646,52029],{"class":2169},[321,74648,74649],{"class":331},"({\n",[321,74651,74653],{"class":323,"line":74652},246,[321,74654,74655],{"class":390},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[321,74657,74659],{"class":323,"line":74658},247,[321,74660,74661],{"class":390},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[321,74663,74665],{"class":323,"line":74664},248,[321,74666,74667],{"class":390},"        \u002F\u002F 对象的序号应为数组长度+1\n",[321,74669,74671],{"class":323,"line":74670},249,[321,74672,74673],{"class":390},"        \u002F\u002F unameId: arr.length + 1,\n",[321,74675,74677],{"class":323,"line":74676},250,[321,74678,2606],{"emptyLinePlaceholder":251},[321,74680,74682],{"class":323,"line":74681},251,[321,74683,74684],{"class":390},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[321,74686,74688],{"class":323,"line":74687},252,[321,74689,74690],{"class":390},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[321,74692,74694],{"class":323,"line":74693},253,[321,74695,74696],{"class":390},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[321,74698,74700],{"class":323,"line":74699},254,[321,74701,74702],{"class":390},"        \u002F\u002F 0当假看\n",[321,74704,74706,74709,74711,74713,74716,74718,74720,74722,74725,74727,74729,74732,74734],{"class":323,"line":74705},255,[321,74707,74708],{"class":331},"        unameId: arr.",[321,74710,52113],{"class":380},[321,74712,73959],{"class":327},[321,74714,74715],{"class":331}," arr[arr.",[321,74717,52113],{"class":380},[321,74719,52416],{"class":327},[321,74721,25263],{"class":380},[321,74723,74724],{"class":331},"].unameId ",[321,74726,813],{"class":327},[321,74728,25263],{"class":380},[321,74730,74731],{"class":327}," :",[321,74733,25263],{"class":380},[321,74735,31611],{"class":331},[321,74737,74739],{"class":323,"line":74738},256,[321,74740,70138],{"class":331},[321,74742,74744],{"class":323,"line":74743},257,[321,74745,70143],{"class":331},[321,74747,74749],{"class":323,"line":74748},258,[321,74750,70153],{"class":331},[321,74752,74754],{"class":323,"line":74753},259,[321,74755,70148],{"class":331},[321,74757,74759],{"class":323,"line":74758},260,[321,74760,74761],{"class":331},"        city: city.value,\n",[321,74763,74765],{"class":323,"line":74764},261,[321,74766,74767],{"class":390},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[321,74769,74771],{"class":323,"line":74770},262,[321,74772,74773],{"class":390},"        \u002F\u002F time: new Date().toDateString()\n",[321,74775,74777,74780,74783],{"class":323,"line":74776},263,[321,74778,74779],{"class":331},"        time: ",[321,74781,74782],{"class":2169},"getTime",[321,74784,2182],{"class":331},[321,74786,74788],{"class":323,"line":74787},264,[321,74789,64960],{"class":331},[321,74791,74793],{"class":323,"line":74792},265,[321,74794,74795],{"class":390},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[321,74797,74799,74801],{"class":323,"line":74798},266,[321,74800,70213],{"class":2169},[321,74802,2182],{"class":331},[321,74804,74806,74808,74810,74812,74814],{"class":323,"line":74805},267,[321,74807,70196],{"class":380},[321,74809,890],{"class":331},[321,74811,70201],{"class":2169},[321,74813,13257],{"class":331},[321,74815,74816],{"class":390},"\u002F\u002F重置表单\n",[321,74818,74820],{"class":323,"line":74819},268,[321,74821,74822],{"class":390},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[321,74824,74826,74829,74831,74833,74836,74838,74840,74842,74844],{"class":323,"line":74825},269,[321,74827,74828],{"class":331},"      localStorage.",[321,74830,71799],{"class":2169},[321,74832,332],{"class":331},[321,74834,74835],{"class":436},"'data'",[321,74837,12642],{"class":331},[321,74839,71809],{"class":380},[321,74841,890],{"class":331},[321,74843,71814],{"class":2169},[321,74845,74846],{"class":331},"(arr))\n",[321,74848,74850],{"class":323,"line":74849},270,[321,74851,33606],{"class":331},[321,74853,74855],{"class":323,"line":74854},271,[321,74856,2606],{"emptyLinePlaceholder":251},[321,74858,74860],{"class":323,"line":74859},272,[321,74861,74862],{"class":390},"    \u002F\u002F 3.删除业务\n",[321,74864,74866],{"class":323,"line":74865},273,[321,74867,74868],{"class":390},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[321,74870,74872,74874,74876,74878,74880,74882,74884,74886,74888],{"class":323,"line":74871},274,[321,74873,70486],{"class":331},[321,74875,57958],{"class":2169},[321,74877,332],{"class":331},[321,74879,57963],{"class":436},[321,74881,12642],{"class":331},[321,74883,54594],{"class":327},[321,74885,1864],{"class":331},[321,74887,406],{"class":5423},[321,74889,12649],{"class":331},[321,74891,74893],{"class":323,"line":74892},275,[321,74894,74895],{"class":390},"      \u002F\u002F 判断是否点击的是删除按钮\n",[321,74897,74899,74901,74903,74905,74907],{"class":323,"line":74898},276,[321,74900,54625],{"class":327},[321,74902,67179],{"class":331},[321,74904,54631],{"class":327},[321,74906,68401],{"class":436},[321,74908,12649],{"class":331},[321,74910,74912],{"class":323,"line":74911},277,[321,74913,74914],{"class":390},"        \u002F\u002F alert(1)\n",[321,74916,74918],{"class":323,"line":74917},278,[321,74919,74920],{"class":390},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[321,74922,74924],{"class":323,"line":74923},279,[321,74925,74926],{"class":390},"        \u002F\u002F console.log(e.target)\n",[321,74928,74930],{"class":323,"line":74929},280,[321,74931,74932],{"class":390},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[321,74934,74936],{"class":323,"line":74935},281,[321,74937,2606],{"emptyLinePlaceholder":251},[321,74939,74941],{"class":323,"line":74940},282,[321,74942,74943],{"class":390},"        \u002F\u002F 确认框，确然是否真的要删除\n",[321,74945,74947],{"class":323,"line":74946},283,[321,74948,74949],{"class":390},"        \u002F\u002F confirm()为确认框\n",[321,74951,74953],{"class":323,"line":74952},284,[321,74954,74955],{"class":390},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[321,74957,74959,74961,74963,74966,74968,74971],{"class":323,"line":74958},285,[321,74960,2703],{"class":327},[321,74962,1864],{"class":331},[321,74964,74965],{"class":2169},"confirm",[321,74967,332],{"class":331},[321,74969,74970],{"class":436},"'您确定要删除这条数据吗？'",[321,74972,74973],{"class":331},")) {\n",[321,74975,74977,74980,74982,74984,74986],{"class":323,"line":74976},286,[321,74978,74979],{"class":331},"          arr.",[321,74981,58155],{"class":2169},[321,74983,70539],{"class":331},[321,74985,549],{"class":380},[321,74987,338],{"class":331},[321,74989,74991],{"class":323,"line":74990},287,[321,74992,74993],{"class":390},"          \u002F\u002F 3.4 重新渲染页面\n",[321,74995,74997,75000],{"class":323,"line":74996},288,[321,74998,74999],{"class":2169},"          render",[321,75001,2182],{"class":331},[321,75003,75005],{"class":323,"line":75004},289,[321,75006,75007],{"class":390},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[321,75009,75011,75014,75016,75018,75020,75022,75024,75026,75028],{"class":323,"line":75010},290,[321,75012,75013],{"class":331},"          localStorage.",[321,75015,71799],{"class":2169},[321,75017,332],{"class":331},[321,75019,74835],{"class":436},[321,75021,12642],{"class":331},[321,75023,71809],{"class":380},[321,75025,890],{"class":331},[321,75027,71814],{"class":2169},[321,75029,74846],{"class":331},[321,75031,75033],{"class":323,"line":75032},291,[321,75034,2735],{"class":331},[321,75036,75038],{"class":323,"line":75037},292,[321,75039,52543],{"class":331},[321,75041,75043],{"class":323,"line":75042},293,[321,75044,2606],{"emptyLinePlaceholder":251},[321,75046,75048],{"class":323,"line":75047},294,[321,75049,33606],{"class":331},[321,75051,75053],{"class":323,"line":75052},295,[321,75054,2606],{"emptyLinePlaceholder":251},[321,75056,75058,75060,75062],{"class":323,"line":75057},296,[321,75059,52562],{"class":331},[321,75061,51958],{"class":51445},[321,75063,51452],{"class":331},[321,75065,75067,75069,75071],{"class":323,"line":75066},297,[321,75068,51930],{"class":331},[321,75070,51945],{"class":51445},[321,75072,51452],{"class":331},[321,75074,75076],{"class":323,"line":75075},298,[321,75077,2606],{"emptyLinePlaceholder":251},[321,75079,75081,75083,75085],{"class":323,"line":75080},299,[321,75082,51930],{"class":331},[321,75084,50780],{"class":51445},[321,75086,51452],{"class":331},[14,75088,75090],{"id":75089},"_36-正则表达式","3.6 正则表达式",[19,75092,75093],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75095,75096],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75098,75099],{},"正则表达式的作用：",[1339,75101,75102,75109,75115],{},[154,75103,75104,75105,75108],{},"表单验证（ ",[481,75106,75107],{},"匹配"," ）",[154,75110,75111,75112,75108],{},"过滤敏感词（ ",[481,75113,75114],{},"替换",[154,75116,75117,75118,75108],{},"字符串中提取我们想要的部分（ ",[481,75119,75120],{},"提取",[292,75122,75124],{"id":75123},"_361-语法","3.6.1 语法",[19,75126,75127],{},"正则表达式使用步骤：",[151,75129,75130,75133],{},[154,75131,75132],{},"定义规则",[154,75134,75135],{},"查找是否匹配",[19,75137,75138],{},"正则表达式里边不需要写引号",[19,75140,75141],{},[28,75142],{"alt":30,"src":75143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75145,75146],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75148,75149],{},"reg.test(str)",[19,75151,75152],{},[28,75153],{"alt":30,"src":75154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75156,75157],{},[28,75158],{"alt":30,"src":75159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[292,75161,75163],{"id":75162},"_362-元字符","3.6.2 元字符",[151,75165,75166,75169,75172,75175,75182],{},[154,75167,75168],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[154,75170,75171],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[154,75173,75174],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[154,75176,75177,75178],{},"正则验证工具：",[570,75179,75180],{"href":75180,"rel":75181},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24073],[154,75183,75184],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22205,75186,75188],{"id":75187},"_3621-边界符","3.6.2.1 边界符",[19,75190,75191],{},[28,75192],{"alt":30,"src":75193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75195,75196],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75198,75199],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75201,75202],{},"只匹配一次",[19,75204,75205],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22205,75207,75209],{"id":75208},"_3622-量词","3.6.2.2 量词",[19,75211,75212],{},[28,75213],{"alt":30,"src":75214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75216,75217],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22205,75219,75221],{"id":75220},"_3623-元字符","3.6.2.3 元字符",[19,75223,75224],{},[28,75225],{"alt":30,"src":75226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75228,75229],{},"匹配的是a或b或c []只选一个",[19,75231,75232],{},[28,75233],{"alt":30,"src":75234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75236,75237],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75239,75240],{},[28,75241],{"alt":30,"src":75242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75244,75245],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75247,75248],{},[28,75249],{"alt":30,"src":75250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[312,75252,75254],{"className":50778,"code":75253,"language":50780,"meta":30,"style":30},"\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",[318,75255,75256,75266,75280,75284,75292,75306,75326,75338,75346,75350,75358,75366,75371,75402,75429,75457,75461,75466,75494,75525,75530,75535,75566,75598,75630,75634,75639,75670,75700,75730,75734,75739,75770,75801,75831,75861,75865,75870,75903,75907,75912,75943,75974,75978,75983,76014,76044,76075,76079,76084,76116,76147,76178,76205,76236,76268,76301,76332,76363,76395,76426,76434,76442,76446],{"__ignoreMap":30},[321,75257,75258,75260,75262,75264],{"class":323,"line":324},[321,75259,51442],{"class":331},[321,75261,51446],{"class":51445},[321,75263,51449],{"class":2169},[321,75265,51452],{"class":331},[321,75267,75268,75270,75272,75274,75276,75278],{"class":323,"line":167},[321,75269,1242],{"class":331},[321,75271,50780],{"class":51445},[321,75273,51461],{"class":2169},[321,75275,377],{"class":331},[321,75277,51466],{"class":436},[321,75279,51452],{"class":331},[321,75281,75282],{"class":323,"line":200},[321,75283,2606],{"emptyLinePlaceholder":251},[321,75285,75286,75288,75290],{"class":323,"line":1401},[321,75287,1242],{"class":331},[321,75289,51479],{"class":51445},[321,75291,51452],{"class":331},[321,75293,75294,75296,75298,75300,75302,75304],{"class":323,"line":1407},[321,75295,52289],{"class":331},[321,75297,51489],{"class":51445},[321,75299,51492],{"class":2169},[321,75301,377],{"class":331},[321,75303,51497],{"class":436},[321,75305,51452],{"class":331},[321,75307,75308,75310,75312,75314,75316,75318,75320,75322,75324],{"class":323,"line":1421},[321,75309,52289],{"class":331},[321,75311,51489],{"class":51445},[321,75313,15127],{"class":2169},[321,75315,377],{"class":331},[321,75317,51536],{"class":436},[321,75319,51516],{"class":2169},[321,75321,377],{"class":331},[321,75323,51543],{"class":436},[321,75325,51452],{"class":331},[321,75327,75328,75330,75332,75334,75336],{"class":323,"line":1427},[321,75329,52289],{"class":331},[321,75331,51552],{"class":51445},[321,75333,51555],{"class":331},[321,75335,51552],{"class":51445},[321,75337,51452],{"class":331},[321,75339,75340,75342,75344],{"class":323,"line":1518},[321,75341,51930],{"class":331},[321,75343,51479],{"class":51445},[321,75345,51452],{"class":331},[321,75347,75348],{"class":323,"line":1524},[321,75349,2606],{"emptyLinePlaceholder":251},[321,75351,75352,75354,75356],{"class":323,"line":1536},[321,75353,1242],{"class":331},[321,75355,51945],{"class":51445},[321,75357,51452],{"class":331},[321,75359,75360,75362,75364],{"class":323,"line":1818},[321,75361,52289],{"class":331},[321,75363,51958],{"class":51445},[321,75365,51452],{"class":331},[321,75367,75368],{"class":323,"line":1823},[321,75369,75370],{"class":390},"    \u002F\u002F 元字符中\n",[321,75372,75373,75375,75377,75379,75381,75384,75386,75388,75391,75393,75396,75399],{"class":323,"line":1829},[321,75374,73898],{"class":331},[321,75376,58392],{"class":2169},[321,75378,332],{"class":331},[321,75380,916],{"class":436},[321,75382,75383],{"class":48122},"哈",[321,75385,916],{"class":436},[321,75387,890],{"class":331},[321,75389,75390],{"class":2169},"test",[321,75392,332],{"class":331},[321,75394,75395],{"class":436},"'哈'",[321,75397,75398],{"class":331},"))  ",[321,75400,75401],{"class":390},"\u002F\u002Ftrue\n",[321,75403,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75425,75427],{"class":323,"line":1834},[321,75405,73898],{"class":331},[321,75407,58392],{"class":2169},[321,75409,332],{"class":331},[321,75411,916],{"class":436},[321,75413,75383],{"class":48122},[321,75415,916],{"class":436},[321,75417,890],{"class":331},[321,75419,75390],{"class":2169},[321,75421,332],{"class":331},[321,75423,75424],{"class":436},"'哈哈'",[321,75426,75398],{"class":331},[321,75428,75401],{"class":390},[321,75430,75431,75433,75435,75437,75439,75441,75443,75445,75447,75449,75452,75455],{"class":323,"line":1848},[321,75432,73898],{"class":331},[321,75434,58392],{"class":2169},[321,75436,332],{"class":331},[321,75438,916],{"class":436},[321,75440,75383],{"class":48122},[321,75442,916],{"class":436},[321,75444,890],{"class":331},[321,75446,75390],{"class":2169},[321,75448,332],{"class":331},[321,75450,75451],{"class":436},"'二哈'",[321,75453,75454],{"class":331},"))   ",[321,75456,75401],{"class":390},[321,75458,75459],{"class":323,"line":1853},[321,75460,2606],{"emptyLinePlaceholder":251},[321,75462,75463],{"class":323,"line":1859},[321,75464,75465],{"class":390},"    \u002F\u002F 1.边界符\n",[321,75467,75468,75470,75472,75474,75476,75478,75480,75482,75484,75486,75488,75490,75492],{"class":323,"line":1880},[321,75469,73898],{"class":331},[321,75471,58392],{"class":2169},[321,75473,332],{"class":331},[321,75475,916],{"class":436},[321,75477,1298],{"class":327},[321,75479,75383],{"class":48122},[321,75481,916],{"class":436},[321,75483,890],{"class":331},[321,75485,75390],{"class":2169},[321,75487,332],{"class":331},[321,75489,75395],{"class":436},[321,75491,75398],{"class":331},[321,75493,75401],{"class":390},[321,75495,75496,75498,75500,75502,75504,75506,75508,75510,75512,75514,75516,75518,75520,75522],{"class":323,"line":1885},[321,75497,73898],{"class":331},[321,75499,58392],{"class":2169},[321,75501,332],{"class":331},[321,75503,916],{"class":436},[321,75505,1298],{"class":327},[321,75507,75383],{"class":48122},[321,75509,634],{"class":327},[321,75511,916],{"class":436},[321,75513,890],{"class":331},[321,75515,75390],{"class":2169},[321,75517,332],{"class":331},[321,75519,75424],{"class":436},[321,75521,75398],{"class":331},[321,75523,75524],{"class":390},"\u002F\u002Ffalse\n",[321,75526,75527],{"class":323,"line":1899},[321,75528,75529],{"class":390},"    \u002F\u002F 2.量词\n",[321,75531,75532],{"class":323,"line":1904},[321,75533,75534],{"class":390},"    \u002F\u002F 量词 * 类似于 >= 0\n",[321,75536,75537,75539,75541,75543,75545,75547,75549,75552,75554,75556,75558,75560,75562,75564],{"class":323,"line":1933},[321,75538,73898],{"class":331},[321,75540,58392],{"class":2169},[321,75542,332],{"class":331},[321,75544,916],{"class":436},[321,75546,1298],{"class":327},[321,75548,75383],{"class":48122},[321,75550,75551],{"class":327},"*$",[321,75553,916],{"class":436},[321,75555,890],{"class":331},[321,75557,75390],{"class":2169},[321,75559,332],{"class":331},[321,75561,75424],{"class":436},[321,75563,75398],{"class":331},[321,75565,75401],{"class":390},[321,75567,75568,75570,75572,75574,75576,75578,75580,75582,75584,75586,75588,75590,75593,75595],{"class":323,"line":1938},[321,75569,73898],{"class":331},[321,75571,58392],{"class":2169},[321,75573,332],{"class":331},[321,75575,916],{"class":436},[321,75577,1298],{"class":327},[321,75579,75383],{"class":48122},[321,75581,75551],{"class":327},[321,75583,916],{"class":436},[321,75585,890],{"class":331},[321,75587,75390],{"class":2169},[321,75589,332],{"class":331},[321,75591,75592],{"class":436},"'二哈好傻'",[321,75594,75398],{"class":331},[321,75596,75597],{"class":390},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[321,75599,75600,75602,75604,75606,75608,75610,75612,75614,75616,75618,75620,75622,75625,75627],{"class":323,"line":1955},[321,75601,73898],{"class":331},[321,75603,58392],{"class":2169},[321,75605,332],{"class":331},[321,75607,916],{"class":436},[321,75609,1298],{"class":327},[321,75611,75383],{"class":48122},[321,75613,75551],{"class":327},[321,75615,916],{"class":436},[321,75617,890],{"class":331},[321,75619,75390],{"class":2169},[321,75621,332],{"class":331},[321,75623,75624],{"class":436},"'哈好哈'",[321,75626,75454],{"class":331},[321,75628,75629],{"class":390},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[321,75631,75632],{"class":323,"line":1960},[321,75633,2606],{"emptyLinePlaceholder":251},[321,75635,75636],{"class":323,"line":1965},[321,75637,75638],{"class":390},"    \u002F\u002F +类似于>=1\n",[321,75640,75641,75643,75645,75647,75649,75651,75653,75656,75658,75660,75662,75664,75666,75668],{"class":323,"line":1970},[321,75642,73898],{"class":331},[321,75644,58392],{"class":2169},[321,75646,332],{"class":331},[321,75648,916],{"class":436},[321,75650,1298],{"class":327},[321,75652,75383],{"class":48122},[321,75654,75655],{"class":327},"+$",[321,75657,916],{"class":436},[321,75659,890],{"class":331},[321,75661,75390],{"class":2169},[321,75663,332],{"class":331},[321,75665,75424],{"class":436},[321,75667,75398],{"class":331},[321,75669,75401],{"class":390},[321,75671,75672,75674,75676,75678,75680,75682,75684,75686,75688,75690,75692,75694,75696,75698],{"class":323,"line":1984},[321,75673,73898],{"class":331},[321,75675,58392],{"class":2169},[321,75677,332],{"class":331},[321,75679,916],{"class":436},[321,75681,1298],{"class":327},[321,75683,75383],{"class":48122},[321,75685,75655],{"class":327},[321,75687,916],{"class":436},[321,75689,890],{"class":331},[321,75691,75390],{"class":2169},[321,75693,332],{"class":331},[321,75695,75592],{"class":436},[321,75697,75398],{"class":331},[321,75699,75597],{"class":390},[321,75701,75702,75704,75706,75708,75710,75712,75714,75716,75718,75720,75722,75724,75726,75728],{"class":323,"line":1989},[321,75703,73898],{"class":331},[321,75705,58392],{"class":2169},[321,75707,332],{"class":331},[321,75709,916],{"class":436},[321,75711,1298],{"class":327},[321,75713,75383],{"class":48122},[321,75715,75655],{"class":327},[321,75717,916],{"class":436},[321,75719,890],{"class":331},[321,75721,75390],{"class":2169},[321,75723,332],{"class":331},[321,75725,75624],{"class":436},[321,75727,75454],{"class":331},[321,75729,75524],{"class":390},[321,75731,75732],{"class":323,"line":2783},[321,75733,2606],{"emptyLinePlaceholder":251},[321,75735,75736],{"class":323,"line":2797},[321,75737,75738],{"class":390},"    \u002F\u002F ?类似于0次或一次\n",[321,75740,75741,75743,75745,75747,75749,75751,75754,75756,75758,75760,75762,75764,75766,75768],{"class":323,"line":2805},[321,75742,73898],{"class":331},[321,75744,58392],{"class":2169},[321,75746,332],{"class":331},[321,75748,916],{"class":436},[321,75750,1298],{"class":327},[321,75752,75753],{"class":48122},"哈？",[321,75755,634],{"class":327},[321,75757,916],{"class":436},[321,75759,890],{"class":331},[321,75761,75390],{"class":2169},[321,75763,332],{"class":331},[321,75765,74373],{"class":436},[321,75767,75454],{"class":331},[321,75769,75401],{"class":390},[321,75771,75772,75774,75776,75778,75780,75782,75784,75787,75789,75791,75793,75795,75797,75799],{"class":323,"line":2810},[321,75773,73898],{"class":331},[321,75775,58392],{"class":2169},[321,75777,332],{"class":331},[321,75779,916],{"class":436},[321,75781,1298],{"class":327},[321,75783,75383],{"class":48122},[321,75785,75786],{"class":327},"?$",[321,75788,916],{"class":436},[321,75790,890],{"class":331},[321,75792,75390],{"class":2169},[321,75794,332],{"class":331},[321,75796,75424],{"class":436},[321,75798,75398],{"class":331},[321,75800,75524],{"class":390},[321,75802,75803,75805,75807,75809,75811,75813,75815,75817,75819,75821,75823,75825,75827,75829],{"class":323,"line":2816},[321,75804,73898],{"class":331},[321,75806,58392],{"class":2169},[321,75808,332],{"class":331},[321,75810,916],{"class":436},[321,75812,1298],{"class":327},[321,75814,75383],{"class":48122},[321,75816,75786],{"class":327},[321,75818,916],{"class":436},[321,75820,890],{"class":331},[321,75822,75390],{"class":2169},[321,75824,332],{"class":331},[321,75826,75592],{"class":436},[321,75828,75398],{"class":331},[321,75830,75597],{"class":390},[321,75832,75833,75835,75837,75839,75841,75843,75845,75847,75849,75851,75853,75855,75857,75859],{"class":323,"line":2822},[321,75834,73898],{"class":331},[321,75836,58392],{"class":2169},[321,75838,332],{"class":331},[321,75840,916],{"class":436},[321,75842,1298],{"class":327},[321,75844,75383],{"class":48122},[321,75846,75786],{"class":327},[321,75848,916],{"class":436},[321,75850,890],{"class":331},[321,75852,75390],{"class":2169},[321,75854,332],{"class":331},[321,75856,75624],{"class":436},[321,75858,75398],{"class":331},[321,75860,75524],{"class":390},[321,75862,75863],{"class":323,"line":2827},[321,75864,2606],{"emptyLinePlaceholder":251},[321,75866,75867],{"class":323,"line":8155},[321,75868,75869],{"class":390},"    \u002F\u002F {n}写几，就必须出现几次\n",[321,75871,75872,75874,75876,75878,75880,75882,75884,75887,75889,75891,75893,75895,75898,75901],{"class":323,"line":8179},[321,75873,73898],{"class":331},[321,75875,58392],{"class":2169},[321,75877,332],{"class":331},[321,75879,916],{"class":436},[321,75881,1298],{"class":327},[321,75883,75383],{"class":48122},[321,75885,75886],{"class":327},"{4}$",[321,75888,916],{"class":436},[321,75890,890],{"class":331},[321,75892,75390],{"class":2169},[321,75894,332],{"class":331},[321,75896,75897],{"class":436},"'哈哈哈哈'",[321,75899,75900],{"class":331},")) ",[321,75902,75401],{"class":390},[321,75904,75905],{"class":323,"line":8184},[321,75906,2606],{"emptyLinePlaceholder":251},[321,75908,75909],{"class":323,"line":8190},[321,75910,75911],{"class":390},"    \u002F\u002F {n,}大于等于n次\n",[321,75913,75914,75916,75918,75920,75922,75924,75926,75929,75931,75933,75935,75937,75939,75941],{"class":323,"line":8217},[321,75915,73898],{"class":331},[321,75917,58392],{"class":2169},[321,75919,332],{"class":331},[321,75921,916],{"class":436},[321,75923,1298],{"class":327},[321,75925,75383],{"class":48122},[321,75927,75928],{"class":327},"{4,}$",[321,75930,916],{"class":436},[321,75932,890],{"class":331},[321,75934,75390],{"class":2169},[321,75936,332],{"class":331},[321,75938,75897],{"class":436},[321,75940,75900],{"class":331},[321,75942,75401],{"class":390},[321,75944,75945,75947,75949,75951,75953,75955,75957,75959,75961,75963,75965,75967,75970,75972],{"class":323,"line":8222},[321,75946,73898],{"class":331},[321,75948,58392],{"class":2169},[321,75950,332],{"class":331},[321,75952,916],{"class":436},[321,75954,1298],{"class":327},[321,75956,75383],{"class":48122},[321,75958,75928],{"class":327},[321,75960,916],{"class":436},[321,75962,890],{"class":331},[321,75964,75390],{"class":2169},[321,75966,332],{"class":331},[321,75968,75969],{"class":436},"'哈哈哈哈哈'",[321,75971,75900],{"class":331},[321,75973,75401],{"class":390},[321,75975,75976],{"class":323,"line":8228},[321,75977,2606],{"emptyLinePlaceholder":251},[321,75979,75980],{"class":323,"line":8240},[321,75981,75982],{"class":390},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[321,75984,75985,75987,75989,75991,75993,75995,75997,76000,76002,76004,76006,76008,76010,76012],{"class":323,"line":8252},[321,75986,73898],{"class":331},[321,75988,58392],{"class":2169},[321,75990,332],{"class":331},[321,75992,916],{"class":436},[321,75994,1298],{"class":327},[321,75996,75383],{"class":48122},[321,75998,75999],{"class":327},"{4,6}$",[321,76001,916],{"class":436},[321,76003,890],{"class":331},[321,76005,75390],{"class":2169},[321,76007,332],{"class":331},[321,76009,75897],{"class":436},[321,76011,75900],{"class":331},[321,76013,75401],{"class":390},[321,76015,76016,76018,76020,76022,76024,76026,76028,76030,76032,76034,76036,76038,76040,76042],{"class":323,"line":8264},[321,76017,73898],{"class":331},[321,76019,58392],{"class":2169},[321,76021,332],{"class":331},[321,76023,916],{"class":436},[321,76025,1298],{"class":327},[321,76027,75383],{"class":48122},[321,76029,75999],{"class":327},[321,76031,916],{"class":436},[321,76033,890],{"class":331},[321,76035,75390],{"class":2169},[321,76037,332],{"class":331},[321,76039,75969],{"class":436},[321,76041,75900],{"class":331},[321,76043,75401],{"class":390},[321,76045,76046,76048,76050,76052,76054,76056,76058,76060,76062,76064,76066,76068,76071,76073],{"class":323,"line":9923},[321,76047,73898],{"class":331},[321,76049,58392],{"class":2169},[321,76051,332],{"class":331},[321,76053,916],{"class":436},[321,76055,1298],{"class":327},[321,76057,75383],{"class":48122},[321,76059,75999],{"class":327},[321,76061,916],{"class":436},[321,76063,890],{"class":331},[321,76065,75390],{"class":2169},[321,76067,332],{"class":331},[321,76069,76070],{"class":436},"'哈哈哈哈哈哈哈'",[321,76072,75900],{"class":331},[321,76074,75524],{"class":390},[321,76076,76077],{"class":323,"line":9948},[321,76078,2606],{"emptyLinePlaceholder":251},[321,76080,76081],{"class":323,"line":9971},[321,76082,76083],{"class":390},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[321,76085,76086,76088,76090,76092,76094,76096,76099,76101,76103,76105,76107,76109,76112,76114],{"class":323,"line":9995},[321,76087,73898],{"class":331},[321,76089,58392],{"class":2169},[321,76091,332],{"class":331},[321,76093,916],{"class":436},[321,76095,1298],{"class":327},[321,76097,76098],{"class":380},"[abc]",[321,76100,634],{"class":327},[321,76102,916],{"class":436},[321,76104,890],{"class":331},[321,76106,75390],{"class":2169},[321,76108,332],{"class":331},[321,76110,76111],{"class":436},"'a'",[321,76113,75398],{"class":331},[321,76115,75401],{"class":390},[321,76117,76118,76120,76122,76124,76126,76128,76130,76132,76134,76136,76138,76140,76143,76145],{"class":323,"line":10000},[321,76119,73898],{"class":331},[321,76121,58392],{"class":2169},[321,76123,332],{"class":331},[321,76125,916],{"class":436},[321,76127,1298],{"class":327},[321,76129,76098],{"class":380},[321,76131,634],{"class":327},[321,76133,916],{"class":436},[321,76135,890],{"class":331},[321,76137,75390],{"class":2169},[321,76139,332],{"class":331},[321,76141,76142],{"class":436},"'b'",[321,76144,75398],{"class":331},[321,76146,75401],{"class":390},[321,76148,76149,76151,76153,76155,76157,76159,76161,76163,76165,76167,76169,76171,76174,76176],{"class":323,"line":10005},[321,76150,73898],{"class":331},[321,76152,58392],{"class":2169},[321,76154,332],{"class":331},[321,76156,916],{"class":436},[321,76158,1298],{"class":327},[321,76160,76098],{"class":380},[321,76162,634],{"class":327},[321,76164,916],{"class":436},[321,76166,890],{"class":331},[321,76168,75390],{"class":2169},[321,76170,332],{"class":331},[321,76172,76173],{"class":436},"'c'",[321,76175,75398],{"class":331},[321,76177,75401],{"class":390},[321,76179,76180,76182,76184,76186,76188,76190,76192,76194,76196,76198,76201,76203],{"class":323,"line":10010},[321,76181,73898],{"class":331},[321,76183,58392],{"class":2169},[321,76185,332],{"class":331},[321,76187,916],{"class":436},[321,76189,76098],{"class":380},[321,76191,916],{"class":436},[321,76193,890],{"class":331},[321,76195,75390],{"class":2169},[321,76197,332],{"class":331},[321,76199,76200],{"class":436},"'ab'",[321,76202,75398],{"class":331},[321,76204,75401],{"class":390},[321,76206,76207,76209,76211,76213,76215,76217,76219,76221,76223,76225,76227,76229,76231,76233],{"class":323,"line":10019},[321,76208,73898],{"class":331},[321,76210,58392],{"class":2169},[321,76212,332],{"class":331},[321,76214,916],{"class":436},[321,76216,1298],{"class":327},[321,76218,76098],{"class":380},[321,76220,634],{"class":327},[321,76222,916],{"class":436},[321,76224,890],{"class":331},[321,76226,75390],{"class":2169},[321,76228,332],{"class":331},[321,76230,76200],{"class":436},[321,76232,75398],{"class":331},[321,76234,76235],{"class":390},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[321,76237,76238,76240,76242,76244,76246,76248,76250,76253,76255,76257,76259,76261,76263,76265],{"class":323,"line":10024},[321,76239,73898],{"class":331},[321,76241,58392],{"class":2169},[321,76243,332],{"class":331},[321,76245,916],{"class":436},[321,76247,1298],{"class":327},[321,76249,76098],{"class":380},[321,76251,76252],{"class":327},"{2}$",[321,76254,916],{"class":436},[321,76256,890],{"class":331},[321,76258,75390],{"class":2169},[321,76260,332],{"class":331},[321,76262,76200],{"class":436},[321,76264,75398],{"class":331},[321,76266,76267],{"class":390},"\u002F\u002Ftrue   可以选两个\n",[321,76269,76270,76272,76274,76276,76278,76280,76283,76285,76287,76289,76291,76293,76296,76298],{"class":323,"line":10030},[321,76271,73898],{"class":331},[321,76273,58392],{"class":2169},[321,76275,332],{"class":331},[321,76277,916],{"class":436},[321,76279,1298],{"class":327},[321,76281,76282],{"class":380},"[a-z]",[321,76284,634],{"class":327},[321,76286,916],{"class":436},[321,76288,890],{"class":331},[321,76290,75390],{"class":2169},[321,76292,332],{"class":331},[321,76294,76295],{"class":436},"'p'",[321,76297,75454],{"class":331},[321,76299,76300],{"class":390},"\u002F\u002Ftrue   依然只能选一个\n",[321,76302,76303,76305,76307,76309,76311,76313,76316,76318,76320,76322,76324,76326,76328,76330],{"class":323,"line":10051},[321,76304,73898],{"class":331},[321,76306,58392],{"class":2169},[321,76308,332],{"class":331},[321,76310,916],{"class":436},[321,76312,1298],{"class":327},[321,76314,76315],{"class":380},"[A-Z]",[321,76317,634],{"class":327},[321,76319,916],{"class":436},[321,76321,890],{"class":331},[321,76323,75390],{"class":2169},[321,76325,332],{"class":331},[321,76327,76295],{"class":436},[321,76329,75454],{"class":331},[321,76331,75524],{"class":390},[321,76333,76334,76336,76338,76340,76342,76344,76346,76348,76350,76352,76354,76356,76359,76361],{"class":323,"line":10057},[321,76335,73898],{"class":331},[321,76337,58392],{"class":2169},[321,76339,332],{"class":331},[321,76341,916],{"class":436},[321,76343,1298],{"class":327},[321,76345,76315],{"class":380},[321,76347,634],{"class":327},[321,76349,916],{"class":436},[321,76351,890],{"class":331},[321,76353,75390],{"class":2169},[321,76355,332],{"class":331},[321,76357,76358],{"class":436},"'P'",[321,76360,75454],{"class":331},[321,76362,75401],{"class":390},[321,76364,76365,76367,76369,76371,76373,76375,76378,76380,76382,76384,76386,76388,76391,76393],{"class":323,"line":10071},[321,76366,73898],{"class":331},[321,76368,58392],{"class":2169},[321,76370,332],{"class":331},[321,76372,916],{"class":436},[321,76374,1298],{"class":327},[321,76376,76377],{"class":380},"[0-9]",[321,76379,634],{"class":327},[321,76381,916],{"class":436},[321,76383,890],{"class":331},[321,76385,75390],{"class":2169},[321,76387,332],{"class":331},[321,76389,76390],{"class":436},"'0'",[321,76392,75454],{"class":331},[321,76394,75401],{"class":390},[321,76396,76397,76399,76401,76403,76405,76407,76410,76412,76414,76416,76418,76420,76422,76424],{"class":323,"line":10077},[321,76398,73898],{"class":331},[321,76400,58392],{"class":2169},[321,76402,332],{"class":331},[321,76404,916],{"class":436},[321,76406,1298],{"class":327},[321,76408,76409],{"class":380},"[a-zA-Z0-9]",[321,76411,634],{"class":327},[321,76413,916],{"class":436},[321,76415,890],{"class":331},[321,76417,75390],{"class":2169},[321,76419,332],{"class":331},[321,76421,76295],{"class":436},[321,76423,75398],{"class":331},[321,76425,75401],{"class":390},[321,76427,76428,76430,76432],{"class":323,"line":10104},[321,76429,52562],{"class":331},[321,76431,51958],{"class":51445},[321,76433,51452],{"class":331},[321,76435,76436,76438,76440],{"class":323,"line":10113},[321,76437,51930],{"class":331},[321,76439,51945],{"class":51445},[321,76441,51452],{"class":331},[321,76443,76444],{"class":323,"line":10119},[321,76445,2606],{"emptyLinePlaceholder":251},[321,76447,76448,76450,76452],{"class":323,"line":10127},[321,76449,51930],{"class":331},[321,76451,50780],{"class":51445},[321,76453,51452],{"class":331},[22205,76455,76457],{"id":76456},"_3624-修饰符","3.6.2.4 修饰符",[19,76459,76460],{},[28,76461],{"alt":30,"src":76462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76464,76465],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76467,76468],{},[28,76469],{"alt":30,"src":76470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[312,76472,76474],{"className":50778,"code":76473,"language":50780,"meta":30,"style":30},"\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",[318,76475,76476,76486,76500,76508,76522,76542,76554,76562,76570,76578,76610,76641,76646,76678,76689,76722,76731,76739,76747],{"__ignoreMap":30},[321,76477,76478,76480,76482,76484],{"class":323,"line":324},[321,76479,51442],{"class":331},[321,76481,51446],{"class":51445},[321,76483,51449],{"class":2169},[321,76485,51452],{"class":331},[321,76487,76488,76490,76492,76494,76496,76498],{"class":323,"line":167},[321,76489,1242],{"class":331},[321,76491,50780],{"class":51445},[321,76493,51461],{"class":2169},[321,76495,377],{"class":331},[321,76497,51466],{"class":436},[321,76499,51452],{"class":331},[321,76501,76502,76504,76506],{"class":323,"line":200},[321,76503,1242],{"class":331},[321,76505,51479],{"class":51445},[321,76507,51452],{"class":331},[321,76509,76510,76512,76514,76516,76518,76520],{"class":323,"line":1401},[321,76511,52289],{"class":331},[321,76513,51489],{"class":51445},[321,76515,51492],{"class":2169},[321,76517,377],{"class":331},[321,76519,51497],{"class":436},[321,76521,51452],{"class":331},[321,76523,76524,76526,76528,76530,76532,76534,76536,76538,76540],{"class":323,"line":1407},[321,76525,52289],{"class":331},[321,76527,51489],{"class":51445},[321,76529,15127],{"class":2169},[321,76531,377],{"class":331},[321,76533,51536],{"class":436},[321,76535,51516],{"class":2169},[321,76537,377],{"class":331},[321,76539,51543],{"class":436},[321,76541,51452],{"class":331},[321,76543,76544,76546,76548,76550,76552],{"class":323,"line":1421},[321,76545,52289],{"class":331},[321,76547,51552],{"class":51445},[321,76549,51555],{"class":331},[321,76551,51552],{"class":51445},[321,76553,51452],{"class":331},[321,76555,76556,76558,76560],{"class":323,"line":1427},[321,76557,51930],{"class":331},[321,76559,51479],{"class":51445},[321,76561,51452],{"class":331},[321,76563,76564,76566,76568],{"class":323,"line":1518},[321,76565,1242],{"class":331},[321,76567,51945],{"class":51445},[321,76569,51452],{"class":331},[321,76571,76572,76574,76576],{"class":323,"line":1524},[321,76573,52289],{"class":331},[321,76575,51958],{"class":51445},[321,76577,51452],{"class":331},[321,76579,76580,76582,76584,76586,76588,76590,76593,76595,76597,76599,76601,76603,76606,76608],{"class":323,"line":1536},[321,76581,73898],{"class":331},[321,76583,58392],{"class":2169},[321,76585,332],{"class":331},[321,76587,916],{"class":436},[321,76589,1298],{"class":327},[321,76591,76592],{"class":48122},"java",[321,76594,634],{"class":327},[321,76596,916],{"class":436},[321,76598,890],{"class":331},[321,76600,75390],{"class":2169},[321,76602,332],{"class":331},[321,76604,76605],{"class":436},"'java'",[321,76607,75900],{"class":331},[321,76609,75401],{"class":390},[321,76611,76612,76614,76616,76618,76620,76622,76624,76626,76628,76630,76632,76634,76637,76639],{"class":323,"line":1818},[321,76613,73898],{"class":331},[321,76615,58392],{"class":2169},[321,76617,332],{"class":331},[321,76619,916],{"class":436},[321,76621,1298],{"class":327},[321,76623,76592],{"class":48122},[321,76625,634],{"class":327},[321,76627,916],{"class":436},[321,76629,890],{"class":331},[321,76631,75390],{"class":2169},[321,76633,332],{"class":331},[321,76635,76636],{"class":436},"'Java'",[321,76638,75900],{"class":331},[321,76640,75524],{"class":390},[321,76642,76643],{"class":323,"line":1823},[321,76644,76645],{"class":390},"    \u002F\u002F 不区分大小写、\n",[321,76647,76648,76650,76652,76654,76656,76658,76660,76662,76664,76666,76668,76670,76672,76674,76676],{"class":323,"line":1829},[321,76649,73898],{"class":331},[321,76651,58392],{"class":2169},[321,76653,332],{"class":331},[321,76655,916],{"class":436},[321,76657,1298],{"class":327},[321,76659,76592],{"class":48122},[321,76661,634],{"class":327},[321,76663,916],{"class":436},[321,76665,773],{"class":327},[321,76667,890],{"class":331},[321,76669,75390],{"class":2169},[321,76671,332],{"class":331},[321,76673,76636],{"class":436},[321,76675,75900],{"class":331},[321,76677,75401],{"class":390},[321,76679,76680,76682,76684,76686],{"class":323,"line":1834},[321,76681,11428],{"class":327},[321,76683,74064],{"class":380},[321,76685,13771],{"class":327},[321,76687,76688],{"class":436}," 'java是一门编程语言，学完java工资很高'\n",[321,76690,76691,76693,76696,76698,76701,76704,76706,76708,76710,76712,76715,76717,76720],{"class":323,"line":1848},[321,76692,11428],{"class":327},[321,76694,76695],{"class":380}," result",[321,76697,13771],{"class":327},[321,76699,76700],{"class":331}," str.",[321,76702,76703],{"class":2169},"replace",[321,76705,332],{"class":331},[321,76707,916],{"class":436},[321,76709,76592],{"class":48122},[321,76711,916],{"class":436},[321,76713,76714],{"class":327},"ig",[321,76716,12642],{"class":331},[321,76718,76719],{"class":436},"'前端'",[321,76721,338],{"class":331},[321,76723,76724,76726,76728],{"class":323,"line":1853},[321,76725,73898],{"class":331},[321,76727,58392],{"class":2169},[321,76729,76730],{"class":331},"(result)\n",[321,76732,76733,76735,76737],{"class":323,"line":1859},[321,76734,52562],{"class":331},[321,76736,51958],{"class":51445},[321,76738,51452],{"class":331},[321,76740,76741,76743,76745],{"class":323,"line":1880},[321,76742,51930],{"class":331},[321,76744,51945],{"class":51445},[321,76746,51452],{"class":331},[321,76748,76749,76751,76753],{"class":323,"line":1885},[321,76750,51930],{"class":331},[321,76752,50780],{"class":51445},[321,76754,51452],{"class":331},[5333,76756,76757],{},"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":30,"searchDepth":167,"depth":167,"links":76759},[76760,76770,76782,76799,76806,76814],{"id":53505,"depth":167,"text":53506,"children":76761},[76762,76763,76764,76765,76766,76767,76768,76769],{"id":53509,"depth":200,"text":53510},{"id":53542,"depth":200,"text":53543},{"id":53581,"depth":200,"text":53582},{"id":53739,"depth":200,"text":53740},{"id":53787,"depth":200,"text":53788},{"id":53924,"depth":200,"text":53925},{"id":54246,"depth":200,"text":54247},{"id":57234,"depth":200,"text":57235},{"id":57262,"depth":167,"text":57263,"children":76771},[76772,76773,76774,76775,76776,76777,76778,76779,76780,76781],{"id":57266,"depth":200,"text":57267},{"id":57289,"depth":200,"text":57290},{"id":58204,"depth":200,"text":58205},{"id":58894,"depth":200,"text":58895},{"id":59176,"depth":200,"text":59177},{"id":63337,"depth":200,"text":63338},{"id":63507,"depth":200,"text":63508},{"id":63635,"depth":200,"text":63636},{"id":63660,"depth":200,"text":63661},{"id":65049,"depth":200,"text":65050},{"id":66202,"depth":167,"text":66203,"children":76783},[76784,76785,76786,76787,76788,76789,76790,76791,76792,76793,76794,76795,76796,76797,76798],{"id":66206,"depth":200,"text":66207},{"id":66860,"depth":200,"text":66861},{"id":68555,"depth":200,"text":68556},{"id":68596,"depth":200,"text":68597},{"id":68638,"depth":200,"text":68639},{"id":68652,"depth":200,"text":68653},{"id":68701,"depth":200,"text":68702},{"id":68713,"depth":200,"text":68714},{"id":68728,"depth":200,"text":68729},{"id":68764,"depth":200,"text":68765},{"id":68845,"depth":200,"text":68846},{"id":68973,"depth":200,"text":68974},{"id":68985,"depth":200,"text":68986},{"id":69004,"depth":200,"text":69005},{"id":71115,"depth":200,"text":71116},{"id":71134,"depth":167,"text":71135,"children":76800},[76801,76802,76803,76804,76805],{"id":71155,"depth":200,"text":71156},{"id":71175,"depth":200,"text":71176},{"id":71224,"depth":200,"text":71225},{"id":71349,"depth":200,"text":71350},{"id":71530,"depth":200,"text":71531},{"id":71548,"depth":167,"text":71549,"children":76807},[76808,76809,76810,76811,76812,76813],{"id":71563,"depth":200,"text":71564},{"id":71622,"depth":200,"text":71623},{"id":71646,"depth":200,"text":71647},{"id":71966,"depth":200,"text":71967},{"id":71998,"depth":200,"text":71999},{"id":72021,"depth":200,"text":72022},{"id":75089,"depth":167,"text":75090,"children":76815},[76816,76817],{"id":75123,"depth":200,"text":75124},{"id":75162,"depth":200,"text":75163},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53477,"description":23584},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76824,"title":76825,"body":76826,"description":23584,"extension":249,"meta":92963,"navigation":251,"path":92964,"seo":92965,"stem":92966,"__hash__":92967},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76827,"toc":92899},[76828,76831,76834,76838,76842,76847,76852,76863,76867,76872,76875,76879,76882,76887,76891,76895,76898,76903,76906,76910,76913,76921,76924,76928,76933,76938,76941,76945,76950,76955,76958,76962,76967,76970,76975,76978,76983,76986,76991,76996,76999,77002,77006,77011,77016,77019,77023,77027,77030,77033,77036,77040,77044,77049,77054,77057,77061,77066,77071,77074,77077,77080,77083,77086,77089,77092,77095,77098,77103,77107,77112,77117,77120,77123,77126,77129,77132,77135,77138,77141,77145,77149,77152,77155,77158,77163,77165,77168,77171,77174,77177,77180,77183,77186,77189,77192,77195,77198,77201,77204,77209,77214,77219,77222,77226,77229,77234,77238,77240,77251,77256,77357,77360,77363,77366,77369,77372,77375,77378,77381,77383,77386,77389,77392,77395,77398,77400,77403,77406,77409,77412,77415,77418,77420,77423,77425,77427,77430,77434,77438,77441,77444,77447,77450,77453,77456,77459,77462,77465,77470,77590,77593,77596,77601,77604,77607,77610,77613,77618,77621,77624,77627,77630,77635,77638,77738,77803,77877,77881,77884,77887,77891,77894,77908,77937,77940,77943,77946,77949,77952,77955,77958,77960,77963,77966,77969,77972,77976,77981,77985,77990,78065,78068,78251,78254,78257,78260,78263,78266,78268,78271,78274,78277,78280,78283,78286,78288,78292,78295,78300,78303,78306,78309,78312,78314,78319,78322,78325,78328,78331,78333,78338,78341,78344,78346,78348,78351,78355,78358,78361,78366,78369,78372,78375,78425,78430,78434,78439,78442,78511,78514,78523,78527,78532,78535,78538,78546,78549,78566,80368,80372,80376,80381,80384,80388,80394,80400,80552,80557,80562,80565,80568,80571,80574,80577,80580,80583,80586,80589,80592,80595,80598,80603,80607,80610,80621,80625,80630,80633,80636,80639,80642,80645,80647,80650,80653,80656,80659,80661,80678,80681,80685,80688,80693,80698,80701,80704,80708,80711,80714,80723,80726,80730,80733,80738,80743,80810,80814,80817,80820,80825,80830,80916,80921,80925,80928,80931,80946,80949,80954,80958,80963,81072,81075,81086,81236,81240,81245,81354,81358,81363,81368,81373,81376,81383,81403,81439,81603,81608,81611,81616,81623,81626,81629,81632,81691,81747,81803,81807,81812,82127,82130,82134,82137,82142,82251,82256,82260,82265,82269,82340,82344,82346,82349,82352,82390,82666,82670,82687,82753,82787,82791,82794,82799,82828,82835,82844,82849,82864,82869,82878,82881,83018,83022,83084,83088,83093,83338,83342,83347,83350,83353,83356,83359,83363,83368,84949,84953,84957,84963,84966,84971,84975,84978,84983,84986,84997,85001,85006,85010,85015,85020,85023,85028,85032,85036,85039,85044,85049,85052,85055,85058,85180,85185,85287,85290,85293,85297,85302,85474,85479,85483,85486,85491,85557,85562,85565,85696,85699,85704,85707,85710,85801,85806,85809,85812,85815,85818,85823,85828,85831,85836,85841,85846,85850,85853,85856,85861,85866,85871,85876,85930,85933,85936,85941,85944,85947,85952,85957,85962,85966,85971,85985,85990,85993,85998,86002,86007,86012,86017,86022,86027,86032,86037,86042,86045,86049,86054,86057,86060,86063,86068,86073,86076,86079,86083,86086,86089,86094,86099,86104,86109,86112,86117,86122,86183,86188,86191,86196,87437,87442,87446,87450,87455,87458,87463,87468,87471,87476,87478,87483,87487,87490,87493,87504,87508,87513,87518,87573,87578,87583,87588,87799,87804,87808,87813,87816,87818,87821,87824,88271,88276,88283,88289,88292,88295,88559,88564,88568,88833,88838,88842,88847,88852,88857,88862,89193,89196,89201,89206,89209,89213,89217,89222,89227,89232,89237,89242,89247,89251,89254,89259,89264,89267,89341,89346,89351,89356,89358,89361,89731,89736,89741,89746,89749,89752,89854,89859,89864,89967,89971,89976,89980,89984,89989,89994,89997,90002,90005,90008,90401,90406,90409,90412,90415,90418,90938,90942,90947,90952,90957,90960,90965,90968,90971,91353,91358,91360,91362,91365,91368,91880,91884,91945,91948,91951,91954,91958,91961,91966,91971,92896],[10,76829,76825],{"id":76830},"_4js进阶",[19,76832,76833],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76835,76837],{"id":76836},"_41-作用域","4.1 作用域",[292,76839,76841],{"id":76840},"_411-局部作用域","4.1.1 局部作用域",[19,76843,76844],{},[28,76845],{"alt":30,"src":76846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76848,76849],{},[28,76850],{"alt":30,"src":76851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1339,76853,76854,76857,76860],{},[154,76855,76856],{},"函数作用域在函数内部",[154,76858,76859],{},"块级作用域在{}",[154,76861,76862],{},"对象的那个{}不是作用域，不是块作用域",[292,76864,76866],{"id":76865},"_412-全局作用域","4.1.2 全局作用域",[19,76868,76869],{},[28,76870],{"alt":30,"src":76871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,76873,76874],{},"window.a=10不要这样写",[292,76876,76878],{"id":76877},"_413-作用域链","4.1.3 作用域链",[19,76880,76881],{},"变量查找机制",[19,76883,76884],{},[28,76885],{"alt":30,"src":76886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76888,76890],{"id":76889},"_42-垃圾回收机制","4.2 垃圾回收机制",[292,76892,76894],{"id":76893},"_421-大体介绍","4.2.1 大体介绍",[19,76896,76897],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,76899,76900],{},[28,76901],{"alt":30,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,76904,76905],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[292,76907,76909],{"id":76908},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,76911,76912],{},"堆栈空间分配区别：",[151,76914,76915,76918],{},[154,76916,76917],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[154,76919,76920],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,76922,76923],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22205,76925,76927],{"id":76926},"_4221-引用计数","4.2.2.1 引用计数",[19,76929,76930],{},[28,76931],{"alt":30,"src":76932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,76934,76935],{},[28,76936],{"alt":30,"src":76937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,76939,76940],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22205,76942,76944],{"id":76943},"_4222-标记清除法","4.2.2.2 标记清除法",[19,76946,76947],{},[28,76948],{"alt":30,"src":76949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,76951,76952],{},[28,76953],{"alt":30,"src":76954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,76956,76957],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76959,76961],{"id":76960},"_43-闭包","4.3 闭包",[19,76963,76964],{},[28,76965],{"alt":30,"src":76966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,76968,76969],{},"闭包：内层函数+外层函数的变量",[19,76971,76972],{},[28,76973],{"alt":30,"src":76974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,76976,76977],{},"closure就是闭包",[19,76979,76980],{},[28,76981],{"alt":30,"src":76982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,76984,76985],{},"内层函数必须包含外层函数的变量才是闭包",[19,76987,76988],{},[28,76989],{"alt":30,"src":76990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,76992,76993],{},[28,76994],{"alt":30,"src":76995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,76997,76998],{},"闭包可能会引起内存泄漏",[19,77000,77001],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77003,77005],{"id":77004},"_44-变量提升","4.4 变量提升",[19,77007,77008],{},[28,77009],{"alt":30,"src":77010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77012,77013],{},[28,77014],{"alt":30,"src":77015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77017,77018],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77020,77022],{"id":77021},"_45-函数进阶","4.5 函数进阶",[292,77024,77026],{"id":77025},"_451-函数提升","4.5.1 函数提升",[19,77028,77029],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77031,77032],{},"只提升函数声明，不提升函数调用",[51958,77034,77035],{},"\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",[292,77037,77039],{"id":77038},"_452-函数参数","4.5.2 函数参数",[22205,77041,77043],{"id":77042},"_4521-动态参数","4.5.2.1 动态参数",[19,77045,77046],{},[28,77047],{"alt":30,"src":77048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77050,77051],{},[28,77052],{"alt":30,"src":77053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77055,77056],{},"箭头函数里边没有arguments",[22205,77058,77060],{"id":77059},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77062,77063],{},[28,77064],{"alt":30,"src":77065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77067,77068],{},[28,77069],{"alt":30,"src":77070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77072,77073],{},"剩余参数使用的时候不需要写...",[19,77075,77076],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77078,77079],{},"  function getSum(a,b,...arr) {",[19,77081,77082],{},"  console.log(11)",[19,77084,77085],{},"  }",[19,77087,77088],{},"  getSum(1,2,3,4)",[19,77090,77091],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77093,77094],{},"  getSum(1,2)",[19,77096,77097],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77099,77100],{},[28,77101],{"alt":30,"src":77102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22205,77104,77106],{"id":77105},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77108,77109],{},[28,77110],{"alt":30,"src":77111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77113,77114],{},[28,77115],{"alt":30,"src":77116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77118,77119],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77121,77122],{},"展开运算符可以用于数组之间的合并：",[19,77124,77125],{},"const arr1 = [1, 2, 3]",[19,77127,77128],{},"const arr2 = [3, 4, 5]",[19,77130,77131],{},"const arr = [...arr1, ...arr2]",[19,77133,77134],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77136,77137],{},"剩余参数：函数参数使用，得到真数组",[19,77139,77140],{},"展开运算符：数组中使用，数组展开",[292,77142,77144],{"id":77143},"_453-箭头函数","4.5.3 箭头函数",[22205,77146,77148],{"id":77147},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77150,77151],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77153,77154],{},"它不是万能的！！！",[19,77156,77157],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77159,77160],{},[28,77161],{"alt":30,"src":77162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77164,361],{},[19,77166,77167],{},"① 只有一个形参的时候，可以省略小括号：",[19,77169,77170],{},"const fn=x=>{console.log(x)}",[19,77172,77173],{},"② 只有一行代码时可以省略大括号：",[19,77175,77176],{},"const fn=x=>console.log(11)",[19,77178,77179],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77181,77182],{},"const fn=x=>x+x",[19,77184,77185],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77187,77188],{},"⑤ 阻止表单默认提交：",[19,77190,77191],{},"const form = document.querySelector('form')",[19,77193,77194],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77196,77197],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77199,77200],{},"const fn=uname=>({uname:uname})",[19,77202,77203],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77205,77206],{},[28,77207],{"alt":30,"src":77208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77210,77211],{},[28,77212],{"alt":30,"src":77213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77215,77216],{},[28,77217],{"alt":30,"src":77218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77220,77221],{},"一定不要忘记用()，有()就理解为自带return",[22205,77223,77225],{"id":77224},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77227,77228],{},"箭头函数是没有动态参数的arguments",[19,77230,77231],{},[28,77232],{"alt":30,"src":77233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22205,77235,77237],{"id":77236},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77239,11539],{},[151,77241,77242,77245,77248],{},[154,77243,77244],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[154,77246,77247],{},"事件回调函数使用箭头函数时，this 为全局的 window",[154,77249,77250],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77252,77253],{},[28,77254],{"alt":30,"src":77255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[312,77257,77259],{"className":53212,"code":77258,"language":53214,"meta":30,"style":30},"  \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",[318,77260,77261,77269,77274,77279,77284,77289,77294,77298,77303,77307,77311,77316,77321,77326,77330,77334,77339,77344,77349],{"__ignoreMap":30},[321,77262,77263,77265,77267],{"class":323,"line":324},[321,77264,52289],{"class":331},[321,77266,51958],{"class":51445},[321,77268,51452],{"class":331},[321,77270,77271],{"class":323,"line":167},[321,77272,77273],{"class":331},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[321,77275,77276],{"class":323,"line":200},[321,77277,77278],{"class":331},"    console.log(this) \u002F\u002F指向window\n",[321,77280,77281],{"class":323,"line":1401},[321,77282,77283],{"class":331},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[321,77285,77286],{"class":323,"line":1407},[321,77287,77288],{"class":331},"    function fn() {\n",[321,77290,77291],{"class":323,"line":1421},[321,77292,77293],{"class":331},"      console.log(this)  \u002F\u002F指向window\n",[321,77295,77296],{"class":323,"line":1427},[321,77297,2393],{"class":331},[321,77299,77300],{"class":323,"line":1518},[321,77301,77302],{"class":331},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[321,77304,77305],{"class":323,"line":1524},[321,77306,2606],{"emptyLinePlaceholder":251},[321,77308,77309],{"class":323,"line":1536},[321,77310,71668],{"class":331},[321,77312,77313],{"class":323,"line":1818},[321,77314,77315],{"class":331},"      name: 'andy',\n",[321,77317,77318],{"class":323,"line":1823},[321,77319,77320],{"class":331},"      sayHai: function () {\n",[321,77322,77323],{"class":323,"line":1829},[321,77324,77325],{"class":331},"        console.log(this)\n",[321,77327,77328],{"class":323,"line":1834},[321,77329,52543],{"class":331},[321,77331,77332],{"class":323,"line":1848},[321,77333,2393],{"class":331},[321,77335,77336],{"class":323,"line":1853},[321,77337,77338],{"class":331},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[321,77340,77341],{"class":323,"line":1859},[321,77342,77343],{"class":331},"    \u002F\u002F 2.箭头函数的this\n",[321,77345,77346],{"class":323,"line":1880},[321,77347,77348],{"class":331},"    const fn = () => console.log(this)\n",[321,77350,77351,77353,77355],{"class":323,"line":1885},[321,77352,52562],{"class":331},[321,77354,51958],{"class":51445},[321,77356,51452],{"class":331},[19,77358,77359],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77361,77362],{},"const fn = () => console.log(this)",[19,77364,77365],{},"fn() \u002F\u002F指向window",[19,77367,77368],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77370,77371],{},"①",[19,77373,77374],{},"const obj = {",[19,77376,77377],{},"uname: 'pink老师',",[19,77379,77380],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77382,1278],{},[19,77384,77385],{},"调用对象里边的函数",[19,77387,77388],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77390,77391],{},"obj.sayHai()",[19,77393,77394],{},"②",[19,77396,77397],{},"const obj1 = {",[19,77399,77377],{},[19,77401,77402],{},"sayHai: function () {",[19,77404,77405],{},"let i = 10",[19,77407,77408],{},"const count = () => {",[19,77410,77411],{},"console.log(this)",[19,77413,77414],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77416,77417],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77419,1278],{},[19,77421,77422],{},"count()",[19,77424,1278],{},[19,77426,1278],{},[19,77428,77429],{},"obj1.sayHai()",[14,77431,77433],{"id":77432},"_46-解构赋值","4.6 解构赋值",[292,77435,77437],{"id":77436},"_461-数组解构","4.6.1 数组解构",[19,77439,77440],{},"以前要是使用数组中的值的话：",[19,77442,77443],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77445,77446],{},"const arr=[100,60,80]",[19,77448,77449],{},"const max=arr[0]",[19,77451,77452],{},"const min=arr[1]",[19,77454,77455],{},"const avg=arr[2]",[19,77457,77458],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77460,77461],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77463,77464],{},"这个写法就类似于上边的那种用很多const的方法",[19,77466,77467],{},[28,77468],{"alt":30,"src":77469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[312,77471,77473],{"className":50778,"code":77472,"language":50780,"meta":30,"style":30},"①变量之间交换值:\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",[318,77474,77475,77480,77485,77490,77495,77500,77504,77508,77513,77517,77522,77527,77531,77536,77541,77552,77562,77567,77572,77577,77581,77585],{"__ignoreMap":30},[321,77476,77477],{"class":323,"line":324},[321,77478,77479],{"class":331},"①变量之间交换值:\n",[321,77481,77482],{"class":323,"line":167},[321,77483,77484],{"class":331},"let a=1\n",[321,77486,77487],{"class":323,"line":200},[321,77488,77489],{"class":331},"let b=2;\n",[321,77491,77492],{"class":323,"line":1401},[321,77493,77494],{"class":331},"必须加这行代码，不然就会报错\n",[321,77496,77497],{"class":323,"line":1407},[321,77498,77499],{"class":331},"[b,a]=[a,b]\n",[321,77501,77502],{"class":323,"line":1421},[321,77503,2606],{"emptyLinePlaceholder":251},[321,77505,77506],{"class":323,"line":1427},[321,77507,2606],{"emptyLinePlaceholder":251},[321,77509,77510],{"class":323,"line":1518},[321,77511,77512],{"class":331},"可以写成下面的方式：\n",[321,77514,77515],{"class":323,"line":1524},[321,77516,77484],{"class":331},[321,77518,77519],{"class":323,"line":1536},[321,77520,77521],{"class":331},"let b=2\n",[321,77523,77524],{"class":323,"line":1818},[321,77525,77526],{"class":331},";[b,a]=[a,b]\n",[321,77528,77529],{"class":323,"line":1823},[321,77530,2606],{"emptyLinePlaceholder":251},[321,77532,77533],{"class":323,"line":1829},[321,77534,77535],{"class":331},"②排序\n",[321,77537,77538],{"class":323,"line":1834},[321,77539,77540],{"class":331},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[321,77542,77543,77546,77549],{"class":323,"line":1848},[321,77544,77545],{"class":331},"for (let i = 0; i ",[321,77547,1242],{"class":77548},"s7hpK",[321,77550,77551],{"class":331}," arr1.length; i++) {\n",[321,77553,77554,77557,77559],{"class":323,"line":1853},[321,77555,77556],{"class":331},"   for (let j = 0; j ",[321,77558,1242],{"class":77548},[321,77560,77561],{"class":331}," arr1.length - 1; j++) {\n",[321,77563,77564],{"class":323,"line":1859},[321,77565,77566],{"class":331},"      if (arr1[j] > arr1[j + 1]) {\n",[321,77568,77569],{"class":323,"line":1880},[321,77570,77571],{"class":331},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[321,77573,77574],{"class":323,"line":1885},[321,77575,77576],{"class":331},"       }\n",[321,77578,77579],{"class":323,"line":1899},[321,77580,4515],{"class":331},[321,77582,77583],{"class":323,"line":1904},[321,77584,1771],{"class":331},[321,77586,77587],{"class":323,"line":1933},[321,77588,77589],{"class":331},"console.log(arr1)\n",[19,77591,77592],{},"数组解构的细节：",[19,77594,77595],{},"①变量多，单元值少",[19,77597,77598],{},[28,77599],{"alt":30,"src":77600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77602,77603],{},"防止出现undefined的方法：",[19,77605,77606],{},"const [a=0,b=0] =[1]",[19,77608,77609],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77611,77612],{},"②变量少，单元值多",[19,77614,77615],{},[28,77616],{"alt":30,"src":77617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77619,77620],{},"此时可以使用剩余参数来接收多余的值",[19,77622,77623],{},"const [a,b,...c]=[1,2,3,4]",[19,77625,77626],{},"console.log(c) 输出[3,4]",[19,77628,77629],{},"③可以按需导入，忽略某些返回值",[19,77631,77632],{},[28,77633],{"alt":30,"src":77634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77636,77637],{},"④支持多维数组的结构",[312,77639,77643],{"className":77640,"code":77641,"language":77642,"meta":30,"style":30},"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",[318,77644,77645,77673,77689,77704,77719],{"__ignoreMap":30},[321,77646,77647,77649,77651,77653,77655,77657,77659,77661,77664,77666,77668,77670],{"class":323,"line":324},[321,77648,6999],{"class":327},[321,77650,51978],{"class":331},[321,77652,377],{"class":327},[321,77654,52371],{"class":331},[321,77656,549],{"class":380},[321,77658,12642],{"class":331},[321,77660,409],{"class":380},[321,77662,77663],{"class":331},", [",[321,77665,403],{"class":380},[321,77667,12642],{"class":331},[321,77669,625],{"class":380},[321,77671,77672],{"class":331},"]]\n",[321,77674,77675,77678,77680,77682,77684,77686],{"class":323,"line":167},[321,77676,77677],{"class":331},"console.",[321,77679,58392],{"class":2169},[321,77681,4057],{"class":331},[321,77683,523],{"class":380},[321,77685,4422],{"class":331},[321,77687,77688],{"class":390},"  \u002F\u002F1\n",[321,77690,77691,77693,77695,77697,77699,77701],{"class":323,"line":200},[321,77692,77677],{"class":331},[321,77694,58392],{"class":2169},[321,77696,4057],{"class":331},[321,77698,549],{"class":380},[321,77700,4422],{"class":331},[321,77702,77703],{"class":390},"  \u002F\u002F2\n",[321,77705,77706,77708,77710,77712,77714,77716],{"class":323,"line":1401},[321,77707,77677],{"class":331},[321,77709,58392],{"class":2169},[321,77711,4057],{"class":331},[321,77713,409],{"class":380},[321,77715,4422],{"class":331},[321,77717,77718],{"class":390},"  \u002F\u002F[3,4]\n",[321,77720,77721,77723,77725,77727,77729,77731,77733,77735],{"class":323,"line":1407},[321,77722,77677],{"class":331},[321,77724,58392],{"class":2169},[321,77726,4057],{"class":331},[321,77728,409],{"class":380},[321,77730,5107],{"class":331},[321,77732,523],{"class":380},[321,77734,4422],{"class":331},[321,77736,77737],{"class":390},"  \u002F\u002F3\n",[312,77739,77741],{"className":77640,"code":77740,"language":77642,"meta":30,"style":30},"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",[318,77742,77743,77770,77781,77792],{"__ignoreMap":30},[321,77744,77745,77747,77750,77752,77754,77756,77758,77760,77762,77764,77766,77768],{"class":323,"line":324},[321,77746,6999],{"class":327},[321,77748,77749],{"class":331}," [a, b, c] ",[321,77751,377],{"class":327},[321,77753,52371],{"class":331},[321,77755,549],{"class":380},[321,77757,12642],{"class":331},[321,77759,409],{"class":380},[321,77761,77663],{"class":331},[321,77763,403],{"class":380},[321,77765,12642],{"class":331},[321,77767,625],{"class":380},[321,77769,77672],{"class":331},[321,77771,77772,77774,77776,77779],{"class":323,"line":167},[321,77773,77677],{"class":331},[321,77775,58392],{"class":2169},[321,77777,77778],{"class":331},"(a)",[321,77780,77688],{"class":390},[321,77782,77783,77785,77787,77790],{"class":323,"line":200},[321,77784,77677],{"class":331},[321,77786,58392],{"class":2169},[321,77788,77789],{"class":331},"(b)",[321,77791,77703],{"class":390},[321,77793,77794,77796,77798,77801],{"class":323,"line":1401},[321,77795,77677],{"class":331},[321,77797,58392],{"class":2169},[321,77799,77800],{"class":331},"(c)",[321,77802,77718],{"class":390},[312,77804,77806],{"className":77640,"code":77805,"language":77642,"meta":30,"style":30},"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",[318,77807,77808,77835,77845,77855,77865],{"__ignoreMap":30},[321,77809,77810,77812,77815,77817,77819,77821,77823,77825,77827,77829,77831,77833],{"class":323,"line":324},[321,77811,6999],{"class":327},[321,77813,77814],{"class":331}," [a, b, [c, d]] ",[321,77816,377],{"class":327},[321,77818,52371],{"class":331},[321,77820,549],{"class":380},[321,77822,12642],{"class":331},[321,77824,409],{"class":380},[321,77826,77663],{"class":331},[321,77828,403],{"class":380},[321,77830,12642],{"class":331},[321,77832,625],{"class":380},[321,77834,77672],{"class":331},[321,77836,77837,77839,77841,77843],{"class":323,"line":167},[321,77838,77677],{"class":331},[321,77840,58392],{"class":2169},[321,77842,77778],{"class":331},[321,77844,77688],{"class":390},[321,77846,77847,77849,77851,77853],{"class":323,"line":200},[321,77848,77677],{"class":331},[321,77850,58392],{"class":2169},[321,77852,77789],{"class":331},[321,77854,77703],{"class":390},[321,77856,77857,77859,77861,77863],{"class":323,"line":1401},[321,77858,77677],{"class":331},[321,77860,58392],{"class":2169},[321,77862,77800],{"class":331},[321,77864,77737],{"class":390},[321,77866,77867,77869,77871,77874],{"class":323,"line":1407},[321,77868,77677],{"class":331},[321,77870,58392],{"class":2169},[321,77872,77873],{"class":331},"(d)",[321,77875,77876],{"class":390},"  \u002F\u002F4\n",[292,77878,77880],{"id":77879},"_462-对象解构","4.6.2 对象解构",[19,77882,77883],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,77885,77886],{},"用的非常非常多！！！！！！",[22205,77888,77890],{"id":77889},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,77892,77893],{},"基本语法：",[151,77895,77896,77899,77902,77905],{},[154,77897,77898],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[154,77900,77901],{},"对象属性的值将被赋值给与属性名相同的变量",[154,77903,77904],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[154,77906,77907],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[312,77909,77911],{"className":50778,"code":77910,"language":50780,"meta":30,"style":30},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[318,77912,77913,77918,77923,77928,77932],{"__ignoreMap":30},[321,77914,77915],{"class":323,"line":324},[321,77916,77917],{"class":331},"const obj = {\n",[321,77919,77920],{"class":323,"line":167},[321,77921,77922],{"class":331},"   uname: 'pink老师',\n",[321,77924,77925],{"class":323,"line":200},[321,77926,77927],{"class":331},"   age: 18,\n",[321,77929,77930],{"class":323,"line":1401},[321,77931,1771],{"class":331},[321,77933,77934],{"class":323,"line":1407},[321,77935,77936],{"class":331},"const { uname, age } = obj\n",[19,77938,77939],{},"上方代码这样写等价于：",[19,77941,77942],{},"const uname等价于obj.uname",[19,77944,77945],{},"变量名可以重新改名：",[19,77947,77948],{},"const uname='red老师'",[19,77950,77951],{},"const user={",[19,77953,77954],{},"  uname:'pink老师',",[19,77956,77957],{},"  age:18",[19,77959,1278],{},[19,77961,77962],{},"const {uname,age}=user",[19,77964,77965],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,77967,77968],{},"const {旧变量名：新变量名}=对象",[19,77970,77971],{},"const {uname:username,age}=user",[22205,77973,77975],{"id":77974},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,77977,77978],{},[28,77979],{"alt":30,"src":77980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22205,77982,77984],{"id":77983},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,77986,77987],{},[28,77988],{"alt":30,"src":77989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[312,77991,77993],{"className":53212,"code":77992,"language":53214,"meta":30,"style":30},"  \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",[318,77994,77995,78003,78008,78013,78018,78023,78028,78033,78038,78043,78047,78052,78057],{"__ignoreMap":30},[321,77996,77997,77999,78001],{"class":323,"line":324},[321,77998,52289],{"class":331},[321,78000,51958],{"class":51445},[321,78002,51452],{"class":331},[321,78004,78005],{"class":323,"line":167},[321,78006,78007],{"class":331},"    const pig = {\n",[321,78009,78010],{"class":323,"line":200},[321,78011,78012],{"class":331},"      name: '佩奇',\n",[321,78014,78015],{"class":323,"line":1401},[321,78016,78017],{"class":331},"      family: {\n",[321,78019,78020],{"class":323,"line":1407},[321,78021,78022],{"class":331},"        mother: '猪妈妈',\n",[321,78024,78025],{"class":323,"line":1421},[321,78026,78027],{"class":331},"        father: '猪爸爸',\n",[321,78029,78030],{"class":323,"line":1427},[321,78031,78032],{"class":331},"        sister: '乔治'\n",[321,78034,78035],{"class":323,"line":1518},[321,78036,78037],{"class":331},"      },\n",[321,78039,78040],{"class":323,"line":1524},[321,78041,78042],{"class":331},"      age: 6\n",[321,78044,78045],{"class":323,"line":1536},[321,78046,2393],{"class":331},[321,78048,78049],{"class":323,"line":1818},[321,78050,78051],{"class":331},"    \u002F\u002F 多级对象解构\n",[321,78053,78054],{"class":323,"line":1823},[321,78055,78056],{"class":331},"    const { name, family: { mother, father, sister }, age } = pig\n",[321,78058,78059,78061,78063],{"class":323,"line":1829},[321,78060,52562],{"class":331},[321,78062,51958],{"class":51445},[321,78064,51452],{"class":331},[19,78066,78067],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[312,78069,78072],{"className":78070,"code":78071,"language":76592,"meta":30,"style":30},"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",[318,78073,78074,78079,78090,78102,78114,78123,78127,78138,78150,78160,78165,78169,78179,78190,78199,78203,78207,78218,78229,78238,78242,78247],{"__ignoreMap":30},[321,78075,78076],{"class":323,"line":324},[321,78077,78078],{"class":390},"    \u002F\u002F 这是后台传递过来的数据\n",[321,78080,78081,78083,78086,78088],{"class":323,"line":167},[321,78082,11428],{"class":327},[321,78084,78085],{"class":331}," msg ",[321,78087,377],{"class":327},[321,78089,15779],{"class":331},[321,78091,78092,78095,78097,78100],{"class":323,"line":200},[321,78093,78094],{"class":436},"      \"code\"",[321,78096,1191],{"class":327},[321,78098,78099],{"class":380}," 200",[321,78101,31611],{"class":331},[321,78103,78104,78107,78109,78112],{"class":323,"line":1401},[321,78105,78106],{"class":436},"      \"msg\"",[321,78108,1191],{"class":327},[321,78110,78111],{"class":436}," \"获取新闻列表成功\"",[321,78113,31611],{"class":331},[321,78115,78116,78119,78121],{"class":323,"line":1407},[321,78117,78118],{"class":436},"      \"data\"",[321,78120,1191],{"class":327},[321,78122,55592],{"class":331},[321,78124,78125],{"class":323,"line":1421},[321,78126,2716],{"class":331},[321,78128,78129,78132,78134,78136],{"class":323,"line":1427},[321,78130,78131],{"class":436},"          \"id\"",[321,78133,1191],{"class":327},[321,78135,25263],{"class":380},[321,78137,31611],{"class":331},[321,78139,78140,78143,78145,78148],{"class":323,"line":1518},[321,78141,78142],{"class":436},"          \"title\"",[321,78144,1191],{"class":327},[321,78146,78147],{"class":436}," \"5G商用自己，三大运用商收入下降\"",[321,78149,31611],{"class":331},[321,78151,78152,78155,78157],{"class":323,"line":1524},[321,78153,78154],{"class":436},"          \"count\"",[321,78156,1191],{"class":327},[321,78158,78159],{"class":380}," 58\n",[321,78161,78162],{"class":323,"line":1536},[321,78163,78164],{"class":331},"        },\n",[321,78166,78167],{"class":323,"line":1818},[321,78168,2716],{"class":331},[321,78170,78171,78173,78175,78177],{"class":323,"line":1823},[321,78172,78131],{"class":436},[321,78174,1191],{"class":327},[321,78176,14962],{"class":380},[321,78178,31611],{"class":331},[321,78180,78181,78183,78185,78188],{"class":323,"line":1829},[321,78182,78142],{"class":436},[321,78184,1191],{"class":327},[321,78186,78187],{"class":436}," \"国际媒体头条速览\"",[321,78189,31611],{"class":331},[321,78191,78192,78194,78196],{"class":323,"line":1834},[321,78193,78154],{"class":436},[321,78195,1191],{"class":327},[321,78197,78198],{"class":380}," 56\n",[321,78200,78201],{"class":323,"line":1848},[321,78202,78164],{"class":331},[321,78204,78205],{"class":323,"line":1853},[321,78206,2716],{"class":331},[321,78208,78209,78211,78213,78216],{"class":323,"line":1859},[321,78210,78131],{"class":436},[321,78212,1191],{"class":327},[321,78214,78215],{"class":380}," 3",[321,78217,31611],{"class":331},[321,78219,78220,78222,78224,78227],{"class":323,"line":1880},[321,78221,78142],{"class":436},[321,78223,1191],{"class":327},[321,78225,78226],{"class":436}," \"乌克兰和俄罗斯持续冲突\"",[321,78228,31611],{"class":331},[321,78230,78231,78233,78235],{"class":323,"line":1885},[321,78232,78154],{"class":436},[321,78234,1191],{"class":327},[321,78236,78237],{"class":380}," 1669\n",[321,78239,78240],{"class":323,"line":1899},[321,78241,78164],{"class":331},[321,78243,78244],{"class":323,"line":1904},[321,78245,78246],{"class":331},"      ]\n",[321,78248,78249],{"class":323,"line":1933},[321,78250,2393],{"class":331},[19,78252,78253],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78255,78256],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78258,78259],{},"\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,78261,78262],{},"function({data}) {",[19,78264,78265],{},"console.log(data)",[19,78267,1278],{},[19,78269,78270],{},"render(msg)",[19,78272,78273],{},"实参传递给形参的时候解构了",[19,78275,78276],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78278,78279],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78281,78282],{},"function render({data:mydata}) {",[19,78284,78285],{},"  console.log(data)",[19,78287,1278],{},[292,78289,78291],{"id":78290},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78293,78294],{},"有两种情况：一个是数组结构，一个是立即执行函数",[151,78296,78297],{},[154,78298,78299],{},"如果对一个数组进行遍历，有两种方式：",[19,78301,78302],{},"①法1",[19,78304,78305],{},"const arr=[1,2,3]",[19,78307,78308],{},"arr.map(function(item,index) {",[19,78310,78311],{},"  console.log(item)",[19,78313,52609],{},[19,78315,78316],{},[28,78317],{"alt":30,"src":78318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78320,78321],{},"②法2",[19,78323,78324],{},"const str='pink'",[19,78326,78327],{},"[1,2,3].map(function(item,index) {",[19,78329,78330],{},"console.log(item)",[19,78332,52609],{},[19,78334,78335],{},[28,78336],{"alt":30,"src":78337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78339,78340],{},"此时会报错",[19,78342,78343],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78345,78330],{},[19,78347,52609],{},[19,78349,78350],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78352,78354],{"id":78353},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78356,78357],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78359,78360],{},"可以理解为加强版的for循环",[19,78362,78363],{},[28,78364],{"alt":30,"src":78365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78367,78368],{},"里边不写return，不返回数组，只遍历不返回",[19,78370,78371],{},"map是返回数组",[19,78373,78374],{},"forEach主要用于遍历数组对象",[312,78376,78378],{"className":53212,"code":78377,"language":53214,"meta":30,"style":30},"  \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",[318,78379,78380,78388,78393,78398,78403,78408,78412,78417],{"__ignoreMap":30},[321,78381,78382,78384,78386],{"class":323,"line":324},[321,78383,52289],{"class":331},[321,78385,51958],{"class":51445},[321,78387,51452],{"class":331},[321,78389,78390],{"class":323,"line":167},[321,78391,78392],{"class":331},"    const arr = ['red', 'green', 'pink']\n",[321,78394,78395],{"class":323,"line":200},[321,78396,78397],{"class":331},"    const result = arr.forEach(function (item, index) {\n",[321,78399,78400],{"class":323,"line":1401},[321,78401,78402],{"class":331},"      console.log(item)\n",[321,78404,78405],{"class":323,"line":1407},[321,78406,78407],{"class":331},"      console.log(index)\n",[321,78409,78410],{"class":323,"line":1421},[321,78411,33606],{"class":331},[321,78413,78414],{"class":323,"line":1427},[321,78415,78416],{"class":331},"    console.log(result)\n",[321,78418,78419,78421,78423],{"class":323,"line":1518},[321,78420,52562],{"class":331},[321,78422,51958],{"class":51445},[321,78424,51452],{"class":331},[19,78426,78427],{},[28,78428],{"alt":30,"src":78429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78431,78433],{"id":78432},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78435,78436],{},[28,78437],{"alt":30,"src":78438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78440,78441],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[312,78443,78445],{"className":53212,"code":78444,"language":53214,"meta":30,"style":30},"\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",[318,78446,78447,78455,78463,78468,78473,78477,78481,78486,78490,78495,78503],{"__ignoreMap":30},[321,78448,78449,78451,78453],{"class":323,"line":324},[321,78450,1242],{"class":331},[321,78452,51945],{"class":51445},[321,78454,51452],{"class":331},[321,78456,78457,78459,78461],{"class":323,"line":167},[321,78458,52289],{"class":331},[321,78460,51958],{"class":51445},[321,78462,51452],{"class":331},[321,78464,78465],{"class":323,"line":200},[321,78466,78467],{"class":331},"    const arr = [10, 20, 30]\n",[321,78469,78470],{"class":323,"line":1401},[321,78471,78472],{"class":331},"    const newArr = arr.filter(function (item, index) {\n",[321,78474,78475],{"class":323,"line":1407},[321,78476,78402],{"class":331},[321,78478,78479],{"class":323,"line":1421},[321,78480,78407],{"class":331},[321,78482,78483],{"class":323,"line":1427},[321,78484,78485],{"class":331},"      return item >= 20\n",[321,78487,78488],{"class":323,"line":1518},[321,78489,33606],{"class":331},[321,78491,78492],{"class":323,"line":1524},[321,78493,78494],{"class":331},"    console.log(newArr)\n",[321,78496,78497,78499,78501],{"class":323,"line":1536},[321,78498,52562],{"class":331},[321,78500,51958],{"class":51445},[321,78502,51452],{"class":331},[321,78504,78505,78507,78509],{"class":323,"line":1818},[321,78506,51930],{"class":331},[321,78508,51945],{"class":51445},[321,78510,51452],{"class":331},[19,78512,78513],{},"这个也可以写成箭头函数：",[312,78515,78517],{"className":50778,"code":78516,"language":50780,"meta":30,"style":30},"const newArr = arr.filter(item => item >= 20)\n",[318,78518,78519],{"__ignoreMap":30},[321,78520,78521],{"class":323,"line":324},[321,78522,78516],{"class":331},[14,78524,78526],{"id":78525},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78528,78529],{},[28,78530],{"alt":30,"src":78531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78533,78534],{},"步骤：",[19,78536,78537],{},"①：渲染页面模块",[1339,78539,78540,78543],{},[154,78541,78542],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[154,78544,78545],{},"用forEach+字符串的形式",[19,78547,78548],{},"②：点击不同需求，显示不同页面内容",[1339,78550,78551,78554,78557,78560,78563],{},[154,78552,78553],{},"点击采取事件委托方式 .filter",[154,78555,78556],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[154,78558,78559],{},"筛选条件是根据点击的 data-index 来判断",[154,78561,78562],{},"可以使用对象解构，把事件对象解构",[154,78564,78565],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[312,78567,78569],{"className":50778,"code":78568,"language":50780,"meta":30,"style":30},"\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",[318,78570,78571,78581,78595,78599,78607,78621,78641,78653,78661,78667,78677,78687,78697,78701,78705,78711,78724,78736,78746,78758,78762,78766,78773,78786,78798,78815,78833,78846,78850,78854,78866,78876,78880,78884,78891,78932,78959,78969,78973,78977,78985,78997,79001,79005,79013,79025,79037,79048,79052,79056,79065,79077,79088,79092,79096,79105,79117,79129,79133,79137,79144,79154,79166,79178,79193,79197,79201,79209,79225,79235,79245,79255,79267,79271,79275,79285,79296,79306,79310,79318,79326,79330,79338,79353,79379,79404,79429,79448,79456,79470,79475,79480,79485,79490,79495,79503,79511,79516,79527,79532,79542,79552,79562,79572,79576,79580,79589,79598,79607,79616,79620,79624,79633,79642,79651,79660,79664,79668,79677,79686,79695,79704,79708,79712,79721,79730,79739,79748,79752,79756,79765,79774,79783,79792,79796,79800,79809,79818,79827,79836,79840,79844,79853,79862,79870,79879,79883,79887,79891,79896,79908,79913,79925,79929,79946,79974,79983,79988,79998,80008,80017,80022,80027,80031,80036,80053,80057,80062,80070,80075,80102,80107,80127,80132,80144,80149,80154,80159,80170,80184,80221,80239,80272,80289,80313,80317,80322,80328,80332,80336,80340,80348,80356,80360],{"__ignoreMap":30},[321,78572,78573,78575,78577,78579],{"class":323,"line":324},[321,78574,51442],{"class":331},[321,78576,51446],{"class":51445},[321,78578,51449],{"class":2169},[321,78580,51452],{"class":331},[321,78582,78583,78585,78587,78589,78591,78593],{"class":323,"line":167},[321,78584,1242],{"class":331},[321,78586,50780],{"class":51445},[321,78588,51461],{"class":2169},[321,78590,377],{"class":331},[321,78592,51466],{"class":436},[321,78594,51452],{"class":331},[321,78596,78597],{"class":323,"line":200},[321,78598,2606],{"emptyLinePlaceholder":251},[321,78600,78601,78603,78605],{"class":323,"line":1401},[321,78602,1242],{"class":331},[321,78604,51479],{"class":51445},[321,78606,51452],{"class":331},[321,78608,78609,78611,78613,78615,78617,78619],{"class":323,"line":1407},[321,78610,52289],{"class":331},[321,78612,51489],{"class":51445},[321,78614,51492],{"class":2169},[321,78616,377],{"class":331},[321,78618,51497],{"class":436},[321,78620,51452],{"class":331},[321,78622,78623,78625,78627,78629,78631,78633,78635,78637,78639],{"class":323,"line":1421},[321,78624,52289],{"class":331},[321,78626,51489],{"class":51445},[321,78628,15127],{"class":2169},[321,78630,377],{"class":331},[321,78632,51536],{"class":436},[321,78634,51516],{"class":2169},[321,78636,377],{"class":331},[321,78638,51543],{"class":436},[321,78640,51452],{"class":331},[321,78642,78643,78645,78647,78649,78651],{"class":323,"line":1427},[321,78644,52289],{"class":331},[321,78646,51552],{"class":51445},[321,78648,51555],{"class":331},[321,78650,51552],{"class":51445},[321,78652,51452],{"class":331},[321,78654,78655,78657,78659],{"class":323,"line":1518},[321,78656,52289],{"class":331},[321,78658,5333],{"class":51445},[321,78660,51452],{"class":331},[321,78662,78663,78665],{"class":323,"line":1524},[321,78664,6610],{"class":51445},[321,78666,15779],{"class":331},[321,78668,78669,78671,78673,78675],{"class":323,"line":1536},[321,78670,54840],{"class":380},[321,78672,51582],{"class":331},[321,78674,523],{"class":380},[321,78676,1497],{"class":331},[321,78678,78679,78681,78683,78685],{"class":323,"line":1818},[321,78680,54851],{"class":380},[321,78682,51582],{"class":331},[321,78684,523],{"class":380},[321,78686,1497],{"class":331},[321,78688,78689,78691,78693,78695],{"class":323,"line":1823},[321,78690,72741],{"class":380},[321,78692,51582],{"class":331},[321,78694,60650],{"class":380},[321,78696,1497],{"class":331},[321,78698,78699],{"class":323,"line":1829},[321,78700,2393],{"class":331},[321,78702,78703],{"class":323,"line":1834},[321,78704,2606],{"emptyLinePlaceholder":251},[321,78706,78707,78709],{"class":323,"line":1848},[321,78708,62268],{"class":2169},[321,78710,15779],{"class":331},[321,78712,78713,78715,78717,78720,78722],{"class":323,"line":1853},[321,78714,54916],{"class":380},[321,78716,51582],{"class":331},[321,78718,78719],{"class":380},"990",[321,78721,51637],{"class":327},[321,78723,1497],{"class":331},[321,78725,78726,78728,78730,78732,78734],{"class":323,"line":1859},[321,78727,54851],{"class":380},[321,78729,51582],{"class":331},[321,78731,523],{"class":380},[321,78733,51701],{"class":380},[321,78735,1497],{"class":331},[321,78737,78738,78740,78742,78744],{"class":323,"line":1880},[321,78739,55154],{"class":380},[321,78741,51582],{"class":331},[321,78743,51622],{"class":380},[321,78745,1497],{"class":331},[321,78747,78748,78751,78753,78756],{"class":323,"line":1885},[321,78749,78750],{"class":380},"      flex-wrap",[321,78752,51582],{"class":331},[321,78754,78755],{"class":380},"wrap",[321,78757,1497],{"class":331},[321,78759,78760],{"class":323,"line":1899},[321,78761,2393],{"class":331},[321,78763,78764],{"class":323,"line":1904},[321,78765,2606],{"emptyLinePlaceholder":251},[321,78767,78768,78771],{"class":323,"line":1933},[321,78769,78770],{"class":2169},"    .item",[321,78772,15779],{"class":331},[321,78774,78775,78777,78779,78782,78784],{"class":323,"line":1938},[321,78776,54916],{"class":380},[321,78778,51582],{"class":331},[321,78780,78781],{"class":380},"240",[321,78783,51637],{"class":327},[321,78785,1497],{"class":331},[321,78787,78788,78790,78792,78794,78796],{"class":323,"line":1955},[321,78789,62145],{"class":380},[321,78791,51582],{"class":331},[321,78793,778],{"class":380},[321,78795,51637],{"class":327},[321,78797,1497],{"class":331},[321,78799,78800,78802,78804,78806,78808,78811,78813],{"class":323,"line":1960},[321,78801,54840],{"class":380},[321,78803,51582],{"class":331},[321,78805,1032],{"class":380},[321,78807,51637],{"class":327},[321,78809,78810],{"class":380}," 30",[321,78812,51637],{"class":327},[321,78814,1497],{"class":331},[321,78816,78817,78819,78821,78823,78826,78829,78831],{"class":323,"line":1965},[321,78818,62005],{"class":380},[321,78820,51582],{"class":331},[321,78822,28266],{"class":380},[321,78824,78825],{"class":380}," ease",[321,78827,78828],{"class":380}," .5",[321,78830,1027],{"class":327},[321,78832,1497],{"class":331},[321,78834,78835,78838,78840,78842,78844],{"class":323,"line":1970},[321,78836,78837],{"class":380},"      margin-bottom",[321,78839,51582],{"class":331},[321,78841,1032],{"class":380},[321,78843,51637],{"class":327},[321,78845,1497],{"class":331},[321,78847,78848],{"class":323,"line":1984},[321,78849,2393],{"class":331},[321,78851,78852],{"class":323,"line":1989},[321,78853,2606],{"emptyLinePlaceholder":251},[321,78855,78856,78859,78861,78864],{"class":323,"line":2783},[321,78857,78858],{"class":2169},"    .item:nth-child",[321,78860,332],{"class":331},[321,78862,78863],{"class":380},"4n",[321,78865,12649],{"class":331},[321,78867,78868,78870,78872,78874],{"class":323,"line":2797},[321,78869,62145],{"class":380},[321,78871,51582],{"class":331},[321,78873,523],{"class":380},[321,78875,1497],{"class":331},[321,78877,78878],{"class":323,"line":2805},[321,78879,2393],{"class":331},[321,78881,78882],{"class":323,"line":2810},[321,78883,2606],{"emptyLinePlaceholder":251},[321,78885,78886,78889],{"class":323,"line":2816},[321,78887,78888],{"class":2169},"    .item:hover",[321,78890,15779],{"class":331},[321,78892,78893,78896,78898,78900,78902,78904,78906,78908,78910,78913,78915,78917,78919,78921,78923,78925,78927,78930],{"class":323,"line":2822},[321,78894,78895],{"class":380},"      box-shadow",[321,78897,51582],{"class":331},[321,78899,523],{"class":380},[321,78901,51637],{"class":327},[321,78903,4299],{"class":380},[321,78905,51637],{"class":327},[321,78907,2354],{"class":380},[321,78909,51637],{"class":327},[321,78911,78912],{"class":380}," rgba",[321,78914,332],{"class":331},[321,78916,523],{"class":380},[321,78918,12642],{"class":331},[321,78920,523],{"class":380},[321,78922,12642],{"class":331},[321,78924,523],{"class":380},[321,78926,12642],{"class":331},[321,78928,78929],{"class":380},".2",[321,78931,2925],{"class":331},[321,78933,78934,78937,78939,78942,78944,78946,78948,78951,78953,78955,78957],{"class":323,"line":2827},[321,78935,78936],{"class":380},"      transform",[321,78938,51582],{"class":331},[321,78940,78941],{"class":380},"translate3d",[321,78943,332],{"class":331},[321,78945,523],{"class":380},[321,78947,12642],{"class":331},[321,78949,78950],{"class":380},"-4",[321,78952,51637],{"class":327},[321,78954,12642],{"class":331},[321,78956,523],{"class":380},[321,78958,2925],{"class":331},[321,78960,78961,78963,78965,78967],{"class":323,"line":8155},[321,78962,62170],{"class":380},[321,78964,51582],{"class":331},[321,78966,62175],{"class":380},[321,78968,1497],{"class":331},[321,78970,78971],{"class":323,"line":8179},[321,78972,2393],{"class":331},[321,78974,78975],{"class":323,"line":8184},[321,78976,2606],{"emptyLinePlaceholder":251},[321,78978,78979,78981,78983],{"class":323,"line":8190},[321,78980,78770],{"class":2169},[321,78982,55760],{"class":51445},[321,78984,15779],{"class":331},[321,78986,78987,78989,78991,78993,78995],{"class":323,"line":8217},[321,78988,54916],{"class":380},[321,78990,51582],{"class":331},[321,78992,643],{"class":380},[321,78994,660],{"class":327},[321,78996,1497],{"class":331},[321,78998,78999],{"class":323,"line":8222},[321,79000,2393],{"class":331},[321,79002,79003],{"class":323,"line":8228},[321,79004,2606],{"emptyLinePlaceholder":251},[321,79006,79007,79009,79011],{"class":323,"line":8240},[321,79008,78770],{"class":2169},[321,79010,62449],{"class":2169},[321,79012,15779],{"class":331},[321,79014,79015,79017,79019,79021,79023],{"class":323,"line":8252},[321,79016,55067],{"class":380},[321,79018,51582],{"class":331},[321,79020,982],{"class":380},[321,79022,51637],{"class":327},[321,79024,1497],{"class":331},[321,79026,79027,79029,79031,79033,79035],{"class":323,"line":8264},[321,79028,78837],{"class":380},[321,79030,51582],{"class":331},[321,79032,778],{"class":380},[321,79034,51637],{"class":327},[321,79036,1497],{"class":331},[321,79038,79039,79041,79043,79046],{"class":323,"line":9923},[321,79040,57561],{"class":380},[321,79042,51582],{"class":331},[321,79044,79045],{"class":380},"#666",[321,79047,1497],{"class":331},[321,79049,79050],{"class":323,"line":9948},[321,79051,2393],{"class":331},[321,79053,79054],{"class":323,"line":9971},[321,79055,2606],{"emptyLinePlaceholder":251},[321,79057,79058,79060,79063],{"class":323,"line":9995},[321,79059,78770],{"class":2169},[321,79061,79062],{"class":2169}," .price",[321,79064,15779],{"class":331},[321,79066,79067,79069,79071,79073,79075],{"class":323,"line":10000},[321,79068,55067],{"class":380},[321,79070,51582],{"class":331},[321,79072,1082],{"class":380},[321,79074,51637],{"class":327},[321,79076,1497],{"class":331},[321,79078,79079,79081,79083,79086],{"class":323,"line":10005},[321,79080,57561],{"class":380},[321,79082,51582],{"class":331},[321,79084,79085],{"class":380},"firebrick",[321,79087,1497],{"class":331},[321,79089,79090],{"class":323,"line":10010},[321,79091,2393],{"class":331},[321,79093,79094],{"class":323,"line":10019},[321,79095,2606],{"emptyLinePlaceholder":251},[321,79097,79098,79100,79103],{"class":323,"line":10024},[321,79099,78770],{"class":2169},[321,79101,79102],{"class":2169}," .price::before",[321,79104,15779],{"class":331},[321,79106,79107,79110,79112,79115],{"class":323,"line":10030},[321,79108,79109],{"class":380},"      content",[321,79111,51582],{"class":331},[321,79113,79114],{"class":436},"'￥'",[321,79116,1497],{"class":331},[321,79118,79119,79121,79123,79125,79127],{"class":323,"line":10051},[321,79120,55067],{"class":380},[321,79122,51582],{"class":331},[321,79124,881],{"class":380},[321,79126,51637],{"class":327},[321,79128,1497],{"class":331},[321,79130,79131],{"class":323,"line":10057},[321,79132,2393],{"class":331},[321,79134,79135],{"class":323,"line":10071},[321,79136,2606],{"emptyLinePlaceholder":251},[321,79138,79139,79142],{"class":323,"line":10077},[321,79140,79141],{"class":2169},"    .filter",[321,79143,15779],{"class":331},[321,79145,79146,79148,79150,79152],{"class":323,"line":10104},[321,79147,55154],{"class":380},[321,79149,51582],{"class":331},[321,79151,51622],{"class":380},[321,79153,1497],{"class":331},[321,79155,79156,79158,79160,79162,79164],{"class":323,"line":10113},[321,79157,54916],{"class":380},[321,79159,51582],{"class":331},[321,79161,78719],{"class":380},[321,79163,51637],{"class":327},[321,79165,1497],{"class":331},[321,79167,79168,79170,79172,79174,79176],{"class":323,"line":10119},[321,79169,54851],{"class":380},[321,79171,51582],{"class":331},[321,79173,523],{"class":380},[321,79175,51701],{"class":380},[321,79177,1497],{"class":331},[321,79179,79180,79182,79184,79186,79188,79190],{"class":323,"line":10127},[321,79181,54840],{"class":380},[321,79183,51582],{"class":331},[321,79185,988],{"class":380},[321,79187,51637],{"class":327},[321,79189,78810],{"class":380},[321,79191,79192],{"class":327},"px\n",[321,79194,79195],{"class":323,"line":10132},[321,79196,2393],{"class":331},[321,79198,79199],{"class":323,"line":16811},[321,79200,2606],{"emptyLinePlaceholder":251},[321,79202,79203,79205,79207],{"class":323,"line":16817},[321,79204,79141],{"class":2169},[321,79206,1605],{"class":51445},[321,79208,15779],{"class":331},[321,79210,79211,79213,79215,79217,79219,79221,79223],{"class":323,"line":16840},[321,79212,54840],{"class":380},[321,79214,51582],{"class":331},[321,79216,778],{"class":380},[321,79218,51637],{"class":327},[321,79220,9157],{"class":380},[321,79222,51637],{"class":327},[321,79224,1497],{"class":331},[321,79226,79227,79229,79231,79233],{"class":323,"line":16846},[321,79228,61866],{"class":380},[321,79230,51582],{"class":331},[321,79232,61963],{"class":380},[321,79234,1497],{"class":331},[321,79236,79237,79239,79241,79243],{"class":323,"line":16869},[321,79238,57561],{"class":380},[321,79240,51582],{"class":331},[321,79242,79045],{"class":380},[321,79244,1497],{"class":331},[321,79246,79247,79249,79251,79253],{"class":323,"line":16883},[321,79248,64115],{"class":380},[321,79250,51582],{"class":331},[321,79252,54882],{"class":380},[321,79254,1497],{"class":331},[321,79256,79257,79259,79261,79263,79265],{"class":323,"line":16903},[321,79258,61895],{"class":380},[321,79260,51582],{"class":331},[321,79262,1032],{"class":380},[321,79264,51637],{"class":327},[321,79266,1497],{"class":331},[321,79268,79269],{"class":323,"line":16909},[321,79270,2393],{"class":331},[321,79272,79273],{"class":323,"line":16920},[321,79274,2606],{"emptyLinePlaceholder":251},[321,79276,79277,79279,79281,79283],{"class":323,"line":16943},[321,79278,79141],{"class":2169},[321,79280,1605],{"class":51445},[321,79282,62045],{"class":2169},[321,79284,15779],{"class":331},[321,79286,79287,79289,79291,79294],{"class":323,"line":16965},[321,79288,55029],{"class":380},[321,79290,51582],{"class":331},[321,79292,79293],{"class":380},"#05943c",[321,79295,1497],{"class":331},[321,79297,79298,79300,79302,79304],{"class":323,"line":16970},[321,79299,57561],{"class":380},[321,79301,51582],{"class":331},[321,79303,60987],{"class":380},[321,79305,1497],{"class":331},[321,79307,79308],{"class":323,"line":16976},[321,79309,2393],{"class":331},[321,79311,79312,79314,79316],{"class":323,"line":16990},[321,79313,52562],{"class":331},[321,79315,5333],{"class":51445},[321,79317,51452],{"class":331},[321,79319,79320,79322,79324],{"class":323,"line":17003},[321,79321,51930],{"class":331},[321,79323,51479],{"class":51445},[321,79325,51452],{"class":331},[321,79327,79328],{"class":323,"line":17008},[321,79329,2606],{"emptyLinePlaceholder":251},[321,79331,79332,79334,79336],{"class":323,"line":17022},[321,79333,1242],{"class":331},[321,79335,51945],{"class":51445},[321,79337,51452],{"class":331},[321,79339,79340,79342,79344,79346,79348,79351],{"class":323,"line":17027},[321,79341,52289],{"class":331},[321,79343,51756],{"class":51445},[321,79345,53631],{"class":2169},[321,79347,377],{"class":331},[321,79349,79350],{"class":436},"\"filter\"",[321,79352,51452],{"class":331},[321,79354,79355,79357,79359,79361,79363,79365,79368,79370,79372,79375,79377],{"class":323,"line":17033},[321,79356,51486],{"class":331},[321,79358,570],{"class":51445},[321,79360,61202],{"class":2169},[321,79362,377],{"class":331},[321,79364,61207],{"class":436},[321,79366,79367],{"class":2169}," data-index",[321,79369,377],{"class":331},[321,79371,3884],{"class":436},[321,79373,79374],{"class":331},">0-100元\u003C\u002F",[321,79376,570],{"class":51445},[321,79378,51452],{"class":331},[321,79380,79381,79383,79385,79387,79389,79391,79393,79395,79397,79400,79402],{"class":323,"line":17038},[321,79382,51486],{"class":331},[321,79384,570],{"class":51445},[321,79386,61202],{"class":2169},[321,79388,377],{"class":331},[321,79390,61207],{"class":436},[321,79392,79367],{"class":2169},[321,79394,377],{"class":331},[321,79396,3907],{"class":436},[321,79398,79399],{"class":331},">100-300元\u003C\u002F",[321,79401,570],{"class":51445},[321,79403,51452],{"class":331},[321,79405,79406,79408,79410,79412,79414,79416,79418,79420,79422,79425,79427],{"class":323,"line":17052},[321,79407,51486],{"class":331},[321,79409,570],{"class":51445},[321,79411,61202],{"class":2169},[321,79413,377],{"class":331},[321,79415,61207],{"class":436},[321,79417,79367],{"class":2169},[321,79419,377],{"class":331},[321,79421,3920],{"class":436},[321,79423,79424],{"class":331},">300元以上\u003C\u002F",[321,79426,570],{"class":51445},[321,79428,51452],{"class":331},[321,79430,79431,79433,79435,79437,79439,79441,79444,79446],{"class":323,"line":17057},[321,79432,51486],{"class":331},[321,79434,570],{"class":51445},[321,79436,61202],{"class":2169},[321,79438,377],{"class":331},[321,79440,61207],{"class":436},[321,79442,79443],{"class":331},">全部区间\u003C\u002F",[321,79445,570],{"class":51445},[321,79447,51452],{"class":331},[321,79449,79450,79452,79454],{"class":323,"line":17062},[321,79451,52562],{"class":331},[321,79453,51756],{"class":51445},[321,79455,51452],{"class":331},[321,79457,79458,79460,79462,79464,79466,79468],{"class":323,"line":17076},[321,79459,52289],{"class":331},[321,79461,51756],{"class":51445},[321,79463,53631],{"class":2169},[321,79465,377],{"class":331},[321,79467,62753],{"class":436},[321,79469,51452],{"class":331},[321,79471,79472],{"class":323,"line":17088},[321,79473,79474],{"class":390},"    \u003C!-- \u003Cdiv class=\"item\">\n",[321,79476,79477],{"class":323,"line":17093},[321,79478,79479],{"class":390},"      \u003Cimg src=\"\" alt=\"\">\n",[321,79481,79482],{"class":323,"line":17106},[321,79483,79484],{"class":390},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[321,79486,79487],{"class":323,"line":17111},[321,79488,79489],{"class":390},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[321,79491,79492],{"class":323,"line":17116},[321,79493,79494],{"class":390},"    \u003C\u002Fdiv> -->\n",[321,79496,79497,79499,79501],{"class":323,"line":17121},[321,79498,52562],{"class":331},[321,79500,51756],{"class":51445},[321,79502,51452],{"class":331},[321,79504,79505,79507,79509],{"class":323,"line":17134},[321,79506,52289],{"class":331},[321,79508,51958],{"class":51445},[321,79510,51452],{"class":331},[321,79512,79513],{"class":323,"line":17139},[321,79514,79515],{"class":390},"    \u002F\u002F 2. 初始化数据\n",[321,79517,79518,79520,79523,79525],{"class":323,"line":32778},[321,79519,11428],{"class":327},[321,79521,79522],{"class":380}," goodsList",[321,79524,13771],{"class":327},[321,79526,55592],{"class":331},[321,79528,79529],{"class":323,"line":32784},[321,79530,79531],{"class":331},"      {\n",[321,79533,79534,79537,79540],{"class":323,"line":32790},[321,79535,79536],{"class":331},"        id: ",[321,79538,79539],{"class":436},"'4001172'",[321,79541,31611],{"class":331},[321,79543,79544,79547,79550],{"class":323,"line":32796},[321,79545,79546],{"class":331},"        name: ",[321,79548,79549],{"class":436},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[321,79551,31611],{"class":331},[321,79553,79554,79557,79560],{"class":323,"line":32802},[321,79555,79556],{"class":331},"        price: ",[321,79558,79559],{"class":436},"'289.00'",[321,79561,31611],{"class":331},[321,79563,79564,79567,79570],{"class":323,"line":32813},[321,79565,79566],{"class":331},"        picture: ",[321,79568,79569],{"class":436},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[321,79571,31611],{"class":331},[321,79573,79574],{"class":323,"line":32819},[321,79575,78037],{"class":331},[321,79577,79578],{"class":323,"line":32839},[321,79579,79531],{"class":331},[321,79581,79582,79584,79587],{"class":323,"line":32845},[321,79583,79536],{"class":331},[321,79585,79586],{"class":436},"'4001594'",[321,79588,31611],{"class":331},[321,79590,79591,79593,79596],{"class":323,"line":32856},[321,79592,79546],{"class":331},[321,79594,79595],{"class":436},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[321,79597,31611],{"class":331},[321,79599,79600,79602,79605],{"class":323,"line":32862},[321,79601,79556],{"class":331},[321,79603,79604],{"class":436},"'288.00'",[321,79606,31611],{"class":331},[321,79608,79609,79611,79614],{"class":323,"line":32868},[321,79610,79566],{"class":331},[321,79612,79613],{"class":436},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[321,79615,31611],{"class":331},[321,79617,79618],{"class":323,"line":32874},[321,79619,78037],{"class":331},[321,79621,79622],{"class":323,"line":32880},[321,79623,79531],{"class":331},[321,79625,79626,79628,79631],{"class":323,"line":32886},[321,79627,79536],{"class":331},[321,79629,79630],{"class":436},"'4001009'",[321,79632,31611],{"class":331},[321,79634,79635,79637,79640],{"class":323,"line":32892},[321,79636,79546],{"class":331},[321,79638,79639],{"class":436},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[321,79641,31611],{"class":331},[321,79643,79644,79646,79649],{"class":323,"line":32898},[321,79645,79556],{"class":331},[321,79647,79648],{"class":436},"'109.00'",[321,79650,31611],{"class":331},[321,79652,79653,79655,79658],{"class":323,"line":32918},[321,79654,79566],{"class":331},[321,79656,79657],{"class":436},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[321,79659,31611],{"class":331},[321,79661,79662],{"class":323,"line":32924},[321,79663,78037],{"class":331},[321,79665,79666],{"class":323,"line":32940},[321,79667,79531],{"class":331},[321,79669,79670,79672,79675],{"class":323,"line":32946},[321,79671,79536],{"class":331},[321,79673,79674],{"class":436},"'4001874'",[321,79676,31611],{"class":331},[321,79678,79679,79681,79684],{"class":323,"line":32960},[321,79680,79546],{"class":331},[321,79682,79683],{"class":436},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[321,79685,31611],{"class":331},[321,79687,79688,79690,79693],{"class":323,"line":32966},[321,79689,79556],{"class":331},[321,79691,79692],{"class":436},"'488.00'",[321,79694,31611],{"class":331},[321,79696,79697,79699,79702],{"class":323,"line":32981},[321,79698,79566],{"class":331},[321,79700,79701],{"class":436},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[321,79703,31611],{"class":331},[321,79705,79706],{"class":323,"line":32987},[321,79707,78037],{"class":331},[321,79709,79710],{"class":323,"line":32996},[321,79711,79531],{"class":331},[321,79713,79714,79716,79719],{"class":323,"line":33002},[321,79715,79536],{"class":331},[321,79717,79718],{"class":436},"'4001649'",[321,79720,31611],{"class":331},[321,79722,79723,79725,79728],{"class":323,"line":33011},[321,79724,79546],{"class":331},[321,79726,79727],{"class":436},"'大师监制龙泉青瓷茶叶罐'",[321,79729,31611],{"class":331},[321,79731,79732,79734,79737],{"class":323,"line":33017},[321,79733,79556],{"class":331},[321,79735,79736],{"class":436},"'139.00'",[321,79738,31611],{"class":331},[321,79740,79741,79743,79746],{"class":323,"line":33023},[321,79742,79566],{"class":331},[321,79744,79745],{"class":436},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[321,79747,31611],{"class":331},[321,79749,79750],{"class":323,"line":33032},[321,79751,78037],{"class":331},[321,79753,79754],{"class":323,"line":33038},[321,79755,79531],{"class":331},[321,79757,79758,79760,79763],{"class":323,"line":33049},[321,79759,79536],{"class":331},[321,79761,79762],{"class":436},"'3997185'",[321,79764,31611],{"class":331},[321,79766,79767,79769,79772],{"class":323,"line":33055},[321,79768,79546],{"class":331},[321,79770,79771],{"class":436},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[321,79773,31611],{"class":331},[321,79775,79776,79778,79781],{"class":323,"line":33074},[321,79777,79556],{"class":331},[321,79779,79780],{"class":436},"'108.00'",[321,79782,31611],{"class":331},[321,79784,79785,79787,79790],{"class":323,"line":33080},[321,79786,79566],{"class":331},[321,79788,79789],{"class":436},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[321,79791,31611],{"class":331},[321,79793,79794],{"class":323,"line":33091},[321,79795,78037],{"class":331},[321,79797,79798],{"class":323,"line":33097},[321,79799,79531],{"class":331},[321,79801,79802,79804,79807],{"class":323,"line":33117},[321,79803,79536],{"class":331},[321,79805,79806],{"class":436},"'3997403'",[321,79808,31611],{"class":331},[321,79810,79811,79813,79816],{"class":323,"line":33133},[321,79812,79546],{"class":331},[321,79814,79815],{"class":436},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[321,79817,31611],{"class":331},[321,79819,79820,79822,79825],{"class":323,"line":33139},[321,79821,79556],{"class":331},[321,79823,79824],{"class":436},"'100.00'",[321,79826,31611],{"class":331},[321,79828,79829,79831,79834],{"class":323,"line":33153},[321,79830,79566],{"class":331},[321,79832,79833],{"class":436},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[321,79835,31611],{"class":331},[321,79837,79838],{"class":323,"line":33159},[321,79839,78037],{"class":331},[321,79841,79842],{"class":323,"line":33165},[321,79843,79531],{"class":331},[321,79845,79846,79848,79851],{"class":323,"line":33176},[321,79847,79536],{"class":331},[321,79849,79850],{"class":436},"'3998274'",[321,79852,31611],{"class":331},[321,79854,79855,79857,79860],{"class":323,"line":33182},[321,79856,79546],{"class":331},[321,79858,79859],{"class":436},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[321,79861,31611],{"class":331},[321,79863,79864,79866,79868],{"class":323,"line":33188},[321,79865,79556],{"class":331},[321,79867,79736],{"class":436},[321,79869,31611],{"class":331},[321,79871,79872,79874,79877],{"class":323,"line":33198},[321,79873,79566],{"class":331},[321,79875,79876],{"class":436},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[321,79878,31611],{"class":331},[321,79880,79881],{"class":323,"line":33204},[321,79882,78037],{"class":331},[321,79884,79885],{"class":323,"line":33215},[321,79886,53254],{"class":331},[321,79888,79889],{"class":323,"line":33221},[321,79890,2606],{"emptyLinePlaceholder":251},[321,79892,79893],{"class":323,"line":33231},[321,79894,79895],{"class":390},"    \u002F\u002F 1.渲染函数\n",[321,79897,79898,79900,79902,79904,79906],{"class":323,"line":33236},[321,79899,70229],{"class":327},[321,79901,70232],{"class":2169},[321,79903,332],{"class":331},[321,79905,4086],{"class":5423},[321,79907,12649],{"class":331},[321,79909,79910],{"class":323,"line":33242},[321,79911,79912],{"class":390},"      \u002F\u002F 声明空字符串\n",[321,79914,79915,79918,79921,79923],{"class":323,"line":33291},[321,79916,79917],{"class":327},"      let",[321,79919,79920],{"class":331}," str ",[321,79922,377],{"class":327},[321,79924,70249],{"class":436},[321,79926,79927],{"class":323,"line":33338},[321,79928,70254],{"class":390},[321,79930,79931,79933,79936,79938,79941,79944],{"class":323,"line":33343},[321,79932,58152],{"class":331},[321,79934,79935],{"class":2169},"forEach",[321,79937,332],{"class":331},[321,79939,79940],{"class":5423},"item",[321,79942,79943],{"class":327}," =>",[321,79945,15779],{"class":331},[321,79947,79948,79950,79953,79956,79958,79961,79963,79966,79969,79971],{"class":323,"line":33349},[321,79949,61415],{"class":327},[321,79951,79952],{"class":331}," { ",[321,79954,79955],{"class":380},"name",[321,79957,12642],{"class":331},[321,79959,79960],{"class":380},"price",[321,79962,12642],{"class":331},[321,79964,79965],{"class":380},"picture",[321,79967,79968],{"class":331}," } ",[321,79970,377],{"class":327},[321,79972,79973],{"class":331}," item\n",[321,79975,79976,79979,79981],{"class":323,"line":33368},[321,79977,79978],{"class":331},"        str ",[321,79980,9684],{"class":327},[321,79982,70313],{"class":436},[321,79984,79985],{"class":323,"line":33374},[321,79986,79987],{"class":436},"          \u003Cdiv class=\"item\">\n",[321,79989,79990,79993,79995],{"class":323,"line":33394},[321,79991,79992],{"class":436},"            \u003Cimg src=\"${",[321,79994,79965],{"class":331},[321,79996,79997],{"class":436},"}\" alt=\"\">\n",[321,79999,80000,80003,80005],{"class":323,"line":33400},[321,80001,80002],{"class":436},"            \u003Cp class=\"name\">${",[321,80004,79955],{"class":331},[321,80006,80007],{"class":436},"}\u003C\u002Fp>\n",[321,80009,80010,80013,80015],{"class":323,"line":33406},[321,80011,80012],{"class":436},"            \u003Cp class=\"price\">${",[321,80014,79960],{"class":331},[321,80016,80007],{"class":436},[321,80018,80019],{"class":323,"line":33416},[321,80020,80021],{"class":436},"          \u003C\u002Fdiv>\n",[321,80023,80024],{"class":323,"line":33421},[321,80025,80026],{"class":436},"        `\n",[321,80028,80029],{"class":323,"line":33427},[321,80030,64960],{"class":331},[321,80032,80033],{"class":323,"line":33443},[321,80034,80035],{"class":390},"      \u002F\u002F 追加给List\n",[321,80037,80038,80040,80042,80044,80047,80049,80051],{"class":323,"line":33488},[321,80039,55916],{"class":331},[321,80041,54544],{"class":2169},[321,80043,332],{"class":331},[321,80045,80046],{"class":436},"'.list'",[321,80048,74394],{"class":331},[321,80050,377],{"class":327},[321,80052,74130],{"class":331},[321,80054,80055],{"class":323,"line":33494},[321,80056,2393],{"class":331},[321,80058,80059],{"class":323,"line":33500},[321,80060,80061],{"class":390},"    \u002F\u002F 页面一打开就需要渲染\n",[321,80063,80064,80067],{"class":323,"line":33506},[321,80065,80066],{"class":2169},"    render",[321,80068,80069],{"class":331},"(goodsList)\n",[321,80071,80072],{"class":323,"line":33517},[321,80073,80074],{"class":390},"    \u002F\u002F 2.过滤筛选\n",[321,80076,80077,80079,80081,80083,80086,80088,80090,80092,80094,80096,80098,80100],{"class":323,"line":33523},[321,80078,52552],{"class":331},[321,80080,54544],{"class":2169},[321,80082,332],{"class":331},[321,80084,80085],{"class":436},"'.filter'",[321,80087,30971],{"class":331},[321,80089,57958],{"class":2169},[321,80091,332],{"class":331},[321,80093,57963],{"class":436},[321,80095,12642],{"class":331},[321,80097,406],{"class":5423},[321,80099,79943],{"class":327},[321,80101,15779],{"class":331},[321,80103,80104],{"class":323,"line":33529},[321,80105,80106],{"class":390},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[321,80108,80109,80111,80113,80116,80118,80120,80122,80124],{"class":323,"line":33535},[321,80110,58373],{"class":327},[321,80112,79952],{"class":331},[321,80114,80115],{"class":380},"tagName",[321,80117,12642],{"class":331},[321,80119,31682],{"class":380},[321,80121,79968],{"class":331},[321,80123,377],{"class":327},[321,80125,80126],{"class":331}," e.target\n",[321,80128,80129],{"class":323,"line":33553},[321,80130,80131],{"class":390},"      \u002F\u002F 判断\n",[321,80133,80134,80136,80138,80140,80142],{"class":323,"line":33567},[321,80135,54625],{"class":327},[321,80137,67179],{"class":331},[321,80139,54631],{"class":327},[321,80141,68401],{"class":436},[321,80143,12649],{"class":331},[321,80145,80146],{"class":323,"line":33576},[321,80147,80148],{"class":390},"        \u002F\u002F console.log(11)\n",[321,80150,80151],{"class":323,"line":33585},[321,80152,80153],{"class":390},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[321,80155,80156],{"class":323,"line":33594},[321,80157,80158],{"class":390},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[321,80160,80161,80163,80165,80167],{"class":323,"line":33603},[321,80162,51975],{"class":327},[321,80164,51978],{"class":331},[321,80166,377],{"class":327},[321,80168,80169],{"class":331}," goodsList\n",[321,80171,80172,80174,80177,80179,80182],{"class":323,"line":33609},[321,80173,2703],{"class":327},[321,80175,80176],{"class":331}," (dataset.index ",[321,80178,54631],{"class":327},[321,80180,80181],{"class":436}," '1'",[321,80183,12649],{"class":331},[321,80185,80186,80189,80191,80194,80197,80199,80201,80203,80206,80208,80210,80213,80215,80217,80219],{"class":323,"line":33615},[321,80187,80188],{"class":331},"          arr ",[321,80190,377],{"class":327},[321,80192,80193],{"class":331}," goodsList.",[321,80195,80196],{"class":2169},"filter",[321,80198,332],{"class":331},[321,80200,79940],{"class":5423},[321,80202,79943],{"class":327},[321,80204,80205],{"class":331}," item.price ",[321,80207,1916],{"class":327},[321,80209,4299],{"class":380},[321,80211,80212],{"class":327}," &&",[321,80214,80205],{"class":331},[321,80216,1794],{"class":327},[321,80218,5961],{"class":380},[321,80220,338],{"class":331},[321,80222,80223,80226,80228,80230,80232,80234,80237],{"class":323,"line":33623},[321,80224,80225],{"class":331},"        } ",[321,80227,1907],{"class":327},[321,80229,1910],{"class":327},[321,80231,80176],{"class":331},[321,80233,54631],{"class":327},[321,80235,80236],{"class":436}," '2'",[321,80238,12649],{"class":331},[321,80240,80241,80243,80245,80247,80249,80251,80253,80255,80257,80259,80261,80263,80265,80267,80270],{"class":323,"line":33628},[321,80242,80188],{"class":331},[321,80244,377],{"class":327},[321,80246,80193],{"class":331},[321,80248,80196],{"class":2169},[321,80250,332],{"class":331},[321,80252,79940],{"class":5423},[321,80254,79943],{"class":327},[321,80256,80205],{"class":331},[321,80258,1916],{"class":327},[321,80260,5961],{"class":380},[321,80262,80212],{"class":327},[321,80264,80205],{"class":331},[321,80266,1794],{"class":327},[321,80268,80269],{"class":380}," 300",[321,80271,338],{"class":331},[321,80273,80274,80276,80278,80280,80282,80284,80287],{"class":323,"line":33634},[321,80275,80225],{"class":331},[321,80277,1907],{"class":327},[321,80279,1910],{"class":327},[321,80281,80176],{"class":331},[321,80283,54631],{"class":327},[321,80285,80286],{"class":436}," '3'",[321,80288,12649],{"class":331},[321,80290,80291,80293,80295,80297,80299,80301,80303,80305,80307,80309,80311],{"class":323,"line":33645},[321,80292,80188],{"class":331},[321,80294,377],{"class":327},[321,80296,80193],{"class":331},[321,80298,80196],{"class":2169},[321,80300,332],{"class":331},[321,80302,79940],{"class":5423},[321,80304,79943],{"class":327},[321,80306,80205],{"class":331},[321,80308,1916],{"class":327},[321,80310,80269],{"class":380},[321,80312,338],{"class":331},[321,80314,80315],{"class":323,"line":33651},[321,80316,2735],{"class":331},[321,80318,80319],{"class":323,"line":33671},[321,80320,80321],{"class":390},"        \u002F\u002F 渲染函数\n",[321,80323,80324,80326],{"class":323,"line":33677},[321,80325,70553],{"class":2169},[321,80327,52557],{"class":331},[321,80329,80330],{"class":323,"line":33683},[321,80331,52543],{"class":331},[321,80333,80334],{"class":323,"line":33689},[321,80335,2606],{"emptyLinePlaceholder":251},[321,80337,80338],{"class":323,"line":33706},[321,80339,33606],{"class":331},[321,80341,80342,80344,80346],{"class":323,"line":33712},[321,80343,52562],{"class":331},[321,80345,51958],{"class":51445},[321,80347,51452],{"class":331},[321,80349,80350,80352,80354],{"class":323,"line":33718},[321,80351,51930],{"class":331},[321,80353,51945],{"class":51445},[321,80355,51452],{"class":331},[321,80357,80358],{"class":323,"line":33724},[321,80359,2606],{"emptyLinePlaceholder":251},[321,80361,80362,80364,80366],{"class":323,"line":33730},[321,80363,51930],{"class":331},[321,80365,50780],{"class":51445},[321,80367,51452],{"class":331},[14,80369,80371],{"id":80370},"_410-深入了解对象","4.10 深入了解对象",[292,80373,80375],{"id":80374},"_4101-创建对象","4.10.1 创建对象",[19,80377,80378],{},[28,80379],{"alt":30,"src":80380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80382,80383],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[292,80385,80387],{"id":80386},"_4102-构造函数","4.10.2 构造函数",[19,80389,80390,80393],{},[481,80391,80392],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80395,80396,80399],{},[481,80397,80398],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[312,80401,80403],{"className":50778,"code":80402,"language":50780,"meta":30,"style":30},"\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",[318,80404,80405,80413,80418,80439,80452,80464,80476,80480,80485,80512,80517,80544],{"__ignoreMap":30},[321,80406,80407,80409,80411],{"class":323,"line":324},[321,80408,1242],{"class":331},[321,80410,51958],{"class":51445},[321,80412,51452],{"class":331},[321,80414,80415],{"class":323,"line":167},[321,80416,80417],{"class":390},"\u002F\u002F例：\n",[321,80419,80420,80422,80425,80427,80429,80431,80433,80435,80437],{"class":323,"line":200},[321,80421,54594],{"class":327},[321,80423,80424],{"class":2169}," Pig",[321,80426,332],{"class":331},[321,80428,79955],{"class":5423},[321,80430,710],{"class":331},[321,80432,70366],{"class":5423},[321,80434,710],{"class":331},[321,80436,70383],{"class":5423},[321,80438,12649],{"class":331},[321,80440,80441,80444,80447,80449],{"class":323,"line":1401},[321,80442,80443],{"class":380},"    this",[321,80445,80446],{"class":331},".name",[321,80448,377],{"class":327},[321,80450,80451],{"class":331},"name\n",[321,80453,80454,80456,80459,80461],{"class":323,"line":1407},[321,80455,80443],{"class":380},[321,80457,80458],{"class":331},".age",[321,80460,377],{"class":327},[321,80462,80463],{"class":331},"age\n",[321,80465,80466,80468,80471,80473],{"class":323,"line":1421},[321,80467,80443],{"class":380},[321,80469,80470],{"class":331},".gender",[321,80472,377],{"class":327},[321,80474,80475],{"class":331},"gender    \n",[321,80477,80478],{"class":323,"line":1427},[321,80479,1771],{"class":331},[321,80481,80482],{"class":323,"line":1518},[321,80483,80484],{"class":390},"\u002F\u002F创建佩奇对象\n",[321,80486,80487,80489,80492,80494,80496,80498,80501,80503,80505,80507,80510],{"class":323,"line":1524},[321,80488,6999],{"class":327},[321,80490,80491],{"class":380}," Peppa",[321,80493,11924],{"class":327},[321,80495,80424],{"class":2169},[321,80497,332],{"class":331},[321,80499,80500],{"class":436},"'佩奇'",[321,80502,710],{"class":331},[321,80504,676],{"class":380},[321,80506,710],{"class":331},[321,80508,80509],{"class":436},"'女'",[321,80511,338],{"class":331},[321,80513,80514],{"class":323,"line":1536},[321,80515,80516],{"class":390},"\u002F\u002F创建乔治对象\n",[321,80518,80519,80521,80524,80526,80528,80530,80533,80535,80537,80539,80542],{"class":323,"line":1818},[321,80520,6999],{"class":327},[321,80522,80523],{"class":380}," George",[321,80525,11924],{"class":327},[321,80527,80424],{"class":2169},[321,80529,332],{"class":331},[321,80531,80532],{"class":436},"'乔治'",[321,80534,710],{"class":331},[321,80536,403],{"class":380},[321,80538,710],{"class":331},[321,80540,80541],{"class":436},"'男'",[321,80543,338],{"class":331},[321,80545,80546,80548,80550],{"class":323,"line":1823},[321,80547,51930],{"class":331},[321,80549,51958],{"class":51445},[321,80551,51452],{"class":331},[19,80553,80554],{},[28,80555],{"alt":30,"src":80556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80558,80559],{},[28,80560],{"alt":30,"src":80561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80563,80564],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80566,80567],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80569,80570],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80572,80573],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80575,80576],{},"这里用等号是因为：对象.属性=值",[19,80578,80579],{},"①利用对象字面量创建对象",[19,80581,80582],{},"const o={",[19,80584,80585],{},"name:'pink'",[19,80587,80588],{},"} ②利用new Object创建对象",[19,80590,80591],{},"const o=new Object({name:'pink'})",[19,80593,80594],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80596,80597],{},"构造函数创建对象的执行过程：",[19,80599,80600],{},[28,80601],{"alt":30,"src":80602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[292,80604,80606],{"id":80605},"_4103-实例成员","4.10.3 实例成员",[19,80608,80609],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[151,80611,80612,80615,80618],{},[154,80613,80614],{},"实例对象的属性和方法即为实例成员",[154,80616,80617],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[154,80619,80620],{},"构造函数创建的实例对象彼此独立互不影响",[292,80622,80624],{"id":80623},"_4104-静态成员","4.10.4 静态成员",[19,80626,80627],{},[28,80628],{"alt":30,"src":80629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80631,80632],{},"静态成员有Date.now() Math.PI Math.random()",[19,80634,80635],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80637,80638],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80640,80641],{},"function Pig(name) n {",[19,80643,80644],{},"this.name=name",[19,80646,1278],{},[19,80648,80649],{},"Pig.eyes=2",[19,80651,80652],{},"Pig.sayHai=function () { console.log(this) }",[19,80654,80655],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80657,80658],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80660,11539],{},[151,80662,80663,80666,80669,80672,80675],{},[154,80664,80665],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[154,80667,80668],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[154,80670,80671],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[154,80673,80674],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[154,80676,80677],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80679,80680],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[292,80682,80684],{"id":80683},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80686,80687],{},"内置构造函数包含：",[19,80689,80690],{},[28,80691],{"alt":30,"src":80692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80694,80695],{},[28,80696],{"alt":30,"src":80697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80699,80700],{},"这些基本数据类型，js对他们进行了包装",[51958,80702,80703],{},"\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",[22205,80705,80707],{"id":80706},"_41051-object","4.10.5.1 Object",[19,80709,80710],{},"Object 是内置的构造函数，用于创建普通对象",[19,80712,80713],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[312,80715,80717],{"className":50778,"code":80716,"language":50780,"meta":30,"style":30},"const user=new Object({name:'小明',age:15})\n",[318,80718,80719],{"__ignoreMap":30},[321,80720,80721],{"class":323,"line":324},[321,80722,80716],{"class":331},[19,80724,80725],{},"三个常用的静态方法：",[23117,80727,80729],{"id":80728},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80731,80732],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80734,80735],{},[28,80736],{"alt":30,"src":80737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80739,80740],{},[28,80741],{"alt":30,"src":80742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[312,80744,80746],{"className":53212,"code":80745,"language":53214,"meta":30,"style":30},"\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",[318,80747,80748,80756,80764,80769,80774,80779,80784,80789,80794,80802],{"__ignoreMap":30},[321,80749,80750,80752,80754],{"class":323,"line":324},[321,80751,1242],{"class":331},[321,80753,51945],{"class":51445},[321,80755,51452],{"class":331},[321,80757,80758,80760,80762],{"class":323,"line":167},[321,80759,52289],{"class":331},[321,80761,51958],{"class":51445},[321,80763,51452],{"class":331},[321,80765,80766],{"class":323,"line":200},[321,80767,80768],{"class":331},"    const o = { name: 'pink', age: 6 }\n",[321,80770,80771],{"class":323,"line":1401},[321,80772,80773],{"class":331},"    \u002F\u002F 获得所有属性名\n",[321,80775,80776],{"class":323,"line":1407},[321,80777,80778],{"class":331},"    const arr = Object.keys(o)\n",[321,80780,80781],{"class":323,"line":1421},[321,80782,80783],{"class":331},"    console.log(arr)\n",[321,80785,80786],{"class":323,"line":1427},[321,80787,80788],{"class":331},"    \u002F\u002F 获得所有属性值\n",[321,80790,80791],{"class":323,"line":1518},[321,80792,80793],{"class":331},"    console.log(Object.values(o))\n",[321,80795,80796,80798,80800],{"class":323,"line":1524},[321,80797,52562],{"class":331},[321,80799,51958],{"class":51445},[321,80801,51452],{"class":331},[321,80803,80804,80806,80808],{"class":323,"line":1536},[321,80805,51930],{"class":331},[321,80807,51945],{"class":51445},[321,80809,51452],{"class":331},[23117,80811,80813],{"id":80812},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80815,80816],{},"Object.assign(oo,o)",[19,80818,80819],{},"后的东西添加给前 是追加",[19,80821,80822],{},[28,80823],{"alt":30,"src":80824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80826,80827],{},[28,80828],{"alt":30,"src":80829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[312,80831,80833],{"className":53212,"code":80832,"language":53214,"meta":30,"style":30},"\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",[318,80834,80835,80843,80851,80855,80859,80863,80867,80871,80875,80880,80885,80890,80895,80900,80908],{"__ignoreMap":30},[321,80836,80837,80839,80841],{"class":323,"line":324},[321,80838,1242],{"class":331},[321,80840,51945],{"class":51445},[321,80842,51452],{"class":331},[321,80844,80845,80847,80849],{"class":323,"line":167},[321,80846,52289],{"class":331},[321,80848,51958],{"class":51445},[321,80850,51452],{"class":331},[321,80852,80853],{"class":323,"line":200},[321,80854,80768],{"class":331},[321,80856,80857],{"class":323,"line":1401},[321,80858,80773],{"class":331},[321,80860,80861],{"class":323,"line":1407},[321,80862,80778],{"class":331},[321,80864,80865],{"class":323,"line":1421},[321,80866,80783],{"class":331},[321,80868,80869],{"class":323,"line":1427},[321,80870,80788],{"class":331},[321,80872,80873],{"class":323,"line":1518},[321,80874,80793],{"class":331},[321,80876,80877],{"class":323,"line":1524},[321,80878,80879],{"class":331},"    const oo = {}\n",[321,80881,80882],{"class":323,"line":1536},[321,80883,80884],{"class":331},"    Object.assign(oo, o)\n",[321,80886,80887],{"class":323,"line":1818},[321,80888,80889],{"class":331},"    console.log(oo)\n",[321,80891,80892],{"class":323,"line":1823},[321,80893,80894],{"class":331},"    Object.assign(o, { gender: '女' })\n",[321,80896,80897],{"class":323,"line":1829},[321,80898,80899],{"class":331},"    console.log(o)\n",[321,80901,80902,80904,80906],{"class":323,"line":1834},[321,80903,52562],{"class":331},[321,80905,51958],{"class":51445},[321,80907,51452],{"class":331},[321,80909,80910,80912,80914],{"class":323,"line":1848},[321,80911,51930],{"class":331},[321,80913,51945],{"class":51445},[321,80915,51452],{"class":331},[19,80917,80918],{},[28,80919],{"alt":30,"src":80920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22205,80922,80924],{"id":80923},"_41052-array","4.10.5.2 Array",[19,80926,80927],{},"Array 是内置的构造函数，用于创建数组",[19,80929,80930],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[312,80932,80934],{"className":50778,"code":80933,"language":50780,"meta":30,"style":30},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[318,80935,80936,80941],{"__ignoreMap":30},[321,80937,80938],{"class":323,"line":324},[321,80939,80940],{"class":331},"const arr=new Array(3,5)\n",[321,80942,80943],{"class":323,"line":167},[321,80944,80945],{"class":331},"console.log(arr)  \u002F\u002F[3,5]\n",[19,80947,80948],{},"Array的实例方法，这个方法是实例成员",[19,80950,80951],{},[28,80952],{"alt":30,"src":80953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23117,80955,80957],{"id":80956},"_410521-reduce","4.10.5.2.1 reduce",[19,80959,80960],{},[28,80961],{"alt":30,"src":80962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[312,80964,80966],{"className":53212,"code":80965,"language":53214,"meta":30,"style":30},"\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",[318,80967,80968,80976,80984,80989,80994,80999,81004,81008,81013,81018,81023,81027,81032,81037,81041,81046,81051,81056,81064],{"__ignoreMap":30},[321,80969,80970,80972,80974],{"class":323,"line":324},[321,80971,1242],{"class":331},[321,80973,51945],{"class":51445},[321,80975,51452],{"class":331},[321,80977,80978,80980,80982],{"class":323,"line":167},[321,80979,52289],{"class":331},[321,80981,51958],{"class":51445},[321,80983,51452],{"class":331},[321,80985,80986],{"class":323,"line":200},[321,80987,80988],{"class":331},"    const arr = [1, 5, 8]\n",[321,80990,80991],{"class":323,"line":1401},[321,80992,80993],{"class":331},"    \u002F\u002F 1.没有初始值\n",[321,80995,80996],{"class":323,"line":1407},[321,80997,80998],{"class":331},"    const total = arr.reduce(function (prev, current) {\n",[321,81000,81001],{"class":323,"line":1421},[321,81002,81003],{"class":331},"      return prev + current\n",[321,81005,81006],{"class":323,"line":1427},[321,81007,33606],{"class":331},[321,81009,81010],{"class":323,"line":1518},[321,81011,81012],{"class":331},"    console.log(total)   \u002F\u002F14\n",[321,81014,81015],{"class":323,"line":1524},[321,81016,81017],{"class":331},"    \u002F\u002F 2.有初始值\n",[321,81019,81020],{"class":323,"line":1536},[321,81021,81022],{"class":331},"    const total1 = arr.reduce(function (prev, current) {\n",[321,81024,81025],{"class":323,"line":1818},[321,81026,81003],{"class":331},[321,81028,81029],{"class":323,"line":1823},[321,81030,81031],{"class":331},"    }, 10)\n",[321,81033,81034],{"class":323,"line":1829},[321,81035,81036],{"class":331},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[321,81038,81039],{"class":323,"line":1834},[321,81040,2606],{"emptyLinePlaceholder":251},[321,81042,81043],{"class":323,"line":1848},[321,81044,81045],{"class":331},"    \u002F\u002F 3.箭头函数写法\n",[321,81047,81048],{"class":323,"line":1853},[321,81049,81050],{"class":331},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[321,81052,81053],{"class":323,"line":1859},[321,81054,81055],{"class":331},"    console.log(total2)   \u002F\u002F24\n",[321,81057,81058,81060,81062],{"class":323,"line":1880},[321,81059,52562],{"class":331},[321,81061,51958],{"class":51445},[321,81063,51452],{"class":331},[321,81065,81066,81068,81070],{"class":323,"line":1885},[321,81067,51930],{"class":331},[321,81069,51945],{"class":51445},[321,81071,51452],{"class":331},[19,81073,81074],{},"执行过程：",[151,81076,81077,81080,81083],{},[154,81078,81079],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[154,81081,81082],{},"每一次循环，把返回值给作为下一次循环的上一次值",[154,81084,81085],{},"如果有起始值，则起始值作为上一次值",[312,81087,81089],{"className":53212,"code":81088,"language":53214,"meta":30,"style":30},"\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",[318,81090,81091,81099,81107,81111,81115,81119,81123,81127,81131,81136,81141,81146,81151,81156,81160,81164,81168,81172,81176,81180,81185,81189,81194,81198,81203,81208,81212,81216,81220,81228],{"__ignoreMap":30},[321,81092,81093,81095,81097],{"class":323,"line":324},[321,81094,1242],{"class":331},[321,81096,51945],{"class":51445},[321,81098,51452],{"class":331},[321,81100,81101,81103,81105],{"class":323,"line":167},[321,81102,52289],{"class":331},[321,81104,51958],{"class":51445},[321,81106,51452],{"class":331},[321,81108,81109],{"class":323,"line":200},[321,81110,80988],{"class":331},[321,81112,81113],{"class":323,"line":1401},[321,81114,80993],{"class":331},[321,81116,81117],{"class":323,"line":1407},[321,81118,80998],{"class":331},[321,81120,81121],{"class":323,"line":1421},[321,81122,81003],{"class":331},[321,81124,81125],{"class":323,"line":1427},[321,81126,33606],{"class":331},[321,81128,81129],{"class":323,"line":1518},[321,81130,81012],{"class":331},[321,81132,81133],{"class":323,"line":1524},[321,81134,81135],{"class":331},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[321,81137,81138],{"class":323,"line":1536},[321,81139,81140],{"class":331},"    \u002F\u002F     1              5                    6\n",[321,81142,81143],{"class":323,"line":1818},[321,81144,81145],{"class":331},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[321,81147,81148],{"class":323,"line":1823},[321,81149,81150],{"class":331},"    \u002F\u002F     6              8                    14\n",[321,81152,81153],{"class":323,"line":1829},[321,81154,81155],{"class":331},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[321,81157,81158],{"class":323,"line":1834},[321,81159,81017],{"class":331},[321,81161,81162],{"class":323,"line":1848},[321,81163,81022],{"class":331},[321,81165,81166],{"class":323,"line":1853},[321,81167,81003],{"class":331},[321,81169,81170],{"class":323,"line":1859},[321,81171,81031],{"class":331},[321,81173,81174],{"class":323,"line":1880},[321,81175,81036],{"class":331},[321,81177,81178],{"class":323,"line":1885},[321,81179,81135],{"class":331},[321,81181,81182],{"class":323,"line":1899},[321,81183,81184],{"class":331},"    \u002F\u002F     10             1                     11\n",[321,81186,81187],{"class":323,"line":1904},[321,81188,81145],{"class":331},[321,81190,81191],{"class":323,"line":1933},[321,81192,81193],{"class":331},"    \u002F\u002F     11             5                    16\n",[321,81195,81196],{"class":323,"line":1938},[321,81197,81145],{"class":331},[321,81199,81200],{"class":323,"line":1955},[321,81201,81202],{"class":331},"    \u002F\u002F     16             8                    24\n",[321,81204,81205],{"class":323,"line":1960},[321,81206,81207],{"class":331},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[321,81209,81210],{"class":323,"line":1965},[321,81211,81045],{"class":331},[321,81213,81214],{"class":323,"line":1970},[321,81215,81050],{"class":331},[321,81217,81218],{"class":323,"line":1984},[321,81219,81055],{"class":331},[321,81221,81222,81224,81226],{"class":323,"line":1989},[321,81223,52562],{"class":331},[321,81225,51958],{"class":51445},[321,81227,51452],{"class":331},[321,81229,81230,81232,81234],{"class":323,"line":2783},[321,81231,51930],{"class":331},[321,81233,51945],{"class":51445},[321,81235,51452],{"class":331},[23117,81237,81239],{"id":81238},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81241,81242],{},[28,81243],{"alt":30,"src":81244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[312,81246,81248],{"className":53212,"code":81247,"language":53214,"meta":30,"style":30},"\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",[318,81249,81250,81258,81266,81271,81276,81281,81286,81290,81295,81300,81305,81310,81315,81320,81324,81329,81333,81338,81346],{"__ignoreMap":30},[321,81251,81252,81254,81256],{"class":323,"line":324},[321,81253,1242],{"class":331},[321,81255,51945],{"class":51445},[321,81257,51452],{"class":331},[321,81259,81260,81262,81264],{"class":323,"line":167},[321,81261,52289],{"class":331},[321,81263,51958],{"class":51445},[321,81265,51452],{"class":331},[321,81267,81268],{"class":323,"line":200},[321,81269,81270],{"class":331},"    const arr = [\n",[321,81272,81273],{"class":323,"line":1401},[321,81274,81275],{"class":331},"      { name: '张三', salary: 10000 },\n",[321,81277,81278],{"class":323,"line":1407},[321,81279,81280],{"class":331},"      { name: '李四', salary: 10000 },\n",[321,81282,81283],{"class":323,"line":1421},[321,81284,81285],{"class":331},"      { name: '王五', salary: 10000 }\n",[321,81287,81288],{"class":323,"line":1427},[321,81289,53254],{"class":331},[321,81291,81292],{"class":323,"line":1518},[321,81293,81294],{"class":331},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[321,81296,81297],{"class":323,"line":1524},[321,81298,81299],{"class":331},"    \u002F\u002F prev是累计值\n",[321,81301,81302],{"class":323,"line":1536},[321,81303,81304],{"class":331},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[321,81306,81307],{"class":323,"line":1818},[321,81308,81309],{"class":331},"    console.log(total)\n",[321,81311,81312],{"class":323,"line":1823},[321,81313,81314],{"class":331},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[321,81316,81317],{"class":323,"line":1829},[321,81318,81319],{"class":331},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[321,81321,81322],{"class":323,"line":1834},[321,81323,81314],{"class":331},[321,81325,81326],{"class":323,"line":1848},[321,81327,81328],{"class":331},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[321,81330,81331],{"class":323,"line":1853},[321,81332,81314],{"class":331},[321,81334,81335],{"class":323,"line":1859},[321,81336,81337],{"class":331},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[321,81339,81340,81342,81344],{"class":323,"line":1880},[321,81341,52562],{"class":331},[321,81343,51958],{"class":51445},[321,81345,51452],{"class":331},[321,81347,81348,81350,81352],{"class":323,"line":1885},[321,81349,51930],{"class":331},[321,81351,51945],{"class":51445},[321,81353,51452],{"class":331},[23117,81355,81357],{"id":81356},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81359,81360],{},[28,81361],{"alt":30,"src":81362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81364,81365],{},[28,81366],{"alt":30,"src":81367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[151,81369,81370],{},[154,81371,81372],{},"find()",[19,81374,81375],{},"循环查找，找到第一个就ok",[19,81377,81378],{},[570,81379,81382],{"href":81380,"rel":81381},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24073],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[312,81384,81386],{"className":50778,"code":81385,"language":50780,"meta":30,"style":30},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[318,81387,81388,81393,81398],{"__ignoreMap":30},[321,81389,81390],{"class":323,"line":324},[321,81391,81392],{"class":331},"const array1 = [5, 12, 8, 130, 44]\n",[321,81394,81395],{"class":323,"line":167},[321,81396,81397],{"class":331},"const found = array1.find((element) => element > 10)\n",[321,81399,81400],{"class":323,"line":200},[321,81401,81402],{"class":331},"console.log(found)  \u002F\u002F12\n",[19,81404,81405,81407,81408,81413,81414,81417,81418,81420,81421,81426,81427,81429,81430,81432,81433,81435,81436],{},[318,81406,81372],{}," 方法是一个",[570,81409,81412],{"href":81410,"rel":81411},"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",[24073],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[318,81415,81416],{},"callbackFn"," 函数，直到 ",[318,81419,81416],{}," 返回一个",[570,81422,81425],{"href":81423,"rel":81424},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24073],"真值","。然后 ",[318,81428,81372],{}," 返回该元素并停止迭代数组。如果 ",[318,81431,81416],{}," 从未返回真值，则 ",[318,81434,81372],{}," 返回 ",[318,81437,81438],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[312,81440,81442],{"className":53212,"code":81441,"language":53214,"meta":30,"style":30},"\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",[318,81443,81444,81452,81460,81465,81470,81475,81479,81484,81489,81493,81498,81503,81507,81511,81516,81521,81525,81529,81534,81539,81544,81549,81554,81558,81563,81568,81573,81578,81582,81587,81595],{"__ignoreMap":30},[321,81445,81446,81448,81450],{"class":323,"line":324},[321,81447,1242],{"class":331},[321,81449,51945],{"class":51445},[321,81451,51452],{"class":331},[321,81453,81454,81456,81458],{"class":323,"line":167},[321,81455,52289],{"class":331},[321,81457,51958],{"class":51445},[321,81459,51452],{"class":331},[321,81461,81462],{"class":323,"line":200},[321,81463,81464],{"class":331},"    const arr = ['red', 'blue', 'green']\n",[321,81466,81467],{"class":323,"line":1401},[321,81468,81469],{"class":331},"    const found = arr.find(item => item === 'pink')\n",[321,81471,81472],{"class":323,"line":1407},[321,81473,81474],{"class":331},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[321,81476,81477],{"class":323,"line":1421},[321,81478,2606],{"emptyLinePlaceholder":251},[321,81480,81481],{"class":323,"line":1427},[321,81482,81483],{"class":331},"    \u002F\u002F 使用场景，用于查找数据\n",[321,81485,81486],{"class":323,"line":1518},[321,81487,81488],{"class":331},"    const arr1 = [\n",[321,81490,81491],{"class":323,"line":1524},[321,81492,79531],{"class":331},[321,81494,81495],{"class":323,"line":1536},[321,81496,81497],{"class":331},"        name: '小米',\n",[321,81499,81500],{"class":323,"line":1818},[321,81501,81502],{"class":331},"        price: 1999\n",[321,81504,81505],{"class":323,"line":1823},[321,81506,78037],{"class":331},[321,81508,81509],{"class":323,"line":1829},[321,81510,79531],{"class":331},[321,81512,81513],{"class":323,"line":1834},[321,81514,81515],{"class":331},"        name: '华为',\n",[321,81517,81518],{"class":323,"line":1848},[321,81519,81520],{"class":331},"        price: 3999\n",[321,81522,81523],{"class":323,"line":1853},[321,81524,52543],{"class":331},[321,81526,81527],{"class":323,"line":1859},[321,81528,53254],{"class":331},[321,81530,81531],{"class":323,"line":1880},[321,81532,81533],{"class":331},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[321,81535,81536],{"class":323,"line":1885},[321,81537,81538],{"class":331},"    \u002F\u002F const found1 = arr1.find(item => {\n",[321,81540,81541],{"class":323,"line":1899},[321,81542,81543],{"class":331},"    \u002F\u002F   if (item.name === '小米') {\n",[321,81545,81546],{"class":323,"line":1904},[321,81547,81548],{"class":331},"    \u002F\u002F     return item\n",[321,81550,81551],{"class":323,"line":1933},[321,81552,81553],{"class":331},"    \u002F\u002F   }\n",[321,81555,81556],{"class":323,"line":1938},[321,81557,63435],{"class":331},[321,81559,81560],{"class":323,"line":1955},[321,81561,81562],{"class":331},"    \u002F\u002F 另一种写法\n",[321,81564,81565],{"class":323,"line":1960},[321,81566,81567],{"class":331},"    const found1 = arr1.find(item => {\n",[321,81569,81570],{"class":323,"line":1965},[321,81571,81572],{"class":331},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[321,81574,81575],{"class":323,"line":1970},[321,81576,81577],{"class":331},"      return item.name = '小米'\n",[321,81579,81580],{"class":323,"line":1984},[321,81581,33606],{"class":331},[321,81583,81584],{"class":323,"line":1989},[321,81585,81586],{"class":331},"    console.log(found1)\n",[321,81588,81589,81591,81593],{"class":323,"line":2783},[321,81590,52562],{"class":331},[321,81592,51958],{"class":51445},[321,81594,51452],{"class":331},[321,81596,81597,81599,81601],{"class":323,"line":2797},[321,81598,51930],{"class":331},[321,81600,51945],{"class":51445},[321,81602,51452],{"class":331},[19,81604,81605],{},[28,81606],{"alt":30,"src":81607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81609,81610],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[151,81612,81613],{"start":167},[154,81614,81615],{},"every()返回的是布尔值",[19,81617,81618],{},[570,81619,81622],{"href":81620,"rel":81621},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24073],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81624,81625],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81627,81628],{},"some是只有有一个就没问题",[19,81630,81631],{},"every是必须全是才行",[312,81633,81637],{"className":81634,"code":81635,"language":81636,"meta":30,"style":30},"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",[318,81638,81639,81655,81669,81673,81682],{"__ignoreMap":30},[321,81640,81641,81643,81646,81648,81650,81653],{"class":323,"line":324},[321,81642,54594],{"class":327},[321,81644,81645],{"class":331}," isBigEnough(element, ",[321,81647,74203],{"class":327},[321,81649,12642],{"class":331},[321,81651,81652],{"class":327},"array",[321,81654,12649],{"class":331},[321,81656,81657,81660,81663,81665,81667],{"class":323,"line":167},[321,81658,81659],{"class":327},"  return",[321,81661,81662],{"class":331}," element ",[321,81664,1916],{"class":327},[321,81666,2244],{"class":380},[321,81668,1497],{"class":331},[321,81670,81671],{"class":323,"line":200},[321,81672,1771],{"class":331},[321,81674,81675,81678,81680],{"class":323,"line":1401},[321,81676,81677],{"class":331},"[12, 5, 8, 130, 44].every(isBigEnough); ",[321,81679,33474],{"class":327},[321,81681,54661],{"class":331},[321,81683,81684,81687,81689],{"class":323,"line":1407},[321,81685,81686],{"class":331},"[12, 54, 18, 130, 44].every(isBigEnough); ",[321,81688,33474],{"class":327},[321,81690,58085],{"class":331},[312,81692,81694],{"className":53212,"code":81693,"language":53214,"meta":30,"style":30},"\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",[318,81695,81696,81704,81712,81717,81721,81726,81731,81739],{"__ignoreMap":30},[321,81697,81698,81700,81702],{"class":323,"line":324},[321,81699,1242],{"class":331},[321,81701,51945],{"class":51445},[321,81703,51452],{"class":331},[321,81705,81706,81708,81710],{"class":323,"line":167},[321,81707,52289],{"class":331},[321,81709,51958],{"class":51445},[321,81711,51452],{"class":331},[321,81713,81714],{"class":323,"line":200},[321,81715,81716],{"class":331},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[321,81718,81719],{"class":323,"line":1401},[321,81720,78467],{"class":331},[321,81722,81723],{"class":323,"line":1407},[321,81724,81725],{"class":331},"    const flag = arr.every(item => item >= 10)\n",[321,81727,81728],{"class":323,"line":1421},[321,81729,81730],{"class":331},"    console.log(flag)    \u002F\u002Ftrue\n",[321,81732,81733,81735,81737],{"class":323,"line":1427},[321,81734,52562],{"class":331},[321,81736,51958],{"class":51445},[321,81738,51452],{"class":331},[321,81740,81741,81743,81745],{"class":323,"line":1518},[321,81742,51930],{"class":331},[321,81744,51945],{"class":51445},[321,81746,51452],{"class":331},[312,81748,81750],{"className":53212,"code":81749,"language":53214,"meta":30,"style":30},"\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",[318,81751,81752,81760,81768,81772,81777,81782,81787,81795],{"__ignoreMap":30},[321,81753,81754,81756,81758],{"class":323,"line":324},[321,81755,1242],{"class":331},[321,81757,51945],{"class":51445},[321,81759,51452],{"class":331},[321,81761,81762,81764,81766],{"class":323,"line":167},[321,81763,52289],{"class":331},[321,81765,51958],{"class":51445},[321,81767,51452],{"class":331},[321,81769,81770],{"class":323,"line":200},[321,81771,81716],{"class":331},[321,81773,81774],{"class":323,"line":1401},[321,81775,81776],{"class":331},"    const arr = [10, 0, 5]\n",[321,81778,81779],{"class":323,"line":1407},[321,81780,81781],{"class":331},"    const flag = arr.some(item => item >= 10)\n",[321,81783,81784],{"class":323,"line":1421},[321,81785,81786],{"class":331},"    console.log(flag)   \u002F\u002Ftrue\n",[321,81788,81789,81791,81793],{"class":323,"line":1427},[321,81790,52562],{"class":331},[321,81792,51958],{"class":51445},[321,81794,51452],{"class":331},[321,81796,81797,81799,81801],{"class":323,"line":1518},[321,81798,51930],{"class":331},[321,81800,51945],{"class":51445},[321,81802,51452],{"class":331},[23117,81804,81806],{"id":81805},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81808,81809],{},[28,81810],{"alt":30,"src":81811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[312,81813,81815],{"className":50778,"code":81814,"language":50780,"meta":30,"style":30},"\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",[318,81816,81817,81827,81841,81845,81853,81867,81887,81899,81907,81914,81926,81938,81950,81962,81972,81982,81986,81994,82002,82006,82014,82026,82034,82056,82061,82066,82099,82107,82115,82119],{"__ignoreMap":30},[321,81818,81819,81821,81823,81825],{"class":323,"line":324},[321,81820,51442],{"class":331},[321,81822,51446],{"class":51445},[321,81824,51449],{"class":2169},[321,81826,51452],{"class":331},[321,81828,81829,81831,81833,81835,81837,81839],{"class":323,"line":167},[321,81830,1242],{"class":331},[321,81832,50780],{"class":51445},[321,81834,51461],{"class":2169},[321,81836,377],{"class":331},[321,81838,51466],{"class":436},[321,81840,51452],{"class":331},[321,81842,81843],{"class":323,"line":200},[321,81844,2606],{"emptyLinePlaceholder":251},[321,81846,81847,81849,81851],{"class":323,"line":1401},[321,81848,1242],{"class":331},[321,81850,51479],{"class":51445},[321,81852,51452],{"class":331},[321,81854,81855,81857,81859,81861,81863,81865],{"class":323,"line":1407},[321,81856,52289],{"class":331},[321,81858,51489],{"class":51445},[321,81860,51492],{"class":2169},[321,81862,377],{"class":331},[321,81864,51497],{"class":436},[321,81866,51452],{"class":331},[321,81868,81869,81871,81873,81875,81877,81879,81881,81883,81885],{"class":323,"line":1421},[321,81870,52289],{"class":331},[321,81872,51489],{"class":51445},[321,81874,15127],{"class":2169},[321,81876,377],{"class":331},[321,81878,51536],{"class":436},[321,81880,51516],{"class":2169},[321,81882,377],{"class":331},[321,81884,51543],{"class":436},[321,81886,51452],{"class":331},[321,81888,81889,81891,81893,81895,81897],{"class":323,"line":1427},[321,81890,52289],{"class":331},[321,81892,51552],{"class":51445},[321,81894,51555],{"class":331},[321,81896,51552],{"class":51445},[321,81898,51452],{"class":331},[321,81900,81901,81903,81905],{"class":323,"line":1518},[321,81902,52289],{"class":331},[321,81904,5333],{"class":51445},[321,81906,51452],{"class":331},[321,81908,81909,81912],{"class":323,"line":1524},[321,81910,81911],{"class":51445},"    div",[321,81913,15779],{"class":331},[321,81915,81916,81918,81920,81922,81924],{"class":323,"line":1536},[321,81917,54916],{"class":380},[321,81919,51582],{"class":331},[321,81921,1928],{"class":380},[321,81923,51637],{"class":327},[321,81925,1497],{"class":331},[321,81927,81928,81930,81932,81934,81936],{"class":323,"line":1818},[321,81929,54930],{"class":380},[321,81931,51582],{"class":331},[321,81933,733],{"class":380},[321,81935,51637],{"class":327},[321,81937,1497],{"class":331},[321,81939,81940,81942,81944,81946,81948],{"class":323,"line":1823},[321,81941,57504],{"class":380},[321,81943,51582],{"class":331},[321,81945,733],{"class":380},[321,81947,51637],{"class":327},[321,81949,1497],{"class":331},[321,81951,81952,81954,81956,81958,81960],{"class":323,"line":1829},[321,81953,65278],{"class":380},[321,81955,51582],{"class":331},[321,81957,830],{"class":380},[321,81959,51637],{"class":327},[321,81961,1497],{"class":331},[321,81963,81964,81966,81968,81970],{"class":323,"line":1834},[321,81965,57431],{"class":380},[321,81967,51582],{"class":331},[321,81969,51737],{"class":380},[321,81971,1497],{"class":331},[321,81973,81974,81976,81978,81980],{"class":323,"line":1848},[321,81975,55029],{"class":380},[321,81977,51582],{"class":331},[321,81979,51790],{"class":380},[321,81981,1497],{"class":331},[321,81983,81984],{"class":323,"line":1853},[321,81985,2393],{"class":331},[321,81987,81988,81990,81992],{"class":323,"line":1859},[321,81989,52562],{"class":331},[321,81991,5333],{"class":51445},[321,81993,51452],{"class":331},[321,81995,81996,81998,82000],{"class":323,"line":1880},[321,81997,51930],{"class":331},[321,81999,51479],{"class":51445},[321,82001,51452],{"class":331},[321,82003,82004],{"class":323,"line":1885},[321,82005,2606],{"emptyLinePlaceholder":251},[321,82007,82008,82010,82012],{"class":323,"line":1899},[321,82009,1242],{"class":331},[321,82011,51945],{"class":51445},[321,82013,51452],{"class":331},[321,82015,82016,82018,82020,82022,82024],{"class":323,"line":1904},[321,82017,52289],{"class":331},[321,82019,51756],{"class":51445},[321,82021,55459],{"class":331},[321,82023,51756],{"class":51445},[321,82025,51452],{"class":331},[321,82027,82028,82030,82032],{"class":323,"line":1933},[321,82029,52289],{"class":331},[321,82031,51958],{"class":51445},[321,82033,51452],{"class":331},[321,82035,82036,82038,82041,82043,82046,82049,82051,82054],{"class":323,"line":1938},[321,82037,11428],{"class":327},[321,82039,82040],{"class":380}," spec",[321,82042,13771],{"class":327},[321,82044,82045],{"class":331}," { size: ",[321,82047,82048],{"class":436},"'40cm*40cm'",[321,82050,55609],{"class":331},[321,82052,82053],{"class":436},"'黑色'",[321,82055,55749],{"class":331},[321,82057,82058],{"class":323,"line":1955},[321,82059,82060],{"class":390},"    \u002F\u002F const arr = Object.values(spec)\n",[321,82062,82063],{"class":323,"line":1960},[321,82064,82065],{"class":390},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[321,82067,82068,82070,82072,82074,82077,82079,82081,82084,82087,82090,82092,82094,82097],{"class":323,"line":1965},[321,82069,52552],{"class":331},[321,82071,54544],{"class":2169},[321,82073,332],{"class":331},[321,82075,82076],{"class":436},"'div'",[321,82078,74394],{"class":331},[321,82080,377],{"class":327},[321,82082,82083],{"class":331}," Object.",[321,82085,82086],{"class":2169},"values",[321,82088,82089],{"class":331},"(spec).",[321,82091,74368],{"class":2169},[321,82093,332],{"class":331},[321,82095,82096],{"class":436},"'\u002F'",[321,82098,338],{"class":331},[321,82100,82101,82103,82105],{"class":323,"line":1970},[321,82102,52562],{"class":331},[321,82104,51958],{"class":51445},[321,82106,51452],{"class":331},[321,82108,82109,82111,82113],{"class":323,"line":1984},[321,82110,51930],{"class":331},[321,82112,51945],{"class":51445},[321,82114,51452],{"class":331},[321,82116,82117],{"class":323,"line":1989},[321,82118,2606],{"emptyLinePlaceholder":251},[321,82120,82121,82123,82125],{"class":323,"line":2783},[321,82122,51930],{"class":331},[321,82124,50780],{"class":51445},[321,82126,51452],{"class":331},[19,82128,82129],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23117,82131,82133],{"id":82132},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82135,82136],{},"静态方法，将伪数组转换为真数组",[19,82138,82139],{},[28,82140],{"alt":30,"src":82141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[312,82143,82145],{"className":53212,"code":82144,"language":53214,"meta":30,"style":30},"\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",[318,82146,82147,82155,82163,82175,82187,82199,82207,82215,82220,82225,82230,82235,82243],{"__ignoreMap":30},[321,82148,82149,82151,82153],{"class":323,"line":324},[321,82150,1242],{"class":331},[321,82152,51945],{"class":51445},[321,82154,51452],{"class":331},[321,82156,82157,82159,82161],{"class":323,"line":167},[321,82158,52289],{"class":331},[321,82160,1339],{"class":51445},[321,82162,51452],{"class":331},[321,82164,82165,82167,82169,82171,82173],{"class":323,"line":200},[321,82166,51486],{"class":331},[321,82168,154],{"class":51445},[321,82170,55459],{"class":331},[321,82172,154],{"class":51445},[321,82174,51452],{"class":331},[321,82176,82177,82179,82181,82183,82185],{"class":323,"line":1401},[321,82178,51486],{"class":331},[321,82180,154],{"class":51445},[321,82182,55459],{"class":331},[321,82184,154],{"class":51445},[321,82186,51452],{"class":331},[321,82188,82189,82191,82193,82195,82197],{"class":323,"line":1407},[321,82190,51486],{"class":331},[321,82192,154],{"class":51445},[321,82194,55459],{"class":331},[321,82196,154],{"class":51445},[321,82198,51452],{"class":331},[321,82200,82201,82203,82205],{"class":323,"line":1421},[321,82202,52562],{"class":331},[321,82204,1339],{"class":51445},[321,82206,51452],{"class":331},[321,82208,82209,82211,82213],{"class":323,"line":1427},[321,82210,52289],{"class":331},[321,82212,51958],{"class":51445},[321,82214,51452],{"class":331},[321,82216,82217],{"class":323,"line":1518},[321,82218,82219],{"class":331},"    const lis = document.querySelectorAll('li')\n",[321,82221,82222],{"class":323,"line":1524},[321,82223,82224],{"class":331},"    const liss = Array.from(lis)\n",[321,82226,82227],{"class":323,"line":1536},[321,82228,82229],{"class":331},"    liss.pop()\n",[321,82231,82232],{"class":323,"line":1818},[321,82233,82234],{"class":331},"    console.log(liss)\n",[321,82236,82237,82239,82241],{"class":323,"line":1823},[321,82238,52562],{"class":331},[321,82240,51958],{"class":51445},[321,82242,51452],{"class":331},[321,82244,82245,82247,82249],{"class":323,"line":1829},[321,82246,51930],{"class":331},[321,82248,51945],{"class":51445},[321,82250,51452],{"class":331},[19,82252,82253],{},[28,82254],{"alt":30,"src":82255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22205,82257,82259],{"id":82258},"_41053-string","4.10.5.3 String",[19,82261,82262],{},[28,82263],{"alt":30,"src":82264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23117,82266,82268],{"id":82267},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[312,82270,82272],{"className":53212,"code":82271,"language":53214,"meta":30,"style":30},"\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",[318,82273,82274,82282,82290,82295,82300,82305,82309,82314,82319,82324,82332],{"__ignoreMap":30},[321,82275,82276,82278,82280],{"class":323,"line":324},[321,82277,1242],{"class":331},[321,82279,51945],{"class":51445},[321,82281,51452],{"class":331},[321,82283,82284,82286,82288],{"class":323,"line":167},[321,82285,52289],{"class":331},[321,82287,51958],{"class":51445},[321,82289,51452],{"class":331},[321,82291,82292],{"class":323,"line":200},[321,82293,82294],{"class":331},"    \u002F\u002F 把字符串转化为数组\n",[321,82296,82297],{"class":323,"line":1401},[321,82298,82299],{"class":331},"    const str = 'pink,red'\n",[321,82301,82302],{"class":323,"line":1407},[321,82303,82304],{"class":331},"    const arr = str.split(',')\n",[321,82306,82307],{"class":323,"line":1421},[321,82308,80783],{"class":331},[321,82310,82311],{"class":323,"line":1427},[321,82312,82313],{"class":331},"    const str1 = '2025-8-25'\n",[321,82315,82316],{"class":323,"line":1518},[321,82317,82318],{"class":331},"    const arr1 = str1.split('-')\n",[321,82320,82321],{"class":323,"line":1524},[321,82322,82323],{"class":331},"    console.log(arr1)\n",[321,82325,82326,82328,82330],{"class":323,"line":1536},[321,82327,52562],{"class":331},[321,82329,51958],{"class":51445},[321,82331,51452],{"class":331},[321,82333,82334,82336,82338],{"class":323,"line":1818},[321,82335,51930],{"class":331},[321,82337,51945],{"class":51445},[321,82339,51452],{"class":331},[23117,82341,82343],{"id":82342},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82345,5388],{},[19,82347,82348],{},"substring(indexStart)",[19,82350,82351],{},"substring(indexStart, indexEnd)",[1339,82353,82354,82365,82377,82387],{},[154,82355,82356,82357,82360,82361,82364],{},"如果省略了 ",[318,82358,82359],{},"indexEnd","，则 ",[318,82362,82363],{},"substring()"," 提取字符直到字符串的末尾",[154,82366,82367,82368,82371,82372,82360,82374,82376],{},"如果 ",[318,82369,82370],{},"indexStart"," 等于 ",[318,82373,82359],{},[318,82375,82363],{}," 返回一个空字符串",[154,82378,82367,82379,82381,82382,82360,82384,82386],{},[318,82380,82370],{}," 大于 ",[318,82383,82359],{},[318,82385,82363],{}," 的效果就像交换了这两个参数一样",[154,82388,82389],{},"结束的索引号不包含想要截取的部分",[312,82391,82393],{"className":81634,"code":82392,"language":81636,"meta":30,"style":30},"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",[318,82394,82395,82407,82411,82445,82475,82479,82510,82514,82541,82571,82601,82605,82636],{"__ignoreMap":30},[321,82396,82397,82400,82402,82405],{"class":323,"line":324},[321,82398,82399],{"class":331},"const anyString ",[321,82401,377],{"class":327},[321,82403,82404],{"class":436}," \"Mozilla\"",[321,82406,1497],{"class":331},[321,82408,82409],{"class":323,"line":167},[321,82410,2606],{"emptyLinePlaceholder":251},[321,82412,82413,82416,82418,82420,82422,82425,82427,82430,82432,82434,82436,82438,82440,82442],{"class":323,"line":200},[321,82414,82415],{"class":380},"console",[321,82417,890],{"class":331},[321,82419,58392],{"class":380},[321,82421,332],{"class":331},[321,82423,82424],{"class":380},"anyString",[321,82426,890],{"class":331},[321,82428,82429],{"class":380},"substring",[321,82431,332],{"class":331},[321,82433,523],{"class":380},[321,82435,12642],{"class":331},[321,82437,549],{"class":380},[321,82439,75398],{"class":331},[321,82441,33474],{"class":327},[321,82443,82444],{"class":436}," 'M'\n",[321,82446,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465,82467,82469,82471,82473],{"class":323,"line":1401},[321,82448,82415],{"class":380},[321,82450,890],{"class":331},[321,82452,58392],{"class":380},[321,82454,332],{"class":331},[321,82456,82424],{"class":380},[321,82458,890],{"class":331},[321,82460,82429],{"class":380},[321,82462,332],{"class":331},[321,82464,549],{"class":380},[321,82466,12642],{"class":331},[321,82468,523],{"class":380},[321,82470,75398],{"class":331},[321,82472,33474],{"class":327},[321,82474,82444],{"class":436},[321,82476,82477],{"class":323,"line":1407},[321,82478,2606],{"emptyLinePlaceholder":251},[321,82480,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501,82503,82505,82507],{"class":323,"line":1421},[321,82482,82415],{"class":380},[321,82484,890],{"class":331},[321,82486,58392],{"class":380},[321,82488,332],{"class":331},[321,82490,82424],{"class":380},[321,82492,890],{"class":331},[321,82494,82429],{"class":380},[321,82496,332],{"class":331},[321,82498,523],{"class":380},[321,82500,12642],{"class":331},[321,82502,676],{"class":380},[321,82504,75398],{"class":331},[321,82506,33474],{"class":327},[321,82508,82509],{"class":436}," 'Mozill'\n",[321,82511,82512],{"class":323,"line":1427},[321,82513,2606],{"emptyLinePlaceholder":251},[321,82515,82516,82518,82520,82522,82524,82526,82528,82530,82532,82534,82536,82538],{"class":323,"line":1518},[321,82517,82415],{"class":380},[321,82519,890],{"class":331},[321,82521,58392],{"class":380},[321,82523,332],{"class":331},[321,82525,82424],{"class":380},[321,82527,890],{"class":331},[321,82529,82429],{"class":380},[321,82531,332],{"class":331},[321,82533,625],{"class":380},[321,82535,75398],{"class":331},[321,82537,33474],{"class":327},[321,82539,82540],{"class":436}," 'lla'\n",[321,82542,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563,82565,82567,82569],{"class":323,"line":1524},[321,82544,82415],{"class":380},[321,82546,890],{"class":331},[321,82548,58392],{"class":380},[321,82550,332],{"class":331},[321,82552,82424],{"class":380},[321,82554,890],{"class":331},[321,82556,82429],{"class":380},[321,82558,332],{"class":331},[321,82560,625],{"class":380},[321,82562,12642],{"class":331},[321,82564,701],{"class":380},[321,82566,75454],{"class":331},[321,82568,33474],{"class":327},[321,82570,82540],{"class":436},[321,82572,82573,82575,82577,82579,82581,82583,82585,82587,82589,82591,82593,82595,82597,82599],{"class":323,"line":1536},[321,82574,82415],{"class":380},[321,82576,890],{"class":331},[321,82578,58392],{"class":380},[321,82580,332],{"class":331},[321,82582,82424],{"class":380},[321,82584,890],{"class":331},[321,82586,82429],{"class":380},[321,82588,332],{"class":331},[321,82590,701],{"class":380},[321,82592,12642],{"class":331},[321,82594,625],{"class":380},[321,82596,75398],{"class":331},[321,82598,33474],{"class":327},[321,82600,82540],{"class":436},[321,82602,82603],{"class":323,"line":1818},[321,82604,2606],{"emptyLinePlaceholder":251},[321,82606,82607,82609,82611,82613,82615,82617,82619,82621,82623,82625,82627,82629,82631,82633],{"class":323,"line":1823},[321,82608,82415],{"class":380},[321,82610,890],{"class":331},[321,82612,58392],{"class":380},[321,82614,332],{"class":331},[321,82616,82424],{"class":380},[321,82618,890],{"class":331},[321,82620,82429],{"class":380},[321,82622,332],{"class":331},[321,82624,523],{"class":380},[321,82626,12642],{"class":331},[321,82628,701],{"class":380},[321,82630,75398],{"class":331},[321,82632,33474],{"class":327},[321,82634,82635],{"class":436}," 'Mozilla'\n",[321,82637,82638,82640,82642,82644,82646,82648,82650,82652,82654,82656,82658,82660,82662,82664],{"class":323,"line":1829},[321,82639,82415],{"class":380},[321,82641,890],{"class":331},[321,82643,58392],{"class":380},[321,82645,332],{"class":331},[321,82647,82424],{"class":380},[321,82649,890],{"class":331},[321,82651,82429],{"class":380},[321,82653,332],{"class":331},[321,82655,523],{"class":380},[321,82657,12642],{"class":331},[321,82659,778],{"class":380},[321,82661,75398],{"class":331},[321,82663,33474],{"class":327},[321,82665,82635],{"class":436},[23117,82667,82669],{"id":82668},"_410533-startswith","4.10.5.3.3 startsWith",[19,82671,82672,82675,82676,82681,82682,82684,82685],{},[318,82673,82674],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[481,82677,82678],{},[318,82679,82680],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[318,82683,1569],{}," 或 ",[318,82686,66165],{},[312,82688,82690],{"className":77640,"code":82689,"language":77642,"meta":30,"style":30},"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",[318,82691,82692,82704,82723,82728,82748],{"__ignoreMap":30},[321,82693,82694,82696,82699,82701],{"class":323,"line":324},[321,82695,6999],{"class":327},[321,82697,82698],{"class":331}," str1 ",[321,82700,377],{"class":327},[321,82702,82703],{"class":436}," \"Saturday night plans\"\n",[321,82705,82706,82708,82710,82713,82716,82718,82721],{"class":323,"line":167},[321,82707,77677],{"class":331},[321,82709,58392],{"class":2169},[321,82711,82712],{"class":331},"(str1.",[321,82714,82715],{"class":2169},"startsWith",[321,82717,332],{"class":331},[321,82719,82720],{"class":436},"\"Sat\"",[321,82722,30642],{"class":331},[321,82724,82725],{"class":323,"line":200},[321,82726,82727],{"class":390},"\u002F\u002F Expected output: true\n",[321,82729,82730,82732,82734,82736,82738,82740,82742,82744,82746],{"class":323,"line":1401},[321,82731,77677],{"class":331},[321,82733,58392],{"class":2169},[321,82735,82712],{"class":331},[321,82737,82715],{"class":2169},[321,82739,332],{"class":331},[321,82741,82720],{"class":436},[321,82743,12642],{"class":331},[321,82745,403],{"class":380},[321,82747,30642],{"class":331},[321,82749,82750],{"class":323,"line":1407},[321,82751,82752],{"class":390},"\u002F\u002F Expected output: false\n",[312,82754,82756],{"className":50778,"code":82755,"language":50780,"meta":30,"style":30},"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",[318,82757,82758,82763,82768,82772,82777,82782],{"__ignoreMap":30},[321,82759,82760],{"class":323,"line":324},[321,82761,82762],{"class":331},"startsWith(searchString)\n",[321,82764,82765],{"class":323,"line":167},[321,82766,82767],{"class":331},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[321,82769,82770],{"class":323,"line":200},[321,82771,2606],{"emptyLinePlaceholder":251},[321,82773,82774],{"class":323,"line":1401},[321,82775,82776],{"class":331},"const str3 = 'pink老师上课中'\n",[321,82778,82779],{"class":323,"line":1407},[321,82780,82781],{"class":331},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[321,82783,82784],{"class":323,"line":1421},[321,82785,82786],{"class":331},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23117,82788,82790],{"id":82789},"_410534-includes","4.10.5.3.4 includes",[19,82792,82793],{},"includes(searchString) includes(searchString, position)",[151,82795,82796],{},[154,82797,82798],{},"searchString:",[19,82800,82801,82802,82804,82805,82810,82811,82816,82817,21707,82820,82823,82824,82827],{},"一个要在 ",[318,82803,1506],{}," 中查找的字符串。",[570,82806,82809],{"href":82807,"rel":82808},"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",[24073],"不能是正则表达式","。所有非正则表达式的值都会被",[570,82812,82815],{"href":82813,"rel":82814},"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",[24073],"强制转换为字符串","，因此如果该参数被省略或传入 ",[318,82818,82819],{},"undefined",[318,82821,82822],{},"includes()"," 方法会在字符串中搜索 ",[318,82825,82826],{},"\"undefined\"","，这通常不是你想要的",[151,82829,82830],{"start":167},[154,82831,82832,1191],{},[318,82833,82834],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82836,82837,82838,82841,82842],{},"在字符串中开始搜索 ",[318,82839,82840],{},"searchString"," 的位置。默认值为 ",[318,82843,523],{},[151,82845,82846],{"start":200},[154,82847,82848],{},"返回值：",[19,82850,82851,82852,82854,82855,82859,82860],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[318,82853,82840],{}," 为空字符串的情况），则返回 ",[481,82856,82857],{},[318,82858,1569],{}," ，否则返回 ",[481,82861,82862],{},[318,82863,66165],{},[151,82865,82866],{"start":1401},[154,82867,82868],{},"异常：",[19,82870,82367,82871,14002,82873,82877],{},[318,82872,82840],{},[570,82874,82876],{"href":82807,"rel":82875},[24073],"是一个正则表达式","，则会抛出",[19,82879,82880],{},"只要是有就是true，不需要非得以谁开头结尾",[312,82882,82884],{"className":77640,"code":82883,"language":77642,"meta":30,"style":30},"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",[318,82885,82886,82897,82920,82939,82959,82981,83000],{"__ignoreMap":30},[321,82887,82888,82890,82892,82894],{"class":323,"line":324},[321,82889,6999],{"class":327},[321,82891,79920],{"class":331},[321,82893,377],{"class":327},[321,82895,82896],{"class":436}," \"To be, or not to be, that is the question.\"\n",[321,82898,82899,82901,82903,82906,82909,82911,82914,82917],{"class":323,"line":167},[321,82900,77677],{"class":331},[321,82902,58392],{"class":2169},[321,82904,82905],{"class":331},"(str.",[321,82907,82908],{"class":2169},"includes",[321,82910,332],{"class":331},[321,82912,82913],{"class":436},"\"To be\"",[321,82915,82916],{"class":331},"))",[321,82918,82919],{"class":390},"  \u002F\u002F true\n",[321,82921,82922,82924,82926,82928,82930,82932,82935,82937],{"class":323,"line":200},[321,82923,77677],{"class":331},[321,82925,58392],{"class":2169},[321,82927,82905],{"class":331},[321,82929,82908],{"class":2169},[321,82931,332],{"class":331},[321,82933,82934],{"class":436},"\"question\"",[321,82936,82916],{"class":331},[321,82938,82919],{"class":390},[321,82940,82941,82943,82945,82947,82949,82951,82954,82956],{"class":323,"line":1401},[321,82942,77677],{"class":331},[321,82944,58392],{"class":2169},[321,82946,82905],{"class":331},[321,82948,82908],{"class":2169},[321,82950,332],{"class":331},[321,82952,82953],{"class":436},"\"nonexistent\"",[321,82955,82916],{"class":331},[321,82957,82958],{"class":390},"  \u002F\u002F false\n",[321,82960,82961,82963,82965,82967,82969,82971,82973,82975,82977,82979],{"class":323,"line":1407},[321,82962,77677],{"class":331},[321,82964,58392],{"class":2169},[321,82966,82905],{"class":331},[321,82968,82908],{"class":2169},[321,82970,332],{"class":331},[321,82972,82913],{"class":436},[321,82974,12642],{"class":331},[321,82976,549],{"class":380},[321,82978,82916],{"class":331},[321,82980,82958],{"class":390},[321,82982,82983,82985,82987,82989,82991,82993,82996,82998],{"class":323,"line":1421},[321,82984,77677],{"class":331},[321,82986,58392],{"class":2169},[321,82988,82905],{"class":331},[321,82990,82908],{"class":2169},[321,82992,332],{"class":331},[321,82994,82995],{"class":436},"\"TO BE\"",[321,82997,82916],{"class":331},[321,82999,82958],{"class":390},[321,83001,83002,83004,83006,83008,83010,83012,83014,83016],{"class":323,"line":1427},[321,83003,77677],{"class":331},[321,83005,58392],{"class":2169},[321,83007,82905],{"class":331},[321,83009,82908],{"class":2169},[321,83011,332],{"class":331},[321,83013,7859],{"class":436},[321,83015,82916],{"class":331},[321,83017,82919],{"class":390},[23117,83019,83021],{"id":83020},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[312,83023,83025],{"className":53212,"code":83024,"language":53214,"meta":30,"style":30},"\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",[318,83026,83027,83035,83043,83048,83053,83058,83063,83068,83076],{"__ignoreMap":30},[321,83028,83029,83031,83033],{"class":323,"line":324},[321,83030,1242],{"class":331},[321,83032,51945],{"class":51445},[321,83034,51452],{"class":331},[321,83036,83037,83039,83041],{"class":323,"line":167},[321,83038,52289],{"class":331},[321,83040,51958],{"class":51445},[321,83042,51452],{"class":331},[321,83044,83045],{"class":323,"line":200},[321,83046,83047],{"class":331},"    const num = 10\n",[321,83049,83050],{"class":323,"line":1401},[321,83051,83052],{"class":331},"    \u002F\u002F 强制转换\n",[321,83054,83055],{"class":323,"line":1407},[321,83056,83057],{"class":331},"    console.log(String(num))\n",[321,83059,83060],{"class":323,"line":1421},[321,83061,83062],{"class":331},"    \u002F\u002F toString()方法转换\n",[321,83064,83065],{"class":323,"line":1427},[321,83066,83067],{"class":331},"    console.log(num.toString())\n",[321,83069,83070,83072,83074],{"class":323,"line":1518},[321,83071,52562],{"class":331},[321,83073,51958],{"class":51445},[321,83075,51452],{"class":331},[321,83077,83078,83080,83082],{"class":323,"line":1524},[321,83079,51930],{"class":331},[321,83081,51945],{"class":51445},[321,83083,51452],{"class":331},[23117,83085,83087],{"id":83086},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83089,83090],{},[28,83091],{"alt":30,"src":83092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[312,83094,83096],{"className":50778,"code":83095,"language":50780,"meta":30,"style":30},"\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",[318,83097,83098,83108,83122,83126,83134,83148,83168,83180,83188,83192,83200,83212,83220,83232,83237,83242,83247,83294,83310,83318,83326,83330],{"__ignoreMap":30},[321,83099,83100,83102,83104,83106],{"class":323,"line":324},[321,83101,51442],{"class":331},[321,83103,51446],{"class":51445},[321,83105,51449],{"class":2169},[321,83107,51452],{"class":331},[321,83109,83110,83112,83114,83116,83118,83120],{"class":323,"line":167},[321,83111,1242],{"class":331},[321,83113,50780],{"class":51445},[321,83115,51461],{"class":2169},[321,83117,377],{"class":331},[321,83119,51466],{"class":436},[321,83121,51452],{"class":331},[321,83123,83124],{"class":323,"line":200},[321,83125,2606],{"emptyLinePlaceholder":251},[321,83127,83128,83130,83132],{"class":323,"line":1401},[321,83129,1242],{"class":331},[321,83131,51479],{"class":51445},[321,83133,51452],{"class":331},[321,83135,83136,83138,83140,83142,83144,83146],{"class":323,"line":1407},[321,83137,52289],{"class":331},[321,83139,51489],{"class":51445},[321,83141,51492],{"class":2169},[321,83143,377],{"class":331},[321,83145,51497],{"class":436},[321,83147,51452],{"class":331},[321,83149,83150,83152,83154,83156,83158,83160,83162,83164,83166],{"class":323,"line":1421},[321,83151,52289],{"class":331},[321,83153,51489],{"class":51445},[321,83155,15127],{"class":2169},[321,83157,377],{"class":331},[321,83159,51536],{"class":436},[321,83161,51516],{"class":2169},[321,83163,377],{"class":331},[321,83165,51543],{"class":436},[321,83167,51452],{"class":331},[321,83169,83170,83172,83174,83176,83178],{"class":323,"line":1427},[321,83171,52289],{"class":331},[321,83173,51552],{"class":51445},[321,83175,51555],{"class":331},[321,83177,51552],{"class":51445},[321,83179,51452],{"class":331},[321,83181,83182,83184,83186],{"class":323,"line":1518},[321,83183,51930],{"class":331},[321,83185,51479],{"class":51445},[321,83187,51452],{"class":331},[321,83189,83190],{"class":323,"line":1524},[321,83191,2606],{"emptyLinePlaceholder":251},[321,83193,83194,83196,83198],{"class":323,"line":1536},[321,83195,1242],{"class":331},[321,83197,51945],{"class":51445},[321,83199,51452],{"class":331},[321,83201,83202,83204,83206,83208,83210],{"class":323,"line":1818},[321,83203,52289],{"class":331},[321,83205,51756],{"class":51445},[321,83207,55459],{"class":331},[321,83209,51756],{"class":51445},[321,83211,51452],{"class":331},[321,83213,83214,83216,83218],{"class":323,"line":1823},[321,83215,52289],{"class":331},[321,83217,51958],{"class":51445},[321,83219,51452],{"class":331},[321,83221,83222,83224,83227,83229],{"class":323,"line":1829},[321,83223,11428],{"class":327},[321,83225,83226],{"class":380}," gift",[321,83228,13771],{"class":327},[321,83230,83231],{"class":436}," '50g的茶叶，清洗球'\n",[321,83233,83234],{"class":323,"line":1834},[321,83235,83236],{"class":390},"    \u002F\u002F 1.把字符串拆分为数组\n",[321,83238,83239],{"class":323,"line":1848},[321,83240,83241],{"class":390},"    \u002F\u002F console.log(gift.split(','))\n",[321,83243,83244],{"class":323,"line":1853},[321,83245,83246],{"class":390},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[321,83248,83249,83251,83253,83255,83258,83261,83263,83266,83268,83270,83272,83274,83276,83279,83281,83284,83286,83288,83290,83292],{"class":323,"line":1859},[321,83250,11428],{"class":327},[321,83252,74064],{"class":380},[321,83254,13771],{"class":327},[321,83256,83257],{"class":331}," gift.",[321,83259,83260],{"class":2169},"split",[321,83262,332],{"class":331},[321,83264,83265],{"class":436},"'，'",[321,83267,30971],{"class":331},[321,83269,74189],{"class":2169},[321,83271,332],{"class":331},[321,83273,79940],{"class":5423},[321,83275,79943],{"class":327},[321,83277,83278],{"class":436}," `\u003Cspan>【赠品】${",[321,83280,79940],{"class":331},[321,83282,83283],{"class":436},"}\u003C\u002Fspan>\u003Cbr>`",[321,83285,30971],{"class":331},[321,83287,74368],{"class":2169},[321,83289,332],{"class":331},[321,83291,74373],{"class":436},[321,83293,338],{"class":331},[321,83295,83296,83298,83300,83302,83304,83306,83308],{"class":323,"line":1880},[321,83297,52552],{"class":331},[321,83299,54544],{"class":2169},[321,83301,332],{"class":331},[321,83303,82076],{"class":436},[321,83305,74394],{"class":331},[321,83307,377],{"class":327},[321,83309,74130],{"class":331},[321,83311,83312,83314,83316],{"class":323,"line":1885},[321,83313,52562],{"class":331},[321,83315,51958],{"class":51445},[321,83317,51452],{"class":331},[321,83319,83320,83322,83324],{"class":323,"line":1899},[321,83321,51930],{"class":331},[321,83323,51945],{"class":51445},[321,83325,51452],{"class":331},[321,83327,83328],{"class":323,"line":1904},[321,83329,2606],{"emptyLinePlaceholder":251},[321,83331,83332,83334,83336],{"class":323,"line":1933},[321,83333,51930],{"class":331},[321,83335,50780],{"class":51445},[321,83337,51452],{"class":331},[22205,83339,83341],{"id":83340},"_41054-number","4.10.5.4 Number",[19,83343,83344],{},[28,83345],{"alt":30,"src":83346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83348,83349],{},"整数也可以进行toFixed来保留小数",[19,83351,83352],{},"比如：",[19,83354,83355],{},"const price=10",[19,83357,83358],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22205,83360,83362],{"id":83361},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83364,83365],{},[28,83366],{"alt":30,"src":83367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[312,83369,83371],{"className":50778,"code":83370,"language":50780,"meta":30,"style":30},"\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",[318,83372,83373,83383,83397,83401,83409,83423,83443,83455,83463,83469,83479,83489,83499,83503,83507,83513,83525,83539,83543,83547,83553,83565,83581,83591,83607,83611,83615,83621,83631,83641,83645,83649,83657,83669,83681,83693,83697,83701,83709,83721,83725,83729,83740,83750,83762,83774,83784,83788,83792,83800,83809,83821,83831,83841,83845,83849,83857,83866,83873,83883,83895,83899,83903,83912,83922,83933,83945,83957,83961,83965,83974,83984,83995,83999,84003,84009,84021,84033,84043,84053,84071,84083,84087,84091,84100,84112,84122,84132,84144,84148,84156,84164,84168,84176,84190,84198,84212,84240,84248,84256,84266,84270,84278,84286,84295,84303,84312,84322,84326,84330,84338,84346,84355,84363,84371,84384,84388,84392,84400,84408,84417,84425,84433,84448,84452,84456,84464,84472,84481,84489,84497,84511,84519,84523,84527,84532,84558,84563,84600,84605,84628,84633,84687,84692,84728,84732,84738,84743,84752,84766,84775,84794,84803,84813,84818,84823,84836,84841,84895,84921,84929,84937,84941],{"__ignoreMap":30},[321,83374,83375,83377,83379,83381],{"class":323,"line":324},[321,83376,51442],{"class":331},[321,83378,51446],{"class":51445},[321,83380,51449],{"class":2169},[321,83382,51452],{"class":331},[321,83384,83385,83387,83389,83391,83393,83395],{"class":323,"line":167},[321,83386,1242],{"class":331},[321,83388,50780],{"class":51445},[321,83390,51461],{"class":2169},[321,83392,377],{"class":331},[321,83394,51466],{"class":436},[321,83396,51452],{"class":331},[321,83398,83399],{"class":323,"line":200},[321,83400,2606],{"emptyLinePlaceholder":251},[321,83402,83403,83405,83407],{"class":323,"line":1401},[321,83404,1242],{"class":331},[321,83406,51479],{"class":51445},[321,83408,51452],{"class":331},[321,83410,83411,83413,83415,83417,83419,83421],{"class":323,"line":1407},[321,83412,52289],{"class":331},[321,83414,51489],{"class":51445},[321,83416,51492],{"class":2169},[321,83418,377],{"class":331},[321,83420,51497],{"class":436},[321,83422,51452],{"class":331},[321,83424,83425,83427,83429,83431,83433,83435,83437,83439,83441],{"class":323,"line":1421},[321,83426,52289],{"class":331},[321,83428,51489],{"class":51445},[321,83430,15127],{"class":2169},[321,83432,377],{"class":331},[321,83434,51536],{"class":436},[321,83436,51516],{"class":2169},[321,83438,377],{"class":331},[321,83440,51543],{"class":436},[321,83442,51452],{"class":331},[321,83444,83445,83447,83449,83451,83453],{"class":323,"line":1427},[321,83446,52289],{"class":331},[321,83448,51552],{"class":51445},[321,83450,51555],{"class":331},[321,83452,51552],{"class":51445},[321,83454,51452],{"class":331},[321,83456,83457,83459,83461],{"class":323,"line":1518},[321,83458,52289],{"class":331},[321,83460,5333],{"class":51445},[321,83462,51452],{"class":331},[321,83464,83465,83467],{"class":323,"line":1524},[321,83466,6610],{"class":51445},[321,83468,15779],{"class":331},[321,83470,83471,83473,83475,83477],{"class":323,"line":1536},[321,83472,54840],{"class":380},[321,83474,51582],{"class":331},[321,83476,523],{"class":380},[321,83478,1497],{"class":331},[321,83480,83481,83483,83485,83487],{"class":323,"line":1818},[321,83482,54851],{"class":380},[321,83484,51582],{"class":331},[321,83486,523],{"class":380},[321,83488,1497],{"class":331},[321,83490,83491,83493,83495,83497],{"class":323,"line":1823},[321,83492,72741],{"class":380},[321,83494,51582],{"class":331},[321,83496,60650],{"class":380},[321,83498,1497],{"class":331},[321,83500,83501],{"class":323,"line":1829},[321,83502,2393],{"class":331},[321,83504,83505],{"class":323,"line":1834},[321,83506,2606],{"emptyLinePlaceholder":251},[321,83508,83509,83511],{"class":323,"line":1848},[321,83510,62268],{"class":2169},[321,83512,15779],{"class":331},[321,83514,83515,83517,83519,83521,83523],{"class":323,"line":1853},[321,83516,54916],{"class":380},[321,83518,51582],{"class":331},[321,83520,78719],{"class":380},[321,83522,51637],{"class":327},[321,83524,1497],{"class":331},[321,83526,83527,83529,83531,83533,83535,83537],{"class":323,"line":1859},[321,83528,54851],{"class":380},[321,83530,51582],{"class":331},[321,83532,643],{"class":380},[321,83534,51637],{"class":327},[321,83536,51701],{"class":380},[321,83538,1497],{"class":331},[321,83540,83541],{"class":323,"line":1880},[321,83542,2393],{"class":331},[321,83544,83545],{"class":323,"line":1885},[321,83546,2606],{"emptyLinePlaceholder":251},[321,83548,83549,83551],{"class":323,"line":1899},[321,83550,78770],{"class":2169},[321,83552,15779],{"class":331},[321,83554,83555,83557,83559,83561,83563],{"class":323,"line":1904},[321,83556,54840],{"class":380},[321,83558,51582],{"class":331},[321,83560,907],{"class":380},[321,83562,51637],{"class":327},[321,83564,1497],{"class":331},[321,83566,83567,83569,83571,83573,83575,83577,83579],{"class":323,"line":1933},[321,83568,62005],{"class":380},[321,83570,51582],{"class":331},[321,83572,28266],{"class":380},[321,83574,78825],{"class":380},[321,83576,78828],{"class":380},[321,83578,1027],{"class":327},[321,83580,1497],{"class":331},[321,83582,83583,83585,83587,83589],{"class":323,"line":1938},[321,83584,55154],{"class":380},[321,83586,51582],{"class":331},[321,83588,51622],{"class":380},[321,83590,1497],{"class":331},[321,83592,83593,83595,83597,83599,83601,83603,83605],{"class":323,"line":1955},[321,83594,62122],{"class":380},[321,83596,51582],{"class":331},[321,83598,549],{"class":380},[321,83600,51637],{"class":327},[321,83602,51666],{"class":380},[321,83604,62389],{"class":380},[321,83606,1497],{"class":331},[321,83608,83609],{"class":323,"line":1960},[321,83610,2393],{"class":331},[321,83612,83613],{"class":323,"line":1965},[321,83614,2606],{"emptyLinePlaceholder":251},[321,83616,83617,83619],{"class":323,"line":1970},[321,83618,78888],{"class":2169},[321,83620,15779],{"class":331},[321,83622,83623,83625,83627,83629],{"class":323,"line":1984},[321,83624,62170],{"class":380},[321,83626,51582],{"class":331},[321,83628,62175],{"class":380},[321,83630,1497],{"class":331},[321,83632,83633,83635,83637,83639],{"class":323,"line":1989},[321,83634,55029],{"class":380},[321,83636,51582],{"class":331},[321,83638,61963],{"class":380},[321,83640,1497],{"class":331},[321,83642,83643],{"class":323,"line":2783},[321,83644,2393],{"class":331},[321,83646,83647],{"class":323,"line":2797},[321,83648,2606],{"emptyLinePlaceholder":251},[321,83650,83651,83653,83655],{"class":323,"line":2805},[321,83652,78770],{"class":2169},[321,83654,55760],{"class":51445},[321,83656,15779],{"class":331},[321,83658,83659,83661,83663,83665,83667],{"class":323,"line":2810},[321,83660,54916],{"class":380},[321,83662,51582],{"class":331},[321,83664,944],{"class":380},[321,83666,51637],{"class":327},[321,83668,1497],{"class":331},[321,83670,83671,83673,83675,83677,83679],{"class":323,"line":2816},[321,83672,54930],{"class":380},[321,83674,51582],{"class":331},[321,83676,944],{"class":380},[321,83678,51637],{"class":327},[321,83680,1497],{"class":331},[321,83682,83683,83685,83687,83689,83691],{"class":323,"line":2822},[321,83684,61895],{"class":380},[321,83686,51582],{"class":331},[321,83688,651],{"class":380},[321,83690,51637],{"class":327},[321,83692,1497],{"class":331},[321,83694,83695],{"class":323,"line":2827},[321,83696,2393],{"class":331},[321,83698,83699],{"class":323,"line":8155},[321,83700,2606],{"emptyLinePlaceholder":251},[321,83702,83703,83705,83707],{"class":323,"line":8179},[321,83704,78770],{"class":2169},[321,83706,62449],{"class":2169},[321,83708,15779],{"class":331},[321,83710,83711,83713,83715,83717,83719],{"class":323,"line":8184},[321,83712,54916],{"class":380},[321,83714,51582],{"class":331},[321,83716,1928],{"class":380},[321,83718,51637],{"class":327},[321,83720,1497],{"class":331},[321,83722,83723],{"class":323,"line":8190},[321,83724,2393],{"class":331},[321,83726,83727],{"class":323,"line":8217},[321,83728,2606],{"emptyLinePlaceholder":251},[321,83730,83731,83733,83735,83738],{"class":323,"line":8222},[321,83732,78770],{"class":2169},[321,83734,62449],{"class":2169},[321,83736,83737],{"class":2169}," .tag",[321,83739,15779],{"class":331},[321,83741,83742,83744,83746,83748],{"class":323,"line":8228},[321,83743,55154],{"class":380},[321,83745,51582],{"class":331},[321,83747,61014],{"class":380},[321,83749,1497],{"class":331},[321,83751,83752,83754,83756,83758,83760],{"class":323,"line":8240},[321,83753,54840],{"class":380},[321,83755,51582],{"class":331},[321,83757,409],{"class":380},[321,83759,51637],{"class":327},[321,83761,1497],{"class":331},[321,83763,83764,83766,83768,83770,83772],{"class":323,"line":8252},[321,83765,55067],{"class":380},[321,83767,51582],{"class":331},[321,83769,830],{"class":380},[321,83771,51637],{"class":327},[321,83773,1497],{"class":331},[321,83775,83776,83778,83780,83782],{"class":323,"line":8264},[321,83777,57561],{"class":380},[321,83779,51582],{"class":331},[321,83781,62215],{"class":380},[321,83783,1497],{"class":331},[321,83785,83786],{"class":323,"line":9923},[321,83787,2393],{"class":331},[321,83789,83790],{"class":323,"line":9948},[321,83791,2606],{"emptyLinePlaceholder":251},[321,83793,83794,83796,83798],{"class":323,"line":9971},[321,83795,78770],{"class":2169},[321,83797,79062],{"class":2169},[321,83799,31611],{"class":331},[321,83801,83802,83804,83807],{"class":323,"line":9995},[321,83803,78770],{"class":2169},[321,83805,83806],{"class":2169}," .sub-total",[321,83808,15779],{"class":331},[321,83810,83811,83813,83815,83817,83819],{"class":323,"line":10000},[321,83812,55067],{"class":380},[321,83814,51582],{"class":331},[321,83816,982],{"class":380},[321,83818,51637],{"class":327},[321,83820,1497],{"class":331},[321,83822,83823,83825,83827,83829],{"class":323,"line":10005},[321,83824,57561],{"class":380},[321,83826,51582],{"class":331},[321,83828,79085],{"class":380},[321,83830,1497],{"class":331},[321,83832,83833,83835,83837,83839],{"class":323,"line":10010},[321,83834,61982],{"class":380},[321,83836,51582],{"class":331},[321,83838,549],{"class":380},[321,83840,1497],{"class":331},[321,83842,83843],{"class":323,"line":10019},[321,83844,2393],{"class":331},[321,83846,83847],{"class":323,"line":10024},[321,83848,2606],{"emptyLinePlaceholder":251},[321,83850,83851,83853,83855],{"class":323,"line":10030},[321,83852,78770],{"class":2169},[321,83854,79102],{"class":2169},[321,83856,31611],{"class":331},[321,83858,83859,83861,83864],{"class":323,"line":10051},[321,83860,78770],{"class":2169},[321,83862,83863],{"class":2169}," .sub-total::before",[321,83865,31611],{"class":331},[321,83867,83868,83871],{"class":323,"line":10057},[321,83869,83870],{"class":2169},"    .amount::before",[321,83872,15779],{"class":331},[321,83874,83875,83877,83879,83881],{"class":323,"line":10071},[321,83876,79109],{"class":380},[321,83878,51582],{"class":331},[321,83880,79114],{"class":436},[321,83882,1497],{"class":331},[321,83884,83885,83887,83889,83891,83893],{"class":323,"line":10077},[321,83886,55067],{"class":380},[321,83888,51582],{"class":331},[321,83890,830],{"class":380},[321,83892,51637],{"class":327},[321,83894,1497],{"class":331},[321,83896,83897],{"class":323,"line":10104},[321,83898,2393],{"class":331},[321,83900,83901],{"class":323,"line":10113},[321,83902,2606],{"emptyLinePlaceholder":251},[321,83904,83905,83907,83910],{"class":323,"line":10119},[321,83906,78770],{"class":2169},[321,83908,83909],{"class":2169}," .spec",[321,83911,15779],{"class":331},[321,83913,83914,83916,83918,83920],{"class":323,"line":10127},[321,83915,61982],{"class":380},[321,83917,51582],{"class":331},[321,83919,409],{"class":380},[321,83921,1497],{"class":331},[321,83923,83924,83926,83928,83931],{"class":323,"line":10132},[321,83925,57561],{"class":380},[321,83927,51582],{"class":331},[321,83929,83930],{"class":380},"#888",[321,83932,1497],{"class":331},[321,83934,83935,83937,83939,83941,83943],{"class":323,"line":16811},[321,83936,55067],{"class":380},[321,83938,51582],{"class":331},[321,83940,881],{"class":380},[321,83942,51637],{"class":327},[321,83944,1497],{"class":331},[321,83946,83947,83949,83951,83953,83955],{"class":323,"line":16817},[321,83948,62145],{"class":380},[321,83950,51582],{"class":331},[321,83952,1032],{"class":380},[321,83954,51637],{"class":327},[321,83956,1497],{"class":331},[321,83958,83959],{"class":323,"line":16840},[321,83960,2393],{"class":331},[321,83962,83963],{"class":323,"line":16846},[321,83964,2606],{"emptyLinePlaceholder":251},[321,83966,83967,83969,83972],{"class":323,"line":16869},[321,83968,78770],{"class":2169},[321,83970,83971],{"class":2169}," .count",[321,83973,15779],{"class":331},[321,83975,83976,83978,83980,83982],{"class":323,"line":16883},[321,83977,61982],{"class":380},[321,83979,51582],{"class":331},[321,83981,549],{"class":380},[321,83983,1497],{"class":331},[321,83985,83986,83988,83990,83993],{"class":323,"line":16903},[321,83987,57561],{"class":380},[321,83989,51582],{"class":331},[321,83991,83992],{"class":380},"#aaa",[321,83994,1497],{"class":331},[321,83996,83997],{"class":323,"line":16909},[321,83998,2393],{"class":331},[321,84000,84001],{"class":323,"line":16920},[321,84002,2606],{"emptyLinePlaceholder":251},[321,84004,84005,84007],{"class":323,"line":16943},[321,84006,72620],{"class":2169},[321,84008,15779],{"class":331},[321,84010,84011,84013,84015,84017,84019],{"class":323,"line":16965},[321,84012,54916],{"class":380},[321,84014,51582],{"class":331},[321,84016,78719],{"class":380},[321,84018,51637],{"class":327},[321,84020,1497],{"class":331},[321,84022,84023,84025,84027,84029,84031],{"class":323,"line":16970},[321,84024,54851],{"class":380},[321,84026,51582],{"class":331},[321,84028,523],{"class":380},[321,84030,51701],{"class":380},[321,84032,1497],{"class":331},[321,84034,84035,84037,84039,84041],{"class":323,"line":16976},[321,84036,55154],{"class":380},[321,84038,51582],{"class":331},[321,84040,51622],{"class":380},[321,84042,1497],{"class":331},[321,84044,84045,84047,84049,84051],{"class":323,"line":16990},[321,84046,55165],{"class":380},[321,84048,51582],{"class":331},[321,84050,51725],{"class":380},[321,84052,1497],{"class":331},[321,84054,84055,84058,84060,84062,84064,84066,84069],{"class":323,"line":17003},[321,84056,84057],{"class":380},"      border-top",[321,84059,51582],{"class":331},[321,84061,549],{"class":380},[321,84063,51637],{"class":327},[321,84065,51666],{"class":380},[321,84067,84068],{"class":380}," #4e4e4e",[321,84070,1497],{"class":331},[321,84072,84073,84075,84077,84079,84081],{"class":323,"line":17008},[321,84074,54840],{"class":380},[321,84076,51582],{"class":331},[321,84078,1032],{"class":380},[321,84080,51637],{"class":327},[321,84082,1497],{"class":331},[321,84084,84085],{"class":323,"line":17022},[321,84086,2393],{"class":331},[321,84088,84089],{"class":323,"line":17027},[321,84090,2606],{"emptyLinePlaceholder":251},[321,84092,84093,84095,84098],{"class":323,"line":17033},[321,84094,72620],{"class":2169},[321,84096,84097],{"class":2169}," .amount",[321,84099,15779],{"class":331},[321,84101,84102,84104,84106,84108,84110],{"class":323,"line":17038},[321,84103,55067],{"class":380},[321,84105,51582],{"class":331},[321,84107,982],{"class":380},[321,84109,51637],{"class":327},[321,84111,1497],{"class":331},[321,84113,84114,84116,84118,84120],{"class":323,"line":17052},[321,84115,57561],{"class":380},[321,84117,51582],{"class":331},[321,84119,79085],{"class":380},[321,84121,1497],{"class":331},[321,84123,84124,84126,84128,84130],{"class":323,"line":17057},[321,84125,62479],{"class":380},[321,84127,51582],{"class":331},[321,84129,51634],{"class":380},[321,84131,1497],{"class":331},[321,84133,84134,84136,84138,84140,84142],{"class":323,"line":17062},[321,84135,61895],{"class":380},[321,84137,51582],{"class":331},[321,84139,988],{"class":380},[321,84141,51637],{"class":327},[321,84143,1497],{"class":331},[321,84145,84146],{"class":323,"line":17076},[321,84147,2393],{"class":331},[321,84149,84150,84152,84154],{"class":323,"line":17088},[321,84151,52562],{"class":331},[321,84153,5333],{"class":51445},[321,84155,51452],{"class":331},[321,84157,84158,84160,84162],{"class":323,"line":17093},[321,84159,51930],{"class":331},[321,84161,51479],{"class":51445},[321,84163,51452],{"class":331},[321,84165,84166],{"class":323,"line":17106},[321,84167,2606],{"emptyLinePlaceholder":251},[321,84169,84170,84172,84174],{"class":323,"line":17111},[321,84171,1242],{"class":331},[321,84173,51945],{"class":51445},[321,84175,51452],{"class":331},[321,84177,84178,84180,84182,84184,84186,84188],{"class":323,"line":17116},[321,84179,52289],{"class":331},[321,84181,51756],{"class":51445},[321,84183,53631],{"class":2169},[321,84185,377],{"class":331},[321,84187,62753],{"class":436},[321,84189,51452],{"class":331},[321,84191,84192,84194,84196],{"class":323,"line":17121},[321,84193,52562],{"class":331},[321,84195,51756],{"class":51445},[321,84197,51452],{"class":331},[321,84199,84200,84202,84204,84206,84208,84210],{"class":323,"line":17134},[321,84201,52289],{"class":331},[321,84203,51756],{"class":51445},[321,84205,53631],{"class":2169},[321,84207,377],{"class":331},[321,84209,62725],{"class":436},[321,84211,51452],{"class":331},[321,84213,84214,84216,84218,84221,84223,84225,84227,84230,84232,84234,84236,84238],{"class":323,"line":17139},[321,84215,51486],{"class":331},[321,84217,51756],{"class":51445},[321,84219,84220],{"class":331},">合计：\u003C",[321,84222,321],{"class":51445},[321,84224,53631],{"class":2169},[321,84226,377],{"class":331},[321,84228,84229],{"class":436},"\"amount\"",[321,84231,55459],{"class":331},[321,84233,321],{"class":51445},[321,84235,55459],{"class":331},[321,84237,51756],{"class":51445},[321,84239,51452],{"class":331},[321,84241,84242,84244,84246],{"class":323,"line":32778},[321,84243,52562],{"class":331},[321,84245,51756],{"class":51445},[321,84247,51452],{"class":331},[321,84249,84250,84252,84254],{"class":323,"line":32784},[321,84251,52289],{"class":331},[321,84253,51958],{"class":51445},[321,84255,51452],{"class":331},[321,84257,84258,84260,84262,84264],{"class":323,"line":32790},[321,84259,11428],{"class":327},[321,84261,79522],{"class":380},[321,84263,13771],{"class":327},[321,84265,55592],{"class":331},[321,84267,84268],{"class":323,"line":32796},[321,84269,79531],{"class":331},[321,84271,84272,84274,84276],{"class":323,"line":32802},[321,84273,79536],{"class":331},[321,84275,79539],{"class":436},[321,84277,31611],{"class":331},[321,84279,84280,84282,84284],{"class":323,"line":32813},[321,84281,79546],{"class":331},[321,84283,79549],{"class":436},[321,84285,31611],{"class":331},[321,84287,84288,84290,84293],{"class":323,"line":32819},[321,84289,79556],{"class":331},[321,84291,84292],{"class":380},"289.9",[321,84294,31611],{"class":331},[321,84296,84297,84299,84301],{"class":323,"line":32839},[321,84298,79566],{"class":331},[321,84300,79569],{"class":436},[321,84302,31611],{"class":331},[321,84304,84305,84308,84310],{"class":323,"line":32845},[321,84306,84307],{"class":331},"        count: ",[321,84309,409],{"class":380},[321,84311,31611],{"class":331},[321,84313,84314,84317,84320],{"class":323,"line":32856},[321,84315,84316],{"class":331},"        spec: { color: ",[321,84318,84319],{"class":436},"'白色'",[321,84321,55749],{"class":331},[321,84323,84324],{"class":323,"line":32862},[321,84325,78037],{"class":331},[321,84327,84328],{"class":323,"line":32868},[321,84329,79531],{"class":331},[321,84331,84332,84334,84336],{"class":323,"line":32874},[321,84333,79536],{"class":331},[321,84335,79630],{"class":436},[321,84337,31611],{"class":331},[321,84339,84340,84342,84344],{"class":323,"line":32880},[321,84341,79546],{"class":331},[321,84343,79639],{"class":436},[321,84345,31611],{"class":331},[321,84347,84348,84350,84353],{"class":323,"line":32886},[321,84349,79556],{"class":331},[321,84351,84352],{"class":380},"109.8",[321,84354,31611],{"class":331},[321,84356,84357,84359,84361],{"class":323,"line":32892},[321,84358,79566],{"class":331},[321,84360,79657],{"class":436},[321,84362,31611],{"class":331},[321,84364,84365,84367,84369],{"class":323,"line":32898},[321,84366,84307],{"class":331},[321,84368,403],{"class":380},[321,84370,31611],{"class":331},[321,84372,84373,84376,84378,84380,84382],{"class":323,"line":32918},[321,84374,84375],{"class":331},"        spec: { size: ",[321,84377,82048],{"class":436},[321,84379,55609],{"class":331},[321,84381,82053],{"class":436},[321,84383,55749],{"class":331},[321,84385,84386],{"class":323,"line":32924},[321,84387,78037],{"class":331},[321,84389,84390],{"class":323,"line":32940},[321,84391,79531],{"class":331},[321,84393,84394,84396,84398],{"class":323,"line":32946},[321,84395,79536],{"class":331},[321,84397,79674],{"class":436},[321,84399,31611],{"class":331},[321,84401,84402,84404,84406],{"class":323,"line":32960},[321,84403,79546],{"class":331},[321,84405,79683],{"class":436},[321,84407,31611],{"class":331},[321,84409,84410,84412,84415],{"class":323,"line":32966},[321,84411,79556],{"class":331},[321,84413,84414],{"class":380},"488",[321,84416,31611],{"class":331},[321,84418,84419,84421,84423],{"class":323,"line":32981},[321,84420,79566],{"class":331},[321,84422,79701],{"class":436},[321,84424,31611],{"class":331},[321,84426,84427,84429,84431],{"class":323,"line":32987},[321,84428,84307],{"class":331},[321,84430,549],{"class":380},[321,84432,31611],{"class":331},[321,84434,84435,84437,84440,84443,84446],{"class":323,"line":32996},[321,84436,84316],{"class":331},[321,84438,84439],{"class":436},"'青色'",[321,84441,84442],{"class":331},", sum: ",[321,84444,84445],{"class":436},"'一大四小'",[321,84447,55749],{"class":331},[321,84449,84450],{"class":323,"line":33002},[321,84451,78037],{"class":331},[321,84453,84454],{"class":323,"line":33011},[321,84455,79531],{"class":331},[321,84457,84458,84460,84462],{"class":323,"line":33017},[321,84459,79536],{"class":331},[321,84461,79718],{"class":436},[321,84463,31611],{"class":331},[321,84465,84466,84468,84470],{"class":323,"line":33023},[321,84467,79546],{"class":331},[321,84469,79727],{"class":436},[321,84471,31611],{"class":331},[321,84473,84474,84476,84479],{"class":323,"line":33032},[321,84475,79556],{"class":331},[321,84477,84478],{"class":380},"139",[321,84480,31611],{"class":331},[321,84482,84483,84485,84487],{"class":323,"line":33038},[321,84484,79566],{"class":331},[321,84486,79745],{"class":436},[321,84488,31611],{"class":331},[321,84490,84491,84493,84495],{"class":323,"line":33049},[321,84492,84307],{"class":331},[321,84494,549],{"class":380},[321,84496,31611],{"class":331},[321,84498,84499,84501,84504,84506,84509],{"class":323,"line":33055},[321,84500,84375],{"class":331},[321,84502,84503],{"class":436},"'小号'",[321,84505,55609],{"class":331},[321,84507,84508],{"class":436},"'紫色'",[321,84510,55615],{"class":331},[321,84512,84513,84516],{"class":323,"line":33074},[321,84514,84515],{"class":331},"        gift: ",[321,84517,84518],{"class":436},"'50g茶叶,清洗球'\n",[321,84520,84521],{"class":323,"line":33080},[321,84522,52543],{"class":331},[321,84524,84525],{"class":323,"line":33091},[321,84526,53254],{"class":331},[321,84528,84529],{"class":323,"line":33097},[321,84530,84531],{"class":390},"    \u002F\u002F  1.根据数据渲染页面\n",[321,84533,84534,84536,84538,84540,84542,84544,84546,84548,84550,84552,84554,84556],{"class":323,"line":33117},[321,84535,52552],{"class":331},[321,84537,54544],{"class":2169},[321,84539,332],{"class":331},[321,84541,80046],{"class":436},[321,84543,74394],{"class":331},[321,84545,377],{"class":327},[321,84547,80193],{"class":331},[321,84549,74189],{"class":2169},[321,84551,332],{"class":331},[321,84553,79940],{"class":5423},[321,84555,79943],{"class":327},[321,84557,15779],{"class":331},[321,84559,84560],{"class":323,"line":33133},[321,84561,84562],{"class":390},"      \u002F\u002F 对象解构\n",[321,84564,84565,84567,84569,84571,84573,84575,84577,84580,84582,84584,84586,84589,84591,84594,84596,84598],{"class":323,"line":33139},[321,84566,58373],{"class":327},[321,84568,79952],{"class":331},[321,84570,79965],{"class":380},[321,84572,12642],{"class":331},[321,84574,79955],{"class":380},[321,84576,12642],{"class":331},[321,84578,84579],{"class":380},"count",[321,84581,12642],{"class":331},[321,84583,79960],{"class":380},[321,84585,12642],{"class":331},[321,84587,84588],{"class":380},"spec",[321,84590,12642],{"class":331},[321,84592,84593],{"class":380},"gift",[321,84595,79968],{"class":331},[321,84597,377],{"class":327},[321,84599,79973],{"class":331},[321,84601,84602],{"class":323,"line":33153},[321,84603,84604],{"class":390},"      \u002F\u002F 规格文字模块处理\n",[321,84606,84607,84609,84612,84614,84616,84618,84620,84622,84624,84626],{"class":323,"line":33159},[321,84608,58373],{"class":327},[321,84610,84611],{"class":380}," text",[321,84613,13771],{"class":327},[321,84615,82083],{"class":331},[321,84617,82086],{"class":2169},[321,84619,82089],{"class":331},[321,84621,74368],{"class":2169},[321,84623,332],{"class":331},[321,84625,82096],{"class":436},[321,84627,338],{"class":331},[321,84629,84630],{"class":323,"line":33165},[321,84631,84632],{"class":390},"      \u002F\u002F 处理赠品模块\n",[321,84634,84635,84637,84639,84641,84644,84646,84648,84650,84652,84655,84657,84659,84661,84663,84665,84668,84670,84673,84675,84677,84679,84681,84683,84685],{"class":323,"line":33176},[321,84636,58373],{"class":327},[321,84638,74064],{"class":380},[321,84640,13771],{"class":327},[321,84642,84643],{"class":331}," gift ",[321,84645,1318],{"class":327},[321,84647,83257],{"class":331},[321,84649,83260],{"class":2169},[321,84651,332],{"class":331},[321,84653,84654],{"class":436},"','",[321,84656,30971],{"class":331},[321,84658,74189],{"class":2169},[321,84660,332],{"class":331},[321,84662,79940],{"class":5423},[321,84664,79943],{"class":327},[321,84666,84667],{"class":436}," `\u003Cspan class=\"tag\">【赠品】${",[321,84669,79940],{"class":331},[321,84671,84672],{"class":436},"}\u003C\u002Fspan>`",[321,84674,30971],{"class":331},[321,84676,74368],{"class":2169},[321,84678,332],{"class":331},[321,84680,74373],{"class":436},[321,84682,13921],{"class":331},[321,84684,1191],{"class":327},[321,84686,70249],{"class":436},[321,84688,84689],{"class":323,"line":33182},[321,84690,84691],{"class":390},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[321,84693,84694,84696,84699,84701,84704,84706,84708,84710,84713,84715,84717,84719,84722,84724,84726],{"class":323,"line":33188},[321,84695,58373],{"class":327},[321,84697,84698],{"class":380}," subtotal",[321,84700,13771],{"class":327},[321,84702,84703],{"class":331}," ((price ",[321,84705,787],{"class":327},[321,84707,5961],{"class":380},[321,84709,6725],{"class":327},[321,84711,84712],{"class":331}," count) ",[321,84714,916],{"class":327},[321,84716,5961],{"class":380},[321,84718,30971],{"class":331},[321,84720,84721],{"class":2169},"toFixed",[321,84723,332],{"class":331},[321,84725,409],{"class":380},[321,84727,338],{"class":331},[321,84729,84730],{"class":323,"line":33198},[321,84731,2606],{"emptyLinePlaceholder":251},[321,84733,84734,84736],{"class":323,"line":33204},[321,84735,74127],{"class":327},[321,84737,70313],{"class":436},[321,84739,84740],{"class":323,"line":33215},[321,84741,84742],{"class":436},"        \u003Cdiv class=\"item\">\n",[321,84744,84745,84748,84750],{"class":323,"line":33221},[321,84746,84747],{"class":436},"          \u003Cimg src=\"${",[321,84749,79965],{"class":331},[321,84751,79997],{"class":436},[321,84753,84754,84757,84759,84762,84764],{"class":323,"line":33231},[321,84755,84756],{"class":436},"          \u003Cp class=\"name\">${",[321,84758,79955],{"class":331},[321,84760,84761],{"class":436},"}${",[321,84763,1506],{"class":331},[321,84765,80007],{"class":436},[321,84767,84768,84771,84773],{"class":323,"line":33236},[321,84769,84770],{"class":436},"          \u003Cp class=\"spec\">${",[321,84772,5394],{"class":331},[321,84774,80007],{"class":436},[321,84776,84777,84780,84782,84784,84786,84788,84790,84792],{"class":323,"line":33242},[321,84778,84779],{"class":436},"          \u003Cp class=\"price\">${",[321,84781,79960],{"class":331},[321,84783,890],{"class":436},[321,84785,84721],{"class":2169},[321,84787,332],{"class":436},[321,84789,409],{"class":380},[321,84791,761],{"class":436},[321,84793,80007],{"class":436},[321,84795,84796,84799,84801],{"class":323,"line":33291},[321,84797,84798],{"class":436},"          \u003Cp class=\"count\">x${",[321,84800,84579],{"class":331},[321,84802,80007],{"class":436},[321,84804,84805,84808,84811],{"class":323,"line":33338},[321,84806,84807],{"class":436},"          \u003Cp class=\"sub-total\">${",[321,84809,84810],{"class":331},"subtotal",[321,84812,80007],{"class":436},[321,84814,84815],{"class":323,"line":33343},[321,84816,84817],{"class":436},"        \u003C\u002Fdiv> \n",[321,84819,84820],{"class":323,"line":33349},[321,84821,84822],{"class":436},"             `\n",[321,84824,84825,84828,84830,84832,84834],{"class":323,"line":33368},[321,84826,84827],{"class":331},"    }).",[321,84829,74368],{"class":2169},[321,84831,332],{"class":331},[321,84833,74373],{"class":436},[321,84835,338],{"class":331},[321,84837,84838],{"class":323,"line":33374},[321,84839,84840],{"class":390},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[321,84842,84843,84845,84847,84849,84851,84854,84856,84859,84861,84863,84865,84868,84871,84873,84876,84878,84880,84882,84885,84887,84889,84891,84893],{"class":323,"line":33394},[321,84844,11428],{"class":327},[321,84846,62930],{"class":380},[321,84848,13771],{"class":327},[321,84850,80193],{"class":331},[321,84852,84853],{"class":2169},"reduce",[321,84855,2582],{"class":331},[321,84857,84858],{"class":5423},"prev",[321,84860,12642],{"class":331},[321,84862,79940],{"class":5423},[321,84864,13921],{"class":331},[321,84866,84867],{"class":327},"=>",[321,84869,84870],{"class":331}," prev ",[321,84872,813],{"class":327},[321,84874,84875],{"class":331}," (item.price ",[321,84877,787],{"class":327},[321,84879,5961],{"class":380},[321,84881,6725],{"class":327},[321,84883,84884],{"class":331}," item.count) ",[321,84886,916],{"class":327},[321,84888,5961],{"class":380},[321,84890,12642],{"class":331},[321,84892,523],{"class":380},[321,84894,338],{"class":331},[321,84896,84897,84899,84901,84903,84906,84908,84910,84913,84915,84917,84919],{"class":323,"line":33400},[321,84898,52552],{"class":331},[321,84900,54544],{"class":2169},[321,84902,332],{"class":331},[321,84904,84905],{"class":436},"'.amount'",[321,84907,74394],{"class":331},[321,84909,377],{"class":327},[321,84911,84912],{"class":331}," total.",[321,84914,84721],{"class":2169},[321,84916,332],{"class":331},[321,84918,409],{"class":380},[321,84920,338],{"class":331},[321,84922,84923,84925,84927],{"class":323,"line":33406},[321,84924,52562],{"class":331},[321,84926,51958],{"class":51445},[321,84928,51452],{"class":331},[321,84930,84931,84933,84935],{"class":323,"line":33416},[321,84932,51930],{"class":331},[321,84934,51945],{"class":51445},[321,84936,51452],{"class":331},[321,84938,84939],{"class":323,"line":33421},[321,84940,2606],{"emptyLinePlaceholder":251},[321,84942,84943,84945,84947],{"class":323,"line":33427},[321,84944,51930],{"class":331},[321,84946,50780],{"class":51445},[321,84948,51452],{"class":331},[14,84950,84952],{"id":84951},"_411-编程思想","4.11 编程思想",[292,84954,84956],{"id":84955},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,84958,84959,84962],{},[481,84960,84961],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,84964,84965],{},"调用就可以了",[19,84967,84968],{},[28,84969],{"alt":30,"src":84970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[292,84972,84974],{"id":84973},"_4112-面向对象","4.11.2 面向对象",[19,84976,84977],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,84979,84980],{},[28,84981],{"alt":30,"src":84982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,84984,84985],{},"面向对象的特性：",[1339,84987,84988,84991,84994],{},[154,84989,84990],{},"封装性",[154,84992,84993],{},"继承性",[154,84995,84996],{},"多态性",[292,84998,85000],{"id":84999},"_4113-两者比较","4.11.3 两者比较",[19,85002,85003],{},[28,85004],{"alt":30,"src":85005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85007,85009],{"id":85008},"_412-构造函数回顾","4.12 构造函数回顾",[19,85011,85012],{},[28,85013],{"alt":30,"src":85014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85016,85017],{},[28,85018],{"alt":30,"src":85019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85021,85022],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85024,85025],{},[28,85026],{"alt":30,"src":85027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85029,85031],{"id":85030},"_413-原型","4.13 原型",[292,85033,85035],{"id":85034},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85037,85038],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85040,85041],{},[28,85042],{"alt":30,"src":85043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85045,85046],{},[28,85047],{"alt":30,"src":85048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85050,85051],{},"原型是构造函数的属性，它也是一个对象",[19,85053,85054],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85056,85057],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[312,85059,85061],{"className":53212,"code":85060,"language":53214,"meta":30,"style":30},"\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",[318,85062,85063,85071,85076,85084,85089,85094,85099,85104,85109,85113,85117,85121,85126,85131,85135,85140,85145,85150,85155,85160,85164,85172],{"__ignoreMap":30},[321,85064,85065,85067,85069],{"class":323,"line":324},[321,85066,1242],{"class":331},[321,85068,51945],{"class":51445},[321,85070,51452],{"class":331},[321,85072,85073],{"class":323,"line":167},[321,85074,85075],{"class":390},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[321,85077,85078,85080,85082],{"class":323,"line":200},[321,85079,52289],{"class":331},[321,85081,51958],{"class":51445},[321,85083,51452],{"class":331},[321,85085,85086],{"class":323,"line":1401},[321,85087,85088],{"class":331},"    function Star(uname, age) {\n",[321,85090,85091],{"class":323,"line":1407},[321,85092,85093],{"class":331},"      this.uname = uname,\n",[321,85095,85096],{"class":323,"line":1421},[321,85097,85098],{"class":331},"        this.age = age\n",[321,85100,85101],{"class":323,"line":1427},[321,85102,85103],{"class":331},"      \u002F\u002F this.sing = function () {\n",[321,85105,85106],{"class":323,"line":1518},[321,85107,85108],{"class":331},"      \u002F\u002F   console.log('唱歌')\n",[321,85110,85111],{"class":323,"line":1524},[321,85112,2606],{"emptyLinePlaceholder":251},[321,85114,85115],{"class":323,"line":1536},[321,85116,60182],{"class":331},[321,85118,85119],{"class":323,"line":1818},[321,85120,2393],{"class":331},[321,85122,85123],{"class":323,"line":1823},[321,85124,85125],{"class":331},"    Star.prototype.sing = function () {\n",[321,85127,85128],{"class":323,"line":1829},[321,85129,85130],{"class":331},"      console.log('唱歌')\n",[321,85132,85133],{"class":323,"line":1834},[321,85134,2393],{"class":331},[321,85136,85137],{"class":323,"line":1848},[321,85138,85139],{"class":331},"    \u002F\u002F console.dir(Star.prototype)\n",[321,85141,85142],{"class":323,"line":1853},[321,85143,85144],{"class":331},"    const pink = new Star('pink', 18)\n",[321,85146,85147],{"class":323,"line":1859},[321,85148,85149],{"class":331},"    const red = new Star('red', 20)\n",[321,85151,85152],{"class":323,"line":1880},[321,85153,85154],{"class":331},"    pink.sing()\n",[321,85156,85157],{"class":323,"line":1885},[321,85158,85159],{"class":331},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[321,85161,85162],{"class":323,"line":1899},[321,85163,2606],{"emptyLinePlaceholder":251},[321,85165,85166,85168,85170],{"class":323,"line":1904},[321,85167,52562],{"class":331},[321,85169,51958],{"class":51445},[321,85171,51452],{"class":331},[321,85173,85174,85176,85178],{"class":323,"line":1933},[321,85175,51930],{"class":331},[321,85177,51945],{"class":51445},[321,85179,51452],{"class":331},[19,85181,85182],{},[28,85183],{"alt":30,"src":85184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[312,85186,85188],{"className":53212,"code":85187,"language":53214,"meta":30,"style":30},"\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",[318,85189,85190,85198,85206,85211,85216,85221,85226,85230,85235,85240,85245,85249,85254,85258,85262,85267,85271,85279],{"__ignoreMap":30},[321,85191,85192,85194,85196],{"class":323,"line":324},[321,85193,1242],{"class":331},[321,85195,51945],{"class":51445},[321,85197,51452],{"class":331},[321,85199,85200,85202,85204],{"class":323,"line":167},[321,85201,52289],{"class":331},[321,85203,51958],{"class":51445},[321,85205,51452],{"class":331},[321,85207,85208],{"class":323,"line":200},[321,85209,85210],{"class":331},"    let that\n",[321,85212,85213],{"class":323,"line":1401},[321,85214,85215],{"class":331},"    function Star(uname) {\n",[321,85217,85218],{"class":323,"line":1407},[321,85219,85220],{"class":331},"      this.uname = uname\n",[321,85222,85223],{"class":323,"line":1421},[321,85224,85225],{"class":331},"      that = this\n",[321,85227,85228],{"class":323,"line":1427},[321,85229,2393],{"class":331},[321,85231,85232],{"class":323,"line":1518},[321,85233,85234],{"class":331},"    \u002F\u002F 实例对象是 ldh\n",[321,85236,85237],{"class":323,"line":1524},[321,85238,85239],{"class":331},"    const ldh = new Star('刘德华')\n",[321,85241,85242],{"class":323,"line":1536},[321,85243,85244],{"class":331},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[321,85246,85247],{"class":323,"line":1818},[321,85248,2606],{"emptyLinePlaceholder":251},[321,85250,85251],{"class":323,"line":1823},[321,85252,85253],{"class":331},"    Star.sing = function () {\n",[321,85255,85256],{"class":323,"line":1829},[321,85257,85130],{"class":331},[321,85259,85260],{"class":323,"line":1834},[321,85261,2393],{"class":331},[321,85263,85264],{"class":323,"line":1848},[321,85265,85266],{"class":331},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[321,85268,85269],{"class":323,"line":1853},[321,85270,2606],{"emptyLinePlaceholder":251},[321,85272,85273,85275,85277],{"class":323,"line":1859},[321,85274,52562],{"class":331},[321,85276,51958],{"class":51445},[321,85278,51452],{"class":331},[321,85280,85281,85283,85285],{"class":323,"line":1880},[321,85282,51930],{"class":331},[321,85284,51945],{"class":51445},[321,85286,51452],{"class":331},[19,85288,85289],{},"构造函数的this指向的是实例对象；",[19,85291,85292],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[292,85294,85296],{"id":85295},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85298,85299],{},[28,85300],{"alt":30,"src":85301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[312,85303,85305],{"className":53212,"code":85304,"language":53214,"meta":30,"style":30},"\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",[318,85306,85307,85315,85323,85328,85333,85338,85343,85348,85353,85358,85363,85368,85373,85377,85382,85387,85392,85397,85401,85406,85411,85416,85421,85425,85430,85435,85440,85445,85449,85454,85458,85466],{"__ignoreMap":30},[321,85308,85309,85311,85313],{"class":323,"line":324},[321,85310,1242],{"class":331},[321,85312,51945],{"class":51445},[321,85314,51452],{"class":331},[321,85316,85317,85319,85321],{"class":323,"line":167},[321,85318,52289],{"class":331},[321,85320,51958],{"class":51445},[321,85322,51452],{"class":331},[321,85324,85325],{"class":323,"line":200},[321,85326,85327],{"class":331},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[321,85329,85330],{"class":323,"line":1401},[321,85331,85332],{"class":331},"    const arr = [1, 2, 3]\n",[321,85334,85335],{"class":323,"line":1407},[321,85336,85337],{"class":331},"    \u002F\u002F 自己定义数组的扩展方法\n",[321,85339,85340],{"class":323,"line":1421},[321,85341,85342],{"class":331},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[321,85344,85345],{"class":323,"line":1427},[321,85346,85347],{"class":331},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[321,85349,85350],{"class":323,"line":1518},[321,85351,85352],{"class":331},"    \u002F\u002F ①.最大值\n",[321,85354,85355],{"class":323,"line":1524},[321,85356,85357],{"class":331},"    Array.prototype.max = function () {\n",[321,85359,85360],{"class":323,"line":1536},[321,85361,85362],{"class":331},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[321,85364,85365],{"class":323,"line":1818},[321,85366,85367],{"class":331},"      return Math.max(...this)\n",[321,85369,85370],{"class":323,"line":1823},[321,85371,85372],{"class":331},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[321,85374,85375],{"class":323,"line":1829},[321,85376,2393],{"class":331},[321,85378,85379],{"class":323,"line":1834},[321,85380,85381],{"class":331},"    console.log(arr.max())\n",[321,85383,85384],{"class":323,"line":1848},[321,85385,85386],{"class":331},"    \u002F\u002F ②最小值\n",[321,85388,85389],{"class":323,"line":1853},[321,85390,85391],{"class":331},"    Array.prototype.min = function () {\n",[321,85393,85394],{"class":323,"line":1859},[321,85395,85396],{"class":331},"      return Math.min(...this)\n",[321,85398,85399],{"class":323,"line":1880},[321,85400,2393],{"class":331},[321,85402,85403],{"class":323,"line":1885},[321,85404,85405],{"class":331},"    console.log(arr.min())\n",[321,85407,85408],{"class":323,"line":1899},[321,85409,85410],{"class":331},"    \u002F\u002F③求和\n",[321,85412,85413],{"class":323,"line":1904},[321,85414,85415],{"class":331},"    Array.prototype.sum = function () {\n",[321,85417,85418],{"class":323,"line":1933},[321,85419,85420],{"class":331},"      return this.reduce((prev, current) => prev + current, 0)\n",[321,85422,85423],{"class":323,"line":1938},[321,85424,2393],{"class":331},[321,85426,85427],{"class":323,"line":1955},[321,85428,85429],{"class":331},"    console.log(arr.sum())\n",[321,85431,85432],{"class":323,"line":1960},[321,85433,85434],{"class":331},"    \u002F\u002F ③排序\n",[321,85436,85437],{"class":323,"line":1965},[321,85438,85439],{"class":331},"    Array.prototype.rever = function () {\n",[321,85441,85442],{"class":323,"line":1970},[321,85443,85444],{"class":331},"      return this.reverse()\n",[321,85446,85447],{"class":323,"line":1984},[321,85448,2393],{"class":331},[321,85450,85451],{"class":323,"line":1989},[321,85452,85453],{"class":331},"    console.log(arr.rever())\n",[321,85455,85456],{"class":323,"line":2783},[321,85457,2606],{"emptyLinePlaceholder":251},[321,85459,85460,85462,85464],{"class":323,"line":2797},[321,85461,52562],{"class":331},[321,85463,51958],{"class":51445},[321,85465,51452],{"class":331},[321,85467,85468,85470,85472],{"class":323,"line":2805},[321,85469,51930],{"class":331},[321,85471,51945],{"class":51445},[321,85473,51452],{"class":331},[19,85475,85476],{},[28,85477],{"alt":30,"src":85478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[292,85480,85482],{"id":85481},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85484,85485],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85487,85488],{},[28,85489],{"alt":30,"src":85490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[312,85492,85494],{"className":53212,"code":85493,"language":53214,"meta":30,"style":30},"\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",[318,85495,85496,85504,85512,85517,85522,85526,85531,85536,85541,85549],{"__ignoreMap":30},[321,85497,85498,85500,85502],{"class":323,"line":324},[321,85499,1242],{"class":331},[321,85501,51945],{"class":51445},[321,85503,51452],{"class":331},[321,85505,85506,85508,85510],{"class":323,"line":167},[321,85507,52289],{"class":331},[321,85509,51958],{"class":51445},[321,85511,51452],{"class":331},[321,85513,85514],{"class":323,"line":200},[321,85515,85516],{"class":331},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[321,85518,85519],{"class":323,"line":1401},[321,85520,85521],{"class":331},"    function Star() {\n",[321,85523,85524],{"class":323,"line":1407},[321,85525,2393],{"class":331},[321,85527,85528],{"class":323,"line":1421},[321,85529,85530],{"class":331},"    const ldh = new Star()\n",[321,85532,85533],{"class":323,"line":1427},[321,85534,85535],{"class":331},"    console.log(Star.prototype)\n",[321,85537,85538],{"class":323,"line":1518},[321,85539,85540],{"class":331},"    console.log(Star.prototype.constructor === Star)\n",[321,85542,85543,85545,85547],{"class":323,"line":1524},[321,85544,52562],{"class":331},[321,85546,51958],{"class":51445},[321,85548,51452],{"class":331},[321,85550,85551,85553,85555],{"class":323,"line":1536},[321,85552,51930],{"class":331},[321,85554,51945],{"class":51445},[321,85556,51452],{"class":331},[19,85558,85559],{},[28,85560],{"alt":30,"src":85561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85563,85564],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[312,85566,85568],{"className":53212,"code":85567,"language":53214,"meta":30,"style":30},"  \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",[318,85569,85570,85578,85582,85586,85590,85595,85600,85605,85609,85614,85619,85624,85629,85634,85639,85643,85647,85652,85657,85662,85666,85671,85676,85680,85684,85688],{"__ignoreMap":30},[321,85571,85572,85574,85576],{"class":323,"line":324},[321,85573,52289],{"class":331},[321,85575,51958],{"class":51445},[321,85577,51452],{"class":331},[321,85579,85580],{"class":323,"line":167},[321,85581,85516],{"class":331},[321,85583,85584],{"class":323,"line":200},[321,85585,85521],{"class":331},[321,85587,85588],{"class":323,"line":1401},[321,85589,2393],{"class":331},[321,85591,85592],{"class":323,"line":1407},[321,85593,85594],{"class":331},"    \u002F\u002F const ldh = new Star()\n",[321,85596,85597],{"class":323,"line":1421},[321,85598,85599],{"class":331},"    \u002F\u002F console.log(Star.prototype)\n",[321,85601,85602],{"class":323,"line":1427},[321,85603,85604],{"class":331},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[321,85606,85607],{"class":323,"line":1518},[321,85608,2606],{"emptyLinePlaceholder":251},[321,85610,85611],{"class":323,"line":1524},[321,85612,85613],{"class":331},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[321,85615,85616],{"class":323,"line":1536},[321,85617,85618],{"class":331},"    \u002F\u002F Star.prototype.sing = function () {\n",[321,85620,85621],{"class":323,"line":1818},[321,85622,85623],{"class":331},"    \u002F\u002F   console.log('唱歌')\n",[321,85625,85626],{"class":323,"line":1823},[321,85627,85628],{"class":331},"    \u002F\u002F }\n",[321,85630,85631],{"class":323,"line":1829},[321,85632,85633],{"class":331},"    \u002F\u002F Star.prototype.dance = function () {\n",[321,85635,85636],{"class":323,"line":1834},[321,85637,85638],{"class":331},"    \u002F\u002F   console.log('跳舞')\n",[321,85640,85641],{"class":323,"line":1848},[321,85642,85628],{"class":331},[321,85644,85645],{"class":323,"line":1853},[321,85646,85535],{"class":331},[321,85648,85649],{"class":323,"line":1859},[321,85650,85651],{"class":331},"    Star.prototype = {\n",[321,85653,85654],{"class":323,"line":1880},[321,85655,85656],{"class":331},"      sing: function () {\n",[321,85658,85659],{"class":323,"line":1885},[321,85660,85661],{"class":331},"        console.log('唱歌')\n",[321,85663,85664],{"class":323,"line":1899},[321,85665,78037],{"class":331},[321,85667,85668],{"class":323,"line":1904},[321,85669,85670],{"class":331},"      dance: function () {\n",[321,85672,85673],{"class":323,"line":1933},[321,85674,85675],{"class":331},"        console.log('跳舞')\n",[321,85677,85678],{"class":323,"line":1938},[321,85679,52543],{"class":331},[321,85681,85682],{"class":323,"line":1955},[321,85683,2393],{"class":331},[321,85685,85686],{"class":323,"line":1960},[321,85687,85535],{"class":331},[321,85689,85690,85692,85694],{"class":323,"line":1965},[321,85691,52562],{"class":331},[321,85693,51958],{"class":51445},[321,85695,51452],{"class":331},[19,85697,85698],{},"进行输出结果后会发现：",[19,85700,85701],{},[28,85702],{"alt":30,"src":85703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85705,85706],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85708,85709],{},"所以，要重新指回创造这个原型对象的构造函数",[312,85711,85713],{"className":71358,"code":85712,"language":71360,"meta":30,"style":30},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[318,85714,85715,85729,85734,85739,85750,85763,85768,85779,85793,85797],{"__ignoreMap":30},[321,85716,85717,85720,85722,85725,85727],{"class":323,"line":324},[321,85718,85719],{"class":380},"Star",[321,85721,890],{"class":331},[321,85723,85724],{"class":380},"prototype",[321,85726,13771],{"class":327},[321,85728,15779],{"class":331},[321,85730,85731],{"class":323,"line":167},[321,85732,85733],{"class":390},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[321,85735,85736],{"class":323,"line":200},[321,85737,85738],{"class":331},"  constructor: Star,\n",[321,85740,85741,85744,85746,85748],{"class":323,"line":1401},[321,85742,85743],{"class":2169},"  sing",[321,85745,51582],{"class":331},[321,85747,54594],{"class":327},[321,85749,54597],{"class":331},[321,85751,85752,85754,85756,85758,85761],{"class":323,"line":1407},[321,85753,73898],{"class":331},[321,85755,58392],{"class":2169},[321,85757,332],{"class":331},[321,85759,85760],{"class":436},"'唱歌'",[321,85762,338],{"class":331},[321,85764,85765],{"class":323,"line":1421},[321,85766,85767],{"class":331},"   },\n",[321,85769,85770,85773,85775,85777],{"class":323,"line":1427},[321,85771,85772],{"class":2169},"   dance",[321,85774,51582],{"class":331},[321,85776,54594],{"class":327},[321,85778,54597],{"class":331},[321,85780,85781,85784,85786,85788,85791],{"class":323,"line":1518},[321,85782,85783],{"class":331},"     console.",[321,85785,58392],{"class":2169},[321,85787,332],{"class":331},[321,85789,85790],{"class":436},"'跳舞'",[321,85792,338],{"class":331},[321,85794,85795],{"class":323,"line":1524},[321,85796,4515],{"class":331},[321,85798,85799],{"class":323,"line":1536},[321,85800,1771],{"class":331},[19,85802,85803],{},[28,85804],{"alt":30,"src":85805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85807,85808],{},"总结1：",[19,85810,85811],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85813,85814],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85816,85817],{},"constructor指的是他的来源",[19,85819,85820],{},[28,85821],{"alt":30,"src":85822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85824,85825],{},[28,85826],{"alt":30,"src":85827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85829,85830],{},"总结2：",[19,85832,85833],{},[28,85834],{"alt":30,"src":85835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85837,85838],{},[28,85839],{"alt":30,"src":85840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85842,85843],{},[28,85844],{"alt":30,"src":85845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[292,85847,85849],{"id":85848},"_4134-对象原型","4.13.4 对象原型",[19,85851,85852],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85854,85855],{},"对象原型就是__proto__这个属性",[19,85857,85858],{},[28,85859],{"alt":30,"src":85860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85862,85863],{},[28,85864],{"alt":30,"src":85865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85867,85868],{},[28,85869],{"alt":30,"src":85870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85872,85873],{},[28,85874],{"alt":30,"src":85875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[312,85877,85879],{"className":53212,"code":85878,"language":53214,"meta":30,"style":30},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[318,85880,85881,85889,85897,85901,85905,85909,85914,85922],{"__ignoreMap":30},[321,85882,85883,85885,85887],{"class":323,"line":324},[321,85884,1242],{"class":331},[321,85886,51945],{"class":51445},[321,85888,51452],{"class":331},[321,85890,85891,85893,85895],{"class":323,"line":167},[321,85892,52289],{"class":331},[321,85894,51958],{"class":51445},[321,85896,51452],{"class":331},[321,85898,85899],{"class":323,"line":200},[321,85900,85521],{"class":331},[321,85902,85903],{"class":323,"line":1401},[321,85904,2393],{"class":331},[321,85906,85907],{"class":323,"line":1407},[321,85908,85530],{"class":331},[321,85910,85911],{"class":323,"line":1421},[321,85912,85913],{"class":331},"    console.log(ldh)\n",[321,85915,85916,85918,85920],{"class":323,"line":1427},[321,85917,52562],{"class":331},[321,85919,51958],{"class":51445},[321,85921,51452],{"class":331},[321,85923,85924,85926,85928],{"class":323,"line":1518},[321,85925,51930],{"class":331},[321,85927,51945],{"class":51445},[321,85929,51452],{"class":331},[19,85931,85932],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,85934,85935],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,85937,85938],{},[28,85939],{"alt":30,"src":85940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,85942,85943],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,85945,85946],{},"对象原型指向原型对象",[19,85948,85949],{},[28,85950],{"alt":30,"src":85951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,85953,85954],{},[28,85955],{"alt":30,"src":85956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,85958,85959],{},[28,85960],{"alt":30,"src":85961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[292,85963,85965],{"id":85964},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,85967,85968],{},[28,85969],{"alt":30,"src":85970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[151,85972,85973,85976,85979,85982],{},[154,85974,85975],{},"构造函数通过new的形式实例化得到实例对象",[154,85977,85978],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[154,85980,85981],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[154,85983,85984],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,85986,85987],{},[28,85988],{"alt":30,"src":85989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,85991,85992],{},"题目梳理：",[19,85994,85995],{},[28,85996],{"alt":30,"src":85997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[292,85999,86001],{"id":86000},"_4136-原型继承","4.13.6 原型继承",[19,86003,86004],{},[28,86005],{"alt":30,"src":86006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86008,86009],{},[28,86010],{"alt":30,"src":86011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86013,86014],{},[28,86015],{"alt":30,"src":86016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86018,86019],{},[28,86020],{"alt":30,"src":86021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86023,86024],{},[28,86025],{"alt":30,"src":86026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86028,86029],{},[28,86030],{"alt":30,"src":86031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86033,86034],{},[28,86035],{"alt":30,"src":86036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86038,86039],{},[28,86040],{"alt":30,"src":86041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86043,86044],{},"回顾：构造函数每次new得到对象都是不同的",[292,86046,86048],{"id":86047},"_4137-原型链","4.13.7 原型链",[19,86050,86051],{},[28,86052],{"alt":30,"src":86053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86055,86056],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86058,86059],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86061,86062],{},"大哥是Object",[19,86064,86065],{},[28,86066],{"alt":30,"src":86067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86069,86070],{},[28,86071],{"alt":30,"src":86072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86074,86075],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86077,86078],{},"万物皆对象",[292,86080,86082],{"id":86081},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86084,86085],{},"模态框",[19,86087,86088],{},"以后遇见这个效果直接使用这个就行",[19,86090,86091],{},[28,86092],{"alt":30,"src":86093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86095,86096],{},[28,86097],{"alt":30,"src":86098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86100,86101],{},[28,86102],{"alt":30,"src":86103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86105,86106],{},[28,86107],{"alt":30,"src":86108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86110,86111],{},"补充知识点：",[151,86113,86114],{},[154,86115,86116],{},"append()",[19,86118,86119],{},[28,86120],{"alt":30,"src":86121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[312,86123,86125],{"className":50778,"code":86124,"language":50780,"meta":30,"style":30},"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",[318,86126,86127,86132,86137,86142,86146,86150,86154,86159,86164,86169,86173],{"__ignoreMap":30},[321,86128,86129],{"class":323,"line":324},[321,86130,86131],{"class":331},"append(param1)\n",[321,86133,86134],{"class":323,"line":167},[321,86135,86136],{"class":331},"append(param1, param2)\n",[321,86138,86139],{"class":323,"line":200},[321,86140,86141],{"class":331},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[321,86143,86144],{"class":323,"line":1401},[321,86145,2606],{"emptyLinePlaceholder":251},[321,86147,86148],{"class":323,"line":1407},[321,86149,2606],{"emptyLinePlaceholder":251},[321,86151,86152],{"class":323,"line":1421},[321,86153,2606],{"emptyLinePlaceholder":251},[321,86155,86156],{"class":323,"line":1427},[321,86157,86158],{"class":331},"let div = document.createElement(\"div\");\n",[321,86160,86161],{"class":323,"line":1518},[321,86162,86163],{"class":331},"let p = document.createElement(\"p\");\n",[321,86165,86166],{"class":323,"line":1524},[321,86167,86168],{"class":331},"div.append(p);\n",[321,86170,86171],{"class":323,"line":1536},[321,86172,2606],{"emptyLinePlaceholder":251},[321,86174,86175,86178,86180],{"class":323,"line":1818},[321,86176,86177],{"class":331},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[321,86179,19],{"class":51445},[321,86181,86182],{"class":331},"> ]\n",[151,86184,86185],{"start":167},[154,86186,86187],{},"remove()",[19,86189,86190],{},"自己删自己",[19,86192,86193],{},[28,86194],{"alt":30,"src":86195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[312,86197,86199],{"className":50778,"code":86198,"language":50780,"meta":30,"style":30},"\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",[318,86200,86201,86211,86225,86229,86237,86251,86271,86283,86291,86298,86310,86323,86358,86370,86381,86393,86405,86417,86444,86454,86458,86462,86471,86483,86497,86507,86519,86523,86527,86537,86548,86558,86568,86581,86594,86604,86608,86612,86621,86631,86643,86647,86651,86660,86670,86680,86692,86696,86700,86710,86726,86737,86747,86757,86769,86781,86793,86797,86801,86814,86825,86829,86837,86845,86849,86857,86877,86897,86905,86910,86936,86941,86946,86965,86970,86982,86987,86998,87008,87018,87023,87028,87032,87037,87042,87047,87067,87072,87092,87097,87111,87116,87121,87126,87142,87146,87151,87180,87185,87190,87195,87206,87210,87214,87218,87223,87248,87253,87278,87283,87292,87296,87301,87326,87330,87355,87359,87368,87372,87377,87395,87405,87409,87417,87425,87429],{"__ignoreMap":30},[321,86202,86203,86205,86207,86209],{"class":323,"line":324},[321,86204,51442],{"class":331},[321,86206,51446],{"class":51445},[321,86208,51449],{"class":2169},[321,86210,51452],{"class":331},[321,86212,86213,86215,86217,86219,86221,86223],{"class":323,"line":167},[321,86214,1242],{"class":331},[321,86216,50780],{"class":51445},[321,86218,51461],{"class":2169},[321,86220,377],{"class":331},[321,86222,51466],{"class":436},[321,86224,51452],{"class":331},[321,86226,86227],{"class":323,"line":200},[321,86228,2606],{"emptyLinePlaceholder":251},[321,86230,86231,86233,86235],{"class":323,"line":1401},[321,86232,1242],{"class":331},[321,86234,51479],{"class":51445},[321,86236,51452],{"class":331},[321,86238,86239,86241,86243,86245,86247,86249],{"class":323,"line":1407},[321,86240,52289],{"class":331},[321,86242,51489],{"class":51445},[321,86244,51492],{"class":2169},[321,86246,377],{"class":331},[321,86248,51497],{"class":436},[321,86250,51452],{"class":331},[321,86252,86253,86255,86257,86259,86261,86263,86265,86267,86269],{"class":323,"line":1421},[321,86254,52289],{"class":331},[321,86256,51489],{"class":51445},[321,86258,15127],{"class":2169},[321,86260,377],{"class":331},[321,86262,51536],{"class":436},[321,86264,51516],{"class":2169},[321,86266,377],{"class":331},[321,86268,51543],{"class":436},[321,86270,51452],{"class":331},[321,86272,86273,86275,86277,86279,86281],{"class":323,"line":1427},[321,86274,52289],{"class":331},[321,86276,51552],{"class":51445},[321,86278,51555],{"class":331},[321,86280,51552],{"class":51445},[321,86282,51452],{"class":331},[321,86284,86285,86287,86289],{"class":323,"line":1518},[321,86286,52289],{"class":331},[321,86288,5333],{"class":51445},[321,86290,51452],{"class":331},[321,86292,86293,86296],{"class":323,"line":1524},[321,86294,86295],{"class":2169},"    .modal",[321,86297,15779],{"class":331},[321,86299,86300,86302,86304,86306,86308],{"class":323,"line":1536},[321,86301,54916],{"class":380},[321,86303,51582],{"class":331},[321,86305,4179],{"class":380},[321,86307,51637],{"class":327},[321,86309,1497],{"class":331},[321,86311,86312,86315,86317,86319,86321],{"class":323,"line":1818},[321,86313,86314],{"class":380},"      min-height",[321,86316,51582],{"class":331},[321,86318,643],{"class":380},[321,86320,51637],{"class":327},[321,86322,1497],{"class":331},[321,86324,86325,86327,86329,86331,86333,86335,86337,86339,86341,86343,86345,86347,86349,86351,86353,86356],{"class":323,"line":1823},[321,86326,78895],{"class":380},[321,86328,51582],{"class":331},[321,86330,523],{"class":380},[321,86332,4299],{"class":380},[321,86334,2244],{"class":380},[321,86336,51637],{"class":327},[321,86338,78912],{"class":380},[321,86340,332],{"class":331},[321,86342,523],{"class":380},[321,86344,12642],{"class":331},[321,86346,523],{"class":380},[321,86348,12642],{"class":331},[321,86350,523],{"class":380},[321,86352,12642],{"class":331},[321,86354,86355],{"class":380},"0.1",[321,86357,2925],{"class":331},[321,86359,86360,86362,86364,86366,86368],{"class":323,"line":1829},[321,86361,55279],{"class":380},[321,86363,51582],{"class":331},[321,86365,625],{"class":380},[321,86367,51637],{"class":327},[321,86369,1497],{"class":331},[321,86371,86372,86374,86376,86379],{"class":323,"line":1834},[321,86373,54904],{"class":380},[321,86375,51582],{"class":331},[321,86377,86378],{"class":380},"fixed",[321,86380,1497],{"class":331},[321,86382,86383,86386,86388,86391],{"class":323,"line":1848},[321,86384,86385],{"class":380},"      z-index",[321,86387,51582],{"class":331},[321,86389,86390],{"class":380},"999",[321,86392,1497],{"class":331},[321,86394,86395,86397,86399,86401,86403],{"class":323,"line":1853},[321,86396,54983],{"class":380},[321,86398,51582],{"class":331},[321,86400,988],{"class":380},[321,86402,660],{"class":327},[321,86404,1497],{"class":331},[321,86406,86407,86409,86411,86413,86415],{"class":323,"line":1859},[321,86408,55092],{"class":380},[321,86410,51582],{"class":331},[321,86412,988],{"class":380},[321,86414,660],{"class":327},[321,86416,1497],{"class":331},[321,86418,86419,86421,86423,86425,86427,86430,86432,86434,86436,86438,86440,86442],{"class":323,"line":1880},[321,86420,78936],{"class":380},[321,86422,51582],{"class":331},[321,86424,78941],{"class":380},[321,86426,332],{"class":331},[321,86428,86429],{"class":380},"-50",[321,86431,660],{"class":327},[321,86433,12642],{"class":331},[321,86435,86429],{"class":380},[321,86437,660],{"class":327},[321,86439,12642],{"class":331},[321,86441,523],{"class":380},[321,86443,2925],{"class":331},[321,86445,86446,86448,86450,86452],{"class":323,"line":1885},[321,86447,55029],{"class":380},[321,86449,51582],{"class":331},[321,86451,60987],{"class":380},[321,86453,1497],{"class":331},[321,86455,86456],{"class":323,"line":1899},[321,86457,2393],{"class":331},[321,86459,86460],{"class":323,"line":1904},[321,86461,2606],{"emptyLinePlaceholder":251},[321,86463,86464,86466,86469],{"class":323,"line":1933},[321,86465,86295],{"class":2169},[321,86467,86468],{"class":2169}," .header",[321,86470,15779],{"class":331},[321,86472,86473,86475,86477,86479,86481],{"class":323,"line":1938},[321,86474,57504],{"class":380},[321,86476,51582],{"class":331},[321,86478,733],{"class":380},[321,86480,51637],{"class":327},[321,86482,1497],{"class":331},[321,86484,86485,86487,86489,86491,86493,86495],{"class":323,"line":1955},[321,86486,54840],{"class":380},[321,86488,51582],{"class":331},[321,86490,523],{"class":380},[321,86492,2244],{"class":380},[321,86494,51637],{"class":327},[321,86496,1497],{"class":331},[321,86498,86499,86501,86503,86505],{"class":323,"line":1960},[321,86500,54904],{"class":380},[321,86502,51582],{"class":331},[321,86504,54909],{"class":380},[321,86506,1497],{"class":331},[321,86508,86509,86511,86513,86515,86517],{"class":323,"line":1965},[321,86510,55067],{"class":380},[321,86512,51582],{"class":331},[321,86514,1032],{"class":380},[321,86516,51637],{"class":327},[321,86518,1497],{"class":331},[321,86520,86521],{"class":323,"line":1970},[321,86522,2393],{"class":331},[321,86524,86525],{"class":323,"line":1984},[321,86526,2606],{"emptyLinePlaceholder":251},[321,86528,86529,86531,86533,86535],{"class":323,"line":1989},[321,86530,86295],{"class":2169},[321,86532,86468],{"class":2169},[321,86534,3238],{"class":51445},[321,86536,15779],{"class":331},[321,86538,86539,86542,86544,86546],{"class":323,"line":2783},[321,86540,86541],{"class":380},"      font-style",[321,86543,51582],{"class":331},[321,86545,63986],{"class":380},[321,86547,1497],{"class":331},[321,86549,86550,86552,86554,86556],{"class":323,"line":2797},[321,86551,57561],{"class":380},[321,86553,51582],{"class":331},[321,86555,62215],{"class":380},[321,86557,1497],{"class":331},[321,86559,86560,86562,86564,86566],{"class":323,"line":2805},[321,86561,54904],{"class":380},[321,86563,51582],{"class":331},[321,86565,54976],{"class":380},[321,86567,1497],{"class":331},[321,86569,86570,86573,86575,86577,86579],{"class":323,"line":2810},[321,86571,86572],{"class":380},"      right",[321,86574,51582],{"class":331},[321,86576,907],{"class":380},[321,86578,51637],{"class":327},[321,86580,1497],{"class":331},[321,86582,86583,86585,86587,86590,86592],{"class":323,"line":2816},[321,86584,55092],{"class":380},[321,86586,51582],{"class":331},[321,86588,86589],{"class":380},"-2",[321,86591,51637],{"class":327},[321,86593,1497],{"class":331},[321,86595,86596,86598,86600,86602],{"class":323,"line":2822},[321,86597,62170],{"class":380},[321,86599,51582],{"class":331},[321,86601,62175],{"class":380},[321,86603,1497],{"class":331},[321,86605,86606],{"class":323,"line":2827},[321,86607,2393],{"class":331},[321,86609,86610],{"class":323,"line":8155},[321,86611,2606],{"emptyLinePlaceholder":251},[321,86613,86614,86616,86619],{"class":323,"line":8179},[321,86615,86295],{"class":2169},[321,86617,86618],{"class":2169}," .body",[321,86620,15779],{"class":331},[321,86622,86623,86625,86627,86629],{"class":323,"line":8184},[321,86624,57431],{"class":380},[321,86626,51582],{"class":331},[321,86628,51737],{"class":380},[321,86630,1497],{"class":331},[321,86632,86633,86635,86637,86639,86641],{"class":323,"line":8190},[321,86634,54840],{"class":380},[321,86636,51582],{"class":331},[321,86638,778],{"class":380},[321,86640,51637],{"class":327},[321,86642,1497],{"class":331},[321,86644,86645],{"class":323,"line":8217},[321,86646,2393],{"class":331},[321,86648,86649],{"class":323,"line":8222},[321,86650,2606],{"emptyLinePlaceholder":251},[321,86652,86653,86655,86658],{"class":323,"line":8228},[321,86654,86295],{"class":2169},[321,86656,86657],{"class":2169}," .footer",[321,86659,15779],{"class":331},[321,86661,86662,86664,86666,86668],{"class":323,"line":8240},[321,86663,55154],{"class":380},[321,86665,51582],{"class":331},[321,86667,51622],{"class":380},[321,86669,1497],{"class":331},[321,86671,86672,86674,86676,86678],{"class":323,"line":8252},[321,86673,55165],{"class":380},[321,86675,51582],{"class":331},[321,86677,51725],{"class":380},[321,86679,1497],{"class":331},[321,86681,86682,86684,86686,86688,86690],{"class":323,"line":8264},[321,86683,54840],{"class":380},[321,86685,51582],{"class":331},[321,86687,778],{"class":380},[321,86689,51637],{"class":327},[321,86691,1497],{"class":331},[321,86693,86694],{"class":323,"line":9923},[321,86695,2393],{"class":331},[321,86697,86698],{"class":323,"line":9948},[321,86699,2606],{"emptyLinePlaceholder":251},[321,86701,86702,86704,86706,86708],{"class":323,"line":9971},[321,86703,86295],{"class":2169},[321,86705,86657],{"class":2169},[321,86707,1605],{"class":51445},[321,86709,15779],{"class":331},[321,86711,86712,86714,86716,86718,86720,86722,86724],{"class":323,"line":9995},[321,86713,54840],{"class":380},[321,86715,51582],{"class":331},[321,86717,403],{"class":380},[321,86719,51637],{"class":327},[321,86721,2289],{"class":380},[321,86723,51637],{"class":327},[321,86725,1497],{"class":331},[321,86727,86728,86730,86732,86735],{"class":323,"line":10000},[321,86729,61866],{"class":380},[321,86731,51582],{"class":331},[321,86733,86734],{"class":380},"#ccc",[321,86736,1497],{"class":331},[321,86738,86739,86741,86743,86745],{"class":323,"line":10005},[321,86740,64115],{"class":380},[321,86742,51582],{"class":331},[321,86744,54882],{"class":380},[321,86746,1497],{"class":331},[321,86748,86749,86751,86753,86755],{"class":323,"line":10010},[321,86750,57561],{"class":380},[321,86752,51582],{"class":331},[321,86754,60987],{"class":380},[321,86756,1497],{"class":331},[321,86758,86759,86761,86763,86765,86767],{"class":323,"line":10019},[321,86760,55279],{"class":380},[321,86762,51582],{"class":331},[321,86764,409],{"class":380},[321,86766,51637],{"class":327},[321,86768,1497],{"class":331},[321,86770,86771,86773,86775,86777,86779],{"class":323,"line":10024},[321,86772,61895],{"class":380},[321,86774,51582],{"class":331},[321,86776,778],{"class":380},[321,86778,51637],{"class":327},[321,86780,1497],{"class":331},[321,86782,86783,86785,86787,86789,86791],{"class":323,"line":10030},[321,86784,55067],{"class":380},[321,86786,51582],{"class":331},[321,86788,881],{"class":380},[321,86790,51637],{"class":327},[321,86792,1497],{"class":331},[321,86794,86795],{"class":323,"line":10051},[321,86796,2393],{"class":331},[321,86798,86799],{"class":323,"line":10057},[321,86800,2606],{"emptyLinePlaceholder":251},[321,86802,86803,86805,86807,86809,86812],{"class":323,"line":10071},[321,86804,86295],{"class":2169},[321,86806,86657],{"class":2169},[321,86808,1605],{"class":51445},[321,86810,86811],{"class":2169},".submit",[321,86813,15779],{"class":331},[321,86815,86816,86818,86820,86823],{"class":323,"line":10077},[321,86817,55029],{"class":380},[321,86819,51582],{"class":331},[321,86821,86822],{"class":380},"#369",[321,86824,1497],{"class":331},[321,86826,86827],{"class":323,"line":10104},[321,86828,2393],{"class":331},[321,86830,86831,86833,86835],{"class":323,"line":10113},[321,86832,52562],{"class":331},[321,86834,5333],{"class":51445},[321,86836,51452],{"class":331},[321,86838,86839,86841,86843],{"class":323,"line":10119},[321,86840,51930],{"class":331},[321,86842,51479],{"class":51445},[321,86844,51452],{"class":331},[321,86846,86847],{"class":323,"line":10127},[321,86848,2606],{"emptyLinePlaceholder":251},[321,86850,86851,86853,86855],{"class":323,"line":10132},[321,86852,1242],{"class":331},[321,86854,51945],{"class":51445},[321,86856,51452],{"class":331},[321,86858,86859,86861,86863,86865,86867,86870,86873,86875],{"class":323,"line":16811},[321,86860,52289],{"class":331},[321,86862,54032],{"class":51445},[321,86864,15166],{"class":2169},[321,86866,377],{"class":331},[321,86868,86869],{"class":436},"\"delete\"",[321,86871,86872],{"class":331},">删除\u003C\u002F",[321,86874,54032],{"class":51445},[321,86876,51452],{"class":331},[321,86878,86879,86881,86883,86885,86887,86890,86893,86895],{"class":323,"line":16817},[321,86880,52289],{"class":331},[321,86882,54032],{"class":51445},[321,86884,15166],{"class":2169},[321,86886,377],{"class":331},[321,86888,86889],{"class":436},"\"login\"",[321,86891,86892],{"class":331},">登录\u003C\u002F",[321,86894,54032],{"class":51445},[321,86896,51452],{"class":331},[321,86898,86899,86901,86903],{"class":323,"line":16840},[321,86900,52289],{"class":331},[321,86902,51958],{"class":51445},[321,86904,51452],{"class":331},[321,86906,86907],{"class":323,"line":16846},[321,86908,86909],{"class":390},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[321,86911,86912,86914,86917,86919,86921,86923,86925,86927,86930,86932,86934],{"class":323,"line":16869},[321,86913,70229],{"class":327},[321,86915,86916],{"class":2169}," Modal",[321,86918,332],{"class":331},[321,86920,51552],{"class":5423},[321,86922,13771],{"class":327},[321,86924,70075],{"class":436},[321,86926,12642],{"class":331},[321,86928,86929],{"class":5423},"message",[321,86931,13771],{"class":327},[321,86933,70075],{"class":436},[321,86935,12649],{"class":331},[321,86937,86938],{"class":323,"line":16883},[321,86939,86940],{"class":390},"      \u002F\u002F 创建Model 模态框盒子\n",[321,86942,86943],{"class":323,"line":16903},[321,86944,86945],{"class":390},"      \u002F\u002F 1.1 创建div标签\n",[321,86947,86948,86950,86953,86955,86957,86959,86961,86963],{"class":323,"line":16909},[321,86949,70196],{"class":380},[321,86951,86952],{"class":331},".modalBox ",[321,86954,377],{"class":327},[321,86956,54541],{"class":331},[321,86958,70296],{"class":2169},[321,86960,332],{"class":331},[321,86962,82076],{"class":436},[321,86964,338],{"class":331},[321,86966,86967],{"class":323,"line":16920},[321,86968,86969],{"class":390},"      \u002F\u002F 1.2 给div 添加类名为model\n",[321,86971,86972,86974,86977,86979],{"class":323,"line":16943},[321,86973,70196],{"class":380},[321,86975,86976],{"class":331},".modalBox.className ",[321,86978,377],{"class":327},[321,86980,86981],{"class":436}," 'modal'\n",[321,86983,86984],{"class":323,"line":16965},[321,86985,86986],{"class":390},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[321,86988,86989,86991,86994,86996],{"class":323,"line":16970},[321,86990,70196],{"class":380},[321,86992,86993],{"class":331},".modalBox.innerHTML ",[321,86995,377],{"class":327},[321,86997,70313],{"class":436},[321,86999,87000,87003,87005],{"class":323,"line":16976},[321,87001,87002],{"class":436},"        \u003Cdiv class=\"header\">${",[321,87004,51552],{"class":331},[321,87006,87007],{"class":436},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[321,87009,87010,87013,87015],{"class":323,"line":16990},[321,87011,87012],{"class":436},"        \u003Cdiv class=\"body\">${",[321,87014,86929],{"class":331},[321,87016,87017],{"class":436},"}\u003C\u002Fdiv>\n",[321,87019,87020],{"class":323,"line":17003},[321,87021,87022],{"class":436},"      `\n",[321,87024,87025],{"class":323,"line":17008},[321,87026,87027],{"class":390},"      \u002F\u002F console.log(this.modalBox)\n",[321,87029,87030],{"class":323,"line":17022},[321,87031,2393],{"class":331},[321,87033,87034],{"class":323,"line":17027},[321,87035,87036],{"class":390},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[321,87038,87039],{"class":323,"line":17033},[321,87040,87041],{"class":390},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[321,87043,87044],{"class":323,"line":17038},[321,87045,87046],{"class":390},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[321,87048,87049,87052,87054,87056,87058,87061,87063,87065],{"class":323,"line":17052},[321,87050,87051],{"class":380},"    Modal",[321,87053,890],{"class":331},[321,87055,85724],{"class":380},[321,87057,890],{"class":331},[321,87059,87060],{"class":2169},"open",[321,87062,13771],{"class":327},[321,87064,59063],{"class":327},[321,87066,54597],{"class":331},[321,87068,87069],{"class":323,"line":17057},[321,87070,87071],{"class":390},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[321,87073,87074,87076,87079,87081,87083,87085,87087,87090],{"class":323,"line":17062},[321,87075,58373],{"class":327},[321,87077,87078],{"class":380}," box",[321,87080,13771],{"class":327},[321,87082,54541],{"class":331},[321,87084,54544],{"class":2169},[321,87086,332],{"class":331},[321,87088,87089],{"class":436},"'.modal'",[321,87091,338],{"class":331},[321,87093,87094],{"class":323,"line":17076},[321,87095,87096],{"class":390},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[321,87098,87099,87102,87104,87107,87109],{"class":323,"line":17088},[321,87100,87101],{"class":331},"      box ",[321,87103,1921],{"class":327},[321,87105,87106],{"class":331}," box.",[321,87108,57151],{"class":2169},[321,87110,2182],{"class":331},[321,87112,87113],{"class":323,"line":17093},[321,87114,87115],{"class":390},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[321,87117,87118],{"class":323,"line":17106},[321,87119,87120],{"class":390},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[321,87122,87123],{"class":323,"line":17111},[321,87124,87125],{"class":390},"      \u002F\u002F append可以增加对象\n",[321,87127,87128,87131,87134,87136,87139],{"class":323,"line":17116},[321,87129,87130],{"class":331},"      document.body.",[321,87132,87133],{"class":2169},"append",[321,87135,332],{"class":331},[321,87137,87138],{"class":380},"this",[321,87140,87141],{"class":331},".modalBox)\n",[321,87143,87144],{"class":323,"line":17121},[321,87145,2606],{"emptyLinePlaceholder":251},[321,87147,87148],{"class":323,"line":17134},[321,87149,87150],{"class":390},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[321,87152,87153,87155,87158,87160,87162,87165,87167,87169,87171,87173,87176,87178],{"class":323,"line":17139},[321,87154,70196],{"class":380},[321,87156,87157],{"class":331},".modalBox.",[321,87159,54544],{"class":2169},[321,87161,332],{"class":331},[321,87163,87164],{"class":436},"'i'",[321,87166,30971],{"class":331},[321,87168,57958],{"class":2169},[321,87170,332],{"class":331},[321,87172,57963],{"class":436},[321,87174,87175],{"class":331},", () ",[321,87177,84867],{"class":327},[321,87179,15779],{"class":331},[321,87181,87182],{"class":323,"line":32778},[321,87183,87184],{"class":390},"        \u002F\u002F 这个地方需要用到箭头函数\n",[321,87186,87187],{"class":323,"line":32784},[321,87188,87189],{"class":390},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[321,87191,87192],{"class":323,"line":32790},[321,87193,87194],{"class":390},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[321,87196,87197,87199,87201,87204],{"class":323,"line":32796},[321,87198,64871],{"class":380},[321,87200,890],{"class":331},[321,87202,87203],{"class":2169},"close",[321,87205,2182],{"class":331},[321,87207,87208],{"class":323,"line":32802},[321,87209,64960],{"class":331},[321,87211,87212],{"class":323,"line":32813},[321,87213,2393],{"class":331},[321,87215,87216],{"class":323,"line":32819},[321,87217,2606],{"emptyLinePlaceholder":251},[321,87219,87220],{"class":323,"line":32839},[321,87221,87222],{"class":390},"    \u002F\u002F 测试一下 点击 删除按钮\n",[321,87224,87225,87227,87229,87231,87234,87236,87238,87240,87242,87244,87246],{"class":323,"line":32845},[321,87226,52552],{"class":331},[321,87228,54544],{"class":2169},[321,87230,332],{"class":331},[321,87232,87233],{"class":436},"'#delete'",[321,87235,30971],{"class":331},[321,87237,57958],{"class":2169},[321,87239,332],{"class":331},[321,87241,57963],{"class":436},[321,87243,87175],{"class":331},[321,87245,84867],{"class":327},[321,87247,15779],{"class":331},[321,87249,87250],{"class":323,"line":32856},[321,87251,87252],{"class":390},"      \u002F\u002F 先调用Model构造函数\n",[321,87254,87255,87257,87260,87262,87264,87266,87268,87271,87273,87276],{"class":323,"line":32862},[321,87256,58373],{"class":327},[321,87258,87259],{"class":380}," del",[321,87261,13771],{"class":327},[321,87263,11785],{"class":327},[321,87265,86916],{"class":2169},[321,87267,332],{"class":331},[321,87269,87270],{"class":436},"'温馨的提示'",[321,87272,12642],{"class":331},[321,87274,87275],{"class":436},"'您没有删除权限操作'",[321,87277,338],{"class":331},[321,87279,87280],{"class":323,"line":32868},[321,87281,87282],{"class":390},"      \u002F\u002F 实例对象调用open方法\n",[321,87284,87285,87288,87290],{"class":323,"line":32874},[321,87286,87287],{"class":331},"      del.",[321,87289,87060],{"class":2169},[321,87291,2182],{"class":331},[321,87293,87294],{"class":323,"line":32880},[321,87295,33606],{"class":331},[321,87297,87298],{"class":323,"line":32886},[321,87299,87300],{"class":390},"    \u002F\u002F 测试一下 点击 登录按钮\n",[321,87302,87303,87305,87307,87309,87312,87314,87316,87318,87320,87322,87324],{"class":323,"line":32892},[321,87304,52552],{"class":331},[321,87306,54544],{"class":2169},[321,87308,332],{"class":331},[321,87310,87311],{"class":436},"'#login'",[321,87313,30971],{"class":331},[321,87315,57958],{"class":2169},[321,87317,332],{"class":331},[321,87319,57963],{"class":436},[321,87321,87175],{"class":331},[321,87323,84867],{"class":327},[321,87325,15779],{"class":331},[321,87327,87328],{"class":323,"line":32898},[321,87329,87252],{"class":390},[321,87331,87332,87334,87337,87339,87341,87343,87345,87348,87350,87353],{"class":323,"line":32918},[321,87333,58373],{"class":327},[321,87335,87336],{"class":380}," log",[321,87338,13771],{"class":327},[321,87340,11785],{"class":327},[321,87342,86916],{"class":2169},[321,87344,332],{"class":331},[321,87346,87347],{"class":436},"'友情提示'",[321,87349,12642],{"class":331},[321,87351,87352],{"class":436},"'您还没有登录呢'",[321,87354,338],{"class":331},[321,87356,87357],{"class":323,"line":32924},[321,87358,87282],{"class":390},[321,87360,87361,87364,87366],{"class":323,"line":32940},[321,87362,87363],{"class":331},"      log.",[321,87365,87060],{"class":2169},[321,87367,2182],{"class":331},[321,87369,87370],{"class":323,"line":32946},[321,87371,33606],{"class":331},[321,87373,87374],{"class":323,"line":32960},[321,87375,87376],{"class":390},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[321,87378,87379,87381,87383,87385,87387,87389,87391,87393],{"class":323,"line":32966},[321,87380,87051],{"class":380},[321,87382,890],{"class":331},[321,87384,85724],{"class":380},[321,87386,890],{"class":331},[321,87388,87203],{"class":2169},[321,87390,13771],{"class":327},[321,87392,59063],{"class":327},[321,87394,54597],{"class":331},[321,87396,87397,87399,87401,87403],{"class":323,"line":32981},[321,87398,70196],{"class":380},[321,87400,87157],{"class":331},[321,87402,57151],{"class":2169},[321,87404,2182],{"class":331},[321,87406,87407],{"class":323,"line":32987},[321,87408,2393],{"class":331},[321,87410,87411,87413,87415],{"class":323,"line":32996},[321,87412,52562],{"class":331},[321,87414,51958],{"class":51445},[321,87416,51452],{"class":331},[321,87418,87419,87421,87423],{"class":323,"line":33002},[321,87420,51930],{"class":331},[321,87422,51945],{"class":51445},[321,87424,51452],{"class":331},[321,87426,87427],{"class":323,"line":33011},[321,87428,2606],{"emptyLinePlaceholder":251},[321,87430,87431,87433,87435],{"class":323,"line":33017},[321,87432,51930],{"class":331},[321,87434,50780],{"class":51445},[321,87436,51452],{"class":331},[19,87438,87439],{},[28,87440],{"alt":30,"src":87441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87443,87445],{"id":87444},"_414-深浅拷贝","4.14 深浅拷贝",[292,87447,87449],{"id":87448},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87451,87452],{},[28,87453],{"alt":30,"src":87454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87456,87457],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87459,87460],{},[28,87461],{"alt":30,"src":87462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87464,87465],{},[28,87466],{"alt":30,"src":87467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87469,87470],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87472,87473],{},[28,87474],{"alt":30,"src":87475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87477,11539],{},[19,87479,87480],{},[28,87481],{"alt":30,"src":87482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[292,87484,87486],{"id":87485},"_4142-深拷贝","4.14.2 深拷贝",[19,87488,87489],{},"深拷贝：拷贝的是对象，不是地址",[19,87491,87492],{},"常用的三种方法：",[151,87494,87495,87498,87501],{},[154,87496,87497],{},"通过递归实现深拷贝",[154,87499,87500],{},"lodash\u002FcloneDeep",[154,87502,87503],{},"通过JSON.stringify()实现",[22205,87505,87507],{"id":87506},"_41421-递归函数","4.14.2.1 递归函数",[19,87509,87510],{},[28,87511],{"alt":30,"src":87512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[151,87514,87515],{},[154,87516,87517],{},"死递归占溢出：",[312,87519,87521],{"className":53212,"code":87520,"language":53214,"meta":30,"style":30},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[318,87522,87523,87531,87539,87543,87548,87552,87557,87565],{"__ignoreMap":30},[321,87524,87525,87527,87529],{"class":323,"line":324},[321,87526,1242],{"class":331},[321,87528,51945],{"class":51445},[321,87530,51452],{"class":331},[321,87532,87533,87535,87537],{"class":323,"line":167},[321,87534,52289],{"class":331},[321,87536,51958],{"class":51445},[321,87538,51452],{"class":331},[321,87540,87541],{"class":323,"line":200},[321,87542,77288],{"class":331},[321,87544,87545],{"class":323,"line":1401},[321,87546,87547],{"class":331},"      fn()\n",[321,87549,87550],{"class":323,"line":1407},[321,87551,2393],{"class":331},[321,87553,87554],{"class":323,"line":1421},[321,87555,87556],{"class":331},"    fn()\n",[321,87558,87559,87561,87563],{"class":323,"line":1427},[321,87560,52562],{"class":331},[321,87562,51958],{"class":51445},[321,87564,51452],{"class":331},[321,87566,87567,87569,87571],{"class":323,"line":1518},[321,87568,51930],{"class":331},[321,87570,51945],{"class":51445},[321,87572,51452],{"class":331},[151,87574,87575],{"start":167},[154,87576,87577],{},"递归函数要加判断条件：",[19,87579,87580],{},[28,87581],{"alt":30,"src":87582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[151,87584,87585],{"start":200},[154,87586,87587],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[312,87589,87591],{"className":50778,"code":87590,"language":50780,"meta":30,"style":30},"\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",[318,87592,87593,87603,87617,87621,87629,87643,87663,87675,87683,87687,87695,87707,87715,87723,87748,87760,87764,87771,87779,87787,87791],{"__ignoreMap":30},[321,87594,87595,87597,87599,87601],{"class":323,"line":324},[321,87596,51442],{"class":331},[321,87598,51446],{"class":51445},[321,87600,51449],{"class":2169},[321,87602,51452],{"class":331},[321,87604,87605,87607,87609,87611,87613,87615],{"class":323,"line":167},[321,87606,1242],{"class":331},[321,87608,50780],{"class":51445},[321,87610,51461],{"class":2169},[321,87612,377],{"class":331},[321,87614,51466],{"class":436},[321,87616,51452],{"class":331},[321,87618,87619],{"class":323,"line":200},[321,87620,2606],{"emptyLinePlaceholder":251},[321,87622,87623,87625,87627],{"class":323,"line":1401},[321,87624,1242],{"class":331},[321,87626,51479],{"class":51445},[321,87628,51452],{"class":331},[321,87630,87631,87633,87635,87637,87639,87641],{"class":323,"line":1407},[321,87632,52289],{"class":331},[321,87634,51489],{"class":51445},[321,87636,51492],{"class":2169},[321,87638,377],{"class":331},[321,87640,51497],{"class":436},[321,87642,51452],{"class":331},[321,87644,87645,87647,87649,87651,87653,87655,87657,87659,87661],{"class":323,"line":1421},[321,87646,52289],{"class":331},[321,87648,51489],{"class":51445},[321,87650,15127],{"class":2169},[321,87652,377],{"class":331},[321,87654,51536],{"class":436},[321,87656,51516],{"class":2169},[321,87658,377],{"class":331},[321,87660,51543],{"class":436},[321,87662,51452],{"class":331},[321,87664,87665,87667,87669,87671,87673],{"class":323,"line":1427},[321,87666,52289],{"class":331},[321,87668,51552],{"class":51445},[321,87670,51555],{"class":331},[321,87672,51552],{"class":51445},[321,87674,51452],{"class":331},[321,87676,87677,87679,87681],{"class":323,"line":1518},[321,87678,51930],{"class":331},[321,87680,51479],{"class":51445},[321,87682,51452],{"class":331},[321,87684,87685],{"class":323,"line":1524},[321,87686,2606],{"emptyLinePlaceholder":251},[321,87688,87689,87691,87693],{"class":323,"line":1536},[321,87690,1242],{"class":331},[321,87692,51945],{"class":51445},[321,87694,51452],{"class":331},[321,87696,87697,87699,87701,87703,87705],{"class":323,"line":1818},[321,87698,52289],{"class":331},[321,87700,51756],{"class":51445},[321,87702,55459],{"class":331},[321,87704,51756],{"class":51445},[321,87706,51452],{"class":331},[321,87708,87709,87711,87713],{"class":323,"line":1823},[321,87710,52289],{"class":331},[321,87712,51958],{"class":51445},[321,87714,51452],{"class":331},[321,87716,87717,87719,87721],{"class":323,"line":1829},[321,87718,70229],{"class":327},[321,87720,73918],{"class":2169},[321,87722,11060],{"class":331},[321,87724,87725,87727,87729,87731,87733,87735,87737,87739,87741,87743,87746],{"class":323,"line":1834},[321,87726,55916],{"class":331},[321,87728,54544],{"class":2169},[321,87730,332],{"class":331},[321,87732,82076],{"class":436},[321,87734,74394],{"class":331},[321,87736,377],{"class":327},[321,87738,11785],{"class":327},[321,87740,73934],{"class":2169},[321,87742,17468],{"class":331},[321,87744,87745],{"class":2169},"toLocaleString",[321,87747,2182],{"class":331},[321,87749,87750,87753,87756,87758],{"class":323,"line":1848},[321,87751,87752],{"class":2169},"      setTimeout",[321,87754,87755],{"class":331},"(getTime, ",[321,87757,6617],{"class":380},[321,87759,338],{"class":331},[321,87761,87762],{"class":323,"line":1853},[321,87763,2393],{"class":331},[321,87765,87766,87769],{"class":323,"line":1859},[321,87767,87768],{"class":2169},"    getTime",[321,87770,2182],{"class":331},[321,87772,87773,87775,87777],{"class":323,"line":1880},[321,87774,52562],{"class":331},[321,87776,51958],{"class":51445},[321,87778,51452],{"class":331},[321,87780,87781,87783,87785],{"class":323,"line":1885},[321,87782,51930],{"class":331},[321,87784,51945],{"class":51445},[321,87786,51452],{"class":331},[321,87788,87789],{"class":323,"line":1899},[321,87790,2606],{"emptyLinePlaceholder":251},[321,87792,87793,87795,87797],{"class":323,"line":1904},[321,87794,51930],{"class":331},[321,87796,50780],{"class":51445},[321,87798,51452],{"class":331},[19,87800,87801],{},[28,87802],{"alt":30,"src":87803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[151,87805,87806],{"start":1401},[154,87807,87497],{},[19,87809,87810],{},[28,87811],{"alt":30,"src":87812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87814,87815],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87817,39334],{},[19,87819,87820],{},"这个是简易版的递归函数深拷贝",[19,87822,87823],{},"一定要注意先数组再对象，因为万物皆可对象",[312,87825,87827],{"className":50778,"code":87826,"language":50780,"meta":30,"style":30},"\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",[318,87828,87829,87839,87853,87857,87865,87879,87899,87911,87919,87923,87931,87939,87949,87958,87966,87982,87986,87994,87998,88002,88014,88019,88038,88054,88059,88064,88069,88084,88089,88094,88103,88111,88128,88136,88142,88150,88155,88160,88169,88173,88177,88181,88192,88201,88211,88225,88235,88243,88251,88259,88263],{"__ignoreMap":30},[321,87830,87831,87833,87835,87837],{"class":323,"line":324},[321,87832,51442],{"class":331},[321,87834,51446],{"class":51445},[321,87836,51449],{"class":2169},[321,87838,51452],{"class":331},[321,87840,87841,87843,87845,87847,87849,87851],{"class":323,"line":167},[321,87842,1242],{"class":331},[321,87844,50780],{"class":51445},[321,87846,51461],{"class":2169},[321,87848,377],{"class":331},[321,87850,51466],{"class":436},[321,87852,51452],{"class":331},[321,87854,87855],{"class":323,"line":200},[321,87856,2606],{"emptyLinePlaceholder":251},[321,87858,87859,87861,87863],{"class":323,"line":1401},[321,87860,1242],{"class":331},[321,87862,51479],{"class":51445},[321,87864,51452],{"class":331},[321,87866,87867,87869,87871,87873,87875,87877],{"class":323,"line":1407},[321,87868,52289],{"class":331},[321,87870,51489],{"class":51445},[321,87872,51492],{"class":2169},[321,87874,377],{"class":331},[321,87876,51497],{"class":436},[321,87878,51452],{"class":331},[321,87880,87881,87883,87885,87887,87889,87891,87893,87895,87897],{"class":323,"line":1421},[321,87882,52289],{"class":331},[321,87884,51489],{"class":51445},[321,87886,15127],{"class":2169},[321,87888,377],{"class":331},[321,87890,51536],{"class":436},[321,87892,51516],{"class":2169},[321,87894,377],{"class":331},[321,87896,51543],{"class":436},[321,87898,51452],{"class":331},[321,87900,87901,87903,87905,87907,87909],{"class":323,"line":1427},[321,87902,52289],{"class":331},[321,87904,51552],{"class":51445},[321,87906,51555],{"class":331},[321,87908,51552],{"class":51445},[321,87910,51452],{"class":331},[321,87912,87913,87915,87917],{"class":323,"line":1518},[321,87914,51930],{"class":331},[321,87916,51479],{"class":51445},[321,87918,51452],{"class":331},[321,87920,87921],{"class":323,"line":1524},[321,87922,2606],{"emptyLinePlaceholder":251},[321,87924,87925,87927,87929],{"class":323,"line":1536},[321,87926,1242],{"class":331},[321,87928,51945],{"class":51445},[321,87930,51452],{"class":331},[321,87932,87933,87935,87937],{"class":323,"line":1818},[321,87934,52289],{"class":331},[321,87936,51958],{"class":51445},[321,87938,51452],{"class":331},[321,87940,87941,87943,87945,87947],{"class":323,"line":1823},[321,87942,11428],{"class":327},[321,87944,70116],{"class":380},[321,87946,13771],{"class":327},[321,87948,15779],{"class":331},[321,87950,87951,87953,87956],{"class":323,"line":1829},[321,87952,71761],{"class":331},[321,87954,87955],{"class":436},"'pink'",[321,87957,31611],{"class":331},[321,87959,87960,87962,87964],{"class":323,"line":1834},[321,87961,71771],{"class":331},[321,87963,982],{"class":380},[321,87965,31611],{"class":331},[321,87967,87968,87971,87974,87976,87979],{"class":323,"line":1848},[321,87969,87970],{"class":331},"      hobby: [",[321,87972,87973],{"class":436},"'乒乓球'",[321,87975,12642],{"class":331},[321,87977,87978],{"class":436},"'足球'",[321,87980,87981],{"class":331},"],\n",[321,87983,87984],{"class":323,"line":1853},[321,87985,78017],{"class":331},[321,87987,87988,87991],{"class":323,"line":1859},[321,87989,87990],{"class":331},"        baby: ",[321,87992,87993],{"class":436},"'小pink'\n",[321,87995,87996],{"class":323,"line":1880},[321,87997,52543],{"class":331},[321,87999,88000],{"class":323,"line":1885},[321,88001,2393],{"class":331},[321,88003,88004,88006,88009,88011],{"class":323,"line":1899},[321,88005,11428],{"class":327},[321,88007,88008],{"class":380}," o",[321,88010,13771],{"class":327},[321,88012,88013],{"class":331}," {}\n",[321,88015,88016],{"class":323,"line":1904},[321,88017,88018],{"class":390},"    \u002F\u002F 拷贝函数\n",[321,88020,88021,88023,88026,88028,88031,88033,88036],{"class":323,"line":1933},[321,88022,70229],{"class":327},[321,88024,88025],{"class":2169}," deepCopy",[321,88027,332],{"class":331},[321,88029,88030],{"class":5423},"newObj",[321,88032,12642],{"class":331},[321,88034,88035],{"class":5423},"oldObj",[321,88037,12649],{"class":331},[321,88039,88040,88042,88044,88046,88049,88051],{"class":323,"line":1938},[321,88041,52429],{"class":327},[321,88043,1864],{"class":331},[321,88045,51992],{"class":327},[321,88047,88048],{"class":331}," k ",[321,88050,26188],{"class":327},[321,88052,88053],{"class":331}," oldObj) {\n",[321,88055,88056],{"class":323,"line":1955},[321,88057,88058],{"class":390},"        \u002F\u002F 处理数组的问题\n",[321,88060,88061],{"class":323,"line":1960},[321,88062,88063],{"class":390},"        \u002F\u002F 判断是否属于数组\n",[321,88065,88066],{"class":323,"line":1965},[321,88067,88068],{"class":390},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[321,88070,88071,88073,88076,88079,88082],{"class":323,"line":1970},[321,88072,2703],{"class":327},[321,88074,88075],{"class":331}," (oldObj[k] ",[321,88077,88078],{"class":327},"instanceof",[321,88080,88081],{"class":2169}," Array",[321,88083,12649],{"class":331},[321,88085,88086],{"class":323,"line":1984},[321,88087,88088],{"class":390},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[321,88090,88091],{"class":323,"line":1989},[321,88092,88093],{"class":390},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[321,88095,88096,88099,88101],{"class":323,"line":2783},[321,88097,88098],{"class":331},"          newObj[k] ",[321,88100,377],{"class":327},[321,88102,51983],{"class":331},[321,88104,88105,88108],{"class":323,"line":2797},[321,88106,88107],{"class":2169},"          deepCopy",[321,88109,88110],{"class":331},"(newObj[k], oldObj[k])\n",[321,88112,88113,88115,88117,88119,88121,88123,88126],{"class":323,"line":2805},[321,88114,80225],{"class":331},[321,88116,1907],{"class":327},[321,88118,1910],{"class":327},[321,88120,88075],{"class":331},[321,88122,88078],{"class":327},[321,88124,88125],{"class":2169}," Object",[321,88127,12649],{"class":331},[321,88129,88130,88132,88134],{"class":323,"line":2810},[321,88131,88098],{"class":331},[321,88133,377],{"class":327},[321,88135,88013],{"class":331},[321,88137,88138,88140],{"class":323,"line":2816},[321,88139,88107],{"class":2169},[321,88141,88110],{"class":331},[321,88143,88144,88146,88148],{"class":323,"line":2822},[321,88145,80225],{"class":331},[321,88147,1907],{"class":327},[321,88149,15779],{"class":331},[321,88151,88152],{"class":323,"line":2827},[321,88153,88154],{"class":390},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[321,88156,88157],{"class":323,"line":8155},[321,88158,88159],{"class":390},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[321,88161,88162,88164,88166],{"class":323,"line":8179},[321,88163,88098],{"class":331},[321,88165,377],{"class":327},[321,88167,88168],{"class":331}," oldObj[k]\n",[321,88170,88171],{"class":323,"line":8184},[321,88172,2735],{"class":331},[321,88174,88175],{"class":323,"line":8190},[321,88176,52543],{"class":331},[321,88178,88179],{"class":323,"line":8217},[321,88180,2393],{"class":331},[321,88182,88183,88186,88189],{"class":323,"line":8222},[321,88184,88185],{"class":2169},"    deepCopy",[321,88187,88188],{"class":331},"(o, obj) ",[321,88190,88191],{"class":390},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[321,88193,88194,88196,88198],{"class":323,"line":8228},[321,88195,73898],{"class":331},[321,88197,58392],{"class":2169},[321,88199,88200],{"class":331},"(o)\n",[321,88202,88203,88206,88208],{"class":323,"line":8240},[321,88204,88205],{"class":331},"    o.age ",[321,88207,377],{"class":327},[321,88209,88210],{"class":380}," 20\n",[321,88212,88213,88216,88218,88220,88222],{"class":323,"line":8252},[321,88214,88215],{"class":331},"    o.hobby[",[321,88217,523],{"class":380},[321,88219,4649],{"class":331},[321,88221,377],{"class":327},[321,88223,88224],{"class":436}," '篮球'\n",[321,88226,88227,88230,88232],{"class":323,"line":8264},[321,88228,88229],{"class":331},"    o.family ",[321,88231,377],{"class":327},[321,88233,88234],{"class":436}," '老pink'\n",[321,88236,88237,88239,88241],{"class":323,"line":9923},[321,88238,73898],{"class":331},[321,88240,58392],{"class":2169},[321,88242,70181],{"class":331},[321,88244,88245,88247,88249],{"class":323,"line":9948},[321,88246,52562],{"class":331},[321,88248,51958],{"class":51445},[321,88250,51452],{"class":331},[321,88252,88253,88255,88257],{"class":323,"line":9971},[321,88254,51930],{"class":331},[321,88256,51945],{"class":51445},[321,88258,51452],{"class":331},[321,88260,88261],{"class":323,"line":9995},[321,88262,2606],{"emptyLinePlaceholder":251},[321,88264,88265,88267,88269],{"class":323,"line":10000},[321,88266,51930],{"class":331},[321,88268,50780],{"class":51445},[321,88270,51452],{"class":331},[19,88272,88273],{},[28,88274],{"alt":30,"src":88275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22205,88277,88279,88280],{"id":88278},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[481,88281,88282],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88284,88285],{},[570,88286,88287],{"href":88287,"rel":88288},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24073],[19,88290,88291],{},"lodash里边的方法都要加上一个下划线_",[19,88293,88294],{},"_.cloneDeep()",[312,88296,88298],{"className":50778,"code":88297,"language":50780,"meta":30,"style":30},"\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",[318,88299,88300,88310,88324,88328,88336,88350,88370,88382,88390,88394,88402,88407,88426,88434,88444,88452,88460,88472,88476,88482,88486,88490,88506,88514,88523,88531,88539,88547,88551],{"__ignoreMap":30},[321,88301,88302,88304,88306,88308],{"class":323,"line":324},[321,88303,51442],{"class":331},[321,88305,51446],{"class":51445},[321,88307,51449],{"class":2169},[321,88309,51452],{"class":331},[321,88311,88312,88314,88316,88318,88320,88322],{"class":323,"line":167},[321,88313,1242],{"class":331},[321,88315,50780],{"class":51445},[321,88317,51461],{"class":2169},[321,88319,377],{"class":331},[321,88321,51466],{"class":436},[321,88323,51452],{"class":331},[321,88325,88326],{"class":323,"line":200},[321,88327,2606],{"emptyLinePlaceholder":251},[321,88329,88330,88332,88334],{"class":323,"line":1401},[321,88331,1242],{"class":331},[321,88333,51479],{"class":51445},[321,88335,51452],{"class":331},[321,88337,88338,88340,88342,88344,88346,88348],{"class":323,"line":1407},[321,88339,52289],{"class":331},[321,88341,51489],{"class":51445},[321,88343,51492],{"class":2169},[321,88345,377],{"class":331},[321,88347,51497],{"class":436},[321,88349,51452],{"class":331},[321,88351,88352,88354,88356,88358,88360,88362,88364,88366,88368],{"class":323,"line":1421},[321,88353,52289],{"class":331},[321,88355,51489],{"class":51445},[321,88357,15127],{"class":2169},[321,88359,377],{"class":331},[321,88361,51536],{"class":436},[321,88363,51516],{"class":2169},[321,88365,377],{"class":331},[321,88367,51543],{"class":436},[321,88369,51452],{"class":331},[321,88371,88372,88374,88376,88378,88380],{"class":323,"line":1427},[321,88373,52289],{"class":331},[321,88375,51552],{"class":51445},[321,88377,51555],{"class":331},[321,88379,51552],{"class":51445},[321,88381,51452],{"class":331},[321,88383,88384,88386,88388],{"class":323,"line":1518},[321,88385,51930],{"class":331},[321,88387,51479],{"class":51445},[321,88389,51452],{"class":331},[321,88391,88392],{"class":323,"line":1524},[321,88393,2606],{"emptyLinePlaceholder":251},[321,88395,88396,88398,88400],{"class":323,"line":1536},[321,88397,1242],{"class":331},[321,88399,51945],{"class":51445},[321,88401,51452],{"class":331},[321,88403,88404],{"class":323,"line":1818},[321,88405,88406],{"class":390},"  \u003C!-- 先引用这个库 -->\n",[321,88408,88409,88411,88413,88415,88417,88420,88422,88424],{"class":323,"line":1823},[321,88410,52289],{"class":331},[321,88412,51958],{"class":51445},[321,88414,55384],{"class":2169},[321,88416,377],{"class":331},[321,88418,88419],{"class":436},"\"lodash.min.js\"",[321,88421,55459],{"class":331},[321,88423,51958],{"class":51445},[321,88425,51452],{"class":331},[321,88427,88428,88430,88432],{"class":323,"line":1829},[321,88429,52289],{"class":331},[321,88431,51958],{"class":51445},[321,88433,51452],{"class":331},[321,88435,88436,88438,88440,88442],{"class":323,"line":1834},[321,88437,11428],{"class":327},[321,88439,70116],{"class":380},[321,88441,13771],{"class":327},[321,88443,15779],{"class":331},[321,88445,88446,88448,88450],{"class":323,"line":1848},[321,88447,71761],{"class":331},[321,88449,87955],{"class":436},[321,88451,31611],{"class":331},[321,88453,88454,88456,88458],{"class":323,"line":1853},[321,88455,71771],{"class":331},[321,88457,982],{"class":380},[321,88459,31611],{"class":331},[321,88461,88462,88464,88466,88468,88470],{"class":323,"line":1859},[321,88463,87970],{"class":331},[321,88465,87973],{"class":436},[321,88467,12642],{"class":331},[321,88469,87978],{"class":436},[321,88471,87981],{"class":331},[321,88473,88474],{"class":323,"line":1880},[321,88475,78017],{"class":331},[321,88477,88478,88480],{"class":323,"line":1885},[321,88479,87990],{"class":331},[321,88481,87993],{"class":436},[321,88483,88484],{"class":323,"line":1899},[321,88485,52543],{"class":331},[321,88487,88488],{"class":323,"line":1904},[321,88489,2393],{"class":331},[321,88491,88492,88494,88496,88498,88501,88504],{"class":323,"line":1933},[321,88493,11428],{"class":327},[321,88495,88008],{"class":380},[321,88497,13771],{"class":327},[321,88499,88500],{"class":331}," _.",[321,88502,88503],{"class":2169},"cloneDeep",[321,88505,70181],{"class":331},[321,88507,88508,88510,88512],{"class":323,"line":1938},[321,88509,73898],{"class":331},[321,88511,58392],{"class":2169},[321,88513,88200],{"class":331},[321,88515,88516,88519,88521],{"class":323,"line":1955},[321,88517,88518],{"class":331},"    o.family.baby ",[321,88520,377],{"class":327},[321,88522,88234],{"class":436},[321,88524,88525,88527,88529],{"class":323,"line":1960},[321,88526,73898],{"class":331},[321,88528,58392],{"class":2169},[321,88530,70181],{"class":331},[321,88532,88533,88535,88537],{"class":323,"line":1965},[321,88534,52562],{"class":331},[321,88536,51958],{"class":51445},[321,88538,51452],{"class":331},[321,88540,88541,88543,88545],{"class":323,"line":1970},[321,88542,51930],{"class":331},[321,88544,51945],{"class":51445},[321,88546,51452],{"class":331},[321,88548,88549],{"class":323,"line":1984},[321,88550,2606],{"emptyLinePlaceholder":251},[321,88552,88553,88555,88557],{"class":323,"line":1989},[321,88554,51930],{"class":331},[321,88556,50780],{"class":51445},[321,88558,51452],{"class":331},[19,88560,88561],{},[28,88562],{"alt":30,"src":88563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22205,88565,88567],{"id":88566},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[312,88569,88571],{"className":50778,"code":88570,"language":50780,"meta":30,"style":30},"\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",[318,88572,88573,88583,88597,88601,88609,88623,88643,88655,88663,88667,88675,88683,88693,88701,88709,88721,88725,88731,88735,88739,88744,88749,88754,88780,88788,88797,88805,88813,88821,88825],{"__ignoreMap":30},[321,88574,88575,88577,88579,88581],{"class":323,"line":324},[321,88576,51442],{"class":331},[321,88578,51446],{"class":51445},[321,88580,51449],{"class":2169},[321,88582,51452],{"class":331},[321,88584,88585,88587,88589,88591,88593,88595],{"class":323,"line":167},[321,88586,1242],{"class":331},[321,88588,50780],{"class":51445},[321,88590,51461],{"class":2169},[321,88592,377],{"class":331},[321,88594,51466],{"class":436},[321,88596,51452],{"class":331},[321,88598,88599],{"class":323,"line":200},[321,88600,2606],{"emptyLinePlaceholder":251},[321,88602,88603,88605,88607],{"class":323,"line":1401},[321,88604,1242],{"class":331},[321,88606,51479],{"class":51445},[321,88608,51452],{"class":331},[321,88610,88611,88613,88615,88617,88619,88621],{"class":323,"line":1407},[321,88612,52289],{"class":331},[321,88614,51489],{"class":51445},[321,88616,51492],{"class":2169},[321,88618,377],{"class":331},[321,88620,51497],{"class":436},[321,88622,51452],{"class":331},[321,88624,88625,88627,88629,88631,88633,88635,88637,88639,88641],{"class":323,"line":1421},[321,88626,52289],{"class":331},[321,88628,51489],{"class":51445},[321,88630,15127],{"class":2169},[321,88632,377],{"class":331},[321,88634,51536],{"class":436},[321,88636,51516],{"class":2169},[321,88638,377],{"class":331},[321,88640,51543],{"class":436},[321,88642,51452],{"class":331},[321,88644,88645,88647,88649,88651,88653],{"class":323,"line":1427},[321,88646,52289],{"class":331},[321,88648,51552],{"class":51445},[321,88650,51555],{"class":331},[321,88652,51552],{"class":51445},[321,88654,51452],{"class":331},[321,88656,88657,88659,88661],{"class":323,"line":1518},[321,88658,51930],{"class":331},[321,88660,51479],{"class":51445},[321,88662,51452],{"class":331},[321,88664,88665],{"class":323,"line":1524},[321,88666,2606],{"emptyLinePlaceholder":251},[321,88668,88669,88671,88673],{"class":323,"line":1536},[321,88670,1242],{"class":331},[321,88672,51945],{"class":51445},[321,88674,51452],{"class":331},[321,88676,88677,88679,88681],{"class":323,"line":1818},[321,88678,52289],{"class":331},[321,88680,51958],{"class":51445},[321,88682,51452],{"class":331},[321,88684,88685,88687,88689,88691],{"class":323,"line":1823},[321,88686,11428],{"class":327},[321,88688,70116],{"class":380},[321,88690,13771],{"class":327},[321,88692,15779],{"class":331},[321,88694,88695,88697,88699],{"class":323,"line":1829},[321,88696,71761],{"class":331},[321,88698,87955],{"class":436},[321,88700,31611],{"class":331},[321,88702,88703,88705,88707],{"class":323,"line":1834},[321,88704,71771],{"class":331},[321,88706,982],{"class":380},[321,88708,31611],{"class":331},[321,88710,88711,88713,88715,88717,88719],{"class":323,"line":1848},[321,88712,87970],{"class":331},[321,88714,87973],{"class":436},[321,88716,12642],{"class":331},[321,88718,87978],{"class":436},[321,88720,87981],{"class":331},[321,88722,88723],{"class":323,"line":1853},[321,88724,78017],{"class":331},[321,88726,88727,88729],{"class":323,"line":1859},[321,88728,87990],{"class":331},[321,88730,87993],{"class":436},[321,88732,88733],{"class":323,"line":1880},[321,88734,52543],{"class":331},[321,88736,88737],{"class":323,"line":1885},[321,88738,2393],{"class":331},[321,88740,88741],{"class":323,"line":1899},[321,88742,88743],{"class":390},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[321,88745,88746],{"class":323,"line":1904},[321,88747,88748],{"class":390},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[321,88750,88751],{"class":323,"line":1933},[321,88752,88753],{"class":390},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[321,88755,88756,88758,88760,88762,88765,88767,88770,88772,88774,88776,88778],{"class":323,"line":1938},[321,88757,11428],{"class":327},[321,88759,88008],{"class":380},[321,88761,13771],{"class":327},[321,88763,88764],{"class":380}," JSON",[321,88766,890],{"class":331},[321,88768,88769],{"class":2169},"parse",[321,88771,332],{"class":331},[321,88773,71809],{"class":380},[321,88775,890],{"class":331},[321,88777,71814],{"class":2169},[321,88779,71817],{"class":331},[321,88781,88782,88784,88786],{"class":323,"line":1955},[321,88783,73898],{"class":331},[321,88785,58392],{"class":2169},[321,88787,88200],{"class":331},[321,88789,88790,88792,88794],{"class":323,"line":1960},[321,88791,88518],{"class":331},[321,88793,377],{"class":327},[321,88795,88796],{"class":436}," '123'\n",[321,88798,88799,88801,88803],{"class":323,"line":1965},[321,88800,73898],{"class":331},[321,88802,58392],{"class":2169},[321,88804,70181],{"class":331},[321,88806,88807,88809,88811],{"class":323,"line":1970},[321,88808,52562],{"class":331},[321,88810,51958],{"class":51445},[321,88812,51452],{"class":331},[321,88814,88815,88817,88819],{"class":323,"line":1984},[321,88816,51930],{"class":331},[321,88818,51945],{"class":51445},[321,88820,51452],{"class":331},[321,88822,88823],{"class":323,"line":1989},[321,88824,2606],{"emptyLinePlaceholder":251},[321,88826,88827,88829,88831],{"class":323,"line":2783},[321,88828,51930],{"class":331},[321,88830,50780],{"class":51445},[321,88832,51452],{"class":331},[19,88834,88835],{},[28,88836],{"alt":30,"src":88837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88839,88841],{"id":88840},"_415-异常处理","4.15 异常处理",[151,88843,88844],{},[154,88845,88846],{},"throw抛异常",[19,88848,88849],{},[28,88850],{"alt":30,"src":88851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[151,88853,88854],{"start":167},[154,88855,88856],{},"try\u002Fcatch 捕获错误信息",[19,88858,88859],{},[28,88860],{"alt":30,"src":88861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[312,88863,88865],{"className":50778,"code":88864,"language":50780,"meta":30,"style":30},"\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",[318,88866,88867,88877,88891,88895,88903,88917,88937,88949,88957,88961,88969,88981,88989,88998,89005,89010,89029,89038,89049,89054,89064,89069,89074,89079,89096,89100,89105,89112,89124,89128,89140,89144,89148,89153,89158,89165,89173,89181,89185],{"__ignoreMap":30},[321,88868,88869,88871,88873,88875],{"class":323,"line":324},[321,88870,51442],{"class":331},[321,88872,51446],{"class":51445},[321,88874,51449],{"class":2169},[321,88876,51452],{"class":331},[321,88878,88879,88881,88883,88885,88887,88889],{"class":323,"line":167},[321,88880,1242],{"class":331},[321,88882,50780],{"class":51445},[321,88884,51461],{"class":2169},[321,88886,377],{"class":331},[321,88888,51466],{"class":436},[321,88890,51452],{"class":331},[321,88892,88893],{"class":323,"line":200},[321,88894,2606],{"emptyLinePlaceholder":251},[321,88896,88897,88899,88901],{"class":323,"line":1401},[321,88898,1242],{"class":331},[321,88900,51479],{"class":51445},[321,88902,51452],{"class":331},[321,88904,88905,88907,88909,88911,88913,88915],{"class":323,"line":1407},[321,88906,52289],{"class":331},[321,88908,51489],{"class":51445},[321,88910,51492],{"class":2169},[321,88912,377],{"class":331},[321,88914,51497],{"class":436},[321,88916,51452],{"class":331},[321,88918,88919,88921,88923,88925,88927,88929,88931,88933,88935],{"class":323,"line":1421},[321,88920,52289],{"class":331},[321,88922,51489],{"class":51445},[321,88924,15127],{"class":2169},[321,88926,377],{"class":331},[321,88928,51536],{"class":436},[321,88930,51516],{"class":2169},[321,88932,377],{"class":331},[321,88934,51543],{"class":436},[321,88936,51452],{"class":331},[321,88938,88939,88941,88943,88945,88947],{"class":323,"line":1427},[321,88940,52289],{"class":331},[321,88942,51552],{"class":51445},[321,88944,51555],{"class":331},[321,88946,51552],{"class":51445},[321,88948,51452],{"class":331},[321,88950,88951,88953,88955],{"class":323,"line":1518},[321,88952,51930],{"class":331},[321,88954,51479],{"class":51445},[321,88956,51452],{"class":331},[321,88958,88959],{"class":323,"line":1524},[321,88960,2606],{"emptyLinePlaceholder":251},[321,88962,88963,88965,88967],{"class":323,"line":1536},[321,88964,1242],{"class":331},[321,88966,51945],{"class":51445},[321,88968,51452],{"class":331},[321,88970,88971,88973,88975,88977,88979],{"class":323,"line":1818},[321,88972,52289],{"class":331},[321,88974,19],{"class":51445},[321,88976,53639],{"class":331},[321,88978,19],{"class":51445},[321,88980,51452],{"class":331},[321,88982,88983,88985,88987],{"class":323,"line":1823},[321,88984,52289],{"class":331},[321,88986,51958],{"class":51445},[321,88988,51452],{"class":331},[321,88990,88991,88993,88996],{"class":323,"line":1829},[321,88992,70229],{"class":327},[321,88994,88995],{"class":2169}," fn",[321,88997,11060],{"class":331},[321,88999,89000,89003],{"class":323,"line":1834},[321,89001,89002],{"class":327},"      try",[321,89004,15779],{"class":331},[321,89006,89007],{"class":323,"line":1848},[321,89008,89009],{"class":390},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[321,89011,89012,89014,89016,89018,89020,89022,89024,89027],{"class":323,"line":1853},[321,89013,61415],{"class":327},[321,89015,7032],{"class":380},[321,89017,13771],{"class":327},[321,89019,54541],{"class":331},[321,89021,54544],{"class":2169},[321,89023,332],{"class":331},[321,89025,89026],{"class":436},"'.p'",[321,89028,338],{"class":331},[321,89030,89031,89034,89036],{"class":323,"line":1859},[321,89032,89033],{"class":331},"        p.style.color ",[321,89035,377],{"class":327},[321,89037,67196],{"class":436},[321,89039,89040,89043,89046],{"class":323,"line":1880},[321,89041,89042],{"class":331},"      } ",[321,89044,89045],{"class":327},"catch",[321,89047,89048],{"class":331}," (err) {\n",[321,89050,89051],{"class":323,"line":1885},[321,89052,89053],{"class":390},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[321,89055,89056,89059,89061],{"class":323,"line":1899},[321,89057,89058],{"class":331},"        console.",[321,89060,58392],{"class":2169},[321,89062,89063],{"class":331},"(err.message)\n",[321,89065,89066],{"class":323,"line":1904},[321,89067,89068],{"class":390},"        \u002F\u002F 想要中断程序，需要加return\n",[321,89070,89071],{"class":323,"line":1933},[321,89072,89073],{"class":390},"        \u002F\u002F return\n",[321,89075,89076],{"class":323,"line":1938},[321,89077,89078],{"class":390},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[321,89080,89081,89084,89086,89089,89091,89094],{"class":323,"line":1955},[321,89082,89083],{"class":327},"        throw",[321,89085,11785],{"class":327},[321,89087,89088],{"class":2169}," Error",[321,89090,332],{"class":331},[321,89092,89093],{"class":436},"'你看看，选择器错误了吧'",[321,89095,338],{"class":331},[321,89097,89098],{"class":323,"line":1960},[321,89099,52543],{"class":331},[321,89101,89102],{"class":323,"line":1965},[321,89103,89104],{"class":390},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[321,89106,89107,89110],{"class":323,"line":1970},[321,89108,89109],{"class":327},"      finally",[321,89111,15779],{"class":331},[321,89113,89114,89117,89119,89122],{"class":323,"line":1984},[321,89115,89116],{"class":2169},"        alert",[321,89118,332],{"class":331},[321,89120,89121],{"class":436},"'弹出对话框'",[321,89123,338],{"class":331},[321,89125,89126],{"class":323,"line":1989},[321,89127,52543],{"class":331},[321,89129,89130,89132,89134,89136,89138],{"class":323,"line":2783},[321,89131,58389],{"class":331},[321,89133,58392],{"class":2169},[321,89135,332],{"class":331},[321,89137,804],{"class":380},[321,89139,338],{"class":331},[321,89141,89142],{"class":323,"line":2797},[321,89143,2606],{"emptyLinePlaceholder":251},[321,89145,89146],{"class":323,"line":2805},[321,89147,2393],{"class":331},[321,89149,89150],{"class":323,"line":2810},[321,89151,89152],{"class":390},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[321,89154,89155],{"class":323,"line":2816},[321,89156,89157],{"class":390},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[321,89159,89160,89163],{"class":323,"line":2822},[321,89161,89162],{"class":2169},"    fn",[321,89164,2182],{"class":331},[321,89166,89167,89169,89171],{"class":323,"line":2827},[321,89168,52562],{"class":331},[321,89170,51958],{"class":51445},[321,89172,51452],{"class":331},[321,89174,89175,89177,89179],{"class":323,"line":8155},[321,89176,51930],{"class":331},[321,89178,51945],{"class":51445},[321,89180,51452],{"class":331},[321,89182,89183],{"class":323,"line":8179},[321,89184,2606],{"emptyLinePlaceholder":251},[321,89186,89187,89189,89191],{"class":323,"line":8184},[321,89188,51930],{"class":331},[321,89190,50780],{"class":51445},[321,89192,51452],{"class":331},[19,89194,89195],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[151,89197,89198],{"start":200},[154,89199,89200],{},"debugger",[19,89202,89203],{},[28,89204],{"alt":30,"src":89205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89207,89208],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89210,89212],{"id":89211},"_416-处理this","4.16 处理this",[292,89214,89216],{"id":89215},"_4161-this的指向","4.16.1 this的指向",[151,89218,89219],{},[154,89220,89221],{},"普通函数的this",[19,89223,89224],{},[28,89225],{"alt":30,"src":89226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[151,89228,89229],{"start":167},[154,89230,89231],{},"箭头函数的this",[19,89233,89234],{},[28,89235],{"alt":30,"src":89236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89238,89239],{},[28,89240],{"alt":30,"src":89241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89243,89244],{},[28,89245],{"alt":30,"src":89246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[292,89248,89250],{"id":89249},"_4162-this的改变","4.16.2 this的改变",[19,89252,89253],{},"call() apply() bind()",[151,89255,89256],{},[154,89257,89258],{},"call()",[19,89260,89261],{},[28,89262],{"alt":30,"src":89263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89265,89266],{},"两个作用：①调用函数；②改变this指向",[312,89268,89270],{"className":53212,"code":89269,"language":53214,"meta":30,"style":30},"\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",[318,89271,89272,89280,89288,89292,89297,89301,89306,89311,89316,89320,89325,89333],{"__ignoreMap":30},[321,89273,89274,89276,89278],{"class":323,"line":324},[321,89275,1242],{"class":331},[321,89277,51945],{"class":51445},[321,89279,51452],{"class":331},[321,89281,89282,89284,89286],{"class":323,"line":167},[321,89283,52289],{"class":331},[321,89285,51958],{"class":51445},[321,89287,51452],{"class":331},[321,89289,89290],{"class":323,"line":200},[321,89291,71668],{"class":331},[321,89293,89294],{"class":323,"line":1401},[321,89295,89296],{"class":331},"      uname: 'pink'\n",[321,89298,89299],{"class":323,"line":1407},[321,89300,2393],{"class":331},[321,89302,89303],{"class":323,"line":1421},[321,89304,89305],{"class":331},"    function fn(x, y) {\n",[321,89307,89308],{"class":323,"line":1427},[321,89309,89310],{"class":331},"      console.log(this)  \u002F\u002Fwindow\n",[321,89312,89313],{"class":323,"line":1518},[321,89314,89315],{"class":331},"      console.log(x + y)\n",[321,89317,89318],{"class":323,"line":1524},[321,89319,2393],{"class":331},[321,89321,89322],{"class":323,"line":1536},[321,89323,89324],{"class":331},"    fn.call(obj, 1, 2)\n",[321,89326,89327,89329,89331],{"class":323,"line":1818},[321,89328,52562],{"class":331},[321,89330,51958],{"class":51445},[321,89332,51452],{"class":331},[321,89334,89335,89337,89339],{"class":323,"line":1823},[321,89336,51930],{"class":331},[321,89338,51945],{"class":51445},[321,89340,51452],{"class":331},[19,89342,89343],{},[28,89344],{"alt":30,"src":89345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[151,89347,89348],{"start":167},[154,89349,89350],{},"apply()",[19,89352,89353],{},[28,89354],{"alt":30,"src":89355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89357,89266],{},[19,89359,89360],{},"call传递的是普通参数，而apply必须传递的是数组",[312,89362,89364],{"className":50778,"code":89363,"language":50780,"meta":30,"style":30},"\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",[318,89365,89366,89376,89390,89394,89402,89416,89436,89448,89456,89460,89468,89476,89486,89493,89497,89502,89518,89530,89544,89548,89553,89572,89577,89581,89586,89591,89599,89604,89626,89631,89647,89663,89675,89679,89684,89703,89711,89719,89723],{"__ignoreMap":30},[321,89367,89368,89370,89372,89374],{"class":323,"line":324},[321,89369,51442],{"class":331},[321,89371,51446],{"class":51445},[321,89373,51449],{"class":2169},[321,89375,51452],{"class":331},[321,89377,89378,89380,89382,89384,89386,89388],{"class":323,"line":167},[321,89379,1242],{"class":331},[321,89381,50780],{"class":51445},[321,89383,51461],{"class":2169},[321,89385,377],{"class":331},[321,89387,51466],{"class":436},[321,89389,51452],{"class":331},[321,89391,89392],{"class":323,"line":200},[321,89393,2606],{"emptyLinePlaceholder":251},[321,89395,89396,89398,89400],{"class":323,"line":1401},[321,89397,1242],{"class":331},[321,89399,51479],{"class":51445},[321,89401,51452],{"class":331},[321,89403,89404,89406,89408,89410,89412,89414],{"class":323,"line":1407},[321,89405,52289],{"class":331},[321,89407,51489],{"class":51445},[321,89409,51492],{"class":2169},[321,89411,377],{"class":331},[321,89413,51497],{"class":436},[321,89415,51452],{"class":331},[321,89417,89418,89420,89422,89424,89426,89428,89430,89432,89434],{"class":323,"line":1421},[321,89419,52289],{"class":331},[321,89421,51489],{"class":51445},[321,89423,15127],{"class":2169},[321,89425,377],{"class":331},[321,89427,51536],{"class":436},[321,89429,51516],{"class":2169},[321,89431,377],{"class":331},[321,89433,51543],{"class":436},[321,89435,51452],{"class":331},[321,89437,89438,89440,89442,89444,89446],{"class":323,"line":1427},[321,89439,52289],{"class":331},[321,89441,51552],{"class":51445},[321,89443,51555],{"class":331},[321,89445,51552],{"class":51445},[321,89447,51452],{"class":331},[321,89449,89450,89452,89454],{"class":323,"line":1518},[321,89451,51930],{"class":331},[321,89453,51479],{"class":51445},[321,89455,51452],{"class":331},[321,89457,89458],{"class":323,"line":1524},[321,89459,2606],{"emptyLinePlaceholder":251},[321,89461,89462,89464,89466],{"class":323,"line":1536},[321,89463,1242],{"class":331},[321,89465,51945],{"class":51445},[321,89467,51452],{"class":331},[321,89469,89470,89472,89474],{"class":323,"line":1818},[321,89471,52289],{"class":331},[321,89473,51958],{"class":51445},[321,89475,51452],{"class":331},[321,89477,89478,89480,89482,89484],{"class":323,"line":1823},[321,89479,11428],{"class":327},[321,89481,70116],{"class":380},[321,89483,13771],{"class":327},[321,89485,15779],{"class":331},[321,89487,89488,89490],{"class":323,"line":1829},[321,89489,71771],{"class":331},[321,89491,89492],{"class":380},"18\n",[321,89494,89495],{"class":323,"line":1834},[321,89496,2393],{"class":331},[321,89498,89499],{"class":323,"line":1848},[321,89500,89501],{"class":390},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[321,89503,89504,89506,89508,89510,89512,89514,89516],{"class":323,"line":1853},[321,89505,70229],{"class":327},[321,89507,88995],{"class":2169},[321,89509,332],{"class":331},[321,89511,1152],{"class":5423},[321,89513,12642],{"class":331},[321,89515,1177],{"class":5423},[321,89517,12649],{"class":331},[321,89519,89520,89522,89524,89526,89528],{"class":323,"line":1859},[321,89521,58389],{"class":331},[321,89523,58392],{"class":2169},[321,89525,332],{"class":331},[321,89527,87138],{"class":380},[321,89529,338],{"class":331},[321,89531,89532,89534,89536,89539,89541],{"class":323,"line":1880},[321,89533,58389],{"class":331},[321,89535,58392],{"class":2169},[321,89537,89538],{"class":331},"(x ",[321,89540,813],{"class":327},[321,89542,89543],{"class":331}," y)\n",[321,89545,89546],{"class":323,"line":1885},[321,89547,2393],{"class":331},[321,89549,89550],{"class":323,"line":1899},[321,89551,89552],{"class":390},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[321,89554,89555,89558,89561,89564,89566,89568,89570],{"class":323,"line":1904},[321,89556,89557],{"class":331},"    fn.",[321,89559,89560],{"class":2169},"apply",[321,89562,89563],{"class":331},"(obj, [",[321,89565,549],{"class":380},[321,89567,12642],{"class":331},[321,89569,409],{"class":380},[321,89571,4863],{"class":331},[321,89573,89574],{"class":323,"line":1933},[321,89575,89576],{"class":390},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[321,89578,89579],{"class":323,"line":1938},[321,89580,2606],{"emptyLinePlaceholder":251},[321,89582,89583],{"class":323,"line":1955},[321,89584,89585],{"class":390},"    \u002F\u002F 使用场景：求数组最大值\n",[321,89587,89588],{"class":323,"line":1960},[321,89589,89590],{"class":390},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[321,89592,89593,89596],{"class":323,"line":1965},[321,89594,89595],{"class":390},"    \u002F\u002F console.log(max)",[321,89597,89598],{"class":390},"   \u002F\u002F3\n",[321,89600,89601],{"class":323,"line":1970},[321,89602,89603],{"class":390},"    \u002F\u002F 指向空或者Math都是可以的\n",[321,89605,89606,89608,89610,89612,89614,89616,89618,89620,89622,89624],{"class":323,"line":1984},[321,89607,11428],{"class":327},[321,89609,57840],{"class":380},[321,89611,13771],{"class":327},[321,89613,52371],{"class":331},[321,89615,643],{"class":380},[321,89617,12642],{"class":331},[321,89619,836],{"class":380},[321,89621,12642],{"class":331},[321,89623,867],{"class":380},[321,89625,33391],{"class":331},[321,89627,89628],{"class":323,"line":1989},[321,89629,89630],{"class":390},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[321,89632,89633,89635,89637,89639,89642,89644],{"class":323,"line":2783},[321,89634,11428],{"class":327},[321,89636,6158],{"class":380},[321,89638,13771],{"class":327},[321,89640,89641],{"class":331}," Math.max.",[321,89643,89560],{"class":2169},[321,89645,89646],{"class":331},"(Math, arr)\n",[321,89648,89649,89651,89654,89656,89659,89661],{"class":323,"line":2797},[321,89650,11428],{"class":327},[321,89652,89653],{"class":380}," min",[321,89655,13771],{"class":327},[321,89657,89658],{"class":331}," Math.min.",[321,89660,89560],{"class":2169},[321,89662,89646],{"class":331},[321,89664,89665,89667,89669,89672],{"class":323,"line":2805},[321,89666,73898],{"class":331},[321,89668,58392],{"class":2169},[321,89670,89671],{"class":331},"(max, min)     ",[321,89673,89674],{"class":390},"\u002F\u002F100,4\n",[321,89676,89677],{"class":323,"line":2810},[321,89678,2606],{"emptyLinePlaceholder":251},[321,89680,89681],{"class":323,"line":2816},[321,89682,89683],{"class":390},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[321,89685,89686,89688,89690,89693,89695,89697,89700],{"class":323,"line":2822},[321,89687,73898],{"class":331},[321,89689,58392],{"class":2169},[321,89691,89692],{"class":331},"(Max.",[321,89694,6222],{"class":2169},[321,89696,332],{"class":331},[321,89698,89699],{"class":327},"...",[321,89701,89702],{"class":331},"arr))\n",[321,89704,89705,89707,89709],{"class":323,"line":2827},[321,89706,52562],{"class":331},[321,89708,51958],{"class":51445},[321,89710,51452],{"class":331},[321,89712,89713,89715,89717],{"class":323,"line":8155},[321,89714,51930],{"class":331},[321,89716,51945],{"class":51445},[321,89718,51452],{"class":331},[321,89720,89721],{"class":323,"line":8179},[321,89722,2606],{"emptyLinePlaceholder":251},[321,89724,89725,89727,89729],{"class":323,"line":8184},[321,89726,51930],{"class":331},[321,89728,50780],{"class":51445},[321,89730,51452],{"class":331},[19,89732,89733],{},[28,89734],{"alt":30,"src":89735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[151,89737,89738],{"start":200},[154,89739,89740],{},"bind()",[19,89742,89743],{},[28,89744],{"alt":30,"src":89745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89747,89748],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89750,89751],{},"bind的语法跟call很相似",[312,89753,89755],{"className":53212,"code":89754,"language":53214,"meta":30,"style":30},"\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",[318,89756,89757,89765,89773,89777,89782,89786,89790,89795,89799,89804,89809,89814,89819,89824,89829,89834,89838,89846],{"__ignoreMap":30},[321,89758,89759,89761,89763],{"class":323,"line":324},[321,89760,1242],{"class":331},[321,89762,51945],{"class":51445},[321,89764,51452],{"class":331},[321,89766,89767,89769,89771],{"class":323,"line":167},[321,89768,52289],{"class":331},[321,89770,51958],{"class":51445},[321,89772,51452],{"class":331},[321,89774,89775],{"class":323,"line":200},[321,89776,71668],{"class":331},[321,89778,89779],{"class":323,"line":1401},[321,89780,89781],{"class":331},"      age: 18\n",[321,89783,89784],{"class":323,"line":1407},[321,89785,2393],{"class":331},[321,89787,89788],{"class":323,"line":1421},[321,89789,77288],{"class":331},[321,89791,89792],{"class":323,"line":1427},[321,89793,89794],{"class":331},"      console.log(this)\n",[321,89796,89797],{"class":323,"line":1518},[321,89798,2393],{"class":331},[321,89800,89801],{"class":323,"line":1524},[321,89802,89803],{"class":331},"    \u002F\u002F 1.bind 不会调用函数\n",[321,89805,89806],{"class":323,"line":1536},[321,89807,89808],{"class":331},"    \u002F\u002F 2.bind能改变this的指向\n",[321,89810,89811],{"class":323,"line":1818},[321,89812,89813],{"class":331},"    fn.bind()\n",[321,89815,89816],{"class":323,"line":1823},[321,89817,89818],{"class":331},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[321,89820,89821],{"class":323,"line":1829},[321,89822,89823],{"class":331},"    const fun = fn.bind(obj)\n",[321,89825,89826],{"class":323,"line":1834},[321,89827,89828],{"class":331},"    \u002F\u002F console.log(fun)\n",[321,89830,89831],{"class":323,"line":1848},[321,89832,89833],{"class":331},"    \u002F\u002F 调用,查看this的指向\n",[321,89835,89836],{"class":323,"line":1853},[321,89837,52796],{"class":331},[321,89839,89840,89842,89844],{"class":323,"line":1859},[321,89841,52562],{"class":331},[321,89843,51958],{"class":51445},[321,89845,51452],{"class":331},[321,89847,89848,89850,89852],{"class":323,"line":1880},[321,89849,51930],{"class":331},[321,89851,51945],{"class":51445},[321,89853,51452],{"class":331},[19,89855,89856],{},[28,89857],{"alt":30,"src":89858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[151,89860,89861],{"start":1401},[154,89862,89863],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[312,89865,89867],{"className":53212,"code":89866,"language":53214,"meta":30,"style":30},"\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",[318,89868,89869,89877,89890,89898,89903,89907,89912,89917,89922,89927,89932,89937,89942,89947,89951,89959],{"__ignoreMap":30},[321,89870,89871,89873,89875],{"class":323,"line":324},[321,89872,1242],{"class":331},[321,89874,51945],{"class":51445},[321,89876,51452],{"class":331},[321,89878,89879,89881,89883,89886,89888],{"class":323,"line":167},[321,89880,52289],{"class":331},[321,89882,54032],{"class":51445},[321,89884,89885],{"class":331},">禁用\u003C\u002F",[321,89887,54032],{"class":51445},[321,89889,51452],{"class":331},[321,89891,89892,89894,89896],{"class":323,"line":200},[321,89893,52289],{"class":331},[321,89895,51958],{"class":51445},[321,89897,51452],{"class":331},[321,89899,89900],{"class":323,"line":1401},[321,89901,89902],{"class":331},"    const btn = document.querySelector('button')\n",[321,89904,89905],{"class":323,"line":1407},[321,89906,59161],{"class":331},[321,89908,89909],{"class":323,"line":1421},[321,89910,89911],{"class":331},"      this.disabled = true\n",[321,89913,89914],{"class":323,"line":1427},[321,89915,89916],{"class":331},"      \u002F\u002F 定时器是window进行调用的\n",[321,89918,89919],{"class":323,"line":1518},[321,89920,89921],{"class":331},"      setTimeout(function () {\n",[321,89923,89924],{"class":323,"line":1524},[321,89925,89926],{"class":331},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[321,89928,89929],{"class":323,"line":1536},[321,89930,89931],{"class":331},"        this.disabled = false\n",[321,89933,89934],{"class":323,"line":1818},[321,89935,89936],{"class":331},"      }.bind(this), 2000)\n",[321,89938,89939],{"class":323,"line":1823},[321,89940,89941],{"class":331},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[321,89943,89944],{"class":323,"line":1829},[321,89945,89946],{"class":331},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[321,89948,89949],{"class":323,"line":1834},[321,89950,33606],{"class":331},[321,89952,89953,89955,89957],{"class":323,"line":1848},[321,89954,52562],{"class":331},[321,89956,51958],{"class":51445},[321,89958,51452],{"class":331},[321,89960,89961,89963,89965],{"class":323,"line":1853},[321,89962,51930],{"class":331},[321,89964,51945],{"class":51445},[321,89966,51452],{"class":331},[151,89968,89969],{"start":1407},[154,89970,22160],{},[19,89972,89973],{},[28,89974],{"alt":30,"src":89975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,89977,89979],{"id":89978},"_417-性能优化","4.17 性能优化",[292,89981,89983],{"id":89982},"_4171-防抖","4.17.1 防抖",[19,89985,89986],{},[28,89987],{"alt":30,"src":89988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,89990,89991],{},[481,89992,89993],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,89995,89996],{},"防抖实现方式：",[1339,89998,89999],{},[154,90000,90001],{},"lodash 提供了防抖处理",[19,90003,90004],{},"_.debounce(func,[wait=0],[options={}])",[19,90006,90007],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[312,90009,90011],{"className":50778,"code":90010,"language":50780,"meta":30,"style":30},"\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",[318,90012,90013,90023,90037,90041,90049,90063,90083,90095,90103,90109,90119,90131,90143,90154,90166,90176,90186,90199,90203,90211,90219,90223,90231,90249,90267,90275,90294,90304,90313,90324,90329,90333,90338,90343,90348,90373,90381,90389,90393],{"__ignoreMap":30},[321,90014,90015,90017,90019,90021],{"class":323,"line":324},[321,90016,51442],{"class":331},[321,90018,51446],{"class":51445},[321,90020,51449],{"class":2169},[321,90022,51452],{"class":331},[321,90024,90025,90027,90029,90031,90033,90035],{"class":323,"line":167},[321,90026,1242],{"class":331},[321,90028,50780],{"class":51445},[321,90030,51461],{"class":2169},[321,90032,377],{"class":331},[321,90034,51466],{"class":436},[321,90036,51452],{"class":331},[321,90038,90039],{"class":323,"line":200},[321,90040,2606],{"emptyLinePlaceholder":251},[321,90042,90043,90045,90047],{"class":323,"line":1401},[321,90044,1242],{"class":331},[321,90046,51479],{"class":51445},[321,90048,51452],{"class":331},[321,90050,90051,90053,90055,90057,90059,90061],{"class":323,"line":1407},[321,90052,52289],{"class":331},[321,90054,51489],{"class":51445},[321,90056,51492],{"class":2169},[321,90058,377],{"class":331},[321,90060,51497],{"class":436},[321,90062,51452],{"class":331},[321,90064,90065,90067,90069,90071,90073,90075,90077,90079,90081],{"class":323,"line":1421},[321,90066,52289],{"class":331},[321,90068,51489],{"class":51445},[321,90070,15127],{"class":2169},[321,90072,377],{"class":331},[321,90074,51536],{"class":436},[321,90076,51516],{"class":2169},[321,90078,377],{"class":331},[321,90080,51543],{"class":436},[321,90082,51452],{"class":331},[321,90084,90085,90087,90089,90091,90093],{"class":323,"line":1427},[321,90086,52289],{"class":331},[321,90088,51552],{"class":51445},[321,90090,51555],{"class":331},[321,90092,51552],{"class":51445},[321,90094,51452],{"class":331},[321,90096,90097,90099,90101],{"class":323,"line":1518},[321,90098,52289],{"class":331},[321,90100,5333],{"class":51445},[321,90102,51452],{"class":331},[321,90104,90105,90107],{"class":323,"line":1524},[321,90106,54897],{"class":2169},[321,90108,15779],{"class":331},[321,90110,90111,90113,90115,90117],{"class":323,"line":1536},[321,90112,72741],{"class":380},[321,90114,51582],{"class":331},[321,90116,60650],{"class":380},[321,90118,1497],{"class":331},[321,90120,90121,90123,90125,90127,90129],{"class":323,"line":1818},[321,90122,54916],{"class":380},[321,90124,51582],{"class":331},[321,90126,1928],{"class":380},[321,90128,51637],{"class":327},[321,90130,1497],{"class":331},[321,90132,90133,90135,90137,90139,90141],{"class":323,"line":1823},[321,90134,54930],{"class":380},[321,90136,51582],{"class":331},[321,90138,1928],{"class":380},[321,90140,51637],{"class":327},[321,90142,1497],{"class":331},[321,90144,90145,90147,90149,90152],{"class":323,"line":1829},[321,90146,55029],{"class":380},[321,90148,51582],{"class":331},[321,90150,90151],{"class":380},"gray",[321,90153,1497],{"class":331},[321,90155,90156,90158,90160,90162,90164],{"class":323,"line":1834},[321,90157,55067],{"class":380},[321,90159,51582],{"class":331},[321,90161,1157],{"class":380},[321,90163,51637],{"class":327},[321,90165,1497],{"class":331},[321,90167,90168,90170,90172,90174],{"class":323,"line":1848},[321,90169,57561],{"class":380},[321,90171,51582],{"class":331},[321,90173,60987],{"class":380},[321,90175,1497],{"class":331},[321,90177,90178,90180,90182,90184],{"class":323,"line":1853},[321,90179,57431],{"class":380},[321,90181,51582],{"class":331},[321,90183,51737],{"class":380},[321,90185,1497],{"class":331},[321,90187,90188,90191,90193,90195,90197],{"class":323,"line":1859},[321,90189,90190],{"class":380},"      padding-top",[321,90192,51582],{"class":331},[321,90194,651],{"class":380},[321,90196,51637],{"class":327},[321,90198,1497],{"class":331},[321,90200,90201],{"class":323,"line":1880},[321,90202,2393],{"class":331},[321,90204,90205,90207,90209],{"class":323,"line":1885},[321,90206,52562],{"class":331},[321,90208,5333],{"class":51445},[321,90210,51452],{"class":331},[321,90212,90213,90215,90217],{"class":323,"line":1899},[321,90214,51930],{"class":331},[321,90216,51479],{"class":51445},[321,90218,51452],{"class":331},[321,90220,90221],{"class":323,"line":1904},[321,90222,2606],{"emptyLinePlaceholder":251},[321,90224,90225,90227,90229],{"class":323,"line":1933},[321,90226,1242],{"class":331},[321,90228,51945],{"class":51445},[321,90230,51452],{"class":331},[321,90232,90233,90235,90237,90239,90241,90243,90245,90247],{"class":323,"line":1938},[321,90234,52289],{"class":331},[321,90236,51756],{"class":51445},[321,90238,53631],{"class":2169},[321,90240,377],{"class":331},[321,90242,53636],{"class":436},[321,90244,55459],{"class":331},[321,90246,51756],{"class":51445},[321,90248,51452],{"class":331},[321,90250,90251,90253,90255,90257,90259,90261,90263,90265],{"class":323,"line":1955},[321,90252,52289],{"class":331},[321,90254,51958],{"class":51445},[321,90256,55384],{"class":2169},[321,90258,377],{"class":331},[321,90260,88419],{"class":436},[321,90262,55459],{"class":331},[321,90264,51958],{"class":51445},[321,90266,51452],{"class":331},[321,90268,90269,90271,90273],{"class":323,"line":1960},[321,90270,52289],{"class":331},[321,90272,51958],{"class":51445},[321,90274,51452],{"class":331},[321,90276,90277,90279,90281,90283,90285,90287,90289,90292],{"class":323,"line":1965},[321,90278,11428],{"class":327},[321,90280,87078],{"class":380},[321,90282,13771],{"class":327},[321,90284,54541],{"class":331},[321,90286,54544],{"class":2169},[321,90288,332],{"class":331},[321,90290,90291],{"class":436},"'.box'",[321,90293,338],{"class":331},[321,90295,90296,90298,90300,90302],{"class":323,"line":1970},[321,90297,52364],{"class":327},[321,90299,9645],{"class":331},[321,90301,377],{"class":327},[321,90303,47478],{"class":380},[321,90305,90306,90308,90311],{"class":323,"line":1984},[321,90307,70229],{"class":327},[321,90309,90310],{"class":2169}," mouseMove",[321,90312,11060],{"class":331},[321,90314,90315,90318,90320,90322],{"class":323,"line":1989},[321,90316,90317],{"class":331},"      box.innerHTML ",[321,90319,377],{"class":327},[321,90321,3238],{"class":331},[321,90323,2908],{"class":327},[321,90325,90326],{"class":323,"line":2783},[321,90327,90328],{"class":390},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[321,90330,90331],{"class":323,"line":2797},[321,90332,2393],{"class":331},[321,90334,90335],{"class":323,"line":2805},[321,90336,90337],{"class":390},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[321,90339,90340],{"class":323,"line":2810},[321,90341,90342],{"class":390},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[321,90344,90345],{"class":323,"line":2816},[321,90346,90347],{"class":390},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[321,90349,90350,90353,90355,90357,90360,90363,90366,90369,90371],{"class":323,"line":2822},[321,90351,90352],{"class":331},"    box.",[321,90354,57958],{"class":2169},[321,90356,332],{"class":331},[321,90358,90359],{"class":436},"'mousemove'",[321,90361,90362],{"class":331},", _.",[321,90364,90365],{"class":2169},"debounce",[321,90367,90368],{"class":331},"(mouseMove, ",[321,90370,65219],{"class":380},[321,90372,30642],{"class":331},[321,90374,90375,90377,90379],{"class":323,"line":2827},[321,90376,52562],{"class":331},[321,90378,51958],{"class":51445},[321,90380,51452],{"class":331},[321,90382,90383,90385,90387],{"class":323,"line":8155},[321,90384,51930],{"class":331},[321,90386,51945],{"class":51445},[321,90388,51452],{"class":331},[321,90390,90391],{"class":323,"line":8179},[321,90392,2606],{"emptyLinePlaceholder":251},[321,90394,90395,90397,90399],{"class":323,"line":8184},[321,90396,51930],{"class":331},[321,90398,50780],{"class":51445},[321,90400,51452],{"class":331},[1339,90402,90403],{},[154,90404,90405],{},"手写一个防抖函数来处理",[19,90407,90408],{},"防抖的核心就是利用定时器来实现的：",[19,90410,90411],{},"①声明一个定时器变量",[19,90413,90414],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90416,90417],{},"③如果没有定时器则开启定时器，记得存到变量里面",[312,90419,90421],{"className":50778,"code":90420,"language":50780,"meta":30,"style":30},"\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",[318,90422,90423,90433,90447,90451,90459,90473,90493,90505,90513,90519,90529,90541,90553,90563,90575,90585,90595,90607,90611,90619,90627,90631,90639,90657,90675,90683,90701,90711,90719,90729,90733,90737,90741,90746,90751,90756,90761,90766,90771,90789,90796,90801,90809,90814,90827,90843,90853,90858,90862,90866,90886,90890,90895,90900,90905,90910,90918,90926,90930],{"__ignoreMap":30},[321,90424,90425,90427,90429,90431],{"class":323,"line":324},[321,90426,51442],{"class":331},[321,90428,51446],{"class":51445},[321,90430,51449],{"class":2169},[321,90432,51452],{"class":331},[321,90434,90435,90437,90439,90441,90443,90445],{"class":323,"line":167},[321,90436,1242],{"class":331},[321,90438,50780],{"class":51445},[321,90440,51461],{"class":2169},[321,90442,377],{"class":331},[321,90444,51466],{"class":436},[321,90446,51452],{"class":331},[321,90448,90449],{"class":323,"line":200},[321,90450,2606],{"emptyLinePlaceholder":251},[321,90452,90453,90455,90457],{"class":323,"line":1401},[321,90454,1242],{"class":331},[321,90456,51479],{"class":51445},[321,90458,51452],{"class":331},[321,90460,90461,90463,90465,90467,90469,90471],{"class":323,"line":1407},[321,90462,52289],{"class":331},[321,90464,51489],{"class":51445},[321,90466,51492],{"class":2169},[321,90468,377],{"class":331},[321,90470,51497],{"class":436},[321,90472,51452],{"class":331},[321,90474,90475,90477,90479,90481,90483,90485,90487,90489,90491],{"class":323,"line":1421},[321,90476,52289],{"class":331},[321,90478,51489],{"class":51445},[321,90480,15127],{"class":2169},[321,90482,377],{"class":331},[321,90484,51536],{"class":436},[321,90486,51516],{"class":2169},[321,90488,377],{"class":331},[321,90490,51543],{"class":436},[321,90492,51452],{"class":331},[321,90494,90495,90497,90499,90501,90503],{"class":323,"line":1427},[321,90496,52289],{"class":331},[321,90498,51552],{"class":51445},[321,90500,51555],{"class":331},[321,90502,51552],{"class":51445},[321,90504,51452],{"class":331},[321,90506,90507,90509,90511],{"class":323,"line":1518},[321,90508,52289],{"class":331},[321,90510,5333],{"class":51445},[321,90512,51452],{"class":331},[321,90514,90515,90517],{"class":323,"line":1524},[321,90516,54897],{"class":2169},[321,90518,15779],{"class":331},[321,90520,90521,90523,90525,90527],{"class":323,"line":1536},[321,90522,72741],{"class":380},[321,90524,51582],{"class":331},[321,90526,60650],{"class":380},[321,90528,1497],{"class":331},[321,90530,90531,90533,90535,90537,90539],{"class":323,"line":1818},[321,90532,54916],{"class":380},[321,90534,51582],{"class":331},[321,90536,1928],{"class":380},[321,90538,51637],{"class":327},[321,90540,1497],{"class":331},[321,90542,90543,90545,90547,90549,90551],{"class":323,"line":1823},[321,90544,54930],{"class":380},[321,90546,51582],{"class":331},[321,90548,1928],{"class":380},[321,90550,51637],{"class":327},[321,90552,1497],{"class":331},[321,90554,90555,90557,90559,90561],{"class":323,"line":1829},[321,90556,55029],{"class":380},[321,90558,51582],{"class":331},[321,90560,90151],{"class":380},[321,90562,1497],{"class":331},[321,90564,90565,90567,90569,90571,90573],{"class":323,"line":1834},[321,90566,55067],{"class":380},[321,90568,51582],{"class":331},[321,90570,1157],{"class":380},[321,90572,51637],{"class":327},[321,90574,1497],{"class":331},[321,90576,90577,90579,90581,90583],{"class":323,"line":1848},[321,90578,57561],{"class":380},[321,90580,51582],{"class":331},[321,90582,60987],{"class":380},[321,90584,1497],{"class":331},[321,90586,90587,90589,90591,90593],{"class":323,"line":1853},[321,90588,57431],{"class":380},[321,90590,51582],{"class":331},[321,90592,51737],{"class":380},[321,90594,1497],{"class":331},[321,90596,90597,90599,90601,90603,90605],{"class":323,"line":1859},[321,90598,90190],{"class":380},[321,90600,51582],{"class":331},[321,90602,651],{"class":380},[321,90604,51637],{"class":327},[321,90606,1497],{"class":331},[321,90608,90609],{"class":323,"line":1880},[321,90610,2393],{"class":331},[321,90612,90613,90615,90617],{"class":323,"line":1885},[321,90614,52562],{"class":331},[321,90616,5333],{"class":51445},[321,90618,51452],{"class":331},[321,90620,90621,90623,90625],{"class":323,"line":1899},[321,90622,51930],{"class":331},[321,90624,51479],{"class":51445},[321,90626,51452],{"class":331},[321,90628,90629],{"class":323,"line":1904},[321,90630,2606],{"emptyLinePlaceholder":251},[321,90632,90633,90635,90637],{"class":323,"line":1933},[321,90634,1242],{"class":331},[321,90636,51945],{"class":51445},[321,90638,51452],{"class":331},[321,90640,90641,90643,90645,90647,90649,90651,90653,90655],{"class":323,"line":1938},[321,90642,52289],{"class":331},[321,90644,51756],{"class":51445},[321,90646,53631],{"class":2169},[321,90648,377],{"class":331},[321,90650,53636],{"class":436},[321,90652,55459],{"class":331},[321,90654,51756],{"class":51445},[321,90656,51452],{"class":331},[321,90658,90659,90661,90663,90665,90667,90669,90671,90673],{"class":323,"line":1955},[321,90660,52289],{"class":331},[321,90662,51958],{"class":51445},[321,90664,55384],{"class":2169},[321,90666,377],{"class":331},[321,90668,88419],{"class":436},[321,90670,55459],{"class":331},[321,90672,51958],{"class":51445},[321,90674,51452],{"class":331},[321,90676,90677,90679,90681],{"class":323,"line":1960},[321,90678,52289],{"class":331},[321,90680,51958],{"class":51445},[321,90682,51452],{"class":331},[321,90684,90685,90687,90689,90691,90693,90695,90697,90699],{"class":323,"line":1965},[321,90686,11428],{"class":327},[321,90688,87078],{"class":380},[321,90690,13771],{"class":327},[321,90692,54541],{"class":331},[321,90694,54544],{"class":2169},[321,90696,332],{"class":331},[321,90698,90291],{"class":436},[321,90700,338],{"class":331},[321,90702,90703,90705,90707,90709],{"class":323,"line":1970},[321,90704,52364],{"class":327},[321,90706,9645],{"class":331},[321,90708,377],{"class":327},[321,90710,47478],{"class":380},[321,90712,90713,90715,90717],{"class":323,"line":1984},[321,90714,70229],{"class":327},[321,90716,90310],{"class":2169},[321,90718,11060],{"class":331},[321,90720,90721,90723,90725,90727],{"class":323,"line":1989},[321,90722,90317],{"class":331},[321,90724,377],{"class":327},[321,90726,3238],{"class":331},[321,90728,2908],{"class":327},[321,90730,90731],{"class":323,"line":2783},[321,90732,90328],{"class":390},[321,90734,90735],{"class":323,"line":2797},[321,90736,2393],{"class":331},[321,90738,90739],{"class":323,"line":2805},[321,90740,90337],{"class":390},[321,90742,90743],{"class":323,"line":2810},[321,90744,90745],{"class":390},"    \u002F\u002F 手写防抖函数\n",[321,90747,90748],{"class":323,"line":2816},[321,90749,90750],{"class":390},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[321,90752,90753],{"class":323,"line":2822},[321,90754,90755],{"class":390},"    \u002F\u002F 1.声明定时器变量\n",[321,90757,90758],{"class":323,"line":2827},[321,90759,90760],{"class":390},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[321,90762,90763],{"class":323,"line":8155},[321,90764,90765],{"class":390},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[321,90767,90768],{"class":323,"line":8179},[321,90769,90770],{"class":390},"    \u002F\u002F 4.定时器里面写函数调用\n",[321,90772,90773,90775,90778,90780,90783,90785,90787],{"class":323,"line":8184},[321,90774,70229],{"class":327},[321,90776,90777],{"class":2169}," debounce",[321,90779,332],{"class":331},[321,90781,90782],{"class":5423},"fn",[321,90784,12642],{"class":331},[321,90786,1052],{"class":5423},[321,90788,12649],{"class":331},[321,90790,90791,90793],{"class":323,"line":8190},[321,90792,79917],{"class":327},[321,90794,90795],{"class":331}," timer\n",[321,90797,90798],{"class":323,"line":8217},[321,90799,90800],{"class":390},"      \u002F\u002F return 返回一个匿名函数\n",[321,90802,90803,90805,90807],{"class":323,"line":8222},[321,90804,74127],{"class":327},[321,90806,59063],{"class":327},[321,90808,54597],{"class":331},[321,90810,90811],{"class":323,"line":8228},[321,90812,90813],{"class":390},"        \u002F\u002F 这里边写第二三四步\n",[321,90815,90816,90818,90821,90824],{"class":323,"line":8240},[321,90817,2703],{"class":327},[321,90819,90820],{"class":331}," (timer) ",[321,90822,90823],{"class":2169},"clearTimeout",[321,90825,90826],{"class":331},"(timer)\n",[321,90828,90829,90832,90834,90837,90839,90841],{"class":323,"line":8252},[321,90830,90831],{"class":331},"        timer ",[321,90833,377],{"class":327},[321,90835,90836],{"class":2169}," setTimeout",[321,90838,332],{"class":331},[321,90840,54594],{"class":327},[321,90842,54597],{"class":331},[321,90844,90845,90848,90850],{"class":323,"line":8264},[321,90846,90847],{"class":2169},"          fn",[321,90849,13257],{"class":331},[321,90851,90852],{"class":390},"\u002F\u002F加小括号调用fn }, t)\n",[321,90854,90855],{"class":323,"line":9923},[321,90856,90857],{"class":331},"        }, t)\n",[321,90859,90860],{"class":323,"line":9948},[321,90861,52543],{"class":331},[321,90863,90864],{"class":323,"line":9971},[321,90865,2393],{"class":331},[321,90867,90868,90870,90872,90874,90876,90878,90880,90882,90884],{"class":323,"line":9995},[321,90869,90352],{"class":331},[321,90871,57958],{"class":2169},[321,90873,332],{"class":331},[321,90875,90359],{"class":436},[321,90877,12642],{"class":331},[321,90879,90365],{"class":2169},[321,90881,90368],{"class":331},[321,90883,65219],{"class":380},[321,90885,30642],{"class":331},[321,90887,90888],{"class":323,"line":10000},[321,90889,2606],{"emptyLinePlaceholder":251},[321,90891,90892],{"class":323,"line":10005},[321,90893,90894],{"class":390},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[321,90896,90897],{"class":323,"line":10010},[321,90898,90899],{"class":390},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[321,90901,90902],{"class":323,"line":10019},[321,90903,90904],{"class":390},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[321,90906,90907],{"class":323,"line":10024},[321,90908,90909],{"class":390},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[321,90911,90912,90914,90916],{"class":323,"line":10030},[321,90913,52562],{"class":331},[321,90915,51958],{"class":51445},[321,90917,51452],{"class":331},[321,90919,90920,90922,90924],{"class":323,"line":10051},[321,90921,51930],{"class":331},[321,90923,51945],{"class":51445},[321,90925,51452],{"class":331},[321,90927,90928],{"class":323,"line":10057},[321,90929,2606],{"emptyLinePlaceholder":251},[321,90931,90932,90934,90936],{"class":323,"line":10071},[321,90933,51930],{"class":331},[321,90935,50780],{"class":51445},[321,90937,51452],{"class":331},[292,90939,90941],{"id":90940},"_4172-节流","4.17.2 节流",[19,90943,90944],{},[28,90945],{"alt":30,"src":90946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,90948,90949],{},[28,90950],{"alt":30,"src":90951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,90953,90954],{},[481,90955,90956],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,90958,90959],{},"实现方式：",[1339,90961,90962],{},[154,90963,90964],{},"lodash 提供的节流函数来处理",[19,90966,90967],{},"_.throttle(func,[wait=0],[options=])",[19,90969,90970],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[312,90972,90974],{"className":50778,"code":90973,"language":50780,"meta":30,"style":30},"\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",[318,90975,90976,90986,91000,91004,91012,91026,91046,91058,91066,91072,91082,91094,91106,91116,91128,91138,91148,91160,91164,91172,91180,91184,91192,91210,91228,91236,91254,91264,91272,91282,91286,91290,91294,91299,91304,91325,91333,91341,91345],{"__ignoreMap":30},[321,90977,90978,90980,90982,90984],{"class":323,"line":324},[321,90979,51442],{"class":331},[321,90981,51446],{"class":51445},[321,90983,51449],{"class":2169},[321,90985,51452],{"class":331},[321,90987,90988,90990,90992,90994,90996,90998],{"class":323,"line":167},[321,90989,1242],{"class":331},[321,90991,50780],{"class":51445},[321,90993,51461],{"class":2169},[321,90995,377],{"class":331},[321,90997,51466],{"class":436},[321,90999,51452],{"class":331},[321,91001,91002],{"class":323,"line":200},[321,91003,2606],{"emptyLinePlaceholder":251},[321,91005,91006,91008,91010],{"class":323,"line":1401},[321,91007,1242],{"class":331},[321,91009,51479],{"class":51445},[321,91011,51452],{"class":331},[321,91013,91014,91016,91018,91020,91022,91024],{"class":323,"line":1407},[321,91015,52289],{"class":331},[321,91017,51489],{"class":51445},[321,91019,51492],{"class":2169},[321,91021,377],{"class":331},[321,91023,51497],{"class":436},[321,91025,51452],{"class":331},[321,91027,91028,91030,91032,91034,91036,91038,91040,91042,91044],{"class":323,"line":1421},[321,91029,52289],{"class":331},[321,91031,51489],{"class":51445},[321,91033,15127],{"class":2169},[321,91035,377],{"class":331},[321,91037,51536],{"class":436},[321,91039,51516],{"class":2169},[321,91041,377],{"class":331},[321,91043,51543],{"class":436},[321,91045,51452],{"class":331},[321,91047,91048,91050,91052,91054,91056],{"class":323,"line":1427},[321,91049,52289],{"class":331},[321,91051,51552],{"class":51445},[321,91053,51555],{"class":331},[321,91055,51552],{"class":51445},[321,91057,51452],{"class":331},[321,91059,91060,91062,91064],{"class":323,"line":1518},[321,91061,52289],{"class":331},[321,91063,5333],{"class":51445},[321,91065,51452],{"class":331},[321,91067,91068,91070],{"class":323,"line":1524},[321,91069,54897],{"class":2169},[321,91071,15779],{"class":331},[321,91073,91074,91076,91078,91080],{"class":323,"line":1536},[321,91075,72741],{"class":380},[321,91077,51582],{"class":331},[321,91079,60650],{"class":380},[321,91081,1497],{"class":331},[321,91083,91084,91086,91088,91090,91092],{"class":323,"line":1818},[321,91085,54916],{"class":380},[321,91087,51582],{"class":331},[321,91089,1928],{"class":380},[321,91091,51637],{"class":327},[321,91093,1497],{"class":331},[321,91095,91096,91098,91100,91102,91104],{"class":323,"line":1823},[321,91097,54930],{"class":380},[321,91099,51582],{"class":331},[321,91101,1928],{"class":380},[321,91103,51637],{"class":327},[321,91105,1497],{"class":331},[321,91107,91108,91110,91112,91114],{"class":323,"line":1829},[321,91109,55029],{"class":380},[321,91111,51582],{"class":331},[321,91113,90151],{"class":380},[321,91115,1497],{"class":331},[321,91117,91118,91120,91122,91124,91126],{"class":323,"line":1834},[321,91119,55067],{"class":380},[321,91121,51582],{"class":331},[321,91123,1157],{"class":380},[321,91125,51637],{"class":327},[321,91127,1497],{"class":331},[321,91129,91130,91132,91134,91136],{"class":323,"line":1848},[321,91131,57561],{"class":380},[321,91133,51582],{"class":331},[321,91135,60987],{"class":380},[321,91137,1497],{"class":331},[321,91139,91140,91142,91144,91146],{"class":323,"line":1853},[321,91141,57431],{"class":380},[321,91143,51582],{"class":331},[321,91145,51737],{"class":380},[321,91147,1497],{"class":331},[321,91149,91150,91152,91154,91156,91158],{"class":323,"line":1859},[321,91151,90190],{"class":380},[321,91153,51582],{"class":331},[321,91155,651],{"class":380},[321,91157,51637],{"class":327},[321,91159,1497],{"class":331},[321,91161,91162],{"class":323,"line":1880},[321,91163,2393],{"class":331},[321,91165,91166,91168,91170],{"class":323,"line":1885},[321,91167,52562],{"class":331},[321,91169,5333],{"class":51445},[321,91171,51452],{"class":331},[321,91173,91174,91176,91178],{"class":323,"line":1899},[321,91175,51930],{"class":331},[321,91177,51479],{"class":51445},[321,91179,51452],{"class":331},[321,91181,91182],{"class":323,"line":1904},[321,91183,2606],{"emptyLinePlaceholder":251},[321,91185,91186,91188,91190],{"class":323,"line":1933},[321,91187,1242],{"class":331},[321,91189,51945],{"class":51445},[321,91191,51452],{"class":331},[321,91193,91194,91196,91198,91200,91202,91204,91206,91208],{"class":323,"line":1938},[321,91195,52289],{"class":331},[321,91197,51756],{"class":51445},[321,91199,53631],{"class":2169},[321,91201,377],{"class":331},[321,91203,53636],{"class":436},[321,91205,55459],{"class":331},[321,91207,51756],{"class":51445},[321,91209,51452],{"class":331},[321,91211,91212,91214,91216,91218,91220,91222,91224,91226],{"class":323,"line":1955},[321,91213,52289],{"class":331},[321,91215,51958],{"class":51445},[321,91217,55384],{"class":2169},[321,91219,377],{"class":331},[321,91221,88419],{"class":436},[321,91223,55459],{"class":331},[321,91225,51958],{"class":51445},[321,91227,51452],{"class":331},[321,91229,91230,91232,91234],{"class":323,"line":1960},[321,91231,52289],{"class":331},[321,91233,51958],{"class":51445},[321,91235,51452],{"class":331},[321,91237,91238,91240,91242,91244,91246,91248,91250,91252],{"class":323,"line":1965},[321,91239,11428],{"class":327},[321,91241,87078],{"class":380},[321,91243,13771],{"class":327},[321,91245,54541],{"class":331},[321,91247,54544],{"class":2169},[321,91249,332],{"class":331},[321,91251,90291],{"class":436},[321,91253,338],{"class":331},[321,91255,91256,91258,91260,91262],{"class":323,"line":1970},[321,91257,52364],{"class":327},[321,91259,9645],{"class":331},[321,91261,377],{"class":327},[321,91263,47478],{"class":380},[321,91265,91266,91268,91270],{"class":323,"line":1984},[321,91267,70229],{"class":327},[321,91269,90310],{"class":2169},[321,91271,11060],{"class":331},[321,91273,91274,91276,91278,91280],{"class":323,"line":1989},[321,91275,90317],{"class":331},[321,91277,377],{"class":327},[321,91279,3238],{"class":331},[321,91281,2908],{"class":327},[321,91283,91284],{"class":323,"line":2783},[321,91285,90328],{"class":390},[321,91287,91288],{"class":323,"line":2797},[321,91289,2393],{"class":331},[321,91291,91292],{"class":323,"line":2805},[321,91293,90337],{"class":390},[321,91295,91296],{"class":323,"line":2810},[321,91297,91298],{"class":390},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[321,91300,91301],{"class":323,"line":2816},[321,91302,91303],{"class":390},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[321,91305,91306,91308,91310,91312,91314,91316,91319,91321,91323],{"class":323,"line":2822},[321,91307,90352],{"class":331},[321,91309,57958],{"class":2169},[321,91311,332],{"class":331},[321,91313,90359],{"class":436},[321,91315,90362],{"class":331},[321,91317,91318],{"class":2169},"throttle",[321,91320,90368],{"class":331},[321,91322,65219],{"class":380},[321,91324,30642],{"class":331},[321,91326,91327,91329,91331],{"class":323,"line":2827},[321,91328,52562],{"class":331},[321,91330,51958],{"class":51445},[321,91332,51452],{"class":331},[321,91334,91335,91337,91339],{"class":323,"line":8155},[321,91336,51930],{"class":331},[321,91338,51945],{"class":51445},[321,91340,51452],{"class":331},[321,91342,91343],{"class":323,"line":8179},[321,91344,2606],{"emptyLinePlaceholder":251},[321,91346,91347,91349,91351],{"class":323,"line":8184},[321,91348,51930],{"class":331},[321,91350,50780],{"class":51445},[321,91352,51452],{"class":331},[1339,91354,91355],{},[154,91356,91357],{},"手写一个节流函数来处理",[19,91359,71097],{},[19,91361,90411],{},[19,91363,91364],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91366,91367],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[312,91369,91371],{"className":50778,"code":91370,"language":50780,"meta":30,"style":30},"\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",[318,91372,91373,91383,91397,91401,91409,91423,91443,91455,91463,91469,91479,91491,91503,91513,91525,91535,91545,91557,91561,91569,91577,91581,91589,91607,91625,91633,91651,91661,91669,91679,91683,91687,91691,91696,91701,91706,91711,91716,91721,91738,91744,91752,91763,91778,91785,91790,91795,91805,91810,91815,91820,91824,91828,91832,91852,91860,91868,91872],{"__ignoreMap":30},[321,91374,91375,91377,91379,91381],{"class":323,"line":324},[321,91376,51442],{"class":331},[321,91378,51446],{"class":51445},[321,91380,51449],{"class":2169},[321,91382,51452],{"class":331},[321,91384,91385,91387,91389,91391,91393,91395],{"class":323,"line":167},[321,91386,1242],{"class":331},[321,91388,50780],{"class":51445},[321,91390,51461],{"class":2169},[321,91392,377],{"class":331},[321,91394,51466],{"class":436},[321,91396,51452],{"class":331},[321,91398,91399],{"class":323,"line":200},[321,91400,2606],{"emptyLinePlaceholder":251},[321,91402,91403,91405,91407],{"class":323,"line":1401},[321,91404,1242],{"class":331},[321,91406,51479],{"class":51445},[321,91408,51452],{"class":331},[321,91410,91411,91413,91415,91417,91419,91421],{"class":323,"line":1407},[321,91412,52289],{"class":331},[321,91414,51489],{"class":51445},[321,91416,51492],{"class":2169},[321,91418,377],{"class":331},[321,91420,51497],{"class":436},[321,91422,51452],{"class":331},[321,91424,91425,91427,91429,91431,91433,91435,91437,91439,91441],{"class":323,"line":1421},[321,91426,52289],{"class":331},[321,91428,51489],{"class":51445},[321,91430,15127],{"class":2169},[321,91432,377],{"class":331},[321,91434,51536],{"class":436},[321,91436,51516],{"class":2169},[321,91438,377],{"class":331},[321,91440,51543],{"class":436},[321,91442,51452],{"class":331},[321,91444,91445,91447,91449,91451,91453],{"class":323,"line":1427},[321,91446,52289],{"class":331},[321,91448,51552],{"class":51445},[321,91450,51555],{"class":331},[321,91452,51552],{"class":51445},[321,91454,51452],{"class":331},[321,91456,91457,91459,91461],{"class":323,"line":1518},[321,91458,52289],{"class":331},[321,91460,5333],{"class":51445},[321,91462,51452],{"class":331},[321,91464,91465,91467],{"class":323,"line":1524},[321,91466,54897],{"class":2169},[321,91468,15779],{"class":331},[321,91470,91471,91473,91475,91477],{"class":323,"line":1536},[321,91472,72741],{"class":380},[321,91474,51582],{"class":331},[321,91476,60650],{"class":380},[321,91478,1497],{"class":331},[321,91480,91481,91483,91485,91487,91489],{"class":323,"line":1818},[321,91482,54916],{"class":380},[321,91484,51582],{"class":331},[321,91486,1928],{"class":380},[321,91488,51637],{"class":327},[321,91490,1497],{"class":331},[321,91492,91493,91495,91497,91499,91501],{"class":323,"line":1823},[321,91494,54930],{"class":380},[321,91496,51582],{"class":331},[321,91498,1928],{"class":380},[321,91500,51637],{"class":327},[321,91502,1497],{"class":331},[321,91504,91505,91507,91509,91511],{"class":323,"line":1829},[321,91506,55029],{"class":380},[321,91508,51582],{"class":331},[321,91510,90151],{"class":380},[321,91512,1497],{"class":331},[321,91514,91515,91517,91519,91521,91523],{"class":323,"line":1834},[321,91516,55067],{"class":380},[321,91518,51582],{"class":331},[321,91520,1157],{"class":380},[321,91522,51637],{"class":327},[321,91524,1497],{"class":331},[321,91526,91527,91529,91531,91533],{"class":323,"line":1848},[321,91528,57561],{"class":380},[321,91530,51582],{"class":331},[321,91532,60987],{"class":380},[321,91534,1497],{"class":331},[321,91536,91537,91539,91541,91543],{"class":323,"line":1853},[321,91538,57431],{"class":380},[321,91540,51582],{"class":331},[321,91542,51737],{"class":380},[321,91544,1497],{"class":331},[321,91546,91547,91549,91551,91553,91555],{"class":323,"line":1859},[321,91548,90190],{"class":380},[321,91550,51582],{"class":331},[321,91552,651],{"class":380},[321,91554,51637],{"class":327},[321,91556,1497],{"class":331},[321,91558,91559],{"class":323,"line":1880},[321,91560,2393],{"class":331},[321,91562,91563,91565,91567],{"class":323,"line":1885},[321,91564,52562],{"class":331},[321,91566,5333],{"class":51445},[321,91568,51452],{"class":331},[321,91570,91571,91573,91575],{"class":323,"line":1899},[321,91572,51930],{"class":331},[321,91574,51479],{"class":51445},[321,91576,51452],{"class":331},[321,91578,91579],{"class":323,"line":1904},[321,91580,2606],{"emptyLinePlaceholder":251},[321,91582,91583,91585,91587],{"class":323,"line":1933},[321,91584,1242],{"class":331},[321,91586,51945],{"class":51445},[321,91588,51452],{"class":331},[321,91590,91591,91593,91595,91597,91599,91601,91603,91605],{"class":323,"line":1938},[321,91592,52289],{"class":331},[321,91594,51756],{"class":51445},[321,91596,53631],{"class":2169},[321,91598,377],{"class":331},[321,91600,53636],{"class":436},[321,91602,55459],{"class":331},[321,91604,51756],{"class":51445},[321,91606,51452],{"class":331},[321,91608,91609,91611,91613,91615,91617,91619,91621,91623],{"class":323,"line":1955},[321,91610,52289],{"class":331},[321,91612,51958],{"class":51445},[321,91614,55384],{"class":2169},[321,91616,377],{"class":331},[321,91618,88419],{"class":436},[321,91620,55459],{"class":331},[321,91622,51958],{"class":51445},[321,91624,51452],{"class":331},[321,91626,91627,91629,91631],{"class":323,"line":1960},[321,91628,52289],{"class":331},[321,91630,51958],{"class":51445},[321,91632,51452],{"class":331},[321,91634,91635,91637,91639,91641,91643,91645,91647,91649],{"class":323,"line":1965},[321,91636,11428],{"class":327},[321,91638,87078],{"class":380},[321,91640,13771],{"class":327},[321,91642,54541],{"class":331},[321,91644,54544],{"class":2169},[321,91646,332],{"class":331},[321,91648,90291],{"class":436},[321,91650,338],{"class":331},[321,91652,91653,91655,91657,91659],{"class":323,"line":1970},[321,91654,52364],{"class":327},[321,91656,9645],{"class":331},[321,91658,377],{"class":327},[321,91660,47478],{"class":380},[321,91662,91663,91665,91667],{"class":323,"line":1984},[321,91664,70229],{"class":327},[321,91666,90310],{"class":2169},[321,91668,11060],{"class":331},[321,91670,91671,91673,91675,91677],{"class":323,"line":1989},[321,91672,90317],{"class":331},[321,91674,377],{"class":327},[321,91676,3238],{"class":331},[321,91678,2908],{"class":327},[321,91680,91681],{"class":323,"line":2783},[321,91682,90328],{"class":390},[321,91684,91685],{"class":323,"line":2797},[321,91686,2393],{"class":331},[321,91688,91689],{"class":323,"line":2805},[321,91690,90337],{"class":390},[321,91692,91693],{"class":323,"line":2810},[321,91694,91695],{"class":390},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[321,91697,91698],{"class":323,"line":2816},[321,91699,91700],{"class":390},"    \u002F\u002F 1.声明一个定时器变量\n",[321,91702,91703],{"class":323,"line":2822},[321,91704,91705],{"class":390},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[321,91707,91708],{"class":323,"line":2827},[321,91709,91710],{"class":390},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[321,91712,91713],{"class":323,"line":8155},[321,91714,91715],{"class":390},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[321,91717,91718],{"class":323,"line":8179},[321,91719,91720],{"class":390},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[321,91722,91723,91725,91728,91730,91732,91734,91736],{"class":323,"line":8184},[321,91724,70229],{"class":327},[321,91726,91727],{"class":2169}," throttle",[321,91729,332],{"class":331},[321,91731,90782],{"class":5423},[321,91733,12642],{"class":331},[321,91735,1052],{"class":5423},[321,91737,12649],{"class":331},[321,91739,91740,91742],{"class":323,"line":8190},[321,91741,79917],{"class":327},[321,91743,90795],{"class":331},[321,91745,91746,91748,91750],{"class":323,"line":8217},[321,91747,74127],{"class":327},[321,91749,59063],{"class":327},[321,91751,54597],{"class":331},[321,91753,91754,91756,91758,91760],{"class":323,"line":8222},[321,91755,2703],{"class":327},[321,91757,1864],{"class":331},[321,91759,558],{"class":327},[321,91761,91762],{"class":331},"timer) {\n",[321,91764,91765,91768,91770,91772,91774,91776],{"class":323,"line":8228},[321,91766,91767],{"class":331},"          timer ",[321,91769,377],{"class":327},[321,91771,90836],{"class":2169},[321,91773,332],{"class":331},[321,91775,54594],{"class":327},[321,91777,54597],{"class":331},[321,91779,91780,91783],{"class":323,"line":8240},[321,91781,91782],{"class":2169},"            fn",[321,91784,2182],{"class":331},[321,91786,91787],{"class":323,"line":8252},[321,91788,91789],{"class":390},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[321,91791,91792],{"class":323,"line":8264},[321,91793,91794],{"class":390},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[321,91796,91797,91800,91802],{"class":323,"line":9923},[321,91798,91799],{"class":331},"            timer ",[321,91801,377],{"class":327},[321,91803,91804],{"class":380}," null\n",[321,91806,91807],{"class":323,"line":9948},[321,91808,91809],{"class":390},"            \u002F\u002F 不能用clearTimeout(timer)\n",[321,91811,91812],{"class":323,"line":9971},[321,91813,91814],{"class":390},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[321,91816,91817],{"class":323,"line":9995},[321,91818,91819],{"class":331},"          }, t)\n",[321,91821,91822],{"class":323,"line":10000},[321,91823,2735],{"class":331},[321,91825,91826],{"class":323,"line":10005},[321,91827,52543],{"class":331},[321,91829,91830],{"class":323,"line":10010},[321,91831,2393],{"class":331},[321,91833,91834,91836,91838,91840,91842,91844,91846,91848,91850],{"class":323,"line":10019},[321,91835,90352],{"class":331},[321,91837,57958],{"class":2169},[321,91839,332],{"class":331},[321,91841,90359],{"class":436},[321,91843,12642],{"class":331},[321,91845,91318],{"class":2169},[321,91847,90368],{"class":331},[321,91849,65219],{"class":380},[321,91851,30642],{"class":331},[321,91853,91854,91856,91858],{"class":323,"line":10024},[321,91855,52562],{"class":331},[321,91857,51958],{"class":51445},[321,91859,51452],{"class":331},[321,91861,91862,91864,91866],{"class":323,"line":10030},[321,91863,51930],{"class":331},[321,91865,51945],{"class":51445},[321,91867,51452],{"class":331},[321,91869,91870],{"class":323,"line":10051},[321,91871,2606],{"emptyLinePlaceholder":251},[321,91873,91874,91876,91878],{"class":323,"line":10057},[321,91875,51930],{"class":331},[321,91877,50780],{"class":51445},[321,91879,51452],{"class":331},[292,91881,91883],{"id":91882},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[312,91885,91887],{"className":53212,"code":91886,"language":53214,"meta":30,"style":30},"\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",[318,91888,91889,91897,91905,91910,91915,91920,91925,91929,91937],{"__ignoreMap":30},[321,91890,91891,91893,91895],{"class":323,"line":324},[321,91892,1242],{"class":331},[321,91894,51945],{"class":51445},[321,91896,51452],{"class":331},[321,91898,91899,91901,91903],{"class":323,"line":167},[321,91900,52289],{"class":331},[321,91902,51958],{"class":51445},[321,91904,51452],{"class":331},[321,91906,91907],{"class":323,"line":200},[321,91908,91909],{"class":331},"    let timer = null\n",[321,91911,91912],{"class":323,"line":1401},[321,91913,91914],{"class":331},"    timer = setTimeout(() => {\n",[321,91916,91917],{"class":323,"line":1407},[321,91918,91919],{"class":331},"      clearTimeout(timer)\n",[321,91921,91922],{"class":323,"line":1421},[321,91923,91924],{"class":331},"      console.log(timer)\n",[321,91926,91927],{"class":323,"line":1427},[321,91928,60370],{"class":331},[321,91930,91931,91933,91935],{"class":323,"line":1518},[321,91932,52562],{"class":331},[321,91934,51958],{"class":51445},[321,91936,51452],{"class":331},[321,91938,91939,91941,91943],{"class":323,"line":1524},[321,91940,51930],{"class":331},[321,91942,51945],{"class":51445},[321,91944,51452],{"class":331},[19,91946,91947],{},"输出为1",[19,91949,91950],{},"在开启的定时器里边写清除定时器",[19,91952,91953],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[292,91955,91957],{"id":91956},"_4174-节流综合案例","4.17.4 节流综合案例",[19,91959,91960],{},"页面打开，可以记录上一次的视频播放位置",[19,91962,91963],{},[28,91964],{"alt":30,"src":91965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,91967,91968],{},[28,91969],{"alt":30,"src":91970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[312,91972,91974],{"className":50778,"code":91973,"language":50780,"meta":30,"style":30},"\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",[318,91975,91976,91986,92000,92004,92012,92026,92046,92066,92088,92101,92109,92115,92125,92135,92145,92149,92153,92160,92173,92185,92189,92193,92203,92215,92229,92233,92237,92244,92254,92267,92279,92289,92299,92315,92327,92331,92335,92343,92353,92365,92375,92385,92395,92399,92403,92413,92424,92428,92436,92444,92448,92456,92471,92486,92501,92522,92530,92538,92553,92575,92583,92598,92624,92650,92676,92684,92692,92711,92719,92724,92743,92748,92766,92771,92776,92784,92789,92803,92811,92816,92833,92837,92842,92864,92868,92876,92884,92888],{"__ignoreMap":30},[321,91977,91978,91980,91982,91984],{"class":323,"line":324},[321,91979,51442],{"class":331},[321,91981,51446],{"class":51445},[321,91983,51449],{"class":2169},[321,91985,51452],{"class":331},[321,91987,91988,91990,91992,91994,91996,91998],{"class":323,"line":167},[321,91989,1242],{"class":331},[321,91991,50780],{"class":51445},[321,91993,51461],{"class":2169},[321,91995,377],{"class":331},[321,91997,51466],{"class":436},[321,91999,51452],{"class":331},[321,92001,92002],{"class":323,"line":200},[321,92003,2606],{"emptyLinePlaceholder":251},[321,92005,92006,92008,92010],{"class":323,"line":1401},[321,92007,1242],{"class":331},[321,92009,51479],{"class":51445},[321,92011,51452],{"class":331},[321,92013,92014,92016,92018,92020,92022,92024],{"class":323,"line":1407},[321,92015,52289],{"class":331},[321,92017,51489],{"class":51445},[321,92019,51492],{"class":2169},[321,92021,377],{"class":331},[321,92023,51497],{"class":436},[321,92025,59272],{"class":331},[321,92027,92028,92030,92032,92034,92036,92038,92040,92042,92044],{"class":323,"line":1421},[321,92029,52289],{"class":331},[321,92031,51489],{"class":51445},[321,92033,51508],{"class":2169},[321,92035,377],{"class":331},[321,92037,51513],{"class":436},[321,92039,51516],{"class":2169},[321,92041,377],{"class":331},[321,92043,51521],{"class":436},[321,92045,59272],{"class":331},[321,92047,92048,92050,92052,92054,92056,92058,92060,92062,92064],{"class":323,"line":1427},[321,92049,52289],{"class":331},[321,92051,51489],{"class":51445},[321,92053,15127],{"class":2169},[321,92055,377],{"class":331},[321,92057,51536],{"class":436},[321,92059,51516],{"class":2169},[321,92061,377],{"class":331},[321,92063,51543],{"class":436},[321,92065,59272],{"class":331},[321,92067,92068,92070,92072,92074,92076,92079,92081,92083,92086],{"class":323,"line":1518},[321,92069,52289],{"class":331},[321,92071,51489],{"class":51445},[321,92073,15127],{"class":2169},[321,92075,377],{"class":331},[321,92077,92078],{"class":436},"\"referrer\"",[321,92080,51516],{"class":2169},[321,92082,377],{"class":331},[321,92084,92085],{"class":436},"\"never\"",[321,92087,59272],{"class":331},[321,92089,92090,92092,92094,92097,92099],{"class":323,"line":1524},[321,92091,52289],{"class":331},[321,92093,51552],{"class":51445},[321,92095,92096],{"class":331},">综合案例\u003C\u002F",[321,92098,51552],{"class":51445},[321,92100,51452],{"class":331},[321,92102,92103,92105,92107],{"class":323,"line":1536},[321,92104,52289],{"class":331},[321,92106,5333],{"class":51445},[321,92108,51452],{"class":331},[321,92110,92111,92113],{"class":323,"line":1818},[321,92112,6610],{"class":51445},[321,92114,15779],{"class":331},[321,92116,92117,92119,92121,92123],{"class":323,"line":1823},[321,92118,54840],{"class":380},[321,92120,51582],{"class":331},[321,92122,523],{"class":380},[321,92124,1497],{"class":331},[321,92126,92127,92129,92131,92133],{"class":323,"line":1829},[321,92128,54851],{"class":380},[321,92130,51582],{"class":331},[321,92132,523],{"class":380},[321,92134,1497],{"class":331},[321,92136,92137,92139,92141,92143],{"class":323,"line":1834},[321,92138,72741],{"class":380},[321,92140,51582],{"class":331},[321,92142,60650],{"class":380},[321,92144,1497],{"class":331},[321,92146,92147],{"class":323,"line":1848},[321,92148,2393],{"class":331},[321,92150,92151],{"class":323,"line":1853},[321,92152,2606],{"emptyLinePlaceholder":251},[321,92154,92155,92158],{"class":323,"line":1859},[321,92156,92157],{"class":2169},"    .container",[321,92159,15779],{"class":331},[321,92161,92162,92164,92166,92169,92171],{"class":323,"line":1880},[321,92163,54916],{"class":380},[321,92165,51582],{"class":331},[321,92167,92168],{"class":380},"1200",[321,92170,51637],{"class":327},[321,92172,1497],{"class":331},[321,92174,92175,92177,92179,92181,92183],{"class":323,"line":1885},[321,92176,54851],{"class":380},[321,92178,51582],{"class":331},[321,92180,523],{"class":380},[321,92182,51701],{"class":380},[321,92184,1497],{"class":331},[321,92186,92187],{"class":323,"line":1899},[321,92188,2393],{"class":331},[321,92190,92191],{"class":323,"line":1904},[321,92192,2606],{"emptyLinePlaceholder":251},[321,92194,92195,92198,92201],{"class":323,"line":1933},[321,92196,92197],{"class":2169},"    .video",[321,92199,92200],{"class":51445}," video",[321,92202,15779],{"class":331},[321,92204,92205,92207,92209,92211,92213],{"class":323,"line":1938},[321,92206,54916],{"class":380},[321,92208,51582],{"class":331},[321,92210,643],{"class":380},[321,92212,660],{"class":327},[321,92214,1497],{"class":331},[321,92216,92217,92219,92221,92223,92225,92227],{"class":323,"line":1955},[321,92218,54840],{"class":380},[321,92220,51582],{"class":331},[321,92222,1032],{"class":380},[321,92224,51637],{"class":327},[321,92226,4299],{"class":380},[321,92228,1497],{"class":331},[321,92230,92231],{"class":323,"line":1960},[321,92232,2393],{"class":331},[321,92234,92235],{"class":323,"line":1965},[321,92236,2606],{"emptyLinePlaceholder":251},[321,92238,92239,92242],{"class":323,"line":1970},[321,92240,92241],{"class":2169},"    .elevator",[321,92243,15779],{"class":331},[321,92245,92246,92248,92250,92252],{"class":323,"line":1984},[321,92247,54904],{"class":380},[321,92249,51582],{"class":331},[321,92251,86378],{"class":380},[321,92253,1497],{"class":331},[321,92255,92256,92258,92260,92263,92265],{"class":323,"line":1989},[321,92257,55092],{"class":380},[321,92259,51582],{"class":331},[321,92261,92262],{"class":380},"280",[321,92264,51637],{"class":327},[321,92266,1497],{"class":331},[321,92268,92269,92271,92273,92275,92277],{"class":323,"line":2783},[321,92270,86572],{"class":380},[321,92272,51582],{"class":331},[321,92274,1032],{"class":380},[321,92276,51637],{"class":327},[321,92278,1497],{"class":331},[321,92280,92281,92283,92285,92287],{"class":323,"line":2797},[321,92282,86385],{"class":380},[321,92284,51582],{"class":331},[321,92286,86390],{"class":380},[321,92288,1497],{"class":331},[321,92290,92291,92293,92295,92297],{"class":323,"line":2805},[321,92292,61866],{"class":380},[321,92294,51582],{"class":331},[321,92296,60987],{"class":380},[321,92298,1497],{"class":331},[321,92300,92301,92303,92305,92307,92309,92311,92313],{"class":323,"line":2810},[321,92302,62122],{"class":380},[321,92304,51582],{"class":331},[321,92306,549],{"class":380},[321,92308,51637],{"class":327},[321,92310,51666],{"class":380},[321,92312,62389],{"class":380},[321,92314,1497],{"class":331},[321,92316,92317,92319,92321,92323,92325],{"class":323,"line":2816},[321,92318,54916],{"class":380},[321,92320,51582],{"class":331},[321,92322,1239],{"class":380},[321,92324,51637],{"class":327},[321,92326,1497],{"class":331},[321,92328,92329],{"class":323,"line":2822},[321,92330,2393],{"class":331},[321,92332,92333],{"class":323,"line":2827},[321,92334,2606],{"emptyLinePlaceholder":251},[321,92336,92337,92339,92341],{"class":323,"line":8155},[321,92338,92241],{"class":2169},[321,92340,1605],{"class":51445},[321,92342,15779],{"class":331},[321,92344,92345,92347,92349,92351],{"class":323,"line":8179},[321,92346,55154],{"class":380},[321,92348,51582],{"class":331},[321,92350,61014],{"class":380},[321,92352,1497],{"class":331},[321,92354,92355,92357,92359,92361,92363],{"class":323,"line":8184},[321,92356,54840],{"class":380},[321,92358,51582],{"class":331},[321,92360,778],{"class":380},[321,92362,51637],{"class":327},[321,92364,1497],{"class":331},[321,92366,92367,92369,92371,92373],{"class":323,"line":8190},[321,92368,64115],{"class":380},[321,92370,51582],{"class":331},[321,92372,54882],{"class":380},[321,92374,1497],{"class":331},[321,92376,92377,92379,92381,92383],{"class":323,"line":8217},[321,92378,57431],{"class":380},[321,92380,51582],{"class":331},[321,92382,51737],{"class":380},[321,92384,1497],{"class":331},[321,92386,92387,92389,92391,92393],{"class":323,"line":8222},[321,92388,57561],{"class":380},[321,92390,51582],{"class":331},[321,92392,62215],{"class":380},[321,92394,1497],{"class":331},[321,92396,92397],{"class":323,"line":8228},[321,92398,2393],{"class":331},[321,92400,92401],{"class":323,"line":8240},[321,92402,2606],{"emptyLinePlaceholder":251},[321,92404,92405,92407,92409,92411],{"class":323,"line":8252},[321,92406,92241],{"class":2169},[321,92408,1605],{"class":51445},[321,92410,64169],{"class":2169},[321,92412,15779],{"class":331},[321,92414,92415,92417,92419,92422],{"class":323,"line":8264},[321,92416,57561],{"class":380},[321,92418,51582],{"class":331},[321,92420,92421],{"class":380},"#1286ff",[321,92423,1497],{"class":331},[321,92425,92426],{"class":323,"line":9923},[321,92427,2393],{"class":331},[321,92429,92430,92432,92434],{"class":323,"line":9948},[321,92431,52562],{"class":331},[321,92433,5333],{"class":51445},[321,92435,51452],{"class":331},[321,92437,92438,92440,92442],{"class":323,"line":9971},[321,92439,51930],{"class":331},[321,92441,51479],{"class":51445},[321,92443,51452],{"class":331},[321,92445,92446],{"class":323,"line":9995},[321,92447,2606],{"emptyLinePlaceholder":251},[321,92449,92450,92452,92454],{"class":323,"line":10000},[321,92451,1242],{"class":331},[321,92453,51945],{"class":51445},[321,92455,51452],{"class":331},[321,92457,92458,92460,92462,92464,92466,92469],{"class":323,"line":10005},[321,92459,52289],{"class":331},[321,92461,51756],{"class":51445},[321,92463,53631],{"class":2169},[321,92465,377],{"class":331},[321,92467,92468],{"class":436},"\"container\"",[321,92470,51452],{"class":331},[321,92472,92473,92475,92477,92479,92481,92484],{"class":323,"line":10010},[321,92474,51486],{"class":331},[321,92476,51756],{"class":51445},[321,92478,53631],{"class":2169},[321,92480,377],{"class":331},[321,92482,92483],{"class":436},"\"header\"",[321,92485,51452],{"class":331},[321,92487,92488,92490,92492,92494,92496,92499],{"class":323,"line":10019},[321,92489,55379],{"class":331},[321,92491,570],{"class":51445},[321,92493,61202],{"class":2169},[321,92495,377],{"class":331},[321,92497,92498],{"class":436},"\"http:\u002F\u002Fpip.itcast.cn\"",[321,92500,51452],{"class":331},[321,92502,92503,92505,92507,92509,92511,92514,92516,92518,92520],{"class":323,"line":10024},[321,92504,55447],{"class":331},[321,92506,28],{"class":51445},[321,92508,55384],{"class":2169},[321,92510,377],{"class":331},[321,92512,92513],{"class":436},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[321,92515,55392],{"class":2169},[321,92517,377],{"class":331},[321,92519,7859],{"class":436},[321,92521,59272],{"class":331},[321,92523,92524,92526,92528],{"class":323,"line":10030},[321,92525,55552],{"class":331},[321,92527,570],{"class":51445},[321,92529,51452],{"class":331},[321,92531,92532,92534,92536],{"class":323,"line":10051},[321,92533,51921],{"class":331},[321,92535,51756],{"class":51445},[321,92537,51452],{"class":331},[321,92539,92540,92542,92544,92546,92548,92551],{"class":323,"line":10057},[321,92541,51486],{"class":331},[321,92543,51756],{"class":51445},[321,92545,53631],{"class":2169},[321,92547,377],{"class":331},[321,92549,92550],{"class":436},"\"video\"",[321,92552,51452],{"class":331},[321,92554,92555,92557,92559,92561,92563,92566,92569,92571,92573],{"class":323,"line":10071},[321,92556,55379],{"class":331},[321,92558,28328],{"class":51445},[321,92560,55384],{"class":2169},[321,92562,377],{"class":331},[321,92564,92565],{"class":436},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[321,92567,92568],{"class":2169}," controls",[321,92570,55459],{"class":331},[321,92572,28328],{"class":51445},[321,92574,51452],{"class":331},[321,92576,92577,92579,92581],{"class":323,"line":10077},[321,92578,51921],{"class":331},[321,92580,51756],{"class":51445},[321,92582,51452],{"class":331},[321,92584,92585,92587,92589,92591,92593,92596],{"class":323,"line":10104},[321,92586,51486],{"class":331},[321,92588,51756],{"class":51445},[321,92590,53631],{"class":2169},[321,92592,377],{"class":331},[321,92594,92595],{"class":436},"\"elevator\"",[321,92597,51452],{"class":331},[321,92599,92600,92602,92604,92606,92608,92610,92613,92615,92617,92620,92622],{"class":323,"line":10113},[321,92601,55379],{"class":331},[321,92603,570],{"class":51445},[321,92605,61202],{"class":2169},[321,92607,377],{"class":331},[321,92609,64381],{"class":436},[321,92611,92612],{"class":2169}," data-ref",[321,92614,377],{"class":331},[321,92616,92550],{"class":436},[321,92618,92619],{"class":331},">视频介绍\u003C\u002F",[321,92621,570],{"class":51445},[321,92623,51452],{"class":331},[321,92625,92626,92628,92630,92632,92634,92636,92638,92640,92643,92646,92648],{"class":323,"line":10119},[321,92627,55379],{"class":331},[321,92629,570],{"class":51445},[321,92631,61202],{"class":2169},[321,92633,377],{"class":331},[321,92635,64381],{"class":436},[321,92637,92612],{"class":2169},[321,92639,377],{"class":331},[321,92641,92642],{"class":436},"\"intro\"",[321,92644,92645],{"class":331},">课程简介\u003C\u002F",[321,92647,570],{"class":51445},[321,92649,51452],{"class":331},[321,92651,92652,92654,92656,92658,92660,92662,92664,92666,92669,92672,92674],{"class":323,"line":10127},[321,92653,55379],{"class":331},[321,92655,570],{"class":51445},[321,92657,61202],{"class":2169},[321,92659,377],{"class":331},[321,92661,64381],{"class":436},[321,92663,92612],{"class":2169},[321,92665,377],{"class":331},[321,92667,92668],{"class":436},"\"outline\"",[321,92670,92671],{"class":331},">评论列表\u003C\u002F",[321,92673,570],{"class":51445},[321,92675,51452],{"class":331},[321,92677,92678,92680,92682],{"class":323,"line":10132},[321,92679,51921],{"class":331},[321,92681,51756],{"class":51445},[321,92683,51452],{"class":331},[321,92685,92686,92688,92690],{"class":323,"line":16811},[321,92687,52562],{"class":331},[321,92689,51756],{"class":51445},[321,92691,51452],{"class":331},[321,92693,92694,92696,92698,92700,92702,92705,92707,92709],{"class":323,"line":16817},[321,92695,52289],{"class":331},[321,92697,51958],{"class":51445},[321,92699,55384],{"class":2169},[321,92701,377],{"class":331},[321,92703,92704],{"class":436},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[321,92706,55459],{"class":331},[321,92708,51958],{"class":51445},[321,92710,51452],{"class":331},[321,92712,92713,92715,92717],{"class":323,"line":16840},[321,92714,52289],{"class":331},[321,92716,51958],{"class":51445},[321,92718,51452],{"class":331},[321,92720,92721],{"class":323,"line":16846},[321,92722,92723],{"class":390},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[321,92725,92726,92728,92730,92732,92734,92736,92738,92741],{"class":323,"line":16869},[321,92727,11428],{"class":327},[321,92729,92200],{"class":380},[321,92731,13771],{"class":327},[321,92733,54541],{"class":331},[321,92735,54544],{"class":2169},[321,92737,332],{"class":331},[321,92739,92740],{"class":436},"'video'",[321,92742,338],{"class":331},[321,92744,92745],{"class":323,"line":16883},[321,92746,92747],{"class":390},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[321,92749,92750,92753,92755,92757,92759,92762,92764],{"class":323,"line":16903},[321,92751,92752],{"class":331},"    video.ontimeupdate ",[321,92754,377],{"class":327},[321,92756,88500],{"class":331},[321,92758,91318],{"class":2169},[321,92760,92761],{"class":331},"(() ",[321,92763,84867],{"class":327},[321,92765,15779],{"class":331},[321,92767,92768],{"class":323,"line":16909},[321,92769,92770],{"class":390},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[321,92772,92773],{"class":323,"line":16920},[321,92774,92775],{"class":390},"      \u002F\u002F 控制台输出当前的时间\n",[321,92777,92778,92781],{"class":323,"line":16943},[321,92779,92780],{"class":390},"      \u002F\u002F console.log(video.currentTime)",[321,92782,92783],{"class":390},"  \u002F\u002F获得当前的视频时间\n",[321,92785,92786],{"class":323,"line":16965},[321,92787,92788],{"class":390},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[321,92790,92791,92793,92795,92797,92800],{"class":323,"line":16970},[321,92792,74828],{"class":331},[321,92794,71799],{"class":2169},[321,92796,332],{"class":331},[321,92798,92799],{"class":436},"'currentTime'",[321,92801,92802],{"class":331},", video.currentTime)\n",[321,92804,92805,92807,92809],{"class":323,"line":16976},[321,92806,54680],{"class":331},[321,92808,6617],{"class":380},[321,92810,338],{"class":331},[321,92812,92813],{"class":323,"line":16990},[321,92814,92815],{"class":390},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[321,92817,92818,92821,92824,92826,92829,92831],{"class":323,"line":17003},[321,92819,92820],{"class":331},"    video.",[321,92822,92823],{"class":2169},"onloadeddata",[321,92825,13771],{"class":327},[321,92827,92828],{"class":331}," () ",[321,92830,84867],{"class":327},[321,92832,15779],{"class":331},[321,92834,92835],{"class":323,"line":17008},[321,92836,60157],{"class":390},[321,92838,92839],{"class":323,"line":17022},[321,92840,92841],{"class":390},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[321,92843,92844,92847,92849,92852,92854,92856,92858,92860,92862],{"class":323,"line":17027},[321,92845,92846],{"class":331},"      video.currentTime ",[321,92848,377],{"class":327},[321,92850,92851],{"class":331}," localStorage.",[321,92853,71830],{"class":2169},[321,92855,332],{"class":331},[321,92857,92799],{"class":436},[321,92859,13921],{"class":331},[321,92861,71502],{"class":327},[321,92863,47478],{"class":380},[321,92865,92866],{"class":323,"line":17033},[321,92867,2393],{"class":331},[321,92869,92870,92872,92874],{"class":323,"line":17038},[321,92871,52562],{"class":331},[321,92873,51958],{"class":51445},[321,92875,51452],{"class":331},[321,92877,92878,92880,92882],{"class":323,"line":17052},[321,92879,51930],{"class":331},[321,92881,51945],{"class":51445},[321,92883,51452],{"class":331},[321,92885,92886],{"class":323,"line":17057},[321,92887,2606],{"emptyLinePlaceholder":251},[321,92889,92890,92892,92894],{"class":323,"line":17062},[321,92891,51930],{"class":331},[321,92893,50780],{"class":51445},[321,92895,51452],{"class":331},[5333,92897,92898],{},"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":30,"searchDepth":167,"depth":167,"links":92900},[92901,92906,92910,92911,92912,92917,92922,92923,92924,92925,92932,92937,92938,92948,92952,92953,92957],{"id":76836,"depth":167,"text":76837,"children":92902},[92903,92904,92905],{"id":76840,"depth":200,"text":76841},{"id":76865,"depth":200,"text":76866},{"id":76877,"depth":200,"text":76878},{"id":76889,"depth":167,"text":76890,"children":92907},[92908,92909],{"id":76893,"depth":200,"text":76894},{"id":76908,"depth":200,"text":76909},{"id":76960,"depth":167,"text":76961},{"id":77004,"depth":167,"text":77005},{"id":77021,"depth":167,"text":77022,"children":92913},[92914,92915,92916],{"id":77025,"depth":200,"text":77026},{"id":77038,"depth":200,"text":77039},{"id":77143,"depth":200,"text":77144},{"id":77432,"depth":167,"text":77433,"children":92918},[92919,92920,92921],{"id":77436,"depth":200,"text":77437},{"id":77879,"depth":200,"text":77880},{"id":78290,"depth":200,"text":78291},{"id":78353,"depth":167,"text":78354},{"id":78432,"depth":167,"text":78433},{"id":78525,"depth":167,"text":78526},{"id":80370,"depth":167,"text":80371,"children":92926},[92927,92928,92929,92930,92931],{"id":80374,"depth":200,"text":80375},{"id":80386,"depth":200,"text":80387},{"id":80605,"depth":200,"text":80606},{"id":80623,"depth":200,"text":80624},{"id":80683,"depth":200,"text":80684},{"id":84951,"depth":167,"text":84952,"children":92933},[92934,92935,92936],{"id":84955,"depth":200,"text":84956},{"id":84973,"depth":200,"text":84974},{"id":84999,"depth":200,"text":85000},{"id":85008,"depth":167,"text":85009},{"id":85030,"depth":167,"text":85031,"children":92939},[92940,92941,92942,92943,92944,92945,92946,92947],{"id":85034,"depth":200,"text":85035},{"id":85295,"depth":200,"text":85296},{"id":85481,"depth":200,"text":85482},{"id":85848,"depth":200,"text":85849},{"id":85964,"depth":200,"text":85965},{"id":86000,"depth":200,"text":86001},{"id":86047,"depth":200,"text":86048},{"id":86081,"depth":200,"text":86082},{"id":87444,"depth":167,"text":87445,"children":92949},[92950,92951],{"id":87448,"depth":200,"text":87449},{"id":87485,"depth":200,"text":87486},{"id":88840,"depth":167,"text":88841},{"id":89211,"depth":167,"text":89212,"children":92954},[92955,92956],{"id":89215,"depth":200,"text":89216},{"id":89249,"depth":200,"text":89250},{"id":89978,"depth":167,"text":89979,"children":92958},[92959,92960,92961,92962],{"id":89982,"depth":200,"text":89983},{"id":90940,"depth":200,"text":90941},{"id":91882,"depth":200,"text":91883},{"id":91956,"depth":200,"text":91957},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76825,"description":23584},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92969,"title":92970,"body":92971,"description":92982,"extension":249,"meta":92983,"navigation":251,"path":92985,"seo":92986,"stem":92987,"__hash__":92988},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92972,"toc":92980},[92973],[19,92974,92975,92976],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[570,92977,92978],{"href":92978,"rel":92979},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24073],{"title":30,"searchDepth":167,"depth":167,"links":92981},[],"三件套第三套学习",{"category":92984},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92970,"description":92982},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92990,"title":92991,"body":92992,"description":23584,"extension":249,"meta":93097,"navigation":251,"path":93098,"seo":93099,"stem":93100,"__hash__":93101},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92993,"toc":93092},[92994,93001,93004,93007,93010,93014,93023,93026,93029,93033,93042,93045,93049,93052,93072,93075,93089],[19,92995,92996],{},[570,92997,93000],{"href":92998,"rel":92999},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24073],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93002,92991],{"id":93003},"_1安装",[19,93005,93006],{},"numpy是科学计算基础库,底层是C语言",[19,93008,93009],{},"三种方式：",[14,93011,93013],{"id":93012},"_11-通过pip安装","1.1 通过pip安装",[312,93015,93017],{"className":30523,"code":93016,"language":30525,"meta":30,"style":30},"pip install numpy\n",[318,93018,93019],{"__ignoreMap":30},[321,93020,93021],{"class":323,"line":324},[321,93022,93016],{"class":331},[19,93024,93025],{},"首选方式，自动处理依赖项",[19,93027,93028],{},"在提示系统命令符中使用cmd",[14,93030,93032],{"id":93031},"_12-通过anaconda安装","1.2 通过Anaconda安装",[312,93034,93036],{"className":30523,"code":93035,"language":30525,"meta":30,"style":30},"conda install numpy\n",[318,93037,93038],{"__ignoreMap":30},[321,93039,93040],{"class":323,"line":324},[321,93041,93035],{"class":331},[19,93043,93044],{},"自动解决环境依赖",[14,93046,93048],{"id":93047},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93050,93051],{},"对于Debian\u002FUbuntu",[312,93053,93055],{"className":30523,"code":93054,"language":30525,"meta":30,"style":30},"sudo apt-get install python3-numpy\n",[318,93056,93057],{"__ignoreMap":30},[321,93058,93059,93062,93064,93067,93069],{"class":323,"line":324},[321,93060,93061],{"class":331},"sudo apt",[321,93063,864],{"class":327},[321,93065,93066],{"class":331},"get install python3",[321,93068,864],{"class":327},[321,93070,93071],{"class":331},"numpy\n",[19,93073,93074],{},"对于Fedora:",[312,93076,93078],{"className":30523,"code":93077,"language":30525,"meta":30,"style":30},"sudo dnf install python3-numpy\n",[318,93079,93080],{"__ignoreMap":30},[321,93081,93082,93085,93087],{"class":323,"line":324},[321,93083,93084],{"class":331},"sudo dnf install python3",[321,93086,864],{"class":327},[321,93088,93071],{"class":331},[5333,93090,93091],{},"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":30,"searchDepth":167,"depth":167,"links":93093},[93094,93095,93096],{"id":93012,"depth":167,"text":93013},{"id":93031,"depth":167,"text":93032},{"id":93047,"depth":167,"text":93048},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92991,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93103,"title":93104,"body":93105,"description":23584,"extension":249,"meta":93218,"navigation":251,"path":93219,"seo":93220,"stem":93221,"__hash__":93222},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93106,"toc":93216},[93107,93110,93113,93116,93119,93122,93125,93128,93131,93134,93210,93213],[10,93108,93104],{"id":93109},"_10算数函数",[19,93111,93112],{},"加减乘除运算跟python基础语法没区别",[19,93114,93115],{},"除了python那种方法外还可以使用函数",[19,93117,93118],{},"加：np.add(a,b)",[19,93120,93121],{},"减：np.subtract(a,b)",[19,93123,93124],{},"乘：np.multiply(a,b)",[19,93126,93127],{},"除：np.divide(a,b) == a\u002Fb",[19,93129,93130],{},"取余：np.mod(a,b) == a%b",[19,93132,93133],{},"必须会的用法：",[312,93135,93137],{"className":30523,"code":93136,"language":30525,"meta":30,"style":30},"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",[318,93138,93139,93161,93182,93192,93205],{"__ignoreMap":30},[321,93140,93141,93143,93145,93148,93150,93153,93155,93157,93159],{"class":323,"line":324},[321,93142,570],{"class":331},[321,93144,377],{"class":327},[321,93146,93147],{"class":331},"np.arange(",[321,93149,752],{"class":380},[321,93151,93152],{"class":331},").reshape(",[321,93154,403],{"class":380},[321,93156,710],{"class":331},[321,93158,403],{"class":380},[321,93160,338],{"class":331},[321,93162,93163,93165,93167,93170,93172,93174,93176,93178,93180],{"class":323,"line":167},[321,93164,595],{"class":331},[321,93166,377],{"class":327},[321,93168,93169],{"class":331},"np.array([",[321,93171,778],{"class":380},[321,93173,710],{"class":331},[321,93175,778],{"class":380},[321,93177,710],{"class":331},[321,93179,778],{"class":380},[321,93181,4863],{"class":331},[321,93183,93184,93187,93189],{"class":323,"line":200},[321,93185,93186],{"class":331},"result",[321,93188,377],{"class":327},[321,93190,93191],{"class":331},"np.empty_like(a)\n",[321,93193,93194,93197,93200,93202],{"class":323,"line":1401},[321,93195,93196],{"class":331},"np.add(a,b,",[321,93198,93199],{"class":5423},"out",[321,93201,377],{"class":327},[321,93203,93204],{"class":331},"result)\n",[321,93206,93207],{"class":323,"line":1407},[321,93208,93209],{"class":331},"result\n",[19,93211,93212],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5333,93214,93215],{},"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":30,"searchDepth":167,"depth":167,"links":93217},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93104,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93224,"title":93225,"body":93226,"description":23584,"extension":249,"meta":93988,"navigation":251,"path":93989,"seo":93990,"stem":93991,"__hash__":93992},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93227,"toc":93975},[93228,93231,93234,93237,93241,93280,93284,93328,93388,93392,93395,93434,93437,93482,93486,93522,93526,93595,93599,93663,93667,93670,93673,93676,93679,93715,93719,93759,93763,93835,93838,93842,93905,93909,93972],[10,93229,93225],{"id":93230},"_11统计函数",[19,93232,93233],{},"sum max min mean",[19,93235,93236],{},"这些有axis参数，可以指定方向",[14,93238,93240],{"id":93239},"_111-sum求和函数","11.1 sum()求和函数",[312,93242,93244],{"className":30523,"code":93243,"language":30525,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[318,93245,93246,93251,93272],{"__ignoreMap":30},[321,93247,93248],{"class":323,"line":324},[321,93249,93250],{"class":390},"#创建一维数组\n",[321,93252,93253,93255,93257,93260,93262,93264,93266,93268,93270],{"class":323,"line":167},[321,93254,570],{"class":331},[321,93256,377],{"class":327},[321,93258,93259],{"class":331},"np.random.randint(",[321,93261,549],{"class":380},[321,93263,710],{"class":331},[321,93265,643],{"class":380},[321,93267,710],{"class":331},[321,93269,1032],{"class":380},[321,93271,338],{"class":331},[321,93273,93274,93277],{"class":323,"line":200},[321,93275,93276],{"class":331},"np.sum(a)",[321,93278,93279],{"class":390},"#求和\n",[14,93281,93283],{"id":93282},"_112-max求最大值函数","11.2 max()求最大值函数",[312,93285,93287],{"className":30523,"code":93286,"language":30525,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[318,93288,93289,93293,93313,93318,93323],{"__ignoreMap":30},[321,93290,93291],{"class":323,"line":324},[321,93292,93250],{"class":390},[321,93294,93295,93297,93299,93301,93303,93305,93307,93309,93311],{"class":323,"line":167},[321,93296,570],{"class":331},[321,93298,377],{"class":327},[321,93300,93259],{"class":331},[321,93302,549],{"class":380},[321,93304,710],{"class":331},[321,93306,643],{"class":380},[321,93308,710],{"class":331},[321,93310,1032],{"class":380},[321,93312,338],{"class":331},[321,93314,93315],{"class":323,"line":200},[321,93316,93317],{"class":331},"np.max(a)\n",[321,93319,93320],{"class":323,"line":1401},[321,93321,93322],{"class":390},"#最大索引(求最大元素的索引)arg\n",[321,93324,93325],{"class":323,"line":1407},[321,93326,93327],{"class":331},"np.argmax(a)\n",[312,93329,93331],{"className":30523,"code":93330,"language":30525,"meta":30,"style":30},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[318,93332,93333,93354,93374,93378],{"__ignoreMap":30},[321,93334,93335,93337,93339,93342,93344,93346,93348,93350,93352],{"class":323,"line":324},[321,93336,11126],{"class":331},[321,93338,377],{"class":327},[321,93340,93341],{"class":331}," np.array([",[321,93343,549],{"class":380},[321,93345,12642],{"class":331},[321,93347,651],{"class":380},[321,93349,12642],{"class":331},[321,93351,403],{"class":380},[321,93353,4863],{"class":331},[321,93355,93356,93358,93360,93362,93364,93366,93368,93370,93372],{"class":323,"line":167},[321,93357,11152],{"class":331},[321,93359,377],{"class":327},[321,93361,93341],{"class":331},[321,93363,403],{"class":380},[321,93365,12642],{"class":331},[321,93367,409],{"class":380},[321,93369,12642],{"class":331},[321,93371,625],{"class":380},[321,93373,4863],{"class":331},[321,93375,93376],{"class":323,"line":200},[321,93377,2606],{"emptyLinePlaceholder":251},[321,93379,93380,93382,93385],{"class":323,"line":1401},[321,93381,30560],{"class":380},[321,93383,93384],{"class":331},"(np.maximum(a, b))   ",[321,93386,93387],{"class":390},"# [3 5 4]，每个位置上取较大值\n",[14,93389,93391],{"id":93390},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93393,93394],{},"①一维数组：",[312,93396,93398],{"className":30523,"code":93397,"language":30525,"meta":30,"style":30},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[318,93399,93400,93404,93424,93429],{"__ignoreMap":30},[321,93401,93402],{"class":323,"line":324},[321,93403,93250],{"class":390},[321,93405,93406,93408,93410,93412,93414,93416,93418,93420,93422],{"class":323,"line":167},[321,93407,570],{"class":331},[321,93409,377],{"class":327},[321,93411,93259],{"class":331},[321,93413,549],{"class":380},[321,93415,710],{"class":331},[321,93417,643],{"class":380},[321,93419,710],{"class":331},[321,93421,1032],{"class":380},[321,93423,338],{"class":331},[321,93425,93426],{"class":323,"line":200},[321,93427,93428],{"class":390},"#求平均值\n",[321,93430,93431],{"class":323,"line":1401},[321,93432,93433],{"class":331},"np.mean(a)\n",[19,93435,93436],{},"②二维数组",[312,93438,93440],{"className":30523,"code":93439,"language":30525,"meta":30,"style":30},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[318,93441,93442,93447,93472,93477],{"__ignoreMap":30},[321,93443,93444],{"class":323,"line":324},[321,93445,93446],{"class":390},"#二维数组\n",[321,93448,93449,93452,93454,93456,93458,93460,93462,93464,93466,93468,93470],{"class":323,"line":167},[321,93450,93451],{"class":331},"aa",[321,93453,377],{"class":327},[321,93455,93147],{"class":331},[321,93457,549],{"class":380},[321,93459,710],{"class":331},[321,93461,855],{"class":380},[321,93463,93152],{"class":331},[321,93465,403],{"class":380},[321,93467,710],{"class":331},[321,93469,625],{"class":380},[321,93471,338],{"class":331},[321,93473,93474],{"class":323,"line":200},[321,93475,93476],{"class":390},"#对数组中的所有数求平均\n",[321,93478,93479],{"class":323,"line":1401},[321,93480,93481],{"class":331},"np.mean(aa)\n",[14,93483,93485],{"id":93484},"_114-median求中位数函数","11.4 median()求中位数函数",[312,93487,93489],{"className":30523,"code":93488,"language":30525,"meta":30,"style":30},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[318,93490,93491,93496,93512,93517],{"__ignoreMap":30},[321,93492,93493],{"class":323,"line":324},[321,93494,93495],{"class":390},"#求中位数\n",[321,93497,93498,93500,93502,93504,93506,93508,93510],{"class":323,"line":167},[321,93499,595],{"class":331},[321,93501,377],{"class":327},[321,93503,93147],{"class":331},[321,93505,549],{"class":380},[321,93507,710],{"class":331},[321,93509,778],{"class":380},[321,93511,338],{"class":331},[321,93513,93514],{"class":323,"line":200},[321,93515,93516],{"class":331},"np.median(b)\n",[321,93518,93519],{"class":323,"line":1401},[321,93520,93521],{"class":390},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93523,93525],{"id":93524},"_115-power求幂运算函数","11.5 power()求幂运算函数",[312,93527,93529],{"className":30523,"code":93528,"language":30525,"meta":30,"style":30},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[318,93530,93531,93547,93552,93557,93566,93571,93580],{"__ignoreMap":30},[321,93532,93533,93535,93537,93539,93541,93543,93545],{"class":323,"line":324},[321,93534,595],{"class":331},[321,93536,377],{"class":327},[321,93538,93147],{"class":331},[321,93540,549],{"class":380},[321,93542,710],{"class":331},[321,93544,778],{"class":380},[321,93546,338],{"class":331},[321,93548,93549],{"class":323,"line":167},[321,93550,93551],{"class":390},"#幂运算\n",[321,93553,93554],{"class":323,"line":200},[321,93555,93556],{"class":390},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[321,93558,93559,93562,93564],{"class":323,"line":1401},[321,93560,93561],{"class":331},"np.power(b,",[321,93563,409],{"class":380},[321,93565,338],{"class":331},[321,93567,93568],{"class":323,"line":1407},[321,93569,93570],{"class":390},"#或者以下代码，将数据存储起来\n",[321,93572,93573,93575,93577],{"class":323,"line":1421},[321,93574,1177],{"class":331},[321,93576,377],{"class":327},[321,93578,93579],{"class":331},"np.empty_like(b)\n",[321,93581,93582,93584,93586,93588,93590,93592],{"class":323,"line":1427},[321,93583,93561],{"class":331},[321,93585,409],{"class":380},[321,93587,710],{"class":331},[321,93589,93199],{"class":5423},[321,93591,377],{"class":327},[321,93593,93594],{"class":331},"y)\n",[14,93596,93598],{"id":93597},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[312,93600,93602],{"className":30523,"code":93601,"language":30525,"meta":30,"style":30},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[318,93603,93604,93620,93625,93630,93634,93652],{"__ignoreMap":30},[321,93605,93606,93608,93610,93612,93614,93616,93618],{"class":323,"line":324},[321,93607,595],{"class":331},[321,93609,377],{"class":327},[321,93611,93147],{"class":331},[321,93613,549],{"class":380},[321,93615,710],{"class":331},[321,93617,778],{"class":380},[321,93619,338],{"class":331},[321,93621,93622],{"class":323,"line":167},[321,93623,93624],{"class":390},"#开方\n",[321,93626,93627],{"class":323,"line":200},[321,93628,93629],{"class":331},"np.sqrt(b)\n",[321,93631,93632],{"class":323,"line":1401},[321,93633,93570],{"class":390},[321,93635,93636,93638,93640,93643,93646,93648,93650],{"class":323,"line":1407},[321,93637,1177],{"class":331},[321,93639,377],{"class":327},[321,93641,93642],{"class":331},"np.empty_like(b,",[321,93644,93645],{"class":5423},"dtype",[321,93647,377],{"class":327},[321,93649,371],{"class":380},[321,93651,338],{"class":331},[321,93653,93654,93657,93659,93661],{"class":323,"line":1421},[321,93655,93656],{"class":331},"np.sqrt(b,",[321,93658,93199],{"class":5423},[321,93660,377],{"class":327},[321,93662,93594],{"class":331},[14,93664,93666],{"id":93665},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93668,93669],{},"对数组中的元素累计求和，可指定轴",[19,93671,93672],{},"#累计求和的意思是：",[19,93674,93675],{},"a = np.array([1, 2, 3, 4])",[19,93677,93678],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[312,93680,93682],{"className":30523,"code":93681,"language":30525,"meta":30,"style":30},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[318,93683,93684,93700,93705,93710],{"__ignoreMap":30},[321,93685,93686,93688,93690,93692,93694,93696,93698],{"class":323,"line":324},[321,93687,595],{"class":331},[321,93689,377],{"class":327},[321,93691,93147],{"class":331},[321,93693,549],{"class":380},[321,93695,710],{"class":331},[321,93697,778],{"class":380},[321,93699,338],{"class":331},[321,93701,93702],{"class":323,"line":167},[321,93703,93704],{"class":331},"np.cumsum(b)\n",[321,93706,93707],{"class":323,"line":200},[321,93708,93709],{"class":390},"#结果：\n",[321,93711,93712],{"class":323,"line":1401},[321,93713,93714],{"class":390},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93716,93718],{"id":93717},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[312,93720,93722],{"className":30523,"code":93721,"language":30525,"meta":30,"style":30},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[318,93723,93724,93740,93745,93750,93754],{"__ignoreMap":30},[321,93725,93726,93728,93730,93732,93734,93736,93738],{"class":323,"line":324},[321,93727,595],{"class":331},[321,93729,377],{"class":327},[321,93731,93147],{"class":331},[321,93733,549],{"class":380},[321,93735,710],{"class":331},[321,93737,778],{"class":380},[321,93739,338],{"class":331},[321,93741,93742],{"class":323,"line":167},[321,93743,93744],{"class":390},"#对数组中的元素累计求积，可指定轴\n",[321,93746,93747],{"class":323,"line":200},[321,93748,93749],{"class":331},"np.cumprod(b)\n",[321,93751,93752],{"class":323,"line":1401},[321,93753,93709],{"class":390},[321,93755,93756],{"class":323,"line":1407},[321,93757,93758],{"class":390},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93760,93762],{"id":93761},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[312,93764,93766],{"className":30523,"code":93765,"language":30525,"meta":30,"style":30},"#删除数组中的重复数据，并对数据进行排序\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",[318,93767,93768,93773,93821,93826,93830],{"__ignoreMap":30},[321,93769,93770],{"class":323,"line":324},[321,93771,93772],{"class":390},"#删除数组中的重复数据，并对数据进行排序\n",[321,93774,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803,93805,93807,93809,93811,93813,93815,93817,93819],{"class":323,"line":167},[321,93776,570],{"class":331},[321,93778,377],{"class":327},[321,93780,93169],{"class":331},[321,93782,549],{"class":380},[321,93784,710],{"class":331},[321,93786,409],{"class":380},[321,93788,710],{"class":331},[321,93790,403],{"class":380},[321,93792,710],{"class":331},[321,93794,830],{"class":380},[321,93796,710],{"class":331},[321,93798,403],{"class":380},[321,93800,710],{"class":331},[321,93802,778],{"class":380},[321,93804,710],{"class":331},[321,93806,529],{"class":380},[321,93808,710],{"class":331},[321,93810,523],{"class":380},[321,93812,710],{"class":331},[321,93814,1107],{"class":380},[321,93816,710],{"class":331},[321,93818,625],{"class":380},[321,93820,4863],{"class":331},[321,93822,93823],{"class":323,"line":200},[321,93824,93825],{"class":331},"np.unique(a)\n",[321,93827,93828],{"class":323,"line":1401},[321,93829,93709],{"class":390},[321,93831,93832],{"class":323,"line":1407},[321,93833,93834],{"class":390},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93836,93837],{},"升序形式排序",[14,93839,93841],{"id":93840},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[312,93843,93845],{"className":30523,"code":93844,"language":30525,"meta":30,"style":30},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[318,93846,93847,93895,93900],{"__ignoreMap":30},[321,93848,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871,93873,93875,93877,93879,93881,93883,93885,93887,93889,93891,93893],{"class":323,"line":324},[321,93850,570],{"class":331},[321,93852,377],{"class":327},[321,93854,93169],{"class":331},[321,93856,549],{"class":380},[321,93858,710],{"class":331},[321,93860,409],{"class":380},[321,93862,710],{"class":331},[321,93864,403],{"class":380},[321,93866,710],{"class":331},[321,93868,830],{"class":380},[321,93870,710],{"class":331},[321,93872,403],{"class":380},[321,93874,710],{"class":331},[321,93876,778],{"class":380},[321,93878,710],{"class":331},[321,93880,529],{"class":380},[321,93882,710],{"class":331},[321,93884,523],{"class":380},[321,93886,710],{"class":331},[321,93888,1107],{"class":380},[321,93890,710],{"class":331},[321,93892,625],{"class":380},[321,93894,4863],{"class":331},[321,93896,93897],{"class":323,"line":167},[321,93898,93899],{"class":390},"#返回数组中非零元素的索引\n",[321,93901,93902],{"class":323,"line":200},[321,93903,93904],{"class":331},"np.nonzero(a)\n",[14,93906,93908],{"id":93907},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[312,93910,93912],{"className":30523,"code":93911,"language":30525,"meta":30,"style":30},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[318,93913,93914,93962,93967],{"__ignoreMap":30},[321,93915,93916,93918,93920,93922,93924,93926,93928,93930,93932,93934,93936,93938,93940,93942,93944,93946,93948,93950,93952,93954,93956,93958,93960],{"class":323,"line":324},[321,93917,570],{"class":331},[321,93919,377],{"class":327},[321,93921,93169],{"class":331},[321,93923,549],{"class":380},[321,93925,710],{"class":331},[321,93927,409],{"class":380},[321,93929,710],{"class":331},[321,93931,403],{"class":380},[321,93933,710],{"class":331},[321,93935,830],{"class":380},[321,93937,710],{"class":331},[321,93939,403],{"class":380},[321,93941,710],{"class":331},[321,93943,778],{"class":380},[321,93945,710],{"class":331},[321,93947,529],{"class":380},[321,93949,710],{"class":331},[321,93951,523],{"class":380},[321,93953,710],{"class":331},[321,93955,1107],{"class":380},[321,93957,710],{"class":331},[321,93959,625],{"class":380},[321,93961,4863],{"class":331},[321,93963,93964],{"class":323,"line":167},[321,93965,93966],{"class":390},"#计算一组数中最大值与最小值的差，可指定轴\n",[321,93968,93969],{"class":323,"line":200},[321,93970,93971],{"class":331},"np.ptp(a)\n",[5333,93973,93974],{},"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":30,"searchDepth":167,"depth":167,"links":93976},[93977,93978,93979,93980,93981,93982,93983,93984,93985,93986,93987],{"id":93239,"depth":167,"text":93240},{"id":93282,"depth":167,"text":93283},{"id":93390,"depth":167,"text":93391},{"id":93484,"depth":167,"text":93485},{"id":93524,"depth":167,"text":93525},{"id":93597,"depth":167,"text":93598},{"id":93665,"depth":167,"text":93666},{"id":93717,"depth":167,"text":93718},{"id":93761,"depth":167,"text":93762},{"id":93840,"depth":167,"text":93841},{"id":93907,"depth":167,"text":93908},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93225,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93994,"title":93995,"body":93996,"description":23584,"extension":249,"meta":94651,"navigation":251,"path":94652,"seo":94653,"stem":94654,"__hash__":94655},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93997,"toc":94639},[93998,94001,94005,94008,94224,94228,94231,94440,94444,94510,94515,94519,94522,94525,94563,94567,94570,94575,94579,94582,94585,94590,94594,94597,94601,94604,94607,94612,94616,94619,94622,94627,94631,94636],[10,93999,93995],{"id":94000},"_12其他常用函数",[14,94002,94004],{"id":94003},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94006,94007],{},"将数组的数据按照行列复制扩展",[312,94009,94011],{"className":30523,"code":94010,"language":30525,"meta":30,"style":30},"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",[318,94012,94013,94029,94038,94042,94047,94052,94065,94069,94074,94079,94084,94088,94093,94117,94129,94133,94137,94142,94147,94152,94157,94161,94174,94178,94182,94187,94192,94197,94202,94207,94211,94215,94220],{"__ignoreMap":30},[321,94014,94015,94017,94019,94021,94023,94025,94027],{"class":323,"line":324},[321,94016,570],{"class":331},[321,94018,377],{"class":327},[321,94020,93147],{"class":331},[321,94022,549],{"class":380},[321,94024,710],{"class":331},[321,94026,651],{"class":380},[321,94028,338],{"class":331},[321,94030,94031,94034,94036],{"class":323,"line":167},[321,94032,94033],{"class":331},"np.tile(a,",[321,94035,409],{"class":380},[321,94037,338],{"class":331},[321,94039,94040],{"class":323,"line":200},[321,94041,93709],{"class":390},[321,94043,94044],{"class":323,"line":1401},[321,94045,94046],{"class":390},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[321,94048,94049],{"class":323,"line":1407},[321,94050,94051],{"class":390},"#行复制两次，列复制三次\n",[321,94053,94054,94057,94059,94061,94063],{"class":323,"line":1421},[321,94055,94056],{"class":331},"np.tile(a,(",[321,94058,409],{"class":380},[321,94060,710],{"class":331},[321,94062,403],{"class":380},[321,94064,30642],{"class":331},[321,94066,94067],{"class":323,"line":1427},[321,94068,93709],{"class":390},[321,94070,94071],{"class":323,"line":1518},[321,94072,94073],{"class":436},"'''\n",[321,94075,94076],{"class":323,"line":1524},[321,94077,94078],{"class":436},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[321,94080,94081],{"class":323,"line":1536},[321,94082,94083],{"class":436},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[321,94085,94086],{"class":323,"line":1818},[321,94087,94073],{"class":436},[321,94089,94090],{"class":323,"line":1823},[321,94091,94092],{"class":390},"#创建二维数组\n",[321,94094,94095,94097,94099,94101,94103,94105,94107,94109,94111,94113,94115],{"class":323,"line":1829},[321,94096,93451],{"class":331},[321,94098,377],{"class":327},[321,94100,93147],{"class":331},[321,94102,549],{"class":380},[321,94104,710],{"class":331},[321,94106,855],{"class":380},[321,94108,93152],{"class":331},[321,94110,625],{"class":380},[321,94112,710],{"class":331},[321,94114,403],{"class":380},[321,94116,338],{"class":331},[321,94118,94119,94122,94124,94126],{"class":323,"line":1834},[321,94120,94121],{"class":331},"np.tile(aa,",[321,94123,409],{"class":380},[321,94125,761],{"class":331},[321,94127,94128],{"class":390},"#一个数的时候就是行\n",[321,94130,94131],{"class":323,"line":1848},[321,94132,93709],{"class":390},[321,94134,94135],{"class":323,"line":1853},[321,94136,94073],{"class":436},[321,94138,94139],{"class":323,"line":1859},[321,94140,94141],{"class":436},"array([[ 1,  2,  3,  1,  2,  3],\n",[321,94143,94144],{"class":323,"line":1880},[321,94145,94146],{"class":436},"       [ 4,  5,  6,  4,  5,  6],\n",[321,94148,94149],{"class":323,"line":1885},[321,94150,94151],{"class":436},"       [ 7,  8,  9,  7,  8,  9],\n",[321,94153,94154],{"class":323,"line":1899},[321,94155,94156],{"class":436},"       [10, 11, 12, 10, 11, 12]])\n",[321,94158,94159],{"class":323,"line":1904},[321,94160,94073],{"class":436},[321,94162,94163,94166,94168,94170,94172],{"class":323,"line":1933},[321,94164,94165],{"class":331},"np.tile(aa,(",[321,94167,409],{"class":380},[321,94169,710],{"class":331},[321,94171,403],{"class":380},[321,94173,30642],{"class":331},[321,94175,94176],{"class":323,"line":1938},[321,94177,93709],{"class":390},[321,94179,94180],{"class":323,"line":1955},[321,94181,94073],{"class":436},[321,94183,94184],{"class":323,"line":1960},[321,94185,94186],{"class":436},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[321,94188,94189],{"class":323,"line":1965},[321,94190,94191],{"class":436},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[321,94193,94194],{"class":323,"line":1970},[321,94195,94196],{"class":436},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[321,94198,94199],{"class":323,"line":1984},[321,94200,94201],{"class":436},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[321,94203,94204],{"class":323,"line":1989},[321,94205,94206],{"class":436},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[321,94208,94209],{"class":323,"line":2783},[321,94210,94191],{"class":436},[321,94212,94213],{"class":323,"line":2797},[321,94214,94196],{"class":436},[321,94216,94217],{"class":323,"line":2805},[321,94218,94219],{"class":436},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[321,94221,94222],{"class":323,"line":2810},[321,94223,94073],{"class":436},[14,94225,94227],{"id":94226},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94229,94230],{},"repeat()将数组中的每个元素重复若干次",[312,94232,94234],{"className":30523,"code":94233,"language":30525,"meta":30,"style":30},"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",[318,94235,94236,94252,94261,94265,94270,94294,94299,94308,94312,94317,94321,94326,94342,94346,94350,94355,94360,94365,94369,94374,94378,94383,94388,94392,94408,94412,94416,94421,94426,94431,94436],{"__ignoreMap":30},[321,94237,94238,94240,94242,94244,94246,94248,94250],{"class":323,"line":324},[321,94239,570],{"class":331},[321,94241,377],{"class":327},[321,94243,93147],{"class":331},[321,94245,549],{"class":380},[321,94247,710],{"class":331},[321,94249,651],{"class":380},[321,94251,338],{"class":331},[321,94253,94254,94257,94259],{"class":323,"line":167},[321,94255,94256],{"class":331},"np.repeat(a,",[321,94258,403],{"class":380},[321,94260,338],{"class":331},[321,94262,94263],{"class":323,"line":200},[321,94264,93709],{"class":390},[321,94266,94267],{"class":323,"line":1401},[321,94268,94269],{"class":390},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[321,94271,94272,94274,94276,94278,94280,94282,94284,94286,94288,94290,94292],{"class":323,"line":1407},[321,94273,93451],{"class":331},[321,94275,377],{"class":327},[321,94277,93147],{"class":331},[321,94279,549],{"class":380},[321,94281,710],{"class":331},[321,94283,855],{"class":380},[321,94285,93152],{"class":331},[321,94287,625],{"class":380},[321,94289,710],{"class":331},[321,94291,403],{"class":380},[321,94293,338],{"class":331},[321,94295,94296],{"class":323,"line":1421},[321,94297,94298],{"class":390},"#这个重复之后二维变成一维\n",[321,94300,94301,94304,94306],{"class":323,"line":1427},[321,94302,94303],{"class":331},"np.repeat(aa,",[321,94305,409],{"class":380},[321,94307,338],{"class":331},[321,94309,94310],{"class":323,"line":1518},[321,94311,94073],{"class":436},[321,94313,94314],{"class":323,"line":1524},[321,94315,94316],{"class":436},"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",[321,94318,94319],{"class":323,"line":1536},[321,94320,94073],{"class":436},[321,94322,94323],{"class":323,"line":1818},[321,94324,94325],{"class":390},"#指定axis\n",[321,94327,94328,94330,94332,94334,94336,94338,94340],{"class":323,"line":1823},[321,94329,94303],{"class":331},[321,94331,409],{"class":380},[321,94333,710],{"class":331},[321,94335,47659],{"class":5423},[321,94337,377],{"class":327},[321,94339,523],{"class":380},[321,94341,338],{"class":331},[321,94343,94344],{"class":323,"line":1829},[321,94345,93709],{"class":390},[321,94347,94348],{"class":323,"line":1834},[321,94349,94073],{"class":436},[321,94351,94352],{"class":323,"line":1848},[321,94353,94354],{"class":436},"array([[ 1,  2,  3],\n",[321,94356,94357],{"class":323,"line":1853},[321,94358,94359],{"class":436},"       [ 1,  2,  3],\n",[321,94361,94362],{"class":323,"line":1859},[321,94363,94364],{"class":436},"       [ 4,  5,  6],\n",[321,94366,94367],{"class":323,"line":1880},[321,94368,94364],{"class":436},[321,94370,94371],{"class":323,"line":1885},[321,94372,94373],{"class":436},"       [ 7,  8,  9],\n",[321,94375,94376],{"class":323,"line":1899},[321,94377,94373],{"class":436},[321,94379,94380],{"class":323,"line":1904},[321,94381,94382],{"class":436},"       [10, 11, 12],\n",[321,94384,94385],{"class":323,"line":1933},[321,94386,94387],{"class":436},"       [10, 11, 12]])\n",[321,94389,94390],{"class":323,"line":1938},[321,94391,94073],{"class":436},[321,94393,94394,94396,94398,94400,94402,94404,94406],{"class":323,"line":1955},[321,94395,94303],{"class":331},[321,94397,409],{"class":380},[321,94399,710],{"class":331},[321,94401,47659],{"class":5423},[321,94403,377],{"class":327},[321,94405,549],{"class":380},[321,94407,338],{"class":331},[321,94409,94410],{"class":323,"line":1960},[321,94411,93709],{"class":390},[321,94413,94414],{"class":323,"line":1965},[321,94415,94073],{"class":436},[321,94417,94418],{"class":323,"line":1970},[321,94419,94420],{"class":436},"array([[ 1,  1,  2,  2,  3,  3],\n",[321,94422,94423],{"class":323,"line":1984},[321,94424,94425],{"class":436},"       [ 4,  4,  5,  5,  6,  6],\n",[321,94427,94428],{"class":323,"line":1989},[321,94429,94430],{"class":436},"       [ 7,  7,  8,  8,  9,  9],\n",[321,94432,94433],{"class":323,"line":2783},[321,94434,94435],{"class":436},"       [10, 10, 11, 11, 12, 12]])\n",[321,94437,94438],{"class":323,"line":2797},[321,94439,94073],{"class":436},[14,94441,94443],{"id":94442},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[312,94445,94447],{"className":30523,"code":94446,"language":30525,"meta":30,"style":30},"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",[318,94448,94449,94465,94470,94482,94486,94491,94501,94505],{"__ignoreMap":30},[321,94450,94451,94453,94455,94457,94459,94461,94463],{"class":323,"line":324},[321,94452,570],{"class":331},[321,94454,377],{"class":327},[321,94456,93147],{"class":331},[321,94458,549],{"class":380},[321,94460,710],{"class":331},[321,94462,651],{"class":380},[321,94464,338],{"class":331},[321,94466,94467],{"class":323,"line":167},[321,94468,94469],{"class":390},"#array([，2，3，4])\n",[321,94471,94472,94475,94477,94479],{"class":323,"line":200},[321,94473,94474],{"class":331},"np.roll(a,",[321,94476,409],{"class":380},[321,94478,761],{"class":331},[321,94480,94481],{"class":390},"#传正数向后调多少位，传负数向前调多少位\n",[321,94483,94484],{"class":323,"line":1401},[321,94485,93709],{"class":390},[321,94487,94488],{"class":323,"line":1407},[321,94489,94490],{"class":390},"#array([3, 4, 1, 2])\n",[321,94492,94493,94495,94497,94499],{"class":323,"line":1421},[321,94494,94474],{"class":331},[321,94496,864],{"class":327},[321,94498,549],{"class":380},[321,94500,338],{"class":331},[321,94502,94503],{"class":323,"line":1427},[321,94504,93709],{"class":390},[321,94506,94507],{"class":323,"line":1518},[321,94508,94509],{"class":390},"#array([2, 3, 4, 1])\n",[19,94511,94512],{},[28,94513],{"alt":30,"src":94514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94516,94518],{"id":94517},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94520,94521],{},"resize()重新调整数组的大小",[19,94523,94524],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[312,94526,94528],{"className":30523,"code":94527,"language":30525,"meta":30,"style":30},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[318,94529,94530,94535,94548],{"__ignoreMap":30},[321,94531,94532],{"class":323,"line":324},[321,94533,94534],{"class":390},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[321,94536,94537,94540,94542,94544,94546],{"class":323,"line":167},[321,94538,94539],{"class":331},"np.resize(aa,(",[321,94541,409],{"class":380},[321,94543,710],{"class":331},[321,94545,676],{"class":380},[321,94547,30642],{"class":331},[321,94549,94550,94552,94554,94556,94558,94560],{"class":323,"line":200},[321,94551,94539],{"class":331},[321,94553,409],{"class":380},[321,94555,710],{"class":331},[321,94557,752],{"class":380},[321,94559,82916],{"class":331},[321,94561,94562],{"class":390},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94564,94566],{"id":94565},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94568,94569],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94571,94572],{},[28,94573],{"alt":30,"src":94574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94576,94578],{"id":94577},"_126-保存加载文件","12.6 保存加载文件",[19,94580,94581],{},"savetxt():将数据保存到txt文件中",[19,94583,94584],{},"loadtxt():从文件加载数据",[19,94586,94587],{},[28,94588],{"alt":30,"src":94589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94591,94593],{"id":94592},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94595,94596],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94598,94600],{"id":94599},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94602,94603],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94605,94606],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94608,94609],{},[28,94610],{"alt":30,"src":94611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94613,94615],{"id":94614},"_129-where语句","12.9 where语句",[19,94617,94618],{},"np.where(条件,x,y)",[19,94620,94621],{},"如果条件为True,对应值为x,否则对应值为y",[19,94623,94624],{},[28,94625],{"alt":30,"src":94626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94628,94630],{"id":94629},"_1210-dot矩阵","12.10 dot()矩阵",[19,94632,94633],{},[28,94634],{"alt":30,"src":94635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5333,94637,94638],{},"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":30,"searchDepth":167,"depth":167,"links":94640},[94641,94642,94643,94644,94645,94646,94647,94648,94649,94650],{"id":94003,"depth":167,"text":94004},{"id":94226,"depth":167,"text":94227},{"id":94442,"depth":167,"text":94443},{"id":94517,"depth":167,"text":94518},{"id":94565,"depth":167,"text":94566},{"id":94577,"depth":167,"text":94578},{"id":94592,"depth":167,"text":94593},{"id":94599,"depth":167,"text":94600},{"id":94614,"depth":167,"text":94615},{"id":94629,"depth":167,"text":94630},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93995,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94657,"title":94658,"body":94659,"description":23584,"extension":249,"meta":95012,"navigation":251,"path":95013,"seo":95014,"stem":95015,"__hash__":95016},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94660,"toc":95010},[94661,94664,94667,94670,94673,94676,94741,94743,95007],[10,94662,94658],{"id":94663},"_13数组排序",[19,94665,94666],{},"排序主要用到的方法是np.sort和np.argsort",[19,94668,94669],{},"其中np.sort()对数组直接排序",[19,94671,94672],{},"而np.argsort()是返回排序后的原始索引",[19,94674,94675],{},"①一维数组",[312,94677,94679],{"className":30523,"code":94678,"language":30525,"meta":30,"style":30},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[318,94680,94681,94685,94725,94733],{"__ignoreMap":30},[321,94682,94683],{"class":323,"line":324},[321,94684,93250],{"class":390},[321,94686,94687,94689,94691,94693,94695,94697,94699,94701,94703,94705,94707,94709,94711,94713,94715,94717,94719,94721,94723],{"class":323,"line":167},[321,94688,570],{"class":331},[321,94690,377],{"class":327},[321,94692,93169],{"class":331},[321,94694,403],{"class":380},[321,94696,710],{"class":331},[321,94698,830],{"class":380},[321,94700,710],{"class":331},[321,94702,727],{"class":380},[321,94704,710],{"class":331},[321,94706,1107],{"class":380},[321,94708,710],{"class":331},[321,94710,611],{"class":380},[321,94712,710],{"class":331},[321,94714,1225],{"class":380},[321,94716,710],{"class":331},[321,94718,676],{"class":380},[321,94720,710],{"class":331},[321,94722,778],{"class":380},[321,94724,4863],{"class":331},[321,94726,94727,94730],{"class":323,"line":200},[321,94728,94729],{"class":331},"np.sort(a)",[321,94731,94732],{"class":390},"#升序排序\n",[321,94734,94735,94738],{"class":323,"line":1401},[321,94736,94737],{"class":331},"np.argsort(a)",[321,94739,94740],{"class":390},"#按照元素大小来索引排序\n",[19,94742,93436],{},[312,94744,94746],{"className":30523,"code":94745,"language":30525,"meta":30,"style":30},"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",[318,94747,94748,94760,94786,94791,94795,94800,94805,94810,94815,94819,94827,94831,94836,94841,94846,94851,94855,94860,94873,94877,94882,94887,94892,94897,94901,94906,94918,94922,94926,94930,94934,94938,94942,94947,94962,94967,94976,94981,94985,94989,94994,94998,95003],{"__ignoreMap":30},[321,94749,94750,94753,94755,94757],{"class":323,"line":324},[321,94751,94752],{"class":331},"np.random.seed(",[321,94754,523],{"class":380},[321,94756,761],{"class":331},[321,94758,94759],{"class":390},"#保证每次值一样\n",[321,94761,94762,94764,94766,94768,94770,94772,94774,94776,94778,94780,94782,94784],{"class":323,"line":167},[321,94763,93451],{"class":331},[321,94765,377],{"class":327},[321,94767,93259],{"class":331},[321,94769,643],{"class":380},[321,94771,710],{"class":331},[321,94773,31641],{"class":5423},[321,94775,377],{"class":327},[321,94777,332],{"class":331},[321,94779,625],{"class":380},[321,94781,710],{"class":331},[321,94783,676],{"class":380},[321,94785,30642],{"class":331},[321,94787,94788],{"class":323,"line":200},[321,94789,94790],{"class":390},"#原数组：\n",[321,94792,94793],{"class":323,"line":1401},[321,94794,94073],{"class":436},[321,94796,94797],{"class":323,"line":1407},[321,94798,94799],{"class":436},"array([[44, 47, 64, 67, 67,  9],\n",[321,94801,94802],{"class":323,"line":1421},[321,94803,94804],{"class":436},"       [83, 21, 36, 87, 70, 88],\n",[321,94806,94807],{"class":323,"line":1427},[321,94808,94809],{"class":436},"       [88, 12, 58, 65, 39, 87],\n",[321,94811,94812],{"class":323,"line":1518},[321,94813,94814],{"class":436},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[321,94816,94817],{"class":323,"line":1524},[321,94818,94073],{"class":436},[321,94820,94821,94824],{"class":323,"line":1536},[321,94822,94823],{"class":331},"np.sort(aa)",[321,94825,94826],{"class":390},"#每行进行了排序\n",[321,94828,94829],{"class":323,"line":1818},[321,94830,94073],{"class":436},[321,94832,94833],{"class":323,"line":1823},[321,94834,94835],{"class":436},"array([[ 9, 44, 47, 64, 67, 67],\n",[321,94837,94838],{"class":323,"line":1829},[321,94839,94840],{"class":436},"       [21, 36, 70, 83, 87, 88],\n",[321,94842,94843],{"class":323,"line":1834},[321,94844,94845],{"class":436},"       [12, 39, 58, 65, 87, 88],\n",[321,94847,94848],{"class":323,"line":1848},[321,94849,94850],{"class":436},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[321,94852,94853],{"class":323,"line":1853},[321,94854,94073],{"class":436},[321,94856,94857],{"class":323,"line":1859},[321,94858,94859],{"class":390},"#axis=0时\n",[321,94861,94862,94865,94867,94869,94871],{"class":323,"line":1880},[321,94863,94864],{"class":331},"np.sort(aa,",[321,94866,47659],{"class":5423},[321,94868,377],{"class":327},[321,94870,523],{"class":380},[321,94872,338],{"class":331},[321,94874,94875],{"class":323,"line":1885},[321,94876,94073],{"class":436},[321,94878,94879],{"class":323,"line":1899},[321,94880,94881],{"class":436},"array([[44, 12, 36, 37, 25,  9],\n",[321,94883,94884],{"class":323,"line":1904},[321,94885,94886],{"class":436},"       [46, 21, 58, 65, 39, 77],\n",[321,94888,94889],{"class":323,"line":1933},[321,94890,94891],{"class":436},"       [83, 47, 64, 67, 67, 87],\n",[321,94893,94894],{"class":323,"line":1938},[321,94895,94896],{"class":436},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[321,94898,94899],{"class":323,"line":1955},[321,94900,94073],{"class":436},[321,94902,94903],{"class":323,"line":1960},[321,94904,94905],{"class":390},"#axis=1时,为默认值\n",[321,94907,94908,94910,94912,94914,94916],{"class":323,"line":1965},[321,94909,94864],{"class":331},[321,94911,47659],{"class":5423},[321,94913,377],{"class":327},[321,94915,549],{"class":380},[321,94917,338],{"class":331},[321,94919,94920],{"class":323,"line":1970},[321,94921,94073],{"class":436},[321,94923,94924],{"class":323,"line":1984},[321,94925,94835],{"class":436},[321,94927,94928],{"class":323,"line":1989},[321,94929,94840],{"class":436},[321,94931,94932],{"class":323,"line":2783},[321,94933,94845],{"class":436},[321,94935,94936],{"class":323,"line":2797},[321,94937,94850],{"class":436},[321,94939,94940],{"class":323,"line":2805},[321,94941,94073],{"class":436},[321,94943,94944],{"class":323,"line":2810},[321,94945,94946],{"class":390},"#按最后一列排序\n",[321,94948,94949,94951,94953,94956,94958,94960],{"class":323,"line":2816},[321,94950,595],{"class":331},[321,94952,377],{"class":327},[321,94954,94955],{"class":331},"aa[:,",[321,94957,864],{"class":327},[321,94959,549],{"class":380},[321,94961,33391],{"class":331},[321,94963,94964],{"class":323,"line":2822},[321,94965,94966],{"class":390},"#获取最后一列排好序的索引\n",[321,94968,94969,94971,94973],{"class":323,"line":2827},[321,94970,74203],{"class":331},[321,94972,377],{"class":327},[321,94974,94975],{"class":331},"np.argsort(b)\n",[321,94977,94978],{"class":323,"line":8155},[321,94979,94980],{"class":331},"aa[index]\n",[321,94982,94983],{"class":323,"line":8179},[321,94984,94073],{"class":436},[321,94986,94987],{"class":323,"line":8184},[321,94988,94799],{"class":436},[321,94990,94991],{"class":323,"line":8190},[321,94992,94993],{"class":436},"       [46, 88, 81, 37, 25, 77],\n",[321,94995,94996],{"class":323,"line":8217},[321,94997,94809],{"class":436},[321,94999,95000],{"class":323,"line":8222},[321,95001,95002],{"class":436},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[321,95004,95005],{"class":323,"line":8228},[321,95006,94073],{"class":436},[5333,95008,95009],{},"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":30,"searchDepth":167,"depth":167,"links":95011},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94658,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95018,"title":95019,"body":95020,"description":23584,"extension":249,"meta":95050,"navigation":251,"path":95051,"seo":95052,"stem":95053,"__hash__":95054},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95021,"toc":95048},[95022,95025,95028,95031,95034,95037,95040,95043],[10,95023,95019],{"id":95024},"_14广播机制",[19,95026,95027],{},"广播的规则：",[19,95029,95030],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95032,95033],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95035,95036],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95038,95039],{},"3.如果没有维度形状为1，则会引发异常",[19,95041,95042],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95044,95045],{},[28,95046],{"alt":30,"src":95047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":30,"searchDepth":167,"depth":167,"links":95049},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95019,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95056,"title":95057,"body":95058,"description":23584,"extension":249,"meta":95156,"navigation":251,"path":95157,"seo":95158,"stem":95159,"__hash__":95160},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95059,"toc":95154},[95060,95063,95066,95151],[10,95061,95057],{"id":95062},"_15比较掩码",[19,95064,95065],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[312,95067,95069],{"className":30523,"code":95068,"language":30525,"meta":30,"style":30},"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",[318,95070,95071,95117,95128,95142,95146],{"__ignoreMap":30},[321,95072,95073,95075,95077,95080,95082,95084,95086,95088,95090,95092,95094,95096,95098,95100,95102,95104,95106,95108,95110,95112,95114],{"class":323,"line":324},[321,95074,570],{"class":331},[321,95076,377],{"class":327},[321,95078,95079],{"class":331},"np.array([[",[321,95081,549],{"class":380},[321,95083,710],{"class":331},[321,95085,409],{"class":380},[321,95087,710],{"class":331},[321,95089,403],{"class":380},[321,95091,48175],{"class":331},[321,95093,804],{"class":380},[321,95095,710],{"class":331},[321,95097,830],{"class":380},[321,95099,710],{"class":331},[321,95101,855],{"class":380},[321,95103,48175],{"class":331},[321,95105,1057],{"class":380},[321,95107,710],{"class":331},[321,95109,1082],{"class":380},[321,95111,710],{"class":331},[321,95113,1107],{"class":380},[321,95115,95116],{"class":331},"]])\n",[321,95118,95119,95121,95123,95125],{"class":323,"line":167},[321,95120,570],{"class":331},[321,95122,1242],{"class":327},[321,95124,1032],{"class":380},[321,95126,95127],{"class":390},"#结果是一个由True,False组成的数组\n",[321,95129,95130,95133,95135,95137,95139],{"class":323,"line":200},[321,95131,95132],{"class":331},"a[a",[321,95134,1242],{"class":327},[321,95136,1032],{"class":380},[321,95138,1272],{"class":331},[321,95140,95141],{"class":390},"#小于20的元素会存到这个数组中\n",[321,95143,95144],{"class":323,"line":1401},[321,95145,93709],{"class":390},[321,95147,95148],{"class":323,"line":1407},[321,95149,95150],{"class":390},"#array([ 1,  2,  3, 11, 12, 13])\n",[5333,95152,95153],{},"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":30,"searchDepth":167,"depth":167,"links":95155},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95057,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95162,"title":95163,"body":95164,"description":23584,"extension":249,"meta":95256,"navigation":251,"path":95257,"seo":95258,"stem":95259,"__hash__":95260},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95165,"toc":95254},[95166,95169,95172,95175,95178,95181,95246,95251],[10,95167,95163],{"id":95168},"_16魔法命令time",[19,95170,95171],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95173,95174],{},"%:行模式",[19,95176,95177],{},"%%:单元格模式",[19,95179,95180],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[312,95182,95184],{"className":30523,"code":95183,"language":30525,"meta":30,"style":30},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[318,95185,95186,95191,95198,95203,95212,95225,95229,95237],{"__ignoreMap":30},[321,95187,95188],{"class":323,"line":324},[321,95189,95190],{"class":390},"#程序执行时间\n",[321,95192,95193,95195],{"class":323,"line":167},[321,95194,30537],{"class":327},[321,95196,95197],{"class":331}," time \n",[321,95199,95200],{"class":323,"line":200},[321,95201,95202],{"class":390},"#获取时间\n",[321,95204,95205,95208,95210],{"class":323,"line":1401},[321,95206,95207],{"class":331},"start",[321,95209,377],{"class":327},[321,95211,32563],{"class":331},[321,95213,95214,95217,95220,95222],{"class":323,"line":1407},[321,95215,95216],{"class":331},"time.sleep(",[321,95218,95219],{"class":380},"0.4",[321,95221,761],{"class":331},[321,95223,95224],{"class":390},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[321,95226,95227],{"class":323,"line":1421},[321,95228,95202],{"class":390},[321,95230,95231,95233,95235],{"class":323,"line":1427},[321,95232,45946],{"class":331},[321,95234,377],{"class":327},[321,95236,32563],{"class":331},[321,95238,95239,95241,95243],{"class":323,"line":1518},[321,95240,45946],{"class":331},[321,95242,864],{"class":327},[321,95244,95245],{"class":331},"start\n",[19,95247,95248],{},[28,95249],{"alt":30,"src":95250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5333,95252,95253],{},"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":30,"searchDepth":167,"depth":167,"links":95255},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95163,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95262,"title":95263,"body":95264,"description":23584,"extension":249,"meta":95299,"navigation":251,"path":95300,"seo":95301,"stem":95302,"__hash__":95303},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95265,"toc":95297},[95266,95269,95272,95275,95278,95281,95284,95287,95292],[10,95267,95263],{"id":95268},"_17魔法命令timeit",[19,95270,95271],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95273,95274],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95276,95277],{},"单元格模式：",[19,95279,95280],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95282,95283],{},"初始化语句执行次数由轮数来决定",[19,95285,95286],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95288,95289],{},[28,95290],{"alt":30,"src":95291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95293,95294],{},[28,95295],{"alt":30,"src":95296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":30,"searchDepth":167,"depth":167,"links":95298},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95263,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95305,"title":95306,"body":95307,"description":23584,"extension":249,"meta":95325,"navigation":251,"path":95326,"seo":95327,"stem":95328,"__hash__":95329},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95308,"toc":95323},[95309,95312,95315,95318],[10,95310,95306],{"id":95311},"_18魔法命令writefile和run",[19,95313,95314],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95316,95317],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95319,95320],{},[28,95321],{"alt":30,"src":95322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":30,"searchDepth":167,"depth":167,"links":95324},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95306,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95331,"title":95332,"body":95333,"description":23584,"extension":249,"meta":95386,"navigation":251,"path":95387,"seo":95388,"stem":95389,"__hash__":95390},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95334,"toc":95384},[95335,95338,95341,95343,95346,95349,95354,95357,95360,95363,95366,95369,95372,95375,95378,95381],[10,95336,95332],{"id":95337},"_19魔法命令memit",[19,95339,95340],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95342,24744],{},[19,95344,95345],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95347,95348],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95350,95351],{},[28,95352],{"alt":30,"src":95353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95355,95356],{},"补充：",[19,95358,95359],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95361,95362],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95364,95365],{},"解决方法：",[19,95367,95368],{},"1.cmd",[19,95370,95371],{},"2.依次输入以下代码：",[19,95373,95374],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95376,95377],{},"pip install --upgrade ipython",[19,95379,95380],{},"#升级 memory_profiler 和 setuptools",[19,95382,95383],{},"pip install --upgrade memory_profiler setuptools",{"title":30,"searchDepth":167,"depth":167,"links":95385},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95332,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95392,"title":95393,"body":95394,"description":23584,"extension":249,"meta":97040,"navigation":251,"path":97041,"seo":97042,"stem":97043,"__hash__":97044},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95395,"toc":97010},[95396,95399,95403,95407,95468,95471,95476,95480,95485,95490,95495,95500,95503,95508,95512,95516,95549,95552,95555,95558,95610,95613,95649,95652,95694,95698,95719,95721,95758,95760,95765,95767,95772,95776,95779,95807,95811,95815,95868,95872,95964,95968,95972,95975,95980,95984,96009,96014,96018,96021,96024,96027,96030,96033,96036,96039,96051,96055,96059,96062,96094,96097,96120,96123,96149,96152,96178,96181,96215,96218,96280,96284,96287,96291,96294,96320,96323,96326,96331,96334,96403,96405,96410,96471,96474,96485,96491,96496,96500,96503,96516,96520,96535,96537,96560,96562,96588,96591,96594,96597,96645,96647,96652,96656,96660,96687,96691,96718,96721,96726,96731,96821,96825,96883,96888,96891,96894,96936,96940,96996,97001,97004,97007],[10,95397,95393],{"id":95398},"_2创建数组",[14,95400,95402],{"id":95401},"_21-array函数创建数组","2.1 array()函数创建数组",[292,95404,95406],{"id":95405},"_221-函数语句","2.2.1 函数语句",[312,95408,95410],{"className":30523,"code":95409,"language":30525,"meta":30,"style":30},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[318,95411,95412],{"__ignoreMap":30},[321,95413,95414,95417,95420,95422,95424,95426,95428,95430,95433,95435,95438,95440,95443,95445,95447,95449,95452,95454,95457,95459,95462,95464,95466],{"class":323,"line":324},[321,95415,95416],{"class":331},"numpy.array(",[321,95418,95419],{"class":380},"object",[321,95421,12642],{"class":331},[321,95423,93645],{"class":5423},[321,95425,13771],{"class":327},[321,95427,39078],{"class":380},[321,95429,12642],{"class":331},[321,95431,95432],{"class":5423},"copy",[321,95434,13771],{"class":327},[321,95436,95437],{"class":380}," True",[321,95439,12642],{"class":331},[321,95441,95442],{"class":5423},"order",[321,95444,13771],{"class":327},[321,95446,39078],{"class":380},[321,95448,12642],{"class":331},[321,95450,95451],{"class":5423},"subok",[321,95453,13771],{"class":327},[321,95455,95456],{"class":380}," False",[321,95458,12642],{"class":331},[321,95460,95461],{"class":5423},"ndmin",[321,95463,13771],{"class":327},[321,95465,4299],{"class":380},[321,95467,338],{"class":331},[19,95469,95470],{},"参数：",[19,95472,95473],{},[28,95474],{"alt":30,"src":95475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[292,95477,95479],{"id":95478},"_222-实例","2.2.2 实例",[19,95481,95482],{},[28,95483],{"alt":30,"src":95484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95486,95487],{},[28,95488],{"alt":30,"src":95489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95491,95492],{},[28,95493],{"alt":30,"src":95494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95496,95497],{},[28,95498],{"alt":30,"src":95499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95501,95502],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95504,95505],{},[28,95506],{"alt":30,"src":95507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95509,95511],{"id":95510},"_22-随机数创建数组","2.2 随机数创建数组",[292,95513,95515],{"id":95514},"_221-random语句","2.2.1 random语句",[312,95517,95519],{"className":30523,"code":95518,"language":30525,"meta":30,"style":30},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[318,95520,95521,95526,95531,95539,95544],{"__ignoreMap":30},[321,95522,95523],{"class":323,"line":324},[321,95524,95525],{"class":390},"#random.random()\n",[321,95527,95528],{"class":323,"line":167},[321,95529,95530],{"class":390},"#确定随机种子,就是每次运行结果是相同的\n",[321,95532,95533,95535,95537],{"class":323,"line":200},[321,95534,94752],{"class":331},[321,95536,523],{"class":380},[321,95538,338],{"class":331},[321,95540,95541],{"class":323,"line":1401},[321,95542,95543],{"class":331},"np.random.random()\n",[321,95545,95546],{"class":323,"line":1407},[321,95547,95548],{"class":390},"#生成一个随机的数目\n",[19,95550,95551],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95553,95554],{},"可以指定数组形状 size",[19,95556,95557],{},"①生成一维数组",[312,95559,95561],{"className":30523,"code":95560,"language":30525,"meta":30,"style":30},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[318,95562,95563,95568,95581,95586,95602],{"__ignoreMap":30},[321,95564,95565],{"class":323,"line":324},[321,95566,95567],{"class":390},"#random.random(size())\n",[321,95569,95570,95573,95575,95577,95579],{"class":323,"line":167},[321,95571,95572],{"class":331},"np.random.random(",[321,95574,31641],{"class":5423},[321,95576,377],{"class":327},[321,95578,651],{"class":380},[321,95580,338],{"class":331},[321,95582,95583],{"class":323,"line":200},[321,95584,95585],{"class":390},"#生成一位的五个元素\n",[321,95587,95588,95590,95592,95594,95596,95598,95600],{"class":323,"line":1401},[321,95589,570],{"class":331},[321,95591,377],{"class":327},[321,95593,95572],{"class":331},[321,95595,31641],{"class":5423},[321,95597,377],{"class":327},[321,95599,625],{"class":380},[321,95601,338],{"class":331},[321,95603,95604,95607],{"class":323,"line":1407},[321,95605,95606],{"class":331},"a.shape ",[321,95608,95609],{"class":390},"#输出数组形状\n",[19,95611,95612],{},"②生成二维数组",[312,95614,95616],{"className":30523,"code":95615,"language":30525,"meta":30,"style":30},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[318,95617,95618,95622,95644],{"__ignoreMap":30},[321,95619,95620],{"class":323,"line":324},[321,95621,93446],{"class":390},[321,95623,95624,95626,95628,95630,95632,95634,95636,95638,95640,95642],{"class":323,"line":167},[321,95625,93451],{"class":331},[321,95627,377],{"class":327},[321,95629,95572],{"class":331},[321,95631,31641],{"class":5423},[321,95633,377],{"class":327},[321,95635,332],{"class":331},[321,95637,625],{"class":380},[321,95639,710],{"class":331},[321,95641,651],{"class":380},[321,95643,30642],{"class":331},[321,95645,95646],{"class":323,"line":200},[321,95647,95648],{"class":390},"#生成四行五列的数组\n",[19,95650,95651],{},"③生成三维数组",[312,95653,95655],{"className":30523,"code":95654,"language":30525,"meta":30,"style":30},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[318,95656,95657,95662,95689],{"__ignoreMap":30},[321,95658,95659],{"class":323,"line":324},[321,95660,95661],{"class":390},"#三维数组\n",[321,95663,95664,95667,95669,95671,95673,95675,95677,95679,95681,95683,95685,95687],{"class":323,"line":167},[321,95665,95666],{"class":331},"aaa",[321,95668,377],{"class":327},[321,95670,95572],{"class":331},[321,95672,31641],{"class":5423},[321,95674,377],{"class":327},[321,95676,332],{"class":331},[321,95678,409],{"class":380},[321,95680,710],{"class":331},[321,95682,403],{"class":380},[321,95684,710],{"class":331},[321,95686,625],{"class":380},[321,95688,30642],{"class":331},[321,95690,95691],{"class":323,"line":200},[321,95692,95693],{"class":331},"aaa.shape\n",[292,95695,95697],{"id":95696},"_222-randint语句","2.2.2 randint语句",[312,95699,95701],{"className":30523,"code":95700,"language":30525,"meta":30,"style":30},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[318,95702,95703,95708],{"__ignoreMap":30},[321,95704,95705],{"class":323,"line":324},[321,95706,95707],{"class":390},"#生成随机的整数 random.randint(low,high,size)\n",[321,95709,95710,95712,95714,95716],{"class":323,"line":167},[321,95711,93259],{"class":331},[321,95713,651],{"class":380},[321,95715,13921],{"class":331},[321,95717,95718],{"class":390},"#0~5中的随机一个数\n",[19,95720,95557],{},[312,95722,95724],{"className":30523,"code":95723,"language":30525,"meta":30,"style":30},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[318,95725,95726,95731,95753],{"__ignoreMap":30},[321,95727,95728],{"class":323,"line":324},[321,95729,95730],{"class":390},"#一维\n",[321,95732,95733,95735,95737,95739,95741,95743,95745,95747,95749,95751],{"class":323,"line":167},[321,95734,93259],{"class":331},[321,95736,549],{"class":380},[321,95738,710],{"class":331},[321,95740,804],{"class":380},[321,95742,710],{"class":331},[321,95744,31641],{"class":5423},[321,95746,377],{"class":327},[321,95748,332],{"class":331},[321,95750,778],{"class":380},[321,95752,30642],{"class":331},[321,95754,95755],{"class":323,"line":200},[321,95756,95757],{"class":390},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95759,95612],{},[19,95761,95762],{},[28,95763],{"alt":30,"src":95764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95766,95651],{},[19,95768,95769],{},[28,95770],{"alt":30,"src":95771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[292,95773,95775],{"id":95774},"_222-rand语句","2.2.2 rand语句",[19,95777,95778],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[312,95780,95782],{"className":30523,"code":95781,"language":30525,"meta":30,"style":30},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[318,95783,95784,95797,95802],{"__ignoreMap":30},[321,95785,95786,95789,95791,95793,95795],{"class":323,"line":324},[321,95787,95788],{"class":331},"np.random.rand(",[321,95790,643],{"class":380},[321,95792,710],{"class":331},[321,95794,778],{"class":380},[321,95796,338],{"class":331},[321,95798,95799],{"class":323,"line":167},[321,95800,95801],{"class":390},"#第一个参数100：行数，表示有100个样本\n",[321,95803,95804],{"class":323,"line":200},[321,95805,95806],{"class":390},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95808,95810],{"id":95809},"_23-arange创建数组","2.3 arange()创建数组",[292,95812,95814],{"id":95813},"_231-函数语句","2.3.1 函数语句",[312,95816,95818],{"className":30523,"code":95817,"language":30525,"meta":30,"style":30},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[318,95819,95820,95834,95839,95844,95849,95854,95859,95864],{"__ignoreMap":30},[321,95821,95822,95825,95827,95829,95832],{"class":323,"line":324},[321,95823,95824],{"class":331},"numpy.arange([start,] stop[, step], ",[321,95826,93645],{"class":5423},[321,95828,377],{"class":327},[321,95830,95831],{"class":380},"None",[321,95833,338],{"class":331},[321,95835,95836],{"class":323,"line":167},[321,95837,95838],{"class":390},"#参数\n",[321,95840,95841],{"class":323,"line":200},[321,95842,95843],{"class":436},"\"\"\"\n",[321,95845,95846],{"class":323,"line":1401},[321,95847,95848],{"class":436},"start:起始值，可选，默认从 0 开始。\n",[321,95850,95851],{"class":323,"line":1407},[321,95852,95853],{"class":436},"stop:结束值（不包含该值）。\n",[321,95855,95856],{"class":323,"line":1421},[321,95857,95858],{"class":436},"step:步长，可选，默认是 1。可以为浮点数。\n",[321,95860,95861],{"class":323,"line":1427},[321,95862,95863],{"class":436},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[321,95865,95866],{"class":323,"line":1518},[321,95867,95843],{"class":436},[292,95869,95871],{"id":95870},"_232-实例","2.3.2 实例",[312,95873,95875],{"className":30523,"code":95874,"language":30525,"meta":30,"style":30},"#创建一维数组\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",[318,95876,95877,95881,95905,95910,95915,95919,95942,95946,95950,95955,95960],{"__ignoreMap":30},[321,95878,95879],{"class":323,"line":324},[321,95880,93250],{"class":390},[321,95882,95883,95885,95887,95889,95891,95893,95895,95897,95899,95901,95903],{"class":323,"line":167},[321,95884,93147],{"class":331},[321,95886,549],{"class":380},[321,95888,710],{"class":331},[321,95890,1057],{"class":380},[321,95892,710],{"class":331},[321,95894,549],{"class":380},[321,95896,710],{"class":331},[321,95898,93645],{"class":5423},[321,95900,377],{"class":327},[321,95902,335],{"class":380},[321,95904,338],{"class":331},[321,95906,95907],{"class":323,"line":200},[321,95908,95909],{"class":390},"#输出结果：\n",[321,95911,95912],{"class":323,"line":1401},[321,95913,95914],{"class":390},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[321,95916,95917],{"class":323,"line":1407},[321,95918,94092],{"class":390},[321,95920,95921,95924,95926,95928,95930,95933,95935,95937,95939],{"class":323,"line":1421},[321,95922,95923],{"class":331},"np.array([np.arange(",[321,95925,549],{"class":380},[321,95927,710],{"class":331},[321,95929,625],{"class":380},[321,95931,95932],{"class":331},"),np.arange(",[321,95934,625],{"class":380},[321,95936,710],{"class":331},[321,95938,701],{"class":380},[321,95940,95941],{"class":331},")])\n",[321,95943,95944],{"class":323,"line":1427},[321,95945,93709],{"class":390},[321,95947,95948],{"class":323,"line":1518},[321,95949,95843],{"class":436},[321,95951,95952],{"class":323,"line":1524},[321,95953,95954],{"class":436},"array([[1, 2, 3],\n",[321,95956,95957],{"class":323,"line":1536},[321,95958,95959],{"class":436},"       [4, 5, 6]])\n",[321,95961,95962],{"class":323,"line":1818},[321,95963,95843],{"class":436},[14,95965,95967],{"id":95966},"_24-生态分布","2.4 生态分布",[292,95969,95971],{"id":95970},"_241-标准正态分布","2.4.1 标准正态分布",[19,95973,95974],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,95976,95977],{},[28,95978],{"alt":30,"src":95979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[292,95981,95983],{"id":95982},"_242-常规正态分布","2.4.2 常规正态分布",[312,95985,95987],{"className":30523,"code":95986,"language":30525,"meta":30,"style":30},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[318,95988,95989,95994,95999,96004],{"__ignoreMap":30},[321,95990,95991],{"class":323,"line":324},[321,95992,95993],{"class":331},"random.normal(loc,scale,size)也可以生成正态分布\n",[321,95995,95996],{"class":323,"line":167},[321,95997,95998],{"class":390},"#loc:期望\n",[321,96000,96001],{"class":323,"line":200},[321,96002,96003],{"class":390},"#scale:方差\n",[321,96005,96006],{"class":323,"line":1401},[321,96007,96008],{"class":390},"#size:用于确定是几维的数列\n",[19,96010,96011],{},[28,96012],{"alt":30,"src":96013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96015,96017],{"id":96016},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96019,96020],{},"ndim:秩，维度个数",[19,96022,96023],{},"size:数组元素的个数",[19,96025,96026],{},"shape:数组的形状",[19,96028,96029],{},"dtype:数组元素的类型",[19,96031,96032],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96034,96035],{},"他们都是属性，通过数组.属性的形式来确定",[19,96037,96038],{},"如果需要输出多个可以通过以下方式：",[312,96040,96042],{"className":30523,"code":96041,"language":30525,"meta":30,"style":30},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[318,96043,96044],{"__ignoreMap":30},[321,96045,96046,96048],{"class":323,"line":324},[321,96047,30560],{"class":380},[321,96049,96050],{"class":331},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96052,96054],{"id":96053},"_26-其他方式创建数组","2.6 其他方式创建数组",[292,96056,96058],{"id":96057},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96060,96061],{},"①创建一维数组",[312,96063,96065],{"className":30523,"code":96064,"language":30525,"meta":30,"style":30},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[318,96066,96067,96076,96080,96085,96090],{"__ignoreMap":30},[321,96068,96069,96072,96074],{"class":323,"line":324},[321,96070,96071],{"class":331},"np.zeros(",[321,96073,778],{"class":380},[321,96075,338],{"class":331},[321,96077,96078],{"class":323,"line":167},[321,96079,95843],{"class":436},[321,96081,96082],{"class":323,"line":200},[321,96083,96084],{"class":436},"输出结果：\n",[321,96086,96087],{"class":323,"line":1401},[321,96088,96089],{"class":436},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[321,96091,96092],{"class":323,"line":1407},[321,96093,95843],{"class":436},[19,96095,96096],{},"上方代码等价于：",[312,96098,96100],{"className":30523,"code":96099,"language":30525,"meta":30,"style":30},"np.zeros(shape=(10))#创建10个元素的0数组\n",[318,96101,96102],{"__ignoreMap":30},[321,96103,96104,96106,96109,96111,96113,96115,96117],{"class":323,"line":324},[321,96105,96071],{"class":331},[321,96107,96108],{"class":5423},"shape",[321,96110,377],{"class":327},[321,96112,332],{"class":331},[321,96114,778],{"class":380},[321,96116,82916],{"class":331},[321,96118,96119],{"class":390},"#创建10个元素的0数组\n",[19,96121,96122],{},"也可以指定类型",[312,96124,96126],{"className":30523,"code":96125,"language":30525,"meta":30,"style":30},"#指定类型\nnp.zeros(5,dtype=int)\n",[318,96127,96128,96133],{"__ignoreMap":30},[321,96129,96130],{"class":323,"line":324},[321,96131,96132],{"class":390},"#指定类型\n",[321,96134,96135,96137,96139,96141,96143,96145,96147],{"class":323,"line":167},[321,96136,96071],{"class":331},[321,96138,651],{"class":380},[321,96140,710],{"class":331},[321,96142,93645],{"class":5423},[321,96144,377],{"class":327},[321,96146,335],{"class":380},[321,96148,338],{"class":331},[19,96150,96151],{},"②创建二维数组",[312,96153,96155],{"className":30523,"code":96154,"language":30525,"meta":30,"style":30},"np.zeros((3,4),dtype=int)\n",[318,96156,96157],{"__ignoreMap":30},[321,96158,96159,96162,96164,96166,96168,96170,96172,96174,96176],{"class":323,"line":324},[321,96160,96161],{"class":331},"np.zeros((",[321,96163,403],{"class":380},[321,96165,710],{"class":331},[321,96167,625],{"class":380},[321,96169,42401],{"class":331},[321,96171,93645],{"class":5423},[321,96173,377],{"class":327},[321,96175,335],{"class":380},[321,96177,338],{"class":331},[19,96179,96180],{},"③创建三维数组",[312,96182,96184],{"className":30523,"code":96183,"language":30525,"meta":30,"style":30},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[318,96185,96186,96191],{"__ignoreMap":30},[321,96187,96188],{"class":323,"line":324},[321,96189,96190],{"class":390},"#创建三维数组\n",[321,96192,96193,96195,96197,96199,96201,96203,96205,96207,96209,96211,96213],{"class":323,"line":167},[321,96194,96161],{"class":331},[321,96196,403],{"class":380},[321,96198,710],{"class":331},[321,96200,625],{"class":380},[321,96202,710],{"class":331},[321,96204,651],{"class":380},[321,96206,42401],{"class":331},[321,96208,93645],{"class":5423},[321,96210,377],{"class":327},[321,96212,335],{"class":380},[321,96214,338],{"class":331},[19,96216,96217],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[312,96219,96221],{"className":30523,"code":96220,"language":30525,"meta":30,"style":30},"#使用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",[318,96222,96223,96228,96243,96248,96253,96275],{"__ignoreMap":30},[321,96224,96225],{"class":323,"line":324},[321,96226,96227],{"class":390},"#使用zeros_like将创建的一维数组变成全0的数组\n",[321,96229,96230,96232,96234,96236,96238,96240],{"class":323,"line":167},[321,96231,570],{"class":331},[321,96233,377],{"class":327},[321,96235,93147],{"class":331},[321,96237,625],{"class":380},[321,96239,761],{"class":331},[321,96241,96242],{"class":390},"#这个得到的结果：一维数组0，1，2，3\n",[321,96244,96245],{"class":323,"line":200},[321,96246,96247],{"class":331},"np.zeros_like(a)\n",[321,96249,96250],{"class":323,"line":1401},[321,96251,96252],{"class":390},"#使用zeros_like将创建的二维数组变成全0的数组\n",[321,96254,96255,96257,96259,96261,96263,96265,96267,96269,96271,96273],{"class":323,"line":1407},[321,96256,93451],{"class":331},[321,96258,377],{"class":327},[321,96260,95572],{"class":331},[321,96262,31641],{"class":5423},[321,96264,377],{"class":327},[321,96266,332],{"class":331},[321,96268,625],{"class":380},[321,96270,710],{"class":331},[321,96272,651],{"class":380},[321,96274,30642],{"class":331},[321,96276,96277],{"class":323,"line":1421},[321,96278,96279],{"class":331},"np.zeros_like(aa)\n",[292,96281,96283],{"id":96282},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96285,96286],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[292,96288,96290],{"id":96289},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96292,96293],{},"①empty()用法",[312,96295,96297],{"className":30523,"code":96296,"language":30525,"meta":30,"style":30},"numpy.empty(shape,dtype=float,order='c')\n",[318,96298,96299],{"__ignoreMap":30},[321,96300,96301,96304,96306,96308,96310,96312,96314,96316,96318],{"class":323,"line":324},[321,96302,96303],{"class":331},"numpy.empty(shape,",[321,96305,93645],{"class":5423},[321,96307,377],{"class":327},[321,96309,371],{"class":380},[321,96311,710],{"class":331},[321,96313,95442],{"class":5423},[321,96315,377],{"class":327},[321,96317,76173],{"class":436},[321,96319,338],{"class":331},[19,96321,96322],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96324,96325],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96327,96328],{},[28,96329],{"alt":30,"src":96330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96332,96333],{},"②empty()用法",[312,96335,96337],{"className":30523,"code":96336,"language":30525,"meta":30,"style":30},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[318,96338,96339,96360,96372,96393,96398],{"__ignoreMap":30},[321,96340,96341,96343,96345,96348,96350,96352,96354,96356,96358],{"class":323,"line":324},[321,96342,1177],{"class":331},[321,96344,377],{"class":327},[321,96346,96347],{"class":331},"np.empty(",[321,96349,778],{"class":380},[321,96351,710],{"class":331},[321,96353,93645],{"class":5423},[321,96355,377],{"class":327},[321,96357,335],{"class":380},[321,96359,338],{"class":331},[321,96361,96362,96364,96366,96368,96370],{"class":323,"line":167},[321,96363,1152],{"class":331},[321,96365,377],{"class":327},[321,96367,93147],{"class":331},[321,96369,651],{"class":380},[321,96371,338],{"class":331},[321,96373,96374,96377,96379,96382,96384,96386,96389,96391],{"class":323,"line":200},[321,96375,96376],{"class":331},"np.add(",[321,96378,409],{"class":380},[321,96380,96381],{"class":331},",x,",[321,96383,93199],{"class":5423},[321,96385,377],{"class":327},[321,96387,96388],{"class":331},"y[:",[321,96390,651],{"class":380},[321,96392,4863],{"class":331},[321,96394,96395],{"class":323,"line":1401},[321,96396,96397],{"class":390},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[321,96399,96400],{"class":323,"line":1407},[321,96401,96402],{"class":331},"y\n",[19,96404,11721],{},[19,96406,96407],{},[28,96408],{"alt":30,"src":96409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[312,96411,96413],{"className":30523,"code":96412,"language":30525,"meta":30,"style":30},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[318,96414,96415,96431,96451,96466],{"__ignoreMap":30},[321,96416,96417,96419,96421,96423,96425,96427,96429],{"class":323,"line":324},[321,96418,1152],{"class":331},[321,96420,377],{"class":327},[321,96422,93147],{"class":331},[321,96424,549],{"class":380},[321,96426,710],{"class":331},[321,96428,676],{"class":380},[321,96430,338],{"class":331},[321,96432,96433,96435,96437,96439,96441,96443,96445,96447,96449],{"class":323,"line":167},[321,96434,1177],{"class":331},[321,96436,377],{"class":327},[321,96438,96347],{"class":331},[321,96440,651],{"class":380},[321,96442,710],{"class":331},[321,96444,93645],{"class":5423},[321,96446,377],{"class":327},[321,96448,335],{"class":380},[321,96450,338],{"class":331},[321,96452,96453,96456,96458,96460,96462,96464],{"class":323,"line":200},[321,96454,96455],{"class":331},"np.add(x,",[321,96457,409],{"class":380},[321,96459,710],{"class":331},[321,96461,93199],{"class":5423},[321,96463,377],{"class":327},[321,96465,93594],{"class":331},[321,96467,96468],{"class":323,"line":1401},[321,96469,96470],{"class":390},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96472,96473],{},"③empty_like()",[19,96475,96476],{},[481,96477,96478,96479,96484],{},"创建一个",[481,96480,96481],{},[481,96482,96483],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96486,96487,96490],{},[318,96488,96489],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96492,96493],{},[28,96494],{"alt":30,"src":96495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[292,96497,96499],{"id":96498},"_264-用法","2.6.4 ？？用法",[19,96501,96502],{},"当想查看一个函数的参数时，可以通过？？来实现",[312,96504,96506],{"className":30523,"code":96505,"language":30525,"meta":30,"style":30},"np.full??\n",[318,96507,96508],{"__ignoreMap":30},[321,96509,96510,96513],{"class":323,"line":324},[321,96511,96512],{"class":331},"np.full",[321,96514,96515],{"class":77548},"??\n",[292,96517,96519],{"id":96518},"_265-full创建数组","2.6.5 full()创建数组",[312,96521,96523],{"className":30523,"code":96522,"language":30525,"meta":30,"style":30},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[318,96524,96525,96530],{"__ignoreMap":30},[321,96526,96527],{"class":323,"line":324},[321,96528,96529],{"class":331},"full(shape,fill_value)\n",[321,96531,96532],{"class":323,"line":167},[321,96533,96534],{"class":331},"创建全为某个指定值的数组\n",[19,96536,94675],{},[312,96538,96540],{"className":30523,"code":96539,"language":30525,"meta":30,"style":30},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[318,96541,96542,96547],{"__ignoreMap":30},[321,96543,96544],{"class":323,"line":324},[321,96545,96546],{"class":390},"#创建一个一维数组,以20进行填充\n",[321,96548,96549,96552,96554,96556,96558],{"class":323,"line":167},[321,96550,96551],{"class":331},"np.full(",[321,96553,778],{"class":380},[321,96555,710],{"class":331},[321,96557,1032],{"class":380},[321,96559,338],{"class":331},[19,96561,93436],{},[312,96563,96565],{"className":30523,"code":96564,"language":30525,"meta":30,"style":30},"#创建二维数组\nnp.full((3,5),11)\n",[318,96566,96567,96571],{"__ignoreMap":30},[321,96568,96569],{"class":323,"line":324},[321,96570,94092],{"class":390},[321,96572,96573,96576,96578,96580,96582,96584,96586],{"class":323,"line":167},[321,96574,96575],{"class":331},"np.full((",[321,96577,403],{"class":380},[321,96579,710],{"class":331},[321,96581,651],{"class":380},[321,96583,42401],{"class":331},[321,96585,804],{"class":380},[321,96587,338],{"class":331},[19,96589,96590],{},"③full_like用法",[19,96592,96593],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96595,96596],{},"这里是指定填充而已",[312,96598,96600],{"className":30523,"code":96599,"language":30525,"meta":30,"style":30},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[318,96601,96602,96607,96631,96636],{"__ignoreMap":30},[321,96603,96604],{"class":323,"line":324},[321,96605,96606],{"class":390},"#创建一个指定形状数组\n",[321,96608,96609,96611,96613,96615,96617,96619,96621,96623,96625,96627,96629],{"class":323,"line":167},[321,96610,570],{"class":331},[321,96612,377],{"class":327},[321,96614,93147],{"class":331},[321,96616,549],{"class":380},[321,96618,710],{"class":331},[321,96620,657],{"class":380},[321,96622,93152],{"class":331},[321,96624,625],{"class":380},[321,96626,710],{"class":331},[321,96628,752],{"class":380},[321,96630,338],{"class":331},[321,96632,96633],{"class":323,"line":200},[321,96634,96635],{"class":390},"#进行指定填充\n",[321,96637,96638,96641,96643],{"class":323,"line":1401},[321,96639,96640],{"class":331},"np.full_like(a,",[321,96642,778],{"class":380},[321,96644,338],{"class":331},[19,96646,11721],{},[19,96648,96649],{},[28,96650],{"alt":30,"src":96651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[292,96653,96655],{"id":96654},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22205,96657,96659],{"id":96658},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[312,96661,96663],{"className":30523,"code":96662,"language":30525,"meta":30,"style":30},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[318,96664,96665,96682],{"__ignoreMap":30},[321,96666,96667,96670,96672,96674,96676,96678,96680],{"class":323,"line":324},[321,96668,96669],{"class":331},"np.eye(",[321,96671,625],{"class":380},[321,96673,710],{"class":331},[321,96675,93645],{"class":5423},[321,96677,377],{"class":327},[321,96679,335],{"class":380},[321,96681,338],{"class":331},[321,96683,96684],{"class":323,"line":167},[321,96685,96686],{"class":390},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22205,96688,96690],{"id":96689},"_2662-法2identity","2.6.6.2 法2：identity()",[312,96692,96694],{"className":30523,"code":96693,"language":30525,"meta":30,"style":30},"#identity()\nnp.identity(5,dtype=int)\n",[318,96695,96696,96701],{"__ignoreMap":30},[321,96697,96698],{"class":323,"line":324},[321,96699,96700],{"class":390},"#identity()\n",[321,96702,96703,96706,96708,96710,96712,96714,96716],{"class":323,"line":167},[321,96704,96705],{"class":331},"np.identity(",[321,96707,651],{"class":380},[321,96709,710],{"class":331},[321,96711,93645],{"class":5423},[321,96713,377],{"class":327},[321,96715,335],{"class":380},[321,96717,338],{"class":331},[19,96719,96720],{},"两个函数是有区别的",[19,96722,96723],{},[28,96724],{"alt":30,"src":96725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96727,96728],{},[28,96729],{"alt":30,"src":96730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[312,96732,96734],{"className":30523,"code":96733,"language":30525,"meta":30,"style":30},"# 创建一个 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",[318,96735,96736,96741,96753,96758,96763,96768,96773,96777,96782,96802,96806,96811,96816],{"__ignoreMap":30},[321,96737,96738],{"class":323,"line":324},[321,96739,96740],{"class":390},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[321,96742,96743,96745,96747,96749,96751],{"class":323,"line":167},[321,96744,96669],{"class":331},[321,96746,403],{"class":380},[321,96748,12642],{"class":331},[321,96750,625],{"class":380},[321,96752,338],{"class":331},[321,96754,96755],{"class":323,"line":200},[321,96756,96757],{"class":390},"# 输出:\n",[321,96759,96760],{"class":323,"line":1401},[321,96761,96762],{"class":390},"# [[1. 0. 0. 0.]\n",[321,96764,96765],{"class":323,"line":1407},[321,96766,96767],{"class":390},"#  [0. 1. 0. 0.]\n",[321,96769,96770],{"class":323,"line":1421},[321,96771,96772],{"class":390},"#  [0. 0. 1. 0.]]\n",[321,96774,96775],{"class":323,"line":1427},[321,96776,2606],{"emptyLinePlaceholder":251},[321,96778,96779],{"class":323,"line":1518},[321,96780,96781],{"class":390},"# 对角线向上偏移1\n",[321,96783,96784,96786,96788,96790,96792,96794,96796,96798,96800],{"class":323,"line":1524},[321,96785,96669],{"class":331},[321,96787,403],{"class":380},[321,96789,12642],{"class":331},[321,96791,625],{"class":380},[321,96793,12642],{"class":331},[321,96795,825],{"class":5423},[321,96797,377],{"class":327},[321,96799,549],{"class":380},[321,96801,338],{"class":331},[321,96803,96804],{"class":323,"line":1536},[321,96805,96757],{"class":390},[321,96807,96808],{"class":323,"line":1818},[321,96809,96810],{"class":390},"# [[0. 1. 0. 0.]\n",[321,96812,96813],{"class":323,"line":1823},[321,96814,96815],{"class":390},"#  [0. 0. 1. 0.]\n",[321,96817,96818],{"class":323,"line":1829},[321,96819,96820],{"class":390},"#  [0. 0. 0. 1.]]\n",[292,96822,96824],{"id":96823},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[312,96826,96828],{"className":30523,"code":96827,"language":30525,"meta":30,"style":30},"#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",[318,96829,96830,96835,96839,96844,96849,96854,96859,96864,96869,96874,96879],{"__ignoreMap":30},[321,96831,96832],{"class":323,"line":324},[321,96833,96834],{"class":390},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[321,96836,96837],{"class":323,"line":167},[321,96838,95843],{"class":436},[321,96840,96841],{"class":323,"line":200},[321,96842,96843],{"class":436},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[321,96845,96846],{"class":323,"line":1401},[321,96847,96848],{"class":436},"参数介绍：\n",[321,96850,96851],{"class":323,"line":1407},[321,96852,96853],{"class":436},"start：序列的起始值\n",[321,96855,96856],{"class":323,"line":1421},[321,96857,96858],{"class":436},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[321,96860,96861],{"class":323,"line":1427},[321,96862,96863],{"class":436},"num：要生长的等步长的样本数量，默认为50\n",[321,96865,96866],{"class":323,"line":1518},[321,96867,96868],{"class":436},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[321,96870,96871],{"class":323,"line":1524},[321,96872,96873],{"class":436},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[321,96875,96876],{"class":323,"line":1536},[321,96877,96878],{"class":436},"dtype：ndarry的数据类型\n",[321,96880,96881],{"class":323,"line":1818},[321,96882,95843],{"class":436},[19,96884,96885],{},[28,96886],{"alt":30,"src":96887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,96889,96890],{},"这里num=是可以省略的",[19,96892,96893],{},"也就是下方两行代码结果是一模一样的",[312,96895,96897],{"className":30523,"code":96896,"language":30525,"meta":30,"style":30},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[318,96898,96899,96916],{"__ignoreMap":30},[321,96900,96901,96904,96906,96908,96910,96912,96914],{"class":323,"line":324},[321,96902,96903],{"class":331},"np.linspace(",[321,96905,549],{"class":380},[321,96907,710],{"class":331},[321,96909,651],{"class":380},[321,96911,710],{"class":331},[321,96913,651],{"class":380},[321,96915,338],{"class":331},[321,96917,96918,96920,96922,96924,96926,96928,96930,96932,96934],{"class":323,"line":167},[321,96919,96903],{"class":331},[321,96921,549],{"class":380},[321,96923,710],{"class":331},[321,96925,651],{"class":380},[321,96927,710],{"class":331},[321,96929,1871],{"class":5423},[321,96931,377],{"class":327},[321,96933,651],{"class":380},[321,96935,338],{"class":331},[292,96937,96939],{"id":96938},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[312,96941,96943],{"className":30523,"code":96942,"language":30525,"meta":30,"style":30},"#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",[318,96944,96945,96950,96954,96959,96964,96969,96974,96978,96983,96988,96992],{"__ignoreMap":30},[321,96946,96947],{"class":323,"line":324},[321,96948,96949],{"class":390},"#logspace函数用于创建一个等比数列，格式如下：\n",[321,96951,96952],{"class":323,"line":167},[321,96953,95843],{"class":436},[321,96955,96956],{"class":323,"line":200},[321,96957,96958],{"class":436},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[321,96960,96961],{"class":323,"line":1401},[321,96962,96963],{"class":436},"参数为：\n",[321,96965,96966],{"class":323,"line":1407},[321,96967,96968],{"class":436},"start:序列的起始位置为：base**start\n",[321,96970,96971],{"class":323,"line":1421},[321,96972,96973],{"class":436},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[321,96975,96976],{"class":323,"line":1427},[321,96977,96863],{"class":436},[321,96979,96980],{"class":323,"line":1518},[321,96981,96982],{"class":436},"endpoint：是否包含 stop 这个值，默认是 True\n",[321,96984,96985],{"class":323,"line":1524},[321,96986,96987],{"class":436},"base：对数的底数，默认是 10（常见对数）\n",[321,96989,96990],{"class":323,"line":1536},[321,96991,96878],{"class":436},[321,96993,96994],{"class":323,"line":1818},[321,96995,95843],{"class":436},[19,96997,96998],{},[28,96999],{"alt":30,"src":97000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97002,97003],{},"logspace()函数中的num参数也是可以不写num=的",[19,97005,97006],{},"endpoint是不可以省略的",[5333,97008,97009],{},"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":30,"searchDepth":167,"depth":167,"links":97011},[97012,97016,97021,97025,97029,97030],{"id":95401,"depth":167,"text":95402,"children":97013},[97014,97015],{"id":95405,"depth":200,"text":95406},{"id":95478,"depth":200,"text":95479},{"id":95510,"depth":167,"text":95511,"children":97017},[97018,97019,97020],{"id":95514,"depth":200,"text":95515},{"id":95696,"depth":200,"text":95697},{"id":95774,"depth":200,"text":95775},{"id":95809,"depth":167,"text":95810,"children":97022},[97023,97024],{"id":95813,"depth":200,"text":95814},{"id":95870,"depth":200,"text":95871},{"id":95966,"depth":167,"text":95967,"children":97026},[97027,97028],{"id":95970,"depth":200,"text":95971},{"id":95982,"depth":200,"text":95983},{"id":96016,"depth":167,"text":96017},{"id":96053,"depth":167,"text":96054,"children":97031},[97032,97033,97034,97035,97036,97037,97038,97039],{"id":96057,"depth":200,"text":96058},{"id":96282,"depth":200,"text":96283},{"id":96289,"depth":200,"text":96290},{"id":96498,"depth":200,"text":96499},{"id":96518,"depth":200,"text":96519},{"id":96654,"depth":200,"text":96655},{"id":96823,"depth":200,"text":96824},{"id":96938,"depth":200,"text":96939},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95393,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97046,"title":97047,"body":97048,"description":23584,"extension":249,"meta":97141,"navigation":251,"path":97142,"seo":97143,"stem":97144,"__hash__":97145},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97049,"toc":97139},[97050,97053,97056,97059,97062,97065,97068,97071,97074,97077,97080,97083,97085,97088,97091,97096,97099,97102,97136],[10,97051,97047],{"id":97052},"_20魔法命令mprun",[19,97054,97055],{},"逐行分析数据内存的使用情况",[19,97057,97058],{},"语法格式：",[19,97060,97061],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97063,97064],{},"分析结果列如下：",[19,97066,97067],{},"Line行号",[19,97069,97070],{},"Mem usage内存使用大小",[19,97072,97073],{},"increment内存增量",[19,97075,97076],{},"Line content代码内容",[19,97078,97079],{},"补充说明：",[19,97081,97082],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97084,95348],{},[19,97086,97087],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97089,97090],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97092,97093],{},[28,97094],{"alt":30,"src":97095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97097,97098],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97100,97101],{},"这时候需要重新加载模块",[312,97103,97105],{"className":30523,"code":97104,"language":30525,"meta":30,"style":30},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[318,97106,97107,97112,97119,97124],{"__ignoreMap":30},[321,97108,97109],{"class":323,"line":324},[321,97110,97111],{"class":390},"#重新加载模块\n",[321,97113,97114,97116],{"class":323,"line":167},[321,97115,30537],{"class":327},[321,97117,97118],{"class":331}," importlib\n",[321,97120,97121],{"class":323,"line":200},[321,97122,97123],{"class":331},"importlib.reload(mprun_test)\n",[321,97125,97126,97128,97131,97133],{"class":323,"line":1401},[321,97127,660],{"class":327},[321,97129,97130],{"class":331},"mprun ",[321,97132,864],{"class":327},[321,97134,97135],{"class":331},"f mprun_test.fun_test mprun_test.fun_test()\n",[5333,97137,97138],{},"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":30,"searchDepth":167,"depth":167,"links":97140},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97047,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97147,"title":97148,"body":97149,"description":23584,"extension":249,"meta":97166,"navigation":251,"path":97167,"seo":97168,"stem":97169,"__hash__":97170},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97150,"toc":97164},[97151,97154,97159],[10,97152,97148],{"id":97153},"_3一维数组的索引和切片",[19,97155,97156],{},[28,97157],{"alt":30,"src":97158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97160,97161],{},[28,97162],{"alt":30,"src":97163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":30,"searchDepth":167,"depth":167,"links":97165},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97148,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97172,"title":97173,"body":97174,"description":23584,"extension":249,"meta":97657,"navigation":251,"path":97658,"seo":97659,"stem":97660,"__hash__":97661},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97175,"toc":97655},[97176,97179,97182,97187,97220,97223,97261,97264,97298,97301,97406,97409,97446,97449,97550,97553,97604,97607,97649,97652],[10,97177,97173],{"id":97178},"_4二维数组的索引与切片",[19,97180,97181],{},"①获取指定单个元素",[19,97183,97184],{},[28,97185],{"alt":30,"src":97186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[312,97188,97190],{"className":30523,"code":97189,"language":30525,"meta":30,"style":30},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[318,97191,97192,97197,97202,97207],{"__ignoreMap":30},[321,97193,97194],{"class":323,"line":324},[321,97195,97196],{"class":390},"#获取元素9\n",[321,97198,97199],{"class":323,"line":167},[321,97200,97201],{"class":390},"#先获取所在行，再获取所在列\n",[321,97203,97204],{"class":323,"line":200},[321,97205,97206],{"class":390},"#数组[行索引号，列索引号]\n",[321,97208,97209,97212,97214,97216,97218],{"class":323,"line":1401},[321,97210,97211],{"class":331},"a[",[321,97213,549],{"class":380},[321,97215,710],{"class":331},[321,97217,409],{"class":380},[321,97219,33391],{"class":331},[19,97221,97222],{},"②获取整行元素",[312,97224,97226],{"className":30523,"code":97225,"language":30525,"meta":30,"style":30},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[318,97227,97228,97233,97238,97246,97251],{"__ignoreMap":30},[321,97229,97230],{"class":323,"line":324},[321,97231,97232],{"class":390},"#获取整行 数组[行索引号]\n",[321,97234,97235],{"class":323,"line":167},[321,97236,97237],{"class":390},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[321,97239,97240,97242,97244],{"class":323,"line":200},[321,97241,97211],{"class":331},[321,97243,409],{"class":380},[321,97245,33391],{"class":331},[321,97247,97248],{"class":323,"line":1401},[321,97249,97250],{"class":390},"#也可以负索引获取一行\n",[321,97252,97253,97255,97257,97259],{"class":323,"line":1407},[321,97254,97211],{"class":331},[321,97256,864],{"class":327},[321,97258,549],{"class":380},[321,97260,33391],{"class":331},[19,97262,97263],{},"③获取整列元素",[312,97265,97267],{"className":30523,"code":97266,"language":30525,"meta":30,"style":30},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[318,97268,97269,97274,97283,97288],{"__ignoreMap":30},[321,97270,97271],{"class":323,"line":324},[321,97272,97273],{"class":390},"#获取整列 数组名[:,列索引]\n",[321,97275,97276,97279,97281],{"class":323,"line":167},[321,97277,97278],{"class":331},"a[:,",[321,97280,409],{"class":380},[321,97282,33391],{"class":331},[321,97284,97285],{"class":323,"line":200},[321,97286,97287],{"class":390},"#也可以负索引获取一列\n",[321,97289,97290,97292,97294,97296],{"class":323,"line":1401},[321,97291,97278],{"class":331},[321,97293,864],{"class":327},[321,97295,549],{"class":380},[321,97297,33391],{"class":331},[19,97299,97300],{},"④部分行部分列的元素",[312,97302,97304],{"className":30523,"code":97303,"language":30525,"meta":30,"style":30},"#部分行部分列 数组名[行切片，列切片]\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",[318,97305,97306,97311,97321,97325,97329,97334,97339,97343,97355,97359,97363,97368,97373,97378,97383,97387,97392],{"__ignoreMap":30},[321,97307,97308],{"class":323,"line":324},[321,97309,97310],{"class":390},"#部分行部分列 数组名[行切片，列切片]\n",[321,97312,97313,97316,97318],{"class":323,"line":167},[321,97314,97315],{"class":331},"a[:",[321,97317,409],{"class":380},[321,97319,97320],{"class":331},",:]\n",[321,97322,97323],{"class":323,"line":200},[321,97324,93709],{"class":390},[321,97326,97327],{"class":323,"line":1401},[321,97328,94073],{"class":436},[321,97330,97331],{"class":323,"line":1407},[321,97332,97333],{"class":436},"array([[ 1,  2,  3,  4,  5,  6],\n",[321,97335,97336],{"class":323,"line":1421},[321,97337,97338],{"class":436},"       [ 7,  8,  9, 10, 11, 12]])\n",[321,97340,97341],{"class":323,"line":1427},[321,97342,94073],{"class":436},[321,97344,97345,97347,97349,97351,97353],{"class":323,"line":1518},[321,97346,97278],{"class":331},[321,97348,549],{"class":380},[321,97350,1191],{"class":331},[321,97352,625],{"class":380},[321,97354,33391],{"class":331},[321,97356,97357],{"class":323,"line":1524},[321,97358,93709],{"class":390},[321,97360,97361],{"class":323,"line":1536},[321,97362,94073],{"class":436},[321,97364,97365],{"class":323,"line":1818},[321,97366,97367],{"class":436},"array([[ 2,  3,  4],\n",[321,97369,97370],{"class":323,"line":1823},[321,97371,97372],{"class":436},"       [ 8,  9, 10],\n",[321,97374,97375],{"class":323,"line":1829},[321,97376,97377],{"class":436},"       [14, 15, 16],\n",[321,97379,97380],{"class":323,"line":1834},[321,97381,97382],{"class":436},"       [20, 21, 22]])\n",[321,97384,97385],{"class":323,"line":1848},[321,97386,94073],{"class":436},[321,97388,97389],{"class":323,"line":1853},[321,97390,97391],{"class":390},"#对列行同时进行切片，使用了step参数\n",[321,97393,97394,97397,97399,97402,97404],{"class":323,"line":1859},[321,97395,97396],{"class":331},"a[::",[321,97398,409],{"class":380},[321,97400,97401],{"class":331},",::",[321,97403,409],{"class":380},[321,97405,33391],{"class":331},[19,97407,97408],{},"⑤同时获取两个元素",[312,97410,97412],{"className":30523,"code":97411,"language":30525,"meta":30,"style":30},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[318,97413,97414,97419,97424],{"__ignoreMap":30},[321,97415,97416],{"class":323,"line":324},[321,97417,97418],{"class":390},"#同时获取第三行第二列，第四行第一列\n",[321,97420,97421],{"class":323,"line":167},[321,97422,97423],{"class":390},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[321,97425,97426,97429,97431,97433,97435,97437,97439,97441,97443],{"class":323,"line":200},[321,97427,97428],{"class":331},"a[(",[321,97430,409],{"class":380},[321,97432,710],{"class":331},[321,97434,403],{"class":380},[321,97436,42392],{"class":331},[321,97438,549],{"class":380},[321,97440,710],{"class":331},[321,97442,523],{"class":380},[321,97444,97445],{"class":331},")]\n",[19,97447,97448],{},"⑥切片，对行进行反向获取",[312,97450,97452],{"className":30523,"code":97451,"language":30525,"meta":30,"style":30},"#切片 对所有行进行反向获取\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",[318,97453,97454,97459,97469,97473,97477,97482,97487,97492,97497,97501,97506,97522,97526,97531,97536,97541,97546],{"__ignoreMap":30},[321,97455,97456],{"class":323,"line":324},[321,97457,97458],{"class":390},"#切片 对所有行进行反向获取\n",[321,97460,97461,97463,97465,97467],{"class":323,"line":167},[321,97462,97396],{"class":331},[321,97464,864],{"class":327},[321,97466,549],{"class":380},[321,97468,33391],{"class":331},[321,97470,97471],{"class":323,"line":200},[321,97472,93709],{"class":390},[321,97474,97475],{"class":323,"line":1401},[321,97476,94073],{"class":436},[321,97478,97479],{"class":323,"line":1407},[321,97480,97481],{"class":436},"array([[19, 20, 21, 22, 23, 24],\n",[321,97483,97484],{"class":323,"line":1421},[321,97485,97486],{"class":436},"       [13, 14, 15, 16, 17, 18],\n",[321,97488,97489],{"class":323,"line":1427},[321,97490,97491],{"class":436},"       [ 7,  8,  9, 10, 11, 12],\n",[321,97493,97494],{"class":323,"line":1518},[321,97495,97496],{"class":436},"       [ 1,  2,  3,  4,  5,  6]])\n",[321,97498,97499],{"class":323,"line":1524},[321,97500,94073],{"class":436},[321,97502,97503],{"class":323,"line":1536},[321,97504,97505],{"class":390},"#对行列都进行反向切片获取\n",[321,97507,97508,97510,97512,97514,97516,97518,97520],{"class":323,"line":1818},[321,97509,97396],{"class":331},[321,97511,864],{"class":327},[321,97513,549],{"class":380},[321,97515,97401],{"class":331},[321,97517,864],{"class":327},[321,97519,549],{"class":380},[321,97521,33391],{"class":331},[321,97523,97524],{"class":323,"line":1823},[321,97525,94073],{"class":436},[321,97527,97528],{"class":323,"line":1829},[321,97529,97530],{"class":436},"array([[24, 23, 22, 21, 20, 19],\n",[321,97532,97533],{"class":323,"line":1834},[321,97534,97535],{"class":436},"       [18, 17, 16, 15, 14, 13],\n",[321,97537,97538],{"class":323,"line":1848},[321,97539,97540],{"class":436},"       [12, 11, 10,  9,  8,  7],\n",[321,97542,97543],{"class":323,"line":1853},[321,97544,97545],{"class":436},"       [ 6,  5,  4,  3,  2,  1]])\n",[321,97547,97548],{"class":323,"line":1859},[321,97549,94073],{"class":436},[19,97551,97552],{},"⑦修改元素",[312,97554,97556],{"className":30523,"code":97555,"language":30525,"meta":30,"style":30},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[318,97557,97558,97563,97581,97586],{"__ignoreMap":30},[321,97559,97560],{"class":323,"line":324},[321,97561,97562],{"class":390},"#获取前两行和前两列\n",[321,97564,97565,97568,97570,97572,97574,97577,97579],{"class":323,"line":167},[321,97566,97567],{"class":331},"sub_a",[321,97569,377],{"class":327},[321,97571,97315],{"class":331},[321,97573,409],{"class":380},[321,97575,97576],{"class":331},",:",[321,97578,409],{"class":380},[321,97580,33391],{"class":331},[321,97582,97583],{"class":323,"line":200},[321,97584,97585],{"class":390},"#修改sub_a第一个元素的值\n",[321,97587,97588,97591,97593,97595,97597,97599,97601],{"class":323,"line":1401},[321,97589,97590],{"class":331},"sub_a[",[321,97592,523],{"class":380},[321,97594,710],{"class":331},[321,97596,523],{"class":380},[321,97598,1272],{"class":331},[321,97600,377],{"class":327},[321,97602,97603],{"class":380},"100\n",[19,97605,97606],{},"⑧数组复制copy()",[312,97608,97610],{"className":30523,"code":97609,"language":30525,"meta":30,"style":30},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[318,97611,97612,97617,97627,97632],{"__ignoreMap":30},[321,97613,97614],{"class":323,"line":324},[321,97615,97616],{"class":390},"#数组复制\n",[321,97618,97619,97622,97624],{"class":323,"line":167},[321,97620,97621],{"class":331},"copy_a",[321,97623,377],{"class":327},[321,97625,97626],{"class":331},"np.copy(sub_a)\n",[321,97628,97629],{"class":323,"line":200},[321,97630,97631],{"class":390},"#修改copy_a后不影响原数组\n",[321,97633,97634,97637,97639,97641,97643,97645,97647],{"class":323,"line":1401},[321,97635,97636],{"class":331},"copy_a[",[321,97638,523],{"class":380},[321,97640,710],{"class":331},[321,97642,523],{"class":380},[321,97644,1272],{"class":331},[321,97646,377],{"class":327},[321,97648,97603],{"class":380},[19,97650,97651],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5333,97653,97654],{},"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":30,"searchDepth":167,"depth":167,"links":97656},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97173,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97663,"title":97664,"body":97665,"description":23584,"extension":249,"meta":98157,"navigation":251,"path":98158,"seo":98159,"stem":98160,"__hash__":98161},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97666,"toc":98149},[97667,97670,97674,97677,97680,97733,97736,97761,97764,97783,97803,97806,97822,97826,97872,97876,97918,97922,97925,97928,97931,97934,97937,97999,98059,98063,98066,98123,98127,98132,98141,98146],[10,97668,97664],{"id":97669},"_5改变数组的维度",[14,97671,97673],{"id":97672},"_51-使用reshape","5.1 使用reshape()",[19,97675,97676],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97678,97679],{},"①一维数组转换为二维数组",[312,97681,97683],{"className":30523,"code":97682,"language":30525,"meta":30,"style":30},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[318,97684,97685,97701,97706,97711,97716],{"__ignoreMap":30},[321,97686,97687,97689,97691,97693,97695,97697,97699],{"class":323,"line":324},[321,97688,570],{"class":331},[321,97690,377],{"class":327},[321,97692,93147],{"class":331},[321,97694,549],{"class":380},[321,97696,710],{"class":331},[321,97698,855],{"class":380},[321,97700,338],{"class":331},[321,97702,97703],{"class":323,"line":167},[321,97704,97705],{"class":390},"#将一维数组进行转换\n",[321,97707,97708],{"class":323,"line":200},[321,97709,97710],{"class":390},"#注意点：元素个数不可以变\n",[321,97712,97713],{"class":323,"line":1401},[321,97714,97715],{"class":390},"#转换维度要保持一致，不一致就异常！！！\n",[321,97717,97718,97720,97722,97725,97727,97729,97731],{"class":323,"line":1407},[321,97719,93451],{"class":331},[321,97721,377],{"class":327},[321,97723,97724],{"class":331},"a.reshape(",[321,97726,409],{"class":380},[321,97728,710],{"class":331},[321,97730,676],{"class":380},[321,97732,338],{"class":331},[19,97734,97735],{},"②一维数组转换为三维数组",[312,97737,97739],{"className":30523,"code":97738,"language":30525,"meta":30,"style":30},"aaa=a.reshape(2,3,2)\n",[318,97740,97741],{"__ignoreMap":30},[321,97742,97743,97745,97747,97749,97751,97753,97755,97757,97759],{"class":323,"line":324},[321,97744,95666],{"class":331},[321,97746,377],{"class":327},[321,97748,97724],{"class":331},[321,97750,409],{"class":380},[321,97752,710],{"class":331},[321,97754,403],{"class":380},[321,97756,710],{"class":331},[321,97758,409],{"class":380},[321,97760,338],{"class":331},[19,97762,97763],{},"③二维数组转化为一维数组",[312,97765,97767],{"className":30523,"code":97766,"language":30525,"meta":30,"style":30},"#知道元素个数：\naa.reshape(12)\n",[318,97768,97769,97774],{"__ignoreMap":30},[321,97770,97771],{"class":323,"line":324},[321,97772,97773],{"class":390},"#知道元素个数：\n",[321,97775,97776,97779,97781],{"class":323,"line":167},[321,97777,97778],{"class":331},"aa.reshape(",[321,97780,830],{"class":380},[321,97782,338],{"class":331},[312,97784,97786],{"className":30523,"code":97785,"language":30525,"meta":30,"style":30},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[318,97787,97788,97793],{"__ignoreMap":30},[321,97789,97790],{"class":323,"line":324},[321,97791,97792],{"class":390},"#不知道元素个数，参数传递-1\n",[321,97794,97795,97797,97799,97801],{"class":323,"line":167},[321,97796,97778],{"class":331},[321,97798,864],{"class":327},[321,97800,549],{"class":380},[321,97802,338],{"class":331},[19,97804,97805],{},"④三维数组转换为一维数组",[312,97807,97809],{"className":30523,"code":97808,"language":30525,"meta":30,"style":30},"aaa.reshape(-1)\n",[318,97810,97811],{"__ignoreMap":30},[321,97812,97813,97816,97818,97820],{"class":323,"line":324},[321,97814,97815],{"class":331},"aaa.reshape(",[321,97817,864],{"class":327},[321,97819,549],{"class":380},[321,97821,338],{"class":331},[14,97823,97825],{"id":97824},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[312,97827,97829],{"className":30523,"code":97828,"language":30525,"meta":30,"style":30},"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",[318,97830,97831,97858,97863,97867],{"__ignoreMap":30},[321,97832,97833,97835,97837,97839,97841,97843,97845,97847,97849,97851,97853,97855],{"class":323,"line":324},[321,97834,93451],{"class":331},[321,97836,377],{"class":327},[321,97838,93147],{"class":331},[321,97840,549],{"class":380},[321,97842,710],{"class":331},[321,97844,855],{"class":380},[321,97846,93152],{"class":331},[321,97848,409],{"class":380},[321,97850,710],{"class":331},[321,97852,676],{"class":380},[321,97854,761],{"class":331},[321,97856,97857],{"class":390},"#转换为2行6列的数组\n",[321,97859,97860],{"class":323,"line":167},[321,97861,97862],{"class":331},"aa.revel()\n",[321,97864,97865],{"class":323,"line":200},[321,97866,93709],{"class":390},[321,97868,97869],{"class":323,"line":1401},[321,97870,97871],{"class":390},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97873,97875],{"id":97874},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[312,97877,97879],{"className":30523,"code":97878,"language":30525,"meta":30,"style":30},"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",[318,97880,97881,97905,97910,97914],{"__ignoreMap":30},[321,97882,97883,97885,97887,97889,97891,97893,97895,97897,97899,97901,97903],{"class":323,"line":324},[321,97884,93451],{"class":331},[321,97886,377],{"class":327},[321,97888,93147],{"class":331},[321,97890,549],{"class":380},[321,97892,710],{"class":331},[321,97894,855],{"class":380},[321,97896,93152],{"class":331},[321,97898,409],{"class":380},[321,97900,710],{"class":331},[321,97902,676],{"class":380},[321,97904,338],{"class":331},[321,97906,97907],{"class":323,"line":167},[321,97908,97909],{"class":331},"aa.flatten()\n",[321,97911,97912],{"class":323,"line":200},[321,97913,93709],{"class":390},[321,97915,97916],{"class":323,"line":1401},[321,97917,97871],{"class":390},[14,97919,97921],{"id":97920},"_54-使用resize","5.4 使用resize()",[19,97923,97924],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,97926,97927],{},"通过resize方法可以改变数组的维度",[19,97929,97930],{},"#resize修改数组维度",[19,97932,97933],{},"#以元组的形式指定形状",[19,97935,97936],{},"#改变的是原数组",[312,97938,97940],{"className":30523,"code":97939,"language":30525,"meta":30,"style":30},"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",[318,97941,97942,97958,97978,97991,97995],{"__ignoreMap":30},[321,97943,97944,97946,97948,97950,97952,97954,97956],{"class":323,"line":324},[321,97945,570],{"class":331},[321,97947,377],{"class":327},[321,97949,93147],{"class":331},[321,97951,549],{"class":380},[321,97953,710],{"class":331},[321,97955,855],{"class":380},[321,97957,338],{"class":331},[321,97959,97960,97963,97965,97967,97969,97971,97973,97975],{"class":323,"line":167},[321,97961,97962],{"class":331},"a.shape",[321,97964,377],{"class":327},[321,97966,332],{"class":331},[321,97968,409],{"class":380},[321,97970,710],{"class":331},[321,97972,676],{"class":380},[321,97974,761],{"class":331},[321,97976,97977],{"class":390},"#改变了原数组\n",[321,97979,97980,97982,97984,97987,97989],{"class":323,"line":200},[321,97981,570],{"class":331},[321,97983,377],{"class":327},[321,97985,97986],{"class":331},"resize((",[321,97988,830],{"class":380},[321,97990,30642],{"class":331},[321,97992,97993],{"class":323,"line":1401},[321,97994,93709],{"class":390},[321,97996,97997],{"class":323,"line":1407},[321,97998,97871],{"class":390},[312,98000,98002],{"className":30523,"code":98001,"language":30525,"meta":30,"style":30},"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",[318,98003,98004,98017,98021,98025,98030,98035,98040,98045,98050,98055],{"__ignoreMap":30},[321,98005,98006,98009,98011,98013,98015],{"class":323,"line":324},[321,98007,98008],{"class":331},"a.resize((",[321,98010,676],{"class":380},[321,98012,710],{"class":331},[321,98014,409],{"class":380},[321,98016,30642],{"class":331},[321,98018,98019],{"class":323,"line":167},[321,98020,93709],{"class":390},[321,98022,98023],{"class":323,"line":200},[321,98024,94073],{"class":436},[321,98026,98027],{"class":323,"line":1401},[321,98028,98029],{"class":436},"array([[ 1,  2],\n",[321,98031,98032],{"class":323,"line":1407},[321,98033,98034],{"class":436},"       [ 3,  4],\n",[321,98036,98037],{"class":323,"line":1421},[321,98038,98039],{"class":436},"       [ 5,  6],\n",[321,98041,98042],{"class":323,"line":1427},[321,98043,98044],{"class":436},"       [ 7,  8],\n",[321,98046,98047],{"class":323,"line":1518},[321,98048,98049],{"class":436},"       [ 9, 10],\n",[321,98051,98052],{"class":323,"line":1524},[321,98053,98054],{"class":436},"       [11, 12]])\n",[321,98056,98057],{"class":323,"line":1536},[321,98058,94073],{"class":436},[14,98060,98062],{"id":98061},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98064,98065],{},"改变了原数组",[312,98067,98069],{"className":30523,"code":98068,"language":30525,"meta":30,"style":30},"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",[318,98070,98071,98087,98103,98107,98111,98115,98119],{"__ignoreMap":30},[321,98072,98073,98075,98077,98079,98081,98083,98085],{"class":323,"line":324},[321,98074,570],{"class":331},[321,98076,377],{"class":327},[321,98078,93147],{"class":331},[321,98080,549],{"class":380},[321,98082,710],{"class":331},[321,98084,855],{"class":380},[321,98086,338],{"class":331},[321,98088,98089,98091,98093,98095,98097,98099,98101],{"class":323,"line":167},[321,98090,97962],{"class":331},[321,98092,377],{"class":327},[321,98094,332],{"class":331},[321,98096,409],{"class":380},[321,98098,710],{"class":331},[321,98100,676],{"class":380},[321,98102,338],{"class":331},[321,98104,98105],{"class":323,"line":200},[321,98106,93709],{"class":390},[321,98108,98109],{"class":323,"line":1401},[321,98110,94073],{"class":436},[321,98112,98113],{"class":323,"line":1407},[321,98114,97333],{"class":436},[321,98116,98117],{"class":323,"line":1421},[321,98118,97338],{"class":436},[321,98120,98121],{"class":323,"line":1427},[321,98122,94073],{"class":436},[14,98124,98126],{"id":98125},"_56-重要比较","5.6 重要比较：",[19,98128,98129],{},[28,98130],{"alt":30,"src":98131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98133,98134,98135,98137,98138,98140],{},"口诀：NumPy 函数要么用 ",[318,98136,96108],{},"，要么用 ",[318,98139,31641],{},"，创建结构用 shape，造数据用 size",[19,98142,98143],{},[28,98144],{"alt":30,"src":98145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5333,98147,98148],{},"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":30,"searchDepth":167,"depth":167,"links":98150},[98151,98152,98153,98154,98155,98156],{"id":97672,"depth":167,"text":97673},{"id":97824,"depth":167,"text":97825},{"id":97874,"depth":167,"text":97875},{"id":97920,"depth":167,"text":97921},{"id":98061,"depth":167,"text":98062},{"id":98125,"depth":167,"text":98126},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97664,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98163,"title":98164,"body":98165,"description":23584,"extension":249,"meta":99237,"navigation":251,"path":99238,"seo":99239,"stem":99240,"__hash__":99241},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98166,"toc":99231},[98167,98170,98174,98177,98180,98183,98248,98251,98291,98294,98376,98379,98384,98406,98408,98413,98418,98421,98424,98579,98582,98784,98788,98791,98794,98862,98864,98869,98872,98875,98955,98959,98962,98964,99037,99039,99044,99046,99126,99130,99133,99136,99139,99142,99145,99148,99228],[10,98168,98164],{"id":98169},"_6数组的拼接",[14,98171,98173],{"id":98172},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98175,98176],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98178,98179],{},"函数内部传两个数列构成的数列或者元组",[19,98181,98182],{},"①一维数组的拼接",[312,98184,98186],{"className":30523,"code":98185,"language":30525,"meta":30,"style":30},"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",[318,98187,98188,98208,98228,98233,98238,98243],{"__ignoreMap":30},[321,98189,98190,98192,98194,98196,98198,98200,98202,98204,98206],{"class":323,"line":324},[321,98191,570],{"class":331},[321,98193,377],{"class":327},[321,98195,93169],{"class":331},[321,98197,549],{"class":380},[321,98199,710],{"class":331},[321,98201,409],{"class":380},[321,98203,710],{"class":331},[321,98205,403],{"class":380},[321,98207,4863],{"class":331},[321,98209,98210,98212,98214,98216,98218,98220,98222,98224,98226],{"class":323,"line":167},[321,98211,595],{"class":331},[321,98213,377],{"class":327},[321,98215,93169],{"class":331},[321,98217,625],{"class":380},[321,98219,710],{"class":331},[321,98221,651],{"class":380},[321,98223,710],{"class":331},[321,98225,676],{"class":380},[321,98227,4863],{"class":331},[321,98229,98230],{"class":323,"line":200},[321,98231,98232],{"class":390},"#调用concatenate进行数组拼接\n",[321,98234,98235],{"class":323,"line":1401},[321,98236,98237],{"class":331},"np.concatenate((a,b))\n",[321,98239,98240],{"class":323,"line":1407},[321,98241,98242],{"class":390},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[321,98244,98245],{"class":323,"line":1421},[321,98246,98247],{"class":390},"#np.concatenate([a,b])\n",[19,98249,98250],{},"②一维多个数组拼接",[312,98252,98254],{"className":30523,"code":98253,"language":30525,"meta":30,"style":30},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[318,98255,98256,98261,98281,98286],{"__ignoreMap":30},[321,98257,98258],{"class":323,"line":324},[321,98259,98260],{"class":390},"#也可以多个数组进行拼接\n",[321,98262,98263,98265,98267,98269,98271,98273,98275,98277,98279],{"class":323,"line":167},[321,98264,620],{"class":331},[321,98266,377],{"class":327},[321,98268,93169],{"class":331},[321,98270,778],{"class":380},[321,98272,710],{"class":331},[321,98274,804],{"class":380},[321,98276,710],{"class":331},[321,98278,855],{"class":380},[321,98280,4863],{"class":331},[321,98282,98283],{"class":323,"line":200},[321,98284,98285],{"class":331},"c\n",[321,98287,98288],{"class":323,"line":1401},[321,98289,98290],{"class":331},"np.concatenate((a,b,c))\n",[19,98292,98293],{},"③二维数组拼接",[312,98295,98297],{"className":30523,"code":98296,"language":30525,"meta":30,"style":30},"#二维数组使用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",[318,98298,98299,98304,98328,98353,98358,98363],{"__ignoreMap":30},[321,98300,98301],{"class":323,"line":324},[321,98302,98303],{"class":390},"#二维数组使用concatenate进行拼接\n",[321,98305,98306,98308,98310,98312,98314,98316,98318,98320,98322,98324,98326],{"class":323,"line":167},[321,98307,93451],{"class":331},[321,98309,377],{"class":327},[321,98311,93147],{"class":331},[321,98313,549],{"class":380},[321,98315,710],{"class":331},[321,98317,855],{"class":380},[321,98319,93152],{"class":331},[321,98321,403],{"class":380},[321,98323,710],{"class":331},[321,98325,625],{"class":380},[321,98327,338],{"class":331},[321,98329,98330,98333,98335,98337,98339,98341,98343,98345,98347,98349,98351],{"class":323,"line":200},[321,98331,98332],{"class":331},"bb",[321,98334,377],{"class":327},[321,98336,93147],{"class":331},[321,98338,669],{"class":380},[321,98340,710],{"class":331},[321,98342,974],{"class":380},[321,98344,93152],{"class":331},[321,98346,403],{"class":380},[321,98348,710],{"class":331},[321,98350,625],{"class":380},[321,98352,338],{"class":331},[321,98354,98355],{"class":323,"line":1401},[321,98356,98357],{"class":390},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[321,98359,98360],{"class":323,"line":1407},[321,98361,98362],{"class":390},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[321,98364,98365,98368,98370,98372,98374],{"class":323,"line":1421},[321,98366,98367],{"class":331},"np.concatenate((aa,bb),",[321,98369,47659],{"class":5423},[321,98371,377],{"class":327},[321,98373,523],{"class":380},[321,98375,338],{"class":331},[19,98377,98378],{},"结果：",[19,98380,98381],{},[28,98382],{"alt":30,"src":98383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[312,98385,98387],{"className":30523,"code":98386,"language":30525,"meta":30,"style":30},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[318,98388,98389,98394],{"__ignoreMap":30},[321,98390,98391],{"class":323,"line":324},[321,98392,98393],{"class":390},"#指定axis为1进行拼接\n",[321,98395,98396,98398,98400,98402,98404],{"class":323,"line":167},[321,98397,98367],{"class":331},[321,98399,47659],{"class":5423},[321,98401,377],{"class":327},[321,98403,549],{"class":380},[321,98405,338],{"class":331},[19,98407,98378],{},[19,98409,98410],{},[28,98411],{"alt":30,"src":98412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98414,98415],{},[481,98416,98417],{},"二维数组总结：0竖着方向，1横着方向",[19,98419,98420],{},"④三维数组拼接",[19,98422,98423],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[312,98425,98427],{"className":30523,"code":98426,"language":30525,"meta":30,"style":30},"#两个三行六列\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",[318,98428,98429,98434,98462,98492,98497,98514,98519,98524,98529,98546,98551,98556,98561,98574],{"__ignoreMap":30},[321,98430,98431],{"class":323,"line":324},[321,98432,98433],{"class":390},"#两个三行六列\n",[321,98435,98436,98438,98440,98442,98444,98446,98448,98450,98452,98454,98456,98458,98460],{"class":323,"line":167},[321,98437,95666],{"class":331},[321,98439,377],{"class":327},[321,98441,93147],{"class":331},[321,98443,549],{"class":380},[321,98445,710],{"class":331},[321,98447,657],{"class":380},[321,98449,93152],{"class":331},[321,98451,409],{"class":380},[321,98453,710],{"class":331},[321,98455,403],{"class":380},[321,98457,710],{"class":331},[321,98459,676],{"class":380},[321,98461,338],{"class":331},[321,98463,98464,98467,98469,98471,98473,98475,98478,98480,98482,98484,98486,98488,98490],{"class":323,"line":200},[321,98465,98466],{"class":331},"bbb",[321,98468,377],{"class":327},[321,98470,93147],{"class":331},[321,98472,669],{"class":380},[321,98474,710],{"class":331},[321,98476,98477],{"class":380},"137",[321,98479,93152],{"class":331},[321,98481,409],{"class":380},[321,98483,710],{"class":331},[321,98485,403],{"class":380},[321,98487,710],{"class":331},[321,98489,676],{"class":380},[321,98491,338],{"class":331},[321,98493,98494],{"class":323,"line":1401},[321,98495,98496],{"class":390},"#axis=0\n",[321,98498,98499,98501,98503,98506,98508,98510,98512],{"class":323,"line":1407},[321,98500,1027],{"class":331},[321,98502,377],{"class":327},[321,98504,98505],{"class":331},"np.concatenate((aaa,bbb),",[321,98507,47659],{"class":5423},[321,98509,377],{"class":327},[321,98511,523],{"class":380},[321,98513,338],{"class":331},[321,98515,98516],{"class":323,"line":1421},[321,98517,98518],{"class":331},"s.shape\n",[321,98520,98521],{"class":323,"line":1427},[321,98522,98523],{"class":390},"#输出：(4,3,6)\n",[321,98525,98526],{"class":323,"line":1518},[321,98527,98528],{"class":390},"#axis=1\n",[321,98530,98531,98534,98536,98538,98540,98542,98544],{"class":323,"line":1524},[321,98532,98533],{"class":331},"ss",[321,98535,377],{"class":327},[321,98537,98505],{"class":331},[321,98539,47659],{"class":5423},[321,98541,377],{"class":327},[321,98543,549],{"class":380},[321,98545,338],{"class":331},[321,98547,98548],{"class":323,"line":1536},[321,98549,98550],{"class":331},"ss.shape\n",[321,98552,98553],{"class":323,"line":1818},[321,98554,98555],{"class":390},"#输出：(2,6,6)\n",[321,98557,98558],{"class":323,"line":1823},[321,98559,98560],{"class":390},"#axis=2\n",[321,98562,98563,98565,98567,98569,98571],{"class":323,"line":1829},[321,98564,98505],{"class":331},[321,98566,47659],{"class":5423},[321,98568,377],{"class":327},[321,98570,409],{"class":380},[321,98572,98573],{"class":331},").shape\n",[321,98575,98576],{"class":323,"line":1834},[321,98577,98578],{"class":390},"#输出：（2，3，12）\n",[19,98580,98581],{},"⑤四维数组拼接",[312,98583,98585],{"className":30523,"code":98584,"language":30525,"meta":30,"style":30},"#两个三行六列\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",[318,98586,98587,98591,98619,98647,98672,98698,98702,98715,98720,98724,98736,98741,98745,98757,98762,98767,98779],{"__ignoreMap":30},[321,98588,98589],{"class":323,"line":324},[321,98590,98433],{"class":390},[321,98592,98593,98595,98597,98599,98601,98603,98605,98607,98609,98611,98613,98615,98617],{"class":323,"line":167},[321,98594,95666],{"class":331},[321,98596,377],{"class":327},[321,98598,93147],{"class":331},[321,98600,549],{"class":380},[321,98602,710],{"class":331},[321,98604,657],{"class":380},[321,98606,93152],{"class":331},[321,98608,409],{"class":380},[321,98610,710],{"class":331},[321,98612,403],{"class":380},[321,98614,710],{"class":331},[321,98616,676],{"class":380},[321,98618,338],{"class":331},[321,98620,98621,98623,98625,98627,98629,98631,98633,98635,98637,98639,98641,98643,98645],{"class":323,"line":200},[321,98622,98466],{"class":331},[321,98624,377],{"class":327},[321,98626,93147],{"class":331},[321,98628,669],{"class":380},[321,98630,710],{"class":331},[321,98632,98477],{"class":380},[321,98634,93152],{"class":331},[321,98636,409],{"class":380},[321,98638,710],{"class":331},[321,98640,403],{"class":380},[321,98642,710],{"class":331},[321,98644,676],{"class":380},[321,98646,338],{"class":331},[321,98648,98649,98652,98654,98656,98658,98660,98662,98664,98666,98668,98670],{"class":323,"line":1401},[321,98650,98651],{"class":331},"aaaa",[321,98653,377],{"class":327},[321,98655,97815],{"class":331},[321,98657,409],{"class":380},[321,98659,710],{"class":331},[321,98661,403],{"class":380},[321,98663,710],{"class":331},[321,98665,403],{"class":380},[321,98667,710],{"class":331},[321,98669,409],{"class":380},[321,98671,338],{"class":331},[321,98673,98674,98677,98679,98682,98684,98686,98688,98690,98692,98694,98696],{"class":323,"line":1407},[321,98675,98676],{"class":331},"bbbb",[321,98678,377],{"class":327},[321,98680,98681],{"class":331},"bbb.reshape(",[321,98683,409],{"class":380},[321,98685,710],{"class":331},[321,98687,403],{"class":380},[321,98689,710],{"class":331},[321,98691,403],{"class":380},[321,98693,710],{"class":331},[321,98695,409],{"class":380},[321,98697,338],{"class":331},[321,98699,98700],{"class":323,"line":1421},[321,98701,98496],{"class":390},[321,98703,98704,98707,98709,98711,98713],{"class":323,"line":1427},[321,98705,98706],{"class":331},"np.concatenate((aaaa,bbbb),",[321,98708,47659],{"class":5423},[321,98710,377],{"class":327},[321,98712,523],{"class":380},[321,98714,98573],{"class":331},[321,98716,98717],{"class":323,"line":1518},[321,98718,98719],{"class":390},"#结果：（4，3，3，2）\n",[321,98721,98722],{"class":323,"line":1524},[321,98723,98528],{"class":390},[321,98725,98726,98728,98730,98732,98734],{"class":323,"line":1536},[321,98727,98706],{"class":331},[321,98729,47659],{"class":5423},[321,98731,377],{"class":327},[321,98733,549],{"class":380},[321,98735,98573],{"class":331},[321,98737,98738],{"class":323,"line":1818},[321,98739,98740],{"class":390},"#结果：（2，6，3，2）\n",[321,98742,98743],{"class":323,"line":1823},[321,98744,98560],{"class":390},[321,98746,98747,98749,98751,98753,98755],{"class":323,"line":1829},[321,98748,98706],{"class":331},[321,98750,47659],{"class":5423},[321,98752,377],{"class":327},[321,98754,409],{"class":380},[321,98756,98573],{"class":331},[321,98758,98759],{"class":323,"line":1834},[321,98760,98761],{"class":390},"#结果：（2，3，6，2）\n",[321,98763,98764],{"class":323,"line":1848},[321,98765,98766],{"class":390},"#axis=3\n",[321,98768,98769,98771,98773,98775,98777],{"class":323,"line":1853},[321,98770,98706],{"class":331},[321,98772,47659],{"class":5423},[321,98774,377],{"class":327},[321,98776,403],{"class":380},[321,98778,98573],{"class":331},[321,98780,98781],{"class":323,"line":1859},[321,98782,98783],{"class":390},"#结果：（2，3，3，4）\n",[14,98785,98787],{"id":98786},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98789,98790],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98792,98793],{},"①二维数组",[312,98795,98797],{"className":30523,"code":98796,"language":30525,"meta":30,"style":30},"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",[318,98798,98799,98823,98847,98852,98857],{"__ignoreMap":30},[321,98800,98801,98803,98805,98807,98809,98811,98813,98815,98817,98819,98821],{"class":323,"line":324},[321,98802,93451],{"class":331},[321,98804,377],{"class":327},[321,98806,93147],{"class":331},[321,98808,549],{"class":380},[321,98810,710],{"class":331},[321,98812,855],{"class":380},[321,98814,93152],{"class":331},[321,98816,403],{"class":380},[321,98818,710],{"class":331},[321,98820,625],{"class":380},[321,98822,338],{"class":331},[321,98824,98825,98827,98829,98831,98833,98835,98837,98839,98841,98843,98845],{"class":323,"line":167},[321,98826,98332],{"class":331},[321,98828,377],{"class":327},[321,98830,93147],{"class":331},[321,98832,669],{"class":380},[321,98834,710],{"class":331},[321,98836,974],{"class":380},[321,98838,93152],{"class":331},[321,98840,403],{"class":380},[321,98842,710],{"class":331},[321,98844,625],{"class":380},[321,98846,338],{"class":331},[321,98848,98849],{"class":323,"line":200},[321,98850,98851],{"class":331},"np.hstack((aa,bb))\n",[321,98853,98854],{"class":323,"line":1401},[321,98855,98856],{"class":390},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[321,98858,98859],{"class":323,"line":1407},[321,98860,98861],{"class":390},"#np.hstack([aa,bb])\n",[19,98863,98378],{},[19,98865,98866],{},[28,98867],{"alt":30,"src":98868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98870,98871],{},"等效于concatenate()函数中axis=1时的情况",[19,98873,98874],{},"②三维数组",[312,98876,98878],{"className":30523,"code":98877,"language":30525,"meta":30,"style":30},"#两个三行六列\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",[318,98879,98880,98884,98912,98940,98945,98950],{"__ignoreMap":30},[321,98881,98882],{"class":323,"line":324},[321,98883,98433],{"class":390},[321,98885,98886,98888,98890,98892,98894,98896,98898,98900,98902,98904,98906,98908,98910],{"class":323,"line":167},[321,98887,95666],{"class":331},[321,98889,377],{"class":327},[321,98891,93147],{"class":331},[321,98893,549],{"class":380},[321,98895,710],{"class":331},[321,98897,657],{"class":380},[321,98899,93152],{"class":331},[321,98901,409],{"class":380},[321,98903,710],{"class":331},[321,98905,403],{"class":380},[321,98907,710],{"class":331},[321,98909,676],{"class":380},[321,98911,338],{"class":331},[321,98913,98914,98916,98918,98920,98922,98924,98926,98928,98930,98932,98934,98936,98938],{"class":323,"line":200},[321,98915,98466],{"class":331},[321,98917,377],{"class":327},[321,98919,93147],{"class":331},[321,98921,669],{"class":380},[321,98923,710],{"class":331},[321,98925,98477],{"class":380},[321,98927,93152],{"class":331},[321,98929,409],{"class":380},[321,98931,710],{"class":331},[321,98933,403],{"class":380},[321,98935,710],{"class":331},[321,98937,676],{"class":380},[321,98939,338],{"class":331},[321,98941,98942],{"class":323,"line":1401},[321,98943,98944],{"class":390},"#使用hstack\n",[321,98946,98947],{"class":323,"line":1407},[321,98948,98949],{"class":331},"np.hstack((aaa,bbb)).shape\n",[321,98951,98952],{"class":323,"line":1421},[321,98953,98954],{"class":390},"#输出：（2，6，6）\n",[14,98956,98958],{"id":98957},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,98960,98961],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,98963,98793],{},[312,98965,98967],{"className":30523,"code":98966,"language":30525,"meta":30,"style":30},"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",[318,98968,98969,98993,99017,99022,99027,99032],{"__ignoreMap":30},[321,98970,98971,98973,98975,98977,98979,98981,98983,98985,98987,98989,98991],{"class":323,"line":324},[321,98972,93451],{"class":331},[321,98974,377],{"class":327},[321,98976,93147],{"class":331},[321,98978,549],{"class":380},[321,98980,710],{"class":331},[321,98982,855],{"class":380},[321,98984,93152],{"class":331},[321,98986,403],{"class":380},[321,98988,710],{"class":331},[321,98990,625],{"class":380},[321,98992,338],{"class":331},[321,98994,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015],{"class":323,"line":167},[321,98996,98332],{"class":331},[321,98998,377],{"class":327},[321,99000,93147],{"class":331},[321,99002,669],{"class":380},[321,99004,710],{"class":331},[321,99006,974],{"class":380},[321,99008,93152],{"class":331},[321,99010,403],{"class":380},[321,99012,710],{"class":331},[321,99014,625],{"class":380},[321,99016,338],{"class":331},[321,99018,99019],{"class":323,"line":200},[321,99020,99021],{"class":390},"#vstack 垂直方向进行堆叠\n",[321,99023,99024],{"class":323,"line":1401},[321,99025,99026],{"class":331},"np.vstack((aa,bb))\n",[321,99028,99029],{"class":323,"line":1407},[321,99030,99031],{"class":390},"#与hstack传的参数类似，等价于：\n",[321,99033,99034],{"class":323,"line":1421},[321,99035,99036],{"class":331},"np.vstack([aa,bb])\n",[19,99038,98378],{},[19,99040,99041],{},[28,99042],{"alt":30,"src":99043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99045,98874],{},[312,99047,99049],{"className":30523,"code":99048,"language":30525,"meta":30,"style":30},"#两个三行六列\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",[318,99050,99051,99055,99083,99111,99116,99121],{"__ignoreMap":30},[321,99052,99053],{"class":323,"line":324},[321,99054,98433],{"class":390},[321,99056,99057,99059,99061,99063,99065,99067,99069,99071,99073,99075,99077,99079,99081],{"class":323,"line":167},[321,99058,95666],{"class":331},[321,99060,377],{"class":327},[321,99062,93147],{"class":331},[321,99064,549],{"class":380},[321,99066,710],{"class":331},[321,99068,657],{"class":380},[321,99070,93152],{"class":331},[321,99072,409],{"class":380},[321,99074,710],{"class":331},[321,99076,403],{"class":380},[321,99078,710],{"class":331},[321,99080,676],{"class":380},[321,99082,338],{"class":331},[321,99084,99085,99087,99089,99091,99093,99095,99097,99099,99101,99103,99105,99107,99109],{"class":323,"line":200},[321,99086,98466],{"class":331},[321,99088,377],{"class":327},[321,99090,93147],{"class":331},[321,99092,669],{"class":380},[321,99094,710],{"class":331},[321,99096,98477],{"class":380},[321,99098,93152],{"class":331},[321,99100,409],{"class":380},[321,99102,710],{"class":331},[321,99104,403],{"class":380},[321,99106,710],{"class":331},[321,99108,676],{"class":380},[321,99110,338],{"class":331},[321,99112,99113],{"class":323,"line":1401},[321,99114,99115],{"class":390},"#使用vstack\n",[321,99117,99118],{"class":323,"line":1407},[321,99119,99120],{"class":331},"np.vstack((aaa,bbb)).shape\n",[321,99122,99123],{"class":323,"line":1421},[321,99124,99125],{"class":390},"#输出：（4，3，6）\n",[14,99127,99129],{"id":99128},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99131,99132],{},"该方法是三维数组特有的方法",[19,99134,99135],{},"也就是说",[19,99137,99138],{},"一维数组拼接方法用：concatenate()",[19,99140,99141],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99143,99144],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99146,99147],{},"四维数组及多维数组只能用concatenate进行拼接",[312,99149,99151],{"className":30523,"code":99150,"language":30525,"meta":30,"style":30},"#两个三行六列\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",[318,99152,99153,99157,99185,99213,99218,99223],{"__ignoreMap":30},[321,99154,99155],{"class":323,"line":324},[321,99156,98433],{"class":390},[321,99158,99159,99161,99163,99165,99167,99169,99171,99173,99175,99177,99179,99181,99183],{"class":323,"line":167},[321,99160,95666],{"class":331},[321,99162,377],{"class":327},[321,99164,93147],{"class":331},[321,99166,549],{"class":380},[321,99168,710],{"class":331},[321,99170,657],{"class":380},[321,99172,93152],{"class":331},[321,99174,409],{"class":380},[321,99176,710],{"class":331},[321,99178,403],{"class":380},[321,99180,710],{"class":331},[321,99182,676],{"class":380},[321,99184,338],{"class":331},[321,99186,99187,99189,99191,99193,99195,99197,99199,99201,99203,99205,99207,99209,99211],{"class":323,"line":200},[321,99188,98466],{"class":331},[321,99190,377],{"class":327},[321,99192,93147],{"class":331},[321,99194,669],{"class":380},[321,99196,710],{"class":331},[321,99198,98477],{"class":380},[321,99200,93152],{"class":331},[321,99202,409],{"class":380},[321,99204,710],{"class":331},[321,99206,403],{"class":380},[321,99208,710],{"class":331},[321,99210,676],{"class":380},[321,99212,338],{"class":331},[321,99214,99215],{"class":323,"line":1401},[321,99216,99217],{"class":390},"#使用dstack\n",[321,99219,99220],{"class":323,"line":1407},[321,99221,99222],{"class":331},"np.dstack((aaa,bbb)).shape\n",[321,99224,99225],{"class":323,"line":1421},[321,99226,99227],{"class":390},"#结果：（2，3，12）\n",[5333,99229,99230],{},"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":30,"searchDepth":167,"depth":167,"links":99232},[99233,99234,99235,99236],{"id":98172,"depth":167,"text":98173},{"id":98786,"depth":167,"text":98787},{"id":98957,"depth":167,"text":98958},{"id":99128,"depth":167,"text":99129},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98164,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99243,"title":99244,"body":99245,"description":23584,"extension":249,"meta":99520,"navigation":251,"path":99521,"seo":99522,"stem":99523,"__hash__":99524},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99246,"toc":99518},[99247,99250,99253,99347,99350,99353,99356,99359,99362,99365,99368,99371,99515],[10,99248,99244],{"id":99249},"_7数组转置",[19,99251,99252],{},"使用transpose()函数",[312,99254,99256],{"className":30523,"code":99255,"language":30525,"meta":30,"style":30},"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",[318,99257,99258,99268,99292,99297,99302,99307,99312,99320,99324,99328,99333,99338,99343],{"__ignoreMap":30},[321,99259,99260,99262,99264,99266],{"class":323,"line":324},[321,99261,30537],{"class":327},[321,99263,31525],{"class":331},[321,99265,31528],{"class":327},[321,99267,31531],{"class":331},[321,99269,99270,99272,99274,99276,99278,99280,99282,99284,99286,99288,99290],{"class":323,"line":167},[321,99271,570],{"class":331},[321,99273,377],{"class":327},[321,99275,31862],{"class":331},[321,99277,549],{"class":380},[321,99279,710],{"class":331},[321,99281,855],{"class":380},[321,99283,93152],{"class":331},[321,99285,625],{"class":380},[321,99287,710],{"class":331},[321,99289,403],{"class":380},[321,99291,338],{"class":331},[321,99293,99294],{"class":323,"line":200},[321,99295,99296],{"class":390},"#二维数组转置\n",[321,99298,99299],{"class":323,"line":1401},[321,99300,99301],{"class":390},"#调用transpose()函数\n",[321,99303,99304],{"class":323,"line":1407},[321,99305,99306],{"class":331},"a.transpose()\n",[321,99308,99309],{"class":323,"line":1421},[321,99310,99311],{"class":390},"#对于二维数组也可以采用.T来实现\n",[321,99313,99314,99317],{"class":323,"line":1427},[321,99315,99316],{"class":331},"a.T",[321,99318,99319],{"class":390},"#与上述代码一样\n",[321,99321,99322],{"class":323,"line":1518},[321,99323,93709],{"class":390},[321,99325,99326],{"class":323,"line":1524},[321,99327,94073],{"class":436},[321,99329,99330],{"class":323,"line":1536},[321,99331,99332],{"class":436},"array([[ 1,  4,  7, 10],\n",[321,99334,99335],{"class":323,"line":1818},[321,99336,99337],{"class":436},"       [ 2,  5,  8, 11],\n",[321,99339,99340],{"class":323,"line":1823},[321,99341,99342],{"class":436},"       [ 3,  6,  9, 12]])\n",[321,99344,99345],{"class":323,"line":1829},[321,99346,94073],{"class":436},[19,99348,99349],{},"也可以使用np.transpose()的形式",[19,99351,99352],{},"#多维数组进行转置 np.transpose()",[19,99354,99355],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99357,99358],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99360,99361],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99363,99364],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99366,99367],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99369,99370],{},"四维及以上的数组也是一样的道理",[312,99372,99374],{"className":30523,"code":99373,"language":30525,"meta":30,"style":30},"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",[318,99375,99376,99404,99409,99414,99419,99437,99442,99474,99479,99484,99489,99510],{"__ignoreMap":30},[321,99377,99378,99380,99382,99384,99386,99388,99390,99392,99394,99396,99398,99400,99402],{"class":323,"line":324},[321,99379,1152],{"class":331},[321,99381,377],{"class":327},[321,99383,93147],{"class":331},[321,99385,549],{"class":380},[321,99387,710],{"class":331},[321,99389,657],{"class":380},[321,99391,93152],{"class":331},[321,99393,403],{"class":380},[321,99395,710],{"class":331},[321,99397,676],{"class":380},[321,99399,710],{"class":331},[321,99401,409],{"class":380},[321,99403,338],{"class":331},[321,99405,99406],{"class":323,"line":167},[321,99407,99408],{"class":331},"x.shape\n",[321,99410,99411],{"class":323,"line":200},[321,99412,99413],{"class":390},"#结果：（3,6,2）\n",[321,99415,99416],{"class":323,"line":1401},[321,99417,99418],{"class":390},"#使用np.transpose()进行转置 变为(2,6,3)\n",[321,99420,99421,99424,99426,99428,99430,99432,99434],{"class":323,"line":1407},[321,99422,99423],{"class":331},"np.transpose(x,(",[321,99425,409],{"class":380},[321,99427,710],{"class":331},[321,99429,549],{"class":380},[321,99431,710],{"class":331},[321,99433,523],{"class":380},[321,99435,99436],{"class":331},")).shape\n",[321,99438,99439],{"class":323,"line":1421},[321,99440,99441],{"class":390},"#结果：(2,6,3)\n",[321,99443,99444,99446,99448,99450,99452,99454,99456,99458,99460,99462,99464,99466,99468,99470,99472],{"class":323,"line":1427},[321,99445,98651],{"class":331},[321,99447,377],{"class":327},[321,99449,93147],{"class":331},[321,99451,549],{"class":380},[321,99453,710],{"class":331},[321,99455,657],{"class":380},[321,99457,93152],{"class":331},[321,99459,403],{"class":380},[321,99461,710],{"class":331},[321,99463,409],{"class":380},[321,99465,710],{"class":331},[321,99467,549],{"class":380},[321,99469,710],{"class":331},[321,99471,676],{"class":380},[321,99473,338],{"class":331},[321,99475,99476],{"class":323,"line":1518},[321,99477,99478],{"class":331},"aaaa.shape\n",[321,99480,99481],{"class":323,"line":1524},[321,99482,99483],{"class":390},"#结果：（3，2，1，6）\n",[321,99485,99486],{"class":323,"line":1536},[321,99487,99488],{"class":390},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[321,99490,99491,99494,99496,99498,99500,99502,99504,99506,99508],{"class":323,"line":1818},[321,99492,99493],{"class":331},"np.transpose(aaaa,(",[321,99495,549],{"class":380},[321,99497,710],{"class":331},[321,99499,409],{"class":380},[321,99501,710],{"class":331},[321,99503,523],{"class":380},[321,99505,710],{"class":331},[321,99507,403],{"class":380},[321,99509,99436],{"class":331},[321,99511,99512],{"class":323,"line":1823},[321,99513,99514],{"class":390},"#结果：(2,1,3,6)\n",[5333,99516,99517],{},"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":30,"searchDepth":167,"depth":167,"links":99519},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99244,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99526,"title":99527,"body":99528,"description":23584,"extension":249,"meta":100262,"navigation":251,"path":100263,"seo":100264,"stem":100265,"__hash__":100266},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99529,"toc":100260},[99530,99533,99536,99539,99542,99545,99548,99551,99554,99663,99666,99669,100257],[10,99531,99527],{"id":99532},"_8数组分割",[19,99534,99535],{},"split分割",[19,99537,99538],{},"numpy.split(ary,indics_or_sections,axis)",[19,99540,99541],{},"解释：",[19,99543,99544],{},"ary:被分割的数组",[19,99546,99547],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99549,99550],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99552,99553],{},"①一维数组的分割",[312,99555,99557],{"className":30523,"code":99556,"language":30525,"meta":30,"style":30},"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",[318,99558,99559,99575,99580,99589,99593,99598,99606,99610,99615,99620,99633,99637,99642,99654,99658],{"__ignoreMap":30},[321,99560,99561,99563,99565,99567,99569,99571,99573],{"class":323,"line":324},[321,99562,570],{"class":331},[321,99564,377],{"class":327},[321,99566,93147],{"class":331},[321,99568,549],{"class":380},[321,99570,710],{"class":331},[321,99572,752],{"class":380},[321,99574,338],{"class":331},[321,99576,99577],{"class":323,"line":167},[321,99578,99579],{"class":390},"#如果传入整数，必须能够平分，否则会报错\n",[321,99581,99582,99585,99587],{"class":323,"line":200},[321,99583,99584],{"class":331},"np.split(a,",[321,99586,409],{"class":380},[321,99588,338],{"class":331},[321,99590,99591],{"class":323,"line":1401},[321,99592,93709],{"class":390},[321,99594,99595],{"class":323,"line":1407},[321,99596,99597],{"class":390},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[321,99599,99600,99602,99604],{"class":323,"line":1421},[321,99601,99584],{"class":331},[321,99603,625],{"class":380},[321,99605,338],{"class":331},[321,99607,99608],{"class":323,"line":1427},[321,99609,93709],{"class":390},[321,99611,99612],{"class":323,"line":1518},[321,99613,99614],{"class":390},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[321,99616,99617],{"class":323,"line":1524},[321,99618,99619],{"class":390},"#传入数组\n",[321,99621,99622,99625,99627,99629,99631],{"class":323,"line":1536},[321,99623,99624],{"class":331},"np.split(a,[",[321,99626,403],{"class":380},[321,99628,710],{"class":331},[321,99630,651],{"class":380},[321,99632,4863],{"class":331},[321,99634,99635],{"class":323,"line":1818},[321,99636,93709],{"class":390},[321,99638,99639],{"class":323,"line":1823},[321,99640,99641],{"class":390},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[321,99643,99644,99646,99648,99650,99652],{"class":323,"line":1829},[321,99645,99624],{"class":331},[321,99647,651],{"class":380},[321,99649,710],{"class":331},[321,99651,701],{"class":380},[321,99653,4863],{"class":331},[321,99655,99656],{"class":323,"line":1834},[321,99657,93709],{"class":390},[321,99659,99660],{"class":323,"line":1848},[321,99661,99662],{"class":390},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99664,99665],{},"②二维数组的分割",[19,99667,99668],{},"使用split()",[312,99670,99672],{"className":30523,"code":99671,"language":30525,"meta":30,"style":30},"#二维数组分割\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",[318,99673,99674,99679,99703,99708,99717,99721,99725,99730,99735,99740,99745,99750,99755,99760,99764,99777,99781,99785,99789,99793,99797,99802,99807,99812,99816,99821,99837,99841,99845,99850,99855,99860,99865,99870,99875,99880,99885,99890,99895,99900,99905,99910,99915,99920,99925,99930,99935,99939,99943,99963,99967,99971,99976,99981,99986,99991,99996,100001,100006,100011,100016,100021,100026,100031,100036,100041,100046,100051,100056,100061,100065,100070,100079,100083,100087,100091,100095,100099,100103,100107,100111,100115,100124,100128,100132,100136,100140,100144,100148,100152,100156,100160,100164,100168,100172,100176,100180,100184,100188,100192,100196,100200,100204,100208,100221,100225,100229,100233,100237,100241,100245,100249,100253],{"__ignoreMap":30},[321,99675,99676],{"class":323,"line":324},[321,99677,99678],{"class":390},"#二维数组分割\n",[321,99680,99681,99683,99685,99687,99689,99691,99693,99695,99697,99699,99701],{"class":323,"line":167},[321,99682,93451],{"class":331},[321,99684,377],{"class":327},[321,99686,93147],{"class":331},[321,99688,549],{"class":380},[321,99690,710],{"class":331},[321,99692,657],{"class":380},[321,99694,93152],{"class":331},[321,99696,676],{"class":380},[321,99698,710],{"class":331},[321,99700,676],{"class":380},[321,99702,338],{"class":331},[321,99704,99705],{"class":323,"line":200},[321,99706,99707],{"class":390},"#默认axis=0  传入整数平均分,按行来的\n",[321,99709,99710,99713,99715],{"class":323,"line":1401},[321,99711,99712],{"class":331},"np.split(aa,",[321,99714,403],{"class":380},[321,99716,338],{"class":331},[321,99718,99719],{"class":323,"line":1407},[321,99720,95909],{"class":390},[321,99722,99723],{"class":323,"line":1421},[321,99724,94073],{"class":436},[321,99726,99727],{"class":323,"line":1427},[321,99728,99729],{"class":436},"[array([[ 1,  2,  3,  4,  5,  6],\n",[321,99731,99732],{"class":323,"line":1518},[321,99733,99734],{"class":436},"        [ 7,  8,  9, 10, 11, 12]]),\n",[321,99736,99737],{"class":323,"line":1524},[321,99738,99739],{"class":436}," array([[13, 14, 15, 16, 17, 18],\n",[321,99741,99742],{"class":323,"line":1536},[321,99743,99744],{"class":436},"        [19, 20, 21, 22, 23, 24]]),\n",[321,99746,99747],{"class":323,"line":1818},[321,99748,99749],{"class":436}," array([[25, 26, 27, 28, 29, 30],\n",[321,99751,99752],{"class":323,"line":1823},[321,99753,99754],{"class":436},"        [31, 32, 33, 34, 35, 36]])]\n",[321,99756,99757],{"class":323,"line":1829},[321,99758,99759],{"class":436}," '''\n",[321,99761,99762],{"class":323,"line":1834},[321,99763,99619],{"class":390},[321,99765,99766,99769,99771,99773,99775],{"class":323,"line":1848},[321,99767,99768],{"class":331},"np.split(aa,[",[321,99770,409],{"class":380},[321,99772,710],{"class":331},[321,99774,651],{"class":380},[321,99776,4863],{"class":331},[321,99778,99779],{"class":323,"line":1853},[321,99780,95909],{"class":390},[321,99782,99783],{"class":323,"line":1859},[321,99784,94073],{"class":436},[321,99786,99787],{"class":323,"line":1880},[321,99788,99729],{"class":436},[321,99790,99791],{"class":323,"line":1885},[321,99792,99734],{"class":436},[321,99794,99795],{"class":323,"line":1899},[321,99796,99739],{"class":436},[321,99798,99799],{"class":323,"line":1904},[321,99800,99801],{"class":436},"        [19, 20, 21, 22, 23, 24],\n",[321,99803,99804],{"class":323,"line":1933},[321,99805,99806],{"class":436},"        [25, 26, 27, 28, 29, 30]]),\n",[321,99808,99809],{"class":323,"line":1938},[321,99810,99811],{"class":436}," array([[31, 32, 33, 34, 35, 36]])]\n",[321,99813,99814],{"class":323,"line":1955},[321,99815,94073],{"class":436},[321,99817,99818],{"class":323,"line":1960},[321,99819,99820],{"class":390},"#axis=1 按照列来分\n",[321,99822,99823,99825,99827,99829,99831,99833,99835],{"class":323,"line":1965},[321,99824,99712],{"class":331},[321,99826,403],{"class":380},[321,99828,710],{"class":331},[321,99830,47659],{"class":5423},[321,99832,377],{"class":327},[321,99834,549],{"class":380},[321,99836,338],{"class":331},[321,99838,99839],{"class":323,"line":1970},[321,99840,95909],{"class":390},[321,99842,99843],{"class":323,"line":1984},[321,99844,94073],{"class":436},[321,99846,99847],{"class":323,"line":1989},[321,99848,99849],{"class":436},"[array([[ 1,  2],\n",[321,99851,99852],{"class":323,"line":2783},[321,99853,99854],{"class":436},"        [ 7,  8],\n",[321,99856,99857],{"class":323,"line":2797},[321,99858,99859],{"class":436},"        [13, 14],\n",[321,99861,99862],{"class":323,"line":2805},[321,99863,99864],{"class":436},"        [19, 20],\n",[321,99866,99867],{"class":323,"line":2810},[321,99868,99869],{"class":436},"        [25, 26],\n",[321,99871,99872],{"class":323,"line":2816},[321,99873,99874],{"class":436},"        [31, 32]]),\n",[321,99876,99877],{"class":323,"line":2822},[321,99878,99879],{"class":436}," array([[ 3,  4],\n",[321,99881,99882],{"class":323,"line":2827},[321,99883,99884],{"class":436},"        [ 9, 10],\n",[321,99886,99887],{"class":323,"line":8155},[321,99888,99889],{"class":436},"        [15, 16],\n",[321,99891,99892],{"class":323,"line":8179},[321,99893,99894],{"class":436},"        [21, 22],\n",[321,99896,99897],{"class":323,"line":8184},[321,99898,99899],{"class":436},"        [27, 28],\n",[321,99901,99902],{"class":323,"line":8190},[321,99903,99904],{"class":436},"        [33, 34]]),\n",[321,99906,99907],{"class":323,"line":8217},[321,99908,99909],{"class":436}," array([[ 5,  6],\n",[321,99911,99912],{"class":323,"line":8222},[321,99913,99914],{"class":436},"        [11, 12],\n",[321,99916,99917],{"class":323,"line":8228},[321,99918,99919],{"class":436},"        [17, 18],\n",[321,99921,99922],{"class":323,"line":8240},[321,99923,99924],{"class":436},"        [23, 24],\n",[321,99926,99927],{"class":323,"line":8252},[321,99928,99929],{"class":436},"        [29, 30],\n",[321,99931,99932],{"class":323,"line":8264},[321,99933,99934],{"class":436},"        [35, 36]])]\n",[321,99936,99937],{"class":323,"line":9923},[321,99938,99759],{"class":436},[321,99940,99941],{"class":323,"line":9948},[321,99942,99619],{"class":390},[321,99944,99945,99947,99949,99951,99953,99955,99957,99959,99961],{"class":323,"line":9971},[321,99946,99768],{"class":331},[321,99948,549],{"class":380},[321,99950,710],{"class":331},[321,99952,409],{"class":380},[321,99954,41754],{"class":331},[321,99956,47659],{"class":5423},[321,99958,377],{"class":327},[321,99960,549],{"class":380},[321,99962,338],{"class":331},[321,99964,99965],{"class":323,"line":9995},[321,99966,93709],{"class":390},[321,99968,99969],{"class":323,"line":10000},[321,99970,94073],{"class":436},[321,99972,99973],{"class":323,"line":10005},[321,99974,99975],{"class":436},"[array([[ 1],\n",[321,99977,99978],{"class":323,"line":10010},[321,99979,99980],{"class":436},"        [ 7],\n",[321,99982,99983],{"class":323,"line":10019},[321,99984,99985],{"class":436},"        [13],\n",[321,99987,99988],{"class":323,"line":10024},[321,99989,99990],{"class":436},"        [19],\n",[321,99992,99993],{"class":323,"line":10030},[321,99994,99995],{"class":436},"        [25],\n",[321,99997,99998],{"class":323,"line":10051},[321,99999,100000],{"class":436},"        [31]]),\n",[321,100002,100003],{"class":323,"line":10057},[321,100004,100005],{"class":436}," array([[ 2],\n",[321,100007,100008],{"class":323,"line":10071},[321,100009,100010],{"class":436},"        [ 8],\n",[321,100012,100013],{"class":323,"line":10077},[321,100014,100015],{"class":436},"        [14],\n",[321,100017,100018],{"class":323,"line":10104},[321,100019,100020],{"class":436},"        [20],\n",[321,100022,100023],{"class":323,"line":10113},[321,100024,100025],{"class":436},"        [26],\n",[321,100027,100028],{"class":323,"line":10119},[321,100029,100030],{"class":436},"        [32]]),\n",[321,100032,100033],{"class":323,"line":10127},[321,100034,100035],{"class":436}," array([[ 3,  4,  5,  6],\n",[321,100037,100038],{"class":323,"line":10132},[321,100039,100040],{"class":436},"        [ 9, 10, 11, 12],\n",[321,100042,100043],{"class":323,"line":16811},[321,100044,100045],{"class":436},"        [15, 16, 17, 18],\n",[321,100047,100048],{"class":323,"line":16817},[321,100049,100050],{"class":436},"        [21, 22, 23, 24],\n",[321,100052,100053],{"class":323,"line":16840},[321,100054,100055],{"class":436},"        [27, 28, 29, 30],\n",[321,100057,100058],{"class":323,"line":16846},[321,100059,100060],{"class":436},"        [33, 34, 35, 36]])]\n",[321,100062,100063],{"class":323,"line":16869},[321,100064,94073],{"class":436},[321,100066,100067],{"class":323,"line":16883},[321,100068,100069],{"class":390},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[321,100071,100072,100075,100077],{"class":323,"line":16903},[321,100073,100074],{"class":331},"np.vsplit(aa,",[321,100076,403],{"class":380},[321,100078,338],{"class":331},[321,100080,100081],{"class":323,"line":16909},[321,100082,93709],{"class":390},[321,100084,100085],{"class":323,"line":16920},[321,100086,94073],{"class":436},[321,100088,100089],{"class":323,"line":16943},[321,100090,99729],{"class":436},[321,100092,100093],{"class":323,"line":16965},[321,100094,99734],{"class":436},[321,100096,100097],{"class":323,"line":16970},[321,100098,99739],{"class":436},[321,100100,100101],{"class":323,"line":16976},[321,100102,99744],{"class":436},[321,100104,100105],{"class":323,"line":16990},[321,100106,99749],{"class":436},[321,100108,100109],{"class":323,"line":17003},[321,100110,99754],{"class":436},[321,100112,100113],{"class":323,"line":17008},[321,100114,94073],{"class":436},[321,100116,100117,100120,100122],{"class":323,"line":17022},[321,100118,100119],{"class":331},"np.hsplit(aa,",[321,100121,403],{"class":380},[321,100123,338],{"class":331},[321,100125,100126],{"class":323,"line":17027},[321,100127,93709],{"class":390},[321,100129,100130],{"class":323,"line":17033},[321,100131,94073],{"class":436},[321,100133,100134],{"class":323,"line":17038},[321,100135,99849],{"class":436},[321,100137,100138],{"class":323,"line":17052},[321,100139,99854],{"class":436},[321,100141,100142],{"class":323,"line":17057},[321,100143,99859],{"class":436},[321,100145,100146],{"class":323,"line":17062},[321,100147,99864],{"class":436},[321,100149,100150],{"class":323,"line":17076},[321,100151,99869],{"class":436},[321,100153,100154],{"class":323,"line":17088},[321,100155,99874],{"class":436},[321,100157,100158],{"class":323,"line":17093},[321,100159,99879],{"class":436},[321,100161,100162],{"class":323,"line":17106},[321,100163,99884],{"class":436},[321,100165,100166],{"class":323,"line":17111},[321,100167,99889],{"class":436},[321,100169,100170],{"class":323,"line":17116},[321,100171,99894],{"class":436},[321,100173,100174],{"class":323,"line":17121},[321,100175,99899],{"class":436},[321,100177,100178],{"class":323,"line":17134},[321,100179,99904],{"class":436},[321,100181,100182],{"class":323,"line":17139},[321,100183,99909],{"class":436},[321,100185,100186],{"class":323,"line":32778},[321,100187,99914],{"class":436},[321,100189,100190],{"class":323,"line":32784},[321,100191,99919],{"class":436},[321,100193,100194],{"class":323,"line":32790},[321,100195,99924],{"class":436},[321,100197,100198],{"class":323,"line":32796},[321,100199,99929],{"class":436},[321,100201,100202],{"class":323,"line":32802},[321,100203,99934],{"class":436},[321,100205,100206],{"class":323,"line":32813},[321,100207,94073],{"class":436},[321,100209,100210,100213,100215,100217,100219],{"class":323,"line":32819},[321,100211,100212],{"class":331},"np.vsplit(aa,[",[321,100214,409],{"class":380},[321,100216,710],{"class":331},[321,100218,651],{"class":380},[321,100220,4863],{"class":331},[321,100222,100223],{"class":323,"line":32839},[321,100224,93709],{"class":390},[321,100226,100227],{"class":323,"line":32845},[321,100228,94073],{"class":436},[321,100230,100231],{"class":323,"line":32856},[321,100232,99729],{"class":436},[321,100234,100235],{"class":323,"line":32862},[321,100236,99734],{"class":436},[321,100238,100239],{"class":323,"line":32868},[321,100240,99739],{"class":436},[321,100242,100243],{"class":323,"line":32874},[321,100244,99801],{"class":436},[321,100246,100247],{"class":323,"line":32880},[321,100248,99806],{"class":436},[321,100250,100251],{"class":323,"line":32886},[321,100252,99811],{"class":436},[321,100254,100255],{"class":323,"line":32892},[321,100256,99759],{"class":436},[5333,100258,100259],{},"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":30,"searchDepth":167,"depth":167,"links":100261},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99527,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100268,"title":100269,"body":100270,"description":23584,"extension":249,"meta":100764,"navigation":251,"path":100765,"seo":100766,"stem":100767,"__hash__":100768},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100271,"toc":100755},[100272,100275,100278,100303,100307,100366,100418,100422,100424,100460,100514,100516,100554,100625,100629,100634,100638,100641,100674,100677,100681,100684,100687,100690,100693,100698,100702,100705,100708,100711,100714,100719,100723,100728,100731,100752],[10,100273,100269],{"id":100274},"_9数学函数",[19,100276,100277],{},"补充回顾：python的列表推导式",[312,100279,100281],{"className":30523,"code":100280,"language":30525,"meta":30,"style":30},"[1\u002Fi for i in a]\n",[318,100282,100283],{"__ignoreMap":30},[321,100284,100285,100287,100289,100291,100294,100296,100298,100300],{"class":323,"line":324},[321,100286,1222],{"class":331},[321,100288,549],{"class":380},[321,100290,916],{"class":327},[321,100292,100293],{"class":331},"i ",[321,100295,3231],{"class":327},[321,100297,9645],{"class":331},[321,100299,26188],{"class":327},[321,100301,100302],{"class":331}," a]\n",[14,100304,100306],{"id":100305},"_91-求倒数","9.1 求倒数",[312,100308,100310],{"className":30523,"code":100309,"language":30525,"meta":30,"style":30},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[318,100311,100312,100317,100345,100357],{"__ignoreMap":30},[321,100313,100314],{"class":323,"line":324},[321,100315,100316],{"class":390},"#数组求倒数\n",[321,100318,100319,100321,100323,100325,100327,100329,100331,100333,100335,100337,100339,100341,100343],{"class":323,"line":167},[321,100320,570],{"class":331},[321,100322,377],{"class":327},[321,100324,1222],{"class":331},[321,100326,549],{"class":380},[321,100328,710],{"class":331},[321,100330,409],{"class":380},[321,100332,710],{"class":331},[321,100334,403],{"class":380},[321,100336,710],{"class":331},[321,100338,625],{"class":380},[321,100340,710],{"class":331},[321,100342,651],{"class":380},[321,100344,33391],{"class":331},[321,100346,100347,100349,100351,100354],{"class":323,"line":200},[321,100348,595],{"class":331},[321,100350,377],{"class":327},[321,100352,100353],{"class":331},"np.array(a)",[321,100355,100356],{"class":390},"#将列表转换为数组\n",[321,100358,100359,100361,100363],{"class":323,"line":1401},[321,100360,549],{"class":380},[321,100362,916],{"class":327},[321,100364,100365],{"class":331},"b\n",[312,100367,100369],{"className":30523,"code":100368,"language":30525,"meta":30,"style":30},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[318,100370,100371,100399,100408,100413],{"__ignoreMap":30},[321,100372,100373,100375,100377,100379,100381,100383,100385,100387,100389,100391,100393,100395,100397],{"class":323,"line":324},[321,100374,570],{"class":331},[321,100376,377],{"class":327},[321,100378,1222],{"class":331},[321,100380,549],{"class":380},[321,100382,710],{"class":331},[321,100384,409],{"class":380},[321,100386,710],{"class":331},[321,100388,403],{"class":380},[321,100390,710],{"class":331},[321,100392,625],{"class":380},[321,100394,710],{"class":331},[321,100396,651],{"class":380},[321,100398,33391],{"class":331},[321,100400,100401,100403,100405],{"class":323,"line":167},[321,100402,595],{"class":331},[321,100404,377],{"class":327},[321,100406,100407],{"class":331},"np.array(a)\n",[321,100409,100410],{"class":323,"line":200},[321,100411,100412],{"class":390},"#调用numpy中的函数reciprocal()\n",[321,100414,100415],{"class":323,"line":1401},[321,100416,100417],{"class":331},"np.reciprocal(b)\n",[14,100419,100421],{"id":100420},"_92-求平方","9.2 求平方",[19,100423,94675],{},[312,100425,100427],{"className":30523,"code":100426,"language":30525,"meta":30,"style":30},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[318,100428,100429,100434,100439,100455],{"__ignoreMap":30},[321,100430,100431],{"class":323,"line":324},[321,100432,100433],{"class":390},"#square()，求平方\n",[321,100435,100436],{"class":323,"line":167},[321,100437,100438],{"class":390},"#一维数组\n",[321,100440,100441,100443,100445,100447,100449,100451,100453],{"class":323,"line":200},[321,100442,570],{"class":331},[321,100444,377],{"class":327},[321,100446,93147],{"class":331},[321,100448,549],{"class":380},[321,100450,710],{"class":331},[321,100452,778],{"class":380},[321,100454,338],{"class":331},[321,100456,100457],{"class":323,"line":1401},[321,100458,100459],{"class":331},"np.square(a)\n",[312,100461,100463],{"className":30523,"code":100462,"language":30525,"meta":30,"style":30},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[318,100464,100465,100470,100475,100496],{"__ignoreMap":30},[321,100466,100467],{"class":323,"line":324},[321,100468,100469],{"class":390},"#或者通过循环遍历的形式来计算\n",[321,100471,100472],{"class":323,"line":167},[321,100473,100474],{"class":390},"#这是一个列表\n",[321,100476,100477,100480,100482,100484,100486,100488,100490,100493],{"class":323,"line":200},[321,100478,100479],{"class":331},"[i",[321,100481,787],{"class":327},[321,100483,100293],{"class":331},[321,100485,3231],{"class":327},[321,100487,9645],{"class":331},[321,100489,26188],{"class":327},[321,100491,100492],{"class":331}," a]",[321,100494,100495],{"class":390},"#这个求完之后在数列当中\n",[321,100497,100498,100501,100503,100505,100507,100509,100511],{"class":323,"line":1401},[321,100499,100500],{"class":331},"np.array([i",[321,100502,787],{"class":327},[321,100504,100293],{"class":331},[321,100506,3231],{"class":327},[321,100508,9645],{"class":331},[321,100510,26188],{"class":327},[321,100512,100513],{"class":331}," a])\n",[19,100515,93436],{},[312,100517,100519],{"className":30523,"code":100518,"language":30525,"meta":30,"style":30},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[318,100520,100521,100525,100549],{"__ignoreMap":30},[321,100522,100523],{"class":323,"line":324},[321,100524,93446],{"class":390},[321,100526,100527,100529,100531,100533,100535,100537,100539,100541,100543,100545,100547],{"class":323,"line":167},[321,100528,93451],{"class":331},[321,100530,377],{"class":327},[321,100532,93147],{"class":331},[321,100534,549],{"class":380},[321,100536,710],{"class":331},[321,100538,855],{"class":380},[321,100540,93152],{"class":331},[321,100542,625],{"class":380},[321,100544,710],{"class":331},[321,100546,403],{"class":380},[321,100548,338],{"class":331},[321,100550,100551],{"class":323,"line":200},[321,100552,100553],{"class":331},"np.square(aa)\n",[312,100555,100557],{"className":30523,"code":100556,"language":30525,"meta":30,"style":30},"#传统的方式\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",[318,100558,100559,100564,100573,100589,100605,100620],{"__ignoreMap":30},[321,100560,100561],{"class":323,"line":324},[321,100562,100563],{"class":390},"#传统的方式\n",[321,100565,100566,100568,100570],{"class":323,"line":167},[321,100567,98332],{"class":331},[321,100569,377],{"class":327},[321,100571,100572],{"class":331},"np.empty_like(aa)\n",[321,100574,100575,100577,100579,100581,100583,100585,100587],{"class":323,"line":200},[321,100576,3231],{"class":327},[321,100578,9645],{"class":331},[321,100580,26188],{"class":327},[321,100582,32588],{"class":380},[321,100584,332],{"class":331},[321,100586,625],{"class":380},[321,100588,30931],{"class":331},[321,100590,100591,100593,100595,100597,100599,100601,100603],{"class":323,"line":1401},[321,100592,3407],{"class":327},[321,100594,9707],{"class":331},[321,100596,26188],{"class":327},[321,100598,32588],{"class":380},[321,100600,332],{"class":331},[321,100602,403],{"class":380},[321,100604,30931],{"class":331},[321,100606,100607,100610,100612,100615,100617],{"class":323,"line":1407},[321,100608,100609],{"class":331},"        bb[i,j]",[321,100611,377],{"class":327},[321,100613,100614],{"class":331},"aa[i,j]",[321,100616,787],{"class":327},[321,100618,100619],{"class":331},"aa[i,j]\n",[321,100621,100622],{"class":323,"line":1421},[321,100623,100624],{"class":331},"bb\n",[14,100626,100628],{"id":100627},"_93-求各元素的符号","9.3 求各元素的符号",[19,100630,100631],{},[28,100632],{"alt":30,"src":100633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100635,100637],{"id":100636},"_94-modf函数","9.4 modf函数",[19,100639,100640],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[312,100642,100644],{"className":30523,"code":100643,"language":30525,"meta":30,"style":30},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[318,100645,100646,100669],{"__ignoreMap":30},[321,100647,100648,100650,100652,100654,100656,100658,100660,100662,100664,100667],{"class":323,"line":324},[321,100649,570],{"class":331},[321,100651,377],{"class":327},[321,100653,93147],{"class":331},[321,100655,864],{"class":327},[321,100657,778],{"class":380},[321,100659,710],{"class":331},[321,100661,778],{"class":380},[321,100663,710],{"class":331},[321,100665,100666],{"class":380},"0.3",[321,100668,338],{"class":331},[321,100670,100671],{"class":323,"line":167},[321,100672,100673],{"class":331},"np.modf(a)\n",[19,100675,100676],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100678,100680],{"id":100679},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100682,100683],{},"np.cell()",[19,100685,100686],{},"np.floor()",[19,100688,100689],{},"np.rint()",[19,100691,100692],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100694,100695],{},[28,100696],{"alt":30,"src":100697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100699,100701],{"id":100700},"_96-around函数","9.6 around()函数",[19,100703,100704],{},"around()函数也可以实现对数的小数位数进行操作",[19,100706,100707],{},"其中的参数：",[19,100709,100710],{},"1.要传的数组",[19,100712,100713],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100715,100716],{},[28,100717],{"alt":30,"src":100718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100720,100722],{"id":100721},"_97-三角函数","9.7 三角函数",[19,100724,100725],{},[28,100726],{"alt":30,"src":100727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100729,100730],{},"引入图像模块非常重要",[312,100732,100734],{"className":30523,"code":100733,"language":30525,"meta":30,"style":30},"from matplotlib import pyplot as plt\n",[318,100735,100736],{"__ignoreMap":30},[321,100737,100738,100740,100743,100745,100748,100750],{"class":323,"line":324},[321,100739,30882],{"class":327},[321,100741,100742],{"class":331}," matplotlib ",[321,100744,30537],{"class":327},[321,100746,100747],{"class":331}," pyplot ",[321,100749,31528],{"class":327},[321,100751,31582],{"class":331},[5333,100753,100754],{},"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":30,"searchDepth":167,"depth":167,"links":100756},[100757,100758,100759,100760,100761,100762,100763],{"id":100305,"depth":167,"text":100306},{"id":100420,"depth":167,"text":100421},{"id":100627,"depth":167,"text":100628},{"id":100636,"depth":167,"text":100637},{"id":100679,"depth":167,"text":100680},{"id":100700,"depth":167,"text":100701},{"id":100721,"depth":167,"text":100722},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100269,"description":23584},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100770,"title":100771,"body":100772,"description":23584,"extension":249,"meta":100776,"navigation":251,"path":100777,"seo":100778,"stem":100779,"__hash__":100780},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100773,"toc":100774},[],{"title":30,"searchDepth":167,"depth":167,"links":100775},[],{"category":50565},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100771,"description":23584},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100782,"title":100783,"body":100784,"description":30,"extension":249,"meta":102792,"navigation":251,"path":102793,"seo":102794,"stem":102795,"__hash__":102796},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100785,"toc":102768},[100786,100789,100793,100796,100799,100805,100808,100831,100834,100868,100871,100912,100916,100919,101012,101015,101059,101062,101079,101082,101096,101099,101102,101147,101150,101187,101191,101194,101200,101205,101225,101229,101232,101298,101301,101319,101323,101326,101355,101365,101371,101375,101378,101384,101395,101399,101402,101432,101435,101715,101718,101721,101732,101735,101738,101760,101767,101770,101788,101791,101794,101808,101816,101819,101845,101851,101854,101857,101867,101879,101899,101908,101928,101938,101962,101975,101989,101994,102035,102052,102077,102089,102109,102115,102160,102179,102196,102209,102225,102232,102244,102253,102288,102309,102334,102347,102371,102386,102411,102414,102435,102444,102447,102458,102462,102465,102471,102483,102490,102494,102497,102509,102512,102526,102529,102539,102549,102552,102592,102595,102599,102605,102608,102622,102626,102629,102662,102666,102669,102692,102700,102703,102709,102715,102718,102721,102749,102753,102756,102762,102765],[10,100787,100783],{"id":100788},"_1环境安装与第一个-mujoco-程序",[14,100790,100792],{"id":100791},"_1目标说明","1.目标说明",[19,100794,100795],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100797,100798],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[312,100800,100803],{"className":100801,"code":100802,"language":5394,"meta":30},[5392],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[318,100804,100802],{"__ignoreMap":30},[19,100806,100807],{},"需要掌握:",[151,100809,100810,100813,100816,100821,100826],{},[154,100811,100812],{},"Fedora 44 下 MuJoCo 的系统依赖",[154,100814,100815],{},"Python 虚拟环境创建",[154,100817,100818],{},[318,100819,100820],{},"mujoco.MjModel",[154,100822,100823],{},[318,100824,100825],{},"mujoco.MjData",[154,100827,100828],{},[318,100829,100830],{},"mujoco.mj_step(model, data)",[19,100832,100833],{},"MuJoCo 中最重要的两个对象:",[469,100835,100836,100846],{},[472,100837,100838],{},[475,100839,100840,100843],{},[478,100841,100842],{"align":23944},"对象",[478,100844,100845],{"align":23944},"含义",[516,100847,100848,100858],{},[475,100849,100850,100855],{},[521,100851,100852],{"align":23944},[318,100853,100854],{},"MjModel",[521,100856,100857],{"align":23944},"模型结构，来自 XML，基本不随时间变化",[475,100859,100860,100865],{},[521,100861,100862],{"align":23944},[318,100863,100864],{},"MjData",[521,100866,100867],{"align":23944},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100869,100870],{},"可以先用一个类比理解：",[469,100872,100873,100883],{},[472,100874,100875],{},[475,100876,100877,100880],{},[478,100878,100879],{"align":23944},"类比",[478,100881,100882],{"align":23944},"MuJoCo 对象",[516,100884,100885,100894,100903],{},[475,100886,100887,100890],{},[521,100888,100889],{"align":23944},"游戏地图和角色配置",[521,100891,100892],{"align":23944},[318,100893,100854],{},[475,100895,100896,100899],{},[521,100897,100898],{"align":23944},"游戏运行到当前帧的状态",[521,100900,100901],{"align":23944},[318,100902,100864],{},[475,100904,100905,100908],{},[521,100906,100907],{"align":23944},"前进一帧",[521,100909,100910],{"align":23944},[318,100911,100830],{},[14,100913,100915],{"id":100914},"_2环境与依赖安装","2.环境与依赖安装",[19,100917,100918],{},"Fedora 44 系统依赖:",[312,100920,100922],{"className":24030,"code":100921,"language":24032,"meta":30,"style":30},"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",[318,100923,100924,100936,100949,100962,100972,100982,101001],{"__ignoreMap":30},[321,100925,100926,100928,100930,100932,100934],{"class":323,"line":324},[321,100927,24721],{"class":2169},[321,100929,26460],{"class":436},[321,100931,24042],{"class":436},[321,100933,26545],{"class":380},[321,100935,24823],{"class":380},[321,100937,100938,100941,100944,100947],{"class":323,"line":167},[321,100939,100940],{"class":436},"  python3",[321,100942,100943],{"class":436}," python3-pip",[321,100945,100946],{"class":436}," python3-virtualenv",[321,100948,24823],{"class":380},[321,100950,100951,100954,100957,100960],{"class":323,"line":200},[321,100952,100953],{"class":436},"  mesa-libGL",[321,100955,100956],{"class":436}," mesa-libGLU",[321,100958,100959],{"class":436}," mesa-dri-drivers",[321,100961,24823],{"class":380},[321,100963,100964,100967,100970],{"class":323,"line":1401},[321,100965,100966],{"class":436},"  libglvnd-glx",[321,100968,100969],{"class":436}," libglvnd-opengl",[321,100971,24823],{"class":380},[321,100973,100974,100977,100980],{"class":323,"line":1407},[321,100975,100976],{"class":436},"  glfw",[321,100978,100979],{"class":436}," glfw-devel",[321,100981,24823],{"class":380},[321,100983,100984,100987,100990,100993,100996,100999],{"class":323,"line":1421},[321,100985,100986],{"class":436},"  libX11",[321,100988,100989],{"class":436}," libXcursor",[321,100991,100992],{"class":436}," libXi",[321,100994,100995],{"class":436}," libXinerama",[321,100997,100998],{"class":436}," libXrandr",[321,101000,24823],{"class":380},[321,101002,101003,101006,101009],{"class":323,"line":1427},[321,101004,101005],{"class":436},"  gcc",[321,101007,101008],{"class":436}," gcc-c++",[321,101010,101011],{"class":436}," make\n",[19,101013,101014],{},"创建 Python 环境:",[312,101016,101018],{"className":24030,"code":101017,"language":24032,"meta":30,"style":30},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[318,101019,101020,101034,101042],{"__ignoreMap":30},[321,101021,101022,101025,101028,101031],{"class":323,"line":324},[321,101023,101024],{"class":2169},"python3",[321,101026,101027],{"class":380}," -m",[321,101029,101030],{"class":436}," venv",[321,101032,101033],{"class":436}," .venv\n",[321,101035,101036,101039],{"class":323,"line":167},[321,101037,101038],{"class":380},"source",[321,101040,101041],{"class":436}," .venv\u002Fbin\u002Factivate\n",[321,101043,101044,101046,101048,101051,101053,101056],{"class":323,"line":200},[321,101045,30525],{"class":2169},[321,101047,101027],{"class":380},[321,101049,101050],{"class":436}," pip",[321,101052,24042],{"class":436},[321,101054,101055],{"class":380}," --upgrade",[321,101057,101058],{"class":436}," pip\n",[19,101060,101061],{},"pip 安装:",[312,101063,101065],{"className":24030,"code":101064,"language":24032,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy\n",[318,101066,101067],{"__ignoreMap":30},[321,101068,101069,101071,101073,101076],{"class":323,"line":324},[321,101070,24039],{"class":2169},[321,101072,24042],{"class":436},[321,101074,101075],{"class":436}," \"mujoco>=2.3\"",[321,101077,101078],{"class":436}," numpy\n",[19,101080,101081],{},"安装完成后，先做最小检查：",[312,101083,101085],{"className":24030,"code":101084,"language":24032,"meta":30,"style":30},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[318,101086,101087],{"__ignoreMap":30},[321,101088,101089,101091,101093],{"class":323,"line":324},[321,101090,30525],{"class":2169},[321,101092,30503],{"class":380},[321,101094,101095],{"class":436}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101097,101098],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101100,101101],{},"conda 安装:",[312,101103,101105],{"className":24030,"code":101104,"language":24032,"meta":30,"style":30},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[318,101106,101107,101127,101137],{"__ignoreMap":30},[321,101108,101109,101111,101113,101115,101118,101121,101124],{"class":323,"line":324},[321,101110,30475],{"class":2169},[321,101112,29321],{"class":436},[321,101114,25260],{"class":380},[321,101116,101117],{"class":436}," mujoco-study",[321,101119,101120],{"class":436}," python=",[321,101122,101123],{"class":380},"3.10",[321,101125,101126],{"class":380}," -y\n",[321,101128,101129,101131,101134],{"class":323,"line":167},[321,101130,30475],{"class":2169},[321,101132,101133],{"class":436}," activate",[321,101135,101136],{"class":436}," mujoco-study\n",[321,101138,101139,101141,101143,101145],{"class":323,"line":200},[321,101140,24039],{"class":2169},[321,101142,24042],{"class":436},[321,101144,101075],{"class":436},[321,101146,101078],{"class":436},[19,101148,101149],{},"版本冲突说明:",[151,101151,101152,101158,101168,101177],{},[154,101153,101154,101155,28530],{},"不要安装 ",[318,101156,101157],{},"mujoco-py",[154,101159,101160,101161,101163,101164,101167],{},"如果旧项目里同时安装了 ",[318,101162,101157],{}," 和 ",[318,101165,101166],{},"mujoco","，建议新建干净虚拟环境。",[154,101169,101170,101173,101174,28530],{},[318,101171,101172],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[318,101175,101176],{},"~\u002F.mujoco\u002Fmujoco210",[154,101178,101179,101180,82684,101183,101186],{},"离屏渲染可能涉及 OpenGL 后端，",[318,101181,101182],{},"MUJOCO_GL=egl",[318,101184,101185],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101188,101190],{"id":101189},"_3核心概念解释","3.核心概念解释",[19,101192,101193],{},"MuJoCo 的基本执行流程:",[312,101195,101198],{"className":101196,"code":101197,"language":5394,"meta":30},[5392],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[318,101199,101197],{"__ignoreMap":30},[19,101201,101202,101204],{},[318,101203,100854],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101206,101207,101209,101210,544,101213,544,101216,544,101219,544,101222,28530],{},[318,101208,100864],{}," 存放仿真运行时状态，例如 ",[318,101211,101212],{},"data.time",[318,101214,101215],{},"data.qpos",[318,101217,101218],{},"data.qvel",[318,101220,101221],{},"data.ctrl",[318,101223,101224],{},"data.xpos",[292,101226,101228],{"id":101227},"xml-是什么","XML 是什么",[19,101230,101231],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[312,101233,101235],{"className":53212,"code":101234,"language":53214,"meta":30,"style":30},"\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",[318,101236,101237,101259,101290],{"__ignoreMap":30},[321,101238,101239,101241,101243,101245,101247,101249,101252,101254,101257],{"class":323,"line":324},[321,101240,1242],{"class":331},[321,101242,51945],{"class":51445},[321,101244,15127],{"class":2169},[321,101246,377],{"class":331},[321,101248,53636],{"class":436},[321,101250,101251],{"class":2169}," pos",[321,101253,377],{"class":331},[321,101255,101256],{"class":436},"\"0 0 1\"",[321,101258,51452],{"class":331},[321,101260,101261,101263,101266,101268,101270,101273,101275,101277,101279,101282,101284,101287],{"class":323,"line":167},[321,101262,52289],{"class":331},[321,101264,101265],{"class":51445},"geom",[321,101267,15127],{"class":2169},[321,101269,377],{"class":331},[321,101271,101272],{"class":436},"\"box_geom\"",[321,101274,53969],{"class":2169},[321,101276,377],{"class":331},[321,101278,53636],{"class":436},[321,101280,101281],{"class":2169}," size",[321,101283,377],{"class":331},[321,101285,101286],{"class":436},"\"0.1 0.1 0.1\"",[321,101288,101289],{"class":331},"\u002F>\n",[321,101291,101292,101294,101296],{"class":323,"line":200},[321,101293,51930],{"class":331},[321,101295,51945],{"class":51445},[321,101297,51452],{"class":331},[19,101299,101300],{},"这段意思是：",[151,101302,101303,101309,101316],{},[154,101304,101305,101306,101308],{},"创建一个叫 ",[318,101307,53859],{}," 的刚体。",[154,101310,101311,101312,101315],{},"它初始放在 ",[318,101313,101314],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[154,101317,101318],{},"它里面有一个盒子形状的几何体。",[292,101320,101322],{"id":101321},"timestep-是什么","timestep 是什么",[19,101324,101325],{},"XML 里的：",[312,101327,101329],{"className":53212,"code":101328,"language":53214,"meta":30,"style":30},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[318,101330,101331],{"__ignoreMap":30},[321,101332,101333,101335,101337,101340,101342,101345,101348,101350,101353],{"class":323,"line":324},[321,101334,1242],{"class":331},[321,101336,69311],{"class":51445},[321,101338,101339],{"class":2169}," timestep",[321,101341,377],{"class":331},[321,101343,101344],{"class":436},"\"0.01\"",[321,101346,101347],{"class":2169}," gravity",[321,101349,377],{"class":331},[321,101351,101352],{"class":436},"\"0 0 -9.81\"",[321,101354,101289],{"class":331},[19,101356,101357,101358,101361,101362,101364],{},"表示每调用一次 ",[318,101359,101360],{},"mj_step","，仿真时间前进 ",[318,101363,39131],{}," 秒。循环 100 次，大约就是 1 秒：",[312,101366,101369],{"className":101367,"code":101368,"language":5394,"meta":30},[5392],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[318,101370,101368],{"__ignoreMap":30},[292,101372,101374],{"id":101373},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101376,101377],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[312,101379,101382],{"className":101380,"code":101381,"language":5394,"meta":30},[5392],"x y z qw qx qy qz\n",[318,101383,101381],{"__ignoreMap":30},[19,101385,101386,101387,101390,101391,101394],{},"表示一个自由刚体的位置和姿态。其中 ",[318,101388,101389],{},"x y z"," 是位置，",[318,101392,101393],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101396,101398],{"id":101397},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101400,101401],{},"新建文件:",[312,101403,101405],{"className":24030,"code":101404,"language":24032,"meta":30,"style":30},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[318,101406,101407,101417,101424],{"__ignoreMap":30},[321,101408,101409,101412,101414],{"class":323,"line":324},[321,101410,101411],{"class":2169},"mkdir",[321,101413,29361],{"class":380},[321,101415,101416],{"class":436}," mujoco_tutorial\n",[321,101418,101419,101422],{"class":323,"line":167},[321,101420,101421],{"class":380},"cd",[321,101423,101416],{"class":436},[321,101425,101426,101429],{"class":323,"line":200},[321,101427,101428],{"class":2169},"touch",[321,101430,101431],{"class":436}," ch1_first_sim.py\n",[19,101433,101434],{},"写入:",[312,101436,101438],{"className":30523,"code":101437,"language":30525,"meta":30,"style":30},"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",[318,101439,101440,101447,101451,101455,101465,101470,101475,101479,101484,101489,101493,101498,101503,101508,101513,101518,101523,101527,101531,101535,101548,101562,101572,101576,101588,101600,101612,101624,101636,101640,101657,101662,101666,101677,101688,101692,101696,101710],{"__ignoreMap":30},[321,101441,101442,101444],{"class":323,"line":324},[321,101443,30537],{"class":327},[321,101445,101446],{"class":331}," mujoco\n",[321,101448,101449],{"class":323,"line":167},[321,101450,2606],{"emptyLinePlaceholder":251},[321,101452,101453],{"class":323,"line":200},[321,101454,2606],{"emptyLinePlaceholder":251},[321,101456,101457,101460,101462],{"class":323,"line":1401},[321,101458,101459],{"class":380},"XML",[321,101461,13771],{"class":327},[321,101463,101464],{"class":436}," \"\"\"\n",[321,101466,101467],{"class":323,"line":1407},[321,101468,101469],{"class":436},"\u003Cmujoco model=\"first_sim\">\n",[321,101471,101472],{"class":323,"line":1421},[321,101473,101474],{"class":436},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[321,101476,101477],{"class":323,"line":1427},[321,101478,2606],{"emptyLinePlaceholder":251},[321,101480,101481],{"class":323,"line":1518},[321,101482,101483],{"class":436},"  \u003Cworldbody>\n",[321,101485,101486],{"class":323,"line":1524},[321,101487,101488],{"class":436},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[321,101490,101491],{"class":323,"line":1536},[321,101492,2606],{"emptyLinePlaceholder":251},[321,101494,101495],{"class":323,"line":1818},[321,101496,101497],{"class":436},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[321,101499,101500],{"class":323,"line":1823},[321,101501,101502],{"class":436},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[321,101504,101505],{"class":323,"line":1829},[321,101506,101507],{"class":436},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[321,101509,101510],{"class":323,"line":1834},[321,101511,101512],{"class":436},"    \u003C\u002Fbody>\n",[321,101514,101515],{"class":323,"line":1848},[321,101516,101517],{"class":436},"  \u003C\u002Fworldbody>\n",[321,101519,101520],{"class":323,"line":1853},[321,101521,101522],{"class":436},"\u003C\u002Fmujoco>\n",[321,101524,101525],{"class":323,"line":1859},[321,101526,95843],{"class":436},[321,101528,101529],{"class":323,"line":1880},[321,101530,2606],{"emptyLinePlaceholder":251},[321,101532,101533],{"class":323,"line":1885},[321,101534,2606],{"emptyLinePlaceholder":251},[321,101536,101537,101539,101541,101544,101546],{"class":323,"line":1899},[321,101538,32092],{"class":327},[321,101540,2179],{"class":2169},[321,101542,101543],{"class":331},"() -> ",[321,101545,95831],{"class":380},[321,101547,3945],{"class":331},[321,101549,101550,101553,101555,101558,101560],{"class":323,"line":1904},[321,101551,101552],{"class":331},"    model ",[321,101554,377],{"class":327},[321,101556,101557],{"class":331}," mujoco.MjModel.from_xml_string(",[321,101559,101459],{"class":380},[321,101561,338],{"class":331},[321,101563,101564,101567,101569],{"class":323,"line":1933},[321,101565,101566],{"class":331},"    data ",[321,101568,377],{"class":327},[321,101570,101571],{"class":331}," mujoco.MjData(model)\n",[321,101573,101574],{"class":323,"line":1938},[321,101575,2606],{"emptyLinePlaceholder":251},[321,101577,101578,101580,101582,101585],{"class":323,"line":1955},[321,101579,31444],{"class":380},[321,101581,332],{"class":331},[321,101583,101584],{"class":436},"\"nq:\"",[321,101586,101587],{"class":331},", model.nq)\n",[321,101589,101590,101592,101594,101597],{"class":323,"line":1960},[321,101591,31444],{"class":380},[321,101593,332],{"class":331},[321,101595,101596],{"class":436},"\"nv:\"",[321,101598,101599],{"class":331},", model.nv)\n",[321,101601,101602,101604,101606,101609],{"class":323,"line":1965},[321,101603,31444],{"class":380},[321,101605,332],{"class":331},[321,101607,101608],{"class":436},"\"nu:\"",[321,101610,101611],{"class":331},", model.nu)\n",[321,101613,101614,101616,101618,101621],{"class":323,"line":1970},[321,101615,31444],{"class":380},[321,101617,332],{"class":331},[321,101619,101620],{"class":436},"\"initial time:\"",[321,101622,101623],{"class":331},", data.time)\n",[321,101625,101626,101628,101630,101633],{"class":323,"line":1984},[321,101627,31444],{"class":380},[321,101629,332],{"class":331},[321,101631,101632],{"class":436},"\"initial qpos:\"",[321,101634,101635],{"class":331},", data.qpos.copy())\n",[321,101637,101638],{"class":323,"line":1989},[321,101639,2606],{"emptyLinePlaceholder":251},[321,101641,101642,101644,101647,101649,101651,101653,101655],{"class":323,"line":2783},[321,101643,3407],{"class":327},[321,101645,101646],{"class":331}," _ ",[321,101648,26188],{"class":327},[321,101650,32588],{"class":380},[321,101652,332],{"class":331},[321,101654,643],{"class":380},[321,101656,30931],{"class":331},[321,101658,101659],{"class":323,"line":2797},[321,101660,101661],{"class":331},"        mujoco.mj_step(model, data)\n",[321,101663,101664],{"class":323,"line":2805},[321,101665,2606],{"emptyLinePlaceholder":251},[321,101667,101668,101670,101672,101675],{"class":323,"line":2810},[321,101669,31444],{"class":380},[321,101671,332],{"class":331},[321,101673,101674],{"class":436},"\"final time:\"",[321,101676,101623],{"class":331},[321,101678,101679,101681,101683,101686],{"class":323,"line":2816},[321,101680,31444],{"class":380},[321,101682,332],{"class":331},[321,101684,101685],{"class":436},"\"final qpos:\"",[321,101687,101635],{"class":331},[321,101689,101690],{"class":323,"line":2822},[321,101691,2606],{"emptyLinePlaceholder":251},[321,101693,101694],{"class":323,"line":2827},[321,101695,2606],{"emptyLinePlaceholder":251},[321,101697,101698,101700,101702,101705,101708],{"class":323,"line":8155},[321,101699,1737],{"class":327},[321,101701,31365],{"class":380},[321,101703,101704],{"class":327}," ==",[321,101706,101707],{"class":436}," \"__main__\"",[321,101709,3945],{"class":331},[321,101711,101712],{"class":323,"line":8179},[321,101713,101714],{"class":331},"    main()\n",[292,101716,101717],{"id":101717},"代码逐段解释",[19,101719,101720],{},"导入库：",[312,101722,101724],{"className":30523,"code":101723,"language":30525,"meta":30,"style":30},"import mujoco\n",[318,101725,101726],{"__ignoreMap":30},[321,101727,101728,101730],{"class":323,"line":324},[321,101729,30537],{"class":327},[321,101731,101446],{"class":331},[19,101733,101734],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101736,101737],{},"定义 XML：",[312,101739,101741],{"className":30523,"code":101740,"language":30525,"meta":30,"style":30},"XML = \"\"\"\n...\n\"\"\"\n",[318,101742,101743,101751,101756],{"__ignoreMap":30},[321,101744,101745,101747,101749],{"class":323,"line":324},[321,101746,101459],{"class":380},[321,101748,13771],{"class":327},[321,101750,101464],{"class":436},[321,101752,101753],{"class":323,"line":167},[321,101754,101755],{"class":436},"...\n",[321,101757,101758],{"class":323,"line":200},[321,101759,95843],{"class":436},[19,101761,101762,101763,101766],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[318,101764,101765],{},"freejoint"," 的方块。",[19,101768,101769],{},"编译模型：",[312,101771,101773],{"className":30523,"code":101772,"language":30525,"meta":30,"style":30},"model = mujoco.MjModel.from_xml_string(XML)\n",[318,101774,101775],{"__ignoreMap":30},[321,101776,101777,101780,101782,101784,101786],{"class":323,"line":324},[321,101778,101779],{"class":331},"model ",[321,101781,377],{"class":327},[321,101783,101557],{"class":331},[321,101785,101459],{"class":380},[321,101787,338],{"class":331},[19,101789,101790],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101792,101793],{},"创建数据：",[312,101795,101797],{"className":30523,"code":101796,"language":30525,"meta":30,"style":30},"data = mujoco.MjData(model)\n",[318,101798,101799],{"__ignoreMap":30},[321,101800,101801,101804,101806],{"class":323,"line":324},[321,101802,101803],{"class":331},"data ",[321,101805,377],{"class":327},[321,101807,101571],{"class":331},[19,101809,101810,101812,101813,101815],{},[318,101811,33546],{}," 会保存仿真当前状态。刚创建时，时间是 ",[318,101814,523],{},"，方块还在初始位置。",[19,101817,101818],{},"推进仿真：",[312,101820,101822],{"className":30523,"code":101821,"language":30525,"meta":30,"style":30},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[318,101823,101824,101840],{"__ignoreMap":30},[321,101825,101826,101828,101830,101832,101834,101836,101838],{"class":323,"line":324},[321,101827,3231],{"class":327},[321,101829,101646],{"class":331},[321,101831,26188],{"class":327},[321,101833,32588],{"class":380},[321,101835,332],{"class":331},[321,101837,643],{"class":380},[321,101839,30931],{"class":331},[321,101841,101842],{"class":323,"line":167},[321,101843,101844],{"class":331},"    mujoco.mj_step(model, data)\n",[19,101846,101847,101848,101850],{},"每次 ",[318,101849,101360],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[292,101852,101853],{"id":101853},"代码逐行细讲",[19,101855,101856],{},"下面把完整代码按新手视角拆开讲。",[312,101858,101859],{"className":30523,"code":101723,"language":30525,"meta":30,"style":30},[318,101860,101861],{"__ignoreMap":30},[321,101862,101863,101865],{"class":323,"line":324},[321,101864,30537],{"class":327},[321,101866,101446],{"class":331},[19,101868,101869,101871,101872,544,101874,544,101876,28530],{},[318,101870,30537],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[318,101873,100820],{},[318,101875,100825],{},[318,101877,101878],{},"mujoco.mj_step",[312,101880,101881],{"className":30523,"code":101740,"language":30525,"meta":30,"style":30},[318,101882,101883,101891,101895],{"__ignoreMap":30},[321,101884,101885,101887,101889],{"class":323,"line":324},[321,101886,101459],{"class":380},[321,101888,13771],{"class":327},[321,101890,101464],{"class":436},[321,101892,101893],{"class":323,"line":167},[321,101894,101755],{"class":436},[321,101896,101897],{"class":323,"line":200},[321,101898,95843],{"class":436},[19,101900,101901,101903,101904,101907],{},[318,101902,101459],{}," 是一个变量名。右边的三引号 ",[318,101905,101906],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[312,101909,101910],{"className":53212,"code":101469,"language":53214,"meta":30,"style":30},[318,101911,101912],{"__ignoreMap":30},[321,101913,101914,101916,101918,101921,101923,101926],{"class":323,"line":324},[321,101915,1242],{"class":331},[321,101917,101166],{"class":51445},[321,101919,101920],{"class":2169}," model",[321,101922,377],{"class":331},[321,101924,101925],{"class":436},"\"first_sim\"",[321,101927,51452],{"class":331},[19,101929,101930,101931,101934,101935,28530],{},"这是 XML 的根标签。",[318,101932,101933],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[318,101936,101937],{},"first_sim",[312,101939,101940],{"className":53212,"code":101328,"language":53214,"meta":30,"style":30},[318,101941,101942],{"__ignoreMap":30},[321,101943,101944,101946,101948,101950,101952,101954,101956,101958,101960],{"class":323,"line":324},[321,101945,1242],{"class":331},[321,101947,69311],{"class":51445},[321,101949,101339],{"class":2169},[321,101951,377],{"class":331},[321,101953,101344],{"class":436},[321,101955,101347],{"class":2169},[321,101957,377],{"class":331},[321,101959,101352],{"class":436},[321,101961,101289],{"class":331},[19,101963,101964,101966,101967,101970,101971,101974],{},[318,101965,69311],{}," 用来设置仿真参数。",[318,101968,101969],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[318,101972,101973],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[312,101976,101978],{"className":53212,"code":101977,"language":53214,"meta":30,"style":30},"\u003Cworldbody>\n",[318,101979,101980],{"__ignoreMap":30},[321,101981,101982,101984,101987],{"class":323,"line":324},[321,101983,1242],{"class":331},[321,101985,101986],{"class":51445},"worldbody",[321,101988,51452],{"class":331},[19,101990,101991,101993],{},[318,101992,101986],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[312,101995,101997],{"className":53212,"code":101996,"language":53214,"meta":30,"style":30},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[318,101998,101999],{"__ignoreMap":30},[321,102000,102001,102003,102005,102007,102009,102012,102014,102016,102019,102021,102023,102026,102028,102030,102033],{"class":323,"line":324},[321,102002,1242],{"class":331},[321,102004,101265],{"class":51445},[321,102006,15127],{"class":2169},[321,102008,377],{"class":331},[321,102010,102011],{"class":436},"\"floor\"",[321,102013,53969],{"class":2169},[321,102015,377],{"class":331},[321,102017,102018],{"class":436},"\"plane\"",[321,102020,101281],{"class":2169},[321,102022,377],{"class":331},[321,102024,102025],{"class":436},"\"2 2 0.1\"",[321,102027,78912],{"class":2169},[321,102029,377],{"class":331},[321,102031,102032],{"class":436},"\"0.8 0.8 0.8 1\"",[321,102034,101289],{"class":331},[19,102036,102037,102038,102040,102041,102044,102045,102048,102049,102051],{},"这行创建地面。",[318,102039,101265],{}," 是几何体。",[318,102042,102043],{},"name=\"floor\""," 是名字。",[318,102046,102047],{},"type=\"plane\""," 表示平面。",[318,102050,55255],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[312,102053,102055],{"className":53212,"code":102054,"language":53214,"meta":30,"style":30},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[318,102056,102057],{"__ignoreMap":30},[321,102058,102059,102061,102063,102065,102067,102069,102071,102073,102075],{"class":323,"line":324},[321,102060,1242],{"class":331},[321,102062,51945],{"class":51445},[321,102064,15127],{"class":2169},[321,102066,377],{"class":331},[321,102068,53636],{"class":436},[321,102070,101251],{"class":2169},[321,102072,377],{"class":331},[321,102074,101256],{"class":436},[321,102076,51452],{"class":331},[19,102078,102079,102080,28530,102082,102085,102086,102088],{},"这行创建一个刚体，名字叫 ",[318,102081,53859],{},[318,102083,102084],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[318,102087,101314],{},"，也就是离地面 1 米高。",[312,102090,102092],{"className":53212,"code":102091,"language":53214,"meta":30,"style":30},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[318,102093,102094],{"__ignoreMap":30},[321,102095,102096,102098,102100,102102,102104,102107],{"class":323,"line":324},[321,102097,1242],{"class":331},[321,102099,101765],{"class":51445},[321,102101,15127],{"class":2169},[321,102103,377],{"class":331},[321,102105,102106],{"class":436},"\"box_free\"",[321,102108,101289],{"class":331},[19,102110,102111,102112,102114],{},"这行很重要。",[318,102113,101765],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[312,102116,102118],{"className":53212,"code":102117,"language":53214,"meta":30,"style":30},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[318,102119,102120],{"__ignoreMap":30},[321,102121,102122,102124,102126,102128,102130,102132,102134,102136,102138,102140,102142,102144,102147,102149,102151,102153,102155,102158],{"class":323,"line":324},[321,102123,1242],{"class":331},[321,102125,101265],{"class":51445},[321,102127,15127],{"class":2169},[321,102129,377],{"class":331},[321,102131,101272],{"class":436},[321,102133,53969],{"class":2169},[321,102135,377],{"class":331},[321,102137,53636],{"class":436},[321,102139,101281],{"class":2169},[321,102141,377],{"class":331},[321,102143,101286],{"class":436},[321,102145,102146],{"class":2169}," mass",[321,102148,377],{"class":331},[321,102150,3884],{"class":436},[321,102152,78912],{"class":2169},[321,102154,377],{"class":331},[321,102156,102157],{"class":436},"\"1 0 0 1\"",[321,102159,101289],{"class":331},[19,102161,102162,102163,102166,102167,102170,102171,102174,102175,102178],{},"这行给 box body 添加一个盒子形状。",[318,102164,102165],{},"type=\"box\""," 表示形状是盒子。",[318,102168,102169],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[318,102172,102173],{},"mass=\"1\""," 表示质量是 1。",[318,102176,102177],{},"rgba=\"1 0 0 1\""," 表示红色。",[312,102180,102182],{"className":30523,"code":102181,"language":30525,"meta":30,"style":30},"def main() -> None:\n",[318,102183,102184],{"__ignoreMap":30},[321,102185,102186,102188,102190,102192,102194],{"class":323,"line":324},[321,102187,32092],{"class":327},[321,102189,2179],{"class":2169},[321,102191,101543],{"class":331},[321,102193,95831],{"class":380},[321,102195,3945],{"class":331},[19,102197,102198,102200,102201,102204,102205,102208],{},[318,102199,32092],{}," 用来定义函数。这里定义了一个叫 ",[318,102202,102203],{},"main"," 的函数。",[318,102206,102207],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[312,102210,102211],{"className":30523,"code":101772,"language":30525,"meta":30,"style":30},[318,102212,102213],{"__ignoreMap":30},[321,102214,102215,102217,102219,102221,102223],{"class":323,"line":324},[321,102216,101779],{"class":331},[321,102218,377],{"class":327},[321,102220,101557],{"class":331},[321,102222,101459],{"class":380},[321,102224,338],{"class":331},[19,102226,102227,102228,102231],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[318,102229,102230],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[312,102233,102234],{"className":30523,"code":101796,"language":30525,"meta":30,"style":30},[318,102235,102236],{"__ignoreMap":30},[321,102237,102238,102240,102242],{"class":323,"line":324},[321,102239,101803],{"class":331},[321,102241,377],{"class":327},[321,102243,101571],{"class":331},[19,102245,102246,102247,102249,102250,102252],{},"这行创建仿真数据。",[318,102248,33546],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[318,102251,33546],{}," 都会变化。",[312,102254,102256],{"className":30523,"code":102255,"language":30525,"meta":30,"style":30},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[318,102257,102258,102268,102278],{"__ignoreMap":30},[321,102259,102260,102262,102264,102266],{"class":323,"line":324},[321,102261,30560],{"class":380},[321,102263,332],{"class":331},[321,102265,101584],{"class":436},[321,102267,101587],{"class":331},[321,102269,102270,102272,102274,102276],{"class":323,"line":167},[321,102271,30560],{"class":380},[321,102273,332],{"class":331},[321,102275,101596],{"class":436},[321,102277,101599],{"class":331},[321,102279,102280,102282,102284,102286],{"class":323,"line":200},[321,102281,30560],{"class":380},[321,102283,332],{"class":331},[321,102285,101608],{"class":436},[321,102287,101611],{"class":331},[19,102289,102290,102292,102293,102296,102297,102300,102301,102304,102305,102308],{},[318,102291,30560],{}," 用来输出信息。",[318,102294,102295],{},"model.nq"," 是位置变量数量，",[318,102298,102299],{},"model.nv"," 是速度变量数量，",[318,102302,102303],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[318,102306,102307],{},"nu"," 是 0。",[312,102310,102312],{"className":30523,"code":102311,"language":30525,"meta":30,"style":30},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[318,102313,102314,102324],{"__ignoreMap":30},[321,102315,102316,102318,102320,102322],{"class":323,"line":324},[321,102317,30560],{"class":380},[321,102319,332],{"class":331},[321,102321,101620],{"class":436},[321,102323,101623],{"class":331},[321,102325,102326,102328,102330,102332],{"class":323,"line":167},[321,102327,30560],{"class":380},[321,102329,332],{"class":331},[321,102331,101632],{"class":436},[321,102333,101635],{"class":331},[19,102335,102336,102337,102339,102340,102342,102343,102346],{},"这里打印初始时间和初始位置。",[318,102338,101212],{}," 一开始是 0。",[318,102341,101215],{}," 是位置数组。",[318,102344,102345],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[312,102348,102349],{"className":30523,"code":101821,"language":30525,"meta":30,"style":30},[318,102350,102351,102367],{"__ignoreMap":30},[321,102352,102353,102355,102357,102359,102361,102363,102365],{"class":323,"line":324},[321,102354,3231],{"class":327},[321,102356,101646],{"class":331},[321,102358,26188],{"class":327},[321,102360,32588],{"class":380},[321,102362,332],{"class":331},[321,102364,643],{"class":380},[321,102366,30931],{"class":331},[321,102368,102369],{"class":323,"line":167},[321,102370,101844],{"class":331},[19,102372,102373,102375,102376,102379,102380,102382,102383,102385],{},[318,102374,3231],{}," 是循环。",[318,102377,102378],{},"range(100)"," 表示循环 100 次。",[318,102381,1324],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[318,102384,101360],{},"，仿真就前进一步。",[312,102387,102389],{"className":30523,"code":102388,"language":30525,"meta":30,"style":30},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[318,102390,102391,102401],{"__ignoreMap":30},[321,102392,102393,102395,102397,102399],{"class":323,"line":324},[321,102394,30560],{"class":380},[321,102396,332],{"class":331},[321,102398,101674],{"class":436},[321,102400,101623],{"class":331},[321,102402,102403,102405,102407,102409],{"class":323,"line":167},[321,102404,30560],{"class":380},[321,102406,332],{"class":331},[321,102408,101685],{"class":436},[321,102410,101635],{"class":331},[19,102412,102413],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[312,102415,102417],{"className":30523,"code":102416,"language":30525,"meta":30,"style":30},"if __name__ == \"__main__\":\n    main()\n",[318,102418,102419,102431],{"__ignoreMap":30},[321,102420,102421,102423,102425,102427,102429],{"class":323,"line":324},[321,102422,1737],{"class":327},[321,102424,31365],{"class":380},[321,102426,101704],{"class":327},[321,102428,101707],{"class":436},[321,102430,3945],{"class":331},[321,102432,102433],{"class":323,"line":167},[321,102434,101714],{"class":331},[19,102436,102437,102438,102441,102442,28530],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[318,102439,102440],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[318,102443,102440],{},[19,102445,102446],{},"运行:",[312,102448,102450],{"className":24030,"code":102449,"language":24032,"meta":30,"style":30},"python ch1_first_sim.py\n",[318,102451,102452],{"__ignoreMap":30},[321,102453,102454,102456],{"class":323,"line":324},[321,102455,30525],{"class":2169},[321,102457,101431],{"class":436},[14,102459,102461],{"id":102460},"_5运行结果说明","5.运行结果说明",[19,102463,102464],{},"你应该看到类似输出:",[312,102466,102469],{"className":102467,"code":102468,"language":5394,"meta":30},[5392],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[318,102470,102468],{"__ignoreMap":30},[19,102472,102473,102475,102476,102479,102480,28530],{},[318,102474,101765],{}," 有 7 个位置变量: ",[318,102477,102478],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[318,102481,102482],{},"vx vy vz wx wy wz",[19,102484,102485,102486,102489],{},"你还会看到 ",[318,102487,102488],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102491,102493],{"id":102492},"_6验证步骤","6.验证步骤",[19,102495,102496],{},"确认版本:",[312,102498,102499],{"className":24030,"code":101084,"language":24032,"meta":30,"style":30},[318,102500,102501],{"__ignoreMap":30},[321,102502,102503,102505,102507],{"class":323,"line":324},[321,102504,30525],{"class":2169},[321,102506,30503],{"class":380},[321,102508,101095],{"class":436},[19,102510,102511],{},"确认导入的是官方 bindings:",[312,102513,102515],{"className":24030,"code":102514,"language":24032,"meta":30,"style":30},"python -c \"import mujoco; print(mujoco)\"\n",[318,102516,102517],{"__ignoreMap":30},[321,102518,102519,102521,102523],{"class":323,"line":324},[321,102520,30525],{"class":2169},[321,102522,30503],{"class":380},[321,102524,102525],{"class":436}," \"import mujoco; print(mujoco)\"\n",[19,102527,102528],{},"运行程序:",[312,102530,102531],{"className":24030,"code":102449,"language":24032,"meta":30,"style":30},[318,102532,102533],{"__ignoreMap":30},[321,102534,102535,102537],{"class":323,"line":324},[321,102536,30525],{"class":2169},[321,102538,101431],{"class":436},[19,102540,102541,102542,102545,102546,28530],{},"检查 ",[318,102543,102544],{},"final time"," 是否约等于 ",[318,102547,102548],{},"1.0",[19,102550,102551],{},"再做几个小实验：",[151,102553,102554,102564,102572,102585],{},[154,102555,102556,102557,102559,102560,102563],{},"把 ",[318,102558,102084],{}," 改成 ",[318,102561,102562],{},"pos=\"0 0 2\"","，观察初始高度变化。",[154,102565,102556,102566,102559,102568,102571],{},[318,102567,101973],{},[318,102569,102570],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[154,102573,102556,102574,102559,102576,102579,102580,102582,102583,28530],{},[318,102575,101969],{},[318,102577,102578],{},"timestep=\"0.005\"","，观察 100 步后的 ",[318,102581,102544],{}," 是否变成约 ",[318,102584,35474],{},[154,102586,102587,102588,102591],{},"删除 ",[318,102589,102590],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102593,102594],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102596,102598],{"id":102597},"_7常见错误与解决方案","7.常见错误与解决方案",[292,102600,102602],{"id":102601},"modulenotfounderror-no-module-named-mujoco",[318,102603,102604],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102606,102607],{},"解决:",[312,102609,102611],{"className":24030,"code":102610,"language":24032,"meta":30,"style":30},"pip install \"mujoco>=2.3\"\n",[318,102612,102613],{"__ignoreMap":30},[321,102614,102615,102617,102619],{"class":323,"line":324},[321,102616,24039],{"class":2169},[321,102618,24042],{"class":436},[321,102620,102621],{"class":436}," \"mujoco>=2.3\"\n",[292,102623,102625],{"id":102624},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102627,102628],{},"先安装系统依赖:",[312,102630,102632],{"className":24030,"code":102631,"language":24032,"meta":30,"style":30},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[318,102633,102634],{"__ignoreMap":30},[321,102635,102636,102638,102640,102642,102644,102647,102649,102652,102654,102657,102659],{"class":323,"line":324},[321,102637,24721],{"class":2169},[321,102639,26460],{"class":436},[321,102641,24042],{"class":436},[321,102643,26545],{"class":380},[321,102645,102646],{"class":436}," mesa-libGL",[321,102648,100959],{"class":436},[321,102650,102651],{"class":436}," glfw",[321,102653,100979],{"class":436},[321,102655,102656],{"class":436}," libX11",[321,102658,100992],{"class":436},[321,102660,102661],{"class":436}," libXrandr\n",[292,102663,102665],{"id":102664},"xml-解析失败","XML 解析失败",[19,102667,102668],{},"检查:",[151,102670,102671,102674,102677,102683],{},[154,102672,102673],{},"标签是否闭合",[154,102675,102676],{},"属性是否带引号",[154,102678,102679,102680],{},"根节点是否是 ",[318,102681,102682],{},"\u003Cmujoco>",[154,102684,102685,102687,102688,102691],{},[318,102686,51945],{}," 是否放在 ",[318,102689,102690],{},"\u003Cworldbody>"," 内部",[292,102693,102695,102697,102698],{"id":102694},"final-time-不是严格等于-10",[318,102696,102544],{}," 不是严格等于 ",[318,102699,102548],{},[19,102701,102702],{},"这通常不是错误。浮点数计算可能得到：",[312,102704,102707],{"className":102705,"code":102706,"language":5394,"meta":30},[5392],"1.0000000000000007\n",[318,102708,102706],{"__ignoreMap":30},[19,102710,102711,102712,102714],{},"只要接近 ",[318,102713,102548],{}," 就正常。",[292,102716,102717],{"id":102717},"方块没有掉下来",[19,102719,102720],{},"检查：",[151,102722,102723,102729,102735,102740],{},[154,102724,102725,102726],{},"方块 body 里是否有 ",[318,102727,102728],{},"\u003Cfreejoint\u002F>",[154,102730,102731,102732],{},"重力是否是 ",[318,102733,102734],{},"0 0 -9.81",[154,102736,102737,102738],{},"是否真的调用了 ",[318,102739,100830],{},[154,102741,102742,102743,102745,102746],{},"你看的是否是 ",[318,102744,102488],{},"，不是 ",[318,102747,102748],{},"initial qpos",[14,102750,102752],{"id":102751},"_8本章小结","8.本章小结",[19,102754,102755],{},"本章你已经完成了 MuJoCo 的最小闭环：",[312,102757,102760],{"className":102758,"code":102759,"language":5394,"meta":30},[5392],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[318,102761,102759],{"__ignoreMap":30},[19,102763,102764],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5333,102766,102767],{},"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":30,"searchDepth":167,"depth":167,"links":102769},[102770,102771,102772,102777,102781,102782,102783,102791],{"id":100791,"depth":167,"text":100792},{"id":100914,"depth":167,"text":100915},{"id":101189,"depth":167,"text":101190,"children":102773},[102774,102775,102776],{"id":101227,"depth":200,"text":101228},{"id":101321,"depth":200,"text":101322},{"id":101373,"depth":200,"text":101374},{"id":101397,"depth":167,"text":101398,"children":102778},[102779,102780],{"id":101717,"depth":200,"text":101717},{"id":101853,"depth":200,"text":101853},{"id":102460,"depth":167,"text":102461},{"id":102492,"depth":167,"text":102493},{"id":102597,"depth":167,"text":102598,"children":102784},[102785,102786,102787,102788,102790],{"id":102601,"depth":200,"text":102604},{"id":102624,"depth":200,"text":102625},{"id":102664,"depth":200,"text":102665},{"id":102694,"depth":200,"text":102789},"final time 不是严格等于 1.0",{"id":102717,"depth":200,"text":102717},{"id":102751,"depth":167,"text":102752},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100783,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102798,"title":102799,"body":102800,"description":30,"extension":249,"meta":104456,"navigation":251,"path":104457,"seo":104458,"stem":104459,"__hash__":104460},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102801,"toc":104432},[102802,102805,102807,102810,102813,102830,102925,102928,102934,102936,102938,102962,102965,102979,102982,103023,103025,103038,103040,103043,103091,103103,103106,103109,103115,103128,103195,103198,103217,103220,103223,103229,103231,103240,103243,103247,103256,103338,103347,103351,103357,103371,103381,103383,103713,103716,103728,103730,103741,103743,103746,103764,103767,103770,103788,103799,103802,103817,103827,103829,103850,103867,103887,103893,103933,103949,103965,103971,103974,103998,104014,104019,104049,104066,104091,104094,104109,104118,104133,104142,104157,104164,104166,104176,104189,104196,104199,104238,104245,104247,104299,104301,104307,104310,104317,104324,104327,104329,104347,104350,104353,104387,104399,104401,104404,104426,104429],[10,102803,102799],{"id":102804},"_2xml-与-mjcf-物理建模基础",[14,102806,100792],{"id":100791},[19,102808,102809],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102811,102812],{},"本章结束后，你应该能看懂一个简单模型里：",[151,102814,102815,102818,102821,102824,102827],{},[154,102816,102817],{},"地面在哪里。",[154,102819,102820],{},"物体初始位置在哪里。",[154,102822,102823],{},"几何体是什么形状。",[154,102825,102826],{},"哪些 body 可以自由运动。",[154,102828,102829],{},"如何用名字在 Python 里找到 XML 中的对象。",[469,102831,102832,102842],{},[472,102833,102834],{},[475,102835,102836,102839],{},[478,102837,102838],{"align":23944},"标签",[478,102840,102841],{"align":23944},"作用",[516,102843,102844,102853,102863,102872,102882,102892,102905,102915],{},[475,102845,102846,102850],{},[521,102847,102848],{"align":23944},[318,102849,102682],{},[521,102851,102852],{"align":23944},"根节点",[475,102854,102855,102860],{},[521,102856,102857],{"align":23944},[318,102858,102859],{},"\u003Coption>",[521,102861,102862],{"align":23944},"仿真参数",[475,102864,102865,102869],{},[521,102866,102867],{"align":23944},[318,102868,102690],{},[521,102870,102871],{"align":23944},"世界中的物体",[475,102873,102874,102879],{},[521,102875,102876],{"align":23944},[318,102877,102878],{},"\u003Cbody>",[521,102880,102881],{"align":23944},"刚体",[475,102883,102884,102889],{},[521,102885,102886],{"align":23944},[318,102887,102888],{},"\u003Cgeom>",[521,102890,102891],{"align":23944},"几何体、碰撞体、可视体",[475,102893,102894,102902],{},[521,102895,102896,25123,102899],{"align":23944},[318,102897,102898],{},"\u003Cjoint>",[318,102900,102901],{},"\u003Cfreejoint>",[521,102903,102904],{"align":23944},"关节",[475,102906,102907,102912],{},[521,102908,102909],{"align":23944},[318,102910,102911],{},"\u003Csite>",[521,102913,102914],{"align":23944},"标记点",[475,102916,102917,102922],{},[521,102918,102919],{"align":23944},[318,102920,102921],{},"\u003Cactuator>",[521,102923,102924],{"align":23944},"控制器",[19,102926,102927],{},"初学时可以先记住：",[312,102929,102932],{"className":102930,"code":102931,"language":5394,"meta":30},[5392],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[318,102933,102931],{"__ignoreMap":30},[14,102935,100915],{"id":100914},[19,102937,100918],{},[312,102939,102941],{"className":24030,"code":102940,"language":24032,"meta":30,"style":30},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[318,102942,102943],{"__ignoreMap":30},[321,102944,102945,102947,102949,102951,102953,102955,102957,102959],{"class":323,"line":324},[321,102946,24721],{"class":2169},[321,102948,26460],{"class":436},[321,102950,24042],{"class":436},[321,102952,26545],{"class":380},[321,102954,102646],{"class":436},[321,102956,100959],{"class":436},[321,102958,102651],{"class":436},[321,102960,102961],{"class":436}," glfw-devel\n",[19,102963,102964],{},"pip:",[312,102966,102967],{"className":24030,"code":101064,"language":24032,"meta":30,"style":30},[318,102968,102969],{"__ignoreMap":30},[321,102970,102971,102973,102975,102977],{"class":323,"line":324},[321,102972,24039],{"class":2169},[321,102974,24042],{"class":436},[321,102976,101075],{"class":436},[321,102978,101078],{"class":436},[19,102980,102981],{},"conda:",[312,102983,102985],{"className":24030,"code":102984,"language":24032,"meta":30,"style":30},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[318,102986,102987,103004,103013],{"__ignoreMap":30},[321,102988,102989,102991,102993,102995,102998,103000,103002],{"class":323,"line":324},[321,102990,30475],{"class":2169},[321,102992,29321],{"class":436},[321,102994,25260],{"class":380},[321,102996,102997],{"class":436}," mujoco-xml",[321,102999,101120],{"class":436},[321,103001,101123],{"class":380},[321,103003,101126],{"class":380},[321,103005,103006,103008,103010],{"class":323,"line":167},[321,103007,30475],{"class":2169},[321,103009,101133],{"class":436},[321,103011,103012],{"class":436}," mujoco-xml\n",[321,103014,103015,103017,103019,103021],{"class":323,"line":200},[321,103016,24039],{"class":2169},[321,103018,24042],{"class":436},[321,103020,101075],{"class":436},[321,103022,101078],{"class":436},[19,103024,101149],{},[151,103026,103027,103030,103035],{},[154,103028,103029],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[154,103031,103032,103033,28530],{},"本章使用基础标签，适用于 ",[318,103034,101172],{},[154,103036,103037],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103039,101190],{"id":101189},[19,103041,103042],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[312,103044,103046],{"className":53212,"code":103045,"language":53214,"meta":30,"style":30},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[318,103047,103048,103062,103070,103075,103083],{"__ignoreMap":30},[321,103049,103050,103052,103054,103056,103058,103060],{"class":323,"line":324},[321,103051,1242],{"class":331},[321,103053,101166],{"class":51445},[321,103055,101920],{"class":2169},[321,103057,377],{"class":331},[321,103059,62824],{"class":436},[321,103061,51452],{"class":331},[321,103063,103064,103066,103068],{"class":323,"line":167},[321,103065,52289],{"class":331},[321,103067,101986],{"class":51445},[321,103069,51452],{"class":331},[321,103071,103072],{"class":323,"line":200},[321,103073,103074],{"class":331},"    ...\n",[321,103076,103077,103079,103081],{"class":323,"line":1401},[321,103078,52562],{"class":331},[321,103080,101986],{"class":51445},[321,103082,51452],{"class":331},[321,103084,103085,103087,103089],{"class":323,"line":1407},[321,103086,51930],{"class":331},[321,103088,101166],{"class":51445},[321,103090,51452],{"class":331},[19,103092,103093,103095,103096,103098,103099,103102],{},[318,103094,51945],{}," 表示刚体。",[318,103097,101265],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[318,103100,103101],{},"joint"," 表示刚体相对父刚体如何运动。",[292,103104,103105],{"id":103105},"层级结构非常重要",[19,103107,103108],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[312,103110,103113],{"className":103111,"code":103112,"language":5394,"meta":30},[5392],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[318,103114,103112],{"__ignoreMap":30},[19,103116,103117,101163,103120,103123,103124,103127],{},[318,103118,103119],{},"red_box_geom",[318,103121,103122],{},"box_center"," 都属于 ",[318,103125,103126],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[312,103129,103131],{"className":53212,"code":103130,"language":53214,"meta":30,"style":30},"\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",[318,103132,103133,103153,103167,103187],{"__ignoreMap":30},[321,103134,103135,103137,103139,103141,103143,103145,103147,103149,103151],{"class":323,"line":324},[321,103136,1242],{"class":331},[321,103138,51945],{"class":51445},[321,103140,15127],{"class":2169},[321,103142,377],{"class":331},[321,103144,53636],{"class":436},[321,103146,101251],{"class":2169},[321,103148,377],{"class":331},[321,103150,101256],{"class":436},[321,103152,51452],{"class":331},[321,103154,103155,103157,103159,103161,103163,103165],{"class":323,"line":167},[321,103156,52289],{"class":331},[321,103158,101765],{"class":51445},[321,103160,15127],{"class":2169},[321,103162,377],{"class":331},[321,103164,102106],{"class":436},[321,103166,101289],{"class":331},[321,103168,103169,103171,103173,103175,103177,103179,103181,103183,103185],{"class":323,"line":200},[321,103170,52289],{"class":331},[321,103172,101265],{"class":51445},[321,103174,53969],{"class":2169},[321,103176,377],{"class":331},[321,103178,53636],{"class":436},[321,103180,101281],{"class":2169},[321,103182,377],{"class":331},[321,103184,101286],{"class":436},[321,103186,101289],{"class":331},[321,103188,103189,103191,103193],{"class":323,"line":1401},[321,103190,51930],{"class":331},[321,103192,51945],{"class":51445},[321,103194,51452],{"class":331},[19,103196,103197],{},"含义:",[151,103199,103200,103206,103211,103214],{},[154,103201,103202,103203,103205],{},"创建名为 ",[318,103204,53859],{}," 的刚体",[154,103207,103208,103209],{},"初始位置在世界坐标 ",[318,103210,101314],{},[154,103212,103213],{},"它有一个自由关节",[154,103215,103216],{},"它有一个盒子几何体",[292,103218,103219],{"id":103219},"坐标怎么理解",[19,103221,103222],{},"MuJoCo 默认使用三维坐标：",[312,103224,103227],{"className":103225,"code":103226,"language":5394,"meta":30},[5392],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[318,103228,103226],{"__ignoreMap":30},[19,103230,14840],{},[312,103232,103234],{"className":53212,"code":103233,"language":53214,"meta":30,"style":30},"pos=\"0 0 1\"\n",[318,103235,103236],{"__ignoreMap":30},[321,103237,103238],{"class":323,"line":324},[321,103239,103233],{"class":331},[19,103241,103242],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[292,103244,103246],{"id":103245},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103248,103249,103250,82675,103253,103255],{},"不同 ",[318,103251,103252],{},"type",[318,103254,31641],{}," 含义不同：",[469,103257,103258,103273],{},[472,103259,103260],{},[475,103261,103262,103266,103271],{},[478,103263,103264],{"align":23944},[318,103265,103252],{},[478,103267,103268,103270],{"align":23944},[318,103269,31641],{}," 示例",[478,103272,100845],{"align":23944},[516,103274,103275,103289,103304,103323],{},[475,103276,103277,103281,103286],{},[521,103278,103279],{"align":23944},[318,103280,53859],{},[521,103282,103283],{"align":23944},[318,103284,103285],{},"size=\"0.1 0.2 0.3\"",[521,103287,103288],{"align":23944},"x\u002Fy\u002Fz 半边长，不是完整长度",[475,103290,103291,103296,103301],{},[521,103292,103293],{"align":23944},[318,103294,103295],{},"sphere",[521,103297,103298],{"align":23944},[318,103299,103300],{},"size=\"0.1\"",[521,103302,103303],{"align":23944},"球半径",[475,103305,103306,103311,103316],{},[521,103307,103308],{"align":23944},[318,103309,103310],{},"capsule",[521,103312,103313],{"align":23944},[318,103314,103315],{},"size=\"0.03\"",[521,103317,103318,103319,103322],{"align":23944},"胶囊半径，长度常用 ",[318,103320,103321],{},"fromto"," 指定",[475,103324,103325,103330,103335],{},[521,103326,103327],{"align":23944},[318,103328,103329],{},"plane",[521,103331,103332],{"align":23944},[318,103333,103334],{},"size=\"3 3 0.1\"",[521,103336,103337],{"align":23944},"可视平面大小，通常当地面",[19,103339,103340,103341,103343,103344,103346],{},"最容易踩坑的是 box：",[318,103342,102169],{}," 表示边长大约是 ",[318,103345,32182],{},"，因为 MuJoCo 用的是半边长。",[292,103348,103350],{"id":103349},"site-是什么","site 是什么",[19,103352,103353,103356],{},[318,103354,103355],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[151,103358,103359,103362,103365,103368],{},[154,103360,103361],{},"标记机械臂末端。",[154,103363,103364],{},"标记目标位置。",[154,103366,103367],{},"放传感器或相机参考点。",[154,103369,103370],{},"在 Python 中读取某个关键点的世界坐标。",[19,103372,103373,103374,101163,103377,103380],{},"在后面的 Reacher 任务中，",[318,103375,103376],{},"tip",[318,103378,103379],{},"target"," 就会用 site 表示。",[14,103382,101398],{"id":101397},[312,103384,103386],{"className":30523,"code":103385,"language":30525,"meta":30,"style":30},"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",[318,103387,103388,103394,103404,103408,103412,103420,103425,103429,103433,103437,103442,103446,103451,103456,103461,103466,103470,103474,103478,103482,103486,103490,103502,103514,103522,103526,103541,103556,103560,103573,103588,103601,103614,103618,103634,103638,103642,103653,103665,103677,103689,103693,103697,103709],{"__ignoreMap":30},[321,103389,103390,103392],{"class":323,"line":324},[321,103391,30537],{"class":327},[321,103393,101446],{"class":331},[321,103395,103396,103398,103400,103402],{"class":323,"line":167},[321,103397,30537],{"class":327},[321,103399,31525],{"class":331},[321,103401,31528],{"class":327},[321,103403,31531],{"class":331},[321,103405,103406],{"class":323,"line":200},[321,103407,2606],{"emptyLinePlaceholder":251},[321,103409,103410],{"class":323,"line":1401},[321,103411,2606],{"emptyLinePlaceholder":251},[321,103413,103414,103416,103418],{"class":323,"line":1407},[321,103415,101459],{"class":380},[321,103417,13771],{"class":327},[321,103419,101464],{"class":436},[321,103421,103422],{"class":323,"line":1421},[321,103423,103424],{"class":436},"\u003Cmujoco model=\"xml_basic\">\n",[321,103426,103427],{"class":323,"line":1427},[321,103428,101474],{"class":436},[321,103430,103431],{"class":323,"line":1518},[321,103432,2606],{"emptyLinePlaceholder":251},[321,103434,103435],{"class":323,"line":1524},[321,103436,101483],{"class":436},[321,103438,103439],{"class":323,"line":1536},[321,103440,103441],{"class":436},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[321,103443,103444],{"class":323,"line":1818},[321,103445,2606],{"emptyLinePlaceholder":251},[321,103447,103448],{"class":323,"line":1823},[321,103449,103450],{"class":436},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[321,103452,103453],{"class":323,"line":1829},[321,103454,103455],{"class":436},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[321,103457,103458],{"class":323,"line":1834},[321,103459,103460],{"class":436},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[321,103462,103463],{"class":323,"line":1848},[321,103464,103465],{"class":436},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[321,103467,103468],{"class":323,"line":1853},[321,103469,101512],{"class":436},[321,103471,103472],{"class":323,"line":1859},[321,103473,101517],{"class":436},[321,103475,103476],{"class":323,"line":1880},[321,103477,101522],{"class":436},[321,103479,103480],{"class":323,"line":1885},[321,103481,95843],{"class":436},[321,103483,103484],{"class":323,"line":1899},[321,103485,2606],{"emptyLinePlaceholder":251},[321,103487,103488],{"class":323,"line":1904},[321,103489,2606],{"emptyLinePlaceholder":251},[321,103491,103492,103494,103496,103498,103500],{"class":323,"line":1933},[321,103493,32092],{"class":327},[321,103495,2179],{"class":2169},[321,103497,101543],{"class":331},[321,103499,95831],{"class":380},[321,103501,3945],{"class":331},[321,103503,103504,103506,103508,103510,103512],{"class":323,"line":1938},[321,103505,101552],{"class":331},[321,103507,377],{"class":327},[321,103509,101557],{"class":331},[321,103511,101459],{"class":380},[321,103513,338],{"class":331},[321,103515,103516,103518,103520],{"class":323,"line":1955},[321,103517,101566],{"class":331},[321,103519,377],{"class":327},[321,103521,101571],{"class":331},[321,103523,103524],{"class":323,"line":1960},[321,103525,2606],{"emptyLinePlaceholder":251},[321,103527,103528,103531,103533,103536,103539],{"class":323,"line":1965},[321,103529,103530],{"class":331},"    box_body_id ",[321,103532,377],{"class":327},[321,103534,103535],{"class":331}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[321,103537,103538],{"class":436},"\"red_box\"",[321,103540,338],{"class":331},[321,103542,103543,103546,103548,103551,103554],{"class":323,"line":1970},[321,103544,103545],{"class":331},"    site_id ",[321,103547,377],{"class":327},[321,103549,103550],{"class":331}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[321,103552,103553],{"class":436},"\"box_center\"",[321,103555,338],{"class":331},[321,103557,103558],{"class":323,"line":1984},[321,103559,2606],{"emptyLinePlaceholder":251},[321,103561,103562,103564,103567,103569,103571],{"class":323,"line":1989},[321,103563,3307],{"class":327},[321,103565,103566],{"class":331}," box_body_id ",[321,103568,1242],{"class":327},[321,103570,4299],{"class":380},[321,103572,3945],{"class":331},[321,103574,103575,103578,103581,103583,103586],{"class":323,"line":2783},[321,103576,103577],{"class":327},"        raise",[321,103579,103580],{"class":380}," RuntimeError",[321,103582,332],{"class":331},[321,103584,103585],{"class":436},"\"body red_box not found\"",[321,103587,338],{"class":331},[321,103589,103590,103592,103595,103597,103599],{"class":323,"line":2797},[321,103591,3307],{"class":327},[321,103593,103594],{"class":331}," site_id ",[321,103596,1242],{"class":327},[321,103598,4299],{"class":380},[321,103600,3945],{"class":331},[321,103602,103603,103605,103607,103609,103612],{"class":323,"line":2805},[321,103604,103577],{"class":327},[321,103606,103580],{"class":380},[321,103608,332],{"class":331},[321,103610,103611],{"class":436},"\"site box_center not found\"",[321,103613,338],{"class":331},[321,103615,103616],{"class":323,"line":2810},[321,103617,2606],{"emptyLinePlaceholder":251},[321,103619,103620,103622,103624,103626,103628,103630,103632],{"class":323,"line":2816},[321,103621,3407],{"class":327},[321,103623,101646],{"class":331},[321,103625,26188],{"class":327},[321,103627,32588],{"class":380},[321,103629,332],{"class":331},[321,103631,1928],{"class":380},[321,103633,30931],{"class":331},[321,103635,103636],{"class":323,"line":2822},[321,103637,101661],{"class":331},[321,103639,103640],{"class":323,"line":2827},[321,103641,2606],{"emptyLinePlaceholder":251},[321,103643,103644,103646,103648,103651],{"class":323,"line":8155},[321,103645,31444],{"class":380},[321,103647,332],{"class":331},[321,103649,103650],{"class":436},"\"simulation time:\"",[321,103652,101623],{"class":331},[321,103654,103655,103657,103659,103662],{"class":323,"line":8179},[321,103656,31444],{"class":380},[321,103658,332],{"class":331},[321,103660,103661],{"class":436},"\"box body position:\"",[321,103663,103664],{"class":331},", data.xpos[box_body_id].copy())\n",[321,103666,103667,103669,103671,103674],{"class":323,"line":8184},[321,103668,31444],{"class":380},[321,103670,332],{"class":331},[321,103672,103673],{"class":436},"\"site position:\"",[321,103675,103676],{"class":331},", data.site_xpos[site_id].copy())\n",[321,103678,103679,103681,103683,103686],{"class":323,"line":8190},[321,103680,31444],{"class":380},[321,103682,332],{"class":331},[321,103684,103685],{"class":436},"\"box qpos:\"",[321,103687,103688],{"class":331},", np.array(data.qpos))\n",[321,103690,103691],{"class":323,"line":8217},[321,103692,2606],{"emptyLinePlaceholder":251},[321,103694,103695],{"class":323,"line":8222},[321,103696,2606],{"emptyLinePlaceholder":251},[321,103698,103699,103701,103703,103705,103707],{"class":323,"line":8228},[321,103700,1737],{"class":327},[321,103702,31365],{"class":380},[321,103704,101704],{"class":327},[321,103706,101707],{"class":436},[321,103708,3945],{"class":331},[321,103710,103711],{"class":323,"line":8240},[321,103712,101714],{"class":331},[19,103714,103715],{},"保存为：",[312,103717,103719],{"className":24030,"code":103718,"language":24032,"meta":30,"style":30},"touch ch2_xml_basic.py\n",[318,103720,103721],{"__ignoreMap":30},[321,103722,103723,103725],{"class":323,"line":324},[321,103724,101428],{"class":2169},[321,103726,103727],{"class":436}," ch2_xml_basic.py\n",[19,103729,102446],{},[312,103731,103733],{"className":24030,"code":103732,"language":24032,"meta":30,"style":30},"python ch2_xml_basic.py\n",[318,103734,103735],{"__ignoreMap":30},[321,103736,103737,103739],{"class":323,"line":324},[321,103738,30525],{"class":2169},[321,103740,103727],{"class":436},[292,103742,101717],{"id":101717},[19,103744,103745],{},"用名字查找 body：",[312,103747,103749],{"className":30523,"code":103748,"language":30525,"meta":30,"style":30},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[318,103750,103751],{"__ignoreMap":30},[321,103752,103753,103756,103758,103760,103762],{"class":323,"line":324},[321,103754,103755],{"class":331},"box_body_id ",[321,103757,377],{"class":327},[321,103759,103535],{"class":331},[321,103761,103538],{"class":436},[321,103763,338],{"class":331},[19,103765,103766],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103768,103769],{},"用名字查找 site：",[312,103771,103773],{"className":30523,"code":103772,"language":30525,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[318,103774,103775],{"__ignoreMap":30},[321,103776,103777,103780,103782,103784,103786],{"class":323,"line":324},[321,103778,103779],{"class":331},"site_id ",[321,103781,377],{"class":327},[321,103783,103550],{"class":331},[321,103785,103553],{"class":436},[321,103787,338],{"class":331},[19,103789,103790,103791,103794,103795,103798],{},"注意第二个参数是对象类型。查 body 就用 ",[318,103792,103793],{},"mjOBJ_BODY","，查 site 就用 ",[318,103796,103797],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103800,103801],{},"读取世界坐标：",[312,103803,103805],{"className":30523,"code":103804,"language":30525,"meta":30,"style":30},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[318,103806,103807,103812],{"__ignoreMap":30},[321,103808,103809],{"class":323,"line":324},[321,103810,103811],{"class":331},"data.xpos[box_body_id]\n",[321,103813,103814],{"class":323,"line":167},[321,103815,103816],{"class":331},"data.site_xpos[site_id]\n",[19,103818,103819,103822,103823,103826],{},[318,103820,103821],{},"xpos"," 是 body 的世界坐标，",[318,103824,103825],{},"site_xpos"," 是 site 的世界坐标。",[292,103828,101853],{"id":101853},[312,103830,103832],{"className":30523,"code":103831,"language":30525,"meta":30,"style":30},"import mujoco\nimport numpy as np\n",[318,103833,103834,103840],{"__ignoreMap":30},[321,103835,103836,103838],{"class":323,"line":324},[321,103837,30537],{"class":327},[321,103839,101446],{"class":331},[321,103841,103842,103844,103846,103848],{"class":323,"line":167},[321,103843,30537],{"class":327},[321,103845,31525],{"class":331},[321,103847,31528],{"class":327},[321,103849,31531],{"class":331},[19,103851,103852,103853,103856,103857,103860,103861,544,103864,28530],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[318,103854,103855],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[318,103858,103859],{},"as np"," 是习惯写法，后面就可以写 ",[318,103862,103863],{},"np.array(...)",[318,103865,103866],{},"np.round(...)",[312,103868,103869],{"className":30523,"code":101740,"language":30525,"meta":30,"style":30},[318,103870,103871,103879,103883],{"__ignoreMap":30},[321,103872,103873,103875,103877],{"class":323,"line":324},[321,103874,101459],{"class":380},[321,103876,13771],{"class":327},[321,103878,101464],{"class":436},[321,103880,103881],{"class":323,"line":167},[321,103882,101755],{"class":436},[321,103884,103885],{"class":323,"line":200},[321,103886,95843],{"class":436},[19,103888,103889,103890,28530],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[318,103891,103892],{},"mujoco.MjModel.from_xml_string(XML)",[312,103894,103896],{"className":53212,"code":103895,"language":53214,"meta":30,"style":30},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[318,103897,103898],{"__ignoreMap":30},[321,103899,103900,103902,103904,103906,103908,103910,103912,103914,103917,103919,103921,103924,103926,103928,103931],{"class":323,"line":324},[321,103901,1242],{"class":331},[321,103903,103355],{"class":51445},[321,103905,15127],{"class":2169},[321,103907,377],{"class":331},[321,103909,103553],{"class":436},[321,103911,101251],{"class":2169},[321,103913,377],{"class":331},[321,103915,103916],{"class":436},"\"0 0 0\"",[321,103918,101281],{"class":2169},[321,103920,377],{"class":331},[321,103922,103923],{"class":436},"\"0.03\"",[321,103925,78912],{"class":2169},[321,103927,377],{"class":331},[321,103929,103930],{"class":436},"\"0 1 0 1\"",[321,103932,101289],{"class":331},[19,103934,103935,103937,103938,103941,103942,103944,103945,103948],{},[318,103936,103355],{}," 是标记点。",[318,103939,103940],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[318,103943,103315],{}," 表示显示出来的小球大小。",[318,103946,103947],{},"rgba=\"0 1 0 1\""," 表示绿色。",[312,103950,103951],{"className":30523,"code":103748,"language":30525,"meta":30,"style":30},[318,103952,103953],{"__ignoreMap":30},[321,103954,103955,103957,103959,103961,103963],{"class":323,"line":324},[321,103956,103755],{"class":331},[321,103958,377],{"class":327},[321,103960,103535],{"class":331},[321,103962,103538],{"class":436},[321,103964,338],{"class":331},[19,103966,103967,103968,103970],{},"这行的作用是：根据名字 ",[318,103969,103538],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,103972,103973],{},"拆开看：",[151,103975,103976,103982,103987,103993],{},[154,103977,103978,103981],{},[318,103979,103980],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[154,103983,103984,103986],{},[318,103985,102230],{}," 是被查询的模型。",[154,103988,103989,103992],{},[318,103990,103991],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[154,103994,103995,103997],{},[318,103996,103538],{}," 是 XML 里写的名字。",[312,103999,104000],{"className":30523,"code":103772,"language":30525,"meta":30,"style":30},[318,104001,104002],{"__ignoreMap":30},[321,104003,104004,104006,104008,104010,104012],{"class":323,"line":324},[321,104005,103779],{"class":331},[321,104007,377],{"class":327},[321,104009,103550],{"class":331},[321,104011,103553],{"class":436},[321,104013,338],{"class":331},[19,104015,104016,104017,28530],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[318,104018,103553],{},[312,104020,104022],{"className":30523,"code":104021,"language":30525,"meta":30,"style":30},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[318,104023,104024,104036],{"__ignoreMap":30},[321,104025,104026,104028,104030,104032,104034],{"class":323,"line":324},[321,104027,1737],{"class":327},[321,104029,103566],{"class":331},[321,104031,1242],{"class":327},[321,104033,4299],{"class":380},[321,104035,3945],{"class":331},[321,104037,104038,104041,104043,104045,104047],{"class":323,"line":167},[321,104039,104040],{"class":327},"    raise",[321,104042,103580],{"class":380},[321,104044,332],{"class":331},[321,104046,103585],{"class":436},[321,104048,338],{"class":331},[19,104050,104051,104053,104054,104057,104058,104061,104062,104065],{},[318,104052,1737],{}," 是条件判断。",[318,104055,104056],{},"mj_name2id"," 找不到对象时会返回 ",[318,104059,104060],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[318,104063,104064],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[312,104067,104069],{"className":30523,"code":104068,"language":30525,"meta":30,"style":30},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[318,104070,104071,104087],{"__ignoreMap":30},[321,104072,104073,104075,104077,104079,104081,104083,104085],{"class":323,"line":324},[321,104074,3231],{"class":327},[321,104076,101646],{"class":331},[321,104078,26188],{"class":327},[321,104080,32588],{"class":380},[321,104082,332],{"class":331},[321,104084,1928],{"class":380},[321,104086,30931],{"class":331},[321,104088,104089],{"class":323,"line":167},[321,104090,101844],{"class":331},[19,104092,104093],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[312,104095,104097],{"className":30523,"code":104096,"language":30525,"meta":30,"style":30},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[318,104098,104099],{"__ignoreMap":30},[321,104100,104101,104103,104105,104107],{"class":323,"line":324},[321,104102,30560],{"class":380},[321,104104,332],{"class":331},[321,104106,103661],{"class":436},[321,104108,103664],{"class":331},[19,104110,104111,104113,104114,104117],{},[318,104112,101224],{}," 保存所有 body 的世界坐标。",[318,104115,104116],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[312,104119,104121],{"className":30523,"code":104120,"language":30525,"meta":30,"style":30},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[318,104122,104123],{"__ignoreMap":30},[321,104124,104125,104127,104129,104131],{"class":323,"line":324},[321,104126,30560],{"class":380},[321,104128,332],{"class":331},[321,104130,103673],{"class":436},[321,104132,103676],{"class":331},[19,104134,104135,104138,104139,104141],{},[318,104136,104137],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[318,104140,103122],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[312,104143,104145],{"className":30523,"code":104144,"language":30525,"meta":30,"style":30},"print(\"box qpos:\", np.array(data.qpos))\n",[318,104146,104147],{"__ignoreMap":30},[321,104148,104149,104151,104153,104155],{"class":323,"line":324},[321,104150,30560],{"class":380},[321,104152,332],{"class":331},[321,104154,103685],{"class":436},[321,104156,103688],{"class":331},[19,104158,104159,104160,104163],{},"这里打印广义位置数组。",[318,104161,104162],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104165,102461],{"id":102460},[19,104167,104168,104169,104172,104173,28530],{},"程序会输出 ",[318,104170,104171],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[318,104174,104175],{},"qpos",[19,104177,104178,104180,104181,104184,104185,104188],{},[318,104179,104116],{}," 是 body 的世界坐标位置。",[318,104182,104183],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[318,104186,104187],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104190,82367,104191,82675,104193,104195],{},[318,104192,103122],{},[318,104194,103940],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104197,104198],{},"如果你把 site 改成：",[312,104200,104202],{"className":53212,"code":104201,"language":53214,"meta":30,"style":30},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[318,104203,104204],{"__ignoreMap":30},[321,104205,104206,104208,104210,104212,104214,104217,104219,104221,104224,104226,104228,104230,104232,104234,104236],{"class":323,"line":324},[321,104207,1242],{"class":331},[321,104209,103355],{"class":51445},[321,104211,15127],{"class":2169},[321,104213,377],{"class":331},[321,104215,104216],{"class":436},"\"box_top\"",[321,104218,101251],{"class":2169},[321,104220,377],{"class":331},[321,104222,104223],{"class":436},"\"0 0 0.15\"",[321,104225,101281],{"class":2169},[321,104227,377],{"class":331},[321,104229,103923],{"class":436},[321,104231,78912],{"class":2169},[321,104233,377],{"class":331},[321,104235,103930],{"class":436},[321,104237,101289],{"class":331},[19,104239,104240,104241,104244],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[318,104242,104243],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104246,102493],{"id":102492},[151,104248,104249,104258,104261,104268,104274,104285],{},[154,104250,102556,104251,104253,104254,102559,104256,28530],{},[318,104252,103126],{}," 的初始高度从 ",[318,104255,549],{},[318,104257,409],{},[154,104259,104260],{},"重新运行程序。",[154,104262,104263,104264,104267],{},"观察 ",[318,104265,104266],{},"box qpos"," 和最终位置是否变化。",[154,104269,104270,104271,104273],{},"故意把 ",[318,104272,103355],{}," 名称改错，确认程序能报错。",[154,104275,102556,104276,104278,104279,102559,104281,104284],{},[318,104277,101265],{}," 的颜色 ",[318,104280,102177],{},[318,104282,104283],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[154,104286,102556,104287,82675,104289,102559,104292,104295,104296,104298],{},[318,104288,103122],{},[318,104290,104291],{},"pos",[318,104293,104294],{},"0 0 0.2","，观察 ",[318,104297,104243],{}," 如何变化。",[14,104300,102598],{"id":102597},[292,104302,104304],{"id":104303},"xml-error-schema-violation",[318,104305,104306],{},"XML Error: Schema violation",[19,104308,104309],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[292,104311,104313,81435,104315],{"id":104312},"mj_name2id-返回-1",[318,104314,104056],{},[318,104316,104060],{},[19,104318,104319,104320,104323],{},"说明名字没有找到。检查 XML 中 ",[318,104321,104322],{},"name=\"...\"","，并确认对象类型正确。",[292,104325,104326],{"id":104326},"物体不下落",[19,104328,102668],{},[151,104330,104331,104336,104341],{},[154,104332,104333,104334],{},"body 是否有 ",[318,104335,101765],{},[154,104337,104338,104339],{},"gravity 是否为 ",[318,104340,102734],{},[154,104342,104343,104344,104346],{},"body 是否被固定在 ",[318,104345,101986],{}," 中",[292,104348,104349],{"id":104349},"坐标看起来不符合预期",[19,104351,104352],{},"先区分两种坐标：",[469,104354,104355,104364],{},[472,104356,104357],{},[475,104358,104359,104362],{},[478,104360,104361],{"align":23944},"坐标",[478,104363,100845],{"align":23944},[516,104365,104366,104376],{},[475,104367,104368,104373],{},[521,104369,104370,104371],{"align":23944},"XML 里的 ",[318,104372,104291],{},[521,104374,104375],{"align":23944},"相对父 body 的局部坐标",[475,104377,104378,104384],{},[521,104379,104380,25123,104382],{"align":23944},[318,104381,101224],{},[318,104383,104137],{},[521,104385,104386],{"align":23944},"仿真更新后的世界坐标",[19,104388,104389,104390,104392,104393,82684,104396,104398],{},"如果你修改了 ",[318,104391,101215],{},"，但还没调用 ",[318,104394,104395],{},"mj_forward",[318,104397,101360],{},"，世界坐标可能还没有更新。",[14,104400,102752],{"id":102751},[19,104402,104403],{},"MJCF 建模先掌握四件事：",[151,104405,104406,104411,104416,104421],{},[154,104407,104408,104410],{},[318,104409,51945],{}," 表示刚体层级。",[154,104412,104413,104415],{},[318,104414,101265],{}," 表示形状、碰撞和质量。",[154,104417,104418,104420],{},[318,104419,103101],{}," 决定 body 能不能动、怎么动。",[154,104422,104423,104425],{},[318,104424,103355],{}," 用来标记关键点，方便 Python 读取位置。",[19,104427,104428],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5333,104430,104431],{},"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":30,"searchDepth":167,"depth":167,"links":104433},[104434,104435,104436,104442,104446,104447,104448,104455],{"id":100791,"depth":167,"text":100792},{"id":100914,"depth":167,"text":100915},{"id":101189,"depth":167,"text":101190,"children":104437},[104438,104439,104440,104441],{"id":103105,"depth":200,"text":103105},{"id":103219,"depth":200,"text":103219},{"id":103245,"depth":200,"text":103246},{"id":103349,"depth":200,"text":103350},{"id":101397,"depth":167,"text":101398,"children":104443},[104444,104445],{"id":101717,"depth":200,"text":101717},{"id":101853,"depth":200,"text":101853},{"id":102460,"depth":167,"text":102461},{"id":102492,"depth":167,"text":102493},{"id":102597,"depth":167,"text":102598,"children":104449},[104450,104451,104453,104454],{"id":104303,"depth":200,"text":104306},{"id":104312,"depth":200,"text":104452},"mj_name2id 返回 -1",{"id":104326,"depth":200,"text":104326},{"id":104349,"depth":200,"text":104349},{"id":102751,"depth":167,"text":102752},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102799,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104462,"title":104463,"body":104464,"description":30,"extension":249,"meta":105959,"navigation":251,"path":105960,"seo":105961,"stem":105962,"__hash__":105963},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104465,"toc":105931},[104466,104469,104471,104474,104477,104515,104518,104524,104527,104529,104531,104558,104560,104574,104576,104617,104619,104643,104645,104648,104657,104666,104669,104678,104686,104695,104698,104708,104711,104763,104770,104776,104784,104832,104835,104854,104857,104865,104869,104878,104911,104913,105261,105263,105275,105277,105288,105290,105293,105314,105320,105323,105348,105358,105361,105369,105372,105375,105396,105407,105409,105429,105432,105453,105462,105481,105487,105512,105515,105529,105536,105560,105563,105571,105580,105596,105608,105616,105625,105627,105630,105654,105659,105662,105684,105686,105725,105727,105734,105736,105744,105747,105750,105762,105803,105810,105821,105828,105831,105880,105883,105886,105892,105894,105899,105925,105928],[10,104467,104463],{"id":104468},"_3python-控制接口读取状态与推进仿真",[14,104470,100792],{"id":100791},[19,104472,104473],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104475,104476],{},"你将学习:",[151,104478,104479,104484,104489,104493,104498,104509],{},[154,104480,104481],{},[318,104482,104483],{},"MjModel.from_xml_string",[154,104485,104486],{},[318,104487,104488],{},"MjData(model)",[154,104490,104491],{},[318,104492,101360],{},[154,104494,104495],{},[318,104496,104497],{},"mj_resetData",[154,104499,104500,104501,544,104503,544,104506],{},"读取 ",[318,104502,104175],{},[318,104504,104505],{},"qvel",[318,104507,104508],{},"ctrl",[154,104510,104511,104512],{},"使用 ",[318,104513,104514],{},"model.opt.timestep",[19,104516,104517],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[312,104519,104522],{"className":104520,"code":104521,"language":5394,"meta":30},[5392],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[318,104523,104521],{"__ignoreMap":30},[19,104525,104526],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104528,100915],{"id":100914},[19,104530,100918],{},[312,104532,104534],{"className":24030,"code":104533,"language":24032,"meta":30,"style":30},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[318,104535,104536],{"__ignoreMap":30},[321,104537,104538,104540,104542,104544,104546,104549,104551,104553,104555],{"class":323,"line":324},[321,104539,24721],{"class":2169},[321,104541,26460],{"class":436},[321,104543,24042],{"class":436},[321,104545,26545],{"class":380},[321,104547,104548],{"class":436}," python3",[321,104550,100943],{"class":436},[321,104552,102646],{"class":436},[321,104554,100959],{"class":436},[321,104556,104557],{"class":436}," glfw\n",[19,104559,102964],{},[312,104561,104562],{"className":24030,"code":101064,"language":24032,"meta":30,"style":30},[318,104563,104564],{"__ignoreMap":30},[321,104565,104566,104568,104570,104572],{"class":323,"line":324},[321,104567,24039],{"class":2169},[321,104569,24042],{"class":436},[321,104571,101075],{"class":436},[321,104573,101078],{"class":436},[19,104575,102981],{},[312,104577,104579],{"className":24030,"code":104578,"language":24032,"meta":30,"style":30},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[318,104580,104581,104598,104607],{"__ignoreMap":30},[321,104582,104583,104585,104587,104589,104592,104594,104596],{"class":323,"line":324},[321,104584,30475],{"class":2169},[321,104586,29321],{"class":436},[321,104588,25260],{"class":380},[321,104590,104591],{"class":436}," mujoco-python-api",[321,104593,101120],{"class":436},[321,104595,101123],{"class":380},[321,104597,101126],{"class":380},[321,104599,104600,104602,104604],{"class":323,"line":167},[321,104601,30475],{"class":2169},[321,104603,101133],{"class":436},[321,104605,104606],{"class":436}," mujoco-python-api\n",[321,104608,104609,104611,104613,104615],{"class":323,"line":200},[321,104610,24039],{"class":2169},[321,104612,24042],{"class":436},[321,104614,101075],{"class":436},[321,104616,101078],{"class":436},[19,104618,101149],{},[151,104620,104621,104628,104637],{},[154,104622,104623,101163,104625,104627],{},[318,104624,100820],{},[318,104626,100825],{}," 是官方 Python bindings 的类名。",[154,104629,104630,104631,104634,104635,28530],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[318,104632,104633],{},"mjModel"," 在 Python 中是 ",[318,104636,100854],{},[154,104638,104639,104640,28530],{},"不要使用 ",[318,104641,104642],{},"sim = mujoco_py.MjSim(...)",[14,104644,101190],{"id":101189},[19,104646,104647],{},"仿真推进核心代码:",[312,104649,104651],{"className":30523,"code":104650,"language":30525,"meta":30,"style":30},"mujoco.mj_step(model, data)\n",[318,104652,104653],{"__ignoreMap":30},[321,104654,104655],{"class":323,"line":324},[321,104656,104650],{"class":331},[19,104658,104659,104660,544,104662,544,104664,28530],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[318,104661,101215],{},[318,104663,101218],{},[318,104665,101212],{},[19,104667,104668],{},"重置仿真:",[312,104670,104672],{"className":30523,"code":104671,"language":30525,"meta":30,"style":30},"mujoco.mj_resetData(model, data)\n",[318,104673,104674],{"__ignoreMap":30},[321,104675,104676],{"class":323,"line":324},[321,104677,104671],{"class":331},[19,104679,104680,104681,82684,104683,104685],{},"如果手动修改了 ",[318,104682,101215],{},[318,104684,101218],{},"，通常应调用:",[312,104687,104689],{"className":30523,"code":104688,"language":30525,"meta":30,"style":30},"mujoco.mj_forward(model, data)\n",[318,104690,104691],{"__ignoreMap":30},[321,104692,104693],{"class":323,"line":324},[321,104694,104688],{"class":331},[19,104696,104697],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[292,104699,104701,544,104703,544,104705,104707],{"id":104700},"qposqvelctrl-是什么",[318,104702,104175],{},[318,104704,104505],{},[318,104706,104508],{}," 是什么",[19,104709,104710],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[469,104712,104713,104725],{},[472,104714,104715],{},[475,104716,104717,104720,104722],{},[478,104718,104719],{"align":23944},"字段",[478,104721,100845],{"align":23944},[478,104723,104724],{"align":23944},"谁来修改",[516,104726,104727,104739,104751],{},[475,104728,104729,104733,104736],{},[521,104730,104731],{"align":23944},[318,104732,101215],{},[521,104734,104735],{"align":23944},"广义位置，例如小车位置、关节角、自由物体位置姿态",[521,104737,104738],{"align":23944},"MuJoCo 更新，也可以手动设置初始状态",[475,104740,104741,104745,104748],{},[521,104742,104743],{"align":23944},[318,104744,101218],{},[521,104746,104747],{"align":23944},"广义速度，例如小车速度、关节角速度",[521,104749,104750],{"align":23944},"MuJoCo 更新，也可以手动清零",[475,104752,104753,104757,104760],{},[521,104754,104755],{"align":23944},[318,104756,101221],{},[521,104758,104759],{"align":23944},"actuator 的控制输入",[521,104761,104762],{"align":23944},"主要由你的控制代码写入",[19,104764,9232,104765,101163,104767,104769],{},[318,104766,104175],{},[318,104768,104505],{}," 不一定同维。自由刚体就是典型例子：",[312,104771,104774],{"className":104772,"code":104773,"language":5394,"meta":30},[5392],"freejoint: qpos 7 维，qvel 6 维\n",[318,104775,104773],{"__ignoreMap":30},[292,104777,104779,101163,104781,104783],{"id":104778},"mj_step-和-mj_forward-的区别",[318,104780,101360],{},[318,104782,104395],{}," 的区别",[469,104785,104786,104799],{},[472,104787,104788],{},[475,104789,104790,104793,104796],{},[478,104791,104792],{"align":23944},"函数",[478,104794,104795],{"align":23944},"是否推进时间",[478,104797,104798],{"align":23944},"什么时候用",[516,104800,104801,104814],{},[475,104802,104803,104808,104811],{},[521,104804,104805],{"align":23944},[318,104806,104807],{},"mj_step(model, data)",[521,104809,104810],{"align":23944},"是",[521,104812,104813],{"align":23944},"正常仿真循环，每调用一次前进一步",[475,104815,104816,104821,104824],{},[521,104817,104818],{"align":23944},[318,104819,104820],{},"mj_forward(model, data)",[521,104822,104823],{"align":23944},"否",[521,104825,104826,104827,544,104829,104831],{"align":23944},"手动改了 ",[318,104828,104175],{},[318,104830,104505],{}," 后，刷新派生量",[19,104833,104834],{},"例如你写：",[312,104836,104838],{"className":30523,"code":104837,"language":30525,"meta":30,"style":30},"data.qpos[2] = 2.0\n",[318,104839,104840],{"__ignoreMap":30},[321,104841,104842,104845,104847,104849,104851],{"class":323,"line":324},[321,104843,104844],{"class":331},"data.qpos[",[321,104846,409],{"class":380},[321,104848,4649],{"class":331},[321,104850,377],{"class":327},[321,104852,104853],{"class":380}," 2.0\n",[19,104855,104856],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[312,104858,104859],{"className":30523,"code":104688,"language":30525,"meta":30,"style":30},[318,104860,104861],{"__ignoreMap":30},[321,104862,104863],{"class":323,"line":324},[321,104864,104688],{"class":331},[292,104866,104868],{"id":104867},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104870,104871,104874,104875,104877],{},[318,104872,104873],{},"mujoco.mj_resetData(model, data)"," 会把 ",[318,104876,33546],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[312,104879,104881],{"className":30523,"code":104880,"language":30525,"meta":30,"style":30},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[318,104882,104883,104887,104897,104907],{"__ignoreMap":30},[321,104884,104885],{"class":323,"line":324},[321,104886,104671],{"class":331},[321,104888,104889,104892,104894],{"class":323,"line":167},[321,104890,104891],{"class":331},"data.qpos[:] ",[321,104893,377],{"class":327},[321,104895,104896],{"class":331}," random_qpos\n",[321,104898,104899,104902,104904],{"class":323,"line":200},[321,104900,104901],{"class":331},"data.qvel[:] ",[321,104903,377],{"class":327},[321,104905,104906],{"class":380}," 0.0\n",[321,104908,104909],{"class":323,"line":1401},[321,104910,104688],{"class":331},[14,104912,101398],{"id":101397},[312,104914,104916],{"className":30523,"code":104915,"language":30525,"meta":30,"style":30},"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",[318,104917,104918,104924,104934,104938,104942,104950,104955,104959,104963,104967,104972,104976,104981,104986,104991,104995,104999,105003,105007,105011,105015,105034,105041,105053,105064,105080,105096,105100,105104,105116,105128,105136,105140,105151,105155,105171,105175,105179,105188,105192,105197,105206,105210,105223,105228,105237,105241,105245,105257],{"__ignoreMap":30},[321,104919,104920,104922],{"class":323,"line":324},[321,104921,30537],{"class":327},[321,104923,101446],{"class":331},[321,104925,104926,104928,104930,104932],{"class":323,"line":167},[321,104927,30537],{"class":327},[321,104929,31525],{"class":331},[321,104931,31528],{"class":327},[321,104933,31531],{"class":331},[321,104935,104936],{"class":323,"line":200},[321,104937,2606],{"emptyLinePlaceholder":251},[321,104939,104940],{"class":323,"line":1401},[321,104941,2606],{"emptyLinePlaceholder":251},[321,104943,104944,104946,104948],{"class":323,"line":1407},[321,104945,101459],{"class":380},[321,104947,13771],{"class":327},[321,104949,101464],{"class":436},[321,104951,104952],{"class":323,"line":1421},[321,104953,104954],{"class":436},"\u003Cmujoco model=\"state_api\">\n",[321,104956,104957],{"class":323,"line":1427},[321,104958,101474],{"class":436},[321,104960,104961],{"class":323,"line":1518},[321,104962,2606],{"emptyLinePlaceholder":251},[321,104964,104965],{"class":323,"line":1524},[321,104966,101483],{"class":436},[321,104968,104969],{"class":323,"line":1536},[321,104970,104971],{"class":436},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[321,104973,104974],{"class":323,"line":1818},[321,104975,2606],{"emptyLinePlaceholder":251},[321,104977,104978],{"class":323,"line":1823},[321,104979,104980],{"class":436},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[321,104982,104983],{"class":323,"line":1829},[321,104984,104985],{"class":436},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[321,104987,104988],{"class":323,"line":1834},[321,104989,104990],{"class":436},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[321,104992,104993],{"class":323,"line":1848},[321,104994,101512],{"class":436},[321,104996,104997],{"class":323,"line":1853},[321,104998,101517],{"class":436},[321,105000,105001],{"class":323,"line":1859},[321,105002,101522],{"class":436},[321,105004,105005],{"class":323,"line":1880},[321,105006,95843],{"class":436},[321,105008,105009],{"class":323,"line":1885},[321,105010,2606],{"emptyLinePlaceholder":251},[321,105012,105013],{"class":323,"line":1899},[321,105014,2606],{"emptyLinePlaceholder":251},[321,105016,105017,105019,105022,105025,105027,105030,105032],{"class":323,"line":1904},[321,105018,32092],{"class":327},[321,105020,105021],{"class":2169}," print_state",[321,105023,105024],{"class":331},"(prefix: ",[321,105026,1506],{"class":380},[321,105028,105029],{"class":331},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[321,105031,95831],{"class":380},[321,105033,3945],{"class":331},[321,105035,105036,105038],{"class":323,"line":1933},[321,105037,31444],{"class":380},[321,105039,105040],{"class":331},"(prefix)\n",[321,105042,105043,105045,105047,105050],{"class":323,"line":1938},[321,105044,31444],{"class":380},[321,105046,332],{"class":331},[321,105048,105049],{"class":436},"\"  timestep:\"",[321,105051,105052],{"class":331},", model.opt.timestep)\n",[321,105054,105055,105057,105059,105062],{"class":323,"line":1955},[321,105056,31444],{"class":380},[321,105058,332],{"class":331},[321,105060,105061],{"class":436},"\"  time:\"",[321,105063,101623],{"class":331},[321,105065,105066,105068,105070,105073,105076,105078],{"class":323,"line":1960},[321,105067,31444],{"class":380},[321,105069,332],{"class":331},[321,105071,105072],{"class":436},"\"  qpos:\"",[321,105074,105075],{"class":331},", np.round(data.qpos.copy(), ",[321,105077,625],{"class":380},[321,105079,30642],{"class":331},[321,105081,105082,105084,105086,105089,105092,105094],{"class":323,"line":1965},[321,105083,31444],{"class":380},[321,105085,332],{"class":331},[321,105087,105088],{"class":436},"\"  qvel:\"",[321,105090,105091],{"class":331},", np.round(data.qvel.copy(), ",[321,105093,625],{"class":380},[321,105095,30642],{"class":331},[321,105097,105098],{"class":323,"line":1970},[321,105099,2606],{"emptyLinePlaceholder":251},[321,105101,105102],{"class":323,"line":1984},[321,105103,2606],{"emptyLinePlaceholder":251},[321,105105,105106,105108,105110,105112,105114],{"class":323,"line":1989},[321,105107,32092],{"class":327},[321,105109,2179],{"class":2169},[321,105111,101543],{"class":331},[321,105113,95831],{"class":380},[321,105115,3945],{"class":331},[321,105117,105118,105120,105122,105124,105126],{"class":323,"line":2783},[321,105119,101552],{"class":331},[321,105121,377],{"class":327},[321,105123,101557],{"class":331},[321,105125,101459],{"class":380},[321,105127,338],{"class":331},[321,105129,105130,105132,105134],{"class":323,"line":2797},[321,105131,101566],{"class":331},[321,105133,377],{"class":327},[321,105135,101571],{"class":331},[321,105137,105138],{"class":323,"line":2805},[321,105139,2606],{"emptyLinePlaceholder":251},[321,105141,105142,105145,105148],{"class":323,"line":2810},[321,105143,105144],{"class":331},"    print_state(",[321,105146,105147],{"class":436},"\"initial\"",[321,105149,105150],{"class":331},", model, data)\n",[321,105152,105153],{"class":323,"line":2816},[321,105154,2606],{"emptyLinePlaceholder":251},[321,105156,105157,105159,105161,105163,105165,105167,105169],{"class":323,"line":2822},[321,105158,3407],{"class":327},[321,105160,101646],{"class":331},[321,105162,26188],{"class":327},[321,105164,32588],{"class":380},[321,105166,332],{"class":331},[321,105168,988],{"class":380},[321,105170,30931],{"class":331},[321,105172,105173],{"class":323,"line":2827},[321,105174,101661],{"class":331},[321,105176,105177],{"class":323,"line":8155},[321,105178,2606],{"emptyLinePlaceholder":251},[321,105180,105181,105183,105186],{"class":323,"line":8179},[321,105182,105144],{"class":331},[321,105184,105185],{"class":436},"\"after 50 steps\"",[321,105187,105150],{"class":331},[321,105189,105190],{"class":323,"line":8184},[321,105191,2606],{"emptyLinePlaceholder":251},[321,105193,105194],{"class":323,"line":8190},[321,105195,105196],{"class":331},"    mujoco.mj_resetData(model, data)\n",[321,105198,105199,105201,105204],{"class":323,"line":8217},[321,105200,105144],{"class":331},[321,105202,105203],{"class":436},"\"after reset\"",[321,105205,105150],{"class":331},[321,105207,105208],{"class":323,"line":8222},[321,105209,2606],{"emptyLinePlaceholder":251},[321,105211,105212,105215,105217,105219,105221],{"class":323,"line":8228},[321,105213,105214],{"class":331},"    data.qpos[",[321,105216,409],{"class":380},[321,105218,4649],{"class":331},[321,105220,377],{"class":327},[321,105222,104853],{"class":380},[321,105224,105225],{"class":323,"line":8240},[321,105226,105227],{"class":331},"    mujoco.mj_forward(model, data)\n",[321,105229,105230,105232,105235],{"class":323,"line":8252},[321,105231,105144],{"class":331},[321,105233,105234],{"class":436},"\"after manual qpos edit\"",[321,105236,105150],{"class":331},[321,105238,105239],{"class":323,"line":8264},[321,105240,2606],{"emptyLinePlaceholder":251},[321,105242,105243],{"class":323,"line":9923},[321,105244,2606],{"emptyLinePlaceholder":251},[321,105246,105247,105249,105251,105253,105255],{"class":323,"line":9948},[321,105248,1737],{"class":327},[321,105250,31365],{"class":380},[321,105252,101704],{"class":327},[321,105254,101707],{"class":436},[321,105256,3945],{"class":331},[321,105258,105259],{"class":323,"line":9971},[321,105260,101714],{"class":331},[19,105262,103715],{},[312,105264,105266],{"className":24030,"code":105265,"language":24032,"meta":30,"style":30},"touch ch3_python_state.py\n",[318,105267,105268],{"__ignoreMap":30},[321,105269,105270,105272],{"class":323,"line":324},[321,105271,101428],{"class":2169},[321,105273,105274],{"class":436}," ch3_python_state.py\n",[19,105276,102446],{},[312,105278,105280],{"className":24030,"code":105279,"language":24032,"meta":30,"style":30},"python ch3_python_state.py\n",[318,105281,105282],{"__ignoreMap":30},[321,105283,105284,105286],{"class":323,"line":324},[321,105285,30525],{"class":2169},[321,105287,105274],{"class":436},[292,105289,101717],{"id":101717},[19,105291,105292],{},"打印状态的函数：",[312,105294,105296],{"className":30523,"code":105295,"language":30525,"meta":30,"style":30},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[318,105297,105298],{"__ignoreMap":30},[321,105299,105300,105302,105304,105306,105308,105310,105312],{"class":323,"line":324},[321,105301,32092],{"class":327},[321,105303,105021],{"class":2169},[321,105305,105024],{"class":331},[321,105307,1506],{"class":380},[321,105309,105029],{"class":331},[321,105311,95831],{"class":380},[321,105313,3945],{"class":331},[19,105315,105316,105317,105319],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[318,105318,33546],{}," 里发生了什么。",[19,105321,105322],{},"推进 50 步：",[312,105324,105326],{"className":30523,"code":105325,"language":30525,"meta":30,"style":30},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[318,105327,105328,105344],{"__ignoreMap":30},[321,105329,105330,105332,105334,105336,105338,105340,105342],{"class":323,"line":324},[321,105331,3231],{"class":327},[321,105333,101646],{"class":331},[321,105335,26188],{"class":327},[321,105337,32588],{"class":380},[321,105339,332],{"class":331},[321,105341,988],{"class":380},[321,105343,30931],{"class":331},[321,105345,105346],{"class":323,"line":167},[321,105347,101844],{"class":331},[19,105349,105350,105351,105354,105355,105357],{},"由于 ",[318,105352,105353],{},"timestep=0.01","，所以 50 步后时间约为 ",[318,105356,35474],{}," 秒。",[19,105359,105360],{},"重置：",[312,105362,105363],{"className":30523,"code":104671,"language":30525,"meta":30,"style":30},[318,105364,105365],{"__ignoreMap":30},[321,105366,105367],{"class":323,"line":324},[321,105368,104671],{"class":331},[19,105370,105371],{},"这会把时间、位置、速度恢复到初始状态。",[19,105373,105374],{},"手动改高度：",[312,105376,105378],{"className":30523,"code":105377,"language":30525,"meta":30,"style":30},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[318,105379,105380,105392],{"__ignoreMap":30},[321,105381,105382,105384,105386,105388,105390],{"class":323,"line":324},[321,105383,104844],{"class":331},[321,105385,409],{"class":380},[321,105387,4649],{"class":331},[321,105389,377],{"class":327},[321,105391,104853],{"class":380},[321,105393,105394],{"class":323,"line":167},[321,105395,104688],{"class":331},[19,105397,105398,105399,105402,105403,105406],{},"这个例子里 ",[318,105400,105401],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[318,105404,105405],{},"2.0"," 表示把小球放到更高的位置。",[292,105408,101853],{"id":101853},[312,105410,105411],{"className":30523,"code":105295,"language":30525,"meta":30,"style":30},[318,105412,105413],{"__ignoreMap":30},[321,105414,105415,105417,105419,105421,105423,105425,105427],{"class":323,"line":324},[321,105416,32092],{"class":327},[321,105418,105021],{"class":2169},[321,105420,105024],{"class":331},[321,105422,1506],{"class":380},[321,105424,105029],{"class":331},[321,105426,95831],{"class":380},[321,105428,3945],{"class":331},[19,105430,105431],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[151,105433,105434,105443,105448],{},[154,105435,105436,105439,105440,105442],{},[318,105437,105438],{},"prefix","：一段文字，比如 ",[318,105441,105147],{},"，用来说明现在打印的是哪个阶段。",[154,105444,105445,105447],{},[318,105446,102230],{},"：MuJoCo 模型。",[154,105449,105450,105452],{},[318,105451,33546],{},"：MuJoCo 当前状态。",[19,105454,105455,544,105458,105461],{},[318,105456,105457],{},"prefix: str",[318,105459,105460],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[312,105463,105465],{"className":30523,"code":105464,"language":30525,"meta":30,"style":30},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[318,105466,105467],{"__ignoreMap":30},[321,105468,105469,105471,105473,105475,105477,105479],{"class":323,"line":324},[321,105470,30560],{"class":380},[321,105472,332],{"class":331},[321,105474,105072],{"class":436},[321,105476,105075],{"class":331},[321,105478,625],{"class":380},[321,105480,30642],{"class":331},[19,105482,105483,105486],{},[318,105484,105485],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[312,105488,105490],{"className":30523,"code":105489,"language":30525,"meta":30,"style":30},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[318,105491,105492,105504],{"__ignoreMap":30},[321,105493,105494,105496,105498,105500,105502],{"class":323,"line":324},[321,105495,101779],{"class":331},[321,105497,377],{"class":327},[321,105499,101557],{"class":331},[321,105501,101459],{"class":380},[321,105503,338],{"class":331},[321,105505,105506,105508,105510],{"class":323,"line":167},[321,105507,101803],{"class":331},[321,105509,377],{"class":327},[321,105511,101571],{"class":331},[19,105513,105514],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[312,105516,105518],{"className":30523,"code":105517,"language":30525,"meta":30,"style":30},"print_state(\"initial\", model, data)\n",[318,105519,105520],{"__ignoreMap":30},[321,105521,105522,105525,105527],{"class":323,"line":324},[321,105523,105524],{"class":331},"print_state(",[321,105526,105147],{"class":436},[321,105528,105150],{"class":331},[19,105530,105531,105532,105535],{},"调用刚才定义的 ",[318,105533,105534],{},"print_state"," 函数，打印初始状态。",[312,105537,105538],{"className":30523,"code":105325,"language":30525,"meta":30,"style":30},[318,105539,105540,105556],{"__ignoreMap":30},[321,105541,105542,105544,105546,105548,105550,105552,105554],{"class":323,"line":324},[321,105543,3231],{"class":327},[321,105545,101646],{"class":331},[321,105547,26188],{"class":327},[321,105549,32588],{"class":380},[321,105551,332],{"class":331},[321,105553,988],{"class":380},[321,105555,30931],{"class":331},[321,105557,105558],{"class":323,"line":167},[321,105559,101844],{"class":331},[19,105561,105562],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[312,105564,105565],{"className":30523,"code":104671,"language":30525,"meta":30,"style":30},[318,105566,105567],{"__ignoreMap":30},[321,105568,105569],{"class":323,"line":324},[321,105570,104671],{"class":331},[19,105572,105573,105574,105576,105577,105579],{},"重置 ",[318,105575,33546],{},"。注意它不会重新创建 ",[318,105578,102230],{},"，因为模型结构没有变，只是状态回到初始值。",[312,105581,105582],{"className":30523,"code":104837,"language":30525,"meta":30,"style":30},[318,105583,105584],{"__ignoreMap":30},[321,105585,105586,105588,105590,105592,105594],{"class":323,"line":324},[321,105587,104844],{"class":331},[321,105589,409],{"class":380},[321,105591,4649],{"class":331},[321,105593,377],{"class":327},[321,105595,104853],{"class":380},[19,105597,105598,105599,544,105602,544,105605,105607],{},"这行是“手动改状态”。在 freejoint 中，",[318,105600,105601],{},"qpos[0]",[318,105603,105604],{},"qpos[1]",[318,105606,105401],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[312,105609,105610],{"className":30523,"code":104688,"language":30525,"meta":30,"style":30},[318,105611,105612],{"__ignoreMap":30},[321,105613,105614],{"class":323,"line":324},[321,105615,104688],{"class":331},[19,105617,105618,105619,105621,105622,105624],{},"手动改完 ",[318,105620,104175],{}," 后，调用 ",[318,105623,104395],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105626,102461],{"id":102460},[19,105628,105629],{},"你会看到:",[151,105631,105632,105637,105642,105645],{},[154,105633,105634,105635],{},"初始时间为 ",[318,105636,523],{},[154,105638,105639,105640],{},"50 步后时间约为 ",[318,105641,35474],{},[154,105643,105644],{},"reset 后状态恢复",[154,105646,105647,105648,105651,105652],{},"手动修改 ",[318,105649,105650],{},"data.qpos[2]"," 后，小球高度变为 ",[318,105653,105405],{},[19,105655,105656,105658],{},[318,105657,105401],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105660,105661],{},"输出里可以重点看三件事：",[151,105663,105664,105672,105677],{},[154,105665,105666,105668,105669,105671],{},[318,105667,2593],{}," 是否随着 ",[318,105670,101360],{}," 增加。",[154,105673,105674,105676],{},[318,105675,104175],{}," 的 z 坐标是否因为下落而变化。",[154,105678,105679,105681,105682,28530],{},[318,105680,104497],{}," 后时间是否回到 ",[318,105683,523],{},[14,105685,102493],{"id":102492},[151,105687,105688,105694,105700,105706,105709,105718],{},[154,105689,105690,105691,28530],{},"修改 timestep 为 ",[318,105692,105693],{},"0.005",[154,105695,105696,105697,28530],{},"重新运行，检查 50 步后时间是否约为 ",[318,105698,105699],{},"0.25",[154,105701,105702,105703,28530],{},"修改重力为 ",[318,105704,105705],{},"0 0 -1.0",[154,105707,105708],{},"观察小球下降速度是否变慢。",[154,105710,102556,105711,102559,105714,105717],{},[318,105712,105713],{},"data.qpos[2] = 2.0",[318,105715,105716],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[154,105719,105720,105721,105724],{},"注释掉 ",[318,105722,105723],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105726,102598],{"id":102597},[292,105728,105730,105731,105733],{"id":105729},"修改-dataqpos-后位置没有更新","修改 ",[318,105732,101215],{}," 后位置没有更新",[19,105735,102607],{},[312,105737,105738],{"className":30523,"code":104688,"language":30525,"meta":30,"style":30},[318,105739,105740],{"__ignoreMap":30},[321,105741,105742],{"class":323,"line":324},[321,105743,104688],{"class":331},[292,105745,105746],{"id":105746},"数组维度看不懂",[19,105748,105749],{},"打印模型维度:",[312,105751,105753],{"className":30523,"code":105752,"language":30525,"meta":30,"style":30},"print(model.nq, model.nv, model.nu)\n",[318,105754,105755],{"__ignoreMap":30},[321,105756,105757,105759],{"class":323,"line":324},[321,105758,30560],{"class":380},[321,105760,105761],{"class":331},"(model.nq, model.nv, model.nu)\n",[469,105763,105764,105772],{},[472,105765,105766],{},[475,105767,105768,105770],{},[478,105769,104719],{"align":23944},[478,105771,100845],{"align":23944},[516,105773,105774,105784,105794],{},[475,105775,105776,105781],{},[521,105777,105778],{"align":23944},[318,105779,105780],{},"nq",[521,105782,105783],{"align":23944},"位置变量数量",[475,105785,105786,105791],{},[521,105787,105788],{"align":23944},[318,105789,105790],{},"nv",[521,105792,105793],{"align":23944},"速度变量数量",[475,105795,105796,105800],{},[521,105797,105798],{"align":23944},[318,105799,102307],{},[521,105801,105802],{"align":23944},"控制输入数量",[292,105804,105806,105807,105809],{"id":105805},"误以为-qpos-一定等于关节数","误以为 ",[318,105808,104175],{}," 一定等于关节数",[19,105811,105812,105813,82675,105815,105817,105818,105820],{},"不是。例如 ",[318,105814,101765],{},[318,105816,104175],{}," 是 7 维，但 ",[318,105819,104505],{}," 是 6 维。",[292,105822,105824,105825,105827],{"id":105823},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[318,105826,104175],{}," 的第几位",[19,105829,105830],{},"初学时可以先打印：",[312,105832,105834],{"className":30523,"code":105833,"language":30525,"meta":30,"style":30},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[318,105835,105836,105846,105856,105868],{"__ignoreMap":30},[321,105837,105838,105840,105842,105844],{"class":323,"line":324},[321,105839,30560],{"class":380},[321,105841,332],{"class":331},[321,105843,101584],{"class":436},[321,105845,101587],{"class":331},[321,105847,105848,105850,105852,105854],{"class":323,"line":167},[321,105849,30560],{"class":380},[321,105851,332],{"class":331},[321,105853,101596],{"class":436},[321,105855,101599],{"class":331},[321,105857,105858,105860,105862,105865],{"class":323,"line":200},[321,105859,30560],{"class":380},[321,105861,332],{"class":331},[321,105863,105864],{"class":436},"\"qpos:\"",[321,105866,105867],{"class":331},", data.qpos)\n",[321,105869,105870,105872,105874,105877],{"class":323,"line":1401},[321,105871,30560],{"class":380},[321,105873,332],{"class":331},[321,105875,105876],{"class":436},"\"qvel:\"",[321,105878,105879],{"class":331},", data.qvel)\n",[19,105881,105882],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[292,105884,105885],{"id":105885},"仿真结果每次都一样",[19,105887,105888,105889,105891],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[318,105890,104175],{},"、目标点或控制输入。",[14,105893,102752],{"id":102751},[19,105895,105896,105897,24763],{},"Python 控制 MuJoCo 的核心就是读写 ",[318,105898,33546],{},[151,105900,105901,105909,105914,105919],{},[154,105902,105903,105904,101163,105906,105908],{},"用 ",[318,105905,101215],{},[318,105907,101218],{}," 读取状态。",[154,105910,105903,105911,105913],{},[318,105912,101221],{}," 写入控制。",[154,105915,105903,105916,105918],{},[318,105917,101360],{}," 推进时间。",[154,105920,105921,105922,105924],{},"手动改状态后用 ",[318,105923,104395],{}," 刷新派生量。",[19,105926,105927],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5333,105929,105930],{},"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":30,"searchDepth":167,"depth":167,"links":105932},[105933,105934,105935,105942,105946,105947,105948,105958],{"id":100791,"depth":167,"text":100792},{"id":100914,"depth":167,"text":100915},{"id":101189,"depth":167,"text":101190,"children":105936},[105937,105939,105941],{"id":104700,"depth":200,"text":105938},"qpos、qvel、ctrl 是什么",{"id":104778,"depth":200,"text":105940},"mj_step 和 mj_forward 的区别",{"id":104867,"depth":200,"text":104868},{"id":101397,"depth":167,"text":101398,"children":105943},[105944,105945],{"id":101717,"depth":200,"text":101717},{"id":101853,"depth":200,"text":101853},{"id":102460,"depth":167,"text":102461},{"id":102492,"depth":167,"text":102493},{"id":102597,"depth":167,"text":102598,"children":105949},[105950,105952,105953,105955,105957],{"id":105729,"depth":200,"text":105951},"修改 data.qpos 后位置没有更新",{"id":105746,"depth":200,"text":105746},{"id":105805,"depth":200,"text":105954},"误以为 qpos 一定等于关节数",{"id":105823,"depth":200,"text":105956},"不知道某个元素在 qpos 的第几位",{"id":105885,"depth":200,"text":105885},{"id":102751,"depth":167,"text":102752},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104463,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105965,"title":105966,"body":105967,"description":30,"extension":249,"meta":107657,"navigation":251,"path":107658,"seo":107659,"stem":107660,"__hash__":107661},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105968,"toc":107633},[105969,105972,105974,105977,105979,106004,106007,106026,106029,106031,106033,106057,106059,106073,106075,106116,106118,106142,106144,106147,106181,106183,106196,106199,106267,106276,106280,106283,106317,106323,106326,106330,106369,106372,106392,106396,106439,106441,106470,106473,106479,106482,106484,106878,106880,106892,106894,106905,106907,106910,106939,106947,106950,106985,106988,106990,106998,107001,107003,107014,107024,107044,107047,107083,107095,107143,107162,107204,107217,107245,107250,107271,107281,107299,107302,107336,107339,107359,107362,107381,107387,107389,107392,107398,107404,107414,107417,107423,107432,107434,107480,107482,107488,107494,107497,107500,107520,107523,107529,107535,107537,107560,107563,107566,107575,107578,107616,107618,107621,107627,107630],[10,105970,105966],{"id":105971},"_4关节actuator-与力控制",[14,105973,100792],{"id":100791},[19,105975,105976],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,105978,104476],{},[151,105980,105981,105987,105992,105996,106001],{},[154,105982,105983,105986],{},[318,105984,105985],{},"hinge"," 关节",[154,105988,105989],{},[318,105990,105991],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[154,105993,105994],{},[318,105995,101221],{},[154,105997,105998],{},[318,105999,106000],{},"ctrlrange",[154,106002,106003],{},"读取关节角和角速度",[19,106005,106006],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[312,106008,106010],{"className":30523,"code":106009,"language":30525,"meta":30,"style":30},"data.ctrl[0] = ...\n",[318,106011,106012],{"__ignoreMap":30},[321,106013,106014,106017,106019,106021,106023],{"class":323,"line":324},[321,106015,106016],{"class":331},"data.ctrl[",[321,106018,523],{"class":380},[321,106020,4649],{"class":331},[321,106022,377],{"class":327},[321,106024,106025],{"class":380}," ...\n",[19,106027,106028],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106030,100915],{"id":100914},[19,106032,100918],{},[312,106034,106035],{"className":24030,"code":104533,"language":24032,"meta":30,"style":30},[318,106036,106037],{"__ignoreMap":30},[321,106038,106039,106041,106043,106045,106047,106049,106051,106053,106055],{"class":323,"line":324},[321,106040,24721],{"class":2169},[321,106042,26460],{"class":436},[321,106044,24042],{"class":436},[321,106046,26545],{"class":380},[321,106048,104548],{"class":436},[321,106050,100943],{"class":436},[321,106052,102646],{"class":436},[321,106054,100959],{"class":436},[321,106056,104557],{"class":436},[19,106058,102964],{},[312,106060,106061],{"className":24030,"code":101064,"language":24032,"meta":30,"style":30},[318,106062,106063],{"__ignoreMap":30},[321,106064,106065,106067,106069,106071],{"class":323,"line":324},[321,106066,24039],{"class":2169},[321,106068,24042],{"class":436},[321,106070,101075],{"class":436},[321,106072,101078],{"class":436},[19,106074,102981],{},[312,106076,106078],{"className":24030,"code":106077,"language":24032,"meta":30,"style":30},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[318,106079,106080,106097,106106],{"__ignoreMap":30},[321,106081,106082,106084,106086,106088,106091,106093,106095],{"class":323,"line":324},[321,106083,30475],{"class":2169},[321,106085,29321],{"class":436},[321,106087,25260],{"class":380},[321,106089,106090],{"class":436}," mujoco-control",[321,106092,101120],{"class":436},[321,106094,101123],{"class":380},[321,106096,101126],{"class":380},[321,106098,106099,106101,106103],{"class":323,"line":167},[321,106100,30475],{"class":2169},[321,106102,101133],{"class":436},[321,106104,106105],{"class":436}," mujoco-control\n",[321,106107,106108,106110,106112,106114],{"class":323,"line":200},[321,106109,24039],{"class":2169},[321,106111,24042],{"class":436},[321,106113,101075],{"class":436},[321,106115,101078],{"class":436},[19,106117,101149],{},[151,106119,106120,106126,106133,106139],{},[154,106121,106122,106125],{},[318,106123,106124],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[154,106127,106128,106130,106131,28530],{},[318,106129,101221],{}," 长度等于 ",[318,106132,102303],{},[154,106134,82367,106135,106138],{},[318,106136,106137],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[154,106140,106141],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106143,101190],{"id":101189},[19,106145,106146],{},"关节决定 body 如何运动:",[312,106148,106150],{"className":53212,"code":106149,"language":53214,"meta":30,"style":30},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[318,106151,106152],{"__ignoreMap":30},[321,106153,106154,106156,106158,106160,106162,106165,106167,106169,106171,106174,106176,106179],{"class":323,"line":324},[321,106155,1242],{"class":331},[321,106157,103101],{"class":51445},[321,106159,15127],{"class":2169},[321,106161,377],{"class":331},[321,106163,106164],{"class":436},"\"hinge\"",[321,106166,53969],{"class":2169},[321,106168,377],{"class":331},[321,106170,106164],{"class":436},[321,106172,106173],{"class":2169}," axis",[321,106175,377],{"class":331},[321,106177,106178],{"class":436},"\"0 1 0\"",[321,106180,101289],{"class":331},[19,106182,103197],{},[151,106184,106185,106190,106193],{},[154,106186,106187,106188],{},"名字是 ",[318,106189,105985],{},[154,106191,106192],{},"类型是旋转关节",[154,106194,106195],{},"绕 y 轴旋转",[19,106197,106198],{},"actuator 决定如何施加控制:",[312,106200,106202],{"className":53212,"code":106201,"language":53214,"meta":30,"style":30},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[318,106203,106204,106213,106259],{"__ignoreMap":30},[321,106205,106206,106208,106211],{"class":323,"line":324},[321,106207,1242],{"class":331},[321,106209,106210],{"class":51445},"actuator",[321,106212,51452],{"class":331},[321,106214,106215,106217,106220,106222,106224,106227,106230,106232,106234,106237,106239,106241,106244,106246,106249,106252,106254,106257],{"class":323,"line":167},[321,106216,52289],{"class":331},[321,106218,106219],{"class":51445},"motor",[321,106221,15127],{"class":2169},[321,106223,377],{"class":331},[321,106225,106226],{"class":436},"\"hinge_motor\"",[321,106228,106229],{"class":2169}," joint",[321,106231,377],{"class":331},[321,106233,106164],{"class":436},[321,106235,106236],{"class":2169}," gear",[321,106238,377],{"class":331},[321,106240,3884],{"class":436},[321,106242,106243],{"class":2169}," ctrlrange",[321,106245,377],{"class":331},[321,106247,106248],{"class":436},"\"-2 2\"",[321,106250,106251],{"class":2169}," ctrllimited",[321,106253,377],{"class":331},[321,106255,106256],{"class":436},"\"true\"",[321,106258,101289],{"class":331},[321,106260,106261,106263,106265],{"class":323,"line":200},[321,106262,51930],{"class":331},[321,106264,106210],{"class":51445},[321,106266,51452],{"class":331},[19,106268,106269,106272,106273,28530],{},[318,106270,106271],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[318,106274,106275],{},"[-2, 2]",[292,106277,106279],{"id":106278},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106281,106282],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[469,106284,106285,106295],{},[472,106286,106287],{},[475,106288,106289,106291,106293],{},[478,106290,25898],{"align":23944},[478,106292,102841],{"align":23944},[478,106294,100879],{"align":23944},[516,106296,106297,106307],{},[475,106298,106299,106301,106304],{},[521,106300,103101],{"align":23944},[521,106302,106303],{"align":23944},"定义能怎么动",[521,106305,106306],{"align":23944},"门轴允许门旋转",[475,106308,106309,106311,106314],{},[521,106310,106210],{"align":23944},[521,106312,106313],{"align":23944},"定义怎么施力或控制",[521,106315,106316],{"align":23944},"人推门、马达带动门",[19,106318,106319,106320,106322],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[318,106321,101221],{}," 主动控制它。",[19,106324,106325],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[292,106327,106329],{"id":106328},"hinge-joint","hinge joint",[312,106331,106333],{"className":53212,"code":106332,"language":53214,"meta":30,"style":30},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[318,106334,106335],{"__ignoreMap":30},[321,106336,106337,106339,106341,106343,106345,106347,106349,106351,106353,106355,106357,106359,106362,106364,106367],{"class":323,"line":324},[321,106338,1242],{"class":331},[321,106340,103101],{"class":51445},[321,106342,15127],{"class":2169},[321,106344,377],{"class":331},[321,106346,106164],{"class":436},[321,106348,53969],{"class":2169},[321,106350,377],{"class":331},[321,106352,106164],{"class":436},[321,106354,106173],{"class":2169},[321,106356,377],{"class":331},[321,106358,106178],{"class":436},[321,106360,106361],{"class":2169}," damping",[321,106363,377],{"class":331},[321,106365,106366],{"class":436},"\"0.1\"",[321,106368,101289],{"class":331},[19,106370,106371],{},"含义：",[151,106373,106374,106380,106386],{},[154,106375,106376,106379],{},[318,106377,106378],{},"type=\"hinge\"","：只能绕一个轴旋转。",[154,106381,106382,106385],{},[318,106383,106384],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[154,106387,106388,106391],{},[318,106389,106390],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[292,106393,106395],{"id":106394},"motor-actuator","motor actuator",[312,106397,106399],{"className":53212,"code":106398,"language":53214,"meta":30,"style":30},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[318,106400,106401],{"__ignoreMap":30},[321,106402,106403,106405,106407,106409,106411,106413,106415,106417,106419,106421,106423,106425,106427,106429,106431,106433,106435,106437],{"class":323,"line":324},[321,106404,1242],{"class":331},[321,106406,106219],{"class":51445},[321,106408,15127],{"class":2169},[321,106410,377],{"class":331},[321,106412,106226],{"class":436},[321,106414,106229],{"class":2169},[321,106416,377],{"class":331},[321,106418,106164],{"class":436},[321,106420,106236],{"class":2169},[321,106422,377],{"class":331},[321,106424,3884],{"class":436},[321,106426,106243],{"class":2169},[321,106428,377],{"class":331},[321,106430,106248],{"class":436},[321,106432,106251],{"class":2169},[321,106434,377],{"class":331},[321,106436,106256],{"class":436},[321,106438,101289],{"class":331},[19,106440,106371],{},[151,106442,106443,106452,106458,106464],{},[154,106444,106445,106448,106449,106451],{},[318,106446,106447],{},"joint=\"hinge\"","：这个电机作用在名为 ",[318,106450,105985],{}," 的关节上。",[154,106453,106454,106457],{},[318,106455,106456],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[154,106459,106460,106463],{},[318,106461,106462],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[154,106465,106466,106469],{},[318,106467,106468],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106471,106472],{},"简单理解：",[312,106474,106477],{"className":106475,"code":106476,"language":5394,"meta":30},[5392],"实际施加效果 ≈ data.ctrl[0] * gear\n",[318,106478,106476],{"__ignoreMap":30},[19,106480,106481],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106483,101398],{"id":101397},[312,106485,106487],{"className":30523,"code":106486,"language":30525,"meta":30,"style":30},"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",[318,106488,106489,106496,106500,106506,106516,106520,106524,106532,106537,106542,106546,106550,106555,106560,106564,106569,106574,106579,106584,106588,106592,106596,106601,106606,106611,106615,106619,106623,106627,106639,106651,106659,106663,106673,106683,106693,106697,106710,106723,106727,106744,106758,106793,106797,106801,106812,106827,106842,106854,106858,106862,106874],{"__ignoreMap":30},[321,106490,106491,106493],{"class":323,"line":324},[321,106492,30537],{"class":327},[321,106494,106495],{"class":331}," math\n",[321,106497,106498],{"class":323,"line":167},[321,106499,2606],{"emptyLinePlaceholder":251},[321,106501,106502,106504],{"class":323,"line":200},[321,106503,30537],{"class":327},[321,106505,101446],{"class":331},[321,106507,106508,106510,106512,106514],{"class":323,"line":1401},[321,106509,30537],{"class":327},[321,106511,31525],{"class":331},[321,106513,31528],{"class":327},[321,106515,31531],{"class":331},[321,106517,106518],{"class":323,"line":1407},[321,106519,2606],{"emptyLinePlaceholder":251},[321,106521,106522],{"class":323,"line":1421},[321,106523,2606],{"emptyLinePlaceholder":251},[321,106525,106526,106528,106530],{"class":323,"line":1427},[321,106527,101459],{"class":380},[321,106529,13771],{"class":327},[321,106531,101464],{"class":436},[321,106533,106534],{"class":323,"line":1518},[321,106535,106536],{"class":436},"\u003Cmujoco model=\"one_link_motor\">\n",[321,106538,106539],{"class":323,"line":1524},[321,106540,106541],{"class":436},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[321,106543,106544],{"class":323,"line":1536},[321,106545,2606],{"emptyLinePlaceholder":251},[321,106547,106548],{"class":323,"line":1818},[321,106549,101483],{"class":436},[321,106551,106552],{"class":323,"line":1823},[321,106553,106554],{"class":436},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[321,106556,106557],{"class":323,"line":1829},[321,106558,106559],{"class":436},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[321,106561,106562],{"class":323,"line":1834},[321,106563,2606],{"emptyLinePlaceholder":251},[321,106565,106566],{"class":323,"line":1848},[321,106567,106568],{"class":436},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[321,106570,106571],{"class":323,"line":1853},[321,106572,106573],{"class":436},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[321,106575,106576],{"class":323,"line":1859},[321,106577,106578],{"class":436},"        \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",[321,106580,106581],{"class":323,"line":1880},[321,106582,106583],{"class":436},"      \u003C\u002Fbody>\n",[321,106585,106586],{"class":323,"line":1885},[321,106587,101512],{"class":436},[321,106589,106590],{"class":323,"line":1899},[321,106591,101517],{"class":436},[321,106593,106594],{"class":323,"line":1904},[321,106595,2606],{"emptyLinePlaceholder":251},[321,106597,106598],{"class":323,"line":1933},[321,106599,106600],{"class":436},"  \u003Cactuator>\n",[321,106602,106603],{"class":323,"line":1938},[321,106604,106605],{"class":436},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[321,106607,106608],{"class":323,"line":1955},[321,106609,106610],{"class":436},"  \u003C\u002Factuator>\n",[321,106612,106613],{"class":323,"line":1960},[321,106614,101522],{"class":436},[321,106616,106617],{"class":323,"line":1965},[321,106618,95843],{"class":436},[321,106620,106621],{"class":323,"line":1970},[321,106622,2606],{"emptyLinePlaceholder":251},[321,106624,106625],{"class":323,"line":1984},[321,106626,2606],{"emptyLinePlaceholder":251},[321,106628,106629,106631,106633,106635,106637],{"class":323,"line":1989},[321,106630,32092],{"class":327},[321,106632,2179],{"class":2169},[321,106634,101543],{"class":331},[321,106636,95831],{"class":380},[321,106638,3945],{"class":331},[321,106640,106641,106643,106645,106647,106649],{"class":323,"line":2783},[321,106642,101552],{"class":331},[321,106644,377],{"class":327},[321,106646,101557],{"class":331},[321,106648,101459],{"class":380},[321,106650,338],{"class":331},[321,106652,106653,106655,106657],{"class":323,"line":2797},[321,106654,101566],{"class":331},[321,106656,377],{"class":327},[321,106658,101571],{"class":331},[321,106660,106661],{"class":323,"line":2805},[321,106662,2606],{"emptyLinePlaceholder":251},[321,106664,106665,106667,106669,106671],{"class":323,"line":2810},[321,106666,31444],{"class":380},[321,106668,332],{"class":331},[321,106670,101584],{"class":436},[321,106672,101587],{"class":331},[321,106674,106675,106677,106679,106681],{"class":323,"line":2816},[321,106676,31444],{"class":380},[321,106678,332],{"class":331},[321,106680,101596],{"class":436},[321,106682,101599],{"class":331},[321,106684,106685,106687,106689,106691],{"class":323,"line":2822},[321,106686,31444],{"class":380},[321,106688,332],{"class":331},[321,106690,101608],{"class":436},[321,106692,101611],{"class":331},[321,106694,106695],{"class":323,"line":2827},[321,106696,2606],{"emptyLinePlaceholder":251},[321,106698,106699,106701,106704,106706,106708],{"class":323,"line":8155},[321,106700,3307],{"class":327},[321,106702,106703],{"class":331}," model.nu ",[321,106705,21155],{"class":327},[321,106707,25263],{"class":380},[321,106709,3945],{"class":331},[321,106711,106712,106714,106716,106718,106721],{"class":323,"line":8179},[321,106713,103577],{"class":327},[321,106715,103580],{"class":380},[321,106717,332],{"class":331},[321,106719,106720],{"class":436},"\"expected exactly one actuator\"",[321,106722,338],{"class":331},[321,106724,106725],{"class":323,"line":8184},[321,106726,2606],{"emptyLinePlaceholder":251},[321,106728,106729,106731,106733,106735,106737,106739,106742],{"class":323,"line":8190},[321,106730,3407],{"class":327},[321,106732,31761],{"class":331},[321,106734,26188],{"class":327},[321,106736,32588],{"class":380},[321,106738,332],{"class":331},[321,106740,106741],{"class":380},"2000",[321,106743,30931],{"class":331},[321,106745,106746,106749,106751,106753,106755],{"class":323,"line":8217},[321,106747,106748],{"class":331},"        t ",[321,106750,377],{"class":327},[321,106752,31761],{"class":331},[321,106754,787],{"class":327},[321,106756,106757],{"class":331}," model.opt.timestep\n",[321,106759,106760,106763,106765,106767,106769,106772,106774,106777,106779,106781,106784,106786,106788,106790],{"class":323,"line":8222},[321,106761,106762],{"class":331},"        data.ctrl[",[321,106764,523],{"class":380},[321,106766,4649],{"class":331},[321,106768,377],{"class":327},[321,106770,106771],{"class":380}," 1.5",[321,106773,6725],{"class":327},[321,106775,106776],{"class":331}," math.sin(",[321,106778,105405],{"class":380},[321,106780,6725],{"class":327},[321,106782,106783],{"class":331}," math.pi ",[321,106785,787],{"class":327},[321,106787,62012],{"class":380},[321,106789,6725],{"class":327},[321,106791,106792],{"class":331}," t)\n",[321,106794,106795],{"class":323,"line":8228},[321,106796,101661],{"class":331},[321,106798,106799],{"class":323,"line":8240},[321,106800,2606],{"emptyLinePlaceholder":251},[321,106802,106803,106805,106807,106810],{"class":323,"line":8252},[321,106804,31444],{"class":380},[321,106806,332],{"class":331},[321,106808,106809],{"class":436},"\"time:\"",[321,106811,101623],{"class":331},[321,106813,106814,106816,106818,106821,106823,106825],{"class":323,"line":8264},[321,106815,31444],{"class":380},[321,106817,332],{"class":331},[321,106819,106820],{"class":436},"\"joint qpos:\"",[321,106822,105075],{"class":331},[321,106824,625],{"class":380},[321,106826,30642],{"class":331},[321,106828,106829,106831,106833,106836,106838,106840],{"class":323,"line":9923},[321,106830,31444],{"class":380},[321,106832,332],{"class":331},[321,106834,106835],{"class":436},"\"joint qvel:\"",[321,106837,105091],{"class":331},[321,106839,625],{"class":380},[321,106841,30642],{"class":331},[321,106843,106844,106846,106848,106851],{"class":323,"line":9948},[321,106845,31444],{"class":380},[321,106847,332],{"class":331},[321,106849,106850],{"class":436},"\"last ctrl:\"",[321,106852,106853],{"class":331},", data.ctrl.copy())\n",[321,106855,106856],{"class":323,"line":9971},[321,106857,2606],{"emptyLinePlaceholder":251},[321,106859,106860],{"class":323,"line":9995},[321,106861,2606],{"emptyLinePlaceholder":251},[321,106863,106864,106866,106868,106870,106872],{"class":323,"line":10000},[321,106865,1737],{"class":327},[321,106867,31365],{"class":380},[321,106869,101704],{"class":327},[321,106871,101707],{"class":436},[321,106873,3945],{"class":331},[321,106875,106876],{"class":323,"line":10005},[321,106877,101714],{"class":331},[19,106879,103715],{},[312,106881,106883],{"className":24030,"code":106882,"language":24032,"meta":30,"style":30},"touch ch4_joint_motor.py\n",[318,106884,106885],{"__ignoreMap":30},[321,106886,106887,106889],{"class":323,"line":324},[321,106888,101428],{"class":2169},[321,106890,106891],{"class":436}," ch4_joint_motor.py\n",[19,106893,102446],{},[312,106895,106897],{"className":24030,"code":106896,"language":24032,"meta":30,"style":30},"python ch4_joint_motor.py\n",[318,106898,106899],{"__ignoreMap":30},[321,106900,106901,106903],{"class":323,"line":324},[321,106902,30525],{"class":2169},[321,106904,106891],{"class":436},[292,106906,101717],{"id":101717},[19,106908,106909],{},"检查 actuator 数量：",[312,106911,106913],{"className":30523,"code":106912,"language":30525,"meta":30,"style":30},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[318,106914,106915,106927],{"__ignoreMap":30},[321,106916,106917,106919,106921,106923,106925],{"class":323,"line":324},[321,106918,1737],{"class":327},[321,106920,106703],{"class":331},[321,106922,21155],{"class":327},[321,106924,25263],{"class":380},[321,106926,3945],{"class":331},[321,106928,106929,106931,106933,106935,106937],{"class":323,"line":167},[321,106930,104040],{"class":327},[321,106932,103580],{"class":380},[321,106934,332],{"class":331},[321,106936,106720],{"class":436},[321,106938,338],{"class":331},[19,106940,106941,106943,106944,106946],{},[318,106942,102303],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[318,106945,101221],{}," 长度应该是 1。",[19,106948,106949],{},"产生正弦控制信号：",[312,106951,106953],{"className":30523,"code":106952,"language":30525,"meta":30,"style":30},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[318,106954,106955],{"__ignoreMap":30},[321,106956,106957,106959,106961,106963,106965,106967,106969,106971,106973,106975,106977,106979,106981,106983],{"class":323,"line":324},[321,106958,106016],{"class":331},[321,106960,523],{"class":380},[321,106962,4649],{"class":331},[321,106964,377],{"class":327},[321,106966,106771],{"class":380},[321,106968,6725],{"class":327},[321,106970,106776],{"class":331},[321,106972,105405],{"class":380},[321,106974,6725],{"class":327},[321,106976,106783],{"class":331},[321,106978,787],{"class":327},[321,106980,62012],{"class":380},[321,106982,6725],{"class":327},[321,106984,106792],{"class":331},[19,106986,106987],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,106989,101818],{},[312,106991,106992],{"className":30523,"code":104650,"language":30525,"meta":30,"style":30},[318,106993,106994],{"__ignoreMap":30},[321,106995,106996],{"class":323,"line":324},[321,106997,104650],{"class":331},[19,106999,107000],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[292,107002,101853],{"id":101853},[312,107004,107006],{"className":30523,"code":107005,"language":30525,"meta":30,"style":30},"import math\n",[318,107007,107008],{"__ignoreMap":30},[321,107009,107010,107012],{"class":323,"line":324},[321,107011,30537],{"class":327},[321,107013,106495],{"class":331},[19,107015,107016,107017,101163,107020,107023],{},"导入 Python 标准库里的数学模块。后面要用 ",[318,107018,107019],{},"math.sin",[318,107021,107022],{},"math.pi"," 生成周期变化的控制信号。",[312,107025,107026],{"className":30523,"code":103831,"language":30525,"meta":30,"style":30},[318,107027,107028,107034],{"__ignoreMap":30},[321,107029,107030,107032],{"class":323,"line":324},[321,107031,30537],{"class":327},[321,107033,101446],{"class":331},[321,107035,107036,107038,107040,107042],{"class":323,"line":167},[321,107037,30537],{"class":327},[321,107039,31525],{"class":331},[321,107041,31528],{"class":327},[321,107043,31531],{"class":331},[19,107045,107046],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[312,107048,107049],{"className":53212,"code":106332,"language":53214,"meta":30,"style":30},[318,107050,107051],{"__ignoreMap":30},[321,107052,107053,107055,107057,107059,107061,107063,107065,107067,107069,107071,107073,107075,107077,107079,107081],{"class":323,"line":324},[321,107054,1242],{"class":331},[321,107056,103101],{"class":51445},[321,107058,15127],{"class":2169},[321,107060,377],{"class":331},[321,107062,106164],{"class":436},[321,107064,53969],{"class":2169},[321,107066,377],{"class":331},[321,107068,106164],{"class":436},[321,107070,106173],{"class":2169},[321,107072,377],{"class":331},[321,107074,106178],{"class":436},[321,107076,106361],{"class":2169},[321,107078,377],{"class":331},[321,107080,106366],{"class":436},[321,107082,101289],{"class":331},[19,107084,107085,107086,107088,107089,107091,107092,107094],{},"这行定义关节。",[318,107087,105985],{}," 表示旋转关节。",[318,107090,106384],{}," 表示绕 y 轴旋转。",[318,107093,106390],{}," 表示有一点阻尼，运动不会完全无损耗。",[312,107096,107098],{"className":53212,"code":107097,"language":53214,"meta":30,"style":30},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[318,107099,107100],{"__ignoreMap":30},[321,107101,107102,107104,107106,107108,107110,107113,107115,107117,107120,107123,107125,107128,107130,107132,107134,107136,107138,107141],{"class":323,"line":324},[321,107103,1242],{"class":331},[321,107105,101265],{"class":51445},[321,107107,15127],{"class":2169},[321,107109,377],{"class":331},[321,107111,107112],{"class":436},"\"link_geom\"",[321,107114,53969],{"class":2169},[321,107116,377],{"class":331},[321,107118,107119],{"class":436},"\"capsule\"",[321,107121,107122],{"class":2169}," fromto",[321,107124,377],{"class":331},[321,107126,107127],{"class":436},"\"0 0 0 0 0 0.5\"",[321,107129,101281],{"class":2169},[321,107131,377],{"class":331},[321,107133,103923],{"class":436},[321,107135,102146],{"class":2169},[321,107137,377],{"class":331},[321,107139,107140],{"class":436},"\"0.5\"",[321,107142,101289],{"class":331},[19,107144,107145,107146,107148,107149,107151,107152,107155,107156,28530,107159,107161],{},"这行定义摆杆的形状。",[318,107147,103310],{}," 是胶囊体，适合表示杆子。",[318,107150,103321],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[318,107153,107154],{},"(0,0,0)"," 延伸到 ",[318,107157,107158],{},"(0,0,0.5)",[318,107160,103315],{}," 是半径。",[312,107163,107164],{"className":53212,"code":106398,"language":53214,"meta":30,"style":30},[318,107165,107166],{"__ignoreMap":30},[321,107167,107168,107170,107172,107174,107176,107178,107180,107182,107184,107186,107188,107190,107192,107194,107196,107198,107200,107202],{"class":323,"line":324},[321,107169,1242],{"class":331},[321,107171,106219],{"class":51445},[321,107173,15127],{"class":2169},[321,107175,377],{"class":331},[321,107177,106226],{"class":436},[321,107179,106229],{"class":2169},[321,107181,377],{"class":331},[321,107183,106164],{"class":436},[321,107185,106236],{"class":2169},[321,107187,377],{"class":331},[321,107189,3884],{"class":436},[321,107191,106243],{"class":2169},[321,107193,377],{"class":331},[321,107195,106248],{"class":436},[321,107197,106251],{"class":2169},[321,107199,377],{"class":331},[321,107201,106256],{"class":436},[321,107203,101289],{"class":331},[19,107205,107206,107207,107209,107210,107213,107214,107216],{},"这行定义电机。它作用在 ",[318,107208,105985],{}," 关节上。",[318,107211,107212],{},"gear"," 可以理解成放大倍数。",[318,107215,106000],{}," 限制控制输入范围。",[312,107218,107219],{"className":30523,"code":106912,"language":30525,"meta":30,"style":30},[318,107220,107221,107233],{"__ignoreMap":30},[321,107222,107223,107225,107227,107229,107231],{"class":323,"line":324},[321,107224,1737],{"class":327},[321,107226,106703],{"class":331},[321,107228,21155],{"class":327},[321,107230,25263],{"class":380},[321,107232,3945],{"class":331},[321,107234,107235,107237,107239,107241,107243],{"class":323,"line":167},[321,107236,104040],{"class":327},[321,107238,103580],{"class":380},[321,107240,332],{"class":331},[321,107242,106720],{"class":436},[321,107244,338],{"class":331},[19,107246,107247,107249],{},[318,107248,102303],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[312,107251,107253],{"className":30523,"code":107252,"language":30525,"meta":30,"style":30},"for step in range(2000):\n",[318,107254,107255],{"__ignoreMap":30},[321,107256,107257,107259,107261,107263,107265,107267,107269],{"class":323,"line":324},[321,107258,3231],{"class":327},[321,107260,31761],{"class":331},[321,107262,26188],{"class":327},[321,107264,32588],{"class":380},[321,107266,332],{"class":331},[321,107268,106741],{"class":380},[321,107270,30931],{"class":331},[19,107272,107273,107274,107276,107277,107280],{},"循环 2000 步。这里没有用 ",[318,107275,1324],{},"，而是用 ",[318,107278,107279],{},"step","，因为后面要用当前步数计算时间。",[312,107282,107284],{"className":30523,"code":107283,"language":30525,"meta":30,"style":30},"t = step * model.opt.timestep\n",[318,107285,107286],{"__ignoreMap":30},[321,107287,107288,107291,107293,107295,107297],{"class":323,"line":324},[321,107289,107290],{"class":331},"t ",[321,107292,377],{"class":327},[321,107294,31761],{"class":331},[321,107296,787],{"class":327},[321,107298,106757],{"class":331},[19,107300,107301],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[312,107303,107304],{"className":30523,"code":106952,"language":30525,"meta":30,"style":30},[318,107305,107306],{"__ignoreMap":30},[321,107307,107308,107310,107312,107314,107316,107318,107320,107322,107324,107326,107328,107330,107332,107334],{"class":323,"line":324},[321,107309,106016],{"class":331},[321,107311,523],{"class":380},[321,107313,4649],{"class":331},[321,107315,377],{"class":327},[321,107317,106771],{"class":380},[321,107319,6725],{"class":327},[321,107321,106776],{"class":331},[321,107323,105405],{"class":380},[321,107325,6725],{"class":327},[321,107327,106783],{"class":331},[321,107329,787],{"class":327},[321,107331,62012],{"class":380},[321,107333,6725],{"class":327},[321,107335,106792],{"class":331},[19,107337,107338],{},"这行给电机输入一个正弦波。拆开看：",[151,107340,107341,107347,107353],{},[154,107342,107343,107346],{},[318,107344,107345],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[154,107348,107349,107352],{},[318,107350,107351],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[154,107354,107355,107358],{},[318,107356,107357],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107360,107361],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[312,107363,107365],{"className":30523,"code":107364,"language":30525,"meta":30,"style":30},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[318,107366,107367],{"__ignoreMap":30},[321,107368,107369,107371,107373,107375,107377,107379],{"class":323,"line":324},[321,107370,30560],{"class":380},[321,107372,332],{"class":331},[321,107374,106820],{"class":436},[321,107376,105075],{"class":331},[321,107378,625],{"class":380},[321,107380,30642],{"class":331},[19,107382,107383,107384,107386],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[318,107385,101215],{}," 只有一个数。",[14,107388,102461],{"id":102460},[19,107390,107391],{},"输出类似:",[312,107393,107396],{"className":107394,"code":107395,"language":5394,"meta":30},[5392],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[318,107397,107395],{"__ignoreMap":30},[19,107399,107400,107401,107403],{},"这里 ",[318,107402,106271],{}," 是电机输入。",[19,107405,107406,107409,107410,107413],{},[318,107407,107408],{},"joint qpos"," 是关节角度，单位通常是弧度。",[318,107411,107412],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107415,107416],{},"角度单位提示：",[312,107418,107421],{"className":107419,"code":107420,"language":5394,"meta":30},[5392],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[318,107422,107420],{"__ignoreMap":30},[19,107424,107425,107426,107428,107429,107431],{},"如果你看到 ",[318,107427,104175],{}," 是 ",[318,107430,35474],{},"，大约就是 28.6 度。",[14,107433,102493],{"id":102492},[151,107435,107436,107443,107446,107453,107456,107464,107472],{},[154,107437,102556,107438,102559,107440,28530],{},[318,107439,106456],{},[318,107441,107442],{},"gear=\"5\"",[154,107444,107445],{},"重新运行，观察关节运动是否更剧烈。",[154,107447,102556,107448,102559,107450,28530],{},[318,107449,106000],{},[318,107451,107452],{},"-0.2 0.2",[154,107454,107455],{},"重新运行，观察控制能力是否变弱。",[154,107457,107458,107459,107461,107462,28530],{},"去掉 actuator，确认 ",[318,107460,102303],{}," 变成 ",[318,107463,523],{},[154,107465,102556,107466,102559,107468,107471],{},[318,107467,106390],{},[318,107469,107470],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[154,107473,102556,107474,102559,107476,107479],{},[318,107475,106384],{},[318,107477,107478],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107481,102598],{"id":102597},[292,107483,107485],{"id":107484},"indexerror-index-0-is-out-of-bounds",[318,107486,107487],{},"IndexError: index 0 is out of bounds",[19,107489,107490,107491,107493],{},"原因是 ",[318,107492,106137],{},"，没有 actuator。",[292,107495,107496],{"id":107496},"关节几乎不动",[19,107498,107499],{},"可能原因:",[151,107501,107502,107507,107511,107517],{},[154,107503,107504,107506],{},[318,107505,107212],{}," 太小",[154,107508,107509,107506],{},[318,107510,106000],{},[154,107512,107513,107516],{},[318,107514,107515],{},"damping"," 太大",[154,107518,107519],{},"重力方向导致运动不明显",[292,107521,107522],{"id":107522},"模型编译失败",[19,107524,107525,107526,107528],{},"检查 actuator 引用的 ",[318,107527,106447],{}," 是否存在，joint 名称是否拼写一致。",[292,107530,107532,107534],{"id":107531},"datactrl0-写了但没有效果",[318,107533,106271],{}," 写了但没有效果",[19,107536,102720],{},[151,107538,107539,107544,107547,107552,107557],{},[154,107540,107541,107543],{},[318,107542,102303],{}," 是否大于 0。",[154,107545,107546],{},"motor 是否引用了正确 joint。",[154,107548,107549,107551],{},[318,107550,107212],{}," 是否太小。",[154,107553,107554,107556],{},[318,107555,106000],{}," 是否把输入限制得太小。",[154,107558,107559],{},"body 是否真的有可动 joint。",[292,107561,107562],{"id":107562},"控制输入超过范围会怎样",[19,107564,107565],{},"如果设置了：",[312,107567,107569],{"className":53212,"code":107568,"language":53214,"meta":30,"style":30},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[318,107570,107571],{"__ignoreMap":30},[321,107572,107573],{"class":323,"line":324},[321,107574,107568],{"class":331},[19,107576,107577],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[312,107579,107581],{"className":30523,"code":107580,"language":30525,"meta":30,"style":30},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[318,107582,107583,107603],{"__ignoreMap":30},[321,107584,107585,107588,107590,107593,107595,107597,107599,107601],{"class":323,"line":324},[321,107586,107587],{"class":331},"action ",[321,107589,377],{"class":327},[321,107591,107592],{"class":331}," np.clip(action, ",[321,107594,864],{"class":327},[321,107596,105405],{"class":380},[321,107598,12642],{"class":331},[321,107600,105405],{"class":380},[321,107602,338],{"class":331},[321,107604,107605,107607,107609,107611,107613],{"class":323,"line":167},[321,107606,106016],{"class":331},[321,107608,523],{"class":380},[321,107610,4649],{"class":331},[321,107612,377],{"class":327},[321,107614,107615],{"class":331}," action\n",[14,107617,102752],{"id":102751},[19,107619,107620],{},"这一章建立了控制任务的基本形式：",[312,107622,107625],{"className":107623,"code":107624,"language":5394,"meta":30},[5392],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[318,107626,107624],{"__ignoreMap":30},[19,107628,107629],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5333,107631,107632],{},"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":30,"searchDepth":167,"depth":167,"links":107634},[107635,107636,107637,107642,107646,107647,107648,107656],{"id":100791,"depth":167,"text":100792},{"id":100914,"depth":167,"text":100915},{"id":101189,"depth":167,"text":101190,"children":107638},[107639,107640,107641],{"id":106278,"depth":200,"text":106279},{"id":106328,"depth":200,"text":106329},{"id":106394,"depth":200,"text":106395},{"id":101397,"depth":167,"text":101398,"children":107643},[107644,107645],{"id":101717,"depth":200,"text":101717},{"id":101853,"depth":200,"text":101853},{"id":102460,"depth":167,"text":102461},{"id":102492,"depth":167,"text":102493},{"id":102597,"depth":167,"text":102598,"children":107649},[107650,107651,107652,107653,107655],{"id":107484,"depth":200,"text":107487},{"id":107496,"depth":200,"text":107496},{"id":107522,"depth":200,"text":107522},{"id":107531,"depth":200,"text":107654},"data.ctrl[0] 写了但没有效果",{"id":107562,"depth":200,"text":107562},{"id":102751,"depth":167,"text":102752},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105966,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107663,"title":107664,"body":107665,"description":30,"extension":249,"meta":109574,"navigation":251,"path":109575,"seo":109576,"stem":109577,"__hash__":109578},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107666,"toc":109550},[107667,107670,107672,107675,107683,107686,107703,107706,107731,107734,107780,107782,107784,107839,107841,107860,107862,107905,107908,107925,107928,107944,107954,107961,107963,107966,107969,108003,108006,108054,108058,108061,108075,108084,108088,108091,108116,108119,108123,108136,108139,108145,108148,108163,108165,108168,108428,108430,108442,108445,108757,108759,108771,108773,108776,108791,108796,108799,108821,108824,108827,108861,108864,108868,108879,108882,108899,108902,108916,108923,108943,108950,108964,108967,108979,108994,109014,109017,109039,109042,109046,109061,109072,109087,109090,109120,109136,109165,109173,109197,109200,109218,109228,109240,109247,109256,109262,109271,109274,109276,109285,109288,109303,109305,109308,109319,109322,109333,109336,109354,109356,109373,109376,109404,109406,109410,109413,109443,109449,109452,109456,109464,109467,109469,109490,109493,109496,109512,109515,109531,109533,109536,109547],[10,107668,107664],{"id":107669},"_5viewer-可视化与-renderer-离屏渲染",[14,107671,100792],{"id":100791},[19,107673,107674],{},"本章掌握两类可视化方式:",[151,107676,107677,107680],{},[154,107678,107679],{},"交互式 viewer: 适合人工观察仿真",[154,107681,107682],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107684,107685],{},"使用官方接口:",[312,107687,107689],{"className":30523,"code":107688,"language":30525,"meta":30,"style":30},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[318,107690,107691,107698],{"__ignoreMap":30},[321,107692,107693,107695],{"class":323,"line":324},[321,107694,30537],{"class":327},[321,107696,107697],{"class":331}," mujoco.viewer\n",[321,107699,107700],{"class":323,"line":167},[321,107701,107702],{"class":331},"mujoco.viewer.launch_passive(model, data)\n",[19,107704,107705],{},"以及:",[312,107707,107709],{"className":30523,"code":107708,"language":30525,"meta":30,"style":30},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[318,107710,107711,107721],{"__ignoreMap":30},[321,107712,107713,107716,107718],{"class":323,"line":324},[321,107714,107715],{"class":331},"renderer ",[321,107717,377],{"class":327},[321,107719,107720],{"class":331}," mujoco.Renderer(model)\n",[321,107722,107723,107726,107728],{"class":323,"line":167},[321,107724,107725],{"class":331},"image ",[321,107727,377],{"class":327},[321,107729,107730],{"class":331}," renderer.render()\n",[19,107732,107733],{},"新手建议先理解二者区别：",[469,107735,107736,107752],{},[472,107737,107738],{},[475,107739,107740,107743,107746,107749],{},[478,107741,107742],{"align":23944},"工具",[478,107744,107745],{"align":23944},"用途",[478,107747,107748],{"align":23944},"是否打开窗口",[478,107750,107751],{"align":23944},"常见场景",[516,107753,107754,107767],{},[475,107755,107756,107759,107762,107764],{},[521,107757,107758],{"align":23944},"Viewer",[521,107760,107761],{"align":23944},"人眼实时观察仿真",[521,107763,104810],{"align":23944},[521,107765,107766],{"align":23944},"调试模型、看控制效果",[475,107768,107769,107772,107775,107777],{},[521,107770,107771],{"align":23944},"Renderer",[521,107773,107774],{"align":23944},"生成图像数组",[521,107776,104823],{"align":23944},[521,107778,107779],{"align":23944},"保存图片、训练视觉策略、服务器批量采集",[14,107781,100915],{"id":100914},[19,107783,100918],{},[312,107785,107787],{"className":24030,"code":107786,"language":24032,"meta":30,"style":30},"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",[318,107788,107789,107801,107811,107819,107827],{"__ignoreMap":30},[321,107790,107791,107793,107795,107797,107799],{"class":323,"line":324},[321,107792,24721],{"class":2169},[321,107794,26460],{"class":436},[321,107796,24042],{"class":436},[321,107798,26545],{"class":380},[321,107800,24823],{"class":380},[321,107802,107803,107805,107807,107809],{"class":323,"line":167},[321,107804,100953],{"class":436},[321,107806,100956],{"class":436},[321,107808,100959],{"class":436},[321,107810,24823],{"class":380},[321,107812,107813,107815,107817],{"class":323,"line":200},[321,107814,100966],{"class":436},[321,107816,100969],{"class":436},[321,107818,24823],{"class":380},[321,107820,107821,107823,107825],{"class":323,"line":1401},[321,107822,100976],{"class":436},[321,107824,100979],{"class":436},[321,107826,24823],{"class":380},[321,107828,107829,107831,107833,107835,107837],{"class":323,"line":1407},[321,107830,100986],{"class":436},[321,107832,100989],{"class":436},[321,107834,100992],{"class":436},[321,107836,100995],{"class":436},[321,107838,102661],{"class":436},[19,107840,102964],{},[312,107842,107844],{"className":24030,"code":107843,"language":24032,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy pillow\n",[318,107845,107846],{"__ignoreMap":30},[321,107847,107848,107850,107852,107854,107857],{"class":323,"line":324},[321,107849,24039],{"class":2169},[321,107851,24042],{"class":436},[321,107853,101075],{"class":436},[321,107855,107856],{"class":436}," numpy",[321,107858,107859],{"class":436}," pillow\n",[19,107861,102981],{},[312,107863,107865],{"className":24030,"code":107864,"language":24032,"meta":30,"style":30},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[318,107866,107867,107884,107893],{"__ignoreMap":30},[321,107868,107869,107871,107873,107875,107878,107880,107882],{"class":323,"line":324},[321,107870,30475],{"class":2169},[321,107872,29321],{"class":436},[321,107874,25260],{"class":380},[321,107876,107877],{"class":436}," mujoco-render",[321,107879,101120],{"class":436},[321,107881,101123],{"class":380},[321,107883,101126],{"class":380},[321,107885,107886,107888,107890],{"class":323,"line":167},[321,107887,30475],{"class":2169},[321,107889,101133],{"class":436},[321,107891,107892],{"class":436}," mujoco-render\n",[321,107894,107895,107897,107899,107901,107903],{"class":323,"line":200},[321,107896,24039],{"class":2169},[321,107898,24042],{"class":436},[321,107900,101075],{"class":436},[321,107902,107856],{"class":436},[321,107904,107859],{"class":436},[19,107906,107907],{},"离屏渲染后端:",[312,107909,107911],{"className":24030,"code":107910,"language":24032,"meta":30,"style":30},"export MUJOCO_GL=egl\n",[318,107912,107913],{"__ignoreMap":30},[321,107914,107915,107917,107920,107922],{"class":323,"line":324},[321,107916,25187],{"class":327},[321,107918,107919],{"class":331}," MUJOCO_GL",[321,107921,377],{"class":327},[321,107923,107924],{"class":331},"egl\n",[19,107926,107927],{},"或:",[312,107929,107931],{"className":24030,"code":107930,"language":24032,"meta":30,"style":30},"export MUJOCO_GL=osmesa\n",[318,107932,107933],{"__ignoreMap":30},[321,107934,107935,107937,107939,107941],{"class":323,"line":324},[321,107936,25187],{"class":327},[321,107938,107919],{"class":331},[321,107940,377],{"class":327},[321,107942,107943],{"class":331},"osmesa\n",[19,107945,107946,107947,107950,107951,28530],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[318,107948,107949],{},"egl"," 失败，再尝试 ",[318,107952,107953],{},"osmesa",[19,107955,107956,107957,107960],{},"如果你在本机桌面环境运行，通常先不要设置 ",[318,107958,107959],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,107962,101190],{"id":101189},[19,107964,107965],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,107967,107968],{},"典型 viewer 流程:",[312,107970,107972],{"className":30523,"code":107971,"language":30525,"meta":30,"style":30},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[318,107973,107974,107987,107994,107998],{"__ignoreMap":30},[321,107975,107976,107979,107982,107984],{"class":323,"line":324},[321,107977,107978],{"class":327},"with",[321,107980,107981],{"class":331}," mujoco.viewer.launch_passive(model, data) ",[321,107983,31528],{"class":327},[321,107985,107986],{"class":331}," viewer:\n",[321,107988,107989,107991],{"class":323,"line":167},[321,107990,2457],{"class":327},[321,107992,107993],{"class":331}," viewer.is_running():\n",[321,107995,107996],{"class":323,"line":200},[321,107997,101661],{"class":331},[321,107999,108000],{"class":323,"line":1401},[321,108001,108002],{"class":331},"        viewer.sync()\n",[19,108004,108005],{},"典型 renderer 流程:",[312,108007,108009],{"className":30523,"code":108008,"language":30525,"meta":30,"style":30},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[318,108010,108011,108037,108041,108046],{"__ignoreMap":30},[321,108012,108013,108015,108017,108020,108022,108024,108026,108028,108030,108032,108035],{"class":323,"line":324},[321,108014,107715],{"class":331},[321,108016,377],{"class":327},[321,108018,108019],{"class":331}," mujoco.Renderer(model, ",[321,108021,25126],{"class":5423},[321,108023,377],{"class":327},[321,108025,42487],{"class":380},[321,108027,12642],{"class":331},[321,108029,25122],{"class":5423},[321,108031,377],{"class":327},[321,108033,108034],{"class":380},"640",[321,108036,338],{"class":331},[321,108038,108039],{"class":323,"line":167},[321,108040,104650],{"class":331},[321,108042,108043],{"class":323,"line":200},[321,108044,108045],{"class":331},"renderer.update_scene(data)\n",[321,108047,108048,108050,108052],{"class":323,"line":1401},[321,108049,107725],{"class":331},[321,108051,377],{"class":327},[321,108053,107730],{"class":331},[292,108055,108057],{"id":108056},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108059,108060],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[312,108062,108064],{"className":30523,"code":108063,"language":30525,"meta":30,"style":30},"mujoco.mj_step(model, data)\nviewer.sync()\n",[318,108065,108066,108070],{"__ignoreMap":30},[321,108067,108068],{"class":323,"line":324},[321,108069,104650],{"class":331},[321,108071,108072],{"class":323,"line":167},[321,108073,108074],{"class":331},"viewer.sync()\n",[19,108076,108077,108079,108080,108083],{},[318,108078,101360],{}," 负责算物理，",[318,108081,108082],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[292,108085,108087],{"id":108086},"为什么要-sleep","为什么要 sleep",[19,108089,108090],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[312,108092,108094],{"className":30523,"code":108093,"language":30525,"meta":30,"style":30},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[318,108095,108096],{"__ignoreMap":30},[321,108097,108098,108101,108103,108106,108108,108111,108113],{"class":323,"line":324},[321,108099,108100],{"class":331},"sleep_time ",[321,108102,377],{"class":327},[321,108104,108105],{"class":331}," model.opt.timestep ",[321,108107,864],{"class":327},[321,108109,108110],{"class":331}," (time.time() ",[321,108112,864],{"class":327},[321,108114,108115],{"class":331}," step_start)\n",[19,108117,108118],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[292,108120,108122],{"id":108121},"renderer-输出是什么","renderer 输出是什么",[312,108124,108126],{"className":30523,"code":108125,"language":30525,"meta":30,"style":30},"image = renderer.render()\n",[318,108127,108128],{"__ignoreMap":30},[321,108129,108130,108132,108134],{"class":323,"line":324},[321,108131,107725],{"class":331},[321,108133,377],{"class":327},[321,108135,107730],{"class":331},[19,108137,108138],{},"得到的是 NumPy 数组，形状通常是：",[312,108140,108143],{"className":108141,"code":108142,"language":5394,"meta":30},[5392],"(height, width, 3)\n",[318,108144,108142],{"__ignoreMap":30},[19,108146,108147],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[312,108149,108151],{"className":30523,"code":108150,"language":30525,"meta":30,"style":30},"Image.fromarray(image).save(\"render_output.png\")\n",[318,108152,108153],{"__ignoreMap":30},[321,108154,108155,108158,108161],{"class":323,"line":324},[321,108156,108157],{"class":331},"Image.fromarray(image).save(",[321,108159,108160],{"class":436},"\"render_output.png\"",[321,108162,338],{"class":331},[14,108164,101398],{"id":101397},[19,108166,108167],{},"交互式 Viewer:",[312,108169,108171],{"className":30523,"code":108170,"language":30525,"meta":30,"style":30},"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",[318,108172,108173,108179,108183,108189,108195,108199,108203,108211,108216,108220,108224,108228,108233,108238,108242,108246,108250,108255,108259,108263,108267,108271,108275,108279,108291,108303,108311,108315,108325,108345,108355,108360,108365,108369,108386,108399,108404,108408,108412,108424],{"__ignoreMap":30},[321,108174,108175,108177],{"class":323,"line":324},[321,108176,30537],{"class":327},[321,108178,31974],{"class":331},[321,108180,108181],{"class":323,"line":167},[321,108182,2606],{"emptyLinePlaceholder":251},[321,108184,108185,108187],{"class":323,"line":200},[321,108186,30537],{"class":327},[321,108188,101446],{"class":331},[321,108190,108191,108193],{"class":323,"line":1401},[321,108192,30537],{"class":327},[321,108194,107697],{"class":331},[321,108196,108197],{"class":323,"line":1407},[321,108198,2606],{"emptyLinePlaceholder":251},[321,108200,108201],{"class":323,"line":1421},[321,108202,2606],{"emptyLinePlaceholder":251},[321,108204,108205,108207,108209],{"class":323,"line":1427},[321,108206,101459],{"class":380},[321,108208,13771],{"class":327},[321,108210,101464],{"class":436},[321,108212,108213],{"class":323,"line":1518},[321,108214,108215],{"class":436},"\u003Cmujoco model=\"viewer_demo\">\n",[321,108217,108218],{"class":323,"line":1524},[321,108219,101474],{"class":436},[321,108221,108222],{"class":323,"line":1536},[321,108223,2606],{"emptyLinePlaceholder":251},[321,108225,108226],{"class":323,"line":1818},[321,108227,101483],{"class":436},[321,108229,108230],{"class":323,"line":1823},[321,108231,108232],{"class":436},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[321,108234,108235],{"class":323,"line":1829},[321,108236,108237],{"class":436},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[321,108239,108240],{"class":323,"line":1834},[321,108241,2606],{"emptyLinePlaceholder":251},[321,108243,108244],{"class":323,"line":1848},[321,108245,101497],{"class":436},[321,108247,108248],{"class":323,"line":1853},[321,108249,101502],{"class":436},[321,108251,108252],{"class":323,"line":1859},[321,108253,108254],{"class":436},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[321,108256,108257],{"class":323,"line":1880},[321,108258,101512],{"class":436},[321,108260,108261],{"class":323,"line":1885},[321,108262,101517],{"class":436},[321,108264,108265],{"class":323,"line":1899},[321,108266,101522],{"class":436},[321,108268,108269],{"class":323,"line":1904},[321,108270,95843],{"class":436},[321,108272,108273],{"class":323,"line":1933},[321,108274,2606],{"emptyLinePlaceholder":251},[321,108276,108277],{"class":323,"line":1938},[321,108278,2606],{"emptyLinePlaceholder":251},[321,108280,108281,108283,108285,108287,108289],{"class":323,"line":1955},[321,108282,32092],{"class":327},[321,108284,2179],{"class":2169},[321,108286,101543],{"class":331},[321,108288,95831],{"class":380},[321,108290,3945],{"class":331},[321,108292,108293,108295,108297,108299,108301],{"class":323,"line":1960},[321,108294,101552],{"class":331},[321,108296,377],{"class":327},[321,108298,101557],{"class":331},[321,108300,101459],{"class":380},[321,108302,338],{"class":331},[321,108304,108305,108307,108309],{"class":323,"line":1965},[321,108306,101566],{"class":331},[321,108308,377],{"class":327},[321,108310,101571],{"class":331},[321,108312,108313],{"class":323,"line":1970},[321,108314,2606],{"emptyLinePlaceholder":251},[321,108316,108317,108319,108321,108323],{"class":323,"line":1984},[321,108318,34323],{"class":327},[321,108320,107981],{"class":331},[321,108322,31528],{"class":327},[321,108324,107986],{"class":331},[321,108326,108327,108330,108333,108335,108338,108340,108343],{"class":323,"line":1989},[321,108328,108329],{"class":327},"        while",[321,108331,108332],{"class":331}," viewer.is_running() ",[321,108334,30607],{"class":327},[321,108336,108337],{"class":331}," data.time ",[321,108339,1242],{"class":327},[321,108341,108342],{"class":380}," 5.0",[321,108344,3945],{"class":331},[321,108346,108347,108350,108352],{"class":323,"line":2783},[321,108348,108349],{"class":331},"            step_start ",[321,108351,377],{"class":327},[321,108353,108354],{"class":331}," time.time()\n",[321,108356,108357],{"class":323,"line":2797},[321,108358,108359],{"class":331},"            mujoco.mj_step(model, data)\n",[321,108361,108362],{"class":323,"line":2805},[321,108363,108364],{"class":331},"            viewer.sync()\n",[321,108366,108367],{"class":323,"line":2810},[321,108368,2606],{"emptyLinePlaceholder":251},[321,108370,108371,108374,108376,108378,108380,108382,108384],{"class":323,"line":2816},[321,108372,108373],{"class":331},"            sleep_time ",[321,108375,377],{"class":327},[321,108377,108105],{"class":331},[321,108379,864],{"class":327},[321,108381,108110],{"class":331},[321,108383,864],{"class":327},[321,108385,108115],{"class":331},[321,108387,108388,108390,108393,108395,108397],{"class":323,"line":2822},[321,108389,4848],{"class":327},[321,108391,108392],{"class":331}," sleep_time ",[321,108394,1292],{"class":327},[321,108396,4299],{"class":380},[321,108398,3945],{"class":331},[321,108400,108401],{"class":323,"line":2827},[321,108402,108403],{"class":331},"                time.sleep(sleep_time)\n",[321,108405,108406],{"class":323,"line":8155},[321,108407,2606],{"emptyLinePlaceholder":251},[321,108409,108410],{"class":323,"line":8179},[321,108411,2606],{"emptyLinePlaceholder":251},[321,108413,108414,108416,108418,108420,108422],{"class":323,"line":8184},[321,108415,1737],{"class":327},[321,108417,31365],{"class":380},[321,108419,101704],{"class":327},[321,108421,101707],{"class":436},[321,108423,3945],{"class":331},[321,108425,108426],{"class":323,"line":8190},[321,108427,101714],{"class":331},[19,108429,103715],{},[312,108431,108433],{"className":24030,"code":108432,"language":24032,"meta":30,"style":30},"touch ch5_viewer.py\n",[318,108434,108435],{"__ignoreMap":30},[321,108436,108437,108439],{"class":323,"line":324},[321,108438,101428],{"class":2169},[321,108440,108441],{"class":436}," ch5_viewer.py\n",[19,108443,108444],{},"离屏 Renderer 保存图片:",[312,108446,108448],{"className":30523,"code":108447,"language":30525,"meta":30,"style":30},"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",[318,108449,108450,108462,108466,108472,108482,108486,108490,108498,108503,108507,108511,108515,108519,108524,108528,108532,108536,108540,108544,108548,108552,108556,108560,108564,108568,108580,108592,108600,108625,108629,108645,108649,108653,108668,108677,108681,108695,108700,108705,108709,108721,108733,108737,108741,108753],{"__ignoreMap":30},[321,108451,108452,108454,108457,108459],{"class":323,"line":324},[321,108453,30882],{"class":327},[321,108455,108456],{"class":331}," pathlib ",[321,108458,30537],{"class":327},[321,108460,108461],{"class":331}," Path\n",[321,108463,108464],{"class":323,"line":167},[321,108465,2606],{"emptyLinePlaceholder":251},[321,108467,108468,108470],{"class":323,"line":200},[321,108469,30537],{"class":327},[321,108471,101446],{"class":331},[321,108473,108474,108476,108478,108480],{"class":323,"line":1401},[321,108475,30882],{"class":327},[321,108477,47408],{"class":380},[321,108479,47411],{"class":327},[321,108481,47414],{"class":331},[321,108483,108484],{"class":323,"line":1407},[321,108485,2606],{"emptyLinePlaceholder":251},[321,108487,108488],{"class":323,"line":1421},[321,108489,2606],{"emptyLinePlaceholder":251},[321,108491,108492,108494,108496],{"class":323,"line":1427},[321,108493,101459],{"class":380},[321,108495,13771],{"class":327},[321,108497,101464],{"class":436},[321,108499,108500],{"class":323,"line":1518},[321,108501,108502],{"class":436},"\u003Cmujoco model=\"renderer_demo\">\n",[321,108504,108505],{"class":323,"line":1524},[321,108506,101474],{"class":436},[321,108508,108509],{"class":323,"line":1536},[321,108510,2606],{"emptyLinePlaceholder":251},[321,108512,108513],{"class":323,"line":1818},[321,108514,101483],{"class":436},[321,108516,108517],{"class":323,"line":1823},[321,108518,108232],{"class":436},[321,108520,108521],{"class":323,"line":1829},[321,108522,108523],{"class":436},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[321,108525,108526],{"class":323,"line":1834},[321,108527,108237],{"class":436},[321,108529,108530],{"class":323,"line":1848},[321,108531,2606],{"emptyLinePlaceholder":251},[321,108533,108534],{"class":323,"line":1853},[321,108535,101497],{"class":436},[321,108537,108538],{"class":323,"line":1859},[321,108539,101502],{"class":436},[321,108541,108542],{"class":323,"line":1880},[321,108543,108254],{"class":436},[321,108545,108546],{"class":323,"line":1885},[321,108547,101512],{"class":436},[321,108549,108550],{"class":323,"line":1899},[321,108551,101517],{"class":436},[321,108553,108554],{"class":323,"line":1904},[321,108555,101522],{"class":436},[321,108557,108558],{"class":323,"line":1933},[321,108559,95843],{"class":436},[321,108561,108562],{"class":323,"line":1938},[321,108563,2606],{"emptyLinePlaceholder":251},[321,108565,108566],{"class":323,"line":1955},[321,108567,2606],{"emptyLinePlaceholder":251},[321,108569,108570,108572,108574,108576,108578],{"class":323,"line":1960},[321,108571,32092],{"class":327},[321,108573,2179],{"class":2169},[321,108575,101543],{"class":331},[321,108577,95831],{"class":380},[321,108579,3945],{"class":331},[321,108581,108582,108584,108586,108588,108590],{"class":323,"line":1965},[321,108583,101552],{"class":331},[321,108585,377],{"class":327},[321,108587,101557],{"class":331},[321,108589,101459],{"class":380},[321,108591,338],{"class":331},[321,108593,108594,108596,108598],{"class":323,"line":1970},[321,108595,101566],{"class":331},[321,108597,377],{"class":327},[321,108599,101571],{"class":331},[321,108601,108602,108605,108607,108609,108611,108613,108615,108617,108619,108621,108623],{"class":323,"line":1984},[321,108603,108604],{"class":331},"    renderer ",[321,108606,377],{"class":327},[321,108608,108019],{"class":331},[321,108610,25126],{"class":5423},[321,108612,377],{"class":327},[321,108614,42487],{"class":380},[321,108616,12642],{"class":331},[321,108618,25122],{"class":5423},[321,108620,377],{"class":327},[321,108622,108034],{"class":380},[321,108624,338],{"class":331},[321,108626,108627],{"class":323,"line":1989},[321,108628,2606],{"emptyLinePlaceholder":251},[321,108630,108631,108633,108635,108637,108639,108641,108643],{"class":323,"line":2783},[321,108632,3407],{"class":327},[321,108634,101646],{"class":331},[321,108636,26188],{"class":327},[321,108638,32588],{"class":380},[321,108640,332],{"class":331},[321,108642,643],{"class":380},[321,108644,30931],{"class":331},[321,108646,108647],{"class":323,"line":2797},[321,108648,101661],{"class":331},[321,108650,108651],{"class":323,"line":2805},[321,108652,2606],{"emptyLinePlaceholder":251},[321,108654,108655,108658,108661,108663,108666],{"class":323,"line":2810},[321,108656,108657],{"class":331},"    renderer.update_scene(data, ",[321,108659,108660],{"class":5423},"camera",[321,108662,377],{"class":327},[321,108664,108665],{"class":436},"\"fixed_camera\"",[321,108667,338],{"class":331},[321,108669,108670,108673,108675],{"class":323,"line":2816},[321,108671,108672],{"class":331},"    image ",[321,108674,377],{"class":327},[321,108676,107730],{"class":331},[321,108678,108679],{"class":323,"line":2822},[321,108680,2606],{"emptyLinePlaceholder":251},[321,108682,108683,108686,108688,108691,108693],{"class":323,"line":2827},[321,108684,108685],{"class":331},"    output_path ",[321,108687,377],{"class":327},[321,108689,108690],{"class":331}," Path(",[321,108692,108160],{"class":436},[321,108694,338],{"class":331},[321,108696,108697],{"class":323,"line":8155},[321,108698,108699],{"class":331},"    Image.fromarray(image).save(output_path)\n",[321,108701,108702],{"class":323,"line":8179},[321,108703,108704],{"class":331},"    renderer.close()\n",[321,108706,108707],{"class":323,"line":8184},[321,108708,2606],{"emptyLinePlaceholder":251},[321,108710,108711,108713,108715,108718],{"class":323,"line":8190},[321,108712,31444],{"class":380},[321,108714,332],{"class":331},[321,108716,108717],{"class":436},"\"saved:\"",[321,108719,108720],{"class":331},", output_path.resolve())\n",[321,108722,108723,108725,108727,108730],{"class":323,"line":8217},[321,108724,31444],{"class":380},[321,108726,332],{"class":331},[321,108728,108729],{"class":436},"\"image shape:\"",[321,108731,108732],{"class":331},", image.shape)\n",[321,108734,108735],{"class":323,"line":8222},[321,108736,2606],{"emptyLinePlaceholder":251},[321,108738,108739],{"class":323,"line":8228},[321,108740,2606],{"emptyLinePlaceholder":251},[321,108742,108743,108745,108747,108749,108751],{"class":323,"line":8240},[321,108744,1737],{"class":327},[321,108746,31365],{"class":380},[321,108748,101704],{"class":327},[321,108750,101707],{"class":436},[321,108752,3945],{"class":331},[321,108754,108755],{"class":323,"line":8252},[321,108756,101714],{"class":331},[19,108758,103715],{},[312,108760,108762],{"className":24030,"code":108761,"language":24032,"meta":30,"style":30},"touch ch5_renderer.py\n",[318,108763,108764],{"__ignoreMap":30},[321,108765,108766,108768],{"class":323,"line":324},[321,108767,101428],{"class":2169},[321,108769,108770],{"class":436}," ch5_renderer.py\n",[292,108772,101717],{"id":101717},[19,108774,108775],{},"viewer 上下文：",[312,108777,108779],{"className":30523,"code":108778,"language":30525,"meta":30,"style":30},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[318,108780,108781],{"__ignoreMap":30},[321,108782,108783,108785,108787,108789],{"class":323,"line":324},[321,108784,107978],{"class":327},[321,108786,107981],{"class":331},[321,108788,31528],{"class":327},[321,108790,107986],{"class":331},[19,108792,108793,108795],{},[318,108794,107978],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108797,108798],{},"窗口循环：",[312,108800,108802],{"className":30523,"code":108801,"language":30525,"meta":30,"style":30},"while viewer.is_running() and data.time \u003C 5.0:\n",[318,108803,108804],{"__ignoreMap":30},[321,108805,108806,108809,108811,108813,108815,108817,108819],{"class":323,"line":324},[321,108807,108808],{"class":327},"while",[321,108810,108332],{"class":331},[321,108812,30607],{"class":327},[321,108814,108337],{"class":331},[321,108816,1242],{"class":327},[321,108818,108342],{"class":380},[321,108820,3945],{"class":331},[19,108822,108823],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108825,108826],{},"固定相机：",[312,108828,108830],{"className":53212,"code":108829,"language":53214,"meta":30,"style":30},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[318,108831,108832],{"__ignoreMap":30},[321,108833,108834,108836,108838,108840,108842,108844,108846,108848,108851,108854,108856,108859],{"class":323,"line":324},[321,108835,1242],{"class":331},[321,108837,108660],{"class":51445},[321,108839,15127],{"class":2169},[321,108841,377],{"class":331},[321,108843,108665],{"class":436},[321,108845,101251],{"class":2169},[321,108847,377],{"class":331},[321,108849,108850],{"class":436},"\"1.5 -2.0 1.2\"",[321,108852,108853],{"class":2169}," xyaxes",[321,108855,377],{"class":331},[321,108857,108858],{"class":436},"\"1 0.75 0 0 0 1\"",[321,108860,101289],{"class":331},[19,108862,108863],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[292,108865,108867],{"id":108866},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[312,108869,108871],{"className":30523,"code":108870,"language":30525,"meta":30,"style":30},"import time\n",[318,108872,108873],{"__ignoreMap":30},[321,108874,108875,108877],{"class":323,"line":324},[321,108876,30537],{"class":327},[321,108878,31974],{"class":331},[19,108880,108881],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[312,108883,108885],{"className":30523,"code":108884,"language":30525,"meta":30,"style":30},"import mujoco\nimport mujoco.viewer\n",[318,108886,108887,108893],{"__ignoreMap":30},[321,108888,108889,108891],{"class":323,"line":324},[321,108890,30537],{"class":327},[321,108892,101446],{"class":331},[321,108894,108895,108897],{"class":323,"line":167},[321,108896,30537],{"class":327},[321,108898,107697],{"class":331},[19,108900,108901],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[312,108903,108904],{"className":30523,"code":108778,"language":30525,"meta":30,"style":30},[318,108905,108906],{"__ignoreMap":30},[321,108907,108908,108910,108912,108914],{"class":323,"line":324},[321,108909,107978],{"class":327},[321,108911,107981],{"class":331},[321,108913,31528],{"class":327},[321,108915,107986],{"class":331},[19,108917,108918,108919,108922],{},"打开一个 viewer 窗口。",[318,108920,108921],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[312,108924,108925],{"className":30523,"code":108801,"language":30525,"meta":30,"style":30},[318,108926,108927],{"__ignoreMap":30},[321,108928,108929,108931,108933,108935,108937,108939,108941],{"class":323,"line":324},[321,108930,108808],{"class":327},[321,108932,108332],{"class":331},[321,108934,30607],{"class":327},[321,108936,108337],{"class":331},[321,108938,1242],{"class":327},[321,108940,108342],{"class":380},[321,108942,3945],{"class":331},[19,108944,108945,108946,108949],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[318,108947,108948],{},"viewer.is_running()"," 会变成 false，循环结束。",[312,108951,108953],{"className":30523,"code":108952,"language":30525,"meta":30,"style":30},"step_start = time.time()\n",[318,108954,108955],{"__ignoreMap":30},[321,108956,108957,108960,108962],{"class":323,"line":324},[321,108958,108959],{"class":331},"step_start ",[321,108961,377],{"class":327},[321,108963,108354],{"class":331},[19,108965,108966],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[312,108968,108969],{"className":30523,"code":108063,"language":30525,"meta":30,"style":30},[318,108970,108971,108975],{"__ignoreMap":30},[321,108972,108973],{"class":323,"line":324},[321,108974,104650],{"class":331},[321,108976,108977],{"class":323,"line":167},[321,108978,108074],{"class":331},[19,108980,108981,108983,108984,108986,108987,108989,108990,108993],{},[318,108982,101360],{}," 推进物理仿真。",[318,108985,108082],{}," 把最新的 ",[318,108988,33546],{}," 同步到窗口里显示。没有 ",[318,108991,108992],{},"sync()","，窗口可能看不到最新状态。",[312,108995,108996],{"className":30523,"code":108093,"language":30525,"meta":30,"style":30},[318,108997,108998],{"__ignoreMap":30},[321,108999,109000,109002,109004,109006,109008,109010,109012],{"class":323,"line":324},[321,109001,108100],{"class":331},[321,109003,377],{"class":327},[321,109005,108105],{"class":331},[321,109007,864],{"class":327},[321,109009,108110],{"class":331},[321,109011,864],{"class":327},[321,109013,108115],{"class":331},[19,109015,109016],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[312,109018,109020],{"className":30523,"code":109019,"language":30525,"meta":30,"style":30},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[318,109021,109022,109034],{"__ignoreMap":30},[321,109023,109024,109026,109028,109030,109032],{"class":323,"line":324},[321,109025,1737],{"class":327},[321,109027,108392],{"class":331},[321,109029,1292],{"class":327},[321,109031,4299],{"class":380},[321,109033,3945],{"class":331},[321,109035,109036],{"class":323,"line":167},[321,109037,109038],{"class":331},"    time.sleep(sleep_time)\n",[19,109040,109041],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[292,109043,109045],{"id":109044},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[312,109047,109049],{"className":30523,"code":109048,"language":30525,"meta":30,"style":30},"from pathlib import Path\n",[318,109050,109051],{"__ignoreMap":30},[321,109052,109053,109055,109057,109059],{"class":323,"line":324},[321,109054,30882],{"class":327},[321,109056,108456],{"class":331},[321,109058,30537],{"class":327},[321,109060,108461],{"class":331},[19,109062,109063,109064,109067,109068,109071],{},"导入 ",[318,109065,109066],{},"Path","，用来处理文件路径。相比直接写字符串，",[318,109069,109070],{},"Path(\"render_output.png\")"," 更清晰。",[312,109073,109075],{"className":30523,"code":109074,"language":30525,"meta":30,"style":30},"from PIL import Image\n",[318,109076,109077],{"__ignoreMap":30},[321,109078,109079,109081,109083,109085],{"class":323,"line":324},[321,109080,30882],{"class":327},[321,109082,47408],{"class":380},[321,109084,47411],{"class":327},[321,109086,47414],{"class":331},[19,109088,109089],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[312,109091,109092],{"className":53212,"code":108829,"language":53214,"meta":30,"style":30},[318,109093,109094],{"__ignoreMap":30},[321,109095,109096,109098,109100,109102,109104,109106,109108,109110,109112,109114,109116,109118],{"class":323,"line":324},[321,109097,1242],{"class":331},[321,109099,108660],{"class":51445},[321,109101,15127],{"class":2169},[321,109103,377],{"class":331},[321,109105,108665],{"class":436},[321,109107,101251],{"class":2169},[321,109109,377],{"class":331},[321,109111,108850],{"class":436},[321,109113,108853],{"class":2169},[321,109115,377],{"class":331},[321,109117,108858],{"class":436},[321,109119,101289],{"class":331},[19,109121,109122,109123,109125,109126,109128,109129,109132,109133,109135],{},"定义一个相机。",[318,109124,79955],{}," 是相机名字。",[318,109127,104291],{}," 是相机在世界里的位置。",[318,109130,109131],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[318,109134,104291],{}," 来调视角。",[312,109137,109139],{"className":30523,"code":109138,"language":30525,"meta":30,"style":30},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[318,109140,109141],{"__ignoreMap":30},[321,109142,109143,109145,109147,109149,109151,109153,109155,109157,109159,109161,109163],{"class":323,"line":324},[321,109144,107715],{"class":331},[321,109146,377],{"class":327},[321,109148,108019],{"class":331},[321,109150,25126],{"class":5423},[321,109152,377],{"class":327},[321,109154,42487],{"class":380},[321,109156,12642],{"class":331},[321,109158,25122],{"class":5423},[321,109160,377],{"class":327},[321,109162,108034],{"class":380},[321,109164,338],{"class":331},[19,109166,109167,109168,101163,109170,109172],{},"创建离屏渲染器。",[318,109169,25126],{},[318,109171,25122],{}," 决定输出图片大小。",[312,109174,109175],{"className":30523,"code":101821,"language":30525,"meta":30,"style":30},[318,109176,109177,109193],{"__ignoreMap":30},[321,109178,109179,109181,109183,109185,109187,109189,109191],{"class":323,"line":324},[321,109180,3231],{"class":327},[321,109182,101646],{"class":331},[321,109184,26188],{"class":327},[321,109186,32588],{"class":380},[321,109188,332],{"class":331},[321,109190,643],{"class":380},[321,109192,30931],{"class":331},[321,109194,109195],{"class":323,"line":167},[321,109196,101844],{"class":331},[19,109198,109199],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[312,109201,109203],{"className":30523,"code":109202,"language":30525,"meta":30,"style":30},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[318,109204,109205],{"__ignoreMap":30},[321,109206,109207,109210,109212,109214,109216],{"class":323,"line":324},[321,109208,109209],{"class":331},"renderer.update_scene(data, ",[321,109211,108660],{"class":5423},[321,109213,377],{"class":327},[321,109215,108665],{"class":436},[321,109217,338],{"class":331},[19,109219,109220,109221,109223,109224,109227],{},"告诉 renderer：用当前 ",[318,109222,33546],{}," 的状态更新画面，并使用名为 ",[318,109225,109226],{},"fixed_camera"," 的相机视角。",[312,109229,109230],{"className":30523,"code":108125,"language":30525,"meta":30,"style":30},[318,109231,109232],{"__ignoreMap":30},[321,109233,109234,109236,109238],{"class":323,"line":324},[321,109235,107725],{"class":331},[321,109237,377],{"class":327},[321,109239,107730],{"class":331},[19,109241,109242,109243,109246],{},"真正渲染出图像。",[318,109244,109245],{},"image"," 是一个 NumPy 数组，不是文件。",[312,109248,109250],{"className":30523,"code":109249,"language":30525,"meta":30,"style":30},"Image.fromarray(image).save(output_path)\n",[318,109251,109252],{"__ignoreMap":30},[321,109253,109254],{"class":323,"line":324},[321,109255,109249],{"class":331},[19,109257,109258,109259,28530],{},"把数组转换成图片，并保存到 ",[318,109260,109261],{},"render_output.png",[312,109263,109265],{"className":30523,"code":109264,"language":30525,"meta":30,"style":30},"renderer.close()\n",[318,109266,109267],{"__ignoreMap":30},[321,109268,109269],{"class":323,"line":324},[321,109270,109264],{"class":331},[19,109272,109273],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109275,102461],{"id":102460},[19,109277,109278,109279,109281,109282,28530],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[318,109280,109261],{},"，并输出图像数组形状，例如 ",[318,109283,109284],{},"(480, 640, 3)",[19,109286,109287],{},"如果图片里看不到方块，先检查：",[151,109289,109290,109293,109296],{},[154,109291,109292],{},"方块是否掉到相机视野外。",[154,109294,109295],{},"camera 位置是否合理。",[154,109297,109298,109299,109302],{},"是否在 ",[318,109300,109301],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109304,102493],{"id":102492},[19,109306,109307],{},"运行 viewer:",[312,109309,109311],{"className":24030,"code":109310,"language":24032,"meta":30,"style":30},"python ch5_viewer.py\n",[318,109312,109313],{"__ignoreMap":30},[321,109314,109315,109317],{"class":323,"line":324},[321,109316,30525],{"class":2169},[321,109318,108441],{"class":436},[19,109320,109321],{},"运行 renderer:",[312,109323,109325],{"className":24030,"code":109324,"language":24032,"meta":30,"style":30},"python ch5_renderer.py\n",[318,109326,109327],{"__ignoreMap":30},[321,109328,109329,109331],{"class":323,"line":324},[321,109330,30525],{"class":2169},[321,109332,108770],{"class":436},[19,109334,109335],{},"如果在服务器上运行:",[312,109337,109339],{"className":24030,"code":109338,"language":24032,"meta":30,"style":30},"MUJOCO_GL=egl python ch5_renderer.py\n",[318,109340,109341],{"__ignoreMap":30},[321,109342,109343,109345,109347,109349,109352],{"class":323,"line":324},[321,109344,107959],{"class":331},[321,109346,377],{"class":327},[321,109348,107949],{"class":436},[321,109350,109351],{"class":2169}," python",[321,109353,108770],{"class":436},[19,109355,107927],{},[312,109357,109359],{"className":24030,"code":109358,"language":24032,"meta":30,"style":30},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[318,109360,109361],{"__ignoreMap":30},[321,109362,109363,109365,109367,109369,109371],{"class":323,"line":324},[321,109364,107959],{"class":331},[321,109366,377],{"class":327},[321,109368,107953],{"class":436},[321,109370,109351],{"class":2169},[321,109372,108770],{"class":436},[19,109374,109375],{},"再做几个练习：",[151,109377,109378,109385,109388,109394],{},[154,109379,109380,109381,109384],{},"把 renderer 分辨率改成 ",[318,109382,109383],{},"height=240, width=320","，观察输出 shape。",[154,109386,109387],{},"把方块颜色改成蓝色，重新保存图片。",[154,109389,109390,109391,109393],{},"把相机 ",[318,109392,104291],{}," 改远一点，观察画面中物体是否变小。",[154,109395,109396,109397,102559,109400,109403],{},"把 viewer 示例中的 ",[318,109398,109399],{},"data.time \u003C 5.0",[318,109401,109402],{},"data.time \u003C 20.0","，观察更长时间。",[14,109405,102598],{"id":102597},[292,109407,109409],{"id":109408},"viewer-窗口打不开","viewer 窗口打不开",[19,109411,109412],{},"安装:",[312,109414,109416],{"className":24030,"code":109415,"language":24032,"meta":30,"style":30},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[318,109417,109418],{"__ignoreMap":30},[321,109419,109420,109422,109424,109426,109428,109430,109432,109434,109436,109438,109440],{"class":323,"line":324},[321,109421,24721],{"class":2169},[321,109423,26460],{"class":436},[321,109425,24042],{"class":436},[321,109427,26545],{"class":380},[321,109429,102651],{"class":436},[321,109431,100979],{"class":436},[321,109433,102656],{"class":436},[321,109435,100992],{"class":436},[321,109437,100998],{"class":436},[321,109439,100989],{"class":436},[321,109441,109442],{"class":436}," libXinerama\n",[292,109444,109446],{"id":109445},"glfwerror",[318,109447,109448],{},"GLFWError",[19,109450,109451],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[292,109453,109455],{"id":109454},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109457,109458,109459,82684,109461,109463],{},"尝试 ",[318,109460,101182],{},[318,109462,101185],{},"。可能存在版本差异。",[292,109465,109466],{"id":109466},"保存图片是黑的",[19,109468,102720],{},[151,109470,109471,109474,109477,109487],{},[154,109472,109473],{},"XML 里是否有 light。",[154,109475,109476],{},"相机是否对着模型。",[154,109478,109479,109480,109483,109484,28530],{},"是否先 ",[318,109481,109482],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[318,109485,109486],{},"renderer.render()",[154,109488,109489],{},"物体是否已经掉出视野。",[292,109491,109492],{"id":109492},"远程服务器没有显示器",[19,109494,109495],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[312,109497,109498],{"className":24030,"code":109338,"language":24032,"meta":30,"style":30},[318,109499,109500],{"__ignoreMap":30},[321,109501,109502,109504,109506,109508,109510],{"class":323,"line":324},[321,109503,107959],{"class":331},[321,109505,377],{"class":327},[321,109507,107949],{"class":436},[321,109509,109351],{"class":2169},[321,109511,108770],{"class":436},[19,109513,109514],{},"如果 EGL 不可用，再尝试：",[312,109516,109517],{"className":24030,"code":109358,"language":24032,"meta":30,"style":30},[318,109518,109519],{"__ignoreMap":30},[321,109520,109521,109523,109525,109527,109529],{"class":323,"line":324},[321,109522,107959],{"class":331},[321,109524,377],{"class":327},[321,109526,107953],{"class":436},[321,109528,109351],{"class":2169},[321,109530,108770],{"class":436},[14,109532,102752],{"id":102751},[19,109534,109535],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[151,109537,109538,109541,109544],{},[154,109539,109540],{},"先用 viewer 看模型和控制是否正常。",[154,109542,109543],{},"再用 renderer 保存图片或构造视觉观测。",[154,109545,109546],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5333,109548,109549],{},"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":30,"searchDepth":167,"depth":167,"links":109551},[109552,109553,109554,109559,109564,109565,109566,109573],{"id":100791,"depth":167,"text":100792},{"id":100914,"depth":167,"text":100915},{"id":101189,"depth":167,"text":101190,"children":109555},[109556,109557,109558],{"id":108056,"depth":200,"text":108057},{"id":108086,"depth":200,"text":108087},{"id":108121,"depth":200,"text":108122},{"id":101397,"depth":167,"text":101398,"children":109560},[109561,109562,109563],{"id":101717,"depth":200,"text":101717},{"id":108866,"depth":200,"text":108867},{"id":109044,"depth":200,"text":109045},{"id":102460,"depth":167,"text":102461},{"id":102492,"depth":167,"text":102493},{"id":102597,"depth":167,"text":102598,"children":109567},[109568,109569,109570,109571,109572],{"id":109408,"depth":200,"text":109409},{"id":109445,"depth":200,"text":109448},{"id":109454,"depth":200,"text":109455},{"id":109466,"depth":200,"text":109466},{"id":109492,"depth":200,"text":109492},{"id":102751,"depth":167,"text":102752},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107664,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109580,"title":109581,"body":109582,"description":30,"extension":249,"meta":111493,"navigation":251,"path":111494,"seo":111495,"stem":111496,"__hash__":111497},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109583,"toc":111469},[109584,109587,109589,109592,109594,109613,109616,109622,109625,109627,109629,109653,109655,109669,109671,109712,109714,109725,109727,109730,109736,109739,109773,109776,109808,109811,109843,109847,109850,109890,109893,109899,109902,109908,109912,109915,109921,109924,109928,109931,109971,109973,109986,109989,109991,110573,110575,110587,110590,110601,110603,110606,110625,110637,110640,110661,110664,110667,110710,110713,110716,110736,110743,110745,110763,110778,110781,110787,110790,110796,110813,110820,110851,110862,110896,110907,110924,110933,110941,110946,110960,110963,110984,110990,111004,111009,111039,111049,111074,111082,111105,111108,111124,111127,111135,111141,111163,111176,111197,111206,111245,111256,111258,111261,111267,111270,111273,111279,111282,111302,111305,111307,111346,111348,111351,111359,111362,111365,111392,111395,111405,111411,111414,111420,111422,111428,111432,111435,111437,111440,111464,111467],[10,109585,109581],{"id":109586},"_6控制任务cartpole",[14,109588,100792],{"id":100791},[19,109590,109591],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109593,104476],{},[151,109595,109596,109599,109601,109604,109607,109610],{},[154,109597,109598],{},"slide joint",[154,109600,106329],{},[154,109602,109603],{},"cart force actuator",[154,109605,109606],{},"状态观测",[154,109608,109609],{},"简单控制循环",[154,109611,109612],{},"reward 设计雏形",[19,109614,109615],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[312,109617,109620],{"className":109618,"code":109619,"language":5394,"meta":30},[5392],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[318,109621,109619],{"__ignoreMap":30},[19,109623,109624],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109626,100915],{"id":100914},[19,109628,100918],{},[312,109630,109631],{"className":24030,"code":104533,"language":24032,"meta":30,"style":30},[318,109632,109633],{"__ignoreMap":30},[321,109634,109635,109637,109639,109641,109643,109645,109647,109649,109651],{"class":323,"line":324},[321,109636,24721],{"class":2169},[321,109638,26460],{"class":436},[321,109640,24042],{"class":436},[321,109642,26545],{"class":380},[321,109644,104548],{"class":436},[321,109646,100943],{"class":436},[321,109648,102646],{"class":436},[321,109650,100959],{"class":436},[321,109652,104557],{"class":436},[19,109654,102964],{},[312,109656,109657],{"className":24030,"code":101064,"language":24032,"meta":30,"style":30},[318,109658,109659],{"__ignoreMap":30},[321,109660,109661,109663,109665,109667],{"class":323,"line":324},[321,109662,24039],{"class":2169},[321,109664,24042],{"class":436},[321,109666,101075],{"class":436},[321,109668,101078],{"class":436},[19,109670,102981],{},[312,109672,109674],{"className":24030,"code":109673,"language":24032,"meta":30,"style":30},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[318,109675,109676,109693,109702],{"__ignoreMap":30},[321,109677,109678,109680,109682,109684,109687,109689,109691],{"class":323,"line":324},[321,109679,30475],{"class":2169},[321,109681,29321],{"class":436},[321,109683,25260],{"class":380},[321,109685,109686],{"class":436}," mujoco-cartpole",[321,109688,101120],{"class":436},[321,109690,101123],{"class":380},[321,109692,101126],{"class":380},[321,109694,109695,109697,109699],{"class":323,"line":167},[321,109696,30475],{"class":2169},[321,109698,101133],{"class":436},[321,109700,109701],{"class":436}," mujoco-cartpole\n",[321,109703,109704,109706,109708,109710],{"class":323,"line":200},[321,109705,24039],{"class":2169},[321,109707,24042],{"class":436},[321,109709,101075],{"class":436},[321,109711,101078],{"class":436},[19,109713,101149],{},[151,109715,109716,109719,109722],{},[154,109717,109718],{},"本章不依赖 Gymnasium。",[154,109720,109721],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[154,109723,109724],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109726,101190],{"id":101189},[19,109728,109729],{},"Cartpole 的模型结构:",[312,109731,109734],{"className":109732,"code":109733,"language":5394,"meta":30},[5392],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[318,109735,109733],{"__ignoreMap":30},[19,109737,109738],{},"小车通过 slide joint 左右移动:",[312,109740,109742],{"className":53212,"code":109741,"language":53214,"meta":30,"style":30},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[318,109743,109744],{"__ignoreMap":30},[321,109745,109746,109748,109750,109752,109754,109757,109759,109761,109764,109766,109768,109771],{"class":323,"line":324},[321,109747,1242],{"class":331},[321,109749,103101],{"class":51445},[321,109751,15127],{"class":2169},[321,109753,377],{"class":331},[321,109755,109756],{"class":436},"\"cart_x\"",[321,109758,53969],{"class":2169},[321,109760,377],{"class":331},[321,109762,109763],{"class":436},"\"slide\"",[321,109765,106173],{"class":2169},[321,109767,377],{"class":331},[321,109769,109770],{"class":436},"\"1 0 0\"",[321,109772,101289],{"class":331},[19,109774,109775],{},"杆子通过 hinge joint 旋转:",[312,109777,109779],{"className":53212,"code":109778,"language":53214,"meta":30,"style":30},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[318,109780,109781],{"__ignoreMap":30},[321,109782,109783,109785,109787,109789,109791,109794,109796,109798,109800,109802,109804,109806],{"class":323,"line":324},[321,109784,1242],{"class":331},[321,109786,103101],{"class":51445},[321,109788,15127],{"class":2169},[321,109790,377],{"class":331},[321,109792,109793],{"class":436},"\"pole_hinge\"",[321,109795,53969],{"class":2169},[321,109797,377],{"class":331},[321,109799,106164],{"class":436},[321,109801,106173],{"class":2169},[321,109803,377],{"class":331},[321,109805,106178],{"class":436},[321,109807,101289],{"class":331},[19,109809,109810],{},"控制力作用在小车 slide joint 上:",[312,109812,109814],{"className":53212,"code":109813,"language":53214,"meta":30,"style":30},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[318,109815,109816],{"__ignoreMap":30},[321,109817,109818,109820,109822,109824,109826,109829,109831,109833,109835,109837,109839,109841],{"class":323,"line":324},[321,109819,1242],{"class":331},[321,109821,106219],{"class":51445},[321,109823,15127],{"class":2169},[321,109825,377],{"class":331},[321,109827,109828],{"class":436},"\"cart_motor\"",[321,109830,106229],{"class":2169},[321,109832,377],{"class":331},[321,109834,109756],{"class":436},[321,109836,106236],{"class":2169},[321,109838,377],{"class":331},[321,109840,54461],{"class":436},[321,109842,101289],{"class":331},[292,109844,109846],{"id":109845},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109848,109849],{},"这个简化模型有两个关节：",[469,109851,109852,109863],{},[472,109853,109854],{},[475,109855,109856,109858,109860],{},[478,109857,102904],{"align":23944},[478,109859,23945],{"align":23944},[478,109861,109862],{"align":23944},"对应状态",[516,109864,109865,109878],{},[475,109866,109867,109872,109875],{},[521,109868,109869],{"align":23944},[318,109870,109871],{},"cart_x",[521,109873,109874],{"align":23944},"slide",[521,109876,109877],{"align":23944},"小车 x 位置",[475,109879,109880,109885,109887],{},[521,109881,109882],{"align":23944},[318,109883,109884],{},"pole_hinge",[521,109886,105985],{"align":23944},[521,109888,109889],{"align":23944},"杆子角度",[19,109891,109892],{},"所以：",[312,109894,109897],{"className":109895,"code":109896,"language":5394,"meta":30},[5392],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[318,109898,109896],{"__ignoreMap":30},[19,109900,109901],{},"把它们拼起来就是观测：",[312,109903,109906],{"className":109904,"code":109905,"language":5394,"meta":30},[5392],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[318,109907,109905],{"__ignoreMap":30},[292,109909,109911],{"id":109910},"action-是什么","action 是什么",[19,109913,109914],{},"本章只有一个 actuator：",[312,109916,109919],{"className":109917,"code":109918,"language":5394,"meta":30},[5392],"data.ctrl[0] = action\n",[318,109920,109918],{"__ignoreMap":30},[19,109922,109923],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[292,109925,109927],{"id":109926},"reward-是什么","reward 是什么",[19,109929,109930],{},"奖励函数：",[312,109932,109934],{"className":30523,"code":109933,"language":30525,"meta":30,"style":30},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[318,109935,109936],{"__ignoreMap":30},[321,109937,109938,109940,109943,109945,109947,109949,109952,109954,109957,109959,109961,109963,109966,109968],{"class":323,"line":324},[321,109939,17253],{"class":327},[321,109941,109942],{"class":380}," float",[321,109944,332],{"class":331},[321,109946,102548],{"class":380},[321,109948,52416],{"class":327},[321,109950,109951],{"class":380}," 0.1",[321,109953,6725],{"class":327},[321,109955,109956],{"class":331}," cart_x ",[321,109958,787],{"class":327},[321,109960,109956],{"class":331},[321,109962,864],{"class":327},[321,109964,109965],{"class":331}," pole_angle ",[321,109967,787],{"class":327},[321,109969,109970],{"class":331}," pole_angle)\n",[19,109972,106371],{},[151,109974,109975,109980,109983],{},[154,109976,109977,109978,28530],{},"基础奖励是 ",[318,109979,102548],{},[154,109981,109982],{},"小车离中心越远，扣分越多。",[154,109984,109985],{},"杆子角度越大，扣分越多。",[19,109987,109988],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,109990,101398],{"id":101397},[312,109992,109994],{"className":30523,"code":109993,"language":30525,"meta":30,"style":30},"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",[318,109995,109996,110002,110012,110016,110020,110028,110033,110037,110041,110045,110050,110054,110059,110064,110069,110073,110078,110083,110088,110092,110096,110100,110104,110108,110113,110117,110121,110125,110129,110133,110143,110150,110154,110158,110172,110186,110199,110229,110233,110237,110249,110261,110269,110273,110286,110290,110294,110303,110307,110323,110333,110346,110359,110363,110386,110404,110408,110420,110424,110428,110438,110448,110452,110468,110509,110513,110533,110549,110553,110557,110569],{"__ignoreMap":30},[321,109997,109998,110000],{"class":323,"line":324},[321,109999,30537],{"class":327},[321,110001,101446],{"class":331},[321,110003,110004,110006,110008,110010],{"class":323,"line":167},[321,110005,30537],{"class":327},[321,110007,31525],{"class":331},[321,110009,31528],{"class":327},[321,110011,31531],{"class":331},[321,110013,110014],{"class":323,"line":200},[321,110015,2606],{"emptyLinePlaceholder":251},[321,110017,110018],{"class":323,"line":1401},[321,110019,2606],{"emptyLinePlaceholder":251},[321,110021,110022,110024,110026],{"class":323,"line":1407},[321,110023,101459],{"class":380},[321,110025,13771],{"class":327},[321,110027,101464],{"class":436},[321,110029,110030],{"class":323,"line":1421},[321,110031,110032],{"class":436},"\u003Cmujoco model=\"cartpole\">\n",[321,110034,110035],{"class":323,"line":1427},[321,110036,101474],{"class":436},[321,110038,110039],{"class":323,"line":1518},[321,110040,2606],{"emptyLinePlaceholder":251},[321,110042,110043],{"class":323,"line":1524},[321,110044,101483],{"class":436},[321,110046,110047],{"class":323,"line":1536},[321,110048,110049],{"class":436},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[321,110051,110052],{"class":323,"line":1818},[321,110053,2606],{"emptyLinePlaceholder":251},[321,110055,110056],{"class":323,"line":1823},[321,110057,110058],{"class":436},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[321,110060,110061],{"class":323,"line":1829},[321,110062,110063],{"class":436},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[321,110065,110066],{"class":323,"line":1834},[321,110067,110068],{"class":436},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[321,110070,110071],{"class":323,"line":1848},[321,110072,2606],{"emptyLinePlaceholder":251},[321,110074,110075],{"class":323,"line":1853},[321,110076,110077],{"class":436},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[321,110079,110080],{"class":323,"line":1859},[321,110081,110082],{"class":436},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[321,110084,110085],{"class":323,"line":1880},[321,110086,110087],{"class":436},"        \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",[321,110089,110090],{"class":323,"line":1885},[321,110091,106583],{"class":436},[321,110093,110094],{"class":323,"line":1899},[321,110095,101512],{"class":436},[321,110097,110098],{"class":323,"line":1904},[321,110099,101517],{"class":436},[321,110101,110102],{"class":323,"line":1933},[321,110103,2606],{"emptyLinePlaceholder":251},[321,110105,110106],{"class":323,"line":1938},[321,110107,106600],{"class":436},[321,110109,110110],{"class":323,"line":1955},[321,110111,110112],{"class":436},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[321,110114,110115],{"class":323,"line":1960},[321,110116,106610],{"class":436},[321,110118,110119],{"class":323,"line":1965},[321,110120,101522],{"class":436},[321,110122,110123],{"class":323,"line":1970},[321,110124,95843],{"class":436},[321,110126,110127],{"class":323,"line":1984},[321,110128,2606],{"emptyLinePlaceholder":251},[321,110130,110131],{"class":323,"line":1989},[321,110132,2606],{"emptyLinePlaceholder":251},[321,110134,110135,110137,110140],{"class":323,"line":2783},[321,110136,32092],{"class":327},[321,110138,110139],{"class":2169}," get_observation",[321,110141,110142],{"class":331},"(data: mujoco.MjData) -> np.ndarray:\n",[321,110144,110145,110147],{"class":323,"line":2797},[321,110146,4296],{"class":327},[321,110148,110149],{"class":331}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[321,110151,110152],{"class":323,"line":2805},[321,110153,2606],{"emptyLinePlaceholder":251},[321,110155,110156],{"class":323,"line":2810},[321,110157,2606],{"emptyLinePlaceholder":251},[321,110159,110160,110162,110165,110168,110170],{"class":323,"line":2816},[321,110161,32092],{"class":327},[321,110163,110164],{"class":2169}," compute_reward",[321,110166,110167],{"class":331},"(obs: np.ndarray) -> ",[321,110169,371],{"class":380},[321,110171,3945],{"class":331},[321,110173,110174,110177,110179,110182,110184],{"class":323,"line":2822},[321,110175,110176],{"class":331},"    cart_x ",[321,110178,377],{"class":327},[321,110180,110181],{"class":331}," obs[",[321,110183,523],{"class":380},[321,110185,33391],{"class":331},[321,110187,110188,110191,110193,110195,110197],{"class":323,"line":2827},[321,110189,110190],{"class":331},"    pole_angle ",[321,110192,377],{"class":327},[321,110194,110181],{"class":331},[321,110196,549],{"class":380},[321,110198,33391],{"class":331},[321,110200,110201,110203,110205,110207,110209,110211,110213,110215,110217,110219,110221,110223,110225,110227],{"class":323,"line":8155},[321,110202,4296],{"class":327},[321,110204,109942],{"class":380},[321,110206,332],{"class":331},[321,110208,102548],{"class":380},[321,110210,52416],{"class":327},[321,110212,109951],{"class":380},[321,110214,6725],{"class":327},[321,110216,109956],{"class":331},[321,110218,787],{"class":327},[321,110220,109956],{"class":331},[321,110222,864],{"class":327},[321,110224,109965],{"class":331},[321,110226,787],{"class":327},[321,110228,109970],{"class":331},[321,110230,110231],{"class":323,"line":8179},[321,110232,2606],{"emptyLinePlaceholder":251},[321,110234,110235],{"class":323,"line":8184},[321,110236,2606],{"emptyLinePlaceholder":251},[321,110238,110239,110241,110243,110245,110247],{"class":323,"line":8190},[321,110240,32092],{"class":327},[321,110242,2179],{"class":2169},[321,110244,101543],{"class":331},[321,110246,95831],{"class":380},[321,110248,3945],{"class":331},[321,110250,110251,110253,110255,110257,110259],{"class":323,"line":8217},[321,110252,101552],{"class":331},[321,110254,377],{"class":327},[321,110256,101557],{"class":331},[321,110258,101459],{"class":380},[321,110260,338],{"class":331},[321,110262,110263,110265,110267],{"class":323,"line":8222},[321,110264,101566],{"class":331},[321,110266,377],{"class":327},[321,110268,101571],{"class":331},[321,110270,110271],{"class":323,"line":8228},[321,110272,2606],{"emptyLinePlaceholder":251},[321,110274,110275,110277,110279,110281,110283],{"class":323,"line":8240},[321,110276,105214],{"class":331},[321,110278,549],{"class":380},[321,110280,4649],{"class":331},[321,110282,377],{"class":327},[321,110284,110285],{"class":380}," 0.1\n",[321,110287,110288],{"class":323,"line":8252},[321,110289,105227],{"class":331},[321,110291,110292],{"class":323,"line":8264},[321,110293,2606],{"emptyLinePlaceholder":251},[321,110295,110296,110299,110301],{"class":323,"line":9923},[321,110297,110298],{"class":331},"    total_reward ",[321,110300,377],{"class":327},[321,110302,104906],{"class":380},[321,110304,110305],{"class":323,"line":9948},[321,110306,2606],{"emptyLinePlaceholder":251},[321,110308,110309,110311,110313,110315,110317,110319,110321],{"class":323,"line":9971},[321,110310,3407],{"class":327},[321,110312,31761],{"class":331},[321,110314,26188],{"class":327},[321,110316,32588],{"class":380},[321,110318,332],{"class":331},[321,110320,6617],{"class":380},[321,110322,30931],{"class":331},[321,110324,110325,110328,110330],{"class":323,"line":9995},[321,110326,110327],{"class":331},"        obs ",[321,110329,377],{"class":327},[321,110331,110332],{"class":331}," get_observation(data)\n",[321,110334,110335,110338,110340,110342,110344],{"class":323,"line":10000},[321,110336,110337],{"class":331},"        pole_angle ",[321,110339,377],{"class":327},[321,110341,110181],{"class":331},[321,110343,549],{"class":380},[321,110345,33391],{"class":331},[321,110347,110348,110351,110353,110355,110357],{"class":323,"line":10005},[321,110349,110350],{"class":331},"        pole_angular_velocity ",[321,110352,377],{"class":327},[321,110354,110181],{"class":331},[321,110356,403],{"class":380},[321,110358,33391],{"class":331},[321,110360,110361],{"class":323,"line":10010},[321,110362,2606],{"emptyLinePlaceholder":251},[321,110364,110365,110368,110370,110373,110375,110377,110379,110381,110383],{"class":323,"line":10019},[321,110366,110367],{"class":331},"        action ",[321,110369,377],{"class":327},[321,110371,110372],{"class":380}," 2.0",[321,110374,6725],{"class":327},[321,110376,109965],{"class":331},[321,110378,813],{"class":327},[321,110380,62012],{"class":380},[321,110382,6725],{"class":327},[321,110384,110385],{"class":331}," pole_angular_velocity\n",[321,110387,110388,110390,110392,110394,110396,110398,110400,110402],{"class":323,"line":10024},[321,110389,110367],{"class":331},[321,110391,377],{"class":327},[321,110393,107592],{"class":331},[321,110395,864],{"class":327},[321,110397,102548],{"class":380},[321,110399,12642],{"class":331},[321,110401,102548],{"class":380},[321,110403,338],{"class":331},[321,110405,110406],{"class":323,"line":10030},[321,110407,2606],{"emptyLinePlaceholder":251},[321,110409,110410,110412,110414,110416,110418],{"class":323,"line":10051},[321,110411,106762],{"class":331},[321,110413,523],{"class":380},[321,110415,4649],{"class":331},[321,110417,377],{"class":327},[321,110419,107615],{"class":331},[321,110421,110422],{"class":323,"line":10057},[321,110423,101661],{"class":331},[321,110425,110426],{"class":323,"line":10071},[321,110427,2606],{"emptyLinePlaceholder":251},[321,110429,110430,110433,110435],{"class":323,"line":10077},[321,110431,110432],{"class":331},"        reward ",[321,110434,377],{"class":327},[321,110436,110437],{"class":331}," compute_reward(get_observation(data))\n",[321,110439,110440,110443,110445],{"class":323,"line":10104},[321,110441,110442],{"class":331},"        total_reward ",[321,110444,9684],{"class":327},[321,110446,110447],{"class":331}," reward\n",[321,110449,110450],{"class":323,"line":10113},[321,110451,2606],{"emptyLinePlaceholder":251},[321,110453,110454,110456,110458,110460,110462,110464,110466],{"class":323,"line":10119},[321,110455,2703],{"class":327},[321,110457,31761],{"class":331},[321,110459,660],{"class":327},[321,110461,5961],{"class":380},[321,110463,101704],{"class":327},[321,110465,4299],{"class":380},[321,110467,3945],{"class":331},[321,110469,110470,110472,110474,110477,110480,110483,110486,110488,110491,110494,110496,110498,110500,110502,110505,110507],{"class":323,"line":10127},[321,110471,34795],{"class":380},[321,110473,332],{"class":331},[321,110475,110476],{"class":436},"\"step:\"",[321,110478,110479],{"class":331},", step, ",[321,110481,110482],{"class":436},"\"obs:\"",[321,110484,110485],{"class":331},", np.round(obs, ",[321,110487,403],{"class":380},[321,110489,110490],{"class":331},"), ",[321,110492,110493],{"class":436},"\"action:\"",[321,110495,12642],{"class":331},[321,110497,32163],{"class":380},[321,110499,332],{"class":331},[321,110501,371],{"class":380},[321,110503,110504],{"class":331},"(action), ",[321,110506,403],{"class":380},[321,110508,30642],{"class":331},[321,110510,110511],{"class":323,"line":10132},[321,110512,2606],{"emptyLinePlaceholder":251},[321,110514,110515,110517,110519,110522,110524,110526,110529,110531],{"class":323,"line":16811},[321,110516,31444],{"class":380},[321,110518,332],{"class":331},[321,110520,110521],{"class":436},"\"total_reward:\"",[321,110523,12642],{"class":331},[321,110525,32163],{"class":380},[321,110527,110528],{"class":331},"(total_reward, ",[321,110530,403],{"class":380},[321,110532,30642],{"class":331},[321,110534,110535,110537,110539,110542,110545,110547],{"class":323,"line":16817},[321,110536,31444],{"class":380},[321,110538,332],{"class":331},[321,110540,110541],{"class":436},"\"final obs:\"",[321,110543,110544],{"class":331},", np.round(get_observation(data), ",[321,110546,403],{"class":380},[321,110548,30642],{"class":331},[321,110550,110551],{"class":323,"line":16840},[321,110552,2606],{"emptyLinePlaceholder":251},[321,110554,110555],{"class":323,"line":16846},[321,110556,2606],{"emptyLinePlaceholder":251},[321,110558,110559,110561,110563,110565,110567],{"class":323,"line":16869},[321,110560,1737],{"class":327},[321,110562,31365],{"class":380},[321,110564,101704],{"class":327},[321,110566,101707],{"class":436},[321,110568,3945],{"class":331},[321,110570,110571],{"class":323,"line":16883},[321,110572,101714],{"class":331},[19,110574,103715],{},[312,110576,110578],{"className":24030,"code":110577,"language":24032,"meta":30,"style":30},"touch ch6_cartpole.py\n",[318,110579,110580],{"__ignoreMap":30},[321,110581,110582,110584],{"class":323,"line":324},[321,110583,101428],{"class":2169},[321,110585,110586],{"class":436}," ch6_cartpole.py\n",[19,110588,110589],{},"运行：",[312,110591,110593],{"className":24030,"code":110592,"language":24032,"meta":30,"style":30},"python ch6_cartpole.py\n",[318,110594,110595],{"__ignoreMap":30},[321,110596,110597,110599],{"class":323,"line":324},[321,110598,30525],{"class":2169},[321,110600,110586],{"class":436},[292,110602,101717],{"id":101717},[19,110604,110605],{},"构造观测：",[312,110607,110609],{"className":30523,"code":110608,"language":30525,"meta":30,"style":30},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[318,110610,110611,110619],{"__ignoreMap":30},[321,110612,110613,110615,110617],{"class":323,"line":324},[321,110614,32092],{"class":327},[321,110616,110139],{"class":2169},[321,110618,110142],{"class":331},[321,110620,110621,110623],{"class":323,"line":167},[321,110622,4296],{"class":327},[321,110624,110149],{"class":331},[19,110626,110627,110630,110631,110633,110634,110636],{},[318,110628,110629],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[318,110632,104175],{}," 2 维，",[318,110635,104505],{}," 2 维，所以 obs 是 4 维。",[19,110638,110639],{},"设置初始角度：",[312,110641,110643],{"className":30523,"code":110642,"language":30525,"meta":30,"style":30},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[318,110644,110645,110657],{"__ignoreMap":30},[321,110646,110647,110649,110651,110653,110655],{"class":323,"line":324},[321,110648,104844],{"class":331},[321,110650,549],{"class":380},[321,110652,4649],{"class":331},[321,110654,377],{"class":327},[321,110656,110285],{"class":380},[321,110658,110659],{"class":323,"line":167},[321,110660,104688],{"class":331},[19,110662,110663],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110665,110666],{},"简单反馈控制：",[312,110668,110670],{"className":30523,"code":110669,"language":30525,"meta":30,"style":30},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[318,110671,110672,110692],{"__ignoreMap":30},[321,110673,110674,110676,110678,110680,110682,110684,110686,110688,110690],{"class":323,"line":324},[321,110675,107587],{"class":331},[321,110677,377],{"class":327},[321,110679,110372],{"class":380},[321,110681,6725],{"class":327},[321,110683,109965],{"class":331},[321,110685,813],{"class":327},[321,110687,62012],{"class":380},[321,110689,6725],{"class":327},[321,110691,110385],{"class":331},[321,110693,110694,110696,110698,110700,110702,110704,110706,110708],{"class":323,"line":167},[321,110695,107587],{"class":331},[321,110697,377],{"class":327},[321,110699,107592],{"class":331},[321,110701,864],{"class":327},[321,110703,102548],{"class":380},[321,110705,12642],{"class":331},[321,110707,102548],{"class":380},[321,110709,338],{"class":331},[19,110711,110712],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110714,110715],{},"限制动作：",[312,110717,110719],{"className":30523,"code":110718,"language":30525,"meta":30,"style":30},"np.clip(action, -1.0, 1.0)\n",[318,110720,110721],{"__ignoreMap":30},[321,110722,110723,110726,110728,110730,110732,110734],{"class":323,"line":324},[321,110724,110725],{"class":331},"np.clip(action, ",[321,110727,864],{"class":327},[321,110729,102548],{"class":380},[321,110731,12642],{"class":331},[321,110733,102548],{"class":380},[321,110735,338],{"class":331},[19,110737,110738,110739,110742],{},"因为 XML 里 ",[318,110740,110741],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[292,110744,101853],{"id":101853},[312,110746,110747],{"className":30523,"code":110608,"language":30525,"meta":30,"style":30},[318,110748,110749,110757],{"__ignoreMap":30},[321,110750,110751,110753,110755],{"class":323,"line":324},[321,110752,32092],{"class":327},[321,110754,110139],{"class":2169},[321,110756,110142],{"class":331},[321,110758,110759,110761],{"class":323,"line":167},[321,110760,4296],{"class":327},[321,110762,110149],{"class":331},[19,110764,110765,110766,110769,110770,110773,110774,110777],{},"这段定义了一个函数，用来获取当前观测。",[318,110767,110768],{},"data.qpos.copy()"," 是位置数组副本，",[318,110771,110772],{},"data.qvel.copy()"," 是速度数组副本。",[318,110775,110776],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110779,110780],{},"在本章模型里：",[312,110782,110785],{"className":110783,"code":110784,"language":5394,"meta":30},[5392],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[318,110786,110784],{"__ignoreMap":30},[19,110788,110789],{},"所以返回的 obs 是：",[312,110791,110794],{"className":110792,"code":110793,"language":5394,"meta":30},[5392],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[318,110795,110793],{"__ignoreMap":30},[312,110797,110799],{"className":30523,"code":110798,"language":30525,"meta":30,"style":30},"def compute_reward(obs: np.ndarray) -> float:\n",[318,110800,110801],{"__ignoreMap":30},[321,110802,110803,110805,110807,110809,110811],{"class":323,"line":324},[321,110804,32092],{"class":327},[321,110806,110164],{"class":2169},[321,110808,110167],{"class":331},[321,110810,371],{"class":380},[321,110812,3945],{"class":331},[19,110814,110815,110816,110819],{},"这行定义奖励函数。输入是观测 ",[318,110817,110818],{},"obs","，输出是一个浮点数奖励。",[312,110821,110823],{"className":30523,"code":110822,"language":30525,"meta":30,"style":30},"cart_x = obs[0]\npole_angle = obs[1]\n",[318,110824,110825,110838],{"__ignoreMap":30},[321,110826,110827,110830,110832,110834,110836],{"class":323,"line":324},[321,110828,110829],{"class":331},"cart_x ",[321,110831,377],{"class":327},[321,110833,110181],{"class":331},[321,110835,523],{"class":380},[321,110837,33391],{"class":331},[321,110839,110840,110843,110845,110847,110849],{"class":323,"line":167},[321,110841,110842],{"class":331},"pole_angle ",[321,110844,377],{"class":327},[321,110846,110181],{"class":331},[321,110848,549],{"class":380},[321,110850,33391],{"class":331},[19,110852,110853,110854,110857,110858,110861],{},"数组索引从 0 开始。",[318,110855,110856],{},"obs[0]"," 是第一个元素，也就是小车位置。",[318,110859,110860],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[312,110863,110864],{"className":30523,"code":109933,"language":30525,"meta":30,"style":30},[318,110865,110866],{"__ignoreMap":30},[321,110867,110868,110870,110872,110874,110876,110878,110880,110882,110884,110886,110888,110890,110892,110894],{"class":323,"line":324},[321,110869,17253],{"class":327},[321,110871,109942],{"class":380},[321,110873,332],{"class":331},[321,110875,102548],{"class":380},[321,110877,52416],{"class":327},[321,110879,109951],{"class":380},[321,110881,6725],{"class":327},[321,110883,109956],{"class":331},[321,110885,787],{"class":327},[321,110887,109956],{"class":331},[321,110889,864],{"class":327},[321,110891,109965],{"class":331},[321,110893,787],{"class":327},[321,110895,109970],{"class":331},[19,110897,110898,110899,110902,110903,110906],{},"这行计算奖励。",[318,110900,110901],{},"cart_x * cart_x"," 是小车位置的平方，",[318,110904,110905],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[312,110908,110910],{"className":30523,"code":110909,"language":30525,"meta":30,"style":30},"data.qpos[1] = 0.1\n",[318,110911,110912],{"__ignoreMap":30},[321,110913,110914,110916,110918,110920,110922],{"class":323,"line":324},[321,110915,104844],{"class":331},[321,110917,549],{"class":380},[321,110919,4649],{"class":331},[321,110921,377],{"class":327},[321,110923,110285],{"class":380},[19,110925,110926,110927,110929,110930,110932],{},"手动设置杆子的初始角度。因为 ",[318,110928,105601],{}," 是小车位置，",[318,110931,105604],{}," 是杆子角度，所以这里改的是杆子。",[312,110934,110935],{"className":30523,"code":104688,"language":30525,"meta":30,"style":30},[318,110936,110937],{"__ignoreMap":30},[321,110938,110939],{"class":323,"line":324},[321,110940,104688],{"class":331},[19,110942,105647,110943,110945],{},[318,110944,104175],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[312,110947,110949],{"className":30523,"code":110948,"language":30525,"meta":30,"style":30},"total_reward = 0.0\n",[318,110950,110951],{"__ignoreMap":30},[321,110952,110953,110956,110958],{"class":323,"line":324},[321,110954,110955],{"class":331},"total_reward ",[321,110957,377],{"class":327},[321,110959,104906],{"class":380},[19,110961,110962],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[312,110964,110966],{"className":30523,"code":110965,"language":30525,"meta":30,"style":30},"for step in range(1000):\n",[318,110967,110968],{"__ignoreMap":30},[321,110969,110970,110972,110974,110976,110978,110980,110982],{"class":323,"line":324},[321,110971,3231],{"class":327},[321,110973,31761],{"class":331},[321,110975,26188],{"class":327},[321,110977,32588],{"class":380},[321,110979,332],{"class":331},[321,110981,6617],{"class":380},[321,110983,30931],{"class":331},[19,110985,110986,110987,110989],{},"循环 1000 步。",[318,110988,107279],{}," 是当前步数，从 0 到 999。",[312,110991,110993],{"className":30523,"code":110992,"language":30525,"meta":30,"style":30},"obs = get_observation(data)\n",[318,110994,110995],{"__ignoreMap":30},[321,110996,110997,111000,111002],{"class":323,"line":324},[321,110998,110999],{"class":331},"obs ",[321,111001,377],{"class":327},[321,111003,110332],{"class":331},[19,111005,111006,111007,28530],{},"读取当前状态，保存到 ",[318,111008,110818],{},[312,111010,111012],{"className":30523,"code":111011,"language":30525,"meta":30,"style":30},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[318,111013,111014,111026],{"__ignoreMap":30},[321,111015,111016,111018,111020,111022,111024],{"class":323,"line":324},[321,111017,110842],{"class":331},[321,111019,377],{"class":327},[321,111021,110181],{"class":331},[321,111023,549],{"class":380},[321,111025,33391],{"class":331},[321,111027,111028,111031,111033,111035,111037],{"class":323,"line":167},[321,111029,111030],{"class":331},"pole_angular_velocity ",[321,111032,377],{"class":327},[321,111034,110181],{"class":331},[321,111036,403],{"class":380},[321,111038,33391],{"class":331},[19,111040,111041,111042,111045,111046,28530],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[318,111043,111044],{},"obs[3]","？因为 obs 的顺序是 ",[318,111047,111048],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[312,111050,111052],{"className":30523,"code":111051,"language":30525,"meta":30,"style":30},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[318,111053,111054],{"__ignoreMap":30},[321,111055,111056,111058,111060,111062,111064,111066,111068,111070,111072],{"class":323,"line":324},[321,111057,107587],{"class":331},[321,111059,377],{"class":327},[321,111061,110372],{"class":380},[321,111063,6725],{"class":327},[321,111065,109965],{"class":331},[321,111067,813],{"class":327},[321,111069,62012],{"class":380},[321,111071,6725],{"class":327},[321,111073,110385],{"class":331},[19,111075,111076,111077,101163,111079,111081],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[318,111078,105405],{},[318,111080,35474],{}," 是人为设置的系数，不是固定公式。",[312,111083,111085],{"className":30523,"code":111084,"language":30525,"meta":30,"style":30},"action = np.clip(action, -1.0, 1.0)\n",[318,111086,111087],{"__ignoreMap":30},[321,111088,111089,111091,111093,111095,111097,111099,111101,111103],{"class":323,"line":324},[321,111090,107587],{"class":331},[321,111092,377],{"class":327},[321,111094,107592],{"class":331},[321,111096,864],{"class":327},[321,111098,102548],{"class":380},[321,111100,12642],{"class":331},[321,111102,102548],{"class":380},[321,111104,338],{"class":331},[19,111106,111107],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[312,111109,111110],{"className":30523,"code":109918,"language":30525,"meta":30,"style":30},[318,111111,111112],{"__ignoreMap":30},[321,111113,111114,111116,111118,111120,111122],{"class":323,"line":324},[321,111115,106016],{"class":331},[321,111117,523],{"class":380},[321,111119,4649],{"class":331},[321,111121,377],{"class":327},[321,111123,107615],{"class":331},[19,111125,111126],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[312,111128,111129],{"className":30523,"code":104650,"language":30525,"meta":30,"style":30},[318,111130,111131],{"__ignoreMap":30},[321,111132,111133],{"class":323,"line":324},[321,111134,104650],{"class":331},[19,111136,111137,111138,111140],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[318,111139,106271],{}," 计算小车和杆子的下一刻状态。",[312,111142,111144],{"className":30523,"code":111143,"language":30525,"meta":30,"style":30},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[318,111145,111146,111155],{"__ignoreMap":30},[321,111147,111148,111151,111153],{"class":323,"line":324},[321,111149,111150],{"class":331},"reward ",[321,111152,377],{"class":327},[321,111154,110437],{"class":331},[321,111156,111157,111159,111161],{"class":323,"line":167},[321,111158,110955],{"class":331},[321,111160,9684],{"class":327},[321,111162,110447],{"class":331},[19,111164,111165,111166,111168,111169,111172,111173,28530],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[318,111167,9684],{}," 是简写，",[318,111170,111171],{},"total_reward += reward"," 等价于 ",[318,111174,111175],{},"total_reward = total_reward + reward",[312,111177,111179],{"className":30523,"code":111178,"language":30525,"meta":30,"style":30},"if step % 100 == 0:\n",[318,111180,111181],{"__ignoreMap":30},[321,111182,111183,111185,111187,111189,111191,111193,111195],{"class":323,"line":324},[321,111184,1737],{"class":327},[321,111186,31761],{"class":331},[321,111188,660],{"class":327},[321,111190,5961],{"class":380},[321,111192,101704],{"class":327},[321,111194,4299],{"class":380},[321,111196,3945],{"class":331},[19,111198,111199,111201,111202,111205],{},[318,111200,660],{}," 是取余数。",[318,111203,111204],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[312,111207,111209],{"className":30523,"code":111208,"language":30525,"meta":30,"style":30},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[318,111210,111211],{"__ignoreMap":30},[321,111212,111213,111215,111217,111219,111221,111223,111225,111227,111229,111231,111233,111235,111237,111239,111241,111243],{"class":323,"line":324},[321,111214,30560],{"class":380},[321,111216,332],{"class":331},[321,111218,110476],{"class":436},[321,111220,110479],{"class":331},[321,111222,110482],{"class":436},[321,111224,110485],{"class":331},[321,111226,403],{"class":380},[321,111228,110490],{"class":331},[321,111230,110493],{"class":436},[321,111232,12642],{"class":331},[321,111234,32163],{"class":380},[321,111236,332],{"class":331},[321,111238,371],{"class":380},[321,111240,110504],{"class":331},[321,111242,403],{"class":380},[321,111244,30642],{"class":331},[19,111246,111247,111248,111251,111252,111255],{},"打印当前步数、观测和动作。",[318,111249,111250],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[318,111253,111254],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111257,102461],{"id":102460},[19,111259,111260],{},"观测向量:",[312,111262,111265],{"className":111263,"code":111264,"language":5394,"meta":30},[5392],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[318,111266,111264],{"__ignoreMap":30},[19,111268,111269],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111271,111272],{},"每隔 100 步会打印一次：",[312,111274,111277],{"className":111275,"code":111276,"language":5394,"meta":30},[5392],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[318,111278,111276],{"__ignoreMap":30},[19,111280,111281],{},"重点观察：",[151,111283,111284,111290,111295],{},[154,111285,111286,111289],{},[318,111287,111288],{},"pole_angle"," 是否越来越大。",[154,111291,111292,111294],{},[318,111293,109871],{}," 是否跑得太远。",[154,111296,111297,111298,82684,111300,28530],{},"action 是否经常被 clip 到 ",[318,111299,104060],{},[318,111301,549],{},[19,111303,111304],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111306,102493],{"id":102492},[151,111308,111309,111315,111318,111324,111334,111340,111343],{},[154,111310,111311,111312,28530],{},"把初始角度改为 ",[318,111313,111314],{},"data.qpos[1] = 0.3",[154,111316,111317],{},"重新运行，观察控制是否变差。",[154,111319,111320,111321,111323],{},"把 actuator ",[318,111322,107212],{}," 改小。",[154,111325,111326,111327,111330,111331,28530],{},"打印 ",[318,111328,111329],{},"model.nq, model.nv, model.nu","，应为 ",[318,111332,111333],{},"2 2 1",[154,111335,111336,111337,111339],{},"把 reward 里的 ",[318,111338,110905],{}," 系数改大，观察总奖励变化。",[154,111341,111342],{},"把控制器改成反号，观察杆子是否更容易倒。",[154,111344,111345],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111347,102598],{"id":102597},[292,111349,111350],{"id":111350},"杆子方向和预期不一致",[19,111352,102541,111353,111355,111356,111358],{},[318,111354,106384],{}," 和 capsule 的 ",[318,111357,103321],{},"，必要时用 viewer 可视化确认。",[292,111360,111361],{"id":111361},"控制器越控越倒",[19,111363,111364],{},"说明反馈符号可能反了，尝试:",[312,111366,111368],{"className":30523,"code":111367,"language":30525,"meta":30,"style":30},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[318,111369,111370],{"__ignoreMap":30},[321,111371,111372,111374,111376,111378,111380,111382,111384,111386,111388,111390],{"class":323,"line":324},[321,111373,107587],{"class":331},[321,111375,377],{"class":327},[321,111377,52416],{"class":327},[321,111379,105405],{"class":380},[321,111381,6725],{"class":327},[321,111383,109965],{"class":331},[321,111385,864],{"class":327},[321,111387,62012],{"class":380},[321,111389,6725],{"class":327},[321,111391,110385],{"class":331},[292,111393,111394],{"id":111394},"小车飞走",[19,111396,111397,111398,111400,111401,111404],{},"降低 ",[318,111399,107212],{}," 或缩小 ",[318,111402,111403],{},"action"," 的 clip 范围。",[292,111406,111408,111410],{"id":111407},"obs3-为什么是杆子角速度",[318,111409,111044],{}," 为什么是杆子角速度",[19,111412,111413],{},"因为这个模型里：",[312,111415,111418],{"className":111416,"code":111417,"language":5394,"meta":30},[5392],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[318,111419,111417],{"__ignoreMap":30},[19,111421,109892],{},[312,111423,111426],{"className":111424,"code":111425,"language":5394,"meta":30},[5392],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[318,111427,111425],{"__ignoreMap":30},[292,111429,111431],{"id":111430},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111433,111434],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111436,102752],{"id":102751},[19,111438,111439],{},"一个控制任务通常包含：",[151,111441,111442,111445,111453,111458,111461],{},[154,111443,111444],{},"模型：Cartpole 的 body、joint、actuator。",[154,111446,111447,111448,544,111450,111452],{},"观测：从 ",[318,111449,104175],{},[318,111451,104505],{}," 里取状态。",[154,111454,111455,111456,28530],{},"动作：写入 ",[318,111457,101221],{},[154,111459,111460],{},"奖励：根据任务目标打分。",[154,111462,111463],{},"循环：obs -> action -> step -> reward。",[19,111465,111466],{},"这就是后面 Gymnasium 环境的基本骨架。",[5333,111468,104431],{},{"title":30,"searchDepth":167,"depth":167,"links":111470},[111471,111472,111473,111478,111482,111483,111484,111492],{"id":100791,"depth":167,"text":100792},{"id":100914,"depth":167,"text":100915},{"id":101189,"depth":167,"text":101190,"children":111474},[111475,111476,111477],{"id":109845,"depth":200,"text":109846},{"id":109910,"depth":200,"text":109911},{"id":109926,"depth":200,"text":109927},{"id":101397,"depth":167,"text":101398,"children":111479},[111480,111481],{"id":101717,"depth":200,"text":101717},{"id":101853,"depth":200,"text":101853},{"id":102460,"depth":167,"text":102461},{"id":102492,"depth":167,"text":102493},{"id":102597,"depth":167,"text":102598,"children":111485},[111486,111487,111488,111489,111491],{"id":111350,"depth":200,"text":111350},{"id":111361,"depth":200,"text":111361},{"id":111394,"depth":200,"text":111394},{"id":111407,"depth":200,"text":111490},"obs[3] 为什么是杆子角速度",{"id":111430,"depth":200,"text":111431},{"id":102751,"depth":167,"text":102752},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109581,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111499,"title":111500,"body":111501,"description":30,"extension":249,"meta":113515,"navigation":251,"path":113516,"seo":113517,"stem":113518,"__hash__":113519},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111502,"toc":113491},[111503,111506,111508,111511,111513,111530,111533,111536,111542,111545,111547,111549,111573,111575,111589,111591,111632,111634,111652,111654,111657,111663,111666,111694,111698,111704,111729,111732,111763,111770,111773,111776,111782,111785,111791,111794,111800,111804,111807,111832,111835,111837,112597,112599,112611,112613,112624,112626,112629,112646,112649,112651,112662,112665,112667,112713,112716,112729,112732,112814,112817,112819,112835,112845,112858,112861,112900,112910,112921,112931,112944,112947,112976,112979,112989,112992,112998,113015,113026,113028,113034,113051,113062,113083,113086,113098,113101,113122,113125,113133,113141,113158,113161,113230,113237,113245,113248,113261,113268,113270,113273,113279,113282,113285,113291,113297,113299,113339,113341,113347,113356,113359,113361,113381,113384,113387,113393,113397,113399,113426,113429,113432,113459,113465,113468,113471,113473,113476,113479,113485,113488],[10,111504,111500],{"id":111505},"_7控制任务reacher-机械臂到达目标",[14,111507,100792],{"id":100791},[19,111509,111510],{},"本章搭建一个二维两关节 reacher 任务。",[19,111512,104476],{},[151,111514,111515,111518,111521,111524,111527],{},[154,111516,111517],{},"两个 hinge joint",[154,111519,111520],{},"两个 motor actuator",[154,111522,111523],{},"site 作为末端点和目标点",[154,111525,111526],{},"根据末端和目标距离设计 reward",[154,111528,111529],{},"构造机械臂任务的基本形式",[19,111531,111532],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111534,111535],{},"Reacher 任务可以理解为：",[312,111537,111540],{"className":111538,"code":111539,"language":5394,"meta":30},[5392],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[318,111541,111539],{"__ignoreMap":30},[19,111543,111544],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111546,100915],{"id":100914},[19,111548,100918],{},[312,111550,111551],{"className":24030,"code":104533,"language":24032,"meta":30,"style":30},[318,111552,111553],{"__ignoreMap":30},[321,111554,111555,111557,111559,111561,111563,111565,111567,111569,111571],{"class":323,"line":324},[321,111556,24721],{"class":2169},[321,111558,26460],{"class":436},[321,111560,24042],{"class":436},[321,111562,26545],{"class":380},[321,111564,104548],{"class":436},[321,111566,100943],{"class":436},[321,111568,102646],{"class":436},[321,111570,100959],{"class":436},[321,111572,104557],{"class":436},[19,111574,102964],{},[312,111576,111577],{"className":24030,"code":101064,"language":24032,"meta":30,"style":30},[318,111578,111579],{"__ignoreMap":30},[321,111580,111581,111583,111585,111587],{"class":323,"line":324},[321,111582,24039],{"class":2169},[321,111584,24042],{"class":436},[321,111586,101075],{"class":436},[321,111588,101078],{"class":436},[19,111590,102981],{},[312,111592,111594],{"className":24030,"code":111593,"language":24032,"meta":30,"style":30},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[318,111595,111596,111613,111622],{"__ignoreMap":30},[321,111597,111598,111600,111602,111604,111607,111609,111611],{"class":323,"line":324},[321,111599,30475],{"class":2169},[321,111601,29321],{"class":436},[321,111603,25260],{"class":380},[321,111605,111606],{"class":436}," mujoco-reacher",[321,111608,101120],{"class":436},[321,111610,101123],{"class":380},[321,111612,101126],{"class":380},[321,111614,111615,111617,111619],{"class":323,"line":167},[321,111616,30475],{"class":2169},[321,111618,101133],{"class":436},[321,111620,111621],{"class":436}," mujoco-reacher\n",[321,111623,111624,111626,111628,111630],{"class":323,"line":200},[321,111625,24039],{"class":2169},[321,111627,24042],{"class":436},[321,111629,101075],{"class":436},[321,111631,101078],{"class":436},[19,111633,101149],{},[151,111635,111636,111639,111642],{},[154,111637,111638],{},"本章使用低维状态，不使用图像输入。",[154,111640,111641],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[154,111643,111644,111645,544,111647,544,111649,111651],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[318,111646,104175],{},[318,111648,104505],{},[318,111650,103825],{}," 的方法一致。",[14,111653,101190],{"id":101189},[19,111655,111656],{},"Reacher 任务核心:",[312,111658,111661],{"className":111659,"code":111660,"language":5394,"meta":30},[5392],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[318,111662,111660],{"__ignoreMap":30},[19,111664,111665],{},"读取 site 世界坐标:",[312,111667,111669],{"className":30523,"code":111668,"language":30525,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[318,111670,111671,111684],{"__ignoreMap":30},[321,111672,111673,111675,111677,111679,111682],{"class":323,"line":324},[321,111674,103779],{"class":331},[321,111676,377],{"class":327},[321,111678,103550],{"class":331},[321,111680,111681],{"class":436},"\"tip\"",[321,111683,338],{"class":331},[321,111685,111686,111689,111691],{"class":323,"line":167},[321,111687,111688],{"class":331},"tip_pos ",[321,111690,377],{"class":327},[321,111692,111693],{"class":331}," data.site_xpos[site_id]\n",[292,111695,111697],{"id":111696},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111699,111700,111701,111703],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[318,111702,104175],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[312,111705,111707],{"className":30523,"code":111706,"language":30525,"meta":30,"style":30},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[318,111708,111709,111719],{"__ignoreMap":30},[321,111710,111711,111714,111716],{"class":323,"line":324},[321,111712,111713],{"class":331},"tip ",[321,111715,377],{"class":327},[321,111717,111718],{"class":331}," data.site_xpos[tip_site_id]\n",[321,111720,111721,111724,111726],{"class":323,"line":167},[321,111722,111723],{"class":331},"target ",[321,111725,377],{"class":327},[321,111727,111728],{"class":331}," data.site_xpos[target_site_id]\n",[19,111730,111731],{},"这样 reward 就很容易写：",[312,111733,111735],{"className":30523,"code":111734,"language":30525,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[318,111736,111737,111752],{"__ignoreMap":30},[321,111738,111739,111742,111744,111747,111749],{"class":323,"line":324},[321,111740,111741],{"class":331},"dist ",[321,111743,377],{"class":327},[321,111745,111746],{"class":331}," np.linalg.norm(tip ",[321,111748,864],{"class":327},[321,111750,111751],{"class":331}," target)\n",[321,111753,111754,111756,111758,111760],{"class":323,"line":167},[321,111755,111150],{"class":331},[321,111757,377],{"class":327},[321,111759,52416],{"class":327},[321,111761,111762],{"class":331},"dist\n",[19,111764,111765,111766,111769],{},"距离越小，",[318,111767,111768],{},"-dist"," 越接近 0，奖励越高。",[292,111771,111772],{"id":111772},"两关节机械臂的状态",[19,111774,111775],{},"这个模型有两个 hinge joint：",[312,111777,111780],{"className":111778,"code":111779,"language":5394,"meta":30},[5392],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[318,111781,111779],{"__ignoreMap":30},[19,111783,111784],{},"再加上末端和目标位置：",[312,111786,111789],{"className":111787,"code":111788,"language":5394,"meta":30},[5392],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[318,111790,111788],{"__ignoreMap":30},[19,111792,111793],{},"总维度：",[312,111795,111798],{"className":111796,"code":111797,"language":5394,"meta":30},[5392],"2 + 2 + 3 + 3 = 10\n",[318,111799,111797],{"__ignoreMap":30},[292,111801,111803],{"id":111802},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111805,111806],{},"本章把重力设为：",[312,111808,111810],{"className":53212,"code":111809,"language":53214,"meta":30,"style":30},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[318,111811,111812],{"__ignoreMap":30},[321,111813,111814,111816,111818,111820,111822,111824,111826,111828,111830],{"class":323,"line":324},[321,111815,1242],{"class":331},[321,111817,69311],{"class":51445},[321,111819,101339],{"class":2169},[321,111821,377],{"class":331},[321,111823,101344],{"class":436},[321,111825,101347],{"class":2169},[321,111827,377],{"class":331},[321,111829,103916],{"class":436},[321,111831,101289],{"class":331},[19,111833,111834],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111836,101398],{"id":101397},[312,111838,111840],{"className":30523,"code":111839,"language":30525,"meta":30,"style":30},"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",[318,111841,111842,111848,111858,111862,111866,111874,111879,111884,111888,111892,111897,111902,111906,111911,111916,111921,111925,111930,111935,111940,111945,111949,111953,111957,111961,111965,111970,111975,111979,111983,111987,111991,111995,112010,112019,112031,112054,112061,112065,112069,112079,112093,112107,112114,112118,112122,112136,112148,112160,112173,112188,112205,112209,112213,112225,112237,112245,112253,112257,112273,112278,112291,112304,112319,112323,112358,112390,112394,112398,112407,112411,112427,112437,112448,112464,112480,112496,112512,112516,112534,112554,112573,112577,112581,112593],{"__ignoreMap":30},[321,111843,111844,111846],{"class":323,"line":324},[321,111845,30537],{"class":327},[321,111847,101446],{"class":331},[321,111849,111850,111852,111854,111856],{"class":323,"line":167},[321,111851,30537],{"class":327},[321,111853,31525],{"class":331},[321,111855,31528],{"class":327},[321,111857,31531],{"class":331},[321,111859,111860],{"class":323,"line":200},[321,111861,2606],{"emptyLinePlaceholder":251},[321,111863,111864],{"class":323,"line":1401},[321,111865,2606],{"emptyLinePlaceholder":251},[321,111867,111868,111870,111872],{"class":323,"line":1407},[321,111869,101459],{"class":380},[321,111871,13771],{"class":327},[321,111873,101464],{"class":436},[321,111875,111876],{"class":323,"line":1421},[321,111877,111878],{"class":436},"\u003Cmujoco model=\"two_link_reacher\">\n",[321,111880,111881],{"class":323,"line":1427},[321,111882,111883],{"class":436},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[321,111885,111886],{"class":323,"line":1518},[321,111887,2606],{"emptyLinePlaceholder":251},[321,111889,111890],{"class":323,"line":1524},[321,111891,101483],{"class":436},[321,111893,111894],{"class":323,"line":1536},[321,111895,111896],{"class":436},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[321,111898,111899],{"class":323,"line":1818},[321,111900,111901],{"class":436},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[321,111903,111904],{"class":323,"line":1823},[321,111905,2606],{"emptyLinePlaceholder":251},[321,111907,111908],{"class":323,"line":1829},[321,111909,111910],{"class":436},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[321,111912,111913],{"class":323,"line":1834},[321,111914,111915],{"class":436},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[321,111917,111918],{"class":323,"line":1848},[321,111919,111920],{"class":436},"      \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",[321,111922,111923],{"class":323,"line":1853},[321,111924,2606],{"emptyLinePlaceholder":251},[321,111926,111927],{"class":323,"line":1859},[321,111928,111929],{"class":436},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[321,111931,111932],{"class":323,"line":1880},[321,111933,111934],{"class":436},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[321,111936,111937],{"class":323,"line":1885},[321,111938,111939],{"class":436},"        \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",[321,111941,111942],{"class":323,"line":1899},[321,111943,111944],{"class":436},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[321,111946,111947],{"class":323,"line":1904},[321,111948,106583],{"class":436},[321,111950,111951],{"class":323,"line":1933},[321,111952,101512],{"class":436},[321,111954,111955],{"class":323,"line":1938},[321,111956,101517],{"class":436},[321,111958,111959],{"class":323,"line":1955},[321,111960,2606],{"emptyLinePlaceholder":251},[321,111962,111963],{"class":323,"line":1960},[321,111964,106600],{"class":436},[321,111966,111967],{"class":323,"line":1965},[321,111968,111969],{"class":436},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[321,111971,111972],{"class":323,"line":1970},[321,111973,111974],{"class":436},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[321,111976,111977],{"class":323,"line":1984},[321,111978,106610],{"class":436},[321,111980,111981],{"class":323,"line":1989},[321,111982,101522],{"class":436},[321,111984,111985],{"class":323,"line":2783},[321,111986,95843],{"class":436},[321,111988,111989],{"class":323,"line":2797},[321,111990,2606],{"emptyLinePlaceholder":251},[321,111992,111993],{"class":323,"line":2805},[321,111994,2606],{"emptyLinePlaceholder":251},[321,111996,111997,111999,112002,112005,112007],{"class":323,"line":2810},[321,111998,32092],{"class":327},[321,112000,112001],{"class":2169}," site_position",[321,112003,112004],{"class":331},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[321,112006,1506],{"class":380},[321,112008,112009],{"class":331},") -> np.ndarray:\n",[321,112011,112012,112014,112016],{"class":323,"line":2816},[321,112013,103545],{"class":331},[321,112015,377],{"class":327},[321,112017,112018],{"class":331}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[321,112020,112021,112023,112025,112027,112029],{"class":323,"line":2822},[321,112022,3307],{"class":327},[321,112024,103594],{"class":331},[321,112026,1242],{"class":327},[321,112028,4299],{"class":380},[321,112030,3945],{"class":331},[321,112032,112033,112035,112037,112039,112041,112044,112046,112048,112050,112052],{"class":323,"line":2827},[321,112034,103577],{"class":327},[321,112036,103580],{"class":380},[321,112038,332],{"class":331},[321,112040,384],{"class":327},[321,112042,112043],{"class":436},"\"site not found: ",[321,112045,1228],{"class":380},[321,112047,79955],{"class":331},[321,112049,1278],{"class":380},[321,112051,583],{"class":436},[321,112053,338],{"class":331},[321,112055,112056,112058],{"class":323,"line":8155},[321,112057,4296],{"class":327},[321,112059,112060],{"class":331}," data.site_xpos[site_id].copy()\n",[321,112062,112063],{"class":323,"line":8179},[321,112064,2606],{"emptyLinePlaceholder":251},[321,112066,112067],{"class":323,"line":8184},[321,112068,2606],{"emptyLinePlaceholder":251},[321,112070,112071,112073,112076],{"class":323,"line":8190},[321,112072,32092],{"class":327},[321,112074,112075],{"class":2169}," get_obs",[321,112077,112078],{"class":331},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[321,112080,112081,112084,112086,112089,112091],{"class":323,"line":8217},[321,112082,112083],{"class":331},"    tip ",[321,112085,377],{"class":327},[321,112087,112088],{"class":331}," site_position(model, data, ",[321,112090,111681],{"class":436},[321,112092,338],{"class":331},[321,112094,112095,112098,112100,112102,112105],{"class":323,"line":8222},[321,112096,112097],{"class":331},"    target ",[321,112099,377],{"class":327},[321,112101,112088],{"class":331},[321,112103,112104],{"class":436},"\"target\"",[321,112106,338],{"class":331},[321,112108,112109,112111],{"class":323,"line":8228},[321,112110,4296],{"class":327},[321,112112,112113],{"class":331}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[321,112115,112116],{"class":323,"line":8240},[321,112117,2606],{"emptyLinePlaceholder":251},[321,112119,112120],{"class":323,"line":8252},[321,112121,2606],{"emptyLinePlaceholder":251},[321,112123,112124,112126,112129,112132,112134],{"class":323,"line":8264},[321,112125,32092],{"class":327},[321,112127,112128],{"class":2169}," reward",[321,112130,112131],{"class":331},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[321,112133,371],{"class":380},[321,112135,3945],{"class":331},[321,112137,112138,112140,112142,112144,112146],{"class":323,"line":9923},[321,112139,112083],{"class":331},[321,112141,377],{"class":327},[321,112143,112088],{"class":331},[321,112145,111681],{"class":436},[321,112147,338],{"class":331},[321,112149,112150,112152,112154,112156,112158],{"class":323,"line":9948},[321,112151,112097],{"class":331},[321,112153,377],{"class":327},[321,112155,112088],{"class":331},[321,112157,112104],{"class":436},[321,112159,338],{"class":331},[321,112161,112162,112165,112167,112169,112171],{"class":323,"line":9971},[321,112163,112164],{"class":331},"    dist ",[321,112166,377],{"class":327},[321,112168,111746],{"class":331},[321,112170,864],{"class":327},[321,112172,111751],{"class":331},[321,112174,112175,112178,112180,112183,112185],{"class":323,"line":9995},[321,112176,112177],{"class":331},"    control_cost ",[321,112179,377],{"class":327},[321,112181,112182],{"class":380}," 0.01",[321,112184,6725],{"class":327},[321,112186,112187],{"class":331}," np.sum(np.square(data.ctrl))\n",[321,112189,112190,112192,112194,112196,112198,112200,112202],{"class":323,"line":10000},[321,112191,4296],{"class":327},[321,112193,109942],{"class":380},[321,112195,332],{"class":331},[321,112197,864],{"class":327},[321,112199,111741],{"class":331},[321,112201,864],{"class":327},[321,112203,112204],{"class":331}," control_cost)\n",[321,112206,112207],{"class":323,"line":10005},[321,112208,2606],{"emptyLinePlaceholder":251},[321,112210,112211],{"class":323,"line":10010},[321,112212,2606],{"emptyLinePlaceholder":251},[321,112214,112215,112217,112219,112221,112223],{"class":323,"line":10019},[321,112216,32092],{"class":327},[321,112218,2179],{"class":2169},[321,112220,101543],{"class":331},[321,112222,95831],{"class":380},[321,112224,3945],{"class":331},[321,112226,112227,112229,112231,112233,112235],{"class":323,"line":10024},[321,112228,101552],{"class":331},[321,112230,377],{"class":327},[321,112232,101557],{"class":331},[321,112234,101459],{"class":380},[321,112236,338],{"class":331},[321,112238,112239,112241,112243],{"class":323,"line":10030},[321,112240,101566],{"class":331},[321,112242,377],{"class":327},[321,112244,101571],{"class":331},[321,112246,112247,112249,112251],{"class":323,"line":10051},[321,112248,110298],{"class":331},[321,112250,377],{"class":327},[321,112252,104906],{"class":380},[321,112254,112255],{"class":323,"line":10057},[321,112256,2606],{"emptyLinePlaceholder":251},[321,112258,112259,112261,112263,112265,112267,112269,112271],{"class":323,"line":10071},[321,112260,3407],{"class":327},[321,112262,31761],{"class":331},[321,112264,26188],{"class":327},[321,112266,32588],{"class":380},[321,112268,332],{"class":331},[321,112270,65219],{"class":380},[321,112272,30931],{"class":331},[321,112274,112275],{"class":323,"line":10077},[321,112276,112277],{"class":331},"        mujoco.mj_forward(model, data)\n",[321,112279,112280,112283,112285,112287,112289],{"class":323,"line":10104},[321,112281,112282],{"class":331},"        tip ",[321,112284,377],{"class":327},[321,112286,112088],{"class":331},[321,112288,111681],{"class":436},[321,112290,338],{"class":331},[321,112292,112293,112296,112298,112300,112302],{"class":323,"line":10113},[321,112294,112295],{"class":331},"        target ",[321,112297,377],{"class":327},[321,112299,112088],{"class":331},[321,112301,112104],{"class":436},[321,112303,338],{"class":331},[321,112305,112306,112309,112311,112314,112316],{"class":323,"line":10119},[321,112307,112308],{"class":331},"        error ",[321,112310,377],{"class":327},[321,112312,112313],{"class":331}," target ",[321,112315,864],{"class":327},[321,112317,112318],{"class":331}," tip\n",[321,112320,112321],{"class":323,"line":10127},[321,112322,2606],{"emptyLinePlaceholder":251},[321,112324,112325,112327,112329,112331,112333,112336,112338,112340,112343,112345,112348,112350,112352,112354,112356],{"class":323,"line":10132},[321,112326,106762],{"class":331},[321,112328,523],{"class":380},[321,112330,4649],{"class":331},[321,112332,377],{"class":327},[321,112334,112335],{"class":331}," np.clip(",[321,112337,105405],{"class":380},[321,112339,6725],{"class":327},[321,112341,112342],{"class":331}," error[",[321,112344,409],{"class":380},[321,112346,112347],{"class":331},"], ",[321,112349,864],{"class":327},[321,112351,102548],{"class":380},[321,112353,12642],{"class":331},[321,112355,102548],{"class":380},[321,112357,338],{"class":331},[321,112359,112360,112362,112364,112366,112368,112370,112372,112374,112376,112378,112380,112382,112384,112386,112388],{"class":323,"line":16811},[321,112361,106762],{"class":331},[321,112363,549],{"class":380},[321,112365,4649],{"class":331},[321,112367,377],{"class":327},[321,112369,112335],{"class":331},[321,112371,105405],{"class":380},[321,112373,6725],{"class":327},[321,112375,112342],{"class":331},[321,112377,523],{"class":380},[321,112379,112347],{"class":331},[321,112381,864],{"class":327},[321,112383,102548],{"class":380},[321,112385,12642],{"class":331},[321,112387,102548],{"class":380},[321,112389,338],{"class":331},[321,112391,112392],{"class":323,"line":16817},[321,112393,2606],{"emptyLinePlaceholder":251},[321,112395,112396],{"class":323,"line":16840},[321,112397,101661],{"class":331},[321,112399,112400,112402,112404],{"class":323,"line":16846},[321,112401,110442],{"class":331},[321,112403,9684],{"class":327},[321,112405,112406],{"class":331}," reward(model, data)\n",[321,112408,112409],{"class":323,"line":16869},[321,112410,2606],{"emptyLinePlaceholder":251},[321,112412,112413,112415,112417,112419,112421,112423,112425],{"class":323,"line":16883},[321,112414,2703],{"class":327},[321,112416,31761],{"class":331},[321,112418,660],{"class":327},[321,112420,5961],{"class":380},[321,112422,101704],{"class":327},[321,112424,4299],{"class":380},[321,112426,3945],{"class":331},[321,112428,112429,112432,112434],{"class":323,"line":16903},[321,112430,112431],{"class":331},"            obs ",[321,112433,377],{"class":327},[321,112435,112436],{"class":331}," get_obs(model, data)\n",[321,112438,112439,112441,112443,112445],{"class":323,"line":16909},[321,112440,34795],{"class":380},[321,112442,332],{"class":331},[321,112444,110476],{"class":436},[321,112446,112447],{"class":331},", step)\n",[321,112449,112450,112452,112454,112457,112460,112462],{"class":323,"line":16920},[321,112451,34795],{"class":380},[321,112453,332],{"class":331},[321,112455,112456],{"class":436},"\"  tip:\"",[321,112458,112459],{"class":331},", np.round(tip, ",[321,112461,403],{"class":380},[321,112463,30642],{"class":331},[321,112465,112466,112468,112470,112473,112476,112478],{"class":323,"line":16943},[321,112467,34795],{"class":380},[321,112469,332],{"class":331},[321,112471,112472],{"class":436},"\"  target:\"",[321,112474,112475],{"class":331},", np.round(target, ",[321,112477,403],{"class":380},[321,112479,30642],{"class":331},[321,112481,112482,112484,112486,112489,112492,112494],{"class":323,"line":16965},[321,112483,34795],{"class":380},[321,112485,332],{"class":331},[321,112487,112488],{"class":436},"\"  ctrl:\"",[321,112490,112491],{"class":331},", np.round(data.ctrl.copy(), ",[321,112493,403],{"class":380},[321,112495,30642],{"class":331},[321,112497,112498,112500,112502,112505,112508,112510],{"class":323,"line":16970},[321,112499,34795],{"class":380},[321,112501,332],{"class":331},[321,112503,112504],{"class":436},"\"  obs_dim:\"",[321,112506,112507],{"class":331},", obs.shape[",[321,112509,523],{"class":380},[321,112511,4863],{"class":331},[321,112513,112514],{"class":323,"line":16976},[321,112515,2606],{"emptyLinePlaceholder":251},[321,112517,112518,112520,112522,112524,112526,112528,112530,112532],{"class":323,"line":16990},[321,112519,31444],{"class":380},[321,112521,332],{"class":331},[321,112523,110521],{"class":436},[321,112525,12642],{"class":331},[321,112527,32163],{"class":380},[321,112529,110528],{"class":331},[321,112531,403],{"class":380},[321,112533,30642],{"class":331},[321,112535,112536,112538,112540,112543,112546,112548,112550,112552],{"class":323,"line":17003},[321,112537,31444],{"class":380},[321,112539,332],{"class":331},[321,112541,112542],{"class":436},"\"final tip:\"",[321,112544,112545],{"class":331},", np.round(site_position(model, data, ",[321,112547,111681],{"class":436},[321,112549,110490],{"class":331},[321,112551,403],{"class":380},[321,112553,30642],{"class":331},[321,112555,112556,112558,112560,112563,112565,112567,112569,112571],{"class":323,"line":17008},[321,112557,31444],{"class":380},[321,112559,332],{"class":331},[321,112561,112562],{"class":436},"\"target:\"",[321,112564,112545],{"class":331},[321,112566,112104],{"class":436},[321,112568,110490],{"class":331},[321,112570,403],{"class":380},[321,112572,30642],{"class":331},[321,112574,112575],{"class":323,"line":17022},[321,112576,2606],{"emptyLinePlaceholder":251},[321,112578,112579],{"class":323,"line":17027},[321,112580,2606],{"emptyLinePlaceholder":251},[321,112582,112583,112585,112587,112589,112591],{"class":323,"line":17033},[321,112584,1737],{"class":327},[321,112586,31365],{"class":380},[321,112588,101704],{"class":327},[321,112590,101707],{"class":436},[321,112592,3945],{"class":331},[321,112594,112595],{"class":323,"line":17038},[321,112596,101714],{"class":331},[19,112598,103715],{},[312,112600,112602],{"className":24030,"code":112601,"language":24032,"meta":30,"style":30},"touch ch7_reacher.py\n",[318,112603,112604],{"__ignoreMap":30},[321,112605,112606,112608],{"class":323,"line":324},[321,112607,101428],{"class":2169},[321,112609,112610],{"class":436}," ch7_reacher.py\n",[19,112612,110589],{},[312,112614,112616],{"className":24030,"code":112615,"language":24032,"meta":30,"style":30},"python ch7_reacher.py\n",[318,112617,112618],{"__ignoreMap":30},[321,112619,112620,112622],{"class":323,"line":324},[321,112621,30525],{"class":2169},[321,112623,112610],{"class":436},[292,112625,101717],{"id":101717},[19,112627,112628],{},"读取 site 坐标：",[312,112630,112632],{"className":30523,"code":112631,"language":30525,"meta":30,"style":30},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[318,112633,112634],{"__ignoreMap":30},[321,112635,112636,112638,112640,112642,112644],{"class":323,"line":324},[321,112637,32092],{"class":327},[321,112639,112001],{"class":2169},[321,112641,112004],{"class":331},[321,112643,1506],{"class":380},[321,112645,112009],{"class":331},[19,112647,112648],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112650,110605],{},[312,112652,112654],{"className":30523,"code":112653,"language":30525,"meta":30,"style":30},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[318,112655,112656],{"__ignoreMap":30},[321,112657,112658,112660],{"class":323,"line":324},[321,112659,17253],{"class":327},[321,112661,112113],{"class":331},[19,112663,112664],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112666,109930],{},[312,112668,112670],{"className":30523,"code":112669,"language":30525,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[318,112671,112672,112684,112697],{"__ignoreMap":30},[321,112673,112674,112676,112678,112680,112682],{"class":323,"line":324},[321,112675,111741],{"class":331},[321,112677,377],{"class":327},[321,112679,111746],{"class":331},[321,112681,864],{"class":327},[321,112683,111751],{"class":331},[321,112685,112686,112689,112691,112693,112695],{"class":323,"line":167},[321,112687,112688],{"class":331},"control_cost ",[321,112690,377],{"class":327},[321,112692,112182],{"class":380},[321,112694,6725],{"class":327},[321,112696,112187],{"class":331},[321,112698,112699,112701,112703,112705,112707,112709,112711],{"class":323,"line":200},[321,112700,17253],{"class":327},[321,112702,109942],{"class":380},[321,112704,332],{"class":331},[321,112706,864],{"class":327},[321,112708,111741],{"class":331},[321,112710,864],{"class":327},[321,112712,112204],{"class":331},[19,112714,112715],{},"奖励由两部分组成：",[151,112717,112718,112723],{},[154,112719,112720,112722],{},[318,112721,111768],{},"：末端离目标越远，奖励越低。",[154,112724,112725,112728],{},[318,112726,112727],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112730,112731],{},"简单控制器：",[312,112733,112735],{"className":30523,"code":112734,"language":30525,"meta":30,"style":30},"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",[318,112736,112737,112750,112782],{"__ignoreMap":30},[321,112738,112739,112742,112744,112746,112748],{"class":323,"line":324},[321,112740,112741],{"class":331},"error ",[321,112743,377],{"class":327},[321,112745,112313],{"class":331},[321,112747,864],{"class":327},[321,112749,112318],{"class":331},[321,112751,112752,112754,112756,112758,112760,112762,112764,112766,112768,112770,112772,112774,112776,112778,112780],{"class":323,"line":167},[321,112753,106016],{"class":331},[321,112755,523],{"class":380},[321,112757,4649],{"class":331},[321,112759,377],{"class":327},[321,112761,112335],{"class":331},[321,112763,105405],{"class":380},[321,112765,6725],{"class":327},[321,112767,112342],{"class":331},[321,112769,409],{"class":380},[321,112771,112347],{"class":331},[321,112773,864],{"class":327},[321,112775,102548],{"class":380},[321,112777,12642],{"class":331},[321,112779,102548],{"class":380},[321,112781,338],{"class":331},[321,112783,112784,112786,112788,112790,112792,112794,112796,112798,112800,112802,112804,112806,112808,112810,112812],{"class":323,"line":200},[321,112785,106016],{"class":331},[321,112787,549],{"class":380},[321,112789,4649],{"class":331},[321,112791,377],{"class":327},[321,112793,112335],{"class":331},[321,112795,105405],{"class":380},[321,112797,6725],{"class":327},[321,112799,112342],{"class":331},[321,112801,523],{"class":380},[321,112803,112347],{"class":331},[321,112805,864],{"class":327},[321,112807,102548],{"class":380},[321,112809,12642],{"class":331},[321,112811,102548],{"class":380},[321,112813,338],{"class":331},[19,112815,112816],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[292,112818,101853],{"id":101853},[312,112820,112821],{"className":30523,"code":112631,"language":30525,"meta":30,"style":30},[318,112822,112823],{"__ignoreMap":30},[321,112824,112825,112827,112829,112831,112833],{"class":323,"line":324},[321,112826,32092],{"class":327},[321,112828,112001],{"class":2169},[321,112830,112004],{"class":331},[321,112832,1506],{"class":380},[321,112834,112009],{"class":331},[19,112836,112837,112838,112840,112841,82684,112843,28530],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[318,112839,79955],{}," 是 site 的名字，比如 ",[318,112842,111681],{},[318,112844,112104],{},[312,112846,112848],{"className":30523,"code":112847,"language":30525,"meta":30,"style":30},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[318,112849,112850],{"__ignoreMap":30},[321,112851,112852,112854,112856],{"class":323,"line":324},[321,112853,103779],{"class":331},[321,112855,377],{"class":327},[321,112857,112018],{"class":331},[19,112859,112860],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[312,112862,112864],{"className":30523,"code":112863,"language":30525,"meta":30,"style":30},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[318,112865,112866,112878],{"__ignoreMap":30},[321,112867,112868,112870,112872,112874,112876],{"class":323,"line":324},[321,112869,1737],{"class":327},[321,112871,103594],{"class":331},[321,112873,1242],{"class":327},[321,112875,4299],{"class":380},[321,112877,3945],{"class":331},[321,112879,112880,112882,112884,112886,112888,112890,112892,112894,112896,112898],{"class":323,"line":167},[321,112881,104040],{"class":327},[321,112883,103580],{"class":380},[321,112885,332],{"class":331},[321,112887,384],{"class":327},[321,112889,112043],{"class":436},[321,112891,1228],{"class":380},[321,112893,79955],{"class":331},[321,112895,1278],{"class":380},[321,112897,583],{"class":436},[321,112899,338],{"class":331},[19,112901,112902,112903,112906,112907,112909],{},"如果 site 没找到，就主动报错。",[318,112904,112905],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[318,112908,79955],{}," 的值放进字符串里。",[312,112911,112913],{"className":30523,"code":112912,"language":30525,"meta":30,"style":30},"return data.site_xpos[site_id].copy()\n",[318,112914,112915],{"__ignoreMap":30},[321,112916,112917,112919],{"class":323,"line":324},[321,112918,17253],{"class":327},[321,112920,112060],{"class":331},[19,112922,112923,112924,112926,112927,112930],{},"返回这个 site 的世界坐标。",[318,112925,103825],{}," 里的每一行都是一个 site 的 ",[318,112928,112929],{},"(x, y, z)"," 坐标。",[312,112932,112934],{"className":30523,"code":112933,"language":30525,"meta":30,"style":30},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[318,112935,112936],{"__ignoreMap":30},[321,112937,112938,112940,112942],{"class":323,"line":324},[321,112939,32092],{"class":327},[321,112941,112075],{"class":2169},[321,112943,112078],{"class":331},[19,112945,112946],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[312,112948,112950],{"className":30523,"code":112949,"language":30525,"meta":30,"style":30},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[318,112951,112952,112964],{"__ignoreMap":30},[321,112953,112954,112956,112958,112960,112962],{"class":323,"line":324},[321,112955,111713],{"class":331},[321,112957,377],{"class":327},[321,112959,112088],{"class":331},[321,112961,111681],{"class":436},[321,112963,338],{"class":331},[321,112965,112966,112968,112970,112972,112974],{"class":323,"line":167},[321,112967,111723],{"class":331},[321,112969,377],{"class":327},[321,112971,112088],{"class":331},[321,112973,112104],{"class":436},[321,112975,338],{"class":331},[19,112977,112978],{},"分别读取末端点和目标点的世界坐标。",[312,112980,112981],{"className":30523,"code":112653,"language":30525,"meta":30,"style":30},[318,112982,112983],{"__ignoreMap":30},[321,112984,112985,112987],{"class":323,"line":324},[321,112986,17253],{"class":327},[321,112988,112113],{"class":331},[19,112990,112991],{},"把四部分拼成一个观测数组：",[312,112993,112996],{"className":112994,"code":112995,"language":5394,"meta":30},[5392],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[318,112997,112995],{"__ignoreMap":30},[312,112999,113001],{"className":30523,"code":113000,"language":30525,"meta":30,"style":30},"dist = np.linalg.norm(tip - target)\n",[318,113002,113003],{"__ignoreMap":30},[321,113004,113005,113007,113009,113011,113013],{"class":323,"line":324},[321,113006,111741],{"class":331},[321,113008,377],{"class":327},[321,113010,111746],{"class":331},[321,113012,864],{"class":327},[321,113014,111751],{"class":331},[19,113016,113017,113018,113021,113022,113025],{},"计算 tip 到 target 的距离。",[318,113019,113020],{},"tip - target"," 得到一个三维向量，",[318,113023,113024],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113027,14840],{},[312,113029,113032],{"className":113030,"code":113031,"language":5394,"meta":30},[5392],"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",[318,113033,113031],{"__ignoreMap":30},[312,113035,113037],{"className":30523,"code":113036,"language":30525,"meta":30,"style":30},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[318,113038,113039],{"__ignoreMap":30},[321,113040,113041,113043,113045,113047,113049],{"class":323,"line":324},[321,113042,112688],{"class":331},[321,113044,377],{"class":327},[321,113046,112182],{"class":380},[321,113048,6725],{"class":327},[321,113050,112187],{"class":331},[19,113052,113053,113054,113057,113058,113061],{},"计算动作惩罚。",[318,113055,113056],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[318,113059,113060],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[312,113063,113065],{"className":30523,"code":113064,"language":30525,"meta":30,"style":30},"return float(-dist - control_cost)\n",[318,113066,113067],{"__ignoreMap":30},[321,113068,113069,113071,113073,113075,113077,113079,113081],{"class":323,"line":324},[321,113070,17253],{"class":327},[321,113072,109942],{"class":380},[321,113074,332],{"class":331},[321,113076,864],{"class":327},[321,113078,111741],{"class":331},[321,113080,864],{"class":327},[321,113082,112204],{"class":331},[19,113084,113085],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[312,113087,113088],{"className":30523,"code":110948,"language":30525,"meta":30,"style":30},[318,113089,113090],{"__ignoreMap":30},[321,113091,113092,113094,113096],{"class":323,"line":324},[321,113093,110955],{"class":331},[321,113095,377],{"class":327},[321,113097,104906],{"class":380},[19,113099,113100],{},"累计奖励变量，记录整个运行过程的总分。",[312,113102,113104],{"className":30523,"code":113103,"language":30525,"meta":30,"style":30},"for step in range(500):\n",[318,113105,113106],{"__ignoreMap":30},[321,113107,113108,113110,113112,113114,113116,113118,113120],{"class":323,"line":324},[321,113109,3231],{"class":327},[321,113111,31761],{"class":331},[321,113113,26188],{"class":327},[321,113115,32588],{"class":380},[321,113117,332],{"class":331},[321,113119,65219],{"class":380},[321,113121,30931],{"class":331},[19,113123,113124],{},"运行 500 个控制步。",[312,113126,113127],{"className":30523,"code":104688,"language":30525,"meta":30,"style":30},[318,113128,113129],{"__ignoreMap":30},[321,113130,113131],{"class":323,"line":324},[321,113132,104688],{"class":331},[19,113134,113135,113136,101163,113138,113140],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[318,113137,103376],{},[318,113139,103379],{}," 是当前状态下的坐标。",[312,113142,113144],{"className":30523,"code":113143,"language":30525,"meta":30,"style":30},"error = target - tip\n",[318,113145,113146],{"__ignoreMap":30},[321,113147,113148,113150,113152,113154,113156],{"class":323,"line":324},[321,113149,112741],{"class":331},[321,113151,377],{"class":327},[321,113153,112313],{"class":331},[321,113155,864],{"class":327},[321,113157,112318],{"class":331},[19,113159,113160],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[312,113162,113164],{"className":30523,"code":113163,"language":30525,"meta":30,"style":30},"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",[318,113165,113166,113198],{"__ignoreMap":30},[321,113167,113168,113170,113172,113174,113176,113178,113180,113182,113184,113186,113188,113190,113192,113194,113196],{"class":323,"line":324},[321,113169,106016],{"class":331},[321,113171,523],{"class":380},[321,113173,4649],{"class":331},[321,113175,377],{"class":327},[321,113177,112335],{"class":331},[321,113179,105405],{"class":380},[321,113181,6725],{"class":327},[321,113183,112342],{"class":331},[321,113185,409],{"class":380},[321,113187,112347],{"class":331},[321,113189,864],{"class":327},[321,113191,102548],{"class":380},[321,113193,12642],{"class":331},[321,113195,102548],{"class":380},[321,113197,338],{"class":331},[321,113199,113200,113202,113204,113206,113208,113210,113212,113214,113216,113218,113220,113222,113224,113226,113228],{"class":323,"line":167},[321,113201,106016],{"class":331},[321,113203,549],{"class":380},[321,113205,4649],{"class":331},[321,113207,377],{"class":327},[321,113209,112335],{"class":331},[321,113211,105405],{"class":380},[321,113213,6725],{"class":327},[321,113215,112342],{"class":331},[321,113217,523],{"class":380},[321,113219,112347],{"class":331},[321,113221,864],{"class":327},[321,113223,102548],{"class":380},[321,113225,12642],{"class":331},[321,113227,102548],{"class":380},[321,113229,338],{"class":331},[19,113231,113232,113233,113236],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[318,113234,113235],{},"error -> ctrl -> step"," 的流程。",[312,113238,113239],{"className":30523,"code":104650,"language":30525,"meta":30,"style":30},[318,113240,113241],{"__ignoreMap":30},[321,113242,113243],{"class":323,"line":324},[321,113244,104650],{"class":331},[19,113246,113247],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[312,113249,113251],{"className":30523,"code":113250,"language":30525,"meta":30,"style":30},"obs = get_obs(model, data)\n",[318,113252,113253],{"__ignoreMap":30},[321,113254,113255,113257,113259],{"class":323,"line":324},[321,113256,110999],{"class":331},[321,113258,377],{"class":327},[321,113260,112436],{"class":331},[19,113262,113263,113264,113267],{},"读取最新观测。后面打印 ",[318,113265,113266],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113269,102461],{"id":102460},[19,113271,113272],{},"观测维度为:",[312,113274,113277],{"className":113275,"code":113276,"language":5394,"meta":30},[5392],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[318,113278,113276],{"__ignoreMap":30},[19,113280,113281],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113283,113284],{},"程序每 100 步打印：",[312,113286,113289],{"className":113287,"code":113288,"language":5394,"meta":30},[5392],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[318,113290,113288],{"__ignoreMap":30},[19,113292,113293,113294,113296],{},"如果控制有效，你应该看到最终 ",[318,113295,103376],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113298,102493],{"id":102492},[151,113300,113301,113304,113307,113313,113319,113326,113336],{},[154,113302,113303],{},"修改目标点位置。",[154,113305,113306],{},"重新运行，观察最终 tip 是否变化。",[154,113308,113309,113310,113312],{},"把 gravity 改成 ",[318,113311,102734],{},"，观察控制是否变差。",[154,113314,111326,113315,111330,113317,28530],{},[318,113316,102303],{},[318,113318,409],{},[154,113320,102556,113321,102559,113323,113325],{},[318,113322,110741],{},[318,113324,107452],{},"，观察机械臂是否更难移动。",[154,113327,102556,113328,82675,113330,102559,113332,113335],{},[318,113329,103379],{},[318,113331,104291],{},[318,113333,113334],{},"0.2 0 0.6","，观察 reward 和 final tip。",[154,113337,113338],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113340,102598],{"id":102597},[292,113342,113344],{"id":113343},"site-not-found",[318,113345,113346],{},"site not found",[19,113348,113349,113350,101163,113353,28530],{},"检查 XML 中是否有 ",[318,113351,113352],{},"site name=\"tip\"",[318,113354,113355],{},"site name=\"target\"",[292,113357,113358],{"id":113358},"机械臂完全不动",[19,113360,102668],{},[151,113362,113363,113368,113371,113376],{},[154,113364,113365,113367],{},[318,113366,102303],{}," 是否为 2",[154,113369,113370],{},"actuator 是否引用正确 joint",[154,113372,113373,113375],{},[318,113374,101221],{}," 是否被赋值",[154,113377,113378,113379],{},"是否执行了 ",[318,113380,100830],{},[292,113382,113383],{"id":113383},"控制效果不好",[19,113385,113386],{},"正常。本章重点不是控制器最优，而是任务结构:",[312,113388,113391],{"className":113389,"code":113390,"language":5394,"meta":30},[5392],"obs → action → mj_step → reward → next_obs\n",[318,113392,113390],{"__ignoreMap":30},[292,113394,113396],{"id":113395},"tip-坐标不变化","tip 坐标不变化",[19,113398,102720],{},[151,113400,113401,113406,113414,113423],{},[154,113402,113403,113404,28530],{},"是否每步调用了 ",[318,113405,100830],{},[154,113407,113408,113409,101163,113411,28530],{},"是否写入了 ",[318,113410,106271],{},[318,113412,113413],{},"data.ctrl[1]",[154,113415,113416,113417,544,113420,28530],{},"actuator 是否正确引用 ",[318,113418,113419],{},"joint1",[318,113421,113422],{},"joint2",[154,113424,113425],{},"控制输入是否太小。",[292,113427,113428],{"id":113428},"目标点不会动",[19,113430,113431],{},"本章的 target 是固定 site：",[312,113433,113435],{"className":53212,"code":113434,"language":53214,"meta":30,"style":30},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[318,113436,113437],{"__ignoreMap":30},[321,113438,113439,113441,113443,113445,113447,113449,113451,113453,113456],{"class":323,"line":324},[321,113440,1242],{"class":331},[321,113442,103355],{"class":51445},[321,113444,15127],{"class":2169},[321,113446,377],{"class":331},[321,113448,112104],{"class":436},[321,113450,101251],{"class":2169},[321,113452,377],{"class":331},[321,113454,113455],{"class":436},"\"0.5 0 0.4\"",[321,113457,113458],{"class":331}," ...\u002F>\n",[19,113460,113461,113462,113464],{},"它直接挂在 ",[318,113463,101986],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[292,113466,113467],{"id":113467},"机械臂不像真实机械臂",[19,113469,113470],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113472,102752],{"id":102751},[19,113474,113475],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113477,113478],{},"核心公式：",[312,113480,113483],{"className":113481,"code":113482,"language":5394,"meta":30},[5392],"distance = ||tip - target||\nreward = -distance - action_cost\n",[318,113484,113482],{"__ignoreMap":30},[19,113486,113487],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5333,113489,113490],{},"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":30,"searchDepth":167,"depth":167,"links":113492},[113493,113494,113495,113500,113504,113505,113506,113514],{"id":100791,"depth":167,"text":100792},{"id":100914,"depth":167,"text":100915},{"id":101189,"depth":167,"text":101190,"children":113496},[113497,113498,113499],{"id":111696,"depth":200,"text":111697},{"id":111772,"depth":200,"text":111772},{"id":111802,"depth":200,"text":111803},{"id":101397,"depth":167,"text":101398,"children":113501},[113502,113503],{"id":101717,"depth":200,"text":101717},{"id":101853,"depth":200,"text":101853},{"id":102460,"depth":167,"text":102461},{"id":102492,"depth":167,"text":102493},{"id":102597,"depth":167,"text":102598,"children":113507},[113508,113509,113510,113511,113512,113513],{"id":113343,"depth":200,"text":113346},{"id":113358,"depth":200,"text":113358},{"id":113383,"depth":200,"text":113383},{"id":113395,"depth":200,"text":113396},{"id":113428,"depth":200,"text":113428},{"id":113467,"depth":200,"text":113467},{"id":102751,"depth":167,"text":102752},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111500,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113521,"title":113522,"body":113523,"description":30,"extension":249,"meta":116985,"navigation":251,"path":116986,"seo":116987,"stem":116988,"__hash__":116989},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113524,"toc":116956},[113525,113528,113530,113533,113536,113561,113564,113570,113573,113579,113581,113583,113607,113609,113627,113629,113672,113674,113701,113703,113706,113758,113761,113767,113776,113779,113817,113820,113859,113862,113870,113877,113880,113886,113888,113942,113949,113994,113997,114001,114017,114027,114029,115290,115292,115304,115306,115317,115319,115322,115343,115346,115349,115382,115388,115391,115424,115427,115430,115471,115476,115490,115493,115506,115511,115534,115536,115551,115561,115576,115583,115603,115618,115636,115639,115656,115664,115680,115686,115718,115731,115763,115773,115808,115822,115868,115882,115924,115935,115948,115954,115987,115990,116017,116027,116067,116077,116094,116101,116119,116122,116163,116176,116191,116194,116217,116220,116232,116235,116254,116259,116280,116283,116298,116301,116335,116347,116362,116365,116390,116393,116412,116415,116447,116450,116474,116480,116510,116517,116530,116533,116535,116537,116543,116546,116549,116561,116564,116566,116620,116622,116626,116632,116641,116644,116651,116653,116676,116679,116683,116685,116703,116709,116711,116744,116747,116753,116757,116760,116780,116785,116789,116796,116816,116821,116825,116828,116848,116851,116937,116941,116944,116950,116953],[10,113526,113522],{"id":113527},"_8gymnasium-风格强化学习接口基础",[14,113529,100792],{"id":100791},[19,113531,113532],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113534,113535],{},"你将实现:",[312,113537,113539],{"className":30523,"code":113538,"language":30525,"meta":30,"style":30},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[318,113540,113541,113551],{"__ignoreMap":30},[321,113542,113543,113546,113548],{"class":323,"line":324},[321,113544,113545],{"class":331},"obs, info ",[321,113547,377],{"class":327},[321,113549,113550],{"class":331}," env.reset()\n",[321,113552,113553,113556,113558],{"class":323,"line":167},[321,113554,113555],{"class":331},"obs, reward, terminated, truncated, info ",[321,113557,377],{"class":327},[321,113559,113560],{"class":331}," env.step(action)\n",[19,113562,113563],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113565,113566,113567,113569],{},"前面章节的代码都是“脚本式”的：在 ",[318,113568,102440],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113571,113572],{},"可以先记住 Gymnasium 环境的核心交互：",[312,113574,113577],{"className":113575,"code":113576,"language":5394,"meta":30},[5392],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[318,113578,113576],{"__ignoreMap":30},[14,113580,100915],{"id":100914},[19,113582,100918],{},[312,113584,113585],{"className":24030,"code":104533,"language":24032,"meta":30,"style":30},[318,113586,113587],{"__ignoreMap":30},[321,113588,113589,113591,113593,113595,113597,113599,113601,113603,113605],{"class":323,"line":324},[321,113590,24721],{"class":2169},[321,113592,26460],{"class":436},[321,113594,24042],{"class":436},[321,113596,26545],{"class":380},[321,113598,104548],{"class":436},[321,113600,100943],{"class":436},[321,113602,102646],{"class":436},[321,113604,100959],{"class":436},[321,113606,104557],{"class":436},[19,113608,102964],{},[312,113610,113612],{"className":24030,"code":113611,"language":24032,"meta":30,"style":30},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[318,113613,113614],{"__ignoreMap":30},[321,113615,113616,113618,113620,113622,113624],{"class":323,"line":324},[321,113617,24039],{"class":2169},[321,113619,24042],{"class":436},[321,113621,101075],{"class":436},[321,113623,107856],{"class":436},[321,113625,113626],{"class":436}," gymnasium\n",[19,113628,102981],{},[312,113630,113632],{"className":24030,"code":113631,"language":24032,"meta":30,"style":30},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[318,113633,113634,113651,113660],{"__ignoreMap":30},[321,113635,113636,113638,113640,113642,113645,113647,113649],{"class":323,"line":324},[321,113637,30475],{"class":2169},[321,113639,29321],{"class":436},[321,113641,25260],{"class":380},[321,113643,113644],{"class":436}," mujoco-gym-api",[321,113646,101120],{"class":436},[321,113648,101123],{"class":380},[321,113650,101126],{"class":380},[321,113652,113653,113655,113657],{"class":323,"line":167},[321,113654,30475],{"class":2169},[321,113656,101133],{"class":436},[321,113658,113659],{"class":436}," mujoco-gym-api\n",[321,113661,113662,113664,113666,113668,113670],{"class":323,"line":200},[321,113663,24039],{"class":2169},[321,113665,24042],{"class":436},[321,113667,101075],{"class":436},[321,113669,107856],{"class":436},[321,113671,113626],{"class":436},[19,113673,101149],{},[151,113675,113676,113686,113689,113695],{},[154,113677,113678,113679,113682,113683,28530],{},"本章使用 ",[318,113680,113681],{},"gymnasium","，不是旧版 ",[318,113684,113685],{},"gym",[154,113687,113688],{},"Gymnasium API 与旧 Gym API 有差异。",[154,113690,113691,113692,28530],{},"旧 Gym 常见返回值是 4 个: ",[318,113693,113694],{},"obs, reward, done, info",[154,113696,113697,113698,28530],{},"Gymnasium 返回值是 5 个: ",[318,113699,113700],{},"obs, reward, terminated, truncated, info",[14,113702,101190],{"id":101189},[19,113704,113705],{},"强化学习环境接口包含:",[469,113707,113708,113717],{},[472,113709,113710],{},[475,113711,113712,113715],{},[478,113713,113714],{"align":23944},"方法",[478,113716,102841],{"align":23944},[516,113718,113719,113729,113739,113749],{},[475,113720,113721,113726],{},[521,113722,113723],{"align":23944},[318,113724,113725],{},"reset()",[521,113727,113728],{"align":23944},"重置环境",[475,113730,113731,113736],{},[521,113732,113733],{"align":23944},[318,113734,113735],{},"step(action)",[521,113737,113738],{"align":23944},"执行动作",[475,113740,113741,113746],{},[521,113742,113743],{"align":23944},[318,113744,113745],{},"observation_space",[521,113747,113748],{"align":23944},"观测空间",[475,113750,113751,113756],{},[521,113752,113753],{"align":23944},[318,113754,113755],{},"action_space",[521,113757,23862],{"align":23944},[19,113759,113760],{},"一个最小环境需要完成:",[312,113762,113765],{"className":113763,"code":113764,"language":5394,"meta":30},[5392],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[318,113766,113764],{"__ignoreMap":30},[292,113768,113770,101163,113773,104783],{"id":113769},"terminated-和-truncated-的区别",[318,113771,113772],{},"terminated",[318,113774,113775],{},"truncated",[19,113777,113778],{},"Gymnasium 把“结束”拆成两个概念：",[469,113780,113781,113791],{},[472,113782,113783],{},[475,113784,113785,113787,113789],{},[478,113786,104719],{"align":23944},[478,113788,100845],{"align":23944},[478,113790,21394],{"align":23944},[516,113792,113793,113805],{},[475,113794,113795,113799,113802],{},[521,113796,113797],{"align":23944},[318,113798,113772],{},[521,113800,113801],{"align":23944},"任务自然结束",[521,113803,113804],{"align":23944},"机械臂到达目标、机器人摔倒",[475,113806,113807,113811,113814],{},[521,113808,113809],{"align":23944},[318,113810,113775],{},[521,113812,113813],{"align":23944},"因外部限制截断",[521,113815,113816],{"align":23944},"达到最大步数、时间限制",[19,113818,113819],{},"本章中：",[312,113821,113823],{"className":30523,"code":113822,"language":30525,"meta":30,"style":30},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[318,113824,113825,113840],{"__ignoreMap":30},[321,113826,113827,113830,113832,113835,113837],{"class":323,"line":324},[321,113828,113829],{"class":331},"terminated ",[321,113831,377],{"class":327},[321,113833,113834],{"class":331}," dist ",[321,113836,1242],{"class":327},[321,113838,113839],{"class":380}," 0.05\n",[321,113841,113842,113845,113847,113849,113852,113854,113856],{"class":323,"line":167},[321,113843,113844],{"class":331},"truncated ",[321,113846,377],{"class":327},[321,113848,39018],{"class":380},[321,113850,113851],{"class":331},".steps ",[321,113853,1916],{"class":327},[321,113855,39018],{"class":380},[321,113857,113858],{"class":331},".max_steps\n",[19,113860,113861],{},"也就是：",[151,113863,113864,113867],{},[154,113865,113866],{},"末端距离目标小于 0.05，任务成功结束。",[154,113868,113869],{},"步数超过上限，episode 被截断。",[292,113871,113873,101163,113875],{"id":113872},"observation_space-和-action_space",[318,113874,113745],{},[318,113876,113755],{},[19,113878,113879],{},"这两个对象告诉算法：",[312,113881,113884],{"className":113882,"code":113883,"language":5394,"meta":30},[5392],"观测长什么样\n动作允许多大\n",[318,113885,113883],{"__ignoreMap":30},[19,113887,14840],{},[312,113889,113891],{"className":30523,"code":113890,"language":30525,"meta":30,"style":30},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[318,113892,113893],{"__ignoreMap":30},[321,113894,113895,113897,113900,113902,113905,113908,113911,113913,113915,113918,113920,113922,113924,113926,113928,113930,113932,113935,113937,113939],{"class":323,"line":324},[321,113896,30968],{"class":380},[321,113898,113899],{"class":331},".action_space ",[321,113901,377],{"class":327},[321,113903,113904],{"class":331}," spaces.Box(",[321,113906,113907],{"class":5423},"low",[321,113909,113910],{"class":327},"=-",[321,113912,102548],{"class":380},[321,113914,12642],{"class":331},[321,113916,113917],{"class":5423},"high",[321,113919,377],{"class":327},[321,113921,102548],{"class":380},[321,113923,12642],{"class":331},[321,113925,96108],{"class":5423},[321,113927,377],{"class":327},[321,113929,332],{"class":331},[321,113931,409],{"class":380},[321,113933,113934],{"class":331},",), ",[321,113936,93645],{"class":5423},[321,113938,377],{"class":327},[321,113940,113941],{"class":331},"np.float32)\n",[19,113943,113944,113945,113948],{},"表示动作是 2 维数组，每个值都在 ",[318,113946,113947],{},"[-1, 1]"," 范围内。",[312,113950,113952],{"className":30523,"code":113951,"language":30525,"meta":30,"style":30},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[318,113953,113954],{"__ignoreMap":30},[321,113955,113956,113958,113961,113963,113965,113967,113969,113972,113974,113976,113978,113980,113982,113984,113986,113988,113990,113992],{"class":323,"line":324},[321,113957,30968],{"class":380},[321,113959,113960],{"class":331},".observation_space ",[321,113962,377],{"class":327},[321,113964,113904],{"class":331},[321,113966,113907],{"class":5423},[321,113968,113910],{"class":327},[321,113970,113971],{"class":331},"np.inf, ",[321,113973,113917],{"class":5423},[321,113975,377],{"class":327},[321,113977,113971],{"class":331},[321,113979,96108],{"class":5423},[321,113981,377],{"class":327},[321,113983,332],{"class":331},[321,113985,778],{"class":380},[321,113987,113934],{"class":331},[321,113989,93645],{"class":5423},[321,113991,377],{"class":327},[321,113993,113941],{"class":331},[19,113995,113996],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[292,113998,114000],{"id":113999},"frame_skip-是什么","frame_skip 是什么",[312,114002,114004],{"className":30523,"code":114003,"language":30525,"meta":30,"style":30},"self.frame_skip = 5\n",[318,114005,114006],{"__ignoreMap":30},[321,114007,114008,114010,114013,114015],{"class":323,"line":324},[321,114009,30968],{"class":380},[321,114011,114012],{"class":331},".frame_skip ",[321,114014,377],{"class":327},[321,114016,54572],{"class":380},[19,114018,114019,114020,114023,114024,114026],{},"表示外部调用一次 ",[318,114021,114022],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[318,114025,101360],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114028,101398],{"id":101397},[312,114030,114032],{"className":30523,"code":114031,"language":30525,"meta":30,"style":30},"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",[318,114033,114034,114046,114052,114062,114073,114077,114081,114089,114094,114098,114102,114106,114110,114114,114118,114122,114127,114131,114135,114139,114144,114148,114152,114156,114160,114164,114168,114172,114176,114180,114184,114188,114192,114196,114214,114229,114233,114246,114256,114271,114288,114292,114313,114332,114357,114371,114375,114385,114397,114407,114411,114453,114491,114495,114505,114521,114536,114555,114562,114566,114579,114594,114609,114622,114641,114657,114661,114702,114717,114732,114736,114775,114786,114799,114803,114813,114822,114826,114836,114851,114869,114873,114884,114901,114914,114918,114928,114932,114943,114954,114958,114972,114986,115002,115006,115019,115036,115051,115058,115062,115066,115078,115088,115106,115118,115130,115134,115142,115158,115167,115176,115184,115226,115239,115244,115248,115266,115270,115274,115286],{"__ignoreMap":30},[321,114035,114036,114038,114041,114043],{"class":323,"line":324},[321,114037,30537],{"class":327},[321,114039,114040],{"class":331}," gymnasium ",[321,114042,31528],{"class":327},[321,114044,114045],{"class":331}," gym\n",[321,114047,114048,114050],{"class":323,"line":167},[321,114049,30537],{"class":327},[321,114051,101446],{"class":331},[321,114053,114054,114056,114058,114060],{"class":323,"line":200},[321,114055,30537],{"class":327},[321,114057,31525],{"class":331},[321,114059,31528],{"class":327},[321,114061,31531],{"class":331},[321,114063,114064,114066,114068,114070],{"class":323,"line":1401},[321,114065,30882],{"class":327},[321,114067,114040],{"class":331},[321,114069,30537],{"class":327},[321,114071,114072],{"class":331}," spaces\n",[321,114074,114075],{"class":323,"line":1407},[321,114076,2606],{"emptyLinePlaceholder":251},[321,114078,114079],{"class":323,"line":1421},[321,114080,2606],{"emptyLinePlaceholder":251},[321,114082,114083,114085,114087],{"class":323,"line":1427},[321,114084,101459],{"class":380},[321,114086,13771],{"class":327},[321,114088,101464],{"class":436},[321,114090,114091],{"class":323,"line":1518},[321,114092,114093],{"class":436},"\u003Cmujoco model=\"gym_reacher\">\n",[321,114095,114096],{"class":323,"line":1524},[321,114097,111883],{"class":436},[321,114099,114100],{"class":323,"line":1536},[321,114101,2606],{"emptyLinePlaceholder":251},[321,114103,114104],{"class":323,"line":1818},[321,114105,101483],{"class":436},[321,114107,114108],{"class":323,"line":1823},[321,114109,111901],{"class":436},[321,114111,114112],{"class":323,"line":1829},[321,114113,2606],{"emptyLinePlaceholder":251},[321,114115,114116],{"class":323,"line":1834},[321,114117,111910],{"class":436},[321,114119,114120],{"class":323,"line":1848},[321,114121,111915],{"class":436},[321,114123,114124],{"class":323,"line":1853},[321,114125,114126],{"class":436},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[321,114128,114129],{"class":323,"line":1859},[321,114130,2606],{"emptyLinePlaceholder":251},[321,114132,114133],{"class":323,"line":1880},[321,114134,111929],{"class":436},[321,114136,114137],{"class":323,"line":1885},[321,114138,111934],{"class":436},[321,114140,114141],{"class":323,"line":1899},[321,114142,114143],{"class":436},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[321,114145,114146],{"class":323,"line":1904},[321,114147,111944],{"class":436},[321,114149,114150],{"class":323,"line":1933},[321,114151,106583],{"class":436},[321,114153,114154],{"class":323,"line":1938},[321,114155,101512],{"class":436},[321,114157,114158],{"class":323,"line":1955},[321,114159,101517],{"class":436},[321,114161,114162],{"class":323,"line":1960},[321,114163,2606],{"emptyLinePlaceholder":251},[321,114165,114166],{"class":323,"line":1965},[321,114167,106600],{"class":436},[321,114169,114170],{"class":323,"line":1970},[321,114171,111969],{"class":436},[321,114173,114174],{"class":323,"line":1984},[321,114175,111974],{"class":436},[321,114177,114178],{"class":323,"line":1989},[321,114179,106610],{"class":436},[321,114181,114182],{"class":323,"line":2783},[321,114183,101522],{"class":436},[321,114185,114186],{"class":323,"line":2797},[321,114187,95843],{"class":436},[321,114189,114190],{"class":323,"line":2805},[321,114191,2606],{"emptyLinePlaceholder":251},[321,114193,114194],{"class":323,"line":2810},[321,114195,2606],{"emptyLinePlaceholder":251},[321,114197,114198,114200,114203,114205,114207,114209,114212],{"class":323,"line":2816},[321,114199,14901],{"class":327},[321,114201,114202],{"class":2169}," ReacherEnv",[321,114204,332],{"class":331},[321,114206,113685],{"class":2169},[321,114208,890],{"class":331},[321,114210,114211],{"class":2169},"Env",[321,114213,30931],{"class":331},[321,114215,114216,114219,114221,114223,114226],{"class":323,"line":2822},[321,114217,114218],{"class":331},"    metadata ",[321,114220,377],{"class":327},[321,114222,4654],{"class":331},[321,114224,114225],{"class":436},"\"render_modes\"",[321,114227,114228],{"class":331},": []}\n",[321,114230,114231],{"class":323,"line":2827},[321,114232,2606],{"emptyLinePlaceholder":251},[321,114234,114235,114237,114239,114242,114244],{"class":323,"line":8155},[321,114236,30946],{"class":327},[321,114238,30949],{"class":380},[321,114240,114241],{"class":331},"(self) -> ",[321,114243,95831],{"class":380},[321,114245,3945],{"class":331},[321,114247,114248,114250,114252,114254],{"class":323,"line":8179},[321,114249,30962],{"class":380},[321,114251,17468],{"class":331},[321,114253,30974],{"class":380},[321,114255,2182],{"class":331},[321,114257,114258,114260,114263,114265,114267,114269],{"class":323,"line":8184},[321,114259,30990],{"class":380},[321,114261,114262],{"class":331},".model ",[321,114264,377],{"class":327},[321,114266,101557],{"class":331},[321,114268,101459],{"class":380},[321,114270,338],{"class":331},[321,114272,114273,114275,114278,114280,114283,114285],{"class":323,"line":8190},[321,114274,30990],{"class":380},[321,114276,114277],{"class":331},".data ",[321,114279,377],{"class":327},[321,114281,114282],{"class":331}," mujoco.MjData(",[321,114284,30968],{"class":380},[321,114286,114287],{"class":331},".model)\n",[321,114289,114290],{"class":323,"line":8217},[321,114291,2606],{"emptyLinePlaceholder":251},[321,114293,114294,114296,114299,114301,114304,114306,114309,114311],{"class":323,"line":8222},[321,114295,30990],{"class":380},[321,114297,114298],{"class":331},".tip_site_id ",[321,114300,377],{"class":327},[321,114302,114303],{"class":331}," mujoco.mj_name2id(",[321,114305,30968],{"class":380},[321,114307,114308],{"class":331},".model, mujoco.mjtObj.mjOBJ_SITE, ",[321,114310,111681],{"class":436},[321,114312,338],{"class":331},[321,114314,114315,114317,114320,114322,114324,114326,114328,114330],{"class":323,"line":8228},[321,114316,30990],{"class":380},[321,114318,114319],{"class":331},".target_site_id ",[321,114321,377],{"class":327},[321,114323,114303],{"class":331},[321,114325,30968],{"class":380},[321,114327,114308],{"class":331},[321,114329,112104],{"class":436},[321,114331,338],{"class":331},[321,114333,114334,114336,114338,114340,114342,114344,114347,114349,114351,114353,114355],{"class":323,"line":8240},[321,114335,2703],{"class":327},[321,114337,39018],{"class":380},[321,114339,114298],{"class":331},[321,114341,1242],{"class":327},[321,114343,4299],{"class":380},[321,114345,114346],{"class":327}," or",[321,114348,39018],{"class":380},[321,114350,114319],{"class":331},[321,114352,1242],{"class":327},[321,114354,4299],{"class":380},[321,114356,3945],{"class":331},[321,114358,114359,114362,114364,114366,114369],{"class":323,"line":8252},[321,114360,114361],{"class":327},"            raise",[321,114363,103580],{"class":380},[321,114365,332],{"class":331},[321,114367,114368],{"class":436},"\"required sites not found\"",[321,114370,338],{"class":331},[321,114372,114373],{"class":323,"line":8264},[321,114374,2606],{"emptyLinePlaceholder":251},[321,114376,114377,114379,114381,114383],{"class":323,"line":9923},[321,114378,30990],{"class":380},[321,114380,114012],{"class":331},[321,114382,377],{"class":327},[321,114384,54572],{"class":380},[321,114386,114387,114389,114392,114394],{"class":323,"line":9948},[321,114388,30990],{"class":380},[321,114390,114391],{"class":331},".max_steps ",[321,114393,377],{"class":327},[321,114395,114396],{"class":380}," 200\n",[321,114398,114399,114401,114403,114405],{"class":323,"line":9971},[321,114400,30990],{"class":380},[321,114402,113851],{"class":331},[321,114404,377],{"class":327},[321,114406,47478],{"class":380},[321,114408,114409],{"class":323,"line":9995},[321,114410,2606],{"emptyLinePlaceholder":251},[321,114412,114413,114415,114417,114419,114421,114423,114425,114427,114429,114431,114433,114435,114437,114439,114441,114443,114445,114447,114449,114451],{"class":323,"line":10000},[321,114414,30990],{"class":380},[321,114416,113899],{"class":331},[321,114418,377],{"class":327},[321,114420,113904],{"class":331},[321,114422,113907],{"class":5423},[321,114424,113910],{"class":327},[321,114426,102548],{"class":380},[321,114428,12642],{"class":331},[321,114430,113917],{"class":5423},[321,114432,377],{"class":327},[321,114434,102548],{"class":380},[321,114436,12642],{"class":331},[321,114438,96108],{"class":5423},[321,114440,377],{"class":327},[321,114442,332],{"class":331},[321,114444,409],{"class":380},[321,114446,113934],{"class":331},[321,114448,93645],{"class":5423},[321,114450,377],{"class":327},[321,114452,113941],{"class":331},[321,114454,114455,114457,114459,114461,114463,114465,114467,114469,114471,114473,114475,114477,114479,114481,114483,114485,114487,114489],{"class":323,"line":10005},[321,114456,30990],{"class":380},[321,114458,113960],{"class":331},[321,114460,377],{"class":327},[321,114462,113904],{"class":331},[321,114464,113907],{"class":5423},[321,114466,113910],{"class":327},[321,114468,113971],{"class":331},[321,114470,113917],{"class":5423},[321,114472,377],{"class":327},[321,114474,113971],{"class":331},[321,114476,96108],{"class":5423},[321,114478,377],{"class":327},[321,114480,332],{"class":331},[321,114482,778],{"class":380},[321,114484,113934],{"class":331},[321,114486,93645],{"class":5423},[321,114488,377],{"class":327},[321,114490,113941],{"class":331},[321,114492,114493],{"class":323,"line":10010},[321,114494,2606],{"emptyLinePlaceholder":251},[321,114496,114497,114499,114502],{"class":323,"line":10019},[321,114498,30946],{"class":327},[321,114500,114501],{"class":2169}," _get_obs",[321,114503,114504],{"class":331},"(self) -> np.ndarray:\n",[321,114506,114507,114509,114511,114513,114516,114518],{"class":323,"line":10024},[321,114508,112282],{"class":331},[321,114510,377],{"class":327},[321,114512,39018],{"class":380},[321,114514,114515],{"class":331},".data.site_xpos[",[321,114517,30968],{"class":380},[321,114519,114520],{"class":331},".tip_site_id].copy()\n",[321,114522,114523,114525,114527,114529,114531,114533],{"class":323,"line":10030},[321,114524,112295],{"class":331},[321,114526,377],{"class":327},[321,114528,39018],{"class":380},[321,114530,114515],{"class":331},[321,114532,30968],{"class":380},[321,114534,114535],{"class":331},".target_site_id].copy()\n",[321,114537,114538,114540,114542,114545,114547,114550,114552],{"class":323,"line":10051},[321,114539,110327],{"class":331},[321,114541,377],{"class":327},[321,114543,114544],{"class":331}," np.concatenate([",[321,114546,30968],{"class":380},[321,114548,114549],{"class":331},".data.qpos.copy(), ",[321,114551,30968],{"class":380},[321,114553,114554],{"class":331},".data.qvel.copy(), tip, target])\n",[321,114556,114557,114559],{"class":323,"line":10057},[321,114558,14959],{"class":327},[321,114560,114561],{"class":331}," obs.astype(np.float32)\n",[321,114563,114564],{"class":323,"line":10071},[321,114565,2606],{"emptyLinePlaceholder":251},[321,114567,114568,114570,114573,114575,114577],{"class":323,"line":10077},[321,114569,30946],{"class":327},[321,114571,114572],{"class":2169}," _get_reward",[321,114574,114241],{"class":331},[321,114576,371],{"class":380},[321,114578,3945],{"class":331},[321,114580,114581,114583,114585,114587,114589,114591],{"class":323,"line":10104},[321,114582,112282],{"class":331},[321,114584,377],{"class":327},[321,114586,39018],{"class":380},[321,114588,114515],{"class":331},[321,114590,30968],{"class":380},[321,114592,114593],{"class":331},".tip_site_id]\n",[321,114595,114596,114598,114600,114602,114604,114606],{"class":323,"line":10113},[321,114597,112295],{"class":331},[321,114599,377],{"class":327},[321,114601,39018],{"class":380},[321,114603,114515],{"class":331},[321,114605,30968],{"class":380},[321,114607,114608],{"class":331},".target_site_id]\n",[321,114610,114611,114614,114616,114618,114620],{"class":323,"line":10119},[321,114612,114613],{"class":331},"        dist ",[321,114615,377],{"class":327},[321,114617,111746],{"class":331},[321,114619,864],{"class":327},[321,114621,111751],{"class":331},[321,114623,114624,114627,114629,114631,114633,114636,114638],{"class":323,"line":10127},[321,114625,114626],{"class":331},"        control_cost ",[321,114628,377],{"class":327},[321,114630,112182],{"class":380},[321,114632,6725],{"class":327},[321,114634,114635],{"class":331}," np.sum(np.square(",[321,114637,30968],{"class":380},[321,114639,114640],{"class":331},".data.ctrl))\n",[321,114642,114643,114645,114647,114649,114651,114653,114655],{"class":323,"line":10132},[321,114644,14959],{"class":327},[321,114646,109942],{"class":380},[321,114648,332],{"class":331},[321,114650,864],{"class":327},[321,114652,111741],{"class":331},[321,114654,864],{"class":327},[321,114656,112204],{"class":331},[321,114658,114659],{"class":323,"line":16811},[321,114660,2606],{"emptyLinePlaceholder":251},[321,114662,114663,114665,114668,114671,114673,114676,114678,114680,114682,114684,114686,114689,114692,114694,114696,114698,114700],{"class":323,"line":16817},[321,114664,30946],{"class":327},[321,114666,114667],{"class":2169}," reset",[321,114669,114670],{"class":331},"(self, ",[321,114672,787],{"class":327},[321,114674,114675],{"class":331},", seed: ",[321,114677,335],{"class":380},[321,114679,25254],{"class":327},[321,114681,39078],{"class":380},[321,114683,13771],{"class":327},[321,114685,39078],{"class":380},[321,114687,114688],{"class":331},", options: ",[321,114690,114691],{"class":380},"dict",[321,114693,25254],{"class":327},[321,114695,39078],{"class":380},[321,114697,13771],{"class":327},[321,114699,39078],{"class":380},[321,114701,30931],{"class":331},[321,114703,114704,114706,114709,114712,114714],{"class":323,"line":16840},[321,114705,30962],{"class":380},[321,114707,114708],{"class":331},"().reset(",[321,114710,114711],{"class":5423},"seed",[321,114713,377],{"class":327},[321,114715,114716],{"class":331},"seed)\n",[321,114718,114719,114722,114724,114727,114729],{"class":323,"line":16846},[321,114720,114721],{"class":331},"        mujoco.mj_resetData(",[321,114723,30968],{"class":380},[321,114725,114726],{"class":331},".model, ",[321,114728,30968],{"class":380},[321,114730,114731],{"class":331},".data)\n",[321,114733,114734],{"class":323,"line":16869},[321,114735,2606],{"emptyLinePlaceholder":251},[321,114737,114738,114740,114743,114745,114747,114750,114752,114754,114756,114758,114760,114762,114764,114766,114768,114770,114772],{"class":323,"line":16883},[321,114739,30990],{"class":380},[321,114741,114742],{"class":331},".data.qpos[:] ",[321,114744,377],{"class":327},[321,114746,39018],{"class":380},[321,114748,114749],{"class":331},".np_random.uniform(",[321,114751,113907],{"class":5423},[321,114753,113910],{"class":327},[321,114755,86355],{"class":380},[321,114757,12642],{"class":331},[321,114759,113917],{"class":5423},[321,114761,377],{"class":327},[321,114763,86355],{"class":380},[321,114765,12642],{"class":331},[321,114767,31641],{"class":5423},[321,114769,377],{"class":327},[321,114771,30968],{"class":380},[321,114773,114774],{"class":331},".model.nq)\n",[321,114776,114777,114779,114782,114784],{"class":323,"line":16903},[321,114778,30990],{"class":380},[321,114780,114781],{"class":331},".data.qvel[:] ",[321,114783,377],{"class":327},[321,114785,104906],{"class":380},[321,114787,114788,114791,114793,114795,114797],{"class":323,"line":16909},[321,114789,114790],{"class":331},"        mujoco.mj_forward(",[321,114792,30968],{"class":380},[321,114794,114726],{"class":331},[321,114796,30968],{"class":380},[321,114798,114731],{"class":331},[321,114800,114801],{"class":323,"line":16920},[321,114802,2606],{"emptyLinePlaceholder":251},[321,114804,114805,114807,114809,114811],{"class":323,"line":16943},[321,114806,30990],{"class":380},[321,114808,113851],{"class":331},[321,114810,377],{"class":327},[321,114812,47478],{"class":380},[321,114814,114815,114817,114819],{"class":323,"line":16965},[321,114816,14959],{"class":327},[321,114818,39018],{"class":380},[321,114820,114821],{"class":331},"._get_obs(), {}\n",[321,114823,114824],{"class":323,"line":16970},[321,114825,2606],{"emptyLinePlaceholder":251},[321,114827,114828,114830,114833],{"class":323,"line":16976},[321,114829,30946],{"class":327},[321,114831,114832],{"class":2169}," step",[321,114834,114835],{"class":331},"(self, action):\n",[321,114837,114838,114840,114842,114845,114847,114849],{"class":323,"line":16990},[321,114839,110367],{"class":331},[321,114841,377],{"class":327},[321,114843,114844],{"class":331}," np.asarray(action, ",[321,114846,93645],{"class":5423},[321,114848,377],{"class":327},[321,114850,113941],{"class":331},[321,114852,114853,114855,114857,114859,114861,114864,114866],{"class":323,"line":17003},[321,114854,110367],{"class":331},[321,114856,377],{"class":327},[321,114858,107592],{"class":331},[321,114860,30968],{"class":380},[321,114862,114863],{"class":331},".action_space.low, ",[321,114865,30968],{"class":380},[321,114867,114868],{"class":331},".action_space.high)\n",[321,114870,114871],{"class":323,"line":17008},[321,114872,2606],{"emptyLinePlaceholder":251},[321,114874,114875,114877,114880,114882],{"class":323,"line":17022},[321,114876,30990],{"class":380},[321,114878,114879],{"class":331},".data.ctrl[:] ",[321,114881,377],{"class":327},[321,114883,107615],{"class":331},[321,114885,114886,114888,114890,114892,114894,114896,114898],{"class":323,"line":17027},[321,114887,3609],{"class":327},[321,114889,101646],{"class":331},[321,114891,26188],{"class":327},[321,114893,32588],{"class":380},[321,114895,332],{"class":331},[321,114897,30968],{"class":380},[321,114899,114900],{"class":331},".frame_skip):\n",[321,114902,114903,114906,114908,114910,114912],{"class":323,"line":17033},[321,114904,114905],{"class":331},"            mujoco.mj_step(",[321,114907,30968],{"class":380},[321,114909,114726],{"class":331},[321,114911,30968],{"class":380},[321,114913,114731],{"class":331},[321,114915,114916],{"class":323,"line":17038},[321,114917,2606],{"emptyLinePlaceholder":251},[321,114919,114920,114922,114924,114926],{"class":323,"line":17052},[321,114921,30990],{"class":380},[321,114923,113851],{"class":331},[321,114925,9684],{"class":327},[321,114927,55844],{"class":380},[321,114929,114930],{"class":323,"line":17057},[321,114931,2606],{"emptyLinePlaceholder":251},[321,114933,114934,114936,114938,114940],{"class":323,"line":17062},[321,114935,110327],{"class":331},[321,114937,377],{"class":327},[321,114939,39018],{"class":380},[321,114941,114942],{"class":331},"._get_obs()\n",[321,114944,114945,114947,114949,114951],{"class":323,"line":17076},[321,114946,110432],{"class":331},[321,114948,377],{"class":327},[321,114950,39018],{"class":380},[321,114952,114953],{"class":331},"._get_reward()\n",[321,114955,114956],{"class":323,"line":17088},[321,114957,2606],{"emptyLinePlaceholder":251},[321,114959,114960,114962,114964,114966,114968,114970],{"class":323,"line":17093},[321,114961,112282],{"class":331},[321,114963,377],{"class":327},[321,114965,39018],{"class":380},[321,114967,114515],{"class":331},[321,114969,30968],{"class":380},[321,114971,114593],{"class":331},[321,114973,114974,114976,114978,114980,114982,114984],{"class":323,"line":17106},[321,114975,112295],{"class":331},[321,114977,377],{"class":327},[321,114979,39018],{"class":380},[321,114981,114515],{"class":331},[321,114983,30968],{"class":380},[321,114985,114608],{"class":331},[321,114987,114988,114990,114992,114994,114997,114999],{"class":323,"line":17111},[321,114989,114613],{"class":331},[321,114991,377],{"class":327},[321,114993,109942],{"class":380},[321,114995,114996],{"class":331},"(np.linalg.norm(tip ",[321,114998,864],{"class":327},[321,115000,115001],{"class":331}," target))\n",[321,115003,115004],{"class":323,"line":17116},[321,115005,2606],{"emptyLinePlaceholder":251},[321,115007,115008,115011,115013,115015,115017],{"class":323,"line":17121},[321,115009,115010],{"class":331},"        terminated ",[321,115012,377],{"class":327},[321,115014,113834],{"class":331},[321,115016,1242],{"class":327},[321,115018,113839],{"class":380},[321,115020,115021,115024,115026,115028,115030,115032,115034],{"class":323,"line":17134},[321,115022,115023],{"class":331},"        truncated ",[321,115025,377],{"class":327},[321,115027,39018],{"class":380},[321,115029,113851],{"class":331},[321,115031,1916],{"class":327},[321,115033,39018],{"class":380},[321,115035,113858],{"class":331},[321,115037,115038,115041,115043,115045,115048],{"class":323,"line":17139},[321,115039,115040],{"class":331},"        info ",[321,115042,377],{"class":327},[321,115044,4654],{"class":331},[321,115046,115047],{"class":436},"\"distance\"",[321,115049,115050],{"class":331},": dist}\n",[321,115052,115053,115055],{"class":323,"line":32778},[321,115054,14959],{"class":327},[321,115056,115057],{"class":331}," obs, reward, terminated, truncated, info\n",[321,115059,115060],{"class":323,"line":32784},[321,115061,2606],{"emptyLinePlaceholder":251},[321,115063,115064],{"class":323,"line":32790},[321,115065,2606],{"emptyLinePlaceholder":251},[321,115067,115068,115070,115072,115074,115076],{"class":323,"line":32796},[321,115069,32092],{"class":327},[321,115071,2179],{"class":2169},[321,115073,101543],{"class":331},[321,115075,95831],{"class":380},[321,115077,3945],{"class":331},[321,115079,115080,115083,115085],{"class":323,"line":32802},[321,115081,115082],{"class":331},"    env ",[321,115084,377],{"class":327},[321,115086,115087],{"class":331}," ReacherEnv()\n",[321,115089,115090,115093,115095,115098,115100,115102,115104],{"class":323,"line":32813},[321,115091,115092],{"class":331},"    obs, info ",[321,115094,377],{"class":327},[321,115096,115097],{"class":331}," env.reset(",[321,115099,114711],{"class":5423},[321,115101,377],{"class":327},[321,115103,523],{"class":380},[321,115105,338],{"class":331},[321,115107,115108,115110,115112,115115],{"class":323,"line":32819},[321,115109,31444],{"class":380},[321,115111,332],{"class":331},[321,115113,115114],{"class":436},"\"initial obs shape:\"",[321,115116,115117],{"class":331},", obs.shape)\n",[321,115119,115120,115122,115124,115127],{"class":323,"line":32839},[321,115121,31444],{"class":380},[321,115123,332],{"class":331},[321,115125,115126],{"class":436},"\"initial info:\"",[321,115128,115129],{"class":331},", info)\n",[321,115131,115132],{"class":323,"line":32845},[321,115133,2606],{"emptyLinePlaceholder":251},[321,115135,115136,115138,115140],{"class":323,"line":32856},[321,115137,110298],{"class":331},[321,115139,377],{"class":327},[321,115141,104906],{"class":380},[321,115143,115144,115146,115148,115150,115152,115154,115156],{"class":323,"line":32862},[321,115145,3407],{"class":327},[321,115147,31761],{"class":331},[321,115149,26188],{"class":327},[321,115151,32588],{"class":380},[321,115153,332],{"class":331},[321,115155,1032],{"class":380},[321,115157,30931],{"class":331},[321,115159,115160,115162,115164],{"class":323,"line":32868},[321,115161,110367],{"class":331},[321,115163,377],{"class":327},[321,115165,115166],{"class":331}," env.action_space.sample()\n",[321,115168,115169,115172,115174],{"class":323,"line":32874},[321,115170,115171],{"class":331},"        obs, reward, terminated, truncated, info ",[321,115173,377],{"class":327},[321,115175,113560],{"class":331},[321,115177,115178,115180,115182],{"class":323,"line":32880},[321,115179,110442],{"class":331},[321,115181,9684],{"class":327},[321,115183,110447],{"class":331},[321,115185,115186,115188,115190,115192,115194,115197,115199,115201,115204,115206,115208,115211,115213,115215,115218,115220,115222,115224],{"class":323,"line":32886},[321,115187,32596],{"class":380},[321,115189,332],{"class":331},[321,115191,110476],{"class":436},[321,115193,110479],{"class":331},[321,115195,115196],{"class":436},"\"reward:\"",[321,115198,12642],{"class":331},[321,115200,32163],{"class":380},[321,115202,115203],{"class":331},"(reward, ",[321,115205,403],{"class":380},[321,115207,110490],{"class":331},[321,115209,115210],{"class":436},"\"distance:\"",[321,115212,12642],{"class":331},[321,115214,32163],{"class":380},[321,115216,115217],{"class":331},"(info[",[321,115219,115047],{"class":436},[321,115221,112347],{"class":331},[321,115223,403],{"class":380},[321,115225,30642],{"class":331},[321,115227,115228,115230,115233,115236],{"class":323,"line":32892},[321,115229,2703],{"class":327},[321,115231,115232],{"class":331}," terminated ",[321,115234,115235],{"class":327},"or",[321,115237,115238],{"class":331}," truncated:\n",[321,115240,115241],{"class":323,"line":32898},[321,115242,115243],{"class":327},"            break\n",[321,115245,115246],{"class":323,"line":32918},[321,115247,2606],{"emptyLinePlaceholder":251},[321,115249,115250,115252,115254,115256,115258,115260,115262,115264],{"class":323,"line":32924},[321,115251,31444],{"class":380},[321,115253,332],{"class":331},[321,115255,110521],{"class":436},[321,115257,12642],{"class":331},[321,115259,32163],{"class":380},[321,115261,110528],{"class":331},[321,115263,403],{"class":380},[321,115265,30642],{"class":331},[321,115267,115268],{"class":323,"line":32940},[321,115269,2606],{"emptyLinePlaceholder":251},[321,115271,115272],{"class":323,"line":32946},[321,115273,2606],{"emptyLinePlaceholder":251},[321,115275,115276,115278,115280,115282,115284],{"class":323,"line":32960},[321,115277,1737],{"class":327},[321,115279,31365],{"class":380},[321,115281,101704],{"class":327},[321,115283,101707],{"class":436},[321,115285,3945],{"class":331},[321,115287,115288],{"class":323,"line":32966},[321,115289,101714],{"class":331},[19,115291,103715],{},[312,115293,115295],{"className":24030,"code":115294,"language":24032,"meta":30,"style":30},"touch ch8_gym_env.py\n",[318,115296,115297],{"__ignoreMap":30},[321,115298,115299,115301],{"class":323,"line":324},[321,115300,101428],{"class":2169},[321,115302,115303],{"class":436}," ch8_gym_env.py\n",[19,115305,110589],{},[312,115307,115309],{"className":24030,"code":115308,"language":24032,"meta":30,"style":30},"python ch8_gym_env.py\n",[318,115310,115311],{"__ignoreMap":30},[321,115312,115313,115315],{"class":323,"line":324},[321,115314,30525],{"class":2169},[321,115316,115303],{"class":436},[292,115318,101717],{"id":101717},[19,115320,115321],{},"继承 Gymnasium 环境：",[312,115323,115325],{"className":30523,"code":115324,"language":30525,"meta":30,"style":30},"class ReacherEnv(gym.Env):\n",[318,115326,115327],{"__ignoreMap":30},[321,115328,115329,115331,115333,115335,115337,115339,115341],{"class":323,"line":324},[321,115330,14901],{"class":327},[321,115332,114202],{"class":2169},[321,115334,332],{"class":331},[321,115336,113685],{"class":2169},[321,115338,890],{"class":331},[321,115340,114211],{"class":2169},[321,115342,30931],{"class":331},[19,115344,115345],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115347,115348],{},"初始化模型：",[312,115350,115352],{"className":30523,"code":115351,"language":30525,"meta":30,"style":30},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[318,115353,115354,115368],{"__ignoreMap":30},[321,115355,115356,115358,115360,115362,115364,115366],{"class":323,"line":324},[321,115357,30968],{"class":380},[321,115359,114262],{"class":331},[321,115361,377],{"class":327},[321,115363,101557],{"class":331},[321,115365,101459],{"class":380},[321,115367,338],{"class":331},[321,115369,115370,115372,115374,115376,115378,115380],{"class":323,"line":167},[321,115371,30968],{"class":380},[321,115373,114277],{"class":331},[321,115375,377],{"class":327},[321,115377,114282],{"class":331},[321,115379,30968],{"class":380},[321,115381,114287],{"class":331},[19,115383,115384,115385,115387],{},"这和前面章节一样，只是现在放到了类的 ",[318,115386,30974],{}," 里。",[19,115389,115390],{},"缓存 site ID：",[312,115392,115394],{"className":30523,"code":115393,"language":30525,"meta":30,"style":30},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[318,115395,115396,115410],{"__ignoreMap":30},[321,115397,115398,115400,115402,115404,115406,115408],{"class":323,"line":324},[321,115399,30968],{"class":380},[321,115401,114298],{"class":331},[321,115403,377],{"class":327},[321,115405,114303],{"class":331},[321,115407,89699],{"class":380},[321,115409,338],{"class":331},[321,115411,115412,115414,115416,115418,115420,115422],{"class":323,"line":167},[321,115413,30968],{"class":380},[321,115415,114319],{"class":331},[321,115417,377],{"class":327},[321,115419,114303],{"class":331},[321,115421,89699],{"class":380},[321,115423,338],{"class":331},[19,115425,115426],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115428,115429],{},"reset：",[312,115431,115433],{"className":30523,"code":115432,"language":30525,"meta":30,"style":30},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[318,115434,115435],{"__ignoreMap":30},[321,115436,115437,115439,115441,115443,115445,115447,115449,115451,115453,115455,115457,115459,115461,115463,115465,115467,115469],{"class":323,"line":324},[321,115438,32092],{"class":327},[321,115440,114667],{"class":2169},[321,115442,114670],{"class":331},[321,115444,787],{"class":327},[321,115446,114675],{"class":331},[321,115448,335],{"class":380},[321,115450,25254],{"class":327},[321,115452,39078],{"class":380},[321,115454,13771],{"class":327},[321,115456,39078],{"class":380},[321,115458,114688],{"class":331},[321,115460,114691],{"class":380},[321,115462,25254],{"class":327},[321,115464,39078],{"class":380},[321,115466,13771],{"class":327},[321,115468,39078],{"class":380},[321,115470,30931],{"class":331},[19,115472,115473,115475],{},[318,115474,70201],{}," 做四件事：",[151,115477,115478,115481,115484,115487],{},[154,115479,115480],{},"设置随机种子。",[154,115482,115483],{},"重置 MuJoCo data。",[154,115485,115486],{},"随机初始化关节角。",[154,115488,115489],{},"返回初始观测和 info。",[19,115491,115492],{},"step：",[312,115494,115496],{"className":30523,"code":115495,"language":30525,"meta":30,"style":30},"def step(self, action):\n",[318,115497,115498],{"__ignoreMap":30},[321,115499,115500,115502,115504],{"class":323,"line":324},[321,115501,32092],{"class":327},[321,115503,114832],{"class":2169},[321,115505,114835],{"class":331},[19,115507,115508,115510],{},[318,115509,107279],{}," 做六件事：",[151,115512,115513,115516,115522,115525,115528,115531],{},[154,115514,115515],{},"检查并裁剪 action。",[154,115517,115518,115519,28530],{},"写入 ",[318,115520,115521],{},"self.data.ctrl",[154,115523,115524],{},"连续推进若干个 MuJoCo 物理步。",[154,115526,115527],{},"计算新观测。",[154,115529,115530],{},"计算奖励和结束条件。",[154,115532,115533],{},"返回 Gymnasium 标准五元组。",[292,115535,101853],{"id":101853},[312,115537,115539],{"className":30523,"code":115538,"language":30525,"meta":30,"style":30},"import gymnasium as gym\n",[318,115540,115541],{"__ignoreMap":30},[321,115542,115543,115545,115547,115549],{"class":323,"line":324},[321,115544,30537],{"class":327},[321,115546,114040],{"class":331},[321,115548,31528],{"class":327},[321,115550,114045],{"class":331},[19,115552,115553,115554,115556,115557,115560],{},"导入 Gymnasium，并起别名 ",[318,115555,113685],{},"。后面写 ",[318,115558,115559],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[312,115562,115564],{"className":30523,"code":115563,"language":30525,"meta":30,"style":30},"from gymnasium import spaces\n",[318,115565,115566],{"__ignoreMap":30},[321,115567,115568,115570,115572,115574],{"class":323,"line":324},[321,115569,30882],{"class":327},[321,115571,114040],{"class":331},[321,115573,30537],{"class":327},[321,115575,114072],{"class":331},[19,115577,115578,115579,115582],{},"导入空间定义工具。",[318,115580,115581],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[312,115584,115585],{"className":30523,"code":115324,"language":30525,"meta":30,"style":30},[318,115586,115587],{"__ignoreMap":30},[321,115588,115589,115591,115593,115595,115597,115599,115601],{"class":323,"line":324},[321,115590,14901],{"class":327},[321,115592,114202],{"class":2169},[321,115594,332],{"class":331},[321,115596,113685],{"class":2169},[321,115598,890],{"class":331},[321,115600,114211],{"class":2169},[321,115602,30931],{"class":331},[19,115604,115605,115606,115609,115610,115612,115613,101163,115615,115617],{},"定义一个类，名字叫 ",[318,115607,115608],{},"ReacherEnv","。括号里的 ",[318,115611,115559],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[318,115614,70201],{},[318,115616,107279],{}," 这两个核心方法。",[312,115619,115621],{"className":30523,"code":115620,"language":30525,"meta":30,"style":30},"metadata = {\"render_modes\": []}\n",[318,115622,115623],{"__ignoreMap":30},[321,115624,115625,115628,115630,115632,115634],{"class":323,"line":324},[321,115626,115627],{"class":331},"metadata ",[321,115629,377],{"class":327},[321,115631,4654],{"class":331},[321,115633,114225],{"class":436},[321,115635,114228],{"class":331},[19,115637,115638],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[312,115640,115642],{"className":30523,"code":115641,"language":30525,"meta":30,"style":30},"def __init__(self) -> None:\n",[318,115643,115644],{"__ignoreMap":30},[321,115645,115646,115648,115650,115652,115654],{"class":323,"line":324},[321,115647,32092],{"class":327},[321,115649,30949],{"class":380},[321,115651,114241],{"class":331},[321,115653,95831],{"class":380},[321,115655,3945],{"class":331},[19,115657,115658,115660,115661,28530],{},[318,115659,30974],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[318,115662,115663],{},"env = ReacherEnv()",[312,115665,115667],{"className":30523,"code":115666,"language":30525,"meta":30,"style":30},"super().__init__()\n",[318,115668,115669],{"__ignoreMap":30},[321,115670,115671,115674,115676,115678],{"class":323,"line":324},[321,115672,115673],{"class":380},"super",[321,115675,17468],{"class":331},[321,115677,30974],{"class":380},[321,115679,2182],{"class":331},[19,115681,115682,115683,115685],{},"调用父类 ",[318,115684,115559],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[312,115687,115688],{"className":30523,"code":115351,"language":30525,"meta":30,"style":30},[318,115689,115690,115704],{"__ignoreMap":30},[321,115691,115692,115694,115696,115698,115700,115702],{"class":323,"line":324},[321,115693,30968],{"class":380},[321,115695,114262],{"class":331},[321,115697,377],{"class":327},[321,115699,101557],{"class":331},[321,115701,101459],{"class":380},[321,115703,338],{"class":331},[321,115705,115706,115708,115710,115712,115714,115716],{"class":323,"line":167},[321,115707,30968],{"class":380},[321,115709,114277],{"class":331},[321,115711,377],{"class":327},[321,115713,114282],{"class":331},[321,115715,30968],{"class":380},[321,115717,114287],{"class":331},[19,115719,115720,115721,115723,115724,101163,115727,115730],{},"把 MuJoCo 模型和状态保存到 ",[318,115722,30968],{}," 上。",[318,115725,115726],{},"self.model",[318,115728,115729],{},"self.data"," 表示这个环境对象自己的模型和状态。",[312,115732,115733],{"className":30523,"code":115393,"language":30525,"meta":30,"style":30},[318,115734,115735,115749],{"__ignoreMap":30},[321,115736,115737,115739,115741,115743,115745,115747],{"class":323,"line":324},[321,115738,30968],{"class":380},[321,115740,114298],{"class":331},[321,115742,377],{"class":327},[321,115744,114303],{"class":331},[321,115746,89699],{"class":380},[321,115748,338],{"class":331},[321,115750,115751,115753,115755,115757,115759,115761],{"class":323,"line":167},[321,115752,30968],{"class":380},[321,115754,114319],{"class":331},[321,115756,377],{"class":327},[321,115758,114303],{"class":331},[321,115760,89699],{"class":380},[321,115762,338],{"class":331},[19,115764,115765,115766,101163,115769,115772],{},"提前查好 tip 和 target 的 site ID。这样 ",[318,115767,115768],{},"_get_obs",[318,115770,115771],{},"_get_reward"," 里就不用每次按名字查找。",[312,115774,115776],{"className":30523,"code":115775,"language":30525,"meta":30,"style":30},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[318,115777,115778,115788,115798],{"__ignoreMap":30},[321,115779,115780,115782,115784,115786],{"class":323,"line":324},[321,115781,30968],{"class":380},[321,115783,114012],{"class":331},[321,115785,377],{"class":327},[321,115787,54572],{"class":380},[321,115789,115790,115792,115794,115796],{"class":323,"line":167},[321,115791,30968],{"class":380},[321,115793,114391],{"class":331},[321,115795,377],{"class":327},[321,115797,114396],{"class":380},[321,115799,115800,115802,115804,115806],{"class":323,"line":200},[321,115801,30968],{"class":380},[321,115803,113851],{"class":331},[321,115805,377],{"class":327},[321,115807,47478],{"class":380},[19,115809,115810,115813,115814,115817,115818,115821],{},[318,115811,115812],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[318,115815,115816],{},"max_steps"," 是一个 episode 最多运行多少步。",[318,115819,115820],{},"steps"," 记录当前 episode 已经走了多少步。",[312,115823,115824],{"className":30523,"code":113890,"language":30525,"meta":30,"style":30},[318,115825,115826],{"__ignoreMap":30},[321,115827,115828,115830,115832,115834,115836,115838,115840,115842,115844,115846,115848,115850,115852,115854,115856,115858,115860,115862,115864,115866],{"class":323,"line":324},[321,115829,30968],{"class":380},[321,115831,113899],{"class":331},[321,115833,377],{"class":327},[321,115835,113904],{"class":331},[321,115837,113907],{"class":5423},[321,115839,113910],{"class":327},[321,115841,102548],{"class":380},[321,115843,12642],{"class":331},[321,115845,113917],{"class":5423},[321,115847,377],{"class":327},[321,115849,102548],{"class":380},[321,115851,12642],{"class":331},[321,115853,96108],{"class":5423},[321,115855,377],{"class":327},[321,115857,332],{"class":331},[321,115859,409],{"class":380},[321,115861,113934],{"class":331},[321,115863,93645],{"class":5423},[321,115865,377],{"class":327},[321,115867,113941],{"class":331},[19,115869,115870,115871,115874,115875,101163,115878,115881],{},"定义动作空间。",[318,115872,115873],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[318,115876,115877],{},"low=-1.0",[318,115879,115880],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[312,115883,115884],{"className":30523,"code":113951,"language":30525,"meta":30,"style":30},[318,115885,115886],{"__ignoreMap":30},[321,115887,115888,115890,115892,115894,115896,115898,115900,115902,115904,115906,115908,115910,115912,115914,115916,115918,115920,115922],{"class":323,"line":324},[321,115889,30968],{"class":380},[321,115891,113960],{"class":331},[321,115893,377],{"class":327},[321,115895,113904],{"class":331},[321,115897,113907],{"class":5423},[321,115899,113910],{"class":327},[321,115901,113971],{"class":331},[321,115903,113917],{"class":5423},[321,115905,377],{"class":327},[321,115907,113971],{"class":331},[321,115909,96108],{"class":5423},[321,115911,377],{"class":327},[321,115913,332],{"class":331},[321,115915,778],{"class":380},[321,115917,113934],{"class":331},[321,115919,93645],{"class":5423},[321,115921,377],{"class":327},[321,115923,113941],{"class":331},[19,115925,115926,115927,115930,115931,115934],{},"定义观测空间。",[318,115928,115929],{},"shape=(10,)"," 表示观测是 10 个数。",[318,115932,115933],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[312,115936,115938],{"className":30523,"code":115937,"language":30525,"meta":30,"style":30},"def _get_obs(self) -> np.ndarray:\n",[318,115939,115940],{"__ignoreMap":30},[321,115941,115942,115944,115946],{"class":323,"line":324},[321,115943,32092],{"class":327},[321,115945,114501],{"class":2169},[321,115947,114504],{"class":331},[19,115949,115950,115951,115953],{},"定义内部函数，用来生成观测。函数名前面的 ",[318,115952,1324],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[312,115955,115957],{"className":30523,"code":115956,"language":30525,"meta":30,"style":30},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[318,115958,115959,115973],{"__ignoreMap":30},[321,115960,115961,115963,115965,115967,115969,115971],{"class":323,"line":324},[321,115962,111713],{"class":331},[321,115964,377],{"class":327},[321,115966,39018],{"class":380},[321,115968,114515],{"class":331},[321,115970,30968],{"class":380},[321,115972,114520],{"class":331},[321,115974,115975,115977,115979,115981,115983,115985],{"class":323,"line":167},[321,115976,111723],{"class":331},[321,115978,377],{"class":327},[321,115980,39018],{"class":380},[321,115982,114515],{"class":331},[321,115984,30968],{"class":380},[321,115986,114535],{"class":331},[19,115988,115989],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[312,115991,115993],{"className":30523,"code":115992,"language":30525,"meta":30,"style":30},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[318,115994,115995,116011],{"__ignoreMap":30},[321,115996,115997,115999,116001,116003,116005,116007,116009],{"class":323,"line":324},[321,115998,110999],{"class":331},[321,116000,377],{"class":327},[321,116002,114544],{"class":331},[321,116004,30968],{"class":380},[321,116006,114549],{"class":331},[321,116008,30968],{"class":380},[321,116010,114554],{"class":331},[321,116012,116013,116015],{"class":323,"line":167},[321,116014,17253],{"class":327},[321,116016,114561],{"class":331},[19,116018,116019,116020,116023,116024,116026],{},"拼接观测，并转换成 ",[318,116021,116022],{},"float32","。很多强化学习库默认使用 ",[318,116025,116022],{},"，所以这里主动转换。",[312,116028,116029],{"className":30523,"code":115432,"language":30525,"meta":30,"style":30},[318,116030,116031],{"__ignoreMap":30},[321,116032,116033,116035,116037,116039,116041,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065],{"class":323,"line":324},[321,116034,32092],{"class":327},[321,116036,114667],{"class":2169},[321,116038,114670],{"class":331},[321,116040,787],{"class":327},[321,116042,114675],{"class":331},[321,116044,335],{"class":380},[321,116046,25254],{"class":327},[321,116048,39078],{"class":380},[321,116050,13771],{"class":327},[321,116052,39078],{"class":380},[321,116054,114688],{"class":331},[321,116056,114691],{"class":380},[321,116058,25254],{"class":327},[321,116060,39078],{"class":380},[321,116062,13771],{"class":327},[321,116064,39078],{"class":380},[321,116066,30931],{"class":331},[19,116068,116069,116070,116072,116073,116076],{},"定义 reset。",[318,116071,114711],{}," 用来控制随机数，保证实验可以复现。",[318,116074,116075],{},"options"," 用来接收额外配置，本章暂时不用。",[312,116078,116080],{"className":30523,"code":116079,"language":30525,"meta":30,"style":30},"super().reset(seed=seed)\n",[318,116081,116082],{"__ignoreMap":30},[321,116083,116084,116086,116088,116090,116092],{"class":323,"line":324},[321,116085,115673],{"class":380},[321,116087,114708],{"class":331},[321,116089,114711],{"class":5423},[321,116091,377],{"class":327},[321,116093,114716],{"class":331},[19,116095,116096,116097,116100],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[318,116098,116099],{},"self.np_random"," 生成可复现的随机数。",[312,116102,116104],{"className":30523,"code":116103,"language":30525,"meta":30,"style":30},"mujoco.mj_resetData(self.model, self.data)\n",[318,116105,116106],{"__ignoreMap":30},[321,116107,116108,116111,116113,116115,116117],{"class":323,"line":324},[321,116109,116110],{"class":331},"mujoco.mj_resetData(",[321,116112,30968],{"class":380},[321,116114,114726],{"class":331},[321,116116,30968],{"class":380},[321,116118,114731],{"class":331},[19,116120,116121],{},"把 MuJoCo 状态重置到默认状态。",[312,116123,116125],{"className":30523,"code":116124,"language":30525,"meta":30,"style":30},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[318,116126,116127],{"__ignoreMap":30},[321,116128,116129,116131,116133,116135,116137,116139,116141,116143,116145,116147,116149,116151,116153,116155,116157,116159,116161],{"class":323,"line":324},[321,116130,30968],{"class":380},[321,116132,114742],{"class":331},[321,116134,377],{"class":327},[321,116136,39018],{"class":380},[321,116138,114749],{"class":331},[321,116140,113907],{"class":5423},[321,116142,113910],{"class":327},[321,116144,86355],{"class":380},[321,116146,12642],{"class":331},[321,116148,113917],{"class":5423},[321,116150,377],{"class":327},[321,116152,86355],{"class":380},[321,116154,12642],{"class":331},[321,116156,31641],{"class":5423},[321,116158,377],{"class":327},[321,116160,30968],{"class":380},[321,116162,114774],{"class":331},[19,116164,115486,116165,116168,116169,116172,116173,116175],{},[318,116166,116167],{},"[:]"," 表示修改整个数组。",[318,116170,116171],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[318,116174,102295],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[312,116177,116179],{"className":30523,"code":116178,"language":30525,"meta":30,"style":30},"self.data.qvel[:] = 0.0\n",[318,116180,116181],{"__ignoreMap":30},[321,116182,116183,116185,116187,116189],{"class":323,"line":324},[321,116184,30968],{"class":380},[321,116186,114781],{"class":331},[321,116188,377],{"class":327},[321,116190,104906],{"class":380},[19,116192,116193],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[312,116195,116197],{"className":30523,"code":116196,"language":30525,"meta":30,"style":30},"self.steps = 0\nreturn self._get_obs(), {}\n",[318,116198,116199,116209],{"__ignoreMap":30},[321,116200,116201,116203,116205,116207],{"class":323,"line":324},[321,116202,30968],{"class":380},[321,116204,113851],{"class":331},[321,116206,377],{"class":327},[321,116208,47478],{"class":380},[321,116210,116211,116213,116215],{"class":323,"line":167},[321,116212,17253],{"class":327},[321,116214,39018],{"class":380},[321,116216,114821],{"class":331},[19,116218,116219],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[312,116221,116222],{"className":30523,"code":115495,"language":30525,"meta":30,"style":30},[318,116223,116224],{"__ignoreMap":30},[321,116225,116226,116228,116230],{"class":323,"line":324},[321,116227,32092],{"class":327},[321,116229,114832],{"class":2169},[321,116231,114835],{"class":331},[19,116233,116234],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[312,116236,116238],{"className":30523,"code":116237,"language":30525,"meta":30,"style":30},"action = np.asarray(action, dtype=np.float32)\n",[318,116239,116240],{"__ignoreMap":30},[321,116241,116242,116244,116246,116248,116250,116252],{"class":323,"line":324},[321,116243,107587],{"class":331},[321,116245,377],{"class":327},[321,116247,114844],{"class":331},[321,116249,93645],{"class":5423},[321,116251,377],{"class":327},[321,116253,113941],{"class":331},[19,116255,116256,116257,28530],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[318,116258,116022],{},[312,116260,116262],{"className":30523,"code":116261,"language":30525,"meta":30,"style":30},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[318,116263,116264],{"__ignoreMap":30},[321,116265,116266,116268,116270,116272,116274,116276,116278],{"class":323,"line":324},[321,116267,107587],{"class":331},[321,116269,377],{"class":327},[321,116271,107592],{"class":331},[321,116273,30968],{"class":380},[321,116275,114863],{"class":331},[321,116277,30968],{"class":380},[321,116279,114868],{"class":331},[19,116281,116282],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[312,116284,116286],{"className":30523,"code":116285,"language":30525,"meta":30,"style":30},"self.data.ctrl[:] = action\n",[318,116287,116288],{"__ignoreMap":30},[321,116289,116290,116292,116294,116296],{"class":323,"line":324},[321,116291,30968],{"class":380},[321,116293,114879],{"class":331},[321,116295,377],{"class":327},[321,116297,107615],{"class":331},[19,116299,116300],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[312,116302,116304],{"className":30523,"code":116303,"language":30525,"meta":30,"style":30},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[318,116305,116306,116322],{"__ignoreMap":30},[321,116307,116308,116310,116312,116314,116316,116318,116320],{"class":323,"line":324},[321,116309,3231],{"class":327},[321,116311,101646],{"class":331},[321,116313,26188],{"class":327},[321,116315,32588],{"class":380},[321,116317,332],{"class":331},[321,116319,30968],{"class":380},[321,116321,114900],{"class":331},[321,116323,116324,116327,116329,116331,116333],{"class":323,"line":167},[321,116325,116326],{"class":331},"    mujoco.mj_step(",[321,116328,30968],{"class":380},[321,116330,114726],{"class":331},[321,116332,30968],{"class":380},[321,116334,114731],{"class":331},[19,116336,116337,116338,116341,116342,116344,116345,28530],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[318,116339,116340],{},"frame_skip=5","，所以外部调用一次 ",[318,116343,114022],{},"，内部实际执行 5 次 ",[318,116346,101360],{},[312,116348,116350],{"className":30523,"code":116349,"language":30525,"meta":30,"style":30},"self.steps += 1\n",[318,116351,116352],{"__ignoreMap":30},[321,116353,116354,116356,116358,116360],{"class":323,"line":324},[321,116355,30968],{"class":380},[321,116357,113851],{"class":331},[321,116359,9684],{"class":327},[321,116361,55844],{"class":380},[19,116363,116364],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[312,116366,116368],{"className":30523,"code":116367,"language":30525,"meta":30,"style":30},"obs = self._get_obs()\nreward = self._get_reward()\n",[318,116369,116370,116380],{"__ignoreMap":30},[321,116371,116372,116374,116376,116378],{"class":323,"line":324},[321,116373,110999],{"class":331},[321,116375,377],{"class":327},[321,116377,39018],{"class":380},[321,116379,114942],{"class":331},[321,116381,116382,116384,116386,116388],{"class":323,"line":167},[321,116383,111150],{"class":331},[321,116385,377],{"class":327},[321,116387,39018],{"class":380},[321,116389,114953],{"class":331},[19,116391,116392],{},"计算新的观测和奖励。",[312,116394,116396],{"className":30523,"code":116395,"language":30525,"meta":30,"style":30},"dist = float(np.linalg.norm(tip - target))\n",[318,116397,116398],{"__ignoreMap":30},[321,116399,116400,116402,116404,116406,116408,116410],{"class":323,"line":324},[321,116401,111741],{"class":331},[321,116403,377],{"class":327},[321,116405,109942],{"class":380},[321,116407,114996],{"class":331},[321,116409,864],{"class":327},[321,116411,115001],{"class":331},[19,116413,116414],{},"计算末端到目标的距离，并转换成 Python float。",[312,116416,116417],{"className":30523,"code":113822,"language":30525,"meta":30,"style":30},[318,116418,116419,116431],{"__ignoreMap":30},[321,116420,116421,116423,116425,116427,116429],{"class":323,"line":324},[321,116422,113829],{"class":331},[321,116424,377],{"class":327},[321,116426,113834],{"class":331},[321,116428,1242],{"class":327},[321,116430,113839],{"class":380},[321,116432,116433,116435,116437,116439,116441,116443,116445],{"class":323,"line":167},[321,116434,113844],{"class":331},[321,116436,377],{"class":327},[321,116438,39018],{"class":380},[321,116440,113851],{"class":331},[321,116442,1916],{"class":327},[321,116444,39018],{"class":380},[321,116446,113858],{"class":331},[19,116448,116449],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[312,116451,116453],{"className":30523,"code":116452,"language":30525,"meta":30,"style":30},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[318,116454,116455,116468],{"__ignoreMap":30},[321,116456,116457,116460,116462,116464,116466],{"class":323,"line":324},[321,116458,116459],{"class":331},"info ",[321,116461,377],{"class":327},[321,116463,4654],{"class":331},[321,116465,115047],{"class":436},[321,116467,115050],{"class":331},[321,116469,116470,116472],{"class":323,"line":167},[321,116471,17253],{"class":327},[321,116473,115057],{"class":331},[19,116475,116476,116479],{},[318,116477,116478],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[312,116481,116483],{"className":30523,"code":116482,"language":30525,"meta":30,"style":30},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[318,116484,116485,116494],{"__ignoreMap":30},[321,116486,116487,116490,116492],{"class":323,"line":324},[321,116488,116489],{"class":331},"env ",[321,116491,377],{"class":327},[321,116493,115087],{"class":331},[321,116495,116496,116498,116500,116502,116504,116506,116508],{"class":323,"line":167},[321,116497,113545],{"class":331},[321,116499,377],{"class":327},[321,116501,115097],{"class":331},[321,116503,114711],{"class":5423},[321,116505,377],{"class":327},[321,116507,523],{"class":380},[321,116509,338],{"class":331},[19,116511,116512,116513,116516],{},"创建环境并重置。",[318,116514,116515],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[312,116518,116520],{"className":30523,"code":116519,"language":30525,"meta":30,"style":30},"action = env.action_space.sample()\n",[318,116521,116522],{"__ignoreMap":30},[321,116523,116524,116526,116528],{"class":323,"line":324},[321,116525,107587],{"class":331},[321,116527,377],{"class":327},[321,116529,115166],{"class":331},[19,116531,116532],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116534,102461],{"id":102460},[19,116536,105629],{},[312,116538,116541],{"className":116539,"code":116540,"language":5394,"meta":30},[5392],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[318,116542,116540],{"__ignoreMap":30},[19,116544,116545],{},"这个环境已经具备强化学习环境的基本结构。",[19,116547,116548],{},"主函数里使用随机动作：",[312,116550,116551],{"className":30523,"code":116519,"language":30525,"meta":30,"style":30},[318,116552,116553],{"__ignoreMap":30},[321,116554,116555,116557,116559],{"class":323,"line":324},[321,116556,107587],{"class":331},[321,116558,377],{"class":327},[321,116560,115166],{"class":331},[19,116562,116563],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116565,102493],{"id":102492},[151,116567,116568,116571,116577,116586,116595,116604,116610],{},[154,116569,116570],{},"运行程序。",[154,116572,116573,116574,28530],{},"确认 ",[318,116575,116576],{},"obs.shape == (10,)",[154,116578,111326,116579,116582,116583,28530],{},[318,116580,116581],{},"env.action_space","，应类似 ",[318,116584,116585],{},"Box(-1.0, 1.0, (2,), float32)",[154,116587,105730,116588,116591,116592,28530],{},[318,116589,116590],{},"self.max_steps = 10","，确认环境会更快 ",[318,116593,116594],{},"truncated=True",[154,116596,102556,116597,102559,116600,116603],{},[318,116598,116599],{},"terminated = dist \u003C 0.05",[318,116601,116602],{},"dist \u003C 0.2","，观察是否更容易结束。",[154,116605,102556,116606,116609],{},[318,116607,116608],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[154,116611,116612,116613,116615,116616,116619],{},"在 ",[318,116614,116478],{}," 里加入 ",[318,116617,116618],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116621,102598],{"id":102597},[292,116623,116625],{"id":116624},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116627,116628,116629,116631],{},"Gymnasium 的 ",[318,116630,107279],{}," 返回 5 个值:",[312,116633,116635],{"className":30523,"code":116634,"language":30525,"meta":30,"style":30},"obs, reward, terminated, truncated, info\n",[318,116636,116637],{"__ignoreMap":30},[321,116638,116639],{"class":323,"line":324},[321,116640,116634],{"class":331},[19,116642,116643],{},"不是旧 Gym 的 4 个值。",[292,116645,116647,116650],{"id":116646},"datactrl-action-维度错误",[318,116648,116649],{},"data.ctrl[:] = action"," 维度错误",[19,116652,102668],{},[312,116654,116656],{"className":30523,"code":116655,"language":30525,"meta":30,"style":30},"print(self.model.nu)\nprint(action.shape)\n",[318,116657,116658,116669],{"__ignoreMap":30},[321,116659,116660,116662,116664,116666],{"class":323,"line":324},[321,116661,30560],{"class":380},[321,116663,332],{"class":331},[321,116665,30968],{"class":380},[321,116667,116668],{"class":331},".model.nu)\n",[321,116670,116671,116673],{"class":323,"line":167},[321,116672,30560],{"class":380},[321,116674,116675],{"class":331},"(action.shape)\n",[19,116677,116678],{},"两者必须匹配。",[292,116680,116682],{"id":116681},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116684,102607],{},[312,116686,116688],{"className":30523,"code":116687,"language":30525,"meta":30,"style":30},"mujoco.mj_forward(self.model, self.data)\n",[318,116689,116690],{"__ignoreMap":30},[321,116691,116692,116695,116697,116699,116701],{"class":323,"line":324},[321,116693,116694],{"class":331},"mujoco.mj_forward(",[321,116696,30968],{"class":380},[321,116698,114726],{"class":331},[321,116700,30968],{"class":380},[321,116702,114731],{"class":331},[292,116704,116706,116708],{"id":116705},"observation_space-维度和-obs-不一致",[318,116707,113745],{}," 维度和 obs 不一致",[19,116710,102720],{},[312,116712,116714],{"className":30523,"code":116713,"language":30525,"meta":30,"style":30},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[318,116715,116716,116726,116733],{"__ignoreMap":30},[321,116717,116718,116720,116722,116724],{"class":323,"line":324},[321,116719,110999],{"class":331},[321,116721,377],{"class":327},[321,116723,39018],{"class":380},[321,116725,114942],{"class":331},[321,116727,116728,116730],{"class":323,"line":167},[321,116729,30560],{"class":380},[321,116731,116732],{"class":331},"(obs.shape)\n",[321,116734,116735,116737,116739,116741],{"class":323,"line":200},[321,116736,30560],{"class":380},[321,116738,332],{"class":331},[321,116740,30968],{"class":380},[321,116742,116743],{"class":331},".observation_space.shape)\n",[19,116745,116746],{},"两者必须一致。本章观测是：",[312,116748,116751],{"className":116749,"code":116750,"language":5394,"meta":30},[5392],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[318,116752,116750],{"__ignoreMap":30},[292,116754,116756],{"id":116755},"action-超过范围","action 超过范围",[19,116758,116759],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[312,116761,116762],{"className":30523,"code":116261,"language":30525,"meta":30,"style":30},[318,116763,116764],{"__ignoreMap":30},[321,116765,116766,116768,116770,116772,116774,116776,116778],{"class":323,"line":324},[321,116767,107587],{"class":331},[321,116769,377],{"class":327},[321,116771,107592],{"class":331},[321,116773,30968],{"class":380},[321,116775,114863],{"class":331},[321,116777,30968],{"class":380},[321,116779,114868],{"class":331},[19,116781,116782,116783,28530],{},"这能避免无效动作直接写入 ",[318,116784,101221],{},[292,116786,116788],{"id":116787},"忘记返回-info","忘记返回 info",[19,116790,116628,116791,101163,116793,116795],{},[318,116792,70201],{},[318,116794,107279],{}," 都会返回 info：",[312,116797,116798],{"className":30523,"code":113538,"language":30525,"meta":30,"style":30},[318,116799,116800,116808],{"__ignoreMap":30},[321,116801,116802,116804,116806],{"class":323,"line":324},[321,116803,113545],{"class":331},[321,116805,377],{"class":327},[321,116807,113550],{"class":331},[321,116809,116810,116812,116814],{"class":323,"line":167},[321,116811,113555],{"class":331},[321,116813,377],{"class":327},[321,116815,113560],{"class":331},[19,116817,116818,116819,28530],{},"即使暂时没有额外信息，也返回 ",[318,116820,32604],{},[14,116822,116824],{"id":116823},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116826,116827],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[151,116829,116830,116833,116836,116839,116842,116845],{},[154,116831,116832],{},"更稳定的 reward。",[154,116834,116835],{},"合理的 episode 长度。",[154,116837,116838],{},"可重复的随机目标采样。",[154,116840,116841],{},"render 接口。",[154,116843,116844],{},"环境注册代码。",[154,116846,116847],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116849,116850],{},"如果只是自己写训练循环，最小形式是：",[312,116852,116854],{"className":30523,"code":116853,"language":30525,"meta":30,"style":30},"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",[318,116855,116856,116864,116880,116884,116900,116909,116918,116928],{"__ignoreMap":30},[321,116857,116858,116860,116862],{"class":323,"line":324},[321,116859,116489],{"class":331},[321,116861,377],{"class":327},[321,116863,115087],{"class":331},[321,116865,116866,116868,116870,116872,116874,116876,116878],{"class":323,"line":167},[321,116867,113545],{"class":331},[321,116869,377],{"class":327},[321,116871,115097],{"class":331},[321,116873,114711],{"class":5423},[321,116875,377],{"class":327},[321,116877,523],{"class":380},[321,116879,338],{"class":331},[321,116881,116882],{"class":323,"line":200},[321,116883,2606],{"emptyLinePlaceholder":251},[321,116885,116886,116888,116890,116892,116894,116896,116898],{"class":323,"line":1401},[321,116887,3231],{"class":327},[321,116889,101646],{"class":331},[321,116891,26188],{"class":327},[321,116893,32588],{"class":380},[321,116895,332],{"class":331},[321,116897,6617],{"class":380},[321,116899,30931],{"class":331},[321,116901,116902,116905,116907],{"class":323,"line":1407},[321,116903,116904],{"class":331},"    action ",[321,116906,377],{"class":327},[321,116908,115166],{"class":331},[321,116910,116911,116914,116916],{"class":323,"line":1421},[321,116912,116913],{"class":331},"    obs, reward, terminated, truncated, info ",[321,116915,377],{"class":327},[321,116917,113560],{"class":331},[321,116919,116920,116922,116924,116926],{"class":323,"line":1427},[321,116921,3307],{"class":327},[321,116923,115232],{"class":331},[321,116925,115235],{"class":327},[321,116927,115238],{"class":331},[321,116929,116930,116933,116935],{"class":323,"line":1518},[321,116931,116932],{"class":331},"        obs, info ",[321,116934,377],{"class":327},[321,116936,113550],{"class":331},[14,116938,116940],{"id":116939},"_9本章小结","9.本章小结",[19,116942,116943],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[312,116945,116948],{"className":116946,"code":116947,"language":5394,"meta":30},[5392],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[318,116949,116947],{"__ignoreMap":30},[19,116951,116952],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5333,116954,116955],{},"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":30,"searchDepth":167,"depth":167,"links":116957},[116958,116959,116960,116967,116971,116972,116973,116983,116984],{"id":100791,"depth":167,"text":100792},{"id":100914,"depth":167,"text":100915},{"id":101189,"depth":167,"text":101190,"children":116961},[116962,116964,116966],{"id":113769,"depth":200,"text":116963},"terminated 和 truncated 的区别",{"id":113872,"depth":200,"text":116965},"observation_space 和 action_space",{"id":113999,"depth":200,"text":114000},{"id":101397,"depth":167,"text":101398,"children":116968},[116969,116970],{"id":101717,"depth":200,"text":101717},{"id":101853,"depth":200,"text":101853},{"id":102460,"depth":167,"text":102461},{"id":102492,"depth":167,"text":102493},{"id":102597,"depth":167,"text":102598,"children":116974},[116975,116976,116978,116979,116981,116982],{"id":116624,"depth":200,"text":116625},{"id":116646,"depth":200,"text":116977},"data.ctrl[:] = action 维度错误",{"id":116681,"depth":200,"text":116682},{"id":116705,"depth":200,"text":116980},"observation_space 维度和 obs 不一致",{"id":116755,"depth":200,"text":116756},{"id":116787,"depth":200,"text":116788},{"id":116823,"depth":167,"text":116824},{"id":116939,"depth":167,"text":116940},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113522,"description":30},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116991,"title":116992,"body":116993,"description":117416,"extension":249,"meta":117417,"navigation":251,"path":117418,"seo":117419,"stem":117420,"__hash__":117421},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116994,"toc":117406},[116995,116999,117002,117005,117025,117031,117037,117047,117050,117053,117073,117076,117080,117083,117089,117092,117106,117109,117112,117186,117189,117195,117198,117221,117224,117274,117277,117283,117286,117289,117292,117311,117314,117320,117323,117326,117329,117349,117352,117355,117358,117403],[10,116996,116998],{"id":116997},"mujoco-学习","MuJoCo 学习",[19,117000,117001],{},"初版",[19,117003,117004],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[151,117006,117007,117010,117013,117022],{},[154,117008,117009],{},"MuJoCo 模型文件在描述什么。",[154,117011,117012],{},"Python 代码怎样读取和推进仿真。",[154,117014,117015,544,117017,544,117019,117021],{},[318,117016,104175],{},[318,117018,104505],{},[318,117020,104508],{}," 这些数组为什么重要。",[154,117023,117024],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117026,117027,117028,117030],{},"默认环境为 Fedora 44、Python >= 3.10、",[318,117029,101172],{}," 官方 Python bindings。",[19,117032,117033,117034,117036],{},"注意：本文禁止使用 ",[318,117035,101157],{},"。所有示例均使用：",[312,117038,117039],{"className":30523,"code":101723,"language":30525,"meta":30,"style":30},[318,117040,117041],{"__ignoreMap":30},[321,117042,117043,117045],{"class":323,"line":324},[321,117044,30537],{"class":327},[321,117046,101446],{"class":331},[14,117048,117049],{"id":117049},"适合谁阅读",[19,117051,117052],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[151,117054,117055,117058,117061,117064],{},[154,117056,117057],{},"没学过 MuJoCo，只会一点 Python。",[154,117059,117060],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[154,117062,117063],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[154,117065,117066,117067,117069,117070,117072],{},"以前接触过 ",[318,117068,101157],{},"，现在想迁移到官方 ",[318,117071,101166],{}," Python bindings。",[19,117074,117075],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117077,117079],{"id":117078},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117081,117082],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[312,117084,117087],{"className":117085,"code":117086,"language":5394,"meta":30},[5392],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[318,117088,117086],{"__ignoreMap":30},[19,117090,117091],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[151,117093,117094,117097,117100,117103],{},[154,117095,117096],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[154,117098,117099],{},"快速测试控制算法，不必一开始就上真实机器人。",[154,117101,117102],{},"生成强化学习环境。",[154,117104,117105],{},"采集状态、动作、图像、奖励等训练数据。",[14,117107,117108],{"id":117108},"学习前的心智模型",[19,117110,117111],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[469,117113,117114,117126],{},[472,117115,117116],{},[475,117117,117118,117121,117124],{},[478,117119,117120],{"align":23944},"部分",[478,117122,117123],{"align":23944},"负责什么",[478,117125,21394],{"align":23944},[516,117127,117128,117139,117151,117163,117175],{},[475,117129,117130,117133,117136],{},[521,117131,117132],{"align":23944},"MJCF XML",[521,117134,117135],{"align":23944},"定义世界和机器人结构",[521,117137,117138],{"align":23944},"地面、盒子、关节、电机、摄像头",[475,117140,117141,117145,117148],{},[521,117142,117143],{"align":23944},[318,117144,100854],{},[521,117146,117147],{"align":23944},"编译后的静态模型",[521,117149,117150],{"align":23944},"有几个关节、有几个电机、时间步长是多少",[475,117152,117153,117157,117160],{},[521,117154,117155],{"align":23944},[318,117156,100864],{},[521,117158,117159],{"align":23944},"运行中的动态状态",[521,117161,117162],{"align":23944},"当前时间、位置、速度、电机输入",[475,117164,117165,117169,117172],{},[521,117166,117167],{"align":23944},[318,117168,101360],{},[521,117170,117171],{"align":23944},"推进一步物理仿真",[521,117173,117174],{"align":23944},"根据重力、力、碰撞更新状态",[475,117176,117177,117180,117183],{},[521,117178,117179],{"align":23944},"Viewer \u002F Renderer",[521,117181,117182],{"align":23944},"把仿真显示出来",[521,117184,117185],{"align":23944},"打开窗口或保存图片",[19,117187,117188],{},"一句话总结：",[312,117190,117193],{"className":117191,"code":117192,"language":5394,"meta":30},[5392],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[318,117194,117192],{"__ignoreMap":30},[19,117196,117197],{},"参考来源：",[1339,117199,117200,117207,117214],{},[154,117201,117202,117203],{},"MuJoCo Python 官方文档：",[570,117204,117205],{"href":117205,"rel":117206},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24073],[154,117208,117209,117210],{},"MuJoCo XML Reference：",[570,117211,117212],{"href":117212,"rel":117213},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24073],[154,117215,117216,117217],{},"MuJoCo Overview：",[570,117218,117219],{"href":117219,"rel":117220},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24073],[14,117222,117223],{"id":117223},"章节目录",[151,117225,117226,117232,117238,117244,117250,117256,117262,117268],{},[154,117227,117228],{},[570,117229,117231],{"href":117230},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[154,117233,117234],{},[570,117235,117237],{"href":117236},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[154,117239,117240],{},[570,117241,117243],{"href":117242},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[154,117245,117246],{},[570,117247,117249],{"href":117248},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[154,117251,117252],{},[570,117253,117255],{"href":117254},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[154,117257,117258],{},[570,117259,117261],{"href":117260},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[154,117263,117264],{},[570,117265,117267],{"href":117266},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[154,117269,117270],{},[570,117271,117273],{"href":117272},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117275,117276],{"id":117276},"推荐学习路线",[312,117278,117281],{"className":117279,"code":117280,"language":5394,"meta":30},[5392],"环境安装\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",[318,117282,117280],{"__ignoreMap":30},[19,117284,117285],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117287,117288],{"id":117288},"建议的目录结构",[19,117290,117291],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[312,117293,117295],{"className":24030,"code":117294,"language":24032,"meta":30,"style":30},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[318,117296,117297,117305],{"__ignoreMap":30},[321,117298,117299,117301,117303],{"class":323,"line":324},[321,117300,101411],{"class":2169},[321,117302,29361],{"class":380},[321,117304,101416],{"class":436},[321,117306,117307,117309],{"class":323,"line":167},[321,117308,101421],{"class":380},[321,117310,101416],{"class":436},[19,117312,117313],{},"每一章的代码都单独保存：",[312,117315,117318],{"className":117316,"code":117317,"language":5394,"meta":30},[5392],"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",[318,117319,117317],{"__ignoreMap":30},[19,117321,117322],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117324,117325],{"id":117325},"学习方法",[19,117327,117328],{},"每章建议按这个顺序操作：",[151,117330,117331,117334,117337,117340,117343,117346],{},[154,117332,117333],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[154,117335,117336],{},"复制最小可运行代码，保存成指定文件。",[154,117338,117339],{},"运行代码，确认没有报错。",[154,117341,117342],{},"对照“运行结果说明”理解输出。",[154,117344,117345],{},"做“验证步骤”，主动改一两个参数。",[154,117347,117348],{},"遇到报错先看“常见错误与解决方案”。",[19,117350,117351],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117353,117354],{"id":117354},"全局排错顺序",[19,117356,117357],{},"遇到问题时，按下面顺序查：",[151,117359,117360,117366,117372,117377,117380,117383,117390,117400],{},[154,117361,117362,117363],{},"Python 环境是否激活：",[318,117364,117365],{},"which python",[154,117367,117368,117369],{},"MuJoCo 是否能导入：",[318,117370,117371],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[154,117373,117374,117375],{},"是否误装了 ",[318,117376,101157],{},[154,117378,117379],{},"XML 标签是否闭合、属性是否拼写正确",[154,117381,117382],{},"actuator 引用的 joint 名字是否存在",[154,117384,117385,117387,117388],{},[318,117386,101221],{}," 的长度是否等于 ",[318,117389,102303],{},[154,117391,105730,117392,82684,117394,117396,117397],{},[318,117393,104175],{},[318,117395,104505],{}," 后是否调用了 ",[318,117398,117399],{},"mujoco.mj_forward",[154,117401,117402],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5333,117404,117405],{},"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":30,"searchDepth":167,"depth":167,"links":117407},[117408,117409,117410,117411,117412,117413,117414,117415],{"id":117049,"depth":167,"text":117049},{"id":117078,"depth":167,"text":117079},{"id":117108,"depth":167,"text":117108},{"id":117223,"depth":167,"text":117223},{"id":117276,"depth":167,"text":117276},{"id":117288,"depth":167,"text":117288},{"id":117325,"depth":167,"text":117325},{"id":117354,"depth":167,"text":117354},"仿真搭建。",{"category":23586},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116992,"description":117416},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117423,"title":117424,"body":117425,"description":23584,"extension":249,"meta":117880,"navigation":251,"path":117881,"seo":117882,"stem":117883,"__hash__":117884},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117426,"toc":117878},[117427,117430,117433,117439,117875],[10,117428,117424],{"id":117429},"_1-最常用的基本操作更新",[19,117431,117432],{},"装linux系统教程：",[19,117434,117435],{},[570,117436,117437],{"href":117437,"rel":117438},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24073],[312,117440,117444],{"className":117441,"code":117442,"language":117443,"meta":30,"style":30},"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",[318,117445,117446,117451,117456,117465,117470,117479,117484,117504,117509,117520,117525,117534,117539,117567,117572,117591,117596,117615,117619,117624,117640,117644,117649,117679,117683,117688,117704,117708,117713,117728,117732,117737,117753,117757,117762,117774,117786,117790,117795,117812,117816,117821,117839,117843,117848,117857,117861,117866],{"__ignoreMap":30},[321,117447,117448],{"class":323,"line":324},[321,117449,117450],{"class":390},"#更新相关的知识\n",[321,117452,117453],{"class":323,"line":167},[321,117454,117455],{"class":390},"# 更新软件包列表（从服务器获取最新软件信息）\n",[321,117457,117458,117460,117463],{"class":323,"line":200},[321,117459,24721],{"class":2169},[321,117461,117462],{"class":436}," apt",[321,117464,26387],{"class":436},[321,117466,117467],{"class":323,"line":1401},[321,117468,117469],{"class":390},"# 升级所有可更新的软件包（不删除旧包）\n",[321,117471,117472,117474,117476],{"class":323,"line":1407},[321,117473,24721],{"class":2169},[321,117475,117462],{"class":436},[321,117477,117478],{"class":436}," upgrade\n",[321,117480,117481],{"class":323,"line":1421},[321,117482,117483],{"class":390},"#更新和升级软件包\n",[321,117485,117486,117488,117490,117493,117495,117497,117499,117502],{"class":323,"line":1427},[321,117487,24721],{"class":2169},[321,117489,117462],{"class":436},[321,117491,117492],{"class":436}," update",[321,117494,26335],{"class":331},[321,117496,24721],{"class":2169},[321,117498,117462],{"class":436},[321,117500,117501],{"class":436}," upgrade",[321,117503,101126],{"class":380},[321,117505,117506],{"class":323,"line":1518},[321,117507,117508],{"class":390},"#列出可更新的软件包及版本信息\n",[321,117510,117511,117514,117517],{"class":323,"line":1524},[321,117512,117513],{"class":2169},"apt",[321,117515,117516],{"class":436}," list",[321,117518,117519],{"class":380}," --upgradable\n",[321,117521,117522],{"class":323,"line":1536},[321,117523,117524],{"class":390},"#彻底升级（处理依赖关系，可能删除旧包）\n",[321,117526,117527,117529,117531],{"class":323,"line":1818},[321,117528,24721],{"class":2169},[321,117530,117462],{"class":436},[321,117532,117533],{"class":436}," full-upgrade\n",[321,117535,117536],{"class":323,"line":1823},[321,117537,117538],{"class":390},"#设置指定版本\n",[321,117540,117541,117543,117545,117547,117549,117552,117554,117556,117558,117560,117563,117565],{"class":323,"line":1829},[321,117542,24721],{"class":2169},[321,117544,117462],{"class":436},[321,117546,24042],{"class":436},[321,117548,29047],{"class":327},[321,117550,117551],{"class":436},"package_nam",[321,117553,406],{"class":331},[321,117555,1292],{"class":327},[321,117557,377],{"class":436},[321,117559,1242],{"class":327},[321,117561,117562],{"class":436},"version_numbe",[321,117564,1002],{"class":331},[321,117566,51452],{"class":327},[321,117568,117569],{"class":323,"line":1834},[321,117570,117571],{"class":390},"#只安装软件包不升级\n",[321,117573,117574,117576,117578,117580,117582,117584,117586,117588],{"class":323,"line":1848},[321,117575,24721],{"class":2169},[321,117577,117462],{"class":436},[321,117579,24042],{"class":436},[321,117581,29047],{"class":327},[321,117583,117551],{"class":436},[321,117585,406],{"class":331},[321,117587,1292],{"class":327},[321,117589,117590],{"class":380}," --no-upgrade\n",[321,117592,117593],{"class":323,"line":1853},[321,117594,117595],{"class":390},"#只升级，不存在就不安装\n",[321,117597,117598,117600,117602,117604,117606,117608,117610,117612],{"class":323,"line":1859},[321,117599,24721],{"class":2169},[321,117601,117462],{"class":436},[321,117603,24042],{"class":436},[321,117605,29047],{"class":327},[321,117607,117551],{"class":436},[321,117609,406],{"class":331},[321,117611,1292],{"class":327},[321,117613,117614],{"class":380}," --only-upgrade\n",[321,117616,117617],{"class":323,"line":1880},[321,117618,2606],{"emptyLinePlaceholder":251},[321,117620,117621],{"class":323,"line":1885},[321,117622,117623],{"class":390},"#安装指定的软件命令\n",[321,117625,117626,117628,117630,117632,117634,117636,117638],{"class":323,"line":1899},[321,117627,24721],{"class":2169},[321,117629,117462],{"class":436},[321,117631,24042],{"class":436},[321,117633,29047],{"class":327},[321,117635,117551],{"class":436},[321,117637,406],{"class":331},[321,117639,51452],{"class":327},[321,117641,117642],{"class":323,"line":1904},[321,117643,2606],{"emptyLinePlaceholder":251},[321,117645,117646],{"class":323,"line":1933},[321,117647,117648],{"class":390},"#安装多个软件包\n",[321,117650,117651,117653,117655,117657,117659,117662,117665,117667,117669,117672,117674,117676],{"class":323,"line":1938},[321,117652,24721],{"class":2169},[321,117654,117462],{"class":436},[321,117656,24042],{"class":436},[321,117658,29047],{"class":327},[321,117660,117661],{"class":436},"package_",[321,117663,117664],{"class":327},"1>",[321,117666,29047],{"class":327},[321,117668,117661],{"class":436},[321,117670,117671],{"class":327},"2>",[321,117673,29047],{"class":327},[321,117675,117661],{"class":436},[321,117677,117678],{"class":327},"3>\n",[321,117680,117681],{"class":323,"line":1955},[321,117682,2606],{"emptyLinePlaceholder":251},[321,117684,117685],{"class":323,"line":1960},[321,117686,117687],{"class":390},"#更新指定的软件命令\n",[321,117689,117690,117692,117694,117696,117698,117700,117702],{"class":323,"line":1965},[321,117691,24721],{"class":2169},[321,117693,117462],{"class":436},[321,117695,117492],{"class":436},[321,117697,29047],{"class":327},[321,117699,117551],{"class":436},[321,117701,406],{"class":331},[321,117703,51452],{"class":327},[321,117705,117706],{"class":323,"line":1970},[321,117707,2606],{"emptyLinePlaceholder":251},[321,117709,117710],{"class":323,"line":1984},[321,117711,117712],{"class":390},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[321,117714,117715,117717,117720,117722,117724,117726],{"class":323,"line":1989},[321,117716,117513],{"class":2169},[321,117718,117719],{"class":436}," show",[321,117721,29047],{"class":327},[321,117723,117551],{"class":436},[321,117725,406],{"class":331},[321,117727,51452],{"class":327},[321,117729,117730],{"class":323,"line":2783},[321,117731,2606],{"emptyLinePlaceholder":251},[321,117733,117734],{"class":323,"line":2797},[321,117735,117736],{"class":390},"#删除软件包命令\n",[321,117738,117739,117741,117743,117745,117747,117749,117751],{"class":323,"line":2805},[321,117740,24721],{"class":2169},[321,117742,117462],{"class":436},[321,117744,26224],{"class":436},[321,117746,29047],{"class":327},[321,117748,117551],{"class":436},[321,117750,406],{"class":331},[321,117752,51452],{"class":327},[321,117754,117755],{"class":323,"line":2810},[321,117756,2606],{"emptyLinePlaceholder":251},[321,117758,117759],{"class":323,"line":2816},[321,117760,117761],{"class":390},"# 清理旧版本和缓存（释放磁盘空间）\n",[321,117763,117764,117766,117768,117771],{"class":323,"line":2822},[321,117765,24721],{"class":2169},[321,117767,117462],{"class":436},[321,117769,117770],{"class":436}," autoremove",[321,117772,117773],{"class":390},"  # 删除不再需要的依赖和库文件\n",[321,117775,117776,117778,117780,117783],{"class":323,"line":2827},[321,117777,24721],{"class":2169},[321,117779,117462],{"class":436},[321,117781,117782],{"class":436}," clean",[321,117784,117785],{"class":390},"       # 清理下载的缓存包\n",[321,117787,117788],{"class":323,"line":8155},[321,117789,2606],{"emptyLinePlaceholder":251},[321,117791,117792],{"class":323,"line":8179},[321,117793,117794],{"class":390},"#移除软件包及配置文件\n",[321,117796,117797,117799,117801,117804,117806,117808,117810],{"class":323,"line":8184},[321,117798,24721],{"class":2169},[321,117800,117462],{"class":436},[321,117802,117803],{"class":436}," purge",[321,117805,29047],{"class":327},[321,117807,117551],{"class":436},[321,117809,406],{"class":331},[321,117811,51452],{"class":327},[321,117813,117814],{"class":323,"line":8190},[321,117815,2606],{"emptyLinePlaceholder":251},[321,117817,117818],{"class":323,"line":8217},[321,117819,117820],{"class":390},"#查找软件包命令\n",[321,117822,117823,117825,117827,117830,117832,117835,117837],{"class":323,"line":8222},[321,117824,24721],{"class":2169},[321,117826,117462],{"class":436},[321,117828,117829],{"class":436}," search",[321,117831,29047],{"class":327},[321,117833,117834],{"class":436},"keywor",[321,117836,646],{"class":331},[321,117838,51452],{"class":327},[321,117840,117841],{"class":323,"line":8228},[321,117842,2606],{"emptyLinePlaceholder":251},[321,117844,117845],{"class":323,"line":8240},[321,117846,117847],{"class":390},"#列出所有已安装的包\n",[321,117849,117850,117852,117854],{"class":323,"line":8252},[321,117851,117513],{"class":2169},[321,117853,117516],{"class":436},[321,117855,117856],{"class":380}," --installed\n",[321,117858,117859],{"class":323,"line":8264},[321,117860,2606],{"emptyLinePlaceholder":251},[321,117862,117863],{"class":323,"line":9923},[321,117864,117865],{"class":390},"#列出所有已安装的包的版本信息\n",[321,117867,117868,117870,117872],{"class":323,"line":9948},[321,117869,117513],{"class":2169},[321,117871,117516],{"class":436},[321,117873,117874],{"class":380}," --all-versions\n",[5333,117876,117877],{},"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":30,"searchDepth":167,"depth":167,"links":117879},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117424,"description":23584},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117886,"title":117887,"body":117888,"description":23584,"extension":249,"meta":118629,"navigation":251,"path":118630,"seo":118631,"stem":118632,"__hash__":118633},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117889,"toc":118616},[117890,117893,117897,117900,117906,117910,117914,117920,117925,117930,117935,117940,117945,117948,117951,117954,117957,117961,117964,117969,117972,117977,117980,117985,117992,117995,117998,118001,118004,118007,118018,118022,118026,118031,118036,118040,118045,118049,118054,118058,118062,118067,118070,118115,118120,118124,118128,118133,118139,118144,118154,118159,118169,118174,118179,118206,118210,118213,118218,118221,118246,118250,118255,118258,118263,118268,118288,118293,118296,118311,118315,118368,118371,118376,118380,118383,118398,118401,118404,118409,118413,118417,118420,118424,118428,118431,118436,118441,118445,118452,118460,118463,118470,118475,118480,118483,118488,118495,118500,118507,118511,118513,118518,118522,118525,118528,118533,118536,118541,118544,118549,118554,118559,118563,118568,118572,118613],[10,117891,117887],{"id":117892},"_2-linux装机教程",[14,117894,117896],{"id":117895},"_21-实体机","2.1 实体机",[19,117898,117899],{},"使用清华源：（Ubuntu24.04）",[19,117901,117902],{},[570,117903,117904],{"href":117904,"rel":117905},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24073],[14,117907,117909],{"id":117908},"_22-普通虚拟机","2.2 普通虚拟机",[292,117911,117913],{"id":117912},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,117915,117916],{},[570,117917,117918],{"href":117918,"rel":117919},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24073],[19,117921,117922],{},[28,117923],{"alt":30,"src":117924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,117926,117927],{},[28,117928],{"alt":30,"src":117929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,117931,117932],{},[28,117933],{"alt":30,"src":117934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,117936,117937],{},[28,117938],{"alt":30,"src":117939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,117941,117942],{},[28,117943],{"alt":30,"src":117944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,117946,117947],{},"内存4G（4096MB）；",[19,117949,117950],{},"CPU给4个核；",[19,117952,117953],{},"硬盘动态分配60G；",[19,117955,117956],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[292,117958,117960],{"id":117959},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,117962,117963],{},"按照1.1的步骤下载Ubuntu",[19,117965,117966],{},[28,117967],{"alt":30,"src":117968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,117970,117971],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,117973,117974],{},[28,117975],{"alt":30,"src":117976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,117978,117979],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,117981,117982],{},[28,117983],{"alt":30,"src":117984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,117986,117987,117988,117991],{},"选择“正常安装”(找不到都用Alt+F7)， ",[481,117989,117990],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,117993,117994],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,117996,117997],{},"将改动写入磁盘吗 继续",[19,117999,118000],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118002,118003],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118005,118006],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118008,118009,118010,118013,118014,118017],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[481,118011,118012],{},"除了"," 选不发送系统信息与不升级之外， ",[481,118015,118016],{},"其它"," 都跳过或前进）",[292,118019,118021],{"id":118020},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22205,118023,118025],{"id":118024},"_2231-全屏","2.2.3.1 全屏",[19,118027,118028],{},[28,118029],{"alt":30,"src":118030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118032,118033],{},[28,118034],{"alt":30,"src":118035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22205,118037,118039],{"id":118038},"_2232-文件交换","2.2.3.2 文件交换",[19,118041,118042],{},[28,118043],{"alt":30,"src":118044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22205,118046,118048],{"id":118047},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118050,118051],{},[28,118052],{"alt":30,"src":118053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118055,118057],{"id":118056},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[292,118059,118061],{"id":118060},"_231-简介与优缺点","2.3.1 简介与优缺点",[151,118063,118064],{},[154,118065,118066],{},"什么情况下推荐？",[19,118068,118069],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[151,118071,118072],{"start":167},[154,118073,118074,118075],{},"优缺点：",[151,118076,118077,118107],{},[154,118078,118079,118080],{},"优点：",[151,118081,118082,118085,118092,118095,118098,118101,118104],{},[154,118083,118084],{},"WSL2是最好的Linux发行版;(bushi)",[154,118086,118087,118088,118091],{},"性能损耗极低。且比在Windows上跑深度性能 ",[481,118089,118090],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[154,118093,118094],{},"非常方便调用USB设备，可以USB直通;",[154,118096,118097],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[154,118099,118100],{},"非常方便Win与WSL2互相传文件等协同操作;",[154,118102,118103],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[154,118105,118106],{},"非常方便使用Windows的VScode远程开发;",[154,118108,118109,118110],{},"缺点：",[151,118111,118112],{},[154,118113,118114],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118116,118117],{},[28,118118],{"alt":30,"src":118119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[292,118121,118123],{"id":118122},"_232-安装教程","2.3.2 安装教程",[22205,118125,118127],{"id":118126},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[151,118129,118130],{},[154,118131,118132],{},"方法一(图形界面)",[19,118134,118135,118136,24763],{},"用Win+R输入",[318,118137,118138],{},"appwiz.cpl",[19,118140,118141],{},[28,118142],{"alt":30,"src":118143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118145,118146,118147,118150,118151,26618],{},"点击OK进入 ",[481,118148,118149],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[481,118152,118153],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118155,118156],{},[28,118157],{"alt":30,"src":118158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118160,118161,118162,101163,118165,118168],{},"选择 ",[481,118163,118164],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[481,118166,118167],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118170,118171],{},[28,118172],{"alt":30,"src":118173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[151,118175,118176],{"start":167},[154,118177,118178],{},"方法二(命令行)",[312,118180,118184],{"className":118181,"code":118182,"language":118183,"meta":30,"style":30},"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",[318,118185,118186,118191,118196,118201],{"__ignoreMap":30},[321,118187,118188],{"class":323,"line":324},[321,118189,118190],{},"# 开启 Linux 子系统\n",[321,118192,118193],{"class":323,"line":167},[321,118194,118195],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[321,118197,118198],{"class":323,"line":200},[321,118199,118200],{},"# 开启虚拟机平台\n",[321,118202,118203],{"class":323,"line":1401},[321,118204,118205],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22205,118207,118209],{"id":118208},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118211,118212],{},"用管理员权限打开powershell",[19,118214,118215],{},[28,118216],{"alt":30,"src":118217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118219,118220],{},"升级WSL并设置默认版本为WSL2",[312,118222,118224],{"className":118181,"code":118223,"language":118183,"meta":30,"style":30},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[318,118225,118226,118231,118236,118241],{"__ignoreMap":30},[321,118227,118228],{"class":323,"line":324},[321,118229,118230],{},"# 更新 wsl\n",[321,118232,118233],{"class":323,"line":167},[321,118234,118235],{},"wsl --update\n",[321,118237,118238],{"class":323,"line":200},[321,118239,118240],{},"# 将 wsl 版本设置为 wsl2\n",[321,118242,118243],{"class":323,"line":1401},[321,118244,118245],{},"wsl --set-default-version 2\n",[22205,118247,118249],{"id":118248},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[151,118251,118252],{},[154,118253,118254],{},"方式一(商店下载)",[19,118256,118257],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118259,118260],{},[28,118261],{"alt":30,"src":118262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[151,118264,118265],{"start":167},[154,118266,118267],{},"方式二(命令行安装)",[312,118269,118271],{"className":118181,"code":118270,"language":118183,"meta":30,"style":30},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[318,118272,118273,118278,118283],{"__ignoreMap":30},[321,118274,118275],{"class":323,"line":324},[321,118276,118277],{},"# 列出可安装的 Linux 版本\n",[321,118279,118280],{"class":323,"line":167},[321,118281,118282],{},"#（需要科学手段）\n",[321,118284,118285],{"class":323,"line":200},[321,118286,118287],{},"wsl --list --online\n",[19,118289,118290],{},[28,118291],{"alt":30,"src":118292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118294,118295],{},"选择对应发行版并安装",[312,118297,118299],{"className":118181,"code":118298,"language":118183,"meta":30,"style":30},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[318,118300,118301,118306],{"__ignoreMap":30},[321,118302,118303],{"class":323,"line":324},[321,118304,118305],{},"# Ubuntu安装完毕后需要重启系统\n",[321,118307,118308],{"class":323,"line":167},[321,118309,118310],{},"wsl --install -d Ubuntu-24.04\n",[22205,118312,118314],{"id":118313},"_2324-查看系统状态","2.3.2.4 查看系统状态",[312,118316,118318],{"className":118181,"code":118317,"language":118183,"meta":30,"style":30},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[318,118319,118320,118325,118330,118335,118340,118344,118348,118353,118358,118363],{"__ignoreMap":30},[321,118321,118322],{"class":323,"line":324},[321,118323,118324],{},"# 查看 wsl\n",[321,118326,118327],{"class":323,"line":167},[321,118328,118329],{},"wsl -l\n",[321,118331,118332],{"class":323,"line":200},[321,118333,118334],{},"# 查看 wsl 运行版本或模式\n",[321,118336,118337],{"class":323,"line":1401},[321,118338,118339],{},"wsl -l -v\n",[321,118341,118342],{"class":323,"line":1407},[321,118343,2606],{"emptyLinePlaceholder":251},[321,118345,118346],{"class":323,"line":1421},[321,118347,2606],{"emptyLinePlaceholder":251},[321,118349,118350],{"class":323,"line":1427},[321,118351,118352],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[321,118354,118355],{"class":323,"line":1518},[321,118356,118357],{},"wsl --set-version \u003Cdistro> 2\n",[321,118359,118360],{"class":323,"line":1524},[321,118361,118362],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[321,118364,118365],{"class":323,"line":1536},[321,118366,118367],{},"wsl --unregister \u003Cdistro>\n",[19,118369,118370],{},"输出Version为2即正常",[19,118372,118373],{},[28,118374],{"alt":30,"src":118375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22205,118377,118379],{"id":118378},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118381,118382],{},"直接在Powershell里输入wsl命令进入子系统",[312,118384,118386],{"className":118181,"code":118385,"language":118183,"meta":30,"style":30},"# 进入子系统\nwsl\n",[318,118387,118388,118393],{"__ignoreMap":30},[321,118389,118390],{"class":323,"line":324},[321,118391,118392],{},"# 进入子系统\n",[321,118394,118395],{"class":323,"line":167},[321,118396,118397],{},"wsl\n",[19,118399,118400],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118402,118403],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118405,118406],{},[28,118407],{"alt":30,"src":118408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[292,118410,118412],{"id":118411},"_233-配置各种环境","2.3.3 配置各种环境",[22205,118414,118416],{"id":118415},"_2331-换源","2.3.3.1 换源",[19,118418,118419],{},"(同实体机LINUX，往下找教程)",[22205,118421,118423],{"id":118422},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23117,118425,118427],{"id":118426},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118429,118430],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118432,118433],{},[28,118434],{"alt":30,"src":118435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118437,118438],{},[28,118439],{"alt":30,"src":118440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23117,118442,118444],{"id":118443},"_23322-cuda","2.3.3.2.2 CUDA",[19,118446,118447,118448],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[570,118449,118450],{"href":118450,"rel":118451},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24073],[19,118453,118454,118457],{},[28,118455],{"alt":30,"src":118456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[28,118458],{"alt":30,"src":118459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118461,118462],{},"在下方的网站，选择合适的版本。",[19,118464,118465,118466],{},"WSL2 专属 CUDA 指南：",[570,118467,118468],{"href":118468,"rel":118469},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24073],[19,118471,118472],{},[481,118473,118474],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118476,118477],{},[28,118478],{"alt":30,"src":118479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118481,118482],{},"挨行敲一遍",[19,118484,118485],{},[28,118486],{"alt":30,"src":118487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118489,118490,118491,118494],{},"敲完后，输入",[318,118492,118493],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118496,118497],{},[28,118498],{"alt":30,"src":118499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118501,118502,118503,118506],{},"（请详看下方教程的",[481,118504,118505],{},"安装CUDA的配置环境来看","如何配置环境）",[23117,118508,118510],{"id":118509},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118512,118419],{},[19,118514,118515],{},[28,118516],{"alt":30,"src":118517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22205,118519,118521],{"id":118520},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118523,118524],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118526,118527],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118529,118530],{},[28,118531],{"alt":30,"src":118532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118534,118535],{},"连接WSL2",[19,118537,118538],{},[28,118539],{"alt":30,"src":118540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118542,118543],{},"远程开发成功。",[19,118545,118546],{},[28,118547],{"alt":30,"src":118548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118550,118551],{},[28,118552],{"alt":30,"src":118553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118555,118556],{},[28,118557],{"alt":30,"src":118558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22205,118560,118562],{"id":118561},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118564,118565],{},[28,118566],{"alt":30,"src":118567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22205,118569,118571],{"id":118570},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[312,118573,118575],{"className":117441,"code":118574,"language":117443,"meta":30,"style":30},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[318,118576,118577,118585,118593,118604,118608],{"__ignoreMap":30},[321,118578,118579,118581,118583],{"class":323,"line":324},[321,118580,24721],{"class":2169},[321,118582,117462],{"class":436},[321,118584,26387],{"class":436},[321,118586,118587,118589,118591],{"class":323,"line":167},[321,118588,24721],{"class":2169},[321,118590,117462],{"class":436},[321,118592,117478],{"class":436},[321,118594,118595,118597,118599,118601],{"class":323,"line":200},[321,118596,24721],{"class":2169},[321,118598,117462],{"class":436},[321,118600,24042],{"class":436},[321,118602,118603],{"class":436}," mesa-utils\n",[321,118605,118606],{"class":323,"line":1401},[321,118607,2606],{"emptyLinePlaceholder":251},[321,118609,118610],{"class":323,"line":1407},[321,118611,118612],{"class":390},"#然后重启wsl2即可\n",[5333,118614,118615],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":30,"searchDepth":167,"depth":167,"links":118617},[118618,118619,118624],{"id":117895,"depth":167,"text":117896},{"id":117908,"depth":167,"text":117909,"children":118620},[118621,118622,118623],{"id":117912,"depth":200,"text":117913},{"id":117959,"depth":200,"text":117960},{"id":118020,"depth":200,"text":118021},{"id":118056,"depth":167,"text":118057,"children":118625},[118626,118627,118628],{"id":118060,"depth":200,"text":118061},{"id":118122,"depth":200,"text":118123},{"id":118411,"depth":200,"text":118412},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117887,"description":23584},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118635,"title":118636,"body":118637,"description":23584,"extension":249,"meta":121573,"navigation":251,"path":121574,"seo":121575,"stem":121576,"__hash__":121577},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118638,"toc":121545},[118639,118642,118646,118652,118656,118662,118666,118854,118857,118862,118866,118870,118873,118876,118882,118887,118890,118893,118898,118931,118936,118940,119017,119020,119025,119029,119032,119071,119074,119083,119101,119106,119113,119230,119235,119238,119265,119270,119274,119283,119333,119340,119344,119347,119361,119368,119402,119407,119411,119434,119437,119442,119446,119449,119452,119455,119497,119501,119504,119507,119548,119552,119556,119559,119564,119569,119572,119595,119598,119606,119611,119614,119619,119624,119627,119632,119636,119641,119664,119669,119731,119739,119744,119749,119752,119757,119760,119765,119770,119788,119793,119799,119804,119818,119822,119825,119828,119831,119874,119877,119882,119983,119986,119991,119995,119999,120036,120040,120044,120048,120094,120098,120143,120147,120154,120162,120217,120220,120297,120300,120323,120327,120330,120335,120340,120348,120351,120356,120361,120366,120369,120374,120383,120386,120391,120394,120465,120470,120473,120478,120481,120486,120489,120494,120497,120502,120507,120510,120585,120588,120601,120606,120609,120623,120626,120655,120660,120689,120692,120697,120701,120706,120715,120718,120723,120726,120731,120734,120737,120742,120745,120750,120755,120758,120763,120766,120891,120896,120926,120929,120934,120939,120956,120959,121002,121005,121032,121037,121050,121193,121197,121202,121216,121219,121270,121273,121303,121306,121322,121327,121341,121344,121411,121416,121425,121430,121433,121445,121450,121457,121481,121484,121489,121492,121511,121516,121523,121535,121542],[10,118640,118636],{"id":118641},"_3-安装必备配置",[14,118643,118645],{"id":118644},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[312,118647,118650],{"className":118648,"code":118649,"language":5394},[5392],"  打开下方网站（注意，该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",[318,118651,118649],{"__ignoreMap":30},[292,118653,118655],{"id":118654},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[312,118657,118660],{"className":118658,"code":118659,"language":5394},[5392],"  输入以下命令\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",[318,118661,118659],{"__ignoreMap":30},[292,118663,118665],{"id":118664},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[312,118667,118671],{"className":118668,"code":118669,"language":118670,"meta":30,"style":30},"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",[318,118672,118673,118681,118692,118704,118718,118722,118732,118737,118741,118745,118750,118754,118766,118770,118775,118779,118790,118794,118810,118814,118825,118829,118834,118838,118846],{"__ignoreMap":30},[321,118674,118675,118677,118679],{"class":323,"line":324},[321,118676,24721],{"class":2169},[321,118678,117462],{"class":436},[321,118680,26387],{"class":436},[321,118682,118683,118685,118687,118689],{"class":323,"line":167},[321,118684,24721],{"class":2169},[321,118686,117462],{"class":436},[321,118688,24042],{"class":436},[321,118690,118691],{"class":436}," vim\n",[321,118693,118694,118696,118699,118701],{"class":323,"line":200},[321,118695,24721],{"class":2169},[321,118697,118698],{"class":436}," rm",[321,118700,25470],{"class":380},[321,118702,118703],{"class":436}," \u002Fetc\u002Fapt\u002Fsources.list\n",[321,118705,118706,118708,118710,118712,118715],{"class":323,"line":1401},[321,118707,24721],{"class":2169},[321,118709,118698],{"class":436},[321,118711,25470],{"class":380},[321,118713,118714],{"class":436}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[321,118716,118717],{"class":380},"**\n",[321,118719,118720],{"class":323,"line":1407},[321,118721,2606],{"emptyLinePlaceholder":251},[321,118723,118724,118726,118729],{"class":323,"line":1421},[321,118725,24721],{"class":2169},[321,118727,118728],{"class":436}," vim",[321,118730,118731],{"class":436}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[321,118733,118734],{"class":323,"line":1427},[321,118735,118736],{"class":436},"```\n",[321,118738,118739],{"class":323,"line":1518},[321,118740,2606],{"emptyLinePlaceholder":251},[321,118742,118743],{"class":323,"line":1524},[321,118744,2606],{"emptyLinePlaceholder":251},[321,118746,118747],{"class":323,"line":1536},[321,118748,118749],{"class":2169},"选择好Ubuntu版本后，复制下方的内容。\n",[321,118751,118752],{"class":323,"line":1818},[321,118753,2606],{"emptyLinePlaceholder":251},[321,118755,118756,118758,118761,118764],{"class":323,"line":1823},[321,118757,558],{"class":327},[321,118759,118760],{"class":436},"[](",[321,118762,118763],{"class":2169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[321,118765,338],{"class":436},[321,118767,118768],{"class":323,"line":1829},[321,118769,2606],{"emptyLinePlaceholder":251},[321,118771,118772],{"class":323,"line":1834},[321,118773,118774],{"class":2169},"粘贴进去\n",[321,118776,118777],{"class":323,"line":1848},[321,118778,2606],{"emptyLinePlaceholder":251},[321,118780,118781,118783,118785,118788],{"class":323,"line":1853},[321,118782,558],{"class":327},[321,118784,118760],{"class":436},[321,118786,118787],{"class":2169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[321,118789,338],{"class":436},[321,118791,118792],{"class":323,"line":1859},[321,118793,2606],{"emptyLinePlaceholder":251},[321,118795,118796,118799,118802,118805,118807],{"class":323,"line":1880},[321,118797,118798],{"class":2169},"按一下ESC，然后英文冒号，输入",[321,118800,118801],{"class":436}," `",[321,118803,118804],{"class":2169},":wq!",[321,118806,1304],{"class":436},[321,118808,118809],{"class":2169},"然后回车\n",[321,118811,118812],{"class":323,"line":1885},[321,118813,2606],{"emptyLinePlaceholder":251},[321,118815,118816,118818,118820,118823],{"class":323,"line":1899},[321,118817,558],{"class":327},[321,118819,118760],{"class":436},[321,118821,118822],{"class":2169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[321,118824,338],{"class":436},[321,118826,118827],{"class":323,"line":1904},[321,118828,2606],{"emptyLinePlaceholder":251},[321,118830,118831],{"class":323,"line":1933},[321,118832,118833],{"class":2169},"输入以下命令\n",[321,118835,118836],{"class":323,"line":1938},[321,118837,2606],{"emptyLinePlaceholder":251},[321,118839,118840,118843],{"class":323,"line":1955},[321,118841,118842],{"class":436},"```",[321,118844,118845],{"class":2169},"Bash\n",[321,118847,118848,118850,118852],{"class":323,"line":1960},[321,118849,24721],{"class":2169},[321,118851,117462],{"class":436},[321,118853,26387],{"class":436},[19,118855,118856],{},"这里被替换成对应学校则成功",[19,118858,118859],{},[28,118860],{"alt":30,"src":118861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118863,118865],{"id":118864},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[292,118867,118869],{"id":118868},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118871,118872],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118874,118875],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,118877,118878],{},[570,118879,118880],{"href":118880,"rel":118881},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24073],[19,118883,118884],{},[28,118885],{"alt":30,"src":118886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,118888,118889],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,118891,118892],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,118894,118895],{},[28,118896],{"alt":30,"src":118897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[312,118899,118901],{"className":117441,"code":118900,"language":117443,"meta":30,"style":30},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[318,118902,118903,118908,118915,118920],{"__ignoreMap":30},[321,118904,118905],{"class":323,"line":324},[321,118906,118907],{"class":390},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[321,118909,118910,118912],{"class":323,"line":167},[321,118911,101421],{"class":380},[321,118913,118914],{"class":436}," ~\u002FDownloads\n",[321,118916,118917],{"class":323,"line":200},[321,118918,118919],{"class":390},"#下方chrome安装包名不一定是这个，根据名字来看\n",[321,118921,118922,118924,118926,118928],{"class":323,"line":1401},[321,118923,24721],{"class":2169},[321,118925,117462],{"class":436},[321,118927,24042],{"class":436},[321,118929,118930],{"class":436}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,118932,118933],{},[28,118934],{"alt":30,"src":118935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[292,118937,118939],{"id":118938},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[312,118941,118943],{"className":117441,"code":118942,"language":117443,"meta":30,"style":30},"# 老版\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",[318,118944,118945,118950,118958,118969,118974,118978,118983,118993,119001,119012],{"__ignoreMap":30},[321,118946,118947],{"class":323,"line":324},[321,118948,118949],{"class":390},"# 老版\n",[321,118951,118952,118954,118956],{"class":323,"line":167},[321,118953,24721],{"class":2169},[321,118955,117462],{"class":436},[321,118957,26387],{"class":436},[321,118959,118960,118962,118964,118966],{"class":323,"line":200},[321,118961,24721],{"class":2169},[321,118963,117462],{"class":436},[321,118965,24042],{"class":436},[321,118967,118968],{"class":436}," neofetch\n",[321,118970,118971],{"class":323,"line":1401},[321,118972,118973],{"class":2169},"neofetch\n",[321,118975,118976],{"class":323,"line":1407},[321,118977,2606],{"emptyLinePlaceholder":251},[321,118979,118980],{"class":323,"line":1421},[321,118981,118982],{"class":390},"# 新版\n",[321,118984,118985,118987,118990],{"class":323,"line":1427},[321,118986,24721],{"class":2169},[321,118988,118989],{"class":436}," add-apt-repository",[321,118991,118992],{"class":436}," ppa:zhangsongcui3371\u002Ffastfetch\n",[321,118994,118995,118997,118999],{"class":323,"line":1518},[321,118996,24721],{"class":2169},[321,118998,117462],{"class":436},[321,119000,26387],{"class":436},[321,119002,119003,119005,119007,119009],{"class":323,"line":1524},[321,119004,24721],{"class":2169},[321,119006,117462],{"class":436},[321,119008,24042],{"class":436},[321,119010,119011],{"class":436}," fastfetch\n",[321,119013,119014],{"class":323,"line":1536},[321,119015,119016],{"class":2169},"fastfetch\n",[19,119018,119019],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119021,119022],{},[28,119023],{"alt":30,"src":119024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[292,119026,119028],{"id":119027},"_323-移除snap应用","3.2.3 移除snap应用",[19,119030,119031],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[312,119033,119035],{"className":117441,"code":119034,"language":117443,"meta":30,"style":30},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[318,119036,119037,119049,119060],{"__ignoreMap":30},[321,119038,119039,119041,119043,119046],{"class":323,"line":324},[321,119040,24721],{"class":2169},[321,119042,26658],{"class":436},[321,119044,119045],{"class":436}," disable",[321,119047,119048],{"class":436}," snapd.service\n",[321,119050,119051,119053,119055,119057],{"class":323,"line":167},[321,119052,24721],{"class":2169},[321,119054,26658],{"class":436},[321,119056,119045],{"class":436},[321,119058,119059],{"class":436}," snapd.socket\n",[321,119061,119062,119064,119066,119068],{"class":323,"line":200},[321,119063,24721],{"class":2169},[321,119065,26658],{"class":436},[321,119067,119045],{"class":436},[321,119069,119070],{"class":436}," snapd.seeded.service\n",[19,119072,119073],{},"然后查看snap应用列表",[19,119075,119076,119077,119082],{},"根据你安装的选择不同（最小安装或普通安装），有",[570,119078,119081],{"href":119079,"rel":119080},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24073],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[312,119084,119086],{"className":117441,"code":119085,"language":117443,"meta":30,"style":30},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[318,119087,119088,119093],{"__ignoreMap":30},[321,119089,119090],{"class":323,"line":324},[321,119091,119092],{"class":390},"# 查询当前系统上snap安装了哪些app\n",[321,119094,119095,119098],{"class":323,"line":167},[321,119096,119097],{"class":2169},"snap",[321,119099,119100],{"class":436}," list\n",[19,119102,119103],{},[28,119104],{"alt":30,"src":119105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119107,119108,119109,119112],{},"卸载掉图中所有应用，按照 ",[481,119110,119111],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[312,119114,119116],{"className":117441,"code":119115,"language":117443,"meta":30,"style":30},"#移除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",[318,119117,119118,119123,119135,119140,119151,119156,119167,119172,119183,119188,119192,119197,119208,119219],{"__ignoreMap":30},[321,119119,119120],{"class":323,"line":324},[321,119121,119122],{"class":390},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[321,119124,119125,119127,119130,119132],{"class":323,"line":167},[321,119126,24721],{"class":2169},[321,119128,119129],{"class":436}," snap",[321,119131,26224],{"class":436},[321,119133,119134],{"class":436}," snap-store\n",[321,119136,119137],{"class":323,"line":200},[321,119138,119139],{"class":390},"#移除firefox浏览器\n",[321,119141,119142,119144,119146,119148],{"class":323,"line":1401},[321,119143,24721],{"class":2169},[321,119145,119129],{"class":436},[321,119147,26224],{"class":436},[321,119149,119150],{"class":436}," firefox\n",[321,119152,119153],{"class":323,"line":1407},[321,119154,119155],{"class":390},"#移除gnome-42-2204\n",[321,119157,119158,119160,119162,119164],{"class":323,"line":1421},[321,119159,24721],{"class":2169},[321,119161,119129],{"class":436},[321,119163,26224],{"class":436},[321,119165,119166],{"class":436}," gnome-42-2204\n",[321,119168,119169],{"class":323,"line":1427},[321,119170,119171],{"class":390},"#移除gtk-common-themes\n",[321,119173,119174,119176,119178,119180],{"class":323,"line":1518},[321,119175,24721],{"class":2169},[321,119177,119129],{"class":436},[321,119179,26224],{"class":436},[321,119181,119182],{"class":436}," gtk-common-themes\n",[321,119184,119185],{"class":323,"line":1524},[321,119186,119187],{"class":390},"#移除其它...\n",[321,119189,119190],{"class":323,"line":1536},[321,119191,2880],{"class":331},[321,119193,119194],{"class":323,"line":1818},[321,119195,119196],{"class":390},"#移除core22,bare以及snapd\n",[321,119198,119199,119201,119203,119205],{"class":323,"line":1823},[321,119200,24721],{"class":2169},[321,119202,119129],{"class":436},[321,119204,26224],{"class":436},[321,119206,119207],{"class":436}," core22\n",[321,119209,119210,119212,119214,119216],{"class":323,"line":1829},[321,119211,24721],{"class":2169},[321,119213,119129],{"class":436},[321,119215,26224],{"class":436},[321,119217,119218],{"class":436}," bare\n",[321,119220,119221,119223,119225,119227],{"class":323,"line":1834},[321,119222,24721],{"class":2169},[321,119224,119129],{"class":436},[321,119226,26224],{"class":436},[321,119228,119229],{"class":436}," snapd\n",[19,119231,119232],{},[28,119233],{"alt":30,"src":119234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119236,119237],{},"输入以下命令查看是否还有snap包",[312,119239,119241],{"className":117441,"code":119240,"language":117443,"meta":30,"style":30},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[318,119242,119243,119249,119253,119257,119261],{"__ignoreMap":30},[321,119244,119245,119247],{"class":323,"line":324},[321,119246,119097],{"class":2169},[321,119248,119100],{"class":436},[321,119250,119251],{"class":323,"line":167},[321,119252,118949],{"class":390},[321,119254,119255],{"class":323,"line":200},[321,119256,118973],{"class":2169},[321,119258,119259],{"class":323,"line":1401},[321,119260,118982],{"class":390},[321,119262,119263],{"class":323,"line":1407},[321,119264,119016],{"class":2169},[19,119266,119267],{},[28,119268],{"alt":30,"src":119269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[292,119271,119273],{"id":119272},"_324-移除snap","3.2.4 移除snap",[19,119275,119276,119277,119282],{},"在删除掉",[570,119278,119281],{"href":119279,"rel":119280},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24073],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[312,119284,119286],{"className":117441,"code":119285,"language":117443,"meta":30,"style":30}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[318,119287,119288,119293,119306,119311,119322],{"__ignoreMap":30},[321,119289,119290],{"class":323,"line":324},[321,119291,119292],{"class":390}," #使用apt移除掉snap\n",[321,119294,119295,119297,119299,119301,119304],{"class":323,"line":167},[321,119296,24721],{"class":2169},[321,119298,117462],{"class":436},[321,119300,117770],{"class":436},[321,119302,119303],{"class":380}," --purge",[321,119305,119229],{"class":436},[321,119307,119308],{"class":323,"line":200},[321,119309,119310],{"class":390},"#移除snapd的一些目录\n",[321,119312,119313,119315,119317,119319],{"class":323,"line":1401},[321,119314,24721],{"class":2169},[321,119316,118698],{"class":436},[321,119318,25470],{"class":380},[321,119320,119321],{"class":436}," \u002Fvar\u002Fcache\u002Fsnapd\n",[321,119323,119324,119326,119328,119330],{"class":323,"line":1407},[321,119325,24721],{"class":2169},[321,119327,118698],{"class":436},[321,119329,25470],{"class":380},[321,119331,119332],{"class":436}," ~\u002Fsnap\n",[19,119334,119335,119336,119339],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[318,119337,119338],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[292,119341,119343],{"id":119342},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119345,119346],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[312,119348,119350],{"className":117441,"code":119349,"language":117443,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[318,119351,119352],{"__ignoreMap":30},[321,119353,119354,119356,119358],{"class":323,"line":324},[321,119355,24721],{"class":2169},[321,119357,118728],{"class":436},[321,119359,119360],{"class":436}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119362,119363,119364,119367],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[318,119365,119366],{},":wq"," 回车",[312,119369,119371],{"className":117441,"code":119370,"language":117443,"meta":30,"style":30},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[318,119372,119373,119380,119394],{"__ignoreMap":30},[321,119374,119375,119378],{"class":323,"line":324},[321,119376,119377],{"class":2169},"Package:",[321,119379,119229],{"class":436},[321,119381,119382,119385,119388,119391],{"class":323,"line":167},[321,119383,119384],{"class":2169},"Pin:",[321,119386,119387],{"class":436}," release",[321,119389,119390],{"class":436}," a=",[321,119392,119393],{"class":380},"*\n",[321,119395,119396,119399],{"class":323,"line":200},[321,119397,119398],{"class":2169},"Pin-Priority:",[321,119400,119401],{"class":380}," -10\n",[19,119403,119404],{},[28,119405],{"alt":30,"src":119406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[292,119408,119410],{"id":119409},"_326-测试是否成功","3.2.6 测试是否成功",[312,119412,119414],{"className":117441,"code":119413,"language":117443,"meta":30,"style":30},"sudo apt update\nsudo apt install firefox\n",[318,119415,119416,119424],{"__ignoreMap":30},[321,119417,119418,119420,119422],{"class":323,"line":324},[321,119419,24721],{"class":2169},[321,119421,117462],{"class":436},[321,119423,26387],{"class":436},[321,119425,119426,119428,119430,119432],{"class":323,"line":167},[321,119427,24721],{"class":2169},[321,119429,117462],{"class":436},[321,119431,24042],{"class":436},[321,119433,119150],{"class":436},[19,119435,119436],{},"这里提示snapd无法被安装，就证明成功了",[19,119438,119439],{},[28,119440],{"alt":30,"src":119441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[292,119443,119445],{"id":119444},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119447,119448],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119450,119451],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119453,119454],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[312,119456,119458],{"className":117441,"code":119457,"language":117443,"meta":30,"style":30},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[318,119459,119460,119465,119474,119479,119487],{"__ignoreMap":30},[321,119461,119462],{"class":323,"line":324},[321,119463,119464],{"class":390},"# 添加Mozilla提供的源\n",[321,119466,119467,119469,119471],{"class":323,"line":167},[321,119468,24721],{"class":2169},[321,119470,118989],{"class":436},[321,119472,119473],{"class":436}," ppa:mozillateam\u002Fppa\n",[321,119475,119476],{"class":323,"line":200},[321,119477,119478],{"class":390},"# 安装Firefox\n",[321,119480,119481,119483,119485],{"class":323,"line":1401},[321,119482,24721],{"class":2169},[321,119484,117462],{"class":436},[321,119486,26387],{"class":436},[321,119488,119489,119491,119493,119495],{"class":323,"line":1407},[321,119490,24721],{"class":2169},[321,119492,117462],{"class":436},[321,119494,24042],{"class":436},[321,119496,119150],{"class":436},[292,119498,119500],{"id":119499},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119502,119503],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119505,119506],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[312,119508,119510],{"className":117441,"code":119509,"language":117443,"meta":30,"style":30},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[318,119511,119512,119517,119527,119535,119539],{"__ignoreMap":30},[321,119513,119514],{"class":323,"line":324},[321,119515,119516],{"class":390},"#删掉禁止安装snap的配置文件\n",[321,119518,119519,119521,119523,119525],{"class":323,"line":167},[321,119520,24721],{"class":2169},[321,119522,118698],{"class":436},[321,119524,25470],{"class":380},[321,119526,119360],{"class":436},[321,119528,119529,119531,119533],{"class":323,"line":200},[321,119530,24721],{"class":2169},[321,119532,117462],{"class":436},[321,119534,26387],{"class":436},[321,119536,119537],{"class":323,"line":1401},[321,119538,2606],{"emptyLinePlaceholder":251},[321,119540,119541,119543,119545],{"class":323,"line":1407},[321,119542,24721],{"class":2169},[321,119544,117462],{"class":436},[321,119546,119547],{"class":436}," dist-update\n",[14,119549,119551],{"id":119550},"_33-中文输入法","3.3 中文输入法",[292,119553,119555],{"id":119554},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119557,119558],{},"官网下载搜狗输入法",[19,119560,119561],{},[28,119562],{"alt":30,"src":119563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119565,119566],{},[28,119567],{"alt":30,"src":119568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119570,119571],{},"打开终端输入如下",[312,119573,119575],{"className":117441,"code":119574,"language":117443,"meta":30,"style":30},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[318,119576,119577,119584],{"__ignoreMap":30},[321,119578,119579,119581],{"class":323,"line":324},[321,119580,101421],{"class":380},[321,119582,119583],{"class":436}," ~\u002FDownloads\u002F\n",[321,119585,119586,119588,119590,119592],{"class":323,"line":167},[321,119587,24721],{"class":2169},[321,119589,117462],{"class":436},[321,119591,24042],{"class":436},[321,119593,119594],{"class":436}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119596,119597],{},"打开Fcitx",[19,119599,119600,119603],{},[28,119601],{"alt":30,"src":119602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[28,119604],{"alt":30,"src":119605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119607,119608],{},[28,119609],{"alt":30,"src":119610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119612,119613],{},"添加搜狗输入法",[19,119615,119616],{},[28,119617],{"alt":30,"src":119618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119620,119621],{},[28,119622],{"alt":30,"src":119623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119625,119626],{},"将搜狗输入法设置为唯一输入法",[19,119628,119629],{},[28,119630],{"alt":30,"src":119631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[292,119633,119635],{"id":119634},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[151,119637,119638],{},[154,119639,119640],{},"卸载旧输入法",[312,119642,119644],{"className":118668,"code":119643,"language":118670,"meta":30,"style":30},"sudo apt purge fcitx* ibus*\n",[318,119645,119646],{"__ignoreMap":30},[321,119647,119648,119650,119652,119654,119657,119659,119662],{"class":323,"line":324},[321,119649,24721],{"class":2169},[321,119651,117462],{"class":436},[321,119653,117803],{"class":436},[321,119655,119656],{"class":436}," fcitx",[321,119658,787],{"class":380},[321,119660,119661],{"class":436}," ibus",[321,119663,119393],{"class":380},[151,119665,119666],{"start":167},[154,119667,119668],{},"安装Fcitx5",[312,119670,119672],{"className":117441,"code":119671,"language":117443,"meta":30,"style":30},"# 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",[318,119673,119674,119679,119693,119697,119702,119711,119719],{"__ignoreMap":30},[321,119675,119676],{"class":323,"line":324},[321,119677,119678],{"class":390},"# Ubuntu22.04及以上、Debian12及以上\n",[321,119680,119681,119683,119685,119687,119690],{"class":323,"line":167},[321,119682,24721],{"class":2169},[321,119684,117462],{"class":436},[321,119686,24042],{"class":436},[321,119688,119689],{"class":436}," fcitx5",[321,119691,119692],{"class":436}," fcitx5-chinese-addons\n",[321,119694,119695],{"class":323,"line":200},[321,119696,2606],{"emptyLinePlaceholder":251},[321,119698,119699],{"class":323,"line":1401},[321,119700,119701],{"class":390},"# Ubuntu20.04\n",[321,119703,119704,119706,119708],{"class":323,"line":1407},[321,119705,24721],{"class":2169},[321,119707,118989],{"class":436},[321,119709,119710],{"class":436}," ppa:zhsj\u002Ffcitx5\n",[321,119712,119713,119715,119717],{"class":323,"line":1421},[321,119714,24721],{"class":2169},[321,119716,117462],{"class":436},[321,119718,26387],{"class":436},[321,119720,119721,119723,119725,119727,119729],{"class":323,"line":1427},[321,119722,24721],{"class":2169},[321,119724,117462],{"class":436},[321,119726,24042],{"class":436},[321,119728,119689],{"class":436},[321,119730,119692],{"class":436},[151,119732,119733,119736],{"start":200},[154,119734,119735],{},"Reboot System",[154,119737,119738],{},"启动Fcitx5",[19,119740,119741],{},[28,119742],{"alt":30,"src":119743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[151,119745,119746],{"start":1407},[154,119747,119748],{},"修改一些设置",[19,119750,119751],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119753,119754],{},[28,119755],{"alt":30,"src":119756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119758,119759],{},"添加快捷键以便于更好切换中英文",[19,119761,119762],{},[28,119763],{"alt":30,"src":119764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[151,119766,119767],{"start":1421},[154,119768,119769],{},"重启",[312,119771,119773],{"className":118668,"code":119772,"language":118670,"meta":30,"style":30},"sudo shutdown -r now\n",[318,119774,119775],{"__ignoreMap":30},[321,119776,119777,119779,119782,119785],{"class":323,"line":324},[321,119778,24721],{"class":2169},[321,119780,119781],{"class":436}," shutdown",[321,119783,119784],{"class":380}," -r",[321,119786,119787],{"class":436}," now\n",[151,119789,119790],{"start":1427},[154,119791,119792],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119794,119795],{},[570,119796,119797],{"href":119797,"rel":119798},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24073],[151,119800,119801],{"start":1518},[154,119802,119803],{},"再重启",[312,119805,119806],{"className":118668,"code":119772,"language":118670,"meta":30,"style":30},[318,119807,119808],{"__ignoreMap":30},[321,119809,119810,119812,119814,119816],{"class":323,"line":324},[321,119811,24721],{"class":2169},[321,119813,119781],{"class":436},[321,119815,119784],{"class":380},[321,119817,119787],{"class":436},[14,119819,119821],{"id":119820},"_34-pip3源替换","3.4 pip3源替换",[19,119823,119824],{},"非Debian系发行版需要做。",[19,119826,119827],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119829,119830],{},"使用dnf的系统也可能不用做。",[312,119832,119834],{"className":117441,"code":119833,"language":117443,"meta":30,"style":30},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[318,119835,119836,119841,119848,119853,119858],{"__ignoreMap":30},[321,119837,119838],{"class":323,"line":324},[321,119839,119840],{"class":390},"# 检查是否已安装 pip\n",[321,119842,119843,119846],{"class":323,"line":167},[321,119844,119845],{"class":2169},"pip3",[321,119847,26438],{"class":380},[321,119849,119850],{"class":323,"line":200},[321,119851,119852],{"class":390},"# 如果未安装，先安装 pip3（见下方）\n",[321,119854,119855],{"class":323,"line":1401},[321,119856,119857],{"class":390},"# 配置 pip 使用清华源\n",[321,119859,119860,119862,119865,119868,119871],{"class":323,"line":1407},[321,119861,119845],{"class":2169},[321,119863,119864],{"class":436}," config",[321,119866,119867],{"class":436}," set",[321,119869,119870],{"class":436}," global.index-url",[321,119872,119873],{"class":436}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,119875,119876],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,119878,119879],{},[28,119880],{"alt":30,"src":119881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[312,119883,119885],{"className":117441,"code":119884,"language":117443,"meta":30,"style":30},"#安装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",[318,119886,119887,119892,119900,119911,119915,119920,119939,119943,119948,119960,119964,119969],{"__ignoreMap":30},[321,119888,119889],{"class":323,"line":324},[321,119890,119891],{"class":390},"#安装pip3\n",[321,119893,119894,119896,119898],{"class":323,"line":167},[321,119895,24721],{"class":2169},[321,119897,117462],{"class":436},[321,119899,26387],{"class":436},[321,119901,119902,119904,119906,119908],{"class":323,"line":200},[321,119903,24721],{"class":2169},[321,119905,26221],{"class":436},[321,119907,24042],{"class":436},[321,119909,119910],{"class":436}," python3-pip\n",[321,119912,119913],{"class":323,"line":1401},[321,119914,2606],{"emptyLinePlaceholder":251},[321,119916,119917],{"class":323,"line":1407},[321,119918,119919],{"class":390},"#更新pip3\n",[321,119921,119922,119924,119926,119928,119930,119932,119935,119937],{"class":323,"line":1421},[321,119923,101024],{"class":2169},[321,119925,101027],{"class":380},[321,119927,101050],{"class":436},[321,119929,24042],{"class":436},[321,119931,26575],{"class":380},[321,119933,119934],{"class":436}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[321,119936,101055],{"class":380},[321,119938,101058],{"class":436},[321,119940,119941],{"class":323,"line":1427},[321,119942,2606],{"emptyLinePlaceholder":251},[321,119944,119945],{"class":323,"line":1518},[321,119946,119947],{"class":390},"#设置pip源为清华源\n",[321,119949,119950,119952,119954,119956,119958],{"class":323,"line":1524},[321,119951,119845],{"class":2169},[321,119953,119864],{"class":436},[321,119955,119867],{"class":436},[321,119957,119870],{"class":436},[321,119959,119873],{"class":436},[321,119961,119962],{"class":323,"line":1536},[321,119963,2606],{"emptyLinePlaceholder":251},[321,119965,119966],{"class":323,"line":1818},[321,119967,119968],{"class":390},"#测试\n",[321,119970,119971,119973,119975,119977,119979,119981],{"class":323,"line":1823},[321,119972,101024],{"class":2169},[321,119974,101027],{"class":380},[321,119976,101050],{"class":436},[321,119978,24042],{"class":436},[321,119980,101055],{"class":380},[321,119982,101058],{"class":436},[19,119984,119985],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,119987,119988],{},[28,119989],{"alt":30,"src":119990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,119992,119994],{"id":119993},"_35-显卡驱动安装","3.5 显卡驱动安装",[292,119996,119998],{"id":119997},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[312,120000,120002],{"className":118668,"code":120001,"language":118670,"meta":30,"style":30},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[318,120003,120004,120009,120024,120029],{"__ignoreMap":30},[321,120005,120006],{"class":323,"line":324},[321,120007,120008],{"class":390},"# 如果是使用apt安装的驱动\n",[321,120010,120011,120013,120015,120017,120019,120022],{"class":323,"line":167},[321,120012,24721],{"class":2169},[321,120014,26221],{"class":436},[321,120016,26224],{"class":436},[321,120018,119303],{"class":380},[321,120020,120021],{"class":436}," nvidia",[321,120023,119393],{"class":380},[321,120025,120026],{"class":323,"line":200},[321,120027,120028],{"class":390},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[321,120030,120031,120033],{"class":323,"line":1401},[321,120032,24721],{"class":2169},[321,120034,120035],{"class":436}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[292,120037,120039],{"id":120038},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22205,120041,120043],{"id":120042},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23117,120045,120047],{"id":120046},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[312,120049,120051],{"className":118668,"code":120050,"language":118670,"meta":30,"style":30},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[318,120052,120053,120058,120069,120074,120084,120089],{"__ignoreMap":30},[321,120054,120055],{"class":323,"line":324},[321,120056,120057],{"class":390},"# 安装英伟达驱动\n",[321,120059,120060,120062,120064,120066],{"class":323,"line":167},[321,120061,24721],{"class":2169},[321,120063,117462],{"class":436},[321,120065,24042],{"class":436},[321,120067,120068],{"class":436}," nvidia-driver-版本号\n",[321,120070,120071],{"class":323,"line":200},[321,120072,120073],{"class":390},"# 重启 \n",[321,120075,120076,120078,120080,120082],{"class":323,"line":1401},[321,120077,24721],{"class":2169},[321,120079,119781],{"class":436},[321,120081,119784],{"class":380},[321,120083,119787],{"class":436},[321,120085,120086],{"class":323,"line":1407},[321,120087,120088],{"class":390},"# 检查驱动是否安装成功\n",[321,120090,120091],{"class":323,"line":1421},[321,120092,120093],{"class":2169},"nvidia-smi\n",[23117,120095,120097],{"id":120096},"_35212-debian","3.5.2.1.2 Debian",[312,120099,120101],{"className":118668,"code":120100,"language":118670,"meta":30,"style":30},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[318,120102,120103,120107,120121,120125,120135,120139],{"__ignoreMap":30},[321,120104,120105],{"class":323,"line":324},[321,120106,120057],{"class":390},[321,120108,120109,120111,120113,120115,120118],{"class":323,"line":167},[321,120110,24721],{"class":2169},[321,120112,117462],{"class":436},[321,120114,24042],{"class":436},[321,120116,120117],{"class":436}," nvidia-driver",[321,120119,120120],{"class":436}," nvidia-settings\n",[321,120122,120123],{"class":323,"line":200},[321,120124,120073],{"class":390},[321,120126,120127,120129,120131,120133],{"class":323,"line":1401},[321,120128,24721],{"class":2169},[321,120130,119781],{"class":436},[321,120132,119784],{"class":380},[321,120134,119787],{"class":436},[321,120136,120137],{"class":323,"line":1407},[321,120138,120088],{"class":390},[321,120140,120141],{"class":323,"line":1421},[321,120142,120093],{"class":2169},[22205,120144,120146],{"id":120145},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120148,120149,120150,120153],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[481,120151,120152],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120155,120156,120157],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23761,120158,120159],{},[481,120160,120161],{},"（也可以不禁用桌面环境，直接进行下一步。）",[312,120163,120165],{"className":118668,"code":120164,"language":118670,"meta":30,"style":30},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[318,120166,120167,120172,120182,120187,120200,120205],{"__ignoreMap":30},[321,120168,120169],{"class":323,"line":324},[321,120170,120171],{"class":390},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[321,120173,120174,120176,120179],{"class":323,"line":167},[321,120175,24721],{"class":2169},[321,120177,120178],{"class":436}," telinit",[321,120180,120181],{"class":380}," 3\n",[321,120183,120184],{"class":323,"line":200},[321,120185,120186],{"class":390},"# ubuntu 使用下方命令\n",[321,120188,120189,120191,120194,120197],{"class":323,"line":1401},[321,120190,24721],{"class":2169},[321,120192,120193],{"class":436}," service",[321,120195,120196],{"class":436}," lightdm",[321,120198,120199],{"class":436}," stop\n",[321,120201,120202],{"class":323,"line":1407},[321,120203,120204],{"class":390},"# Fedora 使用下方命令\n",[321,120206,120207,120209,120211,120214],{"class":323,"line":1421},[321,120208,24721],{"class":2169},[321,120210,26658],{"class":436},[321,120212,120213],{"class":436}," isolate",[321,120215,120216],{"class":436}," multi-user.target\n",[19,120218,120219],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[312,120221,120223],{"className":118668,"code":120222,"language":118670,"meta":30,"style":30},"# 编译环境+准备工作\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",[318,120224,120225,120230,120241,120246,120253,120258,120270,120275,120282,120287],{"__ignoreMap":30},[321,120226,120227],{"class":323,"line":324},[321,120228,120229],{"class":390},"# 编译环境+准备工作\n",[321,120231,120232,120234,120236,120238],{"class":323,"line":167},[321,120233,24721],{"class":2169},[321,120235,117462],{"class":436},[321,120237,24042],{"class":436},[321,120239,120240],{"class":436}," build-essential\n",[321,120242,120243],{"class":323,"line":200},[321,120244,120245],{"class":390},"# 进入到.run目录中\n",[321,120247,120248,120250],{"class":323,"line":1401},[321,120249,101421],{"class":380},[321,120251,120252],{"class":436}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[321,120254,120255],{"class":323,"line":1407},[321,120256,120257],{"class":390},"# 给驱动文件增加可执行权限：\n",[321,120259,120260,120262,120264,120267],{"class":323,"line":1421},[321,120261,24721],{"class":2169},[321,120263,24724],{"class":436},[321,120265,120266],{"class":436}," a+x",[321,120268,120269],{"class":436}," NVIDIA-Linux-x86_64-550.107.02.run\n",[321,120271,120272],{"class":323,"line":1427},[321,120273,120274],{"class":390},"# 然后执行安装：\n",[321,120276,120277,120279],{"class":323,"line":1518},[321,120278,24721],{"class":2169},[321,120280,120281],{"class":436}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[321,120283,120284],{"class":323,"line":1524},[321,120285,120286],{"class":390},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[321,120288,120289,120291,120294],{"class":323,"line":1536},[321,120290,24721],{"class":2169},[321,120292,120293],{"class":436}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[321,120295,120296],{"class":380},"  --no-opengl-files\n",[19,120298,120299],{},"安装完毕重启即可",[312,120301,120303],{"className":118668,"code":120302,"language":118670,"meta":30,"style":30},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[318,120304,120305,120309,120315,120319],{"__ignoreMap":30},[321,120306,120307],{"class":323,"line":324},[321,120308,120073],{"class":390},[321,120310,120311,120313],{"class":323,"line":167},[321,120312,24721],{"class":2169},[321,120314,26792],{"class":436},[321,120316,120317],{"class":323,"line":200},[321,120318,120088],{"class":390},[321,120320,120321],{"class":323,"line":1401},[321,120322,120093],{"class":2169},[292,120324,120326],{"id":120325},"_353-安装cuda","3.5.3 安装CUDA",[19,120328,120329],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120331,120332],{},[28,120333],{"alt":30,"src":120334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[151,120336,120337],{},[154,120338,120339],{},"先查看显卡驱动所支持的最高CUDA版本",[312,120341,120342],{"className":118668,"code":120093,"language":118670,"meta":30,"style":30},[318,120343,120344],{"__ignoreMap":30},[321,120345,120346],{"class":323,"line":324},[321,120347,120093],{"class":2169},[19,120349,120350],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120352,120353],{},[28,120354],{"alt":30,"src":120355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[151,120357,120358],{"start":167},[154,120359,120360],{},"下载CUDA并安装CUDA",[19,120362,118447,120363],{},[570,120364,118450],{"href":118450,"rel":120365},[24073],[19,120367,120368],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120370,120371],{},[28,120372],{"alt":30,"src":120373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120375,120376,120377,120382],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[570,120378,120381],{"href":120379,"rel":120380},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24073],"Vinci机器人队单片机教程","）",[19,120384,120385],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120387,120388],{},[28,120389],{"alt":30,"src":120390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120392,120393],{},"将最下方框框里的命令敲入终端",[312,120395,120397],{"className":118668,"code":120396,"language":118670,"meta":30,"style":30},"# 在当前文件夹下创建一个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",[318,120398,120399,120404,120413,120418,120425,120430,120438,120443,120454,120459],{"__ignoreMap":30},[321,120400,120401],{"class":323,"line":324},[321,120402,120403],{"class":390},"# 在当前文件夹下创建一个ttt的子文件夹\n",[321,120405,120406,120408,120410],{"class":323,"line":167},[321,120407,101411],{"class":2169},[321,120409,29361],{"class":380},[321,120411,120412],{"class":436}," .\u002Fttt\n",[321,120414,120415],{"class":323,"line":200},[321,120416,120417],{"class":390},"# 进入ttt文件夹\n",[321,120419,120420,120422],{"class":323,"line":1401},[321,120421,101421],{"class":380},[321,120423,120424],{"class":436}," ttt\n",[321,120426,120427],{"class":323,"line":1407},[321,120428,120429],{"class":390},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[321,120431,120432,120435],{"class":323,"line":1421},[321,120433,120434],{"class":2169},"wget",[321,120436,120437],{"class":436}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[321,120439,120440],{"class":323,"line":1427},[321,120441,120442],{"class":390},"# 给予权限\n",[321,120444,120445,120447,120449,120451],{"class":323,"line":1518},[321,120446,24721],{"class":2169},[321,120448,24724],{"class":436},[321,120450,120266],{"class":436},[321,120452,120453],{"class":436}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[321,120455,120456],{"class":323,"line":1524},[321,120457,120458],{"class":390},"# 运行脚本\n",[321,120460,120461,120463],{"class":323,"line":1536},[321,120462,24721],{"class":2169},[321,120464,120453],{"class":436},[19,120466,120467],{},[28,120468],{"alt":30,"src":120469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120471,120472],{},"正在安装中：",[19,120474,120475],{},[28,120476],{"alt":30,"src":120477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120479,120480],{},"输入accept接受即可",[19,120482,120483],{},[28,120484],{"alt":30,"src":120485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120487,120488],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120490,120491],{},[28,120492],{"alt":30,"src":120493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120495,120496],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120498,120499],{},[28,120500],{"alt":30,"src":120501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[151,120503,120504],{"start":200},[154,120505,120506],{},"配置环境",[19,120508,120509],{},"根据上方确认一下路径，比如我上面红色框起来的为",[312,120511,120513],{"className":118668,"code":120512,"language":118670,"meta":30,"style":30},"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",[318,120514,120515,120531,120546],{"__ignoreMap":30},[321,120516,120517,120520,120523,120526,120529],{"class":323,"line":324},[321,120518,120519],{"class":2169},"Please",[321,120521,120522],{"class":436}," make",[321,120524,120525],{"class":436}," sure",[321,120527,120528],{"class":436}," that",[321,120530,2880],{"class":331},[321,120532,120533,120535,120538,120541,120544],{"class":323,"line":167},[321,120534,52416],{"class":2169},[321,120536,120537],{"class":436},"   PATH",[321,120539,120540],{"class":436}," includes",[321,120542,120543],{"class":436}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[321,120545,2880],{"class":331},[321,120547,120548,120550,120553,120555,120558,120561,120563,120566,120569,120572,120575,120577,120580,120582],{"class":323,"line":200},[321,120549,52416],{"class":2169},[321,120551,120552],{"class":436},"   LD_LIBRARY_PATH",[321,120554,120540],{"class":436},[321,120556,120557],{"class":436}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[321,120559,120560],{"class":436}," or,",[321,120562,5416],{"class":436},[321,120564,120565],{"class":436}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[321,120567,120568],{"class":436}," to",[321,120570,120571],{"class":436}," \u002Fetc\u002Fld.so.conf",[321,120573,120574],{"class":436}," and",[321,120576,27375],{"class":436},[321,120578,120579],{"class":436}," ldconfig",[321,120581,64749],{"class":436},[321,120583,120584],{"class":436}," root\n",[19,120586,120587],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[312,120589,120591],{"className":118668,"code":120590,"language":118670,"meta":30,"style":30},"which nvcc\n",[318,120592,120593],{"__ignoreMap":30},[321,120594,120595,120598],{"class":323,"line":324},[321,120596,120597],{"class":380},"which",[321,120599,120600],{"class":436}," nvcc\n",[19,120602,120603],{},[28,120604],{"alt":30,"src":120605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120607,120608],{},"所以我进行以下操作：",[312,120610,120612],{"className":118668,"code":120611,"language":118670,"meta":30,"style":30},"sudo vim ~\u002F.bashrc\n",[318,120613,120614],{"__ignoreMap":30},[321,120615,120616,120618,120620],{"class":323,"line":324},[321,120617,24721],{"class":2169},[321,120619,118728],{"class":436},[321,120621,120622],{"class":436}," ~\u002F.bashrc\n",[19,120624,120625],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[312,120627,120629],{"className":118668,"code":120628,"language":118670,"meta":30,"style":30},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[318,120630,120631,120643],{"__ignoreMap":30},[321,120632,120633,120635,120638,120640],{"class":323,"line":324},[321,120634,25187],{"class":327},[321,120636,120637],{"class":331}," PATH",[321,120639,377],{"class":327},[321,120641,120642],{"class":331},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[321,120644,120645,120647,120650,120652],{"class":323,"line":167},[321,120646,25187],{"class":327},[321,120648,120649],{"class":331}," LD_LIBRARY_PATH",[321,120651,377],{"class":327},[321,120653,120654],{"class":331},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120656,120657],{},[28,120658],{"alt":30,"src":120659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[312,120661,120663],{"className":118668,"code":120662,"language":118670,"meta":30,"style":30},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[318,120664,120665,120670,120676,120681],{"__ignoreMap":30},[321,120666,120667],{"class":323,"line":324},[321,120668,120669],{"class":390},"# 刷新当前终端的环境变量\n",[321,120671,120672,120674],{"class":323,"line":167},[321,120673,101038],{"class":380},[321,120675,120622],{"class":436},[321,120677,120678],{"class":323,"line":200},[321,120679,120680],{"class":390},"# 验证CUDA是否安装成功\n",[321,120682,120683,120686],{"class":323,"line":1401},[321,120684,120685],{"class":2169},"nvcc",[321,120687,120688],{"class":380}," -V\n",[19,120690,120691],{},"出现下图这种则安装成功。",[19,120693,120694],{},[28,120695],{"alt":30,"src":120696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[292,120698,120700],{"id":120699},"_354-安装cudnn","3.5.4 安装cuDNN",[151,120702,120703],{},[154,120704,120705],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120707,120708,120709,120714],{},"前往 NVIDIA cuDNN 下载页面：",[570,120710,120713],{"href":120711,"rel":120712},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24073],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120716,120717],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120719,120720],{},[28,120721],{"alt":30,"src":120722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120724,120725],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120727,120728],{},[28,120729],{"alt":30,"src":120730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120732,120733],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120735,120736],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120738,120739],{},[481,120740,120741],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120743,120744],{},"下载好的：",[19,120746,120747],{},[28,120748],{"alt":30,"src":120749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[151,120751,120752],{"start":167},[154,120753,120754],{},"安装cuDNN",[19,120756,120757],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120759,120760],{},[28,120761],{"alt":30,"src":120762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120764,120765],{},"解压文件，并复制到对应位置完成安装",[312,120767,120769],{"className":118668,"code":120768,"language":118670,"meta":30,"style":30},"# 解压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",[318,120770,120771,120776,120787,120792,120799,120804,120820,120834,120839,120850,120859,120863,120879],{"__ignoreMap":30},[321,120772,120773],{"class":323,"line":324},[321,120774,120775],{"class":390},"# 解压cuDNN文件\n",[321,120777,120778,120781,120784],{"class":323,"line":167},[321,120779,120780],{"class":2169},"tar",[321,120782,120783],{"class":380}," -xvf",[321,120785,120786],{"class":436}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[321,120788,120789],{"class":323,"line":200},[321,120790,120791],{"class":390},"# cd进文件夹\n",[321,120793,120794,120796],{"class":323,"line":1401},[321,120795,101421],{"class":380},[321,120797,120798],{"class":436}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[321,120800,120801],{"class":323,"line":1407},[321,120802,120803],{"class":390},"# 复制cuDNN文件到CUDA目录\n",[321,120805,120806,120808,120810,120813,120815,120818],{"class":323,"line":1421},[321,120807,24721],{"class":2169},[321,120809,28006],{"class":436},[321,120811,120812],{"class":436}," include\u002Fcudnn",[321,120814,787],{"class":380},[321,120816,120817],{"class":436},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[321,120819,2880],{"class":331},[321,120821,120822,120824,120826,120829,120831],{"class":323,"line":1427},[321,120823,24721],{"class":2169},[321,120825,28006],{"class":436},[321,120827,120828],{"class":436}," lib\u002Flibcudnn",[321,120830,787],{"class":380},[321,120832,120833],{"class":436},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[321,120835,120836],{"class":323,"line":1518},[321,120837,120838],{"class":390},"# 对比一下有没有缺文件\n",[321,120840,120841,120843,120846,120848],{"class":323,"line":1524},[321,120842,26906],{"class":2169},[321,120844,120845],{"class":436}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[321,120847,787],{"class":380},[321,120849,2880],{"class":331},[321,120851,120852,120854,120857],{"class":323,"line":1536},[321,120853,26906],{"class":2169},[321,120855,120856],{"class":436}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[321,120858,119393],{"class":380},[321,120860,120861],{"class":323,"line":1818},[321,120862,120442],{"class":390},[321,120864,120865,120867,120869,120872,120874,120876],{"class":323,"line":1823},[321,120866,24721],{"class":2169},[321,120868,24724],{"class":436},[321,120870,120871],{"class":436}," a+r",[321,120873,120845],{"class":436},[321,120875,787],{"class":380},[321,120877,120878],{"class":331},"   \n",[321,120880,120881,120883,120885,120887,120889],{"class":323,"line":1829},[321,120882,24721],{"class":2169},[321,120884,24724],{"class":436},[321,120886,120871],{"class":436},[321,120888,120856],{"class":436},[321,120890,119393],{"class":380},[151,120892,120893],{"start":200},[154,120894,120895],{},"检查是否安装成功",[312,120897,120899],{"className":118668,"code":120898,"language":118670,"meta":30,"style":30},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[318,120900,120901,120906],{"__ignoreMap":30},[321,120902,120903],{"class":323,"line":324},[321,120904,120905],{"class":390},"# 检查cuDNN版本命令\n",[321,120907,120908,120911,120914,120916,120918,120921,120924],{"class":323,"line":167},[321,120909,120910],{"class":2169},"cat",[321,120912,120913],{"class":436}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[321,120915,25254],{"class":327},[321,120917,30381],{"class":2169},[321,120919,120920],{"class":436}," CUDNN_MAJOR",[321,120922,120923],{"class":380}," -A",[321,120925,47868],{"class":380},[19,120927,120928],{},"出现下图这样的就是安装成功了",[19,120930,120931],{},[28,120932],{"alt":30,"src":120933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[151,120935,120936],{"start":1401},[154,120937,120938],{},"软链接(一般不需要)",[312,120940,120942],{"className":118668,"code":120941,"language":118670,"meta":30,"style":30},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[318,120943,120944,120949],{"__ignoreMap":30},[321,120945,120946],{"class":323,"line":324},[321,120947,120948],{"class":390},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[321,120950,120951,120953],{"class":323,"line":167},[321,120952,24721],{"class":2169},[321,120954,120955],{"class":436}," ldconfig\n",[19,120957,120958],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[312,120960,120965],{"className":120961,"code":120962,"language":120963,"meta":120964,"style":30},"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",[318,120966,120967,120972,120977,120982,120987,120992,120997],{"__ignoreMap":30},[321,120968,120969],{"class":323,"line":324},[321,120970,120971],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[321,120973,120974],{"class":323,"line":167},[321,120975,120976],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[321,120978,120979],{"class":323,"line":200},[321,120980,120981],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[321,120983,120984],{"class":323,"line":1401},[321,120985,120986],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[321,120988,120989],{"class":323,"line":1407},[321,120990,120991],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[321,120993,120994],{"class":323,"line":1421},[321,120995,120996],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[321,120998,120999],{"class":323,"line":1427},[321,121000,121001],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121003,121004],{},"运行下方的命令",[312,121006,121008],{"className":118668,"code":121007,"language":118670,"meta":30,"style":30},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[318,121009,121010,121015,121022,121027],{"__ignoreMap":30},[321,121011,121012],{"class":323,"line":324},[321,121013,121014],{"class":390},"# cd进入CUDA路径\n",[321,121016,121017,121019],{"class":323,"line":167},[321,121018,101421],{"class":380},[321,121020,121021],{"class":436}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[321,121023,121024],{"class":323,"line":200},[321,121025,121026],{"class":390}," # 查看本路径下的需要软链接的文件名\n",[321,121028,121029],{"class":323,"line":1401},[321,121030,121031],{"class":2169}," ls\n",[19,121033,121034],{},[28,121035],{"alt":30,"src":121036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121038,121039,121040,18617,121043,18617,121046,121049],{},"如上图，我需要将",[318,121041,121042],{},"libcudnn_xxx_xxxxx.so.8.9.7",[318,121044,121045],{},"libcudnn_xxx_xxxxx.so.8",[318,121047,121048],{},"libcudnn_xxx_xxxxx.so","软链接",[312,121051,121053],{"className":118668,"code":121052,"language":118670,"meta":30,"style":30},"# 创建符号链接。对于每个 .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",[318,121054,121055,121060,121076,121090,121104,121118,121132,121146,121160,121165,121171,121176],{"__ignoreMap":30},[321,121056,121057],{"class":323,"line":324},[321,121058,121059],{"class":390},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[321,121061,121062,121064,121067,121070,121073],{"class":323,"line":167},[321,121063,24721],{"class":2169},[321,121065,121066],{"class":436}," ln",[321,121068,121069],{"class":380}," -sf",[321,121071,121072],{"class":436}," libcudnn_cnn_train.so.8.9.7",[321,121074,121075],{"class":436}," libcudnn_cnn_train.so.8\n",[321,121077,121078,121080,121082,121084,121087],{"class":323,"line":200},[321,121079,24721],{"class":2169},[321,121081,121066],{"class":436},[321,121083,121069],{"class":380},[321,121085,121086],{"class":436}," libcudnn_adv_infer.so.8.9.7",[321,121088,121089],{"class":436}," libcudnn_adv_infer.so.8\n",[321,121091,121092,121094,121096,121098,121101],{"class":323,"line":1401},[321,121093,24721],{"class":2169},[321,121095,121066],{"class":436},[321,121097,121069],{"class":380},[321,121099,121100],{"class":436}," libcudnn_adv_train.so.8.9.7",[321,121102,121103],{"class":436}," libcudnn_adv_train.so.8\n",[321,121105,121106,121108,121110,121112,121115],{"class":323,"line":1407},[321,121107,24721],{"class":2169},[321,121109,121066],{"class":436},[321,121111,121069],{"class":380},[321,121113,121114],{"class":436}," libcudnn_cnn_infer.so.8.9.7",[321,121116,121117],{"class":436}," libcudnn_cnn_infer.so.8\n",[321,121119,121120,121122,121124,121126,121129],{"class":323,"line":1421},[321,121121,24721],{"class":2169},[321,121123,121066],{"class":436},[321,121125,121069],{"class":380},[321,121127,121128],{"class":436}," libcudnn.so.8.9.7",[321,121130,121131],{"class":436}," libcudnn.so.8\n",[321,121133,121134,121136,121138,121140,121143],{"class":323,"line":1427},[321,121135,24721],{"class":2169},[321,121137,121066],{"class":436},[321,121139,121069],{"class":380},[321,121141,121142],{"class":436}," libcudnn_ops_infer.so.8.9.7",[321,121144,121145],{"class":436}," libcudnn_ops_infer.so.8\n",[321,121147,121148,121150,121152,121154,121157],{"class":323,"line":1518},[321,121149,24721],{"class":2169},[321,121151,121066],{"class":436},[321,121153,121069],{"class":380},[321,121155,121156],{"class":436}," libcudnn_ops_train.so.8.9.7",[321,121158,121159],{"class":436}," libcudnn_ops_train.so.8\n",[321,121161,121162],{"class":323,"line":1524},[321,121163,121164],{"class":390},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[321,121166,121167,121169],{"class":323,"line":1536},[321,121168,24721],{"class":2169},[321,121170,120955],{"class":436},[321,121172,121173],{"class":323,"line":1818},[321,121174,121175],{"class":390},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[321,121177,121178,121180,121183,121186,121188,121191],{"class":323,"line":1823},[321,121179,26906],{"class":2169},[321,121181,121182],{"class":380}," -l",[321,121184,121185],{"class":436}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[321,121187,787],{"class":380},[321,121189,121190],{"class":436},".so",[321,121192,119393],{"class":380},[292,121194,121196],{"id":121195},"_355-常见问题","3.5.5 常见问题",[151,121198,121199],{},[154,121200,121201],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[312,121203,121205],{"className":118668,"code":121204,"language":118670,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[318,121206,121207],{"__ignoreMap":30},[321,121208,121209,121211,121213],{"class":323,"line":324},[321,121210,24721],{"class":2169},[321,121212,118728],{"class":436},[321,121214,121215],{"class":436}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121217,121218],{},"blacklist-nouveau.conf文件内容如下：",[312,121220,121222],{"className":118668,"code":121221,"language":118670,"meta":30,"style":30},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[318,121223,121224,121232,121239,121251,121261],{"__ignoreMap":30},[321,121225,121226,121229],{"class":323,"line":324},[321,121227,121228],{"class":2169},"blacklist",[321,121230,121231],{"class":436}," nouveau\n",[321,121233,121234,121236],{"class":323,"line":167},[321,121235,121228],{"class":2169},[321,121237,121238],{"class":436}," lbm-nouveau\n",[321,121240,121241,121243,121246,121249],{"class":323,"line":200},[321,121242,116075],{"class":2169},[321,121244,121245],{"class":436}," nouveau",[321,121247,121248],{"class":436}," modeset=",[321,121250,3291],{"class":380},[321,121252,121253,121256,121258],{"class":323,"line":1401},[321,121254,121255],{"class":380},"alias",[321,121257,121245],{"class":436},[321,121259,121260],{"class":436}," off\n",[321,121262,121263,121265,121268],{"class":323,"line":1407},[321,121264,121255],{"class":380},[321,121266,121267],{"class":436}," lbm-nouveau",[321,121269,121260],{"class":436},[19,121271,121272],{},"接着运行下方命令",[312,121274,121276],{"className":118668,"code":121275,"language":118670,"meta":30,"style":30},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[318,121277,121278,121288,121293],{"__ignoreMap":30},[321,121279,121280,121282,121285],{"class":323,"line":324},[321,121281,24721],{"class":2169},[321,121283,121284],{"class":436}," update-initramfs",[321,121286,121287],{"class":380}," -u\n",[321,121289,121290],{"class":323,"line":167},[321,121291,121292],{"class":2169},"或者\n",[321,121294,121295,121297,121300],{"class":323,"line":200},[321,121296,24721],{"class":2169},[321,121298,121299],{"class":436}," dracut",[321,121301,121302],{"class":380}," --force\n",[19,121304,121305],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[312,121307,121309],{"className":118668,"code":121308,"language":118670,"meta":30,"style":30},"lsmod | grep nouveau\n",[318,121310,121311],{"__ignoreMap":30},[321,121312,121313,121316,121318,121320],{"class":323,"line":324},[321,121314,121315],{"class":2169},"lsmod",[321,121317,25254],{"class":327},[321,121319,30381],{"class":2169},[321,121321,121231],{"class":436},[151,121323,121324],{"start":167},[154,121325,121326],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[312,121328,121330],{"className":118668,"code":121329,"language":118670,"meta":30,"style":30},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[318,121331,121332],{"__ignoreMap":30},[321,121333,121334,121336,121338],{"class":323,"line":324},[321,121335,24721],{"class":2169},[321,121337,118728],{"class":436},[321,121339,121340],{"class":436}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121342,121343],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[312,121345,121347],{"className":118668,"code":121346,"language":118670,"meta":30,"style":30},"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",[318,121348,121349,121357,121365,121373,121380,121388,121398,121406],{"__ignoreMap":30},[321,121350,121351,121354],{"class":323,"line":324},[321,121352,121353],{"class":2169},"Section",[321,121355,121356],{"class":436}," \"OutputClass\"\n",[321,121358,121359,121362],{"class":323,"line":167},[321,121360,121361],{"class":2169},"   Identifier",[321,121363,121364],{"class":436}," \"nvidia\"\n",[321,121366,121367,121370],{"class":323,"line":200},[321,121368,121369],{"class":2169},"   MatchDriver",[321,121371,121372],{"class":436}," \"nvidia-drm\"\n",[321,121374,121375,121378],{"class":323,"line":1401},[321,121376,121377],{"class":2169},"   Driver",[321,121379,121364],{"class":436},[321,121381,121382,121385],{"class":323,"line":1407},[321,121383,121384],{"class":2169},"   Option",[321,121386,121387],{"class":436}," \"AllowEmptyInitialConfiguration\"\n",[321,121389,121390,121392,121395],{"class":323,"line":1421},[321,121391,121384],{"class":2169},[321,121393,121394],{"class":436}," \"PrimaryGPU\"",[321,121396,121397],{"class":436}," \"yes\"\n",[321,121399,121400,121403],{"class":323,"line":1427},[321,121401,121402],{"class":2169},"   ModulePath",[321,121404,121405],{"class":436}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[321,121407,121408],{"class":323,"line":1518},[321,121409,121410],{"class":2169},"EndSection\n",[151,121412,121413],{"start":200},[154,121414,121415],{},"安装N卡驱动提示错误",[312,121417,121419],{"className":120961,"code":121418,"language":120963,"meta":120964,"style":30},"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",[318,121420,121421],{"__ignoreMap":30},[321,121422,121423],{"class":323,"line":324},[321,121424,121418],{},[151,121426,121427],{},[154,121428,121429],{},"检查当前运行的内核版本：",[19,121431,121432],{},"运行以下命令以查看你当前正在使用的内核版本：",[312,121434,121436],{"className":117441,"code":121435,"language":117443,"meta":30,"style":30},"uname -r\n",[318,121437,121438],{"__ignoreMap":30},[321,121439,121440,121442],{"class":323,"line":324},[321,121441,70349],{"class":2169},[321,121443,121444],{"class":380}," -r\n",[151,121446,121447],{"start":167},[154,121448,121449],{},"安装内核开发文件：",[19,121451,121452,121453,121456],{},"确保你已经安装了与当前内核版本相匹配的 ",[318,121454,121455],{},"kernel-devel"," 包。运行以下命令来安装：",[312,121458,121460],{"className":117441,"code":121459,"language":117443,"meta":30,"style":30},"sudo dnf install kernel-devel-$(uname -r)\n",[318,121461,121462],{"__ignoreMap":30},[321,121463,121464,121466,121468,121470,121473,121475,121477,121479],{"class":323,"line":324},[321,121465,24721],{"class":2169},[321,121467,26460],{"class":436},[321,121469,24042],{"class":436},[321,121471,121472],{"class":436}," kernel-devel-",[321,121474,25244],{"class":331},[321,121476,70349],{"class":2169},[321,121478,119784],{"class":380},[321,121480,338],{"class":331},[19,121482,121483],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[151,121485,121486],{"start":200},[154,121487,121488],{},"安装内核源代码（如果需要）：",[19,121490,121491],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[312,121493,121495],{"className":117441,"code":121494,"language":117443,"meta":30,"style":30},"sudo dnf install kernel-headers kernel-source\n",[318,121496,121497],{"__ignoreMap":30},[321,121498,121499,121501,121503,121505,121508],{"class":323,"line":324},[321,121500,24721],{"class":2169},[321,121502,26460],{"class":436},[321,121504,24042],{"class":436},[321,121506,121507],{"class":436}," kernel-headers",[321,121509,121510],{"class":436}," kernel-source\n",[151,121512,121513],{"start":1401},[154,121514,121515],{},"检查安装：",[19,121517,121518,121519,121522],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[318,121520,121521],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[312,121524,121526],{"className":117441,"code":121525,"language":117443,"meta":30,"style":30},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[318,121527,121528],{"__ignoreMap":30},[321,121529,121530,121532],{"class":323,"line":324},[321,121531,26906],{"class":2169},[321,121533,121534],{"class":436}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121536,121537,121538,121541],{},"如果仍然遇到问题，可以通过 ",[318,121539,121540],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5333,121543,121544],{},"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":30,"searchDepth":167,"depth":167,"links":121546},[121547,121551,121561,121565,121566],{"id":118644,"depth":167,"text":118645,"children":121548},[121549,121550],{"id":118654,"depth":200,"text":118655},{"id":118664,"depth":200,"text":118665},{"id":118864,"depth":167,"text":118865,"children":121552},[121553,121554,121555,121556,121557,121558,121559,121560],{"id":118868,"depth":200,"text":118869},{"id":118938,"depth":200,"text":118939},{"id":119027,"depth":200,"text":119028},{"id":119272,"depth":200,"text":119273},{"id":119342,"depth":200,"text":119343},{"id":119409,"depth":200,"text":119410},{"id":119444,"depth":200,"text":119445},{"id":119499,"depth":200,"text":119500},{"id":119550,"depth":167,"text":119551,"children":121562},[121563,121564],{"id":119554,"depth":200,"text":119555},{"id":119634,"depth":200,"text":119635},{"id":119820,"depth":167,"text":119821},{"id":119993,"depth":167,"text":119994,"children":121567},[121568,121569,121570,121571,121572],{"id":119997,"depth":200,"text":119998},{"id":120038,"depth":200,"text":120039},{"id":120325,"depth":200,"text":120326},{"id":120699,"depth":200,"text":120700},{"id":121195,"depth":200,"text":121196},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118636,"description":23584},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121579,"title":121580,"body":121581,"description":23584,"extension":249,"meta":121921,"navigation":251,"path":121922,"seo":121923,"stem":121924,"__hash__":121925},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121582,"toc":121919},[121583,121586,121591,121594,121840,121845,121848,121884,121887,121916],[10,121584,121580],{"id":121585},"_4-命令教程长期积累",[151,121587,121588],{},[154,121589,121590],{},"大多数命令",[19,121592,121593],{},"常用 Linux 命令速查：",[312,121595,121597],{"className":117441,"code":121596,"language":117443,"meta":30,"style":30},"# 文件与目录\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",[318,121598,121599,121604,121611,121618,121626,121633,121640,121648,121656,121663,121670,121678,121682,121687,121694,121702,121709,121713,121718,121725,121733,121741,121749,121757,121761,121766,121774,121781,121788,121796,121804,121808,121813,121822,121831],{"__ignoreMap":30},[321,121600,121601],{"class":323,"line":324},[321,121602,121603],{"class":390},"# 文件与目录\n",[321,121605,121606,121608],{"class":323,"line":167},[321,121607,26906],{"class":2169},[321,121609,121610],{"class":390},"        # 列出目录内容\n",[321,121612,121613,121615],{"class":323,"line":200},[321,121614,101421],{"class":380},[321,121616,121617],{"class":390},"        # 切换目录\n",[321,121619,121620,121623],{"class":323,"line":1401},[321,121621,121622],{"class":380},"pwd",[321,121624,121625],{"class":390},"       # 显示当前路径\n",[321,121627,121628,121630],{"class":323,"line":1407},[321,121629,101411],{"class":2169},[321,121631,121632],{"class":390},"     # 创建目录\n",[321,121634,121635,121637],{"class":323,"line":1421},[321,121636,25467],{"class":2169},[321,121638,121639],{"class":390},"        # 删除文件或目录\n",[321,121641,121642,121645],{"class":323,"line":1427},[321,121643,121644],{"class":2169},"cp",[321,121646,121647],{"class":390},"        # 复制文件或目录\n",[321,121649,121650,121653],{"class":323,"line":1518},[321,121651,121652],{"class":2169},"mv",[321,121654,121655],{"class":390},"        # 移动\u002F重命名文件或目录\n",[321,121657,121658,121660],{"class":323,"line":1524},[321,121659,101428],{"class":2169},[321,121661,121662],{"class":390},"     # 创建空文件\n",[321,121664,121665,121667],{"class":323,"line":1536},[321,121666,120910],{"class":2169},[321,121668,121669],{"class":390},"       # 查看文件内容\n",[321,121671,121672,121675],{"class":323,"line":1818},[321,121673,121674],{"class":2169},"head\u002Ftail",[321,121676,121677],{"class":390}," # 查看文件头部\u002F尾部\n",[321,121679,121680],{"class":323,"line":1823},[321,121681,2606],{"emptyLinePlaceholder":251},[321,121683,121684],{"class":323,"line":1829},[321,121685,121686],{"class":390},"# 权限管理\n",[321,121688,121689,121691],{"class":323,"line":1834},[321,121690,24756],{"class":2169},[321,121692,121693],{"class":390},"     # 修改文件权限\n",[321,121695,121696,121699],{"class":323,"line":1848},[321,121697,121698],{"class":2169},"chown",[321,121700,121701],{"class":390},"     # 修改文件所有者\n",[321,121703,121704,121706],{"class":323,"line":1853},[321,121705,24721],{"class":2169},[321,121707,121708],{"class":390},"      # 以管理员身份执行\n",[321,121710,121711],{"class":323,"line":1859},[321,121712,2606],{"emptyLinePlaceholder":251},[321,121714,121715],{"class":323,"line":1880},[321,121716,121717],{"class":390},"# 系统信息\n",[321,121719,121720,121722],{"class":323,"line":1885},[321,121721,70349],{"class":2169},[321,121723,121724],{"class":390},"     # 系统信息\n",[321,121726,121727,121730],{"class":323,"line":1899},[321,121728,121729],{"class":2169},"df",[321,121731,121732],{"class":390},"        # 磁盘使用情况\n",[321,121734,121735,121738],{"class":323,"line":1904},[321,121736,121737],{"class":2169},"free",[321,121739,121740],{"class":390},"      # 内存使用情况\n",[321,121742,121743,121746],{"class":323,"line":1933},[321,121744,121745],{"class":2169},"top\u002Fhtop",[321,121747,121748],{"class":390},"  # 进程监控\n",[321,121750,121751,121754],{"class":323,"line":1938},[321,121752,121753],{"class":2169},"ps",[321,121755,121756],{"class":390},"        # 查看进程\n",[321,121758,121759],{"class":323,"line":1955},[321,121760,2606],{"emptyLinePlaceholder":251},[321,121762,121763],{"class":323,"line":1960},[321,121764,121765],{"class":390},"# 网络\n",[321,121767,121768,121771],{"class":323,"line":1965},[321,121769,121770],{"class":2169},"ping",[321,121772,121773],{"class":390},"      # 测试网络连通性\n",[321,121775,121776,121778],{"class":323,"line":1970},[321,121777,26994],{"class":2169},[321,121779,121780],{"class":390},"      # 发送 HTTP 请求\n",[321,121782,121783,121785],{"class":323,"line":1984},[321,121784,120434],{"class":2169},[321,121786,121787],{"class":390},"      # 下载文件\n",[321,121789,121790,121793],{"class":323,"line":1989},[321,121791,121792],{"class":2169},"ssh",[321,121794,121795],{"class":390},"       # 远程登录\n",[321,121797,121798,121801],{"class":323,"line":2783},[321,121799,121800],{"class":2169},"scp",[321,121802,121803],{"class":390},"       # 远程文件传输\n",[321,121805,121806],{"class":323,"line":2797},[321,121807,2606],{"emptyLinePlaceholder":251},[321,121809,121810],{"class":323,"line":2805},[321,121811,121812],{"class":390},"# 包管理（Debian\u002FUbuntu）\n",[321,121814,121815,121817,121819],{"class":323,"line":2810},[321,121816,117513],{"class":2169},[321,121818,117492],{"class":436},[321,121820,121821],{"class":390},"   # 更新软件源\n",[321,121823,121824,121826,121828],{"class":323,"line":2816},[321,121825,117513],{"class":2169},[321,121827,24042],{"class":436},[321,121829,121830],{"class":390},"  # 安装软件包\n",[321,121832,121833,121835,121837],{"class":323,"line":2822},[321,121834,117513],{"class":2169},[321,121836,26224],{"class":436},[321,121838,121839],{"class":390},"   # 卸载软件包\n",[151,121841,121842],{"start":167},[154,121843,121844],{},"KDE Dolphin 以root打开",[19,121846,121847],{},"kde5",[312,121849,121851],{"className":117441,"code":121850,"language":117443,"meta":30,"style":30},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[318,121852,121853],{"__ignoreMap":30},[321,121854,121855,121858,121861,121864,121866,121868,121871,121874,121876,121879,121881],{"class":323,"line":324},[321,121856,121857],{"class":2169},"pkexec",[321,121859,121860],{"class":436}," env",[321,121862,121863],{"class":436}," DISPLAY=",[321,121865,28288],{"class":331},[321,121867,28346],{"class":436},[321,121869,121870],{"class":331},"$XAUTHORITY ",[321,121872,121873],{"class":436},"KDE_SESSION_VERSION=",[321,121875,651],{"class":380},[321,121877,121878],{"class":436}," KDE_FULL_SESSION=",[321,121880,1569],{"class":380},[321,121882,121883],{"class":436}," dolphin\n",[19,121885,121886],{},"kde6",[312,121888,121890],{"className":117441,"code":121889,"language":117443,"meta":30,"style":30},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[318,121891,121892],{"__ignoreMap":30},[321,121893,121894,121896,121898,121900,121902,121904,121906,121908,121910,121912,121914],{"class":323,"line":324},[321,121895,121857],{"class":2169},[321,121897,121860],{"class":436},[321,121899,121863],{"class":436},[321,121901,28288],{"class":331},[321,121903,28346],{"class":436},[321,121905,121870],{"class":331},[321,121907,121873],{"class":436},[321,121909,676],{"class":380},[321,121911,121878],{"class":436},[321,121913,1569],{"class":380},[321,121915,121883],{"class":436},[5333,121917,121918],{},"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":30,"searchDepth":167,"depth":167,"links":121920},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121580,"description":23584},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121927,"title":121928,"body":121929,"description":23584,"extension":249,"meta":121943,"navigation":251,"path":121944,"seo":121945,"stem":121946,"__hash__":121947},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121930,"toc":121941},[121931,121934],[10,121932,121928],{"id":121933},"_5-各种环境配置",[19,121935,121936],{},[570,121937,121940],{"href":121938,"rel":121939},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24073],"电控组环境搭建大全",{"title":30,"searchDepth":167,"depth":167,"links":121942},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121928,"description":23584},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121949,"title":121950,"body":121951,"description":23584,"extension":249,"meta":122299,"navigation":251,"path":122300,"seo":122301,"stem":122302,"__hash__":122303},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121952,"toc":122291},[121953,121956,121960,121964,121968,121973,121980,121984,122277,122281,122288],[10,121954,121950],{"id":121955},"_6-拓展功能",[14,121957,121959],{"id":121958},"_61-wine","6.1 Wine",[14,121961,121963],{"id":121962},"_62-android","6.2 Android",[292,121965,121967],{"id":121966},"_621-i卡a卡","6.2.1 I卡、A卡",[151,121969,121970],{},[154,121971,121972],{},"Wayland-Waydroid(体验超级好)",[19,121974,121975,121976],{},"Waydroid 官网与安装指南：",[570,121977,121978],{"href":121978,"rel":121979},"https:\u002F\u002Fwaydro.id\u002F",[24073],[292,121981,121983],{"id":121982},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[151,121985,121986],{},[154,121987,121988,121989,121991,121992,121996,121998,122001,122006,122203],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53861,121990],{},"BlissOS 官网下载：",[570,121993,121994],{"href":121994,"rel":121995},"https:\u002F\u002Fblissos.org\u002F",[24073],[53861,121997],{},[28,121999],{"alt":30,"src":122000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[151,122002,122003],{"start":200},[154,122004,122005],{},"比较推荐的配置",[312,122007,122009],{"className":117441,"code":122008,"language":117443,"meta":30,"style":30},"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",[318,122010,122011,122018,122028,122038,122048,122060,122070,122077,122087,122096,122105,122115,122125,122134,122144,122154,122166,122176,122185,122195],{"__ignoreMap":30},[321,122012,122013,122016],{"class":323,"line":324},[321,122014,122015],{"class":2169},"qemu-system-x86_64",[321,122017,24823],{"class":380},[321,122019,122020,122023,122026],{"class":323,"line":167},[321,122021,122022],{"class":380},"        -M",[321,122024,122025],{"class":436}," q35,vmport=off",[321,122027,24823],{"class":380},[321,122029,122030,122033,122036],{"class":323,"line":200},[321,122031,122032],{"class":380},"        -accel",[321,122034,122035],{"class":436}," kvm",[321,122037,24823],{"class":380},[321,122039,122040,122043,122046],{"class":323,"line":1401},[321,122041,122042],{"class":380},"        -cpu",[321,122044,122045],{"class":436}," qemu64,+sse3,+sse4.2",[321,122047,24823],{"class":380},[321,122049,122050,122053,122056,122058],{"class":323,"line":1407},[321,122051,122052],{"class":380},"        -smp",[321,122054,122055],{"class":436}," 8,cores=",[321,122057,625],{"class":380},[321,122059,24823],{"class":380},[321,122061,122062,122065,122068],{"class":323,"line":1421},[321,122063,122064],{"class":380},"        -m",[321,122066,122067],{"class":436}," 6G",[321,122069,24823],{"class":380},[321,122071,122072,122075],{"class":323,"line":1427},[321,122073,122074],{"class":380},"        -usb",[321,122076,24823],{"class":380},[321,122078,122079,122082,122085],{"class":323,"line":1518},[321,122080,122081],{"class":380},"        -device",[321,122083,122084],{"class":436}," virtio-tablet",[321,122086,24823],{"class":380},[321,122088,122089,122091,122094],{"class":323,"line":1524},[321,122090,122081],{"class":380},[321,122092,122093],{"class":436}," virtio-keyboard",[321,122095,24823],{"class":380},[321,122097,122098,122100,122103],{"class":323,"line":1536},[321,122099,122081],{"class":380},[321,122101,122102],{"class":436}," usb-tablet",[321,122104,24823],{"class":380},[321,122106,122107,122110,122113],{"class":323,"line":1818},[321,122108,122109],{"class":380},"        -bios",[321,122111,122112],{"class":436}," OVMF-pure-efi64.fd",[321,122114,24823],{"class":380},[321,122116,122117,122120,122123],{"class":323,"line":1823},[321,122118,122119],{"class":380},"        -net",[321,122121,122122],{"class":436}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[321,122124,24823],{"class":380},[321,122126,122127,122129,122132],{"class":323,"line":1829},[321,122128,122119],{"class":380},[321,122130,122131],{"class":436}," nic,model=virtio",[321,122133,24823],{"class":380},[321,122135,122136,122139,122142],{"class":323,"line":1834},[321,122137,122138],{"class":380},"        -audio",[321,122140,122141],{"class":436}," sdl,model=hda",[321,122143,24823],{"class":380},[321,122145,122146,122149,122152],{"class":323,"line":1848},[321,122147,122148],{"class":380},"        -display",[321,122150,122151],{"class":436}," sdl,gl=on,show-cursor=on",[321,122153,24823],{"class":380},[321,122155,122156,122158,122161,122164],{"class":323,"line":1853},[321,122157,122081],{"class":380},[321,122159,122160],{"class":436}," virtio-vga-gl,xres=1920,yres=",[321,122162,122163],{"class":380},"1080",[321,122165,24823],{"class":380},[321,122167,122168,122171,122174],{"class":323,"line":1859},[321,122169,122170],{"class":380},"        -drive",[321,122172,122173],{"class":436}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[321,122175,24823],{"class":380},[321,122177,122178,122180,122183],{"class":323,"line":1880},[321,122179,122170],{"class":380},[321,122181,122182],{"class":436}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[321,122184,24823],{"class":380},[321,122186,122187,122190,122193],{"class":323,"line":1885},[321,122188,122189],{"class":380},"        -monitor",[321,122191,122192],{"class":436}," stdio",[321,122194,24823],{"class":380},[321,122196,122197,122200],{"class":323,"line":1899},[321,122198,122199],{"class":380},"        -serial",[321,122201,122202],{"class":436}," none\n",[151,122204,122205],{"start":1407},[154,122206,122207,122208],{},"常用操作：",[151,122209,122210,122213,122269],{},[154,122211,122212],{},"全屏：Ctrl+Alt+F",[154,122214,122215,122216,122221],{},"adb调试",[151,122217,122218],{},[154,122219,122220],{},"使Linux与Android用ADB连接。",[312,122222,122224],{"className":117441,"code":122223,"language":117443,"meta":30,"style":30},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[318,122225,122226,122231,122242,122247,122259,122264],{"__ignoreMap":30},[321,122227,122228],{"class":323,"line":324},[321,122229,122230],{"class":390},"# 连接安卓\n",[321,122232,122233,122236,122239],{"class":323,"line":167},[321,122234,122235],{"class":2169},"adb",[321,122237,122238],{"class":436}," connect",[321,122240,122241],{"class":380}," 127.0.0.1\n",[321,122243,122244],{"class":323,"line":200},[321,122245,122246],{"class":390},"# 打开shell\n",[321,122248,122249,122251,122253,122256],{"class":323,"line":1401},[321,122250,122235],{"class":2169},[321,122252,27028],{"class":380},[321,122254,122255],{"class":436}," 127.0.0.1:5555",[321,122257,122258],{"class":436}," shell\n",[321,122260,122261],{"class":323,"line":1407},[321,122262,122263],{"class":390},"# 使用root权限\n",[321,122265,122266],{"class":323,"line":1421},[321,122267,122268],{"class":2169},"su\n",[154,122270,122271,122272],{},"中文输入法",[151,122273,122274],{},[154,122275,122276],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122278,122280],{"id":122279},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122282,122283,122284],{},"rEFInd 官网与文档：",[570,122285,122286],{"href":122286,"rel":122287},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24073],[5333,122289,122290],{},"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":30,"searchDepth":167,"depth":167,"links":122292},[122293,122294,122298],{"id":121958,"depth":167,"text":121959},{"id":121962,"depth":167,"text":121963,"children":122295},[122296,122297],{"id":121966,"depth":200,"text":121967},{"id":121982,"depth":200,"text":121983},{"id":122279,"depth":167,"text":122280},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121950,"description":23584},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122305,"title":122306,"body":122307,"description":23584,"extension":249,"meta":125606,"navigation":251,"path":125607,"seo":125608,"stem":125609,"__hash__":125610},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122308,"toc":125580},[122309,122312,122316,122319,122326,122576,122579,122651,122654,122658,122662,122667,122670,122673,122676,122681,122684,122687,122690,122695,122698,122703,122706,122709,122714,122717,122722,122725,122729,122733,122736,122741,122744,122758,122761,122764,122773,122776,122785,122788,122791,122800,122803,122812,122815,122818,122827,122830,122833,122848,122851,122854,122863,122868,122871,122874,122883,122886,122895,122898,122907,122910,122919,122924,122927,122935,122940,122943,122952,122955,122963,122968,122971,122980,122983,122986,122990,122993,122998,123001,123006,123020,123025,123030,123041,123046,123052,123057,123072,123077,123080,123085,123090,123095,123103,123108,123115,123120,123131,123136,123139,123143,123146,123149,123154,123157,123176,123181,123184,123193,123198,123201,123223,123226,123256,123259,123264,123267,123281,123286,123305,123308,123311,123316,123328,123333,123338,123341,123346,123349,123364,123367,123372,123377,123381,123386,123426,123429,123433,123439,123445,123450,123453,123460,123465,123472,123475,123478,123485,123499,123502,123562,123565,123579,123591,123594,123597,123600,123664,123667,123670,123673,123693,123696,123701,123708,123712,123715,123719,123724,123729,123733,123736,123739,123781,123786,123789,123811,123826,123828,123833,123845,123905,123907,123909,123963,123965,123967,123973,123978,123981,123986,123990,123993,124055,124060,124063,124065,124069,124081,124163,124165,124167,124221,124227,124229,124233,124238,124240,124245,124249,124269,124304,124308,124311,124314,124317,124324,124327,124339,124342,124357,124360,124379,124427,124430,124447,124450,124464,124469,124472,124481,124496,124508,124546,124551,124560,124565,124570,124596,124605,124609,124613,124618,124621,124625,124629,124634,124637,124642,124645,124650,124653,124658,124661,124665,124670,124673,124678,124681,124685,124690,124693,124698,124701,124706,124709,124713,124718,124721,124726,124729,124734,124737,124741,124746,124749,124754,124757,124762,124765,124770,124773,124778,124781,124786,124789,124793,124798,124801,124806,124813,124817,124822,124825,124830,124833,124837,124842,124845,124848,124851,124854,124857,124861,124864,124874,124879,124884,124906,124911,124916,124923,124927,124932,124935,124938,124943,124946,124949,124952,124955,124958,124961,124964,124967,124970,124973,124976,124979,124984,124989,124994,124999,125004,125009,125014,125017,125021,125024,125028,125033,125038,125043,125048,125052,125058,125066,125071,125074,125079,125094,125097,125102,125136,125151,125154,125209,125235,125247,125250,125259,125262,125277,125282,125285,125291,125296,125299,125304,125307,125312,125317,125324,125327,125342,125345,125380,125385,125393,125431,125434,125437,125442,125445,125450,125461,125495,125500,125503,125512,125517,125523,125526,125531,125540,125545,125548,125551,125556,125564,125567,125572,125577],[10,122310,122306],{"id":122311},"_7-其他操作",[14,122313,122315],{"id":122314},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122317,122318],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122320,122321,122322,122325],{},"进入工控机的硬盘目录，进入",[318,122323,122324],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[312,122327,122331],{"className":122328,"code":122329,"language":122330,"meta":30,"style":30},"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",[318,122332,122333,122341,122352,122359,122366,122378,122385,122397,122408,122419,122426,122433,122440,122452,122464,122471,122483,122495,122502,122514,122526,122538,122549,122556,122567],{"__ignoreMap":30},[321,122334,122335,122338],{"class":323,"line":324},[321,122336,122337],{"class":51445},"network",[321,122339,122340],{"class":331},": \n",[321,122342,122343,122346,122348,122350],{"class":323,"line":167},[321,122344,122345],{"class":51445},"  version",[321,122347,51582],{"class":331},[321,122349,409],{"class":380},[321,122351,2880],{"class":331},[321,122353,122354,122357],{"class":323,"line":200},[321,122355,122356],{"class":51445},"  wifis",[321,122358,122340],{"class":331},[321,122360,122361,122364],{"class":323,"line":1401},[321,122362,122363],{"class":51445},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[321,122365,122340],{"class":331},[321,122367,122368,122371,122373,122376],{"class":323,"line":1407},[321,122369,122370],{"class":51445},"      renderer",[321,122372,51582],{"class":331},[321,122374,122375],{"class":436},"NetworkManager",[321,122377,2880],{"class":331},[321,122379,122380,122383],{"class":323,"line":1421},[321,122381,122382],{"class":51445},"      match",[321,122384,122340],{"class":331},[321,122386,122387,122390,122392,122395],{"class":323,"line":1427},[321,122388,122389],{"class":51445},"        name",[321,122391,51582],{"class":331},[321,122393,122394],{"class":436},"\"wlan0\"",[321,122396,2880],{"class":331},[321,122398,122399,122402,122404,122406],{"class":323,"line":1518},[321,122400,122401],{"class":51445},"      dhcp4",[321,122403,51582],{"class":331},[321,122405,1569],{"class":380},[321,122407,2880],{"class":331},[321,122409,122410,122413,122415,122417],{"class":323,"line":1524},[321,122411,122412],{"class":51445},"      dhcp6",[321,122414,51582],{"class":331},[321,122416,1569],{"class":380},[321,122418,2880],{"class":331},[321,122420,122421,122424],{"class":323,"line":1536},[321,122422,122423],{"class":51445},"      access-points",[321,122425,122340],{"class":331},[321,122427,122428,122431],{"class":323,"line":1818},[321,122429,122430],{"class":436},"        \"EMIS_Vinci_Robocon_5G\"",[321,122432,122340],{"class":331},[321,122434,122435,122438],{"class":323,"line":1823},[321,122436,122437],{"class":51445},"          auth",[321,122439,122340],{"class":331},[321,122441,122442,122445,122447,122450],{"class":323,"line":1829},[321,122443,122444],{"class":51445},"            key-management",[321,122446,51582],{"class":331},[321,122448,122449],{"class":436},"\"psk\"",[321,122451,2880],{"class":331},[321,122453,122454,122457,122459,122462],{"class":323,"line":1834},[321,122455,122456],{"class":51445},"            password",[321,122458,51582],{"class":331},[321,122460,122461],{"class":436},"\"vinci666\"",[321,122463,2880],{"class":331},[321,122465,122466,122469],{"class":323,"line":1848},[321,122467,122468],{"class":51445},"          networkmanager",[321,122470,122340],{"class":331},[321,122472,122473,122476,122478,122481],{"class":323,"line":1853},[321,122474,122475],{"class":51445},"            uuid",[321,122477,51582],{"class":331},[321,122479,122480],{"class":436},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[321,122482,2880],{"class":331},[321,122484,122485,122488,122490,122493],{"class":323,"line":1859},[321,122486,122487],{"class":51445},"            name",[321,122489,51582],{"class":331},[321,122491,122492],{"class":436},"\"EMIS_Vinci_Robocon_5G\"",[321,122494,2880],{"class":331},[321,122496,122497,122500],{"class":323,"line":1880},[321,122498,122499],{"class":51445},"            passthrough",[321,122501,122340],{"class":331},[321,122503,122504,122507,122509,122512],{"class":323,"line":1885},[321,122505,122506],{"class":51445},"              wifi-security.auth-alg",[321,122508,51582],{"class":331},[321,122510,122511],{"class":436},"\"open\"",[321,122513,2880],{"class":331},[321,122515,122516,122519,122521,122524],{"class":323,"line":1899},[321,122517,122518],{"class":51445},"              ipv6.addr-gen-mode",[321,122520,51582],{"class":331},[321,122522,122523],{"class":436},"\"default\"",[321,122525,2880],{"class":331},[321,122527,122528,122531,122533,122536],{"class":323,"line":1904},[321,122529,122530],{"class":51445},"              ipv6.ip6-privacy",[321,122532,51582],{"class":331},[321,122534,122535],{"class":436},"\"-1\"",[321,122537,2880],{"class":331},[321,122539,122540,122543,122545,122547],{"class":323,"line":1933},[321,122541,122542],{"class":51445},"              proxy._",[321,122544,51582],{"class":331},[321,122546,7859],{"class":436},[321,122548,2880],{"class":331},[321,122550,122551,122554],{"class":323,"line":1938},[321,122552,122553],{"class":51445},"      networkmanager",[321,122555,122340],{"class":331},[321,122557,122558,122561,122563,122565],{"class":323,"line":1955},[321,122559,122560],{"class":51445},"        uuid",[321,122562,51582],{"class":331},[321,122564,122480],{"class":436},[321,122566,2880],{"class":331},[321,122568,122569,122571,122573],{"class":323,"line":1960},[321,122570,122389],{"class":51445},[321,122572,51582],{"class":331},[321,122574,122575],{"class":436},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122577,122578],{},"将其改为新wifi的名和密码：",[312,122580,122582],{"className":122328,"code":122581,"language":122330,"meta":30,"style":30},"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",[318,122583,122584,122590,122599,122605,122612,122621,122629,122635,122641],{"__ignoreMap":30},[321,122585,122586,122588],{"class":323,"line":324},[321,122587,122337],{"class":51445},[321,122589,3945],{"class":331},[321,122591,122592,122594,122596],{"class":323,"line":167},[321,122593,122345],{"class":51445},[321,122595,51582],{"class":331},[321,122597,122598],{"class":380},"2\n",[321,122600,122601,122603],{"class":323,"line":200},[321,122602,122356],{"class":51445},[321,122604,3945],{"class":331},[321,122606,122607,122610],{"class":323,"line":1401},[321,122608,122609],{"class":51445},"    wlan0",[321,122611,3945],{"class":331},[321,122613,122614,122616,122618],{"class":323,"line":1407},[321,122615,122401],{"class":51445},[321,122617,51582],{"class":331},[321,122619,122620],{"class":380},"true\n",[321,122622,122623,122625,122627],{"class":323,"line":1421},[321,122624,122412],{"class":51445},[321,122626,51582],{"class":331},[321,122628,122620],{"class":380},[321,122630,122631,122633],{"class":323,"line":1427},[321,122632,122423],{"class":51445},[321,122634,3945],{"class":331},[321,122636,122637,122639],{"class":323,"line":1518},[321,122638,122430],{"class":436},[321,122640,3945],{"class":331},[321,122642,122643,122646,122648],{"class":323,"line":1524},[321,122644,122645],{"class":51445},"          password",[321,122647,51582],{"class":331},[321,122649,122650],{"class":436},"\"vinci666\"\n",[19,122652,122653],{},"工控机开机即可连上网。",[14,122655,122657],{"id":122656},"_72-ssh远程开发","7.2 SSH远程开发",[292,122659,122661],{"id":122660},"_721-环境准备","7.2.1 环境准备",[19,122663,122664],{},[481,122665,122666],{},"1.硬件准备",[19,122668,122669],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122671,122672],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122674,122675],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122677,122678],{},[481,122679,122680],{},"2.设置固定IP",[19,122682,122683],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122685,122686],{},"1.进入设置界面",[19,122688,122689],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122691,122692],{},[28,122693],{"alt":30,"src":122694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122696,122697],{},"2.配置所连接的网络",[19,122699,122700],{},[28,122701],{"alt":30,"src":122702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122704,122705],{},"3.设置固定IP",[19,122707,122708],{},"查看当前IP地址。",[19,122710,122711],{},[28,122712],{"alt":30,"src":122713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122715,122716],{},"设置固定IP。",[19,122718,122719],{},[28,122720],{"alt":30,"src":122721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122723,122724],{},"至此，IP配置完毕。",[292,122726,122728],{"id":122727},"_722-环境搭建","7.2.2 环境搭建",[19,122730,122731],{},[481,122732,25898],{},[19,122734,122735],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122737,122738],{},[481,122739,122740],{},"实现",[19,122742,122743],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[151,122745,122746,122749,122752,122755],{},[154,122747,122748],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[154,122750,122751],{},"远程主机启动SSH服务；",[154,122753,122754],{},"本地主机登陆远程主机；",[154,122756,122757],{},"实现数据传输。",[19,122759,122760],{},"1.安装SSH客户端与服务端",[19,122762,122763],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[312,122765,122767],{"className":120961,"code":122766,"language":120963,"meta":120964,"style":30}," sudo apt install openssh-server\n",[318,122768,122769],{"__ignoreMap":30},[321,122770,122771],{"class":323,"line":324},[321,122772,122766],{},[19,122774,122775],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[312,122777,122779],{"className":120961,"code":122778,"language":120963,"meta":120964,"style":30},"sudo apt install openssh-client\n",[318,122780,122781],{"__ignoreMap":30},[321,122782,122783],{"class":323,"line":324},[321,122784,122778],{},[19,122786,122787],{},"2.远程主机启动SSH服务",[19,122789,122790],{},"远程主机启动 ssh 服务命令如下：",[312,122792,122794],{"className":120961,"code":122793,"language":120963,"meta":120964,"style":30},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[318,122795,122796],{"__ignoreMap":30},[321,122797,122798],{"class":323,"line":324},[321,122799,122793],{},[19,122801,122802],{},"启动后可使用如下命令查看服务是否正常运行：",[312,122804,122806],{"className":120961,"code":122805,"language":120963,"meta":120964,"style":30},"ps -e | grep ssh\n",[318,122807,122808],{"__ignoreMap":30},[321,122809,122810],{"class":323,"line":324},[321,122811,122805],{},[19,122813,122814],{},"如果启动成功，会包含 sshd 程序。",[19,122816,122817],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[312,122819,122821],{"className":120961,"code":122820,"language":120963,"meta":120964,"style":30},"sudo systemctl enable ssh\n",[318,122822,122823],{"__ignoreMap":30},[321,122824,122825],{"class":323,"line":324},[321,122826,122820],{},[19,122828,122829],{},"3.本地远程登录",[19,122831,122832],{},"登录远程主机可以调用如下命令:",[312,122834,122836],{"className":117441,"code":122835,"language":117443,"meta":30,"style":30},"ssh -X 用户名@ip地址\n",[318,122837,122838],{"__ignoreMap":30},[321,122839,122840,122842,122845],{"class":323,"line":324},[321,122841,121792],{"class":2169},[321,122843,122844],{"class":380}," -X",[321,122846,122847],{"class":436}," 用户名@ip地址\n",[19,122849,122850],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122852,122853],{},"如果退出，可以调用exit命令：",[312,122855,122857],{"className":120961,"code":122856,"language":120963,"meta":120964,"style":30},"exit\n",[318,122858,122859],{"__ignoreMap":30},[321,122860,122861],{"class":323,"line":324},[321,122862,122856],{},[19,122864,122865],{},[481,122866,122867],{},"4.实现数据传输",[19,122869,122870],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122872,122873],{},"上传文件指令格式如下：",[312,122875,122877],{"className":120961,"code":122876,"language":120963,"meta":120964,"style":30},"scp 本地文件路径 账号@ip:路径\n",[318,122878,122879],{"__ignoreMap":30},[321,122880,122881],{"class":323,"line":324},[321,122882,122876],{},[19,122884,122885],{},"上传文件夹指令格式如下：",[312,122887,122889],{"className":120961,"code":122888,"language":120963,"meta":120964,"style":30},"scp -r 本地文件夹路径 账号@ip:路径\n",[318,122890,122891],{"__ignoreMap":30},[321,122892,122893],{"class":323,"line":324},[321,122894,122888],{},[19,122896,122897],{},"下载文件指令格式如下：",[312,122899,122901],{"className":120961,"code":122900,"language":120963,"meta":120964,"style":30},"scp 账号@ip:路径 本地文件夹路径\n",[318,122902,122903],{"__ignoreMap":30},[321,122904,122905],{"class":323,"line":324},[321,122906,122900],{},[19,122908,122909],{},"下载文件夹指令格式如下：",[312,122911,122913],{"className":120961,"code":122912,"language":120963,"meta":120964,"style":30},"scp -r 账号@ip:路径 本地文件夹路径\n",[318,122914,122915],{"__ignoreMap":30},[321,122916,122917],{"class":323,"line":324},[321,122918,122912],{},[19,122920,122921],{},[481,122922,122923],{},"优化",[19,122925,122926],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[151,122928,122929,122932],{},[154,122930,122931],{},"本地生成密钥对；",[154,122933,122934],{},"将公钥上传至远程主机。",[19,122936,122937],{},[481,122938,122939],{},"1.生成密钥对",[19,122941,122942],{},"本地客户端生成公私钥：（一路回车默认即可）",[312,122944,122946],{"className":120961,"code":122945,"language":120963,"meta":120964,"style":30},"ssh-keygen\n",[318,122947,122948],{"__ignoreMap":30},[321,122949,122950],{"class":323,"line":324},[321,122951,122945],{},[19,122953,122954],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[151,122956,122957,122960],{},[154,122958,122959],{},"id_rsa （私钥）；",[154,122961,122962],{},"id_rsa.pub (公钥)。",[19,122964,122965],{},[481,122966,122967],{},"2.公钥上传",[19,122969,122970],{},"上传指令如下：",[312,122972,122974],{"className":120961,"code":122973,"language":120963,"meta":120964,"style":30},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[318,122975,122976],{"__ignoreMap":30},[321,122977,122978],{"class":323,"line":324},[321,122979,122973],{},[19,122981,122982],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,122984,122985],{},"以后再远程登录就无需录入密码了。",[292,122987,122989],{"id":122988},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,122991,122992],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,122994,122995],{},[481,122996,122997],{},"1.准备工作",[19,122999,123000],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123002,123003],{},[481,123004,123005],{},"2.为VScode安装远程开发插件",[19,123007,123008,123009,123012,123013,123016,123017,28530],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[318,123010,123011],{},"扩展：商店","的搜索栏输入",[318,123014,123015],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[318,123018,123019],{},"安装",[19,123021,123022],{},[28,123023],{"alt":30,"src":123024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123026,123027],{},[481,123028,123029],{},"3.配置远程连接",[19,123031,123032,123033,123036,123037,123040],{},"步骤1：使用快捷键",[318,123034,123035],{},"ctrl + shift + p","打开命令输入窗口，并输入",[318,123038,123039],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123042,123043],{},[28,123044],{"alt":30,"src":123045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123047,123048,123049,28530],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[318,123050,123051],{},"Add New SSH Host",[19,123053,123054],{},[28,123055],{"alt":30,"src":123056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123058,123059,123060,123063,123064,123067,123068,123071],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[318,123061,123062],{},"ssh +X ubuntu@192.168.43.164","，其中，",[318,123065,123066],{},"ubuntu","需要替换为你的登录用户名，",[318,123069,123070],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123073,123074],{},[28,123075],{"alt":30,"src":123076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123078,123079],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123081,123082],{},[28,123083],{"alt":30,"src":123084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123086,123087],{},[28,123088],{"alt":30,"src":123089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123091,123092],{},[481,123093,123094],{},"4.使用",[19,123096,123097,123098,123036,123100,123102],{},"步骤1：继续使用快捷键",[318,123099,123035],{},[318,123101,123039],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123104,123105],{},[28,123106],{"alt":30,"src":123107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123109,123110,123111,123114],{},"或者，也可以点击侧边栏的",[318,123112,123113],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123116,123117],{},[28,123118],{"alt":30,"src":123119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123121,123122,123123,123126,123127,123130],{},"步骤2：选择菜单栏的",[318,123124,123125],{},"文件","下的",[318,123128,123129],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123132,123133],{},[28,123134],{"alt":30,"src":123135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123137,123138],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123140,123142],{"id":123141},"_73-远程桌面","7.3 远程桌面",[19,123144,123145],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123147,123148],{},"我们选择使用VNC来看。",[151,123150,123151],{},[154,123152,123153],{},"安装VNC服务器：",[19,123155,123156],{},"这里以TigerVNC为例进行安装：",[312,123158,123160],{"className":117441,"code":123159,"language":117443,"meta":30,"style":30},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[318,123161,123162],{"__ignoreMap":30},[321,123163,123164,123166,123168,123170,123173],{"class":323,"line":324},[321,123165,24721],{"class":2169},[321,123167,117462],{"class":436},[321,123169,24042],{"class":436},[321,123171,123172],{"class":436}," tigervnc-standalone-server",[321,123174,123175],{"class":436}," tigervnc-common\n",[151,123177,123178],{"start":167},[154,123179,123180],{},"设置VNC密码：",[19,123182,123183],{},"为VNC用户设置密码，运行以下命令：",[312,123185,123187],{"className":117441,"code":123186,"language":117443,"meta":30,"style":30},"vncpasswd\n",[318,123188,123189],{"__ignoreMap":30},[321,123190,123191],{"class":323,"line":324},[321,123192,123186],{"class":2169},[151,123194,123195],{"start":200},[154,123196,123197],{},"配置VNC启动脚本:",[19,123199,123200],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[312,123202,123204],{"className":117441,"code":123203,"language":117443,"meta":30,"style":30},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[318,123205,123206,123215],{"__ignoreMap":30},[321,123207,123208,123210,123212],{"class":323,"line":324},[321,123209,101411],{"class":2169},[321,123211,29361],{"class":380},[321,123213,123214],{"class":436}," ~\u002F.vnc\n",[321,123216,123217,123220],{"class":323,"line":167},[321,123218,123219],{"class":2169},"nano",[321,123221,123222],{"class":436}," ~\u002F.vnc\u002Fxstartup\n",[19,123224,123225],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[312,123227,123229],{"className":117441,"code":123228,"language":117443,"meta":30,"style":30},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[318,123230,123231,123236,123244,123251],{"__ignoreMap":30},[321,123232,123233],{"class":323,"line":324},[321,123234,123235],{"class":390},"#!\u002Fbin\u002Fsh\n",[321,123237,123238,123241],{"class":323,"line":167},[321,123239,123240],{"class":380},"unset",[321,123242,123243],{"class":436}," SESSION_MANAGER\n",[321,123245,123246,123248],{"class":323,"line":200},[321,123247,123240],{"class":380},[321,123249,123250],{"class":436}," DBUS_SESSION_BUS_ADDRESS\n",[321,123252,123253],{"class":323,"line":1401},[321,123254,123255],{"class":2169},"gnome-session\n",[19,123257,123258],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[151,123260,123261],{"start":1401},[154,123262,123263],{},"给予执行权限：",[19,123265,123266],{},"为xstartup文件设置执行权限：",[312,123268,123270],{"className":117441,"code":123269,"language":117443,"meta":30,"style":30},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[318,123271,123272],{"__ignoreMap":30},[321,123273,123274,123276,123279],{"class":323,"line":324},[321,123275,24756],{"class":2169},[321,123277,123278],{"class":436}," +x",[321,123280,123222],{"class":436},[151,123282,123283],{"start":1407},[154,123284,123285],{},"启动VNC服务器：",[312,123287,123289],{"className":117441,"code":123288,"language":117443,"meta":30,"style":30},"vncserver -geometry 1920x1080 -localhost=0\n",[318,123290,123291],{"__ignoreMap":30},[321,123292,123293,123296,123299,123302],{"class":323,"line":324},[321,123294,123295],{"class":2169},"vncserver",[321,123297,123298],{"class":380}," -geometry",[321,123300,123301],{"class":436}," 1920x1080",[321,123303,123304],{"class":380}," -localhost=0\n",[19,123306,123307],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123309,123310],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[151,123312,123313],{"start":1421},[154,123314,123315],{},"查看已开启的VNC服务器：",[312,123317,123319],{"className":117441,"code":123318,"language":117443,"meta":30,"style":30},"vncserver -list\n",[318,123320,123321],{"__ignoreMap":30},[321,123322,123323,123325],{"class":323,"line":324},[321,123324,123295],{"class":2169},[321,123326,123327],{"class":380}," -list\n",[19,123329,123330],{},[28,123331],{"alt":30,"src":123332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[151,123334,123335],{"start":1427},[154,123336,123337],{},"连接到VNC服务器：",[19,123339,123340],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[151,123342,123343],{"start":1518},[154,123344,123345],{},"停止VNC服务器：",[19,123347,123348],{},"如果需要停止VNC服务器，可以使用以下命令：",[312,123350,123352],{"className":117441,"code":123351,"language":117443,"meta":30,"style":30},"vncserver -kill :1\n",[318,123353,123354],{"__ignoreMap":30},[321,123355,123356,123358,123361],{"class":323,"line":324},[321,123357,123295],{"class":2169},[321,123359,123360],{"class":380}," -kill",[321,123362,123363],{"class":436}," :1\n",[19,123365,123366],{},"将:1替换为你实际使用的显示编号。",[19,123368,123369],{},[28,123370],{"alt":30,"src":123371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123373,123374],{},[28,123375],{"alt":30,"src":123376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123378,123380],{"id":123379},"_74-usb端口设置","7.4 USB端口设置",[19,123382,123383],{},[481,123384,123385],{},"首先先配置好权限",[312,123387,123389],{"className":117441,"code":123388,"language":117443,"meta":30,"style":30},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[318,123390,123391,123396,123409,123416,123421],{"__ignoreMap":30},[321,123392,123393],{"class":323,"line":324},[321,123394,123395],{"class":390},"# 将用户权限提高\n",[321,123397,123398,123400,123402,123404,123407],{"class":323,"line":167},[321,123399,24721],{"class":2169},[321,123401,26719],{"class":436},[321,123403,26722],{"class":380},[321,123405,123406],{"class":436}," dialout",[321,123408,26727],{"class":331},[321,123410,123411,123413],{"class":323,"line":200},[321,123412,26746],{"class":2169},[321,123414,123415],{"class":436}," dialout\n",[321,123417,123418],{"class":323,"line":1401},[321,123419,123420],{"class":390},"# 查看下面命令是否输出dialout（若输出才正常）\n",[321,123422,123423],{"class":323,"line":1407},[321,123424,123425],{"class":2169},"groups\n",[19,123427,123428],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[292,123430,123432],{"id":123431},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123434,123435,123438],{},[481,123436,123437],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123440,123441,123444],{},[481,123442,123443],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123446,123447],{},[481,123448,123449],{},"流程如下：",[19,123451,123452],{},"（1）.查找设备idVendor和idProduct",[19,123454,123455,123456,123459],{},"接入两个USB设备，在终端调用指令",[318,123457,123458],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123461,123462],{},[28,123463],{"alt":30,"src":123464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123466,123467,123468,123471],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[318,123469,123470],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123473,123474],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123476,123477],{},"（2）.编写映射规则",[19,123479,123480,123481,123484],{},"在",[318,123482,123483],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[312,123486,123488],{"className":117441,"code":123487,"language":117443,"meta":30,"style":30},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[318,123489,123490],{"__ignoreMap":30},[321,123491,123492,123494,123496],{"class":323,"line":324},[321,123493,24721],{"class":2169},[321,123495,118728],{"class":436},[321,123497,123498],{"class":436}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123500,123501],{},"输入如下内容：",[312,123503,123505],{"className":117441,"code":123504,"language":117443,"meta":30,"style":30},"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",[318,123506,123507,123537],{"__ignoreMap":30},[321,123508,123509,123512,123514,123517,123520,123523,123526,123528,123531,123534],{"class":323,"line":324},[321,123510,123511],{"class":331},"KERNEL",[321,123513,377],{"class":327},[321,123515,123516],{"class":436},"=\"ttyUSB*\",",[321,123518,123519],{"class":2169}," ATTRS",[321,123521,123522],{"class":436},"{idVendor}==",[321,123524,123525],{"class":2169},"\"10c4\"",[321,123527,710],{"class":2169},[321,123529,123530],{"class":436}," ATTRS{idProduct}==\"ea60\",",[321,123532,123533],{"class":436}," MODE:=\"0777\",",[321,123535,123536],{"class":436}," SYMLINK+=\"mylidar\"\n",[321,123538,123539,123541,123543,123545,123547,123549,123552,123554,123557,123559],{"class":323,"line":167},[321,123540,123511],{"class":331},[321,123542,377],{"class":327},[321,123544,123516],{"class":436},[321,123546,123519],{"class":2169},[321,123548,123522],{"class":436},[321,123550,123551],{"class":2169},"\"1a86\"",[321,123553,710],{"class":2169},[321,123555,123556],{"class":436}," ATTRS{idProduct}==\"7523\",",[321,123558,123533],{"class":436},[321,123560,123561],{"class":436}," SYMLINK+=\"mycar\"\n",[19,123563,123564],{},"代码解释：",[1339,123566,123567,123570,123573,123576],{},[154,123568,123569],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[154,123571,123572],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[154,123574,123575],{},"SYMLINK是符号连接，即绑定的别名；",[154,123577,123578],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123580,123581,123582,123585,123588],{},"***小提示：***",[23761,123583,123584],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[318,123586,123587],{},"\u002Fetc\u002Fudev\u002Frule.d",[23761,123589,123590],{},"目录即可。",[19,123592,123593],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123595,123596],{},"（3）.使规则生效",[19,123598,123599],{},"在终端下输入如下指令：",[312,123601,123603],{"className":117441,"code":123602,"language":117443,"meta":30,"style":30},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[318,123604,123605,123610,123622,123633,123637,123642,123655],{"__ignoreMap":30},[321,123606,123607],{"class":323,"line":324},[321,123608,123609],{"class":390},"# Ubuntu用下方命令\n",[321,123611,123612,123614,123616,123619],{"class":323,"line":167},[321,123613,24721],{"class":2169},[321,123615,120193],{"class":436},[321,123617,123618],{"class":436}," udev",[321,123620,123621],{"class":436}," reload\n",[321,123623,123624,123626,123628,123630],{"class":323,"line":200},[321,123625,24721],{"class":2169},[321,123627,120193],{"class":436},[321,123629,123618],{"class":436},[321,123631,123632],{"class":436}," restart\n",[321,123634,123635],{"class":323,"line":1401},[321,123636,2606],{"emptyLinePlaceholder":251},[321,123638,123639],{"class":323,"line":1407},[321,123640,123641],{"class":390},"#Fedora用下方命令\n",[321,123643,123644,123646,123649,123652],{"class":323,"line":1421},[321,123645,24721],{"class":2169},[321,123647,123648],{"class":436}," udevadm",[321,123650,123651],{"class":436}," control",[321,123653,123654],{"class":380}," --reload\n",[321,123656,123657,123659,123661],{"class":323,"line":1427},[321,123658,24721],{"class":2169},[321,123660,123648],{"class":436},[321,123662,123663],{"class":436}," trigger\n",[19,123665,123666],{},"再重新插拔设备即可。",[19,123668,123669],{},"（4）.测试",[19,123671,123672],{},"终端下输入如下指令",[312,123674,123676],{"className":117441,"code":123675,"language":117443,"meta":30,"style":30},"ll \u002Fdev | grep ttyUSB\n",[318,123677,123678],{"__ignoreMap":30},[321,123679,123680,123683,123686,123688,123690],{"class":323,"line":324},[321,123681,123682],{"class":2169},"ll",[321,123684,123685],{"class":436}," \u002Fdev",[321,123687,25254],{"class":327},[321,123689,30381],{"class":2169},[321,123691,123692],{"class":436}," ttyUSB\n",[19,123694,123695],{},"运行结果如下：",[19,123697,123698],{},[28,123699],{"alt":30,"src":123700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123702,123703,123704,123707],{},"也可以多次插拔USB设备，会发现设备端口",[318,123705,123706],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123709,123710],{},[481,123711,118109],{},[19,123713,123714],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[292,123716,123718],{"id":123717},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123720,123721,123723],{},[481,123722,123437],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123725,123726,123728],{},[481,123727,123443],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123730,123731],{},[481,123732,123449],{},[19,123734,123735],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123737,123738],{},"调用如下指令查看第一台雷达的USB信息：",[312,123740,123742],{"className":117441,"code":123741,"language":117443,"meta":30,"style":30},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[318,123743,123744,123764],{"__ignoreMap":30},[321,123745,123746,123749,123751,123754,123757,123759,123761],{"class":323,"line":324},[321,123747,123748],{"class":2169},"udevadm",[321,123750,69966],{"class":436},[321,123752,123753],{"class":380}," --attribute-walk",[321,123755,123756],{"class":380}," --name=\u002Fdev\u002FttyUSB0",[321,123758,25254],{"class":327},[321,123760,30381],{"class":2169},[321,123762,123763],{"class":436}," KERNELS\n",[321,123765,123766,123768,123770,123772,123775,123777,123779],{"class":323,"line":167},[321,123767,123748],{"class":2169},[321,123769,69966],{"class":436},[321,123771,123753],{"class":380},[321,123773,123774],{"class":380}," --name=\u002Fdev\u002FttyACM0",[321,123776,25254],{"class":327},[321,123778,30381],{"class":2169},[321,123780,123763],{"class":436},[19,123782,123783],{},[28,123784],{"alt":30,"src":123785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123787,123788],{},"调用如下指令查看第二台雷达的USB信息：",[312,123790,123792],{"className":117441,"code":123791,"language":117443,"meta":30,"style":30},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[318,123793,123794],{"__ignoreMap":30},[321,123795,123796,123798,123800,123802,123805,123807,123809],{"class":323,"line":324},[321,123797,123748],{"class":2169},[321,123799,69966],{"class":436},[321,123801,123753],{"class":380},[321,123803,123804],{"class":380}," --name=\u002Fdev\u002FttyUSB1",[321,123806,25254],{"class":327},[321,123808,30381],{"class":2169},[321,123810,123763],{"class":436},[19,123812,123813,123814,123817,123818,123821,123822,123825],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[318,123815,123816],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[318,123819,123820],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[481,123823,123824],{},"唯一性标识","”。",[19,123827,123477],{},[19,123829,123480,123830,123832],{},[318,123831,123483],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[312,123834,123835],{"className":117441,"code":123487,"language":117443,"meta":30,"style":30},[318,123836,123837],{"__ignoreMap":30},[321,123838,123839,123841,123843],{"class":323,"line":324},[321,123840,24721],{"class":2169},[321,123842,118728],{"class":436},[321,123844,123498],{"class":436},[312,123846,123848],{"className":117441,"code":123847,"language":117443,"meta":30,"style":30},"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",[318,123849,123850,123879],{"__ignoreMap":30},[321,123851,123852,123854,123856,123858,123861,123863,123866,123869,123871,123874,123876],{"class":323,"line":324},[321,123853,123511],{"class":331},[321,123855,377],{"class":327},[321,123857,123516],{"class":436},[321,123859,123860],{"class":331}," KERNELS",[321,123862,377],{"class":327},[321,123864,123865],{"class":436},"=\"1-1.3:1.0\",",[321,123867,123868],{"class":2169}," MODE:",[321,123870,377],{"class":436},[321,123872,123873],{"class":2169},"\"0777\"",[321,123875,710],{"class":2169},[321,123877,123878],{"class":436}," SYMLINK+=\"rplidar_front\"\n",[321,123880,123881,123883,123885,123887,123889,123891,123894,123896,123898,123900,123902],{"class":323,"line":167},[321,123882,123511],{"class":331},[321,123884,377],{"class":327},[321,123886,123516],{"class":436},[321,123888,123860],{"class":331},[321,123890,377],{"class":327},[321,123892,123893],{"class":436},"=\"1-1.4:1.0\",",[321,123895,123868],{"class":2169},[321,123897,377],{"class":436},[321,123899,123873],{"class":2169},[321,123901,710],{"class":2169},[321,123903,123904],{"class":436}," SYMLINK+=\"rplidar_back\"\n",[19,123906,123596],{},[19,123908,123599],{},[312,123910,123911],{"className":117441,"code":123602,"language":117443,"meta":30,"style":30},[318,123912,123913,123917,123927,123937,123941,123945,123955],{"__ignoreMap":30},[321,123914,123915],{"class":323,"line":324},[321,123916,123609],{"class":390},[321,123918,123919,123921,123923,123925],{"class":323,"line":167},[321,123920,24721],{"class":2169},[321,123922,120193],{"class":436},[321,123924,123618],{"class":436},[321,123926,123621],{"class":436},[321,123928,123929,123931,123933,123935],{"class":323,"line":200},[321,123930,24721],{"class":2169},[321,123932,120193],{"class":436},[321,123934,123618],{"class":436},[321,123936,123632],{"class":436},[321,123938,123939],{"class":323,"line":1401},[321,123940,2606],{"emptyLinePlaceholder":251},[321,123942,123943],{"class":323,"line":1407},[321,123944,123641],{"class":390},[321,123946,123947,123949,123951,123953],{"class":323,"line":1421},[321,123948,24721],{"class":2169},[321,123950,123648],{"class":436},[321,123952,123651],{"class":436},[321,123954,123654],{"class":380},[321,123956,123957,123959,123961],{"class":323,"line":1427},[321,123958,24721],{"class":2169},[321,123960,123648],{"class":436},[321,123962,123663],{"class":436},[19,123964,123666],{},[19,123966,123669],{},[19,123968,123672,123969,123972],{},[318,123970,123971],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,123974,123975],{},[28,123976],{"alt":30,"src":123977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,123979,123980],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,123982,123983,123985],{},[481,123984,118109],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[292,123987,123989],{"id":123988},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,123991,123992],{},"（1）.查看所连接的主机USB接口的信息",[312,123994,123996],{"className":117441,"code":123995,"language":117443,"meta":30,"style":30},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[318,123997,123998,124028],{"__ignoreMap":30},[321,123999,124000,124002,124004,124007,124009,124011,124013,124015,124018,124021,124023,124026],{"class":323,"line":324},[321,124001,123748],{"class":2169},[321,124003,69966],{"class":436},[321,124005,124006],{"class":380}," -a",[321,124008,29361],{"class":380},[321,124010,28567],{"class":331},[321,124012,123748],{"class":2169},[321,124014,69966],{"class":436},[321,124016,124017],{"class":380}," -q",[321,124019,124020],{"class":436}," path",[321,124022,25260],{"class":380},[321,124024,124025],{"class":436}," \u002Fdev\u002FttyACM0",[321,124027,338],{"class":331},[321,124029,124030,124032,124034,124036,124038,124040,124042,124044,124046,124048,124050,124053],{"class":323,"line":167},[321,124031,123748],{"class":2169},[321,124033,69966],{"class":436},[321,124035,124006],{"class":380},[321,124037,29361],{"class":380},[321,124039,28567],{"class":331},[321,124041,123748],{"class":2169},[321,124043,69966],{"class":436},[321,124045,124017],{"class":380},[321,124047,124020],{"class":436},[321,124049,25260],{"class":380},[321,124051,124052],{"class":436}," \u002Fdev\u002FttyUSB0",[321,124054,338],{"class":331},[19,124056,124057],{},[28,124058],{"alt":30,"src":124059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124061,124062],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124064,123477],{},[19,124066,123480,124067,123832],{},[318,124068,123483],{},[312,124070,124071],{"className":117441,"code":123487,"language":117443,"meta":30,"style":30},[318,124072,124073],{"__ignoreMap":30},[321,124074,124075,124077,124079],{"class":323,"line":324},[321,124076,24721],{"class":2169},[321,124078,118728],{"class":436},[321,124080,123498],{"class":436},[312,124082,124084],{"className":117441,"code":124083,"language":117443,"meta":30,"style":30},"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",[318,124085,124086,124114,124140],{"__ignoreMap":30},[321,124087,124088,124090,124092,124095,124097,124099,124101,124103,124106,124109,124111],{"class":323,"line":324},[321,124089,123511],{"class":331},[321,124091,377],{"class":327},[321,124093,124094],{"class":436},"=\"ttyACM*\",",[321,124096,123519],{"class":2169},[321,124098,123522],{"class":436},[321,124100,123551],{"class":2169},[321,124102,710],{"class":2169},[321,124104,124105],{"class":436}," ATTRS{idProduct}==\"55d4\",",[321,124107,124108],{"class":436}," ATTRS{serial}==\"0001\",",[321,124110,123533],{"class":436},[321,124112,124113],{"class":436}," SYMLINK+=\"ttyACM_MCU\"\n",[321,124115,124116,124118,124120,124122,124124,124126,124128,124130,124132,124135,124137],{"class":323,"line":167},[321,124117,123511],{"class":331},[321,124119,377],{"class":327},[321,124121,124094],{"class":436},[321,124123,123519],{"class":2169},[321,124125,123522],{"class":436},[321,124127,123551],{"class":2169},[321,124129,710],{"class":2169},[321,124131,124105],{"class":436},[321,124133,124134],{"class":436}," ATTRS{serial}==\"0002\",",[321,124136,123533],{"class":436},[321,124138,124139],{"class":436}," SYMLINK+=\"ttyACM_Lidar\"\n",[321,124141,124142,124144,124146,124148,124150,124152,124154,124156,124158,124160],{"class":323,"line":200},[321,124143,123511],{"class":331},[321,124145,377],{"class":327},[321,124147,123516],{"class":436},[321,124149,123519],{"class":2169},[321,124151,123522],{"class":436},[321,124153,123551],{"class":2169},[321,124155,710],{"class":2169},[321,124157,123556],{"class":436},[321,124159,123533],{"class":436},[321,124161,124162],{"class":436}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124164,123596],{},[19,124166,123599],{},[312,124168,124169],{"className":117441,"code":123602,"language":117443,"meta":30,"style":30},[318,124170,124171,124175,124185,124195,124199,124203,124213],{"__ignoreMap":30},[321,124172,124173],{"class":323,"line":324},[321,124174,123609],{"class":390},[321,124176,124177,124179,124181,124183],{"class":323,"line":167},[321,124178,24721],{"class":2169},[321,124180,120193],{"class":436},[321,124182,123618],{"class":436},[321,124184,123621],{"class":436},[321,124186,124187,124189,124191,124193],{"class":323,"line":200},[321,124188,24721],{"class":2169},[321,124190,120193],{"class":436},[321,124192,123618],{"class":436},[321,124194,123632],{"class":436},[321,124196,124197],{"class":323,"line":1401},[321,124198,2606],{"emptyLinePlaceholder":251},[321,124200,124201],{"class":323,"line":1407},[321,124202,123641],{"class":390},[321,124204,124205,124207,124209,124211],{"class":323,"line":1421},[321,124206,24721],{"class":2169},[321,124208,123648],{"class":436},[321,124210,123651],{"class":436},[321,124212,123654],{"class":380},[321,124214,124215,124217,124219],{"class":323,"line":1427},[321,124216,24721],{"class":2169},[321,124218,123648],{"class":436},[321,124220,123663],{"class":436},[19,124222,124223,124224],{},"再重新插拔设备即可，或者 ",[481,124225,124226],{},"直接重启系统。",[19,124228,123669],{},[19,124230,123672,124231,123972],{},[318,124232,123971],{},[19,124234,124235],{},[28,124236],{"alt":30,"src":124237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124239,123980],{},[19,124241,124242,124244],{},[481,124243,118109],{}," 一些设备可能没有串口号等。",[292,124246,124248],{"id":124247},"_744-其他注意事项","7.4.4 其他注意事项",[19,124250,124251,124252,124254,124255,124258,124259,18617,124262,124265,124266,124268],{},"并非所有的USB设备端口号都是",[318,124253,123706],{},"的格式，比如Arduino的端口号可能是",[318,124256,124257],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[318,124260,124261],{},"videon",[318,124263,124264],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[318,124267,124261],{},"端口，绑定时需要关联的也是该接口。",[19,124270,124271,124272,124275,124276,124279,124280,124282,124283,124286,124287,124290,124291,124294,124295,124294,124298,124294,124301,28530],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[318,124273,124274],{},"KERNEL==\"ttyUSB*\"","修改为",[318,124277,124278],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[318,124281,124274],{},"修改为类似于",[318,124284,124285],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[318,124288,124289],{},"video[0,2,4,6]","表示可以绑定的端口为",[318,124292,124293],{},"video0","或",[318,124296,124297],{},"video2",[318,124299,124300],{},"video4",[318,124302,124303],{},"video6",[14,124305,124307],{"id":124306},"_75-挂载内网网页","7.5 挂载内网网页",[19,124309,124310],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124312,124313],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124315,124316],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124318,124319,124320],{},"Termux 下载地址（F-Droid）：",[570,124321,124322],{"href":124322,"rel":124323},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24073],[19,124325,124326],{},"首先打开app后，先更新软件缓存：",[312,124328,124330],{"className":117441,"code":124329,"language":117443,"meta":30,"style":30},"pkg update\n",[318,124331,124332],{"__ignoreMap":30},[321,124333,124334,124337],{"class":323,"line":324},[321,124335,124336],{"class":2169},"pkg",[321,124338,26387],{"class":436},[19,124340,124341],{},"然后换源",[312,124343,124345],{"className":117441,"code":124344,"language":117443,"meta":30,"style":30},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[318,124346,124347],{"__ignoreMap":30},[321,124348,124349,124351,124354],{"class":323,"line":324},[321,124350,123219],{"class":2169},[321,124352,124353],{"class":331}," $PREFIX",[321,124355,124356],{"class":436},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124358,124359],{},"将该文件内容替换为下面：",[312,124361,124363],{"className":117441,"code":124362,"language":117443,"meta":30,"style":30},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[318,124364,124365],{"__ignoreMap":30},[321,124366,124367,124370,124373,124376],{"class":323,"line":324},[321,124368,124369],{"class":2169},"deb",[321,124371,124372],{"class":436}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[321,124374,124375],{"class":436}," stable",[321,124377,124378],{"class":436}," main\n",[1339,124380,124381,124408],{},[154,124382,124383,124384,124386,124387],{},"如果你使用的是",[318,124385,123219],{},"编辑器：",[1339,124388,124389,124396,124402],{},[154,124390,124391,124392,124395],{},"按 ",[318,124393,124394],{},"Ctrl+O"," 保存文件。",[154,124397,124391,124398,124401],{},[318,124399,124400],{},"Enter"," 确认文件名。",[154,124403,124391,124404,124407],{},[318,124405,124406],{},"Ctrl+X"," 退出编辑器。",[154,124409,124383,124410,124386,124413],{},[318,124411,124412],{},"vim",[1339,124414,124415,124421],{},[154,124416,124391,124417,124420],{},[318,124418,124419],{},"Esc"," 退出编辑模式。",[154,124422,124423,124424,124426],{},"输入 ",[318,124425,119366],{}," 保存并退出。",[19,124428,124429],{},"接下来重新更新软件源：",[312,124431,124433],{"className":117441,"code":124432,"language":117443,"meta":30,"style":30},"pkg update && pkg upgrade\n",[318,124434,124435],{"__ignoreMap":30},[321,124436,124437,124439,124441,124443,124445],{"class":323,"line":324},[321,124438,124336],{"class":2169},[321,124440,117492],{"class":436},[321,124442,26335],{"class":331},[321,124444,124336],{"class":2169},[321,124446,117478],{"class":436},[19,124448,124449],{},"安装python：",[312,124451,124453],{"className":117441,"code":124452,"language":117443,"meta":30,"style":30},"pkg install python\n",[318,124454,124455],{"__ignoreMap":30},[321,124456,124457,124459,124461],{"class":323,"line":324},[321,124458,124336],{"class":2169},[321,124460,24042],{"class":436},[321,124462,124463],{"class":436}," python\n",[19,124465,124466,26618],{},[481,124467,124468],{},"通过Termux访问设备存储",[19,124470,124471],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[312,124473,124475],{"className":117441,"code":124474,"language":117443,"meta":30,"style":30},"termux-setup-storage\n",[318,124476,124477],{"__ignoreMap":30},[321,124478,124479],{"class":323,"line":324},[321,124480,124474],{"class":2169},[151,124482,124483],{},[154,124484,124485,26618,124488],{},[481,124486,124487],{},"进入HTML文件所在的目录",[151,124489,124490],{},[154,124491,124492,124493,124495],{},"使用",[318,124494,101421],{},"命令进入HTML文件所在的目录：",[312,124497,124499],{"className":117441,"code":124498,"language":117443,"meta":30,"style":30},"cd ~\u002Fyour_html_folder\n",[318,124500,124501],{"__ignoreMap":30},[321,124502,124503,124505],{"class":323,"line":324},[321,124504,101421],{"class":380},[321,124506,124507],{"class":436}," ~\u002Fyour_html_folder\n",[151,124509,124510],{"start":167},[154,124511,124512,26618,124515,124520,124537],{},[481,124513,124514],{},"启动Python HTTP服务器",[151,124516,124517],{},[154,124518,124519],{},"运行以下命令启动一个简单的HTTP服务器：",[312,124521,124523],{"className":117441,"code":124522,"language":117443,"meta":30,"style":30},"python -m http.server 8000\n",[318,124524,124525],{"__ignoreMap":30},[321,124526,124527,124529,124531,124534],{"class":323,"line":324},[321,124528,30525],{"class":2169},[321,124530,101027],{"class":380},[321,124532,124533],{"class":436}," http.server",[321,124535,124536],{"class":380}," 8000\n",[151,124538,124539],{"start":200},[154,124540,124541,124542,124545],{},"这会在端口",[318,124543,124544],{},"8000","上启动一个Web服务器。",[1339,124547,124548],{},[154,124549,124550],{},"启动服务器后，Termux会显示日志信息，例如：",[312,124552,124554],{"className":120961,"code":124553,"language":120963,"meta":120964,"style":30},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[318,124555,124556],{"__ignoreMap":30},[321,124557,124558],{"class":323,"line":324},[321,124559,124553],{},[1339,124561,124562],{},[154,124563,124564],{},"这表示服务器已成功启动。",[19,124566,124567],{},[481,124568,124569],{},"在浏览器中访问HTML文件",[151,124571,124572],{},[154,124573,124574,26618,124577,124582],{},[481,124575,124576],{},"在同一设备上访问",[151,124578,124579],{},[154,124580,124581],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[312,124583,124586],{"className":124584,"code":124585,"language":71809,"meta":30,"style":30},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[318,124587,124588],{"__ignoreMap":30},[321,124589,124590,124593],{"class":323,"line":324},[321,124591,124592],{"class":331},"http:",[321,124594,124595],{"class":390},"\u002F\u002Flocalhost:8000\n",[1339,124597,124598],{},[154,124599,124600,124601,124604],{},"如果HTML文件中有",[318,124602,124603],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124606,124608],{"id":124607},"_76-linux重点知识","7.6 Linux重点知识",[292,124610,124612],{"id":124611},"_761-关于点的说明","7.6.1 关于点的说明",[19,124614,124615],{},[28,124616],{"alt":30,"src":124617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124619,124620],{},"一点本目录，两点上目录",[292,124622,124624],{"id":124623},"_762-目录","7.6.2 目录",[22205,124626,124628],{"id":124627},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124630,124631],{},[481,124632,124633],{},"\u002Fboot:",[19,124635,124636],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124638,124639],{},[481,124640,124641],{},"\u002Fetc:",[19,124643,124644],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124646,124647],{},[481,124648,124649],{},"\u002Flib：",[19,124651,124652],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124654,124655],{},[481,124656,124657],{},"\u002Fsys:",[19,124659,124660],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22205,124662,124664],{"id":124663},"_7622-指令集合","7.6.2.2 指令集合",[19,124666,124667],{},[481,124668,124669],{},"\u002Fbin:",[19,124671,124672],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124674,124675],{},[481,124676,124677],{},"\u002Fsbin:",[19,124679,124680],{},"只有系统管理员才能使用的程序和指令",[22205,124682,124684],{"id":124683},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124686,124687],{},[481,124688,124689],{},"\u002Fdev:",[19,124691,124692],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124694,124695],{},[481,124696,124697],{},"\u002Fmedia:",[19,124699,124700],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124702,124703],{},[481,124704,124705],{},"\u002Fmnt:",[19,124707,124708],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22205,124710,124712],{"id":124711},"_7624-临时文件","7.6.2.4 临时文件",[19,124714,124715],{},[481,124716,124717],{},"\u002Frun:",[19,124719,124720],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124722,124723],{},[481,124724,124725],{},"\u002Flost+found:",[19,124727,124728],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124730,124731],{},[481,124732,124733],{},"\u002Ftmp:",[19,124735,124736],{},"这个目录是用来存放一些临时文件的",[22205,124738,124740],{"id":124739},"_7625-账户","7.6.2.5 账户",[19,124742,124743],{},[481,124744,124745],{},"\u002Froot：",[19,124747,124748],{},"系统管理员的用户主目录",[19,124750,124751,26618],{},[481,124752,124753],{},"\u002Fhome",[19,124755,124756],{},"用户的主目录，以用户的账号命名的",[19,124758,124759,26618],{},[481,124760,124761],{},"\u002Fusr",[19,124763,124764],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124766,124767],{},[481,124768,124769],{},"\u002Fusr\u002Fbin：",[19,124771,124772],{},"系统用户使用的应用程序与指令",[19,124774,124775],{},[481,124776,124777],{},"\u002Fusr\u002Fsbin：",[19,124779,124780],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124782,124783],{},[481,124784,124785],{},"\u002Fusr\u002Fsrc：",[19,124787,124788],{},"内核源代码默认的放置目录",[22205,124790,124792],{"id":124791},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124794,124795],{},[481,124796,124797],{},"\u002Fvar：",[19,124799,124800],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124802,124803],{},[481,124804,124805],{},"\u002Fproc:",[19,124807,124808,124809,124812],{},"管理 ",[481,124810,124811],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22205,124814,124816],{"id":124815},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124818,124819],{},[481,124820,124821],{},"\u002Fopt:",[19,124823,124824],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124826,124827],{},[481,124828,124829],{},"\u002Fsrv:",[19,124831,124832],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[292,124834,124836],{"id":124835},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124838,124839],{},[28,124840],{"alt":30,"src":124841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124843,124844],{},"windows-->linux:",[19,124846,124847],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124849,124850],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124852,124853],{},"linux传输文件到windows",[19,124855,124856],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[292,124858,124860],{"id":124859},"_764-易忘知识","7.6.4 易忘知识",[19,124862,124863],{},"操作系统内核查看",[312,124865,124866],{"className":117441,"code":121435,"language":117443,"meta":30,"style":30},[318,124867,124868],{"__ignoreMap":30},[321,124869,124870,124872],{"class":323,"line":324},[321,124871,70349],{"class":2169},[321,124873,121444],{"class":380},[19,124875,124876],{},[28,124877],{"alt":30,"src":124878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,124880,124881],{},[28,124882],{"alt":30,"src":124883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[312,124885,124887],{"className":117441,"code":124886,"language":117443,"meta":30,"style":30},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[318,124888,124889,124901],{"__ignoreMap":30},[321,124890,124891,124893,124896,124899],{"class":323,"line":324},[321,124892,121652],{"class":2169},[321,124894,124895],{"class":436}," mvtest",[321,124897,124898],{"class":436}," mvtest2",[321,124900,2880],{"class":331},[321,124902,124903],{"class":323,"line":167},[321,124904,124905],{"class":2169},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,124907,124908],{},[28,124909],{"alt":30,"src":124910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,124912,124913],{},[28,124914],{"alt":30,"src":124915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,124917,124918,124919,124922],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[318,124920,124921],{},"du -a"," 可以快速查看磁盘使用细节。",[292,124924,124926],{"id":124925},"_765-vim","7.6.5 Vim",[19,124928,124929],{},[28,124930],{"alt":30,"src":124931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,124933,124934],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,124936,124937],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,124939,124940],{},[481,124941,124942],{},"1.命令模式：",[19,124944,124945],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,124947,124948],{},"x 删除当前光标所在处的字符",[19,124950,124951],{},"：切换到底线命令模式，以在最底一行输入命令",[19,124953,124954],{},"a 进行插入模式，在光标下一个位置输入文本",[19,124956,124957],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,124959,124960],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,124962,124963],{},"dd 剪切当前行",[19,124965,124966],{},"yy 复制当前行",[19,124968,124969],{},"p 粘贴剪贴板内容到光标下方",[19,124971,124972],{},"P 粘贴剪贴板内容到光标上方",[19,124974,124975],{},"u 撤销上一次操作",[19,124977,124978],{},"ctrl+r 重做上一次操作",[19,124980,124981,124983],{},[1127,124982],{}," 保存文件",[19,124985,124986,124988],{},[977,124987],{}," 退出Vim编辑器",[19,124990,124991,124993],{},[977,124992],{},"! 强制退出Vim编辑器，不保存修改",[19,124995,124996],{},[481,124997,124998],{},"2.输入模式：",[19,125000,125001],{},[28,125002],{"alt":30,"src":125003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125005,125006],{},[481,125007,125008],{},"3.底线命令模式：",[19,125010,125011],{},[28,125012],{"alt":30,"src":125013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125015,125016],{},"按下esc可以退出底线命令模式",[292,125018,125020],{"id":125019},"_766-apt","7.6.6 apt",[19,125022,125023],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[292,125025,125027],{"id":125026},"_767-home与root的区别","7.6.7 home与root的区别",[19,125029,125030],{},[28,125031],{"alt":30,"src":125032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125034,125035],{},[28,125036],{"alt":30,"src":125037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125039,125040],{},[28,125041],{"alt":30,"src":125042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125044,125045],{},[28,125046],{"alt":30,"src":125047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[292,125049,125051],{"id":125050},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125053,125054],{},[570,125055,125056],{"href":125056,"rel":125057},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24073],[151,125059,125060,125063],{},[154,125061,125062],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[154,125064,125065],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125067,125068],{},[28,125069],{"alt":30,"src":125070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125072,125073],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125075,125076],{},[28,125077],{"alt":30,"src":125078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[312,125080,125082],{"className":120961,"code":125081,"language":120963,"meta":120964,"style":30},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[318,125083,125084,125089],{"__ignoreMap":30},[321,125085,125086],{"class":323,"line":324},[321,125087,125088],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[321,125090,125091],{"class":323,"line":167},[321,125092,125093],{},".\u002Fpycharm.sh\n",[19,125095,125096],{},"3️⃣创建.desktop文件",[19,125098,125099],{},[481,125100,125101],{},"原理：",[1339,125103,125104,125114],{},[154,125105,125106,125107,125113],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[481,125108,125109,125112],{},[318,125110,125111],{},".desktop"," 文件"," 来识别应用。",[154,125115,125116,125118,125119],{},[318,125117,125111],{}," 文件相当于一个“应用注册表”，告诉系统：",[1339,125120,125121,125124,125127,125130,125133],{},[154,125122,125123],{},"应用名字（Name）",[154,125125,125126],{},"图标（Icon）",[154,125128,125129],{},"执行命令（Exec）",[154,125131,125132],{},"分类（Categories）",[154,125134,125135],{},"是否需要终端（Terminal）",[312,125137,125139],{"className":120961,"code":125138,"language":120963,"meta":120964,"style":30},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[318,125140,125141,125146],{"__ignoreMap":30},[321,125142,125143],{"class":323,"line":324},[321,125144,125145],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[321,125147,125148],{"class":323,"line":167},[321,125149,125150],{},"nano pycharm.desktop\n",[19,125152,125153],{},"nano是一个命令行下的编辑器，也可以使用vim",[312,125155,125157],{"className":120961,"code":125156,"language":120963,"meta":120964,"style":30},"[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",[318,125158,125159,125164,125169,125174,125179,125184,125189,125194,125199,125204],{"__ignoreMap":30},[321,125160,125161],{"class":323,"line":324},[321,125162,125163],{},"[Desktop Entry]\n",[321,125165,125166],{"class":323,"line":167},[321,125167,125168],{},"Version=1.0\n",[321,125170,125171],{"class":323,"line":200},[321,125172,125173],{},"Type=Application\n",[321,125175,125176],{"class":323,"line":1401},[321,125177,125178],{},"Name=PyCharm\n",[321,125180,125181],{"class":323,"line":1407},[321,125182,125183],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[321,125185,125186],{"class":323,"line":1421},[321,125187,125188],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[321,125190,125191],{"class":323,"line":1427},[321,125192,125193],{},"Comment=JetBrains PyCharm IDE\n",[321,125195,125196],{"class":323,"line":1518},[321,125197,125198],{},"Categories=Development;IDE;\n",[321,125200,125201],{"class":323,"line":1524},[321,125202,125203],{},"Terminal=false\n",[321,125205,125206],{"class":323,"line":1536},[321,125207,125208],{},"StartupWMClass=jetbrains-pycharm\n",[1339,125210,125211,125217,125223,125229],{},[154,125212,125213,125216],{},[318,125214,125215],{},"Exec"," → 点击图标时执行的命令",[154,125218,125219,125222],{},[318,125220,125221],{},"Icon"," → 显示在菜单和桌面上的图标",[154,125224,125225,125228],{},[318,125226,125227],{},"Terminal=false"," → 不打开终端",[154,125230,125231,125234],{},[318,125232,125233],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125236,125237,125238],"blockquote",{},[19,125239,125240,125241,125243,125244],{},"可以理解成 ",[318,125242,125111],{}," 文件是 Linux 的 ",[481,125245,125246],{},"快捷方式配置文件",[19,125248,125249],{},"4️⃣设置可执行权限",[312,125251,125253],{"className":120961,"code":125252,"language":120963,"meta":120964,"style":30},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[318,125254,125255],{"__ignoreMap":30},[321,125256,125257],{"class":323,"line":324},[321,125258,125252],{},[19,125260,125261],{},"5️⃣桌面图标启动的话如下：",[312,125263,125265],{"className":120961,"code":125264,"language":120963,"meta":120964,"style":30},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[318,125266,125267,125272],{"__ignoreMap":30},[321,125268,125269],{"class":323,"line":324},[321,125270,125271],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[321,125273,125274],{"class":323,"line":167},[321,125275,125276],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[151,125278,125279],{"start":200},[154,125280,125281],{},"下载Appimage文件实现软件的安装",[19,125283,125284],{},"1️⃣先下载appimage",[19,125286,125287],{},[570,125288,125289],{"href":125289,"rel":125290},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24073],[19,125292,125293],{},[28,125294],{"alt":30,"src":125295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125297,125298],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125300,125301],{},[28,125302],{"alt":30,"src":125303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125305,125306],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125308,125309],{},[28,125310],{"alt":30,"src":125311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125313,125314],{},[28,125315],{"alt":30,"src":125316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125318,125319,125320,125323],{},"3️⃣给他们放在",[318,125321,125322],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125325,125326],{},"4️⃣给软件执行权限",[312,125328,125330],{"className":120961,"code":125329,"language":120963,"meta":120964,"style":30},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[318,125331,125332,125337],{"__ignoreMap":30},[321,125333,125334],{"class":323,"line":324},[321,125335,125336],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[321,125338,125339],{"class":323,"line":167},[321,125340,125341],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125343,125344],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[312,125346,125348],{"className":117441,"code":125347,"language":117443,"meta":30,"style":30},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[318,125349,125350,125357,125364,125370],{"__ignoreMap":30},[321,125351,125352,125354],{"class":323,"line":324},[321,125353,101421],{"class":380},[321,125355,125356],{"class":436}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[321,125358,125359,125361],{"class":323,"line":167},[321,125360,101428],{"class":2169},[321,125362,125363],{"class":436}," .\u002Fqqmusic.desktop\n",[321,125365,125366,125368],{"class":323,"line":200},[321,125367,124412],{"class":2169},[321,125369,125363],{"class":436},[321,125371,125372,125374,125376,125378],{"class":323,"line":1401},[321,125373,24721],{"class":2169},[321,125375,24724],{"class":436},[321,125377,123278],{"class":436},[321,125379,125363],{"class":436},[19,125381,125382,125384],{},[318,125383,101428],{},"：一个 Linux 命令，主要功能是：",[1339,125386,125387,125390],{},[154,125388,125389],{},"如果文件不存在，就创建一个新的空文件",[154,125391,125392],{},"如果文件已存在，就更新该文件的最后修改时间",[312,125394,125396],{"className":120961,"code":125395,"language":120963,"meta":120964,"style":30},"[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",[318,125397,125398,125402,125407,125412,125417,125421,125426],{"__ignoreMap":30},[321,125399,125400],{"class":323,"line":324},[321,125401,125163],{},[321,125403,125404],{"class":323,"line":167},[321,125405,125406],{},"Name=QQ音乐\n",[321,125408,125409],{"class":323,"line":200},[321,125410,125411],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[321,125413,125414],{"class":323,"line":1401},[321,125415,125416],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[321,125418,125419],{"class":323,"line":1407},[321,125420,125173],{},[321,125422,125423],{"class":323,"line":1421},[321,125424,125425],{},"Categories=Audio;Music;Player;\n",[321,125427,125428],{"class":323,"line":1427},[321,125429,125430],{},"Comment=QQ Music Client for Linux\n",[19,125432,125433],{},"将文件复制进去",[19,125435,125436],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125438,125439],{},[28,125440],{"alt":30,"src":125441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125443,125444],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125446,125447],{},[28,125448],{"alt":30,"src":125449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125451,125452,125453,125456,125457,125460],{},"如果你用的不是KDE，那么也可以直接修改",[318,125454,125455],{},"qqmuic.desktop","：在exec的末尾加上",[318,125458,125459],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[312,125462,125464],{"className":120961,"code":125463,"language":120963,"meta":120964,"style":30},"[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",[318,125465,125466,125470,125474,125479,125483,125487,125491],{"__ignoreMap":30},[321,125467,125468],{"class":323,"line":324},[321,125469,125163],{},[321,125471,125472],{"class":323,"line":167},[321,125473,125406],{},[321,125475,125476],{"class":323,"line":200},[321,125477,125478],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[321,125480,125481],{"class":323,"line":1401},[321,125482,125416],{},[321,125484,125485],{"class":323,"line":1407},[321,125486,125173],{},[321,125488,125489],{"class":323,"line":1421},[321,125490,125425],{},[321,125492,125493],{"class":323,"line":1427},[321,125494,125430],{},[19,125496,125497],{},[28,125498],{"alt":30,"src":125499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125501,125502],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[312,125504,125506],{"className":120961,"code":125505,"language":120963,"meta":120964,"style":30},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[318,125507,125508],{"__ignoreMap":30},[321,125509,125510],{"class":323,"line":324},[321,125511,125505],{},[151,125513,125514],{"start":1401},[154,125515,125516],{},"去Flathub上安装软件",[19,125518,125519],{},[570,125520,125521],{"href":125521,"rel":125522},"https:\u002F\u002Fflathub.org\u002F",[24073],[19,125524,125525],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125527,125528],{},[28,125529],{"alt":30,"src":125530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[312,125532,125534],{"className":120961,"code":125533,"language":120963,"meta":120964,"style":30},"flatpak install flathub com.obsproject.Studio\n",[318,125535,125536],{"__ignoreMap":30},[321,125537,125538],{"class":323,"line":324},[321,125539,125533],{},[19,125541,125542],{},[28,125543],{"alt":30,"src":125544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125546,125547],{},"2️⃣运行软件",[19,125549,125550],{},"a.官方方式：",[19,125552,125553],{},[28,125554],{"alt":30,"src":125555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[312,125557,125558],{"className":120961,"code":125533,"language":120963,"meta":120964,"style":30},[318,125559,125560],{"__ignoreMap":30},[321,125561,125562],{"class":323,"line":324},[321,125563,125533],{},[19,125565,125566],{},"b.当普通软件运行：",[19,125568,125569],{},[28,125570],{"alt":30,"src":125571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125573,125574],{},[28,125575],{"alt":30,"src":125576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5333,125578,125579],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":30,"searchDepth":167,"depth":167,"links":125581},[125582,125583,125588,125589,125595,125596],{"id":122314,"depth":167,"text":122315},{"id":122656,"depth":167,"text":122657,"children":125584},[125585,125586,125587],{"id":122660,"depth":200,"text":122661},{"id":122727,"depth":200,"text":122728},{"id":122988,"depth":200,"text":122989},{"id":123141,"depth":167,"text":123142},{"id":123379,"depth":167,"text":123380,"children":125590},[125591,125592,125593,125594],{"id":123431,"depth":200,"text":123432},{"id":123717,"depth":200,"text":123718},{"id":123988,"depth":200,"text":123989},{"id":124247,"depth":200,"text":124248},{"id":124306,"depth":167,"text":124307},{"id":124607,"depth":167,"text":124608,"children":125597},[125598,125599,125600,125601,125602,125603,125604,125605],{"id":124611,"depth":200,"text":124612},{"id":124623,"depth":200,"text":124624},{"id":124835,"depth":200,"text":124836},{"id":124859,"depth":200,"text":124860},{"id":124925,"depth":200,"text":124926},{"id":125019,"depth":200,"text":125020},{"id":125026,"depth":200,"text":125027},{"id":125050,"depth":200,"text":125051},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122306,"description":23584},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125612,"title":125613,"body":125614,"description":23584,"extension":249,"meta":125618,"navigation":251,"path":125619,"seo":125620,"stem":125621,"__hash__":125622},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125615,"toc":125616},[],{"title":30,"searchDepth":167,"depth":167,"links":125617},[],{"category":30408},"\u002Fwiki\u002F2025-01-27-linux",{"title":125613,"description":23584},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125624,"title":125625,"body":125626,"description":125630,"extension":249,"meta":126021,"navigation":251,"path":126022,"seo":126023,"stem":126024,"__hash__":126025},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125627,"toc":126019},[125628,125631,125635,125652,125655,125708,125712,125714,125754,125763,125767,125770,126011,126016],[19,125629,125630],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125632,125634],{"id":125633},"_1ubuntu环境配置","1.Ubuntu环境配置",[151,125636,125637,125640,125643,125646,125649],{},[154,125638,125639],{},"ubuntu环境换源",[154,125641,125642],{},"安装cuda",[154,125644,125645],{},"安装miniconda",[154,125647,125648],{},"安装pytorch",[154,125650,125651],{},"安装genesis",[19,125653,125654],{},"参考链接：",[312,125656,125658],{"className":24030,"code":125657,"language":24032,"meta":30,"style":30},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[318,125659,125660],{"__ignoreMap":30},[321,125661,125662,125665,125668,125671,125673,125676,125679,125681,125684,125687,125689,125692,125695,125697,125700,125703,125705],{"class":323,"line":324},[321,125663,125664],{"class":2169},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[321,125666,125667],{"class":436},"=blogdetail",[321,125669,125670],{"class":331},"&sharetype",[321,125672,377],{"class":327},[321,125674,125675],{"class":436},"blogdetail",[321,125677,125678],{"class":331},"&sharerId",[321,125680,377],{"class":327},[321,125682,125683],{"class":436},"144728092",[321,125685,125686],{"class":331},"&sharerefer",[321,125688,377],{"class":327},[321,125690,125691],{"class":436},"PC",[321,125693,125694],{"class":331},"&sharesource",[321,125696,377],{"class":327},[321,125698,125699],{"class":436},"qq_69379513",[321,125701,125702],{"class":331},"&sharefrom",[321,125704,377],{"class":327},[321,125706,125707],{"class":436},"from_link\n",[10,125709,125711],{"id":125710},"_2genesis-报错issue","2.Genesis 报错issue",[19,125713,125654],{},[312,125715,125716],{"className":24030,"code":125657,"language":24032,"meta":30,"style":30},[318,125717,125718],{"__ignoreMap":30},[321,125719,125720,125722,125724,125726,125728,125730,125732,125734,125736,125738,125740,125742,125744,125746,125748,125750,125752],{"class":323,"line":324},[321,125721,125664],{"class":2169},[321,125723,125667],{"class":436},[321,125725,125670],{"class":331},[321,125727,377],{"class":327},[321,125729,125675],{"class":436},[321,125731,125678],{"class":331},[321,125733,377],{"class":327},[321,125735,125683],{"class":436},[321,125737,125686],{"class":331},[321,125739,377],{"class":327},[321,125741,125691],{"class":436},[321,125743,125694],{"class":331},[321,125745,377],{"class":327},[321,125747,125699],{"class":436},[321,125749,125702],{"class":331},[321,125751,377],{"class":327},[321,125753,125707],{"class":436},[312,125755,125757],{"className":24030,"code":125756,"language":24032,"meta":30,"style":30},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[318,125758,125759],{"__ignoreMap":30},[321,125760,125761],{"class":323,"line":324},[321,125762,125756],{"class":2169},[10,125764,125766],{"id":125765},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125768,125769],{},"hello_robot.py",[312,125771,125773],{"className":30523,"code":125772,"language":30525,"meta":30,"style":30},"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",[318,125774,125775,125781,125796,125800,125812,125824,125828,125841,125845,125864,125874,125884,125898,125902,125906,125911,125915,125925,125932,125946,125953,125963,125968,125972,125990,125995,125999,126006],{"__ignoreMap":30},[321,125776,125777,125779],{"class":323,"line":324},[321,125778,30537],{"class":327},[321,125780,45450],{"class":331},[321,125782,125783,125786,125789,125791,125793],{"class":323,"line":167},[321,125784,125785],{"class":331},"os.environ[",[321,125787,125788],{"class":436},"'PYOPENGL_PLATFORM'",[321,125790,4649],{"class":331},[321,125792,377],{"class":327},[321,125794,125795],{"class":436}," 'glx'\n",[321,125797,125798],{"class":323,"line":200},[321,125799,2606],{"emptyLinePlaceholder":251},[321,125801,125802,125804,125807,125809],{"class":323,"line":1401},[321,125803,30537],{"class":327},[321,125805,125806],{"class":331}," genesis ",[321,125808,31528],{"class":327},[321,125810,125811],{"class":331}," gs\n",[321,125813,125814,125816,125819,125821],{"class":323,"line":1407},[321,125815,30882],{"class":327},[321,125817,125818],{"class":331}," pynput ",[321,125820,30537],{"class":327},[321,125822,125823],{"class":331}," keyboard\n",[321,125825,125826],{"class":323,"line":1421},[321,125827,2606],{"emptyLinePlaceholder":251},[321,125829,125830,125833,125836,125838],{"class":323,"line":1427},[321,125831,125832],{"class":331},"gs.init(",[321,125834,125835],{"class":5423},"backend",[321,125837,377],{"class":327},[321,125839,125840],{"class":331},"gs.gpu)\n",[321,125842,125843],{"class":323,"line":1518},[321,125844,2606],{"emptyLinePlaceholder":251},[321,125846,125847,125850,125852,125855,125858,125860,125862],{"class":323,"line":1524},[321,125848,125849],{"class":331},"scene ",[321,125851,377],{"class":327},[321,125853,125854],{"class":331}," gs.Scene(",[321,125856,125857],{"class":5423},"show_viewer",[321,125859,377],{"class":327},[321,125861,31621],{"class":380},[321,125863,338],{"class":331},[321,125865,125866,125869,125871],{"class":323,"line":1536},[321,125867,125868],{"class":331},"plane ",[321,125870,377],{"class":327},[321,125872,125873],{"class":331}," scene.add_entity(gs.morphs.Plane())\n",[321,125875,125876,125879,125881],{"class":323,"line":1818},[321,125877,125878],{"class":331},"franka ",[321,125880,377],{"class":327},[321,125882,125883],{"class":331}," scene.add_entity(\n",[321,125885,125886,125889,125891,125893,125896],{"class":323,"line":1823},[321,125887,125888],{"class":331},"    gs.morphs.MJCF(",[321,125890,45499],{"class":5423},[321,125892,377],{"class":327},[321,125894,125895],{"class":436},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[321,125897,38192],{"class":331},[321,125899,125900],{"class":323,"line":1829},[321,125901,338],{"class":331},[321,125903,125904],{"class":323,"line":1834},[321,125905,2606],{"emptyLinePlaceholder":251},[321,125907,125908],{"class":323,"line":1848},[321,125909,125910],{"class":331},"scene.build()\n",[321,125912,125913],{"class":323,"line":1853},[321,125914,2606],{"emptyLinePlaceholder":251},[321,125916,125917,125919,125922],{"class":323,"line":1859},[321,125918,32092],{"class":327},[321,125920,125921],{"class":2169}," on_press",[321,125923,125924],{"class":331},"(key):\n",[321,125926,125927,125930],{"class":323,"line":1880},[321,125928,125929],{"class":327},"    try",[321,125931,3945],{"class":331},[321,125933,125934,125936,125939,125941,125944],{"class":323,"line":1885},[321,125935,2703],{"class":327},[321,125937,125938],{"class":331}," key.char ",[321,125940,3155],{"class":327},[321,125942,125943],{"class":436}," 'q'",[321,125945,3945],{"class":331},[321,125947,125948,125950],{"class":323,"line":1899},[321,125949,15939],{"class":327},[321,125951,125952],{"class":380}," False\n",[321,125954,125955,125958,125961],{"class":323,"line":1904},[321,125956,125957],{"class":327},"    except",[321,125959,125960],{"class":380}," AttributeError",[321,125962,3945],{"class":331},[321,125964,125965],{"class":323,"line":1933},[321,125966,125967],{"class":327},"        pass\n",[321,125969,125970],{"class":323,"line":1938},[321,125971,2606],{"emptyLinePlaceholder":251},[321,125973,125974,125977,125979,125982,125985,125987],{"class":323,"line":1955},[321,125975,125976],{"class":331},"listener ",[321,125978,377],{"class":327},[321,125980,125981],{"class":331}," keyboard.Listener(",[321,125983,125984],{"class":5423},"on_press",[321,125986,377],{"class":327},[321,125988,125989],{"class":331},"on_press)\n",[321,125991,125992],{"class":323,"line":1960},[321,125993,125994],{"class":331},"listener.start()\n",[321,125996,125997],{"class":323,"line":1965},[321,125998,2606],{"emptyLinePlaceholder":251},[321,126000,126001,126003],{"class":323,"line":1970},[321,126002,108808],{"class":327},[321,126004,126005],{"class":331}," listener.running:\n",[321,126007,126008],{"class":323,"line":1984},[321,126009,126010],{"class":331},"    scene.step()\n",[19,126012,126013],{},[28,126014],{"alt":30,"src":126015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5333,126017,126018],{},"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":30,"searchDepth":167,"depth":167,"links":126020},[],{"category":23586},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125625,"description":125630},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126027,"title":126028,"body":126029,"description":23584,"extension":249,"meta":126044,"navigation":251,"path":126045,"seo":126046,"stem":126047,"__hash__":126048},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126030,"toc":126041},[126031,126034,126038],[10,126032,126028],{"id":126033},"_1-基础知识",[14,126035,126037],{"id":126036},"_11-js的组成","1.1 js的组成",[19,126039,126040],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":30,"searchDepth":167,"depth":167,"links":126042},[126043],{"id":126036,"depth":167,"text":126037},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126028,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126050,"title":126051,"body":126052,"description":23584,"extension":249,"meta":126191,"navigation":251,"path":126192,"seo":126193,"stem":126194,"__hash__":126195},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126053,"toc":126179},[126054,126057,126061,126064,126068,126078,126082,126085,126088,126091,126095,126102,126108,126112,126118,126129,126133,126136,126140,126143,126147,126150,126154,126157,126161,126164,126167,126170,126173,126176],[10,126055,126051],{"id":126056},"_2-vscode必备内容",[14,126058,126060],{"id":126059},"_21-标签分类","2.1 标签分类",[19,126062,126063],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126065,126067],{"id":126066},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126069,126070,126071,126073,126074,126077],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[318,126072,558],{}," 然后按 ",[318,126075,126076],{},"Tab","，快速自动生成基本结构。",[14,126079,126081],{"id":126080},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126083,126084],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126086,126087],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126089,126090],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126092,126094],{"id":126093},"_24-视图缩放","2.4 视图缩放",[19,126096,126097,126098,126101],{},"缩放视图 ",[318,126099,126100],{},"ctrl+"," 可实现代码增大。",[19,126103,126104,126107],{},[318,126105,126106],{},"ctrl-"," 可实现代码减小。",[14,126109,126111],{"id":126110},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126113,126114,126115,28530],{},"VSCode 新建文件快捷键为 ",[318,126116,126117],{},"ctrl+N",[19,126119,126120,126121,126124,126125,126128],{},"保存快捷键为 ",[318,126122,126123],{},"ctrl+S","，将文本保存为 ",[318,126126,126127],{},".html"," 文件。",[14,126130,126132],{"id":126131},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126134,126135],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126137,126139],{"id":126138},"_27-vscode-icons","2.7 vscode-icons",[19,126141,126142],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126144,126146],{"id":126145},"_28-easy-less","2.8 Easy LESS",[19,126148,126149],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126151,126153],{"id":126152},"_29-会了吧插件","2.9 会了吧插件",[19,126155,126156],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126158,126160],{"id":126159},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126162,126163],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126165,126166],{},"②选定多个相同的单词:ctrl+D",[19,126168,126169],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126171,126172],{},"④全局替换某些单词:ctrl+h",[19,126174,126175],{},"⑤快速定位到某一行:ctrl+g",[19,126177,126178],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":30,"searchDepth":167,"depth":167,"links":126180},[126181,126182,126183,126184,126185,126186,126187,126188,126189,126190],{"id":126059,"depth":167,"text":126060},{"id":126066,"depth":167,"text":126067},{"id":126080,"depth":167,"text":126081},{"id":126093,"depth":167,"text":126094},{"id":126110,"depth":167,"text":126111},{"id":126131,"depth":167,"text":126132},{"id":126138,"depth":167,"text":126139},{"id":126145,"depth":167,"text":126146},{"id":126152,"depth":167,"text":126153},{"id":126159,"depth":167,"text":126160},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126051,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126197,"title":126198,"body":126199,"description":23584,"extension":249,"meta":126358,"navigation":251,"path":126359,"seo":126360,"stem":126361,"__hash__":126362},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126200,"toc":126350},[126201,126204,126208,126218,126224,126230,126234,126243,126247,126252,126255,126258,126262,126265,126275,126284,126293,126302,126312,126319,126324,126329,126342],[10,126202,126198],{"id":126203},"_3-html文本与容器标签",[14,126205,126207],{"id":126206},"_31-标题标签","3.1 标题标签",[19,126209,126210,126213,126214,126217],{},[318,126211,126212],{},"\u003Ch1>","我是一级标签",[318,126215,126216],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126219,126220,126213,126222],{},[318,126221,126212],{},[318,126223,126216],{},[19,126225,123480,126226,126229],{},[318,126227,126228],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126231,126233],{"id":126232},"_32-段落标签","3.2 段落标签",[19,126235,126236,126239,126240],{},[318,126237,126238],{},"\u003Cp>","....",[318,126241,126242],{},"\u003C\u002Fp>",[14,126244,126246],{"id":126245},"_33-换行标签","3.3 换行标签",[19,126248,126249],{},[318,126250,126251],{},"\u003Cbr \u002F>",[19,126253,126254],{},"具有强制换行的作用",[19,126256,126257],{},"单标签",[14,126259,126261],{"id":126260},"_34-文本格式化标签","3.4 文本格式化标签",[19,126263,126264],{},"提供粗体、斜体和下划线等效果",[19,126266,126267,126268,82684,126271,126274],{},"加粗：",[318,126269,126270],{},"\u003Cstrong>...\u003C\u002Fstrong>",[318,126272,126273],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126276,126277,126278,82684,126281,126274],{},"斜体：",[318,126279,126280],{},"\u003Cem>...\u003C\u002Fem>",[318,126282,126283],{},"\u003Ci>...\u003C\u002Fi>",[19,126285,126286,126287,82684,126290,126274],{},"删除线：",[318,126288,126289],{},"\u003Cdel>...\u003C\u002Fdel>",[318,126291,126292],{},"\u003Cs>...\u003C\u002Fs>",[19,126294,126295,126296,82684,126299,126274],{},"下划线：",[318,126297,126298],{},"\u003Cins>...\u003C\u002Fins>",[318,126300,126301],{},"\u003Cu>...\u003C\u002Fu>",[14,126303,126305,126306,18617,126309,102838],{"id":126304},"_35-div和span标签","3.5 ",[318,126307,126308],{},"\u003Cdiv>",[318,126310,126311],{},"\u003Cspan>",[19,126313,126314,101163,126316,126318],{},[318,126315,126308],{},[318,126317,126311],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126320,126321],{},[318,126322,126323],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126325,126326],{},[318,126327,126328],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126330,126331,126332,126334,126335,126337,126338,126341],{},"两者特点：①",[318,126333,126308],{}," 标签用来布局，但一行通常只放一个 ",[318,126336,126308],{},"。可以理解为一个大盒子，独占一行，在 ",[318,126339,126340],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126343,77394,126344,126346,126347,126349],{},[318,126345,126311],{}," 标签也可用于布局，一行可以放多个 ",[318,126348,126311],{},"，可理解为小盒子。",{"title":30,"searchDepth":167,"depth":167,"links":126351},[126352,126353,126354,126355,126356],{"id":126206,"depth":167,"text":126207},{"id":126232,"depth":167,"text":126233},{"id":126245,"depth":167,"text":126246},{"id":126260,"depth":167,"text":126261},{"id":126304,"depth":167,"text":126357},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126198,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126364,"title":126365,"body":126366,"description":23584,"extension":249,"meta":126563,"navigation":251,"path":126564,"seo":126565,"stem":126566,"__hash__":126567},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126367,"toc":126555},[126368,126371,126375,126378,126384,126391,126397,126403,126406,126409,126412,126415,126418,126421,126424,126428,126431,126434,126437,126443,126449,126455,126462,126466,126472,126478,126481,126484,126490,126496,126502,126505,126508,126512,126515,126525,126531,126535,126544,126548,126551],[10,126369,126365],{"id":126370},"_4-html图像与链接",[14,126372,126374],{"id":126373},"_41-图像标签","4.1 图像标签",[19,126376,126377],{},"（1）标签",[19,126379,126380,126383],{},[318,126381,126382],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126385,126386,126387,126390],{},"src是",[318,126388,126389],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126392,126393,126394],{},"alt:文本，替换文本。图像不能显示的文字 ",[318,126395,126396],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126398,126399,126400],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[318,126401,126402],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126404,126405],{},"width:像素，设置图像的宽度",[19,126407,126408],{},"height:像素，设置图像的高度",[19,126410,126411],{},"border：像素，设置图像的边框粗细",[19,126413,126414],{},"（2）图像标签属性的注意点：",[19,126416,126417],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126419,126420],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126422,126423],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126425,126427],{"id":126426},"_42-路径注意要点","4.2 路径注意要点：",[19,126429,126430],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126432,126433],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126435,126436],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126438,126439,126440],{},"①同一级路径：图像文件位于HTML文件同一级，如",[318,126441,126442],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126444,126445,126446],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[318,126447,126448],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126450,126451,126452],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[318,126453,126454],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126456,126457,126458,583],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[570,126459,126460],{"href":126460,"rel":126461},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24073],[14,126463,126465],{"id":126464},"_43-超链接标签","4.3 超链接标签",[19,126467,126468,126471],{},[318,126469,126470],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126473,126474,126475],{},"①语法格式：",[318,126476,126477],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126479,126480],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126482,126483],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126485,126486,126487],{},"③链接分类：外部链接：",[318,126488,126489],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126491,126492,126493],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[318,126494,126495],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126497,126498,126499],{},"空链接：如果当时没有确定链接目标时，",[318,126500,126501],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126503,126504],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126506,126507],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126509,126511],{"id":126510},"_44-锚点链接","4.4 锚点链接",[19,126513,126514],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126516,126517,126518,126521,126522],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[318,126519,126520],{},"\u003Ca href=\"#two\">","第二级",[318,126523,126524],{},"\u003C\u002Fa>",[19,126526,126527,126528],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[318,126529,126530],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126532,126534],{"id":126533},"_45-注释标签","4.5 注释标签",[19,126536,126537,126540,126541],{},[318,126538,126539],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[318,126542,126543],{},"ctrl+\u002F",[14,126545,126547],{"id":126546},"_46-特殊字符","4.6 特殊字符",[19,126549,126550],{},"可以实现添加多个空格",[28,126552],{"style":126553,"src":126554},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":30,"searchDepth":167,"depth":167,"links":126556},[126557,126558,126559,126560,126561,126562],{"id":126373,"depth":167,"text":126374},{"id":126426,"depth":167,"text":126427},{"id":126464,"depth":167,"text":126465},{"id":126510,"depth":167,"text":126511},{"id":126533,"depth":167,"text":126534},{"id":126546,"depth":167,"text":126547},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126365,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126569,"title":126570,"body":126571,"description":23584,"extension":249,"meta":126864,"navigation":251,"path":126865,"seo":126866,"stem":126867,"__hash__":126868},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126572,"toc":126855},[126573,126576,126580,126583,126586,126589,126592,126595,126598,126601,126604,126607,126627,126633,126637,126640,126643,126646,126649,126652,126655,126659,126662,126665,126668,126671,126684,126689,126692,126695,126710,126713,126716,126719,126722,126725,126729,126732,126739,126742,126745,126748,126751,126754,126760,126763,126766,126772,126775,126778,126781,126787,126790,126793,126807,126814,126817,126820,126827,126836,126839,126842,126845,126849,126852],[10,126574,126570],{"id":126575},"_5-html表格列表与表单",[14,126577,126579],{"id":126578},"_51-表格标签","5.1 表格标签",[19,126581,126582],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126584,126585],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126587,126588],{},"②表格基本语法：",[28,126590],{"style":126553,"src":126591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126593,126594],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[28,126596],{"style":126553,"src":126597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126599,126600],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[28,126602],{"style":126553,"src":126603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126605,126606],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126608,126609,126612,126613,126615,126616,126619,126620,126622,126623,126626],{},[318,126610,126611],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[318,126614,126611],{},"内部必须拥有",[318,126617,126618],{},"\u003Ctr>","标签，一般位于第一行，",[318,126621,126611],{},"比",[318,126624,126625],{},"\u003Cth>","范围广",[19,126628,126629,126632],{},[318,126630,126631],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126634,126636],{"id":126635},"_52-合并单元格","5.2 合并单元格",[19,126638,126639],{},"（1）合并单元格方式：",[19,126641,126642],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126644,126645],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126647,126648],{},"（2）目标单元格：",[19,126650,126651],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126653,126654],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126656,126658],{"id":126657},"_53-列表标签","5.3 列表标签",[19,126660,126661],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126663,126664],{},"①无序列表：",[28,126666],{"style":126553,"src":126667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126669,126670],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126672,126673,126676,126677,126680,126681,126683],{},[318,126674,126675],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[318,126678,126679],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[318,126682,126675],{},"中输入其他标签或文字是不对的",[19,126685,126686,126688],{},[318,126687,126679],{},"之间相当于一个容器，可以容纳所有元素",[19,126690,126691],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126693,126694],{},"在css中去除前边的小圆点采用如下代码:",[312,126696,126700],{"className":126697,"code":126698,"language":126699,"meta":30,"style":30},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[318,126701,126702],{"__ignoreMap":30},[321,126703,126704,126707],{"class":323,"line":324},[321,126705,126706],{"class":51445},"list-style",[321,126708,126709],{"class":331},": none;\n",[19,126711,126712],{},"②有序列表：",[28,126714],{"style":126553,"src":126715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126717,126718],{},"③自定义列表：",[28,126720],{"style":126553,"src":126721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[28,126723],{"style":126553,"src":126724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126726,126728],{"id":126727},"_54-表单标签","5.4 表单标签",[19,126730,126731],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126733,126734,126735,126738],{},"（1）表单域：包含单元素的区域，",[318,126736,126737],{},"\u003Cform>","标签可以实现信息的收集和传递。",[28,126740],{"style":126553,"src":126741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126743,126744],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126746,126747],{},"表单元素提交必须有name属性",[19,126749,126750],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126752,126753],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126755,77371,126756,126759],{},[318,126757,126758],{},"\u003Cinput>","输入表单元素",[28,126761],{"style":126553,"src":126762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[28,126764],{"style":126553,"src":126765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,126767,126768,126769],{},"单选按钮：",[318,126770,126771],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[28,126773],{"style":126553,"src":126774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,126776,126777],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[28,126779],{"style":126553,"src":126780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,126782,126783,126786],{},[481,126784,126785],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,126788,126789],{},"②select下拉表单元素：可以节约页面控件",[28,126791],{"style":126553,"src":126792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,126794,126795,14002,126797,126800,126801,126803,126804,126806],{},[481,126796,361],{},[318,126798,126799],{},"\u003Cselect>","中至少包含一对",[318,126802,102859],{},"；在",[318,126805,102859],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,126808,126809,126810,126813],{},"③",[318,126811,126812],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[28,126815],{"style":126553,"src":126816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,126818,126819],{},"3行20列",[14,126821,126823,126824,102838],{"id":126822},"_55-lable标签","5.5 ",[318,126825,126826],{},"\u003Clable>",[19,126828,126829,126830,126832,126833,126835],{},"它不是表单标签，但常常与表单标签搭配使用，",[318,126831,126826],{},"标签用于绑定一个表单标签，当点击",[318,126834,126826],{},"标签内的文本",[19,126837,126838],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[28,126840],{"style":126553,"src":126841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[28,126843],{"style":126553,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126846,126848],{"id":126847},"_56-实例","5.6 实例",[28,126850],{"style":126553,"src":126851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5333,126853,126854],{},"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":30,"searchDepth":167,"depth":167,"links":126856},[126857,126858,126859,126860,126861,126863],{"id":126578,"depth":167,"text":126579},{"id":126635,"depth":167,"text":126636},{"id":126657,"depth":167,"text":126658},{"id":126727,"depth":167,"text":126728},{"id":126822,"depth":167,"text":126862},"5.5 \u003Clable>标签",{"id":126847,"depth":167,"text":126848},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126570,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126870,"title":126871,"body":126872,"description":23584,"extension":249,"meta":127421,"navigation":251,"path":127422,"seo":127423,"stem":127424,"__hash__":127425},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126873,"toc":127396},[126874,126877,126881,126884,126887,126891,126894,126897,126900,126903,126906,126909,126912,126916,126919,126923,126926,126929,126932,126936,126939,126942,126945,126951,126954,126957,126960,126963,126966,126969,126972,127005,127009,127012,127015,127018,127022,127025,127028,127031,127034,127037,127041,127044,127047,127050,127054,127057,127061,127064,127068,127071,127076,127080,127083,127087,127090,127093,127096,127099,127126,127129,127133,127136,127139,127144,127147,127150,127154,127157,127162,127165,127168,127171,127175,127178,127181,127184,127188,127191,127194,127197,127201,127205,127208,127248,127251,127255,127262,127265,127269,127272,127318,127322,127325,127328,127331,127359,127363,127366,127393],[10,126875,126871],{"id":126876},"_6-css语法与文本样式",[14,126878,126880],{"id":126879},"_61-css语法规范","6.1 css语法规范",[19,126882,126883],{},"由两部分组成，选择器及一条或多条声明",[28,126885],{"style":126553,"src":126886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126888,126889],{},[481,126890,361],{},[19,126892,126893],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126895,126896],{},"②属性与属性值以“键值对”的形式出现",[19,126898,126899],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126901,126902],{},"④属性和属性值之间用英文“;”分开",[28,126904],{"style":126553,"src":126905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[28,126907],{"style":126553,"src":126908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[28,126910],{"style":126553,"src":126911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126913,126915],{"id":126914},"_62-css选择器","6.2 css选择器",[19,126917,126918],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[292,126920,126922],{"id":126921},"_621-标签选择器","6.2.1 标签选择器",[19,126924,126925],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126927,126928],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[28,126930],{"style":126553,"src":126931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[292,126933,126935],{"id":126934},"_622-类选择器","6.2.2 类选择器",[19,126937,126938],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126940,126941],{},"②样例",[28,126943],{"style":126553,"src":126944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126946,126947,126948,126950],{},"③ ",[481,126949,126785],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126952,126953],{},"可以理解为给这个标签起了个名字，来表示；",[19,126955,126956],{},"长名称或词组可以使用横线来为选择器命名；",[19,126958,126959],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126961,126962],{},"命名要有意义；",[28,126964],{"style":126553,"src":126965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126967,126968],{},"类选择器也可以指定特殊的元素p.center{}",[19,126970,126971],{},"p.center和.center都对",[312,126973,126975],{"className":126697,"code":126974,"language":126699,"meta":30,"style":30},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[318,126976,126977,126982,126991,127001],{"__ignoreMap":30},[321,126978,126979],{"class":323,"line":324},[321,126980,126981],{"class":390},"\u002F* 类选择器指定特殊元素 *\u002F\n",[321,126983,126984,126986,126989],{"class":323,"line":167},[321,126985,19],{"class":51445},[321,126987,126988],{"class":2169},".center",[321,126990,15779],{"class":331},[321,126992,126993,126995,126997,126999],{"class":323,"line":200},[321,126994,70671],{"class":380},[321,126996,51582],{"class":331},[321,126998,51737],{"class":380},[321,127000,1497],{"class":331},[321,127002,127003],{"class":323,"line":1401},[321,127004,1771],{"class":331},[292,127006,127008],{"id":127007},"_623-多类名使用","6.2.3 多类名使用",[19,127010,127011],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[28,127013],{"style":126553,"src":127014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127016,127017],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[292,127019,127021],{"id":127020},"_624-id选择器","6.2.4 id选择器",[19,127023,127024],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127026,127027],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[28,127029],{"style":126553,"src":127030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127032,127033],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127035,127036],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[292,127038,127040],{"id":127039},"_625-通配符选择器","6.2.5 通配符选择器",[19,127042,127043],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127045,127046],{},"* {",[19,127048,127049],{},"color=\"red\"}",[292,127051,127053],{"id":127052},"_626-总结","6.2.6 总结",[28,127055],{"style":126553,"src":127056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127058,127060],{"id":127059},"_63-css字体属性","6.3 css字体属性",[19,127062,127063],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[292,127065,127067],{"id":127066},"_631-字体系列","6.3.1 字体系列",[19,127069,127070],{},"font-family: '宋体';",[19,127072,127073,127075],{},[481,127074,361],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[292,127077,127079],{"id":127078},"_632-字体大小","6.3.2 字体大小",[19,127081,127082],{},"font-size: 20px",[19,127084,127085,26618],{},[481,127086,126785],{},[19,127088,127089],{},"①px（像素）大小是网页的最常用单位",[19,127091,127092],{},"②谷歌浏览器默认为16px",[19,127094,127095],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127097,127098],{},"④可以给body指定整个页面的大小：会自动引用",[312,127100,127102],{"className":126697,"code":127101,"language":126699,"meta":30,"style":30},"body {\n  font-size: 16px;\n}\n",[318,127103,127104,127110,127122],{"__ignoreMap":30},[321,127105,127106,127108],{"class":323,"line":324},[321,127107,51945],{"class":51445},[321,127109,15779],{"class":331},[321,127111,127112,127114,127116,127118,127120],{"class":323,"line":167},[321,127113,70771],{"class":380},[321,127115,51582],{"class":331},[321,127117,933],{"class":380},[321,127119,51637],{"class":327},[321,127121,1497],{"class":331},[321,127123,127124],{"class":323,"line":200},[321,127125,1771],{"class":331},[19,127127,127128],{},"⑤标题标签比较特殊，需要单独指定大小",[292,127130,127132],{"id":127131},"_633-字体粗细","6.3.3 字体粗细",[19,127134,127135],{},"font-weight: bold;",[19,127137,127138],{},"font-weight: 100；",[19,127140,127141,127143],{},[481,127142,361],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127145,127146],{},"font-weight= 400;",[19,127148,127149],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[292,127151,127153],{"id":127152},"_634-文字样式","6.3.4 文字样式",[19,127155,127156],{},"font-style: normal；",[19,127158,127159,26618],{},[481,127160,127161],{},"属性值",[19,127163,127164],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127166,127167],{},"②italic：浏览器会显示斜体的字体样式",[28,127169],{"style":126553,"src":127170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[292,127172,127174],{"id":127173},"_635-字体符合属性","6.3.5 字体符合属性",[28,127176],{"style":126553,"src":127177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[28,127179],{"style":126553,"src":127180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127182,127183],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127185,127186,26618],{},[481,127187,126785],{},[19,127189,127190],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127192,127193],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127195,127196],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127198,127200],{"id":127199},"_64-css-test文本属性","6.4 css test文本属性",[292,127202,127204],{"id":127203},"_641-文本颜色","6.4.1 文本颜色",[19,127206,127207],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[312,127209,127211],{"className":126697,"code":127210,"language":126699,"meta":30,"style":30},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[318,127212,127213,127218,127224,127234,127239,127244],{"__ignoreMap":30},[321,127214,127215],{"class":323,"line":324},[321,127216,127217],{"class":390},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[321,127219,127220,127222],{"class":323,"line":167},[321,127221,19],{"class":51445},[321,127223,15779],{"class":331},[321,127225,127226,127228,127230,127232],{"class":323,"line":200},[321,127227,71050],{"class":380},[321,127229,51582],{"class":331},[321,127231,57566],{"class":380},[321,127233,1497],{"class":331},[321,127235,127236],{"class":323,"line":1401},[321,127237,127238],{"class":390},"  \u002F* color: #ff0000; *\u002F\n",[321,127240,127241],{"class":323,"line":1407},[321,127242,127243],{"class":390},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[321,127245,127246],{"class":323,"line":1421},[321,127247,1771],{"class":331},[28,127249],{"style":126553,"src":127250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[292,127252,127254],{"id":127253},"_642-对齐文本","6.4.2 对齐文本",[19,127256,127257,127258,127261],{},"text-align属于用于设置元素内文本内容的 ",[481,127259,127260],{},"水平对齐"," 方式",[19,127263,127264],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[292,127266,127268],{"id":127267},"_643-装饰文本","6.4.3 装饰文本",[19,127270,127271],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[312,127273,127275],{"className":126697,"code":127274,"language":126699,"meta":30,"style":30},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[318,127276,127277,127283,127293,127297,127303,127314],{"__ignoreMap":30},[321,127278,127279,127281],{"class":323,"line":324},[321,127280,570],{"class":51445},[321,127282,15779],{"class":331},[321,127284,127285,127287,127289,127291],{"class":323,"line":167},[321,127286,70647],{"class":380},[321,127288,51582],{"class":331},[321,127290,54882],{"class":380},[321,127292,1497],{"class":331},[321,127294,127295],{"class":323,"line":200},[321,127296,1771],{"class":331},[321,127298,127299,127301],{"class":323,"line":1401},[321,127300,19],{"class":51445},[321,127302,15779],{"class":331},[321,127304,127305,127307,127309,127312],{"class":323,"line":1407},[321,127306,70647],{"class":380},[321,127308,51582],{"class":331},[321,127310,127311],{"class":380},"underline",[321,127313,1497],{"class":331},[321,127315,127316],{"class":323,"line":1421},[321,127317,1771],{"class":331},[292,127319,127321],{"id":127320},"_644-文本缩进","6.4.4 文本缩进",[19,127323,127324],{},"实现文本的第一行首行缩进自己指定的距离",[19,127326,127327],{},"20px往右边走；-20px往左边走",[19,127329,127330],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[312,127332,127334],{"className":126697,"code":127333,"language":126699,"meta":30,"style":30},"p {\n  text-indent: 2em;\n}\n",[318,127335,127336,127342,127355],{"__ignoreMap":30},[321,127337,127338,127340],{"class":323,"line":324},[321,127339,19],{"class":51445},[321,127341,15779],{"class":331},[321,127343,127344,127347,127349,127351,127353],{"class":323,"line":167},[321,127345,127346],{"class":380},"  text-indent",[321,127348,51582],{"class":331},[321,127350,409],{"class":380},[321,127352,23761],{"class":327},[321,127354,1497],{"class":331},[321,127356,127357],{"class":323,"line":200},[321,127358,1771],{"class":331},[292,127360,127362],{"id":127361},"_645-行间距","6.4.5 行间距",[19,127364,127365],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[312,127367,127369],{"className":126697,"code":127368,"language":126699,"meta":30,"style":30},"p {\n  line-height: 1.6;\n}\n",[318,127370,127371,127377,127389],{"__ignoreMap":30},[321,127372,127373,127375],{"class":323,"line":324},[321,127374,19],{"class":51445},[321,127376,15779],{"class":331},[321,127378,127379,127382,127384,127387],{"class":323,"line":167},[321,127380,127381],{"class":380},"  line-height",[321,127383,51582],{"class":331},[321,127385,127386],{"class":380},"1.6",[321,127388,1497],{"class":331},[321,127390,127391],{"class":323,"line":200},[321,127392,1771],{"class":331},[5333,127394,127395],{},"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":30,"searchDepth":167,"depth":167,"links":127397},[127398,127399,127407,127414],{"id":126879,"depth":167,"text":126880},{"id":126914,"depth":167,"text":126915,"children":127400},[127401,127402,127403,127404,127405,127406],{"id":126921,"depth":200,"text":126922},{"id":126934,"depth":200,"text":126935},{"id":127007,"depth":200,"text":127008},{"id":127020,"depth":200,"text":127021},{"id":127039,"depth":200,"text":127040},{"id":127052,"depth":200,"text":127053},{"id":127059,"depth":167,"text":127060,"children":127408},[127409,127410,127411,127412,127413],{"id":127066,"depth":200,"text":127067},{"id":127078,"depth":200,"text":127079},{"id":127131,"depth":200,"text":127132},{"id":127152,"depth":200,"text":127153},{"id":127173,"depth":200,"text":127174},{"id":127199,"depth":167,"text":127200,"children":127415},[127416,127417,127418,127419,127420],{"id":127203,"depth":200,"text":127204},{"id":127253,"depth":200,"text":127254},{"id":127267,"depth":200,"text":127268},{"id":127320,"depth":200,"text":127321},{"id":127361,"depth":200,"text":127362},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126871,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127427,"title":127428,"body":127429,"description":23584,"extension":249,"meta":128078,"navigation":251,"path":128079,"seo":128080,"stem":128081,"__hash__":128082},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127430,"toc":128059},[127431,127434,127438,127442,127502,127506,127516,127519,127522,127526,127551,127555,127558,127561,127564,127567,127570,127574,127577,127580,127622,127625,127651,127657,127660,127664,127668,127674,127677,127680,127683,127686,127689,127692,127737,127741,127744,127747,127751,127755,127784,127787,127792,127795,127798,127801,127804,127808,127812,127815,127817,127820,127824,127827,127831,127834,127837,127840,127844,127848,127854,127864,127867,127870,127873,127876,127879,128002,128010,128018,128056],[10,127432,127428],{"id":127433},"_7-css引入方式与选择器进阶",[14,127435,127437],{"id":127436},"_71-css引入方式","7.1 css引入方式",[292,127439,127441],{"id":127440},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[312,127443,127447],{"className":127444,"code":127445,"language":127446,"meta":30,"style":30},"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",[318,127448,127449,127457,127464,127476,127489,127494],{"__ignoreMap":30},[321,127450,127451,127453,127455],{"class":323,"line":324},[321,127452,1242],{"class":331},[321,127454,5333],{"class":51445},[321,127456,51452],{"class":331},[321,127458,127459,127462],{"class":323,"line":167},[321,127460,127461],{"class":51445},"  h1",[321,127463,15779],{"class":331},[321,127465,127466,127469,127471,127474],{"class":323,"line":200},[321,127467,127468],{"class":380},"    color",[321,127470,51582],{"class":331},[321,127472,127473],{"class":380},"blue",[321,127475,1497],{"class":331},[321,127477,127478,127481,127483,127485,127487],{"class":323,"line":1401},[321,127479,127480],{"class":380},"    font-size",[321,127482,51582],{"class":331},[321,127484,1132],{"class":380},[321,127486,51637],{"class":327},[321,127488,1497],{"class":331},[321,127490,127491],{"class":323,"line":1407},[321,127492,127493],{"class":331},"  }\n",[321,127495,127496,127498,127500],{"class":323,"line":1421},[321,127497,51930],{"class":331},[321,127499,5333],{"class":51445},[321,127501,51452],{"class":331},[19,127503,127504,26618],{},[481,127505,126785],{},[19,127507,77371,127508,127511,127512,127515],{},[318,127509,127510],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[318,127513,127514],{},"\u003Chead>","标签中",[19,127517,127518],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127520,127521],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[292,127523,127525],{"id":127524},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[312,127527,127529],{"className":127444,"code":127528,"language":127446,"meta":30,"style":30},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[318,127530,127531],{"__ignoreMap":30},[321,127532,127533,127535,127537,127539,127541,127544,127547,127549],{"class":323,"line":324},[321,127534,1242],{"class":331},[321,127536,19],{"class":51445},[321,127538,62771],{"class":2169},[321,127540,377],{"class":331},[321,127542,127543],{"class":436},"\"color: red; font-size: 16px;\"",[321,127545,127546],{"class":331},">这是一个段落\u003C\u002F",[321,127548,19],{"class":51445},[321,127550,51452],{"class":331},[19,127552,127553,26618],{},[481,127554,126785],{},[19,127556,127557],{},"①style其实就是标签的属性",[19,127559,127560],{},"②在双引号中间，写法要符合css规范",[19,127562,127563],{},"③可以控制当前的标签设置样式",[19,127565,127566],{},"④书写繁琐，简单时才用",[19,127568,127569],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[292,127571,127573],{"id":127572},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127575,127576],{},"使用最多，单独建一个css文件，然后html引用",[19,127578,127579],{},"①css文件部分： style.css",[312,127581,127583],{"className":126697,"code":127582,"language":126699,"meta":30,"style":30},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[318,127584,127585,127590,127596,127606,127618],{"__ignoreMap":30},[321,127586,127587],{"class":323,"line":324},[321,127588,127589],{"class":390},"\u002F* style.css *\u002F\n",[321,127591,127592,127594],{"class":323,"line":167},[321,127593,10],{"class":51445},[321,127595,15779],{"class":331},[321,127597,127598,127600,127602,127604],{"class":323,"line":200},[321,127599,71050],{"class":380},[321,127601,51582],{"class":331},[321,127603,127473],{"class":380},[321,127605,1497],{"class":331},[321,127607,127608,127610,127612,127614,127616],{"class":323,"line":1401},[321,127609,70771],{"class":380},[321,127611,51582],{"class":331},[321,127613,1132],{"class":380},[321,127615,51637],{"class":327},[321,127617,1497],{"class":331},[321,127619,127620],{"class":323,"line":1407},[321,127621,1771],{"class":331},[19,127623,127624],{},"②html部分",[312,127626,127628],{"className":127444,"code":127627,"language":127446,"meta":30,"style":30},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[318,127629,127630],{"__ignoreMap":30},[321,127631,127632,127634,127636,127638,127640,127642,127644,127646,127649],{"class":323,"line":324},[321,127633,1242],{"class":331},[321,127635,69150],{"class":51445},[321,127637,69153],{"class":2169},[321,127639,377],{"class":331},[321,127641,69158],{"class":436},[321,127643,61202],{"class":2169},[321,127645,377],{"class":331},[321,127647,127648],{"class":436},"\"style.css\"",[321,127650,51452],{"class":331},[19,127652,127653,127656],{},[318,127654,127655],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127658,127659],{},"ctrl+0回到页面原来大小",[14,127661,127663],{"id":127662},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[292,127665,127667],{"id":127666},"_721-快速生成html","7.2.1 快速生成html",[19,127669,127670,127671],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[318,127672,127673],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127675,127676],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127678,127679],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127681,127682],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127684,127685],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127687,127688],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127690,127691],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[312,127693,127695],{"className":127444,"code":127694,"language":127446,"meta":30,"style":30},"\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",[318,127696,127697,127702,127707,127712,127717,127722,127727,127732],{"__ignoreMap":30},[321,127698,127699],{"class":323,"line":324},[321,127700,127701],{"class":390},"\u003C!-- Emmet 语法示例 -->\n",[321,127703,127704],{"class":323,"line":167},[321,127705,127706],{"class":390},"\u003C!-- div*3        → 生成3个div -->\n",[321,127708,127709],{"class":323,"line":200},[321,127710,127711],{"class":390},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[321,127713,127714],{"class":323,"line":1401},[321,127715,127716],{"class":390},"\u003C!-- div+p        → 兄弟div和p -->\n",[321,127718,127719],{"class":323,"line":1407},[321,127720,127721],{"class":390},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[321,127723,127724],{"class":323,"line":1421},[321,127725,127726],{"class":390},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[321,127728,127729],{"class":323,"line":1427},[321,127730,127731],{"class":390},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[321,127733,127734],{"class":323,"line":1518},[321,127735,127736],{"class":390},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[292,127738,127740],{"id":127739},"_722-快速生成css","7.2.2 快速生成css",[19,127742,127743],{},"简写开头",[19,127745,127746],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127748,127750],{"id":127749},"_73-css复合选择器","7.3 css复合选择器",[292,127752,127754],{"id":127753},"_731-后代选择器","7.3.1 后代选择器",[312,127756,127758],{"className":126697,"code":127757,"language":126699,"meta":30,"style":30},".parent .child {\n  color: blue;\n}\n",[318,127759,127760,127770,127780],{"__ignoreMap":30},[321,127761,127762,127765,127768],{"class":323,"line":324},[321,127763,127764],{"class":2169},".parent",[321,127766,127767],{"class":2169}," .child",[321,127769,15779],{"class":331},[321,127771,127772,127774,127776,127778],{"class":323,"line":167},[321,127773,71050],{"class":380},[321,127775,51582],{"class":331},[321,127777,127473],{"class":380},[321,127779,1497],{"class":331},[321,127781,127782],{"class":323,"line":200},[321,127783,1771],{"class":331},[19,127785,127786],{},"元素1 元素2 {样式声明}",[19,127788,127789],{},[481,127790,127791],{},"注意点:",[19,127793,127794],{},"①元素1和元素2中间用空格隔开",[19,127796,127797],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127799,127800],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127802,127803],{},"④元素1和元素2可以是任意基础选择器",[292,127805,127807],{"id":127806},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127809,127810],{},[481,127811,127791],{},[19,127813,127814],{},"①元素1和元素2中间用大于号隔开",[19,127816,127797],{},[19,127818,127819],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[292,127821,127823],{"id":127822},"_733-并集选择器","7.3.3 并集选择器",[19,127825,127826],{},"元素1，元素2 {样式声明}",[19,127828,127829],{},[481,127830,127791],{},[19,127832,127833],{},"①元素1和元素2中间用逗号隔开",[19,127835,127836],{},"②逗号可以理解为和的意思",[19,127838,127839],{},"③并集选择器通常用于集体声明",[292,127841,127843],{"id":127842},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127845,127846],{},[481,127847,127791],{},[19,127849,127850,127851,127853],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69150,127852],{},"－:visited－:hover－:active。",[19,127855,127856,127857,127860,127861,25885],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127858,127859],"hover",{}," 、 ",[127862,127863],"first-child",{},[19,127865,127866],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127868,127869],{},"link对没访问的进行设置",[19,127871,127872],{},"vistied对已访问的进行改变",[19,127874,127875],{},"hover鼠标经过就会变",[19,127877,127878],{},"active常按(点)就会变",[312,127880,127882],{"className":126697,"code":127881,"language":126699,"meta":30,"style":30},"\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",[318,127883,127884,127889,127898,127908,127918,127922,127931,127942,127946,127954,127964,127974,127978,127987,127998],{"__ignoreMap":30},[321,127885,127886],{"class":323,"line":324},[321,127887,127888],{"class":390},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[321,127890,127891,127893,127896],{"class":323,"line":167},[321,127892,570],{"class":51445},[321,127894,127895],{"class":2169},":link",[321,127897,15779],{"class":331},[321,127899,127900,127902,127904,127906],{"class":323,"line":200},[321,127901,71050],{"class":380},[321,127903,51582],{"class":331},[321,127905,62514],{"class":380},[321,127907,1497],{"class":331},[321,127909,127910,127912,127914,127916],{"class":323,"line":1401},[321,127911,70647],{"class":380},[321,127913,51582],{"class":331},[321,127915,54882],{"class":380},[321,127917,1497],{"class":331},[321,127919,127920],{"class":323,"line":1407},[321,127921,1771],{"class":331},[321,127923,127924,127926,127929],{"class":323,"line":1421},[321,127925,570],{"class":51445},[321,127927,127928],{"class":2169},":visited",[321,127930,15779],{"class":331},[321,127932,127933,127935,127937,127940],{"class":323,"line":1427},[321,127934,71050],{"class":380},[321,127936,51582],{"class":331},[321,127938,127939],{"class":380},"purple",[321,127941,1497],{"class":331},[321,127943,127944],{"class":323,"line":1518},[321,127945,1771],{"class":331},[321,127947,127948,127950,127952],{"class":323,"line":1524},[321,127949,570],{"class":51445},[321,127951,61085],{"class":2169},[321,127953,15779],{"class":331},[321,127955,127956,127958,127960,127962],{"class":323,"line":1536},[321,127957,71050],{"class":380},[321,127959,51582],{"class":331},[321,127961,55034],{"class":380},[321,127963,1497],{"class":331},[321,127965,127966,127968,127970,127972],{"class":323,"line":1818},[321,127967,70647],{"class":380},[321,127969,51582],{"class":331},[321,127971,127311],{"class":380},[321,127973,1497],{"class":331},[321,127975,127976],{"class":323,"line":1823},[321,127977,1771],{"class":331},[321,127979,127980,127982,127985],{"class":323,"line":1829},[321,127981,570],{"class":51445},[321,127983,127984],{"class":2169},":active",[321,127986,15779],{"class":331},[321,127988,127989,127991,127993,127996],{"class":323,"line":1834},[321,127990,71050],{"class":380},[321,127992,51582],{"class":331},[321,127994,127995],{"class":380},"green",[321,127997,1497],{"class":331},[321,127999,128000],{"class":323,"line":1848},[321,128001,1771],{"class":331},[292,128003,128005,128006,128009],{"id":128004},"_735-伪类选择器","7.3.5 ",[128007,128008],"focus",{},"伪类选择器",[19,128011,128012,128014,128015,128017],{},[128007,128013],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[318,128016,126758],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[312,128019,128021],{"className":126697,"code":128020,"language":126699,"meta":30,"style":30},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[318,128022,128023,128031,128042,128052],{"__ignoreMap":30},[321,128024,128025,128027,128029],{"class":323,"line":324},[321,128026,53966],{"class":51445},[321,128028,62045],{"class":2169},[321,128030,15779],{"class":331},[321,128032,128033,128036,128038,128040],{"class":323,"line":167},[321,128034,128035],{"class":380},"  border-color",[321,128037,51582],{"class":331},[321,128039,55034],{"class":380},[321,128041,1497],{"class":331},[321,128043,128044,128046,128048,128050],{"class":323,"line":200},[321,128045,70943],{"class":380},[321,128047,51582],{"class":331},[321,128049,54882],{"class":380},[321,128051,1497],{"class":331},[321,128053,128054],{"class":323,"line":1401},[321,128055,1771],{"class":331},[5333,128057,128058],{},"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":30,"searchDepth":167,"depth":167,"links":128060},[128061,128066,128070],{"id":127436,"depth":167,"text":127437,"children":128062},[128063,128064,128065],{"id":127440,"depth":200,"text":127441},{"id":127524,"depth":200,"text":127525},{"id":127572,"depth":200,"text":127573},{"id":127662,"depth":167,"text":127663,"children":128067},[128068,128069],{"id":127666,"depth":200,"text":127667},{"id":127739,"depth":200,"text":127740},{"id":127749,"depth":167,"text":127750,"children":128071},[128072,128073,128074,128075,128076],{"id":127753,"depth":200,"text":127754},{"id":127806,"depth":200,"text":127807},{"id":127822,"depth":200,"text":127823},{"id":127842,"depth":200,"text":127843},{"id":128004,"depth":200,"text":128077},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127428,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128084,"title":128085,"body":128086,"description":23584,"extension":249,"meta":130009,"navigation":251,"path":130010,"seo":130011,"stem":130012,"__hash__":130013},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128087,"toc":129983},[128088,128091,128095,128104,128108,128134,128139,128142,128145,128148,128151,128155,128158,128168,128176,128180,128215,128220,128223,128226,128229,128232,128236,128239,128248,128252,128265,128270,128273,128276,128279,128283,128286,128290,128293,128348,128351,128382,128385,128439,128443,128446,128612,128735,128738,128741,128744,128747,128751,128754,128758,128761,128764,128768,128771,128802,128829,128857,128860,128864,128890,128933,128937,129031,129034,129061,129064,129067,129070,129073,129076,129079,129082,129085,129088,129092,129149,129176,129180,129228,129232,129273,129275,129278,129281,129284,129287,129291,129383,129386,129389,129392,129396,129519,129720,129724,129728,129731,129734,129737,129741,129744,129747,129772,129775,129778,129781,129784,129787,129791,129799,129861,129864,129922,129925,129928,129931,129934,129937,129940,129943,129980],[10,128089,128085],{"id":128090},"_8-css显示模式与背景特性",[14,128092,128094],{"id":128093},"_81-css元素显示模式","8.1 css元素显示模式",[19,128096,128097,128098,128100,128101,128103],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[318,128099,126308],{},"自己占一行，比如一行可以放多个",[318,128102,126311],{},"，HTML 元素一般分为块元素和行内元素两种类型",[292,128105,128107],{"id":128106},"_811-块元素","8.1.1 块元素",[19,128109,128110,128111,128113,128114,544,128117,544,128119,544,128121,544,128124,544,128127,128130,128131,128133],{},"常见的块元素有",[318,128112,126212],{},"~",[318,128115,128116],{},"\u003Ch6>",[318,128118,126238],{},[318,128120,126308],{},[318,128122,128123],{},"\u003Cul>",[318,128125,128126],{},"\u003Col>",[318,128128,128129],{},"\u003Cli>","等，其中 ",[318,128132,126308],{}," 标签是最典型的块元素",[19,128135,128136],{},[481,128137,128138],{},"块级元素的特点：",[19,128140,128141],{},"① 比较霸道，自己独占一行。",[19,128143,128144],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128146,128147],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128149,128150],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128152,128153],{},[481,128154,361],{},[19,128156,128157],{},"①文字类的元素内不能使用块级元素",[19,128159,77394,128160,128162,128163,128165,128166],{},[318,128161,126238],{}," 标签主要用于存放文字，因此 ",[318,128164,126238],{}," 里面不能放块级元素，特别是不能放",[318,128167,126308],{},[19,128169,128170,128171,128113,128173,128175],{},"⑥同理， ",[318,128172,126212],{},[318,128174,128116],{},"等都是文字类块级标签，里面也不能放其他块级元素",[292,128177,128179],{"id":128178},"_812-行内元素","8.1.2 行内元素",[19,128181,128182,128183,544,128185,544,128188,544,128191,544,128194,544,128197,544,128200,544,128203,544,128206,544,128209,128211,128212,128214],{},"常见的行内元素有 ",[318,128184,126470],{},[318,128186,128187],{},"\u003Cstrong>",[318,128189,128190],{},"\u003Cb>",[318,128192,128193],{},"\u003Cem>",[318,128195,128196],{},"\u003Ci>",[318,128198,128199],{},"\u003Cdel>",[318,128201,128202],{},"\u003Cs>",[318,128204,128205],{},"\u003Cins>",[318,128207,128208],{},"\u003Cu>",[318,128210,126311],{}," 等，其中 ",[318,128213,126311],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128216,128217],{},[481,128218,128219],{},"特点：",[19,128221,128222],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128224,128225],{},"② 高、宽直接设置是无效的。",[19,128227,128228],{},"③ 默认宽度就是它本身内容的宽度。",[19,128230,128231],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128233,128234],{},[481,128235,361],{},[19,128237,128238],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128240,128241,128242,128244,128245,128247],{},"②特殊情况链接 ",[318,128243,126470],{}," 里面可以放块级元素，但是给 ",[318,128246,126470],{}," 转换一下块级模式最安全",[292,128249,128251],{"id":128250},"_813-行内块元素","8.1.3 行内块元素",[19,128253,128254,128255,544,128258,544,128261,128264],{},"在行内元素中有几个特殊的标签 —— ",[318,128256,128257],{},"\u003Cimg \u002F>",[318,128259,128260],{},"\u003Cinput \u002F>",[318,128262,128263],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128266,128267],{},[481,128268,128269],{},"行内块元素的特点：",[19,128271,128272],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128274,128275],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128277,128278],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[292,128280,128282],{"id":128281},"_814-总结","8.1.4 总结",[28,128284],{"style":126553,"src":128285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[292,128287,128289],{"id":128288},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128291,128292],{},"①转换为块元素：display:block;",[312,128294,128296],{"className":126697,"code":128295,"language":126699,"meta":30,"style":30},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[318,128297,128298,128303,128309,128320,128332,128344],{"__ignoreMap":30},[321,128299,128300],{"class":323,"line":324},[321,128301,128302],{"class":390},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[321,128304,128305,128307],{"class":323,"line":167},[321,128306,570],{"class":51445},[321,128308,15779],{"class":331},[321,128310,128311,128314,128316,128318],{"class":323,"line":200},[321,128312,128313],{"class":380},"  display",[321,128315,51582],{"class":331},[321,128317,61014],{"class":380},[321,128319,1497],{"class":331},[321,128321,128322,128324,128326,128328,128330],{"class":323,"line":1401},[321,128323,70713],{"class":380},[321,128325,51582],{"class":331},[321,128327,643],{"class":380},[321,128329,51637],{"class":327},[321,128331,1497],{"class":331},[321,128333,128334,128336,128338,128340,128342],{"class":323,"line":1407},[321,128335,70933],{"class":380},[321,128337,51582],{"class":331},[321,128339,733],{"class":380},[321,128341,51637],{"class":327},[321,128343,1497],{"class":331},[321,128345,128346],{"class":323,"line":1421},[321,128347,1771],{"class":331},[19,128349,128350],{},"②转换为行内元素：display:inline;",[312,128352,128354],{"className":126697,"code":128353,"language":126699,"meta":30,"style":30},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[318,128355,128356,128361,128367,128378],{"__ignoreMap":30},[321,128357,128358],{"class":323,"line":324},[321,128359,128360],{"class":390},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[321,128362,128363,128365],{"class":323,"line":167},[321,128364,51756],{"class":51445},[321,128366,15779],{"class":331},[321,128368,128369,128371,128373,128376],{"class":323,"line":200},[321,128370,128313],{"class":380},[321,128372,51582],{"class":331},[321,128374,128375],{"class":380},"inline",[321,128377,1497],{"class":331},[321,128379,128380],{"class":323,"line":1401},[321,128381,1771],{"class":331},[19,128383,128384],{},"③转换为行内块：display:inline-block;",[312,128386,128388],{"className":126697,"code":128387,"language":126699,"meta":30,"style":30},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[318,128389,128390,128395,128401,128411,128423,128435],{"__ignoreMap":30},[321,128391,128392],{"class":323,"line":324},[321,128393,128394],{"class":390},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[321,128396,128397,128399],{"class":323,"line":167},[321,128398,321],{"class":51445},[321,128400,15779],{"class":331},[321,128402,128403,128405,128407,128409],{"class":323,"line":200},[321,128404,128313],{"class":380},[321,128406,51582],{"class":331},[321,128408,72528],{"class":380},[321,128410,1497],{"class":331},[321,128412,128413,128415,128417,128419,128421],{"class":323,"line":1401},[321,128414,70713],{"class":380},[321,128416,51582],{"class":331},[321,128418,944],{"class":380},[321,128420,51637],{"class":327},[321,128422,1497],{"class":331},[321,128424,128425,128427,128429,128431,128433],{"class":323,"line":1407},[321,128426,70933],{"class":380},[321,128428,51582],{"class":331},[321,128430,1283],{"class":380},[321,128432,51637],{"class":327},[321,128434,1497],{"class":331},[321,128436,128437],{"class":323,"line":1421},[321,128438,1771],{"class":331},[292,128440,128442],{"id":128441},"_816-小米侧边栏","8.1.6 小米侧边栏",[28,128444],{"style":126553,"src":128445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[312,128447,128449],{"className":127444,"code":128448,"language":127446,"meta":30,"style":30},"\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",[318,128450,128451,128456,128471,128490,128509,128528,128547,128566,128585,128604],{"__ignoreMap":30},[321,128452,128453],{"class":323,"line":324},[321,128454,128455],{"class":390},"\u003C!-- 小米侧边栏案例 -->\n",[321,128457,128458,128460,128462,128464,128466,128469],{"class":323,"line":167},[321,128459,1242],{"class":331},[321,128461,51756],{"class":51445},[321,128463,53631],{"class":2169},[321,128465,377],{"class":331},[321,128467,128468],{"class":436},"\"sidebar\"",[321,128470,51452],{"class":331},[321,128472,128473,128475,128477,128479,128481,128483,128486,128488],{"class":323,"line":200},[321,128474,52289],{"class":331},[321,128476,570],{"class":51445},[321,128478,61202],{"class":2169},[321,128480,377],{"class":331},[321,128482,61207],{"class":436},[321,128484,128485],{"class":331},">手机 电话卡\u003C\u002F",[321,128487,570],{"class":51445},[321,128489,51452],{"class":331},[321,128491,128492,128494,128496,128498,128500,128502,128505,128507],{"class":323,"line":1401},[321,128493,52289],{"class":331},[321,128495,570],{"class":51445},[321,128497,61202],{"class":2169},[321,128499,377],{"class":331},[321,128501,61207],{"class":436},[321,128503,128504],{"class":331},">电视 盒子\u003C\u002F",[321,128506,570],{"class":51445},[321,128508,51452],{"class":331},[321,128510,128511,128513,128515,128517,128519,128521,128524,128526],{"class":323,"line":1407},[321,128512,52289],{"class":331},[321,128514,570],{"class":51445},[321,128516,61202],{"class":2169},[321,128518,377],{"class":331},[321,128520,61207],{"class":436},[321,128522,128523],{"class":331},">笔记本 平板\u003C\u002F",[321,128525,570],{"class":51445},[321,128527,51452],{"class":331},[321,128529,128530,128532,128534,128536,128538,128540,128543,128545],{"class":323,"line":1421},[321,128531,52289],{"class":331},[321,128533,570],{"class":51445},[321,128535,61202],{"class":2169},[321,128537,377],{"class":331},[321,128539,61207],{"class":436},[321,128541,128542],{"class":331},">出行 穿戴\u003C\u002F",[321,128544,570],{"class":51445},[321,128546,51452],{"class":331},[321,128548,128549,128551,128553,128555,128557,128559,128562,128564],{"class":323,"line":1427},[321,128550,52289],{"class":331},[321,128552,570],{"class":51445},[321,128554,61202],{"class":2169},[321,128556,377],{"class":331},[321,128558,61207],{"class":436},[321,128560,128561],{"class":331},">智能 路由器\u003C\u002F",[321,128563,570],{"class":51445},[321,128565,51452],{"class":331},[321,128567,128568,128570,128572,128574,128576,128578,128581,128583],{"class":323,"line":1518},[321,128569,52289],{"class":331},[321,128571,570],{"class":51445},[321,128573,61202],{"class":2169},[321,128575,377],{"class":331},[321,128577,61207],{"class":436},[321,128579,128580],{"class":331},">健康 儿童\u003C\u002F",[321,128582,570],{"class":51445},[321,128584,51452],{"class":331},[321,128586,128587,128589,128591,128593,128595,128597,128600,128602],{"class":323,"line":1524},[321,128588,52289],{"class":331},[321,128590,570],{"class":51445},[321,128592,61202],{"class":2169},[321,128594,377],{"class":331},[321,128596,61207],{"class":436},[321,128598,128599],{"class":331},">耳机 音响\u003C\u002F",[321,128601,570],{"class":51445},[321,128603,51452],{"class":331},[321,128605,128606,128608,128610],{"class":323,"line":1536},[321,128607,51930],{"class":331},[321,128609,51756],{"class":51445},[321,128611,51452],{"class":331},[312,128613,128615],{"className":126697,"code":128614,"language":126699,"meta":30,"style":30},".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",[318,128616,128617,128626,128636,128649,128661,128673,128685,128695,128706,128710,128720,128731],{"__ignoreMap":30},[321,128618,128619,128622,128624],{"class":323,"line":324},[321,128620,128621],{"class":2169},".sidebar",[321,128623,1605],{"class":51445},[321,128625,15779],{"class":331},[321,128627,128628,128630,128632,128634],{"class":323,"line":167},[321,128629,128313],{"class":380},[321,128631,51582],{"class":331},[321,128633,61014],{"class":380},[321,128635,1497],{"class":331},[321,128637,128638,128640,128642,128645,128647],{"class":323,"line":200},[321,128639,70713],{"class":380},[321,128641,51582],{"class":331},[321,128643,128644],{"class":380},"234",[321,128646,51637],{"class":327},[321,128648,1497],{"class":331},[321,128650,128651,128653,128655,128657,128659],{"class":323,"line":1401},[321,128652,70933],{"class":380},[321,128654,51582],{"class":331},[321,128656,784],{"class":380},[321,128658,51637],{"class":327},[321,128660,1497],{"class":331},[321,128662,128663,128665,128667,128669,128671],{"class":323,"line":1407},[321,128664,127381],{"class":380},[321,128666,51582],{"class":331},[321,128668,784],{"class":380},[321,128670,51637],{"class":327},[321,128672,1497],{"class":331},[321,128674,128675,128677,128679,128681,128683],{"class":323,"line":1421},[321,128676,70968],{"class":380},[321,128678,51582],{"class":331},[321,128680,1283],{"class":380},[321,128682,51637],{"class":327},[321,128684,1497],{"class":331},[321,128686,128687,128689,128691,128693],{"class":323,"line":1427},[321,128688,71050],{"class":380},[321,128690,51582],{"class":331},[321,128692,60987],{"class":380},[321,128694,1497],{"class":331},[321,128696,128697,128699,128701,128704],{"class":323,"line":1518},[321,128698,71023],{"class":380},[321,128700,51582],{"class":331},[321,128702,128703],{"class":380},"#55585a",[321,128705,1497],{"class":331},[321,128707,128708],{"class":323,"line":1524},[321,128709,1771],{"class":331},[321,128711,128712,128714,128716,128718],{"class":323,"line":1536},[321,128713,128621],{"class":2169},[321,128715,1605],{"class":51445},[321,128717,61085],{"class":2169},[321,128719,15779],{"class":331},[321,128721,128722,128724,128726,128729],{"class":323,"line":1818},[321,128723,71023],{"class":380},[321,128725,51582],{"class":331},[321,128727,128728],{"class":380},"#ff6700",[321,128730,1497],{"class":331},[321,128732,128733],{"class":323,"line":1823},[321,128734,1771],{"class":331},[28,128736],{"style":126553,"src":128737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128739,128740],{},"行高=盒子高度：实现文字的垂直居中",[19,128742,128743],{},"原理讲解：",[28,128745],{"style":126553,"src":128746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128748,128750],{"id":128749},"_82-css背景","8.2 css背景",[19,128752,128753],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[292,128755,128757],{"id":128756},"_821-背景颜色","8.2.1 背景颜色",[19,128759,128760],{},"background-color:颜色值;",[19,128762,128763],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[292,128765,128767],{"id":128766},"_822-背景图片","8.2.2 背景图片",[19,128769,128770],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[312,128772,128774],{"className":126697,"code":128773,"language":126699,"meta":30,"style":30},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[318,128775,128776,128782,128798],{"__ignoreMap":30},[321,128777,128778,128780],{"class":323,"line":324},[321,128779,51756],{"class":51445},[321,128781,15779],{"class":331},[321,128783,128784,128787,128789,128791,128793,128796],{"class":323,"line":167},[321,128785,128786],{"class":380},"  background-image",[321,128788,51582],{"class":331},[321,128790,61871],{"class":380},[321,128792,332],{"class":331},[321,128794,128795],{"class":5423},"images\u002Fbg.png",[321,128797,2925],{"class":331},[321,128799,128800],{"class":323,"line":200},[321,128801,1771],{"class":331},[469,128803,128804,128813],{},[472,128805,128806],{},[475,128807,128808,128811],{},[478,128809,128810],{"align":23944},"参数值",[478,128812,102841],{"align":23944},[516,128814,128815,128822],{},[475,128816,128817,128819],{},[521,128818,54882],{"align":23944},[521,128820,128821],{"align":23944},"无背景图（默认的）",[475,128823,128824,128826],{},[521,128825,61871],{"align":23944},[521,128827,128828],{"align":23944},"使用绝对或相对地址指定背景图像",[312,128830,128831],{"className":126697,"code":128773,"language":126699,"meta":30,"style":30},[318,128832,128833,128839,128853],{"__ignoreMap":30},[321,128834,128835,128837],{"class":323,"line":324},[321,128836,51756],{"class":51445},[321,128838,15779],{"class":331},[321,128840,128841,128843,128845,128847,128849,128851],{"class":323,"line":167},[321,128842,128786],{"class":380},[321,128844,51582],{"class":331},[321,128846,61871],{"class":380},[321,128848,332],{"class":331},[321,128850,128795],{"class":5423},[321,128852,2925],{"class":331},[321,128854,128855],{"class":323,"line":200},[321,128856,1771],{"class":331},[19,128858,128859],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[292,128861,128863],{"id":128862},"_823-背景平铺","8.2.3 背景平铺",[312,128865,128867],{"className":126697,"code":128866,"language":126699,"meta":30,"style":30},"div {\n  background-repeat: no-repeat;\n}\n",[318,128868,128869,128875,128886],{"__ignoreMap":30},[321,128870,128871,128873],{"class":323,"line":324},[321,128872,51756],{"class":51445},[321,128874,15779],{"class":331},[321,128876,128877,128880,128882,128884],{"class":323,"line":167},[321,128878,128879],{"class":380},"  background-repeat",[321,128881,51582],{"class":331},[321,128883,61881],{"class":380},[321,128885,1497],{"class":331},[321,128887,128888],{"class":323,"line":200},[321,128889,1771],{"class":331},[469,128891,128892,128900],{},[472,128893,128894],{},[475,128895,128896,128898],{},[478,128897,128810],{"align":23944},[478,128899,102841],{"align":23944},[516,128901,128902,128910,128917,128925],{},[475,128903,128904,128907],{},[521,128905,128906],{"align":23944},"repeat",[521,128908,128909],{"align":23944},"背景图像在纵向和横向上平铺（默认的）",[475,128911,128912,128914],{},[521,128913,61881],{"align":23944},[521,128915,128916],{"align":23944},"背景图像不平铺",[475,128918,128919,128922],{},[521,128920,128921],{"align":23944},"repeat-x",[521,128923,128924],{"align":23944},"背景图像在横向上平铺",[475,128926,128927,128930],{},[521,128928,128929],{"align":23944},"repeat-y",[521,128931,128932],{"align":23944},"背景图像在纵向平铺",[292,128934,128936],{"id":128935},"_824-背景图片位置","8.2.4 背景图片位置",[312,128938,128940],{"className":126697,"code":128939,"language":126699,"meta":30,"style":30},"\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",[318,128941,128942,128947,128953,128967,128971,128976,128982,128998,129002,129007,129013,129027],{"__ignoreMap":30},[321,128943,128944],{"class":323,"line":324},[321,128945,128946],{"class":390},"\u002F* 方位名词 *\u002F\n",[321,128948,128949,128951],{"class":323,"line":167},[321,128950,51756],{"class":51445},[321,128952,15779],{"class":331},[321,128954,128955,128958,128960,128962,128965],{"class":323,"line":200},[321,128956,128957],{"class":380},"  background-position",[321,128959,51582],{"class":331},[321,128961,51737],{"class":380},[321,128963,128964],{"class":380}," top",[321,128966,1497],{"class":331},[321,128968,128969],{"class":323,"line":1401},[321,128970,1771],{"class":331},[321,128972,128973],{"class":323,"line":1407},[321,128974,128975],{"class":390},"\u002F* 精确单位 *\u002F\n",[321,128977,128978,128980],{"class":323,"line":1421},[321,128979,51756],{"class":51445},[321,128981,15779],{"class":331},[321,128983,128984,128986,128988,128990,128992,128994,128996],{"class":323,"line":1427},[321,128985,128957],{"class":380},[321,128987,51582],{"class":331},[321,128989,1032],{"class":380},[321,128991,51637],{"class":327},[321,128993,57649],{"class":380},[321,128995,51637],{"class":327},[321,128997,1497],{"class":331},[321,128999,129000],{"class":323,"line":1518},[321,129001,1771],{"class":331},[321,129003,129004],{"class":323,"line":1524},[321,129005,129006],{"class":390},"\u002F* 混合单位 *\u002F\n",[321,129008,129009,129011],{"class":323,"line":1536},[321,129010,51756],{"class":51445},[321,129012,15779],{"class":331},[321,129014,129015,129017,129019,129021,129023,129025],{"class":323,"line":1818},[321,129016,128957],{"class":380},[321,129018,51582],{"class":331},[321,129020,1032],{"class":380},[321,129022,51637],{"class":327},[321,129024,17351],{"class":380},[321,129026,1497],{"class":331},[321,129028,129029],{"class":323,"line":1823},[321,129030,1771],{"class":331},[19,129032,129033],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[469,129035,129036,129044],{},[472,129037,129038],{},[475,129039,129040,129042],{},[478,129041,128810],{"align":23944},[478,129043,26014],{"align":23944},[516,129045,129046,129053],{},[475,129047,129048,129050],{},[521,129049,52113],{"align":23944},[521,129051,129052],{"align":23944},"百分数|由浮点数和单位标识符组成的长度值",[475,129054,129055,129058],{},[521,129056,129057],{"align":23944},"position",[521,129059,129060],{"align":23944},"top|center|bottom|left|center|right 方位名词",[19,129062,129063],{},"其他说明：",[19,129065,129066],{},"①参数是方位名词",[19,129068,129069],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129071,129072],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129074,129075],{},"②参数是精确单位",[19,129077,129078],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129080,129081],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129083,129084],{},"③参数是混合单位",[19,129086,129087],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[292,129089,129091],{"id":129090},"_825-背景图片固定","8.2.5 背景图片固定",[312,129093,129095],{"className":126697,"code":129094,"language":126699,"meta":30,"style":30},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[318,129096,129097,129102,129108,129120,129124,129129,129135,129145],{"__ignoreMap":30},[321,129098,129099],{"class":323,"line":324},[321,129100,129101],{"class":390},"\u002F* 背景滚动（默认） *\u002F\n",[321,129103,129104,129106],{"class":323,"line":167},[321,129105,51756],{"class":51445},[321,129107,15779],{"class":331},[321,129109,129110,129113,129115,129118],{"class":323,"line":200},[321,129111,129112],{"class":380},"  background-attachment",[321,129114,51582],{"class":331},[321,129116,129117],{"class":380},"scroll",[321,129119,1497],{"class":331},[321,129121,129122],{"class":323,"line":1401},[321,129123,1771],{"class":331},[321,129125,129126],{"class":323,"line":1407},[321,129127,129128],{"class":390},"\u002F* 背景固定 *\u002F\n",[321,129130,129131,129133],{"class":323,"line":1421},[321,129132,51756],{"class":51445},[321,129134,15779],{"class":331},[321,129136,129137,129139,129141,129143],{"class":323,"line":1427},[321,129138,129112],{"class":380},[321,129140,51582],{"class":331},[321,129142,86378],{"class":380},[321,129144,1497],{"class":331},[321,129146,129147],{"class":323,"line":1518},[321,129148,1771],{"class":331},[469,129150,129151,129160],{},[472,129152,129153],{},[475,129154,129155,129158],{},[478,129156,129157],{"align":23944},"参数",[478,129159,102841],{"align":23944},[516,129161,129162,129169],{},[475,129163,129164,129166],{},[521,129165,129117],{"align":23944},[521,129167,129168],{"align":23944},"背景图像是随对象内容滚动",[475,129170,129171,129173],{},[521,129172,86378],{"align":23944},[521,129174,129175],{"align":23944},"背景图像固定",[292,129177,129179],{"id":129178},"_826-背景样式合写","8.2.6 背景样式合写",[312,129181,129183],{"className":126697,"code":129182,"language":126699,"meta":30,"style":30},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[318,129184,129185,129190,129196,129224],{"__ignoreMap":30},[321,129186,129187],{"class":323,"line":324},[321,129188,129189],{"class":390},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[321,129191,129192,129194],{"class":323,"line":167},[321,129193,51756],{"class":51445},[321,129195,15779],{"class":331},[321,129197,129198,129200,129202,129204,129207,129209,129211,129213,129215,129218,129220,129222],{"class":323,"line":200},[321,129199,70756],{"class":380},[321,129201,51582],{"class":331},[321,129203,60987],{"class":380},[321,129205,129206],{"class":380}," url",[321,129208,332],{"class":331},[321,129210,128795],{"class":5423},[321,129212,13921],{"class":331},[321,129214,61881],{"class":380},[321,129216,129217],{"class":380}," fixed",[321,129219,17351],{"class":380},[321,129221,128964],{"class":380},[321,129223,1497],{"class":331},[321,129225,129226],{"class":323,"line":1401},[321,129227,1771],{"class":331},[292,129229,129231],{"id":129230},"_827-背景色半透明","8.2.7 背景色半透明",[312,129233,129235],{"className":126697,"code":129234,"language":126699,"meta":30,"style":30},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[318,129236,129237,129243,129269],{"__ignoreMap":30},[321,129238,129239,129241],{"class":323,"line":324},[321,129240,51756],{"class":51445},[321,129242,15779],{"class":331},[321,129244,129245,129247,129249,129251,129253,129255,129257,129259,129261,129263,129265,129267],{"class":323,"line":167},[321,129246,70756],{"class":380},[321,129248,51582],{"class":331},[321,129250,55255],{"class":380},[321,129252,332],{"class":331},[321,129254,523],{"class":380},[321,129256,12642],{"class":331},[321,129258,523],{"class":380},[321,129260,12642],{"class":331},[321,129262,523],{"class":380},[321,129264,12642],{"class":331},[321,129266,100666],{"class":380},[321,129268,2925],{"class":331},[321,129270,129271],{"class":323,"line":200},[321,129272,1771],{"class":331},[19,129274,99541],{},[19,129276,129277],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129279,129280],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129282,129283],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129285,129286],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[292,129288,129290],{"id":129289},"_828-总结","8.2.8 总结",[469,129292,129293,129304],{},[472,129294,129295],{},[475,129296,129297,129300,129302],{},[478,129298,129299],{"align":23944},"属性",[478,129301,102841],{"align":23944},[478,129303,484],{"align":23944},[516,129305,129306,129317,129328,129339,129350,129361,129372],{},[475,129307,129308,129311,129314],{},[521,129309,129310],{"align":23944},"background-color",[521,129312,129313],{"align":23944},"背景颜色",[521,129315,129316],{"align":23944},"预定义的颜色值\u002F十六进制\u002FRGB代码",[475,129318,129319,129322,129325],{},[521,129320,129321],{"align":23944},"background-image",[521,129323,129324],{"align":23944},"背景图片",[521,129326,129327],{"align":23944},"url(图片路径)",[475,129329,129330,129333,129336],{},[521,129331,129332],{"align":23944},"background-repeat",[521,129334,129335],{"align":23944},"是否平铺",[521,129337,129338],{"align":23944},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[475,129340,129341,129344,129347],{},[521,129342,129343],{"align":23944},"background-position",[521,129345,129346],{"align":23944},"背景位置",[521,129348,129349],{"align":23944},"length\u002Fposition 分别是x和y坐标",[475,129351,129352,129355,129358],{},[521,129353,129354],{"align":23944},"background-attachment",[521,129356,129357],{"align":23944},"背景附着",[521,129359,129360],{"align":23944},"scroll(背景滚动) \u002Ffixed (背景固定)",[475,129362,129363,129366,129369],{},[521,129364,129365],{"align":23944},"背景简写",[521,129367,129368],{"align":23944},"书写更简单",[521,129370,129371],{"align":23944},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[475,129373,129374,129377,129380],{},[521,129375,129376],{"align":23944},"背景半透明",[521,129378,129379],{"align":23944},"背景颜色半透明",[521,129381,129382],{"align":23944},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129384,129385],{},"颜色渐变：",[28,129387],{"style":126553,"src":129388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[28,129390],{"style":126553,"src":129391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[292,129393,129395],{"id":129394},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[312,129397,129399],{"className":127444,"code":129398,"language":127446,"meta":30,"style":30},"\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",[318,129400,129401,129416,129435,129454,129473,129492,129511],{"__ignoreMap":30},[321,129402,129403,129405,129407,129409,129411,129414],{"class":323,"line":324},[321,129404,1242],{"class":331},[321,129406,51756],{"class":51445},[321,129408,53631],{"class":2169},[321,129410,377],{"class":331},[321,129412,129413],{"class":436},"\"nav\"",[321,129415,51452],{"class":331},[321,129417,129418,129420,129422,129424,129426,129428,129431,129433],{"class":323,"line":167},[321,129419,52289],{"class":331},[321,129421,570],{"class":51445},[321,129423,61202],{"class":2169},[321,129425,377],{"class":331},[321,129427,61207],{"class":436},[321,129429,129430],{"class":331},">五彩导航1\u003C\u002F",[321,129432,570],{"class":51445},[321,129434,51452],{"class":331},[321,129436,129437,129439,129441,129443,129445,129447,129450,129452],{"class":323,"line":200},[321,129438,52289],{"class":331},[321,129440,570],{"class":51445},[321,129442,61202],{"class":2169},[321,129444,377],{"class":331},[321,129446,61207],{"class":436},[321,129448,129449],{"class":331},">五彩导航2\u003C\u002F",[321,129451,570],{"class":51445},[321,129453,51452],{"class":331},[321,129455,129456,129458,129460,129462,129464,129466,129469,129471],{"class":323,"line":1401},[321,129457,52289],{"class":331},[321,129459,570],{"class":51445},[321,129461,61202],{"class":2169},[321,129463,377],{"class":331},[321,129465,61207],{"class":436},[321,129467,129468],{"class":331},">五彩导航3\u003C\u002F",[321,129470,570],{"class":51445},[321,129472,51452],{"class":331},[321,129474,129475,129477,129479,129481,129483,129485,129488,129490],{"class":323,"line":1407},[321,129476,52289],{"class":331},[321,129478,570],{"class":51445},[321,129480,61202],{"class":2169},[321,129482,377],{"class":331},[321,129484,61207],{"class":436},[321,129486,129487],{"class":331},">五彩导航4\u003C\u002F",[321,129489,570],{"class":51445},[321,129491,51452],{"class":331},[321,129493,129494,129496,129498,129500,129502,129504,129507,129509],{"class":323,"line":1421},[321,129495,52289],{"class":331},[321,129497,570],{"class":51445},[321,129499,61202],{"class":2169},[321,129501,377],{"class":331},[321,129503,61207],{"class":436},[321,129505,129506],{"class":331},">五彩导航5\u003C\u002F",[321,129508,570],{"class":51445},[321,129510,51452],{"class":331},[321,129512,129513,129515,129517],{"class":323,"line":1427},[321,129514,51930],{"class":331},[321,129516,51756],{"class":51445},[321,129518,51452],{"class":331},[312,129520,129522],{"className":126697,"code":129521,"language":126699,"meta":30,"style":30},".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",[318,129523,129524,129533,129543,129555,129567,129577,129589,129599,129603,129628,129651,129674,129697],{"__ignoreMap":30},[321,129525,129526,129529,129531],{"class":323,"line":324},[321,129527,129528],{"class":2169},".nav",[321,129530,1605],{"class":51445},[321,129532,15779],{"class":331},[321,129534,129535,129537,129539,129541],{"class":323,"line":167},[321,129536,128313],{"class":380},[321,129538,51582],{"class":331},[321,129540,72528],{"class":380},[321,129542,1497],{"class":331},[321,129544,129545,129547,129549,129551,129553],{"class":323,"line":200},[321,129546,70713],{"class":380},[321,129548,51582],{"class":331},[321,129550,1149],{"class":380},[321,129552,51637],{"class":327},[321,129554,1497],{"class":331},[321,129556,129557,129559,129561,129563,129565],{"class":323,"line":1401},[321,129558,70933],{"class":380},[321,129560,51582],{"class":331},[321,129562,1188],{"class":380},[321,129564,51637],{"class":327},[321,129566,1497],{"class":331},[321,129568,129569,129571,129573,129575],{"class":323,"line":1407},[321,129570,70671],{"class":380},[321,129572,51582],{"class":331},[321,129574,51737],{"class":380},[321,129576,1497],{"class":331},[321,129578,129579,129581,129583,129585,129587],{"class":323,"line":1421},[321,129580,127381],{"class":380},[321,129582,51582],{"class":331},[321,129584,1188],{"class":380},[321,129586,51637],{"class":327},[321,129588,1497],{"class":331},[321,129590,129591,129593,129595,129597],{"class":323,"line":1427},[321,129592,71050],{"class":380},[321,129594,51582],{"class":331},[321,129596,60987],{"class":380},[321,129598,1497],{"class":331},[321,129600,129601],{"class":323,"line":1518},[321,129602,1771],{"class":331},[321,129604,129605,129607,129609,129612,129614,129616,129619,129621,129623,129625],{"class":323,"line":1524},[321,129606,129528],{"class":2169},[321,129608,1605],{"class":51445},[321,129610,129611],{"class":2169},":nth-child",[321,129613,332],{"class":331},[321,129615,549],{"class":380},[321,129617,129618],{"class":331},") { ",[321,129620,129310],{"class":380},[321,129622,51582],{"class":331},[321,129624,128728],{"class":380},[321,129626,129627],{"class":331},"; }\n",[321,129629,129630,129632,129634,129636,129638,129640,129642,129644,129646,129649],{"class":323,"line":1536},[321,129631,129528],{"class":2169},[321,129633,1605],{"class":51445},[321,129635,129611],{"class":2169},[321,129637,332],{"class":331},[321,129639,409],{"class":380},[321,129641,129618],{"class":331},[321,129643,129310],{"class":380},[321,129645,51582],{"class":331},[321,129647,129648],{"class":380},"#ff0000",[321,129650,129627],{"class":331},[321,129652,129653,129655,129657,129659,129661,129663,129665,129667,129669,129672],{"class":323,"line":1818},[321,129654,129528],{"class":2169},[321,129656,1605],{"class":51445},[321,129658,129611],{"class":2169},[321,129660,332],{"class":331},[321,129662,403],{"class":380},[321,129664,129618],{"class":331},[321,129666,129310],{"class":380},[321,129668,51582],{"class":331},[321,129670,129671],{"class":380},"#00a4ff",[321,129673,129627],{"class":331},[321,129675,129676,129678,129680,129682,129684,129686,129688,129690,129692,129695],{"class":323,"line":1823},[321,129677,129528],{"class":2169},[321,129679,1605],{"class":51445},[321,129681,129611],{"class":2169},[321,129683,332],{"class":331},[321,129685,625],{"class":380},[321,129687,129618],{"class":331},[321,129689,129310],{"class":380},[321,129691,51582],{"class":331},[321,129693,129694],{"class":380},"#ff00ff",[321,129696,129627],{"class":331},[321,129698,129699,129701,129703,129705,129707,129709,129711,129713,129715,129718],{"class":323,"line":1829},[321,129700,129528],{"class":2169},[321,129702,1605],{"class":51445},[321,129704,129611],{"class":2169},[321,129706,332],{"class":331},[321,129708,651],{"class":380},[321,129710,129618],{"class":331},[321,129712,129310],{"class":380},[321,129714,51582],{"class":331},[321,129716,129717],{"class":380},"#00ff00",[321,129719,129627],{"class":331},[14,129721,129723],{"id":129722},"_83-css三大特性","8.3 css三大特性",[292,129725,129727],{"id":129726},"_831-层叠性","8.3.1 层叠性",[19,129729,129730],{},"为了解决样式冲突问题",[19,129732,129733],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129735,129736],{},"   ②样式不冲突，不会层叠",[292,129738,129740],{"id":129739},"_832-继承性","8.3.2 继承性",[19,129742,129743],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129745,129746],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[312,129748,129750],{"className":126697,"code":129749,"language":126699,"meta":30,"style":30},"p {\n  color: #333;\n}\n",[318,129751,129752,129758,129768],{"__ignoreMap":30},[321,129753,129754,129756],{"class":323,"line":324},[321,129755,19],{"class":51445},[321,129757,15779],{"class":331},[321,129759,129760,129762,129764,129766],{"class":323,"line":167},[321,129761,71050],{"class":380},[321,129763,51582],{"class":331},[321,129765,62514],{"class":380},[321,129767,1497],{"class":331},[321,129769,129770],{"class":323,"line":200},[321,129771,1771],{"class":331},[28,129773],{"style":126553,"src":129774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129776,129777],{},"解释：①行高可以跟单位也可以不跟单位",[19,129779,129780],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129782,129783],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129785,129786],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[292,129788,129790],{"id":129789},"_833-优先级","8.3.3 优先级",[151,129792,129793,129796],{},[154,129794,129795],{},"选择器相同，则执行层叠性",[154,129797,129798],{},"选择器不同，则根据选择器权重执行",[469,129800,129801,129811],{},[472,129802,129803],{},[475,129804,129805,129808],{},[478,129806,129807],{"align":23944},"选择器",[478,129809,129810],{"align":23944},"选择器权重",[516,129812,129813,129821,129829,129837,129845,129853],{},[475,129814,129815,129818],{},[521,129816,129817],{"align":23944},"继承 或者*",[521,129819,129820],{"align":23944},"0，0，0，0",[475,129822,129823,129826],{},[521,129824,129825],{"align":23944},"标签选择器",[521,129827,129828],{"align":23944},"0，0，0，1",[475,129830,129831,129834],{},[521,129832,129833],{"align":23944},"类选择器，伪类选择器",[521,129835,129836],{"align":23944},"0，0，1，0",[475,129838,129839,129842],{},[521,129840,129841],{"align":23944},"ID选择器",[521,129843,129844],{"align":23944},"0，1，0，0",[475,129846,129847,129850],{},[521,129848,129849],{"align":23944},"行内样式",[521,129851,129852],{"align":23944},"1，0，0，0",[475,129854,129855,129858],{},[521,129856,129857],{"align":23944},"！important",[521,129859,129860],{"align":23944},"无穷大",[19,129862,129863],{},"! important用法：",[312,129865,129867],{"className":126697,"code":129866,"language":126699,"meta":30,"style":30},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[318,129868,129869,129874,129880,129893,129897,129902,129908,129918],{"__ignoreMap":30},[321,129870,129871],{"class":323,"line":324},[321,129872,129873],{"class":390},"\u002F* !important 拥有最高优先级 *\u002F\n",[321,129875,129876,129878],{"class":323,"line":167},[321,129877,51756],{"class":51445},[321,129879,15779],{"class":331},[321,129881,129882,129884,129886,129888,129891],{"class":323,"line":200},[321,129883,71050],{"class":380},[321,129885,51582],{"class":331},[321,129887,51790],{"class":380},[321,129889,129890],{"class":327}," !important",[321,129892,1497],{"class":331},[321,129894,129895],{"class":323,"line":1401},[321,129896,1771],{"class":331},[321,129898,129899],{"class":323,"line":1407},[321,129900,129901],{"class":390},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[321,129903,129904,129906],{"class":323,"line":1421},[321,129905,51756],{"class":51445},[321,129907,15779],{"class":331},[321,129909,129910,129912,129914,129916],{"class":323,"line":1427},[321,129911,71050],{"class":380},[321,129913,51582],{"class":331},[321,129915,57566],{"class":380},[321,129917,1497],{"class":331},[321,129919,129920],{"class":323,"line":1518},[321,129921,1771],{"class":331},[19,129923,129924],{},"优先级注意点：",[19,129926,129927],{},"①权重是有4组数字组成,但是不会有进位",[19,129929,129930],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129932,129933],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129935,129936],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129938,129939],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129941,129942],{},"⑥复合选择器",[469,129944,129945,129955],{},[472,129946,129947],{},[475,129948,129949,129952],{},[478,129950,129951],{"align":23944},"div ul li",[478,129953,129954],{"align":23944},"0,0,0,3",[516,129956,129957,129965,129973],{},[475,129958,129959,129962],{},[521,129960,129961],{"align":23944},".nav ul li",[521,129963,129964],{"align":23944},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[475,129966,129967,129970],{},[521,129968,129969],{"align":23944},"a:hover",[521,129971,129972],{"align":23944},"0,0,1,1",[475,129974,129975,129978],{},[521,129976,129977],{"align":23944},".nav a",[521,129979,129972],{"align":23944},[5333,129981,129982],{},"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":30,"searchDepth":167,"depth":167,"links":129984},[129985,129993,130004],{"id":128093,"depth":167,"text":128094,"children":129986},[129987,129988,129989,129990,129991,129992],{"id":128106,"depth":200,"text":128107},{"id":128178,"depth":200,"text":128179},{"id":128250,"depth":200,"text":128251},{"id":128281,"depth":200,"text":128282},{"id":128288,"depth":200,"text":128289},{"id":128441,"depth":200,"text":128442},{"id":128749,"depth":167,"text":128750,"children":129994},[129995,129996,129997,129998,129999,130000,130001,130002,130003],{"id":128756,"depth":200,"text":128757},{"id":128766,"depth":200,"text":128767},{"id":128862,"depth":200,"text":128863},{"id":128935,"depth":200,"text":128936},{"id":129090,"depth":200,"text":129091},{"id":129178,"depth":200,"text":129179},{"id":129230,"depth":200,"text":129231},{"id":129289,"depth":200,"text":129290},{"id":129394,"depth":200,"text":129395},{"id":129722,"depth":167,"text":129723,"children":130005},[130006,130007,130008],{"id":129726,"depth":200,"text":129727},{"id":129739,"depth":200,"text":129740},{"id":129789,"depth":200,"text":129790},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128085,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130015,"title":130016,"body":130017,"description":23584,"extension":249,"meta":131607,"navigation":251,"path":131608,"seo":131609,"stem":131610,"__hash__":131611},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130018,"toc":131586},[130019,130022,130026,130029,130032,130035,130038,130041,130044,130047,130051,130059,130096,130132,130135,130149,130154,130188,130191,130284,130289,130292,130322,130325,130330,130338,130342,130349,130395,130439,130444,130447,130450,130453,130456,130459,130462,130464,130467,130471,130476,130520,130525,130528,130531,130568,130573,130576,130579,130582,130585,130617,130620,130623,130626,130658,130661,130664,130667,130671,130674,130706,130709,130713,130733,130736,130744,130747,130751,130756,130759,130791,130796,130799,130837,130841,130846,130849,130852,130883,130886,130903,130908,130960,131020,131025,131079,131117,131121,131125,131128,131132,131140,131143,131145,131156,131161,131209,131243,131246,131249,131252,131255,131299,131302,131305,131308,131311,131314,131317,131361,131364,131367,131370,131373,131376,131379,131385,131388,131432,131435,131438,131441,131444,131447,131491,131494,131496,131499,131503,131507,131545,131549,131552,131555,131559,131567,131571,131574,131577,131580,131583],[10,130020,130016],{"id":130021},"_9-css盒模型浮动与切图",[14,130023,130025],{"id":130024},"_91-盒子模型","9.1 盒子模型",[19,130027,130028],{},"利用盒子来设计网页",[19,130030,130031],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130033,130034],{},"网页布局设置：",[19,130036,130037],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130039,130040],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130042,130043],{},"③往盒子里装内容",[28,130045],{"style":126553,"src":130046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[292,130048,130050],{"id":130049},"_911-边框border","9.1.1 边框（border）",[151,130052,130053,130056],{},[154,130054,130055],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[154,130057,130058],{},"语法",[312,130060,130062],{"className":126697,"code":130061,"language":126699,"meta":30,"style":30},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[318,130063,130064,130069,130075,130092],{"__ignoreMap":30},[321,130065,130066],{"class":323,"line":324},[321,130067,130068],{"class":390},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[321,130070,130071,130073],{"class":323,"line":167},[321,130072,51756],{"class":51445},[321,130074,15779],{"class":331},[321,130076,130077,130079,130081,130083,130085,130087,130090],{"class":323,"line":200},[321,130078,71041],{"class":380},[321,130080,51582],{"class":331},[321,130082,549],{"class":380},[321,130084,51637],{"class":327},[321,130086,51666],{"class":380},[321,130088,130089],{"class":380}," #ccc",[321,130091,1497],{"class":331},[321,130093,130094],{"class":323,"line":1401},[321,130095,1771],{"class":331},[469,130097,130098,130106],{},[472,130099,130100],{},[475,130101,130102,130104],{},[478,130103,129299],{"align":23944},[478,130105,102841],{"align":23944},[516,130107,130108,130116,130124],{},[475,130109,130110,130113],{},[521,130111,130112],{"align":23944},"border-width",[521,130114,130115],{"align":23944},"定义边框粗细，单位是px",[475,130117,130118,130121],{},[521,130119,130120],{"align":23944},"border-style",[521,130122,130123],{"align":23944},"边框的样式",[475,130125,130126,130129],{},[521,130127,130128],{"align":23944},"border-color",[521,130130,130131],{"align":23944},"边框的颜色",[19,130133,130134],{},"边框样式 border-style 可以设置如下值：",[1339,130136,130137,130140,130143,130146],{},[154,130138,130139],{},"none：没有边框即忽略所有边框的宽度（默认值）",[154,130141,130142],{},"solid：边框为单实线(最为常用的)",[154,130144,130145],{},"dashed：边框为虚线",[154,130147,130148],{},"dotted：边框为点线",[151,130150,130151],{"start":200},[154,130152,130153],{},"边框的合写分写",[312,130155,130156],{"className":126697,"code":130061,"language":126699,"meta":30,"style":30},[318,130157,130158,130162,130168,130184],{"__ignoreMap":30},[321,130159,130160],{"class":323,"line":324},[321,130161,130068],{"class":390},[321,130163,130164,130166],{"class":323,"line":167},[321,130165,51756],{"class":51445},[321,130167,15779],{"class":331},[321,130169,130170,130172,130174,130176,130178,130180,130182],{"class":323,"line":200},[321,130171,71041],{"class":380},[321,130173,51582],{"class":331},[321,130175,549],{"class":380},[321,130177,51637],{"class":327},[321,130179,51666],{"class":380},[321,130181,130089],{"class":380},[321,130183,1497],{"class":331},[321,130185,130186],{"class":323,"line":1401},[321,130187,1771],{"class":331},[19,130189,130190],{},"边框分开写法：",[312,130192,130194],{"className":126697,"code":130193,"language":126699,"meta":30,"style":30},"\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",[318,130195,130196,130201,130207,130225,130243,130262,130280],{"__ignoreMap":30},[321,130197,130198],{"class":323,"line":324},[321,130199,130200],{"class":390},"\u002F* 边框分开写法 *\u002F\n",[321,130202,130203,130205],{"class":323,"line":167},[321,130204,51756],{"class":51445},[321,130206,15779],{"class":331},[321,130208,130209,130212,130214,130216,130218,130220,130223],{"class":323,"line":200},[321,130210,130211],{"class":380},"  border-top",[321,130213,51582],{"class":331},[321,130215,549],{"class":380},[321,130217,51637],{"class":327},[321,130219,51666],{"class":380},[321,130221,130222],{"class":380}," #000",[321,130224,1497],{"class":331},[321,130226,130227,130230,130232,130234,130236,130238,130241],{"class":323,"line":1401},[321,130228,130229],{"class":380},"  border-right",[321,130231,51582],{"class":331},[321,130233,409],{"class":380},[321,130235,51637],{"class":327},[321,130237,62386],{"class":380},[321,130239,130240],{"class":380}," #333",[321,130242,1497],{"class":331},[321,130244,130245,130248,130250,130252,130254,130257,130260],{"class":323,"line":1407},[321,130246,130247],{"class":380},"  border-bottom",[321,130249,51582],{"class":331},[321,130251,403],{"class":380},[321,130253,51637],{"class":327},[321,130255,130256],{"class":380}," dotted",[321,130258,130259],{"class":380}," #666",[321,130261,1497],{"class":331},[321,130263,130264,130267,130269,130271,130273,130275,130278],{"class":323,"line":1421},[321,130265,130266],{"class":380},"  border-left",[321,130268,51582],{"class":331},[321,130270,549],{"class":380},[321,130272,51637],{"class":327},[321,130274,51666],{"class":380},[321,130276,130277],{"class":380}," #999",[321,130279,1497],{"class":331},[321,130281,130282],{"class":323,"line":1427},[321,130283,1771],{"class":331},[151,130285,130286],{"start":1401},[154,130287,130288],{},"表格的细线边框",[19,130290,130291],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[312,130293,130295],{"className":126697,"code":130294,"language":126699,"meta":30,"style":30},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[318,130296,130297,130302,130308,130318],{"__ignoreMap":30},[321,130298,130299],{"class":323,"line":324},[321,130300,130301],{"class":390},"\u002F* 表格细线边框合并 *\u002F\n",[321,130303,130304,130306],{"class":323,"line":167},[321,130305,469],{"class":51445},[321,130307,15779],{"class":331},[321,130309,130310,130312,130314,130316],{"class":323,"line":200},[321,130311,70723],{"class":380},[321,130313,51582],{"class":331},[321,130315,65180],{"class":380},[321,130317,1497],{"class":331},[321,130319,130320],{"class":323,"line":1401},[321,130321,1771],{"class":331},[19,130323,130324],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[151,130326,130327],{"start":1407},[154,130328,130329],{},"解决边框额外增加盒子的实际大小的方法：",[1339,130331,130332,130335],{},[154,130333,130334],{},"测量盒子大小的时候,不量边框",[154,130336,130337],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[292,130339,130341],{"id":130340},"_912-内边距","9.1.2 内边距",[151,130343,130344,130347],{},[154,130345,130346],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[154,130348,130058],{},[469,130350,130351,130361],{},[472,130352,130353],{},[475,130354,130355,130358],{},[478,130356,130357],{"align":23944},"值的个数",[478,130359,130360],{"align":23944},"表达意思",[516,130362,130363,130371,130379,130387],{},[475,130364,130365,130368],{},[521,130366,130367],{"align":23944},"padding: 5px;",[521,130369,130370],{"align":23944},"1个值，代表上下左右都有5个元素",[475,130372,130373,130376],{},[521,130374,130375],{"align":23944},"padding: 5px 10px;",[521,130377,130378],{"align":23944},"2个值，代表上下内边距为5像素，左右内边距为10像素",[475,130380,130381,130384],{},[521,130382,130383],{"align":23944},"padding: 5px 10px 20px;",[521,130385,130386],{"align":23944},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[475,130388,130389,130392],{},[521,130390,130391],{"align":23944},"padding: 5px 10px 20px 30px;",[521,130393,130394],{"align":23944},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[469,130396,130397,130405],{},[472,130398,130399],{},[475,130400,130401,130403],{},[478,130402,129299],{"align":23944},[478,130404,102841],{"align":23944},[516,130406,130407,130415,130423,130431],{},[475,130408,130409,130412],{},[521,130410,130411],{"align":23944},"padding-left",[521,130413,130414],{"align":23944},"左内边距",[475,130416,130417,130420],{},[521,130418,130419],{"align":23944},"padding-right",[521,130421,130422],{"align":23944},"右内边距",[475,130424,130425,130428],{},[521,130426,130427],{"align":23944},"padding-top",[521,130429,130430],{"align":23944},"上内边距",[475,130432,130433,130436],{},[521,130434,130435],{"align":23944},"padding-bottom",[521,130437,130438],{"align":23944},"下内边距",[151,130440,130441],{"start":200},[154,130442,130443],{},"内边距会影响盒子的实际大小",[19,130445,130446],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130448,130449],{},"①内容和边框有了距离，添加了内边距",[19,130451,130452],{},"②padding影响了盒子实际大小",[19,130454,130455],{},"内边距对盒子大小的影响：",[19,130457,130458],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130460,130461],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130463,95365],{},[19,130465,130466],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[292,130468,130470],{"id":130469},"_913-外边距","9.1.3 外边距",[151,130472,130473],{},[154,130474,130475],{},"控制盒子与盒子之间的距离",[469,130477,130478,130486],{},[472,130479,130480],{},[475,130481,130482,130484],{},[478,130483,129299],{"align":23944},[478,130485,102841],{"align":23944},[516,130487,130488,130496,130504,130512],{},[475,130489,130490,130493],{},[521,130491,130492],{"align":23944},"margin-left",[521,130494,130495],{"align":23944},"左外边距",[475,130497,130498,130501],{},[521,130499,130500],{"align":23944},"margin-right",[521,130502,130503],{"align":23944},"右外边距",[475,130505,130506,130509],{},[521,130507,130508],{"align":23944},"margin-top",[521,130510,130511],{"align":23944},"上外边距",[475,130513,130514,130517],{},[521,130515,130516],{"align":23944},"margin-bottom",[521,130518,130519],{"align":23944},"下外边距",[151,130521,130522],{"start":167},[154,130523,130524],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130526,130527],{},"①盒子必须指定了宽度（width）",[19,130529,130530],{},"②盒子左右的外边距都设置为 auto",[312,130532,130534],{"className":126697,"code":130533,"language":126699,"meta":30,"style":30},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[318,130535,130536,130541,130548,130564],{"__ignoreMap":30},[321,130537,130538],{"class":323,"line":324},[321,130539,130540],{"class":390},"\u002F* margin 复合写法（同上） *\u002F\n",[321,130542,130543,130546],{"class":323,"line":167},[321,130544,130545],{"class":2169},".box",[321,130547,15779],{"class":331},[321,130549,130550,130552,130554,130556,130558,130561],{"class":323,"line":200},[321,130551,70615],{"class":380},[321,130553,51582],{"class":331},[321,130555,523],{"class":380},[321,130557,51701],{"class":380},[321,130559,130560],{"class":331},";  ",[321,130562,130563],{"class":390},"\u002F* 块级盒子水平居中 *\u002F\n",[321,130565,130566],{"class":323,"line":1401},[321,130567,1771],{"class":331},[151,130569,130570],{"start":200},[154,130571,130572],{},"外边距塌陷问题",[19,130574,130575],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[28,130577],{"style":126553,"src":130578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130580,130581],{},"解决方案：",[19,130583,130584],{},"①可以为父亲元素定义上边距",[312,130586,130587],{"className":126697,"code":130533,"language":126699,"meta":30,"style":30},[318,130588,130589,130593,130599,130613],{"__ignoreMap":30},[321,130590,130591],{"class":323,"line":324},[321,130592,130540],{"class":390},[321,130594,130595,130597],{"class":323,"line":167},[321,130596,130545],{"class":2169},[321,130598,15779],{"class":331},[321,130600,130601,130603,130605,130607,130609,130611],{"class":323,"line":200},[321,130602,70615],{"class":380},[321,130604,51582],{"class":331},[321,130606,523],{"class":380},[321,130608,51701],{"class":380},[321,130610,130560],{"class":331},[321,130612,130563],{"class":390},[321,130614,130615],{"class":323,"line":1401},[321,130616,1771],{"class":331},[19,130618,130619],{},"②可以为父亲元素定义上内边距",[19,130621,130622],{},"③可以为父亲元素添加overflow:hidden",[28,130624],{"style":126553,"src":130625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[312,130627,130628],{"className":126697,"code":130533,"language":126699,"meta":30,"style":30},[318,130629,130630,130634,130640,130654],{"__ignoreMap":30},[321,130631,130632],{"class":323,"line":324},[321,130633,130540],{"class":390},[321,130635,130636,130638],{"class":323,"line":167},[321,130637,130545],{"class":2169},[321,130639,15779],{"class":331},[321,130641,130642,130644,130646,130648,130650,130652],{"class":323,"line":200},[321,130643,70615],{"class":380},[321,130645,51582],{"class":331},[321,130647,523],{"class":380},[321,130649,51701],{"class":380},[321,130651,130560],{"class":331},[321,130653,130563],{"class":390},[321,130655,130656],{"class":323,"line":1401},[321,130657,1771],{"class":331},[28,130659],{"style":126553,"src":130660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130662,130663],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130665,130666],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[292,130668,130670],{"id":130669},"_914-清除内外边距","9.1.4 清除内外边距",[19,130672,130673],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[312,130675,130676],{"className":126697,"code":130533,"language":126699,"meta":30,"style":30},[318,130677,130678,130682,130688,130702],{"__ignoreMap":30},[321,130679,130680],{"class":323,"line":324},[321,130681,130540],{"class":390},[321,130683,130684,130686],{"class":323,"line":167},[321,130685,130545],{"class":2169},[321,130687,15779],{"class":331},[321,130689,130690,130692,130694,130696,130698,130700],{"class":323,"line":200},[321,130691,70615],{"class":380},[321,130693,51582],{"class":331},[321,130695,523],{"class":380},[321,130697,51701],{"class":380},[321,130699,130560],{"class":331},[321,130701,130563],{"class":390},[321,130703,130704],{"class":323,"line":1401},[321,130705,1771],{"class":331},[19,130707,130708],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[292,130710,130712],{"id":130711},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1339,130714,130715,130718,130721,130724,130727,130730],{},[154,130716,130717],{},"文件→打开 ：可以打开我们要测量的图片",[154,130719,130720],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[154,130722,130723],{},"右击标尺，把里面的单位改为像素",[154,130725,130726],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[154,130728,130729],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[154,130731,130732],{},"用选区拖动 可以测量大小",[28,130734],{"style":126553,"src":130735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1339,130737,130738,130741],{},[154,130739,130740],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[154,130742,130743],{},"吸管取色工具",[28,130745],{"style":126553,"src":130746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[292,130748,130750],{"id":130749},"_916-案例","9.1.6 案例",[151,130752,130753],{},[154,130754,130755],{},"小米商品",[28,130757],{"style":126553,"src":130758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[312,130760,130761],{"className":126697,"code":130533,"language":126699,"meta":30,"style":30},[318,130762,130763,130767,130773,130787],{"__ignoreMap":30},[321,130764,130765],{"class":323,"line":324},[321,130766,130540],{"class":390},[321,130768,130769,130771],{"class":323,"line":167},[321,130770,130545],{"class":2169},[321,130772,15779],{"class":331},[321,130774,130775,130777,130779,130781,130783,130785],{"class":323,"line":200},[321,130776,70615],{"class":380},[321,130778,51582],{"class":331},[321,130780,523],{"class":380},[321,130782,51701],{"class":380},[321,130784,130560],{"class":331},[321,130786,130563],{"class":390},[321,130788,130789],{"class":323,"line":1401},[321,130790,1771],{"class":331},[151,130792,130793],{"start":167},[154,130794,130795],{},"快报模块",[28,130797],{"style":126553,"src":130798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[312,130800,130802],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[318,130803,130804,130809,130824,130829],{"__ignoreMap":30},[321,130805,130806],{"class":323,"line":324},[321,130807,130808],{"class":390},"\u003C!-- HTML 代码示例 -->\n",[321,130810,130811,130813,130815,130817,130819,130822],{"class":323,"line":167},[321,130812,1242],{"class":331},[321,130814,51756],{"class":51445},[321,130816,53631],{"class":2169},[321,130818,377],{"class":331},[321,130820,130821],{"class":436},"\"example\"",[321,130823,51452],{"class":331},[321,130825,130826],{"class":323,"line":200},[321,130827,130828],{"class":331},"  示例内容\n",[321,130830,130831,130833,130835],{"class":323,"line":1401},[321,130832,51930],{"class":331},[321,130834,51756],{"class":51445},[321,130836,51452],{"class":331},[292,130838,130840],{"id":130839},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[151,130842,130843],{},[154,130844,130845],{},"圆角边框",[19,130847,130848],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[28,130850],{"style":126553,"src":130851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[312,130853,130855],{"className":126697,"code":130854,"language":126699,"meta":30,"style":30},"div {\n  border: 1px solid #ccc;\n}\n",[318,130856,130857,130863,130879],{"__ignoreMap":30},[321,130858,130859,130861],{"class":323,"line":324},[321,130860,51756],{"class":51445},[321,130862,15779],{"class":331},[321,130864,130865,130867,130869,130871,130873,130875,130877],{"class":323,"line":167},[321,130866,71041],{"class":380},[321,130868,51582],{"class":331},[321,130870,549],{"class":380},[321,130872,51637],{"class":327},[321,130874,51666],{"class":380},[321,130876,130089],{"class":380},[321,130878,1497],{"class":331},[321,130880,130881],{"class":323,"line":200},[321,130882,1771],{"class":331},[19,130884,130885],{},"解释:",[1339,130887,130888,130891,130894,130897,130900],{},[154,130889,130890],{},"参数值可以为数值或百分比的形式",[154,130892,130893],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[154,130895,130896],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[154,130898,130899],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[154,130901,130902],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[151,130904,130905],{"start":167},[154,130906,130907],{},"盒子阴影",[312,130909,130911],{"className":126697,"code":130910,"language":126699,"meta":30,"style":30},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[318,130912,130913,130919,130956],{"__ignoreMap":30},[321,130914,130915,130917],{"class":323,"line":324},[321,130916,51756],{"class":51445},[321,130918,15779],{"class":331},[321,130920,130921,130924,130926,130928,130930,130932,130934,130936,130938,130940,130942,130944,130946,130948,130950,130952,130954],{"class":323,"line":167},[321,130922,130923],{"class":380},"  box-shadow",[321,130925,51582],{"class":331},[321,130927,523],{"class":380},[321,130929,14962],{"class":380},[321,130931,51637],{"class":327},[321,130933,2244],{"class":380},[321,130935,51637],{"class":327},[321,130937,78912],{"class":380},[321,130939,332],{"class":331},[321,130941,523],{"class":380},[321,130943,12642],{"class":331},[321,130945,523],{"class":380},[321,130947,12642],{"class":331},[321,130949,523],{"class":380},[321,130951,12642],{"class":331},[321,130953,86355],{"class":380},[321,130955,2925],{"class":331},[321,130957,130958],{"class":323,"line":200},[321,130959,1771],{"class":331},[469,130961,130962,130970],{},[472,130963,130964],{},[475,130965,130966,130968],{},[478,130967,484],{"align":23944},[478,130969,27634],{"align":23944},[516,130971,130972,130980,130988,130996,131004,131012],{},[475,130973,130974,130977],{},[521,130975,130976],{"align":23944},"h-shadow",[521,130978,130979],{"align":23944},"必需,水平阴影的位置,允许负值",[475,130981,130982,130985],{},[521,130983,130984],{"align":23944},"v-shadow",[521,130986,130987],{"align":23944},"必需,垂直阴影的位置,允许负值",[475,130989,130990,130993],{},[521,130991,130992],{"align":23944},"blur",[521,130994,130995],{"align":23944},"可选,模糊距离,就是影子的虚实",[475,130997,130998,131001],{},[521,130999,131000],{"align":23944},"spread",[521,131002,131003],{"align":23944},"可选,阴影尺寸",[475,131005,131006,131009],{},[521,131007,131008],{"align":23944},"color",[521,131010,131011],{"align":23944},"可选,阴影的颜色",[475,131013,131014,131017],{},[521,131015,131016],{"align":23944},"inset",[521,131018,131019],{"align":23944},"可选,将外部阴影(outset)改为内部阴影",[151,131021,131022],{"start":200},[154,131023,131024],{},"文字阴影",[312,131026,131028],{"className":126697,"code":131027,"language":126699,"meta":30,"style":30},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[318,131029,131030,131036,131075],{"__ignoreMap":30},[321,131031,131032,131034],{"class":323,"line":324},[321,131033,19],{"class":51445},[321,131035,15779],{"class":331},[321,131037,131038,131041,131043,131045,131047,131049,131051,131053,131055,131057,131059,131061,131063,131065,131067,131069,131071,131073],{"class":323,"line":167},[321,131039,131040],{"class":380},"  text-shadow",[321,131042,51582],{"class":331},[321,131044,549],{"class":380},[321,131046,51637],{"class":327},[321,131048,25263],{"class":380},[321,131050,51637],{"class":327},[321,131052,14962],{"class":380},[321,131054,51637],{"class":327},[321,131056,78912],{"class":380},[321,131058,332],{"class":331},[321,131060,523],{"class":380},[321,131062,12642],{"class":331},[321,131064,523],{"class":380},[321,131066,12642],{"class":331},[321,131068,523],{"class":380},[321,131070,12642],{"class":331},[321,131072,100666],{"class":380},[321,131074,2925],{"class":331},[321,131076,131077],{"class":323,"line":200},[321,131078,1771],{"class":331},[469,131080,131081,131089],{},[472,131082,131083],{},[475,131084,131085,131087],{},[478,131086,484],{"align":23944},[478,131088,27634],{"align":23944},[516,131090,131091,131097,131104,131111],{},[475,131092,131093,131095],{},[521,131094,130976],{"align":23944},[521,131096,130979],{"align":23944},[475,131098,131099,131101],{},[521,131100,130984],{"align":23944},[521,131102,131103],{"align":23944},"必需,垂直阴影位置,允许负值",[475,131105,131106,131108],{},[521,131107,130992],{"align":23944},[521,131109,131110],{"align":23944},"可选,模糊的距离",[475,131112,131113,131115],{},[521,131114,131008],{"align":23944},[521,131116,131011],{"align":23944},[14,131118,131120],{"id":131119},"_92-浮动","9.2 浮动",[292,131122,131124],{"id":131123},"_921-浮动介绍","9.2.1 浮动介绍",[19,131126,131127],{},"在16.2中详细介绍",[292,131129,131131],{"id":131130},"_922-清除浮动","9.2.2 清除浮动",[151,131133,131134,131137],{},[154,131135,131136],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[154,131138,131139],{},"清除浮动的本质",[19,131141,131142],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131144,9232],{},[1339,131146,131147,131150,131153],{},[154,131148,131149],{},"如果父盒子本身有高度，则不需要清除浮动",[154,131151,131152],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[154,131154,131155],{},"父级有了高度，就不会影响下面的标准流了",[151,131157,131158],{"start":200},[154,131159,131160],{},"清除浮动样式",[312,131162,131164],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[318,131165,131166,131173,131184,131188,131195,131205],{"__ignoreMap":30},[321,131167,131168,131171],{"class":323,"line":324},[321,131169,131170],{"class":2169},".left",[321,131172,15779],{"class":331},[321,131174,131175,131178,131180,131182],{"class":323,"line":167},[321,131176,131177],{"class":380},"  float",[321,131179,51582],{"class":331},[321,131181,23944],{"class":380},[321,131183,1497],{"class":331},[321,131185,131186],{"class":323,"line":200},[321,131187,1771],{"class":331},[321,131189,131190,131193],{"class":323,"line":1401},[321,131191,131192],{"class":2169},".right",[321,131194,15779],{"class":331},[321,131196,131197,131199,131201,131203],{"class":323,"line":1407},[321,131198,131177],{"class":380},[321,131200,51582],{"class":331},[321,131202,72667],{"class":380},[321,131204,1497],{"class":331},[321,131206,131207],{"class":323,"line":1421},[321,131208,1771],{"class":331},[469,131210,131211,131219],{},[472,131212,131213],{},[475,131214,131215,131217],{},[478,131216,127161],{"align":23944},[478,131218,27634],{"align":23944},[516,131220,131221,131228,131235],{},[475,131222,131223,131225],{},[521,131224,23944],{"align":23944},[521,131226,131227],{"align":23944},"不允许左侧有浮动元素（清除左侧浮动的影响）",[475,131229,131230,131232],{},[521,131231,72667],{"align":23944},[521,131233,131234],{"align":23944},"不允许右侧有浮动元素（清除右侧浮动的影响）",[475,131236,131237,131240],{},[521,131238,131239],{"align":23944},"both",[521,131241,131242],{"align":23944},"同时清除左右侧浮动的影响",[19,131244,131245],{},"法一",[19,131247,131248],{},"额外标签法也称为隔墙法",[19,131250,131251],{},"使用方式：",[19,131253,131254],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[312,131256,131257],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},[318,131258,131259,131265,131275,131279,131285,131295],{"__ignoreMap":30},[321,131260,131261,131263],{"class":323,"line":324},[321,131262,131170],{"class":2169},[321,131264,15779],{"class":331},[321,131266,131267,131269,131271,131273],{"class":323,"line":167},[321,131268,131177],{"class":380},[321,131270,51582],{"class":331},[321,131272,23944],{"class":380},[321,131274,1497],{"class":331},[321,131276,131277],{"class":323,"line":200},[321,131278,1771],{"class":331},[321,131280,131281,131283],{"class":323,"line":1401},[321,131282,131192],{"class":2169},[321,131284,15779],{"class":331},[321,131286,131287,131289,131291,131293],{"class":323,"line":1407},[321,131288,131177],{"class":380},[321,131290,51582],{"class":331},[321,131292,72667],{"class":380},[321,131294,1497],{"class":331},[321,131296,131297],{"class":323,"line":1421},[321,131298,1771],{"class":331},[19,131300,131301],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131303,131304],{},"优点： 通俗易懂，书写方便",[19,131306,131307],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131309,131310],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131312,131313],{},"法二",[19,131315,131316],{},"父级添加overflow属性",[312,131318,131319],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},[318,131320,131321,131327,131337,131341,131347,131357],{"__ignoreMap":30},[321,131322,131323,131325],{"class":323,"line":324},[321,131324,131170],{"class":2169},[321,131326,15779],{"class":331},[321,131328,131329,131331,131333,131335],{"class":323,"line":167},[321,131330,131177],{"class":380},[321,131332,51582],{"class":331},[321,131334,23944],{"class":380},[321,131336,1497],{"class":331},[321,131338,131339],{"class":323,"line":200},[321,131340,1771],{"class":331},[321,131342,131343,131345],{"class":323,"line":1401},[321,131344,131192],{"class":2169},[321,131346,15779],{"class":331},[321,131348,131349,131351,131353,131355],{"class":323,"line":1407},[321,131350,131177],{"class":380},[321,131352,51582],{"class":331},[321,131354,72667],{"class":380},[321,131356,1497],{"class":331},[321,131358,131359],{"class":323,"line":1421},[321,131360,1771],{"class":331},[19,131362,131363],{},"overflow: hidden;",[19,131365,131366],{},"优点：代码简洁",[19,131368,131369],{},"缺点：无法显示溢出的部分",[19,131371,131372],{},"注意：是给父元素添加代码",[19,131374,131375],{},"法三",[19,131377,131378],{},"父级添加after伪元素",[19,131380,131381,131384],{},[131382,131383],"after",{}," 方式是额外标签法的升级版",[19,131386,131387],{},"使用的时候复制就可以",[312,131389,131390],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},[318,131391,131392,131398,131408,131412,131418,131428],{"__ignoreMap":30},[321,131393,131394,131396],{"class":323,"line":324},[321,131395,131170],{"class":2169},[321,131397,15779],{"class":331},[321,131399,131400,131402,131404,131406],{"class":323,"line":167},[321,131401,131177],{"class":380},[321,131403,51582],{"class":331},[321,131405,23944],{"class":380},[321,131407,1497],{"class":331},[321,131409,131410],{"class":323,"line":200},[321,131411,1771],{"class":331},[321,131413,131414,131416],{"class":323,"line":1401},[321,131415,131192],{"class":2169},[321,131417,15779],{"class":331},[321,131419,131420,131422,131424,131426],{"class":323,"line":1407},[321,131421,131177],{"class":380},[321,131423,51582],{"class":331},[321,131425,72667],{"class":380},[321,131427,1497],{"class":331},[321,131429,131430],{"class":323,"line":1421},[321,131431,1771],{"class":331},[19,131433,131434],{},"优点：没有增加标签，结构更简单",[19,131436,131437],{},"缺点：照顾低版本浏览器",[19,131439,131440],{},"代表网站： 百度、淘宝网、网易等",[19,131442,131443],{},"法四",[19,131445,131446],{},"父级添加双伪元素",[312,131448,131449],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},[318,131450,131451,131457,131467,131471,131477,131487],{"__ignoreMap":30},[321,131452,131453,131455],{"class":323,"line":324},[321,131454,131170],{"class":2169},[321,131456,15779],{"class":331},[321,131458,131459,131461,131463,131465],{"class":323,"line":167},[321,131460,131177],{"class":380},[321,131462,51582],{"class":331},[321,131464,23944],{"class":380},[321,131466,1497],{"class":331},[321,131468,131469],{"class":323,"line":200},[321,131470,1771],{"class":331},[321,131472,131473,131475],{"class":323,"line":1401},[321,131474,131192],{"class":2169},[321,131476,15779],{"class":331},[321,131478,131479,131481,131483,131485],{"class":323,"line":1407},[321,131480,131177],{"class":380},[321,131482,51582],{"class":331},[321,131484,72667],{"class":380},[321,131486,1497],{"class":331},[321,131488,131489],{"class":323,"line":1421},[321,131490,1771],{"class":331},[19,131492,131493],{},"优点：代码更简洁",[19,131495,131437],{},[19,131497,131498],{},"代表网站：小米、腾讯等",[14,131500,131502],{"id":131501},"_93-ps切图","9.3 PS切图",[292,131504,131506],{"id":131505},"_931-常见图片格式","9.3.1 常见图片格式",[469,131508,131509,131519],{},[472,131510,131511],{},[475,131512,131513,131516],{},[478,131514,131515],{"align":23944},"jpg图像格式",[478,131517,131518],{"align":23944},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[516,131520,131521,131529,131537],{},[475,131522,131523,131526],{},[521,131524,131525],{"align":23944},"gif图像格式",[521,131527,131528],{"align":23944},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[475,131530,131531,131534],{},[521,131532,131533],{"align":23944},"png图像格式",[521,131535,131536],{"align":23944},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[475,131538,131539,131542],{},[521,131540,131541],{"align":23944},"PSD图像格式",[521,131543,131544],{"align":23944},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[292,131546,131548],{"id":131547},"_932-图层切图","9.3.2 图层切图",[19,131550,131551],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131553,131554],{},"按住shift选中两个图层->图层菜单->合并图层",[292,131556,131558],{"id":131557},"_933-切片切图","9.3.3 切片切图",[1339,131560,131561,131564],{},[154,131562,131563],{},"利用切片工具手动划出",[154,131565,131566],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[292,131568,131570],{"id":131569},"_934-切图步骤","9.3.4 切图步骤",[19,131572,131573],{},"用切片工具选中：",[28,131575],{"style":126553,"src":131576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131578,131579],{},"文件 -> 导出",[28,131581],{"style":126553,"src":131582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5333,131584,131585],{},"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":30,"searchDepth":167,"depth":167,"links":131587},[131588,131597,131601],{"id":130024,"depth":167,"text":130025,"children":131589},[131590,131591,131592,131593,131594,131595,131596],{"id":130049,"depth":200,"text":130050},{"id":130340,"depth":200,"text":130341},{"id":130469,"depth":200,"text":130470},{"id":130669,"depth":200,"text":130670},{"id":130711,"depth":200,"text":130712},{"id":130749,"depth":200,"text":130750},{"id":130839,"depth":200,"text":130840},{"id":131119,"depth":167,"text":131120,"children":131598},[131599,131600],{"id":131123,"depth":200,"text":131124},{"id":131130,"depth":200,"text":131131},{"id":131501,"depth":167,"text":131502,"children":131602},[131603,131604,131605,131606],{"id":131505,"depth":200,"text":131506},{"id":131547,"depth":200,"text":131548},{"id":131557,"depth":200,"text":131558},{"id":131569,"depth":200,"text":131570},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130016,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131613,"title":131614,"body":131615,"description":23584,"extension":249,"meta":132256,"navigation":251,"path":132257,"seo":132258,"stem":132259,"__hash__":132260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131616,"toc":132244},[131617,131620,131624,131650,131684,131688,131692,131695,131737,131744,131754,131762,131764,131767,131770,131773,131780,131794,131798,131801,131830,131834,131837,131851,131855,131858,131886,131890,131893,131919,131923,131928,131961,131966,131994,131998,132015,132061,132066,132110,132127,132234,132242],[10,131618,131614],{"id":131619},"_10-css规范与学成在线案例",[14,131621,131623],{"id":131622},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[151,131625,131626,131632,131638,131644],{},[154,131627,131628,131631],{},[481,131629,131630],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[154,131633,131634,131637],{},[481,131635,131636],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[154,131639,131640,131643],{},[481,131641,131642],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[154,131645,131646,131649],{},[481,131647,131648],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[312,131651,131652],{"className":126697,"code":130061,"language":126699,"meta":30,"style":30},[318,131653,131654,131658,131664,131680],{"__ignoreMap":30},[321,131655,131656],{"class":323,"line":324},[321,131657,130068],{"class":390},[321,131659,131660,131662],{"class":323,"line":167},[321,131661,51756],{"class":51445},[321,131663,15779],{"class":331},[321,131665,131666,131668,131670,131672,131674,131676,131678],{"class":323,"line":200},[321,131667,71041],{"class":380},[321,131669,51582],{"class":331},[321,131671,549],{"class":380},[321,131673,51637],{"class":327},[321,131675,51666],{"class":380},[321,131677,130089],{"class":380},[321,131679,1497],{"class":331},[321,131681,131682],{"class":323,"line":1401},[321,131683,1771],{"class":331},[14,131685,131687],{"id":131686},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[292,131689,131691],{"id":131690},"_1021-header头部制作","10.2.1 header头部制作",[28,131693],{"style":126553,"src":131694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1339,131696,131697,131704,131711,131717,131724,131731],{},[154,131698,131699,131700,131703],{},"1号是版心盒子 ",[481,131701,131702],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[154,131705,131706,131707,131710],{},"版心盒子 里面包含 2号盒子 ",[481,131708,131709],{},"logo"," 图标",[154,131712,131713,131714,131716],{},"版心盒子 里面包含 3号盒子 ",[481,131715,53858],{}," 导航栏",[154,131718,131719,131720,131723],{},"版心盒子 里面包含 4号盒子 ",[481,131721,131722],{},"search"," 搜索框",[154,131725,131726,131727,131730],{},"版心盒子 里面包含 5号盒子 ",[481,131728,131729],{},"user"," 个人信息",[154,131732,131733,131734],{},"注意，要求里面的 ",[481,131735,131736],{},"4个子盒子 必须都浮动",[151,131738,131739],{},[154,131740,131741],{},[481,131742,131743],{},"导航栏注意点:",[19,131745,131746,131747,131750,131751],{},"实际开发中， ",[481,131748,131749],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[481,131752,131753],{},"用 li 包含链接(li+a)的做法",[1339,131755,131756,131759],{},[154,131757,131758],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[154,131760,131761],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131763,9232],{},[19,131765,131766],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131768,131769],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131771,131772],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[151,131774,131775],{"start":167},[154,131776,131777],{},[481,131778,131779],{},"4号盒子search的细节：",[1339,131781,131782,131785,131788],{},[154,131783,131784],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[154,131786,131787],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[154,131789,131790,131793],{},[318,131791,131792],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[292,131795,131797],{"id":131796},"_1022-banner制作","10.2.2 banner制作",[28,131799],{"style":126553,"src":131800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1339,131802,131803,131810,131816,131823],{},[154,131804,131805,131806,131809],{},"1号盒子是通栏的大盒子 ",[481,131807,131808],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[154,131811,131812,131813,131815],{},"2号盒子是版心 ",[481,131814,1127],{}," ， 要水平居中对齐",[154,131817,131818,131819,131822],{},"3号盒子版心内，左对齐 ",[481,131820,131821],{},"subnav"," 侧导航栏",[154,131824,131825,131826,131829],{},"4号盒子版心内，右对齐 ",[481,131827,131828],{},"course"," 课程",[292,131831,131833],{"id":131832},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[28,131835],{"style":126553,"src":131836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1339,131838,131839,131842,131845,131848],{},[154,131840,131841],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[154,131843,131844],{},"1号盒子是标题 H3 左侧浮动",[154,131846,131847],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[154,131849,131850],{},"3号盒子 右浮动 mod 修改",[292,131852,131854],{"id":131853},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[28,131856],{"style":126553,"src":131857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1339,131859,131860,131866,131873,131880,131883],{},[154,131861,131862,131863,131865],{},"1号盒子为最大的盒子 ",[481,131864,53859],{}," 版心水平居中对齐",[154,131867,131868,131869,131872],{},"2号盒子为上面部分 ",[481,131870,131871],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[154,131874,131875,131876,131879],{},"3号盒子为底下部分 ",[481,131877,131878],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[154,131881,131882],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[154,131884,131885],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[292,131887,131889],{"id":131888},"_1025-底部模块制作","10.2.5 底部模块制作",[28,131891],{"style":126553,"src":131892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1339,131894,131895,131902,131905,131912],{},[154,131896,131897,131898,131901],{},"1号盒子通栏大盒子 底部 ",[481,131899,131900],{},"footer"," 给高度 底色是白色",[154,131903,131904],{},"2号盒子版心水平居中",[154,131906,131907,131908,131911],{},"3号盒子版权 ",[481,131909,131910],{},"copyright"," 左对齐",[154,131913,131914,131915,131918],{},"4号盒子 链接组 ",[481,131916,131917],{},"links"," 右对齐",[292,131920,131922],{"id":131921},"_1026-代码模块","10.2.6 代码模块",[151,131924,131925],{},[154,131926,131927],{},"html部分",[312,131929,131931],{"className":127444,"code":131930,"language":127446,"meta":30,"style":30},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[318,131932,131933],{"__ignoreMap":30},[321,131934,131935,131937,131939,131941,131943,131946,131949,131951,131954,131957,131959],{"class":323,"line":324},[321,131936,1242],{"class":331},[321,131938,570],{"class":51445},[321,131940,61202],{"class":2169},[321,131942,377],{"class":331},[321,131944,131945],{"class":436},"\"https:\u002F\u002Fexample.com\"",[321,131947,131948],{"class":2169}," target",[321,131950,377],{"class":331},[321,131952,131953],{"class":436},"\"_blank\"",[321,131955,131956],{"class":331},">链接文字\u003C\u002F",[321,131958,570],{"class":51445},[321,131960,51452],{"class":331},[151,131962,131963],{"start":167},[154,131964,131965],{},"css部分",[312,131967,131968],{"className":127444,"code":131930,"language":127446,"meta":30,"style":30},[318,131969,131970],{"__ignoreMap":30},[321,131971,131972,131974,131976,131978,131980,131982,131984,131986,131988,131990,131992],{"class":323,"line":324},[321,131973,1242],{"class":331},[321,131975,570],{"class":51445},[321,131977,61202],{"class":2169},[321,131979,377],{"class":331},[321,131981,131945],{"class":436},[321,131983,131948],{"class":2169},[321,131985,377],{"class":331},[321,131987,131953],{"class":436},[321,131989,131956],{"class":331},[321,131991,570],{"class":51445},[321,131993,51452],{"class":331},[292,131995,131997],{"id":131996},"_1027-收获","10.2.7 收获",[151,131999,132000,132003,132006,132009,132012],{},[154,132001,132002],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[154,132004,132005],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[154,132007,132008],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[154,132010,132011],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[154,132013,132014],{},"遗忘代码",[312,132016,132018],{"className":126697,"code":132017,"language":126699,"meta":30,"style":30},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[318,132019,132020,132042,132047,132057],{"__ignoreMap":30},[321,132021,132022,132024,132026,132028,132030,132032,132034,132036,132038,132040],{"class":323,"line":324},[321,132023,51756],{"class":51445},[321,132025,12642],{"class":331},[321,132027,19],{"class":51445},[321,132029,12642],{"class":331},[321,132031,10],{"class":51445},[321,132033,12642],{"class":331},[321,132035,1339],{"class":51445},[321,132037,12642],{"class":331},[321,132039,154],{"class":51445},[321,132041,15779],{"class":331},[321,132043,132044],{"class":323,"line":167},[321,132045,132046],{"class":390},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[321,132048,132049,132051,132053,132055],{"class":323,"line":200},[321,132050,128313],{"class":380},[321,132052,51582],{"class":331},[321,132054,61014],{"class":380},[321,132056,1497],{"class":331},[321,132058,132059],{"class":323,"line":1401},[321,132060,1771],{"class":331},[151,132062,132063],{"start":1421},[154,132064,132065],{},"html引css的程序",[312,132067,132068],{"className":126697,"code":132017,"language":126699,"meta":30,"style":30},[318,132069,132070,132092,132096,132106],{"__ignoreMap":30},[321,132071,132072,132074,132076,132078,132080,132082,132084,132086,132088,132090],{"class":323,"line":324},[321,132073,51756],{"class":51445},[321,132075,12642],{"class":331},[321,132077,19],{"class":51445},[321,132079,12642],{"class":331},[321,132081,10],{"class":51445},[321,132083,12642],{"class":331},[321,132085,1339],{"class":51445},[321,132087,12642],{"class":331},[321,132089,154],{"class":51445},[321,132091,15779],{"class":331},[321,132093,132094],{"class":323,"line":167},[321,132095,132046],{"class":390},[321,132097,132098,132100,132102,132104],{"class":323,"line":200},[321,132099,128313],{"class":380},[321,132101,51582],{"class":331},[321,132103,61014],{"class":380},[321,132105,1497],{"class":331},[321,132107,132108],{"class":323,"line":1401},[321,132109,1771],{"class":331},[151,132111,132112,132115,132118,132121,132124],{"start":1427},[154,132113,132114],{},"浮动的盒子不会有外边距合并问题",[154,132116,132117],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[154,132119,132120],{},"ctrl+g快速定位行；shift+alt多个光标",[154,132122,132123],{},"学习上方各个模块的选择器起名方法，以后就这样用",[154,132125,132126],{},"在写选择器时尽量写全一些，例如",[312,132128,132130],{"className":126697,"code":132129,"language":126699,"meta":30,"style":30},"\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",[318,132131,132132,132137,132153,132158,132173,132178,132193,132198,132213,132218],{"__ignoreMap":30},[321,132133,132134],{"class":323,"line":324},[321,132135,132136],{"class":390},"\u002F* 静态定位（默认） *\u002F\n",[321,132138,132139,132142,132144,132146,132148,132151],{"class":323,"line":167},[321,132140,132141],{"class":2169},".static",[321,132143,79952],{"class":331},[321,132145,129057],{"class":380},[321,132147,51582],{"class":331},[321,132149,132150],{"class":380},"static",[321,132152,129627],{"class":331},[321,132154,132155],{"class":323,"line":200},[321,132156,132157],{"class":390},"\u002F* 相对定位 *\u002F\n",[321,132159,132160,132163,132165,132167,132169,132171],{"class":323,"line":1401},[321,132161,132162],{"class":2169},".relative",[321,132164,79952],{"class":331},[321,132166,129057],{"class":380},[321,132168,51582],{"class":331},[321,132170,54909],{"class":380},[321,132172,129627],{"class":331},[321,132174,132175],{"class":323,"line":1407},[321,132176,132177],{"class":390},"\u002F* 绝对定位 *\u002F\n",[321,132179,132180,132183,132185,132187,132189,132191],{"class":323,"line":1421},[321,132181,132182],{"class":2169},".absolute",[321,132184,79952],{"class":331},[321,132186,129057],{"class":380},[321,132188,51582],{"class":331},[321,132190,54976],{"class":380},[321,132192,129627],{"class":331},[321,132194,132195],{"class":323,"line":1427},[321,132196,132197],{"class":390},"\u002F* 固定定位 *\u002F\n",[321,132199,132200,132203,132205,132207,132209,132211],{"class":323,"line":1518},[321,132201,132202],{"class":2169},".fixed",[321,132204,79952],{"class":331},[321,132206,129057],{"class":380},[321,132208,51582],{"class":331},[321,132210,86378],{"class":380},[321,132212,129627],{"class":331},[321,132214,132215],{"class":323,"line":1524},[321,132216,132217],{"class":390},"\u002F* 粘性定位 *\u002F\n",[321,132219,132220,132223,132225,132227,132229,132232],{"class":323,"line":1536},[321,132221,132222],{"class":2169},".sticky",[321,132224,79952],{"class":331},[321,132226,129057],{"class":380},[321,132228,51582],{"class":331},[321,132230,132231],{"class":380},"sticky",[321,132233,129627],{"class":331},[151,132235,132236,132239],{"start":1823},[154,132237,132238],{},"一定要用好注释",[154,132240,132241],{},"浮动的盒子不会有外边距合并的问题",[5333,132243,131585],{},{"title":30,"searchDepth":167,"depth":167,"links":132245},[132246,132247],{"id":131622,"depth":167,"text":131623},{"id":131686,"depth":167,"text":131687,"children":132248},[132249,132250,132251,132252,132253,132254,132255],{"id":131690,"depth":200,"text":131691},{"id":131796,"depth":200,"text":131797},{"id":131832,"depth":200,"text":131833},{"id":131853,"depth":200,"text":131854},{"id":131888,"depth":200,"text":131889},{"id":131921,"depth":200,"text":131922},{"id":131996,"depth":200,"text":131997},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131614,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132262,"title":132263,"body":132264,"description":23584,"extension":249,"meta":133750,"navigation":251,"path":133751,"seo":133752,"stem":133753,"__hash__":133754},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132265,"toc":133742},[132266,132269,132273,132277,132288,132292,132309,132353,132386,132389,132406,132409,132412,132456,132460,132464,132467,132470,132474,132477,132488,132551,132592,132595,132610,132664,132672,132675,132686,132740,132766,132769,132782,132836,132868,132922,132945,132999,133002,133005,133012,133066,133087,133141,133144,133147,133232,133240,133297,133320,133324,133327,133345,133349,133368,133422,133460,133464,133467,133470,133492,133496,133504,133507,133512,133523,133526,133530,133544,133588,133591,133595,133598,133603,133629,133634,133711,133714,133718,133721,133724,133727,133730,133733,133736,133739],[10,132267,132263],{"id":132268},"_11-传统布局与定位体系",[14,132270,132272],{"id":132271},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[292,132274,132276],{"id":132275},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1339,132278,132279,132282,132285],{},[154,132280,132281],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[154,132283,132284],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[154,132286,132287],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[292,132289,132291],{"id":132290},"_1112-浮动","11.1.2 浮动",[1339,132293,132294,132297,132300,132303,132306],{},[154,132295,132296],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[154,132298,132299],{},"浮动可以改变元素标签默认的排列方式",[154,132301,132302],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[154,132304,132305],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[154,132307,132308],{},"在使用行内块转换时盒子之间是有空隙的",[312,132310,132311],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},[318,132312,132313,132319,132329,132333,132339,132349],{"__ignoreMap":30},[321,132314,132315,132317],{"class":323,"line":324},[321,132316,131170],{"class":2169},[321,132318,15779],{"class":331},[321,132320,132321,132323,132325,132327],{"class":323,"line":167},[321,132322,131177],{"class":380},[321,132324,51582],{"class":331},[321,132326,23944],{"class":380},[321,132328,1497],{"class":331},[321,132330,132331],{"class":323,"line":200},[321,132332,1771],{"class":331},[321,132334,132335,132337],{"class":323,"line":1401},[321,132336,131192],{"class":2169},[321,132338,15779],{"class":331},[321,132340,132341,132343,132345,132347],{"class":323,"line":1407},[321,132342,131177],{"class":380},[321,132344,51582],{"class":331},[321,132346,72667],{"class":380},[321,132348,1497],{"class":331},[321,132350,132351],{"class":323,"line":1421},[321,132352,1771],{"class":331},[469,132354,132355,132363],{},[472,132356,132357],{},[475,132358,132359,132361],{},[478,132360,127161],{"align":23944},[478,132362,27634],{"align":23944},[516,132364,132365,132372,132379],{},[475,132366,132367,132369],{},[521,132368,54882],{"align":23944},[521,132370,132371],{"align":23944},"元素不浮动（默认值）",[475,132373,132374,132376],{},[521,132375,23944],{"align":23944},[521,132377,132378],{"align":23944},"元素向左浮动",[475,132380,132381,132383],{},[521,132382,72667],{"align":23944},[521,132384,132385],{"align":23944},"元素向右浮动",[19,132387,132388],{},"浮动重点：",[1339,132390,132391,132394,132397,132400,132403],{},[154,132392,132393],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[154,132395,132396],{},"浮动的元素会一行内显示并且元素顶部对齐",[154,132398,132399],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[154,132401,132402],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[154,132404,132405],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132407,132408],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132410,132411],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[312,132413,132414],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},[318,132415,132416,132422,132432,132436,132442,132452],{"__ignoreMap":30},[321,132417,132418,132420],{"class":323,"line":324},[321,132419,131170],{"class":2169},[321,132421,15779],{"class":331},[321,132423,132424,132426,132428,132430],{"class":323,"line":167},[321,132425,131177],{"class":380},[321,132427,51582],{"class":331},[321,132429,23944],{"class":380},[321,132431,1497],{"class":331},[321,132433,132434],{"class":323,"line":200},[321,132435,1771],{"class":331},[321,132437,132438,132440],{"class":323,"line":1401},[321,132439,131192],{"class":2169},[321,132441,15779],{"class":331},[321,132443,132444,132446,132448,132450],{"class":323,"line":1407},[321,132445,131177],{"class":380},[321,132447,51582],{"class":331},[321,132449,72667],{"class":380},[321,132451,1497],{"class":331},[321,132453,132454],{"class":323,"line":1421},[321,132455,1771],{"class":331},[292,132457,132459],{"id":132458},"_1113-定位","11.1.3 定位",[22205,132461,132463],{"id":132462},"_11131-使用场景","11.1.3.1 使用场景",[19,132465,132466],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132468,132469],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22205,132471,132473],{"id":132472},"_11132-定位组成","11.1.3.2 定位组成",[19,132475,132476],{},"定位 = 定位模式 + 边偏移",[151,132478,132479],{},[154,132480,132481,132484,132485],{},[481,132482,132483],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[481,132486,132487],{},"定位模式",[312,132489,132491],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[318,132492,132493,132499,132513,132530,132547],{"__ignoreMap":30},[321,132494,132495,132497],{"class":323,"line":324},[321,132496,130545],{"class":2169},[321,132498,15779],{"class":331},[321,132500,132501,132504,132506,132508,132510],{"class":323,"line":167},[321,132502,132503],{"class":380},"  position",[321,132505,51582],{"class":331},[321,132507,54909],{"class":380},[321,132509,130560],{"class":331},[321,132511,132512],{"class":390},"\u002F* 定位模式 *\u002F\n",[321,132514,132515,132518,132520,132522,132524,132527],{"class":323,"line":200},[321,132516,132517],{"class":380},"  top",[321,132519,51582],{"class":331},[321,132521,778],{"class":380},[321,132523,51637],{"class":327},[321,132525,132526],{"class":331},";           ",[321,132528,132529],{"class":390},"\u002F* 边偏移：上 *\u002F\n",[321,132531,132532,132535,132537,132539,132541,132544],{"class":323,"line":1401},[321,132533,132534],{"class":380},"  left",[321,132536,51582],{"class":331},[321,132538,1032],{"class":380},[321,132540,51637],{"class":327},[321,132542,132543],{"class":331},";          ",[321,132545,132546],{"class":390},"\u002F* 边偏移：左 *\u002F\n",[321,132548,132549],{"class":323,"line":1407},[321,132550,1771],{"class":331},[469,132552,132553,132562],{},[472,132554,132555],{},[475,132556,132557,132559],{},[478,132558,484],{"align":23944},[478,132560,132561],{"align":23944},"语义",[516,132563,132564,132571,132578,132585],{},[475,132565,132566,132568],{},[521,132567,132150],{"align":23944},[521,132569,132570],{"align":23944},"静态定位",[475,132572,132573,132575],{},[521,132574,54909],{"align":23944},[521,132576,132577],{"align":23944},"相对定位",[475,132579,132580,132582],{},[521,132581,54976],{"align":23944},[521,132583,132584],{"align":23944},"绝对定位",[475,132586,132587,132589],{},[521,132588,86378],{"align":23944},[521,132590,132591],{"align":23944},"固定定位",[19,132593,132594],{},"（1）静态定位：",[1339,132596,132597,132608],{},[154,132598,132599,132600,132603,132604,132607],{},"静态定位是元素的 ",[481,132601,132602],{},"默认定位方式"," ， ",[481,132605,132606],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[154,132609,5388],{},[312,132611,132612],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},[318,132613,132614,132620,132632,132646,132660],{"__ignoreMap":30},[321,132615,132616,132618],{"class":323,"line":324},[321,132617,130545],{"class":2169},[321,132619,15779],{"class":331},[321,132621,132622,132624,132626,132628,132630],{"class":323,"line":167},[321,132623,132503],{"class":380},[321,132625,51582],{"class":331},[321,132627,54909],{"class":380},[321,132629,130560],{"class":331},[321,132631,132512],{"class":390},[321,132633,132634,132636,132638,132640,132642,132644],{"class":323,"line":200},[321,132635,132517],{"class":380},[321,132637,51582],{"class":331},[321,132639,778],{"class":380},[321,132641,51637],{"class":327},[321,132643,132526],{"class":331},[321,132645,132529],{"class":390},[321,132647,132648,132650,132652,132654,132656,132658],{"class":323,"line":1401},[321,132649,132534],{"class":380},[321,132651,51582],{"class":331},[321,132653,1032],{"class":380},[321,132655,51637],{"class":327},[321,132657,132543],{"class":331},[321,132659,132546],{"class":390},[321,132661,132662],{"class":323,"line":1407},[321,132663,1771],{"class":331},[1339,132665,132666,132669],{},[154,132667,132668],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[154,132670,132671],{},"静态定位在布局时我们几乎不用的",[19,132673,132674],{},"（2）相对定位",[1339,132676,132677,132684],{},[154,132678,132679,132680,132683],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[481,132681,132682],{},"原来的位置"," 来说的（自恋型）",[154,132685,5388],{},[312,132687,132688],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},[318,132689,132690,132696,132708,132722,132736],{"__ignoreMap":30},[321,132691,132692,132694],{"class":323,"line":324},[321,132693,130545],{"class":2169},[321,132695,15779],{"class":331},[321,132697,132698,132700,132702,132704,132706],{"class":323,"line":167},[321,132699,132503],{"class":380},[321,132701,51582],{"class":331},[321,132703,54909],{"class":380},[321,132705,130560],{"class":331},[321,132707,132512],{"class":390},[321,132709,132710,132712,132714,132716,132718,132720],{"class":323,"line":200},[321,132711,132517],{"class":380},[321,132713,51582],{"class":331},[321,132715,778],{"class":380},[321,132717,51637],{"class":327},[321,132719,132526],{"class":331},[321,132721,132529],{"class":390},[321,132723,132724,132726,132728,132730,132732,132734],{"class":323,"line":1401},[321,132725,132534],{"class":380},[321,132727,51582],{"class":331},[321,132729,1032],{"class":380},[321,132731,51637],{"class":327},[321,132733,132543],{"class":331},[321,132735,132546],{"class":390},[321,132737,132738],{"class":323,"line":1407},[321,132739,1771],{"class":331},[1339,132741,132742],{},[154,132743,132744,132745,132747,132748,132750,132751,132754,132755,132758,132759,132761,132762,132765],{},"相对定位的特点：",[53861,132746],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53861,132749],{},"  ② ",[481,132752,132753],{},"原来"," 在标准流的 ",[481,132756,132757],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53861,132760],{},"  ③因此， ",[481,132763,132764],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132767,132768],{},"（3）绝对定位",[1339,132770,132771,132780],{},[154,132772,132773,132775,132776,132779],{},[481,132774,132584],{}," 是元素在移动位置的时候，是相对于它 ",[481,132777,132778],{},"祖先元素"," 来说的（拼爹型）",[154,132781,5388],{},[312,132783,132784],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},[318,132785,132786,132792,132804,132818,132832],{"__ignoreMap":30},[321,132787,132788,132790],{"class":323,"line":324},[321,132789,130545],{"class":2169},[321,132791,15779],{"class":331},[321,132793,132794,132796,132798,132800,132802],{"class":323,"line":167},[321,132795,132503],{"class":380},[321,132797,51582],{"class":331},[321,132799,54909],{"class":380},[321,132801,130560],{"class":331},[321,132803,132512],{"class":390},[321,132805,132806,132808,132810,132812,132814,132816],{"class":323,"line":200},[321,132807,132517],{"class":380},[321,132809,51582],{"class":331},[321,132811,778],{"class":380},[321,132813,51637],{"class":327},[321,132815,132526],{"class":331},[321,132817,132529],{"class":390},[321,132819,132820,132822,132824,132826,132828,132830],{"class":323,"line":1401},[321,132821,132534],{"class":380},[321,132823,51582],{"class":331},[321,132825,1032],{"class":380},[321,132827,51637],{"class":327},[321,132829,132543],{"class":331},[321,132831,132546],{"class":390},[321,132833,132834],{"class":323,"line":1407},[321,132835,1771],{"class":331},[1339,132837,132838,132853,132862,132865],{},[154,132839,132840,132841,132843,132844,132846,132847,132849,132850,132852],{},"绝对定位的特点：",[53861,132842],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53861,132845],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53861,132848],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53861,132851],{},"  (4)固定定位",[154,132854,132855,132857,132858,132861],{},[481,132856,132591],{}," 是元素 ",[481,132859,132860],{},"固定于浏览器可视区的位置"," 。（认死理型）",[154,132863,132864],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[154,132866,132867],{},"语法:",[312,132869,132870],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},[318,132871,132872,132878,132890,132904,132918],{"__ignoreMap":30},[321,132873,132874,132876],{"class":323,"line":324},[321,132875,130545],{"class":2169},[321,132877,15779],{"class":331},[321,132879,132880,132882,132884,132886,132888],{"class":323,"line":167},[321,132881,132503],{"class":380},[321,132883,51582],{"class":331},[321,132885,54909],{"class":380},[321,132887,130560],{"class":331},[321,132889,132512],{"class":390},[321,132891,132892,132894,132896,132898,132900,132902],{"class":323,"line":200},[321,132893,132517],{"class":380},[321,132895,51582],{"class":331},[321,132897,778],{"class":380},[321,132899,51637],{"class":327},[321,132901,132526],{"class":331},[321,132903,132529],{"class":390},[321,132905,132906,132908,132910,132912,132914,132916],{"class":323,"line":1401},[321,132907,132534],{"class":380},[321,132909,51582],{"class":331},[321,132911,1032],{"class":380},[321,132913,51637],{"class":327},[321,132915,132543],{"class":331},[321,132917,132546],{"class":390},[321,132919,132920],{"class":323,"line":1407},[321,132921,1771],{"class":331},[1339,132923,132924,132933],{},[154,132925,132926,132927,132929,132930,132932],{},"特点:",[53861,132928],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53861,132931],{},"  ②固定定位不再占有原先的位置,完全脱标",[154,132934,132935,132936,132938,132939,132941,132942,132944],{},"固定在版心位置的方法:",[53861,132937],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53861,132940],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53861,132943],{},"  实例：",[312,132946,132947],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},[318,132948,132949,132955,132967,132981,132995],{"__ignoreMap":30},[321,132950,132951,132953],{"class":323,"line":324},[321,132952,130545],{"class":2169},[321,132954,15779],{"class":331},[321,132956,132957,132959,132961,132963,132965],{"class":323,"line":167},[321,132958,132503],{"class":380},[321,132960,51582],{"class":331},[321,132962,54909],{"class":380},[321,132964,130560],{"class":331},[321,132966,132512],{"class":390},[321,132968,132969,132971,132973,132975,132977,132979],{"class":323,"line":200},[321,132970,132517],{"class":380},[321,132972,51582],{"class":331},[321,132974,778],{"class":380},[321,132976,51637],{"class":327},[321,132978,132526],{"class":331},[321,132980,132529],{"class":390},[321,132982,132983,132985,132987,132989,132991,132993],{"class":323,"line":1401},[321,132984,132534],{"class":380},[321,132986,51582],{"class":331},[321,132988,1032],{"class":380},[321,132990,51637],{"class":327},[321,132992,132543],{"class":331},[321,132994,132546],{"class":390},[321,132996,132997],{"class":323,"line":1407},[321,132998,1771],{"class":331},[28,133000],{"style":126553,"src":133001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133003,133004],{},"(5)粘性定位",[1339,133006,133007,133010],{},[154,133008,133009],{},"粘性定位可以被认为是相对定位和固定定位的混合",[154,133011,5388],{},[312,133013,133014],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},[318,133015,133016,133022,133034,133048,133062],{"__ignoreMap":30},[321,133017,133018,133020],{"class":323,"line":324},[321,133019,130545],{"class":2169},[321,133021,15779],{"class":331},[321,133023,133024,133026,133028,133030,133032],{"class":323,"line":167},[321,133025,132503],{"class":380},[321,133027,51582],{"class":331},[321,133029,54909],{"class":380},[321,133031,130560],{"class":331},[321,133033,132512],{"class":390},[321,133035,133036,133038,133040,133042,133044,133046],{"class":323,"line":200},[321,133037,132517],{"class":380},[321,133039,51582],{"class":331},[321,133041,778],{"class":380},[321,133043,51637],{"class":327},[321,133045,132526],{"class":331},[321,133047,132529],{"class":390},[321,133049,133050,133052,133054,133056,133058,133060],{"class":323,"line":1401},[321,133051,132534],{"class":380},[321,133053,51582],{"class":331},[321,133055,1032],{"class":380},[321,133057,51637],{"class":327},[321,133059,132543],{"class":331},[321,133061,132546],{"class":390},[321,133063,133064],{"class":323,"line":1407},[321,133065,1771],{"class":331},[1339,133067,133068],{},[154,133069,133070,133071,133073,133074,133076,133077,133079,133080,133083,133084,133086],{},"粘性定位的特点：",[53861,133072],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53861,133075],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53861,133078],{},"  ③必须添加 top 、left、right、bottom ",[481,133081,133082],{},"其中一个"," 才有效",[53861,133085],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[312,133088,133089],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},[318,133090,133091,133097,133109,133123,133137],{"__ignoreMap":30},[321,133092,133093,133095],{"class":323,"line":324},[321,133094,130545],{"class":2169},[321,133096,15779],{"class":331},[321,133098,133099,133101,133103,133105,133107],{"class":323,"line":167},[321,133100,132503],{"class":380},[321,133102,51582],{"class":331},[321,133104,54909],{"class":380},[321,133106,130560],{"class":331},[321,133108,132512],{"class":390},[321,133110,133111,133113,133115,133117,133119,133121],{"class":323,"line":200},[321,133112,132517],{"class":380},[321,133114,51582],{"class":331},[321,133116,778],{"class":380},[321,133118,51637],{"class":327},[321,133120,132526],{"class":331},[321,133122,132529],{"class":390},[321,133124,133125,133127,133129,133131,133133,133135],{"class":323,"line":1401},[321,133126,132534],{"class":380},[321,133128,51582],{"class":331},[321,133130,1032],{"class":380},[321,133132,51637],{"class":327},[321,133134,132543],{"class":331},[321,133136,132546],{"class":390},[321,133138,133139],{"class":323,"line":1407},[321,133140,1771],{"class":331},[28,133142],{"style":126553,"src":133143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133145,133146],{},"(6)总结",[469,133148,133149,133164],{},[472,133150,133151],{},[475,133152,133153,133155,133158,133161],{},[478,133154,132487],{"align":23944},[478,133156,133157],{"align":23944},"是否脱标",[478,133159,133160],{"align":23944},"移动位置",[478,133162,133163],{"align":23944},"是否常用",[516,133165,133166,133179,133193,133207,133220],{},[475,133167,133168,133171,133173,133176],{},[521,133169,133170],{"align":23944},"Static 静态定位",[521,133172,104823],{"align":23944},[521,133174,133175],{"align":23944},"不能使用边偏移",[521,133177,133178],{"align":23944},"很少",[475,133180,133181,133184,133187,133190],{},[521,133182,133183],{"align":23944},"Relative 相对定位",[521,133185,133186],{"align":23944},"否(占有位置)",[521,133188,133189],{"align":23944},"相对于自身位置移动",[521,133191,133192],{"align":23944},"基本单独使用",[475,133194,133195,133198,133201,133204],{},[521,133196,133197],{"align":23944},"Absolute 绝对定位",[521,133199,133200],{"align":23944},"是(不占有位置)",[521,133202,133203],{"align":23944},"带有定位的父级",[521,133205,133206],{"align":23944},"要和定位父级元素搭配使用",[475,133208,133209,133212,133214,133217],{},[521,133210,133211],{"align":23944},"Fixed 固定定位",[521,133213,133200],{"align":23944},[521,133215,133216],{"align":23944},"浏览器可视区",[521,133218,133219],{"align":23944},"单独使用,不需要父级",[475,133221,133222,133225,133227,133229],{},[521,133223,133224],{"align":23944},"Sticky 粘性定位",[521,133226,133186],{"align":23944},[521,133228,133216],{"align":23944},[521,133230,133231],{"align":23944},"当前阶段少",[151,133233,133234],{"start":167},[154,133235,133236,133239],{},[481,133237,133238],{},"边偏移"," 则决定了该元素的最终位置",[469,133241,133242,133253],{},[472,133243,133244],{},[475,133245,133246,133249,133251],{},[478,133247,133248],{"align":23944},"边偏移属性",[478,133250,27637],{"align":23944},[478,133252,27634],{"align":23944},[516,133254,133255,133266,133277,133287],{},[475,133256,133257,133260,133263],{},[521,133258,133259],{"align":23944},"top",[521,133261,133262],{"align":23944},"top: 80px;",[521,133264,133265],{"align":23944},"顶端偏移量，定义元素相对于父元素上边线的距离",[475,133267,133268,133271,133274],{},[521,133269,133270],{"align":23944},"bottom",[521,133272,133273],{"align":23944},"bottom: 80px ;",[521,133275,133276],{"align":23944},"底部偏移量，定义元素相对于其父元素下边线的距离",[475,133278,133279,133281,133284],{},[521,133280,23944],{"align":23944},[521,133282,133283],{"align":23944},"left: 80px ;",[521,133285,133286],{"align":23944},"左侧偏移量，定义元素相对于其父元素左边线的距离",[475,133288,133289,133291,133294],{},[521,133290,72667],{"align":23944},[521,133292,133293],{"align":23944},"right: 80px ;",[521,133295,133296],{"align":23944},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1339,133298,133299],{},[154,133300,9232,133301,133303,133304,133306,133307,133309,133310,133313,133314,133316,133317,133319],{},[53861,133302],{},"  ① ",[481,133305,133238],{}," 需要和 ",[481,133308,132487],{}," 联合使用， ",[481,133311,133312],{},"单独使用无效"," ；",[53861,133315],{},"  ②top和bottom不要同时使用",[53861,133318],{},"  ③left和right不要同时使用",[22205,133321,133323],{"id":133322},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133325,133326],{},"子级是绝对定位的话，父级要用相对定位",[1339,133328,133329,133332,133335,133338],{},[154,133330,133331],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[154,133333,133334],{},"父盒子需要加定位限制子盒子在父盒子内显示",[154,133336,133337],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[154,133339,133340,133341,133344],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[481,133342,133343],{},"子绝父绝"," 也会遇到",[22205,133346,133348],{"id":133347},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1339,133350,133351,133366],{},[154,133352,133353,133354,133357,133358,133361,133362,133365],{},"在使用 ",[481,133355,133356],{},"定位"," 布局时，可能会 ",[481,133359,133360],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[481,133363,133364],{},"z-index"," 来控制盒子的前后次序 (z轴)",[154,133367,5388],{},[312,133369,133370],{"className":126697,"code":132490,"language":126699,"meta":30,"style":30},[318,133371,133372,133378,133390,133404,133418],{"__ignoreMap":30},[321,133373,133374,133376],{"class":323,"line":324},[321,133375,130545],{"class":2169},[321,133377,15779],{"class":331},[321,133379,133380,133382,133384,133386,133388],{"class":323,"line":167},[321,133381,132503],{"class":380},[321,133383,51582],{"class":331},[321,133385,54909],{"class":380},[321,133387,130560],{"class":331},[321,133389,132512],{"class":390},[321,133391,133392,133394,133396,133398,133400,133402],{"class":323,"line":200},[321,133393,132517],{"class":380},[321,133395,51582],{"class":331},[321,133397,778],{"class":380},[321,133399,51637],{"class":327},[321,133401,132526],{"class":331},[321,133403,132529],{"class":390},[321,133405,133406,133408,133410,133412,133414,133416],{"class":323,"line":1401},[321,133407,132534],{"class":380},[321,133409,51582],{"class":331},[321,133411,1032],{"class":380},[321,133413,51637],{"class":327},[321,133415,132543],{"class":331},[321,133417,132546],{"class":390},[321,133419,133420],{"class":323,"line":1407},[321,133421,1771],{"class":331},[1339,133423,133424],{},[154,133425,133426,133427,133303,133429,133431,133432,127860,133435,82684,133438,133440,133441,133443,133444,133447,133448,133313,133451,133453,133454,133457,133459],{},"z-index的特性",[53861,133428],{},[481,133430,127161],{}," ： ",[481,133433,133434],{},"正整数",[481,133436,133437],{},"负整数",[481,133439,523],{}," ，默认值是 0，数值越大，盒子越靠上；",[53861,133442],{},"  ②如果 ",[481,133445,133446],{},"属性值相同"," ，则按照书写顺序， ",[481,133449,133450],{},"后来居上",[53861,133452],{},"  ③数字后面 ",[481,133455,133456],{},"不能加单位",[53861,133458],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22205,133461,133463],{"id":133462},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133465,133466],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133468,133469],{},"方法:",[1339,133471,133472,133482],{},[154,133473,133474,133475,133478,133479],{},"left: 50%; 让 ",[481,133476,133477],{},"盒子的左侧"," 移动到 ",[481,133480,133481],{},"父级元素的水平中心位置",[154,133483,133484,133485,133488,133489],{},"margin-left: -100px; 让盒子 ",[481,133486,133487],{},"向左"," 移动 ",[481,133490,133491],{},"自身宽度的一半",[22205,133493,133495],{"id":133494},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[151,133497,133498,133501],{},[154,133499,133500],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[154,133502,133503],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133505,133506],{},"也就是说绝对定位和固定定位和浮动类似",[151,133508,133509],{"start":200},[154,133510,133511],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1339,133513,133514,133517,133520],{},[154,133515,133516],{},"可以用inline-block 转换为行内块",[154,133518,133519],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[154,133521,133522],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133524,133525],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22205,133527,133529],{"id":133528},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[151,133531,133532,133535,133538,133541],{},[154,133533,133534],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[154,133536,133537],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[154,133539,133540],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[154,133542,133543],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[312,133545,133546],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},[318,133547,133548,133554,133564,133568,133574,133584],{"__ignoreMap":30},[321,133549,133550,133552],{"class":323,"line":324},[321,133551,131170],{"class":2169},[321,133553,15779],{"class":331},[321,133555,133556,133558,133560,133562],{"class":323,"line":167},[321,133557,131177],{"class":380},[321,133559,51582],{"class":331},[321,133561,23944],{"class":380},[321,133563,1497],{"class":331},[321,133565,133566],{"class":323,"line":200},[321,133567,1771],{"class":331},[321,133569,133570,133572],{"class":323,"line":1401},[321,133571,131192],{"class":2169},[321,133573,15779],{"class":331},[321,133575,133576,133578,133580,133582],{"class":323,"line":1407},[321,133577,131177],{"class":380},[321,133579,51582],{"class":331},[321,133581,72667],{"class":380},[321,133583,1497],{"class":331},[321,133585,133586],{"class":323,"line":1421},[321,133587,1771],{"class":331},[28,133589],{"style":126553,"src":133590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22205,133592,133594],{"id":133593},"_11138-轮播图","11.1.3.8 轮播图",[28,133596],{"style":126553,"src":133597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[151,133599,133600],{},[154,133601,133602],{},"制作顺序:",[1339,133604,133605,133608,133611,133620],{},[154,133606,133607],{},"大盒子我们类名为： tb-promo 淘宝广告",[154,133609,133610],{},"里面先放一张图片",[154,133612,133613,133614,133616,133617,133619],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53861,133615],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53861,133618],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[154,133621,133622,133623,133625,133626,133628],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53861,133624],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53861,133627],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[151,133630,133631],{"start":167},[154,133632,133633],{},"代码模块",[312,133635,133637],{"className":126697,"code":133636,"language":126699,"meta":30,"style":30},"\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",[318,133638,133639,133644,133651,133661,133671,133681,133685,133690,133697,133707],{"__ignoreMap":30},[321,133640,133641],{"class":323,"line":324},[321,133642,133643],{"class":390},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[321,133645,133646,133649],{"class":323,"line":167},[321,133647,133648],{"class":2169},".son",[321,133650,15779],{"class":331},[321,133652,133653,133655,133657,133659],{"class":323,"line":200},[321,133654,132503],{"class":380},[321,133656,51582],{"class":331},[321,133658,54976],{"class":380},[321,133660,1497],{"class":331},[321,133662,133663,133665,133667,133669],{"class":323,"line":1401},[321,133664,132517],{"class":380},[321,133666,51582],{"class":331},[321,133668,523],{"class":380},[321,133670,1497],{"class":331},[321,133672,133673,133675,133677,133679],{"class":323,"line":1407},[321,133674,132534],{"class":380},[321,133676,51582],{"class":331},[321,133678,523],{"class":380},[321,133680,1497],{"class":331},[321,133682,133683],{"class":323,"line":1421},[321,133684,1771],{"class":331},[321,133686,133687],{"class":323,"line":1427},[321,133688,133689],{"class":390},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[321,133691,133692,133695],{"class":323,"line":1518},[321,133693,133694],{"class":2169},".father",[321,133696,15779],{"class":331},[321,133698,133699,133701,133703,133705],{"class":323,"line":1524},[321,133700,132503],{"class":380},[321,133702,51582],{"class":331},[321,133704,54909],{"class":380},[321,133706,1497],{"class":331},[321,133708,133709],{"class":323,"line":1536},[321,133710,1771],{"class":331},[19,133712,133713],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[292,133715,133717],{"id":133716},"_1114-定位数值的移动","11.1.4 定位数值的移动",[28,133719],{"style":126553,"src":133720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133722,133723],{},"✨ 黄金口诀：",[19,133725,133726],{},"\"TOP正下负上，LEFT正右负左\"",[19,133728,133729],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133731,133732],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133734,133735],{},"✨ 简单记：",[19,133737,133738],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5333,133740,133741],{},"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":30,"searchDepth":167,"depth":167,"links":133743},[133744],{"id":132271,"depth":167,"text":132272,"children":133745},[133746,133747,133748,133749],{"id":132275,"depth":200,"text":132276},{"id":132290,"depth":200,"text":132291},{"id":132458,"depth":200,"text":132459},{"id":133716,"depth":200,"text":133717},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132263,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133756,"title":133757,"body":133758,"description":23584,"extension":249,"meta":135181,"navigation":251,"path":135182,"seo":135183,"stem":135184,"__hash__":135185},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133759,"toc":135160},[133760,133763,133767,133775,133779,133784,133792,133804,133808,133813,133821,133832,133836,133841,133882,133890,133894,133897,133900,133903,133997,134000,134094,134097,134191,134194,134197,134232,134235,134238,134268,134271,134274,134277,134280,134283,134286,134289,134359,134362,134366,134370,134411,134415,134421,134424,134427,134431,134434,134437,134440,134521,134524,134527,134531,134535,134538,134541,134544,134547,134550,134556,134565,134569,134588,134592,134602,134605,134608,134611,134614,134617,134620,134623,134626,134635,134639,134648,134651,134656,134709,134714,134880,134883,134886,134891,134894,134897,134900,134903,134908,135056,135059,135062,135067,135070,135075,135109,135112,135115,135119,135122,135129,135132,135135,135138,135141,135144,135147,135150,135154,135157],[10,133761,133757],{"id":133762},"_12-显示隐藏与图形资源",[14,133764,133766],{"id":133765},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1339,133768,133769,133772],{},[154,133770,133771],{},"目的:让一个元素在页面中消失或者显示出来",[154,133773,133774],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[292,133776,133778],{"id":133777},"_1211-display-显示","12.1.1 display 显示",[151,133780,133781],{},[154,133782,133783],{},"display 设置或检索对象是否及如何显示",[1339,133785,133786,133789],{},[154,133787,133788],{},"display: none;隐藏对象",[154,133790,133791],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[151,133793,133794,133801],{"start":167},[154,133795,133796,133797,133800],{},"特点： display 隐藏元素后， ",[481,133798,133799],{},"不再占"," 有原来的位置",[154,133802,133803],{},"在js中使用非常的广泛",[292,133805,133807],{"id":133806},"_1212-visibility可见性","12.1.2 visibility可见性",[151,133809,133810],{},[154,133811,133812],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1339,133814,133815,133818],{},[154,133816,133817],{},"visibility： visible；元素可见",[154,133819,133820],{},"visibility：hidden；元素隐藏",[151,133822,133823,133826,133829],{"start":167},[154,133824,133825],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[154,133827,133828],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[154,133830,133831],{},"隐藏后继续占有原有位置",[292,133833,133835],{"id":133834},"_1213-overflow溢出","12.1.3 overflow溢出",[1339,133837,133838],{},[154,133839,133840],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[469,133842,133843,133851],{},[472,133844,133845],{},[475,133846,133847,133849],{},[478,133848,127161],{"align":23944},[478,133850,27634],{"align":23944},[516,133852,133853,133861,133868,133875],{},[475,133854,133855,133858],{},[521,133856,133857],{"align":23944},"visible",[521,133859,133860],{"align":23944},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[475,133862,133863,133865],{},[521,133864,61859],{"align":23944},[521,133866,133867],{"align":23944},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[475,133869,133870,133872],{},[521,133871,129117],{"align":23944},[521,133873,133874],{"align":23944},"不管超出内容否，总是显示滚动条",[475,133876,133877,133879],{},[521,133878,72808],{"align":23944},[521,133880,133881],{"align":23944},"超出自动显示滚动条，不超出不显示滚动条",[1339,133883,133884,133887],{},[154,133885,133886],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[154,133888,133889],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[292,133891,133893],{"id":133892},"_1214-案例收获","12.1.4 案例收获",[28,133895],{"style":126553,"src":133896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133898,133899],{},"问题：没做出来动态效果，使用hover没实现",[19,133901,133902],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[312,133904,133905],{"className":126697,"code":132129,"language":126699,"meta":30,"style":30},[318,133906,133907,133911,133925,133929,133943,133947,133961,133965,133979,133983],{"__ignoreMap":30},[321,133908,133909],{"class":323,"line":324},[321,133910,132136],{"class":390},[321,133912,133913,133915,133917,133919,133921,133923],{"class":323,"line":167},[321,133914,132141],{"class":2169},[321,133916,79952],{"class":331},[321,133918,129057],{"class":380},[321,133920,51582],{"class":331},[321,133922,132150],{"class":380},[321,133924,129627],{"class":331},[321,133926,133927],{"class":323,"line":200},[321,133928,132157],{"class":390},[321,133930,133931,133933,133935,133937,133939,133941],{"class":323,"line":1401},[321,133932,132162],{"class":2169},[321,133934,79952],{"class":331},[321,133936,129057],{"class":380},[321,133938,51582],{"class":331},[321,133940,54909],{"class":380},[321,133942,129627],{"class":331},[321,133944,133945],{"class":323,"line":1407},[321,133946,132177],{"class":390},[321,133948,133949,133951,133953,133955,133957,133959],{"class":323,"line":1421},[321,133950,132182],{"class":2169},[321,133952,79952],{"class":331},[321,133954,129057],{"class":380},[321,133956,51582],{"class":331},[321,133958,54976],{"class":380},[321,133960,129627],{"class":331},[321,133962,133963],{"class":323,"line":1427},[321,133964,132197],{"class":390},[321,133966,133967,133969,133971,133973,133975,133977],{"class":323,"line":1518},[321,133968,132202],{"class":2169},[321,133970,79952],{"class":331},[321,133972,129057],{"class":380},[321,133974,51582],{"class":331},[321,133976,86378],{"class":380},[321,133978,129627],{"class":331},[321,133980,133981],{"class":323,"line":1524},[321,133982,132217],{"class":390},[321,133984,133985,133987,133989,133991,133993,133995],{"class":323,"line":1536},[321,133986,132222],{"class":2169},[321,133988,79952],{"class":331},[321,133990,129057],{"class":380},[321,133992,51582],{"class":331},[321,133994,132231],{"class":380},[321,133996,129627],{"class":331},[19,133998,133999],{},"完整代码：",[312,134001,134002],{"className":126697,"code":132129,"language":126699,"meta":30,"style":30},[318,134003,134004,134008,134022,134026,134040,134044,134058,134062,134076,134080],{"__ignoreMap":30},[321,134005,134006],{"class":323,"line":324},[321,134007,132136],{"class":390},[321,134009,134010,134012,134014,134016,134018,134020],{"class":323,"line":167},[321,134011,132141],{"class":2169},[321,134013,79952],{"class":331},[321,134015,129057],{"class":380},[321,134017,51582],{"class":331},[321,134019,132150],{"class":380},[321,134021,129627],{"class":331},[321,134023,134024],{"class":323,"line":200},[321,134025,132157],{"class":390},[321,134027,134028,134030,134032,134034,134036,134038],{"class":323,"line":1401},[321,134029,132162],{"class":2169},[321,134031,79952],{"class":331},[321,134033,129057],{"class":380},[321,134035,51582],{"class":331},[321,134037,54909],{"class":380},[321,134039,129627],{"class":331},[321,134041,134042],{"class":323,"line":1407},[321,134043,132177],{"class":390},[321,134045,134046,134048,134050,134052,134054,134056],{"class":323,"line":1421},[321,134047,132182],{"class":2169},[321,134049,79952],{"class":331},[321,134051,129057],{"class":380},[321,134053,51582],{"class":331},[321,134055,54976],{"class":380},[321,134057,129627],{"class":331},[321,134059,134060],{"class":323,"line":1427},[321,134061,132197],{"class":390},[321,134063,134064,134066,134068,134070,134072,134074],{"class":323,"line":1518},[321,134065,132202],{"class":2169},[321,134067,79952],{"class":331},[321,134069,129057],{"class":380},[321,134071,51582],{"class":331},[321,134073,86378],{"class":380},[321,134075,129627],{"class":331},[321,134077,134078],{"class":323,"line":1524},[321,134079,132217],{"class":390},[321,134081,134082,134084,134086,134088,134090,134092],{"class":323,"line":1536},[321,134083,132222],{"class":2169},[321,134085,79952],{"class":331},[321,134087,129057],{"class":380},[321,134089,51582],{"class":331},[321,134091,132231],{"class":380},[321,134093,129627],{"class":331},[19,134095,134096],{},"分布思路重点详解：",[312,134098,134099],{"className":126697,"code":132129,"language":126699,"meta":30,"style":30},[318,134100,134101,134105,134119,134123,134137,134141,134155,134159,134173,134177],{"__ignoreMap":30},[321,134102,134103],{"class":323,"line":324},[321,134104,132136],{"class":390},[321,134106,134107,134109,134111,134113,134115,134117],{"class":323,"line":167},[321,134108,132141],{"class":2169},[321,134110,79952],{"class":331},[321,134112,129057],{"class":380},[321,134114,51582],{"class":331},[321,134116,132150],{"class":380},[321,134118,129627],{"class":331},[321,134120,134121],{"class":323,"line":200},[321,134122,132157],{"class":390},[321,134124,134125,134127,134129,134131,134133,134135],{"class":323,"line":1401},[321,134126,132162],{"class":2169},[321,134128,79952],{"class":331},[321,134130,129057],{"class":380},[321,134132,51582],{"class":331},[321,134134,54909],{"class":380},[321,134136,129627],{"class":331},[321,134138,134139],{"class":323,"line":1407},[321,134140,132177],{"class":390},[321,134142,134143,134145,134147,134149,134151,134153],{"class":323,"line":1421},[321,134144,132182],{"class":2169},[321,134146,79952],{"class":331},[321,134148,129057],{"class":380},[321,134150,51582],{"class":331},[321,134152,54976],{"class":380},[321,134154,129627],{"class":331},[321,134156,134157],{"class":323,"line":1427},[321,134158,132197],{"class":390},[321,134160,134161,134163,134165,134167,134169,134171],{"class":323,"line":1518},[321,134162,132202],{"class":2169},[321,134164,79952],{"class":331},[321,134166,129057],{"class":380},[321,134168,51582],{"class":331},[321,134170,86378],{"class":380},[321,134172,129627],{"class":331},[321,134174,134175],{"class":323,"line":1524},[321,134176,132217],{"class":390},[321,134178,134179,134181,134183,134185,134187,134189],{"class":323,"line":1536},[321,134180,132222],{"class":2169},[321,134182,79952],{"class":331},[321,134184,129057],{"class":380},[321,134186,51582],{"class":331},[321,134188,132231],{"class":380},[321,134190,129627],{"class":331},[28,134192],{"style":126553,"src":134193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134195,134196],{},"图片太大，盒子太小，此时需要修改图片的大小",[312,134198,134200],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[318,134201,134202],{"__ignoreMap":30},[321,134203,134204,134206,134208,134210,134212,134215,134217,134219,134222,134225,134227,134230],{"class":323,"line":324},[321,134205,1242],{"class":331},[321,134207,28],{"class":51445},[321,134209,55384],{"class":2169},[321,134211,377],{"class":331},[321,134213,134214],{"class":436},"\"images\u002Fpic.jpg\"",[321,134216,55392],{"class":2169},[321,134218,377],{"class":331},[321,134220,134221],{"class":436},"\"描述文字\"",[321,134223,134224],{"class":2169}," title",[321,134226,377],{"class":331},[321,134228,134229],{"class":436},"\"悬停提示\"",[321,134231,51452],{"class":331},[28,134233],{"style":126553,"src":134234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134236,134237],{},"制造遮罩层",[312,134239,134240],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,134241,134242],{"__ignoreMap":30},[321,134243,134244,134246,134248,134250,134252,134254,134256,134258,134260,134262,134264,134266],{"class":323,"line":324},[321,134245,1242],{"class":331},[321,134247,28],{"class":51445},[321,134249,55384],{"class":2169},[321,134251,377],{"class":331},[321,134253,134214],{"class":436},[321,134255,55392],{"class":2169},[321,134257,377],{"class":331},[321,134259,134221],{"class":436},[321,134261,134224],{"class":2169},[321,134263,377],{"class":331},[321,134265,134229],{"class":436},[321,134267,51452],{"class":331},[19,134269,134270],{},"此时是这样的为标准流",[28,134272],{"style":126553,"src":134273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134275,134276],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134278,134279],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134281,134282],{},"让他在中间，用center(background-position)",[19,134284,134285],{},"将需要变的尽可能放到一个盒子中",[19,134287,134288],{},"放大盒子上内部盒子发生变化",[312,134290,134292],{"className":126697,"code":134291,"language":126699,"meta":30,"style":30},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[318,134293,134294,134300,134310,134314,134321,134331,134343,134355],{"__ignoreMap":30},[321,134295,134296,134298],{"class":323,"line":324},[321,134297,127764],{"class":2169},[321,134299,15779],{"class":331},[321,134301,134302,134304,134306,134308],{"class":323,"line":167},[321,134303,132503],{"class":380},[321,134305,51582],{"class":331},[321,134307,54909],{"class":380},[321,134309,1497],{"class":331},[321,134311,134312],{"class":323,"line":200},[321,134313,1771],{"class":331},[321,134315,134316,134319],{"class":323,"line":1401},[321,134317,134318],{"class":2169},".child",[321,134320,15779],{"class":331},[321,134322,134323,134325,134327,134329],{"class":323,"line":1407},[321,134324,132503],{"class":380},[321,134326,51582],{"class":331},[321,134328,54976],{"class":380},[321,134330,1497],{"class":331},[321,134332,134333,134335,134337,134339,134341],{"class":323,"line":1421},[321,134334,132517],{"class":380},[321,134336,51582],{"class":331},[321,134338,988],{"class":380},[321,134340,660],{"class":327},[321,134342,1497],{"class":331},[321,134344,134345,134347,134349,134351,134353],{"class":323,"line":1427},[321,134346,132534],{"class":380},[321,134348,51582],{"class":331},[321,134350,988],{"class":380},[321,134352,660],{"class":327},[321,134354,1497],{"class":331},[321,134356,134357],{"class":323,"line":1518},[321,134358,1771],{"class":331},[19,134360,134361],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134363,134365],{"id":134364},"_122-精灵图","12.2 精灵图",[292,134367,134369],{"id":134368},"_1221-理解","12.2.1 理解",[151,134371,134372,134390],{},[154,134373,134374,134375,132603,134378,134381,134382,134385,134386,134389],{},"目的： ",[481,134376,134377],{},"为了有效地减少服务器接收和发送请求的次数",[481,134379,134380],{},"提高"," 页面的 ",[481,134383,134384],{},"加载速度"," ，出现了 ",[481,134387,134388],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[154,134391,134392,134393,134395,134396,134398,134399,134401,134402,134404,134405,134407,134408,134410],{},"使用精灵图核心：",[53861,134394],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53861,134397],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53861,134400],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53861,134403],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53861,134406],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53861,134409],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[292,134412,134414],{"id":134413},"_1222-扒图","12.2.2 扒图",[312,134416,134419],{"className":134417,"code":134418,"language":5394},[5392],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[318,134420,134418],{"__ignoreMap":30},[28,134422],{"style":126553,"src":134423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[28,134425],{"style":126553,"src":134426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[292,134428,134430],{"id":134429},"_1223-精灵图的实现","12.2.3 精灵图的实现",[28,134432],{"style":126553,"src":134433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134435,134436],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[28,134438],{"style":126553,"src":134439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[312,134441,134443],{"className":126697,"code":134442,"language":126699,"meta":30,"style":30},"\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",[318,134444,134445,134450,134457,134469,134481,134500,134517],{"__ignoreMap":30},[321,134446,134447],{"class":323,"line":324},[321,134448,134449],{"class":390},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[321,134451,134452,134455],{"class":323,"line":167},[321,134453,134454],{"class":2169},".icon",[321,134456,15779],{"class":331},[321,134458,134459,134461,134463,134465,134467],{"class":323,"line":200},[321,134460,70713],{"class":380},[321,134462,51582],{"class":331},[321,134464,1032],{"class":380},[321,134466,51637],{"class":327},[321,134468,1497],{"class":331},[321,134470,134471,134473,134475,134477,134479],{"class":323,"line":1401},[321,134472,70933],{"class":380},[321,134474,51582],{"class":331},[321,134476,1032],{"class":380},[321,134478,51637],{"class":327},[321,134480,1497],{"class":331},[321,134482,134483,134485,134487,134489,134491,134494,134496,134498],{"class":323,"line":1407},[321,134484,70756],{"class":380},[321,134486,51582],{"class":331},[321,134488,61871],{"class":380},[321,134490,332],{"class":331},[321,134492,134493],{"class":5423},"sprites.png",[321,134495,13921],{"class":331},[321,134497,61881],{"class":380},[321,134499,1497],{"class":331},[321,134501,134502,134504,134506,134508,134510,134513,134515],{"class":323,"line":1421},[321,134503,128957],{"class":380},[321,134505,51582],{"class":331},[321,134507,51908],{"class":380},[321,134509,51637],{"class":327},[321,134511,134512],{"class":380}," -20",[321,134514,51637],{"class":327},[321,134516,1497],{"class":331},[321,134518,134519],{"class":323,"line":1427},[321,134520,1771],{"class":331},[28,134522],{"style":126553,"src":134523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134525,134526],{},"在前端中坐标轴的正方向是右和下",[14,134528,134530],{"id":134529},"_123-字体图标","12.3 字体图标",[292,134532,134534],{"id":134533},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134536,134537],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134539,134540],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134542,134543],{},"1.图片文件还是比较大的。",[19,134545,134546],{},"2.图片本身放大和缩小会失真。",[19,134548,134549],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134551,134552,134553,25885],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[481,134554,134555],{},"字体图标 iconfont",[19,134557,134558,134561,134562,28530],{},[481,134559,134560],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[481,134563,134564],{},"展示的是图标，本质属于字体",[292,134566,134568],{"id":134567},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1339,134570,134571,134576,134579,134582,134585],{},[154,134572,134573,134575],{},[481,134574,26021],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[154,134577,134578],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[154,134580,134581],{},"兼容性：几乎支持所有的浏览器，请放心使用",[154,134583,134584],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[154,134586,134587],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[292,134589,134591],{"id":134590},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1339,134593,134594],{},[154,134595,134596,134597],{},"icomoon字体库：",[570,134598,134601],{"href":134599,"rel":134600},"http:\u002F\u002Ficomoon.io\u002F",[24073],"http:\u002F\u002Ficomoon.io",[19,134603,134604],{},"进去之后点icomoon app",[28,134606],{"style":126553,"src":134607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134609,134610],{},"可以对其编辑：",[28,134612],{"style":126553,"src":134613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134615,134616],{},"生成字体：",[28,134618],{"style":126553,"src":134619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134621,134622],{},"下载：",[28,134624],{"style":126553,"src":134625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1339,134627,134628],{},[154,134629,134630,134631],{},"阿里iconfont字体库： ",[570,134632,134633],{"href":134633,"rel":134634},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24073],[292,134636,134638],{"id":134637},"_1234-字体图标的引入","12.3.4 字体图标的引入",[151,134640,134641],{},[154,134642,134643,134644,134647],{},"把下载包里面的 ",[481,134645,134646],{},"fonts"," 文件夹放入页面根目录下",[28,134649],{"style":126553,"src":134650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[151,134652,134653],{"start":167},[154,134654,134655],{},"字体文件格式",[469,134657,134658,134667],{},[472,134659,134660],{},[475,134661,134662,134665],{},[478,134663,134664],{"align":23944},"格式",[478,134666,23948],{"align":23944},[516,134668,134669,134679,134689,134699],{},[475,134670,134671,134676],{},[521,134672,134673],{"align":23944},[481,134674,134675],{},".ttf",[521,134677,134678],{"align":23944},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[475,134680,134681,134686],{},[521,134682,134683],{"align":23944},[481,134684,134685],{},".woff",[521,134687,134688],{"align":23944},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[475,134690,134691,134696],{},[521,134692,134693],{"align":23944},[481,134694,134695],{},".eot",[521,134697,134698],{"align":23944},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[475,134700,134701,134706],{},[521,134702,134703],{"align":23944},[481,134704,134705],{},"svg",[521,134707,134708],{"align":23944},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[151,134710,134711],{"start":200},[154,134712,134713],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[312,134715,134717],{"className":126697,"code":134716,"language":126699,"meta":30,"style":30},"\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",[318,134718,134719,134724,134731,134743,134759,134784,134805,134825,134845,134849,134855,134865,134876],{"__ignoreMap":30},[321,134720,134721],{"class":323,"line":324},[321,134722,134723],{"class":390},"\u002F* 引入字体图标 *\u002F\n",[321,134725,134726,134729],{"class":323,"line":167},[321,134727,134728],{"class":327},"@font-face",[321,134730,15779],{"class":331},[321,134732,134733,134736,134738,134741],{"class":323,"line":200},[321,134734,134735],{"class":380},"  font-family",[321,134737,51582],{"class":331},[321,134739,134740],{"class":436},"'icomoon'",[321,134742,1497],{"class":331},[321,134744,134745,134748,134750,134752,134754,134757],{"class":323,"line":1401},[321,134746,134747],{"class":380},"  src",[321,134749,51582],{"class":331},[321,134751,61871],{"class":380},[321,134753,332],{"class":331},[321,134755,134756],{"class":436},"'fonts\u002Ficomoon.eot'",[321,134758,2925],{"class":331},[321,134760,134761,134763,134765,134767,134769,134772,134774,134777,134779,134782],{"class":323,"line":1407},[321,134762,134747],{"class":380},[321,134764,51582],{"class":331},[321,134766,61871],{"class":380},[321,134768,332],{"class":331},[321,134770,134771],{"class":436},"'fonts\u002Ficomoon.eot?#iefix'",[321,134773,13921],{"class":331},[321,134775,134776],{"class":380},"format",[321,134778,332],{"class":331},[321,134780,134781],{"class":436},"'embedded-opentype'",[321,134783,38192],{"class":331},[321,134785,134786,134789,134791,134794,134796,134798,134800,134803],{"class":323,"line":1421},[321,134787,134788],{"class":380},"       url",[321,134790,332],{"class":331},[321,134792,134793],{"class":436},"'fonts\u002Ficomoon.woff'",[321,134795,13921],{"class":331},[321,134797,134776],{"class":380},[321,134799,332],{"class":331},[321,134801,134802],{"class":436},"'woff'",[321,134804,38192],{"class":331},[321,134806,134807,134809,134811,134814,134816,134818,134820,134823],{"class":323,"line":1427},[321,134808,134788],{"class":380},[321,134810,332],{"class":331},[321,134812,134813],{"class":436},"'fonts\u002Ficomoon.ttf'",[321,134815,13921],{"class":331},[321,134817,134776],{"class":380},[321,134819,332],{"class":331},[321,134821,134822],{"class":436},"'truetype'",[321,134824,38192],{"class":331},[321,134826,134827,134829,134831,134834,134836,134838,134840,134843],{"class":323,"line":1518},[321,134828,134788],{"class":380},[321,134830,332],{"class":331},[321,134832,134833],{"class":436},"'fonts\u002Ficomoon.svg#icomoon'",[321,134835,13921],{"class":331},[321,134837,134776],{"class":380},[321,134839,332],{"class":331},[321,134841,134842],{"class":436},"'svg'",[321,134844,2925],{"class":331},[321,134846,134847],{"class":323,"line":1524},[321,134848,1771],{"class":331},[321,134850,134851,134853],{"class":323,"line":1536},[321,134852,134454],{"class":2169},[321,134854,15779],{"class":331},[321,134856,134857,134859,134861,134863],{"class":323,"line":1818},[321,134858,134735],{"class":380},[321,134860,51582],{"class":331},[321,134862,134740],{"class":436},[321,134864,1497],{"class":331},[321,134866,134867,134870,134872,134874],{"class":323,"line":1823},[321,134868,134869],{"class":380},"  font-style",[321,134871,51582],{"class":331},[321,134873,63986],{"class":380},[321,134875,1497],{"class":331},[321,134877,134878],{"class":323,"line":1829},[321,134879,1771],{"class":331},[19,134881,134882],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[28,134884],{"style":126553,"src":134885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[151,134887,134888],{"start":1401},[154,134889,134890],{},"添加字体",[28,134892],{"style":126553,"src":134893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134895,134896],{},"复制：",[28,134898],{"style":126553,"src":134899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134901,134902],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[151,134904,134905],{"start":1407},[154,134906,134907],{},"代码展示：",[312,134909,134910],{"className":126697,"code":134716,"language":126699,"meta":30,"style":30},[318,134911,134912,134916,134922,134932,134946,134968,134986,135004,135022,135026,135032,135042,135052],{"__ignoreMap":30},[321,134913,134914],{"class":323,"line":324},[321,134915,134723],{"class":390},[321,134917,134918,134920],{"class":323,"line":167},[321,134919,134728],{"class":327},[321,134921,15779],{"class":331},[321,134923,134924,134926,134928,134930],{"class":323,"line":200},[321,134925,134735],{"class":380},[321,134927,51582],{"class":331},[321,134929,134740],{"class":436},[321,134931,1497],{"class":331},[321,134933,134934,134936,134938,134940,134942,134944],{"class":323,"line":1401},[321,134935,134747],{"class":380},[321,134937,51582],{"class":331},[321,134939,61871],{"class":380},[321,134941,332],{"class":331},[321,134943,134756],{"class":436},[321,134945,2925],{"class":331},[321,134947,134948,134950,134952,134954,134956,134958,134960,134962,134964,134966],{"class":323,"line":1407},[321,134949,134747],{"class":380},[321,134951,51582],{"class":331},[321,134953,61871],{"class":380},[321,134955,332],{"class":331},[321,134957,134771],{"class":436},[321,134959,13921],{"class":331},[321,134961,134776],{"class":380},[321,134963,332],{"class":331},[321,134965,134781],{"class":436},[321,134967,38192],{"class":331},[321,134969,134970,134972,134974,134976,134978,134980,134982,134984],{"class":323,"line":1421},[321,134971,134788],{"class":380},[321,134973,332],{"class":331},[321,134975,134793],{"class":436},[321,134977,13921],{"class":331},[321,134979,134776],{"class":380},[321,134981,332],{"class":331},[321,134983,134802],{"class":436},[321,134985,38192],{"class":331},[321,134987,134988,134990,134992,134994,134996,134998,135000,135002],{"class":323,"line":1427},[321,134989,134788],{"class":380},[321,134991,332],{"class":331},[321,134993,134813],{"class":436},[321,134995,13921],{"class":331},[321,134997,134776],{"class":380},[321,134999,332],{"class":331},[321,135001,134822],{"class":436},[321,135003,38192],{"class":331},[321,135005,135006,135008,135010,135012,135014,135016,135018,135020],{"class":323,"line":1518},[321,135007,134788],{"class":380},[321,135009,332],{"class":331},[321,135011,134833],{"class":436},[321,135013,13921],{"class":331},[321,135015,134776],{"class":380},[321,135017,332],{"class":331},[321,135019,134842],{"class":436},[321,135021,2925],{"class":331},[321,135023,135024],{"class":323,"line":1524},[321,135025,1771],{"class":331},[321,135027,135028,135030],{"class":323,"line":1536},[321,135029,134454],{"class":2169},[321,135031,15779],{"class":331},[321,135033,135034,135036,135038,135040],{"class":323,"line":1818},[321,135035,134735],{"class":380},[321,135037,51582],{"class":331},[321,135039,134740],{"class":436},[321,135041,1497],{"class":331},[321,135043,135044,135046,135048,135050],{"class":323,"line":1823},[321,135045,134869],{"class":380},[321,135047,51582],{"class":331},[321,135049,63986],{"class":380},[321,135051,1497],{"class":331},[321,135053,135054],{"class":323,"line":1829},[321,135055,1771],{"class":331},[28,135057],{"style":126553,"src":135058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135060,135061],{},"更加细节展示：",[151,135063,135064],{},[154,135065,135066],{},"html 标签内添加小图标",[28,135068],{"style":126553,"src":135069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[151,135071,135072],{"start":167},[154,135073,135074],{},"给标签定义字体",[312,135076,135077],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,135078,135079,135083,135097,135101],{"__ignoreMap":30},[321,135080,135081],{"class":323,"line":324},[321,135082,130808],{"class":390},[321,135084,135085,135087,135089,135091,135093,135095],{"class":323,"line":167},[321,135086,1242],{"class":331},[321,135088,51756],{"class":51445},[321,135090,53631],{"class":2169},[321,135092,377],{"class":331},[321,135094,130821],{"class":436},[321,135096,51452],{"class":331},[321,135098,135099],{"class":323,"line":200},[321,135100,130828],{"class":331},[321,135102,135103,135105,135107],{"class":323,"line":1401},[321,135104,51930],{"class":331},[321,135106,51756],{"class":51445},[321,135108,51452],{"class":331},[19,135110,135111],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[28,135113],{"style":126553,"src":135114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[292,135116,135118],{"id":135117},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135120,135121],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135123,135124,135125,135128],{},"把压缩包里面的 ",[481,135126,135127],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135130,135131],{},"打开网站，点下方：",[28,135133],{"style":126553,"src":135134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[28,135136],{"style":126553,"src":135137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[28,135139],{"style":126553,"src":135140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135142,135143],{},"点yes重新加载",[19,135145,135146],{},"然后重复之前的操作就可以实现了",[19,135148,135149],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[292,135151,135153],{"id":135152},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[28,135155],{"style":126553,"src":135156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5333,135158,135159],{},"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":30,"searchDepth":167,"depth":167,"links":135161},[135162,135168,135173],{"id":133765,"depth":167,"text":133766,"children":135163},[135164,135165,135166,135167],{"id":133777,"depth":200,"text":133778},{"id":133806,"depth":200,"text":133807},{"id":133834,"depth":200,"text":133835},{"id":133892,"depth":200,"text":133893},{"id":134364,"depth":167,"text":134365,"children":135169},[135170,135171,135172],{"id":134368,"depth":200,"text":134369},{"id":134413,"depth":200,"text":134414},{"id":134429,"depth":200,"text":134430},{"id":134529,"depth":167,"text":134530,"children":135174},[135175,135176,135177,135178,135179,135180],{"id":134533,"depth":200,"text":134534},{"id":134567,"depth":200,"text":134568},{"id":134590,"depth":200,"text":134591},{"id":134637,"depth":200,"text":134638},{"id":135117,"depth":200,"text":135118},{"id":135152,"depth":200,"text":135153},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133757,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135187,"title":135188,"body":135189,"description":23584,"extension":249,"meta":136416,"navigation":251,"path":136417,"seo":136418,"stem":136419,"__hash__":136420},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135190,"toc":136397},[135191,135194,135198,135201,135215,135283,135313,135316,135320,135324,135426,135473,135477,135480,135483,135517,135520,135523,135526,135529,135532,135535,135538,135540,135543,135546,135549,135552,135555,135558,135561,135589,135592,135596,135599,135606,135609,135612,135638,135641,135645,135648,135651,135658,135662,135665,135667,135699,135702,135705,135717,135723,135726,135729,135732,135734,135738,135741,135744,135747,135792,135796,135798,135801,135808,135850,135853,135857,135862,135876,135880,135883,135886,135889,135892,135895,135929,135932,135935,135989,135992,135995,135998,136001,136053,136056,136059,136108,136112,136114,136117,136120,136123,136126,136129,136187,136190,136196,136199,136202,136234,136237,136241,136245,136248,136280,136284,136287,136331,136335,136338,136341,136344,136347,136350,136353,136356,136358,136361,136363,136366,136369,136372,136375,136380,136383,136385,136388,136391,136394],[10,135192,135188],{"id":135193},"_13-界面样式与布局技巧",[14,135195,135197],{"id":135196},"_131-css三角","13.1 css三角",[19,135199,135200],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1339,135202,135203,135206,135209,135212],{},[154,135204,135205],{},"用css 边框可以模拟三角效果",[154,135207,135208],{},"宽度高度为0",[154,135210,135211],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[154,135213,135214],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[312,135216,135218],{"className":126697,"code":135217,"language":126699,"meta":30,"style":30},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[318,135219,135220,135225,135232,135242,135252,135268,135279],{"__ignoreMap":30},[321,135221,135222],{"class":323,"line":324},[321,135223,135224],{"class":390},"\u002F* CSS 实现三角形 *\u002F\n",[321,135226,135227,135230],{"class":323,"line":167},[321,135228,135229],{"class":2169},".triangle",[321,135231,15779],{"class":331},[321,135233,135234,135236,135238,135240],{"class":323,"line":200},[321,135235,70713],{"class":380},[321,135237,51582],{"class":331},[321,135239,523],{"class":380},[321,135241,1497],{"class":331},[321,135243,135244,135246,135248,135250],{"class":323,"line":1401},[321,135245,70933],{"class":380},[321,135247,51582],{"class":331},[321,135249,523],{"class":380},[321,135251,1497],{"class":331},[321,135253,135254,135256,135258,135260,135262,135264,135266],{"class":323,"line":1407},[321,135255,71041],{"class":380},[321,135257,51582],{"class":331},[321,135259,778],{"class":380},[321,135261,51637],{"class":327},[321,135263,51666],{"class":380},[321,135265,64136],{"class":380},[321,135267,1497],{"class":331},[321,135269,135270,135273,135275,135277],{"class":323,"line":1421},[321,135271,135272],{"class":380},"  border-bottom-color",[321,135274,51582],{"class":331},[321,135276,62514],{"class":380},[321,135278,1497],{"class":331},[321,135280,135281],{"class":323,"line":1427},[321,135282,1771],{"class":331},[312,135284,135285],{"className":126697,"code":130854,"language":126699,"meta":30,"style":30},[318,135286,135287,135293,135309],{"__ignoreMap":30},[321,135288,135289,135291],{"class":323,"line":324},[321,135290,51756],{"class":51445},[321,135292,15779],{"class":331},[321,135294,135295,135297,135299,135301,135303,135305,135307],{"class":323,"line":167},[321,135296,71041],{"class":380},[321,135298,51582],{"class":331},[321,135300,549],{"class":380},[321,135302,51637],{"class":327},[321,135304,51666],{"class":380},[321,135306,130089],{"class":380},[321,135308,1497],{"class":331},[321,135310,135311],{"class":323,"line":200},[321,135312,1771],{"class":331},[28,135314],{"style":126553,"src":135315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135317,135319],{"id":135318},"_132-css用户界面样式","13.2 css用户界面样式",[292,135321,135323],{"id":135322},"_1321-鼠标样式","13.2.1 鼠标样式",[312,135325,135327],{"className":126697,"code":135326,"language":126699,"meta":30,"style":30},"\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",[318,135328,135329,135334,135353,135371,135390,135407],{"__ignoreMap":30},[321,135330,135331],{"class":323,"line":324},[321,135332,135333],{"class":390},"\u002F* 鼠标样式 *\u002F\n",[321,135335,135336,135338,135340,135343,135345,135347,135350],{"class":323,"line":167},[321,135337,51756],{"class":51445},[321,135339,79952],{"class":331},[321,135341,135342],{"class":380},"cursor",[321,135344,51582],{"class":331},[321,135346,62175],{"class":380},[321,135348,135349],{"class":331},"; }   ",[321,135351,135352],{"class":390},"\u002F* 手型 *\u002F\n",[321,135354,135355,135357,135359,135361,135363,135366,135368],{"class":323,"line":200},[321,135356,51756],{"class":51445},[321,135358,79952],{"class":331},[321,135360,135342],{"class":380},[321,135362,51582],{"class":331},[321,135364,135365],{"class":380},"default",[321,135367,135349],{"class":331},[321,135369,135370],{"class":390},"\u002F* 默认 *\u002F\n",[321,135372,135373,135375,135377,135379,135381,135384,135387],{"class":323,"line":1401},[321,135374,51756],{"class":51445},[321,135376,79952],{"class":331},[321,135378,135342],{"class":380},[321,135380,51582],{"class":331},[321,135382,135383],{"class":380},"move",[321,135385,135386],{"class":331},"; }      ",[321,135388,135389],{"class":390},"\u002F* 移动 *\u002F\n",[321,135391,135392,135394,135396,135398,135400,135402,135404],{"class":323,"line":1407},[321,135393,51756],{"class":51445},[321,135395,79952],{"class":331},[321,135397,135342],{"class":380},[321,135399,51582],{"class":331},[321,135401,5394],{"class":380},[321,135403,135386],{"class":331},[321,135405,135406],{"class":390},"\u002F* 文本 *\u002F\n",[321,135408,135409,135411,135413,135415,135417,135420,135423],{"class":323,"line":1421},[321,135410,51756],{"class":51445},[321,135412,79952],{"class":331},[321,135414,135342],{"class":380},[321,135416,51582],{"class":331},[321,135418,135419],{"class":380},"not-allowed",[321,135421,135422],{"class":331},"; } ",[321,135424,135425],{"class":390},"\u002F* 禁止 *\u002F\n",[469,135427,135428,135436],{},[472,135429,135430],{},[475,135431,135432,135434],{},[478,135433,127161],{"align":23944},[478,135435,27634],{"align":23944},[516,135437,135438,135445,135452,135459,135466],{},[475,135439,135440,135442],{},[521,135441,135365],{"align":23944},[521,135443,135444],{"align":23944},"小白 默认",[475,135446,135447,135449],{},[521,135448,62175],{"align":23944},[521,135450,135451],{"align":23944},"小手",[475,135453,135454,135456],{},[521,135455,135383],{"align":23944},[521,135457,135458],{"align":23944},"移动",[475,135460,135461,135463],{},[521,135462,5394],{"align":23944},[521,135464,135465],{"align":23944},"文本",[475,135467,135468,135470],{},[521,135469,135419],{"align":23944},[521,135471,135472],{"align":23944},"禁止",[292,135474,135476],{"id":135475},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135478,135479],{},"去除表单轮廓线",[19,135481,135482],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[312,135484,135485],{"className":126697,"code":130061,"language":126699,"meta":30,"style":30},[318,135486,135487,135491,135497,135513],{"__ignoreMap":30},[321,135488,135489],{"class":323,"line":324},[321,135490,130068],{"class":390},[321,135492,135493,135495],{"class":323,"line":167},[321,135494,51756],{"class":51445},[321,135496,15779],{"class":331},[321,135498,135499,135501,135503,135505,135507,135509,135511],{"class":323,"line":200},[321,135500,71041],{"class":380},[321,135502,51582],{"class":331},[321,135504,549],{"class":380},[321,135506,51637],{"class":327},[321,135508,51666],{"class":380},[321,135510,130089],{"class":380},[321,135512,1497],{"class":331},[321,135514,135515],{"class":323,"line":1401},[321,135516,1771],{"class":331},[19,135518,135519],{},"文本域：",[28,135521],{"style":126553,"src":135522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135524,135525],{},"此时会有一个空白区域",[28,135527],{"style":126553,"src":135528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135530,135531],{},"写在同一行就不会出现这个问题",[28,135533],{"style":126553,"src":135534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135536,135537],{},"文本域是行内块元素，一定记住！！！",[19,135539,98378],{},[28,135541],{"style":126553,"src":135542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135544,135545],{},"文本域尽量放在一行",[19,135547,135548],{},"知识回顾：cols是列，rols是行",[28,135550],{"style":126553,"src":135551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135553,135554],{},"它可以进行拖动，显然这是我们不愿意看到的",[28,135556],{"style":126553,"src":135557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135559,135560],{},"使用resize进行解决",[312,135562,135564],{"className":126697,"code":135563,"language":126699,"meta":30,"style":30},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[318,135565,135566,135572,135585],{"__ignoreMap":30},[321,135567,135568,135570],{"class":323,"line":324},[321,135569,53966],{"class":51445},[321,135571,15779],{"class":331},[321,135573,135574,135576,135578,135580,135582],{"class":323,"line":167},[321,135575,70943],{"class":380},[321,135577,51582],{"class":331},[321,135579,54882],{"class":380},[321,135581,130560],{"class":331},[321,135583,135584],{"class":390},"\u002F* 取消表单轮廓线 *\u002F\n",[321,135586,135587],{"class":323,"line":200},[321,135588,1771],{"class":331},[19,135590,135591],{},"此时就无法通过右下方实现拖动了",[292,135593,135595],{"id":135594},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135597,135598],{},"实现一个盒子中的文字和图片对齐",[19,135600,135601,135602,135605],{},"用于设置一个元素的 ",[481,135603,135604],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135607,135608],{},"图片和文字默认是基线对齐",[28,135610],{"style":126553,"src":135611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[312,135613,135614],{"className":126697,"code":135563,"language":126699,"meta":30,"style":30},[318,135615,135616,135622,135634],{"__ignoreMap":30},[321,135617,135618,135620],{"class":323,"line":324},[321,135619,53966],{"class":51445},[321,135621,15779],{"class":331},[321,135623,135624,135626,135628,135630,135632],{"class":323,"line":167},[321,135625,70943],{"class":380},[321,135627,51582],{"class":331},[321,135629,54882],{"class":380},[321,135631,130560],{"class":331},[321,135633,135584],{"class":390},[321,135635,135636],{"class":323,"line":200},[321,135637,1771],{"class":331},[28,135639],{"style":126553,"src":135640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22205,135642,135644],{"id":135643},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135646,135647],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[28,135649],{"style":126553,"src":135650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135652,135653,135654,135657],{},"此时可以给图片、表单这些行内块元素的 ",[481,135655,135656],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22205,135659,135661],{"id":135660},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135663,135664],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135666,14840],{},[312,135668,135670],{"className":126697,"code":135669,"language":126699,"meta":30,"style":30},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[318,135671,135672,135677,135683,135695],{"__ignoreMap":30},[321,135673,135674],{"class":323,"line":324},[321,135675,135676],{"class":390},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[321,135678,135679,135681],{"class":323,"line":167},[321,135680,28],{"class":51445},[321,135682,15779],{"class":331},[321,135684,135685,135688,135690,135693],{"class":323,"line":200},[321,135686,135687],{"class":380},"  vertical-align",[321,135689,51582],{"class":331},[321,135691,135692],{"class":380},"middle",[321,135694,1497],{"class":331},[321,135696,135697],{"class":323,"line":1401},[321,135698,1771],{"class":331},[28,135700],{"style":126553,"src":135701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135703,135704],{},"主要解决方法有两种：",[151,135706,135707],{},[154,135708,135709,135712,135713,135716],{},[481,135710,135711],{},"给图片"," 添加 ",[481,135714,135715],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135718,135719,135720],{},"2.把图片转换为块级元素 ",[481,135721,135722],{},"display: block",[19,135724,135725],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135727,135728],{},"img {",[19,135730,135731],{},"vertical-align:middle;",[19,135733,1278],{},[292,135735,135737],{"id":135736},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135739,135740],{},"效果：",[28,135742],{"style":126553,"src":135743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135745,135746],{},"单行文本溢出显示省略号--必须满足三个条件：",[312,135748,135750],{"className":126697,"code":135749,"language":126699,"meta":30,"style":30},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[318,135751,135752,135757,135763,135773,135778,135788],{"__ignoreMap":30},[321,135753,135754],{"class":323,"line":324},[321,135755,135756],{"class":390},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[321,135758,135759,135761],{"class":323,"line":167},[321,135760,28],{"class":51445},[321,135762,15779],{"class":331},[321,135764,135765,135767,135769,135771],{"class":323,"line":200},[321,135766,135687],{"class":380},[321,135768,51582],{"class":331},[321,135770,135692],{"class":380},[321,135772,1497],{"class":331},[321,135774,135775],{"class":323,"line":1401},[321,135776,135777],{"class":390},"  \u002F* 或 *\u002F\n",[321,135779,135780,135782,135784,135786],{"class":323,"line":1407},[321,135781,128313],{"class":380},[321,135783,51582],{"class":331},[321,135785,61014],{"class":380},[321,135787,1497],{"class":331},[321,135789,135790],{"class":323,"line":1421},[321,135791,1771],{"class":331},[292,135793,135795],{"id":135794},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135797,135740],{},[28,135799],{"style":126553,"src":135800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135802,135803,135804,135807],{},"多行文本溢出显示省略号， ",[481,135805,135806],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[312,135809,135810],{"className":126697,"code":135749,"language":126699,"meta":30,"style":30},[318,135811,135812,135816,135822,135832,135836,135846],{"__ignoreMap":30},[321,135813,135814],{"class":323,"line":324},[321,135815,135756],{"class":390},[321,135817,135818,135820],{"class":323,"line":167},[321,135819,28],{"class":51445},[321,135821,15779],{"class":331},[321,135823,135824,135826,135828,135830],{"class":323,"line":200},[321,135825,135687],{"class":380},[321,135827,51582],{"class":331},[321,135829,135692],{"class":380},[321,135831,1497],{"class":331},[321,135833,135834],{"class":323,"line":1401},[321,135835,135777],{"class":390},[321,135837,135838,135840,135842,135844],{"class":323,"line":1407},[321,135839,128313],{"class":380},[321,135841,51582],{"class":331},[321,135843,61014],{"class":380},[321,135845,1497],{"class":331},[321,135847,135848],{"class":323,"line":1421},[321,135849,1771],{"class":331},[19,135851,135852],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135854,135856],{"id":135855},"_133-常见布局技巧","13.3 常见布局技巧",[19,135858,135859],{},[481,135860,135861],{},"巧妙利用一个技术更快更好的布局：",[151,135863,135864,135867,135870,135873],{},[154,135865,135866],{},"margin负值的运用",[154,135868,135869],{},"文字围绕浮动元素",[154,135871,135872],{},"行内块的巧妙运用",[154,135874,135875],{},"CSS三角强化",[292,135877,135879],{"id":135878},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135881,135882],{},"应用场景：",[28,135884],{"style":126553,"src":135885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[28,135887],{"style":126553,"src":135888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135890,135891],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135893,135894],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[312,135896,135897],{"className":126697,"code":130061,"language":126699,"meta":30,"style":30},[318,135898,135899,135903,135909,135925],{"__ignoreMap":30},[321,135900,135901],{"class":323,"line":324},[321,135902,130068],{"class":390},[321,135904,135905,135907],{"class":323,"line":167},[321,135906,51756],{"class":51445},[321,135908,15779],{"class":331},[321,135910,135911,135913,135915,135917,135919,135921,135923],{"class":323,"line":200},[321,135912,71041],{"class":380},[321,135914,51582],{"class":331},[321,135916,549],{"class":380},[321,135918,51637],{"class":327},[321,135920,51666],{"class":380},[321,135922,130089],{"class":380},[321,135924,1497],{"class":331},[321,135926,135927],{"class":323,"line":1401},[321,135928,1771],{"class":331},[28,135930],{"style":126553,"src":135931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135933,135934],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[312,135936,135938],{"className":126697,"code":135937,"language":126699,"meta":30,"style":30},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[318,135939,135940,135945,135951,135961,135973,135985],{"__ignoreMap":30},[321,135941,135942],{"class":323,"line":324},[321,135943,135944],{"class":390},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[321,135946,135947,135949],{"class":323,"line":167},[321,135948,130545],{"class":2169},[321,135950,15779],{"class":331},[321,135952,135953,135955,135957,135959],{"class":323,"line":200},[321,135954,132503],{"class":380},[321,135956,51582],{"class":331},[321,135958,54909],{"class":380},[321,135960,1497],{"class":331},[321,135962,135963,135965,135967,135969,135971],{"class":323,"line":1401},[321,135964,132517],{"class":380},[321,135966,51582],{"class":331},[321,135968,778],{"class":380},[321,135970,51637],{"class":327},[321,135972,1497],{"class":331},[321,135974,135975,135977,135979,135981,135983],{"class":323,"line":1407},[321,135976,132534],{"class":380},[321,135978,51582],{"class":331},[321,135980,1032],{"class":380},[321,135982,51637],{"class":327},[321,135984,1497],{"class":331},[321,135986,135987],{"class":323,"line":1421},[321,135988,1771],{"class":331},[19,135990,135991],{},"加上上述代码会发现：",[28,135993],{"style":126553,"src":135994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,135996,135997],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,135999,136000],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[312,136002,136003],{"className":126697,"code":135937,"language":126699,"meta":30,"style":30},[318,136004,136005,136009,136015,136025,136037,136049],{"__ignoreMap":30},[321,136006,136007],{"class":323,"line":324},[321,136008,135944],{"class":390},[321,136010,136011,136013],{"class":323,"line":167},[321,136012,130545],{"class":2169},[321,136014,15779],{"class":331},[321,136016,136017,136019,136021,136023],{"class":323,"line":200},[321,136018,132503],{"class":380},[321,136020,51582],{"class":331},[321,136022,54909],{"class":380},[321,136024,1497],{"class":331},[321,136026,136027,136029,136031,136033,136035],{"class":323,"line":1401},[321,136028,132517],{"class":380},[321,136030,51582],{"class":331},[321,136032,778],{"class":380},[321,136034,51637],{"class":327},[321,136036,1497],{"class":331},[321,136038,136039,136041,136043,136045,136047],{"class":323,"line":1407},[321,136040,132534],{"class":380},[321,136042,51582],{"class":331},[321,136044,1032],{"class":380},[321,136046,51637],{"class":327},[321,136048,1497],{"class":331},[321,136050,136051],{"class":323,"line":1421},[321,136052,1771],{"class":331},[19,136054,136055],{},"解决方式2：",[19,136057,136058],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[312,136060,136062],{"className":126697,"code":136061,"language":126699,"meta":30,"style":30},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[318,136063,136064,136070,136080,136092,136104],{"__ignoreMap":30},[321,136065,136066,136068],{"class":323,"line":324},[321,136067,51756],{"class":51445},[321,136069,15779],{"class":331},[321,136071,136072,136074,136076,136078],{"class":323,"line":167},[321,136073,132503],{"class":380},[321,136075,51582],{"class":331},[321,136077,54909],{"class":380},[321,136079,1497],{"class":331},[321,136081,136082,136084,136086,136088,136090],{"class":323,"line":200},[321,136083,132517],{"class":380},[321,136085,51582],{"class":331},[321,136087,778],{"class":380},[321,136089,51637],{"class":327},[321,136091,1497],{"class":331},[321,136093,136094,136096,136098,136100,136102],{"class":323,"line":1401},[321,136095,132534],{"class":380},[321,136097,51582],{"class":331},[321,136099,1032],{"class":380},[321,136101,51637],{"class":327},[321,136103,1497],{"class":331},[321,136105,136106],{"class":323,"line":1407},[321,136107,1771],{"class":331},[292,136109,136111],{"id":136110},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136113,135882],{},[28,136115],{"style":126553,"src":136116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136118,136119],{},"实现结构图：",[28,136121],{"style":126553,"src":136122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136124,136125],{},"巧妙运用浮动元素不会压住文字的特性",[19,136127,136128],{},"代码显示：",[312,136130,136132],{"className":126697,"code":136131,"language":126699,"meta":30,"style":30},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[318,136133,136134,136140,136150,136154,136159,136163,136169,136183],{"__ignoreMap":30},[321,136135,136136,136138],{"class":323,"line":324},[321,136137,130545],{"class":2169},[321,136139,15779],{"class":331},[321,136141,136142,136144,136146,136148],{"class":323,"line":167},[321,136143,131177],{"class":380},[321,136145,51582],{"class":331},[321,136147,23944],{"class":380},[321,136149,1497],{"class":331},[321,136151,136152],{"class":323,"line":200},[321,136153,1771],{"class":331},[321,136155,136156],{"class":323,"line":1401},[321,136157,136158],{"class":331},"```Css\n",[321,136160,136161],{"class":323,"line":1407},[321,136162,130540],{"class":390},[321,136164,136165,136167],{"class":323,"line":1421},[321,136166,130545],{"class":2169},[321,136168,15779],{"class":331},[321,136170,136171,136173,136175,136177,136179,136181],{"class":323,"line":1427},[321,136172,70615],{"class":380},[321,136174,51582],{"class":331},[321,136176,523],{"class":380},[321,136178,51701],{"class":380},[321,136180,130560],{"class":331},[321,136182,130563],{"class":390},[321,136184,136185],{"class":323,"line":1518},[321,136186,1771],{"class":331},[19,136188,136189],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[312,136191,136194],{"className":136192,"code":136193,"language":5394},[5392],"\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",[318,136195,136193],{"__ignoreMap":30},[28,136197],{"style":126553,"src":136198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136200,136201],{},"最终展示结果：",[312,136203,136204],{"className":126697,"code":130533,"language":126699,"meta":30,"style":30},[318,136205,136206,136210,136216,136230],{"__ignoreMap":30},[321,136207,136208],{"class":323,"line":324},[321,136209,130540],{"class":390},[321,136211,136212,136214],{"class":323,"line":167},[321,136213,130545],{"class":2169},[321,136215,15779],{"class":331},[321,136217,136218,136220,136222,136224,136226,136228],{"class":323,"line":200},[321,136219,70615],{"class":380},[321,136221,51582],{"class":331},[321,136223,523],{"class":380},[321,136225,51701],{"class":380},[321,136227,130560],{"class":331},[321,136229,130563],{"class":390},[321,136231,136232],{"class":323,"line":1401},[321,136233,1771],{"class":331},[28,136235],{"style":126553,"src":136236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136238,136240],{"id":136239},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[292,136242,136244],{"id":136243},"_1341-原理","13.4.1 原理",[28,136246],{"style":126553,"src":136247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[312,136249,136250],{"className":126697,"code":130533,"language":126699,"meta":30,"style":30},[318,136251,136252,136256,136262,136276],{"__ignoreMap":30},[321,136253,136254],{"class":323,"line":324},[321,136255,130540],{"class":390},[321,136257,136258,136260],{"class":323,"line":167},[321,136259,130545],{"class":2169},[321,136261,15779],{"class":331},[321,136263,136264,136266,136268,136270,136272,136274],{"class":323,"line":200},[321,136265,70615],{"class":380},[321,136267,51582],{"class":331},[321,136269,523],{"class":380},[321,136271,51701],{"class":380},[321,136273,130560],{"class":331},[321,136275,130563],{"class":390},[321,136277,136278],{"class":323,"line":1401},[321,136279,1771],{"class":331},[292,136281,136283],{"id":136282},"_1342-实例","13.4.2 实例",[28,136285],{"style":126553,"src":136286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[312,136288,136289],{"className":126697,"code":131163,"language":126699,"meta":30,"style":30},[318,136290,136291,136297,136307,136311,136317,136327],{"__ignoreMap":30},[321,136292,136293,136295],{"class":323,"line":324},[321,136294,131170],{"class":2169},[321,136296,15779],{"class":331},[321,136298,136299,136301,136303,136305],{"class":323,"line":167},[321,136300,131177],{"class":380},[321,136302,51582],{"class":331},[321,136304,23944],{"class":380},[321,136306,1497],{"class":331},[321,136308,136309],{"class":323,"line":200},[321,136310,1771],{"class":331},[321,136312,136313,136315],{"class":323,"line":1401},[321,136314,131192],{"class":2169},[321,136316,15779],{"class":331},[321,136318,136319,136321,136323,136325],{"class":323,"line":1407},[321,136320,131177],{"class":380},[321,136322,51582],{"class":331},[321,136324,72667],{"class":380},[321,136326,1497],{"class":331},[321,136328,136329],{"class":323,"line":1421},[321,136330,1771],{"class":331},[14,136332,136334],{"id":136333},"_135-css的初始化","13.5 css的初始化",[19,136336,136337],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136339,136340],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136342,136343],{},"每个网页都必须首先进行 CSS初始化。",[19,136345,136346],{},"这里我们以 京东CSS初始化代码为例。",[19,136348,136349],{},"在网页右键查看网页源代码",[19,136351,136352],{},"找到css的link引入语句",[19,136354,136355],{},"然后ctrl+f 输入body",[19,136357,77371],{},[28,136359],{"style":126553,"src":136360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136362,77394],{},[28,136364],{"style":126553,"src":136365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136367,136368],{},"③打开了网页上传压缩的代码",[28,136370],{"style":126553,"src":136371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136373,136374],{},"④从body前可以查看这个网页的初始化代码",[19,136376,136377],{},[481,136378,136379],{},"Unicode编码字体：",[19,136381,136382],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136384,83352],{},[19,136386,136387],{},"黑体 \\9ED1\\4F53",[19,136389,136390],{},"宋体 \\5B8B\\4F53",[19,136392,136393],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5333,136395,136396],{},"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":30,"searchDepth":167,"depth":167,"links":136398},[136399,136400,136407,136411,136415],{"id":135196,"depth":167,"text":135197},{"id":135318,"depth":167,"text":135319,"children":136401},[136402,136403,136404,136405,136406],{"id":135322,"depth":200,"text":135323},{"id":135475,"depth":200,"text":135476},{"id":135594,"depth":200,"text":135595},{"id":135736,"depth":200,"text":135737},{"id":135794,"depth":200,"text":135795},{"id":135855,"depth":167,"text":135856,"children":136408},[136409,136410],{"id":135878,"depth":200,"text":135879},{"id":136110,"depth":200,"text":136111},{"id":136239,"depth":167,"text":136240,"children":136412},[136413,136414],{"id":136243,"depth":200,"text":136244},{"id":136282,"depth":200,"text":136283},{"id":136333,"depth":167,"text":136334},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135188,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136422,"title":136423,"body":136424,"description":23584,"extension":249,"meta":138110,"navigation":251,"path":138111,"seo":138112,"stem":138113,"__hash__":138114},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136425,"toc":138099},[136426,136429,136433,136437,136440,136447,136450,136453,136491,136494,136496,136510,136514,136523,136527,136532,136535,136538,136541,136576,136581,136584,136614,136617,136622,136625,136628,136658,136661,136715,136718,136722,136727,136739,136742,136746,136776,136779,136784,136787,136817,136820,136824,136841,136845,136849,136852,136885,136888,136892,136895,136898,136901,136904,136907,137018,137021,137024,137027,137129,137132,137136,137140,137144,137147,137187,137190,137192,137208,137212,137215,137220,137301,137304,137307,137433,137438,137441,137449,137452,137457,137542,137545,137549,137552,137555,137559,137579,137584,137668,137671,137676,137679,137682,137760,137763,137766,137769,137772,137775,137780,137783,137786,137858,137861,137866,137869,137966,137969,137975,137978,137981,137984,137987,137990,137993,137996,137999,138003,138008,138011,138044,138049,138052,138093,138096],[10,136427,136423],{"id":136428},"_14-html5与css3新特性",[14,136430,136432],{"id":136431},"_141-html5的新特性","14.1 HTML5的新特性",[292,136434,136436],{"id":136435},"_1411-基本标签","14.1.1 基本标签",[19,136438,136439],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136441,136442,136443,136446],{},"这些新特性都有兼容性问题，基本是 ",[481,136444,136445],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136448,136449],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136451,136452],{},"现在使用的是新特性：",[1339,136454,136455,136461,136467,136473,136479,136485],{},[154,136456,136457,136460],{},[318,136458,136459],{},"\u003Cheader>"," 头部标签",[154,136462,136463,136466],{},[318,136464,136465],{},"\u003Cnav>"," 导航标签",[154,136468,136469,136472],{},[318,136470,136471],{},"\u003Carticle>"," 内容标签",[154,136474,136475,136478],{},[318,136476,136477],{},"\u003Csection>"," 定义文档某个区域",[154,136480,136481,136484],{},[318,136482,136483],{},"\u003Caside>"," 侧边栏标签",[154,136486,136487,136490],{},[318,136488,136489],{},"\u003Cfooter>"," 尾部标签",[28,136492],{"style":126553,"src":136493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136495,361],{},[1339,136497,136498,136501,136504,136507],{},[154,136499,136500],{},"这种语义化标准主要是针对搜索引擎的",[154,136502,136503],{},"这些标签页面中可以经常使用",[154,136505,136506],{},"在IE9中，需要把这些元素转换为块级元素",[154,136508,136509],{},"移动端更喜欢使用这些标签",[292,136511,136513],{"id":136512},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136515,136516,136517,136519,136520,136522],{},"音频 ",[481,136518,28319],{}," 和视频 ",[481,136521,28328],{}," 两个标签",[22205,136524,136526],{"id":136525},"_14121-视频标签-video","14.1.2.1 视频标签- video",[151,136528,136529],{},[154,136530,136531],{},"支持格式：",[28,136533],{"style":126553,"src":136534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136536,136537],{},"尽量使用MP4，兼容性好",[19,136539,136540],{},"用MP4就可以",[312,136542,136544],{"className":127444,"code":136543,"language":127446,"meta":30,"style":30},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[318,136545,136546],{"__ignoreMap":30},[321,136547,136548,136550,136552,136554,136556,136559,136561,136564,136567,136570,136572,136574],{"class":323,"line":324},[321,136549,1242],{"class":331},[321,136551,28328],{"class":51445},[321,136553,55384],{"class":2169},[321,136555,377],{"class":331},[321,136557,136558],{"class":436},"\"movie.mp4\"",[321,136560,92568],{"class":2169},[321,136562,136563],{"class":2169}," autoplay",[321,136565,136566],{"class":2169}," muted",[321,136568,136569],{"class":2169}," loop",[321,136571,55459],{"class":331},[321,136573,28328],{"class":51445},[321,136575,51452],{"class":331},[151,136577,136578],{"start":167},[154,136579,136580],{},"兼容写法",[19,136582,136583],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[312,136585,136586],{"className":127444,"code":136543,"language":127446,"meta":30,"style":30},[318,136587,136588],{"__ignoreMap":30},[321,136589,136590,136592,136594,136596,136598,136600,136602,136604,136606,136608,136610,136612],{"class":323,"line":324},[321,136591,1242],{"class":331},[321,136593,28328],{"class":51445},[321,136595,55384],{"class":2169},[321,136597,377],{"class":331},[321,136599,136558],{"class":436},[321,136601,92568],{"class":2169},[321,136603,136563],{"class":2169},[321,136605,136566],{"class":2169},[321,136607,136569],{"class":2169},[321,136609,55459],{"class":331},[321,136611,28328],{"class":51445},[321,136613,51452],{"class":331},[19,136615,136616],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[151,136618,136619],{"start":200},[154,136620,136621],{},"video常用属性",[28,136623],{"style":126553,"src":136624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136626,136627],{},"poster属性后面是跟的等待加载图片的地址",[312,136629,136630],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,136631,136632],{"__ignoreMap":30},[321,136633,136634,136636,136638,136640,136642,136644,136646,136648,136650,136652,136654,136656],{"class":323,"line":324},[321,136635,1242],{"class":331},[321,136637,28],{"class":51445},[321,136639,55384],{"class":2169},[321,136641,377],{"class":331},[321,136643,134214],{"class":436},[321,136645,55392],{"class":2169},[321,136647,377],{"class":331},[321,136649,134221],{"class":436},[321,136651,134224],{"class":2169},[321,136653,377],{"class":331},[321,136655,134229],{"class":436},[321,136657,51452],{"class":331},[19,136659,136660],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[312,136662,136664],{"className":126697,"code":136663,"language":126699,"meta":30,"style":30},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[318,136665,136666,136671,136677,136701,136706,136711],{"__ignoreMap":30},[321,136667,136668],{"class":323,"line":324},[321,136669,136670],{"class":390},"\u002F* 2D 位移 *\u002F\n",[321,136672,136673,136675],{"class":323,"line":167},[321,136674,51756],{"class":51445},[321,136676,15779],{"class":331},[321,136678,136679,136682,136684,136687,136689,136691,136693,136695,136697,136699],{"class":323,"line":200},[321,136680,136681],{"class":380},"  transform",[321,136683,51582],{"class":331},[321,136685,136686],{"class":380},"translate",[321,136688,332],{"class":331},[321,136690,643],{"class":380},[321,136692,51637],{"class":327},[321,136694,12642],{"class":331},[321,136696,988],{"class":380},[321,136698,51637],{"class":327},[321,136700,2925],{"class":331},[321,136702,136703],{"class":323,"line":1401},[321,136704,136705],{"class":390},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[321,136707,136708],{"class":323,"line":1407},[321,136709,136710],{"class":390},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[321,136712,136713],{"class":323,"line":1421},[321,136714,1771],{"class":331},[19,136716,136717],{},"muted:自动静音属性",[22205,136719,136721],{"id":136720},"_14122-音频标签audio","14.1.2.2 音频标签audio",[151,136723,136724],{},[154,136725,136726],{},"基本使用",[19,136728,136729,136730,136735,136736],{},"当前 ",[481,136731,136732],{},[318,136733,136734],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[481,136737,136738],{},"mp3格式",[28,136740],{"style":126553,"src":136741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[151,136743,136744],{"start":167},[154,136745,136580],{},[312,136747,136748],{"className":127444,"code":136543,"language":127446,"meta":30,"style":30},[318,136749,136750],{"__ignoreMap":30},[321,136751,136752,136754,136756,136758,136760,136762,136764,136766,136768,136770,136772,136774],{"class":323,"line":324},[321,136753,1242],{"class":331},[321,136755,28328],{"class":51445},[321,136757,55384],{"class":2169},[321,136759,377],{"class":331},[321,136761,136558],{"class":436},[321,136763,92568],{"class":2169},[321,136765,136563],{"class":2169},[321,136767,136566],{"class":2169},[321,136769,136569],{"class":2169},[321,136771,55459],{"class":331},[321,136773,28328],{"class":51445},[321,136775,51452],{"class":331},[19,136777,136778],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[151,136780,136781],{"start":200},[154,136782,136783],{},"常用属性",[28,136785],{"style":126553,"src":136786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[312,136788,136789],{"className":127444,"code":136543,"language":127446,"meta":30,"style":30},[318,136790,136791],{"__ignoreMap":30},[321,136792,136793,136795,136797,136799,136801,136803,136805,136807,136809,136811,136813,136815],{"class":323,"line":324},[321,136794,1242],{"class":331},[321,136796,28328],{"class":51445},[321,136798,55384],{"class":2169},[321,136800,377],{"class":331},[321,136802,136558],{"class":436},[321,136804,92568],{"class":2169},[321,136806,136563],{"class":2169},[321,136808,136566],{"class":2169},[321,136810,136569],{"class":2169},[321,136812,55459],{"class":331},[321,136814,28328],{"class":51445},[321,136816,51452],{"class":331},[19,136818,136819],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22205,136821,136823],{"id":136822},"_14123-总结","14.1.2.3 总结",[1339,136825,136826,136829,136832,136835,136838],{},[154,136827,136828],{},"音频标签和视频标签使用方式基本一致",[154,136830,136831],{},"浏览器支持情况不同",[154,136833,136834],{},"谷歌浏览器把音频和视频自动播放禁止了",[154,136836,136837],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[154,136839,136840],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[292,136842,136844],{"id":136843},"_1413-表单元素","14.1.3 表单元素",[22205,136846,136848],{"id":136847},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[28,136850],{"style":126553,"src":136851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[312,136853,136855],{"className":127444,"code":136854,"language":127446,"meta":30,"style":30},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[318,136856,136857],{"__ignoreMap":30},[321,136858,136859,136861,136863,136865,136867,136869,136871,136873,136876,136878,136880,136883],{"class":323,"line":324},[321,136860,1242],{"class":331},[321,136862,53966],{"class":51445},[321,136864,53969],{"class":2169},[321,136866,377],{"class":331},[321,136868,62844],{"class":436},[321,136870,15127],{"class":2169},[321,136872,377],{"class":331},[321,136874,136875],{"class":436},"\"username\"",[321,136877,61165],{"class":2169},[321,136879,377],{"class":331},[321,136881,136882],{"class":436},"\"请输入用户名\"",[321,136884,51452],{"class":331},[28,136886],{"style":126553,"src":136887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22205,136889,136891],{"id":136890},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[28,136893],{"style":126553,"src":136894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136896,136897],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136899,136900],{},"快捷操作：",[28,136902],{"style":126553,"src":136903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136905,136906],{},"例子1：",[312,136908,136910],{"className":127444,"code":136909,"language":127446,"meta":30,"style":30},"\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",[318,136911,136912,136935,136962,136991,137010],{"__ignoreMap":30},[321,136913,136914,136916,136918,136920,136922,136925,136928,136930,136933],{"class":323,"line":324},[321,136915,1242],{"class":331},[321,136917,66770],{"class":51445},[321,136919,66773],{"class":2169},[321,136921,377],{"class":331},[321,136923,136924],{"class":436},"\"\u002Fsubmit\"",[321,136926,136927],{"class":2169}," method",[321,136929,377],{"class":331},[321,136931,136932],{"class":436},"\"post\"",[321,136934,51452],{"class":331},[321,136936,136937,136939,136941,136943,136945,136947,136949,136951,136953,136955,136957,136960],{"class":323,"line":167},[321,136938,52289],{"class":331},[321,136940,53966],{"class":51445},[321,136942,53969],{"class":2169},[321,136944,377],{"class":331},[321,136946,62844],{"class":436},[321,136948,15127],{"class":2169},[321,136950,377],{"class":331},[321,136952,136875],{"class":436},[321,136954,61165],{"class":2169},[321,136956,377],{"class":331},[321,136958,136959],{"class":436},"\"用户名\"",[321,136961,51452],{"class":331},[321,136963,136964,136966,136968,136970,136972,136975,136977,136979,136982,136984,136986,136989],{"class":323,"line":200},[321,136965,52289],{"class":331},[321,136967,53966],{"class":51445},[321,136969,53969],{"class":2169},[321,136971,377],{"class":331},[321,136973,136974],{"class":436},"\"password\"",[321,136976,15127],{"class":2169},[321,136978,377],{"class":331},[321,136980,136981],{"class":436},"\"pwd\"",[321,136983,61165],{"class":2169},[321,136985,377],{"class":331},[321,136987,136988],{"class":436},"\"密码\"",[321,136990,51452],{"class":331},[321,136992,136993,136995,136997,136999,137001,137003,137006,137008],{"class":323,"line":1401},[321,136994,52289],{"class":331},[321,136996,54032],{"class":51445},[321,136998,53969],{"class":2169},[321,137000,377],{"class":331},[321,137002,66793],{"class":436},[321,137004,137005],{"class":331},">提交\u003C\u002F",[321,137007,54032],{"class":51445},[321,137009,51452],{"class":331},[321,137011,137012,137014,137016],{"class":323,"line":1407},[321,137013,51930],{"class":331},[321,137015,66770],{"class":51445},[321,137017,51452],{"class":331},[28,137019],{"style":126553,"src":137020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137022,137023],{},"value是表单域的内容",[19,137025,137026],{},"例子2：",[312,137028,137029],{"className":127444,"code":136909,"language":127446,"meta":30,"style":30},[318,137030,137031,137051,137077,137103,137121],{"__ignoreMap":30},[321,137032,137033,137035,137037,137039,137041,137043,137045,137047,137049],{"class":323,"line":324},[321,137034,1242],{"class":331},[321,137036,66770],{"class":51445},[321,137038,66773],{"class":2169},[321,137040,377],{"class":331},[321,137042,136924],{"class":436},[321,137044,136927],{"class":2169},[321,137046,377],{"class":331},[321,137048,136932],{"class":436},[321,137050,51452],{"class":331},[321,137052,137053,137055,137057,137059,137061,137063,137065,137067,137069,137071,137073,137075],{"class":323,"line":167},[321,137054,52289],{"class":331},[321,137056,53966],{"class":51445},[321,137058,53969],{"class":2169},[321,137060,377],{"class":331},[321,137062,62844],{"class":436},[321,137064,15127],{"class":2169},[321,137066,377],{"class":331},[321,137068,136875],{"class":436},[321,137070,61165],{"class":2169},[321,137072,377],{"class":331},[321,137074,136959],{"class":436},[321,137076,51452],{"class":331},[321,137078,137079,137081,137083,137085,137087,137089,137091,137093,137095,137097,137099,137101],{"class":323,"line":200},[321,137080,52289],{"class":331},[321,137082,53966],{"class":51445},[321,137084,53969],{"class":2169},[321,137086,377],{"class":331},[321,137088,136974],{"class":436},[321,137090,15127],{"class":2169},[321,137092,377],{"class":331},[321,137094,136981],{"class":436},[321,137096,61165],{"class":2169},[321,137098,377],{"class":331},[321,137100,136988],{"class":436},[321,137102,51452],{"class":331},[321,137104,137105,137107,137109,137111,137113,137115,137117,137119],{"class":323,"line":1401},[321,137106,52289],{"class":331},[321,137108,54032],{"class":51445},[321,137110,53969],{"class":2169},[321,137112,377],{"class":331},[321,137114,66793],{"class":436},[321,137116,137005],{"class":331},[321,137118,54032],{"class":51445},[321,137120,51452],{"class":331},[321,137122,137123,137125,137127],{"class":323,"line":1407},[321,137124,51930],{"class":331},[321,137126,66770],{"class":51445},[321,137128,51452],{"class":331},[28,137130],{"style":126553,"src":137131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137133,137135],{"id":137134},"_142-css新特性","14.2 CSS新特性",[292,137137,137139],{"id":137138},"_1421-新增选择器","14.2.1 新增选择器",[22205,137141,137143],{"id":137142},"_14211-属性选择器","14.2.1.1 属性选择器",[28,137145],{"style":126553,"src":137146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[312,137148,137150],{"className":126697,"code":137149,"language":126699,"meta":30,"style":30},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[318,137151,137152,137167,137183],{"__ignoreMap":30},[321,137153,137154,137156,137158,137160,137162,137164],{"class":323,"line":324},[321,137155,53966],{"class":51445},[321,137157,1222],{"class":331},[321,137159,103252],{"class":2169},[321,137161,377],{"class":327},[321,137163,62844],{"class":436},[321,137165,137166],{"class":331},"] {\n",[321,137168,137169,137171,137173,137175,137177,137179,137181],{"class":323,"line":167},[321,137170,71041],{"class":380},[321,137172,51582],{"class":331},[321,137174,549],{"class":380},[321,137176,51637],{"class":327},[321,137178,51666],{"class":380},[321,137180,130277],{"class":380},[321,137182,1497],{"class":331},[321,137184,137185],{"class":323,"line":200},[321,137186,1771],{"class":331},[28,137188],{"style":126553,"src":137189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137191,361],{},[1339,137193,137194,137197,137200,137203],{},[154,137195,137196],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[154,137198,137199],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[154,137201,137202],{},"属性选择器也可以选择出来自定义的属性",[154,137204,137205,137207],{},[481,137206,9232],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22205,137209,137211],{"id":137210},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[28,137213],{"style":126553,"src":137214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[151,137216,137217],{},[154,137218,137219],{},"fist-child",[312,137221,137223],{"className":126697,"code":137222,"language":126699,"meta":30,"style":30},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[318,137224,137225,137230,137245,137265,137283],{"__ignoreMap":30},[321,137226,137227],{"class":323,"line":324},[321,137228,137229],{"class":390},"\u002F* 属性选择器 *\u002F\n",[321,137231,137232,137234,137236,137238,137240,137242],{"class":323,"line":167},[321,137233,53966],{"class":51445},[321,137235,1222],{"class":331},[321,137237,103252],{"class":2169},[321,137239,377],{"class":327},[321,137241,62844],{"class":436},[321,137243,137244],{"class":331},"] { }\n",[321,137246,137247,137249,137251,137253,137256,137259,137262],{"class":323,"line":200},[321,137248,53966],{"class":51445},[321,137250,1222],{"class":331},[321,137252,14901],{"class":2169},[321,137254,137255],{"class":327},"^=",[321,137257,137258],{"class":436},"\"icon\"",[321,137260,137261],{"class":331},"] { }  ",[321,137263,137264],{"class":390},"\u002F* 以 icon 开头 *\u002F\n",[321,137266,137267,137269,137271,137273,137276,137278,137280],{"class":323,"line":1401},[321,137268,53966],{"class":51445},[321,137270,1222],{"class":331},[321,137272,14901],{"class":2169},[321,137274,137275],{"class":327},"$=",[321,137277,137258],{"class":436},[321,137279,137261],{"class":331},[321,137281,137282],{"class":390},"\u002F* 以 icon 结尾 *\u002F\n",[321,137284,137285,137287,137289,137291,137294,137296,137298],{"class":323,"line":1407},[321,137286,53966],{"class":51445},[321,137288,1222],{"class":331},[321,137290,14901],{"class":2169},[321,137292,137293],{"class":327},"*=",[321,137295,137258],{"class":436},[321,137297,137261],{"class":331},[321,137299,137300],{"class":390},"\u002F* 包含 icon *\u002F\n",[19,137302,137303],{},"ul的第一个儿子文本为红色",[19,137305,137306],{},"一定要在冒号前加空格，不然就是选中所有的了",[312,137308,137310],{"className":126697,"code":137309,"language":126699,"meta":30,"style":30},".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",[318,137311,137312,137318,137328,137332,137336,137341,137354,137367,137383,137400,137417],{"__ignoreMap":30},[321,137313,137314,137316],{"class":323,"line":324},[321,137315,126988],{"class":2169},[321,137317,15779],{"class":331},[321,137319,137320,137322,137324,137326],{"class":323,"line":167},[321,137321,71050],{"class":380},[321,137323,51582],{"class":331},[321,137325,57566],{"class":380},[321,137327,1497],{"class":331},[321,137329,137330],{"class":323,"line":200},[321,137331,1771],{"class":331},[321,137333,137334],{"class":323,"line":1401},[321,137335,136158],{"class":331},[321,137337,137338],{"class":323,"line":1407},[321,137339,137340],{"class":390},"\u002F* 结构伪类选择器 *\u002F\n",[321,137342,137343,137345,137348,137351],{"class":323,"line":1421},[321,137344,154],{"class":51445},[321,137346,137347],{"class":2169},":first-child",[321,137349,137350],{"class":331}," { }           ",[321,137352,137353],{"class":390},"\u002F* 第一个 *\u002F\n",[321,137355,137356,137358,137361,137364],{"class":323,"line":1427},[321,137357,154],{"class":51445},[321,137359,137360],{"class":2169},":last-child",[321,137362,137363],{"class":331}," { }            ",[321,137365,137366],{"class":390},"\u002F* 最后一个 *\u002F\n",[321,137368,137369,137371,137373,137375,137377,137380],{"class":323,"line":1518},[321,137370,154],{"class":51445},[321,137372,129611],{"class":2169},[321,137374,332],{"class":331},[321,137376,409],{"class":380},[321,137378,137379],{"class":331},") { }          ",[321,137381,137382],{"class":390},"\u002F* 第2个 *\u002F\n",[321,137384,137385,137387,137389,137391,137394,137397],{"class":323,"line":1524},[321,137386,154],{"class":51445},[321,137388,129611],{"class":2169},[321,137390,332],{"class":331},[321,137392,137393],{"class":380},"2n",[321,137395,137396],{"class":331},") { }         ",[321,137398,137399],{"class":390},"\u002F* 偶数 *\u002F\n",[321,137401,137402,137404,137406,137408,137411,137414],{"class":323,"line":1536},[321,137403,154],{"class":51445},[321,137405,129611],{"class":2169},[321,137407,332],{"class":331},[321,137409,137410],{"class":380},"2n+1",[321,137412,137413],{"class":331},") { }       ",[321,137415,137416],{"class":390},"\u002F* 奇数 *\u002F\n",[321,137418,137419,137421,137423,137425,137428,137430],{"class":323,"line":1818},[321,137420,154],{"class":51445},[321,137422,129611],{"class":2169},[321,137424,332],{"class":331},[321,137426,137427],{"class":380},"-n+3",[321,137429,137413],{"class":331},[321,137431,137432],{"class":390},"\u002F* 前3个 *\u002F\n",[51756,137434,137437],{"className":137435},[137436],"example","\n  示例内容\n",[19,137439,137440],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1339,137442,137443],{},[154,137444,137445,137448],{},[318,137446,137447],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137450,137451],{},"也就是说它选择的是熊大",[151,137453,137454],{"start":1421},[154,137455,137456],{},"权重",[312,137458,137460],{"className":126697,"code":137459,"language":126699,"meta":30,"style":30},"\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",[318,137461,137462,137466,137476,137486,137500,137514,137528],{"__ignoreMap":30},[321,137463,137464],{"class":323,"line":324},[321,137465,137340],{"class":390},[321,137467,137468,137470,137472,137474],{"class":323,"line":167},[321,137469,154],{"class":51445},[321,137471,137347],{"class":2169},[321,137473,137350],{"class":331},[321,137475,137353],{"class":390},[321,137477,137478,137480,137482,137484],{"class":323,"line":200},[321,137479,154],{"class":51445},[321,137481,137360],{"class":2169},[321,137483,137363],{"class":331},[321,137485,137366],{"class":390},[321,137487,137488,137490,137492,137494,137496,137498],{"class":323,"line":1401},[321,137489,154],{"class":51445},[321,137491,129611],{"class":2169},[321,137493,332],{"class":331},[321,137495,409],{"class":380},[321,137497,137379],{"class":331},[321,137499,137382],{"class":390},[321,137501,137502,137504,137506,137508,137510,137512],{"class":323,"line":1407},[321,137503,154],{"class":51445},[321,137505,129611],{"class":2169},[321,137507,332],{"class":331},[321,137509,137393],{"class":380},[321,137511,137396],{"class":331},[321,137513,137399],{"class":390},[321,137515,137516,137518,137520,137522,137524,137526],{"class":323,"line":1421},[321,137517,154],{"class":51445},[321,137519,129611],{"class":2169},[321,137521,332],{"class":331},[321,137523,137410],{"class":380},[321,137525,137413],{"class":331},[321,137527,137416],{"class":390},[321,137529,137530,137532,137534,137536,137538,137540],{"class":323,"line":1427},[321,137531,154],{"class":51445},[321,137533,129611],{"class":2169},[321,137535,332],{"class":331},[321,137537,137427],{"class":380},[321,137539,137413],{"class":331},[321,137541,137432],{"class":390},[19,137543,137544],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22205,137546,137548],{"id":137547},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137550,137551],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[28,137553],{"style":126553,"src":137554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[151,137556,137557],{},[154,137558,361],{},[1339,137560,137561,137564,137567,137570,137573,137576],{},[154,137562,137563],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[154,137565,137566],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[154,137568,137569],{},"语法： element::before {}",[154,137571,137572],{},"before 和 after 必须有 content 属性",[154,137574,137575],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[154,137577,137578],{},"伪元素选择器和标签选择器一样，权重为 1",[151,137580,137581],{"start":167},[154,137582,137583],{},"实例",[312,137585,137586],{"className":126697,"code":137459,"language":126699,"meta":30,"style":30},[318,137587,137588,137592,137602,137612,137626,137640,137654],{"__ignoreMap":30},[321,137589,137590],{"class":323,"line":324},[321,137591,137340],{"class":390},[321,137593,137594,137596,137598,137600],{"class":323,"line":167},[321,137595,154],{"class":51445},[321,137597,137347],{"class":2169},[321,137599,137350],{"class":331},[321,137601,137353],{"class":390},[321,137603,137604,137606,137608,137610],{"class":323,"line":200},[321,137605,154],{"class":51445},[321,137607,137360],{"class":2169},[321,137609,137363],{"class":331},[321,137611,137366],{"class":390},[321,137613,137614,137616,137618,137620,137622,137624],{"class":323,"line":1401},[321,137615,154],{"class":51445},[321,137617,129611],{"class":2169},[321,137619,332],{"class":331},[321,137621,409],{"class":380},[321,137623,137379],{"class":331},[321,137625,137382],{"class":390},[321,137627,137628,137630,137632,137634,137636,137638],{"class":323,"line":1407},[321,137629,154],{"class":51445},[321,137631,129611],{"class":2169},[321,137633,332],{"class":331},[321,137635,137393],{"class":380},[321,137637,137396],{"class":331},[321,137639,137399],{"class":390},[321,137641,137642,137644,137646,137648,137650,137652],{"class":323,"line":1421},[321,137643,154],{"class":51445},[321,137645,129611],{"class":2169},[321,137647,332],{"class":331},[321,137649,137410],{"class":380},[321,137651,137413],{"class":331},[321,137653,137416],{"class":390},[321,137655,137656,137658,137660,137662,137664,137666],{"class":323,"line":1427},[321,137657,154],{"class":51445},[321,137659,129611],{"class":2169},[321,137661,332],{"class":331},[321,137663,137427],{"class":380},[321,137665,137413],{"class":331},[321,137667,137432],{"class":390},[28,137669],{"style":126553,"src":137670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[151,137672,137673],{"start":200},[154,137674,137675],{},"使用场景1",[28,137677],{"style":126553,"src":137678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137680,137681],{},"不需要再加盒子来整红色那部分了",[312,137683,137685],{"className":126697,"code":137684,"language":126699,"meta":30,"style":30},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[318,137686,137687,137692,137701,137712,137722,137726,137735,137746,137756],{"__ignoreMap":30},[321,137688,137689],{"class":323,"line":324},[321,137690,137691],{"class":390},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[321,137693,137694,137696,137699],{"class":323,"line":167},[321,137695,51756],{"class":51445},[321,137697,137698],{"class":2169},"::before",[321,137700,15779],{"class":331},[321,137702,137703,137706,137708,137710],{"class":323,"line":200},[321,137704,137705],{"class":380},"  content",[321,137707,51582],{"class":331},[321,137709,7859],{"class":436},[321,137711,1497],{"class":331},[321,137713,137714,137716,137718,137720],{"class":323,"line":1401},[321,137715,128313],{"class":380},[321,137717,51582],{"class":331},[321,137719,61014],{"class":380},[321,137721,1497],{"class":331},[321,137723,137724],{"class":323,"line":1407},[321,137725,1771],{"class":331},[321,137727,137728,137730,137733],{"class":323,"line":1421},[321,137729,51756],{"class":51445},[321,137731,137732],{"class":2169},"::after",[321,137734,15779],{"class":331},[321,137736,137737,137739,137741,137744],{"class":323,"line":1427},[321,137738,137705],{"class":380},[321,137740,51582],{"class":331},[321,137742,137743],{"class":436},"\"→\"",[321,137745,1497],{"class":331},[321,137747,137748,137750,137752,137754],{"class":323,"line":1518},[321,137749,71050],{"class":380},[321,137751,51582],{"class":331},[321,137753,62215],{"class":380},[321,137755,1497],{"class":331},[321,137757,137758],{"class":323,"line":1524},[321,137759,1771],{"class":331},[28,137761],{"style":126553,"src":137762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137764,137765],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[28,137767],{"style":126553,"src":137768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137770,137771],{},"但是在引用时需要先转义一下",[19,137773,137774],{},"content='\\e930'",[151,137776,137777],{"start":1401},[154,137778,137779],{},"使用场景2",[19,137781,137782],{},"仿土豆效果",[19,137784,137785],{},"通过使用伪元素选择器可以减少body中盒子的数量",[312,137787,137788],{"className":126697,"code":137684,"language":126699,"meta":30,"style":30},[318,137789,137790,137794,137802,137812,137822,137826,137834,137844,137854],{"__ignoreMap":30},[321,137791,137792],{"class":323,"line":324},[321,137793,137691],{"class":390},[321,137795,137796,137798,137800],{"class":323,"line":167},[321,137797,51756],{"class":51445},[321,137799,137698],{"class":2169},[321,137801,15779],{"class":331},[321,137803,137804,137806,137808,137810],{"class":323,"line":200},[321,137805,137705],{"class":380},[321,137807,51582],{"class":331},[321,137809,7859],{"class":436},[321,137811,1497],{"class":331},[321,137813,137814,137816,137818,137820],{"class":323,"line":1401},[321,137815,128313],{"class":380},[321,137817,51582],{"class":331},[321,137819,61014],{"class":380},[321,137821,1497],{"class":331},[321,137823,137824],{"class":323,"line":1407},[321,137825,1771],{"class":331},[321,137827,137828,137830,137832],{"class":323,"line":1421},[321,137829,51756],{"class":51445},[321,137831,137732],{"class":2169},[321,137833,15779],{"class":331},[321,137835,137836,137838,137840,137842],{"class":323,"line":1427},[321,137837,137705],{"class":380},[321,137839,51582],{"class":331},[321,137841,137743],{"class":436},[321,137843,1497],{"class":331},[321,137845,137846,137848,137850,137852],{"class":323,"line":1518},[321,137847,71050],{"class":380},[321,137849,51582],{"class":331},[321,137851,62215],{"class":380},[321,137853,1497],{"class":331},[321,137855,137856],{"class":323,"line":1524},[321,137857,1771],{"class":331},[28,137859],{"style":126553,"src":137860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[151,137862,137863],{"start":1407},[154,137864,137865],{},"使用场景3",[19,137867,137868],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[312,137870,137872],{"className":126697,"code":137871,"language":126699,"meta":30,"style":30},".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",[318,137873,137874,137880,137890,137894,137898,137902,137910,137920,137930,137934,137942,137952,137962],{"__ignoreMap":30},[321,137875,137876,137878],{"class":323,"line":324},[321,137877,130545],{"class":2169},[321,137879,15779],{"class":331},[321,137881,137882,137884,137886,137888],{"class":323,"line":167},[321,137883,131177],{"class":380},[321,137885,51582],{"class":331},[321,137887,23944],{"class":380},[321,137889,1497],{"class":331},[321,137891,137892],{"class":323,"line":200},[321,137893,1771],{"class":331},[321,137895,137896],{"class":323,"line":1401},[321,137897,136158],{"class":331},[321,137899,137900],{"class":323,"line":1407},[321,137901,137691],{"class":390},[321,137903,137904,137906,137908],{"class":323,"line":1421},[321,137905,51756],{"class":51445},[321,137907,137698],{"class":2169},[321,137909,15779],{"class":331},[321,137911,137912,137914,137916,137918],{"class":323,"line":1427},[321,137913,137705],{"class":380},[321,137915,51582],{"class":331},[321,137917,7859],{"class":436},[321,137919,1497],{"class":331},[321,137921,137922,137924,137926,137928],{"class":323,"line":1518},[321,137923,128313],{"class":380},[321,137925,51582],{"class":331},[321,137927,61014],{"class":380},[321,137929,1497],{"class":331},[321,137931,137932],{"class":323,"line":1524},[321,137933,1771],{"class":331},[321,137935,137936,137938,137940],{"class":323,"line":1536},[321,137937,51756],{"class":51445},[321,137939,137732],{"class":2169},[321,137941,15779],{"class":331},[321,137943,137944,137946,137948,137950],{"class":323,"line":1818},[321,137945,137705],{"class":380},[321,137947,51582],{"class":331},[321,137949,137743],{"class":436},[321,137951,1497],{"class":331},[321,137953,137954,137956,137958,137960],{"class":323,"line":1823},[321,137955,71050],{"class":380},[321,137957,51582],{"class":331},[321,137959,62215],{"class":380},[321,137961,1497],{"class":331},[321,137963,137964],{"class":323,"line":1829},[321,137965,1771],{"class":331},[19,137967,137968],{},"div {\nmargin: 0 auto;\n}",[312,137970,137973],{"className":137971,"code":137972,"language":5394},[5392],"\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",[318,137974,137972],{"__ignoreMap":30},[19,137976,137977],{},"如果想让多个元素都发生变化",[19,137979,137980],{},"不能如下操作：",[19,137982,137983],{},"transition: width 2s ease 0.5s;",[19,137985,137986],{},"transition: height 2s ease 0.5s;不对！！！",[19,137988,137989],{},"上方会样式冲突，导致不显示任何过渡效果",[19,137991,137992],{},"使用如下：加逗号隔开",[19,137994,137995],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,137997,137998],{},"transition all 2s ease;",[292,138000,138002],{"id":138001},"_1426-过渡练习","14.2.6 过渡练习",[151,138004,138005],{},[154,138006,138007],{},"进度条",[28,138009],{"style":126553,"src":138010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[312,138012,138014],{"className":126697,"code":138013,"language":126699,"meta":30,"style":30},"div {\n  transition: all 0.3s ease;\n}\n",[318,138015,138016,138022,138040],{"__ignoreMap":30},[321,138017,138018,138020],{"class":323,"line":324},[321,138019,51756],{"class":51445},[321,138021,15779],{"class":331},[321,138023,138024,138027,138029,138031,138034,138036,138038],{"class":323,"line":167},[321,138025,138026],{"class":380},"  transition",[321,138028,51582],{"class":331},[321,138030,28266],{"class":380},[321,138032,138033],{"class":380}," 0.3",[321,138035,1027],{"class":327},[321,138037,78825],{"class":380},[321,138039,1497],{"class":331},[321,138041,138042],{"class":323,"line":200},[321,138043,1771],{"class":331},[151,138045,138046],{"start":167},[154,138047,138048],{},"小米logo",[19,138050,138051],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[312,138053,138055],{"className":126697,"code":138054,"language":126699,"meta":30,"style":30},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[318,138056,138057,138062,138068,138084,138089],{"__ignoreMap":30},[321,138058,138059],{"class":323,"line":324},[321,138060,138061],{"class":390},"\u002F* CSS3 过渡 *\u002F\n",[321,138063,138064,138066],{"class":323,"line":167},[321,138065,51756],{"class":51445},[321,138067,15779],{"class":331},[321,138069,138070,138072,138074,138076,138078,138080,138082],{"class":323,"line":200},[321,138071,138026],{"class":380},[321,138073,51582],{"class":331},[321,138075,28266],{"class":380},[321,138077,138033],{"class":380},[321,138079,1027],{"class":327},[321,138081,78825],{"class":380},[321,138083,1497],{"class":331},[321,138085,138086],{"class":323,"line":1401},[321,138087,138088],{"class":390},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[321,138090,138091],{"class":323,"line":1407},[321,138092,1771],{"class":331},[19,138094,138095],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5333,138097,138098],{},"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":30,"searchDepth":167,"depth":167,"links":138100},[138101,138106],{"id":136431,"depth":167,"text":136432,"children":138102},[138103,138104,138105],{"id":136435,"depth":200,"text":136436},{"id":136512,"depth":200,"text":136513},{"id":136843,"depth":200,"text":136844},{"id":137134,"depth":167,"text":137135,"children":138107},[138108,138109],{"id":137138,"depth":200,"text":137139},{"id":138001,"depth":200,"text":138002},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136423,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138116,"title":138117,"body":138118,"description":23584,"extension":249,"meta":139862,"navigation":251,"path":139863,"seo":139864,"stem":139865,"__hash__":139866},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138119,"toc":139843},[138120,138123,138127,138130,138136,138142,138146,138148,138151,138154,138157,138160,138163,138166,138169,138173,138177,138180,138183,138186,138190,138193,138196,138201,138204,138207,138210,138214,138217,138226,138229,138232,138236,138239,138242,138247,138254,138268,138276,138283,138288,138291,138294,138297,138304,138308,138314,138320,138323,138326,138331,138337,138339,138347,138352,138355,138361,138363,138368,138373,138376,138378,138383,138386,138391,138396,138430,138434,138438,138441,138445,138448,138534,138537,138574,138577,138613,138617,138622,138635,138689,138691,138719,138721,138749,138755,138769,138771,138815,138817,138861,138864,138871,138882,138884,138911,138913,138939,138946,138962,138964,139058,139060,139154,139161,139164,139169,139175,139249,139252,139254,139290,139292,139328,139331,139338,139357,139360,139363,139365,139390,139392,139416,139419,139422,139452,139456,139459,139522,139524,139590,139592,139656,139659,139691,139693,139719,139721,139747,139750,139781,139783,139809,139811,139837,139840],[10,138121,138117],{"id":138122},"_15-品优购项目上篇-搭建与公共模块",[14,138124,138126],{"id":138125},"_151-项目规划","15.1 项目规划",[28,138128],{"style":126553,"src":138129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138131,138132,138135],{},[481,138133,138134],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138137,138138,138141],{},[481,138139,138140],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138143,138145],{"id":138144},"_152-项目介绍","15.2 项目介绍",[19,138147,138134],{},[28,138149],{"style":126553,"src":138150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138152,138153],{},"主页：",[28,138155],{"style":126553,"src":138156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138158,138159],{},"列表页：",[28,138161],{"style":126553,"src":138162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138164,138165],{},"注册页：",[28,138167],{"style":126553,"src":138168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138170,138172],{"id":138171},"_153-项目搭建工作","15.3 项目搭建工作",[292,138174,138176],{"id":138175},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[28,138178],{"style":126553,"src":138179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138181,138182],{},"经常更换的图片要放到upload文件夹中",[19,138184,138185],{},"不经常换的放到images文件夹中",[292,138187,138189],{"id":138188},"_1532-创建文件如下","15.3.2 创建文件如下",[28,138191],{"style":126553,"src":138192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[28,138194],{"style":126553,"src":138195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138197,138198],{},[481,138199,138200],{},"初始化样式：",[19,138202,138203],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138205,138206],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138208,138209],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[292,138211,138213],{"id":138212},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138215,138216],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138218,138219,138220,138225],{},"这里最典型的应用就是 ",[481,138221,138222],{},[318,138223,138224],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[28,138227],{"style":126553,"src":138228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138230,138231],{},"通过link方法来引入",[292,138233,138235],{"id":138234},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[28,138237],{"style":126553,"src":138238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138240,138241],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[151,138243,138244],{},[154,138245,138246],{},"制作favicon图标",[19,138248,138249,138250,138253],{},"①把品优购图标切成 ",[318,138251,138252],{},"png"," 图片",[19,138255,138256,138257,138259,138260,138263,138264],{},"②把 ",[318,138258,138252],{}," 图片转换为 ",[318,138261,138262],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[570,138265,138266],{"href":138266,"rel":138267},"http:\u002F\u002Fwww.bitbug.net\u002F",[24073],[151,138269,138270,138273],{"start":167},[154,138271,138272],{},"favicon图标放到网站根目录下",[154,138274,138275],{},"HTML页面引入favicon",[19,138277,138278,138279,138282],{},"在html 页面里面的 ",[318,138280,138281],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138284,138285],{},[318,138286,138287],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138289,138290],{},"复制这行代码或者在生成这个的网站进行复制",[28,138292],{"style":126553,"src":138293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138295,138296],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138298,138299,138300],{},"例如:",[570,138301,138302],{"href":138302,"rel":138303},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24073],[292,138305,138307],{"id":138306},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138309,138310,138313],{},[481,138311,138312],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138315,138316,138319],{},[481,138317,138318],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138321,138322],{},"页面必须有三个标签用来符合 SEO 优化",[28,138324],{"style":126553,"src":138325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[151,138327,138328],{},[154,138329,138330],{},"title网站标题",[19,138332,138333,138336],{},[481,138334,138335],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138338,68935],{},[1339,138340,138341,138344],{},[154,138342,138343],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[154,138345,138346],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[151,138348,138349],{"start":167},[154,138350,138351],{},"description网站描述",[19,138353,138354],{},"简要说明我们网站主要是做什么的",[19,138356,138357,138360],{},[481,138358,138359],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138362,68935],{},[19,138364,138365],{},[318,138366,138367],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[151,138369,138370],{"start":200},[154,138371,138372],{},"keywords关键词",[19,138374,138375],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138377,68935],{},[19,138379,138380],{},[318,138381,138382],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138384,138385],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138387,138388],{},[481,138389,138390],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[151,138392,138393],{"start":1401},[154,138394,138395],{},"代码总结",[312,138397,138398],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,138399,138400,138404,138418,138422],{"__ignoreMap":30},[321,138401,138402],{"class":323,"line":324},[321,138403,130808],{"class":390},[321,138405,138406,138408,138410,138412,138414,138416],{"class":323,"line":167},[321,138407,1242],{"class":331},[321,138409,51756],{"class":51445},[321,138411,53631],{"class":2169},[321,138413,377],{"class":331},[321,138415,130821],{"class":436},[321,138417,51452],{"class":331},[321,138419,138420],{"class":323,"line":200},[321,138421,130828],{"class":331},[321,138423,138424,138426,138428],{"class":323,"line":1401},[321,138425,51930],{"class":331},[321,138427,51756],{"class":51445},[321,138429,51452],{"class":331},[14,138431,138433],{"id":138432},"_154-项目公共部分制作","15.4 项目公共部分制作",[292,138435,138437],{"id":138436},"_1541-常用模块类命名","15.4.1 常用模块类命名",[28,138439],{"style":126553,"src":138440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[292,138442,138444],{"id":138443},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138446,138447],{},"布局思路：",[1339,138449,138450,138453,138456,138478,138511],{},[154,138451,138452],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[154,138454,138455],{},"里面包含版心的盒子",[154,138457,138458,138459],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1339,138460,138461,138469,138475],{},[154,138462,138463,138464,21707,138466,138468],{},"1 号盒子 里面包含一个",[318,138465,1339],{},[318,138467,1339],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[154,138470,138471,138472,138474],{},"里面的内容是水平排列，所以需要给",[318,138473,154],{},"设置浮动",[154,138476,138477],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[154,138479,138480,138481],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1339,138482,138483,138497,138502],{},[154,138484,138485,138486,21707,138488,138490,138491,138493,138494,138496],{},"2 号盒子 里面包含一个",[318,138487,1339],{},[318,138489,1339],{},"包裹",[318,138492,154],{},"，中间的",[318,138495,1253],{},"可以用样式去设置，也可以用字符 |",[154,138498,138499,138500,138474],{},"里面内容水平排列，给",[318,138501,154],{},[154,138503,138504,138505,138507,138508,138510],{},"找到里面所有偶数的 ",[318,138506,154],{}," 设置样式（偶数的 ",[318,138509,154],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[154,138512,138513,138514],{},"需要用到字体图标",[1339,138515,138516,138522,138525,138528,138531],{},[154,138517,138518,138519],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[318,138520,138521],{},"arrow-icon",[154,138523,138524],{},"先要引入字体图片的资源",[154,138526,138527],{},"在样式里面利用 font-face 来进行声明",[154,138529,138530],{},"在伪元素的 content属性设置 图标的编码",[154,138532,138533],{},"给伪元素设置font-family属性",[19,138535,138536],{},"结构实例代码：",[312,138538,138540],{"className":126697,"code":138539,"language":126699,"meta":30,"style":30},"div::before {\n  content: \"\";\n  display: block;\n}\n",[318,138541,138542,138550,138560,138570],{"__ignoreMap":30},[321,138543,138544,138546,138548],{"class":323,"line":324},[321,138545,51756],{"class":51445},[321,138547,137698],{"class":2169},[321,138549,15779],{"class":331},[321,138551,138552,138554,138556,138558],{"class":323,"line":167},[321,138553,137705],{"class":380},[321,138555,51582],{"class":331},[321,138557,7859],{"class":436},[321,138559,1497],{"class":331},[321,138561,138562,138564,138566,138568],{"class":323,"line":200},[321,138563,128313],{"class":380},[321,138565,51582],{"class":331},[321,138567,61014],{"class":380},[321,138569,1497],{"class":331},[321,138571,138572],{"class":323,"line":1401},[321,138573,1771],{"class":331},[19,138575,138576],{},"样式实例代码：",[312,138578,138579],{"className":126697,"code":138539,"language":126699,"meta":30,"style":30},[318,138580,138581,138589,138599,138609],{"__ignoreMap":30},[321,138582,138583,138585,138587],{"class":323,"line":324},[321,138584,51756],{"class":51445},[321,138586,137698],{"class":2169},[321,138588,15779],{"class":331},[321,138590,138591,138593,138595,138597],{"class":323,"line":167},[321,138592,137705],{"class":380},[321,138594,51582],{"class":331},[321,138596,7859],{"class":436},[321,138598,1497],{"class":331},[321,138600,138601,138603,138605,138607],{"class":323,"line":200},[321,138602,128313],{"class":380},[321,138604,51582],{"class":331},[321,138606,61014],{"class":380},[321,138608,1497],{"class":331},[321,138610,138611],{"class":323,"line":1401},[321,138612,1771],{"class":331},[292,138614,138616],{"id":138615},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1339,138618,138619],{},[154,138620,138621],{},"header 盒子必须要有高度",[19,138623,138624,138625,138627,138628],{},"1 号盒子是 ",[318,138626,131709],{}," 标志定位，在正常开发过程中， ",[481,138629,138630,138631,138634],{},"logo的布局其实是有讲究的，需要进行 ",[318,138632,138633],{},"logoSEO","的优化 （★★★）",[1339,138636,138637,138645,138653,138680],{},[154,138638,138639,138641,138642,138644],{},[318,138640,131709],{}," 里面首先放一个 ",[318,138643,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[154,138646,138647,138649,138650,138652],{},[318,138648,10],{}," 里面再放一个链接，可以返回首页的，把 ",[318,138651,131709],{}," 的背景图片给链接即可",[154,138654,138655,138656],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1339,138657,138658,138673],{},[154,138659,138660,138661,138664,138665,138668,138669,138672],{},"方法1：",[318,138662,138663],{},"text-indent"," 移到盒子外面（",[318,138666,138667],{},"text-indent: -9999px",") ，然后 ",[318,138670,138671],{},"overflow:hidden"," ，淘宝的做法",[154,138674,138675,138676,138679],{},"方法2：直接给 ",[318,138677,138678],{},"font-size: 0;"," 就看不到文字了，京东的做法",[154,138681,138682,138683,138685,138686,138688],{},"最后给链接一个 ",[318,138684,51552],{}," 属性，这样鼠标放到 ",[318,138687,131709],{}," 上就可以看到提示文字了",[19,138690,138536],{},[312,138692,138693],{"className":127444,"code":131930,"language":127446,"meta":30,"style":30},[318,138694,138695],{"__ignoreMap":30},[321,138696,138697,138699,138701,138703,138705,138707,138709,138711,138713,138715,138717],{"class":323,"line":324},[321,138698,1242],{"class":331},[321,138700,570],{"class":51445},[321,138702,61202],{"class":2169},[321,138704,377],{"class":331},[321,138706,131945],{"class":436},[321,138708,131948],{"class":2169},[321,138710,377],{"class":331},[321,138712,131953],{"class":436},[321,138714,131956],{"class":331},[321,138716,570],{"class":51445},[321,138718,51452],{"class":331},[19,138720,138576],{},[312,138722,138723],{"className":127444,"code":131930,"language":127446,"meta":30,"style":30},[318,138724,138725],{"__ignoreMap":30},[321,138726,138727,138729,138731,138733,138735,138737,138739,138741,138743,138745,138747],{"class":323,"line":324},[321,138728,1242],{"class":331},[321,138730,570],{"class":51445},[321,138732,61202],{"class":2169},[321,138734,377],{"class":331},[321,138736,131945],{"class":436},[321,138738,131948],{"class":2169},[321,138740,377],{"class":331},[321,138742,131953],{"class":436},[321,138744,131956],{"class":331},[321,138746,570],{"class":51445},[321,138748,51452],{"class":331},[19,138750,138751,138752,138754],{},"2 号盒子是 ",[318,138753,131722],{}," 搜索模块定位",[1339,138756,138757,138760,138763,138766],{},[154,138758,138759],{},"search盒子利用定位的方式放在对应的位置",[154,138761,138762],{},"search盒子设置绝对定位，header盒子设置相对定位",[154,138764,138765],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[154,138767,138768],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138770,138536],{},[312,138772,138773],{"className":126697,"code":132017,"language":126699,"meta":30,"style":30},[318,138774,138775,138797,138801,138811],{"__ignoreMap":30},[321,138776,138777,138779,138781,138783,138785,138787,138789,138791,138793,138795],{"class":323,"line":324},[321,138778,51756],{"class":51445},[321,138780,12642],{"class":331},[321,138782,19],{"class":51445},[321,138784,12642],{"class":331},[321,138786,10],{"class":51445},[321,138788,12642],{"class":331},[321,138790,1339],{"class":51445},[321,138792,12642],{"class":331},[321,138794,154],{"class":51445},[321,138796,15779],{"class":331},[321,138798,138799],{"class":323,"line":167},[321,138800,132046],{"class":390},[321,138802,138803,138805,138807,138809],{"class":323,"line":200},[321,138804,128313],{"class":380},[321,138806,51582],{"class":331},[321,138808,61014],{"class":380},[321,138810,1497],{"class":331},[321,138812,138813],{"class":323,"line":1401},[321,138814,1771],{"class":331},[19,138816,138576],{},[312,138818,138819],{"className":126697,"code":132017,"language":126699,"meta":30,"style":30},[318,138820,138821,138843,138847,138857],{"__ignoreMap":30},[321,138822,138823,138825,138827,138829,138831,138833,138835,138837,138839,138841],{"class":323,"line":324},[321,138824,51756],{"class":51445},[321,138826,12642],{"class":331},[321,138828,19],{"class":51445},[321,138830,12642],{"class":331},[321,138832,10],{"class":51445},[321,138834,12642],{"class":331},[321,138836,1339],{"class":51445},[321,138838,12642],{"class":331},[321,138840,154],{"class":51445},[321,138842,15779],{"class":331},[321,138844,138845],{"class":323,"line":167},[321,138846,132046],{"class":390},[321,138848,138849,138851,138853,138855],{"class":323,"line":200},[321,138850,128313],{"class":380},[321,138852,51582],{"class":331},[321,138854,61014],{"class":380},[321,138856,1497],{"class":331},[321,138858,138859],{"class":323,"line":1401},[321,138860,1771],{"class":331},[19,138862,138863],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138865,138866,138867,138870],{},"3 号盒子是 ",[318,138868,138869],{},"hotwords"," 热词模块定位",[1339,138872,138873,138876,138879],{},[154,138874,138875],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[154,138877,138878],{},"给里面所有的a标签设置 左右10px的外边距",[154,138880,138881],{},"给第一个a标签设置文字变红色（#c81623）",[19,138883,138536],{},[312,138885,138887],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},"div {\n  margin: 0 auto;\n}\n",[318,138888,138889,138895,138907],{"__ignoreMap":30},[321,138890,138891,138893],{"class":323,"line":324},[321,138892,51756],{"class":51445},[321,138894,15779],{"class":331},[321,138896,138897,138899,138901,138903,138905],{"class":323,"line":167},[321,138898,70615],{"class":380},[321,138900,51582],{"class":331},[321,138902,523],{"class":380},[321,138904,51701],{"class":380},[321,138906,1497],{"class":331},[321,138908,138909],{"class":323,"line":200},[321,138910,1771],{"class":331},[19,138912,138576],{},[312,138914,138915],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},[318,138916,138917,138923,138935],{"__ignoreMap":30},[321,138918,138919,138921],{"class":323,"line":324},[321,138920,51756],{"class":51445},[321,138922,15779],{"class":331},[321,138924,138925,138927,138929,138931,138933],{"class":323,"line":167},[321,138926,70615],{"class":380},[321,138928,51582],{"class":331},[321,138930,523],{"class":380},[321,138932,51701],{"class":380},[321,138934,1497],{"class":331},[321,138936,138937],{"class":323,"line":200},[321,138938,1771],{"class":331},[19,138940,138941,138942,138945],{},"4 号盒子是 ",[318,138943,138944],{},"shopcar"," 购物车模块",[1339,138947,138948,138953,138956,138959],{},[154,138949,123480,138950,138952],{},[318,138951,138944],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[154,138954,138955],{},"count 统计部分用绝对定位做",[154,138957,138958],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[154,138960,138961],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138963,138536],{},[312,138965,138966],{"className":126697,"code":132129,"language":126699,"meta":30,"style":30},[318,138967,138968,138972,138986,138990,139004,139008,139022,139026,139040,139044],{"__ignoreMap":30},[321,138969,138970],{"class":323,"line":324},[321,138971,132136],{"class":390},[321,138973,138974,138976,138978,138980,138982,138984],{"class":323,"line":167},[321,138975,132141],{"class":2169},[321,138977,79952],{"class":331},[321,138979,129057],{"class":380},[321,138981,51582],{"class":331},[321,138983,132150],{"class":380},[321,138985,129627],{"class":331},[321,138987,138988],{"class":323,"line":200},[321,138989,132157],{"class":390},[321,138991,138992,138994,138996,138998,139000,139002],{"class":323,"line":1401},[321,138993,132162],{"class":2169},[321,138995,79952],{"class":331},[321,138997,129057],{"class":380},[321,138999,51582],{"class":331},[321,139001,54909],{"class":380},[321,139003,129627],{"class":331},[321,139005,139006],{"class":323,"line":1407},[321,139007,132177],{"class":390},[321,139009,139010,139012,139014,139016,139018,139020],{"class":323,"line":1421},[321,139011,132182],{"class":2169},[321,139013,79952],{"class":331},[321,139015,129057],{"class":380},[321,139017,51582],{"class":331},[321,139019,54976],{"class":380},[321,139021,129627],{"class":331},[321,139023,139024],{"class":323,"line":1427},[321,139025,132197],{"class":390},[321,139027,139028,139030,139032,139034,139036,139038],{"class":323,"line":1518},[321,139029,132202],{"class":2169},[321,139031,79952],{"class":331},[321,139033,129057],{"class":380},[321,139035,51582],{"class":331},[321,139037,86378],{"class":380},[321,139039,129627],{"class":331},[321,139041,139042],{"class":323,"line":1524},[321,139043,132217],{"class":390},[321,139045,139046,139048,139050,139052,139054,139056],{"class":323,"line":1536},[321,139047,132222],{"class":2169},[321,139049,79952],{"class":331},[321,139051,129057],{"class":380},[321,139053,51582],{"class":331},[321,139055,132231],{"class":380},[321,139057,129627],{"class":331},[19,139059,138576],{},[312,139061,139062],{"className":126697,"code":132129,"language":126699,"meta":30,"style":30},[318,139063,139064,139068,139082,139086,139100,139104,139118,139122,139136,139140],{"__ignoreMap":30},[321,139065,139066],{"class":323,"line":324},[321,139067,132136],{"class":390},[321,139069,139070,139072,139074,139076,139078,139080],{"class":323,"line":167},[321,139071,132141],{"class":2169},[321,139073,79952],{"class":331},[321,139075,129057],{"class":380},[321,139077,51582],{"class":331},[321,139079,132150],{"class":380},[321,139081,129627],{"class":331},[321,139083,139084],{"class":323,"line":200},[321,139085,132157],{"class":390},[321,139087,139088,139090,139092,139094,139096,139098],{"class":323,"line":1401},[321,139089,132162],{"class":2169},[321,139091,79952],{"class":331},[321,139093,129057],{"class":380},[321,139095,51582],{"class":331},[321,139097,54909],{"class":380},[321,139099,129627],{"class":331},[321,139101,139102],{"class":323,"line":1407},[321,139103,132177],{"class":390},[321,139105,139106,139108,139110,139112,139114,139116],{"class":323,"line":1421},[321,139107,132182],{"class":2169},[321,139109,79952],{"class":331},[321,139111,129057],{"class":380},[321,139113,51582],{"class":331},[321,139115,54976],{"class":380},[321,139117,129627],{"class":331},[321,139119,139120],{"class":323,"line":1427},[321,139121,132197],{"class":390},[321,139123,139124,139126,139128,139130,139132,139134],{"class":323,"line":1518},[321,139125,132202],{"class":2169},[321,139127,79952],{"class":331},[321,139129,129057],{"class":380},[321,139131,51582],{"class":331},[321,139133,86378],{"class":380},[321,139135,129627],{"class":331},[321,139137,139138],{"class":323,"line":1524},[321,139139,132217],{"class":390},[321,139141,139142,139144,139146,139148,139150,139152],{"class":323,"line":1536},[321,139143,132222],{"class":2169},[321,139145,79952],{"class":331},[321,139147,129057],{"class":380},[321,139149,51582],{"class":331},[321,139151,132231],{"class":380},[321,139153,129627],{"class":331},[292,139155,139157,139158,139160],{"id":139156},"_1544-nav导航模块制作","15.4.4 ",[318,139159,53858],{},"导航模块制作",[28,139162],{"style":126553,"src":139163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139165,139166,139168],{},[318,139167,53858],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139170,139171,139172],{},"1 号盒子左侧浮动，",[318,139173,139174],{},"dropdown",[1339,139176,139177,139187,139195,139201,139209,139219,139227,139238],{},[154,139178,139179,139180,101163,139183,139186],{},"1号盒子有讲究，根据相关性 里面包含 ",[318,139181,139182],{},".dt",[318,139184,139185],{},".dd"," 两个盒子",[154,139188,139189,139191,139192,139194],{},[318,139190,139182],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[318,139193,139185],{}," 挤到下面去了",[154,139196,139197,139198,139200],{},"给 ",[318,139199,139185],{}," 盒子设置宽度 和 高度，以及背景颜色",[154,139202,139197,139203,139205,139206,120382],{},[318,139204,139185],{}," 盒子里面定义 无序列表 （",[318,139207,139208],{},"ul > li > a",[154,139210,139211,139212,139214,139215,139218],{},"每个 ",[318,139213,154],{}," 都有一个高度（",[318,139216,139217],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[154,139220,139197,139221,139223,139224,120382],{},[318,139222,154],{}," 里面的a设置文字大小（",[318,139225,139226],{},"14px",[154,139228,139197,139229,139231,139232,139234,139235,139237],{},[318,139230,154],{}," 设置 ",[318,139233,127858],{},"，当鼠标移入的时候，让",[318,139236,154],{},"的背景变成白色，让里面的文字变成红色",[154,139239,139240,139242,139243,139245,139246,139248],{},[318,139241,154],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[318,139244,154],{},"的右侧，那么给",[318,139247,154],{},"设置相对定位",[19,139250,139251],{},"一定要注意相关性",[19,139253,138536],{},[312,139255,139256],{"className":126697,"code":138539,"language":126699,"meta":30,"style":30},[318,139257,139258,139266,139276,139286],{"__ignoreMap":30},[321,139259,139260,139262,139264],{"class":323,"line":324},[321,139261,51756],{"class":51445},[321,139263,137698],{"class":2169},[321,139265,15779],{"class":331},[321,139267,139268,139270,139272,139274],{"class":323,"line":167},[321,139269,137705],{"class":380},[321,139271,51582],{"class":331},[321,139273,7859],{"class":436},[321,139275,1497],{"class":331},[321,139277,139278,139280,139282,139284],{"class":323,"line":200},[321,139279,128313],{"class":380},[321,139281,51582],{"class":331},[321,139283,61014],{"class":380},[321,139285,1497],{"class":331},[321,139287,139288],{"class":323,"line":1401},[321,139289,1771],{"class":331},[19,139291,138576],{},[312,139293,139294],{"className":126697,"code":138539,"language":126699,"meta":30,"style":30},[318,139295,139296,139304,139314,139324],{"__ignoreMap":30},[321,139297,139298,139300,139302],{"class":323,"line":324},[321,139299,51756],{"class":51445},[321,139301,137698],{"class":2169},[321,139303,15779],{"class":331},[321,139305,139306,139308,139310,139312],{"class":323,"line":167},[321,139307,137705],{"class":380},[321,139309,51582],{"class":331},[321,139311,7859],{"class":436},[321,139313,1497],{"class":331},[321,139315,139316,139318,139320,139322],{"class":323,"line":200},[321,139317,128313],{"class":380},[321,139319,51582],{"class":331},[321,139321,61014],{"class":380},[321,139323,1497],{"class":331},[321,139325,139326],{"class":323,"line":1401},[321,139327,1771],{"class":331},[19,139329,139330],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139332,139333,139334,139337],{},"2 号盒子左侧浮动，",[318,139335,139336],{},"navitems"," 导航栏组",[1339,139339,139340,139345,139354],{},[154,139341,139342,139343],{},"里面结构是 ",[318,139344,139208],{},[154,139346,139347,139348,139350,139351,139353],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[318,139349,570],{},"左右的",[318,139352,31028],{},"把两侧撑开",[154,139355,139356],{},"让文字垂直居中（行高等于高度）",[28,139358],{"style":126553,"src":139359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139361,139362],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139364,138536],{},[312,139366,139368],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},".box {\n  float: left;\n}\n",[318,139369,139370,139376,139386],{"__ignoreMap":30},[321,139371,139372,139374],{"class":323,"line":324},[321,139373,130545],{"class":2169},[321,139375,15779],{"class":331},[321,139377,139378,139380,139382,139384],{"class":323,"line":167},[321,139379,131177],{"class":380},[321,139381,51582],{"class":331},[321,139383,23944],{"class":380},[321,139385,1497],{"class":331},[321,139387,139388],{"class":323,"line":200},[321,139389,1771],{"class":331},[19,139391,138576],{},[312,139393,139394],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,139395,139396,139402,139412],{"__ignoreMap":30},[321,139397,139398,139400],{"class":323,"line":324},[321,139399,130545],{"class":2169},[321,139401,15779],{"class":331},[321,139403,139404,139406,139408,139410],{"class":323,"line":167},[321,139405,131177],{"class":380},[321,139407,51582],{"class":331},[321,139409,23944],{"class":380},[321,139411,1497],{"class":331},[321,139413,139414],{"class":323,"line":200},[321,139415,1771],{"class":331},[19,139417,139418],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[28,139420],{"style":126553,"src":139421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[312,139423,139424],{"className":126697,"code":130854,"language":126699,"meta":30,"style":30},[318,139425,139426,139432,139448],{"__ignoreMap":30},[321,139427,139428,139430],{"class":323,"line":324},[321,139429,51756],{"class":51445},[321,139431,15779],{"class":331},[321,139433,139434,139436,139438,139440,139442,139444,139446],{"class":323,"line":167},[321,139435,71041],{"class":380},[321,139437,51582],{"class":331},[321,139439,549],{"class":380},[321,139441,51637],{"class":327},[321,139443,51666],{"class":380},[321,139445,130089],{"class":380},[321,139447,1497],{"class":331},[321,139449,139450],{"class":323,"line":200},[321,139451,1771],{"class":331},[292,139453,139455],{"id":139454},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[28,139457],{"style":126553,"src":139458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1339,139460,139461,139466,139471],{},[154,139462,139463,139465],{},[318,139464,131900],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[154,139467,139468,139470],{},[318,139469,131900],{}," 里面有一个大的版心",[154,139472,139473,139474,139477,139478],{},"版心里面包含 1 号盒子，",[318,139475,139476],{},"mod_service"," 是服务模块，mod 是模块的意思",[1339,139479,139480,139485,139498,139514,139519],{},[154,139481,139197,139482,139484],{},[318,139483,139476],{}," 设置高度（80px）和下边框",[154,139486,139487,139488,139491,139492,139494,139495,139497],{},"在里面定义 ",[318,139489,139490],{},"ul > li"," ,每个",[318,139493,154],{}," 宽度是300px 高度是 50px，给每个",[318,139496,154],{},"设置35px的左内边距",[154,139499,139500,139501,139503,139504,139506,139507,139509,139510,18617,139512,120382],{},"在每个",[318,139502,154],{},"里面，放一个 ",[318,139505,23117],{},"（里面放图标），一个",[318,139508,51756],{},"（里面放",[318,139511,51756],{},[318,139513,19],{},[154,139515,139197,139516,139518],{},[318,139517,23117],{},"设置浮动，让h5与这个div左右排列",[154,139520,139521],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139523,138536],{},[312,139525,139527],{"className":126697,"code":139526,"language":126699,"meta":30,"style":30},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[318,139528,139529,139535,139547,139559,139586],{"__ignoreMap":30},[321,139530,139531,139533],{"class":323,"line":324},[321,139532,134454],{"class":2169},[321,139534,15779],{"class":331},[321,139536,139537,139539,139541,139543,139545],{"class":323,"line":167},[321,139538,70713],{"class":380},[321,139540,51582],{"class":331},[321,139542,1032],{"class":380},[321,139544,51637],{"class":327},[321,139546,1497],{"class":331},[321,139548,139549,139551,139553,139555,139557],{"class":323,"line":200},[321,139550,70933],{"class":380},[321,139552,51582],{"class":331},[321,139554,1032],{"class":380},[321,139556,51637],{"class":327},[321,139558,1497],{"class":331},[321,139560,139561,139563,139565,139567,139569,139571,139573,139575,139578,139580,139582,139584],{"class":323,"line":1401},[321,139562,70756],{"class":380},[321,139564,51582],{"class":331},[321,139566,61871],{"class":380},[321,139568,332],{"class":331},[321,139570,134493],{"class":5423},[321,139572,13921],{"class":331},[321,139574,61881],{"class":380},[321,139576,139577],{"class":380}," -10",[321,139579,51637],{"class":327},[321,139581,134512],{"class":380},[321,139583,51637],{"class":327},[321,139585,1497],{"class":331},[321,139587,139588],{"class":323,"line":1407},[321,139589,1771],{"class":331},[19,139591,138576],{},[312,139593,139594],{"className":126697,"code":139526,"language":126699,"meta":30,"style":30},[318,139595,139596,139602,139614,139626,139652],{"__ignoreMap":30},[321,139597,139598,139600],{"class":323,"line":324},[321,139599,134454],{"class":2169},[321,139601,15779],{"class":331},[321,139603,139604,139606,139608,139610,139612],{"class":323,"line":167},[321,139605,70713],{"class":380},[321,139607,51582],{"class":331},[321,139609,1032],{"class":380},[321,139611,51637],{"class":327},[321,139613,1497],{"class":331},[321,139615,139616,139618,139620,139622,139624],{"class":323,"line":200},[321,139617,70933],{"class":380},[321,139619,51582],{"class":331},[321,139621,1032],{"class":380},[321,139623,51637],{"class":327},[321,139625,1497],{"class":331},[321,139627,139628,139630,139632,139634,139636,139638,139640,139642,139644,139646,139648,139650],{"class":323,"line":1401},[321,139629,70756],{"class":380},[321,139631,51582],{"class":331},[321,139633,61871],{"class":380},[321,139635,332],{"class":331},[321,139637,134493],{"class":5423},[321,139639,13921],{"class":331},[321,139641,61881],{"class":380},[321,139643,139577],{"class":380},[321,139645,51637],{"class":327},[321,139647,134512],{"class":380},[321,139649,51637],{"class":327},[321,139651,1497],{"class":331},[321,139653,139654],{"class":323,"line":1407},[321,139655,1771],{"class":331},[19,139657,139658],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1339,139660,139661,139664,139670,139676,139688],{},[154,139662,139663],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[154,139665,139666,139667,120382],{},"里面的布局利用 自定义列表来实现（",[318,139668,139669],{},"dl > dt + dd",[154,139671,139197,139672,139675],{},[318,139673,139674],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[154,139677,139197,139678,139681,139682,18617,139684,139687],{},[318,139679,139680],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[318,139683,139680],{},[318,139685,139686],{},"dd","之间有些距离",[154,139689,139690],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139692,138536],{},[312,139694,139695],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},[318,139696,139697,139703,139715],{"__ignoreMap":30},[321,139698,139699,139701],{"class":323,"line":324},[321,139700,51756],{"class":51445},[321,139702,15779],{"class":331},[321,139704,139705,139707,139709,139711,139713],{"class":323,"line":167},[321,139706,70615],{"class":380},[321,139708,51582],{"class":331},[321,139710,523],{"class":380},[321,139712,51701],{"class":380},[321,139714,1497],{"class":331},[321,139716,139717],{"class":323,"line":200},[321,139718,1771],{"class":331},[19,139720,138576],{},[312,139722,139723],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},[318,139724,139725,139731,139743],{"__ignoreMap":30},[321,139726,139727,139729],{"class":323,"line":324},[321,139728,51756],{"class":51445},[321,139730,15779],{"class":331},[321,139732,139733,139735,139737,139739,139741],{"class":323,"line":167},[321,139734,70615],{"class":380},[321,139736,51582],{"class":331},[321,139738,523],{"class":380},[321,139740,51701],{"class":380},[321,139742,1497],{"class":331},[321,139744,139745],{"class":323,"line":200},[321,139746,1771],{"class":331},[19,139748,139749],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1339,139751,139752,139761,139764,139775],{},[154,139753,139754,139755,139757,139758,139760],{},"分为上下两块，上面是 ",[318,139756,131917],{}," 友情链接，下面是 ",[318,139759,131910],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[154,139762,139763],{},"把内容分别复制到相应模块中",[154,139765,139197,139766,139768,139769,139771,139772,139774],{},[318,139767,131917],{}," 设置 15px 的下外边距，给",[318,139770,131917],{}," 里面 的 ",[318,139773,570],{}," 标签设置 左右 3px 的外边距",[154,139776,139777,139778,139780],{},"给",[318,139779,131910],{}," 设置 20px 的行高",[19,139782,138536],{},[312,139784,139785],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},[318,139786,139787,139793,139805],{"__ignoreMap":30},[321,139788,139789,139791],{"class":323,"line":324},[321,139790,51756],{"class":51445},[321,139792,15779],{"class":331},[321,139794,139795,139797,139799,139801,139803],{"class":323,"line":167},[321,139796,70615],{"class":380},[321,139798,51582],{"class":331},[321,139800,523],{"class":380},[321,139802,51701],{"class":380},[321,139804,1497],{"class":331},[321,139806,139807],{"class":323,"line":200},[321,139808,1771],{"class":331},[19,139810,138576],{},[312,139812,139813],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},[318,139814,139815,139821,139833],{"__ignoreMap":30},[321,139816,139817,139819],{"class":323,"line":324},[321,139818,51756],{"class":51445},[321,139820,15779],{"class":331},[321,139822,139823,139825,139827,139829,139831],{"class":323,"line":167},[321,139824,70615],{"class":380},[321,139826,51582],{"class":331},[321,139828,523],{"class":380},[321,139830,51701],{"class":380},[321,139832,1497],{"class":331},[321,139834,139835],{"class":323,"line":200},[321,139836,1771],{"class":331},[19,139838,139839],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5333,139841,139842],{},"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":30,"searchDepth":167,"depth":167,"links":139844},[139845,139846,139847,139854],{"id":138125,"depth":167,"text":138126},{"id":138144,"depth":167,"text":138145},{"id":138171,"depth":167,"text":138172,"children":139848},[139849,139850,139851,139852,139853],{"id":138175,"depth":200,"text":138176},{"id":138188,"depth":200,"text":138189},{"id":138212,"depth":200,"text":138213},{"id":138234,"depth":200,"text":138235},{"id":138306,"depth":200,"text":138307},{"id":138432,"depth":167,"text":138433,"children":139855},[139856,139857,139858,139859,139861],{"id":138436,"depth":200,"text":138437},{"id":138443,"depth":200,"text":138444},{"id":138615,"depth":200,"text":138616},{"id":139156,"depth":200,"text":139860},"15.4.4 nav导航模块制作",{"id":139454,"depth":200,"text":139455},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138117,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139868,"title":139869,"body":139870,"description":23584,"extension":249,"meta":142272,"navigation":251,"path":142273,"seo":142274,"stem":142275,"__hash__":142276},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139871,"toc":142249},[139872,139875,139879,139883,139895,139898,139901,139904,139915,139917,139941,139943,139967,139972,139975,139977,140013,140015,140051,140054,140059,140062,140065,140068,140098,140105,140108,140118,140120,140154,140157,140191,140197,140214,140216,140252,140254,140290,140295,140320,140322,140348,140350,140374,140381,140384,140448,140450,140492,140494,140534,140541,140546,140548,140578,140580,140610,140614,140617,140624,140636,140638,140664,140666,140690,140693,140695,140719,140725,140735,140737,140767,140769,140799,140806,140847,140849,140885,140887,140923,140927,140930,140933,140936,140942,140947,140950,140973,140976,141000,141003,141027,141032,141035,141038,141041,141044,141047,141121,141123,141153,141155,141185,141188,141191,141223,141227,141231,141245,141254,141257,141262,141264,141358,141360,141454,141477,141479,141503,141505,141529,141536,141539,141549,141551,141575,141580,141588,141590,141620,141625,141665,141667,141693,141695,141721,141725,141728,141733,141736,141740,141748,141755,141763,141765,141795,141797,141827,141835,141838,141841,141843,141873,141875,141905,141908,141913,141915,141939,141941,141965,141968,142053,142055,142079,142081,142105,142109,142111,142135,142137,142171,142175,142189,142192,142197,142200,142205,142208,142238,142246],[10,139873,139869],{"id":139874},"_16-品优购项目下篇-主体与页面开发",[14,139876,139878],{"id":139877},"_161-项目主体模块制作","16.1 项目主体模块制作",[292,139880,139882],{"id":139881},"_1611-首页制作","16.1.1 首页制作",[19,139884,139885,139887,139888,139890,139891,139894],{},[481,139886,102203],{}," 主体模块是 ",[481,139889,74203],{}," 里面专有的，注意需要新的样式文件 ",[481,139892,139893],{},"index.css，"," 就不要写在common.css中了",[28,139896],{"style":126553,"src":139897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[28,139899],{"style":126553,"src":139900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139902,139903],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1339,139905,139906,139909,139912],{},[154,139907,139908],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[154,139910,139911],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[154,139913,139914],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139916,138536],{},[312,139918,139919],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,139920,139921,139927,139937],{"__ignoreMap":30},[321,139922,139923,139925],{"class":323,"line":324},[321,139924,130545],{"class":2169},[321,139926,15779],{"class":331},[321,139928,139929,139931,139933,139935],{"class":323,"line":167},[321,139930,131177],{"class":380},[321,139932,51582],{"class":331},[321,139934,23944],{"class":380},[321,139936,1497],{"class":331},[321,139938,139939],{"class":323,"line":200},[321,139940,1771],{"class":331},[19,139942,138576],{},[312,139944,139945],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,139946,139947,139953,139963],{"__ignoreMap":30},[321,139948,139949,139951],{"class":323,"line":324},[321,139950,130545],{"class":2169},[321,139952,15779],{"class":331},[321,139954,139955,139957,139959,139961],{"class":323,"line":167},[321,139956,131177],{"class":380},[321,139958,51582],{"class":331},[321,139960,23944],{"class":380},[321,139962,1497],{"class":331},[321,139964,139965],{"class":323,"line":200},[321,139966,1771],{"class":331},[151,139968,139969],{},[154,139970,139971],{},"左侧focus模块制作",[28,139973],{"style":126553,"src":139974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139976,138536],{},[312,139978,139979],{"className":126697,"code":128020,"language":126699,"meta":30,"style":30},[318,139980,139981,139989,139999,140009],{"__ignoreMap":30},[321,139982,139983,139985,139987],{"class":323,"line":324},[321,139984,53966],{"class":51445},[321,139986,62045],{"class":2169},[321,139988,15779],{"class":331},[321,139990,139991,139993,139995,139997],{"class":323,"line":167},[321,139992,128035],{"class":380},[321,139994,51582],{"class":331},[321,139996,55034],{"class":380},[321,139998,1497],{"class":331},[321,140000,140001,140003,140005,140007],{"class":323,"line":200},[321,140002,70943],{"class":380},[321,140004,51582],{"class":331},[321,140006,54882],{"class":380},[321,140008,1497],{"class":331},[321,140010,140011],{"class":323,"line":1401},[321,140012,1771],{"class":331},[19,140014,138576],{},[312,140016,140017],{"className":126697,"code":128020,"language":126699,"meta":30,"style":30},[318,140018,140019,140027,140037,140047],{"__ignoreMap":30},[321,140020,140021,140023,140025],{"class":323,"line":324},[321,140022,53966],{"class":51445},[321,140024,62045],{"class":2169},[321,140026,15779],{"class":331},[321,140028,140029,140031,140033,140035],{"class":323,"line":167},[321,140030,128035],{"class":380},[321,140032,51582],{"class":331},[321,140034,55034],{"class":380},[321,140036,1497],{"class":331},[321,140038,140039,140041,140043,140045],{"class":323,"line":200},[321,140040,70943],{"class":380},[321,140042,51582],{"class":331},[321,140044,54882],{"class":380},[321,140046,1497],{"class":331},[321,140048,140049],{"class":323,"line":1401},[321,140050,1771],{"class":331},[19,140052,140053],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[151,140055,140056],{"start":167},[154,140057,140058],{},"右侧newsflash模块制作",[28,140060],{"style":126553,"src":140061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140063,140064],{},"右侧的模块 分为上中下三个盒子",[19,140066,140067],{},"结构代码：",[312,140069,140070],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,140071,140072],{"__ignoreMap":30},[321,140073,140074,140076,140078,140080,140082,140084,140086,140088,140090,140092,140094,140096],{"class":323,"line":324},[321,140075,1242],{"class":331},[321,140077,28],{"class":51445},[321,140079,55384],{"class":2169},[321,140081,377],{"class":331},[321,140083,134214],{"class":436},[321,140085,55392],{"class":2169},[321,140087,377],{"class":331},[321,140089,134221],{"class":436},[321,140091,134224],{"class":2169},[321,140093,377],{"class":331},[321,140095,134229],{"class":436},[321,140097,51452],{"class":331},[19,140099,140100,140101,140104],{},"1 号盒子为 ",[318,140102,140103],{},"news"," 新闻模块 高度为 165px",[28,140106],{"style":126553,"src":140107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140109,140110,140111,140114,140115],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[318,140112,140113],{},"news-hd","，下面是 ",[318,140116,140117],{},"news-bd",[19,140119,140067],{},[312,140121,140122],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,140123,140124,140128,140142,140146],{"__ignoreMap":30},[321,140125,140126],{"class":323,"line":324},[321,140127,130808],{"class":390},[321,140129,140130,140132,140134,140136,140138,140140],{"class":323,"line":167},[321,140131,1242],{"class":331},[321,140133,51756],{"class":51445},[321,140135,53631],{"class":2169},[321,140137,377],{"class":331},[321,140139,130821],{"class":436},[321,140141,51452],{"class":331},[321,140143,140144],{"class":323,"line":200},[321,140145,130828],{"class":331},[321,140147,140148,140150,140152],{"class":323,"line":1401},[321,140149,51930],{"class":331},[321,140151,51756],{"class":51445},[321,140153,51452],{"class":331},[19,140155,140156],{},"样式代码：",[312,140158,140159],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,140160,140161,140165,140179,140183],{"__ignoreMap":30},[321,140162,140163],{"class":323,"line":324},[321,140164,130808],{"class":390},[321,140166,140167,140169,140171,140173,140175,140177],{"class":323,"line":167},[321,140168,1242],{"class":331},[321,140170,51756],{"class":51445},[321,140172,53631],{"class":2169},[321,140174,377],{"class":331},[321,140176,130821],{"class":436},[321,140178,51452],{"class":331},[321,140180,140181],{"class":323,"line":200},[321,140182,130828],{"class":331},[321,140184,140185,140187,140189],{"class":323,"line":1401},[321,140186,51930],{"class":331},[321,140188,51756],{"class":51445},[321,140190,51452],{"class":331},[19,140192,140193,140194,140196],{},"上面是",[318,140195,140113],{},"，设置高度是 33px，设置下边框",[1339,140198,140199,140205],{},[154,140200,140201,140202,140204],{},"里面放一个",[318,140203,23117],{}," 标题",[154,140206,140207,140208,140210,140211,140213],{},"放一个a",[318,140209,102838],{},"，内容是 更多，然后让 ",[318,140212,570],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140215,140067],{},[312,140217,140218],{"className":126697,"code":138539,"language":126699,"meta":30,"style":30},[318,140219,140220,140228,140238,140248],{"__ignoreMap":30},[321,140221,140222,140224,140226],{"class":323,"line":324},[321,140223,51756],{"class":51445},[321,140225,137698],{"class":2169},[321,140227,15779],{"class":331},[321,140229,140230,140232,140234,140236],{"class":323,"line":167},[321,140231,137705],{"class":380},[321,140233,51582],{"class":331},[321,140235,7859],{"class":436},[321,140237,1497],{"class":331},[321,140239,140240,140242,140244,140246],{"class":323,"line":200},[321,140241,128313],{"class":380},[321,140243,51582],{"class":331},[321,140245,61014],{"class":380},[321,140247,1497],{"class":331},[321,140249,140250],{"class":323,"line":1401},[321,140251,1771],{"class":331},[19,140253,140156],{},[312,140255,140256],{"className":126697,"code":138539,"language":126699,"meta":30,"style":30},[318,140257,140258,140266,140276,140286],{"__ignoreMap":30},[321,140259,140260,140262,140264],{"class":323,"line":324},[321,140261,51756],{"class":51445},[321,140263,137698],{"class":2169},[321,140265,15779],{"class":331},[321,140267,140268,140270,140272,140274],{"class":323,"line":167},[321,140269,137705],{"class":380},[321,140271,51582],{"class":331},[321,140273,7859],{"class":436},[321,140275,1497],{"class":331},[321,140277,140278,140280,140282,140284],{"class":323,"line":200},[321,140279,128313],{"class":380},[321,140281,51582],{"class":331},[321,140283,61014],{"class":380},[321,140285,1497],{"class":331},[321,140287,140288],{"class":323,"line":1401},[321,140289,1771],{"class":331},[19,140291,140292,140293],{},"下面是",[318,140294,140117],{},[1339,140296,140297,140305],{},[154,140298,140299,140300,101163,140302,140304],{},"里面包含 ",[318,140301,1339],{},[318,140303,154],{}," 还有链接",[154,140306,139777,140307,140309,140310,140312,140313,140316,140317],{},[318,140308,154],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[318,140311,131363],{}," 2.设置 ",[318,140314,140315],{},"white-space: nowrap;"," 3. 设置 ",[318,140318,140319],{},"text-overflow: ellipsis;",[19,140321,140067],{},[312,140323,140325],{"className":126697,"code":140324,"language":126699,"meta":30,"style":30},"div {\n  overflow: hidden;\n}\n",[318,140326,140327,140333,140344],{"__ignoreMap":30},[321,140328,140329,140331],{"class":323,"line":324},[321,140330,51756],{"class":51445},[321,140332,15779],{"class":331},[321,140334,140335,140338,140340,140342],{"class":323,"line":167},[321,140336,140337],{"class":380},"  overflow",[321,140339,51582],{"class":331},[321,140341,61859],{"class":380},[321,140343,1497],{"class":331},[321,140345,140346],{"class":323,"line":200},[321,140347,1771],{"class":331},[19,140349,140156],{},[312,140351,140352],{"className":126697,"code":140324,"language":126699,"meta":30,"style":30},[318,140353,140354,140360,140370],{"__ignoreMap":30},[321,140355,140356,140358],{"class":323,"line":324},[321,140357,51756],{"class":51445},[321,140359,15779],{"class":331},[321,140361,140362,140364,140366,140368],{"class":323,"line":167},[321,140363,140337],{"class":380},[321,140365,51582],{"class":331},[321,140367,61859],{"class":380},[321,140369,1497],{"class":331},[321,140371,140372],{"class":323,"line":200},[321,140373,1771],{"class":331},[19,140375,140376,140377,140380],{},"2 号盒子为 ",[318,140378,140379],{},"lifeservice"," 生活服务模块 高度为 209px",[28,140382],{"style":126553,"src":140383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1339,140385,140386,140389,140399,140423,140434],{},[154,140387,140388],{},"设置边框（左右下边框）",[154,140390,140391,140392,140395,140396,140398],{},"里面的内容 是 ",[318,140393,140394],{},"ul > 12*li","，给",[318,140397,154],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[154,140400,140401,140402],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1339,140403,140404,140409,140418],{},[154,140405,140406,140408],{},[318,140407,140379],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[154,140410,140411,140412,140414,140415,140417],{},"可以让 ",[318,140413,140379],{}," 里面的 ",[318,140416,1339],{}," 宽度为 252，就可以装的下 4 个 小 li",[154,140419,140420,140422],{},[318,140421,140379],{}," 盒子 overflow 隐藏多余的部分就可以了",[154,140424,116612,140425,140427,140428,140430,140431,140433],{},[318,140426,154],{}," 里面放一个 ",[318,140429,773],{},"（里面放图标），下面的文本用 ",[318,140432,19],{}," 标签包裹",[154,140435,139197,140436,140438,140439,140441,140442,139231,140444,140447],{},[318,140437,773],{}," 设置 24px宽和28px的高（注意 ",[318,140440,773],{}," 是行内元素， 转成行内块），给 ",[318,140443,154],{},[318,140445,140446],{},"text-align:center"," 让里面内容居中显示",[19,140449,140067],{},[312,140451,140453],{"className":126697,"code":140452,"language":126699,"meta":30,"style":30},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[318,140454,140455,140473,140478,140488],{"__ignoreMap":30},[321,140456,140457,140459,140461,140463,140465,140467,140469,140471],{"class":323,"line":324},[321,140458,321],{"class":51445},[321,140460,12642],{"class":331},[321,140462,570],{"class":51445},[321,140464,12642],{"class":331},[321,140466,23761],{"class":51445},[321,140468,12642],{"class":331},[321,140470,481],{"class":51445},[321,140472,15779],{"class":331},[321,140474,140475],{"class":323,"line":167},[321,140476,140477],{"class":390},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[321,140479,140480,140482,140484,140486],{"class":323,"line":200},[321,140481,128313],{"class":380},[321,140483,51582],{"class":331},[321,140485,128375],{"class":380},[321,140487,1497],{"class":331},[321,140489,140490],{"class":323,"line":1401},[321,140491,1771],{"class":331},[19,140493,140156],{},[312,140495,140496],{"className":126697,"code":140452,"language":126699,"meta":30,"style":30},[318,140497,140498,140516,140520,140530],{"__ignoreMap":30},[321,140499,140500,140502,140504,140506,140508,140510,140512,140514],{"class":323,"line":324},[321,140501,321],{"class":51445},[321,140503,12642],{"class":331},[321,140505,570],{"class":51445},[321,140507,12642],{"class":331},[321,140509,23761],{"class":51445},[321,140511,12642],{"class":331},[321,140513,481],{"class":51445},[321,140515,15779],{"class":331},[321,140517,140518],{"class":323,"line":167},[321,140519,140477],{"class":390},[321,140521,140522,140524,140526,140528],{"class":323,"line":200},[321,140523,128313],{"class":380},[321,140525,51582],{"class":331},[321,140527,128375],{"class":380},[321,140529,1497],{"class":331},[321,140531,140532],{"class":323,"line":1401},[321,140533,1771],{"class":331},[19,140535,140536,140537,140540],{},"3 号盒子为 ",[318,140538,140539],{},"bargain"," 特价商品",[1339,140542,140543],{},[154,140544,140545],{},"这个比较简单，直接插入一张图片即可",[19,140547,140067],{},[312,140549,140550],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,140551,140552],{"__ignoreMap":30},[321,140553,140554,140556,140558,140560,140562,140564,140566,140568,140570,140572,140574,140576],{"class":323,"line":324},[321,140555,1242],{"class":331},[321,140557,28],{"class":51445},[321,140559,55384],{"class":2169},[321,140561,377],{"class":331},[321,140563,134214],{"class":436},[321,140565,55392],{"class":2169},[321,140567,377],{"class":331},[321,140569,134221],{"class":436},[321,140571,134224],{"class":2169},[321,140573,377],{"class":331},[321,140575,134229],{"class":436},[321,140577,51452],{"class":331},[19,140579,140156],{},[312,140581,140582],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,140583,140584],{"__ignoreMap":30},[321,140585,140586,140588,140590,140592,140594,140596,140598,140600,140602,140604,140606,140608],{"class":323,"line":324},[321,140587,1242],{"class":331},[321,140589,28],{"class":51445},[321,140591,55384],{"class":2169},[321,140593,377],{"class":331},[321,140595,134214],{"class":436},[321,140597,55392],{"class":2169},[321,140599,377],{"class":331},[321,140601,134221],{"class":436},[321,140603,134224],{"class":2169},[321,140605,377],{"class":331},[321,140607,134229],{"class":436},[321,140609,51452],{"class":331},[292,140611,140613],{"id":140612},"_1612-推荐模块制作","16.1.2 推荐模块制作",[28,140615],{"style":126553,"src":140616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140618,140619,140620,140623],{},"大盒子 ",[318,140621,140622],{},"recom"," 推荐模块 recommend",[1339,140625,140626],{},[154,140627,140628,140629,140631,140632,140635],{},"给这个 ",[318,140630,140622],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[318,140633,140634],{},"#ebebeb","），设置距离上边 12px",[19,140637,140067],{},[312,140639,140641],{"className":126697,"code":140640,"language":126699,"meta":30,"style":30},"div {\n  background-color: #f0f0f0;\n}\n",[318,140642,140643,140649,140660],{"__ignoreMap":30},[321,140644,140645,140647],{"class":323,"line":324},[321,140646,51756],{"class":51445},[321,140648,15779],{"class":331},[321,140650,140651,140653,140655,140658],{"class":323,"line":167},[321,140652,71023],{"class":380},[321,140654,51582],{"class":331},[321,140656,140657],{"class":380},"#f0f0f0",[321,140659,1497],{"class":331},[321,140661,140662],{"class":323,"line":200},[321,140663,1771],{"class":331},[19,140665,140156],{},[312,140667,140668],{"className":126697,"code":140640,"language":126699,"meta":30,"style":30},[318,140669,140670,140676,140686],{"__ignoreMap":30},[321,140671,140672,140674],{"class":323,"line":324},[321,140673,51756],{"class":51445},[321,140675,15779],{"class":331},[321,140677,140678,140680,140682,140684],{"class":323,"line":167},[321,140679,71023],{"class":380},[321,140681,51582],{"class":331},[321,140683,140657],{"class":380},[321,140685,1497],{"class":331},[321,140687,140688],{"class":323,"line":200},[321,140689,1771],{"class":331},[19,140691,140692],{},"里面包含 2 个盒子， 浮动即可",[19,140694,140067],{},[312,140696,140697],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,140698,140699,140705,140715],{"__ignoreMap":30},[321,140700,140701,140703],{"class":323,"line":324},[321,140702,130545],{"class":2169},[321,140704,15779],{"class":331},[321,140706,140707,140709,140711,140713],{"class":323,"line":167},[321,140708,131177],{"class":380},[321,140710,51582],{"class":331},[321,140712,23944],{"class":380},[321,140714,1497],{"class":331},[321,140716,140717],{"class":323,"line":200},[321,140718,1771],{"class":331},[19,140720,140721,140722],{},"1 号盒子 ",[318,140723,140724],{},"recom_hd",[1339,140726,140727,140730],{},[154,140728,140729],{},"设置宽度205px，高度163px",[154,140731,140201,140732,140734],{},[318,140733,28],{},"标签，插入图片即可",[19,140736,140067],{},[312,140738,140739],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,140740,140741],{"__ignoreMap":30},[321,140742,140743,140745,140747,140749,140751,140753,140755,140757,140759,140761,140763,140765],{"class":323,"line":324},[321,140744,1242],{"class":331},[321,140746,28],{"class":51445},[321,140748,55384],{"class":2169},[321,140750,377],{"class":331},[321,140752,134214],{"class":436},[321,140754,55392],{"class":2169},[321,140756,377],{"class":331},[321,140758,134221],{"class":436},[321,140760,134224],{"class":2169},[321,140762,377],{"class":331},[321,140764,134229],{"class":436},[321,140766,51452],{"class":331},[19,140768,140156],{},[312,140770,140771],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,140772,140773],{"__ignoreMap":30},[321,140774,140775,140777,140779,140781,140783,140785,140787,140789,140791,140793,140795,140797],{"class":323,"line":324},[321,140776,1242],{"class":331},[321,140778,28],{"class":51445},[321,140780,55384],{"class":2169},[321,140782,377],{"class":331},[321,140784,134214],{"class":436},[321,140786,55392],{"class":2169},[321,140788,377],{"class":331},[321,140790,134221],{"class":436},[321,140792,134224],{"class":2169},[321,140794,377],{"class":331},[321,140796,134229],{"class":436},[321,140798,51452],{"class":331},[19,140800,140801,140802,140805],{},"2 号盒子 ",[318,140803,140804],{},"recom_bd"," ，注意里面的小竖线",[1339,140807,140808,140819,140822,140827,140832],{},[154,140809,140810,140811,140813,140814,140816,140817],{},"右侧结构里面放 ",[318,140812,1339],{}," 包含 4个 ",[318,140815,154],{},"，每个li里面包含一个",[318,140818,28],{},[154,140820,140821],{},"直接利用切片工具把里面的内容当成一张图片",[154,140823,139197,140824,140826],{},[318,140825,154],{}," 设置浮动",[154,140828,139197,140829,140831],{},[318,140830,28],{}," 设置宽高，宽度 248px，高度 163px",[154,140833,140834,140835,140395,140838,140840,140841,140843,140844],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[318,140836,140837],{},"top 10px",[318,140839,154],{},"设置相对定位（注意，最后一个",[318,140842,154],{},"不用设置伪元素），可以利用 ",[318,140845,140846],{},"nth-child(-n+3){...}",[19,140848,140067],{},[312,140850,140851],{"className":126697,"code":138539,"language":126699,"meta":30,"style":30},[318,140852,140853,140861,140871,140881],{"__ignoreMap":30},[321,140854,140855,140857,140859],{"class":323,"line":324},[321,140856,51756],{"class":51445},[321,140858,137698],{"class":2169},[321,140860,15779],{"class":331},[321,140862,140863,140865,140867,140869],{"class":323,"line":167},[321,140864,137705],{"class":380},[321,140866,51582],{"class":331},[321,140868,7859],{"class":436},[321,140870,1497],{"class":331},[321,140872,140873,140875,140877,140879],{"class":323,"line":200},[321,140874,128313],{"class":380},[321,140876,51582],{"class":331},[321,140878,61014],{"class":380},[321,140880,1497],{"class":331},[321,140882,140883],{"class":323,"line":1401},[321,140884,1771],{"class":331},[19,140886,140156],{},[312,140888,140889],{"className":126697,"code":138539,"language":126699,"meta":30,"style":30},[318,140890,140891,140899,140909,140919],{"__ignoreMap":30},[321,140892,140893,140895,140897],{"class":323,"line":324},[321,140894,51756],{"class":51445},[321,140896,137698],{"class":2169},[321,140898,15779],{"class":331},[321,140900,140901,140903,140905,140907],{"class":323,"line":167},[321,140902,137705],{"class":380},[321,140904,51582],{"class":331},[321,140906,7859],{"class":436},[321,140908,1497],{"class":331},[321,140910,140911,140913,140915,140917],{"class":323,"line":200},[321,140912,128313],{"class":380},[321,140914,51582],{"class":331},[321,140916,61014],{"class":380},[321,140918,1497],{"class":331},[321,140920,140921],{"class":323,"line":1401},[321,140922,1771],{"class":331},[292,140924,140926],{"id":140925},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[28,140928],{"style":126553,"src":140929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140931,140932],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140934,140935],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140937,140938,140941],{},[318,140939,140940],{},"box_hd"," 制作",[19,140943,140721,140944,140946],{},[318,140945,140940],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[28,140948],{"style":126553,"src":140949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1339,140951,140952,140957,140962,140965],{},[154,140953,140954,140956],{},[318,140955,140940],{}," 给 30px 的高度，2个像素的下边框",[154,140958,140959,140960],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[318,140961,139208],{},[154,140963,140964],{},"左侧盒左浮动，右侧盒子右浮动",[154,140966,140967,140969,140970,140972],{},[318,140968,570],{},"标签之间的距离用左右的",[318,140971,31028],{},"撑开即可",[19,140974,140975],{},"结构代码",[312,140977,140978],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,140979,140980,140986,140996],{"__ignoreMap":30},[321,140981,140982,140984],{"class":323,"line":324},[321,140983,130545],{"class":2169},[321,140985,15779],{"class":331},[321,140987,140988,140990,140992,140994],{"class":323,"line":167},[321,140989,131177],{"class":380},[321,140991,51582],{"class":331},[321,140993,23944],{"class":380},[321,140995,1497],{"class":331},[321,140997,140998],{"class":323,"line":200},[321,140999,1771],{"class":331},[19,141001,141002],{},"样式代码",[312,141004,141005],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,141006,141007,141013,141023],{"__ignoreMap":30},[321,141008,141009,141011],{"class":323,"line":324},[321,141010,130545],{"class":2169},[321,141012,15779],{"class":331},[321,141014,141015,141017,141019,141021],{"class":323,"line":167},[321,141016,131177],{"class":380},[321,141018,51582],{"class":331},[321,141020,23944],{"class":380},[321,141022,1497],{"class":331},[321,141024,141025],{"class":323,"line":200},[321,141026,1771],{"class":331},[19,141028,141029,140941],{},[318,141030,141031],{},"box_bd",[19,141033,141034],{},"2 号盒子 box_bd，不要给高度",[28,141036],{"style":126553,"src":141037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141039,141040],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141042,141043],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141045,141046],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1339,141048,141049,141061,141077],{},[154,141050,141051,141053,141054,141057,141058,141060],{},[318,141052,141031],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[318,141055,141056],{},"tab_content","，在",[318,141059,141056],{}," 里面包裹tab选项卡对应的内容",[154,141062,141063,141064,141067,141068,141070,141071,141073,141074,141076],{},"内容被一个大盒子包裹（",[318,141065,141066],{},"tab_list_item","），里面是 ",[318,141069,1339],{}," 包裹 5个 ",[318,141072,154],{},"，每个",[318,141075,154],{},"设置对应的宽度，然后设置浮动",[154,141078,141079,141080,141082,141083,141085,141086],{},"而这5个",[318,141081,154],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[318,141084,154],{},"设置",[1339,141087,141088,141106,141109],{},[154,141089,141090,141091,141093,141094,141096,141097,141099,141100,141102,141103,141105],{},"第一个小 ",[318,141092,154],{}," 分为上下结构，上面是 ",[318,141095,1339],{}," 包裹 ",[318,141098,154],{}," ，",[318,141101,154],{},"里面包裹 ",[318,141104,570],{},"，下面插入一张图片",[154,141107,141108],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[154,141110,141111,141112,141114,141115,141117,141118,141120],{},"后面的小 ",[318,141113,154],{}," 里面先放一个",[318,141116,570],{},"标签，然后在",[318,141119,570],{},"标签里面插入图片即可",[19,141122,140975],{},[312,141124,141125],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,141126,141127],{"__ignoreMap":30},[321,141128,141129,141131,141133,141135,141137,141139,141141,141143,141145,141147,141149,141151],{"class":323,"line":324},[321,141130,1242],{"class":331},[321,141132,28],{"class":51445},[321,141134,55384],{"class":2169},[321,141136,377],{"class":331},[321,141138,134214],{"class":436},[321,141140,55392],{"class":2169},[321,141142,377],{"class":331},[321,141144,134221],{"class":436},[321,141146,134224],{"class":2169},[321,141148,377],{"class":331},[321,141150,134229],{"class":436},[321,141152,51452],{"class":331},[19,141154,141002],{},[312,141156,141157],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,141158,141159],{"__ignoreMap":30},[321,141160,141161,141163,141165,141167,141169,141171,141173,141175,141177,141179,141181,141183],{"class":323,"line":324},[321,141162,1242],{"class":331},[321,141164,28],{"class":51445},[321,141166,55384],{"class":2169},[321,141168,377],{"class":331},[321,141170,134214],{"class":436},[321,141172,55392],{"class":2169},[321,141174,377],{"class":331},[321,141176,134221],{"class":436},[321,141178,134224],{"class":2169},[321,141180,377],{"class":331},[321,141182,134229],{"class":436},[321,141184,51452],{"class":331},[19,141186,141187],{},"tab栏切换需求！！！！！！介绍：",[28,141189],{"style":126553,"src":141190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1339,141192,141193,141201,141207,141210],{},[154,141194,141195,141198,141199],{},[318,141196,141197],{},"tab","栏的布局是 ",[318,141200,139208],{},[154,141202,141203,141204,141206],{},"有多少个",[318,141205,141197],{},"选项卡，那么对应就有多少个内容",[154,141208,141209],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[154,141211,141212,141213,141216,141217,141219,141220,141222],{},"等后面我们学习了",[318,141214,141215],{},"js","之后，我们就会配合",[318,141218,141215],{},"来实现，",[318,141221,141197],{},"栏的切换",[14,141224,141226],{"id":141225},"_162-列表制作","16.2 列表制作",[292,141228,141230],{"id":141229},"_1621-准备工作","16.2.1 准备工作",[1339,141232,141233,141236,141239,141242],{},[154,141234,141235],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[154,141237,141238],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[154,141240,141241],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[154,141243,141244],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[292,141246,141248,141249,101163,141251,141253],{"id":141247},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[318,141250,131702],{},[318,141252,53858],{}," 修改",[28,141255],{"style":126553,"src":141256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1339,141258,141259],{},[154,141260,141261],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141263,140067],{},[312,141265,141266],{"className":126697,"code":132129,"language":126699,"meta":30,"style":30},[318,141267,141268,141272,141286,141290,141304,141308,141322,141326,141340,141344],{"__ignoreMap":30},[321,141269,141270],{"class":323,"line":324},[321,141271,132136],{"class":390},[321,141273,141274,141276,141278,141280,141282,141284],{"class":323,"line":167},[321,141275,132141],{"class":2169},[321,141277,79952],{"class":331},[321,141279,129057],{"class":380},[321,141281,51582],{"class":331},[321,141283,132150],{"class":380},[321,141285,129627],{"class":331},[321,141287,141288],{"class":323,"line":200},[321,141289,132157],{"class":390},[321,141291,141292,141294,141296,141298,141300,141302],{"class":323,"line":1401},[321,141293,132162],{"class":2169},[321,141295,79952],{"class":331},[321,141297,129057],{"class":380},[321,141299,51582],{"class":331},[321,141301,54909],{"class":380},[321,141303,129627],{"class":331},[321,141305,141306],{"class":323,"line":1407},[321,141307,132177],{"class":390},[321,141309,141310,141312,141314,141316,141318,141320],{"class":323,"line":1421},[321,141311,132182],{"class":2169},[321,141313,79952],{"class":331},[321,141315,129057],{"class":380},[321,141317,51582],{"class":331},[321,141319,54976],{"class":380},[321,141321,129627],{"class":331},[321,141323,141324],{"class":323,"line":1427},[321,141325,132197],{"class":390},[321,141327,141328,141330,141332,141334,141336,141338],{"class":323,"line":1518},[321,141329,132202],{"class":2169},[321,141331,79952],{"class":331},[321,141333,129057],{"class":380},[321,141335,51582],{"class":331},[321,141337,86378],{"class":380},[321,141339,129627],{"class":331},[321,141341,141342],{"class":323,"line":1524},[321,141343,132217],{"class":390},[321,141345,141346,141348,141350,141352,141354,141356],{"class":323,"line":1536},[321,141347,132222],{"class":2169},[321,141349,79952],{"class":331},[321,141351,129057],{"class":380},[321,141353,51582],{"class":331},[321,141355,132231],{"class":380},[321,141357,129627],{"class":331},[19,141359,140156],{},[312,141361,141362],{"className":126697,"code":132129,"language":126699,"meta":30,"style":30},[318,141363,141364,141368,141382,141386,141400,141404,141418,141422,141436,141440],{"__ignoreMap":30},[321,141365,141366],{"class":323,"line":324},[321,141367,132136],{"class":390},[321,141369,141370,141372,141374,141376,141378,141380],{"class":323,"line":167},[321,141371,132141],{"class":2169},[321,141373,79952],{"class":331},[321,141375,129057],{"class":380},[321,141377,51582],{"class":331},[321,141379,132150],{"class":380},[321,141381,129627],{"class":331},[321,141383,141384],{"class":323,"line":200},[321,141385,132157],{"class":390},[321,141387,141388,141390,141392,141394,141396,141398],{"class":323,"line":1401},[321,141389,132162],{"class":2169},[321,141391,79952],{"class":331},[321,141393,129057],{"class":380},[321,141395,51582],{"class":331},[321,141397,54909],{"class":380},[321,141399,129627],{"class":331},[321,141401,141402],{"class":323,"line":1407},[321,141403,132177],{"class":390},[321,141405,141406,141408,141410,141412,141414,141416],{"class":323,"line":1421},[321,141407,132182],{"class":2169},[321,141409,79952],{"class":331},[321,141411,129057],{"class":380},[321,141413,51582],{"class":331},[321,141415,54976],{"class":380},[321,141417,129627],{"class":331},[321,141419,141420],{"class":323,"line":1427},[321,141421,132197],{"class":390},[321,141423,141424,141426,141428,141430,141432,141434],{"class":323,"line":1518},[321,141425,132202],{"class":2169},[321,141427,79952],{"class":331},[321,141429,129057],{"class":380},[321,141431,51582],{"class":331},[321,141433,86378],{"class":380},[321,141435,129627],{"class":331},[321,141437,141438],{"class":323,"line":1524},[321,141439,132217],{"class":390},[321,141441,141442,141444,141446,141448,141450,141452],{"class":323,"line":1536},[321,141443,132222],{"class":2169},[321,141445,79952],{"class":331},[321,141447,129057],{"class":380},[321,141449,51582],{"class":331},[321,141451,132231],{"class":380},[321,141453,129627],{"class":331},[1339,141455,141456,141467],{},[154,141457,141458,141459,141462,141463,101163,141465],{},"1 号盒子左侧浮动 ",[318,141460,141461],{},"sk_list"," 里面包含 ",[318,141464,1339],{},[318,141466,154],{},[154,141468,141469,141470,141462,141473,101163,141475],{},"2 号盒子左侧浮动 ",[318,141471,141472],{},"sk_con",[318,141474,1339],{},[318,141476,154],{},[19,141478,140067],{},[312,141480,141481],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,141482,141483,141489,141499],{"__ignoreMap":30},[321,141484,141485,141487],{"class":323,"line":324},[321,141486,130545],{"class":2169},[321,141488,15779],{"class":331},[321,141490,141491,141493,141495,141497],{"class":323,"line":167},[321,141492,131177],{"class":380},[321,141494,51582],{"class":331},[321,141496,23944],{"class":380},[321,141498,1497],{"class":331},[321,141500,141501],{"class":323,"line":200},[321,141502,1771],{"class":331},[19,141504,140156],{},[312,141506,141507],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,141508,141509,141515,141525],{"__ignoreMap":30},[321,141510,141511,141513],{"class":323,"line":324},[321,141512,130545],{"class":2169},[321,141514,15779],{"class":331},[321,141516,141517,141519,141521,141523],{"class":323,"line":167},[321,141518,131177],{"class":380},[321,141520,51582],{"class":331},[321,141522,23944],{"class":380},[321,141524,1497],{"class":331},[321,141526,141527],{"class":323,"line":200},[321,141528,1771],{"class":331},[292,141530,141532,141533],{"id":141531},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[318,141534,141535],{},"sk_container",[28,141537],{"style":126553,"src":141538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1339,141540,141541,141546],{},[154,141542,140721,141543,141545],{},[318,141544,141535],{}," 给宽度 1200，不要给高度",[154,141547,141548],{},"一定不要忘记清除浮动",[19,141550,140067],{},[312,141552,141553],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,141554,141555,141561,141571],{"__ignoreMap":30},[321,141556,141557,141559],{"class":323,"line":324},[321,141558,130545],{"class":2169},[321,141560,15779],{"class":331},[321,141562,141563,141565,141567,141569],{"class":323,"line":167},[321,141564,131177],{"class":380},[321,141566,51582],{"class":331},[321,141568,23944],{"class":380},[321,141570,1497],{"class":331},[321,141572,141573],{"class":323,"line":200},[321,141574,1771],{"class":331},[151,141576,141577],{},[154,141578,141579],{},"sk_hd制作",[1339,141581,141582],{},[154,141583,140801,141584,141587],{},[318,141585,141586],{},"sk_hd"," ，插入图片即可",[19,141589,140067],{},[312,141591,141592],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,141593,141594],{"__ignoreMap":30},[321,141595,141596,141598,141600,141602,141604,141606,141608,141610,141612,141614,141616,141618],{"class":323,"line":324},[321,141597,1242],{"class":331},[321,141599,28],{"class":51445},[321,141601,55384],{"class":2169},[321,141603,377],{"class":331},[321,141605,134214],{"class":436},[321,141607,55392],{"class":2169},[321,141609,377],{"class":331},[321,141611,134221],{"class":436},[321,141613,134224],{"class":2169},[321,141615,377],{"class":331},[321,141617,134229],{"class":436},[321,141619,51452],{"class":331},[151,141621,141622],{"start":167},[154,141623,141624],{},"sk_bd制作",[1339,141626,141627],{},[154,141628,141629,141630,141633,141634,101163,141636,141638],{},"3 号盒子 ",[318,141631,141632],{},"sk_bd"," ，里面包含很多的 ",[318,141635,1339],{},[318,141637,154],{},[1339,141639,141640,141649],{},[154,141641,141642,141643,141645,141646,141648],{},"当鼠标移入到 ",[318,141644,154],{}," 上面的时候显示红色的边框，在这里先给 ",[318,141647,154],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[154,141650,141651,141652,141654,141655,141657,141658,141661,141662,141664],{},"由于给每个 ",[318,141653,154],{}," 都设置了外边距，导致一行的最后一个 ",[318,141656,154],{}," 掉了下来，在这里我们利用 ",[318,141659,141660],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[318,141663,154],{},"，去掉外边距就好了",[19,141666,140067],{},[312,141668,141669],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},[318,141670,141671,141677,141689],{"__ignoreMap":30},[321,141672,141673,141675],{"class":323,"line":324},[321,141674,51756],{"class":51445},[321,141676,15779],{"class":331},[321,141678,141679,141681,141683,141685,141687],{"class":323,"line":167},[321,141680,70615],{"class":380},[321,141682,51582],{"class":331},[321,141684,523],{"class":380},[321,141686,51701],{"class":380},[321,141688,1497],{"class":331},[321,141690,141691],{"class":323,"line":200},[321,141692,1771],{"class":331},[19,141694,140156],{},[312,141696,141697],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},[318,141698,141699,141705,141717],{"__ignoreMap":30},[321,141700,141701,141703],{"class":323,"line":324},[321,141702,51756],{"class":51445},[321,141704,15779],{"class":331},[321,141706,141707,141709,141711,141713,141715],{"class":323,"line":167},[321,141708,70615],{"class":380},[321,141710,51582],{"class":331},[321,141712,523],{"class":380},[321,141714,51701],{"class":380},[321,141716,1497],{"class":331},[321,141718,141719],{"class":323,"line":200},[321,141720,1771],{"class":331},[14,141722,141724],{"id":141723},"_163-注册页面制作","16.3 注册页面制作",[28,141726],{"style":126553,"src":141727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141729,141730,141732],{},[481,141731,9232],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[28,141734],{"style":126553,"src":141735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[292,141737,141739],{"id":141738},"_1631-准备工作","16.3.1 准备工作",[1339,141741,141742,141745],{},[154,141743,141744],{},"创建register.html，引入 base.css，引入favicon图标",[154,141746,141747],{},"创建register.css ，在html页面进行引入",[292,141749,141751,141752,141754],{"id":141750},"_1632-header-头部实现","16.3.2 ",[318,141753,131702],{}," 头部实现",[1339,141756,141757,141760],{},[154,141758,141759],{},"整个内容用 版心 进行包裹",[154,141761,141762],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141764,140067],{},[312,141766,141767],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,141768,141769],{"__ignoreMap":30},[321,141770,141771,141773,141775,141777,141779,141781,141783,141785,141787,141789,141791,141793],{"class":323,"line":324},[321,141772,1242],{"class":331},[321,141774,28],{"class":51445},[321,141776,55384],{"class":2169},[321,141778,377],{"class":331},[321,141780,134214],{"class":436},[321,141782,55392],{"class":2169},[321,141784,377],{"class":331},[321,141786,134221],{"class":436},[321,141788,134224],{"class":2169},[321,141790,377],{"class":331},[321,141792,134229],{"class":436},[321,141794,51452],{"class":331},[19,141796,140156],{},[312,141798,141799],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,141800,141801],{"__ignoreMap":30},[321,141802,141803,141805,141807,141809,141811,141813,141815,141817,141819,141821,141823,141825],{"class":323,"line":324},[321,141804,1242],{"class":331},[321,141806,28],{"class":51445},[321,141808,55384],{"class":2169},[321,141810,377],{"class":331},[321,141812,134214],{"class":436},[321,141814,55392],{"class":2169},[321,141816,377],{"class":331},[321,141818,134221],{"class":436},[321,141820,134224],{"class":2169},[321,141822,377],{"class":331},[321,141824,134229],{"class":436},[321,141826,51452],{"class":331},[292,141828,141830,141831,141834],{"id":141829},"_1633-registerarea-主体模块实现","16.3.3 ",[318,141832,141833],{},"registerarea"," 主体模块实现",[28,141836],{"style":126553,"src":141837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141839,141840],{},"整个大盒子 高度为 522px，设置4个边框",[19,141842,140067],{},[312,141844,141845],{"className":126697,"code":130854,"language":126699,"meta":30,"style":30},[318,141846,141847,141853,141869],{"__ignoreMap":30},[321,141848,141849,141851],{"class":323,"line":324},[321,141850,51756],{"class":51445},[321,141852,15779],{"class":331},[321,141854,141855,141857,141859,141861,141863,141865,141867],{"class":323,"line":167},[321,141856,71041],{"class":380},[321,141858,51582],{"class":331},[321,141860,549],{"class":380},[321,141862,51637],{"class":327},[321,141864,51666],{"class":380},[321,141866,130089],{"class":380},[321,141868,1497],{"class":331},[321,141870,141871],{"class":323,"line":200},[321,141872,1771],{"class":331},[19,141874,140156],{},[312,141876,141877],{"className":126697,"code":130854,"language":126699,"meta":30,"style":30},[318,141878,141879,141885,141901],{"__ignoreMap":30},[321,141880,141881,141883],{"class":323,"line":324},[321,141882,51756],{"class":51445},[321,141884,15779],{"class":331},[321,141886,141887,141889,141891,141893,141895,141897,141899],{"class":323,"line":167},[321,141888,71041],{"class":380},[321,141890,51582],{"class":331},[321,141892,549],{"class":380},[321,141894,51637],{"class":327},[321,141896,51666],{"class":380},[321,141898,130089],{"class":380},[321,141900,1497],{"class":331},[321,141902,141903],{"class":323,"line":200},[321,141904,1771],{"class":331},[19,141906,141907],{},"1号盒子 是一个 h3 标签，放标题",[1339,141909,141910],{},[154,141911,141912],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141914,140067],{},[312,141916,141917],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,141918,141919,141925,141935],{"__ignoreMap":30},[321,141920,141921,141923],{"class":323,"line":324},[321,141922,130545],{"class":2169},[321,141924,15779],{"class":331},[321,141926,141927,141929,141931,141933],{"class":323,"line":167},[321,141928,131177],{"class":380},[321,141930,51582],{"class":331},[321,141932,23944],{"class":380},[321,141934,1497],{"class":331},[321,141936,141937],{"class":323,"line":200},[321,141938,1771],{"class":331},[19,141940,140156],{},[312,141942,141943],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,141944,141945,141951,141961],{"__ignoreMap":30},[321,141946,141947,141949],{"class":323,"line":324},[321,141948,130545],{"class":2169},[321,141950,15779],{"class":331},[321,141952,141953,141955,141957,141959],{"class":323,"line":167},[321,141954,131177],{"class":380},[321,141956,51582],{"class":331},[321,141958,23944],{"class":380},[321,141960,1497],{"class":331},[321,141962,141963],{"class":323,"line":200},[321,141964,1771],{"class":331},[19,141966,141967],{},"2号盒子 里面放注册的内容",[1339,141969,141970,141973,141982,141996,142009,142012,142015,142033,142047],{},[154,141971,141972],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[154,141974,141975,141976,141978,141979,141981],{},"里面的内容利用 ",[318,141977,1339],{}," 包含 ",[318,141980,154],{}," 来实现的（不需要用表格）",[154,141983,139211,141984,141986,141987,141989,141990,141992,141993,141995],{},[318,141985,154],{}," 里面，左侧放 ",[318,141988,33753],{}," 标签， 中间放",[318,141991,53966],{}," 标签， 右侧放 ",[318,141994,321],{}," 提示信息",[154,141997,141998,141999,142001,142002,142004,142005,142008],{},"左侧 ",[318,142000,33753],{},"里面的文字都是右对齐，我们可以给",[318,142003,33753],{},"设置一个宽度（88px），然后利用",[318,142006,142007],{},"text-align"," 来设置右对齐",[154,142010,142011],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[154,142013,142014],{},"右侧 span修饰一下文字颜色",[154,142016,142017,142018],{},"提示信息的样式优化",[1339,142019,142020,142023,142026],{},[154,142021,142022],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[154,142024,142025],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[154,142027,142028,142029,142032],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[318,142030,142031],{},"vertical-algin"," 来设置 图片与文字对齐方式",[154,142034,142035,142036],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1339,142037,142038,142044],{},[154,142039,142040,142041,142043],{},"设置 ",[318,142042,23761],{}," 的 左右 12px 的内边距，设置一下文字颜色",[154,142045,142046],{},"分别设置 背景颜色",[154,142048,142049,142050,142052],{},"同意协议 和 完成注册 都是用 ",[318,142051,154],{}," 进行包裹",[19,142054,140067],{},[312,142056,142057],{"className":126697,"code":140640,"language":126699,"meta":30,"style":30},[318,142058,142059,142065,142075],{"__ignoreMap":30},[321,142060,142061,142063],{"class":323,"line":324},[321,142062,51756],{"class":51445},[321,142064,15779],{"class":331},[321,142066,142067,142069,142071,142073],{"class":323,"line":167},[321,142068,71023],{"class":380},[321,142070,51582],{"class":331},[321,142072,140657],{"class":380},[321,142074,1497],{"class":331},[321,142076,142077],{"class":323,"line":200},[321,142078,1771],{"class":331},[19,142080,140156],{},[312,142082,142083],{"className":126697,"code":140640,"language":126699,"meta":30,"style":30},[318,142084,142085,142091,142101],{"__ignoreMap":30},[321,142086,142087,142089],{"class":323,"line":324},[321,142088,51756],{"class":51445},[321,142090,15779],{"class":331},[321,142092,142093,142095,142097,142099],{"class":323,"line":167},[321,142094,71023],{"class":380},[321,142096,51582],{"class":331},[321,142098,140657],{"class":380},[321,142100,1497],{"class":331},[321,142102,142103],{"class":323,"line":200},[321,142104,1771],{"class":331},[292,142106,142108],{"id":142107},"_1634-底部实现","16.3.4 底部实现",[19,142110,140067],{},[312,142112,142113],{"className":126697,"code":140640,"language":126699,"meta":30,"style":30},[318,142114,142115,142121,142131],{"__ignoreMap":30},[321,142116,142117,142119],{"class":323,"line":324},[321,142118,51756],{"class":51445},[321,142120,15779],{"class":331},[321,142122,142123,142125,142127,142129],{"class":323,"line":167},[321,142124,71023],{"class":380},[321,142126,51582],{"class":331},[321,142128,140657],{"class":380},[321,142130,1497],{"class":331},[321,142132,142133],{"class":323,"line":200},[321,142134,1771],{"class":331},[19,142136,140156],{},[312,142138,142139],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,142140,142141,142145,142159,142163],{"__ignoreMap":30},[321,142142,142143],{"class":323,"line":324},[321,142144,130808],{"class":390},[321,142146,142147,142149,142151,142153,142155,142157],{"class":323,"line":167},[321,142148,1242],{"class":331},[321,142150,51756],{"class":51445},[321,142152,53631],{"class":2169},[321,142154,377],{"class":331},[321,142156,130821],{"class":436},[321,142158,51452],{"class":331},[321,142160,142161],{"class":323,"line":200},[321,142162,130828],{"class":331},[321,142164,142165,142167,142169],{"class":323,"line":1401},[321,142166,51930],{"class":331},[321,142168,51756],{"class":51445},[321,142170,51452],{"class":331},[14,142172,142174],{"id":142173},"_164-项目总结","16.4 项目总结",[151,142176,142177,142180,142183,142186],{},[154,142178,142179],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[154,142181,142182],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[154,142184,142185],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[154,142187,142188],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[28,142190],{"style":126553,"src":142191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[151,142193,142194],{"start":1407},[154,142195,142196],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[28,142198],{"style":126553,"src":142199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[151,142201,142202],{"start":1421},[154,142203,142204],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[28,142206],{"style":126553,"src":142207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[312,142209,142210],{"className":127444,"code":136854,"language":127446,"meta":30,"style":30},[318,142211,142212],{"__ignoreMap":30},[321,142213,142214,142216,142218,142220,142222,142224,142226,142228,142230,142232,142234,142236],{"class":323,"line":324},[321,142215,1242],{"class":331},[321,142217,53966],{"class":51445},[321,142219,53969],{"class":2169},[321,142221,377],{"class":331},[321,142223,62844],{"class":436},[321,142225,15127],{"class":2169},[321,142227,377],{"class":331},[321,142229,136875],{"class":436},[321,142231,61165],{"class":2169},[321,142233,377],{"class":331},[321,142235,136882],{"class":436},[321,142237,51452],{"class":331},[151,142239,142240,142243],{"start":1427},[154,142241,142242],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[154,142244,142245],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5333,142247,142248],{},"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":30,"searchDepth":167,"depth":167,"links":142250},[142251,142256,142263,142271],{"id":139877,"depth":167,"text":139878,"children":142252},[142253,142254,142255],{"id":139881,"depth":200,"text":139882},{"id":140612,"depth":200,"text":140613},{"id":140925,"depth":200,"text":140926},{"id":141225,"depth":167,"text":141226,"children":142257},[142258,142259,142261],{"id":141229,"depth":200,"text":141230},{"id":141247,"depth":200,"text":142260},"16.2.2 列表页 header 和 nav 修改",{"id":141531,"depth":200,"text":142262},"16.2.3 列表页主体 sk_container",{"id":141723,"depth":167,"text":141724,"children":142264},[142265,142266,142268,142270],{"id":141738,"depth":200,"text":141739},{"id":141750,"depth":200,"text":142267},"16.3.2 header 头部实现",{"id":141829,"depth":200,"text":142269},"16.3.3 registerarea 主体模块实现",{"id":142107,"depth":200,"text":142108},{"id":142173,"depth":167,"text":142174},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139869,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142278,"title":142279,"body":142280,"description":23584,"extension":249,"meta":142388,"navigation":251,"path":142389,"seo":142390,"stem":142391,"__hash__":142392},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142281,"toc":142383},[142282,142285,142289,142292,142295,142304,142313,142317,142322,142329,142347,142350,142353,142356,142359,142362,142365,142368,142371,142374,142377,142380],[10,142283,142279],{"id":142284},"_17-web服务器与网站发布",[14,142286,142288],{"id":142287},"_171-web服务器","17.1 Web服务器",[19,142290,142291],{},"把自己网站上传到服务器上，可以让其他人访问",[28,142293],{"style":126553,"src":142294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142296,142297,142300,142301],{},[481,142298,142299],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[481,142302,142303],{},"Web 服务器等",[19,142305,142306,142307,101163,142310,25885],{},"根据服务器在网络中所在的位置不同，又可分为 ",[481,142308,142309],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[481,142311,142312],{},"远程服务器",[292,142314,142316],{"id":142315},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142318,142319],{},[481,142320,142321],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142323,142324,142325],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[570,142326,142327],{"href":142327,"rel":142328},"http:\u002F\u002Ffree.3v.do\u002F",[24073],[1339,142330,142331,142334,142337,142344],{},[154,142332,142333],{},"去免费空间网站注册账号。",[154,142335,142336],{},"记录下主机名、用户名、密码、域名。",[154,142338,142339,142340,142343],{},"利用 ",[318,142341,142342],{},"utftp"," 软件 上传网站到远程服务器",[154,142345,142346],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142348,142349],{},"使用软件上传，对上传软件文件进行解压",[28,142351],{"style":126553,"src":142352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[28,142354],{"style":126553,"src":142355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142357,142358],{},"输入刚刚申请的服务器账号信息：",[28,142360],{"style":126553,"src":142361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[28,142363],{"style":126553,"src":142364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[28,142366],{"style":126553,"src":142367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[28,142369],{"style":126553,"src":142370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142372,142373],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[28,142375],{"style":126553,"src":142376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142378,142379],{},"浏览器输入域名即可访问",[19,142381,142382],{},"首页一定必须是index",{"title":30,"searchDepth":167,"depth":167,"links":142384},[142385],{"id":142287,"depth":167,"text":142288,"children":142386},[142387],{"id":142315,"depth":200,"text":142316},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142279,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142394,"title":142395,"body":142396,"description":23584,"extension":249,"meta":143323,"navigation":251,"path":143324,"seo":143325,"stem":143326,"__hash__":143327},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142397,"toc":143306},[142398,142401,142405,142408,142411,142422,142425,142429,142433,142438,142441,142444,142447,142450,142454,142480,142484,142488,142491,142494,142498,142531,142535,142538,142541,142605,142609,142613,142616,142619,142622,142626,142671,142675,142678,142708,142712,142716,142719,142722,142726,142729,142798,142801,142909,142911,142917,142921,142924,142927,143023,143026,143030,143054,143058,143061,143065,143068,143072,143075,143078,143081,143084,143088,143091,143094,143098,143102,143105,143108,143111,143114,143118,143121,143125,143128,143131,143176,143180,143184,143187,143190,143193,143225,143229,143232,143266,143270,143273,143303],[10,142399,142395],{"id":142400},"_18-2d动画与3d转换",[14,142402,142404],{"id":142403},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142406,142407],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142409,142410],{},"转换（transform）你可以简单理解为变形",[1339,142412,142413,142416,142419],{},[154,142414,142415],{},"移动：translate",[154,142417,142418],{},"旋转：rotate",[154,142420,142421],{},"缩放：scale",[28,142423],{"style":126553,"src":142424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[292,142426,142428],{"id":142427},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22205,142430,142432],{"id":142431},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142434,142435,142436],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[481,142437,133356],{},[28,142439],{"style":126553,"src":142440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142442,142443],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142445,142446],{},"对于行内元素无效",[19,142448,142449],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22205,142451,142453],{"id":142452},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[312,142455,142456],{"className":126697,"code":138886,"language":126699,"meta":30,"style":30},[318,142457,142458,142464,142476],{"__ignoreMap":30},[321,142459,142460,142462],{"class":323,"line":324},[321,142461,51756],{"class":51445},[321,142463,15779],{"class":331},[321,142465,142466,142468,142470,142472,142474],{"class":323,"line":167},[321,142467,70615],{"class":380},[321,142469,51582],{"class":331},[321,142471,523],{"class":380},[321,142473,51701],{"class":380},[321,142475,1497],{"class":331},[321,142477,142478],{"class":323,"line":200},[321,142479,1771],{"class":331},[292,142481,142483],{"id":142482},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22205,142485,142487],{"id":142486},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142489,142490],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[28,142492],{"style":126553,"src":142493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22205,142495,142497],{"id":142496},"_18122-旋转效果","18.1.2.2 旋转效果",[312,142499,142501],{"className":126697,"code":142500,"language":126699,"meta":30,"style":30},"div {\n  transform: rotate(45deg);\n}\n",[318,142502,142503,142509,142527],{"__ignoreMap":30},[321,142504,142505,142507],{"class":323,"line":324},[321,142506,51756],{"class":51445},[321,142508,15779],{"class":331},[321,142510,142511,142513,142515,142518,142520,142522,142525],{"class":323,"line":167},[321,142512,136681],{"class":380},[321,142514,51582],{"class":331},[321,142516,142517],{"class":380},"rotate",[321,142519,332],{"class":331},[321,142521,861],{"class":380},[321,142523,142524],{"class":327},"deg",[321,142526,2925],{"class":331},[321,142528,142529],{"class":323,"line":200},[321,142530,1771],{"class":331},[22205,142532,142534],{"id":142533},"_18123-三角做法","18.1.2.3 三角做法",[19,142536,142537],{},"该下标当经过最外层大盒子时会实现向上反转",[28,142539],{"style":126553,"src":142540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[312,142542,142543],{"className":126697,"code":135217,"language":126699,"meta":30,"style":30},[318,142544,142545,142549,142555,142565,142575,142591,142601],{"__ignoreMap":30},[321,142546,142547],{"class":323,"line":324},[321,142548,135224],{"class":390},[321,142550,142551,142553],{"class":323,"line":167},[321,142552,135229],{"class":2169},[321,142554,15779],{"class":331},[321,142556,142557,142559,142561,142563],{"class":323,"line":200},[321,142558,70713],{"class":380},[321,142560,51582],{"class":331},[321,142562,523],{"class":380},[321,142564,1497],{"class":331},[321,142566,142567,142569,142571,142573],{"class":323,"line":1401},[321,142568,70933],{"class":380},[321,142570,51582],{"class":331},[321,142572,523],{"class":380},[321,142574,1497],{"class":331},[321,142576,142577,142579,142581,142583,142585,142587,142589],{"class":323,"line":1407},[321,142578,71041],{"class":380},[321,142580,51582],{"class":331},[321,142582,778],{"class":380},[321,142584,51637],{"class":327},[321,142586,51666],{"class":380},[321,142588,64136],{"class":380},[321,142590,1497],{"class":331},[321,142592,142593,142595,142597,142599],{"class":323,"line":1421},[321,142594,135272],{"class":380},[321,142596,51582],{"class":331},[321,142598,62514],{"class":380},[321,142600,1497],{"class":331},[321,142602,142603],{"class":323,"line":1427},[321,142604,1771],{"class":331},[292,142606,142608],{"id":142607},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22205,142610,142612],{"id":142611},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142614,142615],{},"设置中心点",[28,142617],{"style":126553,"src":142618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142620,142621],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22205,142623,142625],{"id":142624},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[312,142627,142629],{"className":126697,"code":142628,"language":126699,"meta":30,"style":30},"\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",[318,142630,142631,142636,142642,142657,142662,142667],{"__ignoreMap":30},[321,142632,142633],{"class":323,"line":324},[321,142634,142635],{"class":390},"\u002F* 转换中心点 *\u002F\n",[321,142637,142638,142640],{"class":323,"line":167},[321,142639,51756],{"class":51445},[321,142641,15779],{"class":331},[321,142643,142644,142647,142649,142651,142653,142655],{"class":323,"line":200},[321,142645,142646],{"class":380},"  transform-origin",[321,142648,51582],{"class":331},[321,142650,51737],{"class":380},[321,142652,17351],{"class":380},[321,142654,130560],{"class":331},[321,142656,135370],{"class":390},[321,142658,142659],{"class":323,"line":1401},[321,142660,142661],{"class":390},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[321,142663,142664],{"class":323,"line":1407},[321,142665,142666],{"class":390},"  \u002F* transform-origin: left top; *\u002F\n",[321,142668,142669],{"class":323,"line":1421},[321,142670,1771],{"class":331},[22205,142672,142674],{"id":142673},"_18133-旋转案例","18.1.3.3 旋转案例",[28,142676],{"style":126553,"src":142677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[312,142679,142680],{"className":126697,"code":142500,"language":126699,"meta":30,"style":30},[318,142681,142682,142688,142704],{"__ignoreMap":30},[321,142683,142684,142686],{"class":323,"line":324},[321,142685,51756],{"class":51445},[321,142687,15779],{"class":331},[321,142689,142690,142692,142694,142696,142698,142700,142702],{"class":323,"line":167},[321,142691,136681],{"class":380},[321,142693,51582],{"class":331},[321,142695,142517],{"class":380},[321,142697,332],{"class":331},[321,142699,861],{"class":380},[321,142701,142524],{"class":327},[321,142703,2925],{"class":331},[321,142705,142706],{"class":323,"line":200},[321,142707,1771],{"class":331},[292,142709,142711],{"id":142710},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22205,142713,142715],{"id":142714},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142717,142718],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[28,142720],{"style":126553,"src":142721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22205,142723,142725],{"id":142724},"_18142-分页按钮","18.1.4.2 分页按钮",[28,142727],{"style":126553,"src":142728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[312,142730,142732],{"className":126697,"code":142731,"language":126699,"meta":30,"style":30},"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",[318,142733,142734,142740,142756,142760,142764,142769,142775,142789,142794],{"__ignoreMap":30},[321,142735,142736,142738],{"class":323,"line":324},[321,142737,51756],{"class":51445},[321,142739,15779],{"class":331},[321,142741,142742,142744,142746,142749,142751,142754],{"class":323,"line":167},[321,142743,136681],{"class":380},[321,142745,51582],{"class":331},[321,142747,142748],{"class":380},"scale",[321,142750,332],{"class":331},[321,142752,142753],{"class":380},"1.2",[321,142755,2925],{"class":331},[321,142757,142758],{"class":323,"line":200},[321,142759,1771],{"class":331},[321,142761,142762],{"class":323,"line":1401},[321,142763,136158],{"class":331},[321,142765,142766],{"class":323,"line":1407},[321,142767,142768],{"class":390},"\u002F* 2D 缩放 *\u002F\n",[321,142770,142771,142773],{"class":323,"line":1421},[321,142772,51756],{"class":51445},[321,142774,15779],{"class":331},[321,142776,142777,142779,142781,142783,142785,142787],{"class":323,"line":1427},[321,142778,136681],{"class":380},[321,142780,51582],{"class":331},[321,142782,142748],{"class":380},[321,142784,332],{"class":331},[321,142786,142753],{"class":380},[321,142788,2925],{"class":331},[321,142790,142791],{"class":323,"line":1518},[321,142792,142793],{"class":390},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[321,142795,142796],{"class":323,"line":1524},[321,142797,1771],{"class":331},[19,142799,142800],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[312,142802,142804],{"className":126697,"code":142803,"language":126699,"meta":30,"style":30},"\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",[318,142805,142806,142811,142821,142842,142863,142867,142872,142878,142905],{"__ignoreMap":30},[321,142807,142808],{"class":323,"line":324},[321,142809,142810],{"class":390},"\u002F* 定义动画 *\u002F\n",[321,142812,142813,142816,142819],{"class":323,"line":167},[321,142814,142815],{"class":327},"@keyframes",[321,142817,142818],{"class":5423}," move",[321,142820,15779],{"class":331},[321,142822,142823,142826,142828,142830,142832,142835,142837,142839],{"class":323,"line":200},[321,142824,142825],{"class":2169},"  0%",[321,142827,79952],{"class":331},[321,142829,48279],{"class":380},[321,142831,51582],{"class":331},[321,142833,142834],{"class":380},"translateX",[321,142836,332],{"class":331},[321,142838,523],{"class":380},[321,142840,142841],{"class":331},"); }\n",[321,142843,142844,142847,142849,142851,142853,142855,142857,142859,142861],{"class":323,"line":1401},[321,142845,142846],{"class":2169},"  100%",[321,142848,79952],{"class":331},[321,142850,48279],{"class":380},[321,142852,51582],{"class":331},[321,142854,142834],{"class":380},[321,142856,332],{"class":331},[321,142858,643],{"class":380},[321,142860,51637],{"class":327},[321,142862,142841],{"class":331},[321,142864,142865],{"class":323,"line":1407},[321,142866,1771],{"class":331},[321,142868,142869],{"class":323,"line":1421},[321,142870,142871],{"class":390},"\u002F* 调用动画 *\u002F\n",[321,142873,142874,142876],{"class":323,"line":1427},[321,142875,51756],{"class":51445},[321,142877,15779],{"class":331},[321,142879,142880,142883,142885,142887,142889,142891,142893,142895,142897,142900,142903],{"class":323,"line":1518},[321,142881,142882],{"class":380},"  animation",[321,142884,51582],{"class":331},[321,142886,135383],{"class":380},[321,142888,25263],{"class":380},[321,142890,1027],{"class":327},[321,142892,78825],{"class":380},[321,142894,4299],{"class":380},[321,142896,1027],{"class":327},[321,142898,142899],{"class":380}," infinite",[321,142901,142902],{"class":380}," alternate",[321,142904,1497],{"class":331},[321,142906,142907],{"class":323,"line":1524},[321,142908,1771],{"class":331},[19,142910,142800],{},[312,142912,142915],{"className":142913,"code":142914,"language":5394},[5392],"\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",[318,142916,142914],{"__ignoreMap":30},[22205,142918,142920],{"id":142919},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142922,142923],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[28,142925],{"style":126553,"src":142926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[312,142928,142929],{"className":126697,"code":142803,"language":126699,"meta":30,"style":30},[318,142930,142931,142935,142943,142961,142981,142985,142989,142995,143019],{"__ignoreMap":30},[321,142932,142933],{"class":323,"line":324},[321,142934,142810],{"class":390},[321,142936,142937,142939,142941],{"class":323,"line":167},[321,142938,142815],{"class":327},[321,142940,142818],{"class":5423},[321,142942,15779],{"class":331},[321,142944,142945,142947,142949,142951,142953,142955,142957,142959],{"class":323,"line":200},[321,142946,142825],{"class":2169},[321,142948,79952],{"class":331},[321,142950,48279],{"class":380},[321,142952,51582],{"class":331},[321,142954,142834],{"class":380},[321,142956,332],{"class":331},[321,142958,523],{"class":380},[321,142960,142841],{"class":331},[321,142962,142963,142965,142967,142969,142971,142973,142975,142977,142979],{"class":323,"line":1401},[321,142964,142846],{"class":2169},[321,142966,79952],{"class":331},[321,142968,48279],{"class":380},[321,142970,51582],{"class":331},[321,142972,142834],{"class":380},[321,142974,332],{"class":331},[321,142976,643],{"class":380},[321,142978,51637],{"class":327},[321,142980,142841],{"class":331},[321,142982,142983],{"class":323,"line":1407},[321,142984,1771],{"class":331},[321,142986,142987],{"class":323,"line":1421},[321,142988,142871],{"class":390},[321,142990,142991,142993],{"class":323,"line":1427},[321,142992,51756],{"class":51445},[321,142994,15779],{"class":331},[321,142996,142997,142999,143001,143003,143005,143007,143009,143011,143013,143015,143017],{"class":323,"line":1518},[321,142998,142882],{"class":380},[321,143000,51582],{"class":331},[321,143002,135383],{"class":380},[321,143004,25263],{"class":380},[321,143006,1027],{"class":327},[321,143008,78825],{"class":380},[321,143010,4299],{"class":380},[321,143012,1027],{"class":327},[321,143014,142899],{"class":380},[321,143016,142902],{"class":380},[321,143018,1497],{"class":331},[321,143020,143021],{"class":323,"line":1524},[321,143022,1771],{"class":331},[19,143024,143025],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[292,143027,143029],{"id":143028},"_1823-知识点回顾","18.2.3 知识点回顾",[312,143031,143032],{"className":126697,"code":128866,"language":126699,"meta":30,"style":30},[318,143033,143034,143040,143050],{"__ignoreMap":30},[321,143035,143036,143038],{"class":323,"line":324},[321,143037,51756],{"class":51445},[321,143039,15779],{"class":331},[321,143041,143042,143044,143046,143048],{"class":323,"line":167},[321,143043,128879],{"class":380},[321,143045,51582],{"class":331},[321,143047,61881],{"class":380},[321,143049,1497],{"class":331},[321,143051,143052],{"class":323,"line":200},[321,143053,1771],{"class":331},[14,143055,143057],{"id":143056},"_183-3d-转换","18.3 3D 转换",[19,143059,143060],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[292,143062,143064],{"id":143063},"_1831-坐标轴认识","18.3.1 坐标轴认识",[28,143066],{"style":126553,"src":143067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[292,143069,143071],{"id":143070},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[28,143073],{"style":126553,"src":143074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143076,143077],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143079,143080],{},"translate3d的效果需要搭配透视perspective来使用",[28,143082],{"style":126553,"src":143083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[292,143085,143087],{"id":143086},"_1833-透视-perspective","18.3.3 透视 perspective",[28,143089],{"style":126553,"src":143090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143092,143093],{},"透视写在父盒子上，单位为像素",[292,143095,143097],{"id":143096},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22205,143099,143101],{"id":143100},"_18341-分开解释","18.3.4.1 分开解释",[28,143103],{"style":126553,"src":143104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[28,143106],{"style":126553,"src":143107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[28,143109],{"style":126553,"src":143110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143112,143113],{},"总结来说就是左手原则",[22205,143115,143117],{"id":143116},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[28,143119],{"style":126553,"src":143120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[292,143122,143124],{"id":143123},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[28,143126],{"style":126553,"src":143127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[28,143129],{"style":126553,"src":143130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[312,143132,143134],{"className":126697,"code":143133,"language":126699,"meta":30,"style":30},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[318,143135,143136,143142,143155,143172],{"__ignoreMap":30},[321,143137,143138,143140],{"class":323,"line":324},[321,143139,51756],{"class":51445},[321,143141,15779],{"class":331},[321,143143,143144,143147,143149,143151,143153],{"class":323,"line":167},[321,143145,143146],{"class":380},"  perspective",[321,143148,51582],{"class":331},[321,143150,65219],{"class":380},[321,143152,51637],{"class":327},[321,143154,1497],{"class":331},[321,143156,143157,143159,143161,143164,143166,143168,143170],{"class":323,"line":200},[321,143158,136681],{"class":380},[321,143160,51582],{"class":331},[321,143162,143163],{"class":380},"rotateX",[321,143165,332],{"class":331},[321,143167,861],{"class":380},[321,143169,142524],{"class":327},[321,143171,2925],{"class":331},[321,143173,143174],{"class":323,"line":1401},[321,143175,1771],{"class":331},[292,143177,143179],{"id":143178},"_1836-案例","18.3.6 案例",[22205,143181,143183],{"id":143182},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[28,143185],{"style":126553,"src":143186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[28,143188],{"style":126553,"src":143189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[28,143191],{"style":126553,"src":143192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[312,143194,143196],{"className":126697,"code":143195,"language":126699,"meta":30,"style":30},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[318,143197,143198,143203,143209,143221],{"__ignoreMap":30},[321,143199,143200],{"class":323,"line":324},[321,143201,143202],{"class":390},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[321,143204,143205,143207],{"class":323,"line":167},[321,143206,133694],{"class":2169},[321,143208,15779],{"class":331},[321,143210,143211,143213,143215,143217,143219],{"class":323,"line":200},[321,143212,143146],{"class":380},[321,143214,51582],{"class":331},[321,143216,65219],{"class":380},[321,143218,51637],{"class":327},[321,143220,1497],{"class":331},[321,143222,143223],{"class":323,"line":1401},[321,143224,1771],{"class":331},[22205,143226,143228],{"id":143227},"_18362-3d导航栏","18.3.6.2 3D导航栏",[28,143230],{"style":126553,"src":143231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[312,143233,143234],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,143235,143236,143240,143254,143258],{"__ignoreMap":30},[321,143237,143238],{"class":323,"line":324},[321,143239,130808],{"class":390},[321,143241,143242,143244,143246,143248,143250,143252],{"class":323,"line":167},[321,143243,1242],{"class":331},[321,143245,51756],{"class":51445},[321,143247,53631],{"class":2169},[321,143249,377],{"class":331},[321,143251,130821],{"class":436},[321,143253,51452],{"class":331},[321,143255,143256],{"class":323,"line":200},[321,143257,130828],{"class":331},[321,143259,143260,143262,143264],{"class":323,"line":1401},[321,143261,51930],{"class":331},[321,143263,51756],{"class":51445},[321,143265,51452],{"class":331},[22205,143267,143269],{"id":143268},"_18363-旋转木马","18.3.6.3 旋转木马",[28,143271],{"style":126553,"src":143272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[312,143274,143275],{"className":126697,"code":142500,"language":126699,"meta":30,"style":30},[318,143276,143277,143283,143299],{"__ignoreMap":30},[321,143278,143279,143281],{"class":323,"line":324},[321,143280,51756],{"class":51445},[321,143282,15779],{"class":331},[321,143284,143285,143287,143289,143291,143293,143295,143297],{"class":323,"line":167},[321,143286,136681],{"class":380},[321,143288,51582],{"class":331},[321,143290,142517],{"class":380},[321,143292,332],{"class":331},[321,143294,861],{"class":380},[321,143296,142524],{"class":327},[321,143298,2925],{"class":331},[321,143300,143301],{"class":323,"line":200},[321,143302,1771],{"class":331},[5333,143304,143305],{},"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":30,"searchDepth":167,"depth":167,"links":143307},[143308,143315],{"id":142403,"depth":167,"text":142404,"children":143309},[143310,143311,143312,143313,143314],{"id":142427,"depth":200,"text":142428},{"id":142482,"depth":200,"text":142483},{"id":142607,"depth":200,"text":142608},{"id":142710,"depth":200,"text":142711},{"id":143028,"depth":200,"text":143029},{"id":143056,"depth":167,"text":143057,"children":143316},[143317,143318,143319,143320,143321,143322],{"id":143063,"depth":200,"text":143064},{"id":143070,"depth":200,"text":143071},{"id":143086,"depth":200,"text":143087},{"id":143096,"depth":200,"text":143097},{"id":143123,"depth":200,"text":143124},{"id":143178,"depth":200,"text":143179},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142395,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143329,"title":143330,"body":143331,"description":23584,"extension":249,"meta":143534,"navigation":251,"path":143535,"seo":143536,"stem":143537,"__hash__":143538},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143332,"toc":143523},[143333,143336,143340,143343,143346,143350,143353,143356,143359,143363,143366,143370,143373,143377,143380,143384,143398,143402,143427,143430,143433,143450,143454,143458,143461,143464,143468,143471,143474,143492,143496,143499,143513,143517,143520],[10,143334,143330],{"id":143335},"_19-移动端基础-前缀现状与视口",[14,143337,143339],{"id":143338},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[28,143341],{"style":126553,"src":143342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143344,143345],{},"意思就是加个前缀，增加兼容性",[14,143347,143349],{"id":143348},"_192-移动端现状认识","19.2 移动端现状认识",[28,143351],{"style":126553,"src":143352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143354,143355],{},"调试方法：",[28,143357],{"style":126553,"src":143358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143360,143362],{"id":143361},"_193-视口","19.3 视口",[19,143364,143365],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[292,143367,143369],{"id":143368},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[28,143371],{"style":126553,"src":143372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[292,143374,143376],{"id":143375},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[28,143378],{"style":126553,"src":143379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[292,143381,143383],{"id":143382},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1339,143385,143386,143389,143392,143395],{},[154,143387,143388],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[154,143390,143391],{},"理想视口，对设备来讲，是最理想的视口尺寸",[154,143393,143394],{},"需要手动添写meta视口标签通知浏览器操作",[154,143396,143397],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[292,143399,143401],{"id":143400},"_1934-meta视口标签","19.3.4 meta视口标签",[312,143403,143405],{"className":127444,"code":143404,"language":127446,"meta":30,"style":30},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[318,143406,143407],{"__ignoreMap":30},[321,143408,143409,143411,143413,143415,143417,143419,143421,143423,143425],{"class":323,"line":324},[321,143410,1242],{"class":331},[321,143412,51489],{"class":51445},[321,143414,15127],{"class":2169},[321,143416,377],{"class":331},[321,143418,51536],{"class":436},[321,143420,51516],{"class":2169},[321,143422,377],{"class":331},[321,143424,51543],{"class":436},[321,143426,51452],{"class":331},[28,143428],{"style":126553,"src":143429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143431,143432],{},"标准视口设置：",[151,143434,143435,143438,143441,143444,143447],{},[154,143436,143437],{},"视口宽度和设备保持一致",[154,143439,143440],{},"视口的默认缩放比例1.0",[154,143442,143443],{},"不允许用户自行缩放",[154,143445,143446],{},"最大允许的缩放比例1.0",[154,143448,143449],{},"最小允许的缩放比例1.0",[292,143451,143453],{"id":143452},"_1935-二倍图","19.3.5 二倍图",[22205,143455,143457],{"id":143456},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[28,143459],{"style":126553,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[28,143462],{"style":126553,"src":143463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22205,143465,143467],{"id":143466},"_19352-多倍图","19.3.5.2 多倍图",[28,143469],{"style":126553,"src":143470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143472,143473],{},"二倍图法，代码如下：",[312,143475,143477],{"className":126697,"code":143476,"language":126699,"meta":30,"style":30},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[318,143478,143479,143484],{"__ignoreMap":30},[321,143480,143481],{"class":323,"line":324},[321,143482,143483],{"class":390},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[321,143485,143486,143489],{"class":323,"line":167},[321,143487,143488],{"class":51445},"background-size",[321,143490,143491],{"class":331},": 50% 50%;\n",[22205,143493,143495],{"id":143494},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[28,143497],{"style":126553,"src":143498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[151,143500,143501,143504,143507,143510],{},[154,143502,143503],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[154,143505,143506],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[154,143508,143509],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[154,143511,143512],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22205,143514,143516],{"id":143515},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[28,143518],{"style":126553,"src":143519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5333,143521,143522],{},"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":30,"searchDepth":167,"depth":167,"links":143524},[143525,143526,143527],{"id":143338,"depth":167,"text":143339},{"id":143348,"depth":167,"text":143349},{"id":143361,"depth":167,"text":143362,"children":143528},[143529,143530,143531,143532,143533],{"id":143368,"depth":200,"text":143369},{"id":143375,"depth":200,"text":143376},{"id":143382,"depth":200,"text":143383},{"id":143400,"depth":200,"text":143401},{"id":143452,"depth":200,"text":143453},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143330,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143540,"title":143541,"body":143542,"description":23584,"extension":249,"meta":144419,"navigation":251,"path":144420,"seo":144421,"stem":144422,"__hash__":144423},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143543,"toc":144403},[143544,143547,143551,143558,143561,143568,143571,143576,143579,143583,143587,143594,143597,143600,143604,143607,143610,143613,143616,143619,143623,143626,143630,143632,143635,143638,143641,143644,143646,143649,143651,143681,143683,143713,143717,143720,143724,143727,143744,143747,143750,143826,143828,143831,143834,143837,143840,143842,143845,143848,143852,143874,143877,143880,143884,143887,143893,143896,143900,143903,143906,143910,143913,143916,143919,143923,143926,143929,143932,143935,143939,143942,143946,143953,143956,143959,143962,143965,143975,143978,143981,143988,143991,143995,143998,144001,144005,144008,144011,144014,144059,144062,144065,144068,144070,144199,144201,144239,144242,144245,144247,144365,144367,144401],[10,143545,143541],{"id":143546},"_20-移动端布局实战上篇",[14,143548,143550],{"id":143549},"_201-移动端主流方案","20.1 移动端主流方案",[151,143552,143553],{},[154,143554,143555],{},[481,143556,143557],{},"单独移动端页面（主流）",[28,143559],{"style":126553,"src":143560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[151,143562,143563],{"start":167},[154,143564,143565],{},[481,143566,143567],{},"响应式兼容PC移动端",[28,143569],{"style":126553,"src":143570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[151,143572,143573],{"start":200},[154,143574,143575],{},"两种页面选型布局方式",[28,143577],{"style":126553,"src":143578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143580,143582],{"id":143581},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[292,143584,143586],{"id":143585},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143588,143589,143590],{},"官网地址： ",[570,143591,143592],{"href":143592,"rel":143593},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24073],[28,143595],{"style":126553,"src":143596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[28,143598],{"style":126553,"src":143599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[292,143601,143603],{"id":143602},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[28,143605],{"style":126553,"src":143606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[28,143608],{"style":126553,"src":143609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143611,143612],{},"去除高亮：",[19,143614,143615],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143617,143618],{},"-webkit- tap-highlight-color: transparent;",[14,143620,143622],{"id":143621},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[28,143624],{"style":126553,"src":143625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143627,143629],{"id":143628},"_204-流式布局案例","20.4 流式布局案例",[19,143631,361],{},[19,143633,143634],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143636,143637],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143639,143640],{},"图片格式：",[28,143642],{"style":126553,"src":143643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143645,135740],{},[28,143647],{"style":126553,"src":143648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143650,140067],{},[312,143652,143653],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,143654,143655],{"__ignoreMap":30},[321,143656,143657,143659,143661,143663,143665,143667,143669,143671,143673,143675,143677,143679],{"class":323,"line":324},[321,143658,1242],{"class":331},[321,143660,28],{"class":51445},[321,143662,55384],{"class":2169},[321,143664,377],{"class":331},[321,143666,134214],{"class":436},[321,143668,55392],{"class":2169},[321,143670,377],{"class":331},[321,143672,134221],{"class":436},[321,143674,134224],{"class":2169},[321,143676,377],{"class":331},[321,143678,134229],{"class":436},[321,143680,51452],{"class":331},[19,143682,140156],{},[312,143684,143685],{"className":127444,"code":134199,"language":127446,"meta":30,"style":30},[318,143686,143687],{"__ignoreMap":30},[321,143688,143689,143691,143693,143695,143697,143699,143701,143703,143705,143707,143709,143711],{"class":323,"line":324},[321,143690,1242],{"class":331},[321,143692,28],{"class":51445},[321,143694,55384],{"class":2169},[321,143696,377],{"class":331},[321,143698,134214],{"class":436},[321,143700,55392],{"class":2169},[321,143702,377],{"class":331},[321,143704,134221],{"class":436},[321,143706,134224],{"class":2169},[321,143708,377],{"class":331},[321,143710,134229],{"class":436},[321,143712,51452],{"class":331},[14,143714,143716],{"id":143715},"_205-flex布局","20.5 flex布局",[28,143718],{"style":126553,"src":143719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[292,143721,143723],{"id":143722},"_2051-布局原理","20.5.1 布局原理",[19,143725,143726],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1339,143728,143729,143732,143735,143738,143741],{},[154,143730,143731],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[154,143733,143734],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[154,143736,143737],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[154,143739,143740],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[154,143742,143743],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143745,143746],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143748,143749],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[312,143751,143753],{"className":126697,"code":143752,"language":126699,"meta":30,"style":30},"\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",[318,143754,143755,143760,143767,143777,143789,143800,143811,143822],{"__ignoreMap":30},[321,143756,143757],{"class":323,"line":324},[321,143758,143759],{"class":390},"\u002F* Flex 弹性布局 *\u002F\n",[321,143761,143762,143765],{"class":323,"line":167},[321,143763,143764],{"class":2169},".container",[321,143766,15779],{"class":331},[321,143768,143769,143771,143773,143775],{"class":323,"line":200},[321,143770,128313],{"class":380},[321,143772,51582],{"class":331},[321,143774,51622],{"class":380},[321,143776,1497],{"class":331},[321,143778,143779,143782,143784,143787],{"class":323,"line":1401},[321,143780,143781],{"class":380},"  flex-direction",[321,143783,51582],{"class":331},[321,143785,143786],{"class":380},"row",[321,143788,1497],{"class":331},[321,143790,143791,143794,143796,143798],{"class":323,"line":1407},[321,143792,143793],{"class":380},"  justify-content",[321,143795,51582],{"class":331},[321,143797,51813],{"class":380},[321,143799,1497],{"class":331},[321,143801,143802,143805,143807,143809],{"class":323,"line":1421},[321,143803,143804],{"class":380},"  align-items",[321,143806,51582],{"class":331},[321,143808,51737],{"class":380},[321,143810,1497],{"class":331},[321,143812,143813,143816,143818,143820],{"class":323,"line":1427},[321,143814,143815],{"class":380},"  flex-wrap",[321,143817,51582],{"class":331},[321,143819,78755],{"class":380},[321,143821,1497],{"class":331},[321,143823,143824],{"class":323,"line":1518},[321,143825,1771],{"class":331},[19,143827,70598],{},[19,143829,143830],{},".form-item .male-label {",[19,143832,143833],{},"   margin-right: 20px;",[19,143835,143836],{},"   display: inline-flex;",[19,143838,143839],{},"   align-items: center;",[19,143841,1278],{},[28,143843],{"style":126553,"src":143844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[28,143846],{"style":126553,"src":143847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[292,143849,143851],{"id":143850},"_2052-常见父项属性","20.5.2 常见父项属性",[151,143853,143854,143857,143860,143863,143866,143869,143872],{},[154,143855,143856],{},"flex-direction：设置主轴的方向",[154,143858,143859],{},"justify-content：设置主轴上的子元素排列方式",[154,143861,143862],{},"flex-wrap：设置子元素是否换行",[154,143864,143865],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[154,143867,143868],{},"align-items：设置侧轴上的子元素排列方式（单行）",[154,143870,143871],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[154,143873,143856],{},[28,143875],{"style":126553,"src":143876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[28,143878],{"style":126553,"src":143879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[151,143881,143882],{"start":167},[154,143883,143859],{},[28,143885],{"style":126553,"src":143886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143888,143889,143892],{},[318,143890,143891],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143894,143895],{},"跟着主轴走",[151,143897,143898],{"start":200},[154,143899,143862],{},[28,143901],{"style":126553,"src":143902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143904,143905],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[151,143907,143908],{"start":1401},[154,143909,143865],{},[28,143911],{"style":126553,"src":143912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143914,143915],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143917,143918],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[151,143920,143921],{"start":1407},[154,143922,143868],{},[28,143924],{"style":126553,"src":143925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143927,143928],{},"align-items与align-content之间的区别：",[19,143930,143931],{},"单找items，多找content",[28,143933],{"style":126553,"src":143934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[151,143936,143937],{"start":1421},[154,143938,143871],{},[28,143940],{"style":126553,"src":143941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[292,143943,143945],{"id":143944},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[151,143947,143948],{},[154,143949,143950],{},[481,143951,143952],{},"flex 属性",[19,143954,143955],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[28,143957],{"style":126553,"src":143958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143960,143961],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143963,143964],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[151,143966,143967],{"start":167},[154,143968,143969,14002,143972],{},[481,143970,143971],{},"align-self",[481,143973,143974],{},"控制子项自己在侧轴上的排列方式",[28,143976],{"style":126553,"src":143977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143979,143980],{},"单个子盒子在父盒子侧轴上的排列方式",[151,143982,143983],{"start":200},[154,143984,143985,143987],{},[481,143986,95442],{}," 属性定义项目的排列顺序",[28,143989],{"style":126553,"src":143990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[292,143992,143994],{"id":143993},"_2054-背景线性渐变","20.5.4 背景线性渐变",[28,143996],{"style":126553,"src":143997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,143999,144000],{},"必须要添加浏览器的私有前缀",[292,144002,144004],{"id":144003},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144006,144007],{},"学到最重要的知识：",[19,144009,144010],{},"flex处理这样的布局思路",[28,144012],{"style":126553,"src":144013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[312,144015,144017],{"className":126697,"code":144016,"language":126699,"meta":30,"style":30},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[318,144018,144019,144025,144035,144045,144055],{"__ignoreMap":30},[321,144020,144021,144023],{"class":323,"line":324},[321,144022,143764],{"class":2169},[321,144024,15779],{"class":331},[321,144026,144027,144029,144031,144033],{"class":323,"line":167},[321,144028,128313],{"class":380},[321,144030,51582],{"class":331},[321,144032,51622],{"class":380},[321,144034,1497],{"class":331},[321,144036,144037,144039,144041,144043],{"class":323,"line":200},[321,144038,143793],{"class":380},[321,144040,51582],{"class":331},[321,144042,51737],{"class":380},[321,144044,1497],{"class":331},[321,144046,144047,144049,144051,144053],{"class":323,"line":1401},[321,144048,143804],{"class":380},[321,144050,51582],{"class":331},[321,144052,51737],{"class":380},[321,144054,1497],{"class":331},[321,144056,144057],{"class":323,"line":1407},[321,144058,1771],{"class":331},[19,144060,144061],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144063,144064],{},"使用属性选择器",[28,144066],{"style":126553,"src":144067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144069,69034],{},[312,144071,144073],{"className":127444,"code":144072,"language":127446,"meta":30,"style":30},"\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",[318,144074,144075,144080,144094,144099,144119,144124,144143,144148,144167,144172,144191],{"__ignoreMap":30},[321,144076,144077],{"class":323,"line":324},[321,144078,144079],{"class":390},"\u003C!-- 携程网移动端案例结构 -->\n",[321,144081,144082,144084,144086,144088,144090,144092],{"class":323,"line":167},[321,144083,1242],{"class":331},[321,144085,51756],{"class":51445},[321,144087,53631],{"class":2169},[321,144089,377],{"class":331},[321,144091,92468],{"class":436},[321,144093,51452],{"class":331},[321,144095,144096],{"class":323,"line":200},[321,144097,144098],{"class":390},"  \u003C!-- 搜索栏 -->\n",[321,144100,144101,144103,144105,144107,144109,144112,144115,144117],{"class":323,"line":1401},[321,144102,52289],{"class":331},[321,144104,51756],{"class":51445},[321,144106,53631],{"class":2169},[321,144108,377],{"class":331},[321,144110,144111],{"class":436},"\"search-index\"",[321,144113,144114],{"class":331},">...\u003C\u002F",[321,144116,51756],{"class":51445},[321,144118,51452],{"class":331},[321,144120,144121],{"class":323,"line":1407},[321,144122,144123],{"class":390},"  \u003C!-- 焦点图 -->\n",[321,144125,144126,144128,144130,144132,144134,144137,144139,144141],{"class":323,"line":1421},[321,144127,52289],{"class":331},[321,144129,51756],{"class":51445},[321,144131,53631],{"class":2169},[321,144133,377],{"class":331},[321,144135,144136],{"class":436},"\"focus\"",[321,144138,144114],{"class":331},[321,144140,51756],{"class":51445},[321,144142,51452],{"class":331},[321,144144,144145],{"class":323,"line":1427},[321,144146,144147],{"class":390},"  \u003C!-- 主导航 -->\n",[321,144149,144150,144152,144154,144156,144158,144161,144163,144165],{"class":323,"line":1518},[321,144151,52289],{"class":331},[321,144153,51756],{"class":51445},[321,144155,53631],{"class":2169},[321,144157,377],{"class":331},[321,144159,144160],{"class":436},"\"local-nav\"",[321,144162,144114],{"class":331},[321,144164,51756],{"class":51445},[321,144166,51452],{"class":331},[321,144168,144169],{"class":323,"line":1524},[321,144170,144171],{"class":390},"  \u003C!-- 子导航 -->\n",[321,144173,144174,144176,144178,144180,144182,144185,144187,144189],{"class":323,"line":1536},[321,144175,52289],{"class":331},[321,144177,51756],{"class":51445},[321,144179,53631],{"class":2169},[321,144181,377],{"class":331},[321,144183,144184],{"class":436},"\"nav-common\"",[321,144186,144114],{"class":331},[321,144188,51756],{"class":51445},[321,144190,51452],{"class":331},[321,144192,144193,144195,144197],{"class":323,"line":1818},[321,144194,51930],{"class":331},[321,144196,51756],{"class":51445},[321,144198,51452],{"class":331},[19,144200,70598],{},[312,144202,144203],{"className":126697,"code":137149,"language":126699,"meta":30,"style":30},[318,144204,144205,144219,144235],{"__ignoreMap":30},[321,144206,144207,144209,144211,144213,144215,144217],{"class":323,"line":324},[321,144208,53966],{"class":51445},[321,144210,1222],{"class":331},[321,144212,103252],{"class":2169},[321,144214,377],{"class":327},[321,144216,62844],{"class":436},[321,144218,137166],{"class":331},[321,144220,144221,144223,144225,144227,144229,144231,144233],{"class":323,"line":167},[321,144222,71041],{"class":380},[321,144224,51582],{"class":331},[321,144226,549],{"class":380},[321,144228,51637],{"class":327},[321,144230,51666],{"class":380},[321,144232,130277],{"class":380},[321,144234,1497],{"class":331},[321,144236,144237],{"class":323,"line":200},[321,144238,1771],{"class":331},[19,144240,144241],{},"总代码和效果展示：",[28,144243],{"style":126553,"src":144244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144246,69034],{},[312,144248,144249],{"className":127444,"code":144072,"language":127446,"meta":30,"style":30},[318,144250,144251,144255,144269,144273,144291,144295,144313,144317,144335,144339,144357],{"__ignoreMap":30},[321,144252,144253],{"class":323,"line":324},[321,144254,144079],{"class":390},[321,144256,144257,144259,144261,144263,144265,144267],{"class":323,"line":167},[321,144258,1242],{"class":331},[321,144260,51756],{"class":51445},[321,144262,53631],{"class":2169},[321,144264,377],{"class":331},[321,144266,92468],{"class":436},[321,144268,51452],{"class":331},[321,144270,144271],{"class":323,"line":200},[321,144272,144098],{"class":390},[321,144274,144275,144277,144279,144281,144283,144285,144287,144289],{"class":323,"line":1401},[321,144276,52289],{"class":331},[321,144278,51756],{"class":51445},[321,144280,53631],{"class":2169},[321,144282,377],{"class":331},[321,144284,144111],{"class":436},[321,144286,144114],{"class":331},[321,144288,51756],{"class":51445},[321,144290,51452],{"class":331},[321,144292,144293],{"class":323,"line":1407},[321,144294,144123],{"class":390},[321,144296,144297,144299,144301,144303,144305,144307,144309,144311],{"class":323,"line":1421},[321,144298,52289],{"class":331},[321,144300,51756],{"class":51445},[321,144302,53631],{"class":2169},[321,144304,377],{"class":331},[321,144306,144136],{"class":436},[321,144308,144114],{"class":331},[321,144310,51756],{"class":51445},[321,144312,51452],{"class":331},[321,144314,144315],{"class":323,"line":1427},[321,144316,144147],{"class":390},[321,144318,144319,144321,144323,144325,144327,144329,144331,144333],{"class":323,"line":1518},[321,144320,52289],{"class":331},[321,144322,51756],{"class":51445},[321,144324,53631],{"class":2169},[321,144326,377],{"class":331},[321,144328,144160],{"class":436},[321,144330,144114],{"class":331},[321,144332,51756],{"class":51445},[321,144334,51452],{"class":331},[321,144336,144337],{"class":323,"line":1524},[321,144338,144171],{"class":390},[321,144340,144341,144343,144345,144347,144349,144351,144353,144355],{"class":323,"line":1536},[321,144342,52289],{"class":331},[321,144344,51756],{"class":51445},[321,144346,53631],{"class":2169},[321,144348,377],{"class":331},[321,144350,144184],{"class":436},[321,144352,144114],{"class":331},[321,144354,51756],{"class":51445},[321,144356,51452],{"class":331},[321,144358,144359,144361,144363],{"class":323,"line":1818},[321,144360,51930],{"class":331},[321,144362,51756],{"class":51445},[321,144364,51452],{"class":331},[19,144366,70598],{},[312,144368,144369],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,144370,144371,144375,144389,144393],{"__ignoreMap":30},[321,144372,144373],{"class":323,"line":324},[321,144374,130808],{"class":390},[321,144376,144377,144379,144381,144383,144385,144387],{"class":323,"line":167},[321,144378,1242],{"class":331},[321,144380,51756],{"class":51445},[321,144382,53631],{"class":2169},[321,144384,377],{"class":331},[321,144386,130821],{"class":436},[321,144388,51452],{"class":331},[321,144390,144391],{"class":323,"line":200},[321,144392,130828],{"class":331},[321,144394,144395,144397,144399],{"class":323,"line":1401},[321,144396,51930],{"class":331},[321,144398,51756],{"class":51445},[321,144400,51452],{"class":331},[5333,144402,138098],{},{"title":30,"searchDepth":167,"depth":167,"links":144404},[144405,144406,144410,144411,144412],{"id":143549,"depth":167,"text":143550},{"id":143581,"depth":167,"text":143582,"children":144407},[144408,144409],{"id":143585,"depth":200,"text":143586},{"id":143602,"depth":200,"text":143603},{"id":143621,"depth":167,"text":143622},{"id":143628,"depth":167,"text":143629},{"id":143715,"depth":167,"text":143716,"children":144413},[144414,144415,144416,144417,144418],{"id":143722,"depth":200,"text":143723},{"id":143850,"depth":200,"text":143851},{"id":143944,"depth":200,"text":143945},{"id":143993,"depth":200,"text":143994},{"id":144003,"depth":200,"text":144004},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143541,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144425,"title":144426,"body":144427,"description":23584,"extension":249,"meta":145654,"navigation":251,"path":145655,"seo":145656,"stem":145657,"__hash__":145658},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144428,"toc":145632},[144429,144432,144436,144440,144443,144446,144450,144455,144458,144461,144464,144467,144470,144527,144530,144535,144538,144541,144545,144556,144560,144563,144566,144573,144578,144582,144585,144591,144594,144598,144601,144608,144611,144614,144621,144624,144631,144634,144637,144644,144647,144650,144652,144669,144673,144676,144679,144682,144686,144689,144692,144695,144698,144701,144704,144706,144709,144712,144774,144777,144887,144894,144900,144903,144906,144910,144913,144917,144922,144925,144932,144935,144941,144946,144949,144952,144955,144958,144961,144964,144967,144970,145026,145028,145054,145058,145061,145064,145067,145075,145078,145081,145085,145141,145144,145148,145154,145165,145168,145173,145176,145179,145185,145188,145191,145194,145197,145200,145203,145206,145209,145234,145240,145243,145246,145249,145252,145255,145258,145263,145266,145269,145272,145280,145283,145290,145293,145296,145298,145322,145324,145327,145330,145333,145336,145339,145342,145345,145379,145382,145385,145419,145426,145429,145432,145435,145438,145441,145444,145451,145454,145457,145460,145463,145470,145473,145476,145483,145486,145489,145493,145496,145499,145502,145505,145508,145511,145514,145517,145519,145543,145545,145569,145573,145584,145587,145590,145593,145596,145599,145602,145605,145608,145611,145614,145617,145620,145623,145626,145629],[10,144430,144426],{"id":144431},"_21-移动端布局实战下篇",[14,144433,144435],{"id":144434},"_211-rem适配布局","21.1 rem适配布局",[292,144437,144439],{"id":144438},"_2111-rem单位","21.1.1 rem单位",[28,144441],{"style":126553,"src":144442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144444,144445],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[292,144447,144449],{"id":144448},"_2112-媒体查询","21.1.2 媒体查询",[151,144451,144452],{},[154,144453,144454],{},"参数介绍",[28,144456],{"style":126553,"src":144457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[28,144459],{"style":126553,"src":144460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[28,144462],{"style":126553,"src":144463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[28,144465],{"style":126553,"src":144466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[28,144468],{"style":126553,"src":144469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[312,144471,144473],{"className":126697,"code":144472,"language":126699,"meta":30,"style":30},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[318,144474,144475,144480,144499,144506,144519,144523],{"__ignoreMap":30},[321,144476,144477],{"class":323,"line":324},[321,144478,144479],{"class":390},"\u002F* 媒体查询 *\u002F\n",[321,144481,144482,144485,144487,144490,144492,144495,144497],{"class":323,"line":167},[321,144483,144484],{"class":327},"@media",[321,144486,1864],{"class":331},[321,144488,144489],{"class":380},"max-width",[321,144491,51582],{"class":331},[321,144493,144494],{"class":380},"768",[321,144496,51637],{"class":327},[321,144498,12649],{"class":331},[321,144500,144501,144504],{"class":323,"line":200},[321,144502,144503],{"class":2169},"  .container",[321,144505,15779],{"class":331},[321,144507,144508,144511,144513,144515,144517],{"class":323,"line":1401},[321,144509,144510],{"class":380},"    width",[321,144512,51582],{"class":331},[321,144514,643],{"class":380},[321,144516,660],{"class":327},[321,144518,1497],{"class":331},[321,144520,144521],{"class":323,"line":1407},[321,144522,127493],{"class":331},[321,144524,144525],{"class":323,"line":1421},[321,144526,1771],{"class":331},[19,144528,144529],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[151,144531,144532],{"start":167},[154,144533,144534],{},"引入资源",[28,144536],{"style":126553,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144539,144540],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[292,144542,144544],{"id":144543},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1339,144546,144547,144550,144553],{},[154,144548,144549],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[154,144551,144552],{},"媒体查询可以根据不同设备宽度来修改样式",[154,144554,144555],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144557,144559],{"id":144558},"_212-less基础","21.2 Less基础",[19,144561,144562],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144564,144565],{},"Less可以解决该问题，它是css的扩展语言",[19,144567,144568,144569],{},"Less中文网址： ",[570,144570,144571],{"href":144571,"rel":144572},"http:\u002F\u002Flesscss.cn\u002F",[24073],[19,144574,144575],{},[481,144576,144577],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[292,144579,144581],{"id":144580},"_2121-less安装","21.2.1 less安装",[19,144583,144584],{},"如果使用vscode，则无需进行下方安装步骤",[19,144586,144587],{},[570,144588,144589],{"href":144589,"rel":144590},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24073],[28,144592],{"style":126553,"src":144593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[292,144595,144597],{"id":144596},"_2122-less使用","21.2.2 less使用",[19,144599,144600],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[151,144602,144603],{},[154,144604,144605],{},[481,144606,144607],{},"Less 变量",[28,144609],{"style":126553,"src":144610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[28,144612],{"style":126553,"src":144613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[151,144615,144616],{"start":167},[154,144617,144618],{},[481,144619,144620],{},"Less 编译",[28,144622],{"style":126553,"src":144623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[151,144625,144626],{"start":200},[154,144627,144628],{},[481,144629,144630],{},"Less 嵌套",[28,144632],{"style":126553,"src":144633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[28,144635],{"style":126553,"src":144636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[151,144638,144639],{"start":1401},[154,144640,144641],{},[481,144642,144643],{},"Less 运算",[28,144645],{"style":126553,"src":144646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144648,144649],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144651,361],{},[1339,144653,144654,144657,144660,144663,144666],{},[154,144655,144656],{},"乘号（*）和除号（\u002F）的写法",[154,144658,144659],{},"运算符中间左右有个空格隔开 1px + 5",[154,144661,144662],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[154,144664,144665],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[154,144667,144668],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144670,144672],{"id":144671},"_213-rem-适配方案","21.3 rem 适配方案",[19,144674,144675],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144677,144678],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[28,144680],{"style":126553,"src":144681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[292,144683,144685],{"id":144684},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144687,144688],{},"rem + 媒体查询 + less 技术",[28,144690],{"style":126553,"src":144691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144693,144694],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144696,144697],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[28,144699],{"style":126553,"src":144700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144702,144703],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144705,14840],{},[28,144707],{"style":126553,"src":144708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144710,144711],{},"index.html:",[312,144713,144715],{"className":126697,"code":144714,"language":126699,"meta":30,"style":30},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[318,144716,144717,144722,144728,144744,144748,144754,144770],{"__ignoreMap":30},[321,144718,144719],{"class":323,"line":324},[321,144720,144721],{"class":390},"\u002F* rem 适配方案 *\u002F\n",[321,144723,144724,144726],{"class":323,"line":167},[321,144725,50780],{"class":51445},[321,144727,15779],{"class":331},[321,144729,144730,144732,144734,144737,144739,144741],{"class":323,"line":200},[321,144731,70771],{"class":380},[321,144733,51582],{"class":331},[321,144735,144736],{"class":380},"62.5",[321,144738,660],{"class":327},[321,144740,130560],{"class":331},[321,144742,144743],{"class":390},"\u002F* 1rem = 10px *\u002F\n",[321,144745,144746],{"class":323,"line":1401},[321,144747,1771],{"class":331},[321,144749,144750,144752],{"class":323,"line":1407},[321,144751,130545],{"class":2169},[321,144753,15779],{"class":331},[321,144755,144756,144758,144760,144762,144765,144767],{"class":323,"line":1421},[321,144757,70713],{"class":380},[321,144759,51582],{"class":331},[321,144761,778],{"class":380},[321,144763,144764],{"class":327},"rem",[321,144766,130560],{"class":331},[321,144768,144769],{"class":390},"\u002F* 100px *\u002F\n",[321,144771,144772],{"class":323,"line":1427},[321,144773,1771],{"class":331},[19,144775,144776],{},"common.less",[312,144778,144780],{"className":126697,"code":144779,"language":126699,"meta":30,"style":30},"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",[318,144781,144782,144788,144803,144807,144813,144827,144831,144835,144839,144845,144859,144863,144869,144883],{"__ignoreMap":30},[321,144783,144784,144786],{"class":323,"line":324},[321,144785,50780],{"class":51445},[321,144787,15779],{"class":331},[321,144789,144790,144792,144794,144796,144798,144800],{"class":323,"line":167},[321,144791,70771],{"class":380},[321,144793,51582],{"class":331},[321,144795,144736],{"class":380},[321,144797,660],{"class":327},[321,144799,26212],{"class":331},[321,144801,144802],{"class":390},"\u002F* 10px *\u002F\n",[321,144804,144805],{"class":323,"line":200},[321,144806,1771],{"class":331},[321,144808,144809,144811],{"class":323,"line":1401},[321,144810,51756],{"class":51445},[321,144812,15779],{"class":331},[321,144814,144815,144817,144819,144821,144823,144825],{"class":323,"line":1407},[321,144816,70713],{"class":380},[321,144818,51582],{"class":331},[321,144820,778],{"class":380},[321,144822,144764],{"class":327},[321,144824,26212],{"class":331},[321,144826,144769],{"class":390},[321,144828,144829],{"class":323,"line":1421},[321,144830,1771],{"class":331},[321,144832,144833],{"class":323,"line":1427},[321,144834,136158],{"class":331},[321,144836,144837],{"class":323,"line":1518},[321,144838,144721],{"class":390},[321,144840,144841,144843],{"class":323,"line":1524},[321,144842,50780],{"class":51445},[321,144844,15779],{"class":331},[321,144846,144847,144849,144851,144853,144855,144857],{"class":323,"line":1536},[321,144848,70771],{"class":380},[321,144850,51582],{"class":331},[321,144852,144736],{"class":380},[321,144854,660],{"class":327},[321,144856,130560],{"class":331},[321,144858,144743],{"class":390},[321,144860,144861],{"class":323,"line":1818},[321,144862,1771],{"class":331},[321,144864,144865,144867],{"class":323,"line":1823},[321,144866,130545],{"class":2169},[321,144868,15779],{"class":331},[321,144870,144871,144873,144875,144877,144879,144881],{"class":323,"line":1829},[321,144872,70713],{"class":380},[321,144874,51582],{"class":331},[321,144876,778],{"class":380},[321,144878,144764],{"class":327},[321,144880,130560],{"class":331},[321,144882,144769],{"class":390},[321,144884,144885],{"class":323,"line":1834},[321,144886,1771],{"class":331},[19,144888,144889,144890,144893],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23761,144891,144892],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[312,144895,144898],{"className":144896,"code":144897,"language":5394},[5392],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[318,144899,144897],{"__ignoreMap":30},[19,144901,144902],{},"less保存时会自动变成.css文件",[19,144904,144905],{},"好好搞懂上述代码写法",[292,144907,144909],{"id":144908},"_2132-样式导入样式","21.3.2 样式导入样式",[28,144911],{"style":126553,"src":144912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[292,144914,144916],{"id":144915},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[151,144918,144919],{},[154,144920,144921],{},"准备工作",[28,144923],{"style":126553,"src":144924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144926,144927,144928],{},"github地址：",[570,144929,144930],{"href":144930,"rel":144931},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24073],[19,144933,144934],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144936,144937,144938],{},"js文件引入到index.html中使用的是",[318,144939,144940],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[151,144942,144943],{"start":167},[154,144944,144945],{},"vscode插件",[28,144947],{"style":126553,"src":144948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144950,144951],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144953,144954],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[28,144956],{"style":126553,"src":144957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144959,144960],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[28,144962],{"style":126553,"src":144963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144965,144966],{},"修改成75就可以，alt+z为快捷键",[19,144968,144969],{},"index.css：",[312,144971,144972],{"className":126697,"code":144714,"language":126699,"meta":30,"style":30},[318,144973,144974,144978,144984,144998,145002,145008,145022],{"__ignoreMap":30},[321,144975,144976],{"class":323,"line":324},[321,144977,144721],{"class":390},[321,144979,144980,144982],{"class":323,"line":167},[321,144981,50780],{"class":51445},[321,144983,15779],{"class":331},[321,144985,144986,144988,144990,144992,144994,144996],{"class":323,"line":200},[321,144987,70771],{"class":380},[321,144989,51582],{"class":331},[321,144991,144736],{"class":380},[321,144993,660],{"class":327},[321,144995,130560],{"class":331},[321,144997,144743],{"class":390},[321,144999,145000],{"class":323,"line":1401},[321,145001,1771],{"class":331},[321,145003,145004,145006],{"class":323,"line":1407},[321,145005,130545],{"class":2169},[321,145007,15779],{"class":331},[321,145009,145010,145012,145014,145016,145018,145020],{"class":323,"line":1421},[321,145011,70713],{"class":380},[321,145013,51582],{"class":331},[321,145015,778],{"class":380},[321,145017,144764],{"class":327},[321,145019,130560],{"class":331},[321,145021,144769],{"class":390},[321,145023,145024],{"class":323,"line":1427},[321,145025,1771],{"class":331},[19,145027,144711],{},[312,145029,145030],{"className":126697,"code":127101,"language":126699,"meta":30,"style":30},[318,145031,145032,145038,145050],{"__ignoreMap":30},[321,145033,145034,145036],{"class":323,"line":324},[321,145035,51945],{"class":51445},[321,145037,15779],{"class":331},[321,145039,145040,145042,145044,145046,145048],{"class":323,"line":167},[321,145041,70771],{"class":380},[321,145043,51582],{"class":331},[321,145045,933],{"class":380},[321,145047,51637],{"class":327},[321,145049,1497],{"class":331},[321,145051,145052],{"class":323,"line":200},[321,145053,1771],{"class":331},[14,145055,145057],{"id":145056},"_214-响应式开发","21.4 响应式开发",[19,145059,145060],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[28,145062],{"style":126553,"src":145063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145065,145066],{},"做法：",[1339,145068,145069,145072],{},[154,145070,145071],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[154,145073,145074],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[28,145076],{"style":126553,"src":145077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145079,145080],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[292,145082,145084],{"id":145083},"_2141-简单代码示范","21.4.1 简单代码示范",[312,145086,145087],{"className":126697,"code":144714,"language":126699,"meta":30,"style":30},[318,145088,145089,145093,145099,145113,145117,145123,145137],{"__ignoreMap":30},[321,145090,145091],{"class":323,"line":324},[321,145092,144721],{"class":390},[321,145094,145095,145097],{"class":323,"line":167},[321,145096,50780],{"class":51445},[321,145098,15779],{"class":331},[321,145100,145101,145103,145105,145107,145109,145111],{"class":323,"line":200},[321,145102,70771],{"class":380},[321,145104,51582],{"class":331},[321,145106,144736],{"class":380},[321,145108,660],{"class":327},[321,145110,130560],{"class":331},[321,145112,144743],{"class":390},[321,145114,145115],{"class":323,"line":1401},[321,145116,1771],{"class":331},[321,145118,145119,145121],{"class":323,"line":1407},[321,145120,130545],{"class":2169},[321,145122,15779],{"class":331},[321,145124,145125,145127,145129,145131,145133,145135],{"class":323,"line":1421},[321,145126,70713],{"class":380},[321,145128,51582],{"class":331},[321,145130,778],{"class":380},[321,145132,144764],{"class":327},[321,145134,130560],{"class":331},[321,145136,144769],{"class":390},[321,145138,145139],{"class":323,"line":1427},[321,145140,1771],{"class":331},[19,145142,145143],{},"父盒子一般命名为container",[292,145145,145147],{"id":145146},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145149,145150,145151],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[481,145152,145153],{},"使得 Web 开发更加快捷",[1339,145155,145156],{},[154,145157,145158,145159],{},"官网：",[481,145160,145161],{},[570,145162,145163],{"href":145163,"rel":145164},"http:\u002F\u002Fgetbootstrap.com\u002F",[24073],[19,145166,145167],{},"可以直接去官网拿现成的东西",[151,145169,145170],{},[154,145171,145172],{},"Bootstrap的使用",[19,145174,145175],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145177,145178],{},"Bootstrap 使用四步曲：",[19,145180,145181,145184],{},[481,145182,145183],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[28,145186],{"style":126553,"src":145187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145189,145190],{},"打开Bootstrap官网，然后下载",[28,145192],{"style":126553,"src":145193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[28,145195],{"style":126553,"src":145196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145198,145199],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145201,145202],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145204,145205],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[28,145207],{"style":126553,"src":145208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[312,145210,145212],{"className":126697,"code":145211,"language":126699,"meta":30,"style":30},".center {\n  color: red;\n}\n",[318,145213,145214,145220,145230],{"__ignoreMap":30},[321,145215,145216,145218],{"class":323,"line":324},[321,145217,126988],{"class":2169},[321,145219,15779],{"class":331},[321,145221,145222,145224,145226,145228],{"class":323,"line":167},[321,145223,71050],{"class":380},[321,145225,51582],{"class":331},[321,145227,57566],{"class":380},[321,145229,1497],{"class":331},[321,145231,145232],{"class":323,"line":200},[321,145233,1771],{"class":331},[19,145235,145236,145239],{},[318,145237,145238],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[28,145241],{"style":126553,"src":145242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[28,145244],{"style":126553,"src":145245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[28,145247],{"style":126553,"src":145248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145250,145251],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[28,145253],{"style":126553,"src":145254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145256,145257],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[151,145259,145260],{"start":167},[154,145261,145262],{},"布局容器",[28,145264],{"style":126553,"src":145265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145267,145268],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145270,145271],{},"container-fluid用于移动式布局比较方便",[151,145273,145274],{"start":200},[154,145275,145276,145277],{},"bootstrap ",[481,145278,145279],{},"栅格系统原理",[28,145281],{"style":126553,"src":145282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[151,145284,145285],{"start":1401},[154,145286,145287],{},[481,145288,145289],{},"栅格选项参数",[28,145291],{"style":126553,"src":145292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145294,145295],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145297,14840],{},[312,145299,145300],{"className":126697,"code":145211,"language":126699,"meta":30,"style":30},[318,145301,145302,145308,145318],{"__ignoreMap":30},[321,145303,145304,145306],{"class":323,"line":324},[321,145305,126988],{"class":2169},[321,145307,15779],{"class":331},[321,145309,145310,145312,145314,145316],{"class":323,"line":167},[321,145311,71050],{"class":380},[321,145313,51582],{"class":331},[321,145315,57566],{"class":380},[321,145317,1497],{"class":331},[321,145319,145320],{"class":323,"line":200},[321,145321,1771],{"class":331},[19,145323,135740],{},[28,145325],{"style":126553,"src":145326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145328,145329],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145331,145332],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145334,145335],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145337,145338],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145340,145341],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145343,145344],{},"汇总展示说明：",[312,145346,145347],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,145348,145349,145353,145367,145371],{"__ignoreMap":30},[321,145350,145351],{"class":323,"line":324},[321,145352,130808],{"class":390},[321,145354,145355,145357,145359,145361,145363,145365],{"class":323,"line":167},[321,145356,1242],{"class":331},[321,145358,51756],{"class":51445},[321,145360,53631],{"class":2169},[321,145362,377],{"class":331},[321,145364,130821],{"class":436},[321,145366,51452],{"class":331},[321,145368,145369],{"class":323,"line":200},[321,145370,130828],{"class":331},[321,145372,145373,145375,145377],{"class":323,"line":1401},[321,145374,51930],{"class":331},[321,145376,51756],{"class":51445},[321,145378,51452],{"class":331},[28,145380],{"style":126553,"src":145381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145383,145384],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[312,145386,145387],{"className":127444,"code":130801,"language":127446,"meta":30,"style":30},[318,145388,145389,145393,145407,145411],{"__ignoreMap":30},[321,145390,145391],{"class":323,"line":324},[321,145392,130808],{"class":390},[321,145394,145395,145397,145399,145401,145403,145405],{"class":323,"line":167},[321,145396,1242],{"class":331},[321,145398,51756],{"class":51445},[321,145400,53631],{"class":2169},[321,145402,377],{"class":331},[321,145404,130821],{"class":436},[321,145406,51452],{"class":331},[321,145408,145409],{"class":323,"line":200},[321,145410,130828],{"class":331},[321,145412,145413,145415,145417],{"class":323,"line":1401},[321,145414,51930],{"class":331},[321,145416,51756],{"class":51445},[321,145418,51452],{"class":331},[151,145420,145421],{"start":1407},[154,145422,145423],{},[481,145424,145425],{},"列嵌套",[28,145427],{"style":126553,"src":145428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145430,145431],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145433,145434],{},"没加row内部这样：",[28,145436],{"style":126553,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145439,145440],{},"加上row之后内部为：",[28,145442],{"style":126553,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[151,145445,145446],{"start":1421},[154,145447,145448],{},[481,145449,145450],{},"列偏移",[28,145452],{"style":126553,"src":145453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145455,145456],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145458,145459],{},"要加偏移量，即偏移份数",[19,145461,145462],{},"偏移的份数=12-两个盒子的份数",[151,145464,145465],{"start":1427},[154,145466,145467],{},[481,145468,145469],{},"列排序",[28,145471],{"style":126553,"src":145472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145474,145475],{},"pull拉左；push推右",[151,145477,145478],{"start":1518},[154,145479,145480],{},[481,145481,145482],{},"响应式工具",[28,145484],{"style":126553,"src":145485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145487,145488],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[292,145490,145492],{"id":145491},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145494,145495],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145497,145498],{},"ul {",[19,145500,145501],{},"list-style: none;",[19,145503,145504],{},"margin:0;",[19,145506,145507],{},"padding:0; }",[28,145509],{"style":126553,"src":145510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[28,145512],{"style":126553,"src":145513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145515,145516],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145518,69034],{},[312,145520,145521],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,145522,145523,145529,145539],{"__ignoreMap":30},[321,145524,145525,145527],{"class":323,"line":324},[321,145526,130545],{"class":2169},[321,145528,15779],{"class":331},[321,145530,145531,145533,145535,145537],{"class":323,"line":167},[321,145532,131177],{"class":380},[321,145534,51582],{"class":331},[321,145536,23944],{"class":380},[321,145538,1497],{"class":331},[321,145540,145541],{"class":323,"line":200},[321,145542,1771],{"class":331},[19,145544,70598],{},[312,145546,145547],{"className":126697,"code":139367,"language":126699,"meta":30,"style":30},[318,145548,145549,145555,145565],{"__ignoreMap":30},[321,145550,145551,145553],{"class":323,"line":324},[321,145552,130545],{"class":2169},[321,145554,15779],{"class":331},[321,145556,145557,145559,145561,145563],{"class":323,"line":167},[321,145558,131177],{"class":380},[321,145560,51582],{"class":331},[321,145562,23944],{"class":380},[321,145564,1497],{"class":331},[321,145566,145567],{"class":323,"line":200},[321,145568,1771],{"class":331},[14,145570,145572],{"id":145571},"_215-swiper-插件使用","21.5 swiper 插件使用",[1339,145574,145575,145578,145581],{},[154,145576,145577],{},"下载需要的css和js文件html页面中 引入相关文件",[154,145579,145580],{},"官网找到类似案例，复制html结构，css样式 js 语法",[154,145582,145583],{},"根据需求定制修改模块",[28,145585],{"style":126553,"src":145586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145588,145589],{},"解压后将这两部分放到项目中",[28,145591],{"style":126553,"src":145592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145594,145595],{},"这个插件可以帮助我们实现轮播图效果",[19,145597,145598],{},"用法：",[28,145600],{"style":126553,"src":145601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145603,145604],{},"找到自己喜欢的",[28,145606],{"style":126553,"src":145607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145609,145610],{},"右键，查看网页源代码",[28,145612],{"style":126553,"src":145613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145615,145616],{},"复制人家的结构内容",[19,145618,145619],{},"然后去看API文档：",[28,145621],{"style":126553,"src":145622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145624,145625],{},"可以看看如何修改样式",[19,145627,145628],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5333,145630,145631],{},"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":30,"searchDepth":167,"depth":167,"links":145633},[145634,145639,145643,145648,145653],{"id":144434,"depth":167,"text":144435,"children":145635},[145636,145637,145638],{"id":144438,"depth":200,"text":144439},{"id":144448,"depth":200,"text":144449},{"id":144543,"depth":200,"text":144544},{"id":144558,"depth":167,"text":144559,"children":145640},[145641,145642],{"id":144580,"depth":200,"text":144581},{"id":144596,"depth":200,"text":144597},{"id":144671,"depth":167,"text":144672,"children":145644},[145645,145646,145647],{"id":144684,"depth":200,"text":144685},{"id":144908,"depth":200,"text":144909},{"id":144915,"depth":200,"text":144916},{"id":145056,"depth":167,"text":145057,"children":145649},[145650,145651,145652],{"id":145083,"depth":200,"text":145084},{"id":145146,"depth":200,"text":145147},{"id":145491,"depth":200,"text":145492},{"id":145571,"depth":167,"text":145572},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144426,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145660,"title":145661,"body":145662,"description":23584,"extension":249,"meta":145882,"navigation":251,"path":145883,"seo":145884,"stem":145885,"__hash__":145886},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145663,"toc":145878},[145664,145667,145671,145674,145689,145694,145697,145702,145737,145742,145754,145759,145772,145777,145794,145799,145819,145824,145842,145845,145848,145851,145854,145858,145861,145864,145867,145870,145873,145876],[10,145665,145661],{"id":145666},"_22-代码提交与新型相对单位",[14,145668,145670],{"id":145669},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145672,145673],{},"法1：",[151,145675,145676,145683,145686],{},[154,145677,145678,145679],{},"登录网站注册：",[570,145680,145681],{"href":145681,"rel":145682},"https:\u002F\u002Fgitee.com\u002F",[24073],[154,145684,145685],{},"码云创建新的仓库",[154,145687,145688],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1339,145690,145691],{},[154,145692,145693],{},"在网站根目录右键-- Git Bash Here",[28,145695],{"style":126553,"src":145696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1339,145698,145699],{},[154,145700,145701],{},"如果是第一次利用git提交，请配置好全局选项",[312,145703,145705],{"className":117441,"code":145704,"language":117443,"meta":30,"style":30},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[318,145706,145707,145723],{"__ignoreMap":30},[321,145708,145709,145712,145714,145717,145720],{"class":323,"line":324},[321,145710,145711],{"class":2169},"git",[321,145713,119864],{"class":436},[321,145715,145716],{"class":380}," --global",[321,145718,145719],{"class":436}," user.name",[321,145721,145722],{"class":436}," \"你的名字\"\n",[321,145724,145725,145727,145729,145731,145734],{"class":323,"line":167},[321,145726,145711],{"class":2169},[321,145728,119864],{"class":436},[321,145730,145716],{"class":380},[321,145732,145733],{"class":436}," user.email",[321,145735,145736],{"class":436}," \"你的邮箱\"\n",[1339,145738,145739],{},[154,145740,145741],{},"初始化仓库",[312,145743,145745],{"className":117441,"code":145744,"language":117443,"meta":30,"style":30},"git init\n",[318,145746,145747],{"__ignoreMap":30},[321,145748,145749,145751],{"class":323,"line":324},[321,145750,145711],{"class":2169},[321,145752,145753],{"class":436}," init\n",[1339,145755,145756],{},[154,145757,145758],{},"把本地文件放到暂存区",[312,145760,145762],{"className":117441,"code":145761,"language":117443,"meta":30,"style":30},"git add .\n",[318,145763,145764],{"__ignoreMap":30},[321,145765,145766,145768,145770],{"class":323,"line":324},[321,145767,145711],{"class":2169},[321,145769,5416],{"class":436},[321,145771,28886],{"class":436},[1339,145773,145774],{},[154,145775,145776],{},"把本地文件放到本地仓库里面",[312,145778,145780],{"className":117441,"code":145779,"language":117443,"meta":30,"style":30},"git commit -m \"first commit\"\n",[318,145781,145782],{"__ignoreMap":30},[321,145783,145784,145786,145789,145791],{"class":323,"line":324},[321,145785,145711],{"class":2169},[321,145787,145788],{"class":436}," commit",[321,145790,101027],{"class":380},[321,145792,145793],{"class":436}," \"first commit\"\n",[1339,145795,145796],{},[154,145797,145798],{},"链接远程仓库",[312,145800,145802],{"className":117441,"code":145801,"language":117443,"meta":30,"style":30},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[318,145803,145804],{"__ignoreMap":30},[321,145805,145806,145808,145811,145813,145816],{"class":323,"line":324},[321,145807,145711],{"class":2169},[321,145809,145810],{"class":436}," remote",[321,145812,5416],{"class":436},[321,145814,145815],{"class":436}," origin",[321,145817,145818],{"class":436}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1339,145820,145821],{},[154,145822,145823],{},"把本地仓库的文件推送到远程仓库 push",[312,145825,145827],{"className":117441,"code":145826,"language":117443,"meta":30,"style":30},"git push -u origin master\n",[318,145828,145829],{"__ignoreMap":30},[321,145830,145831,145833,145835,145837,145839],{"class":323,"line":324},[321,145832,145711],{"class":2169},[321,145834,29161],{"class":436},[321,145836,28435],{"class":380},[321,145838,145815],{"class":436},[321,145840,145841],{"class":436}," master\n",[28,145843],{"style":126553,"src":145844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145846,145847],{},"上方方法暂未实现，后边学完git后在整",[19,145849,145850],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[28,145852],{"style":126553,"src":145853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145855,145857],{"id":145856},"_222-新型相对单位","22.2 新型相对单位",[28,145859],{"style":126553,"src":145860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[28,145862],{"style":126553,"src":145863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145865,145866],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145868,145869],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[28,145871],{"style":126553,"src":145872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145874,145875],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5333,145877,24166],{},{"title":30,"searchDepth":167,"depth":167,"links":145879},[145880,145881],{"id":145669,"depth":167,"text":145670},{"id":145856,"depth":167,"text":145857},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145661,"description":23584},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145888,"title":145889,"body":145890,"description":145894,"extension":249,"meta":145895,"navigation":251,"path":145896,"seo":145897,"stem":145898,"__hash__":145899},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145891,"toc":145892},[],{"title":30,"searchDepth":167,"depth":167,"links":145893},[],"自己正经开始学编程的第一门语言！",{"category":92984},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145889,"description":145894},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145901,"title":145902,"body":145903,"description":23584,"extension":249,"meta":147050,"navigation":251,"path":147051,"seo":147052,"stem":147053,"__hash__":147054},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145904,"toc":147026},[145905,145908,145912,145915,145918,145943,145946,145952,145956,145959,145986,145989,146029,146032,146044,146047,146053,146057,146061,146088,146105,146112,146116,146119,146145,146148,146152,146155,146195,146198,146215,146221,146225,146230,146274,146277,146295,146298,146366,146370,146377,146380,146395,146398,146407,146410,146421,146424,146433,146436,146453,146456,146471,146475,146479,146482,146484,146504,146508,146511,146514,146525,146528,146534,146538,146544,146571,146574,146586,146589,146600,146603,146609,146613,146619,146669,146672,146714,146717,146750,146753,146787,146791,146794,146814,146817,146853,146856,146869,146873,146877,146883,146886,146899,146903,146906,146912,146915,146919,146922,146925,146974,146978,146994,147000,147007,147013,147023],[10,145906,145902],{"id":145907},"_1-python环境与第一个程序",[14,145909,145911],{"id":145910},"_11-什么是python","1.1 什么是Python",[19,145913,145914],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145916,145917],{},"理解 Python 时抓住三个关键词：",[151,145919,145920,145923,145926],{},[154,145921,145922],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[154,145924,145925],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[154,145927,145928,145929,544,145932,544,145935,544,145938,544,145940,28530],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[318,145930,145931],{},"os",[318,145933,145934],{},"sys",[318,145936,145937],{},"json",[318,145939,58005],{},[318,145941,145942],{},"datetime",[19,145944,145945],{},"Python 程序的运行链路：",[312,145947,145950],{"className":145948,"code":145949,"language":5394,"meta":30},[5392],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[318,145951,145949],{"__ignoreMap":30},[14,145953,145955],{"id":145954},"_12-python解释器","1.2 Python解释器",[19,145957,145958],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[312,145960,145962],{"className":24030,"code":145961,"language":24032,"meta":30,"style":30},"python --version\npython3 --version\npython\npython3\n",[318,145963,145964,145970,145976,145981],{"__ignoreMap":30},[321,145965,145966,145968],{"class":323,"line":324},[321,145967,30525],{"class":2169},[321,145969,26438],{"class":380},[321,145971,145972,145974],{"class":323,"line":167},[321,145973,101024],{"class":2169},[321,145975,26438],{"class":380},[321,145977,145978],{"class":323,"line":200},[321,145979,145980],{"class":2169},"python\n",[321,145982,145983],{"class":323,"line":1401},[321,145984,145985],{"class":2169},"python3\n",[19,145987,145988],{},"进入交互模式后，可以直接输入表达式：",[312,145990,145992],{"className":30523,"code":145991,"language":30525,"meta":30,"style":30},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[318,145993,145994,146005,146010,146024],{"__ignoreMap":30},[321,145995,145996,145999,146001,146003],{"class":323,"line":324},[321,145997,145998],{"class":327},">>>",[321,146000,25263],{"class":380},[321,146002,45711],{"class":327},[321,146004,47868],{"class":380},[321,146006,146007],{"class":323,"line":167},[321,146008,146009],{"class":380},"3\n",[321,146011,146012,146014,146017,146019,146022],{"class":323,"line":200},[321,146013,145998],{"class":327},[321,146015,146016],{"class":380}," print",[321,146018,332],{"class":331},[321,146020,146021],{"class":436},"\"hello python\"",[321,146023,338],{"class":331},[321,146025,146026],{"class":323,"line":1401},[321,146027,146028],{"class":331},"hello python\n",[19,146030,146031],{},"退出交互模式：",[312,146033,146035],{"className":30523,"code":146034,"language":30525,"meta":30,"style":30},"exit()\n",[318,146036,146037],{"__ignoreMap":30},[321,146038,146039,146042],{"class":323,"line":324},[321,146040,146041],{"class":380},"exit",[321,146043,2182],{"class":331},[19,146045,146046],{},"或使用快捷键：",[312,146048,146051],{"className":146049,"code":146050,"language":5394,"meta":30},[5392],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[318,146052,146050],{"__ignoreMap":30},[14,146054,146056],{"id":146055},"_13-安装python","1.3 安装Python",[292,146058,146060],{"id":146059},"_131-windows安装","1.3.1 Windows安装",[151,146062,146063,146070,146073,146079,146085],{},[154,146064,146065,146066],{},"打开 Python 官网：",[570,146067,146068],{"href":146068,"rel":146069},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24073],[154,146071,146072],{},"下载 Windows Installer。",[154,146074,146075,146076,28530],{},"安装时勾选 ",[318,146077,146078],{},"Add Python to PATH",[154,146080,146081,146082,28530],{},"点击 ",[318,146083,146084],{},"Install Now",[154,146086,146087],{},"安装完成后打开命令提示符验证：",[312,146089,146091],{"className":24030,"code":146090,"language":24032,"meta":30,"style":30},"python --version\npip --version\n",[318,146092,146093,146099],{"__ignoreMap":30},[321,146094,146095,146097],{"class":323,"line":324},[321,146096,30525],{"class":2169},[321,146098,26438],{"class":380},[321,146100,146101,146103],{"class":323,"line":167},[321,146102,24039],{"class":2169},[321,146104,26438],{"class":380},[19,146106,146107,146108,146111],{},"如果提示 ",[318,146109,146110],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[292,146113,146115],{"id":146114},"_132-macos安装","1.3.2 macOS安装",[19,146117,146118],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[312,146120,146122],{"className":24030,"code":146121,"language":24032,"meta":30,"style":30},"brew install python\npython3 --version\npip3 --version\n",[318,146123,146124,146133,146139],{"__ignoreMap":30},[321,146125,146126,146129,146131],{"class":323,"line":324},[321,146127,146128],{"class":2169},"brew",[321,146130,24042],{"class":436},[321,146132,124463],{"class":436},[321,146134,146135,146137],{"class":323,"line":167},[321,146136,101024],{"class":2169},[321,146138,26438],{"class":380},[321,146140,146141,146143],{"class":323,"line":200},[321,146142,119845],{"class":2169},[321,146144,26438],{"class":380},[19,146146,146147],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[292,146149,146151],{"id":146150},"_133-linux安装","1.3.3 Linux安装",[19,146153,146154],{},"Ubuntu\u002FDebian：",[312,146156,146158],{"className":24030,"code":146157,"language":24032,"meta":30,"style":30},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[318,146159,146160,146168,146183,146189],{"__ignoreMap":30},[321,146161,146162,146164,146166],{"class":323,"line":324},[321,146163,24721],{"class":2169},[321,146165,117462],{"class":436},[321,146167,26387],{"class":436},[321,146169,146170,146172,146174,146176,146178,146180],{"class":323,"line":167},[321,146171,24721],{"class":2169},[321,146173,117462],{"class":436},[321,146175,24042],{"class":436},[321,146177,104548],{"class":436},[321,146179,100943],{"class":436},[321,146181,146182],{"class":436}," python3-venv\n",[321,146184,146185,146187],{"class":323,"line":200},[321,146186,101024],{"class":2169},[321,146188,26438],{"class":380},[321,146190,146191,146193],{"class":323,"line":1401},[321,146192,119845],{"class":2169},[321,146194,26438],{"class":380},[19,146196,146197],{},"Fedora：",[312,146199,146201],{"className":24030,"code":146200,"language":24032,"meta":30,"style":30},"sudo dnf install python3 python3-pip\n",[318,146202,146203],{"__ignoreMap":30},[321,146204,146205,146207,146209,146211,146213],{"class":323,"line":324},[321,146206,24721],{"class":2169},[321,146208,26460],{"class":436},[321,146210,24042],{"class":436},[321,146212,104548],{"class":436},[321,146214,119910],{"class":436},[19,146216,146217,146218,146220],{},"Linux 上通常使用 ",[318,146219,101024],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146222,146224],{"id":146223},"_14-pip包管理器","1.4 pip包管理器",[19,146226,146227,146229],{},[318,146228,24039],{}," 用来安装第三方库。",[312,146231,146233],{"className":24030,"code":146232,"language":24032,"meta":30,"style":30},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[318,146234,146235,146244,146253,146261,146267],{"__ignoreMap":30},[321,146236,146237,146239,146241],{"class":323,"line":324},[321,146238,24039],{"class":2169},[321,146240,24042],{"class":436},[321,146242,146243],{"class":436}," requests\n",[321,146245,146246,146248,146251],{"class":323,"line":167},[321,146247,24039],{"class":2169},[321,146249,146250],{"class":436}," uninstall",[321,146252,146243],{"class":436},[321,146254,146255,146257,146259],{"class":323,"line":200},[321,146256,24039],{"class":2169},[321,146258,117719],{"class":436},[321,146260,146243],{"class":436},[321,146262,146263,146265],{"class":323,"line":1401},[321,146264,24039],{"class":2169},[321,146266,119100],{"class":436},[321,146268,146269,146271],{"class":323,"line":1407},[321,146270,24039],{"class":2169},[321,146272,146273],{"class":436}," freeze\n",[19,146275,146276],{},"国内网络较慢时可以临时使用镜像：",[312,146278,146280],{"className":24030,"code":146279,"language":24032,"meta":30,"style":30},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[318,146281,146282],{"__ignoreMap":30},[321,146283,146284,146286,146288,146291,146293],{"class":323,"line":324},[321,146285,24039],{"class":2169},[321,146287,24042],{"class":436},[321,146289,146290],{"class":436}," requests",[321,146292,26575],{"class":380},[321,146294,119873],{"class":436},[19,146296,146297],{},"常见第三方库：",[469,146299,146300,146309],{},[472,146301,146302],{},[475,146303,146304,146307],{},[478,146305,146306],{},"库",[478,146308,102841],{},[516,146310,146311,146319,146326,146334,146342,146350,146358],{},[475,146312,146313,146316],{},[521,146314,146315],{},"requests",[521,146317,146318],{},"网络请求",[475,146320,146321,146323],{},[521,146322,100771],{},[521,146324,146325],{},"数值计算",[475,146327,146328,146331],{},[521,146329,146330],{},"pandas",[521,146332,146333],{},"表格数据处理",[475,146335,146336,146339],{},[521,146337,146338],{},"matplotlib",[521,146340,146341],{},"绘图",[475,146343,146344,146347],{},[521,146345,146346],{},"pyecharts",[521,146348,146349],{},"ECharts 图表",[475,146351,146352,146355],{},[521,146353,146354],{},"flask",[521,146356,146357],{},"Web 后端",[475,146359,146360,146363],{},[521,146361,146362],{},"pytest",[521,146364,146365],{},"自动化测试",[14,146367,146369],{"id":146368},"_15-虚拟环境","1.5 虚拟环境",[19,146371,146372,146373,146376],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[318,146374,146375],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146378,146379],{},"创建虚拟环境：",[312,146381,146383],{"className":24030,"code":146382,"language":24032,"meta":30,"style":30},"python -m venv .venv\n",[318,146384,146385],{"__ignoreMap":30},[321,146386,146387,146389,146391,146393],{"class":323,"line":324},[321,146388,30525],{"class":2169},[321,146390,101027],{"class":380},[321,146392,101030],{"class":436},[321,146394,101033],{"class":436},[19,146396,146397],{},"Windows 激活：",[312,146399,146401],{"className":24030,"code":146400,"language":24032,"meta":30,"style":30},".venv\\Scripts\\activate\n",[318,146402,146403],{"__ignoreMap":30},[321,146404,146405],{"class":323,"line":324},[321,146406,146400],{"class":2169},[19,146408,146409],{},"macOS\u002FLinux 激活：",[312,146411,146413],{"className":24030,"code":146412,"language":24032,"meta":30,"style":30},"source .venv\u002Fbin\u002Factivate\n",[318,146414,146415],{"__ignoreMap":30},[321,146416,146417,146419],{"class":323,"line":324},[321,146418,101038],{"class":380},[321,146420,101041],{"class":436},[19,146422,146423],{},"退出虚拟环境：",[312,146425,146427],{"className":24030,"code":146426,"language":24032,"meta":30,"style":30},"deactivate\n",[318,146428,146429],{"__ignoreMap":30},[321,146430,146431],{"class":323,"line":324},[321,146432,146426],{"class":2169},[19,146434,146435],{},"保存依赖：",[312,146437,146439],{"className":24030,"code":146438,"language":24032,"meta":30,"style":30},"pip freeze > requirements.txt\n",[318,146440,146441],{"__ignoreMap":30},[321,146442,146443,146445,146448,146450],{"class":323,"line":324},[321,146444,24039],{"class":2169},[321,146446,146447],{"class":436}," freeze",[321,146449,26367],{"class":327},[321,146451,146452],{"class":436}," requirements.txt\n",[19,146454,146455],{},"安装依赖：",[312,146457,146459],{"className":24030,"code":146458,"language":24032,"meta":30,"style":30},"pip install -r requirements.txt\n",[318,146460,146461],{"__ignoreMap":30},[321,146462,146463,146465,146467,146469],{"class":323,"line":324},[321,146464,24039],{"class":2169},[321,146466,24042],{"class":436},[321,146468,119784],{"class":380},[321,146470,146452],{"class":436},[14,146472,146474],{"id":146473},"_16-开发工具","1.6 开发工具",[292,146476,146478],{"id":146477},"_161-pycharm","1.6.1 PyCharm",[19,146480,146481],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146483,122207],{},[151,146485,146486,146489,146492,146498,146501],{},[154,146487,146488],{},"New Project：创建项目。",[154,146490,146491],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[154,146493,146494,146495,126128],{},"New Python File：创建 ",[318,146496,146497],{},".py",[154,146499,146500],{},"Run：运行当前文件。",[154,146502,146503],{},"Debug：断点调试。",[292,146505,146507],{"id":146506},"_162-vs-code","1.6.2 VS Code",[19,146509,146510],{},"VS Code 轻量，适合后续多语言开发。",[19,146512,146513],{},"建议安装插件：",[151,146515,146516,146519,146522],{},[154,146517,146518],{},"Python。",[154,146520,146521],{},"Pylance。",[154,146523,146524],{},"Jupyter。",[19,146526,146527],{},"选择解释器：",[312,146529,146532],{"className":146530,"code":146531,"language":5394,"meta":30},[5392],"Ctrl + Shift + P -> Python: Select Interpreter\n",[318,146533,146531],{"__ignoreMap":30},[14,146535,146537],{"id":146536},"_17-第一个python程序","1.7 第一个Python程序",[19,146539,146540,146541,24763],{},"创建文件 ",[318,146542,146543],{},"hello.py",[312,146545,146547],{"className":30523,"code":146546,"language":30525,"meta":30,"style":30},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[318,146548,146549,146560],{"__ignoreMap":30},[321,146550,146551,146553,146555,146558],{"class":323,"line":324},[321,146552,30560],{"class":380},[321,146554,332],{"class":331},[321,146556,146557],{"class":436},"\"Hello World\"",[321,146559,338],{"class":331},[321,146561,146562,146564,146566,146569],{"class":323,"line":167},[321,146563,30560],{"class":380},[321,146565,332],{"class":331},[321,146567,146568],{"class":436},"\"你好，Python\"",[321,146570,338],{"class":331},[19,146572,146573],{},"在终端运行：",[312,146575,146577],{"className":24030,"code":146576,"language":24032,"meta":30,"style":30},"python hello.py\n",[318,146578,146579],{"__ignoreMap":30},[321,146580,146581,146583],{"class":323,"line":324},[321,146582,30525],{"class":2169},[321,146584,146585],{"class":436}," hello.py\n",[19,146587,146588],{},"或：",[312,146590,146592],{"className":24030,"code":146591,"language":24032,"meta":30,"style":30},"python3 hello.py\n",[318,146593,146594],{"__ignoreMap":30},[321,146595,146596,146598],{"class":323,"line":324},[321,146597,101024],{"class":2169},[321,146599,146585],{"class":436},[19,146601,146602],{},"输出：",[312,146604,146607],{"className":146605,"code":146606,"language":5394,"meta":30},[5392],"Hello World\n你好，Python\n",[318,146608,146606],{"__ignoreMap":30},[14,146610,146612],{"id":146611},"_18-print函数","1.8 print函数",[19,146614,146615,146618],{},[318,146616,146617],{},"print()"," 用来输出内容。",[312,146620,146622],{"className":30523,"code":146621,"language":30525,"meta":30,"style":30},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[318,146623,146624,146634,146644,146654],{"__ignoreMap":30},[321,146625,146626,146628,146630,146632],{"class":323,"line":324},[321,146627,30560],{"class":380},[321,146629,332],{"class":331},[321,146631,6051],{"class":436},[321,146633,338],{"class":331},[321,146635,146636,146638,146640,146642],{"class":323,"line":167},[321,146637,30560],{"class":380},[321,146639,332],{"class":331},[321,146641,643],{"class":380},[321,146643,338],{"class":331},[321,146645,146646,146648,146650,146652],{"class":323,"line":200},[321,146647,30560],{"class":380},[321,146649,332],{"class":331},[321,146651,381],{"class":380},[321,146653,338],{"class":331},[321,146655,146656,146658,146660,146663,146665,146667],{"class":323,"line":1401},[321,146657,30560],{"class":380},[321,146659,332],{"class":331},[321,146661,146662],{"class":436},"\"年龄:\"",[321,146664,12642],{"class":331},[321,146666,982],{"class":380},[321,146668,338],{"class":331},[19,146670,146671],{},"多个内容用逗号隔开，默认中间加空格：",[312,146673,146675],{"className":30523,"code":146674,"language":30525,"meta":30,"style":30},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[318,146676,146677,146687,146697],{"__ignoreMap":30},[321,146678,146679,146682,146684],{"class":323,"line":324},[321,146680,146681],{"class":331},"name ",[321,146683,377],{"class":327},[321,146685,146686],{"class":436}," \"张三\"\n",[321,146688,146689,146692,146694],{"class":323,"line":167},[321,146690,146691],{"class":331},"age ",[321,146693,377],{"class":327},[321,146695,146696],{"class":380}," 18\n",[321,146698,146699,146701,146703,146706,146709,146711],{"class":323,"line":200},[321,146700,30560],{"class":380},[321,146702,332],{"class":331},[321,146704,146705],{"class":436},"\"姓名:\"",[321,146707,146708],{"class":331},", name, ",[321,146710,146662],{"class":436},[321,146712,146713],{"class":331},", age)\n",[19,146715,146716],{},"修改分隔符：",[312,146718,146720],{"className":30523,"code":146719,"language":30525,"meta":30,"style":30},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[318,146721,146722],{"__ignoreMap":30},[321,146723,146724,146726,146728,146731,146733,146735,146737,146739,146741,146744,146746,146748],{"class":323,"line":324},[321,146725,30560],{"class":380},[321,146727,332],{"class":331},[321,146729,146730],{"class":436},"\"2024\"",[321,146732,12642],{"class":331},[321,146734,54461],{"class":436},[321,146736,12642],{"class":331},[321,146738,54461],{"class":436},[321,146740,12642],{"class":331},[321,146742,146743],{"class":5423},"sep",[321,146745,377],{"class":327},[321,146747,32628],{"class":436},[321,146749,338],{"class":331},[19,146751,146752],{},"修改结尾符：",[312,146754,146756],{"className":30523,"code":146755,"language":30525,"meta":30,"style":30},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[318,146757,146758,146776],{"__ignoreMap":30},[321,146759,146760,146762,146764,146766,146768,146770,146772,146774],{"class":323,"line":324},[321,146761,30560],{"class":380},[321,146763,332],{"class":331},[321,146765,6051],{"class":436},[321,146767,12642],{"class":331},[321,146769,45946],{"class":5423},[321,146771,377],{"class":327},[321,146773,4565],{"class":436},[321,146775,338],{"class":331},[321,146777,146778,146780,146782,146785],{"class":323,"line":167},[321,146779,30560],{"class":380},[321,146781,332],{"class":331},[321,146783,146784],{"class":436},"\"python\"",[321,146786,338],{"class":331},[14,146788,146790],{"id":146789},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146792,146793],{},"交互运行适合临时验证：",[312,146795,146797],{"className":30523,"code":146796,"language":30525,"meta":30,"style":30},">>> 10 * 3\n30\n",[318,146798,146799,146809],{"__ignoreMap":30},[321,146800,146801,146803,146805,146807],{"class":323,"line":324},[321,146802,145998],{"class":327},[321,146804,2244],{"class":380},[321,146806,6725],{"class":327},[321,146808,120181],{"class":380},[321,146810,146811],{"class":323,"line":167},[321,146812,146813],{"class":380},"30\n",[19,146815,146816],{},"脚本运行适合保存程序：",[312,146818,146820],{"className":30523,"code":146819,"language":30525,"meta":30,"style":30},"price = 8\ncount = 5\nprint(price * count)\n",[318,146821,146822,146832,146841],{"__ignoreMap":30},[321,146823,146824,146827,146829],{"class":323,"line":324},[321,146825,146826],{"class":331},"price ",[321,146828,377],{"class":327},[321,146830,146831],{"class":380}," 8\n",[321,146833,146834,146837,146839],{"class":323,"line":167},[321,146835,146836],{"class":331},"count ",[321,146838,377],{"class":327},[321,146840,54572],{"class":380},[321,146842,146843,146845,146848,146850],{"class":323,"line":200},[321,146844,30560],{"class":380},[321,146846,146847],{"class":331},"(price ",[321,146849,787],{"class":327},[321,146851,146852],{"class":331}," count)\n",[19,146854,146855],{},"实际学习中推荐：",[151,146857,146858,146861,146866],{},[154,146859,146860],{},"临时试一个语法，用交互模式。",[154,146862,146863,146864,126128],{},"写完整练习，用 ",[318,146865,146497],{},[154,146867,146868],{},"写项目，用独立目录和虚拟环境。",[14,146870,146872],{"id":146871},"_110-常见错误","1.10 常见错误",[292,146874,146876],{"id":146875},"_1101-命令找不到","1.10.1 命令找不到",[312,146878,146881],{"className":146879,"code":146880,"language":5394,"meta":30},[5392],"python: command not found\n",[318,146882,146880],{"__ignoreMap":30},[19,146884,146885],{},"原因：",[151,146887,146888,146891,146894],{},[154,146889,146890],{},"没安装 Python。",[154,146892,146893],{},"PATH 没配置。",[154,146895,146896,146897,28530],{},"Linux\u002FmacOS 应该使用 ",[318,146898,101024],{},[292,146900,146902],{"id":146901},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146904,146905],{},"不要把文件命名为：",[312,146907,146910],{"className":146908,"code":146909,"language":5394,"meta":30},[5392],"random.py\njson.py\ntime.py\nrequests.py\n",[318,146911,146909],{"__ignoreMap":30},[19,146913,146914],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[292,146916,146918],{"id":146917},"_1103-中文乱码","1.10.3 中文乱码",[19,146920,146921],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146923,146924],{},"如果读写文件出现乱码，要明确指定编码：",[312,146926,146928],{"className":30523,"code":146927,"language":30525,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[318,146929,146930,146964],{"__ignoreMap":30},[321,146931,146932,146934,146937,146939,146942,146944,146947,146949,146952,146954,146957,146959,146961],{"class":323,"line":324},[321,146933,107978],{"class":327},[321,146935,146936],{"class":380}," open",[321,146938,332],{"class":331},[321,146940,146941],{"class":436},"\"data.txt\"",[321,146943,12642],{"class":331},[321,146945,146946],{"class":436},"\"r\"",[321,146948,12642],{"class":331},[321,146950,146951],{"class":5423},"encoding",[321,146953,377],{"class":327},[321,146955,146956],{"class":436},"\"utf-8\"",[321,146958,13921],{"class":331},[321,146960,31528],{"class":327},[321,146962,146963],{"class":331}," f:\n",[321,146965,146966,146969,146971],{"class":323,"line":167},[321,146967,146968],{"class":331},"    content ",[321,146970,377],{"class":327},[321,146972,146973],{"class":331}," f.read()\n",[14,146975,146977],{"id":146976},"_111-本章练习","1.11 本章练习",[151,146979,146980,146983,146989],{},[154,146981,146982],{},"安装 Python，并在终端输出版本号。",[154,146984,146985,146986,146988],{},"新建 ",[318,146987,146543],{},"，输出自己的姓名、年龄、学习目标。",[154,146990,104511,146991,146993],{},[318,146992,146617],{}," 输出下面格式：",[312,146995,146998],{"className":146996,"code":146997,"language":5394,"meta":30},[5392],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[318,146999,146997],{"__ignoreMap":30},[151,147001,147002],{"start":1401},[154,147003,104511,147004,147006],{},[318,147005,146743],{}," 输出日期：",[312,147008,147011],{"className":147009,"code":147010,"language":5394,"meta":30},[5392],"2024-10-10\n",[318,147012,147010],{"__ignoreMap":30},[151,147014,147015],{"start":1407},[154,147016,104511,147017,147019,147020,147022],{},[318,147018,45946],{}," 让两次 ",[318,147021,146617],{}," 输出在同一行。",[5333,147024,147025],{},"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":30,"searchDepth":167,"depth":167,"links":147027},[147028,147029,147030,147035,147036,147037,147041,147042,147043,147044,147049],{"id":145910,"depth":167,"text":145911},{"id":145954,"depth":167,"text":145955},{"id":146055,"depth":167,"text":146056,"children":147031},[147032,147033,147034],{"id":146059,"depth":200,"text":146060},{"id":146114,"depth":200,"text":146115},{"id":146150,"depth":200,"text":146151},{"id":146223,"depth":167,"text":146224},{"id":146368,"depth":167,"text":146369},{"id":146473,"depth":167,"text":146474,"children":147038},[147039,147040],{"id":146477,"depth":200,"text":146478},{"id":146506,"depth":200,"text":146507},{"id":146536,"depth":167,"text":146537},{"id":146611,"depth":167,"text":146612},{"id":146789,"depth":167,"text":146790},{"id":146871,"depth":167,"text":146872,"children":147045},[147046,147047,147048],{"id":146875,"depth":200,"text":146876},{"id":146901,"depth":200,"text":146902},{"id":146917,"depth":200,"text":146918},{"id":146976,"depth":167,"text":146977},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145902,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147056,"title":147057,"body":147058,"description":23584,"extension":249,"meta":149462,"navigation":251,"path":149463,"seo":149464,"stem":149465,"__hash__":149466},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147059,"toc":149447},[147060,147063,147067,147070,147073,147090,147093,147135,147138,147142,147145,147148,147185,147188,147222,147225,147317,147321,147335,147338,147365,147368,147372,147475,147482,147485,147502,147506,147513,147702,147705,147778,147782,147785,147869,147872,147904,147908,148112,148115,148119,148125,148227,148230,148486,148490,148493,148496,148510,148512,148698,148702,149064,149070,149074,149077,149201,149204,149383,149386,149390,149423,149427,149444],[10,147061,147057],{"id":147062},"_10-json与pyecharts折线图",[14,147064,147066],{"id":147065},"_101-数据可视化","10.1 数据可视化",[19,147068,147069],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147071,147072],{},"常见图表：",[151,147074,147075,147078,147081,147084,147087],{},[154,147076,147077],{},"折线图：看趋势。",[154,147079,147080],{},"柱状图：看分类对比。",[154,147082,147083],{},"饼图：看占比。",[154,147085,147086],{},"地图：看地域分布。",[154,147088,147089],{},"散点图：看两个变量之间的关系。",[19,147091,147092],{},"Python 可视化常用库：",[469,147094,147095,147103],{},[472,147096,147097],{},[475,147098,147099,147101],{},[478,147100,146306],{},[478,147102,23948],{},[516,147104,147105,147112,147120,147127],{},[475,147106,147107,147109],{},[521,147108,146338],{},[521,147110,147111],{},"基础、经典、可定制",[475,147113,147114,147117],{},[521,147115,147116],{},"seaborn",[521,147118,147119],{},"统计图表更美观",[475,147121,147122,147124],{},[521,147123,146346],{},[521,147125,147126],{},"生成交互式网页图表",[475,147128,147129,147132],{},[521,147130,147131],{},"plotly",[521,147133,147134],{},"交互图表能力强",[19,147136,147137],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147139,147141],{"id":147140},"_102-json回顾","10.2 JSON回顾",[19,147143,147144],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147146,147147],{},"Python 字典：",[312,147149,147151],{"className":30523,"code":147150,"language":30525,"meta":30,"style":30},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[318,147152,147153,147161,147172,147181],{"__ignoreMap":30},[321,147154,147155,147157,147159],{"class":323,"line":324},[321,147156,101803],{"class":331},[321,147158,377],{"class":327},[321,147160,15779],{"class":331},[321,147162,147163,147166,147168,147170],{"class":323,"line":167},[321,147164,147165],{"class":436},"    \"name\"",[321,147167,51582],{"class":331},[321,147169,69414],{"class":436},[321,147171,31611],{"class":331},[321,147173,147174,147177,147179],{"class":323,"line":200},[321,147175,147176],{"class":436},"    \"value\"",[321,147178,51582],{"class":331},[321,147180,97603],{"class":380},[321,147182,147183],{"class":323,"line":1401},[321,147184,1771],{"class":331},[19,147186,147187],{},"JSON 字符串：",[312,147189,147192],{"className":147190,"code":147191,"language":145937,"meta":30,"style":30},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[318,147193,147194,147198,147209,147218],{"__ignoreMap":30},[321,147195,147196],{"class":323,"line":324},[321,147197,1752],{"class":331},[321,147199,147200,147203,147205,147207],{"class":323,"line":167},[321,147201,147202],{"class":380},"  \"name\"",[321,147204,51582],{"class":331},[321,147206,69414],{"class":436},[321,147208,31611],{"class":331},[321,147210,147211,147214,147216],{"class":323,"line":200},[321,147212,147213],{"class":380},"  \"value\"",[321,147215,51582],{"class":331},[321,147217,97603],{"class":380},[321,147219,147220],{"class":323,"line":1401},[321,147221,1771],{"class":331},[19,147223,147224],{},"Python 与 JSON 的转换：",[312,147226,147228],{"className":30523,"code":147227,"language":30525,"meta":30,"style":30},"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",[318,147229,147230,147237,147241,147266,147270,147289,147296,147300,147310],{"__ignoreMap":30},[321,147231,147232,147234],{"class":323,"line":324},[321,147233,30537],{"class":327},[321,147235,147236],{"class":331}," json\n",[321,147238,147239],{"class":323,"line":167},[321,147240,2606],{"emptyLinePlaceholder":251},[321,147242,147243,147245,147247,147249,147251,147253,147255,147257,147260,147262,147264],{"class":323,"line":200},[321,147244,101803],{"class":331},[321,147246,377],{"class":327},[321,147248,4654],{"class":331},[321,147250,62824],{"class":436},[321,147252,51582],{"class":331},[321,147254,69414],{"class":436},[321,147256,12642],{"class":331},[321,147258,147259],{"class":436},"\"value\"",[321,147261,51582],{"class":331},[321,147263,643],{"class":380},[321,147265,1771],{"class":331},[321,147267,147268],{"class":323,"line":1401},[321,147269,2606],{"emptyLinePlaceholder":251},[321,147271,147272,147275,147277,147280,147283,147285,147287],{"class":323,"line":1407},[321,147273,147274],{"class":331},"json_text ",[321,147276,377],{"class":327},[321,147278,147279],{"class":331}," json.dumps(data, ",[321,147281,147282],{"class":5423},"ensure_ascii",[321,147284,377],{"class":327},[321,147286,34132],{"class":380},[321,147288,338],{"class":331},[321,147290,147291,147293],{"class":323,"line":1421},[321,147292,30560],{"class":380},[321,147294,147295],{"class":331},"(json_text)\n",[321,147297,147298],{"class":323,"line":1427},[321,147299,2606],{"emptyLinePlaceholder":251},[321,147301,147302,147305,147307],{"class":323,"line":1518},[321,147303,147304],{"class":331},"new_data ",[321,147306,377],{"class":327},[321,147308,147309],{"class":331}," json.loads(json_text)\n",[321,147311,147312,147314],{"class":323,"line":1524},[321,147313,30560],{"class":380},[321,147315,147316],{"class":331},"(new_data)\n",[14,147318,147320],{"id":147319},"_103-安装pyecharts","10.3 安装pyecharts",[312,147322,147324],{"className":24030,"code":147323,"language":24032,"meta":30,"style":30},"pip install pyecharts\n",[318,147325,147326],{"__ignoreMap":30},[321,147327,147328,147330,147332],{"class":323,"line":324},[321,147329,24039],{"class":2169},[321,147331,24042],{"class":436},[321,147333,147334],{"class":436}," pyecharts\n",[19,147336,147337],{},"验证：",[312,147339,147341],{"className":30523,"code":147340,"language":30525,"meta":30,"style":30},"import pyecharts\n\nprint(pyecharts.__version__)\n",[318,147342,147343,147349,147353],{"__ignoreMap":30},[321,147344,147345,147347],{"class":323,"line":324},[321,147346,30537],{"class":327},[321,147348,147334],{"class":331},[321,147350,147351],{"class":323,"line":167},[321,147352,2606],{"emptyLinePlaceholder":251},[321,147354,147355,147357,147360,147363],{"class":323,"line":200},[321,147356,30560],{"class":380},[321,147358,147359],{"class":331},"(pyecharts.",[321,147361,147362],{"class":380},"__version__",[321,147364,338],{"class":331},[19,147366,147367],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147369,147371],{"id":147370},"_104-第一个折线图","10.4 第一个折线图",[312,147373,147375],{"className":30523,"code":147374,"language":30525,"meta":30,"style":30},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[318,147376,147377,147389,147393,147403,147433,147465],{"__ignoreMap":30},[321,147378,147379,147381,147384,147386],{"class":323,"line":324},[321,147380,30882],{"class":327},[321,147382,147383],{"class":331}," pyecharts.charts ",[321,147385,30537],{"class":327},[321,147387,147388],{"class":331}," Line\n",[321,147390,147391],{"class":323,"line":167},[321,147392,2606],{"emptyLinePlaceholder":251},[321,147394,147395,147398,147400],{"class":323,"line":200},[321,147396,147397],{"class":331},"line ",[321,147399,377],{"class":327},[321,147401,147402],{"class":331}," Line()\n",[321,147404,147405,147408,147411,147413,147416,147418,147421,147423,147426,147428,147431],{"class":323,"line":1401},[321,147406,147407],{"class":331},"line.add_xaxis([",[321,147409,147410],{"class":436},"\"周一\"",[321,147412,12642],{"class":331},[321,147414,147415],{"class":436},"\"周二\"",[321,147417,12642],{"class":331},[321,147419,147420],{"class":436},"\"周三\"",[321,147422,12642],{"class":331},[321,147424,147425],{"class":436},"\"周四\"",[321,147427,12642],{"class":331},[321,147429,147430],{"class":436},"\"周五\"",[321,147432,4863],{"class":331},[321,147434,147435,147438,147441,147443,147445,147447,147449,147451,147453,147455,147458,147460,147463],{"class":323,"line":1407},[321,147436,147437],{"class":331},"line.add_yaxis(",[321,147439,147440],{"class":436},"\"销售额\"",[321,147442,77663],{"class":331},[321,147444,643],{"class":380},[321,147446,12642],{"class":331},[321,147448,1149],{"class":380},[321,147450,12642],{"class":331},[321,147452,1194],{"class":380},[321,147454,12642],{"class":331},[321,147456,147457],{"class":380},"150",[321,147459,12642],{"class":331},[321,147461,147462],{"class":380},"180",[321,147464,4863],{"class":331},[321,147466,147467,147470,147473],{"class":323,"line":1421},[321,147468,147469],{"class":331},"line.render(",[321,147471,147472],{"class":436},"\"line.html\"",[321,147474,338],{"class":331},[19,147476,147477,147478,147481],{},"运行后会生成 ",[318,147479,147480],{},"line.html","，用浏览器打开即可看到图表。",[19,147483,147484],{},"核心步骤：",[151,147486,147487,147490,147493,147496,147499],{},[154,147488,147489],{},"导入图表类。",[154,147491,147492],{},"创建图表对象。",[154,147494,147495],{},"添加 x 轴数据。",[154,147497,147498],{},"添加 y 轴数据。",[154,147500,147501],{},"渲染为 HTML。",[14,147503,147505],{"id":147504},"_105-全局配置","10.5 全局配置",[19,147507,147508,147509,147512],{},"常用配置在 ",[318,147510,147511],{},"pyecharts.options"," 中。",[312,147514,147516],{"className":30523,"code":147515,"language":30525,"meta":30,"style":30},"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",[318,147517,147518,147535,147545,147549,147557,147581,147609,147614,147633,147652,147670,147690,147694],{"__ignoreMap":30},[321,147519,147520,147522,147525,147527,147530,147532],{"class":323,"line":324},[321,147521,30882],{"class":327},[321,147523,147524],{"class":331}," pyecharts ",[321,147526,30537],{"class":327},[321,147528,147529],{"class":331}," options ",[321,147531,31528],{"class":327},[321,147533,147534],{"class":331}," opts\n",[321,147536,147537,147539,147541,147543],{"class":323,"line":167},[321,147538,30882],{"class":327},[321,147540,147383],{"class":331},[321,147542,30537],{"class":327},[321,147544,147388],{"class":331},[321,147546,147547],{"class":323,"line":200},[321,147548,2606],{"emptyLinePlaceholder":251},[321,147550,147551,147553,147555],{"class":323,"line":1401},[321,147552,147397],{"class":331},[321,147554,377],{"class":327},[321,147556,147402],{"class":331},[321,147558,147559,147561,147563,147565,147567,147569,147571,147573,147575,147577,147579],{"class":323,"line":1407},[321,147560,147407],{"class":331},[321,147562,147410],{"class":436},[321,147564,12642],{"class":331},[321,147566,147415],{"class":436},[321,147568,12642],{"class":331},[321,147570,147420],{"class":436},[321,147572,12642],{"class":331},[321,147574,147425],{"class":436},[321,147576,12642],{"class":331},[321,147578,147430],{"class":436},[321,147580,4863],{"class":331},[321,147582,147583,147585,147587,147589,147591,147593,147595,147597,147599,147601,147603,147605,147607],{"class":323,"line":1421},[321,147584,147437],{"class":331},[321,147586,147440],{"class":436},[321,147588,77663],{"class":331},[321,147590,643],{"class":380},[321,147592,12642],{"class":331},[321,147594,1149],{"class":380},[321,147596,12642],{"class":331},[321,147598,1194],{"class":380},[321,147600,12642],{"class":331},[321,147602,147457],{"class":380},[321,147604,12642],{"class":331},[321,147606,147462],{"class":380},[321,147608,4863],{"class":331},[321,147610,147611],{"class":323,"line":1427},[321,147612,147613],{"class":331},"line.set_global_opts(\n",[321,147615,147616,147619,147621,147624,147626,147628,147631],{"class":323,"line":1518},[321,147617,147618],{"class":5423},"    title_opts",[321,147620,377],{"class":327},[321,147622,147623],{"class":331},"opts.TitleOpts(",[321,147625,51552],{"class":5423},[321,147627,377],{"class":327},[321,147629,147630],{"class":436},"\"一周销售额\"",[321,147632,38192],{"class":331},[321,147634,147635,147638,147640,147643,147645,147647,147650],{"class":323,"line":1524},[321,147636,147637],{"class":5423},"    xaxis_opts",[321,147639,377],{"class":327},[321,147641,147642],{"class":331},"opts.AxisOpts(",[321,147644,79955],{"class":5423},[321,147646,377],{"class":327},[321,147648,147649],{"class":436},"\"日期\"",[321,147651,38192],{"class":331},[321,147653,147654,147657,147659,147661,147663,147665,147668],{"class":323,"line":1536},[321,147655,147656],{"class":5423},"    yaxis_opts",[321,147658,377],{"class":327},[321,147660,147642],{"class":331},[321,147662,79955],{"class":5423},[321,147664,377],{"class":327},[321,147666,147667],{"class":436},"\"金额\"",[321,147669,38192],{"class":331},[321,147671,147672,147675,147677,147680,147683,147685,147688],{"class":323,"line":1818},[321,147673,147674],{"class":5423},"    tooltip_opts",[321,147676,377],{"class":327},[321,147678,147679],{"class":331},"opts.TooltipOpts(",[321,147681,147682],{"class":5423},"trigger",[321,147684,377],{"class":327},[321,147686,147687],{"class":436},"\"axis\"",[321,147689,38192],{"class":331},[321,147691,147692],{"class":323,"line":1823},[321,147693,338],{"class":331},[321,147695,147696,147698,147700],{"class":323,"line":1829},[321,147697,147469],{"class":331},[321,147699,147472],{"class":436},[321,147701,338],{"class":331},[19,147703,147704],{},"常见全局配置：",[469,147706,147707,147716],{},[472,147708,147709],{},[475,147710,147711,147714],{},[478,147712,147713],{},"配置",[478,147715,102841],{},[516,147717,147718,147728,147738,147748,147758,147768],{},[475,147719,147720,147725],{},[521,147721,147722],{},[318,147723,147724],{},"TitleOpts",[521,147726,147727],{},"标题",[475,147729,147730,147735],{},[521,147731,147732],{},[318,147733,147734],{},"LegendOpts",[521,147736,147737],{},"图例",[475,147739,147740,147745],{},[521,147741,147742],{},[318,147743,147744],{},"TooltipOpts",[521,147746,147747],{},"提示框",[475,147749,147750,147755],{},[521,147751,147752],{},[318,147753,147754],{},"AxisOpts",[521,147756,147757],{},"坐标轴",[475,147759,147760,147765],{},[521,147761,147762],{},[318,147763,147764],{},"VisualMapOpts",[521,147766,147767],{},"视觉映射",[475,147769,147770,147775],{},[521,147771,147772],{},[318,147773,147774],{},"DataZoomOpts",[521,147776,147777],{},"区域缩放",[14,147779,147781],{"id":147780},"_106-系列配置","10.6 系列配置",[19,147783,147784],{},"系列配置作用于某一组数据。",[312,147786,147788],{"className":30523,"code":147787,"language":30525,"meta":30,"style":30},"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",[318,147789,147790,147795,147806,147835,147846,147865],{"__ignoreMap":30},[321,147791,147792],{"class":323,"line":324},[321,147793,147794],{"class":331},"line.add_yaxis(\n",[321,147796,147797,147800,147802,147804],{"class":323,"line":167},[321,147798,147799],{"class":5423},"    series_name",[321,147801,377],{"class":327},[321,147803,147440],{"class":436},[321,147805,31611],{"class":331},[321,147807,147808,147811,147813,147815,147817,147819,147821,147823,147825,147827,147829,147831,147833],{"class":323,"line":200},[321,147809,147810],{"class":5423},"    y_axis",[321,147812,377],{"class":327},[321,147814,1222],{"class":331},[321,147816,643],{"class":380},[321,147818,12642],{"class":331},[321,147820,1149],{"class":380},[321,147822,12642],{"class":331},[321,147824,1194],{"class":380},[321,147826,12642],{"class":331},[321,147828,147457],{"class":380},[321,147830,12642],{"class":331},[321,147832,147462],{"class":380},[321,147834,87981],{"class":331},[321,147836,147837,147840,147842,147844],{"class":323,"line":1401},[321,147838,147839],{"class":5423},"    is_smooth",[321,147841,377],{"class":327},[321,147843,31621],{"class":380},[321,147845,31611],{"class":331},[321,147847,147848,147851,147853,147856,147859,147861,147863],{"class":323,"line":1407},[321,147849,147850],{"class":5423},"    label_opts",[321,147852,377],{"class":327},[321,147854,147855],{"class":331},"opts.LabelOpts(",[321,147857,147858],{"class":5423},"is_show",[321,147860,377],{"class":327},[321,147862,31621],{"class":380},[321,147864,38192],{"class":331},[321,147866,147867],{"class":323,"line":1421},[321,147868,338],{"class":331},[19,147870,147871],{},"常用参数：",[151,147873,147874,147880,147886,147892,147898],{},[154,147875,147876,147879],{},[318,147877,147878],{},"series_name","：系列名称。",[154,147881,147882,147885],{},[318,147883,147884],{},"y_axis","：y 轴数据。",[154,147887,147888,147891],{},[318,147889,147890],{},"is_smooth","：是否平滑曲线。",[154,147893,147894,147897],{},[318,147895,147896],{},"label_opts","：标签配置。",[154,147899,147900,147903],{},[318,147901,147902],{},"symbol_size","：标记点大小。",[14,147905,147907],{"id":147906},"_107-多条折线","10.7 多条折线",[312,147909,147911],{"className":30523,"code":147910,"language":30525,"meta":30,"style":30},"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",[318,147912,147913,147927,147937,147941,147970,147974,147982,147987,148025,148062,148066,148083,148099,148103],{"__ignoreMap":30},[321,147914,147915,147917,147919,147921,147923,147925],{"class":323,"line":324},[321,147916,30882],{"class":327},[321,147918,147524],{"class":331},[321,147920,30537],{"class":327},[321,147922,147529],{"class":331},[321,147924,31528],{"class":327},[321,147926,147534],{"class":331},[321,147928,147929,147931,147933,147935],{"class":323,"line":167},[321,147930,30882],{"class":327},[321,147932,147383],{"class":331},[321,147934,30537],{"class":327},[321,147936,147388],{"class":331},[321,147938,147939],{"class":323,"line":200},[321,147940,2606],{"emptyLinePlaceholder":251},[321,147942,147943,147946,147948,147950,147952,147954,147956,147958,147960,147962,147964,147966,147968],{"class":323,"line":1401},[321,147944,147945],{"class":331},"dates ",[321,147947,377],{"class":327},[321,147949,52371],{"class":331},[321,147951,147410],{"class":436},[321,147953,12642],{"class":331},[321,147955,147415],{"class":436},[321,147957,12642],{"class":331},[321,147959,147420],{"class":436},[321,147961,12642],{"class":331},[321,147963,147425],{"class":436},[321,147965,12642],{"class":331},[321,147967,147430],{"class":436},[321,147969,33391],{"class":331},[321,147971,147972],{"class":323,"line":1407},[321,147973,2606],{"emptyLinePlaceholder":251},[321,147975,147976,147978,147980],{"class":323,"line":1421},[321,147977,147397],{"class":331},[321,147979,377],{"class":327},[321,147981,147402],{"class":331},[321,147983,147984],{"class":323,"line":1427},[321,147985,147986],{"class":331},"line.add_xaxis(dates)\n",[321,147988,147989,147991,147994,147996,147998,148000,148003,148005,148007,148009,148011,148013,148015,148017,148019,148021,148023],{"class":323,"line":1518},[321,147990,147437],{"class":331},[321,147992,147993],{"class":436},"\"线上销售\"",[321,147995,77663],{"class":331},[321,147997,643],{"class":380},[321,147999,12642],{"class":331},[321,148001,148002],{"class":380},"130",[321,148004,12642],{"class":331},[321,148006,1149],{"class":380},[321,148008,12642],{"class":331},[321,148010,21255],{"class":380},[321,148012,12642],{"class":331},[321,148014,1928],{"class":380},[321,148016,112347],{"class":331},[321,148018,147890],{"class":5423},[321,148020,377],{"class":327},[321,148022,31621],{"class":380},[321,148024,338],{"class":331},[321,148026,148027,148029,148032,148034,148036,148038,148040,148042,148044,148046,148048,148050,148052,148054,148056,148058,148060],{"class":323,"line":1524},[321,148028,147437],{"class":331},[321,148030,148031],{"class":436},"\"线下销售\"",[321,148033,77663],{"class":331},[321,148035,944],{"class":380},[321,148037,12642],{"class":331},[321,148039,1194],{"class":380},[321,148041,12642],{"class":331},[321,148043,643],{"class":380},[321,148045,12642],{"class":331},[321,148047,1149],{"class":380},[321,148049,12642],{"class":331},[321,148051,147457],{"class":380},[321,148053,112347],{"class":331},[321,148055,147890],{"class":5423},[321,148057,377],{"class":327},[321,148059,31621],{"class":380},[321,148061,338],{"class":331},[321,148063,148064],{"class":323,"line":1536},[321,148065,147613],{"class":331},[321,148067,148068,148070,148072,148074,148076,148078,148081],{"class":323,"line":1818},[321,148069,147618],{"class":5423},[321,148071,377],{"class":327},[321,148073,147623],{"class":331},[321,148075,51552],{"class":5423},[321,148077,377],{"class":327},[321,148079,148080],{"class":436},"\"线上线下销售趋势\"",[321,148082,38192],{"class":331},[321,148084,148085,148087,148089,148091,148093,148095,148097],{"class":323,"line":1823},[321,148086,147674],{"class":5423},[321,148088,377],{"class":327},[321,148090,147679],{"class":331},[321,148092,147682],{"class":5423},[321,148094,377],{"class":327},[321,148096,147687],{"class":436},[321,148098,38192],{"class":331},[321,148100,148101],{"class":323,"line":1829},[321,148102,338],{"class":331},[321,148104,148105,148107,148110],{"class":323,"line":1834},[321,148106,147469],{"class":331},[321,148108,148109],{"class":436},"\"sales.html\"",[321,148111,338],{"class":331},[19,148113,148114],{},"多条折线适合比较不同指标或不同地区。",[14,148116,148118],{"id":148117},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148120,148121,148122,24763],{},"假设 ",[318,148123,148124],{},"sales.json",[312,148126,148128],{"className":147190,"code":148127,"language":145937,"meta":30,"style":30},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[318,148129,148130,148135,148167,148195,148223],{"__ignoreMap":30},[321,148131,148132],{"class":323,"line":324},[321,148133,148134],{"class":331},"[\n",[321,148136,148137,148140,148143,148145,148147,148149,148152,148154,148156,148158,148161,148163,148165],{"class":323,"line":167},[321,148138,148139],{"class":331},"  {",[321,148141,148142],{"class":380},"\"date\"",[321,148144,51582],{"class":331},[321,148146,147410],{"class":436},[321,148148,12642],{"class":331},[321,148150,148151],{"class":380},"\"online\"",[321,148153,51582],{"class":331},[321,148155,643],{"class":380},[321,148157,12642],{"class":331},[321,148159,148160],{"class":380},"\"offline\"",[321,148162,51582],{"class":331},[321,148164,944],{"class":380},[321,148166,5136],{"class":331},[321,148168,148169,148171,148173,148175,148177,148179,148181,148183,148185,148187,148189,148191,148193],{"class":323,"line":200},[321,148170,148139],{"class":331},[321,148172,148142],{"class":380},[321,148174,51582],{"class":331},[321,148176,147415],{"class":436},[321,148178,12642],{"class":331},[321,148180,148151],{"class":380},[321,148182,51582],{"class":331},[321,148184,148002],{"class":380},[321,148186,12642],{"class":331},[321,148188,148160],{"class":380},[321,148190,51582],{"class":331},[321,148192,1194],{"class":380},[321,148194,5136],{"class":331},[321,148196,148197,148199,148201,148203,148205,148207,148209,148211,148213,148215,148217,148219,148221],{"class":323,"line":1401},[321,148198,148139],{"class":331},[321,148200,148142],{"class":380},[321,148202,51582],{"class":331},[321,148204,147420],{"class":436},[321,148206,12642],{"class":331},[321,148208,148151],{"class":380},[321,148210,51582],{"class":331},[321,148212,1149],{"class":380},[321,148214,12642],{"class":331},[321,148216,148160],{"class":380},[321,148218,51582],{"class":331},[321,148220,643],{"class":380},[321,148222,1771],{"class":331},[321,148224,148225],{"class":323,"line":1407},[321,148226,33391],{"class":331},[19,148228,148229],{},"读取并绘图：",[312,148231,148233],{"className":30523,"code":148232,"language":30525,"meta":30,"style":30},"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",[318,148234,148235,148241,148255,148265,148269,148301,148314,148318,148326,148335,148344,148348,148360,148369,148378,148387,148391,148399,148403,148420,148437,148441,148458,148474,148478],{"__ignoreMap":30},[321,148236,148237,148239],{"class":323,"line":324},[321,148238,30537],{"class":327},[321,148240,147236],{"class":331},[321,148242,148243,148245,148247,148249,148251,148253],{"class":323,"line":167},[321,148244,30882],{"class":327},[321,148246,147524],{"class":331},[321,148248,30537],{"class":327},[321,148250,147529],{"class":331},[321,148252,31528],{"class":327},[321,148254,147534],{"class":331},[321,148256,148257,148259,148261,148263],{"class":323,"line":200},[321,148258,30882],{"class":327},[321,148260,147383],{"class":331},[321,148262,30537],{"class":327},[321,148264,147388],{"class":331},[321,148266,148267],{"class":323,"line":1401},[321,148268,2606],{"emptyLinePlaceholder":251},[321,148270,148271,148273,148275,148277,148280,148282,148284,148286,148288,148290,148292,148294,148296,148299],{"class":323,"line":1407},[321,148272,107978],{"class":327},[321,148274,146936],{"class":380},[321,148276,332],{"class":331},[321,148278,148279],{"class":436},"\"sales.json\"",[321,148281,12642],{"class":331},[321,148283,146946],{"class":436},[321,148285,12642],{"class":331},[321,148287,146951],{"class":5423},[321,148289,377],{"class":327},[321,148291,146956],{"class":436},[321,148293,13921],{"class":331},[321,148295,31528],{"class":327},[321,148297,148298],{"class":5423}," file",[321,148300,3945],{"class":331},[321,148302,148303,148305,148307,148310,148312],{"class":323,"line":1421},[321,148304,101566],{"class":331},[321,148306,377],{"class":327},[321,148308,148309],{"class":331}," json.load(",[321,148311,45499],{"class":5423},[321,148313,338],{"class":331},[321,148315,148316],{"class":323,"line":1427},[321,148317,2606],{"emptyLinePlaceholder":251},[321,148319,148320,148322,148324],{"class":323,"line":1518},[321,148321,147945],{"class":331},[321,148323,377],{"class":327},[321,148325,51983],{"class":331},[321,148327,148328,148331,148333],{"class":323,"line":1524},[321,148329,148330],{"class":331},"online_sales ",[321,148332,377],{"class":327},[321,148334,51983],{"class":331},[321,148336,148337,148340,148342],{"class":323,"line":1536},[321,148338,148339],{"class":331},"offline_sales ",[321,148341,377],{"class":327},[321,148343,51983],{"class":331},[321,148345,148346],{"class":323,"line":1818},[321,148347,2606],{"emptyLinePlaceholder":251},[321,148349,148350,148352,148355,148357],{"class":323,"line":1823},[321,148351,3231],{"class":327},[321,148353,148354],{"class":331}," item ",[321,148356,26188],{"class":327},[321,148358,148359],{"class":331}," data:\n",[321,148361,148362,148365,148367],{"class":323,"line":1829},[321,148363,148364],{"class":331},"    dates.append(item[",[321,148366,148142],{"class":436},[321,148368,4863],{"class":331},[321,148370,148371,148374,148376],{"class":323,"line":1834},[321,148372,148373],{"class":331},"    online_sales.append(item[",[321,148375,148151],{"class":436},[321,148377,4863],{"class":331},[321,148379,148380,148383,148385],{"class":323,"line":1848},[321,148381,148382],{"class":331},"    offline_sales.append(item[",[321,148384,148160],{"class":436},[321,148386,4863],{"class":331},[321,148388,148389],{"class":323,"line":1853},[321,148390,2606],{"emptyLinePlaceholder":251},[321,148392,148393,148395,148397],{"class":323,"line":1859},[321,148394,147397],{"class":331},[321,148396,377],{"class":327},[321,148398,147402],{"class":331},[321,148400,148401],{"class":323,"line":1880},[321,148402,147986],{"class":331},[321,148404,148405,148407,148409,148412,148414,148416,148418],{"class":323,"line":1885},[321,148406,147437],{"class":331},[321,148408,147993],{"class":436},[321,148410,148411],{"class":331},", online_sales, ",[321,148413,147890],{"class":5423},[321,148415,377],{"class":327},[321,148417,31621],{"class":380},[321,148419,338],{"class":331},[321,148421,148422,148424,148426,148429,148431,148433,148435],{"class":323,"line":1899},[321,148423,147437],{"class":331},[321,148425,148031],{"class":436},[321,148427,148428],{"class":331},", offline_sales, ",[321,148430,147890],{"class":5423},[321,148432,377],{"class":327},[321,148434,31621],{"class":380},[321,148436,338],{"class":331},[321,148438,148439],{"class":323,"line":1904},[321,148440,147613],{"class":331},[321,148442,148443,148445,148447,148449,148451,148453,148456],{"class":323,"line":1933},[321,148444,147618],{"class":5423},[321,148446,377],{"class":327},[321,148448,147623],{"class":331},[321,148450,51552],{"class":5423},[321,148452,377],{"class":327},[321,148454,148455],{"class":436},"\"销售趋势\"",[321,148457,38192],{"class":331},[321,148459,148460,148462,148464,148466,148468,148470,148472],{"class":323,"line":1938},[321,148461,147674],{"class":5423},[321,148463,377],{"class":327},[321,148465,147679],{"class":331},[321,148467,147682],{"class":5423},[321,148469,377],{"class":327},[321,148471,147687],{"class":436},[321,148473,38192],{"class":331},[321,148475,148476],{"class":323,"line":1955},[321,148477,338],{"class":331},[321,148479,148480,148482,148484],{"class":323,"line":1960},[321,148481,147469],{"class":331},[321,148483,148109],{"class":436},[321,148485,338],{"class":331},[14,148487,148489],{"id":148488},"_109-数据清洗","10.9 数据清洗",[19,148491,148492],{},"真实数据经常不整齐，需要清洗。",[19,148494,148495],{},"常见问题：",[151,148497,148498,148501,148504,148507],{},[154,148499,148500],{},"数字是字符串。",[154,148502,148503],{},"字段缺失。",[154,148505,148506],{},"空值。",[154,148508,148509],{},"日期格式不统一。",[19,148511,15342],{},[312,148513,148515],{"className":30523,"code":148514,"language":30525,"meta":30,"style":30},"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",[318,148516,148517,148526,148549,148569,148590,148594,148598,148606,148615,148619,148630,148644,148653,148658,148662,148670,148680,148684,148691],{"__ignoreMap":30},[321,148518,148519,148522,148524],{"class":323,"line":324},[321,148520,148521],{"class":331},"raw_data ",[321,148523,377],{"class":327},[321,148525,55592],{"class":331},[321,148527,148528,148531,148533,148535,148537,148539,148542,148544,148547],{"class":323,"line":167},[321,148529,148530],{"class":331},"    {",[321,148532,148142],{"class":436},[321,148534,51582],{"class":331},[321,148536,147410],{"class":436},[321,148538,12642],{"class":331},[321,148540,148541],{"class":436},"\"sales\"",[321,148543,51582],{"class":331},[321,148545,148546],{"class":436},"\"100\"",[321,148548,5136],{"class":331},[321,148550,148551,148553,148555,148557,148559,148561,148563,148565,148567],{"class":323,"line":200},[321,148552,148530],{"class":331},[321,148554,148142],{"class":436},[321,148556,51582],{"class":331},[321,148558,147415],{"class":436},[321,148560,12642],{"class":331},[321,148562,148541],{"class":436},[321,148564,51582],{"class":331},[321,148566,7859],{"class":436},[321,148568,5136],{"class":331},[321,148570,148571,148573,148575,148577,148579,148581,148583,148585,148588],{"class":323,"line":1401},[321,148572,148530],{"class":331},[321,148574,148142],{"class":436},[321,148576,51582],{"class":331},[321,148578,147420],{"class":436},[321,148580,12642],{"class":331},[321,148582,148541],{"class":436},[321,148584,51582],{"class":331},[321,148586,148587],{"class":436},"\"120\"",[321,148589,5136],{"class":331},[321,148591,148592],{"class":323,"line":1407},[321,148593,33391],{"class":331},[321,148595,148596],{"class":323,"line":1421},[321,148597,2606],{"emptyLinePlaceholder":251},[321,148599,148600,148602,148604],{"class":323,"line":1427},[321,148601,147945],{"class":331},[321,148603,377],{"class":327},[321,148605,51983],{"class":331},[321,148607,148608,148611,148613],{"class":323,"line":1518},[321,148609,148610],{"class":331},"sales ",[321,148612,377],{"class":327},[321,148614,51983],{"class":331},[321,148616,148617],{"class":323,"line":1524},[321,148618,2606],{"emptyLinePlaceholder":251},[321,148620,148621,148623,148625,148627],{"class":323,"line":1536},[321,148622,3231],{"class":327},[321,148624,148354],{"class":331},[321,148626,26188],{"class":327},[321,148628,148629],{"class":331}," raw_data:\n",[321,148631,148632,148635,148637,148640,148642],{"class":323,"line":1818},[321,148633,148634],{"class":331},"    value ",[321,148636,377],{"class":327},[321,148638,148639],{"class":331}," item.get(",[321,148641,148541],{"class":436},[321,148643,338],{"class":331},[321,148645,148646,148648,148650],{"class":323,"line":1823},[321,148647,3307],{"class":327},[321,148649,39075],{"class":327},[321,148651,148652],{"class":331}," value:\n",[321,148654,148655],{"class":323,"line":1829},[321,148656,148657],{"class":327},"        continue\n",[321,148659,148660],{"class":323,"line":1834},[321,148661,2606],{"emptyLinePlaceholder":251},[321,148663,148664,148666,148668],{"class":323,"line":1848},[321,148665,148364],{"class":331},[321,148667,148142],{"class":436},[321,148669,4863],{"class":331},[321,148671,148672,148675,148677],{"class":323,"line":1853},[321,148673,148674],{"class":331},"    sales.append(",[321,148676,335],{"class":380},[321,148678,148679],{"class":331},"(value))\n",[321,148681,148682],{"class":323,"line":1859},[321,148683,2606],{"emptyLinePlaceholder":251},[321,148685,148686,148688],{"class":323,"line":1880},[321,148687,30560],{"class":380},[321,148689,148690],{"class":331},"(dates)\n",[321,148692,148693,148695],{"class":323,"line":1885},[321,148694,30560],{"class":380},[321,148696,148697],{"class":331},"(sales)\n",[14,148699,148701],{"id":148700},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[312,148703,148705],{"className":30523,"code":148704,"language":30525,"meta":30,"style":30},"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",[318,148706,148707,148721,148731,148735,148743,148764,148786,148808,148830,148852,148856,148860,148882,148903,148907,148915,148919,148923,148933,148942,148952,148968,148972,148976,148993,149009,149025,149041,149051,149055],{"__ignoreMap":30},[321,148708,148709,148711,148713,148715,148717,148719],{"class":323,"line":324},[321,148710,30882],{"class":327},[321,148712,147524],{"class":331},[321,148714,30537],{"class":327},[321,148716,147529],{"class":331},[321,148718,31528],{"class":327},[321,148720,147534],{"class":331},[321,148722,148723,148725,148727,148729],{"class":323,"line":167},[321,148724,30882],{"class":327},[321,148726,147383],{"class":331},[321,148728,30537],{"class":327},[321,148730,147388],{"class":331},[321,148732,148733],{"class":323,"line":200},[321,148734,2606],{"emptyLinePlaceholder":251},[321,148736,148737,148739,148741],{"class":323,"line":1401},[321,148738,148610],{"class":331},[321,148740,377],{"class":327},[321,148742,55592],{"class":331},[321,148744,148745,148747,148749,148751,148754,148756,148758,148760,148762],{"class":323,"line":1407},[321,148746,148530],{"class":331},[321,148748,148142],{"class":436},[321,148750,51582],{"class":331},[321,148752,148753],{"class":436},"\"2024-10-01\"",[321,148755,12642],{"class":331},[321,148757,84229],{"class":436},[321,148759,51582],{"class":331},[321,148761,92168],{"class":380},[321,148763,5136],{"class":331},[321,148765,148766,148768,148770,148772,148775,148777,148779,148781,148784],{"class":323,"line":1421},[321,148767,148530],{"class":331},[321,148769,148142],{"class":436},[321,148771,51582],{"class":331},[321,148773,148774],{"class":436},"\"2024-10-02\"",[321,148776,12642],{"class":331},[321,148778,84229],{"class":436},[321,148780,51582],{"class":331},[321,148782,148783],{"class":380},"1800",[321,148785,5136],{"class":331},[321,148787,148788,148790,148792,148794,148797,148799,148801,148803,148806],{"class":323,"line":1427},[321,148789,148530],{"class":331},[321,148791,148142],{"class":436},[321,148793,51582],{"class":331},[321,148795,148796],{"class":436},"\"2024-10-03\"",[321,148798,12642],{"class":331},[321,148800,84229],{"class":436},[321,148802,51582],{"class":331},[321,148804,148805],{"class":380},"1500",[321,148807,5136],{"class":331},[321,148809,148810,148812,148814,148816,148819,148821,148823,148825,148828],{"class":323,"line":1518},[321,148811,148530],{"class":331},[321,148813,148142],{"class":436},[321,148815,51582],{"class":331},[321,148817,148818],{"class":436},"\"2024-10-04\"",[321,148820,12642],{"class":331},[321,148822,84229],{"class":436},[321,148824,51582],{"class":331},[321,148826,148827],{"class":380},"2100",[321,148829,5136],{"class":331},[321,148831,148832,148834,148836,148838,148841,148843,148845,148847,148850],{"class":323,"line":1524},[321,148833,148530],{"class":331},[321,148835,148142],{"class":436},[321,148837,51582],{"class":331},[321,148839,148840],{"class":436},"\"2024-10-05\"",[321,148842,12642],{"class":331},[321,148844,84229],{"class":436},[321,148846,51582],{"class":331},[321,148848,148849],{"class":380},"2600",[321,148851,5136],{"class":331},[321,148853,148854],{"class":323,"line":1536},[321,148855,33391],{"class":331},[321,148857,148858],{"class":323,"line":1818},[321,148859,2606],{"emptyLinePlaceholder":251},[321,148861,148862,148864,148866,148869,148871,148873,148875,148877,148879],{"class":323,"line":1823},[321,148863,147945],{"class":331},[321,148865,377],{"class":327},[321,148867,148868],{"class":331}," [item[",[321,148870,148142],{"class":436},[321,148872,4649],{"class":331},[321,148874,3231],{"class":327},[321,148876,148354],{"class":331},[321,148878,26188],{"class":327},[321,148880,148881],{"class":331}," sales]\n",[321,148883,148884,148887,148889,148891,148893,148895,148897,148899,148901],{"class":323,"line":1829},[321,148885,148886],{"class":331},"amounts ",[321,148888,377],{"class":327},[321,148890,148868],{"class":331},[321,148892,84229],{"class":436},[321,148894,4649],{"class":331},[321,148896,3231],{"class":327},[321,148898,148354],{"class":331},[321,148900,26188],{"class":327},[321,148902,148881],{"class":331},[321,148904,148905],{"class":323,"line":1834},[321,148906,2606],{"emptyLinePlaceholder":251},[321,148908,148909,148911,148913],{"class":323,"line":1848},[321,148910,147397],{"class":331},[321,148912,377],{"class":327},[321,148914,147402],{"class":331},[321,148916,148917],{"class":323,"line":1853},[321,148918,147986],{"class":331},[321,148920,148921],{"class":323,"line":1859},[321,148922,147794],{"class":331},[321,148924,148925,148927,148929,148931],{"class":323,"line":1880},[321,148926,147799],{"class":5423},[321,148928,377],{"class":327},[321,148930,147440],{"class":436},[321,148932,31611],{"class":331},[321,148934,148935,148937,148939],{"class":323,"line":1885},[321,148936,147810],{"class":5423},[321,148938,377],{"class":327},[321,148940,148941],{"class":331},"amounts,\n",[321,148943,148944,148946,148948,148950],{"class":323,"line":1899},[321,148945,147839],{"class":5423},[321,148947,377],{"class":327},[321,148949,31621],{"class":380},[321,148951,31611],{"class":331},[321,148953,148954,148956,148958,148960,148962,148964,148966],{"class":323,"line":1904},[321,148955,147850],{"class":5423},[321,148957,377],{"class":327},[321,148959,147855],{"class":331},[321,148961,147858],{"class":5423},[321,148963,377],{"class":327},[321,148965,31621],{"class":380},[321,148967,38192],{"class":331},[321,148969,148970],{"class":323,"line":1933},[321,148971,338],{"class":331},[321,148973,148974],{"class":323,"line":1938},[321,148975,147613],{"class":331},[321,148977,148978,148980,148982,148984,148986,148988,148991],{"class":323,"line":1955},[321,148979,147618],{"class":5423},[321,148981,377],{"class":327},[321,148983,147623],{"class":331},[321,148985,51552],{"class":5423},[321,148987,377],{"class":327},[321,148989,148990],{"class":436},"\"每日销售额\"",[321,148992,38192],{"class":331},[321,148994,148995,148997,148999,149001,149003,149005,149007],{"class":323,"line":1960},[321,148996,147637],{"class":5423},[321,148998,377],{"class":327},[321,149000,147642],{"class":331},[321,149002,79955],{"class":5423},[321,149004,377],{"class":327},[321,149006,147649],{"class":436},[321,149008,38192],{"class":331},[321,149010,149011,149013,149015,149017,149019,149021,149023],{"class":323,"line":1965},[321,149012,147656],{"class":5423},[321,149014,377],{"class":327},[321,149016,147642],{"class":331},[321,149018,79955],{"class":5423},[321,149020,377],{"class":327},[321,149022,147667],{"class":436},[321,149024,38192],{"class":331},[321,149026,149027,149029,149031,149033,149035,149037,149039],{"class":323,"line":1970},[321,149028,147674],{"class":5423},[321,149030,377],{"class":327},[321,149032,147679],{"class":331},[321,149034,147682],{"class":5423},[321,149036,377],{"class":327},[321,149038,147687],{"class":436},[321,149040,38192],{"class":331},[321,149042,149043,149046,149048],{"class":323,"line":1984},[321,149044,149045],{"class":5423},"    datazoom_opts",[321,149047,377],{"class":327},[321,149049,149050],{"class":331},"[opts.DataZoomOpts()],\n",[321,149052,149053],{"class":323,"line":1989},[321,149054,338],{"class":331},[321,149056,149057,149059,149062],{"class":323,"line":2783},[321,149058,147469],{"class":331},[321,149060,149061],{"class":436},"\"daily_sales.html\"",[321,149063,338],{"class":331},[19,149065,149066,149069],{},[318,149067,149068],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149071,149073],{"id":149072},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149075,149076],{},"如果数据结构如下：",[312,149078,149080],{"className":30523,"code":149079,"language":30525,"meta":30,"style":30},"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",[318,149081,149082,149090,149098,149120,149141,149146,149153,149173,149193,149197],{"__ignoreMap":30},[321,149083,149084,149086,149088],{"class":323,"line":324},[321,149085,101803],{"class":331},[321,149087,377],{"class":327},[321,149089,15779],{"class":331},[321,149091,149092,149095],{"class":323,"line":167},[321,149093,149094],{"class":436},"    \"北京\"",[321,149096,149097],{"class":331},": [\n",[321,149099,149100,149102,149104,149106,149109,149111,149114,149116,149118],{"class":323,"line":200},[321,149101,5123],{"class":331},[321,149103,148142],{"class":436},[321,149105,51582],{"class":331},[321,149107,149108],{"class":436},"\"2024-01-01\"",[321,149110,12642],{"class":331},[321,149112,149113],{"class":436},"\"confirm\"",[321,149115,51582],{"class":331},[321,149117,778],{"class":380},[321,149119,5136],{"class":331},[321,149121,149122,149124,149126,149128,149131,149133,149135,149137,149139],{"class":323,"line":1401},[321,149123,5123],{"class":331},[321,149125,148142],{"class":436},[321,149127,51582],{"class":331},[321,149129,149130],{"class":436},"\"2024-01-02\"",[321,149132,12642],{"class":331},[321,149134,149113],{"class":436},[321,149136,51582],{"class":331},[321,149138,830],{"class":380},[321,149140,5136],{"class":331},[321,149142,149143],{"class":323,"line":1407},[321,149144,149145],{"class":331},"    ],\n",[321,149147,149148,149151],{"class":323,"line":1421},[321,149149,149150],{"class":436},"    \"上海\"",[321,149152,149097],{"class":331},[321,149154,149155,149157,149159,149161,149163,149165,149167,149169,149171],{"class":323,"line":1427},[321,149156,5123],{"class":331},[321,149158,148142],{"class":436},[321,149160,51582],{"class":331},[321,149162,149108],{"class":436},[321,149164,12642],{"class":331},[321,149166,149113],{"class":436},[321,149168,51582],{"class":331},[321,149170,727],{"class":380},[321,149172,5136],{"class":331},[321,149174,149175,149177,149179,149181,149183,149185,149187,149189,149191],{"class":323,"line":1518},[321,149176,5123],{"class":331},[321,149178,148142],{"class":436},[321,149180,51582],{"class":331},[321,149182,149130],{"class":436},[321,149184,12642],{"class":331},[321,149186,149113],{"class":436},[321,149188,51582],{"class":331},[321,149190,855],{"class":380},[321,149192,5136],{"class":331},[321,149194,149195],{"class":323,"line":1524},[321,149196,149145],{"class":331},[321,149198,149199],{"class":323,"line":1536},[321,149200,1771],{"class":331},[19,149202,149203],{},"绘制多地区趋势：",[312,149205,149207],{"className":30523,"code":149206,"language":30525,"meta":30,"style":30},"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",[318,149208,149209,149223,149233,149237,149262,149266,149274,149278,149282,149294,149316,149329,149333,149337,149354,149370,149374],{"__ignoreMap":30},[321,149210,149211,149213,149215,149217,149219,149221],{"class":323,"line":324},[321,149212,30882],{"class":327},[321,149214,147524],{"class":331},[321,149216,30537],{"class":327},[321,149218,147529],{"class":331},[321,149220,31528],{"class":327},[321,149222,147534],{"class":331},[321,149224,149225,149227,149229,149231],{"class":323,"line":167},[321,149226,30882],{"class":327},[321,149228,147383],{"class":331},[321,149230,30537],{"class":327},[321,149232,147388],{"class":331},[321,149234,149235],{"class":323,"line":200},[321,149236,2606],{"emptyLinePlaceholder":251},[321,149238,149239,149241,149243,149245,149247,149249,149251,149253,149255,149258,149260],{"class":323,"line":1401},[321,149240,147945],{"class":331},[321,149242,377],{"class":327},[321,149244,148868],{"class":331},[321,149246,148142],{"class":436},[321,149248,4649],{"class":331},[321,149250,3231],{"class":327},[321,149252,148354],{"class":331},[321,149254,26188],{"class":327},[321,149256,149257],{"class":331}," data[",[321,149259,69414],{"class":436},[321,149261,77672],{"class":331},[321,149263,149264],{"class":323,"line":1407},[321,149265,2606],{"emptyLinePlaceholder":251},[321,149267,149268,149270,149272],{"class":323,"line":1421},[321,149269,147397],{"class":331},[321,149271,377],{"class":327},[321,149273,147402],{"class":331},[321,149275,149276],{"class":323,"line":1427},[321,149277,147986],{"class":331},[321,149279,149280],{"class":323,"line":1518},[321,149281,2606],{"emptyLinePlaceholder":251},[321,149283,149284,149286,149289,149291],{"class":323,"line":1524},[321,149285,3231],{"class":327},[321,149287,149288],{"class":331}," city, records ",[321,149290,26188],{"class":327},[321,149292,149293],{"class":331}," data.items():\n",[321,149295,149296,149299,149301,149303,149305,149307,149309,149311,149313],{"class":323,"line":1536},[321,149297,149298],{"class":331},"    values ",[321,149300,377],{"class":327},[321,149302,148868],{"class":331},[321,149304,149113],{"class":436},[321,149306,4649],{"class":331},[321,149308,3231],{"class":327},[321,149310,148354],{"class":331},[321,149312,26188],{"class":327},[321,149314,149315],{"class":331}," records]\n",[321,149317,149318,149321,149323,149325,149327],{"class":323,"line":1818},[321,149319,149320],{"class":331},"    line.add_yaxis(city, values, ",[321,149322,147890],{"class":5423},[321,149324,377],{"class":327},[321,149326,31621],{"class":380},[321,149328,338],{"class":331},[321,149330,149331],{"class":323,"line":1823},[321,149332,2606],{"emptyLinePlaceholder":251},[321,149334,149335],{"class":323,"line":1829},[321,149336,147613],{"class":331},[321,149338,149339,149341,149343,149345,149347,149349,149352],{"class":323,"line":1834},[321,149340,147618],{"class":5423},[321,149342,377],{"class":327},[321,149344,147623],{"class":331},[321,149346,51552],{"class":5423},[321,149348,377],{"class":327},[321,149350,149351],{"class":436},"\"多地区趋势图\"",[321,149353,38192],{"class":331},[321,149355,149356,149358,149360,149362,149364,149366,149368],{"class":323,"line":1848},[321,149357,147674],{"class":5423},[321,149359,377],{"class":327},[321,149361,147679],{"class":331},[321,149363,147682],{"class":5423},[321,149365,377],{"class":327},[321,149367,147687],{"class":436},[321,149369,38192],{"class":331},[321,149371,149372],{"class":323,"line":1853},[321,149373,338],{"class":331},[321,149375,149376,149378,149381],{"class":323,"line":1859},[321,149377,147469],{"class":331},[321,149379,149380],{"class":436},"\"trend.html\"",[321,149382,338],{"class":331},[19,149384,149385],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149387,149389],{"id":149388},"_1012-易错点","10.12 易错点",[151,149391,149392,149398,149404,149414,149420],{},[154,149393,149394,149397],{},[318,149395,149396],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[154,149399,149400,149403],{},[318,149401,149402],{},"render()"," 生成的是 HTML，不是图片。",[154,149405,149406,149407,149410,149411,28530],{},"JSON 字符串用 ",[318,149408,149409],{},"json.loads()","，JSON 文件用 ",[318,149412,149413],{},"json.load()",[154,149415,149416,149417,28530],{},"中文 JSON 保存时加 ",[318,149418,149419],{},"ensure_ascii=False",[154,149421,149422],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149424,149426],{"id":149425},"_1013-本章练习","10.13 本章练习",[151,149428,149429,149432,149435,149438,149441],{},[154,149430,149431],{},"安装 pyecharts 并生成第一个折线图。",[154,149433,149434],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[154,149436,149437],{},"绘制两条折线，对比线上和线下销售额。",[154,149439,149440],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[154,149442,149443],{},"对含有空值的销售数据进行清洗后再绘图。",[5333,149445,149446],{},"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":30,"searchDepth":167,"depth":167,"links":149448},[149449,149450,149451,149452,149453,149454,149455,149456,149457,149458,149459,149460,149461],{"id":147065,"depth":167,"text":147066},{"id":147140,"depth":167,"text":147141},{"id":147319,"depth":167,"text":147320},{"id":147370,"depth":167,"text":147371},{"id":147504,"depth":167,"text":147505},{"id":147780,"depth":167,"text":147781},{"id":147906,"depth":167,"text":147907},{"id":148117,"depth":167,"text":148118},{"id":148488,"depth":167,"text":148489},{"id":148700,"depth":167,"text":148701},{"id":149072,"depth":167,"text":149073},{"id":149388,"depth":167,"text":149389},{"id":149425,"depth":167,"text":149426},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147057,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149468,"title":149469,"body":149470,"description":23584,"extension":249,"meta":151830,"navigation":251,"path":151831,"seo":151832,"stem":151833,"__hash__":151834},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149471,"toc":151807},[149472,149475,149479,149482,149485,149561,149564,149655,149658,149662,149665,149709,149722,149726,149729,149796,149799,149803,149806,149890,149898,149902,149907,150048,150051,150062,150068,150074,150188,150192,150195,150198,150451,150454,150458,150461,150565,150568,150572,150723,150727,150734,150847,150851,150854,150960,150963,150967,150970,151001,151004,151109,151112,151116,151120,151130,151198,151202,151209,151273,151276,151280,151286,151382,151391,151395,151719,151728,151732,151760,151764,151804],[10,149473,149469],{"id":149474},"_11-面向对象基础",[14,149476,149478],{"id":149477},"_111-什么是面向对象","11.1 什么是面向对象",[19,149480,149481],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149483,149484],{},"面向过程：",[312,149486,149488],{"className":30523,"code":149487,"language":30525,"meta":30,"style":30},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[318,149489,149490,149499,149507,149511,149521,149552,149556],{"__ignoreMap":30},[321,149491,149492,149494,149496],{"class":323,"line":324},[321,149493,146681],{"class":331},[321,149495,377],{"class":327},[321,149497,149498],{"class":436}," \"小明\"\n",[321,149500,149501,149503,149505],{"class":323,"line":167},[321,149502,146691],{"class":331},[321,149504,377],{"class":327},[321,149506,146696],{"class":380},[321,149508,149509],{"class":323,"line":200},[321,149510,2606],{"emptyLinePlaceholder":251},[321,149512,149513,149515,149518],{"class":323,"line":1401},[321,149514,32092],{"class":327},[321,149516,149517],{"class":2169}," introduce",[321,149519,149520],{"class":331},"(name, age):\n",[321,149522,149523,149525,149527,149529,149532,149534,149536,149538,149541,149543,149545,149547,149550],{"class":323,"line":1407},[321,149524,31444],{"class":380},[321,149526,332],{"class":331},[321,149528,384],{"class":327},[321,149530,149531],{"class":436},"\"我叫",[321,149533,1228],{"class":380},[321,149535,79955],{"class":331},[321,149537,1278],{"class":380},[321,149539,149540],{"class":436},"，今年",[321,149542,1228],{"class":380},[321,149544,70366],{"class":331},[321,149546,1278],{"class":380},[321,149548,149549],{"class":436},"岁\"",[321,149551,338],{"class":331},[321,149553,149554],{"class":323,"line":1421},[321,149555,2606],{"emptyLinePlaceholder":251},[321,149557,149558],{"class":323,"line":1427},[321,149559,149560],{"class":331},"introduce(name, age)\n",[19,149562,149563],{},"面向对象：",[312,149565,149567],{"className":30523,"code":149566,"language":30525,"meta":30,"style":30},"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",[318,149568,149569,149577,149585,149614,149618,149622,149632,149641,149650],{"__ignoreMap":30},[321,149570,149571,149573,149575],{"class":323,"line":324},[321,149572,14901],{"class":327},[321,149574,8105],{"class":2169},[321,149576,3945],{"class":331},[321,149578,149579,149581,149583],{"class":323,"line":167},[321,149580,30946],{"class":327},[321,149582,149517],{"class":2169},[321,149584,30952],{"class":331},[321,149586,149587,149589,149591,149593,149595,149598,149600,149602,149604,149606,149608,149610,149612],{"class":323,"line":200},[321,149588,32596],{"class":380},[321,149590,332],{"class":331},[321,149592,384],{"class":327},[321,149594,149531],{"class":436},[321,149596,149597],{"class":380},"{self",[321,149599,80446],{"class":331},[321,149601,1278],{"class":380},[321,149603,149540],{"class":436},[321,149605,149597],{"class":380},[321,149607,80458],{"class":331},[321,149609,1278],{"class":380},[321,149611,149549],{"class":436},[321,149613,338],{"class":331},[321,149615,149616],{"class":323,"line":1401},[321,149617,2606],{"emptyLinePlaceholder":251},[321,149619,149620],{"class":323,"line":1407},[321,149621,2606],{"emptyLinePlaceholder":251},[321,149623,149624,149627,149629],{"class":323,"line":1421},[321,149625,149626],{"class":331},"student ",[321,149628,377],{"class":327},[321,149630,149631],{"class":331}," Student()\n",[321,149633,149634,149637,149639],{"class":323,"line":1427},[321,149635,149636],{"class":331},"student.name ",[321,149638,377],{"class":327},[321,149640,149498],{"class":436},[321,149642,149643,149646,149648],{"class":323,"line":1518},[321,149644,149645],{"class":331},"student.age ",[321,149647,377],{"class":327},[321,149649,146696],{"class":380},[321,149651,149652],{"class":323,"line":1524},[321,149653,149654],{"class":331},"student.introduce()\n",[19,149656,149657],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149659,149661],{"id":149660},"_112-类和对象","11.2 类和对象",[19,149663,149664],{},"类是模板，对象是根据模板创建出来的具体实例。",[312,149666,149668],{"className":30523,"code":149667,"language":30525,"meta":30,"style":30},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[318,149669,149670,149678,149683,149687,149691,149700],{"__ignoreMap":30},[321,149671,149672,149674,149676],{"class":323,"line":324},[321,149673,14901],{"class":327},[321,149675,8105],{"class":2169},[321,149677,3945],{"class":331},[321,149679,149680],{"class":323,"line":167},[321,149681,149682],{"class":327},"    pass\n",[321,149684,149685],{"class":323,"line":200},[321,149686,2606],{"emptyLinePlaceholder":251},[321,149688,149689],{"class":323,"line":1401},[321,149690,2606],{"emptyLinePlaceholder":251},[321,149692,149693,149696,149698],{"class":323,"line":1407},[321,149694,149695],{"class":331},"student1 ",[321,149697,377],{"class":327},[321,149699,149631],{"class":331},[321,149701,149702,149705,149707],{"class":323,"line":1421},[321,149703,149704],{"class":331},"student2 ",[321,149706,377],{"class":327},[321,149708,149631],{"class":331},[19,149710,149711,149714,149715,101163,149718,149721],{},[318,149712,149713],{},"Student"," 是类，",[318,149716,149717],{},"student1",[318,149719,149720],{},"student2"," 是对象。",[14,149723,149725],{"id":149724},"_113-属性","11.3 属性",[19,149727,149728],{},"属性是对象保存的数据。",[312,149730,149732],{"className":30523,"code":149731,"language":30525,"meta":30,"style":30},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[318,149733,149734,149742,149746,149750,149754,149762,149770,149778,149782,149789],{"__ignoreMap":30},[321,149735,149736,149738,149740],{"class":323,"line":324},[321,149737,14901],{"class":327},[321,149739,8105],{"class":2169},[321,149741,3945],{"class":331},[321,149743,149744],{"class":323,"line":167},[321,149745,149682],{"class":327},[321,149747,149748],{"class":323,"line":200},[321,149749,2606],{"emptyLinePlaceholder":251},[321,149751,149752],{"class":323,"line":1401},[321,149753,2606],{"emptyLinePlaceholder":251},[321,149755,149756,149758,149760],{"class":323,"line":1407},[321,149757,149626],{"class":331},[321,149759,377],{"class":327},[321,149761,149631],{"class":331},[321,149763,149764,149766,149768],{"class":323,"line":1421},[321,149765,149636],{"class":331},[321,149767,377],{"class":327},[321,149769,149498],{"class":436},[321,149771,149772,149774,149776],{"class":323,"line":1427},[321,149773,149645],{"class":331},[321,149775,377],{"class":327},[321,149777,146696],{"class":380},[321,149779,149780],{"class":323,"line":1518},[321,149781,2606],{"emptyLinePlaceholder":251},[321,149783,149784,149786],{"class":323,"line":1524},[321,149785,30560],{"class":380},[321,149787,149788],{"class":331},"(student.name)\n",[321,149790,149791,149793],{"class":323,"line":1536},[321,149792,30560],{"class":380},[321,149794,149795],{"class":331},"(student.age)\n",[19,149797,149798],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149800,149802],{"id":149801},"_114-方法","11.4 方法",[19,149804,149805],{},"类中的函数叫方法。",[312,149807,149808],{"className":30523,"code":149566,"language":30525,"meta":30,"style":30},[318,149809,149810,149818,149826,149854,149858,149862,149870,149878,149886],{"__ignoreMap":30},[321,149811,149812,149814,149816],{"class":323,"line":324},[321,149813,14901],{"class":327},[321,149815,8105],{"class":2169},[321,149817,3945],{"class":331},[321,149819,149820,149822,149824],{"class":323,"line":167},[321,149821,30946],{"class":327},[321,149823,149517],{"class":2169},[321,149825,30952],{"class":331},[321,149827,149828,149830,149832,149834,149836,149838,149840,149842,149844,149846,149848,149850,149852],{"class":323,"line":200},[321,149829,32596],{"class":380},[321,149831,332],{"class":331},[321,149833,384],{"class":327},[321,149835,149531],{"class":436},[321,149837,149597],{"class":380},[321,149839,80446],{"class":331},[321,149841,1278],{"class":380},[321,149843,149540],{"class":436},[321,149845,149597],{"class":380},[321,149847,80458],{"class":331},[321,149849,1278],{"class":380},[321,149851,149549],{"class":436},[321,149853,338],{"class":331},[321,149855,149856],{"class":323,"line":1401},[321,149857,2606],{"emptyLinePlaceholder":251},[321,149859,149860],{"class":323,"line":1407},[321,149861,2606],{"emptyLinePlaceholder":251},[321,149863,149864,149866,149868],{"class":323,"line":1421},[321,149865,149626],{"class":331},[321,149867,377],{"class":327},[321,149869,149631],{"class":331},[321,149871,149872,149874,149876],{"class":323,"line":1427},[321,149873,149636],{"class":331},[321,149875,377],{"class":327},[321,149877,149498],{"class":436},[321,149879,149880,149882,149884],{"class":323,"line":1518},[321,149881,149645],{"class":331},[321,149883,377],{"class":327},[321,149885,146696],{"class":380},[321,149887,149888],{"class":323,"line":1524},[321,149889,149654],{"class":331},[19,149891,149892,149894,149895,149897],{},[318,149893,30968],{}," 表示当前对象。调用方法时不需要手动传入 ",[318,149896,30968],{},"，Python 会自动传。",[14,149899,149901],{"id":149900},"_115-构造方法__init__","11.5 构造方法__init__",[19,149903,149904,149906],{},[318,149905,30974],{}," 在对象创建时自动执行，用于初始化属性。",[312,149908,149910],{"className":30523,"code":149909,"language":30525,"meta":30,"style":30},"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",[318,149911,149912,149920,149929,149941,149953,149964,149968,149976,150014,150018,150022,150044],{"__ignoreMap":30},[321,149913,149914,149916,149918],{"class":323,"line":324},[321,149915,14901],{"class":327},[321,149917,8105],{"class":2169},[321,149919,3945],{"class":331},[321,149921,149922,149924,149926],{"class":323,"line":167},[321,149923,30946],{"class":327},[321,149925,30949],{"class":380},[321,149927,149928],{"class":331},"(self, name, age, score):\n",[321,149930,149931,149933,149936,149938],{"class":323,"line":200},[321,149932,30990],{"class":380},[321,149934,149935],{"class":331},".name ",[321,149937,377],{"class":327},[321,149939,149940],{"class":331}," name\n",[321,149942,149943,149945,149948,149950],{"class":323,"line":1401},[321,149944,30990],{"class":380},[321,149946,149947],{"class":331},".age ",[321,149949,377],{"class":327},[321,149951,149952],{"class":331}," age\n",[321,149954,149955,149957,149960,149962],{"class":323,"line":1407},[321,149956,30990],{"class":380},[321,149958,149959],{"class":331},".score ",[321,149961,377],{"class":327},[321,149963,1785],{"class":331},[321,149965,149966],{"class":323,"line":1421},[321,149967,2606],{"emptyLinePlaceholder":251},[321,149969,149970,149972,149974],{"class":323,"line":1427},[321,149971,30946],{"class":327},[321,149973,149517],{"class":2169},[321,149975,30952],{"class":331},[321,149977,149978,149980,149982,149984,149986,149988,149990,149992,149994,149996,149998,150000,150003,150005,150008,150010,150012],{"class":323,"line":1518},[321,149979,32596],{"class":380},[321,149981,332],{"class":331},[321,149983,384],{"class":327},[321,149985,149531],{"class":436},[321,149987,149597],{"class":380},[321,149989,80446],{"class":331},[321,149991,1278],{"class":380},[321,149993,149540],{"class":436},[321,149995,149597],{"class":380},[321,149997,80458],{"class":331},[321,149999,1278],{"class":380},[321,150001,150002],{"class":436},"岁，成绩",[321,150004,149597],{"class":380},[321,150006,150007],{"class":331},".score",[321,150009,1278],{"class":380},[321,150011,583],{"class":436},[321,150013,338],{"class":331},[321,150015,150016],{"class":323,"line":1524},[321,150017,2606],{"emptyLinePlaceholder":251},[321,150019,150020],{"class":323,"line":1536},[321,150021,2606],{"emptyLinePlaceholder":251},[321,150023,150024,150026,150028,150031,150034,150036,150038,150040,150042],{"class":323,"line":1818},[321,150025,149626],{"class":331},[321,150027,377],{"class":327},[321,150029,150030],{"class":331}," Student(",[321,150032,150033],{"class":436},"\"小明\"",[321,150035,12642],{"class":331},[321,150037,982],{"class":380},[321,150039,12642],{"class":331},[321,150041,1321],{"class":380},[321,150043,338],{"class":331},[321,150045,150046],{"class":323,"line":1823},[321,150047,149654],{"class":331},[19,150049,150050],{},"构造方法的好处：",[151,150052,150053,150056,150059],{},[154,150054,150055],{},"创建对象时必须提供必要数据。",[154,150057,150058],{},"属性初始化集中，不容易漏。",[154,150060,150061],{},"对象状态更完整。",[14,150063,150065,150066],{"id":150064},"_116-str","11.6 ",[481,150067,1506],{},[19,150069,150070,150071,28530],{},"直接打印对象时，默认输出不直观。可以定义 ",[318,150072,150073],{},"__str__",[312,150075,150077],{"className":30523,"code":150076,"language":30525,"meta":30,"style":30},"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",[318,150078,150079,150087,150096,150106,150116,150120,150129,150157,150161,150165,150181],{"__ignoreMap":30},[321,150080,150081,150083,150085],{"class":323,"line":324},[321,150082,14901],{"class":327},[321,150084,8105],{"class":2169},[321,150086,3945],{"class":331},[321,150088,150089,150091,150093],{"class":323,"line":167},[321,150090,30946],{"class":327},[321,150092,30949],{"class":380},[321,150094,150095],{"class":331},"(self, name, age):\n",[321,150097,150098,150100,150102,150104],{"class":323,"line":200},[321,150099,30990],{"class":380},[321,150101,149935],{"class":331},[321,150103,377],{"class":327},[321,150105,149940],{"class":331},[321,150107,150108,150110,150112,150114],{"class":323,"line":1401},[321,150109,30990],{"class":380},[321,150111,149947],{"class":331},[321,150113,377],{"class":327},[321,150115,149952],{"class":331},[321,150117,150118],{"class":323,"line":1407},[321,150119,2606],{"emptyLinePlaceholder":251},[321,150121,150122,150124,150127],{"class":323,"line":1421},[321,150123,30946],{"class":327},[321,150125,150126],{"class":380}," __str__",[321,150128,30952],{"class":331},[321,150130,150131,150133,150136,150139,150141,150143,150145,150148,150150,150152,150154],{"class":323,"line":1427},[321,150132,14959],{"class":327},[321,150134,150135],{"class":327}," f",[321,150137,150138],{"class":436},"\"Student(name=",[321,150140,149597],{"class":380},[321,150142,80446],{"class":331},[321,150144,1278],{"class":380},[321,150146,150147],{"class":436},", age=",[321,150149,149597],{"class":380},[321,150151,80458],{"class":331},[321,150153,1278],{"class":380},[321,150155,150156],{"class":436},")\"\n",[321,150158,150159],{"class":323,"line":1518},[321,150160,2606],{"emptyLinePlaceholder":251},[321,150162,150163],{"class":323,"line":1524},[321,150164,2606],{"emptyLinePlaceholder":251},[321,150166,150167,150169,150171,150173,150175,150177,150179],{"class":323,"line":1536},[321,150168,149626],{"class":331},[321,150170,377],{"class":327},[321,150172,150030],{"class":331},[321,150174,150033],{"class":436},[321,150176,12642],{"class":331},[321,150178,982],{"class":380},[321,150180,338],{"class":331},[321,150182,150183,150185],{"class":323,"line":1818},[321,150184,30560],{"class":380},[321,150186,150187],{"class":331},"(student)\n",[14,150189,150191],{"id":150190},"_117-封装","11.7 封装",[19,150193,150194],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150196,150197],{},"Python 中以双下划线开头的属性通常视为私有属性。",[312,150199,150201],{"className":30523,"code":150200,"language":30525,"meta":30,"style":30},"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",[318,150202,150203,150212,150221,150233,150245,150249,150258,150267,150271,150281,150294,150305,150310,150321,150325,150334,150346,150357,150361,150374,150385,150389,150400,150404,150408,150426,150435,150444],{"__ignoreMap":30},[321,150204,150205,150207,150210],{"class":323,"line":324},[321,150206,14901],{"class":327},[321,150208,150209],{"class":2169}," Account",[321,150211,3945],{"class":331},[321,150213,150214,150216,150218],{"class":323,"line":167},[321,150215,30946],{"class":327},[321,150217,30949],{"class":380},[321,150219,150220],{"class":331},"(self, owner, balance):\n",[321,150222,150223,150225,150228,150230],{"class":323,"line":200},[321,150224,30990],{"class":380},[321,150226,150227],{"class":331},".owner ",[321,150229,377],{"class":327},[321,150231,150232],{"class":331}," owner\n",[321,150234,150235,150237,150240,150242],{"class":323,"line":1401},[321,150236,30990],{"class":380},[321,150238,150239],{"class":331},".__balance ",[321,150241,377],{"class":327},[321,150243,150244],{"class":331}," balance\n",[321,150246,150247],{"class":323,"line":1407},[321,150248,2606],{"emptyLinePlaceholder":251},[321,150250,150251,150253,150256],{"class":323,"line":1421},[321,150252,30946],{"class":327},[321,150254,150255],{"class":2169}," get_balance",[321,150257,30952],{"class":331},[321,150259,150260,150262,150264],{"class":323,"line":1427},[321,150261,14959],{"class":327},[321,150263,39018],{"class":380},[321,150265,150266],{"class":331},".__balance\n",[321,150268,150269],{"class":323,"line":1518},[321,150270,2606],{"emptyLinePlaceholder":251},[321,150272,150273,150275,150278],{"class":323,"line":1524},[321,150274,30946],{"class":327},[321,150276,150277],{"class":2169}," deposit",[321,150279,150280],{"class":331},"(self, money):\n",[321,150282,150283,150285,150288,150290,150292],{"class":323,"line":1536},[321,150284,2703],{"class":327},[321,150286,150287],{"class":331}," money ",[321,150289,1794],{"class":327},[321,150291,4299],{"class":380},[321,150293,3945],{"class":331},[321,150295,150296,150298,150300,150303],{"class":323,"line":1818},[321,150297,34795],{"class":380},[321,150299,332],{"class":331},[321,150301,150302],{"class":436},"\"存款金额必须大于0\"",[321,150304,338],{"class":331},[321,150306,150307],{"class":323,"line":1823},[321,150308,150309],{"class":327},"            return\n",[321,150311,150312,150314,150316,150318],{"class":323,"line":1829},[321,150313,30990],{"class":380},[321,150315,150239],{"class":331},[321,150317,9684],{"class":327},[321,150319,150320],{"class":331}," money\n",[321,150322,150323],{"class":323,"line":1834},[321,150324,2606],{"emptyLinePlaceholder":251},[321,150326,150327,150329,150332],{"class":323,"line":1848},[321,150328,30946],{"class":327},[321,150330,150331],{"class":2169}," withdraw",[321,150333,150280],{"class":331},[321,150335,150336,150338,150340,150342,150344],{"class":323,"line":1853},[321,150337,2703],{"class":327},[321,150339,150287],{"class":331},[321,150341,1794],{"class":327},[321,150343,4299],{"class":380},[321,150345,3945],{"class":331},[321,150347,150348,150350,150352,150355],{"class":323,"line":1859},[321,150349,34795],{"class":380},[321,150351,332],{"class":331},[321,150353,150354],{"class":436},"\"取款金额必须大于0\"",[321,150356,338],{"class":331},[321,150358,150359],{"class":323,"line":1880},[321,150360,150309],{"class":327},[321,150362,150363,150365,150367,150369,150371],{"class":323,"line":1885},[321,150364,2703],{"class":327},[321,150366,150287],{"class":331},[321,150368,1292],{"class":327},[321,150370,39018],{"class":380},[321,150372,150373],{"class":331},".__balance:\n",[321,150375,150376,150378,150380,150383],{"class":323,"line":1899},[321,150377,34795],{"class":380},[321,150379,332],{"class":331},[321,150381,150382],{"class":436},"\"余额不足\"",[321,150384,338],{"class":331},[321,150386,150387],{"class":323,"line":1904},[321,150388,150309],{"class":327},[321,150390,150391,150393,150395,150398],{"class":323,"line":1933},[321,150392,30990],{"class":380},[321,150394,150239],{"class":331},[321,150396,150397],{"class":327},"-=",[321,150399,150320],{"class":331},[321,150401,150402],{"class":323,"line":1938},[321,150403,2606],{"emptyLinePlaceholder":251},[321,150405,150406],{"class":323,"line":1955},[321,150407,2606],{"emptyLinePlaceholder":251},[321,150409,150410,150413,150415,150418,150420,150422,150424],{"class":323,"line":1960},[321,150411,150412],{"class":331},"account ",[321,150414,377],{"class":327},[321,150416,150417],{"class":331}," Account(",[321,150419,150033],{"class":436},[321,150421,12642],{"class":331},[321,150423,6617],{"class":380},[321,150425,338],{"class":331},[321,150427,150428,150431,150433],{"class":323,"line":1965},[321,150429,150430],{"class":331},"account.deposit(",[321,150432,1928],{"class":380},[321,150434,338],{"class":331},[321,150436,150437,150440,150442],{"class":323,"line":1970},[321,150438,150439],{"class":331},"account.withdraw(",[321,150441,643],{"class":380},[321,150443,338],{"class":331},[321,150445,150446,150448],{"class":323,"line":1984},[321,150447,30560],{"class":380},[321,150449,150450],{"class":331},"(account.get_balance())\n",[19,150452,150453],{},"封装的意义是避免外部随意修改内部状态。",[14,150455,150457],{"id":150456},"_118-继承","11.8 继承",[19,150459,150460],{},"继承可以让子类复用父类的属性和方法。",[312,150462,150464],{"className":30523,"code":150463,"language":30525,"meta":30,"style":30},"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",[318,150465,150466,150475,150484,150495,150499,150503,150517,150526,150537,150541,150545,150555,150560],{"__ignoreMap":30},[321,150467,150468,150470,150473],{"class":323,"line":324},[321,150469,14901],{"class":327},[321,150471,150472],{"class":2169}," Animal",[321,150474,3945],{"class":331},[321,150476,150477,150479,150482],{"class":323,"line":167},[321,150478,30946],{"class":327},[321,150480,150481],{"class":2169}," eat",[321,150483,30952],{"class":331},[321,150485,150486,150488,150490,150493],{"class":323,"line":200},[321,150487,32596],{"class":380},[321,150489,332],{"class":331},[321,150491,150492],{"class":436},"\"吃东西\"",[321,150494,338],{"class":331},[321,150496,150497],{"class":323,"line":1401},[321,150498,2606],{"emptyLinePlaceholder":251},[321,150500,150501],{"class":323,"line":1407},[321,150502,2606],{"emptyLinePlaceholder":251},[321,150504,150505,150507,150510,150512,150515],{"class":323,"line":1421},[321,150506,14901],{"class":327},[321,150508,150509],{"class":2169}," Dog",[321,150511,332],{"class":331},[321,150513,150514],{"class":2169},"Animal",[321,150516,30931],{"class":331},[321,150518,150519,150521,150524],{"class":323,"line":1427},[321,150520,30946],{"class":327},[321,150522,150523],{"class":2169}," bark",[321,150525,30952],{"class":331},[321,150527,150528,150530,150532,150535],{"class":323,"line":1518},[321,150529,32596],{"class":380},[321,150531,332],{"class":331},[321,150533,150534],{"class":436},"\"汪汪\"",[321,150536,338],{"class":331},[321,150538,150539],{"class":323,"line":1524},[321,150540,2606],{"emptyLinePlaceholder":251},[321,150542,150543],{"class":323,"line":1536},[321,150544,2606],{"emptyLinePlaceholder":251},[321,150546,150547,150550,150552],{"class":323,"line":1818},[321,150548,150549],{"class":331},"dog ",[321,150551,377],{"class":327},[321,150553,150554],{"class":331}," Dog()\n",[321,150556,150557],{"class":323,"line":1823},[321,150558,150559],{"class":331},"dog.eat()\n",[321,150561,150562],{"class":323,"line":1829},[321,150563,150564],{"class":331},"dog.bark()\n",[19,150566,150567],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150569,150571],{"id":150570},"_119-方法重写","11.9 方法重写",[312,150573,150575],{"className":30523,"code":150574,"language":30525,"meta":30,"style":30},"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",[318,150576,150577,150585,150594,150605,150609,150613,150625,150633,150643,150647,150651,150664,150672,150683,150687,150691,150699,150709,150713,150718],{"__ignoreMap":30},[321,150578,150579,150581,150583],{"class":323,"line":324},[321,150580,14901],{"class":327},[321,150582,150472],{"class":2169},[321,150584,3945],{"class":331},[321,150586,150587,150589,150592],{"class":323,"line":167},[321,150588,30946],{"class":327},[321,150590,150591],{"class":2169}," speak",[321,150593,30952],{"class":331},[321,150595,150596,150598,150600,150603],{"class":323,"line":200},[321,150597,32596],{"class":380},[321,150599,332],{"class":331},[321,150601,150602],{"class":436},"\"动物叫\"",[321,150604,338],{"class":331},[321,150606,150607],{"class":323,"line":1401},[321,150608,2606],{"emptyLinePlaceholder":251},[321,150610,150611],{"class":323,"line":1407},[321,150612,2606],{"emptyLinePlaceholder":251},[321,150614,150615,150617,150619,150621,150623],{"class":323,"line":1421},[321,150616,14901],{"class":327},[321,150618,150509],{"class":2169},[321,150620,332],{"class":331},[321,150622,150514],{"class":2169},[321,150624,30931],{"class":331},[321,150626,150627,150629,150631],{"class":323,"line":1427},[321,150628,30946],{"class":327},[321,150630,150591],{"class":2169},[321,150632,30952],{"class":331},[321,150634,150635,150637,150639,150641],{"class":323,"line":1518},[321,150636,32596],{"class":380},[321,150638,332],{"class":331},[321,150640,150534],{"class":436},[321,150642,338],{"class":331},[321,150644,150645],{"class":323,"line":1524},[321,150646,2606],{"emptyLinePlaceholder":251},[321,150648,150649],{"class":323,"line":1536},[321,150650,2606],{"emptyLinePlaceholder":251},[321,150652,150653,150655,150658,150660,150662],{"class":323,"line":1818},[321,150654,14901],{"class":327},[321,150656,150657],{"class":2169}," Cat",[321,150659,332],{"class":331},[321,150661,150514],{"class":2169},[321,150663,30931],{"class":331},[321,150665,150666,150668,150670],{"class":323,"line":1823},[321,150667,30946],{"class":327},[321,150669,150591],{"class":2169},[321,150671,30952],{"class":331},[321,150673,150674,150676,150678,150681],{"class":323,"line":1829},[321,150675,32596],{"class":380},[321,150677,332],{"class":331},[321,150679,150680],{"class":436},"\"喵喵\"",[321,150682,338],{"class":331},[321,150684,150685],{"class":323,"line":1834},[321,150686,2606],{"emptyLinePlaceholder":251},[321,150688,150689],{"class":323,"line":1848},[321,150690,2606],{"emptyLinePlaceholder":251},[321,150692,150693,150695,150697],{"class":323,"line":1853},[321,150694,150549],{"class":331},[321,150696,377],{"class":327},[321,150698,150554],{"class":331},[321,150700,150701,150704,150706],{"class":323,"line":1859},[321,150702,150703],{"class":331},"cat ",[321,150705,377],{"class":327},[321,150707,150708],{"class":331}," Cat()\n",[321,150710,150711],{"class":323,"line":1880},[321,150712,2606],{"emptyLinePlaceholder":251},[321,150714,150715],{"class":323,"line":1885},[321,150716,150717],{"class":331},"dog.speak()\n",[321,150719,150720],{"class":323,"line":1899},[321,150721,150722],{"class":331},"cat.speak()\n",[14,150724,150726],{"id":150725},"_1110-super","11.10 super",[19,150728,150729,150730,150733],{},"子类可以通过 ",[318,150731,150732],{},"super()"," 调用父类方法。",[312,150735,150737],{"className":30523,"code":150736,"language":30525,"meta":30,"style":30},"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",[318,150738,150739,150747,150756,150766,150770,150774,150786,150795,150806,150816,150820,150824,150840],{"__ignoreMap":30},[321,150740,150741,150743,150745],{"class":323,"line":324},[321,150742,14901],{"class":327},[321,150744,15776],{"class":2169},[321,150746,3945],{"class":331},[321,150748,150749,150751,150753],{"class":323,"line":167},[321,150750,30946],{"class":327},[321,150752,30949],{"class":380},[321,150754,150755],{"class":331},"(self, name):\n",[321,150757,150758,150760,150762,150764],{"class":323,"line":200},[321,150759,30990],{"class":380},[321,150761,149935],{"class":331},[321,150763,377],{"class":327},[321,150765,149940],{"class":331},[321,150767,150768],{"class":323,"line":1401},[321,150769,2606],{"emptyLinePlaceholder":251},[321,150771,150772],{"class":323,"line":1407},[321,150773,2606],{"emptyLinePlaceholder":251},[321,150775,150776,150778,150780,150782,150784],{"class":323,"line":1421},[321,150777,14901],{"class":327},[321,150779,8105],{"class":2169},[321,150781,332],{"class":331},[321,150783,19253],{"class":2169},[321,150785,30931],{"class":331},[321,150787,150788,150790,150792],{"class":323,"line":1427},[321,150789,30946],{"class":327},[321,150791,30949],{"class":380},[321,150793,150794],{"class":331},"(self, name, score):\n",[321,150796,150797,150799,150801,150803],{"class":323,"line":1518},[321,150798,30962],{"class":380},[321,150800,17468],{"class":331},[321,150802,30974],{"class":380},[321,150804,150805],{"class":331},"(name)\n",[321,150807,150808,150810,150812,150814],{"class":323,"line":1524},[321,150809,30990],{"class":380},[321,150811,149959],{"class":331},[321,150813,377],{"class":327},[321,150815,1785],{"class":331},[321,150817,150818],{"class":323,"line":1536},[321,150819,2606],{"emptyLinePlaceholder":251},[321,150821,150822],{"class":323,"line":1818},[321,150823,2606],{"emptyLinePlaceholder":251},[321,150825,150826,150828,150830,150832,150834,150836,150838],{"class":323,"line":1823},[321,150827,149626],{"class":331},[321,150829,377],{"class":327},[321,150831,150030],{"class":331},[321,150833,150033],{"class":436},[321,150835,12642],{"class":331},[321,150837,1321],{"class":380},[321,150839,338],{"class":331},[321,150841,150842,150844],{"class":323,"line":1829},[321,150843,30560],{"class":380},[321,150845,150846],{"class":331},"(student.name, student.score)\n",[14,150848,150850],{"id":150849},"_1111-多态","11.11 多态",[19,150852,150853],{},"多态指不同对象响应同一个方法，表现出不同结果。",[312,150855,150857],{"className":30523,"code":150856,"language":30525,"meta":30,"style":30},"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",[318,150858,150859,150867,150875,150885,150889,150893,150901,150909,150919,150923,150927,150937,150942,150946,150950,150955],{"__ignoreMap":30},[321,150860,150861,150863,150865],{"class":323,"line":324},[321,150862,14901],{"class":327},[321,150864,150509],{"class":2169},[321,150866,3945],{"class":331},[321,150868,150869,150871,150873],{"class":323,"line":167},[321,150870,30946],{"class":327},[321,150872,150591],{"class":2169},[321,150874,30952],{"class":331},[321,150876,150877,150879,150881,150883],{"class":323,"line":200},[321,150878,32596],{"class":380},[321,150880,332],{"class":331},[321,150882,150534],{"class":436},[321,150884,338],{"class":331},[321,150886,150887],{"class":323,"line":1401},[321,150888,2606],{"emptyLinePlaceholder":251},[321,150890,150891],{"class":323,"line":1407},[321,150892,2606],{"emptyLinePlaceholder":251},[321,150894,150895,150897,150899],{"class":323,"line":1421},[321,150896,14901],{"class":327},[321,150898,150657],{"class":2169},[321,150900,3945],{"class":331},[321,150902,150903,150905,150907],{"class":323,"line":1427},[321,150904,30946],{"class":327},[321,150906,150591],{"class":2169},[321,150908,30952],{"class":331},[321,150910,150911,150913,150915,150917],{"class":323,"line":1518},[321,150912,32596],{"class":380},[321,150914,332],{"class":331},[321,150916,150680],{"class":436},[321,150918,338],{"class":331},[321,150920,150921],{"class":323,"line":1524},[321,150922,2606],{"emptyLinePlaceholder":251},[321,150924,150925],{"class":323,"line":1536},[321,150926,2606],{"emptyLinePlaceholder":251},[321,150928,150929,150931,150934],{"class":323,"line":1818},[321,150930,32092],{"class":327},[321,150932,150933],{"class":2169}," make_sound",[321,150935,150936],{"class":331},"(animal):\n",[321,150938,150939],{"class":323,"line":1823},[321,150940,150941],{"class":331},"    animal.speak()\n",[321,150943,150944],{"class":323,"line":1829},[321,150945,2606],{"emptyLinePlaceholder":251},[321,150947,150948],{"class":323,"line":1834},[321,150949,2606],{"emptyLinePlaceholder":251},[321,150951,150952],{"class":323,"line":1848},[321,150953,150954],{"class":331},"make_sound(Dog())\n",[321,150956,150957],{"class":323,"line":1853},[321,150958,150959],{"class":331},"make_sound(Cat())\n",[19,150961,150962],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150964,150966],{"id":150965},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150968,150969],{},"实例属性属于对象：",[312,150971,150973],{"className":30523,"code":150972,"language":30525,"meta":30,"style":30},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[318,150974,150975,150983,150991],{"__ignoreMap":30},[321,150976,150977,150979,150981],{"class":323,"line":324},[321,150978,14901],{"class":327},[321,150980,8105],{"class":2169},[321,150982,3945],{"class":331},[321,150984,150985,150987,150989],{"class":323,"line":167},[321,150986,30946],{"class":327},[321,150988,30949],{"class":380},[321,150990,150755],{"class":331},[321,150992,150993,150995,150997,150999],{"class":323,"line":200},[321,150994,30990],{"class":380},[321,150996,149935],{"class":331},[321,150998,377],{"class":327},[321,151000,149940],{"class":331},[19,151002,151003],{},"类属性属于类，所有对象共享：",[312,151005,151007],{"className":30523,"code":151006,"language":30525,"meta":30,"style":30},"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",[318,151008,151009,151017,151027,151031,151039,151049,151053,151057,151070,151084,151088,151095,151102],{"__ignoreMap":30},[321,151010,151011,151013,151015],{"class":323,"line":324},[321,151012,14901],{"class":327},[321,151014,8105],{"class":2169},[321,151016,3945],{"class":331},[321,151018,151019,151022,151024],{"class":323,"line":167},[321,151020,151021],{"class":331},"    school ",[321,151023,377],{"class":327},[321,151025,151026],{"class":436}," \"黑马学校\"\n",[321,151028,151029],{"class":323,"line":200},[321,151030,2606],{"emptyLinePlaceholder":251},[321,151032,151033,151035,151037],{"class":323,"line":1401},[321,151034,30946],{"class":327},[321,151036,30949],{"class":380},[321,151038,150755],{"class":331},[321,151040,151041,151043,151045,151047],{"class":323,"line":1407},[321,151042,30990],{"class":380},[321,151044,149935],{"class":331},[321,151046,377],{"class":327},[321,151048,149940],{"class":331},[321,151050,151051],{"class":323,"line":1421},[321,151052,2606],{"emptyLinePlaceholder":251},[321,151054,151055],{"class":323,"line":1427},[321,151056,2606],{"emptyLinePlaceholder":251},[321,151058,151059,151062,151064,151066,151068],{"class":323,"line":1518},[321,151060,151061],{"class":331},"s1 ",[321,151063,377],{"class":327},[321,151065,150030],{"class":331},[321,151067,150033],{"class":436},[321,151069,338],{"class":331},[321,151071,151072,151075,151077,151079,151082],{"class":323,"line":1524},[321,151073,151074],{"class":331},"s2 ",[321,151076,377],{"class":327},[321,151078,150030],{"class":331},[321,151080,151081],{"class":436},"\"小红\"",[321,151083,338],{"class":331},[321,151085,151086],{"class":323,"line":1536},[321,151087,2606],{"emptyLinePlaceholder":251},[321,151089,151090,151092],{"class":323,"line":1818},[321,151091,30560],{"class":380},[321,151093,151094],{"class":331},"(s1.school)\n",[321,151096,151097,151099],{"class":323,"line":1823},[321,151098,30560],{"class":380},[321,151100,151101],{"class":331},"(s2.school)\n",[321,151103,151104,151106],{"class":323,"line":1829},[321,151105,30560],{"class":380},[321,151107,151108],{"class":331},"(Student.school)\n",[19,151110,151111],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151113,151115],{"id":151114},"_1113-类方法和静态方法","11.13 类方法和静态方法",[292,151117,151119],{"id":151118},"_11131-类方法","11.13.1 类方法",[19,151121,151122,151123,151126,151127,28530],{},"类方法使用 ",[318,151124,151125],{},"@classmethod","，第一个参数通常是 ",[318,151128,151129],{},"cls",[312,151131,151133],{"className":30523,"code":151132,"language":30525,"meta":30,"style":30},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[318,151134,151135,151143,151151,151155,151163,151173,151183,151187,151191],{"__ignoreMap":30},[321,151136,151137,151139,151141],{"class":323,"line":324},[321,151138,14901],{"class":327},[321,151140,8105],{"class":2169},[321,151142,3945],{"class":331},[321,151144,151145,151147,151149],{"class":323,"line":167},[321,151146,151021],{"class":331},[321,151148,377],{"class":327},[321,151150,151026],{"class":436},[321,151152,151153],{"class":323,"line":200},[321,151154,2606],{"emptyLinePlaceholder":251},[321,151156,151157,151160],{"class":323,"line":1401},[321,151158,151159],{"class":2169},"    @",[321,151161,151162],{"class":380},"classmethod\n",[321,151164,151165,151167,151170],{"class":323,"line":1407},[321,151166,30946],{"class":327},[321,151168,151169],{"class":2169}," get_school",[321,151171,151172],{"class":331},"(cls):\n",[321,151174,151175,151177,151180],{"class":323,"line":1421},[321,151176,14959],{"class":327},[321,151178,151179],{"class":380}," cls",[321,151181,151182],{"class":331},".school\n",[321,151184,151185],{"class":323,"line":1427},[321,151186,2606],{"emptyLinePlaceholder":251},[321,151188,151189],{"class":323,"line":1518},[321,151190,2606],{"emptyLinePlaceholder":251},[321,151192,151193,151195],{"class":323,"line":1524},[321,151194,30560],{"class":380},[321,151196,151197],{"class":331},"(Student.get_school())\n",[292,151199,151201],{"id":151200},"_11132-静态方法","11.13.2 静态方法",[19,151203,151204,151205,151208],{},"静态方法使用 ",[318,151206,151207],{},"@staticmethod","，不需要访问实例和类。",[312,151210,151212],{"className":30523,"code":151211,"language":30525,"meta":30,"style":30},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[318,151213,151214,151223,151230,151239,151250,151254,151258],{"__ignoreMap":30},[321,151215,151216,151218,151221],{"class":323,"line":324},[321,151217,14901],{"class":327},[321,151219,151220],{"class":2169}," MathUtils",[321,151222,3945],{"class":331},[321,151224,151225,151227],{"class":323,"line":167},[321,151226,151159],{"class":2169},[321,151228,151229],{"class":380},"staticmethod\n",[321,151231,151232,151234,151236],{"class":323,"line":200},[321,151233,30946],{"class":327},[321,151235,5416],{"class":2169},[321,151237,151238],{"class":331},"(a, b):\n",[321,151240,151241,151243,151245,151247],{"class":323,"line":1401},[321,151242,14959],{"class":327},[321,151244,11076],{"class":331},[321,151246,813],{"class":327},[321,151248,151249],{"class":331}," b\n",[321,151251,151252],{"class":323,"line":1407},[321,151253,2606],{"emptyLinePlaceholder":251},[321,151255,151256],{"class":323,"line":1421},[321,151257,2606],{"emptyLinePlaceholder":251},[321,151259,151260,151262,151265,151267,151269,151271],{"class":323,"line":1427},[321,151261,30560],{"class":380},[321,151263,151264],{"class":331},"(MathUtils.add(",[321,151266,549],{"class":380},[321,151268,12642],{"class":331},[321,151270,409],{"class":380},[321,151272,30642],{"class":331},[19,151274,151275],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151277,151279],{"id":151278},"_1114-dataclass","11.14 dataclass",[19,151281,151282,151285],{},[318,151283,151284],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[312,151287,151289],{"className":30523,"code":151288,"language":30525,"meta":30,"style":30},"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",[318,151290,151291,151303,151307,151311,151316,151324,151332,151340,151348,151352,151356,151376],{"__ignoreMap":30},[321,151292,151293,151295,151298,151300],{"class":323,"line":324},[321,151294,30882],{"class":327},[321,151296,151297],{"class":331}," dataclasses ",[321,151299,30537],{"class":327},[321,151301,151302],{"class":331}," dataclass\n",[321,151304,151305],{"class":323,"line":167},[321,151306,2606],{"emptyLinePlaceholder":251},[321,151308,151309],{"class":323,"line":200},[321,151310,2606],{"emptyLinePlaceholder":251},[321,151312,151313],{"class":323,"line":1401},[321,151314,151315],{"class":2169},"@dataclass\n",[321,151317,151318,151320,151322],{"class":323,"line":1407},[321,151319,14901],{"class":327},[321,151321,8105],{"class":2169},[321,151323,3945],{"class":331},[321,151325,151326,151329],{"class":323,"line":1421},[321,151327,151328],{"class":331},"    name: ",[321,151330,151331],{"class":380},"str\n",[321,151333,151334,151337],{"class":323,"line":1427},[321,151335,151336],{"class":331},"    age: ",[321,151338,151339],{"class":380},"int\n",[321,151341,151342,151345],{"class":323,"line":1518},[321,151343,151344],{"class":331},"    score: ",[321,151346,151347],{"class":380},"float\n",[321,151349,151350],{"class":323,"line":1524},[321,151351,2606],{"emptyLinePlaceholder":251},[321,151353,151354],{"class":323,"line":1536},[321,151355,2606],{"emptyLinePlaceholder":251},[321,151357,151358,151360,151362,151364,151366,151368,151370,151372,151374],{"class":323,"line":1818},[321,151359,149626],{"class":331},[321,151361,377],{"class":327},[321,151363,150030],{"class":331},[321,151365,150033],{"class":436},[321,151367,12642],{"class":331},[321,151369,982],{"class":380},[321,151371,12642],{"class":331},[321,151373,1321],{"class":380},[321,151375,338],{"class":331},[321,151377,151378,151380],{"class":323,"line":1823},[321,151379,30560],{"class":380},[321,151381,150187],{"class":331},[19,151383,151384,151385,544,151387,151390],{},"它会自动生成 ",[318,151386,30974],{},[318,151388,151389],{},"__repr__"," 等方法。适合数据模型类。",[14,151392,151394],{"id":151393},"_1115-小案例学生类","11.15 小案例：学生类",[312,151396,151398],{"className":30523,"code":151397,"language":30525,"meta":30,"style":30},"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",[318,151399,151400,151408,151417,151429,151439,151449,151459,151463,151472,151485,151489,151498,151504,151516,151528,151540,151552,151556,151560,151566,151576,151585,151595,151603,151611,151620,151624,151628,151636,151672,151676,151680,151705,151712],{"__ignoreMap":30},[321,151401,151402,151404,151406],{"class":323,"line":324},[321,151403,14901],{"class":327},[321,151405,8105],{"class":2169},[321,151407,3945],{"class":331},[321,151409,151410,151412,151414],{"class":323,"line":167},[321,151411,30946],{"class":327},[321,151413,30949],{"class":380},[321,151415,151416],{"class":331},"(self, student_id, name, age, score):\n",[321,151418,151419,151421,151424,151426],{"class":323,"line":200},[321,151420,30990],{"class":380},[321,151422,151423],{"class":331},".student_id ",[321,151425,377],{"class":327},[321,151427,151428],{"class":331}," student_id\n",[321,151430,151431,151433,151435,151437],{"class":323,"line":1401},[321,151432,30990],{"class":380},[321,151434,149935],{"class":331},[321,151436,377],{"class":327},[321,151438,149940],{"class":331},[321,151440,151441,151443,151445,151447],{"class":323,"line":1407},[321,151442,30990],{"class":380},[321,151444,149947],{"class":331},[321,151446,377],{"class":327},[321,151448,149952],{"class":331},[321,151450,151451,151453,151455,151457],{"class":323,"line":1421},[321,151452,30990],{"class":380},[321,151454,149959],{"class":331},[321,151456,377],{"class":327},[321,151458,1785],{"class":331},[321,151460,151461],{"class":323,"line":1427},[321,151462,2606],{"emptyLinePlaceholder":251},[321,151464,151465,151467,151470],{"class":323,"line":1518},[321,151466,30946],{"class":327},[321,151468,151469],{"class":2169}," is_passed",[321,151471,30952],{"class":331},[321,151473,151474,151476,151478,151480,151482],{"class":323,"line":1524},[321,151475,14959],{"class":327},[321,151477,39018],{"class":380},[321,151479,149959],{"class":331},[321,151481,1916],{"class":327},[321,151483,151484],{"class":380}," 60\n",[321,151486,151487],{"class":323,"line":1536},[321,151488,2606],{"emptyLinePlaceholder":251},[321,151490,151491,151493,151496],{"class":323,"line":1818},[321,151492,30946],{"class":327},[321,151494,151495],{"class":2169}," to_dict",[321,151497,30952],{"class":331},[321,151499,151500,151502],{"class":323,"line":1823},[321,151501,14959],{"class":327},[321,151503,15779],{"class":331},[321,151505,151506,151509,151511,151513],{"class":323,"line":1829},[321,151507,151508],{"class":436},"            \"student_id\"",[321,151510,51582],{"class":331},[321,151512,30968],{"class":380},[321,151514,151515],{"class":331},".student_id,\n",[321,151517,151518,151521,151523,151525],{"class":323,"line":1834},[321,151519,151520],{"class":436},"            \"name\"",[321,151522,51582],{"class":331},[321,151524,30968],{"class":380},[321,151526,151527],{"class":331},".name,\n",[321,151529,151530,151533,151535,151537],{"class":323,"line":1848},[321,151531,151532],{"class":436},"            \"age\"",[321,151534,51582],{"class":331},[321,151536,30968],{"class":380},[321,151538,151539],{"class":331},".age,\n",[321,151541,151542,151545,151547,151549],{"class":323,"line":1853},[321,151543,151544],{"class":436},"            \"score\"",[321,151546,51582],{"class":331},[321,151548,30968],{"class":380},[321,151550,151551],{"class":331},".score,\n",[321,151553,151554],{"class":323,"line":1859},[321,151555,2735],{"class":331},[321,151557,151558],{"class":323,"line":1880},[321,151559,2606],{"emptyLinePlaceholder":251},[321,151561,151562,151564],{"class":323,"line":1885},[321,151563,151159],{"class":2169},[321,151565,151162],{"class":380},[321,151567,151568,151570,151573],{"class":323,"line":1899},[321,151569,30946],{"class":327},[321,151571,151572],{"class":2169}," from_dict",[321,151574,151575],{"class":331},"(cls, data):\n",[321,151577,151578,151580,151582],{"class":323,"line":1904},[321,151579,14959],{"class":327},[321,151581,151179],{"class":380},[321,151583,151584],{"class":331},"(\n",[321,151586,151587,151590,151593],{"class":323,"line":1933},[321,151588,151589],{"class":331},"            data[",[321,151591,151592],{"class":436},"\"student_id\"",[321,151594,87981],{"class":331},[321,151596,151597,151599,151601],{"class":323,"line":1938},[321,151598,151589],{"class":331},[321,151600,62824],{"class":436},[321,151602,87981],{"class":331},[321,151604,151605,151607,151609],{"class":323,"line":1955},[321,151606,151589],{"class":331},[321,151608,69269],{"class":436},[321,151610,87981],{"class":331},[321,151612,151613,151615,151618],{"class":323,"line":1960},[321,151614,151589],{"class":331},[321,151616,151617],{"class":436},"\"score\"",[321,151619,87981],{"class":331},[321,151621,151622],{"class":323,"line":1965},[321,151623,38271],{"class":331},[321,151625,151626],{"class":323,"line":1970},[321,151627,2606],{"emptyLinePlaceholder":251},[321,151629,151630,151632,151634],{"class":323,"line":1984},[321,151631,30946],{"class":327},[321,151633,150126],{"class":380},[321,151635,30952],{"class":331},[321,151637,151638,151640,151642,151644,151646,151649,151651,151654,151656,151658,151660,151662,151664,151666,151668,151670],{"class":323,"line":1989},[321,151639,14959],{"class":327},[321,151641,150135],{"class":327},[321,151643,583],{"class":436},[321,151645,149597],{"class":380},[321,151647,151648],{"class":331},".student_id",[321,151650,1278],{"class":380},[321,151652,151653],{"class":380}," {self",[321,151655,80446],{"class":331},[321,151657,1278],{"class":380},[321,151659,151653],{"class":380},[321,151661,80458],{"class":331},[321,151663,1278],{"class":380},[321,151665,151653],{"class":380},[321,151667,150007],{"class":331},[321,151669,1278],{"class":380},[321,151671,25278],{"class":436},[321,151673,151674],{"class":323,"line":2783},[321,151675,2606],{"emptyLinePlaceholder":251},[321,151677,151678],{"class":323,"line":2797},[321,151679,2606],{"emptyLinePlaceholder":251},[321,151681,151682,151684,151686,151688,151691,151693,151695,151697,151699,151701,151703],{"class":323,"line":2805},[321,151683,149626],{"class":331},[321,151685,377],{"class":327},[321,151687,150030],{"class":331},[321,151689,151690],{"class":436},"\"001\"",[321,151692,12642],{"class":331},[321,151694,150033],{"class":436},[321,151696,12642],{"class":331},[321,151698,982],{"class":380},[321,151700,12642],{"class":331},[321,151702,1321],{"class":380},[321,151704,338],{"class":331},[321,151706,151707,151709],{"class":323,"line":2810},[321,151708,30560],{"class":380},[321,151710,151711],{"class":331},"(student.is_passed())\n",[321,151713,151714,151716],{"class":323,"line":2816},[321,151715,30560],{"class":380},[321,151717,151718],{"class":331},"(student.to_dict())\n",[19,151720,151721,101163,151724,151727],{},[318,151722,151723],{},"to_dict()",[318,151725,151726],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151729,151731],{"id":151730},"_1116-易错点","11.16 易错点",[151,151733,151734,151740,151746,151751,151754,151757],{},[154,151735,151736,151737,28530],{},"类名推荐使用大驼峰，如 ",[318,151738,151739],{},"StudentManager",[154,151741,151742,151743,151745],{},"方法第一个参数必须写 ",[318,151744,30968],{},"，调用时不用传。",[154,151747,151748,151750],{},[318,151749,30974],{}," 不是普通方法，它在创建对象时自动执行。",[154,151752,151753],{},"私有属性不是绝对安全，只是约定和名称改写。",[154,151755,151756],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[154,151758,151759],{},"类中方法太多时，说明职责可能过重。",[14,151761,151763],{"id":151762},"_1117-本章练习","11.17 本章练习",[151,151765,151766,151772,151778,151783,151796],{},[154,151767,151768,151769,151771],{},"定义 ",[318,151770,149713],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[154,151773,151768,151774,151777],{},[318,151775,151776],{},"Account"," 类，实现存款、取款、查询余额。",[154,151779,151768,151780,151782],{},[318,151781,17433],{}," 类，计算圆的周长和面积。",[154,151784,151768,151785,544,151788,151791,151792,151795],{},[318,151786,151787],{},"Dog",[318,151789,151790],{},"Cat"," 类，并用同一个函数调用它们的 ",[318,151793,151794],{},"speak()"," 方法。",[154,151797,104511,151798,151800,151801,28530],{},[318,151799,151284],{}," 定义一个商品类 ",[318,151802,151803],{},"Product",[5333,151805,151806],{},"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":30,"searchDepth":167,"depth":167,"links":151808},[151809,151810,151811,151812,151813,151814,151816,151817,151818,151819,151820,151821,151822,151826,151827,151828,151829],{"id":149477,"depth":167,"text":149478},{"id":149660,"depth":167,"text":149661},{"id":149724,"depth":167,"text":149725},{"id":149801,"depth":167,"text":149802},{"id":149900,"depth":167,"text":149901},{"id":150064,"depth":167,"text":151815},"11.6 str",{"id":150190,"depth":167,"text":150191},{"id":150456,"depth":167,"text":150457},{"id":150570,"depth":167,"text":150571},{"id":150725,"depth":167,"text":150726},{"id":150849,"depth":167,"text":150850},{"id":150965,"depth":167,"text":150966},{"id":151114,"depth":167,"text":151115,"children":151823},[151824,151825],{"id":151118,"depth":200,"text":151119},{"id":151200,"depth":200,"text":151201},{"id":151278,"depth":167,"text":151279},{"id":151393,"depth":167,"text":151394},{"id":151730,"depth":167,"text":151731},{"id":151762,"depth":167,"text":151763},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149469,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151836,"title":151837,"body":151838,"description":23584,"extension":249,"meta":155151,"navigation":251,"path":155152,"seo":155153,"stem":155154,"__hash__":155155},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151839,"toc":155127},[151840,151843,151847,151850,151853,151882,151885,151893,151897,151901,151904,151927,151930,151936,151940,153386,153389,153410,153414,153417,153429,153432,153616,153619,153745,153748,153752,153756,153892,153896,153982,153986,154068,154072,154109,154113,154302,154306,154309,154539,154543,154546,154727,154730,154734,154737,154743,154746,154772,154776,154779,154793,154796,154821,154824,154838,154841,154858,154861,154878,154881,154898,154902,154928,154932,154955,154959,154962,154964,154970,154972,154993,154996,155002,155008,155012,155015,155091,155094,155098,155124],[10,151841,151837],{"id":151842},"_12-综合案例与复习路线",[14,151844,151846],{"id":151845},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151848,151849],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151851,151852],{},"一个合格的入门综合项目最好覆盖：",[151,151854,151855,151858,151861,151864,151867,151870,151873,151876,151879],{},[154,151856,151857],{},"输入输出。",[154,151859,151860],{},"判断和循环。",[154,151862,151863],{},"函数拆分。",[154,151865,151866],{},"列表、字典等容器。",[154,151868,151869],{},"文件持久化。",[154,151871,151872],{},"异常处理。",[154,151874,151875],{},"模块拆分。",[154,151877,151878],{},"可选：面向对象。",[154,151880,151881],{},"可选：数据可视化。",[19,151883,151884],{},"本章整理两个方向：",[151,151886,151887,151890],{},[154,151888,151889],{},"学生管理系统。",[154,151891,151892],{},"销售数据统计和可视化。",[14,151894,151896],{"id":151895},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[292,151898,151900],{"id":151899},"_1221-需求","12.2.1 需求",[19,151902,151903],{},"实现一个命令行学生管理系统：",[151,151905,151906,151909,151912,151915,151918,151921,151924],{},[154,151907,151908],{},"添加学生。",[154,151910,151911],{},"删除学生。",[154,151913,151914],{},"修改学生。",[154,151916,151917],{},"查询学生。",[154,151919,151920],{},"显示所有学生。",[154,151922,151923],{},"保存到 JSON 文件。",[154,151925,151926],{},"程序启动时自动读取 JSON 文件。",[19,151928,151929],{},"学生字段：",[312,151931,151934],{"className":151932,"code":151933,"language":5394,"meta":30},[5392],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[318,151935,151933],{"__ignoreMap":30},[14,151937,151939],{"id":151938},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[312,151941,151943],{"className":30523,"code":151942,"language":30525,"meta":30,"style":30},"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",[318,151944,151945,151951,151961,151965,151979,151983,151987,151996,152008,152014,152018,152024,152055,152065,152072,152083,152089,152093,152097,152107,152138,152164,152168,152172,152181,152192,152203,152214,152225,152236,152247,152258,152262,152266,152276,152288,152304,152311,152318,152322,152326,152336,152344,152351,152364,152374,152385,152389,152393,152402,152410,152416,152428,152436,152447,152451,152455,152464,152480,152484,152491,152502,152507,152511,152527,152542,152557,152561,152566,152574,152582,152590,152598,152602,152607,152618,152622,152626,152635,152650,152660,152664,152676,152687,152691,152695,152700,152704,152715,152719,152723,152732,152747,152755,152759,152771,152781,152785,152789,152804,152817,152830,152834,152847,152859,152871,152875,152879,152890,152894,152898,152907,152922,152930,152934,152946,152956,152960,152964,152969,152973,152977,152987,152993,153015,153034,153053,153072,153077,153081,153085,153094,153102,153113,153117,153121,153147,153157,153162,153166,153170,153178,153188,153192,153200,153205,153221,153225,153239,153244,153258,153263,153276,153281,153294,153299,153312,153317,153330,153341,153345,153351,153362,153366,153370,153382],{"__ignoreMap":30},[321,151946,151947,151949],{"class":323,"line":324},[321,151948,30537],{"class":327},[321,151950,147236],{"class":331},[321,151952,151953,151955,151957,151959],{"class":323,"line":167},[321,151954,30882],{"class":327},[321,151956,108456],{"class":331},[321,151958,30537],{"class":327},[321,151960,108461],{"class":331},[321,151962,151963],{"class":323,"line":200},[321,151964,2606],{"emptyLinePlaceholder":251},[321,151966,151967,151970,151972,151974,151977],{"class":323,"line":1401},[321,151968,151969],{"class":380},"DATA_FILE",[321,151971,13771],{"class":327},[321,151973,108690],{"class":331},[321,151975,151976],{"class":436},"\"students.json\"",[321,151978,338],{"class":331},[321,151980,151981],{"class":323,"line":1407},[321,151982,2606],{"emptyLinePlaceholder":251},[321,151984,151985],{"class":323,"line":1421},[321,151986,2606],{"emptyLinePlaceholder":251},[321,151988,151989,151991,151994],{"class":323,"line":1427},[321,151990,32092],{"class":327},[321,151992,151993],{"class":2169}," load_students",[321,151995,32098],{"class":331},[321,151997,151998,152000,152002,152005],{"class":323,"line":1518},[321,151999,3307],{"class":327},[321,152001,39075],{"class":327},[321,152003,152004],{"class":380}," DATA_FILE",[321,152006,152007],{"class":331},".exists():\n",[321,152009,152010,152012],{"class":323,"line":1524},[321,152011,14959],{"class":327},[321,152013,51983],{"class":331},[321,152015,152016],{"class":323,"line":1536},[321,152017,2606],{"emptyLinePlaceholder":251},[321,152019,152020,152022],{"class":323,"line":1818},[321,152021,125929],{"class":327},[321,152023,3945],{"class":331},[321,152025,152026,152029,152031,152033,152035,152037,152039,152041,152043,152045,152047,152049,152051,152053],{"class":323,"line":1823},[321,152027,152028],{"class":327},"        with",[321,152030,146936],{"class":380},[321,152032,332],{"class":331},[321,152034,151969],{"class":380},[321,152036,12642],{"class":331},[321,152038,146946],{"class":436},[321,152040,12642],{"class":331},[321,152042,146951],{"class":5423},[321,152044,377],{"class":327},[321,152046,146956],{"class":436},[321,152048,13921],{"class":331},[321,152050,31528],{"class":327},[321,152052,148298],{"class":5423},[321,152054,3945],{"class":331},[321,152056,152057,152059,152061,152063],{"class":323,"line":1829},[321,152058,15939],{"class":327},[321,152060,148309],{"class":331},[321,152062,45499],{"class":5423},[321,152064,338],{"class":331},[321,152066,152067,152069],{"class":323,"line":1834},[321,152068,125957],{"class":327},[321,152070,152071],{"class":331}," json.JSONDecodeError:\n",[321,152073,152074,152076,152078,152081],{"class":323,"line":1848},[321,152075,32596],{"class":380},[321,152077,332],{"class":331},[321,152079,152080],{"class":436},"\"数据文件格式错误，已使用空数据启动\"",[321,152082,338],{"class":331},[321,152084,152085,152087],{"class":323,"line":1853},[321,152086,14959],{"class":327},[321,152088,51983],{"class":331},[321,152090,152091],{"class":323,"line":1859},[321,152092,2606],{"emptyLinePlaceholder":251},[321,152094,152095],{"class":323,"line":1880},[321,152096,2606],{"emptyLinePlaceholder":251},[321,152098,152099,152101,152104],{"class":323,"line":1885},[321,152100,32092],{"class":327},[321,152102,152103],{"class":2169}," save_students",[321,152105,152106],{"class":331},"(students):\n",[321,152108,152109,152111,152113,152115,152117,152119,152122,152124,152126,152128,152130,152132,152134,152136],{"class":323,"line":1899},[321,152110,34323],{"class":327},[321,152112,146936],{"class":380},[321,152114,332],{"class":331},[321,152116,151969],{"class":380},[321,152118,12642],{"class":331},[321,152120,152121],{"class":436},"\"w\"",[321,152123,12642],{"class":331},[321,152125,146951],{"class":5423},[321,152127,377],{"class":327},[321,152129,146956],{"class":436},[321,152131,13921],{"class":331},[321,152133,31528],{"class":327},[321,152135,148298],{"class":5423},[321,152137,3945],{"class":331},[321,152139,152140,152143,152145,152147,152149,152151,152153,152155,152158,152160,152162],{"class":323,"line":1904},[321,152141,152142],{"class":331},"        json.dump(students, ",[321,152144,45499],{"class":5423},[321,152146,12642],{"class":331},[321,152148,147282],{"class":5423},[321,152150,377],{"class":327},[321,152152,34132],{"class":380},[321,152154,12642],{"class":331},[321,152156,152157],{"class":5423},"indent",[321,152159,377],{"class":327},[321,152161,409],{"class":380},[321,152163,338],{"class":331},[321,152165,152166],{"class":323,"line":1933},[321,152167,2606],{"emptyLinePlaceholder":251},[321,152169,152170],{"class":323,"line":1938},[321,152171,2606],{"emptyLinePlaceholder":251},[321,152173,152174,152176,152179],{"class":323,"line":1955},[321,152175,32092],{"class":327},[321,152177,152178],{"class":2169}," show_menu",[321,152180,32098],{"class":331},[321,152182,152183,152185,152187,152190],{"class":323,"line":1960},[321,152184,31444],{"class":380},[321,152186,332],{"class":331},[321,152188,152189],{"class":436},"\"====== 学生管理系统 ======\"",[321,152191,338],{"class":331},[321,152193,152194,152196,152198,152201],{"class":323,"line":1965},[321,152195,31444],{"class":380},[321,152197,332],{"class":331},[321,152199,152200],{"class":436},"\"1. 添加学生\"",[321,152202,338],{"class":331},[321,152204,152205,152207,152209,152212],{"class":323,"line":1970},[321,152206,31444],{"class":380},[321,152208,332],{"class":331},[321,152210,152211],{"class":436},"\"2. 删除学生\"",[321,152213,338],{"class":331},[321,152215,152216,152218,152220,152223],{"class":323,"line":1984},[321,152217,31444],{"class":380},[321,152219,332],{"class":331},[321,152221,152222],{"class":436},"\"3. 修改学生\"",[321,152224,338],{"class":331},[321,152226,152227,152229,152231,152234],{"class":323,"line":1989},[321,152228,31444],{"class":380},[321,152230,332],{"class":331},[321,152232,152233],{"class":436},"\"4. 查询学生\"",[321,152235,338],{"class":331},[321,152237,152238,152240,152242,152245],{"class":323,"line":2783},[321,152239,31444],{"class":380},[321,152241,332],{"class":331},[321,152243,152244],{"class":436},"\"5. 显示所有学生\"",[321,152246,338],{"class":331},[321,152248,152249,152251,152253,152256],{"class":323,"line":2797},[321,152250,31444],{"class":380},[321,152252,332],{"class":331},[321,152254,152255],{"class":436},"\"0. 退出系统\"",[321,152257,338],{"class":331},[321,152259,152260],{"class":323,"line":2805},[321,152261,2606],{"emptyLinePlaceholder":251},[321,152263,152264],{"class":323,"line":2810},[321,152265,2606],{"emptyLinePlaceholder":251},[321,152267,152268,152270,152273],{"class":323,"line":2816},[321,152269,32092],{"class":327},[321,152271,152272],{"class":2169}," find_student",[321,152274,152275],{"class":331},"(students, student_id):\n",[321,152277,152278,152280,152283,152285],{"class":323,"line":2822},[321,152279,3407],{"class":327},[321,152281,152282],{"class":331}," student ",[321,152284,26188],{"class":327},[321,152286,152287],{"class":331}," students:\n",[321,152289,152290,152292,152295,152297,152299,152301],{"class":323,"line":2827},[321,152291,2703],{"class":327},[321,152293,152294],{"class":331}," student[",[321,152296,151592],{"class":436},[321,152298,4649],{"class":331},[321,152300,3155],{"class":327},[321,152302,152303],{"class":331}," student_id:\n",[321,152305,152306,152308],{"class":323,"line":8155},[321,152307,15939],{"class":327},[321,152309,152310],{"class":331}," student\n",[321,152312,152313,152315],{"class":323,"line":8179},[321,152314,4296],{"class":327},[321,152316,152317],{"class":380}," None\n",[321,152319,152320],{"class":323,"line":8184},[321,152321,2606],{"emptyLinePlaceholder":251},[321,152323,152324],{"class":323,"line":8190},[321,152325,2606],{"emptyLinePlaceholder":251},[321,152327,152328,152330,152333],{"class":323,"line":8217},[321,152329,32092],{"class":327},[321,152331,152332],{"class":2169}," input_int",[321,152334,152335],{"class":331},"(prompt):\n",[321,152337,152338,152340,152342],{"class":323,"line":8222},[321,152339,2457],{"class":327},[321,152341,95437],{"class":380},[321,152343,3945],{"class":331},[321,152345,152346,152349],{"class":323,"line":8228},[321,152347,152348],{"class":327},"        try",[321,152350,3945],{"class":331},[321,152352,152353,152355,152357,152359,152361],{"class":323,"line":8240},[321,152354,15939],{"class":327},[321,152356,2588],{"class":380},[321,152358,332],{"class":331},[321,152360,53966],{"class":380},[321,152362,152363],{"class":331},"(prompt))\n",[321,152365,152366,152369,152372],{"class":323,"line":8252},[321,152367,152368],{"class":327},"        except",[321,152370,152371],{"class":380}," ValueError",[321,152373,3945],{"class":331},[321,152375,152376,152378,152380,152383],{"class":323,"line":8264},[321,152377,34795],{"class":380},[321,152379,332],{"class":331},[321,152381,152382],{"class":436},"\"请输入整数\"",[321,152384,338],{"class":331},[321,152386,152387],{"class":323,"line":9923},[321,152388,2606],{"emptyLinePlaceholder":251},[321,152390,152391],{"class":323,"line":9948},[321,152392,2606],{"emptyLinePlaceholder":251},[321,152394,152395,152397,152400],{"class":323,"line":9971},[321,152396,32092],{"class":327},[321,152398,152399],{"class":2169}," input_float",[321,152401,152335],{"class":331},[321,152403,152404,152406,152408],{"class":323,"line":9995},[321,152405,2457],{"class":327},[321,152407,95437],{"class":380},[321,152409,3945],{"class":331},[321,152411,152412,152414],{"class":323,"line":10000},[321,152413,152348],{"class":327},[321,152415,3945],{"class":331},[321,152417,152418,152420,152422,152424,152426],{"class":323,"line":10005},[321,152419,15939],{"class":327},[321,152421,109942],{"class":380},[321,152423,332],{"class":331},[321,152425,53966],{"class":380},[321,152427,152363],{"class":331},[321,152429,152430,152432,152434],{"class":323,"line":10010},[321,152431,152368],{"class":327},[321,152433,152371],{"class":380},[321,152435,3945],{"class":331},[321,152437,152438,152440,152442,152445],{"class":323,"line":10019},[321,152439,34795],{"class":380},[321,152441,332],{"class":331},[321,152443,152444],{"class":436},"\"请输入数字\"",[321,152446,338],{"class":331},[321,152448,152449],{"class":323,"line":10024},[321,152450,2606],{"emptyLinePlaceholder":251},[321,152452,152453],{"class":323,"line":10030},[321,152454,2606],{"emptyLinePlaceholder":251},[321,152456,152457,152459,152462],{"class":323,"line":10051},[321,152458,32092],{"class":327},[321,152460,152461],{"class":2169}," add_student",[321,152463,152106],{"class":331},[321,152465,152466,152469,152471,152473,152475,152478],{"class":323,"line":10057},[321,152467,152468],{"class":331},"    student_id ",[321,152470,377],{"class":327},[321,152472,60750],{"class":380},[321,152474,332],{"class":331},[321,152476,152477],{"class":436},"\"请输入学号:\"",[321,152479,338],{"class":331},[321,152481,152482],{"class":323,"line":10071},[321,152483,2606],{"emptyLinePlaceholder":251},[321,152485,152486,152488],{"class":323,"line":10077},[321,152487,3307],{"class":327},[321,152489,152490],{"class":331}," find_student(students, student_id):\n",[321,152492,152493,152495,152497,152500],{"class":323,"line":10104},[321,152494,32596],{"class":380},[321,152496,332],{"class":331},[321,152498,152499],{"class":436},"\"学号已存在\"",[321,152501,338],{"class":331},[321,152503,152504],{"class":323,"line":10113},[321,152505,152506],{"class":327},"        return\n",[321,152508,152509],{"class":323,"line":10119},[321,152510,2606],{"emptyLinePlaceholder":251},[321,152512,152513,152516,152518,152520,152522,152525],{"class":323,"line":10127},[321,152514,152515],{"class":331},"    name ",[321,152517,377],{"class":327},[321,152519,60750],{"class":380},[321,152521,332],{"class":331},[321,152523,152524],{"class":436},"\"请输入姓名:\"",[321,152526,338],{"class":331},[321,152528,152529,152532,152534,152537,152540],{"class":323,"line":10132},[321,152530,152531],{"class":331},"    age ",[321,152533,377],{"class":327},[321,152535,152536],{"class":331}," input_int(",[321,152538,152539],{"class":436},"\"请输入年龄:\"",[321,152541,338],{"class":331},[321,152543,152544,152547,152549,152552,152555],{"class":323,"line":16811},[321,152545,152546],{"class":331},"    score ",[321,152548,377],{"class":327},[321,152550,152551],{"class":331}," input_float(",[321,152553,152554],{"class":436},"\"请输入成绩:\"",[321,152556,338],{"class":331},[321,152558,152559],{"class":323,"line":16817},[321,152560,2606],{"emptyLinePlaceholder":251},[321,152562,152563],{"class":323,"line":16840},[321,152564,152565],{"class":331},"    students.append({\n",[321,152567,152568,152571],{"class":323,"line":16846},[321,152569,152570],{"class":436},"        \"student_id\"",[321,152572,152573],{"class":331},": student_id,\n",[321,152575,152576,152579],{"class":323,"line":16869},[321,152577,152578],{"class":436},"        \"name\"",[321,152580,152581],{"class":331},": name,\n",[321,152583,152584,152587],{"class":323,"line":16883},[321,152585,152586],{"class":436},"        \"age\"",[321,152588,152589],{"class":331},": age,\n",[321,152591,152592,152595],{"class":323,"line":16903},[321,152593,152594],{"class":436},"        \"score\"",[321,152596,152597],{"class":331},": score,\n",[321,152599,152600],{"class":323,"line":16909},[321,152601,33606],{"class":331},[321,152603,152604],{"class":323,"line":16920},[321,152605,152606],{"class":331},"    save_students(students)\n",[321,152608,152609,152611,152613,152616],{"class":323,"line":16943},[321,152610,31444],{"class":380},[321,152612,332],{"class":331},[321,152614,152615],{"class":436},"\"添加成功\"",[321,152617,338],{"class":331},[321,152619,152620],{"class":323,"line":16965},[321,152621,2606],{"emptyLinePlaceholder":251},[321,152623,152624],{"class":323,"line":16970},[321,152625,2606],{"emptyLinePlaceholder":251},[321,152627,152628,152630,152633],{"class":323,"line":16976},[321,152629,32092],{"class":327},[321,152631,152632],{"class":2169}," delete_student",[321,152634,152106],{"class":331},[321,152636,152637,152639,152641,152643,152645,152648],{"class":323,"line":16990},[321,152638,152468],{"class":331},[321,152640,377],{"class":327},[321,152642,60750],{"class":380},[321,152644,332],{"class":331},[321,152646,152647],{"class":436},"\"请输入要删除的学号:\"",[321,152649,338],{"class":331},[321,152651,152652,152655,152657],{"class":323,"line":17003},[321,152653,152654],{"class":331},"    student ",[321,152656,377],{"class":327},[321,152658,152659],{"class":331}," find_student(students, student_id)\n",[321,152661,152662],{"class":323,"line":17008},[321,152663,2606],{"emptyLinePlaceholder":251},[321,152665,152666,152668,152670,152672,152674],{"class":323,"line":17022},[321,152667,3307],{"class":327},[321,152669,152282],{"class":331},[321,152671,39072],{"class":327},[321,152673,39078],{"class":380},[321,152675,3945],{"class":331},[321,152677,152678,152680,152682,152685],{"class":323,"line":17027},[321,152679,32596],{"class":380},[321,152681,332],{"class":331},[321,152683,152684],{"class":436},"\"学生不存在\"",[321,152686,338],{"class":331},[321,152688,152689],{"class":323,"line":17033},[321,152690,152506],{"class":327},[321,152692,152693],{"class":323,"line":17038},[321,152694,2606],{"emptyLinePlaceholder":251},[321,152696,152697],{"class":323,"line":17052},[321,152698,152699],{"class":331},"    students.remove(student)\n",[321,152701,152702],{"class":323,"line":17057},[321,152703,152606],{"class":331},[321,152705,152706,152708,152710,152713],{"class":323,"line":17062},[321,152707,31444],{"class":380},[321,152709,332],{"class":331},[321,152711,152712],{"class":436},"\"删除成功\"",[321,152714,338],{"class":331},[321,152716,152717],{"class":323,"line":17076},[321,152718,2606],{"emptyLinePlaceholder":251},[321,152720,152721],{"class":323,"line":17088},[321,152722,2606],{"emptyLinePlaceholder":251},[321,152724,152725,152727,152730],{"class":323,"line":17093},[321,152726,32092],{"class":327},[321,152728,152729],{"class":2169}," update_student",[321,152731,152106],{"class":331},[321,152733,152734,152736,152738,152740,152742,152745],{"class":323,"line":17106},[321,152735,152468],{"class":331},[321,152737,377],{"class":327},[321,152739,60750],{"class":380},[321,152741,332],{"class":331},[321,152743,152744],{"class":436},"\"请输入要修改的学号:\"",[321,152746,338],{"class":331},[321,152748,152749,152751,152753],{"class":323,"line":17111},[321,152750,152654],{"class":331},[321,152752,377],{"class":327},[321,152754,152659],{"class":331},[321,152756,152757],{"class":323,"line":17116},[321,152758,2606],{"emptyLinePlaceholder":251},[321,152760,152761,152763,152765,152767,152769],{"class":323,"line":17121},[321,152762,3307],{"class":327},[321,152764,152282],{"class":331},[321,152766,39072],{"class":327},[321,152768,39078],{"class":380},[321,152770,3945],{"class":331},[321,152772,152773,152775,152777,152779],{"class":323,"line":17134},[321,152774,32596],{"class":380},[321,152776,332],{"class":331},[321,152778,152684],{"class":436},[321,152780,338],{"class":331},[321,152782,152783],{"class":323,"line":17139},[321,152784,152506],{"class":327},[321,152786,152787],{"class":323,"line":32778},[321,152788,2606],{"emptyLinePlaceholder":251},[321,152790,152791,152793,152795,152797,152799,152802],{"class":323,"line":32784},[321,152792,152515],{"class":331},[321,152794,377],{"class":327},[321,152796,60750],{"class":380},[321,152798,332],{"class":331},[321,152800,152801],{"class":436},"\"请输入新姓名:\"",[321,152803,338],{"class":331},[321,152805,152806,152808,152810,152812,152815],{"class":323,"line":32790},[321,152807,152531],{"class":331},[321,152809,377],{"class":327},[321,152811,152536],{"class":331},[321,152813,152814],{"class":436},"\"请输入新年龄:\"",[321,152816,338],{"class":331},[321,152818,152819,152821,152823,152825,152828],{"class":323,"line":32796},[321,152820,152546],{"class":331},[321,152822,377],{"class":327},[321,152824,152551],{"class":331},[321,152826,152827],{"class":436},"\"请输入新成绩:\"",[321,152829,338],{"class":331},[321,152831,152832],{"class":323,"line":32802},[321,152833,2606],{"emptyLinePlaceholder":251},[321,152835,152836,152839,152841,152843,152845],{"class":323,"line":32813},[321,152837,152838],{"class":331},"    student[",[321,152840,62824],{"class":436},[321,152842,4649],{"class":331},[321,152844,377],{"class":327},[321,152846,149940],{"class":331},[321,152848,152849,152851,152853,152855,152857],{"class":323,"line":32819},[321,152850,152838],{"class":331},[321,152852,69269],{"class":436},[321,152854,4649],{"class":331},[321,152856,377],{"class":327},[321,152858,149952],{"class":331},[321,152860,152861,152863,152865,152867,152869],{"class":323,"line":32839},[321,152862,152838],{"class":331},[321,152864,151617],{"class":436},[321,152866,4649],{"class":331},[321,152868,377],{"class":327},[321,152870,1785],{"class":331},[321,152872,152873],{"class":323,"line":32845},[321,152874,2606],{"emptyLinePlaceholder":251},[321,152876,152877],{"class":323,"line":32856},[321,152878,152606],{"class":331},[321,152880,152881,152883,152885,152888],{"class":323,"line":32862},[321,152882,31444],{"class":380},[321,152884,332],{"class":331},[321,152886,152887],{"class":436},"\"修改成功\"",[321,152889,338],{"class":331},[321,152891,152892],{"class":323,"line":32868},[321,152893,2606],{"emptyLinePlaceholder":251},[321,152895,152896],{"class":323,"line":32874},[321,152897,2606],{"emptyLinePlaceholder":251},[321,152899,152900,152902,152905],{"class":323,"line":32880},[321,152901,32092],{"class":327},[321,152903,152904],{"class":2169}," query_student",[321,152906,152106],{"class":331},[321,152908,152909,152911,152913,152915,152917,152920],{"class":323,"line":32886},[321,152910,152468],{"class":331},[321,152912,377],{"class":327},[321,152914,60750],{"class":380},[321,152916,332],{"class":331},[321,152918,152919],{"class":436},"\"请输入要查询的学号:\"",[321,152921,338],{"class":331},[321,152923,152924,152926,152928],{"class":323,"line":32892},[321,152925,152654],{"class":331},[321,152927,377],{"class":327},[321,152929,152659],{"class":331},[321,152931,152932],{"class":323,"line":32898},[321,152933,2606],{"emptyLinePlaceholder":251},[321,152935,152936,152938,152940,152942,152944],{"class":323,"line":32918},[321,152937,3307],{"class":327},[321,152939,152282],{"class":331},[321,152941,39072],{"class":327},[321,152943,39078],{"class":380},[321,152945,3945],{"class":331},[321,152947,152948,152950,152952,152954],{"class":323,"line":32924},[321,152949,32596],{"class":380},[321,152951,332],{"class":331},[321,152953,152684],{"class":436},[321,152955,338],{"class":331},[321,152957,152958],{"class":323,"line":32940},[321,152959,152506],{"class":327},[321,152961,152962],{"class":323,"line":32946},[321,152963,2606],{"emptyLinePlaceholder":251},[321,152965,152966],{"class":323,"line":32960},[321,152967,152968],{"class":331},"    print_student(student)\n",[321,152970,152971],{"class":323,"line":32966},[321,152972,2606],{"emptyLinePlaceholder":251},[321,152974,152975],{"class":323,"line":32981},[321,152976,2606],{"emptyLinePlaceholder":251},[321,152978,152979,152981,152984],{"class":323,"line":32987},[321,152980,32092],{"class":327},[321,152982,152983],{"class":2169}," print_student",[321,152985,152986],{"class":331},"(student):\n",[321,152988,152989,152991],{"class":323,"line":32996},[321,152990,31444],{"class":380},[321,152992,151584],{"class":331},[321,152994,152995,152998,153000,153002,153005,153008,153010,153013],{"class":323,"line":33002},[321,152996,152997],{"class":327},"        f",[321,152999,583],{"class":436},[321,153001,1228],{"class":380},[321,153003,153004],{"class":331},"student[",[321,153006,153007],{"class":436},"'student_id'",[321,153009,1272],{"class":331},[321,153011,153012],{"class":380},"}\\t",[321,153014,25278],{"class":436},[321,153016,153017,153019,153021,153023,153025,153028,153030,153032],{"class":323,"line":33011},[321,153018,152997],{"class":327},[321,153020,583],{"class":436},[321,153022,1228],{"class":380},[321,153024,153004],{"class":331},[321,153026,153027],{"class":436},"'name'",[321,153029,1272],{"class":331},[321,153031,153012],{"class":380},[321,153033,25278],{"class":436},[321,153035,153036,153038,153040,153042,153044,153047,153049,153051],{"class":323,"line":33017},[321,153037,152997],{"class":327},[321,153039,583],{"class":436},[321,153041,1228],{"class":380},[321,153043,153004],{"class":331},[321,153045,153046],{"class":436},"'age'",[321,153048,1272],{"class":331},[321,153050,153012],{"class":380},[321,153052,25278],{"class":436},[321,153054,153055,153057,153059,153061,153063,153066,153068,153070],{"class":323,"line":33023},[321,153056,152997],{"class":327},[321,153058,583],{"class":436},[321,153060,1228],{"class":380},[321,153062,153004],{"class":331},[321,153064,153065],{"class":436},"'score'",[321,153067,1272],{"class":331},[321,153069,1278],{"class":380},[321,153071,25278],{"class":436},[321,153073,153074],{"class":323,"line":33032},[321,153075,153076],{"class":331},"    )\n",[321,153078,153079],{"class":323,"line":33038},[321,153080,2606],{"emptyLinePlaceholder":251},[321,153082,153083],{"class":323,"line":33049},[321,153084,2606],{"emptyLinePlaceholder":251},[321,153086,153087,153089,153092],{"class":323,"line":33055},[321,153088,32092],{"class":327},[321,153090,153091],{"class":2169}," show_all_students",[321,153093,152106],{"class":331},[321,153095,153096,153098,153100],{"class":323,"line":33074},[321,153097,3307],{"class":327},[321,153099,39075],{"class":327},[321,153101,152287],{"class":331},[321,153103,153104,153106,153108,153111],{"class":323,"line":33080},[321,153105,32596],{"class":380},[321,153107,332],{"class":331},[321,153109,153110],{"class":436},"\"暂无学生\"",[321,153112,338],{"class":331},[321,153114,153115],{"class":323,"line":33091},[321,153116,152506],{"class":327},[321,153118,153119],{"class":323,"line":33097},[321,153120,2606],{"emptyLinePlaceholder":251},[321,153122,153123,153125,153127,153130,153132,153135,153137,153140,153142,153145],{"class":323,"line":33117},[321,153124,31444],{"class":380},[321,153126,332],{"class":331},[321,153128,153129],{"class":436},"\"学号",[321,153131,1437],{"class":380},[321,153133,153134],{"class":436},"姓名",[321,153136,1437],{"class":380},[321,153138,153139],{"class":436},"年龄",[321,153141,1437],{"class":380},[321,153143,153144],{"class":436},"成绩\"",[321,153146,338],{"class":331},[321,153148,153149,153151,153153,153155],{"class":323,"line":33133},[321,153150,3407],{"class":327},[321,153152,152282],{"class":331},[321,153154,26188],{"class":327},[321,153156,152287],{"class":331},[321,153158,153159],{"class":323,"line":33139},[321,153160,153161],{"class":331},"        print_student(student)\n",[321,153163,153164],{"class":323,"line":33153},[321,153165,2606],{"emptyLinePlaceholder":251},[321,153167,153168],{"class":323,"line":33159},[321,153169,2606],{"emptyLinePlaceholder":251},[321,153171,153172,153174,153176],{"class":323,"line":33165},[321,153173,32092],{"class":327},[321,153175,2179],{"class":2169},[321,153177,32098],{"class":331},[321,153179,153180,153183,153185],{"class":323,"line":33176},[321,153181,153182],{"class":331},"    students ",[321,153184,377],{"class":327},[321,153186,153187],{"class":331}," load_students()\n",[321,153189,153190],{"class":323,"line":33182},[321,153191,2606],{"emptyLinePlaceholder":251},[321,153193,153194,153196,153198],{"class":323,"line":33188},[321,153195,2457],{"class":327},[321,153197,95437],{"class":380},[321,153199,3945],{"class":331},[321,153201,153202],{"class":323,"line":33198},[321,153203,153204],{"class":331},"        show_menu()\n",[321,153206,153207,153210,153212,153214,153216,153219],{"class":323,"line":33204},[321,153208,153209],{"class":331},"        choice ",[321,153211,377],{"class":327},[321,153213,60750],{"class":380},[321,153215,332],{"class":331},[321,153217,153218],{"class":436},"\"请输入操作:\"",[321,153220,338],{"class":331},[321,153222,153223],{"class":323,"line":33215},[321,153224,2606],{"emptyLinePlaceholder":251},[321,153226,153227,153229,153232,153234,153237],{"class":323,"line":33221},[321,153228,2703],{"class":327},[321,153230,153231],{"class":331}," choice ",[321,153233,3155],{"class":327},[321,153235,153236],{"class":436}," \"1\"",[321,153238,3945],{"class":331},[321,153240,153241],{"class":323,"line":33231},[321,153242,153243],{"class":331},"            add_student(students)\n",[321,153245,153246,153249,153251,153253,153256],{"class":323,"line":33236},[321,153247,153248],{"class":327},"        elif",[321,153250,153231],{"class":331},[321,153252,3155],{"class":327},[321,153254,153255],{"class":436}," \"2\"",[321,153257,3945],{"class":331},[321,153259,153260],{"class":323,"line":33242},[321,153261,153262],{"class":331},"            delete_student(students)\n",[321,153264,153265,153267,153269,153271,153274],{"class":323,"line":33291},[321,153266,153248],{"class":327},[321,153268,153231],{"class":331},[321,153270,3155],{"class":327},[321,153272,153273],{"class":436}," \"3\"",[321,153275,3945],{"class":331},[321,153277,153278],{"class":323,"line":33338},[321,153279,153280],{"class":331},"            update_student(students)\n",[321,153282,153283,153285,153287,153289,153292],{"class":323,"line":33343},[321,153284,153248],{"class":327},[321,153286,153231],{"class":331},[321,153288,3155],{"class":327},[321,153290,153291],{"class":436}," \"4\"",[321,153293,3945],{"class":331},[321,153295,153296],{"class":323,"line":33349},[321,153297,153298],{"class":331},"            query_student(students)\n",[321,153300,153301,153303,153305,153307,153310],{"class":323,"line":33368},[321,153302,153248],{"class":327},[321,153304,153231],{"class":331},[321,153306,3155],{"class":327},[321,153308,153309],{"class":436}," \"5\"",[321,153311,3945],{"class":331},[321,153313,153314],{"class":323,"line":33374},[321,153315,153316],{"class":331},"            show_all_students(students)\n",[321,153318,153319,153321,153323,153325,153328],{"class":323,"line":33394},[321,153320,153248],{"class":327},[321,153322,153231],{"class":331},[321,153324,3155],{"class":327},[321,153326,153327],{"class":436}," \"0\"",[321,153329,3945],{"class":331},[321,153331,153332,153334,153336,153339],{"class":323,"line":33400},[321,153333,34795],{"class":380},[321,153335,332],{"class":331},[321,153337,153338],{"class":436},"\"退出系统\"",[321,153340,338],{"class":331},[321,153342,153343],{"class":323,"line":33406},[321,153344,115243],{"class":327},[321,153346,153347,153349],{"class":323,"line":33416},[321,153348,2740],{"class":327},[321,153350,3945],{"class":331},[321,153352,153353,153355,153357,153360],{"class":323,"line":33421},[321,153354,34795],{"class":380},[321,153356,332],{"class":331},[321,153358,153359],{"class":436},"\"输入错误\"",[321,153361,338],{"class":331},[321,153363,153364],{"class":323,"line":33427},[321,153365,2606],{"emptyLinePlaceholder":251},[321,153367,153368],{"class":323,"line":33443},[321,153369,2606],{"emptyLinePlaceholder":251},[321,153371,153372,153374,153376,153378,153380],{"class":323,"line":33488},[321,153373,1737],{"class":327},[321,153375,31365],{"class":380},[321,153377,101704],{"class":327},[321,153379,101707],{"class":436},[321,153381,3945],{"class":331},[321,153383,153384],{"class":323,"line":33494},[321,153385,101714],{"class":331},[19,153387,153388],{},"这个项目串联了：",[151,153390,153391,153394,153397,153400,153403,153405],{},[154,153392,153393],{},"菜单循环。",[154,153395,153396],{},"函数封装。",[154,153398,153399],{},"列表字典。",[154,153401,153402],{},"JSON 读写。",[154,153404,151872],{},[154,153406,153407,28530],{},[318,153408,153409],{},"if __name__ == \"__main__\"",[14,153411,153413],{"id":153412},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153415,153416],{},"可以进一步拆成两个类：",[151,153418,153419,153424],{},[154,153420,153421,153423],{},[318,153422,149713],{},"：表示单个学生。",[154,153425,153426,153428],{},[318,153427,151739],{},"：负责学生增删改查和文件保存。",[19,153430,153431],{},"示意代码：",[312,153433,153435],{"className":30523,"code":153434,"language":30525,"meta":30,"style":30},"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",[318,153436,153437,153447,153451,153455,153459,153467,153474,153480,153486,153492,153496,153504,153510,153520,153530,153540,153550,153554,153558,153564,153572,153580,153588,153596,153604,153612],{"__ignoreMap":30},[321,153438,153439,153441,153443,153445],{"class":323,"line":324},[321,153440,30882],{"class":327},[321,153442,151297],{"class":331},[321,153444,30537],{"class":327},[321,153446,151302],{"class":331},[321,153448,153449],{"class":323,"line":167},[321,153450,2606],{"emptyLinePlaceholder":251},[321,153452,153453],{"class":323,"line":200},[321,153454,2606],{"emptyLinePlaceholder":251},[321,153456,153457],{"class":323,"line":1401},[321,153458,151315],{"class":2169},[321,153460,153461,153463,153465],{"class":323,"line":1407},[321,153462,14901],{"class":327},[321,153464,8105],{"class":2169},[321,153466,3945],{"class":331},[321,153468,153469,153472],{"class":323,"line":1421},[321,153470,153471],{"class":331},"    student_id: ",[321,153473,151331],{"class":380},[321,153475,153476,153478],{"class":323,"line":1427},[321,153477,151328],{"class":331},[321,153479,151331],{"class":380},[321,153481,153482,153484],{"class":323,"line":1518},[321,153483,151336],{"class":331},[321,153485,151339],{"class":380},[321,153487,153488,153490],{"class":323,"line":1524},[321,153489,151344],{"class":331},[321,153491,151347],{"class":380},[321,153493,153494],{"class":323,"line":1536},[321,153495,2606],{"emptyLinePlaceholder":251},[321,153497,153498,153500,153502],{"class":323,"line":1818},[321,153499,30946],{"class":327},[321,153501,151495],{"class":2169},[321,153503,30952],{"class":331},[321,153505,153506,153508],{"class":323,"line":1823},[321,153507,14959],{"class":327},[321,153509,15779],{"class":331},[321,153511,153512,153514,153516,153518],{"class":323,"line":1829},[321,153513,151508],{"class":436},[321,153515,51582],{"class":331},[321,153517,30968],{"class":380},[321,153519,151515],{"class":331},[321,153521,153522,153524,153526,153528],{"class":323,"line":1834},[321,153523,151520],{"class":436},[321,153525,51582],{"class":331},[321,153527,30968],{"class":380},[321,153529,151527],{"class":331},[321,153531,153532,153534,153536,153538],{"class":323,"line":1848},[321,153533,151532],{"class":436},[321,153535,51582],{"class":331},[321,153537,30968],{"class":380},[321,153539,151539],{"class":331},[321,153541,153542,153544,153546,153548],{"class":323,"line":1853},[321,153543,151544],{"class":436},[321,153545,51582],{"class":331},[321,153547,30968],{"class":380},[321,153549,151551],{"class":331},[321,153551,153552],{"class":323,"line":1859},[321,153553,2735],{"class":331},[321,153555,153556],{"class":323,"line":1880},[321,153557,2606],{"emptyLinePlaceholder":251},[321,153559,153560,153562],{"class":323,"line":1885},[321,153561,151159],{"class":2169},[321,153563,151162],{"class":380},[321,153565,153566,153568,153570],{"class":323,"line":1899},[321,153567,30946],{"class":327},[321,153569,151572],{"class":2169},[321,153571,151575],{"class":331},[321,153573,153574,153576,153578],{"class":323,"line":1904},[321,153575,14959],{"class":327},[321,153577,151179],{"class":380},[321,153579,151584],{"class":331},[321,153581,153582,153584,153586],{"class":323,"line":1933},[321,153583,151589],{"class":331},[321,153585,151592],{"class":436},[321,153587,87981],{"class":331},[321,153589,153590,153592,153594],{"class":323,"line":1938},[321,153591,151589],{"class":331},[321,153593,62824],{"class":436},[321,153595,87981],{"class":331},[321,153597,153598,153600,153602],{"class":323,"line":1955},[321,153599,151589],{"class":331},[321,153601,69269],{"class":436},[321,153603,87981],{"class":331},[321,153605,153606,153608,153610],{"class":323,"line":1960},[321,153607,151589],{"class":331},[321,153609,151617],{"class":436},[321,153611,87981],{"class":331},[321,153613,153614],{"class":323,"line":1965},[321,153615,38271],{"class":331},[19,153617,153618],{},"管理器示意：",[312,153620,153622],{"className":30523,"code":153621,"language":30525,"meta":30,"style":30},"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",[318,153623,153624,153633,153641,153652,153656,153666,153679,153690,153697,153703,153707,153716,153725,153731,153738],{"__ignoreMap":30},[321,153625,153626,153628,153631],{"class":323,"line":324},[321,153627,14901],{"class":327},[321,153629,153630],{"class":2169}," StudentManager",[321,153632,3945],{"class":331},[321,153634,153635,153637,153639],{"class":323,"line":167},[321,153636,30946],{"class":327},[321,153638,30949],{"class":380},[321,153640,30952],{"class":331},[321,153642,153643,153645,153648,153650],{"class":323,"line":200},[321,153644,30990],{"class":380},[321,153646,153647],{"class":331},".students ",[321,153649,377],{"class":327},[321,153651,51983],{"class":331},[321,153653,153654],{"class":323,"line":1401},[321,153655,2606],{"emptyLinePlaceholder":251},[321,153657,153658,153660,153663],{"class":323,"line":1407},[321,153659,30946],{"class":327},[321,153661,153662],{"class":2169}," find_by_id",[321,153664,153665],{"class":331},"(self, student_id):\n",[321,153667,153668,153670,153672,153674,153676],{"class":323,"line":1421},[321,153669,3609],{"class":327},[321,153671,152282],{"class":331},[321,153673,26188],{"class":327},[321,153675,39018],{"class":380},[321,153677,153678],{"class":331},".students:\n",[321,153680,153681,153683,153686,153688],{"class":323,"line":1427},[321,153682,4848],{"class":327},[321,153684,153685],{"class":331}," student.student_id ",[321,153687,3155],{"class":327},[321,153689,152303],{"class":331},[321,153691,153692,153695],{"class":323,"line":1518},[321,153693,153694],{"class":327},"                return",[321,153696,152310],{"class":331},[321,153698,153699,153701],{"class":323,"line":1524},[321,153700,14959],{"class":327},[321,153702,152317],{"class":380},[321,153704,153705],{"class":323,"line":1536},[321,153706,2606],{"emptyLinePlaceholder":251},[321,153708,153709,153711,153713],{"class":323,"line":1818},[321,153710,30946],{"class":327},[321,153712,5416],{"class":2169},[321,153714,153715],{"class":331},"(self, student):\n",[321,153717,153718,153720,153722],{"class":323,"line":1823},[321,153719,2703],{"class":327},[321,153721,39018],{"class":380},[321,153723,153724],{"class":331},".find_by_id(student.student_id):\n",[321,153726,153727,153729],{"class":323,"line":1829},[321,153728,15939],{"class":327},[321,153730,125952],{"class":380},[321,153732,153733,153735],{"class":323,"line":1834},[321,153734,30990],{"class":380},[321,153736,153737],{"class":331},".students.append(student)\n",[321,153739,153740,153742],{"class":323,"line":1848},[321,153741,14959],{"class":327},[321,153743,153744],{"class":380}," True\n",[19,153746,153747],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153749,153751],{"id":153750},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[292,153753,153755],{"id":153754},"_1251-数据结构","12.5.1 数据结构",[312,153757,153759],{"className":30523,"code":153758,"language":30525,"meta":30,"style":30},"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",[318,153760,153761,153769,153800,153830,153859,153888],{"__ignoreMap":30},[321,153762,153763,153765,153767],{"class":323,"line":324},[321,153764,148610],{"class":331},[321,153766,377],{"class":327},[321,153768,55592],{"class":331},[321,153770,153771,153773,153775,153777,153779,153781,153784,153786,153789,153791,153793,153795,153798],{"class":323,"line":167},[321,153772,148530],{"class":331},[321,153774,148142],{"class":436},[321,153776,51582],{"class":331},[321,153778,148753],{"class":436},[321,153780,12642],{"class":331},[321,153782,153783],{"class":436},"\"category\"",[321,153785,51582],{"class":331},[321,153787,153788],{"class":436},"\"手机\"",[321,153790,12642],{"class":331},[321,153792,84229],{"class":436},[321,153794,51582],{"class":331},[321,153796,153797],{"class":380},"12000",[321,153799,5136],{"class":331},[321,153801,153802,153804,153806,153808,153810,153812,153814,153816,153819,153821,153823,153825,153828],{"class":323,"line":200},[321,153803,148530],{"class":331},[321,153805,148142],{"class":436},[321,153807,51582],{"class":331},[321,153809,148753],{"class":436},[321,153811,12642],{"class":331},[321,153813,153783],{"class":436},[321,153815,51582],{"class":331},[321,153817,153818],{"class":436},"\"电脑\"",[321,153820,12642],{"class":331},[321,153822,84229],{"class":436},[321,153824,51582],{"class":331},[321,153826,153827],{"class":380},"18000",[321,153829,5136],{"class":331},[321,153831,153832,153834,153836,153838,153840,153842,153844,153846,153848,153850,153852,153854,153857],{"class":323,"line":1401},[321,153833,148530],{"class":331},[321,153835,148142],{"class":436},[321,153837,51582],{"class":331},[321,153839,148774],{"class":436},[321,153841,12642],{"class":331},[321,153843,153783],{"class":436},[321,153845,51582],{"class":331},[321,153847,153788],{"class":436},[321,153849,12642],{"class":331},[321,153851,84229],{"class":436},[321,153853,51582],{"class":331},[321,153855,153856],{"class":380},"15000",[321,153858,5136],{"class":331},[321,153860,153861,153863,153865,153867,153869,153871,153873,153875,153877,153879,153881,153883,153886],{"class":323,"line":1407},[321,153862,148530],{"class":331},[321,153864,148142],{"class":436},[321,153866,51582],{"class":331},[321,153868,148774],{"class":436},[321,153870,12642],{"class":331},[321,153872,153783],{"class":436},[321,153874,51582],{"class":331},[321,153876,153818],{"class":436},[321,153878,12642],{"class":331},[321,153880,84229],{"class":436},[321,153882,51582],{"class":331},[321,153884,153885],{"class":380},"16000",[321,153887,5136],{"class":331},[321,153889,153890],{"class":323,"line":1421},[321,153891,33391],{"class":331},[292,153893,153895],{"id":153894},"_1252-按日期统计","12.5.2 按日期统计",[312,153897,153899],{"className":30523,"code":153898,"language":30525,"meta":30,"style":30},"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",[318,153900,153901,153910,153914,153925,153939,153952,153971,153975],{"__ignoreMap":30},[321,153902,153903,153906,153908],{"class":323,"line":324},[321,153904,153905],{"class":331},"daily_total ",[321,153907,377],{"class":327},[321,153909,88013],{"class":331},[321,153911,153912],{"class":323,"line":167},[321,153913,2606],{"emptyLinePlaceholder":251},[321,153915,153916,153918,153920,153922],{"class":323,"line":200},[321,153917,3231],{"class":327},[321,153919,148354],{"class":331},[321,153921,26188],{"class":327},[321,153923,153924],{"class":331}," sales:\n",[321,153926,153927,153930,153932,153935,153937],{"class":323,"line":1401},[321,153928,153929],{"class":331},"    date ",[321,153931,377],{"class":327},[321,153933,153934],{"class":331}," item[",[321,153936,148142],{"class":436},[321,153938,33391],{"class":331},[321,153940,153941,153944,153946,153948,153950],{"class":323,"line":1407},[321,153942,153943],{"class":331},"    amount ",[321,153945,377],{"class":327},[321,153947,153934],{"class":331},[321,153949,84229],{"class":436},[321,153951,33391],{"class":331},[321,153953,153954,153957,153959,153962,153964,153966,153968],{"class":323,"line":1421},[321,153955,153956],{"class":331},"    daily_total[date] ",[321,153958,377],{"class":327},[321,153960,153961],{"class":331}," daily_total.get(date, ",[321,153963,523],{"class":380},[321,153965,13921],{"class":331},[321,153967,813],{"class":327},[321,153969,153970],{"class":331}," amount\n",[321,153972,153973],{"class":323,"line":1427},[321,153974,2606],{"emptyLinePlaceholder":251},[321,153976,153977,153979],{"class":323,"line":1518},[321,153978,30560],{"class":380},[321,153980,153981],{"class":331},"(daily_total)\n",[292,153983,153985],{"id":153984},"_1253-按类别统计","12.5.3 按类别统计",[312,153987,153989],{"className":30523,"code":153988,"language":30525,"meta":30,"style":30},"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",[318,153990,153991,154000,154004,154014,154027,154039,154057,154061],{"__ignoreMap":30},[321,153992,153993,153996,153998],{"class":323,"line":324},[321,153994,153995],{"class":331},"category_total ",[321,153997,377],{"class":327},[321,153999,88013],{"class":331},[321,154001,154002],{"class":323,"line":167},[321,154003,2606],{"emptyLinePlaceholder":251},[321,154005,154006,154008,154010,154012],{"class":323,"line":200},[321,154007,3231],{"class":327},[321,154009,148354],{"class":331},[321,154011,26188],{"class":327},[321,154013,153924],{"class":331},[321,154015,154016,154019,154021,154023,154025],{"class":323,"line":1401},[321,154017,154018],{"class":331},"    category ",[321,154020,377],{"class":327},[321,154022,153934],{"class":331},[321,154024,153783],{"class":436},[321,154026,33391],{"class":331},[321,154028,154029,154031,154033,154035,154037],{"class":323,"line":1407},[321,154030,153943],{"class":331},[321,154032,377],{"class":327},[321,154034,153934],{"class":331},[321,154036,84229],{"class":436},[321,154038,33391],{"class":331},[321,154040,154041,154044,154046,154049,154051,154053,154055],{"class":323,"line":1421},[321,154042,154043],{"class":331},"    category_total[category] ",[321,154045,377],{"class":327},[321,154047,154048],{"class":331}," category_total.get(category, ",[321,154050,523],{"class":380},[321,154052,13921],{"class":331},[321,154054,813],{"class":327},[321,154056,153970],{"class":331},[321,154058,154059],{"class":323,"line":1427},[321,154060,2606],{"emptyLinePlaceholder":251},[321,154062,154063,154065],{"class":323,"line":1518},[321,154064,30560],{"class":380},[321,154066,154067],{"class":331},"(category_total)\n",[292,154069,154071],{"id":154070},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[312,154073,154075],{"className":30523,"code":154074,"language":30525,"meta":30,"style":30},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[318,154076,154077,154102],{"__ignoreMap":30},[321,154078,154079,154082,154084,154086,154089,154092,154095,154098,154100],{"class":323,"line":324},[321,154080,154081],{"class":331},"top_date, top_amount ",[321,154083,377],{"class":327},[321,154085,6158],{"class":380},[321,154087,154088],{"class":331},"(daily_total.items(), ",[321,154090,154091],{"class":5423},"key",[321,154093,154094],{"class":327},"=lambda",[321,154096,154097],{"class":331}," item: item[",[321,154099,549],{"class":380},[321,154101,4863],{"class":331},[321,154103,154104,154106],{"class":323,"line":167},[321,154105,30560],{"class":380},[321,154107,154108],{"class":331},"(top_date, top_amount)\n",[14,154110,154112],{"id":154111},"_126-绘制柱状图","12.6 绘制柱状图",[312,154114,154116],{"className":30523,"code":154115,"language":30525,"meta":30,"style":30},"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",[318,154117,154118,154132,154143,154147,154155,154167,154179,154190,154194,154198,154208,154219,154233,154238,154255,154272,154288,154292],{"__ignoreMap":30},[321,154119,154120,154122,154124,154126,154128,154130],{"class":323,"line":324},[321,154121,30882],{"class":327},[321,154123,147524],{"class":331},[321,154125,30537],{"class":327},[321,154127,147529],{"class":331},[321,154129,31528],{"class":327},[321,154131,147534],{"class":331},[321,154133,154134,154136,154138,154140],{"class":323,"line":167},[321,154135,30882],{"class":327},[321,154137,147383],{"class":331},[321,154139,30537],{"class":327},[321,154141,154142],{"class":331}," Bar\n",[321,154144,154145],{"class":323,"line":200},[321,154146,2606],{"emptyLinePlaceholder":251},[321,154148,154149,154151,154153],{"class":323,"line":1401},[321,154150,153995],{"class":331},[321,154152,377],{"class":327},[321,154154,15779],{"class":331},[321,154156,154157,154160,154162,154165],{"class":323,"line":1407},[321,154158,154159],{"class":436},"    \"手机\"",[321,154161,51582],{"class":331},[321,154163,154164],{"class":380},"27000",[321,154166,31611],{"class":331},[321,154168,154169,154172,154174,154177],{"class":323,"line":1421},[321,154170,154171],{"class":436},"    \"电脑\"",[321,154173,51582],{"class":331},[321,154175,154176],{"class":380},"34000",[321,154178,31611],{"class":331},[321,154180,154181,154184,154186,154188],{"class":323,"line":1427},[321,154182,154183],{"class":436},"    \"耳机\"",[321,154185,51582],{"class":331},[321,154187,124544],{"class":380},[321,154189,31611],{"class":331},[321,154191,154192],{"class":323,"line":1518},[321,154193,1771],{"class":331},[321,154195,154196],{"class":323,"line":1524},[321,154197,2606],{"emptyLinePlaceholder":251},[321,154199,154200,154203,154205],{"class":323,"line":1536},[321,154201,154202],{"class":331},"bar ",[321,154204,377],{"class":327},[321,154206,154207],{"class":331}," Bar()\n",[321,154209,154210,154213,154216],{"class":323,"line":1818},[321,154211,154212],{"class":331},"bar.add_xaxis(",[321,154214,154215],{"class":380},"list",[321,154217,154218],{"class":331},"(category_total.keys()))\n",[321,154220,154221,154224,154226,154228,154230],{"class":323,"line":1823},[321,154222,154223],{"class":331},"bar.add_yaxis(",[321,154225,147440],{"class":436},[321,154227,12642],{"class":331},[321,154229,154215],{"class":380},[321,154231,154232],{"class":331},"(category_total.values()))\n",[321,154234,154235],{"class":323,"line":1829},[321,154236,154237],{"class":331},"bar.set_global_opts(\n",[321,154239,154240,154242,154244,154246,154248,154250,154253],{"class":323,"line":1834},[321,154241,147618],{"class":5423},[321,154243,377],{"class":327},[321,154245,147623],{"class":331},[321,154247,51552],{"class":5423},[321,154249,377],{"class":327},[321,154251,154252],{"class":436},"\"品类销售额\"",[321,154254,38192],{"class":331},[321,154256,154257,154259,154261,154263,154265,154267,154270],{"class":323,"line":1848},[321,154258,147637],{"class":5423},[321,154260,377],{"class":327},[321,154262,147642],{"class":331},[321,154264,79955],{"class":5423},[321,154266,377],{"class":327},[321,154268,154269],{"class":436},"\"品类\"",[321,154271,38192],{"class":331},[321,154273,154274,154276,154278,154280,154282,154284,154286],{"class":323,"line":1853},[321,154275,147656],{"class":5423},[321,154277,377],{"class":327},[321,154279,147642],{"class":331},[321,154281,79955],{"class":5423},[321,154283,377],{"class":327},[321,154285,147440],{"class":436},[321,154287,38192],{"class":331},[321,154289,154290],{"class":323,"line":1859},[321,154291,338],{"class":331},[321,154293,154294,154297,154300],{"class":323,"line":1880},[321,154295,154296],{"class":331},"bar.render(",[321,154298,154299],{"class":436},"\"category_sales.html\"",[321,154301,338],{"class":331},[14,154303,154305],{"id":154304},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154307,154308],{},"时间线适合展示不同日期、月份、年份的数据变化。",[312,154310,154312],{"className":30523,"code":154311,"language":30525,"meta":30,"style":30},"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",[318,154313,154314,154328,154339,154343,154351,154375,154398,154423,154427,154431,154441,154445,154456,154465,154475,154489,154520,154525,154529],{"__ignoreMap":30},[321,154315,154316,154318,154320,154322,154324,154326],{"class":323,"line":324},[321,154317,30882],{"class":327},[321,154319,147524],{"class":331},[321,154321,30537],{"class":327},[321,154323,147529],{"class":331},[321,154325,31528],{"class":327},[321,154327,147534],{"class":331},[321,154329,154330,154332,154334,154336],{"class":323,"line":167},[321,154331,30882],{"class":327},[321,154333,147383],{"class":331},[321,154335,30537],{"class":327},[321,154337,154338],{"class":331}," Bar, Timeline\n",[321,154340,154341],{"class":323,"line":200},[321,154342,2606],{"emptyLinePlaceholder":251},[321,154344,154345,154347,154349],{"class":323,"line":1401},[321,154346,101803],{"class":331},[321,154348,377],{"class":327},[321,154350,15779],{"class":331},[321,154352,154353,154356,154359,154361,154363,154365,154367,154369,154371,154373],{"class":323,"line":1407},[321,154354,154355],{"class":436},"    \"2024-10-01\"",[321,154357,154358],{"class":331},": {",[321,154360,153788],{"class":436},[321,154362,51582],{"class":331},[321,154364,153797],{"class":380},[321,154366,12642],{"class":331},[321,154368,153818],{"class":436},[321,154370,51582],{"class":331},[321,154372,153827],{"class":380},[321,154374,5136],{"class":331},[321,154376,154377,154380,154382,154384,154386,154388,154390,154392,154394,154396],{"class":323,"line":1421},[321,154378,154379],{"class":436},"    \"2024-10-02\"",[321,154381,154358],{"class":331},[321,154383,153788],{"class":436},[321,154385,51582],{"class":331},[321,154387,153856],{"class":380},[321,154389,12642],{"class":331},[321,154391,153818],{"class":436},[321,154393,51582],{"class":331},[321,154395,153885],{"class":380},[321,154397,5136],{"class":331},[321,154399,154400,154403,154405,154407,154409,154412,154414,154416,154418,154421],{"class":323,"line":1427},[321,154401,154402],{"class":436},"    \"2024-10-03\"",[321,154404,154358],{"class":331},[321,154406,153788],{"class":436},[321,154408,51582],{"class":331},[321,154410,154411],{"class":380},"17000",[321,154413,12642],{"class":331},[321,154415,153818],{"class":436},[321,154417,51582],{"class":331},[321,154419,154420],{"class":380},"19000",[321,154422,5136],{"class":331},[321,154424,154425],{"class":323,"line":1518},[321,154426,1771],{"class":331},[321,154428,154429],{"class":323,"line":1524},[321,154430,2606],{"emptyLinePlaceholder":251},[321,154432,154433,154436,154438],{"class":323,"line":1536},[321,154434,154435],{"class":331},"timeline ",[321,154437,377],{"class":327},[321,154439,154440],{"class":331}," Timeline()\n",[321,154442,154443],{"class":323,"line":1818},[321,154444,2606],{"emptyLinePlaceholder":251},[321,154446,154447,154449,154452,154454],{"class":323,"line":1823},[321,154448,3231],{"class":327},[321,154450,154451],{"class":331}," date, category_data ",[321,154453,26188],{"class":327},[321,154455,149293],{"class":331},[321,154457,154458,154461,154463],{"class":323,"line":1829},[321,154459,154460],{"class":331},"    bar ",[321,154462,377],{"class":327},[321,154464,154207],{"class":331},[321,154466,154467,154470,154472],{"class":323,"line":1834},[321,154468,154469],{"class":331},"    bar.add_xaxis(",[321,154471,154215],{"class":380},[321,154473,154474],{"class":331},"(category_data.keys()))\n",[321,154476,154477,154480,154482,154484,154486],{"class":323,"line":1848},[321,154478,154479],{"class":331},"    bar.add_yaxis(",[321,154481,147440],{"class":436},[321,154483,12642],{"class":331},[321,154485,154215],{"class":380},[321,154487,154488],{"class":331},"(category_data.values()))\n",[321,154490,154491,154494,154497,154499,154501,154503,154505,154507,154509,154511,154513,154515,154518],{"class":323,"line":1853},[321,154492,154493],{"class":331},"    bar.set_global_opts(",[321,154495,154496],{"class":5423},"title_opts",[321,154498,377],{"class":327},[321,154500,147623],{"class":331},[321,154502,51552],{"class":5423},[321,154504,377],{"class":327},[321,154506,384],{"class":327},[321,154508,583],{"class":436},[321,154510,1228],{"class":380},[321,154512,74071],{"class":331},[321,154514,1278],{"class":380},[321,154516,154517],{"class":436},"销售额\"",[321,154519,30642],{"class":331},[321,154521,154522],{"class":323,"line":1859},[321,154523,154524],{"class":331},"    timeline.add(bar, date)\n",[321,154526,154527],{"class":323,"line":1880},[321,154528,2606],{"emptyLinePlaceholder":251},[321,154530,154531,154534,154537],{"class":323,"line":1885},[321,154532,154533],{"class":331},"timeline.render(",[321,154535,154536],{"class":436},"\"timeline_sales.html\"",[321,154538,338],{"class":331},[14,154540,154542],{"id":154541},"_128-绘制地图","12.8 绘制地图",[19,154544,154545],{},"地图适合展示地区数据。",[312,154547,154549],{"className":30523,"code":154548,"language":30525,"meta":30,"style":30},"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",[318,154550,154551,154565,154576,154580,154588,154601,154613,154626,154639,154643,154647,154657,154672,154677,154694,154713,154717],{"__ignoreMap":30},[321,154552,154553,154555,154557,154559,154561,154563],{"class":323,"line":324},[321,154554,30882],{"class":327},[321,154556,147524],{"class":331},[321,154558,30537],{"class":327},[321,154560,147529],{"class":331},[321,154562,31528],{"class":327},[321,154564,147534],{"class":331},[321,154566,154567,154569,154571,154573],{"class":323,"line":167},[321,154568,30882],{"class":327},[321,154570,147383],{"class":331},[321,154572,30537],{"class":327},[321,154574,154575],{"class":331}," Map\n",[321,154577,154578],{"class":323,"line":200},[321,154579,2606],{"emptyLinePlaceholder":251},[321,154581,154582,154584,154586],{"class":323,"line":1401},[321,154583,101803],{"class":331},[321,154585,377],{"class":327},[321,154587,55592],{"class":331},[321,154589,154590,154593,154595,154597,154599],{"class":323,"line":1407},[321,154591,154592],{"class":331},"    (",[321,154594,69414],{"class":436},[321,154596,12642],{"class":331},[321,154598,1149],{"class":380},[321,154600,38192],{"class":331},[321,154602,154603,154605,154607,154609,154611],{"class":323,"line":1421},[321,154604,154592],{"class":331},[321,154606,69434],{"class":436},[321,154608,12642],{"class":331},[321,154610,147457],{"class":380},[321,154612,38192],{"class":331},[321,154614,154615,154617,154620,154622,154624],{"class":323,"line":1427},[321,154616,154592],{"class":331},[321,154618,154619],{"class":436},"\"广东\"",[321,154621,12642],{"class":331},[321,154623,1928],{"class":380},[321,154625,38192],{"class":331},[321,154627,154628,154630,154633,154635,154637],{"class":323,"line":1518},[321,154629,154592],{"class":331},[321,154631,154632],{"class":436},"\"浙江\"",[321,154634,12642],{"class":331},[321,154636,147462],{"class":380},[321,154638,38192],{"class":331},[321,154640,154641],{"class":323,"line":1524},[321,154642,33391],{"class":331},[321,154644,154645],{"class":323,"line":1536},[321,154646,2606],{"emptyLinePlaceholder":251},[321,154648,154649,154652,154654],{"class":323,"line":1818},[321,154650,154651],{"class":331},"map_chart ",[321,154653,377],{"class":327},[321,154655,154656],{"class":331}," Map()\n",[321,154658,154659,154662,154664,154667,154670],{"class":323,"line":1823},[321,154660,154661],{"class":331},"map_chart.add(",[321,154663,147440],{"class":436},[321,154665,154666],{"class":331},", data, ",[321,154668,154669],{"class":436},"\"china\"",[321,154671,338],{"class":331},[321,154673,154674],{"class":323,"line":1829},[321,154675,154676],{"class":331},"map_chart.set_global_opts(\n",[321,154678,154679,154681,154683,154685,154687,154689,154692],{"class":323,"line":1834},[321,154680,147618],{"class":5423},[321,154682,377],{"class":327},[321,154684,147623],{"class":331},[321,154686,51552],{"class":5423},[321,154688,377],{"class":327},[321,154690,154691],{"class":436},"\"地区销售额\"",[321,154693,38192],{"class":331},[321,154695,154696,154699,154701,154704,154707,154709,154711],{"class":323,"line":1848},[321,154697,154698],{"class":5423},"    visualmap_opts",[321,154700,377],{"class":327},[321,154702,154703],{"class":331},"opts.VisualMapOpts(",[321,154705,154706],{"class":5423},"max_",[321,154708,377],{"class":327},[321,154710,1928],{"class":380},[321,154712,38192],{"class":331},[321,154714,154715],{"class":323,"line":1853},[321,154716,338],{"class":331},[321,154718,154719,154722,154725],{"class":323,"line":1859},[321,154720,154721],{"class":331},"map_chart.render(",[321,154723,154724],{"class":436},"\"map_sales.html\"",[321,154726,338],{"class":331},[19,154728,154729],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154731,154733],{"id":154732},"_129-项目拆分建议","12.9 项目拆分建议",[19,154735,154736],{},"当代码超过一个文件时，可以这样组织：",[312,154738,154741],{"className":154739,"code":154740,"language":5394,"meta":30},[5392],"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",[318,154742,154740],{"__ignoreMap":30},[19,154744,154745],{},"职责：",[151,154747,154748,154754,154760,154766],{},[154,154749,154750,154753],{},[318,154751,154752],{},"main.py","：程序入口。",[154,154755,154756,154759],{},[318,154757,154758],{},"file_utils.py","：读写 JSON。",[154,154761,154762,154765],{},[318,154763,154764],{},"sales_service.py","：统计销售数据。",[154,154767,154768,154771],{},[318,154769,154770],{},"chart_builder.py","：生成图表。",[14,154773,154775],{"id":154774},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154777,154778],{},"语法基础：",[151,154780,154781,154784,154787,154790],{},[154,154782,154783],{},"会写变量、注释、输入输出。",[154,154785,154786],{},"会使用 int、float、str、bool。",[154,154788,154789],{},"会做类型转换。",[154,154791,154792],{},"会使用 f-string 格式化输出。",[19,154794,154795],{},"流程控制：",[151,154797,154798,154804,154810,154818],{},[154,154799,154800,154801,28530],{},"会写 ",[318,154802,154803],{},"if elif else",[154,154805,154800,154806,101163,154808,28530],{},[318,154807,108808],{},[318,154809,3231],{},[154,154811,154812,154813,101163,154815,28530],{},"理解 ",[318,154814,2259],{},[318,154816,154817],{},"continue",[154,154819,154820],{},"能写嵌套循环。",[19,154822,154823],{},"函数：",[151,154825,154826,154829,154832,154835],{},[154,154827,154828],{},"会定义和调用函数。",[154,154830,154831],{},"理解参数和返回值。",[154,154833,154834],{},"知道局部变量和全局变量。",[154,154836,154837],{},"会使用默认参数、关键字参数、不定长参数。",[19,154839,154840],{},"容器：",[151,154842,154843,154846,154849,154852,154855],{},[154,154844,154845],{},"会使用列表增删改查。",[154,154847,154848],{},"会遍历列表、字典。",[154,154850,154851],{},"会使用切片。",[154,154853,154854],{},"会用集合去重。",[154,154856,154857],{},"会处理列表嵌套字典。",[19,154859,154860],{},"文件和模块：",[151,154862,154863,154866,154869,154872,154875],{},[154,154864,154865],{},"会读写文本文件。",[154,154867,154868],{},"会读写 JSON。",[154,154870,154871],{},"会捕获常见异常。",[154,154873,154874],{},"会导入模块和第三方包。",[154,154876,154877],{},"会创建简单包结构。",[19,154879,154880],{},"项目能力：",[151,154882,154883,154886,154889,154892,154895],{},[154,154884,154885],{},"能把代码拆成函数。",[154,154887,154888],{},"能把数据保存到文件。",[154,154890,154891],{},"能处理用户输入错误。",[154,154893,154894],{},"能写一个完整菜单程序。",[154,154896,154897],{},"能用 pyecharts 生成图表。",[14,154899,154901],{"id":154900},"_1211-推荐练习顺序","12.11 推荐练习顺序",[151,154903,154904,154907,154910,154913,154916,154919,154922,154925],{},[154,154905,154906],{},"猜数字游戏。",[154,154908,154909],{},"ATM 菜单程序。",[154,154911,154912],{},"学生成绩统计。",[154,154914,154915],{},"学生管理系统函数版。",[154,154917,154918],{},"学生管理系统文件持久化版。",[154,154920,154921],{},"学生管理系统面向对象版。",[154,154923,154924],{},"销售数据统计。",[154,154926,154927],{},"销售数据可视化。",[14,154929,154931],{"id":154930},"_1212-常见学习误区","12.12 常见学习误区",[151,154933,154934,154937,154940,154943,154946,154949,154952],{},[154,154935,154936],{},"只看视频不敲代码。",[154,154938,154939],{},"一报错就复制错误去搜，不先读报错位置。",[154,154941,154942],{},"变量名随便写，后续自己看不懂。",[154,154944,154945],{},"所有代码都写在一个文件一个函数里。",[154,154947,154948],{},"不保存练习代码，复习时没有材料。",[154,154950,154951],{},"还没掌握列表字典就急着学框架。",[154,154953,154954],{},"不会读官方文档，只依赖教程。",[14,154956,154958],{"id":154957},"_1213-如何读报错","12.13 如何读报错",[19,154960,154961],{},"报错通常从下往上看最后几行。",[19,154963,15342],{},[312,154965,154968],{"className":154966,"code":154967,"language":5394,"meta":30},[5392],"ValueError: invalid literal for int() with base 10: 'abc'\n",[318,154969,154967],{"__ignoreMap":30},[19,154971,24744],{},[151,154973,154974,154980,154990],{},[154,154975,154976,154977,28530],{},"异常类型是 ",[318,154978,154979],{},"ValueError",[154,154981,107490,154982,154985,154986,154989],{},[318,154983,154984],{},"int()"," 无法把 ",[318,154987,154988],{},"'abc'"," 转成整数。",[154,154991,154992],{},"应该检查输入内容或增加异常处理。",[19,154994,154995],{},"再看文件名和行号：",[312,154997,155000],{"className":154998,"code":154999,"language":5394,"meta":30},[5392],"File \"main.py\", line 10, in \u003Cmodule>\n",[318,155001,154999],{"__ignoreMap":30},[19,155003,155004,155005,155007],{},"表示错误发生在 ",[318,155006,154752],{}," 第 10 行。",[14,155009,155011],{"id":155010},"_1214-后续学习方向","12.14 后续学习方向",[19,155013,155014],{},"Python 基础完成后，可以按兴趣选择方向：",[151,155016,155017,155029,155038,155050,155061,155070,155080],{},[154,155018,155019,155020,544,155023,544,155026,28530],{},"自动化办公：",[318,155021,155022],{},"openpyxl",[318,155024,155025],{},"python-docx",[318,155027,155028],{},"pdfplumber",[154,155030,155031,155032,544,155034,544,155036,28530],{},"数据分析：",[318,155033,100771],{},[318,155035,146330],{},[318,155037,146338],{},[154,155039,155040,155041,544,155044,544,155047,28530],{},"Web 后端：",[318,155042,155043],{},"Flask",[318,155045,155046],{},"FastAPI",[318,155048,155049],{},"Django",[154,155051,155052,155053,544,155055,544,155058,28530],{},"爬虫：",[318,155054,146315],{},[318,155056,155057],{},"BeautifulSoup",[318,155059,155060],{},"Scrapy",[154,155062,155063,155064,544,155066,155069],{},"测试开发：",[318,155065,146362],{},[318,155067,155068],{},"selenium","、接口测试。",[154,155071,155072,155073,544,155075,544,155077,28530],{},"人工智能：",[318,155074,100771],{},[318,155076,146330],{},[318,155078,155079],{},"pytorch",[154,155081,155082,155083,544,155085,544,155088,28530],{},"运维脚本：",[318,155084,145931],{},[318,155086,155087],{},"subprocess",[318,155089,155090],{},"paramiko",[19,155092,155093],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155095,155097],{"id":155096},"_1215-结课练习","12.15 结课练习",[151,155099,155100,155103,155106,155109,155112,155115,155118,155121],{},[154,155101,155102],{},"完成函数版学生管理系统。",[154,155104,155105],{},"给学生管理系统增加 JSON 持久化。",[154,155107,155108],{},"给学生管理系统增加异常处理。",[154,155110,155111],{},"把学生管理系统改成面向对象版。",[154,155113,155114],{},"使用 pyecharts 绘制学生成绩柱状图。",[154,155116,155117],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[154,155119,155120],{},"按品类统计销售额并绘制柱状图。",[154,155122,155123],{},"写一份自己的 Python 学习路线图。",[5333,155125,155126],{},"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":30,"searchDepth":167,"depth":167,"links":155128},[155129,155130,155133,155134,155135,155141,155142,155143,155144,155145,155146,155147,155148,155149,155150],{"id":151845,"depth":167,"text":151846},{"id":151895,"depth":167,"text":151896,"children":155131},[155132],{"id":151899,"depth":200,"text":151900},{"id":151938,"depth":167,"text":151939},{"id":153412,"depth":167,"text":153413},{"id":153750,"depth":167,"text":153751,"children":155136},[155137,155138,155139,155140],{"id":153754,"depth":200,"text":153755},{"id":153894,"depth":200,"text":153895},{"id":153984,"depth":200,"text":153985},{"id":154070,"depth":200,"text":154071},{"id":154111,"depth":167,"text":154112},{"id":154304,"depth":167,"text":154305},{"id":154541,"depth":167,"text":154542},{"id":154732,"depth":167,"text":154733},{"id":154774,"depth":167,"text":154775},{"id":154900,"depth":167,"text":154901},{"id":154930,"depth":167,"text":154931},{"id":154957,"depth":167,"text":154958},{"id":155010,"depth":167,"text":155011},{"id":155096,"depth":167,"text":155097},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151837,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155157,"title":155158,"body":155159,"description":23584,"extension":249,"meta":157628,"navigation":251,"path":157629,"seo":157630,"stem":157631,"__hash__":157632},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155160,"toc":157603},[155161,155164,155168,155171,155174,155194,155197,155220,155223,155226,155248,155251,155273,155277,155280,155320,155323,155444,155448,155451,155491,155494,155518,155521,155525,155528,155542,155575,155578,155613,155616,155639,155642,155675,155678,155680,155686,155761,155764,155770,155787,155827,155831,155834,155880,155882,155920,155923,155958,155961,155996,155999,156031,156034,156053,156057,156061,156174,156176,156251,156255,156301,156304,156330,156339,156343,156346,156409,156417,156445,156449,156489,156554,156558,156561,156600,156603,156648,156651,156712,156716,156743,156746,156774,156777,156781,156785,156850,156853,156891,156894,156926,156930,157029,157033,157036,157109,157112,157160,157164,157170,157210,157213,157260,157263,157312,157316,157318,157332,157334,157515,157519,157546,157566,157573,157577,157594,157600],[10,155162,155158],{"id":155163},"_2-基础语法变量与字符串",[14,155165,155167],{"id":155166},"_21-注释","2.1 注释",[19,155169,155170],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155172,155173],{},"单行注释：",[312,155175,155177],{"className":30523,"code":155176,"language":30525,"meta":30,"style":30},"# 这是单行注释\nprint(\"hello\")\n",[318,155178,155179,155184],{"__ignoreMap":30},[321,155180,155181],{"class":323,"line":324},[321,155182,155183],{"class":390},"# 这是单行注释\n",[321,155185,155186,155188,155190,155192],{"class":323,"line":167},[321,155187,30560],{"class":380},[321,155189,332],{"class":331},[321,155191,6051],{"class":436},[321,155193,338],{"class":331},[19,155195,155196],{},"多行说明常用三引号：",[312,155198,155200],{"className":30523,"code":155199,"language":30525,"meta":30,"style":30},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[318,155201,155202,155206,155211,155216],{"__ignoreMap":30},[321,155203,155204],{"class":323,"line":324},[321,155205,95843],{"class":436},[321,155207,155208],{"class":323,"line":167},[321,155209,155210],{"class":436},"这是多行说明。\n",[321,155212,155213],{"class":323,"line":200},[321,155214,155215],{"class":436},"常用于文件顶部说明、函数说明等。\n",[321,155217,155218],{"class":323,"line":1401},[321,155219,95843],{"class":436},[19,155221,155222],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155224,155225],{},"不好：",[312,155227,155229],{"className":30523,"code":155228,"language":30525,"meta":30,"style":30},"# age 加 1\nage = age + 1\n",[318,155230,155231,155236],{"__ignoreMap":30},[321,155232,155233],{"class":323,"line":324},[321,155234,155235],{"class":390},"# age 加 1\n",[321,155237,155238,155240,155242,155244,155246],{"class":323,"line":167},[321,155239,146691],{"class":331},[321,155241,377],{"class":327},[321,155243,15914],{"class":331},[321,155245,813],{"class":327},[321,155247,55844],{"class":380},[19,155249,155250],{},"较好：",[312,155252,155254],{"className":30523,"code":155253,"language":30525,"meta":30,"style":30},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[318,155255,155256,155261],{"__ignoreMap":30},[321,155257,155258],{"class":323,"line":324},[321,155259,155260],{"class":390},"# 用户过完生日后，年龄增加一岁\n",[321,155262,155263,155265,155267,155269,155271],{"class":323,"line":167},[321,155264,146691],{"class":331},[321,155266,377],{"class":327},[321,155268,15914],{"class":331},[321,155270,813],{"class":327},[321,155272,55844],{"class":380},[14,155274,155276],{"id":155275},"_22-字面量","2.2 字面量",[19,155278,155279],{},"字面量就是代码中直接写出来的数据。",[312,155281,155283],{"className":30523,"code":155282,"language":30525,"meta":30,"style":30},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[318,155284,155285,155292,155299,155306,155313],{"__ignoreMap":30},[321,155286,155287,155289],{"class":323,"line":324},[321,155288,643],{"class":380},[321,155290,155291],{"class":390},"          # 整数\n",[321,155293,155294,155296],{"class":323,"line":167},[321,155295,381],{"class":380},[321,155297,155298],{"class":390},"         # 小数\n",[321,155300,155301,155303],{"class":323,"line":200},[321,155302,6051],{"class":436},[321,155304,155305],{"class":390},"      # 字符串\n",[321,155307,155308,155310],{"class":323,"line":1401},[321,155309,31621],{"class":380},[321,155311,155312],{"class":390},"         # 布尔值\n",[321,155314,155315,155317],{"class":323,"line":1407},[321,155316,95831],{"class":380},[321,155318,155319],{"class":390},"         # 空值\n",[19,155321,155322],{},"常见字面量类型：",[469,155324,155325,155335],{},[472,155326,155327],{},[475,155328,155329,155331,155333],{},[478,155330,23945],{},[478,155332,27637],{},[478,155334,26014],{},[516,155336,155337,155348,155359,155370,155382,155394,155406,155419,155431],{},[475,155338,155339,155341,155345],{},[521,155340,335],{},[521,155342,155343],{},[318,155344,643],{},[521,155346,155347],{},"整数",[475,155349,155350,155352,155356],{},[521,155351,371],{},[521,155353,155354],{},[318,155355,381],{},[521,155357,155358],{},"浮点数",[475,155360,155361,155363,155367],{},[521,155362,1506],{},[521,155364,155365],{},[318,155366,6051],{},[521,155368,155369],{},"字符串",[475,155371,155372,155374,155380],{},[521,155373,1561],{},[521,155375,155376,544,155378],{},[318,155377,31621],{},[318,155379,34132],{},[521,155381,66160],{},[475,155383,155384,155387,155391],{},[521,155385,155386],{},"NoneType",[521,155388,155389],{},[318,155390,95831],{},[521,155392,155393],{},"空值",[475,155395,155396,155398,155403],{},[521,155397,154215],{},[521,155399,155400],{},[318,155401,155402],{},"[1, 2, 3]",[521,155404,155405],{},"列表",[475,155407,155408,155411,155416],{},[521,155409,155410],{},"tuple",[521,155412,155413],{},[318,155414,155415],{},"(1, 2, 3)",[521,155417,155418],{},"元组",[475,155420,155421,155423,155428],{},[521,155422,114691],{},[521,155424,155425],{},[318,155426,155427],{},"{\"name\": \"张三\"}",[521,155429,155430],{},"字典",[475,155432,155433,155436,155441],{},[521,155434,155435],{},"set",[521,155437,155438],{},[318,155439,155440],{},"{1, 2, 3}",[521,155442,155443],{},"集合",[14,155445,155447],{"id":155446},"_23-变量","2.3 变量",[19,155449,155450],{},"变量是保存数据的名字。",[312,155452,155454],{"className":30523,"code":155453,"language":30525,"meta":30,"style":30},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[318,155455,155456,155464,155472,155482],{"__ignoreMap":30},[321,155457,155458,155460,155462],{"class":323,"line":324},[321,155459,146681],{"class":331},[321,155461,377],{"class":327},[321,155463,149498],{"class":436},[321,155465,155466,155468,155470],{"class":323,"line":167},[321,155467,146691],{"class":331},[321,155469,377],{"class":327},[321,155471,146696],{"class":380},[321,155473,155474,155477,155479],{"class":323,"line":200},[321,155475,155476],{"class":331},"height ",[321,155478,377],{"class":327},[321,155480,155481],{"class":380}," 1.75\n",[321,155483,155484,155487,155489],{"class":323,"line":1401},[321,155485,155486],{"class":331},"is_student ",[321,155488,377],{"class":327},[321,155490,153744],{"class":380},[19,155492,155493],{},"Python 的变量不需要提前声明类型：",[312,155495,155497],{"className":30523,"code":155496,"language":30525,"meta":30,"style":30},"score = 100\nscore = \"满分\"\n",[318,155498,155499,155509],{"__ignoreMap":30},[321,155500,155501,155504,155506],{"class":323,"line":324},[321,155502,155503],{"class":331},"score ",[321,155505,377],{"class":327},[321,155507,155508],{"class":380}," 100\n",[321,155510,155511,155513,155515],{"class":323,"line":167},[321,155512,155503],{"class":331},[321,155514,377],{"class":327},[321,155516,155517],{"class":436}," \"满分\"\n",[19,155519,155520],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155522,155524],{"id":155523},"_24-变量命名规则","2.4 变量命名规则",[19,155526,155527],{},"硬性规则：",[151,155529,155530,155533,155536,155539],{},[154,155531,155532],{},"只能由字母、数字、下划线组成。",[154,155534,155535],{},"不能以数字开头。",[154,155537,155538],{},"不能使用 Python 关键字。",[154,155540,155541],{},"区分大小写。",[312,155543,155545],{"className":30523,"code":155544,"language":30525,"meta":30,"style":30},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[318,155546,155547,155556,155565],{"__ignoreMap":30},[321,155548,155549,155552,155554],{"class":323,"line":324},[321,155550,155551],{"class":331},"user_name ",[321,155553,377],{"class":327},[321,155555,146686],{"class":436},[321,155557,155558,155561,155563],{"class":323,"line":167},[321,155559,155560],{"class":331},"age2 ",[321,155562,377],{"class":327},[321,155564,146696],{"class":380},[321,155566,155567,155570,155572],{"class":323,"line":200},[321,155568,155569],{"class":331},"_token ",[321,155571,377],{"class":327},[321,155573,155574],{"class":436}," \"abc\"\n",[19,155576,155577],{},"错误写法：",[312,155579,155581],{"className":30523,"code":155580,"language":30525,"meta":30,"style":30},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[318,155582,155583,155592,155604],{"__ignoreMap":30},[321,155584,155585,155588,155590],{"class":323,"line":324},[321,155586,155587],{"class":77548},"2age",[321,155589,13771],{"class":327},[321,155591,146696],{"class":380},[321,155593,155594,155596,155598,155600,155602],{"class":323,"line":167},[321,155595,131729],{"class":331},[321,155597,864],{"class":327},[321,155599,146681],{"class":331},[321,155601,377],{"class":327},[321,155603,146686],{"class":436},[321,155605,155606,155608,155610],{"class":323,"line":200},[321,155607,14901],{"class":327},[321,155609,13771],{"class":327},[321,155611,155612],{"class":436}," \"一班\"\n",[19,155614,155615],{},"查看关键字：",[312,155617,155619],{"className":30523,"code":155618,"language":30525,"meta":30,"style":30},"import keyword\n\nprint(keyword.kwlist)\n",[318,155620,155621,155628,155632],{"__ignoreMap":30},[321,155622,155623,155625],{"class":323,"line":324},[321,155624,30537],{"class":327},[321,155626,155627],{"class":331}," keyword\n",[321,155629,155630],{"class":323,"line":167},[321,155631,2606],{"emptyLinePlaceholder":251},[321,155633,155634,155636],{"class":323,"line":200},[321,155635,30560],{"class":380},[321,155637,155638],{"class":331},"(keyword.kwlist)\n",[19,155640,155641],{},"推荐命名风格：",[312,155643,155645],{"className":30523,"code":155644,"language":30525,"meta":30,"style":30},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[318,155646,155647,155656,155666],{"__ignoreMap":30},[321,155648,155649,155652,155654],{"class":323,"line":324},[321,155650,155651],{"class":331},"student_name ",[321,155653,377],{"class":327},[321,155655,149498],{"class":436},[321,155657,155658,155661,155663],{"class":323,"line":167},[321,155659,155660],{"class":331},"total_price ",[321,155662,377],{"class":327},[321,155664,155665],{"class":380}," 99.8\n",[321,155667,155668,155671,155673],{"class":323,"line":200},[321,155669,155670],{"class":331},"is_finished ",[321,155672,377],{"class":327},[321,155674,125952],{"class":380},[19,155676,155677],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155679,50877],{"id":50876},[19,155681,104511,155682,155685],{},[318,155683,155684],{},"type()"," 查看数据类型：",[312,155687,155689],{"className":30523,"code":155688,"language":30525,"meta":30,"style":30},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[318,155690,155691,155705,155719,155733,155747],{"__ignoreMap":30},[321,155692,155693,155695,155697,155699,155701,155703],{"class":323,"line":324},[321,155694,30560],{"class":380},[321,155696,332],{"class":331},[321,155698,103252],{"class":380},[321,155700,332],{"class":331},[321,155702,643],{"class":380},[321,155704,30642],{"class":331},[321,155706,155707,155709,155711,155713,155715,155717],{"class":323,"line":167},[321,155708,30560],{"class":380},[321,155710,332],{"class":331},[321,155712,103252],{"class":380},[321,155714,332],{"class":331},[321,155716,381],{"class":380},[321,155718,30642],{"class":331},[321,155720,155721,155723,155725,155727,155729,155731],{"class":323,"line":200},[321,155722,30560],{"class":380},[321,155724,332],{"class":331},[321,155726,103252],{"class":380},[321,155728,332],{"class":331},[321,155730,6051],{"class":436},[321,155732,30642],{"class":331},[321,155734,155735,155737,155739,155741,155743,155745],{"class":323,"line":1401},[321,155736,30560],{"class":380},[321,155738,332],{"class":331},[321,155740,103252],{"class":380},[321,155742,332],{"class":331},[321,155744,31621],{"class":380},[321,155746,30642],{"class":331},[321,155748,155749,155751,155753,155755,155757,155759],{"class":323,"line":1407},[321,155750,30560],{"class":380},[321,155752,332],{"class":331},[321,155754,103252],{"class":380},[321,155756,332],{"class":331},[321,155758,95831],{"class":380},[321,155760,30642],{"class":331},[19,155762,155763],{},"输出类似：",[312,155765,155768],{"className":155766,"code":155767,"language":5394,"meta":30},[5392],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[318,155769,155767],{"__ignoreMap":30},[19,155771,9232,155772,107428,155774,155776,155777,155779,155780,21707,155782,155779,155784,155786],{},[318,155773,1561],{},[318,155775,335],{}," 的子类，",[318,155778,31621],{}," 可以当作 ",[318,155781,549],{},[318,155783,34132],{},[318,155785,523],{},"，但业务代码中不要滥用。",[312,155788,155790],{"className":30523,"code":155789,"language":30525,"meta":30,"style":30},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[318,155791,155792,155810],{"__ignoreMap":30},[321,155793,155794,155796,155798,155800,155802,155804,155807],{"class":323,"line":324},[321,155795,30560],{"class":380},[321,155797,332],{"class":331},[321,155799,31621],{"class":380},[321,155801,45711],{"class":327},[321,155803,25263],{"class":380},[321,155805,155806],{"class":331},")   ",[321,155808,155809],{"class":390},"# 2\n",[321,155811,155812,155814,155816,155818,155820,155822,155824],{"class":323,"line":167},[321,155813,30560],{"class":380},[321,155815,332],{"class":331},[321,155817,34132],{"class":380},[321,155819,45711],{"class":327},[321,155821,25263],{"class":380},[321,155823,45953],{"class":331},[321,155825,155826],{"class":390},"# 1\n",[14,155828,155830],{"id":155829},"_26-类型转换","2.6 类型转换",[19,155832,155833],{},"常用转换函数：",[312,155835,155837],{"className":30523,"code":155836,"language":30525,"meta":30,"style":30},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[318,155838,155839,155849,155860,155870],{"__ignoreMap":30},[321,155840,155841,155843,155845,155847],{"class":323,"line":324},[321,155842,335],{"class":380},[321,155844,332],{"class":331},[321,155846,54461],{"class":436},[321,155848,338],{"class":331},[321,155850,155851,155853,155855,155858],{"class":323,"line":167},[321,155852,371],{"class":380},[321,155854,332],{"class":331},[321,155856,155857],{"class":436},"\"3.14\"",[321,155859,338],{"class":331},[321,155861,155862,155864,155866,155868],{"class":323,"line":200},[321,155863,1506],{"class":380},[321,155865,332],{"class":331},[321,155867,643],{"class":380},[321,155869,338],{"class":331},[321,155871,155872,155874,155876,155878],{"class":323,"line":1401},[321,155873,1561],{"class":380},[321,155875,332],{"class":331},[321,155877,549],{"class":380},[321,155879,338],{"class":331},[19,155881,15342],{},[312,155883,155885],{"className":30523,"code":155884,"language":30525,"meta":30,"style":30},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[318,155886,155887,155896,155907],{"__ignoreMap":30},[321,155888,155889,155891,155893],{"class":323,"line":324},[321,155890,146691],{"class":331},[321,155892,377],{"class":327},[321,155894,155895],{"class":436}," \"18\"\n",[321,155897,155898,155900,155902,155904],{"class":323,"line":167},[321,155899,146691],{"class":331},[321,155901,377],{"class":327},[321,155903,2588],{"class":380},[321,155905,155906],{"class":331},"(age)\n",[321,155908,155909,155911,155914,155916,155918],{"class":323,"line":200},[321,155910,30560],{"class":380},[321,155912,155913],{"class":331},"(age ",[321,155915,813],{"class":327},[321,155917,25263],{"class":380},[321,155919,338],{"class":331},[19,155921,155922],{},"输入得到的内容永远是字符串：",[312,155924,155926],{"className":30523,"code":155925,"language":30525,"meta":30,"style":30},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[318,155927,155928,155944],{"__ignoreMap":30},[321,155929,155930,155933,155935,155937,155939,155942],{"class":323,"line":324},[321,155931,155932],{"class":331},"num ",[321,155934,377],{"class":327},[321,155936,60750],{"class":380},[321,155938,332],{"class":331},[321,155940,155941],{"class":436},"\"请输入数字:\"",[321,155943,338],{"class":331},[321,155945,155946,155948,155950,155952,155955],{"class":323,"line":167},[321,155947,30560],{"class":380},[321,155949,332],{"class":331},[321,155951,103252],{"class":380},[321,155953,155954],{"class":331},"(num))  ",[321,155956,155957],{"class":390},"# str\n",[19,155959,155960],{},"如果要做数学运算，必须转换：",[312,155962,155964],{"className":30523,"code":155963,"language":30525,"meta":30,"style":30},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[318,155965,155966,155984],{"__ignoreMap":30},[321,155967,155968,155970,155972,155974,155976,155978,155980,155982],{"class":323,"line":324},[321,155969,155932],{"class":331},[321,155971,377],{"class":327},[321,155973,2588],{"class":380},[321,155975,332],{"class":331},[321,155977,53966],{"class":380},[321,155979,332],{"class":331},[321,155981,155941],{"class":436},[321,155983,30642],{"class":331},[321,155985,155986,155988,155990,155992,155994],{"class":323,"line":167},[321,155987,30560],{"class":380},[321,155989,45764],{"class":331},[321,155991,813],{"class":327},[321,155993,2244],{"class":380},[321,155995,338],{"class":331},[19,155997,155998],{},"常见错误：",[312,156000,156002],{"className":30523,"code":156001,"language":30525,"meta":30,"style":30},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[318,156003,156004,156017],{"__ignoreMap":30},[321,156005,156006,156008,156010,156012,156014],{"class":323,"line":324},[321,156007,335],{"class":380},[321,156009,332],{"class":331},[321,156011,155857],{"class":436},[321,156013,155806],{"class":331},[321,156015,156016],{"class":390},"# 错误\n",[321,156018,156019,156021,156023,156026,156029],{"class":323,"line":167},[321,156020,335],{"class":380},[321,156022,332],{"class":331},[321,156024,156025],{"class":436},"\"abc\"",[321,156027,156028],{"class":331},")    ",[321,156030,156016],{"class":390},[19,156032,156033],{},"正确写法：",[312,156035,156037],{"className":30523,"code":156036,"language":30525,"meta":30,"style":30},"num = float(\"3.14\")\n",[318,156038,156039],{"__ignoreMap":30},[321,156040,156041,156043,156045,156047,156049,156051],{"class":323,"line":324},[321,156042,155932],{"class":331},[321,156044,377],{"class":327},[321,156046,109942],{"class":380},[321,156048,332],{"class":331},[321,156050,155857],{"class":436},[321,156052,338],{"class":331},[14,156054,156056],{"id":156055},"_27-运算符","2.7 运算符",[292,156058,156060],{"id":156059},"_271-算术运算符","2.7.1 算术运算符",[469,156062,156063,156074],{},[472,156064,156065],{},[475,156066,156067,156070,156072],{},[478,156068,156069],{},"运算符",[478,156071,26014],{},[478,156073,27637],{},[516,156075,156076,156090,156104,156118,156132,156146,156160],{},[475,156077,156078,156082,156085],{},[521,156079,156080],{},[318,156081,813],{},[521,156083,156084],{},"加法",[521,156086,156087],{},[318,156088,156089],{},"1 + 2",[475,156091,156092,156096,156099],{},[521,156093,156094],{},[318,156095,864],{},[521,156097,156098],{},"减法",[521,156100,156101],{},[318,156102,156103],{},"5 - 3",[475,156105,156106,156110,156113],{},[521,156107,156108],{},[318,156109,787],{},[521,156111,156112],{},"乘法",[521,156114,156115],{},[318,156116,156117],{},"2 * 3",[475,156119,156120,156124,156127],{},[521,156121,156122],{},[318,156123,916],{},[521,156125,156126],{},"除法，结果是浮点数",[521,156128,156129],{},[318,156130,156131],{},"5 \u002F 2",[475,156133,156134,156138,156141],{},[521,156135,156136],{},[318,156137,33474],{},[521,156139,156140],{},"整除",[521,156142,156143],{},[318,156144,156145],{},"5 \u002F\u002F 2",[475,156147,156148,156152,156155],{},[521,156149,156150],{},[318,156151,660],{},[521,156153,156154],{},"取余",[521,156156,156157],{},[318,156158,156159],{},"5 % 2",[475,156161,156162,156166,156169],{},[521,156163,156164],{},[318,156165,10868],{},[521,156167,156168],{},"幂运算",[521,156170,156171],{},[318,156172,156173],{},"2 ** 3",[19,156175,15342],{},[312,156177,156179],{"className":30523,"code":156178,"language":30525,"meta":30,"style":30},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[318,156180,156181,156199,156216,156233],{"__ignoreMap":30},[321,156182,156183,156185,156187,156189,156192,156194,156196],{"class":323,"line":324},[321,156184,30560],{"class":380},[321,156186,332],{"class":331},[321,156188,651],{"class":380},[321,156190,156191],{"class":327}," \u002F",[321,156193,14962],{"class":380},[321,156195,155806],{"class":331},[321,156197,156198],{"class":390},"# 2.5\n",[321,156200,156201,156203,156205,156207,156210,156212,156214],{"class":323,"line":167},[321,156202,30560],{"class":380},[321,156204,332],{"class":331},[321,156206,651],{"class":380},[321,156208,156209],{"class":327}," \u002F\u002F",[321,156211,14962],{"class":380},[321,156213,45953],{"class":331},[321,156215,155809],{"class":390},[321,156217,156218,156220,156222,156224,156227,156229,156231],{"class":323,"line":200},[321,156219,30560],{"class":380},[321,156221,332],{"class":331},[321,156223,651],{"class":380},[321,156225,156226],{"class":327}," %",[321,156228,14962],{"class":380},[321,156230,155806],{"class":331},[321,156232,155826],{"class":390},[321,156234,156235,156237,156239,156241,156244,156246,156248],{"class":323,"line":1401},[321,156236,30560],{"class":380},[321,156238,332],{"class":331},[321,156240,409],{"class":380},[321,156242,156243],{"class":327}," **",[321,156245,78215],{"class":380},[321,156247,45953],{"class":331},[321,156249,156250],{"class":390},"# 8\n",[292,156252,156254],{"id":156253},"_272-赋值运算符","2.7.2 赋值运算符",[312,156256,156258],{"className":30523,"code":156257,"language":30525,"meta":30,"style":30},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[318,156259,156260,156268,156276,156284,156292],{"__ignoreMap":30},[321,156261,156262,156264,156266],{"class":323,"line":324},[321,156263,155932],{"class":331},[321,156265,377],{"class":327},[321,156267,58573],{"class":380},[321,156269,156270,156272,156274],{"class":323,"line":167},[321,156271,155932],{"class":331},[321,156273,9684],{"class":327},[321,156275,54572],{"class":380},[321,156277,156278,156280,156282],{"class":323,"line":200},[321,156279,155932],{"class":331},[321,156281,150397],{"class":327},[321,156283,47868],{"class":380},[321,156285,156286,156288,156290],{"class":323,"line":1401},[321,156287,155932],{"class":331},[321,156289,137293],{"class":327},[321,156291,120181],{"class":380},[321,156293,156294,156296,156299],{"class":323,"line":1407},[321,156295,155932],{"class":331},[321,156297,156298],{"class":327},"\u002F=",[321,156300,47868],{"class":380},[19,156302,156303],{},"等价关系：",[312,156305,156307],{"className":30523,"code":156306,"language":30525,"meta":30,"style":30},"num += 1\nnum = num + 1\n",[318,156308,156309,156317],{"__ignoreMap":30},[321,156310,156311,156313,156315],{"class":323,"line":324},[321,156312,155932],{"class":331},[321,156314,9684],{"class":327},[321,156316,55844],{"class":380},[321,156318,156319,156321,156323,156326,156328],{"class":323,"line":167},[321,156320,155932],{"class":331},[321,156322,377],{"class":327},[321,156324,156325],{"class":331}," num ",[321,156327,813],{"class":327},[321,156329,55844],{"class":380},[19,156331,156332,156333,101163,156336,28530],{},"Python 没有 ",[318,156334,156335],{},"num++",[318,156337,156338],{},"num--",[292,156340,156342],{"id":156341},"_273-比较运算符","2.7.3 比较运算符",[19,156344,156345],{},"比较运算结果是布尔值。",[312,156347,156349],{"className":30523,"code":156348,"language":30525,"meta":30,"style":30},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[318,156350,156351,156365,156380,156394],{"__ignoreMap":30},[321,156352,156353,156355,156357,156359,156361,156363],{"class":323,"line":324},[321,156354,30560],{"class":380},[321,156356,332],{"class":331},[321,156358,778],{"class":380},[321,156360,26367],{"class":327},[321,156362,2354],{"class":380},[321,156364,338],{"class":331},[321,156366,156367,156369,156371,156373,156376,156378],{"class":323,"line":167},[321,156368,30560],{"class":380},[321,156370,332],{"class":331},[321,156372,778],{"class":380},[321,156374,156375],{"class":327}," >=",[321,156377,2244],{"class":380},[321,156379,338],{"class":331},[321,156381,156382,156384,156386,156388,156390,156392],{"class":323,"line":200},[321,156383,30560],{"class":380},[321,156385,332],{"class":331},[321,156387,778],{"class":380},[321,156389,101704],{"class":327},[321,156391,2289],{"class":380},[321,156393,338],{"class":331},[321,156395,156396,156398,156400,156402,156405,156407],{"class":323,"line":1401},[321,156397,30560],{"class":380},[321,156399,332],{"class":331},[321,156401,778],{"class":380},[321,156403,156404],{"class":327}," !=",[321,156406,2289],{"class":380},[321,156408,338],{"class":331},[19,156410,156411,156412,156414,156415,28530],{},"注意：判断相等用 ",[318,156413,3155],{},"，赋值用 ",[318,156416,377],{},[312,156418,156420],{"className":30523,"code":156419,"language":30525,"meta":30,"style":30},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[318,156421,156422,156434],{"__ignoreMap":30},[321,156423,156424,156426,156428,156431],{"class":323,"line":324},[321,156425,146691],{"class":331},[321,156427,377],{"class":327},[321,156429,156430],{"class":380}," 18",[321,156432,156433],{"class":390},"       # 赋值\n",[321,156435,156436,156438,156440,156442],{"class":323,"line":167},[321,156437,146691],{"class":331},[321,156439,3155],{"class":327},[321,156441,156430],{"class":380},[321,156443,156444],{"class":390},"      # 判断是否相等\n",[292,156446,156448],{"id":156447},"_274-逻辑运算符","2.7.4 逻辑运算符",[469,156450,156451,156459],{},[472,156452,156453],{},[475,156454,156455,156457],{},[478,156456,156069],{},[478,156458,26014],{},[516,156460,156461,156470,156479],{},[475,156462,156463,156467],{},[521,156464,156465],{},[318,156466,30607],{},[521,156468,156469],{},"并且",[475,156471,156472,156476],{},[521,156473,156474],{},[318,156475,115235],{},[521,156477,156478],{},"或者",[475,156480,156481,156486],{},[521,156482,156483],{},[318,156484,156485],{},"not",[521,156487,156488],{},"取反",[312,156490,156492],{"className":30523,"code":156491,"language":30525,"meta":30,"style":30},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[318,156493,156494,156502,156511,156515,156530,156544],{"__ignoreMap":30},[321,156495,156496,156498,156500],{"class":323,"line":324},[321,156497,146691],{"class":331},[321,156499,377],{"class":327},[321,156501,88210],{"class":380},[321,156503,156504,156507,156509],{"class":323,"line":167},[321,156505,156506],{"class":331},"has_ticket ",[321,156508,377],{"class":327},[321,156510,153744],{"class":380},[321,156512,156513],{"class":323,"line":200},[321,156514,2606],{"emptyLinePlaceholder":251},[321,156516,156517,156519,156521,156523,156525,156527],{"class":323,"line":1401},[321,156518,30560],{"class":380},[321,156520,155913],{"class":331},[321,156522,1916],{"class":327},[321,156524,156430],{"class":380},[321,156526,120574],{"class":327},[321,156528,156529],{"class":331}," has_ticket)\n",[321,156531,156532,156534,156536,156538,156540,156542],{"class":323,"line":1407},[321,156533,30560],{"class":380},[321,156535,155913],{"class":331},[321,156537,1242],{"class":327},[321,156539,156430],{"class":380},[321,156541,114346],{"class":327},[321,156543,156529],{"class":331},[321,156545,156546,156548,156550,156552],{"class":323,"line":1421},[321,156547,30560],{"class":380},[321,156549,332],{"class":331},[321,156551,156485],{"class":327},[321,156553,156529],{"class":331},[14,156555,156557],{"id":156556},"_28-字符串定义","2.8 字符串定义",[19,156559,156560],{},"三种常见写法：",[312,156562,156564],{"className":30523,"code":156563,"language":30525,"meta":30,"style":30},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[318,156565,156566,156576,156585,156595],{"__ignoreMap":30},[321,156567,156568,156571,156573],{"class":323,"line":324},[321,156569,156570],{"class":331},"name1 ",[321,156572,377],{"class":327},[321,156574,156575],{"class":436}," '小明'\n",[321,156577,156578,156581,156583],{"class":323,"line":167},[321,156579,156580],{"class":331},"name2 ",[321,156582,377],{"class":327},[321,156584,149498],{"class":436},[321,156586,156587,156590,156592],{"class":323,"line":200},[321,156588,156589],{"class":331},"text ",[321,156591,377],{"class":327},[321,156593,156594],{"class":436}," \"\"\"这是多行字符串\n",[321,156596,156597],{"class":323,"line":1401},[321,156598,156599],{"class":436},"可以换行\"\"\"\n",[19,156601,156602],{},"字符串中包含引号：",[312,156604,156606],{"className":30523,"code":156605,"language":30525,"meta":30,"style":30},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[318,156607,156608,156618,156628],{"__ignoreMap":30},[321,156609,156610,156613,156615],{"class":323,"line":324},[321,156611,156612],{"class":331},"msg ",[321,156614,377],{"class":327},[321,156616,156617],{"class":436}," \"他说:'你好'\"\n",[321,156619,156620,156623,156625],{"class":323,"line":167},[321,156621,156622],{"class":331},"msg2 ",[321,156624,377],{"class":327},[321,156626,156627],{"class":436}," '他说:\"你好\"'\n",[321,156629,156630,156633,156635,156638,156641,156644,156646],{"class":323,"line":200},[321,156631,156632],{"class":331},"msg3 ",[321,156634,377],{"class":327},[321,156636,156637],{"class":436}," \"他说:",[321,156639,156640],{"class":380},"\\\"",[321,156642,156643],{"class":436},"你好",[321,156645,156640],{"class":380},[321,156647,25278],{"class":436},[19,156649,156650],{},"常见转义字符：",[469,156652,156653,156662],{},[472,156654,156655],{},[475,156656,156657,156660],{},[478,156658,156659],{},"写法",[478,156661,100845],{},[516,156663,156664,156674,156683,156693,156702],{},[475,156665,156666,156671],{},[521,156667,156668],{},[318,156669,156670],{},"\\n",[521,156672,156673],{},"换行",[475,156675,156676,156680],{},[521,156677,156678],{},[318,156679,1437],{},[521,156681,156682],{},"制表符",[475,156684,156685,156690],{},[521,156686,156687],{},[318,156688,156689],{},"\\\\",[521,156691,156692],{},"反斜杠",[475,156694,156695,156699],{},[521,156696,156697],{},[318,156698,156640],{},[521,156700,156701],{},"双引号",[475,156703,156704,156709],{},[521,156705,156706],{},[318,156707,156708],{},"\\'",[521,156710,156711],{},"单引号",[14,156713,156715],{"id":156714},"_29-字符串拼接","2.9 字符串拼接",[312,156717,156719],{"className":30523,"code":156718,"language":30525,"meta":30,"style":30},"name = \"小明\"\nprint(\"你好，\" + name)\n",[318,156720,156721,156729],{"__ignoreMap":30},[321,156722,156723,156725,156727],{"class":323,"line":324},[321,156724,146681],{"class":331},[321,156726,377],{"class":327},[321,156728,149498],{"class":436},[321,156730,156731,156733,156735,156738,156740],{"class":323,"line":167},[321,156732,30560],{"class":380},[321,156734,332],{"class":331},[321,156736,156737],{"class":436},"\"你好，\"",[321,156739,45711],{"class":327},[321,156741,156742],{"class":331}," name)\n",[19,156744,156745],{},"字符串只能和字符串拼接：",[312,156747,156749],{"className":30523,"code":156748,"language":30525,"meta":30,"style":30},"age = 18\nprint(\"年龄:\" + str(age))\n",[318,156750,156751,156759],{"__ignoreMap":30},[321,156752,156753,156755,156757],{"class":323,"line":324},[321,156754,146691],{"class":331},[321,156756,377],{"class":327},[321,156758,146696],{"class":380},[321,156760,156761,156763,156765,156767,156769,156771],{"class":323,"line":167},[321,156762,30560],{"class":380},[321,156764,332],{"class":331},[321,156766,146662],{"class":436},[321,156768,45711],{"class":327},[321,156770,74064],{"class":380},[321,156772,156773],{"class":331},"(age))\n",[19,156775,156776],{},"更推荐使用格式化字符串。",[14,156778,156780],{"id":156779},"_210-字符串格式化","2.10 字符串格式化",[292,156782,156784],{"id":156783},"_2101-百分号格式化","2.10.1 百分号格式化",[312,156786,156788],{"className":30523,"code":156787,"language":30525,"meta":30,"style":30},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[318,156789,156790,156798,156806,156815,156819],{"__ignoreMap":30},[321,156791,156792,156794,156796],{"class":323,"line":324},[321,156793,146681],{"class":331},[321,156795,377],{"class":327},[321,156797,149498],{"class":436},[321,156799,156800,156802,156804],{"class":323,"line":167},[321,156801,146691],{"class":331},[321,156803,377],{"class":327},[321,156805,146696],{"class":380},[321,156807,156808,156810,156812],{"class":323,"line":200},[321,156809,155503],{"class":331},[321,156811,377],{"class":327},[321,156813,156814],{"class":380}," 95.5\n",[321,156816,156817],{"class":323,"line":1401},[321,156818,2606],{"emptyLinePlaceholder":251},[321,156820,156821,156823,156825,156828,156831,156834,156837,156840,156843,156845,156847],{"class":323,"line":1407},[321,156822,30560],{"class":380},[321,156824,332],{"class":331},[321,156826,156827],{"class":436},"\"姓名:",[321,156829,156830],{"class":380},"%s",[321,156832,156833],{"class":436}," 年龄:",[321,156835,156836],{"class":380},"%d",[321,156838,156839],{"class":436}," 分数:",[321,156841,156842],{"class":380},"%.1f",[321,156844,583],{"class":436},[321,156846,156226],{"class":327},[321,156848,156849],{"class":331}," (name, age, score))\n",[19,156851,156852],{},"常用占位符：",[469,156854,156855,156864],{},[472,156856,156857],{},[475,156858,156859,156862],{},[478,156860,156861],{},"占位符",[478,156863,26014],{},[516,156865,156866,156874,156882],{},[475,156867,156868,156872],{},[521,156869,156870],{},[318,156871,156830],{},[521,156873,155369],{},[475,156875,156876,156880],{},[521,156877,156878],{},[318,156879,156836],{},[521,156881,155347],{},[475,156883,156884,156889],{},[521,156885,156886],{},[318,156887,156888],{},"%f",[521,156890,155358],{},[19,156892,156893],{},"精度控制：",[312,156895,156897],{"className":30523,"code":156896,"language":30525,"meta":30,"style":30},"price = 12.3456\nprint(\"%.2f\" % price)\n",[318,156898,156899,156908],{"__ignoreMap":30},[321,156900,156901,156903,156905],{"class":323,"line":324},[321,156902,146826],{"class":331},[321,156904,377],{"class":327},[321,156906,156907],{"class":380}," 12.3456\n",[321,156909,156910,156912,156914,156916,156919,156921,156923],{"class":323,"line":167},[321,156911,30560],{"class":380},[321,156913,332],{"class":331},[321,156915,583],{"class":436},[321,156917,156918],{"class":380},"%.2f",[321,156920,583],{"class":436},[321,156922,156226],{"class":327},[321,156924,156925],{"class":331}," price)\n",[292,156927,156929],{"id":156928},"_2102-format方法","2.10.2 format方法",[312,156931,156933],{"className":30523,"code":156932,"language":30525,"meta":30,"style":30},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[318,156934,156935,156943,156951,156955,156974,156994],{"__ignoreMap":30},[321,156936,156937,156939,156941],{"class":323,"line":324},[321,156938,146681],{"class":331},[321,156940,377],{"class":327},[321,156942,149498],{"class":436},[321,156944,156945,156947,156949],{"class":323,"line":167},[321,156946,146691],{"class":331},[321,156948,377],{"class":327},[321,156950,146696],{"class":380},[321,156952,156953],{"class":323,"line":200},[321,156954,2606],{"emptyLinePlaceholder":251},[321,156956,156957,156959,156961,156963,156965,156967,156969,156971],{"class":323,"line":1401},[321,156958,30560],{"class":380},[321,156960,332],{"class":331},[321,156962,156827],{"class":436},[321,156964,32604],{"class":380},[321,156966,156833],{"class":436},[321,156968,32604],{"class":380},[321,156970,583],{"class":436},[321,156972,156973],{"class":331},".format(name, age))\n",[321,156975,156976,156978,156980,156982,156985,156987,156990,156992],{"class":323,"line":1407},[321,156977,30560],{"class":380},[321,156979,332],{"class":331},[321,156981,156827],{"class":436},[321,156983,156984],{"class":380},"{0}",[321,156986,156833],{"class":436},[321,156988,156989],{"class":380},"{1}",[321,156991,583],{"class":436},[321,156993,156973],{"class":331},[321,156995,156996,156998,157000,157002,157005,157007,157010,157012,157015,157017,157019,157022,157024,157026],{"class":323,"line":1421},[321,156997,30560],{"class":380},[321,156999,332],{"class":331},[321,157001,156827],{"class":436},[321,157003,157004],{"class":380},"{name}",[321,157006,156833],{"class":436},[321,157008,157009],{"class":380},"{age}",[321,157011,583],{"class":436},[321,157013,157014],{"class":331},".format(",[321,157016,79955],{"class":5423},[321,157018,377],{"class":327},[321,157020,157021],{"class":331},"name, ",[321,157023,70366],{"class":5423},[321,157025,377],{"class":327},[321,157027,157028],{"class":331},"age))\n",[292,157030,157032],{"id":157031},"_2103-f-string","2.10.3 f-string",[19,157034,157035],{},"推荐写法：",[312,157037,157039],{"className":30523,"code":157038,"language":30525,"meta":30,"style":30},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[318,157040,157041,157049,157057,157065,157069],{"__ignoreMap":30},[321,157042,157043,157045,157047],{"class":323,"line":324},[321,157044,146681],{"class":331},[321,157046,377],{"class":327},[321,157048,149498],{"class":436},[321,157050,157051,157053,157055],{"class":323,"line":167},[321,157052,146691],{"class":331},[321,157054,377],{"class":327},[321,157056,146696],{"class":380},[321,157058,157059,157061,157063],{"class":323,"line":200},[321,157060,155503],{"class":331},[321,157062,377],{"class":327},[321,157064,156814],{"class":380},[321,157066,157067],{"class":323,"line":1401},[321,157068,2606],{"emptyLinePlaceholder":251},[321,157070,157071,157073,157075,157077,157079,157081,157083,157085,157087,157089,157091,157093,157095,157097,157100,157103,157105,157107],{"class":323,"line":1407},[321,157072,30560],{"class":380},[321,157074,332],{"class":331},[321,157076,384],{"class":327},[321,157078,156827],{"class":436},[321,157080,1228],{"class":380},[321,157082,79955],{"class":331},[321,157084,1278],{"class":380},[321,157086,156833],{"class":436},[321,157088,1228],{"class":380},[321,157090,70366],{"class":331},[321,157092,1278],{"class":380},[321,157094,156839],{"class":436},[321,157096,1228],{"class":380},[321,157098,157099],{"class":331},"score",[321,157101,157102],{"class":327},":.1f",[321,157104,1278],{"class":380},[321,157106,583],{"class":436},[321,157108,338],{"class":331},[19,157110,157111],{},"表达式也可以放进去：",[312,157113,157115],{"className":30523,"code":157114,"language":30525,"meta":30,"style":30},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[318,157116,157117,157125,157133],{"__ignoreMap":30},[321,157118,157119,157121,157123],{"class":323,"line":324},[321,157120,146826],{"class":331},[321,157122,377],{"class":327},[321,157124,146831],{"class":380},[321,157126,157127,157129,157131],{"class":323,"line":167},[321,157128,146836],{"class":331},[321,157130,377],{"class":327},[321,157132,54572],{"class":380},[321,157134,157135,157137,157139,157141,157144,157146,157148,157150,157153,157155,157158],{"class":323,"line":200},[321,157136,30560],{"class":380},[321,157138,332],{"class":331},[321,157140,384],{"class":327},[321,157142,157143],{"class":436},"\"总价:",[321,157145,1228],{"class":380},[321,157147,146826],{"class":331},[321,157149,787],{"class":327},[321,157151,157152],{"class":331}," count",[321,157154,1278],{"class":380},[321,157156,157157],{"class":436},"元\"",[321,157159,338],{"class":331},[14,157161,157163],{"id":157162},"_211-input输入","2.11 input输入",[19,157165,157166,157169],{},[318,157167,157168],{},"input()"," 会暂停程序，等待用户输入。",[312,157171,157173],{"className":30523,"code":157172,"language":30525,"meta":30,"style":30},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[318,157174,157175,157189],{"__ignoreMap":30},[321,157176,157177,157179,157181,157183,157185,157187],{"class":323,"line":324},[321,157178,146681],{"class":331},[321,157180,377],{"class":327},[321,157182,60750],{"class":380},[321,157184,332],{"class":331},[321,157186,152524],{"class":436},[321,157188,338],{"class":331},[321,157190,157191,157193,157195,157197,157200,157202,157204,157206,157208],{"class":323,"line":167},[321,157192,30560],{"class":380},[321,157194,332],{"class":331},[321,157196,384],{"class":327},[321,157198,157199],{"class":436},"\"你好，",[321,157201,1228],{"class":380},[321,157203,79955],{"class":331},[321,157205,1278],{"class":380},[321,157207,583],{"class":436},[321,157209,338],{"class":331},[19,157211,157212],{},"输入整数：",[312,157214,157216],{"className":30523,"code":157215,"language":30525,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[318,157217,157218,157236],{"__ignoreMap":30},[321,157219,157220,157222,157224,157226,157228,157230,157232,157234],{"class":323,"line":324},[321,157221,146691],{"class":331},[321,157223,377],{"class":327},[321,157225,2588],{"class":380},[321,157227,332],{"class":331},[321,157229,53966],{"class":380},[321,157231,332],{"class":331},[321,157233,152539],{"class":436},[321,157235,30642],{"class":331},[321,157237,157238,157240,157242,157244,157247,157249,157251,157253,157256,157258],{"class":323,"line":167},[321,157239,30560],{"class":380},[321,157241,332],{"class":331},[321,157243,384],{"class":327},[321,157245,157246],{"class":436},"\"明年你",[321,157248,1228],{"class":380},[321,157250,146691],{"class":331},[321,157252,813],{"class":327},[321,157254,157255],{"class":380}," 1}",[321,157257,149549],{"class":436},[321,157259,338],{"class":331},[19,157261,157262],{},"输入小数：",[312,157264,157266],{"className":30523,"code":157265,"language":30525,"meta":30,"style":30},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[318,157267,157268,157287],{"__ignoreMap":30},[321,157269,157270,157272,157274,157276,157278,157280,157282,157285],{"class":323,"line":324},[321,157271,155476],{"class":331},[321,157273,377],{"class":327},[321,157275,109942],{"class":380},[321,157277,332],{"class":331},[321,157279,53966],{"class":380},[321,157281,332],{"class":331},[321,157283,157284],{"class":436},"\"请输入身高:\"",[321,157286,30642],{"class":331},[321,157288,157289,157291,157293,157295,157298,157300,157302,157305,157307,157310],{"class":323,"line":167},[321,157290,30560],{"class":380},[321,157292,332],{"class":331},[321,157294,384],{"class":327},[321,157296,157297],{"class":436},"\"身高:",[321,157299,1228],{"class":380},[321,157301,25126],{"class":331},[321,157303,157304],{"class":327},":.2f",[321,157306,1278],{"class":380},[321,157308,157309],{"class":436},"米\"",[321,157311,338],{"class":331},[14,157313,157315],{"id":157314},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157317,123437],{},[151,157319,157320,157323,157326,157329],{},[154,157321,157322],{},"输入商品单价。",[154,157324,157325],{},"输入购买数量。",[154,157327,157328],{},"输入折扣，例如 0.8 表示八折。",[154,157330,157331],{},"输出最终金额，保留两位小数。",[19,157333,10242],{},[312,157335,157337],{"className":30523,"code":157336,"language":30525,"meta":30,"style":30},"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",[318,157338,157339,157358,157377,157397,157401,157421,157425,157448,157469,157491],{"__ignoreMap":30},[321,157340,157341,157343,157345,157347,157349,157351,157353,157356],{"class":323,"line":324},[321,157342,146826],{"class":331},[321,157344,377],{"class":327},[321,157346,109942],{"class":380},[321,157348,332],{"class":331},[321,157350,53966],{"class":380},[321,157352,332],{"class":331},[321,157354,157355],{"class":436},"\"请输入商品单价:\"",[321,157357,30642],{"class":331},[321,157359,157360,157362,157364,157366,157368,157370,157372,157375],{"class":323,"line":167},[321,157361,146836],{"class":331},[321,157363,377],{"class":327},[321,157365,2588],{"class":380},[321,157367,332],{"class":331},[321,157369,53966],{"class":380},[321,157371,332],{"class":331},[321,157373,157374],{"class":436},"\"请输入购买数量:\"",[321,157376,30642],{"class":331},[321,157378,157379,157382,157384,157386,157388,157390,157392,157395],{"class":323,"line":200},[321,157380,157381],{"class":331},"discount ",[321,157383,377],{"class":327},[321,157385,109942],{"class":380},[321,157387,332],{"class":331},[321,157389,53966],{"class":380},[321,157391,332],{"class":331},[321,157393,157394],{"class":436},"\"请输入折扣:\"",[321,157396,30642],{"class":331},[321,157398,157399],{"class":323,"line":1401},[321,157400,2606],{"emptyLinePlaceholder":251},[321,157402,157403,157406,157408,157411,157413,157416,157418],{"class":323,"line":1407},[321,157404,157405],{"class":331},"total ",[321,157407,377],{"class":327},[321,157409,157410],{"class":331}," price ",[321,157412,787],{"class":327},[321,157414,157415],{"class":331}," count ",[321,157417,787],{"class":327},[321,157419,157420],{"class":331}," discount\n",[321,157422,157423],{"class":323,"line":1421},[321,157424,2606],{"emptyLinePlaceholder":251},[321,157426,157427,157429,157431,157433,157436,157438,157440,157442,157444,157446],{"class":323,"line":1427},[321,157428,30560],{"class":380},[321,157430,332],{"class":331},[321,157432,384],{"class":327},[321,157434,157435],{"class":436},"\"商品单价:",[321,157437,1228],{"class":380},[321,157439,79960],{"class":331},[321,157441,157304],{"class":327},[321,157443,1278],{"class":380},[321,157445,583],{"class":436},[321,157447,338],{"class":331},[321,157449,157450,157452,157454,157456,157459,157461,157463,157465,157467],{"class":323,"line":1518},[321,157451,30560],{"class":380},[321,157453,332],{"class":331},[321,157455,384],{"class":327},[321,157457,157458],{"class":436},"\"购买数量:",[321,157460,1228],{"class":380},[321,157462,84579],{"class":331},[321,157464,1278],{"class":380},[321,157466,583],{"class":436},[321,157468,338],{"class":331},[321,157470,157471,157473,157475,157477,157480,157482,157485,157487,157489],{"class":323,"line":1524},[321,157472,30560],{"class":380},[321,157474,332],{"class":331},[321,157476,384],{"class":327},[321,157478,157479],{"class":436},"\"折扣:",[321,157481,1228],{"class":380},[321,157483,157484],{"class":331},"discount",[321,157486,1278],{"class":380},[321,157488,583],{"class":436},[321,157490,338],{"class":331},[321,157492,157493,157495,157497,157499,157502,157504,157507,157509,157511,157513],{"class":323,"line":1536},[321,157494,30560],{"class":380},[321,157496,332],{"class":331},[321,157498,384],{"class":327},[321,157500,157501],{"class":436},"\"应付金额:",[321,157503,1228],{"class":380},[321,157505,157506],{"class":331},"total",[321,157508,157304],{"class":327},[321,157510,1278],{"class":380},[321,157512,157157],{"class":436},[321,157514,338],{"class":331},[14,157516,157518],{"id":157517},"_213-易错点","2.13 易错点",[151,157520,157521,157526,157532,157540,157543],{},[154,157522,157523,157525],{},[318,157524,157168],{}," 的结果是字符串，做运算前要转换。",[154,157527,157528,157529,28530],{},"字符串拼接时，数字要先 ",[318,157530,157531],{},"str()",[154,157533,157534,157536,157537,157539],{},[318,157535,377],{}," 是赋值，",[318,157538,3155],{}," 是比较。",[154,157541,157542],{},"Python 没有自增自减运算符。",[154,157544,157545],{},"浮点数计算可能有精度误差：",[312,157547,157549],{"className":30523,"code":157548,"language":30525,"meta":30,"style":30},"print(0.1 + 0.2)\n",[318,157550,157551],{"__ignoreMap":30},[321,157552,157553,157555,157557,157559,157561,157564],{"class":323,"line":324},[321,157554,30560],{"class":380},[321,157556,332],{"class":331},[321,157558,86355],{"class":380},[321,157560,45711],{"class":327},[321,157562,157563],{"class":380}," 0.2",[321,157565,338],{"class":331},[19,157567,157568,157569,157572],{},"金额计算如果要求严格，可以后续学习 ",[318,157570,157571],{},"decimal"," 模块。",[14,157574,157576],{"id":157575},"_214-本章练习","2.14 本章练习",[151,157578,157579,157582,157585,157588,157591],{},[154,157580,157581],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[154,157583,157584],{},"输入圆的半径，计算面积，保留两位小数。",[154,157586,157587],{},"输入工资和奖金，计算总收入。",[154,157589,157590],{},"输入摄氏温度，转换为华氏温度。",[154,157592,157593],{},"写一个 BMI 计算程序：",[312,157595,157598],{"className":157596,"code":157597,"language":5394,"meta":30},[5392],"BMI = 体重kg \u002F 身高m ** 2\n",[318,157599,157597],{"__ignoreMap":30},[5333,157601,157602],{},"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":30,"searchDepth":167,"depth":167,"links":157604},[157605,157606,157607,157608,157609,157610,157611,157617,157618,157619,157624,157625,157626,157627],{"id":155166,"depth":167,"text":155167},{"id":155275,"depth":167,"text":155276},{"id":155446,"depth":167,"text":155447},{"id":155523,"depth":167,"text":155524},{"id":50876,"depth":167,"text":50877},{"id":155829,"depth":167,"text":155830},{"id":156055,"depth":167,"text":156056,"children":157612},[157613,157614,157615,157616],{"id":156059,"depth":200,"text":156060},{"id":156253,"depth":200,"text":156254},{"id":156341,"depth":200,"text":156342},{"id":156447,"depth":200,"text":156448},{"id":156556,"depth":167,"text":156557},{"id":156714,"depth":167,"text":156715},{"id":156779,"depth":167,"text":156780,"children":157620},[157621,157622,157623],{"id":156783,"depth":200,"text":156784},{"id":156928,"depth":200,"text":156929},{"id":157031,"depth":200,"text":157032},{"id":157162,"depth":167,"text":157163},{"id":157314,"depth":167,"text":157315},{"id":157517,"depth":167,"text":157518},{"id":157575,"depth":167,"text":157576},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155158,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157634,"title":157635,"body":157636,"description":23584,"extension":249,"meta":159272,"navigation":251,"path":159273,"seo":159274,"stem":159275,"__hash__":159276},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157637,"toc":159253},[157638,157641,157645,157648,157663,157666,157694,157698,157748,157750,157766,157769,157795,157798,157802,157869,157872,157888,157892,157895,158013,158016,158023,158072,158078,158082,158085,158198,158201,158205,158209,158212,158262,158266,158269,158319,158323,158326,158364,158368,158371,158417,158420,158455,158459,158464,158467,158513,158515,158582,158586,158592,158703,158712,158716,158718,158729,158731,158897,158901,158903,158917,158919,159133,159137,159156,159173,159176,159222,159226,159250],[10,157639,157635],{"id":157640},"_3-判断语句",[14,157642,157644],{"id":157643},"_31-布尔值","3.1 布尔值",[19,157646,157647],{},"判断语句依赖布尔值：",[312,157649,157651],{"className":30523,"code":157650,"language":30525,"meta":30,"style":30},"True\nFalse\n",[318,157652,157653,157658],{"__ignoreMap":30},[321,157654,157655],{"class":323,"line":324},[321,157656,157657],{"class":380},"True\n",[321,157659,157660],{"class":323,"line":167},[321,157661,157662],{"class":380},"False\n",[19,157664,157665],{},"比较表达式会产生布尔值：",[312,157667,157669],{"className":30523,"code":157668,"language":30525,"meta":30,"style":30},"age = 18\nprint(age >= 18)  # True\n",[318,157670,157671,157679],{"__ignoreMap":30},[321,157672,157673,157675,157677],{"class":323,"line":324},[321,157674,146691],{"class":331},[321,157676,377],{"class":327},[321,157678,146696],{"class":380},[321,157680,157681,157683,157685,157687,157689,157691],{"class":323,"line":167},[321,157682,30560],{"class":380},[321,157684,155913],{"class":331},[321,157686,1916],{"class":327},[321,157688,156430],{"class":380},[321,157690,45953],{"class":331},[321,157692,157693],{"class":390},"# True\n",[14,157695,157697],{"id":157696},"_32-if基础语法","3.2 if基础语法",[312,157699,157701],{"className":30523,"code":157700,"language":30525,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[318,157702,157703,157721,157725,157737],{"__ignoreMap":30},[321,157704,157705,157707,157709,157711,157713,157715,157717,157719],{"class":323,"line":324},[321,157706,146691],{"class":331},[321,157708,377],{"class":327},[321,157710,2588],{"class":380},[321,157712,332],{"class":331},[321,157714,53966],{"class":380},[321,157716,332],{"class":331},[321,157718,152539],{"class":436},[321,157720,30642],{"class":331},[321,157722,157723],{"class":323,"line":167},[321,157724,2606],{"emptyLinePlaceholder":251},[321,157726,157727,157729,157731,157733,157735],{"class":323,"line":200},[321,157728,1737],{"class":327},[321,157730,15914],{"class":331},[321,157732,1916],{"class":327},[321,157734,156430],{"class":380},[321,157736,3945],{"class":331},[321,157738,157739,157741,157743,157746],{"class":323,"line":1401},[321,157740,31444],{"class":380},[321,157742,332],{"class":331},[321,157744,157745],{"class":436},"\"可以进入网吧\"",[321,157747,338],{"class":331},[19,157749,9232],{},[151,157751,157752,157757,157760,157763],{},[154,157753,157754,157756],{},[318,157755,1737],{}," 后面是条件表达式。",[154,157758,157759],{},"条件后面必须写冒号。",[154,157761,157762],{},"条件成立时执行缩进代码块。",[154,157764,157765],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157767,157768],{},"错误示例：",[312,157770,157772],{"className":30523,"code":157771,"language":30525,"meta":30,"style":30},"if age >= 18\n    print(\"可以进入\")\n",[318,157773,157774,157784],{"__ignoreMap":30},[321,157775,157776,157778,157780,157782],{"class":323,"line":324},[321,157777,1737],{"class":327},[321,157779,15914],{"class":331},[321,157781,1916],{"class":327},[321,157783,146696],{"class":380},[321,157785,157786,157788,157790,157793],{"class":323,"line":167},[321,157787,31444],{"class":380},[321,157789,332],{"class":331},[321,157791,157792],{"class":436},"\"可以进入\"",[321,157794,338],{"class":331},[19,157796,157797],{},"缺少冒号。",[14,157799,157801],{"id":157800},"_33-if-else","3.3 if else",[312,157803,157805],{"className":30523,"code":157804,"language":30525,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[318,157806,157807,157825,157829,157841,157852,157858],{"__ignoreMap":30},[321,157808,157809,157811,157813,157815,157817,157819,157821,157823],{"class":323,"line":324},[321,157810,146691],{"class":331},[321,157812,377],{"class":327},[321,157814,2588],{"class":380},[321,157816,332],{"class":331},[321,157818,53966],{"class":380},[321,157820,332],{"class":331},[321,157822,152539],{"class":436},[321,157824,30642],{"class":331},[321,157826,157827],{"class":323,"line":167},[321,157828,2606],{"emptyLinePlaceholder":251},[321,157830,157831,157833,157835,157837,157839],{"class":323,"line":200},[321,157832,1737],{"class":327},[321,157834,15914],{"class":331},[321,157836,1916],{"class":327},[321,157838,156430],{"class":380},[321,157840,3945],{"class":331},[321,157842,157843,157845,157847,157850],{"class":323,"line":1401},[321,157844,31444],{"class":380},[321,157846,332],{"class":331},[321,157848,157849],{"class":436},"\"成年人\"",[321,157851,338],{"class":331},[321,157853,157854,157856],{"class":323,"line":1407},[321,157855,1907],{"class":327},[321,157857,3945],{"class":331},[321,157859,157860,157862,157864,157867],{"class":323,"line":1421},[321,157861,31444],{"class":380},[321,157863,332],{"class":331},[321,157865,157866],{"class":436},"\"未成年人\"",[321,157868,338],{"class":331},[19,157870,157871],{},"执行逻辑：",[151,157873,157874,157880,157885],{},[154,157875,157876,157877,157879],{},"条件成立，执行 ",[318,157878,1737],{}," 代码块。",[154,157881,157882,157883,157879],{},"条件不成立，执行 ",[318,157884,1907],{},[154,157886,157887],{},"两个代码块只会执行其中一个。",[14,157889,157891],{"id":157890},"_34-if-elif-else","3.4 if elif else",[19,157893,157894],{},"多条件判断：",[312,157896,157898],{"className":30523,"code":157897,"language":30525,"meta":30,"style":30},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[318,157899,157900,157918,157922,157936,157947,157961,157972,157985,157996,158002],{"__ignoreMap":30},[321,157901,157902,157904,157906,157908,157910,157912,157914,157916],{"class":323,"line":324},[321,157903,155503],{"class":331},[321,157905,377],{"class":327},[321,157907,2588],{"class":380},[321,157909,332],{"class":331},[321,157911,53966],{"class":380},[321,157913,332],{"class":331},[321,157915,152554],{"class":436},[321,157917,30642],{"class":331},[321,157919,157920],{"class":323,"line":167},[321,157921,2606],{"emptyLinePlaceholder":251},[321,157923,157924,157926,157929,157931,157934],{"class":323,"line":200},[321,157925,1737],{"class":327},[321,157927,157928],{"class":331}," score ",[321,157930,1916],{"class":327},[321,157932,157933],{"class":380}," 90",[321,157935,3945],{"class":331},[321,157937,157938,157940,157942,157945],{"class":323,"line":1401},[321,157939,31444],{"class":380},[321,157941,332],{"class":331},[321,157943,157944],{"class":436},"\"优秀\"",[321,157946,338],{"class":331},[321,157948,157949,157952,157954,157956,157959],{"class":323,"line":1407},[321,157950,157951],{"class":327},"elif",[321,157953,157928],{"class":331},[321,157955,1916],{"class":327},[321,157957,157958],{"class":380}," 80",[321,157960,3945],{"class":331},[321,157962,157963,157965,157967,157970],{"class":323,"line":1421},[321,157964,31444],{"class":380},[321,157966,332],{"class":331},[321,157968,157969],{"class":436},"\"良好\"",[321,157971,338],{"class":331},[321,157973,157974,157976,157978,157980,157983],{"class":323,"line":1427},[321,157975,157951],{"class":327},[321,157977,157928],{"class":331},[321,157979,1916],{"class":327},[321,157981,157982],{"class":380}," 60",[321,157984,3945],{"class":331},[321,157986,157987,157989,157991,157994],{"class":323,"line":1518},[321,157988,31444],{"class":380},[321,157990,332],{"class":331},[321,157992,157993],{"class":436},"\"及格\"",[321,157995,338],{"class":331},[321,157997,157998,158000],{"class":323,"line":1524},[321,157999,1907],{"class":327},[321,158001,3945],{"class":331},[321,158003,158004,158006,158008,158011],{"class":323,"line":1536},[321,158005,31444],{"class":380},[321,158007,332],{"class":331},[321,158009,158010],{"class":436},"\"不及格\"",[321,158012,338],{"class":331},[19,158014,158015],{},"注意判断顺序很重要。",[19,158017,158018,158019,158022],{},"如果把 ",[318,158020,158021],{},"score >= 60"," 放在最前面：",[312,158024,158026],{"className":30523,"code":158025,"language":30525,"meta":30,"style":30},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[318,158027,158028,158040,158050,158062],{"__ignoreMap":30},[321,158029,158030,158032,158034,158036,158038],{"class":323,"line":324},[321,158031,1737],{"class":327},[321,158033,157928],{"class":331},[321,158035,1916],{"class":327},[321,158037,157982],{"class":380},[321,158039,3945],{"class":331},[321,158041,158042,158044,158046,158048],{"class":323,"line":167},[321,158043,31444],{"class":380},[321,158045,332],{"class":331},[321,158047,157993],{"class":436},[321,158049,338],{"class":331},[321,158051,158052,158054,158056,158058,158060],{"class":323,"line":200},[321,158053,157951],{"class":327},[321,158055,157928],{"class":331},[321,158057,1916],{"class":327},[321,158059,157933],{"class":380},[321,158061,3945],{"class":331},[321,158063,158064,158066,158068,158070],{"class":323,"line":1401},[321,158065,31444],{"class":380},[321,158067,332],{"class":331},[321,158069,157944],{"class":436},[321,158071,338],{"class":331},[19,158073,158074,158075,158077],{},"成绩 95 会先满足 ",[318,158076,158021],{},"，后面的优秀分支就不会执行。",[14,158079,158081],{"id":158080},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158083,158084],{},"嵌套判断就是在一个判断内部再写判断。",[312,158086,158088],{"className":30523,"code":158087,"language":30525,"meta":30,"style":30},"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",[318,158089,158090,158108,158123,158127,158139,158153,158163,158170,158181,158187],{"__ignoreMap":30},[321,158091,158092,158094,158096,158098,158100,158102,158104,158106],{"class":323,"line":324},[321,158093,146691],{"class":331},[321,158095,377],{"class":327},[321,158097,2588],{"class":380},[321,158099,332],{"class":331},[321,158101,53966],{"class":380},[321,158103,332],{"class":331},[321,158105,152539],{"class":436},[321,158107,30642],{"class":331},[321,158109,158110,158112,158114,158116,158118,158121],{"class":323,"line":167},[321,158111,156506],{"class":331},[321,158113,377],{"class":327},[321,158115,60750],{"class":380},[321,158117,332],{"class":331},[321,158119,158120],{"class":436},"\"是否有票(y\u002Fn):\"",[321,158122,338],{"class":331},[321,158124,158125],{"class":323,"line":200},[321,158126,2606],{"emptyLinePlaceholder":251},[321,158128,158129,158131,158133,158135,158137],{"class":323,"line":1401},[321,158130,1737],{"class":327},[321,158132,15914],{"class":331},[321,158134,1916],{"class":327},[321,158136,156430],{"class":380},[321,158138,3945],{"class":331},[321,158140,158141,158143,158146,158148,158151],{"class":323,"line":1407},[321,158142,3307],{"class":327},[321,158144,158145],{"class":331}," has_ticket ",[321,158147,3155],{"class":327},[321,158149,158150],{"class":436}," \"y\"",[321,158152,3945],{"class":331},[321,158154,158155,158157,158159,158161],{"class":323,"line":1421},[321,158156,32596],{"class":380},[321,158158,332],{"class":331},[321,158160,157792],{"class":436},[321,158162,338],{"class":331},[321,158164,158165,158168],{"class":323,"line":1427},[321,158166,158167],{"class":327},"    else",[321,158169,3945],{"class":331},[321,158171,158172,158174,158176,158179],{"class":323,"line":1518},[321,158173,32596],{"class":380},[321,158175,332],{"class":331},[321,158177,158178],{"class":436},"\"请先买票\"",[321,158180,338],{"class":331},[321,158182,158183,158185],{"class":323,"line":1524},[321,158184,1907],{"class":327},[321,158186,3945],{"class":331},[321,158188,158189,158191,158193,158196],{"class":323,"line":1536},[321,158190,31444],{"class":380},[321,158192,332],{"class":331},[321,158194,158195],{"class":436},"\"未成年人禁止进入\"",[321,158197,338],{"class":331},[19,158199,158200],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158202,158204],{"id":158203},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[292,158206,158208],{"id":158207},"_361-and","3.6.1 and",[19,158210,158211],{},"两个条件都成立才成立。",[312,158213,158215],{"className":30523,"code":158214,"language":30525,"meta":30,"style":30},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[318,158216,158217,158225,158233,158237,158252],{"__ignoreMap":30},[321,158218,158219,158221,158223],{"class":323,"line":324},[321,158220,146691],{"class":331},[321,158222,377],{"class":327},[321,158224,88210],{"class":380},[321,158226,158227,158229,158231],{"class":323,"line":167},[321,158228,156506],{"class":331},[321,158230,377],{"class":327},[321,158232,153744],{"class":380},[321,158234,158235],{"class":323,"line":200},[321,158236,2606],{"emptyLinePlaceholder":251},[321,158238,158239,158241,158243,158245,158247,158249],{"class":323,"line":1401},[321,158240,1737],{"class":327},[321,158242,15914],{"class":331},[321,158244,1916],{"class":327},[321,158246,156430],{"class":380},[321,158248,120574],{"class":327},[321,158250,158251],{"class":331}," has_ticket:\n",[321,158253,158254,158256,158258,158260],{"class":323,"line":1407},[321,158255,31444],{"class":380},[321,158257,332],{"class":331},[321,158259,157792],{"class":436},[321,158261,338],{"class":331},[292,158263,158265],{"id":158264},"_362-or","3.6.2 or",[19,158267,158268],{},"只要一个条件成立就成立。",[312,158270,158272],{"className":30523,"code":158271,"language":30525,"meta":30,"style":30},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[318,158273,158274,158283,158292,158296,158308],{"__ignoreMap":30},[321,158275,158276,158279,158281],{"class":323,"line":324},[321,158277,158278],{"class":331},"is_vip ",[321,158280,377],{"class":327},[321,158282,125952],{"class":380},[321,158284,158285,158288,158290],{"class":323,"line":167},[321,158286,158287],{"class":331},"coupon ",[321,158289,377],{"class":327},[321,158291,153744],{"class":380},[321,158293,158294],{"class":323,"line":200},[321,158295,2606],{"emptyLinePlaceholder":251},[321,158297,158298,158300,158303,158305],{"class":323,"line":1401},[321,158299,1737],{"class":327},[321,158301,158302],{"class":331}," is_vip ",[321,158304,115235],{"class":327},[321,158306,158307],{"class":331}," coupon:\n",[321,158309,158310,158312,158314,158317],{"class":323,"line":1407},[321,158311,31444],{"class":380},[321,158313,332],{"class":331},[321,158315,158316],{"class":436},"\"可以享受优惠\"",[321,158318,338],{"class":331},[292,158320,158322],{"id":158321},"_363-not","3.6.3 not",[19,158324,158325],{},"取反。",[312,158327,158329],{"className":30523,"code":158328,"language":30525,"meta":30,"style":30},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[318,158330,158331,158340,158344,158353],{"__ignoreMap":30},[321,158332,158333,158336,158338],{"class":323,"line":324},[321,158334,158335],{"class":331},"is_closed ",[321,158337,377],{"class":327},[321,158339,125952],{"class":380},[321,158341,158342],{"class":323,"line":167},[321,158343,2606],{"emptyLinePlaceholder":251},[321,158345,158346,158348,158350],{"class":323,"line":200},[321,158347,1737],{"class":327},[321,158349,39075],{"class":327},[321,158351,158352],{"class":331}," is_closed:\n",[321,158354,158355,158357,158359,158362],{"class":323,"line":1401},[321,158356,31444],{"class":380},[321,158358,332],{"class":331},[321,158360,158361],{"class":436},"\"店铺营业中\"",[321,158363,338],{"class":331},[14,158365,158367],{"id":158366},"_37-链式比较","3.7 链式比较",[19,158369,158370],{},"Python 支持链式比较：",[312,158372,158374],{"className":30523,"code":158373,"language":30525,"meta":30,"style":30},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[318,158375,158376,158385,158389,158406],{"__ignoreMap":30},[321,158377,158378,158380,158382],{"class":323,"line":324},[321,158379,155503],{"class":331},[321,158381,377],{"class":327},[321,158383,158384],{"class":380}," 85\n",[321,158386,158387],{"class":323,"line":167},[321,158388,2606],{"emptyLinePlaceholder":251},[321,158390,158391,158393,158395,158398,158400,158402,158404],{"class":323,"line":200},[321,158392,1737],{"class":327},[321,158394,4299],{"class":380},[321,158396,158397],{"class":327}," \u003C=",[321,158399,157928],{"class":331},[321,158401,1794],{"class":327},[321,158403,5961],{"class":380},[321,158405,3945],{"class":331},[321,158407,158408,158410,158412,158415],{"class":323,"line":1401},[321,158409,31444],{"class":380},[321,158411,332],{"class":331},[321,158413,158414],{"class":436},"\"成绩合法\"",[321,158416,338],{"class":331},[19,158418,158419],{},"等价于：",[312,158421,158423],{"className":30523,"code":158422,"language":30525,"meta":30,"style":30},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[318,158424,158425,158445],{"__ignoreMap":30},[321,158426,158427,158429,158431,158433,158435,158437,158439,158441,158443],{"class":323,"line":324},[321,158428,1737],{"class":327},[321,158430,157928],{"class":331},[321,158432,1916],{"class":327},[321,158434,4299],{"class":380},[321,158436,120574],{"class":327},[321,158438,157928],{"class":331},[321,158440,1794],{"class":327},[321,158442,5961],{"class":380},[321,158444,3945],{"class":331},[321,158446,158447,158449,158451,158453],{"class":323,"line":167},[321,158448,31444],{"class":380},[321,158450,332],{"class":331},[321,158452,158414],{"class":436},[321,158454,338],{"class":331},[14,158456,158458],{"id":158457},"_38-真值和假值","3.8 真值和假值",[19,158460,116612,158461,158463],{},[318,158462,1737],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158465,158466],{},"假值：",[312,158468,158470],{"className":30523,"code":158469,"language":30525,"meta":30,"style":30},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[318,158471,158472,158476,158481,158485,158489,158494,158498,158502,158507],{"__ignoreMap":30},[321,158473,158474],{"class":323,"line":324},[321,158475,157662],{"class":380},[321,158477,158478],{"class":323,"line":167},[321,158479,158480],{"class":380},"None\n",[321,158482,158483],{"class":323,"line":200},[321,158484,3291],{"class":380},[321,158486,158487],{"class":323,"line":1401},[321,158488,32487],{"class":380},[321,158490,158491],{"class":323,"line":1407},[321,158492,158493],{"class":436},"\"\"\n",[321,158495,158496],{"class":323,"line":1421},[321,158497,32502],{"class":331},[321,158499,158500],{"class":323,"line":1427},[321,158501,2182],{"class":331},[321,158503,158504],{"class":323,"line":1518},[321,158505,158506],{"class":331},"{}\n",[321,158508,158509,158511],{"class":323,"line":1524},[321,158510,155435],{"class":380},[321,158512,2182],{"class":331},[19,158514,15342],{},[312,158516,158518],{"className":30523,"code":158517,"language":30525,"meta":30,"style":30},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[318,158519,158520,158534,158538,158545,158565,158571],{"__ignoreMap":30},[321,158521,158522,158524,158526,158528,158530,158532],{"class":323,"line":324},[321,158523,146681],{"class":331},[321,158525,377],{"class":327},[321,158527,60750],{"class":380},[321,158529,332],{"class":331},[321,158531,152524],{"class":436},[321,158533,338],{"class":331},[321,158535,158536],{"class":323,"line":167},[321,158537,2606],{"emptyLinePlaceholder":251},[321,158539,158540,158542],{"class":323,"line":200},[321,158541,1737],{"class":327},[321,158543,158544],{"class":331}," name:\n",[321,158546,158547,158549,158551,158553,158555,158557,158559,158561,158563],{"class":323,"line":1401},[321,158548,31444],{"class":380},[321,158550,332],{"class":331},[321,158552,384],{"class":327},[321,158554,157199],{"class":436},[321,158556,1228],{"class":380},[321,158558,79955],{"class":331},[321,158560,1278],{"class":380},[321,158562,583],{"class":436},[321,158564,338],{"class":331},[321,158566,158567,158569],{"class":323,"line":1407},[321,158568,1907],{"class":327},[321,158570,3945],{"class":331},[321,158572,158573,158575,158577,158580],{"class":323,"line":1421},[321,158574,31444],{"class":380},[321,158576,332],{"class":331},[321,158578,158579],{"class":436},"\"姓名不能为空\"",[321,158581,338],{"class":331},[14,158583,158585],{"id":158584},"_39-match语句","3.9 match语句",[19,158587,158588,158589,158591],{},"Python 3.10 开始支持 ",[318,158590,71410],{},"。它适合处理固定选项。",[312,158593,158595],{"className":30523,"code":158594,"language":30525,"meta":30,"style":30},"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",[318,158596,158597,158613,158617,158624,158634,158645,158654,158665,158674,158685,158692],{"__ignoreMap":30},[321,158598,158599,158602,158604,158606,158608,158611],{"class":323,"line":324},[321,158600,158601],{"class":331},"command ",[321,158603,377],{"class":327},[321,158605,60750],{"class":380},[321,158607,332],{"class":331},[321,158609,158610],{"class":436},"\"请输入命令:\"",[321,158612,338],{"class":331},[321,158614,158615],{"class":323,"line":167},[321,158616,2606],{"emptyLinePlaceholder":251},[321,158618,158619,158621],{"class":323,"line":200},[321,158620,71410],{"class":327},[321,158622,158623],{"class":331}," command:\n",[321,158625,158626,158629,158632],{"class":323,"line":1401},[321,158627,158628],{"class":327},"    case",[321,158630,158631],{"class":436}," \"start\"",[321,158633,3945],{"class":331},[321,158635,158636,158638,158640,158643],{"class":323,"line":1407},[321,158637,32596],{"class":380},[321,158639,332],{"class":331},[321,158641,158642],{"class":436},"\"启动\"",[321,158644,338],{"class":331},[321,158646,158647,158649,158652],{"class":323,"line":1421},[321,158648,158628],{"class":327},[321,158650,158651],{"class":436}," \"stop\"",[321,158653,3945],{"class":331},[321,158655,158656,158658,158660,158663],{"class":323,"line":1427},[321,158657,32596],{"class":380},[321,158659,332],{"class":331},[321,158661,158662],{"class":436},"\"停止\"",[321,158664,338],{"class":331},[321,158666,158667,158669,158672],{"class":323,"line":1518},[321,158668,158628],{"class":327},[321,158670,158671],{"class":436}," \"restart\"",[321,158673,3945],{"class":331},[321,158675,158676,158678,158680,158683],{"class":323,"line":1524},[321,158677,32596],{"class":380},[321,158679,332],{"class":331},[321,158681,158682],{"class":436},"\"重启\"",[321,158684,338],{"class":331},[321,158686,158687,158689],{"class":323,"line":1536},[321,158688,158628],{"class":327},[321,158690,158691],{"class":331}," _:\n",[321,158693,158694,158696,158698,158701],{"class":323,"line":1818},[321,158695,32596],{"class":380},[321,158697,332],{"class":331},[321,158699,158700],{"class":436},"\"未知命令\"",[321,158702,338],{"class":331},[19,158704,158705,158706,158708,158709,158711],{},"入门阶段掌握 ",[318,158707,154803],{}," 更重要，",[318,158710,71410],{}," 可以作为补充。",[14,158713,158715],{"id":158714},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158717,123437],{},[151,158719,158720,158723,158726],{},[154,158721,158722],{},"输入成绩。",[154,158724,158725],{},"判断成绩是否合法。",[154,158727,158728],{},"输出等级。",[19,158730,10242],{},[312,158732,158734],{"className":30523,"code":158733,"language":30525,"meta":30,"style":30},"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",[318,158735,158736,158754,158758,158776,158787,158799,158810,158822,158833,158846,158857,158869,158880,158886],{"__ignoreMap":30},[321,158737,158738,158740,158742,158744,158746,158748,158750,158752],{"class":323,"line":324},[321,158739,155503],{"class":331},[321,158741,377],{"class":327},[321,158743,109942],{"class":380},[321,158745,332],{"class":331},[321,158747,53966],{"class":380},[321,158749,332],{"class":331},[321,158751,152554],{"class":436},[321,158753,30642],{"class":331},[321,158755,158756],{"class":323,"line":167},[321,158757,2606],{"emptyLinePlaceholder":251},[321,158759,158760,158762,158764,158766,158768,158770,158772,158774],{"class":323,"line":200},[321,158761,1737],{"class":327},[321,158763,39075],{"class":327},[321,158765,4299],{"class":380},[321,158767,158397],{"class":327},[321,158769,157928],{"class":331},[321,158771,1794],{"class":327},[321,158773,5961],{"class":380},[321,158775,3945],{"class":331},[321,158777,158778,158780,158782,158785],{"class":323,"line":1401},[321,158779,31444],{"class":380},[321,158781,332],{"class":331},[321,158783,158784],{"class":436},"\"成绩不合法\"",[321,158786,338],{"class":331},[321,158788,158789,158791,158793,158795,158797],{"class":323,"line":1407},[321,158790,157951],{"class":327},[321,158792,157928],{"class":331},[321,158794,1916],{"class":327},[321,158796,157933],{"class":380},[321,158798,3945],{"class":331},[321,158800,158801,158803,158805,158808],{"class":323,"line":1421},[321,158802,31444],{"class":380},[321,158804,332],{"class":331},[321,158806,158807],{"class":436},"\"等级:A\"",[321,158809,338],{"class":331},[321,158811,158812,158814,158816,158818,158820],{"class":323,"line":1427},[321,158813,157951],{"class":327},[321,158815,157928],{"class":331},[321,158817,1916],{"class":327},[321,158819,157958],{"class":380},[321,158821,3945],{"class":331},[321,158823,158824,158826,158828,158831],{"class":323,"line":1518},[321,158825,31444],{"class":380},[321,158827,332],{"class":331},[321,158829,158830],{"class":436},"\"等级:B\"",[321,158832,338],{"class":331},[321,158834,158835,158837,158839,158841,158844],{"class":323,"line":1524},[321,158836,157951],{"class":327},[321,158838,157928],{"class":331},[321,158840,1916],{"class":327},[321,158842,158843],{"class":380}," 70",[321,158845,3945],{"class":331},[321,158847,158848,158850,158852,158855],{"class":323,"line":1536},[321,158849,31444],{"class":380},[321,158851,332],{"class":331},[321,158853,158854],{"class":436},"\"等级:C\"",[321,158856,338],{"class":331},[321,158858,158859,158861,158863,158865,158867],{"class":323,"line":1818},[321,158860,157951],{"class":327},[321,158862,157928],{"class":331},[321,158864,1916],{"class":327},[321,158866,157982],{"class":380},[321,158868,3945],{"class":331},[321,158870,158871,158873,158875,158878],{"class":323,"line":1823},[321,158872,31444],{"class":380},[321,158874,332],{"class":331},[321,158876,158877],{"class":436},"\"等级:D\"",[321,158879,338],{"class":331},[321,158881,158882,158884],{"class":323,"line":1829},[321,158883,1907],{"class":327},[321,158885,3945],{"class":331},[321,158887,158888,158890,158892,158895],{"class":323,"line":1834},[321,158889,31444],{"class":380},[321,158891,332],{"class":331},[321,158893,158894],{"class":436},"\"等级:E\"",[321,158896,338],{"class":331},[14,158898,158900],{"id":158899},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158902,123437],{},[151,158904,158905,158908,158911,158914],{},[154,158906,158907],{},"输入消费金额。",[154,158909,158910],{},"输入会员等级，普通、银卡、金卡。",[154,158912,158913],{},"普通不打折，银卡 9 折，金卡 8 折。",[154,158915,158916],{},"满 500 再减 50。",[19,158918,10242],{},[312,158920,158922],{"className":30523,"code":158921,"language":30525,"meta":30,"style":30},"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",[318,158923,158924,158944,158960,158964,158972,158976,158990,159000,159013,159022,159035,159043,159049,159060,159064,159078,159082,159096,159106,159110],{"__ignoreMap":30},[321,158925,158926,158929,158931,158933,158935,158937,158939,158942],{"class":323,"line":324},[321,158927,158928],{"class":331},"amount ",[321,158930,377],{"class":327},[321,158932,109942],{"class":380},[321,158934,332],{"class":331},[321,158936,53966],{"class":380},[321,158938,332],{"class":331},[321,158940,158941],{"class":436},"\"请输入消费金额:\"",[321,158943,30642],{"class":331},[321,158945,158946,158949,158951,158953,158955,158958],{"class":323,"line":167},[321,158947,158948],{"class":331},"level ",[321,158950,377],{"class":327},[321,158952,60750],{"class":380},[321,158954,332],{"class":331},[321,158956,158957],{"class":436},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[321,158959,338],{"class":331},[321,158961,158962],{"class":323,"line":200},[321,158963,2606],{"emptyLinePlaceholder":251},[321,158965,158966,158968,158970],{"class":323,"line":1401},[321,158967,157381],{"class":331},[321,158969,377],{"class":327},[321,158971,55844],{"class":380},[321,158973,158974],{"class":323,"line":1407},[321,158975,2606],{"emptyLinePlaceholder":251},[321,158977,158978,158980,158983,158985,158988],{"class":323,"line":1421},[321,158979,1737],{"class":327},[321,158981,158982],{"class":331}," level ",[321,158984,3155],{"class":327},[321,158986,158987],{"class":436}," \"银卡\"",[321,158989,3945],{"class":331},[321,158991,158992,158995,158997],{"class":323,"line":1427},[321,158993,158994],{"class":331},"    discount ",[321,158996,377],{"class":327},[321,158998,158999],{"class":380}," 0.9\n",[321,159001,159002,159004,159006,159008,159011],{"class":323,"line":1518},[321,159003,157951],{"class":327},[321,159005,158982],{"class":331},[321,159007,3155],{"class":327},[321,159009,159010],{"class":436}," \"金卡\"",[321,159012,3945],{"class":331},[321,159014,159015,159017,159019],{"class":323,"line":1524},[321,159016,158994],{"class":331},[321,159018,377],{"class":327},[321,159020,159021],{"class":380}," 0.8\n",[321,159023,159024,159026,159028,159030,159033],{"class":323,"line":1536},[321,159025,157951],{"class":327},[321,159027,158982],{"class":331},[321,159029,3155],{"class":327},[321,159031,159032],{"class":436}," \"普通\"",[321,159034,3945],{"class":331},[321,159036,159037,159039,159041],{"class":323,"line":1818},[321,159038,158994],{"class":331},[321,159040,377],{"class":327},[321,159042,55844],{"class":380},[321,159044,159045,159047],{"class":323,"line":1823},[321,159046,1907],{"class":327},[321,159048,3945],{"class":331},[321,159050,159051,159053,159055,159058],{"class":323,"line":1829},[321,159052,31444],{"class":380},[321,159054,332],{"class":331},[321,159056,159057],{"class":436},"\"会员等级输入错误，按普通会员计算\"",[321,159059,338],{"class":331},[321,159061,159062],{"class":323,"line":1834},[321,159063,2606],{"emptyLinePlaceholder":251},[321,159065,159066,159069,159071,159074,159076],{"class":323,"line":1848},[321,159067,159068],{"class":331},"pay ",[321,159070,377],{"class":327},[321,159072,159073],{"class":331}," amount ",[321,159075,787],{"class":327},[321,159077,157420],{"class":331},[321,159079,159080],{"class":323,"line":1853},[321,159081,2606],{"emptyLinePlaceholder":251},[321,159083,159084,159086,159089,159091,159094],{"class":323,"line":1859},[321,159085,1737],{"class":327},[321,159087,159088],{"class":331}," pay ",[321,159090,1916],{"class":327},[321,159092,159093],{"class":380}," 500",[321,159095,3945],{"class":331},[321,159097,159098,159101,159103],{"class":323,"line":1880},[321,159099,159100],{"class":331},"    pay ",[321,159102,150397],{"class":327},[321,159104,159105],{"class":380}," 50\n",[321,159107,159108],{"class":323,"line":1885},[321,159109,2606],{"emptyLinePlaceholder":251},[321,159111,159112,159114,159116,159118,159120,159122,159125,159127,159129,159131],{"class":323,"line":1899},[321,159113,30560],{"class":380},[321,159115,332],{"class":331},[321,159117,384],{"class":327},[321,159119,157501],{"class":436},[321,159121,1228],{"class":380},[321,159123,159124],{"class":331},"pay",[321,159126,157304],{"class":327},[321,159128,1278],{"class":380},[321,159130,157157],{"class":436},[321,159132,338],{"class":331},[14,159134,159136],{"id":159135},"_312-易错点","3.12 易错点",[151,159138,159139,159142,159145,159148,159153],{},[154,159140,159141],{},"冒号不能漏。",[154,159143,159144],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[154,159146,159147],{},"多分支判断要注意顺序。",[154,159149,159150,159151,28530],{},"判断相等用 ",[318,159152,3155],{},[154,159154,159155],{},"字符串比较区分大小写：",[312,159157,159159],{"className":30523,"code":159158,"language":30525,"meta":30,"style":30},"\"Y\" == \"y\"  # False\n",[318,159160,159161],{"__ignoreMap":30},[321,159162,159163,159166,159168,159170],{"class":323,"line":324},[321,159164,159165],{"class":436},"\"Y\"",[321,159167,101704],{"class":327},[321,159169,158150],{"class":436},[321,159171,159172],{"class":390},"  # False\n",[19,159174,159175],{},"可转换后再判断：",[312,159177,159179],{"className":30523,"code":159178,"language":30525,"meta":30,"style":30},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[318,159180,159181,159198,159211],{"__ignoreMap":30},[321,159182,159183,159186,159188,159190,159192,159195],{"class":323,"line":324},[321,159184,159185],{"class":331},"answer ",[321,159187,377],{"class":327},[321,159189,60750],{"class":380},[321,159191,332],{"class":331},[321,159193,159194],{"class":436},"\"是否继续(y\u002Fn):\"",[321,159196,159197],{"class":331},").lower()\n",[321,159199,159200,159202,159205,159207,159209],{"class":323,"line":167},[321,159201,1737],{"class":327},[321,159203,159204],{"class":331}," answer ",[321,159206,3155],{"class":327},[321,159208,158150],{"class":436},[321,159210,3945],{"class":331},[321,159212,159213,159215,159217,159220],{"class":323,"line":200},[321,159214,31444],{"class":380},[321,159216,332],{"class":331},[321,159218,159219],{"class":436},"\"继续\"",[321,159221,338],{"class":331},[14,159223,159225],{"id":159224},"_313-本章练习","3.13 本章练习",[151,159227,159228,159231,159234,159237,159247],{},[154,159229,159230],{},"输入年龄，判断是否成年。",[154,159232,159233],{},"输入年份，判断是否为闰年。",[154,159235,159236],{},"输入三个数字，输出最大值。",[154,159238,159239,159240,159243,159244,159246],{},"写登录判断：用户名是 ",[318,159241,159242],{},"admin"," 且密码是 ",[318,159245,15291],{}," 才登录成功。",[154,159248,159249],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5333,159251,159252],{},"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":30,"searchDepth":167,"depth":167,"links":159254},[159255,159256,159257,159258,159259,159260,159265,159266,159267,159268,159269,159270,159271],{"id":157643,"depth":167,"text":157644},{"id":157696,"depth":167,"text":157697},{"id":157800,"depth":167,"text":157801},{"id":157890,"depth":167,"text":157891},{"id":158080,"depth":167,"text":158081},{"id":158203,"depth":167,"text":158204,"children":159261},[159262,159263,159264],{"id":158207,"depth":200,"text":158208},{"id":158264,"depth":200,"text":158265},{"id":158321,"depth":200,"text":158322},{"id":158366,"depth":167,"text":158367},{"id":158457,"depth":167,"text":158458},{"id":158584,"depth":167,"text":158585},{"id":158714,"depth":167,"text":158715},{"id":158899,"depth":167,"text":158900},{"id":159135,"depth":167,"text":159136},{"id":159224,"depth":167,"text":159225},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157635,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159278,"title":159279,"body":159280,"description":23584,"extension":249,"meta":161049,"navigation":251,"path":161050,"seo":161051,"stem":161052,"__hash__":161053},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159281,"toc":161029},[159282,159285,159289,159295,159298,159315,159319,159321,159338,159340,159385,159387,159404,159408,159411,159477,159480,159498,159502,159663,159672,159676,159680,159685,159732,159734,159740,159744,159749,159796,159798,159804,159808,159813,159849,159852,159899,159903,159909,159967,159972,160003,160008,160012,160067,160070,160142,160145,160204,160208,160211,160286,160289,160293,160399,160402,160428,160432,160444,160513,160516,160608,160612,160614,160625,160627,160757,160761,160963,160971,160975,161005,161009,161026],[10,159283,159279],{"id":159284},"_4-循环语句",[14,159286,159288],{"id":159287},"_41-为什么需要循环","4.1 为什么需要循环",[19,159290,159291,159292,159294],{},"如果要输出 1 到 100，不应该写 100 行 ",[318,159293,146617],{},"，而应该用循环。",[19,159296,159297],{},"循环适合处理重复任务：",[151,159299,159300,159303,159306,159309,159312],{},[154,159301,159302],{},"重复输出。",[154,159304,159305],{},"重复输入。",[154,159307,159308],{},"遍历数据。",[154,159310,159311],{},"持续执行菜单。",[154,159313,159314],{},"批量处理文件或数据。",[14,159316,159318],{"id":159317},"_42-while循环","4.2 while循环",[19,159320,5388],{},[312,159322,159324],{"className":30523,"code":159323,"language":30525,"meta":30,"style":30},"while 条件:\n    循环体\n",[318,159325,159326,159333],{"__ignoreMap":30},[321,159327,159328,159330],{"class":323,"line":324},[321,159329,108808],{"class":327},[321,159331,159332],{"class":331}," 条件:\n",[321,159334,159335],{"class":323,"line":167},[321,159336,159337],{"class":331},"    循环体\n",[19,159339,15342],{},[312,159341,159343],{"className":30523,"code":159342,"language":30525,"meta":30,"style":30},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[318,159344,159345,159353,159357,159369,159376],{"__ignoreMap":30},[321,159346,159347,159349,159351],{"class":323,"line":324},[321,159348,100293],{"class":331},[321,159350,377],{"class":327},[321,159352,55844],{"class":380},[321,159354,159355],{"class":323,"line":167},[321,159356,2606],{"emptyLinePlaceholder":251},[321,159358,159359,159361,159363,159365,159367],{"class":323,"line":200},[321,159360,108808],{"class":327},[321,159362,9645],{"class":331},[321,159364,1794],{"class":327},[321,159366,2354],{"class":380},[321,159368,3945],{"class":331},[321,159370,159371,159373],{"class":323,"line":1401},[321,159372,31444],{"class":380},[321,159374,159375],{"class":331},"(i)\n",[321,159377,159378,159381,159383],{"class":323,"line":1407},[321,159379,159380],{"class":331},"    i ",[321,159382,9684],{"class":327},[321,159384,55844],{"class":380},[19,159386,81074],{},[151,159388,159389,159395,159398,159401],{},[154,159390,159391,159392,28530],{},"判断条件 ",[318,159393,159394],{},"i \u003C= 5",[154,159396,159397],{},"条件成立，执行循环体。",[154,159399,159400],{},"执行完后回到条件判断。",[154,159402,159403],{},"条件不成立，退出循环。",[14,159405,159407],{"id":159406},"_43-while累加","4.3 while累加",[19,159409,159410],{},"计算 1 到 100 的和：",[312,159412,159414],{"className":30523,"code":159413,"language":30525,"meta":30,"style":30},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[318,159415,159416,159424,159432,159436,159448,159458,159466,159470],{"__ignoreMap":30},[321,159417,159418,159420,159422],{"class":323,"line":324},[321,159419,100293],{"class":331},[321,159421,377],{"class":327},[321,159423,55844],{"class":380},[321,159425,159426,159428,159430],{"class":323,"line":167},[321,159427,157405],{"class":331},[321,159429,377],{"class":327},[321,159431,47478],{"class":380},[321,159433,159434],{"class":323,"line":200},[321,159435,2606],{"emptyLinePlaceholder":251},[321,159437,159438,159440,159442,159444,159446],{"class":323,"line":1401},[321,159439,108808],{"class":327},[321,159441,9645],{"class":331},[321,159443,1794],{"class":327},[321,159445,5961],{"class":380},[321,159447,3945],{"class":331},[321,159449,159450,159453,159455],{"class":323,"line":1407},[321,159451,159452],{"class":331},"    total ",[321,159454,9684],{"class":327},[321,159456,159457],{"class":331}," i\n",[321,159459,159460,159462,159464],{"class":323,"line":1421},[321,159461,159380],{"class":331},[321,159463,9684],{"class":327},[321,159465,55844],{"class":380},[321,159467,159468],{"class":323,"line":1427},[321,159469,2606],{"emptyLinePlaceholder":251},[321,159471,159472,159474],{"class":323,"line":1518},[321,159473,30560],{"class":380},[321,159475,159476],{"class":331},"(total)\n",[19,159478,159479],{},"核心思想：",[151,159481,159482,159487,159492],{},[154,159483,159484,159486],{},[318,159485,773],{}," 控制循环次数。",[154,159488,159489,159491],{},[318,159490,157506],{}," 保存累加结果。",[154,159493,159494,159495,159497],{},"每轮循环都要更新 ",[318,159496,773],{},"，否则可能死循环。",[14,159499,159501],{"id":159500},"_44-while猜数字","4.4 while猜数字",[312,159503,159505],{"className":30523,"code":159504,"language":30525,"meta":30,"style":30},"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",[318,159506,159507,159513,159517,159534,159542,159546,159554,159574,159583,159587,159599,159610,159620,159631,159637,159659],{"__ignoreMap":30},[321,159508,159509,159511],{"class":323,"line":324},[321,159510,30537],{"class":327},[321,159512,45473],{"class":331},[321,159514,159515],{"class":323,"line":167},[321,159516,2606],{"emptyLinePlaceholder":251},[321,159518,159519,159521,159523,159526,159528,159530,159532],{"class":323,"line":200},[321,159520,159185],{"class":331},[321,159522,377],{"class":327},[321,159524,159525],{"class":331}," random.randint(",[321,159527,549],{"class":380},[321,159529,12642],{"class":331},[321,159531,643],{"class":380},[321,159533,338],{"class":331},[321,159535,159536,159538,159540],{"class":323,"line":1401},[321,159537,146836],{"class":331},[321,159539,377],{"class":327},[321,159541,47478],{"class":380},[321,159543,159544],{"class":323,"line":1407},[321,159545,2606],{"emptyLinePlaceholder":251},[321,159547,159548,159550,159552],{"class":323,"line":1421},[321,159549,108808],{"class":327},[321,159551,95437],{"class":380},[321,159553,3945],{"class":331},[321,159555,159556,159559,159561,159563,159565,159567,159569,159572],{"class":323,"line":1427},[321,159557,159558],{"class":331},"    guess ",[321,159560,377],{"class":327},[321,159562,2588],{"class":380},[321,159564,332],{"class":331},[321,159566,53966],{"class":380},[321,159568,332],{"class":331},[321,159570,159571],{"class":436},"\"请输入1到100之间的数字:\"",[321,159573,30642],{"class":331},[321,159575,159576,159579,159581],{"class":323,"line":1518},[321,159577,159578],{"class":331},"    count ",[321,159580,9684],{"class":327},[321,159582,55844],{"class":380},[321,159584,159585],{"class":323,"line":1524},[321,159586,2606],{"emptyLinePlaceholder":251},[321,159588,159589,159591,159594,159596],{"class":323,"line":1536},[321,159590,3307],{"class":327},[321,159592,159593],{"class":331}," guess ",[321,159595,1292],{"class":327},[321,159597,159598],{"class":331}," answer:\n",[321,159600,159601,159603,159605,159608],{"class":323,"line":1818},[321,159602,32596],{"class":380},[321,159604,332],{"class":331},[321,159606,159607],{"class":436},"\"猜大了\"",[321,159609,338],{"class":331},[321,159611,159612,159614,159616,159618],{"class":323,"line":1823},[321,159613,39438],{"class":327},[321,159615,159593],{"class":331},[321,159617,1242],{"class":327},[321,159619,159598],{"class":331},[321,159621,159622,159624,159626,159629],{"class":323,"line":1829},[321,159623,32596],{"class":380},[321,159625,332],{"class":331},[321,159627,159628],{"class":436},"\"猜小了\"",[321,159630,338],{"class":331},[321,159632,159633,159635],{"class":323,"line":1834},[321,159634,158167],{"class":327},[321,159636,3945],{"class":331},[321,159638,159639,159641,159643,159645,159648,159650,159652,159654,159657],{"class":323,"line":1848},[321,159640,32596],{"class":380},[321,159642,332],{"class":331},[321,159644,384],{"class":327},[321,159646,159647],{"class":436},"\"猜对了，一共猜了",[321,159649,1228],{"class":380},[321,159651,84579],{"class":331},[321,159653,1278],{"class":380},[321,159655,159656],{"class":436},"次\"",[321,159658,338],{"class":331},[321,159660,159661],{"class":323,"line":1853},[321,159662,31772],{"class":327},[19,159664,159665,159668,159669,159671],{},[318,159666,159667],{},"while True"," 表示无限循环，通常配合 ",[318,159670,2259],{}," 使用。",[14,159673,159675],{"id":159674},"_45-break和continue","4.5 break和continue",[292,159677,159679],{"id":159678},"_451-break","4.5.1 break",[19,159681,159682,159684],{},[318,159683,2259],{}," 直接结束整个循环。",[312,159686,159688],{"className":30523,"code":159687,"language":30525,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[318,159689,159690,159710,159722,159726],{"__ignoreMap":30},[321,159691,159692,159694,159696,159698,159700,159702,159704,159706,159708],{"class":323,"line":324},[321,159693,3231],{"class":327},[321,159695,9645],{"class":331},[321,159697,26188],{"class":327},[321,159699,32588],{"class":380},[321,159701,332],{"class":331},[321,159703,549],{"class":380},[321,159705,12642],{"class":331},[321,159707,676],{"class":380},[321,159709,30931],{"class":331},[321,159711,159712,159714,159716,159718,159720],{"class":323,"line":167},[321,159713,3307],{"class":327},[321,159715,9645],{"class":331},[321,159717,3155],{"class":327},[321,159719,78215],{"class":380},[321,159721,3945],{"class":331},[321,159723,159724],{"class":323,"line":200},[321,159725,31772],{"class":327},[321,159727,159728,159730],{"class":323,"line":1401},[321,159729,31444],{"class":380},[321,159731,159375],{"class":331},[19,159733,146602],{},[312,159735,159738],{"className":159736,"code":159737,"language":5394,"meta":30},[5392],"1\n2\n",[318,159739,159737],{"__ignoreMap":30},[292,159741,159743],{"id":159742},"_452-continue","4.5.2 continue",[19,159745,159746,159748],{},[318,159747,154817],{}," 跳过本轮剩余代码，进入下一轮循环。",[312,159750,159752],{"className":30523,"code":159751,"language":30525,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[318,159753,159754,159774,159786,159790],{"__ignoreMap":30},[321,159755,159756,159758,159760,159762,159764,159766,159768,159770,159772],{"class":323,"line":324},[321,159757,3231],{"class":327},[321,159759,9645],{"class":331},[321,159761,26188],{"class":327},[321,159763,32588],{"class":380},[321,159765,332],{"class":331},[321,159767,549],{"class":380},[321,159769,12642],{"class":331},[321,159771,676],{"class":380},[321,159773,30931],{"class":331},[321,159775,159776,159778,159780,159782,159784],{"class":323,"line":167},[321,159777,3307],{"class":327},[321,159779,9645],{"class":331},[321,159781,3155],{"class":327},[321,159783,78215],{"class":380},[321,159785,3945],{"class":331},[321,159787,159788],{"class":323,"line":200},[321,159789,148657],{"class":327},[321,159791,159792,159794],{"class":323,"line":1401},[321,159793,31444],{"class":380},[321,159795,159375],{"class":331},[19,159797,146602],{},[312,159799,159802],{"className":159800,"code":159801,"language":5394,"meta":30},[5392],"1\n2\n4\n5\n",[318,159803,159801],{"__ignoreMap":30},[14,159805,159807],{"id":159806},"_46-for循环","4.6 for循环",[19,159809,159810,159812],{},[318,159811,3231],{}," 常用于遍历序列。",[312,159814,159816],{"className":30523,"code":159815,"language":30525,"meta":30,"style":30},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[318,159817,159818,159827,159831,159842],{"__ignoreMap":30},[321,159819,159820,159822,159824],{"class":323,"line":324},[321,159821,146681],{"class":331},[321,159823,377],{"class":327},[321,159825,159826],{"class":436}," \"python\"\n",[321,159828,159829],{"class":323,"line":167},[321,159830,2606],{"emptyLinePlaceholder":251},[321,159832,159833,159835,159838,159840],{"class":323,"line":200},[321,159834,3231],{"class":327},[321,159836,159837],{"class":331}," ch ",[321,159839,26188],{"class":327},[321,159841,158544],{"class":331},[321,159843,159844,159846],{"class":323,"line":1401},[321,159845,31444],{"class":380},[321,159847,159848],{"class":331},"(ch)\n",[19,159850,159851],{},"遍历列表：",[312,159853,159855],{"className":30523,"code":159854,"language":30525,"meta":30,"style":30},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[318,159856,159857,159879,159883,159893],{"__ignoreMap":30},[321,159858,159859,159862,159864,159866,159868,159870,159872,159874,159877],{"class":323,"line":324},[321,159860,159861],{"class":331},"students ",[321,159863,377],{"class":327},[321,159865,52371],{"class":331},[321,159867,150033],{"class":436},[321,159869,12642],{"class":331},[321,159871,151081],{"class":436},[321,159873,12642],{"class":331},[321,159875,159876],{"class":436},"\"小刚\"",[321,159878,33391],{"class":331},[321,159880,159881],{"class":323,"line":167},[321,159882,2606],{"emptyLinePlaceholder":251},[321,159884,159885,159887,159889,159891],{"class":323,"line":200},[321,159886,3231],{"class":327},[321,159888,152282],{"class":331},[321,159890,26188],{"class":327},[321,159892,152287],{"class":331},[321,159894,159895,159897],{"class":323,"line":1401},[321,159896,31444],{"class":380},[321,159898,150187],{"class":331},[14,159900,159902],{"id":159901},"_47-range函数","4.7 range函数",[19,159904,159905,159908],{},[318,159906,159907],{},"range()"," 用于生成整数序列。",[312,159910,159912],{"className":30523,"code":159911,"language":30525,"meta":30,"style":30},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[318,159913,159914,159928,159946],{"__ignoreMap":30},[321,159915,159916,159918,159920,159922,159925],{"class":323,"line":324},[321,159917,33561],{"class":380},[321,159919,332],{"class":331},[321,159921,651],{"class":380},[321,159923,159924],{"class":331},")          ",[321,159926,159927],{"class":390},"# 0,1,2,3,4\n",[321,159929,159930,159932,159934,159936,159938,159940,159943],{"class":323,"line":167},[321,159931,33561],{"class":380},[321,159933,332],{"class":331},[321,159935,549],{"class":380},[321,159937,12642],{"class":331},[321,159939,651],{"class":380},[321,159941,159942],{"class":331},")       ",[321,159944,159945],{"class":390},"# 1,2,3,4\n",[321,159947,159948,159950,159952,159954,159956,159958,159960,159962,159964],{"class":323,"line":200},[321,159949,33561],{"class":380},[321,159951,332],{"class":331},[321,159953,549],{"class":380},[321,159955,12642],{"class":331},[321,159957,778],{"class":380},[321,159959,12642],{"class":331},[321,159961,409],{"class":380},[321,159963,155806],{"class":331},[321,159965,159966],{"class":390},"# 1,3,5,7,9\n",[19,159968,159969,159970,24763],{},"配合 ",[318,159971,3231],{},[312,159973,159975],{"className":30523,"code":159974,"language":30525,"meta":30,"style":30},"for i in range(1, 6):\n    print(i)\n",[318,159976,159977,159997],{"__ignoreMap":30},[321,159978,159979,159981,159983,159985,159987,159989,159991,159993,159995],{"class":323,"line":324},[321,159980,3231],{"class":327},[321,159982,9645],{"class":331},[321,159984,26188],{"class":327},[321,159986,32588],{"class":380},[321,159988,332],{"class":331},[321,159990,549],{"class":380},[321,159992,12642],{"class":331},[321,159994,676],{"class":380},[321,159996,30931],{"class":331},[321,159998,159999,160001],{"class":323,"line":167},[321,160000,31444],{"class":380},[321,160002,159375],{"class":331},[19,160004,9232,160005,160007],{},[318,160006,33561],{}," 的结束值不包含在内。",[14,160009,160011],{"id":160010},"_48-for循环求和","4.8 for循环求和",[312,160013,160015],{"className":30523,"code":160014,"language":30525,"meta":30,"style":30},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[318,160016,160017,160025,160029,160049,160057,160061],{"__ignoreMap":30},[321,160018,160019,160021,160023],{"class":323,"line":324},[321,160020,157405],{"class":331},[321,160022,377],{"class":327},[321,160024,47478],{"class":380},[321,160026,160027],{"class":323,"line":167},[321,160028,2606],{"emptyLinePlaceholder":251},[321,160030,160031,160033,160035,160037,160039,160041,160043,160045,160047],{"class":323,"line":200},[321,160032,3231],{"class":327},[321,160034,9645],{"class":331},[321,160036,26188],{"class":327},[321,160038,32588],{"class":380},[321,160040,332],{"class":331},[321,160042,549],{"class":380},[321,160044,12642],{"class":331},[321,160046,669],{"class":380},[321,160048,30931],{"class":331},[321,160050,160051,160053,160055],{"class":323,"line":1401},[321,160052,159452],{"class":331},[321,160054,9684],{"class":327},[321,160056,159457],{"class":331},[321,160058,160059],{"class":323,"line":1407},[321,160060,2606],{"emptyLinePlaceholder":251},[321,160062,160063,160065],{"class":323,"line":1421},[321,160064,30560],{"class":380},[321,160066,159476],{"class":331},[19,160068,160069],{},"求偶数和：",[312,160071,160073],{"className":30523,"code":160072,"language":30525,"meta":30,"style":30},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[318,160074,160075,160083,160087,160107,160123,160132,160136],{"__ignoreMap":30},[321,160076,160077,160079,160081],{"class":323,"line":324},[321,160078,157405],{"class":331},[321,160080,377],{"class":327},[321,160082,47478],{"class":380},[321,160084,160085],{"class":323,"line":167},[321,160086,2606],{"emptyLinePlaceholder":251},[321,160088,160089,160091,160093,160095,160097,160099,160101,160103,160105],{"class":323,"line":200},[321,160090,3231],{"class":327},[321,160092,9645],{"class":331},[321,160094,26188],{"class":327},[321,160096,32588],{"class":380},[321,160098,332],{"class":331},[321,160100,549],{"class":380},[321,160102,12642],{"class":331},[321,160104,669],{"class":380},[321,160106,30931],{"class":331},[321,160108,160109,160111,160113,160115,160117,160119,160121],{"class":323,"line":1401},[321,160110,3307],{"class":327},[321,160112,9645],{"class":331},[321,160114,660],{"class":327},[321,160116,14962],{"class":380},[321,160118,101704],{"class":327},[321,160120,4299],{"class":380},[321,160122,3945],{"class":331},[321,160124,160125,160128,160130],{"class":323,"line":1407},[321,160126,160127],{"class":331},"        total ",[321,160129,9684],{"class":327},[321,160131,159457],{"class":331},[321,160133,160134],{"class":323,"line":1421},[321,160135,2606],{"emptyLinePlaceholder":251},[321,160137,160138,160140],{"class":323,"line":1427},[321,160139,30560],{"class":380},[321,160141,159476],{"class":331},[19,160143,160144],{},"也可以：",[312,160146,160148],{"className":30523,"code":160147,"language":30525,"meta":30,"style":30},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[318,160149,160150,160158,160162,160186,160194,160198],{"__ignoreMap":30},[321,160151,160152,160154,160156],{"class":323,"line":324},[321,160153,157405],{"class":331},[321,160155,377],{"class":327},[321,160157,47478],{"class":380},[321,160159,160160],{"class":323,"line":167},[321,160161,2606],{"emptyLinePlaceholder":251},[321,160163,160164,160166,160168,160170,160172,160174,160176,160178,160180,160182,160184],{"class":323,"line":200},[321,160165,3231],{"class":327},[321,160167,9645],{"class":331},[321,160169,26188],{"class":327},[321,160171,32588],{"class":380},[321,160173,332],{"class":331},[321,160175,409],{"class":380},[321,160177,12642],{"class":331},[321,160179,669],{"class":380},[321,160181,12642],{"class":331},[321,160183,409],{"class":380},[321,160185,30931],{"class":331},[321,160187,160188,160190,160192],{"class":323,"line":1401},[321,160189,159452],{"class":331},[321,160191,9684],{"class":327},[321,160193,159457],{"class":331},[321,160195,160196],{"class":323,"line":1407},[321,160197,2606],{"emptyLinePlaceholder":251},[321,160199,160200,160202],{"class":323,"line":1421},[321,160201,30560],{"class":380},[321,160203,159476],{"class":331},[14,160205,160207],{"id":160206},"_49-循环嵌套","4.9 循环嵌套",[19,160209,160210],{},"嵌套循环就是循环里面再写循环。",[312,160212,160214],{"className":30523,"code":160213,"language":30525,"meta":30,"style":30},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[318,160215,160216,160236,160256],{"__ignoreMap":30},[321,160217,160218,160220,160222,160224,160226,160228,160230,160232,160234],{"class":323,"line":324},[321,160219,3231],{"class":327},[321,160221,9645],{"class":331},[321,160223,26188],{"class":327},[321,160225,32588],{"class":380},[321,160227,332],{"class":331},[321,160229,549],{"class":380},[321,160231,12642],{"class":331},[321,160233,625],{"class":380},[321,160235,30931],{"class":331},[321,160237,160238,160240,160242,160244,160246,160248,160250,160252,160254],{"class":323,"line":167},[321,160239,3407],{"class":327},[321,160241,9707],{"class":331},[321,160243,26188],{"class":327},[321,160245,32588],{"class":380},[321,160247,332],{"class":331},[321,160249,549],{"class":380},[321,160251,12642],{"class":331},[321,160253,625],{"class":380},[321,160255,30931],{"class":331},[321,160257,160258,160260,160262,160264,160267,160269,160271,160273,160276,160278,160280,160282,160284],{"class":323,"line":200},[321,160259,32596],{"class":380},[321,160261,332],{"class":331},[321,160263,384],{"class":327},[321,160265,160266],{"class":436},"\"i=",[321,160268,1228],{"class":380},[321,160270,773],{"class":331},[321,160272,1278],{"class":380},[321,160274,160275],{"class":436},", j=",[321,160277,1228],{"class":380},[321,160279,799],{"class":331},[321,160281,1278],{"class":380},[321,160283,583],{"class":436},[321,160285,338],{"class":331},[19,160287,160288],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160290,160292],{"id":160291},"_410-九九乘法表","4.10 九九乘法表",[312,160294,160296],{"className":30523,"code":160295,"language":30525,"meta":30,"style":30},"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",[318,160297,160298,160318,160341,160393],{"__ignoreMap":30},[321,160299,160300,160302,160304,160306,160308,160310,160312,160314,160316],{"class":323,"line":324},[321,160301,3231],{"class":327},[321,160303,9645],{"class":331},[321,160305,26188],{"class":327},[321,160307,32588],{"class":380},[321,160309,332],{"class":331},[321,160311,549],{"class":380},[321,160313,12642],{"class":331},[321,160315,778],{"class":380},[321,160317,30931],{"class":331},[321,160319,160320,160322,160324,160326,160328,160330,160332,160335,160337,160339],{"class":323,"line":167},[321,160321,3407],{"class":327},[321,160323,9707],{"class":331},[321,160325,26188],{"class":327},[321,160327,32588],{"class":380},[321,160329,332],{"class":331},[321,160331,549],{"class":380},[321,160333,160334],{"class":331},", i ",[321,160336,813],{"class":327},[321,160338,25263],{"class":380},[321,160340,30931],{"class":331},[321,160342,160343,160345,160347,160349,160351,160353,160355,160357,160359,160361,160363,160365,160367,160369,160371,160373,160375,160377,160379,160381,160383,160385,160387,160389,160391],{"class":323,"line":200},[321,160344,32596],{"class":380},[321,160346,332],{"class":331},[321,160348,384],{"class":327},[321,160350,583],{"class":436},[321,160352,1228],{"class":380},[321,160354,799],{"class":331},[321,160356,1278],{"class":380},[321,160358,787],{"class":436},[321,160360,1228],{"class":380},[321,160362,773],{"class":331},[321,160364,1278],{"class":380},[321,160366,377],{"class":436},[321,160368,1228],{"class":380},[321,160370,100293],{"class":331},[321,160372,787],{"class":327},[321,160374,3616],{"class":331},[321,160376,1278],{"class":380},[321,160378,583],{"class":436},[321,160380,12642],{"class":331},[321,160382,45946],{"class":5423},[321,160384,377],{"class":327},[321,160386,583],{"class":436},[321,160388,1437],{"class":380},[321,160390,583],{"class":436},[321,160392,338],{"class":331},[321,160394,160395,160397],{"class":323,"line":1401},[321,160396,31444],{"class":380},[321,160398,2182],{"class":331},[19,160400,160401],{},"关键点：",[151,160403,160404,160410,160416,160422],{},[154,160405,160406,160407,160409],{},"外层 ",[318,160408,773],{}," 控制行。",[154,160411,160412,160413,160415],{},"内层 ",[318,160414,799],{}," 控制列。",[154,160417,160418,160419,160421],{},"每行结束后用 ",[318,160420,146617],{}," 换行。",[154,160423,160424,160427],{},[318,160425,160426],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160429,160431],{"id":160430},"_411-循环else","4.11 循环else",[19,160433,160434,160435,160437,160438,160440,160441,160443],{},"Python 的循环可以带 ",[318,160436,1907],{},"。当循环正常结束时执行 ",[318,160439,1907],{},"，如果被 ",[318,160442,2259],{}," 打断，则不执行。",[312,160445,160447],{"className":30523,"code":160446,"language":30525,"meta":30,"style":30},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[318,160448,160449,160469,160481,160492,160496,160502],{"__ignoreMap":30},[321,160450,160451,160453,160455,160457,160459,160461,160463,160465,160467],{"class":323,"line":324},[321,160452,3231],{"class":327},[321,160454,9645],{"class":331},[321,160456,26188],{"class":327},[321,160458,32588],{"class":380},[321,160460,332],{"class":331},[321,160462,549],{"class":380},[321,160464,12642],{"class":331},[321,160466,676],{"class":380},[321,160468,30931],{"class":331},[321,160470,160471,160473,160475,160477,160479],{"class":323,"line":167},[321,160472,3307],{"class":327},[321,160474,9645],{"class":331},[321,160476,3155],{"class":327},[321,160478,2244],{"class":380},[321,160480,3945],{"class":331},[321,160482,160483,160485,160487,160490],{"class":323,"line":200},[321,160484,32596],{"class":380},[321,160486,332],{"class":331},[321,160488,160489],{"class":436},"\"找到了\"",[321,160491,338],{"class":331},[321,160493,160494],{"class":323,"line":1401},[321,160495,31772],{"class":327},[321,160497,160498,160500],{"class":323,"line":1407},[321,160499,1907],{"class":327},[321,160501,3945],{"class":331},[321,160503,160504,160506,160508,160511],{"class":323,"line":1421},[321,160505,31444],{"class":380},[321,160507,332],{"class":331},[321,160509,160510],{"class":436},"\"没找到\"",[321,160512,338],{"class":331},[19,160514,160515],{},"常用于搜索。",[312,160517,160519],{"className":30523,"code":160518,"language":30525,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[318,160520,160521,160542,160551,160555,160567,160578,160588,160592,160598],{"__ignoreMap":30},[321,160522,160523,160526,160528,160530,160532,160534,160536,160538,160540],{"class":323,"line":324},[321,160524,160525],{"class":331},"names ",[321,160527,377],{"class":327},[321,160529,52371],{"class":331},[321,160531,150033],{"class":436},[321,160533,12642],{"class":331},[321,160535,151081],{"class":436},[321,160537,12642],{"class":331},[321,160539,159876],{"class":436},[321,160541,33391],{"class":331},[321,160543,160544,160546,160548],{"class":323,"line":167},[321,160545,111723],{"class":331},[321,160547,377],{"class":327},[321,160549,160550],{"class":436}," \"小李\"\n",[321,160552,160553],{"class":323,"line":200},[321,160554,2606],{"emptyLinePlaceholder":251},[321,160556,160557,160559,160562,160564],{"class":323,"line":1401},[321,160558,3231],{"class":327},[321,160560,160561],{"class":331}," name ",[321,160563,26188],{"class":327},[321,160565,160566],{"class":331}," names:\n",[321,160568,160569,160571,160573,160575],{"class":323,"line":1407},[321,160570,3307],{"class":327},[321,160572,160561],{"class":331},[321,160574,3155],{"class":327},[321,160576,160577],{"class":331}," target:\n",[321,160579,160580,160582,160584,160586],{"class":323,"line":1421},[321,160581,32596],{"class":380},[321,160583,332],{"class":331},[321,160585,160489],{"class":436},[321,160587,338],{"class":331},[321,160589,160590],{"class":323,"line":1427},[321,160591,31772],{"class":327},[321,160593,160594,160596],{"class":323,"line":1518},[321,160595,1907],{"class":327},[321,160597,3945],{"class":331},[321,160599,160600,160602,160604,160606],{"class":323,"line":1524},[321,160601,31444],{"class":380},[321,160603,332],{"class":331},[321,160605,160510],{"class":436},[321,160607,338],{"class":331},[14,160609,160611],{"id":160610},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160613,123437],{},[151,160615,160616,160619,160622],{},[154,160617,160618],{},"用户最多输入 3 次密码。",[154,160620,160621],{},"密码正确则登录成功。",[154,160623,160624],{},"3 次都错误则锁定账号。",[19,160626,10242],{},[312,160628,160630],{"className":30523,"code":160629,"language":30525,"meta":30,"style":30},"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",[318,160631,160632,160642,160646,160662,160678,160682,160694,160705,160709,160715,160740,160746],{"__ignoreMap":30},[321,160633,160634,160637,160639],{"class":323,"line":324},[321,160635,160636],{"class":331},"password ",[321,160638,377],{"class":327},[321,160640,160641],{"class":436}," \"123456\"\n",[321,160643,160644],{"class":323,"line":167},[321,160645,2606],{"emptyLinePlaceholder":251},[321,160647,160648,160650,160652,160654,160656,160658,160660],{"class":323,"line":200},[321,160649,3231],{"class":327},[321,160651,9645],{"class":331},[321,160653,26188],{"class":327},[321,160655,32588],{"class":380},[321,160657,332],{"class":331},[321,160659,403],{"class":380},[321,160661,30931],{"class":331},[321,160663,160664,160667,160669,160671,160673,160676],{"class":323,"line":1401},[321,160665,160666],{"class":331},"    user_password ",[321,160668,377],{"class":327},[321,160670,60750],{"class":380},[321,160672,332],{"class":331},[321,160674,160675],{"class":436},"\"请输入密码:\"",[321,160677,338],{"class":331},[321,160679,160680],{"class":323,"line":1407},[321,160681,2606],{"emptyLinePlaceholder":251},[321,160683,160684,160686,160689,160691],{"class":323,"line":1421},[321,160685,3307],{"class":327},[321,160687,160688],{"class":331}," user_password ",[321,160690,3155],{"class":327},[321,160692,160693],{"class":331}," password:\n",[321,160695,160696,160698,160700,160703],{"class":323,"line":1427},[321,160697,32596],{"class":380},[321,160699,332],{"class":331},[321,160701,160702],{"class":436},"\"登录成功\"",[321,160704,338],{"class":331},[321,160706,160707],{"class":323,"line":1518},[321,160708,31772],{"class":327},[321,160710,160711,160713],{"class":323,"line":1524},[321,160712,158167],{"class":327},[321,160714,3945],{"class":331},[321,160716,160717,160719,160721,160723,160726,160729,160731,160733,160735,160738],{"class":323,"line":1536},[321,160718,32596],{"class":380},[321,160720,332],{"class":331},[321,160722,384],{"class":327},[321,160724,160725],{"class":436},"\"密码错误，还剩",[321,160727,160728],{"class":380},"{2",[321,160730,52416],{"class":327},[321,160732,3238],{"class":331},[321,160734,1278],{"class":380},[321,160736,160737],{"class":436},"次机会\"",[321,160739,338],{"class":331},[321,160741,160742,160744],{"class":323,"line":1818},[321,160743,1907],{"class":327},[321,160745,3945],{"class":331},[321,160747,160748,160750,160752,160755],{"class":323,"line":1823},[321,160749,31444],{"class":380},[321,160751,332],{"class":331},[321,160753,160754],{"class":436},"\"账号已锁定\"",[321,160756,338],{"class":331},[14,160758,160760],{"id":160759},"_413-小案例菜单程序","4.13 小案例：菜单程序",[312,160762,160764],{"className":30523,"code":160763,"language":30525,"meta":30,"style":30},"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",[318,160765,160766,160774,160785,160796,160807,160818,160829,160833,160848,160852,160864,160875,160887,160898,160910,160921,160933,160943,160947,160953],{"__ignoreMap":30},[321,160767,160768,160770,160772],{"class":323,"line":324},[321,160769,108808],{"class":327},[321,160771,95437],{"class":380},[321,160773,3945],{"class":331},[321,160775,160776,160778,160780,160783],{"class":323,"line":167},[321,160777,31444],{"class":380},[321,160779,332],{"class":331},[321,160781,160782],{"class":436},"\"====== 菜单 ======\"",[321,160784,338],{"class":331},[321,160786,160787,160789,160791,160794],{"class":323,"line":200},[321,160788,31444],{"class":380},[321,160790,332],{"class":331},[321,160792,160793],{"class":436},"\"1. 查询余额\"",[321,160795,338],{"class":331},[321,160797,160798,160800,160802,160805],{"class":323,"line":1401},[321,160799,31444],{"class":380},[321,160801,332],{"class":331},[321,160803,160804],{"class":436},"\"2. 存款\"",[321,160806,338],{"class":331},[321,160808,160809,160811,160813,160816],{"class":323,"line":1407},[321,160810,31444],{"class":380},[321,160812,332],{"class":331},[321,160814,160815],{"class":436},"\"3. 取款\"",[321,160817,338],{"class":331},[321,160819,160820,160822,160824,160827],{"class":323,"line":1421},[321,160821,31444],{"class":380},[321,160823,332],{"class":331},[321,160825,160826],{"class":436},"\"0. 退出\"",[321,160828,338],{"class":331},[321,160830,160831],{"class":323,"line":1427},[321,160832,2606],{"emptyLinePlaceholder":251},[321,160834,160835,160838,160840,160842,160844,160846],{"class":323,"line":1518},[321,160836,160837],{"class":331},"    choice ",[321,160839,377],{"class":327},[321,160841,60750],{"class":380},[321,160843,332],{"class":331},[321,160845,153218],{"class":436},[321,160847,338],{"class":331},[321,160849,160850],{"class":323,"line":1524},[321,160851,2606],{"emptyLinePlaceholder":251},[321,160853,160854,160856,160858,160860,160862],{"class":323,"line":1536},[321,160855,3307],{"class":327},[321,160857,153231],{"class":331},[321,160859,3155],{"class":327},[321,160861,153236],{"class":436},[321,160863,3945],{"class":331},[321,160865,160866,160868,160870,160873],{"class":323,"line":1818},[321,160867,32596],{"class":380},[321,160869,332],{"class":331},[321,160871,160872],{"class":436},"\"余额为1000元\"",[321,160874,338],{"class":331},[321,160876,160877,160879,160881,160883,160885],{"class":323,"line":1823},[321,160878,39438],{"class":327},[321,160880,153231],{"class":331},[321,160882,3155],{"class":327},[321,160884,153255],{"class":436},[321,160886,3945],{"class":331},[321,160888,160889,160891,160893,160896],{"class":323,"line":1829},[321,160890,32596],{"class":380},[321,160892,332],{"class":331},[321,160894,160895],{"class":436},"\"存款功能\"",[321,160897,338],{"class":331},[321,160899,160900,160902,160904,160906,160908],{"class":323,"line":1834},[321,160901,39438],{"class":327},[321,160903,153231],{"class":331},[321,160905,3155],{"class":327},[321,160907,153273],{"class":436},[321,160909,3945],{"class":331},[321,160911,160912,160914,160916,160919],{"class":323,"line":1848},[321,160913,32596],{"class":380},[321,160915,332],{"class":331},[321,160917,160918],{"class":436},"\"取款功能\"",[321,160920,338],{"class":331},[321,160922,160923,160925,160927,160929,160931],{"class":323,"line":1853},[321,160924,39438],{"class":327},[321,160926,153231],{"class":331},[321,160928,3155],{"class":327},[321,160930,153327],{"class":436},[321,160932,3945],{"class":331},[321,160934,160935,160937,160939,160941],{"class":323,"line":1859},[321,160936,32596],{"class":380},[321,160938,332],{"class":331},[321,160940,153338],{"class":436},[321,160942,338],{"class":331},[321,160944,160945],{"class":323,"line":1880},[321,160946,31772],{"class":327},[321,160948,160949,160951],{"class":323,"line":1885},[321,160950,158167],{"class":327},[321,160952,3945],{"class":331},[321,160954,160955,160957,160959,160961],{"class":323,"line":1899},[321,160956,32596],{"class":380},[321,160958,332],{"class":331},[321,160960,153359],{"class":436},[321,160962,338],{"class":331},[19,160964,160965,160966,160968,160969,28530],{},"菜单类程序通常使用 ",[318,160967,159667],{},"，用户选择退出时 ",[318,160970,2259],{},[14,160972,160974],{"id":160973},"_414-易错点","4.14 易错点",[151,160976,160977,160982,160988,160996,161002],{},[154,160978,160979,160981],{},[318,160980,108808],{}," 循环必须更新控制变量。",[154,160983,160984,160987],{},[318,160985,160986],{},"range(1, 10)"," 不包含 10。",[154,160989,160990,160992,160993,160995],{},[318,160991,2259],{}," 结束整个循环，",[318,160994,154817],{}," 只跳过本轮。",[154,160997,160998,160999,161001],{},"嵌套循环中，",[318,161000,2259],{}," 只跳出当前所在的一层循环。",[154,161003,161004],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161006,161008],{"id":161007},"_415-本章练习","4.15 本章练习",[151,161010,161011,161014,161017,161020,161023],{},[154,161012,161013],{},"输出 1 到 100。",[154,161015,161016],{},"计算 1 到 100 的偶数和。",[154,161018,161019],{},"输出 100 以内能被 3 和 5 同时整除的数。",[154,161021,161022],{},"编写猜数字游戏，限制最多猜 7 次。",[154,161024,161025],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5333,161027,161028],{},"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":30,"searchDepth":167,"depth":167,"links":161030},[161031,161032,161033,161034,161035,161039,161040,161041,161042,161043,161044,161045,161046,161047,161048],{"id":159287,"depth":167,"text":159288},{"id":159317,"depth":167,"text":159318},{"id":159406,"depth":167,"text":159407},{"id":159500,"depth":167,"text":159501},{"id":159674,"depth":167,"text":159675,"children":161036},[161037,161038],{"id":159678,"depth":200,"text":159679},{"id":159742,"depth":200,"text":159743},{"id":159806,"depth":167,"text":159807},{"id":159901,"depth":167,"text":159902},{"id":160010,"depth":167,"text":160011},{"id":160206,"depth":167,"text":160207},{"id":160291,"depth":167,"text":160292},{"id":160430,"depth":167,"text":160431},{"id":160610,"depth":167,"text":160611},{"id":160759,"depth":167,"text":160760},{"id":160973,"depth":167,"text":160974},{"id":161007,"depth":167,"text":161008},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159279,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161055,"title":161056,"body":161057,"description":23584,"extension":249,"meta":163062,"navigation":251,"path":163063,"seo":163064,"stem":163065,"__hash__":163066},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161058,"toc":163042},[161059,161062,161066,161069,161072,161086,161089,161103,161107,161109,161128,161130,161177,161179,161193,161197,161271,161274,161278,161281,161340,161348,161351,161404,161407,161411,161416,161471,161479,161529,161533,161538,161546,161645,161651,161655,161660,161663,161674,161715,161728,161732,161735,161771,161774,161787,161790,161850,161854,161858,161861,161912,161916,161919,161966,161972,162038,162041,162045,162048,162164,162167,162171,162174,162280,162284,162287,162325,162328,162370,162373,162433,162436,162440,162904,162907,162911,162938,162944,163005,163009,163039],[10,161060,161056],{"id":161061},"_5-函数基础",[14,161063,161065],{"id":161064},"_51-为什么需要函数","5.1 为什么需要函数",[19,161067,161068],{},"函数用于封装一段可以重复使用的代码。",[19,161070,161071],{},"不使用函数的问题：",[151,161073,161074,161077,161080,161083],{},[154,161075,161076],{},"重复代码多。",[154,161078,161079],{},"修改逻辑时容易漏改。",[154,161081,161082],{},"主流程不清晰。",[154,161084,161085],{},"程序越写越长，难以维护。",[19,161087,161088],{},"使用函数后的好处：",[151,161090,161091,161094,161097,161100],{},[154,161092,161093],{},"提高复用性。",[154,161095,161096],{},"提高可读性。",[154,161098,161099],{},"便于调试。",[154,161101,161102],{},"便于分工。",[14,161104,161106],{"id":161105},"_52-函数定义","5.2 函数定义",[19,161108,5388],{},[312,161110,161112],{"className":30523,"code":161111,"language":30525,"meta":30,"style":30},"def 函数名():\n    函数体\n",[318,161113,161114,161123],{"__ignoreMap":30},[321,161115,161116,161118,161121],{"class":323,"line":324},[321,161117,32092],{"class":327},[321,161119,161120],{"class":2169}," 函数名",[321,161122,32098],{"class":331},[321,161124,161125],{"class":323,"line":167},[321,161126,161127],{"class":331},"    函数体\n",[19,161129,15342],{},[312,161131,161133],{"className":30523,"code":161132,"language":30525,"meta":30,"style":30},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[318,161134,161135,161144,161154,161164,161168,161172],{"__ignoreMap":30},[321,161136,161137,161139,161142],{"class":323,"line":324},[321,161138,32092],{"class":327},[321,161140,161141],{"class":2169}," say_hello",[321,161143,32098],{"class":331},[321,161145,161146,161148,161150,161152],{"class":323,"line":167},[321,161147,31444],{"class":380},[321,161149,332],{"class":331},[321,161151,6051],{"class":436},[321,161153,338],{"class":331},[321,161155,161156,161158,161160,161162],{"class":323,"line":200},[321,161157,31444],{"class":380},[321,161159,332],{"class":331},[321,161161,146784],{"class":436},[321,161163,338],{"class":331},[321,161165,161166],{"class":323,"line":1401},[321,161167,2606],{"emptyLinePlaceholder":251},[321,161169,161170],{"class":323,"line":1407},[321,161171,2606],{"emptyLinePlaceholder":251},[321,161173,161174],{"class":323,"line":1421},[321,161175,161176],{"class":331},"say_hello()\n",[19,161178,9232],{},[151,161180,161181,161184,161187,161190],{},[154,161182,161183],{},"函数必须先定义，再调用。",[154,161185,161186],{},"函数名遵循变量命名规则。",[154,161188,161189],{},"函数体需要缩进。",[154,161191,161192],{},"函数不调用就不会执行。",[14,161194,161196],{"id":161195},"_53-函数调用","5.3 函数调用",[312,161198,161200],{"className":30523,"code":161199,"language":30525,"meta":30,"style":30},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[318,161201,161202,161211,161222,161233,161244,161254,161258,161262,161267],{"__ignoreMap":30},[321,161203,161204,161206,161209],{"class":323,"line":324},[321,161205,32092],{"class":327},[321,161207,161208],{"class":2169}," print_menu",[321,161210,32098],{"class":331},[321,161212,161213,161215,161217,161220],{"class":323,"line":167},[321,161214,31444],{"class":380},[321,161216,332],{"class":331},[321,161218,161219],{"class":436},"\"1. 查询\"",[321,161221,338],{"class":331},[321,161223,161224,161226,161228,161231],{"class":323,"line":200},[321,161225,31444],{"class":380},[321,161227,332],{"class":331},[321,161229,161230],{"class":436},"\"2. 添加\"",[321,161232,338],{"class":331},[321,161234,161235,161237,161239,161242],{"class":323,"line":1401},[321,161236,31444],{"class":380},[321,161238,332],{"class":331},[321,161240,161241],{"class":436},"\"3. 删除\"",[321,161243,338],{"class":331},[321,161245,161246,161248,161250,161252],{"class":323,"line":1407},[321,161247,31444],{"class":380},[321,161249,332],{"class":331},[321,161251,160826],{"class":436},[321,161253,338],{"class":331},[321,161255,161256],{"class":323,"line":1421},[321,161257,2606],{"emptyLinePlaceholder":251},[321,161259,161260],{"class":323,"line":1427},[321,161261,2606],{"emptyLinePlaceholder":251},[321,161263,161264],{"class":323,"line":1518},[321,161265,161266],{"class":331},"print_menu()\n",[321,161268,161269],{"class":323,"line":1524},[321,161270,161266],{"class":331},[19,161272,161273],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161275,161277],{"id":161276},"_54-参数","5.4 参数",[19,161279,161280],{},"参数用于向函数传递数据。",[312,161282,161284],{"className":30523,"code":161283,"language":30525,"meta":30,"style":30},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[318,161285,161286,161295,161315,161319,161323,161332],{"__ignoreMap":30},[321,161287,161288,161290,161292],{"class":323,"line":324},[321,161289,32092],{"class":327},[321,161291,161141],{"class":2169},[321,161293,161294],{"class":331},"(name):\n",[321,161296,161297,161299,161301,161303,161305,161307,161309,161311,161313],{"class":323,"line":167},[321,161298,31444],{"class":380},[321,161300,332],{"class":331},[321,161302,384],{"class":327},[321,161304,157199],{"class":436},[321,161306,1228],{"class":380},[321,161308,79955],{"class":331},[321,161310,1278],{"class":380},[321,161312,583],{"class":436},[321,161314,338],{"class":331},[321,161316,161317],{"class":323,"line":200},[321,161318,2606],{"emptyLinePlaceholder":251},[321,161320,161321],{"class":323,"line":1401},[321,161322,2606],{"emptyLinePlaceholder":251},[321,161324,161325,161328,161330],{"class":323,"line":1407},[321,161326,161327],{"class":331},"say_hello(",[321,161329,150033],{"class":436},[321,161331,338],{"class":331},[321,161333,161334,161336,161338],{"class":323,"line":1421},[321,161335,161327],{"class":331},[321,161337,151081],{"class":436},[321,161339,338],{"class":331},[19,161341,161342,161344,161345,161347],{},[318,161343,79955],{}," 是形参，",[318,161346,150033],{}," 是实参。",[19,161349,161350],{},"多个参数：",[312,161352,161354],{"className":30523,"code":161353,"language":30525,"meta":30,"style":30},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[318,161355,161356,161364,161377,161383,161387,161391],{"__ignoreMap":30},[321,161357,161358,161360,161362],{"class":323,"line":324},[321,161359,32092],{"class":327},[321,161361,5416],{"class":2169},[321,161363,151238],{"class":331},[321,161365,161366,161369,161371,161373,161375],{"class":323,"line":167},[321,161367,161368],{"class":331},"    result ",[321,161370,377],{"class":327},[321,161372,11076],{"class":331},[321,161374,813],{"class":327},[321,161376,151249],{"class":331},[321,161378,161379,161381],{"class":323,"line":200},[321,161380,31444],{"class":380},[321,161382,76730],{"class":331},[321,161384,161385],{"class":323,"line":1401},[321,161386,2606],{"emptyLinePlaceholder":251},[321,161388,161389],{"class":323,"line":1407},[321,161390,2606],{"emptyLinePlaceholder":251},[321,161392,161393,161396,161398,161400,161402],{"class":323,"line":1421},[321,161394,161395],{"class":331},"add(",[321,161397,778],{"class":380},[321,161399,12642],{"class":331},[321,161401,1032],{"class":380},[321,161403,338],{"class":331},[19,161405,161406],{},"调用时参数数量必须匹配。",[14,161408,161410],{"id":161409},"_55-返回值","5.5 返回值",[19,161412,161413,161415],{},[318,161414,17253],{}," 用于把函数内部的结果返回给调用者。",[312,161417,161419],{"className":30523,"code":161418,"language":30525,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[318,161420,161421,161429,161439,161443,161447,161465],{"__ignoreMap":30},[321,161422,161423,161425,161427],{"class":323,"line":324},[321,161424,32092],{"class":327},[321,161426,5416],{"class":2169},[321,161428,151238],{"class":331},[321,161430,161431,161433,161435,161437],{"class":323,"line":167},[321,161432,4296],{"class":327},[321,161434,11076],{"class":331},[321,161436,813],{"class":327},[321,161438,151249],{"class":331},[321,161440,161441],{"class":323,"line":200},[321,161442,2606],{"emptyLinePlaceholder":251},[321,161444,161445],{"class":323,"line":1401},[321,161446,2606],{"emptyLinePlaceholder":251},[321,161448,161449,161452,161454,161457,161459,161461,161463],{"class":323,"line":1407},[321,161450,161451],{"class":331},"result ",[321,161453,377],{"class":327},[321,161455,161456],{"class":331}," add(",[321,161458,778],{"class":380},[321,161460,12642],{"class":331},[321,161462,1032],{"class":380},[321,161464,338],{"class":331},[321,161466,161467,161469],{"class":323,"line":1421},[321,161468,30560],{"class":380},[321,161470,76730],{"class":331},[19,161472,161473,161474,161476,161477,28530],{},"如果函数没有写 ",[318,161475,17253],{},"，默认返回 ",[318,161478,95831],{},[312,161480,161482],{"className":30523,"code":161481,"language":30525,"meta":30,"style":30},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[318,161483,161484,161492,161502,161506,161510,161519],{"__ignoreMap":30},[321,161485,161486,161488,161490],{"class":323,"line":324},[321,161487,32092],{"class":327},[321,161489,161141],{"class":2169},[321,161491,32098],{"class":331},[321,161493,161494,161496,161498,161500],{"class":323,"line":167},[321,161495,31444],{"class":380},[321,161497,332],{"class":331},[321,161499,6051],{"class":436},[321,161501,338],{"class":331},[321,161503,161504],{"class":323,"line":200},[321,161505,2606],{"emptyLinePlaceholder":251},[321,161507,161508],{"class":323,"line":1401},[321,161509,2606],{"emptyLinePlaceholder":251},[321,161511,161512,161514,161516],{"class":323,"line":1407},[321,161513,161451],{"class":331},[321,161515,377],{"class":327},[321,161517,161518],{"class":331}," say_hello()\n",[321,161520,161521,161523,161526],{"class":323,"line":1421},[321,161522,30560],{"class":380},[321,161524,161525],{"class":331},"(result)  ",[321,161527,161528],{"class":390},"# None\n",[14,161530,161532],{"id":161531},"_56-return的作用","5.6 return的作用",[19,161534,161535,161537],{},[318,161536,17253],{}," 有两个作用：",[151,161539,161540,161543],{},[154,161541,161542],{},"返回结果。",[154,161544,161545],{},"结束函数。",[312,161547,161549],{"className":30523,"code":161548,"language":30525,"meta":30,"style":30},"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",[318,161550,161551,161561,161573,161580,161584,161596,161603,161607,161614,161618,161622,161633],{"__ignoreMap":30},[321,161552,161553,161555,161558],{"class":323,"line":324},[321,161554,32092],{"class":327},[321,161556,161557],{"class":2169}," check_age",[321,161559,161560],{"class":331},"(age):\n",[321,161562,161563,161565,161567,161569,161571],{"class":323,"line":167},[321,161564,3307],{"class":327},[321,161566,15914],{"class":331},[321,161568,1242],{"class":327},[321,161570,4299],{"class":380},[321,161572,3945],{"class":331},[321,161574,161575,161577],{"class":323,"line":200},[321,161576,14959],{"class":327},[321,161578,161579],{"class":436}," \"年龄不合法\"\n",[321,161581,161582],{"class":323,"line":1401},[321,161583,2606],{"emptyLinePlaceholder":251},[321,161585,161586,161588,161590,161592,161594],{"class":323,"line":1407},[321,161587,3307],{"class":327},[321,161589,15914],{"class":331},[321,161591,1916],{"class":327},[321,161593,156430],{"class":380},[321,161595,3945],{"class":331},[321,161597,161598,161600],{"class":323,"line":1421},[321,161599,14959],{"class":327},[321,161601,161602],{"class":436}," \"成年人\"\n",[321,161604,161605],{"class":323,"line":1427},[321,161606,2606],{"emptyLinePlaceholder":251},[321,161608,161609,161611],{"class":323,"line":1518},[321,161610,4296],{"class":327},[321,161612,161613],{"class":436}," \"未成年人\"\n",[321,161615,161616],{"class":323,"line":1524},[321,161617,2606],{"emptyLinePlaceholder":251},[321,161619,161620],{"class":323,"line":1536},[321,161621,2606],{"emptyLinePlaceholder":251},[321,161623,161624,161626,161629,161631],{"class":323,"line":1818},[321,161625,30560],{"class":380},[321,161627,161628],{"class":331},"(check_age(",[321,161630,1032],{"class":380},[321,161632,30642],{"class":331},[321,161634,161635,161637,161639,161641,161643],{"class":323,"line":1823},[321,161636,30560],{"class":380},[321,161638,161628],{"class":331},[321,161640,864],{"class":327},[321,161642,549],{"class":380},[321,161644,30642],{"class":331},[19,161646,161647,161648,161650],{},"函数执行到 ",[318,161649,17253],{}," 后，后面的代码不会继续执行。",[14,161652,161654],{"id":161653},"_57-none","5.7 None",[19,161656,161657,161659],{},[318,161658,95831],{}," 表示空值或没有结果。",[19,161661,161662],{},"常见使用场景：",[151,161664,161665,161668,161671],{},[154,161666,161667],{},"函数没有返回值。",[154,161669,161670],{},"变量暂时没有具体值。",[154,161672,161673],{},"表示查询不到结果。",[312,161675,161677],{"className":30523,"code":161676,"language":30525,"meta":30,"style":30},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[318,161678,161679,161687,161691,161704],{"__ignoreMap":30},[321,161680,161681,161683,161685],{"class":323,"line":324},[321,161682,161451],{"class":331},[321,161684,377],{"class":327},[321,161686,152317],{"class":380},[321,161688,161689],{"class":323,"line":167},[321,161690,2606],{"emptyLinePlaceholder":251},[321,161692,161693,161695,161698,161700,161702],{"class":323,"line":200},[321,161694,1737],{"class":327},[321,161696,161697],{"class":331}," result ",[321,161699,39072],{"class":327},[321,161701,39078],{"class":380},[321,161703,3945],{"class":331},[321,161705,161706,161708,161710,161713],{"class":323,"line":1401},[321,161707,31444],{"class":380},[321,161709,332],{"class":331},[321,161711,161712],{"class":436},"\"没有数据\"",[321,161714,338],{"class":331},[19,161716,161717,161718,161720,161721,161724,161725,28530],{},"判断 ",[318,161719,95831],{}," 推荐使用 ",[318,161722,161723],{},"is None","，不要写成 ",[318,161726,161727],{},"== None",[14,161729,161731],{"id":161730},"_58-函数文档字符串","5.8 函数文档字符串",[19,161733,161734],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[312,161736,161738],{"className":30523,"code":161737,"language":30525,"meta":30,"style":30},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[318,161739,161740,161750,161755],{"__ignoreMap":30},[321,161741,161742,161744,161747],{"class":323,"line":324},[321,161743,32092],{"class":327},[321,161745,161746],{"class":2169}," calculate_bmi",[321,161748,161749],{"class":331},"(weight, height):\n",[321,161751,161752],{"class":323,"line":167},[321,161753,161754],{"class":436},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[321,161756,161757,161759,161762,161764,161767,161769],{"class":323,"line":200},[321,161758,4296],{"class":327},[321,161760,161761],{"class":331}," weight ",[321,161763,916],{"class":327},[321,161765,161766],{"class":331}," height ",[321,161768,10868],{"class":327},[321,161770,47868],{"class":380},[19,161772,161773],{},"查看说明：",[312,161775,161777],{"className":30523,"code":161776,"language":30525,"meta":30,"style":30},"help(calculate_bmi)\n",[318,161778,161779],{"__ignoreMap":30},[321,161780,161781,161784],{"class":323,"line":324},[321,161782,161783],{"class":380},"help",[321,161785,161786],{"class":331},"(calculate_bmi)\n",[19,161788,161789],{},"较完整的写法：",[312,161791,161793],{"className":30523,"code":161792,"language":30525,"meta":30,"style":30},"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",[318,161794,161795,161803,161808,161813,161817,161822,161827,161832,161836],{"__ignoreMap":30},[321,161796,161797,161799,161801],{"class":323,"line":324},[321,161798,32092],{"class":327},[321,161800,161746],{"class":2169},[321,161802,161749],{"class":331},[321,161804,161805],{"class":323,"line":167},[321,161806,161807],{"class":436},"    \"\"\"\n",[321,161809,161810],{"class":323,"line":200},[321,161811,161812],{"class":436},"    计算BMI。\n",[321,161814,161815],{"class":323,"line":1401},[321,161816,2606],{"emptyLinePlaceholder":251},[321,161818,161819],{"class":323,"line":1407},[321,161820,161821],{"class":436},"    :param weight: 体重，单位kg\n",[321,161823,161824],{"class":323,"line":1421},[321,161825,161826],{"class":436},"    :param height: 身高，单位m\n",[321,161828,161829],{"class":323,"line":1427},[321,161830,161831],{"class":436},"    :return: BMI数值\n",[321,161833,161834],{"class":323,"line":1518},[321,161835,161807],{"class":436},[321,161837,161838,161840,161842,161844,161846,161848],{"class":323,"line":1524},[321,161839,4296],{"class":327},[321,161841,161761],{"class":331},[321,161843,916],{"class":327},[321,161845,161766],{"class":331},[321,161847,10868],{"class":327},[321,161849,47868],{"class":380},[14,161851,161853],{"id":161852},"_59-变量作用域","5.9 变量作用域",[292,161855,161857],{"id":161856},"_591-局部变量","5.9.1 局部变量",[19,161859,161860],{},"在函数内部定义的变量，只能在函数内部使用。",[312,161862,161864],{"className":30523,"code":161863,"language":30525,"meta":30,"style":30},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[318,161865,161866,161875,161883,161889,161893,161897,161902],{"__ignoreMap":30},[321,161867,161868,161870,161873],{"class":323,"line":324},[321,161869,32092],{"class":327},[321,161871,161872],{"class":2169}," test",[321,161874,32098],{"class":331},[321,161876,161877,161879,161881],{"class":323,"line":167},[321,161878,45738],{"class":331},[321,161880,377],{"class":327},[321,161882,58573],{"class":380},[321,161884,161885,161887],{"class":323,"line":200},[321,161886,31444],{"class":380},[321,161888,345],{"class":331},[321,161890,161891],{"class":323,"line":1401},[321,161892,2606],{"emptyLinePlaceholder":251},[321,161894,161895],{"class":323,"line":1407},[321,161896,2606],{"emptyLinePlaceholder":251},[321,161898,161899],{"class":323,"line":1421},[321,161900,161901],{"class":331},"test()\n",[321,161903,161904,161906,161909],{"class":323,"line":1427},[321,161905,30560],{"class":380},[321,161907,161908],{"class":331},"(num)  ",[321,161910,161911],{"class":390},"# 报错\n",[292,161913,161915],{"id":161914},"_592-全局变量","5.9.2 全局变量",[19,161917,161918],{},"在函数外部定义的变量，可以在函数内部读取。",[312,161920,161922],{"className":30523,"code":161921,"language":30525,"meta":30,"style":30},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[318,161923,161924,161932,161936,161940,161948,161954,161958,161962],{"__ignoreMap":30},[321,161925,161926,161928,161930],{"class":323,"line":324},[321,161927,146681],{"class":331},[321,161929,377],{"class":327},[321,161931,149498],{"class":436},[321,161933,161934],{"class":323,"line":167},[321,161935,2606],{"emptyLinePlaceholder":251},[321,161937,161938],{"class":323,"line":200},[321,161939,2606],{"emptyLinePlaceholder":251},[321,161941,161942,161944,161946],{"class":323,"line":1401},[321,161943,32092],{"class":327},[321,161945,161141],{"class":2169},[321,161947,32098],{"class":331},[321,161949,161950,161952],{"class":323,"line":1407},[321,161951,31444],{"class":380},[321,161953,150805],{"class":331},[321,161955,161956],{"class":323,"line":1421},[321,161957,2606],{"emptyLinePlaceholder":251},[321,161959,161960],{"class":323,"line":1427},[321,161961,2606],{"emptyLinePlaceholder":251},[321,161963,161964],{"class":323,"line":1518},[321,161965,161176],{"class":331},[19,161967,161968,161969,28530],{},"如果要在函数内部修改全局变量，需要 ",[318,161970,161971],{},"global",[312,161973,161975],{"className":30523,"code":161974,"language":30525,"meta":30,"style":30},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[318,161976,161977,161985,161989,161993,162002,162010,162018,162022,162026,162031],{"__ignoreMap":30},[321,161978,161979,161981,161983],{"class":323,"line":324},[321,161980,146836],{"class":331},[321,161982,377],{"class":327},[321,161984,47478],{"class":380},[321,161986,161987],{"class":323,"line":167},[321,161988,2606],{"emptyLinePlaceholder":251},[321,161990,161991],{"class":323,"line":200},[321,161992,2606],{"emptyLinePlaceholder":251},[321,161994,161995,161997,162000],{"class":323,"line":1401},[321,161996,32092],{"class":327},[321,161998,161999],{"class":2169}," add_count",[321,162001,32098],{"class":331},[321,162003,162004,162007],{"class":323,"line":1407},[321,162005,162006],{"class":327},"    global",[321,162008,162009],{"class":331}," count\n",[321,162011,162012,162014,162016],{"class":323,"line":1421},[321,162013,159578],{"class":331},[321,162015,9684],{"class":327},[321,162017,55844],{"class":380},[321,162019,162020],{"class":323,"line":1427},[321,162021,2606],{"emptyLinePlaceholder":251},[321,162023,162024],{"class":323,"line":1518},[321,162025,2606],{"emptyLinePlaceholder":251},[321,162027,162028],{"class":323,"line":1524},[321,162029,162030],{"class":331},"add_count()\n",[321,162032,162033,162035],{"class":323,"line":1536},[321,162034,30560],{"class":380},[321,162036,162037],{"class":331},"(count)\n",[19,162039,162040],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162042,162044],{"id":162043},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162046,162047],{},"一个函数中可以调用另一个函数。",[312,162049,162051],{"className":30523,"code":162050,"language":30525,"meta":30,"style":30},"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",[318,162052,162053,162062,162076,162080,162084,162093,162098,162118,162139,162143,162147,162151],{"__ignoreMap":30},[321,162054,162055,162057,162060],{"class":323,"line":324},[321,162056,32092],{"class":327},[321,162058,162059],{"class":2169}," print_line",[321,162061,32098],{"class":331},[321,162063,162064,162066,162068,162070,162072,162074],{"class":323,"line":167},[321,162065,31444],{"class":380},[321,162067,332],{"class":331},[321,162069,32628],{"class":436},[321,162071,6725],{"class":327},[321,162073,78810],{"class":380},[321,162075,338],{"class":331},[321,162077,162078],{"class":323,"line":200},[321,162079,2606],{"emptyLinePlaceholder":251},[321,162081,162082],{"class":323,"line":1401},[321,162083,2606],{"emptyLinePlaceholder":251},[321,162085,162086,162088,162091],{"class":323,"line":1407},[321,162087,32092],{"class":327},[321,162089,162090],{"class":2169}," print_info",[321,162092,149520],{"class":331},[321,162094,162095],{"class":323,"line":1421},[321,162096,162097],{"class":331},"    print_line()\n",[321,162099,162100,162102,162104,162106,162108,162110,162112,162114,162116],{"class":323,"line":1427},[321,162101,31444],{"class":380},[321,162103,332],{"class":331},[321,162105,384],{"class":327},[321,162107,156827],{"class":436},[321,162109,1228],{"class":380},[321,162111,79955],{"class":331},[321,162113,1278],{"class":380},[321,162115,583],{"class":436},[321,162117,338],{"class":331},[321,162119,162120,162122,162124,162126,162129,162131,162133,162135,162137],{"class":323,"line":1518},[321,162121,31444],{"class":380},[321,162123,332],{"class":331},[321,162125,384],{"class":327},[321,162127,162128],{"class":436},"\"年龄:",[321,162130,1228],{"class":380},[321,162132,70366],{"class":331},[321,162134,1278],{"class":380},[321,162136,583],{"class":436},[321,162138,338],{"class":331},[321,162140,162141],{"class":323,"line":1524},[321,162142,162097],{"class":331},[321,162144,162145],{"class":323,"line":1536},[321,162146,2606],{"emptyLinePlaceholder":251},[321,162148,162149],{"class":323,"line":1818},[321,162150,2606],{"emptyLinePlaceholder":251},[321,162152,162153,162156,162158,162160,162162],{"class":323,"line":1823},[321,162154,162155],{"class":331},"print_info(",[321,162157,150033],{"class":436},[321,162159,12642],{"class":331},[321,162161,982],{"class":380},[321,162163,338],{"class":331},[19,162165,162166],{},"这种方式可以把小功能组合成大功能。",[14,162168,162170],{"id":162169},"_511-参数检查","5.11 参数检查",[19,162172,162173],{},"函数内部可以检查参数是否合法。",[312,162175,162177],{"className":30523,"code":162176,"language":30525,"meta":30,"style":30},"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",[318,162178,162179,162188,162200,162206,162216,162220,162224,162241,162245,162257,162268,162274],{"__ignoreMap":30},[321,162180,162181,162183,162186],{"class":323,"line":324},[321,162182,32092],{"class":327},[321,162184,162185],{"class":2169}," divide",[321,162187,151238],{"class":331},[321,162189,162190,162192,162194,162196,162198],{"class":323,"line":167},[321,162191,3307],{"class":327},[321,162193,11089],{"class":331},[321,162195,3155],{"class":327},[321,162197,4299],{"class":380},[321,162199,3945],{"class":331},[321,162201,162202,162204],{"class":323,"line":200},[321,162203,14959],{"class":327},[321,162205,152317],{"class":380},[321,162207,162208,162210,162212,162214],{"class":323,"line":1401},[321,162209,4296],{"class":327},[321,162211,11076],{"class":331},[321,162213,916],{"class":327},[321,162215,151249],{"class":331},[321,162217,162218],{"class":323,"line":1407},[321,162219,2606],{"emptyLinePlaceholder":251},[321,162221,162222],{"class":323,"line":1421},[321,162223,2606],{"emptyLinePlaceholder":251},[321,162225,162226,162228,162230,162233,162235,162237,162239],{"class":323,"line":1427},[321,162227,161451],{"class":331},[321,162229,377],{"class":327},[321,162231,162232],{"class":331}," divide(",[321,162234,778],{"class":380},[321,162236,12642],{"class":331},[321,162238,523],{"class":380},[321,162240,338],{"class":331},[321,162242,162243],{"class":323,"line":1518},[321,162244,2606],{"emptyLinePlaceholder":251},[321,162246,162247,162249,162251,162253,162255],{"class":323,"line":1524},[321,162248,1737],{"class":327},[321,162250,161697],{"class":331},[321,162252,39072],{"class":327},[321,162254,39078],{"class":380},[321,162256,3945],{"class":331},[321,162258,162259,162261,162263,162266],{"class":323,"line":1536},[321,162260,31444],{"class":380},[321,162262,332],{"class":331},[321,162264,162265],{"class":436},"\"除数不能为0\"",[321,162267,338],{"class":331},[321,162269,162270,162272],{"class":323,"line":1818},[321,162271,1907],{"class":327},[321,162273,3945],{"class":331},[321,162275,162276,162278],{"class":323,"line":1823},[321,162277,31444],{"class":380},[321,162279,76730],{"class":331},[14,162281,162283],{"id":162282},"_512-类型提示","5.12 类型提示",[19,162285,162286],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[312,162288,162290],{"className":30523,"code":162289,"language":30525,"meta":30,"style":30},"def add(a: int, b: int) -> int:\n    return a + b\n",[318,162291,162292,162315],{"__ignoreMap":30},[321,162293,162294,162296,162298,162301,162303,162306,162308,162311,162313],{"class":323,"line":324},[321,162295,32092],{"class":327},[321,162297,5416],{"class":2169},[321,162299,162300],{"class":331},"(a: ",[321,162302,335],{"class":380},[321,162304,162305],{"class":331},", b: ",[321,162307,335],{"class":380},[321,162309,162310],{"class":331},") -> ",[321,162312,335],{"class":380},[321,162314,3945],{"class":331},[321,162316,162317,162319,162321,162323],{"class":323,"line":167},[321,162318,4296],{"class":327},[321,162320,11076],{"class":331},[321,162322,813],{"class":327},[321,162324,151249],{"class":331},[19,162326,162327],{},"字符串参数：",[312,162329,162331],{"className":30523,"code":162330,"language":30525,"meta":30,"style":30},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[318,162332,162333,162350],{"__ignoreMap":30},[321,162334,162335,162337,162339,162342,162344,162346,162348],{"class":323,"line":324},[321,162336,32092],{"class":327},[321,162338,161141],{"class":2169},[321,162340,162341],{"class":331},"(name: ",[321,162343,1506],{"class":380},[321,162345,162310],{"class":331},[321,162347,95831],{"class":380},[321,162349,3945],{"class":331},[321,162351,162352,162354,162356,162358,162360,162362,162364,162366,162368],{"class":323,"line":167},[321,162353,31444],{"class":380},[321,162355,332],{"class":331},[321,162357,384],{"class":327},[321,162359,157199],{"class":436},[321,162361,1228],{"class":380},[321,162363,79955],{"class":331},[321,162365,1278],{"class":380},[321,162367,583],{"class":436},[321,162369,338],{"class":331},[19,162371,162372],{},"列表参数：",[312,162374,162376],{"className":30523,"code":162375,"language":30525,"meta":30,"style":30},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[318,162377,162378,162397,162405,162417,162426],{"__ignoreMap":30},[321,162379,162380,162382,162385,162388,162390,162393,162395],{"class":323,"line":324},[321,162381,32092],{"class":327},[321,162383,162384],{"class":2169}," get_total",[321,162386,162387],{"class":331},"(numbers: list[",[321,162389,335],{"class":380},[321,162391,162392],{"class":331},"]) -> ",[321,162394,335],{"class":380},[321,162396,3945],{"class":331},[321,162398,162399,162401,162403],{"class":323,"line":167},[321,162400,159452],{"class":331},[321,162402,377],{"class":327},[321,162404,47478],{"class":380},[321,162406,162407,162409,162412,162414],{"class":323,"line":200},[321,162408,3407],{"class":327},[321,162410,162411],{"class":331}," number ",[321,162413,26188],{"class":327},[321,162415,162416],{"class":331}," numbers:\n",[321,162418,162419,162421,162423],{"class":323,"line":1401},[321,162420,160127],{"class":331},[321,162422,9684],{"class":327},[321,162424,162425],{"class":331}," number\n",[321,162427,162428,162430],{"class":323,"line":1407},[321,162429,4296],{"class":327},[321,162431,162432],{"class":331}," total\n",[19,162434,162435],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162437,162439],{"id":162438},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[312,162441,162443],{"className":30523,"code":162442,"language":30525,"meta":30,"style":30},"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",[318,162444,162445,162455,162459,162463,162471,162482,162492,162502,162512,162522,162526,162530,162539,162561,162565,162569,162578,162584,162604,162616,162627,162631,162640,162651,162656,162660,162664,162673,162679,162698,162710,162720,162724,162735,162745,162749,162757,162768,162772,162776,162780,162788,162793,162807,162811,162823,162828,162840,162845,162857,162862,162874,162884,162888,162894],{"__ignoreMap":30},[321,162446,162447,162450,162452],{"class":323,"line":324},[321,162448,162449],{"class":331},"balance ",[321,162451,377],{"class":327},[321,162453,162454],{"class":380}," 1000\n",[321,162456,162457],{"class":323,"line":167},[321,162458,2606],{"emptyLinePlaceholder":251},[321,162460,162461],{"class":323,"line":200},[321,162462,2606],{"emptyLinePlaceholder":251},[321,162464,162465,162467,162469],{"class":323,"line":1401},[321,162466,32092],{"class":327},[321,162468,152178],{"class":2169},[321,162470,32098],{"class":331},[321,162472,162473,162475,162477,162480],{"class":323,"line":1407},[321,162474,31444],{"class":380},[321,162476,332],{"class":331},[321,162478,162479],{"class":436},"\"====== ATM ======\"",[321,162481,338],{"class":331},[321,162483,162484,162486,162488,162490],{"class":323,"line":1421},[321,162485,31444],{"class":380},[321,162487,332],{"class":331},[321,162489,160793],{"class":436},[321,162491,338],{"class":331},[321,162493,162494,162496,162498,162500],{"class":323,"line":1427},[321,162495,31444],{"class":380},[321,162497,332],{"class":331},[321,162499,160804],{"class":436},[321,162501,338],{"class":331},[321,162503,162504,162506,162508,162510],{"class":323,"line":1518},[321,162505,31444],{"class":380},[321,162507,332],{"class":331},[321,162509,160815],{"class":436},[321,162511,338],{"class":331},[321,162513,162514,162516,162518,162520],{"class":323,"line":1524},[321,162515,31444],{"class":380},[321,162517,332],{"class":331},[321,162519,160826],{"class":436},[321,162521,338],{"class":331},[321,162523,162524],{"class":323,"line":1536},[321,162525,2606],{"emptyLinePlaceholder":251},[321,162527,162528],{"class":323,"line":1818},[321,162529,2606],{"emptyLinePlaceholder":251},[321,162531,162532,162534,162537],{"class":323,"line":1823},[321,162533,32092],{"class":327},[321,162535,162536],{"class":2169}," show_balance",[321,162538,32098],{"class":331},[321,162540,162541,162543,162545,162547,162550,162552,162555,162557,162559],{"class":323,"line":1829},[321,162542,31444],{"class":380},[321,162544,332],{"class":331},[321,162546,384],{"class":327},[321,162548,162549],{"class":436},"\"当前余额:",[321,162551,1228],{"class":380},[321,162553,162554],{"class":331},"balance",[321,162556,1278],{"class":380},[321,162558,157157],{"class":436},[321,162560,338],{"class":331},[321,162562,162563],{"class":323,"line":1834},[321,162564,2606],{"emptyLinePlaceholder":251},[321,162566,162567],{"class":323,"line":1848},[321,162568,2606],{"emptyLinePlaceholder":251},[321,162570,162571,162573,162576],{"class":323,"line":1853},[321,162572,32092],{"class":327},[321,162574,162575],{"class":2169}," save_money",[321,162577,32098],{"class":331},[321,162579,162580,162582],{"class":323,"line":1859},[321,162581,162006],{"class":327},[321,162583,150244],{"class":331},[321,162585,162586,162589,162591,162593,162595,162597,162599,162602],{"class":323,"line":1880},[321,162587,162588],{"class":331},"    money ",[321,162590,377],{"class":327},[321,162592,109942],{"class":380},[321,162594,332],{"class":331},[321,162596,53966],{"class":380},[321,162598,332],{"class":331},[321,162600,162601],{"class":436},"\"请输入存款金额:\"",[321,162603,30642],{"class":331},[321,162605,162606,162608,162610,162612,162614],{"class":323,"line":1885},[321,162607,3307],{"class":327},[321,162609,150287],{"class":331},[321,162611,1794],{"class":327},[321,162613,4299],{"class":380},[321,162615,3945],{"class":331},[321,162617,162618,162620,162622,162625],{"class":323,"line":1899},[321,162619,32596],{"class":380},[321,162621,332],{"class":331},[321,162623,162624],{"class":436},"\"金额必须大于0\"",[321,162626,338],{"class":331},[321,162628,162629],{"class":323,"line":1904},[321,162630,152506],{"class":327},[321,162632,162633,162636,162638],{"class":323,"line":1933},[321,162634,162635],{"class":331},"    balance ",[321,162637,9684],{"class":327},[321,162639,150320],{"class":331},[321,162641,162642,162644,162646,162649],{"class":323,"line":1938},[321,162643,31444],{"class":380},[321,162645,332],{"class":331},[321,162647,162648],{"class":436},"\"存款成功\"",[321,162650,338],{"class":331},[321,162652,162653],{"class":323,"line":1955},[321,162654,162655],{"class":331},"    show_balance()\n",[321,162657,162658],{"class":323,"line":1960},[321,162659,2606],{"emptyLinePlaceholder":251},[321,162661,162662],{"class":323,"line":1965},[321,162663,2606],{"emptyLinePlaceholder":251},[321,162665,162666,162668,162671],{"class":323,"line":1970},[321,162667,32092],{"class":327},[321,162669,162670],{"class":2169}," withdraw_money",[321,162672,32098],{"class":331},[321,162674,162675,162677],{"class":323,"line":1984},[321,162676,162006],{"class":327},[321,162678,150244],{"class":331},[321,162680,162681,162683,162685,162687,162689,162691,162693,162696],{"class":323,"line":1989},[321,162682,162588],{"class":331},[321,162684,377],{"class":327},[321,162686,109942],{"class":380},[321,162688,332],{"class":331},[321,162690,53966],{"class":380},[321,162692,332],{"class":331},[321,162694,162695],{"class":436},"\"请输入取款金额:\"",[321,162697,30642],{"class":331},[321,162699,162700,162702,162704,162706,162708],{"class":323,"line":2783},[321,162701,3307],{"class":327},[321,162703,150287],{"class":331},[321,162705,1794],{"class":327},[321,162707,4299],{"class":380},[321,162709,3945],{"class":331},[321,162711,162712,162714,162716,162718],{"class":323,"line":2797},[321,162713,32596],{"class":380},[321,162715,332],{"class":331},[321,162717,162624],{"class":436},[321,162719,338],{"class":331},[321,162721,162722],{"class":323,"line":2805},[321,162723,152506],{"class":327},[321,162725,162726,162728,162730,162732],{"class":323,"line":2810},[321,162727,3307],{"class":327},[321,162729,150287],{"class":331},[321,162731,1292],{"class":327},[321,162733,162734],{"class":331}," balance:\n",[321,162736,162737,162739,162741,162743],{"class":323,"line":2816},[321,162738,32596],{"class":380},[321,162740,332],{"class":331},[321,162742,150382],{"class":436},[321,162744,338],{"class":331},[321,162746,162747],{"class":323,"line":2822},[321,162748,152506],{"class":327},[321,162750,162751,162753,162755],{"class":323,"line":2827},[321,162752,162635],{"class":331},[321,162754,150397],{"class":327},[321,162756,150320],{"class":331},[321,162758,162759,162761,162763,162766],{"class":323,"line":8155},[321,162760,31444],{"class":380},[321,162762,332],{"class":331},[321,162764,162765],{"class":436},"\"取款成功\"",[321,162767,338],{"class":331},[321,162769,162770],{"class":323,"line":8179},[321,162771,162655],{"class":331},[321,162773,162774],{"class":323,"line":8184},[321,162775,2606],{"emptyLinePlaceholder":251},[321,162777,162778],{"class":323,"line":8190},[321,162779,2606],{"emptyLinePlaceholder":251},[321,162781,162782,162784,162786],{"class":323,"line":8217},[321,162783,108808],{"class":327},[321,162785,95437],{"class":380},[321,162787,3945],{"class":331},[321,162789,162790],{"class":323,"line":8222},[321,162791,162792],{"class":331},"    show_menu()\n",[321,162794,162795,162797,162799,162801,162803,162805],{"class":323,"line":8228},[321,162796,160837],{"class":331},[321,162798,377],{"class":327},[321,162800,60750],{"class":380},[321,162802,332],{"class":331},[321,162804,153218],{"class":436},[321,162806,338],{"class":331},[321,162808,162809],{"class":323,"line":8240},[321,162810,2606],{"emptyLinePlaceholder":251},[321,162812,162813,162815,162817,162819,162821],{"class":323,"line":8252},[321,162814,3307],{"class":327},[321,162816,153231],{"class":331},[321,162818,3155],{"class":327},[321,162820,153236],{"class":436},[321,162822,3945],{"class":331},[321,162824,162825],{"class":323,"line":8264},[321,162826,162827],{"class":331},"        show_balance()\n",[321,162829,162830,162832,162834,162836,162838],{"class":323,"line":9923},[321,162831,39438],{"class":327},[321,162833,153231],{"class":331},[321,162835,3155],{"class":327},[321,162837,153255],{"class":436},[321,162839,3945],{"class":331},[321,162841,162842],{"class":323,"line":9948},[321,162843,162844],{"class":331},"        save_money()\n",[321,162846,162847,162849,162851,162853,162855],{"class":323,"line":9971},[321,162848,39438],{"class":327},[321,162850,153231],{"class":331},[321,162852,3155],{"class":327},[321,162854,153273],{"class":436},[321,162856,3945],{"class":331},[321,162858,162859],{"class":323,"line":9995},[321,162860,162861],{"class":331},"        withdraw_money()\n",[321,162863,162864,162866,162868,162870,162872],{"class":323,"line":10000},[321,162865,39438],{"class":327},[321,162867,153231],{"class":331},[321,162869,3155],{"class":327},[321,162871,153327],{"class":436},[321,162873,3945],{"class":331},[321,162875,162876,162878,162880,162882],{"class":323,"line":10005},[321,162877,32596],{"class":380},[321,162879,332],{"class":331},[321,162881,153338],{"class":436},[321,162883,338],{"class":331},[321,162885,162886],{"class":323,"line":10010},[321,162887,31772],{"class":327},[321,162889,162890,162892],{"class":323,"line":10019},[321,162891,158167],{"class":327},[321,162893,3945],{"class":331},[321,162895,162896,162898,162900,162902],{"class":323,"line":10024},[321,162897,32596],{"class":380},[321,162899,332],{"class":331},[321,162901,153359],{"class":436},[321,162903,338],{"class":331},[19,162905,162906],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162908,162910],{"id":162909},"_514-易错点","5.14 易错点",[151,162912,162913,162916,162919,162924,162929,162932],{},[154,162914,162915],{},"函数定义后必须调用才会执行。",[154,162917,162918],{},"函数名后面有括号才是调用。",[154,162920,162921,162923],{},[318,162922,17253],{}," 后面的代码不会执行。",[154,162925,162926,162927,28530],{},"没有返回值的函数默认返回 ",[318,162928,95831],{},[154,162930,162931],{},"局部变量不能在函数外部访问。",[154,162933,162934,162935,162937],{},"不要滥用 ",[318,162936,161971],{},"，更好的方式是让函数返回新值。",[19,162939,162940,162941,162943],{},"例如不用 ",[318,162942,161971],{}," 改写存款：",[312,162945,162947],{"className":30523,"code":162946,"language":30525,"meta":30,"style":30},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[318,162948,162949,162958,162969,162973,162977,162985,162998],{"__ignoreMap":30},[321,162950,162951,162953,162955],{"class":323,"line":324},[321,162952,32092],{"class":327},[321,162954,162575],{"class":2169},[321,162956,162957],{"class":331},"(balance, money):\n",[321,162959,162960,162962,162965,162967],{"class":323,"line":167},[321,162961,4296],{"class":327},[321,162963,162964],{"class":331}," balance ",[321,162966,813],{"class":327},[321,162968,150320],{"class":331},[321,162970,162971],{"class":323,"line":200},[321,162972,2606],{"emptyLinePlaceholder":251},[321,162974,162975],{"class":323,"line":1401},[321,162976,2606],{"emptyLinePlaceholder":251},[321,162978,162979,162981,162983],{"class":323,"line":1407},[321,162980,162449],{"class":331},[321,162982,377],{"class":327},[321,162984,162454],{"class":380},[321,162986,162987,162989,162991,162994,162996],{"class":323,"line":1421},[321,162988,162449],{"class":331},[321,162990,377],{"class":327},[321,162992,162993],{"class":331}," save_money(balance, ",[321,162995,1928],{"class":380},[321,162997,338],{"class":331},[321,162999,163000,163002],{"class":323,"line":1427},[321,163001,30560],{"class":380},[321,163003,163004],{"class":331},"(balance)\n",[14,163006,163008],{"id":163007},"_515-本章练习","5.15 本章练习",[151,163010,163011,163018,163024,163030,163036],{},[154,163012,163013,163014,163017],{},"定义函数 ",[318,163015,163016],{},"print_student(name, age)","，输出学生信息。",[154,163019,163013,163020,163023],{},[318,163021,163022],{},"get_max(a, b, c)","，返回三个数中的最大值。",[154,163025,163013,163026,163029],{},[318,163027,163028],{},"is_even(num)","，判断一个数是否为偶数。",[154,163031,163013,163032,163035],{},[318,163033,163034],{},"calculate_bmi(weight, height)","，返回 BMI。",[154,163037,163038],{},"把第 4 章的菜单程序拆分成多个函数。",[5333,163040,163041],{},"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":30,"searchDepth":167,"depth":167,"links":163043},[163044,163045,163046,163047,163048,163049,163050,163051,163052,163056,163057,163058,163059,163060,163061],{"id":161064,"depth":167,"text":161065},{"id":161105,"depth":167,"text":161106},{"id":161195,"depth":167,"text":161196},{"id":161276,"depth":167,"text":161277},{"id":161409,"depth":167,"text":161410},{"id":161531,"depth":167,"text":161532},{"id":161653,"depth":167,"text":161654},{"id":161730,"depth":167,"text":161731},{"id":161852,"depth":167,"text":161853,"children":163053},[163054,163055],{"id":161856,"depth":200,"text":161857},{"id":161914,"depth":200,"text":161915},{"id":162043,"depth":167,"text":162044},{"id":162169,"depth":167,"text":162170},{"id":162282,"depth":167,"text":162283},{"id":162438,"depth":167,"text":162439},{"id":162909,"depth":167,"text":162910},{"id":163007,"depth":167,"text":163008},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161056,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163068,"title":163069,"body":163070,"description":23584,"extension":249,"meta":166114,"navigation":251,"path":166115,"seo":166116,"stem":166117,"__hash__":166118},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163071,"toc":166095},[163072,163075,163079,163082,163085,163189,163192,163196,163199,163279,163282,163286,163289,163349,163352,163388,163391,163406,163410,163483,163486,163541,163544,163614,163617,163701,163711,163769,163773,163818,163821,163847,163850,163956,163960,163963,164005,164008,164072,164075,164079,164082,164143,164146,164176,164179,164217,164221,164224,164233,164236,164360,164363,164404,164408,164411,164422,164462,164465,164480,164485,164488,164555,164558,164648,164652,164655,164703,164706,164733,164735,164765,164768,164788,164791,164822,164825,164858,164862,164865,164889,164892,164916,164919,164943,164947,164950,165080,165083,165163,165166,165241,165245,165248,165298,165301,165343,165346,165370,165372,165396,165399,165454,165457,165523,165527,165530,165533,165571,165574,165627,165630,165676,165679,165712,165715,165719,166038,166042,166071,166075,166092],[10,163073,163069],{"id":163074},"_6-数据容器",[14,163076,163078],{"id":163077},"_61-什么是数据容器","6.1 什么是数据容器",[19,163080,163081],{},"数据容器用于一次保存多个数据。",[19,163083,163084],{},"常见容器：",[469,163086,163087,163104],{},[472,163088,163089],{},[475,163090,163091,163093,163096,163099,163102],{},[478,163092,25916],{},[478,163094,163095],{},"是否有序",[478,163097,163098],{},"是否可变",[478,163100,163101],{},"是否允许重复",[478,163103,27637],{},[516,163105,163106,163124,163140,163155,163172],{},[475,163107,163108,163111,163114,163117,163120],{},[521,163109,163110],{},"list列表",[521,163112,163113],{},"有序",[521,163115,163116],{},"可变",[521,163118,163119],{},"允许",[521,163121,163122],{},[318,163123,155402],{},[475,163125,163126,163129,163131,163134,163136],{},[521,163127,163128],{},"tuple元组",[521,163130,163113],{},[521,163132,163133],{},"不可变",[521,163135,163119],{},[521,163137,163138],{},[318,163139,155415],{},[475,163141,163142,163145,163147,163149,163151],{},[521,163143,163144],{},"str字符串",[521,163146,163113],{},[521,163148,163133],{},[521,163150,163119],{},[521,163152,163153],{},[318,163154,156025],{},[475,163156,163157,163160,163163,163165,163168],{},[521,163158,163159],{},"set集合",[521,163161,163162],{},"无序",[521,163164,163116],{},[521,163166,163167],{},"不允许",[521,163169,163170],{},[318,163171,155440],{},[475,163173,163174,163177,163179,163181,163184],{},[521,163175,163176],{},"dict字典",[521,163178,163113],{},[521,163180,163116],{},[521,163182,163183],{},"key不允许重复",[521,163185,163186],{},[318,163187,163188],{},"{\"name\": \"小明\"}",[19,163190,163191],{},"Python 3.7 之后，字典保持插入顺序。",[14,163193,163195],{"id":163194},"_62-列表list","6.2 列表list",[19,163197,163198],{},"列表用于保存一组有顺序的数据。",[312,163200,163202],{"className":30523,"code":163201,"language":30525,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[318,163203,163204,163224,163249,163270],{"__ignoreMap":30},[321,163205,163206,163208,163210,163212,163214,163216,163218,163220,163222],{"class":323,"line":324},[321,163207,160525],{"class":331},[321,163209,377],{"class":327},[321,163211,52371],{"class":331},[321,163213,150033],{"class":436},[321,163215,12642],{"class":331},[321,163217,151081],{"class":436},[321,163219,12642],{"class":331},[321,163221,159876],{"class":436},[321,163223,33391],{"class":331},[321,163225,163226,163229,163231,163233,163235,163237,163239,163241,163243,163245,163247],{"class":323,"line":167},[321,163227,163228],{"class":331},"numbers ",[321,163230,377],{"class":327},[321,163232,52371],{"class":331},[321,163234,549],{"class":380},[321,163236,12642],{"class":331},[321,163238,409],{"class":380},[321,163240,12642],{"class":331},[321,163242,403],{"class":380},[321,163244,12642],{"class":331},[321,163246,625],{"class":380},[321,163248,33391],{"class":331},[321,163250,163251,163254,163256,163258,163260,163262,163264,163266,163268],{"class":323,"line":200},[321,163252,163253],{"class":331},"mixed ",[321,163255,377],{"class":327},[321,163257,52371],{"class":331},[321,163259,150033],{"class":436},[321,163261,12642],{"class":331},[321,163263,982],{"class":380},[321,163265,12642],{"class":331},[321,163267,31621],{"class":380},[321,163269,33391],{"class":331},[321,163271,163272,163275,163277],{"class":323,"line":1401},[321,163273,163274],{"class":331},"empty ",[321,163276,377],{"class":327},[321,163278,51983],{"class":331},[19,163280,163281],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163283,163285],{"id":163284},"_63-列表索引","6.3 列表索引",[19,163287,163288],{},"正向索引从 0 开始：",[312,163290,163292],{"className":30523,"code":163291,"language":30525,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[318,163293,163294,163314,163318,163329,163339],{"__ignoreMap":30},[321,163295,163296,163298,163300,163302,163304,163306,163308,163310,163312],{"class":323,"line":324},[321,163297,160525],{"class":331},[321,163299,377],{"class":327},[321,163301,52371],{"class":331},[321,163303,150033],{"class":436},[321,163305,12642],{"class":331},[321,163307,151081],{"class":436},[321,163309,12642],{"class":331},[321,163311,159876],{"class":436},[321,163313,33391],{"class":331},[321,163315,163316],{"class":323,"line":167},[321,163317,2606],{"emptyLinePlaceholder":251},[321,163319,163320,163322,163325,163327],{"class":323,"line":200},[321,163321,30560],{"class":380},[321,163323,163324],{"class":331},"(names[",[321,163326,523],{"class":380},[321,163328,4863],{"class":331},[321,163330,163331,163333,163335,163337],{"class":323,"line":1401},[321,163332,30560],{"class":380},[321,163334,163324],{"class":331},[321,163336,549],{"class":380},[321,163338,4863],{"class":331},[321,163340,163341,163343,163345,163347],{"class":323,"line":1407},[321,163342,30560],{"class":380},[321,163344,163324],{"class":331},[321,163346,409],{"class":380},[321,163348,4863],{"class":331},[19,163350,163351],{},"反向索引从 -1 开始：",[312,163353,163355],{"className":30523,"code":163354,"language":30525,"meta":30,"style":30},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[318,163356,163357,163373],{"__ignoreMap":30},[321,163358,163359,163361,163363,163365,163367,163370],{"class":323,"line":324},[321,163360,30560],{"class":380},[321,163362,163324],{"class":331},[321,163364,864],{"class":327},[321,163366,549],{"class":380},[321,163368,163369],{"class":331},"])  ",[321,163371,163372],{"class":390},"# 小刚\n",[321,163374,163375,163377,163379,163381,163383,163385],{"class":323,"line":167},[321,163376,30560],{"class":380},[321,163378,163324],{"class":331},[321,163380,864],{"class":327},[321,163382,409],{"class":380},[321,163384,163369],{"class":331},[321,163386,163387],{"class":390},"# 小红\n",[19,163389,163390],{},"索引越界会报错：",[312,163392,163394],{"className":30523,"code":163393,"language":30525,"meta":30,"style":30},"print(names[3])\n",[318,163395,163396],{"__ignoreMap":30},[321,163397,163398,163400,163402,163404],{"class":323,"line":324},[321,163399,30560],{"class":380},[321,163401,163324],{"class":331},[321,163403,403],{"class":380},[321,163405,4863],{"class":331},[14,163407,163409],{"id":163408},"_64-列表常用方法","6.4 列表常用方法",[312,163411,163413],{"className":30523,"code":163412,"language":30525,"meta":30,"style":30},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[318,163414,163415,163431,163435,163444,163458,163472,163476],{"__ignoreMap":30},[321,163416,163417,163419,163421,163423,163425,163427,163429],{"class":323,"line":324},[321,163418,160525],{"class":331},[321,163420,377],{"class":327},[321,163422,52371],{"class":331},[321,163424,150033],{"class":436},[321,163426,12642],{"class":331},[321,163428,151081],{"class":436},[321,163430,33391],{"class":331},[321,163432,163433],{"class":323,"line":167},[321,163434,2606],{"emptyLinePlaceholder":251},[321,163436,163437,163440,163442],{"class":323,"line":200},[321,163438,163439],{"class":331},"names.append(",[321,163441,159876],{"class":436},[321,163443,338],{"class":331},[321,163445,163446,163449,163451,163453,163456],{"class":323,"line":1401},[321,163447,163448],{"class":331},"names.insert(",[321,163450,549],{"class":380},[321,163452,12642],{"class":331},[321,163454,163455],{"class":436},"\"小李\"",[321,163457,338],{"class":331},[321,163459,163460,163463,163465,163467,163470],{"class":323,"line":1407},[321,163461,163462],{"class":331},"names.extend([",[321,163464,8890],{"class":436},[321,163466,12642],{"class":331},[321,163468,163469],{"class":436},"\"小赵\"",[321,163471,4863],{"class":331},[321,163473,163474],{"class":323,"line":1421},[321,163475,2606],{"emptyLinePlaceholder":251},[321,163477,163478,163480],{"class":323,"line":1427},[321,163479,30560],{"class":380},[321,163481,163482],{"class":331},"(names)\n",[19,163484,163485],{},"删除元素：",[312,163487,163489],{"className":30523,"code":163488,"language":30525,"meta":30,"style":30},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[318,163490,163491,163500,163510,163524,163536],{"__ignoreMap":30},[321,163492,163493,163496,163498],{"class":323,"line":324},[321,163494,163495],{"class":331},"names.remove(",[321,163497,151081],{"class":436},[321,163499,338],{"class":331},[321,163501,163502,163505,163507],{"class":323,"line":167},[321,163503,163504],{"class":331},"last ",[321,163506,377],{"class":327},[321,163508,163509],{"class":331}," names.pop()\n",[321,163511,163512,163515,163517,163520,163522],{"class":323,"line":200},[321,163513,163514],{"class":331},"first ",[321,163516,377],{"class":327},[321,163518,163519],{"class":331}," names.pop(",[321,163521,523],{"class":380},[321,163523,338],{"class":331},[321,163525,163526,163529,163532,163534],{"class":323,"line":1401},[321,163527,163528],{"class":327},"del",[321,163530,163531],{"class":331}," names[",[321,163533,523],{"class":380},[321,163535,33391],{"class":331},[321,163537,163538],{"class":323,"line":1407},[321,163539,163540],{"class":331},"names.clear()\n",[19,163542,163543],{},"查询和统计：",[312,163545,163547],{"className":30523,"code":163546,"language":30525,"meta":30,"style":30},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[318,163548,163549,163577,163581,163592,163603],{"__ignoreMap":30},[321,163550,163551,163553,163555,163557,163559,163561,163563,163565,163567,163569,163571,163573,163575],{"class":323,"line":324},[321,163552,163228],{"class":331},[321,163554,377],{"class":327},[321,163556,52371],{"class":331},[321,163558,549],{"class":380},[321,163560,12642],{"class":331},[321,163562,409],{"class":380},[321,163564,12642],{"class":331},[321,163566,403],{"class":380},[321,163568,12642],{"class":331},[321,163570,409],{"class":380},[321,163572,12642],{"class":331},[321,163574,625],{"class":380},[321,163576,33391],{"class":331},[321,163578,163579],{"class":323,"line":167},[321,163580,2606],{"emptyLinePlaceholder":251},[321,163582,163583,163585,163588,163590],{"class":323,"line":200},[321,163584,30560],{"class":380},[321,163586,163587],{"class":331},"(numbers.index(",[321,163589,403],{"class":380},[321,163591,30642],{"class":331},[321,163593,163594,163596,163599,163601],{"class":323,"line":1401},[321,163595,30560],{"class":380},[321,163597,163598],{"class":331},"(numbers.count(",[321,163600,409],{"class":380},[321,163602,30642],{"class":331},[321,163604,163605,163607,163609,163611],{"class":323,"line":1407},[321,163606,30560],{"class":380},[321,163608,332],{"class":331},[321,163610,7565],{"class":380},[321,163612,163613],{"class":331},"(numbers))\n",[19,163615,163616],{},"排序：",[312,163618,163620],{"className":30523,"code":163619,"language":30525,"meta":30,"style":30},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[318,163621,163622,163646,163650,163655,163662,163666,163680,163686,163690,163695],{"__ignoreMap":30},[321,163623,163624,163626,163628,163630,163632,163634,163636,163638,163640,163642,163644],{"class":323,"line":324},[321,163625,163228],{"class":331},[321,163627,377],{"class":327},[321,163629,52371],{"class":331},[321,163631,403],{"class":380},[321,163633,12642],{"class":331},[321,163635,549],{"class":380},[321,163637,12642],{"class":331},[321,163639,651],{"class":380},[321,163641,12642],{"class":331},[321,163643,409],{"class":380},[321,163645,33391],{"class":331},[321,163647,163648],{"class":323,"line":167},[321,163649,2606],{"emptyLinePlaceholder":251},[321,163651,163652],{"class":323,"line":200},[321,163653,163654],{"class":331},"numbers.sort()\n",[321,163656,163657,163659],{"class":323,"line":1401},[321,163658,30560],{"class":380},[321,163660,163661],{"class":331},"(numbers)\n",[321,163663,163664],{"class":323,"line":1407},[321,163665,2606],{"emptyLinePlaceholder":251},[321,163667,163668,163671,163674,163676,163678],{"class":323,"line":1421},[321,163669,163670],{"class":331},"numbers.sort(",[321,163672,163673],{"class":5423},"reverse",[321,163675,377],{"class":327},[321,163677,31621],{"class":380},[321,163679,338],{"class":331},[321,163681,163682,163684],{"class":323,"line":1427},[321,163683,30560],{"class":380},[321,163685,163661],{"class":331},[321,163687,163688],{"class":323,"line":1518},[321,163689,2606],{"emptyLinePlaceholder":251},[321,163691,163692],{"class":323,"line":1524},[321,163693,163694],{"class":331},"numbers.reverse()\n",[321,163696,163697,163699],{"class":323,"line":1536},[321,163698,30560],{"class":380},[321,163700,163661],{"class":331},[19,163702,163703,163706,163707,163710],{},[318,163704,163705],{},"sort()"," 会修改原列表，",[318,163708,163709],{},"sorted()"," 返回新列表。",[312,163712,163714],{"className":30523,"code":163713,"language":30525,"meta":30,"style":30},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[318,163715,163716,163740,163752,163756,163762],{"__ignoreMap":30},[321,163717,163718,163720,163722,163724,163726,163728,163730,163732,163734,163736,163738],{"class":323,"line":324},[321,163719,163228],{"class":331},[321,163721,377],{"class":327},[321,163723,52371],{"class":331},[321,163725,403],{"class":380},[321,163727,12642],{"class":331},[321,163729,549],{"class":380},[321,163731,12642],{"class":331},[321,163733,651],{"class":380},[321,163735,12642],{"class":331},[321,163737,409],{"class":380},[321,163739,33391],{"class":331},[321,163741,163742,163745,163747,163750],{"class":323,"line":167},[321,163743,163744],{"class":331},"new_numbers ",[321,163746,377],{"class":327},[321,163748,163749],{"class":380}," sorted",[321,163751,163661],{"class":331},[321,163753,163754],{"class":323,"line":200},[321,163755,2606],{"emptyLinePlaceholder":251},[321,163757,163758,163760],{"class":323,"line":1401},[321,163759,30560],{"class":380},[321,163761,163661],{"class":331},[321,163763,163764,163766],{"class":323,"line":1407},[321,163765,30560],{"class":380},[321,163767,163768],{"class":331},"(new_numbers)\n",[14,163770,163772],{"id":163771},"_65-列表遍历","6.5 列表遍历",[312,163774,163776],{"className":30523,"code":163775,"language":30525,"meta":30,"style":30},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[318,163777,163778,163798,163802,163812],{"__ignoreMap":30},[321,163779,163780,163782,163784,163786,163788,163790,163792,163794,163796],{"class":323,"line":324},[321,163781,160525],{"class":331},[321,163783,377],{"class":327},[321,163785,52371],{"class":331},[321,163787,150033],{"class":436},[321,163789,12642],{"class":331},[321,163791,151081],{"class":436},[321,163793,12642],{"class":331},[321,163795,159876],{"class":436},[321,163797,33391],{"class":331},[321,163799,163800],{"class":323,"line":167},[321,163801,2606],{"emptyLinePlaceholder":251},[321,163803,163804,163806,163808,163810],{"class":323,"line":200},[321,163805,3231],{"class":327},[321,163807,160561],{"class":331},[321,163809,26188],{"class":327},[321,163811,160566],{"class":331},[321,163813,163814,163816],{"class":323,"line":1401},[321,163815,31444],{"class":380},[321,163817,150805],{"class":331},[19,163819,163820],{},"需要索引时：",[312,163822,163824],{"className":30523,"code":163823,"language":30525,"meta":30,"style":30},"for index, name in enumerate(names):\n    print(index, name)\n",[318,163825,163826,163840],{"__ignoreMap":30},[321,163827,163828,163830,163833,163835,163837],{"class":323,"line":324},[321,163829,3231],{"class":327},[321,163831,163832],{"class":331}," index, name ",[321,163834,26188],{"class":327},[321,163836,31751],{"class":380},[321,163838,163839],{"class":331},"(names):\n",[321,163841,163842,163844],{"class":323,"line":167},[321,163843,31444],{"class":380},[321,163845,163846],{"class":331},"(index, name)\n",[19,163848,163849],{},"统计总分：",[312,163851,163853],{"className":30523,"code":163852,"language":30525,"meta":30,"style":30},"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",[318,163854,163855,163880,163888,163892,163903,163911,163915,163932],{"__ignoreMap":30},[321,163856,163857,163860,163862,163864,163866,163868,163870,163872,163874,163876,163878],{"class":323,"line":324},[321,163858,163859],{"class":331},"scores ",[321,163861,377],{"class":327},[321,163863,52371],{"class":331},[321,163865,1194],{"class":380},[321,163867,12642],{"class":331},[321,163869,1068],{"class":380},[321,163871,12642],{"class":331},[321,163873,586],{"class":380},[321,163875,12642],{"class":331},[321,163877,893],{"class":380},[321,163879,33391],{"class":331},[321,163881,163882,163884,163886],{"class":323,"line":167},[321,163883,157405],{"class":331},[321,163885,377],{"class":327},[321,163887,47478],{"class":380},[321,163889,163890],{"class":323,"line":200},[321,163891,2606],{"emptyLinePlaceholder":251},[321,163893,163894,163896,163898,163900],{"class":323,"line":1401},[321,163895,3231],{"class":327},[321,163897,157928],{"class":331},[321,163899,26188],{"class":327},[321,163901,163902],{"class":331}," scores:\n",[321,163904,163905,163907,163909],{"class":323,"line":1407},[321,163906,159452],{"class":331},[321,163908,9684],{"class":327},[321,163910,1785],{"class":331},[321,163912,163913],{"class":323,"line":1421},[321,163914,2606],{"emptyLinePlaceholder":251},[321,163916,163917,163920,163922,163925,163927,163929],{"class":323,"line":1427},[321,163918,163919],{"class":331},"avg ",[321,163921,377],{"class":327},[321,163923,163924],{"class":331}," total ",[321,163926,916],{"class":327},[321,163928,7538],{"class":380},[321,163930,163931],{"class":331},"(scores)\n",[321,163933,163934,163936,163938,163940,163943,163945,163948,163950,163952,163954],{"class":323,"line":1518},[321,163935,30560],{"class":380},[321,163937,332],{"class":331},[321,163939,384],{"class":327},[321,163941,163942],{"class":436},"\"平均分:",[321,163944,1228],{"class":380},[321,163946,163947],{"class":331},"avg",[321,163949,157304],{"class":327},[321,163951,1278],{"class":380},[321,163953,583],{"class":436},[321,163955,338],{"class":331},[14,163957,163959],{"id":163958},"_66-元组tuple","6.6 元组tuple",[19,163961,163962],{},"元组和列表类似，但不可修改。",[312,163964,163966],{"className":30523,"code":163965,"language":30525,"meta":30,"style":30},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[318,163967,163968,163985],{"__ignoreMap":30},[321,163969,163970,163973,163975,163977,163979,163981,163983],{"class":323,"line":324},[321,163971,163972],{"class":331},"point ",[321,163974,377],{"class":327},[321,163976,1864],{"class":331},[321,163978,778],{"class":380},[321,163980,12642],{"class":331},[321,163982,1032],{"class":380},[321,163984,338],{"class":331},[321,163986,163987,163989,163991,163993,163995,163997,163999,164001,164003],{"class":323,"line":167},[321,163988,116459],{"class":331},[321,163990,377],{"class":327},[321,163992,1864],{"class":331},[321,163994,150033],{"class":436},[321,163996,12642],{"class":331},[321,163998,982],{"class":380},[321,164000,12642],{"class":331},[321,164002,69414],{"class":436},[321,164004,338],{"class":331},[19,164006,164007],{},"单元素元组必须加逗号：",[312,164009,164011],{"className":30523,"code":164010,"language":30525,"meta":30,"style":30},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[318,164012,164013,164027,164040,164044,164058],{"__ignoreMap":30},[321,164014,164015,164018,164020,164022,164024],{"class":323,"line":324},[321,164016,164017],{"class":331},"t1 ",[321,164019,377],{"class":327},[321,164021,1864],{"class":331},[321,164023,778],{"class":380},[321,164025,164026],{"class":331},",)\n",[321,164028,164029,164032,164034,164036,164038],{"class":323,"line":167},[321,164030,164031],{"class":331},"t2 ",[321,164033,377],{"class":327},[321,164035,1864],{"class":331},[321,164037,778],{"class":380},[321,164039,338],{"class":331},[321,164041,164042],{"class":323,"line":200},[321,164043,2606],{"emptyLinePlaceholder":251},[321,164045,164046,164048,164050,164052,164055],{"class":323,"line":1401},[321,164047,30560],{"class":380},[321,164049,332],{"class":331},[321,164051,103252],{"class":380},[321,164053,164054],{"class":331},"(t1))  ",[321,164056,164057],{"class":390},"# tuple\n",[321,164059,164060,164062,164064,164066,164069],{"class":323,"line":1407},[321,164061,30560],{"class":380},[321,164063,332],{"class":331},[321,164065,103252],{"class":380},[321,164067,164068],{"class":331},"(t2))  ",[321,164070,164071],{"class":390},"# int\n",[19,164073,164074],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164076,164078],{"id":164077},"_67-字符串str","6.7 字符串str",[19,164080,164081],{},"字符串也是序列，可以索引、切片和遍历。",[312,164083,164085],{"className":30523,"code":164084,"language":30525,"meta":30,"style":30},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[318,164086,164087,164095,164099,164110,164122,164126,164137],{"__ignoreMap":30},[321,164088,164089,164091,164093],{"class":323,"line":324},[321,164090,156589],{"class":331},[321,164092,377],{"class":327},[321,164094,159826],{"class":436},[321,164096,164097],{"class":323,"line":167},[321,164098,2606],{"emptyLinePlaceholder":251},[321,164100,164101,164103,164106,164108],{"class":323,"line":200},[321,164102,30560],{"class":380},[321,164104,164105],{"class":331},"(text[",[321,164107,523],{"class":380},[321,164109,4863],{"class":331},[321,164111,164112,164114,164116,164118,164120],{"class":323,"line":1401},[321,164113,30560],{"class":380},[321,164115,164105],{"class":331},[321,164117,864],{"class":327},[321,164119,549],{"class":380},[321,164121,4863],{"class":331},[321,164123,164124],{"class":323,"line":1407},[321,164125,2606],{"emptyLinePlaceholder":251},[321,164127,164128,164130,164132,164134],{"class":323,"line":1421},[321,164129,3231],{"class":327},[321,164131,159837],{"class":331},[321,164133,26188],{"class":327},[321,164135,164136],{"class":331}," text:\n",[321,164138,164139,164141],{"class":323,"line":1427},[321,164140,31444],{"class":380},[321,164142,159848],{"class":331},[19,164144,164145],{},"字符串不可变：",[312,164147,164149],{"className":30523,"code":164148,"language":30525,"meta":30,"style":30},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[318,164150,164151,164159],{"__ignoreMap":30},[321,164152,164153,164155,164157],{"class":323,"line":324},[321,164154,156589],{"class":331},[321,164156,377],{"class":327},[321,164158,159826],{"class":436},[321,164160,164161,164164,164166,164168,164170,164173],{"class":323,"line":167},[321,164162,164163],{"class":331},"text[",[321,164165,523],{"class":380},[321,164167,4649],{"class":331},[321,164169,377],{"class":327},[321,164171,164172],{"class":436}," \"P\"",[321,164174,164175],{"class":390},"  # 报错\n",[19,164177,164178],{},"如果要得到新字符串：",[312,164180,164182],{"className":30523,"code":164181,"language":30525,"meta":30,"style":30},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[318,164183,164184,164192,164210],{"__ignoreMap":30},[321,164185,164186,164188,164190],{"class":323,"line":324},[321,164187,156589],{"class":331},[321,164189,377],{"class":327},[321,164191,159826],{"class":436},[321,164193,164194,164196,164198,164200,164202,164205,164207],{"class":323,"line":167},[321,164195,156589],{"class":331},[321,164197,377],{"class":327},[321,164199,164172],{"class":436},[321,164201,45711],{"class":327},[321,164203,164204],{"class":331}," text[",[321,164206,549],{"class":380},[321,164208,164209],{"class":331},":]\n",[321,164211,164212,164214],{"class":323,"line":200},[321,164213,30560],{"class":380},[321,164215,164216],{"class":331},"(text)\n",[14,164218,164220],{"id":164219},"_68-切片","6.8 切片",[19,164222,164223],{},"切片用于从序列中取一部分。",[312,164225,164227],{"className":30523,"code":164226,"language":30525,"meta":30,"style":30},"序列[开始:结束:步长]\n",[318,164228,164229],{"__ignoreMap":30},[321,164230,164231],{"class":323,"line":324},[321,164232,164226],{"class":331},[19,164234,164235],{},"结束位置不包含。",[312,164237,164239],{"className":30523,"code":164238,"language":30525,"meta":30,"style":30},"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",[318,164240,164241,164278,164282,164301,164316,164330,164344],{"__ignoreMap":30},[321,164242,164243,164246,164248,164250,164252,164254,164256,164258,164260,164262,164264,164266,164268,164270,164272,164274,164276],{"class":323,"line":324},[321,164244,164245],{"class":331},"nums ",[321,164247,377],{"class":327},[321,164249,52371],{"class":331},[321,164251,523],{"class":380},[321,164253,12642],{"class":331},[321,164255,549],{"class":380},[321,164257,12642],{"class":331},[321,164259,409],{"class":380},[321,164261,12642],{"class":331},[321,164263,403],{"class":380},[321,164265,12642],{"class":331},[321,164267,625],{"class":380},[321,164269,12642],{"class":331},[321,164271,651],{"class":380},[321,164273,12642],{"class":331},[321,164275,676],{"class":380},[321,164277,33391],{"class":331},[321,164279,164280],{"class":323,"line":167},[321,164281,2606],{"emptyLinePlaceholder":251},[321,164283,164284,164286,164289,164291,164293,164295,164298],{"class":323,"line":200},[321,164285,30560],{"class":380},[321,164287,164288],{"class":331},"(nums[",[321,164290,549],{"class":380},[321,164292,1191],{"class":331},[321,164294,625],{"class":380},[321,164296,164297],{"class":331},"])    ",[321,164299,164300],{"class":390},"# [1, 2, 3]\n",[321,164302,164303,164305,164308,164310,164313],{"class":323,"line":1401},[321,164304,30560],{"class":380},[321,164306,164307],{"class":331},"(nums[:",[321,164309,403],{"class":380},[321,164311,164312],{"class":331},"])     ",[321,164314,164315],{"class":390},"# [0, 1, 2]\n",[321,164317,164318,164320,164322,164324,164327],{"class":323,"line":1407},[321,164319,30560],{"class":380},[321,164321,164288],{"class":331},[321,164323,403],{"class":380},[321,164325,164326],{"class":331},":])     ",[321,164328,164329],{"class":390},"# [3, 4, 5, 6]\n",[321,164331,164332,164334,164337,164339,164341],{"class":323,"line":1421},[321,164333,30560],{"class":380},[321,164335,164336],{"class":331},"(nums[::",[321,164338,409],{"class":380},[321,164340,164297],{"class":331},[321,164342,164343],{"class":390},"# [0, 2, 4, 6]\n",[321,164345,164346,164348,164350,164352,164354,164357],{"class":323,"line":1427},[321,164347,30560],{"class":380},[321,164349,164336],{"class":331},[321,164351,864],{"class":327},[321,164353,549],{"class":380},[321,164355,164356],{"class":331},"])   ",[321,164358,164359],{"class":390},"# 反转\n",[19,164361,164362],{},"字符串切片：",[312,164364,164366],{"className":30523,"code":164365,"language":30525,"meta":30,"style":30},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[318,164367,164368,164377,164391],{"__ignoreMap":30},[321,164369,164370,164372,164374],{"class":323,"line":324},[321,164371,156589],{"class":331},[321,164373,377],{"class":327},[321,164375,164376],{"class":436}," \"abcdef\"\n",[321,164378,164379,164381,164383,164385,164387,164389],{"class":323,"line":167},[321,164380,30560],{"class":380},[321,164382,164105],{"class":331},[321,164384,549],{"class":380},[321,164386,1191],{"class":331},[321,164388,625],{"class":380},[321,164390,4863],{"class":331},[321,164392,164393,164395,164398,164400,164402],{"class":323,"line":200},[321,164394,30560],{"class":380},[321,164396,164397],{"class":331},"(text[::",[321,164399,864],{"class":327},[321,164401,549],{"class":380},[321,164403,4863],{"class":331},[14,164405,164407],{"id":164406},"_69-集合set","6.9 集合set",[19,164409,164410],{},"集合特点：",[151,164412,164413,164416,164419],{},[154,164414,164415],{},"无序。",[154,164417,164418],{},"元素不重复。",[154,164420,164421],{},"可以做交集、并集、差集。",[312,164423,164425],{"className":30523,"code":164424,"language":30525,"meta":30,"style":30},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[318,164426,164427,164455],{"__ignoreMap":30},[321,164428,164429,164431,164433,164435,164437,164439,164441,164443,164445,164447,164449,164451,164453],{"class":323,"line":324},[321,164430,164245],{"class":331},[321,164432,377],{"class":327},[321,164434,4654],{"class":331},[321,164436,549],{"class":380},[321,164438,12642],{"class":331},[321,164440,409],{"class":380},[321,164442,12642],{"class":331},[321,164444,403],{"class":380},[321,164446,12642],{"class":331},[321,164448,403],{"class":380},[321,164450,12642],{"class":331},[321,164452,625],{"class":380},[321,164454,1771],{"class":331},[321,164456,164457,164459],{"class":323,"line":167},[321,164458,30560],{"class":380},[321,164460,164461],{"class":331},"(nums)\n",[19,164463,164464],{},"创建空集合：",[312,164466,164468],{"className":30523,"code":164467,"language":30525,"meta":30,"style":30},"s = set()\n",[318,164469,164470],{"__ignoreMap":30},[321,164471,164472,164474,164476,164478],{"class":323,"line":324},[321,164473,10786],{"class":331},[321,164475,377],{"class":327},[321,164477,119867],{"class":380},[321,164479,2182],{"class":331},[19,164481,9232,164482,164484],{},[318,164483,32604],{}," 是空字典，不是空集合。",[19,164486,164487],{},"集合常用操作：",[312,164489,164491],{"className":30523,"code":164490,"language":30525,"meta":30,"style":30},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[318,164492,164493,164513,164517,164526,164535,164544],{"__ignoreMap":30},[321,164494,164495,164497,164499,164501,164503,164505,164507,164509,164511],{"class":323,"line":324},[321,164496,10786],{"class":331},[321,164498,377],{"class":327},[321,164500,4654],{"class":331},[321,164502,549],{"class":380},[321,164504,12642],{"class":331},[321,164506,409],{"class":380},[321,164508,12642],{"class":331},[321,164510,403],{"class":380},[321,164512,1771],{"class":331},[321,164514,164515],{"class":323,"line":167},[321,164516,2606],{"emptyLinePlaceholder":251},[321,164518,164519,164522,164524],{"class":323,"line":200},[321,164520,164521],{"class":331},"s.add(",[321,164523,625],{"class":380},[321,164525,338],{"class":331},[321,164527,164528,164531,164533],{"class":323,"line":1401},[321,164529,164530],{"class":331},"s.remove(",[321,164532,409],{"class":380},[321,164534,338],{"class":331},[321,164536,164537,164540,164542],{"class":323,"line":1407},[321,164538,164539],{"class":331},"s.discard(",[321,164541,778],{"class":380},[321,164543,338],{"class":331},[321,164545,164546,164548,164550,164552],{"class":323,"line":1421},[321,164547,30560],{"class":380},[321,164549,332],{"class":331},[321,164551,7565],{"class":380},[321,164553,164554],{"class":331},"(s))\n",[19,164556,164557],{},"交并差：",[312,164559,164561],{"className":30523,"code":164560,"language":30525,"meta":30,"style":30},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[318,164562,164563,164583,164603,164607,164622,164635],{"__ignoreMap":30},[321,164564,164565,164567,164569,164571,164573,164575,164577,164579,164581],{"class":323,"line":324},[321,164566,11126],{"class":331},[321,164568,377],{"class":327},[321,164570,4654],{"class":331},[321,164572,549],{"class":380},[321,164574,12642],{"class":331},[321,164576,409],{"class":380},[321,164578,12642],{"class":331},[321,164580,403],{"class":380},[321,164582,1771],{"class":331},[321,164584,164585,164587,164589,164591,164593,164595,164597,164599,164601],{"class":323,"line":167},[321,164586,11152],{"class":331},[321,164588,377],{"class":327},[321,164590,4654],{"class":331},[321,164592,403],{"class":380},[321,164594,12642],{"class":331},[321,164596,625],{"class":380},[321,164598,12642],{"class":331},[321,164600,651],{"class":380},[321,164602,1771],{"class":331},[321,164604,164605],{"class":323,"line":200},[321,164606,2606],{"emptyLinePlaceholder":251},[321,164608,164609,164611,164614,164616,164619],{"class":323,"line":1401},[321,164610,30560],{"class":380},[321,164612,164613],{"class":331},"(a ",[321,164615,685],{"class":327},[321,164617,164618],{"class":331}," b)  ",[321,164620,164621],{"class":390},"# 交集\n",[321,164623,164624,164626,164628,164630,164632],{"class":323,"line":1407},[321,164625,30560],{"class":380},[321,164627,164613],{"class":331},[321,164629,1253],{"class":327},[321,164631,164618],{"class":331},[321,164633,164634],{"class":390},"# 并集\n",[321,164636,164637,164639,164641,164643,164645],{"class":323,"line":1421},[321,164638,30560],{"class":380},[321,164640,164613],{"class":331},[321,164642,864],{"class":327},[321,164644,164618],{"class":331},[321,164646,164647],{"class":390},"# 差集\n",[14,164649,164651],{"id":164650},"_610-字典dict","6.10 字典dict",[19,164653,164654],{},"字典通过 key-value 保存数据。",[312,164656,164658],{"className":30523,"code":164657,"language":30525,"meta":30,"style":30},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[318,164659,164660,164668,164678,164689,164699],{"__ignoreMap":30},[321,164661,164662,164664,164666],{"class":323,"line":324},[321,164663,149626],{"class":331},[321,164665,377],{"class":327},[321,164667,15779],{"class":331},[321,164669,164670,164672,164674,164676],{"class":323,"line":167},[321,164671,147165],{"class":436},[321,164673,51582],{"class":331},[321,164675,150033],{"class":436},[321,164677,31611],{"class":331},[321,164679,164680,164683,164685,164687],{"class":323,"line":200},[321,164681,164682],{"class":436},"    \"age\"",[321,164684,51582],{"class":331},[321,164686,982],{"class":380},[321,164688,31611],{"class":331},[321,164690,164691,164694,164696],{"class":323,"line":1401},[321,164692,164693],{"class":436},"    \"score\"",[321,164695,51582],{"class":331},[321,164697,164698],{"class":380},"95\n",[321,164700,164701],{"class":323,"line":1407},[321,164702,1771],{"class":331},[19,164704,164705],{},"获取值：",[312,164707,164709],{"className":30523,"code":164708,"language":30525,"meta":30,"style":30},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[318,164710,164711,164722],{"__ignoreMap":30},[321,164712,164713,164715,164718,164720],{"class":323,"line":324},[321,164714,30560],{"class":380},[321,164716,164717],{"class":331},"(student[",[321,164719,62824],{"class":436},[321,164721,4863],{"class":331},[321,164723,164724,164726,164729,164731],{"class":323,"line":167},[321,164725,30560],{"class":380},[321,164727,164728],{"class":331},"(student.get(",[321,164730,62824],{"class":436},[321,164732,30642],{"class":331},[19,164734,15595],{},[312,164736,164738],{"className":30523,"code":164737,"language":30525,"meta":30,"style":30},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[318,164739,164740,164753],{"__ignoreMap":30},[321,164741,164742,164744,164747,164750],{"class":323,"line":324},[321,164743,153004],{"class":331},[321,164745,164746],{"class":436},"\"address\"",[321,164748,164749],{"class":331},"]     ",[321,164751,164752],{"class":390},"# key不存在会报错\n",[321,164754,164755,164758,164760,164762],{"class":323,"line":167},[321,164756,164757],{"class":331},"student.get(",[321,164759,164746],{"class":436},[321,164761,13921],{"class":331},[321,164763,164764],{"class":390},"# key不存在返回None\n",[19,164766,164767],{},"设置默认值：",[312,164769,164771],{"className":30523,"code":164770,"language":30525,"meta":30,"style":30},"print(student.get(\"address\", \"未知\"))\n",[318,164772,164773],{"__ignoreMap":30},[321,164774,164775,164777,164779,164781,164783,164786],{"class":323,"line":324},[321,164776,30560],{"class":380},[321,164778,164728],{"class":331},[321,164780,164746],{"class":436},[321,164782,12642],{"class":331},[321,164784,164785],{"class":436},"\"未知\"",[321,164787,30642],{"class":331},[19,164789,164790],{},"新增和修改：",[312,164792,164794],{"className":30523,"code":164793,"language":30525,"meta":30,"style":30},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[318,164795,164796,164809],{"__ignoreMap":30},[321,164797,164798,164800,164802,164804,164806],{"class":323,"line":324},[321,164799,153004],{"class":331},[321,164801,69269],{"class":436},[321,164803,4649],{"class":331},[321,164805,377],{"class":327},[321,164807,164808],{"class":380}," 19\n",[321,164810,164811,164813,164815,164817,164819],{"class":323,"line":167},[321,164812,153004],{"class":331},[321,164814,164746],{"class":436},[321,164816,4649],{"class":331},[321,164818,377],{"class":327},[321,164820,164821],{"class":436}," \"北京\"\n",[19,164823,164824],{},"删除：",[312,164826,164828],{"className":30523,"code":164827,"language":30525,"meta":30,"style":30},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[318,164829,164830,164843,164853],{"__ignoreMap":30},[321,164831,164832,164834,164836,164839,164841],{"class":323,"line":324},[321,164833,155503],{"class":331},[321,164835,377],{"class":327},[321,164837,164838],{"class":331}," student.pop(",[321,164840,151617],{"class":436},[321,164842,338],{"class":331},[321,164844,164845,164847,164849,164851],{"class":323,"line":167},[321,164846,163528],{"class":327},[321,164848,152294],{"class":331},[321,164850,69269],{"class":436},[321,164852,33391],{"class":331},[321,164854,164855],{"class":323,"line":200},[321,164856,164857],{"class":331},"student.clear()\n",[14,164859,164861],{"id":164860},"_611-字典遍历","6.11 字典遍历",[19,164863,164864],{},"遍历 key：",[312,164866,164868],{"className":30523,"code":164867,"language":30525,"meta":30,"style":30},"for key in student:\n    print(key, student[key])\n",[318,164869,164870,164882],{"__ignoreMap":30},[321,164871,164872,164874,164877,164879],{"class":323,"line":324},[321,164873,3231],{"class":327},[321,164875,164876],{"class":331}," key ",[321,164878,26188],{"class":327},[321,164880,164881],{"class":331}," student:\n",[321,164883,164884,164886],{"class":323,"line":167},[321,164885,31444],{"class":380},[321,164887,164888],{"class":331},"(key, student[key])\n",[19,164890,164891],{},"遍历 value：",[312,164893,164895],{"className":30523,"code":164894,"language":30525,"meta":30,"style":30},"for value in student.values():\n    print(value)\n",[318,164896,164897,164909],{"__ignoreMap":30},[321,164898,164899,164901,164904,164906],{"class":323,"line":324},[321,164900,3231],{"class":327},[321,164902,164903],{"class":331}," value ",[321,164905,26188],{"class":327},[321,164907,164908],{"class":331}," student.values():\n",[321,164910,164911,164913],{"class":323,"line":167},[321,164912,31444],{"class":380},[321,164914,164915],{"class":331},"(value)\n",[19,164917,164918],{},"遍历 key 和 value：",[312,164920,164922],{"className":30523,"code":164921,"language":30525,"meta":30,"style":30},"for key, value in student.items():\n    print(key, value)\n",[318,164923,164924,164936],{"__ignoreMap":30},[321,164925,164926,164928,164931,164933],{"class":323,"line":324},[321,164927,3231],{"class":327},[321,164929,164930],{"class":331}," key, value ",[321,164932,26188],{"class":327},[321,164934,164935],{"class":331}," student.items():\n",[321,164937,164938,164940],{"class":323,"line":167},[321,164939,31444],{"class":380},[321,164941,164942],{"class":331},"(key, value)\n",[14,164944,164946],{"id":164945},"_612-嵌套容器","6.12 嵌套容器",[19,164948,164949],{},"列表中保存字典，是项目中最常见的结构之一。",[312,164951,164953],{"className":30523,"code":164952,"language":30525,"meta":30,"style":30},"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",[318,164954,164955,164963,164991,165019,165047,165051,165055,165065],{"__ignoreMap":30},[321,164956,164957,164959,164961],{"class":323,"line":324},[321,164958,159861],{"class":331},[321,164960,377],{"class":327},[321,164962,55592],{"class":331},[321,164964,164965,164967,164969,164971,164973,164975,164977,164979,164981,164983,164985,164987,164989],{"class":323,"line":167},[321,164966,148530],{"class":331},[321,164968,62824],{"class":436},[321,164970,51582],{"class":331},[321,164972,150033],{"class":436},[321,164974,12642],{"class":331},[321,164976,69269],{"class":436},[321,164978,51582],{"class":331},[321,164980,982],{"class":380},[321,164982,12642],{"class":331},[321,164984,151617],{"class":436},[321,164986,51582],{"class":331},[321,164988,1321],{"class":380},[321,164990,5136],{"class":331},[321,164992,164993,164995,164997,164999,165001,165003,165005,165007,165009,165011,165013,165015,165017],{"class":323,"line":200},[321,164994,148530],{"class":331},[321,164996,62824],{"class":436},[321,164998,51582],{"class":331},[321,165000,151081],{"class":436},[321,165002,12642],{"class":331},[321,165004,69269],{"class":436},[321,165006,51582],{"class":331},[321,165008,957],{"class":380},[321,165010,12642],{"class":331},[321,165012,151617],{"class":436},[321,165014,51582],{"class":331},[321,165016,1143],{"class":380},[321,165018,5136],{"class":331},[321,165020,165021,165023,165025,165027,165029,165031,165033,165035,165037,165039,165041,165043,165045],{"class":323,"line":1401},[321,165022,148530],{"class":331},[321,165024,62824],{"class":436},[321,165026,51582],{"class":331},[321,165028,159876],{"class":436},[321,165030,12642],{"class":331},[321,165032,69269],{"class":436},[321,165034,51582],{"class":331},[321,165036,1007],{"class":380},[321,165038,12642],{"class":331},[321,165040,151617],{"class":436},[321,165042,51582],{"class":331},[321,165044,738],{"class":380},[321,165046,5136],{"class":331},[321,165048,165049],{"class":323,"line":1407},[321,165050,33391],{"class":331},[321,165052,165053],{"class":323,"line":1421},[321,165054,2606],{"emptyLinePlaceholder":251},[321,165056,165057,165059,165061,165063],{"class":323,"line":1427},[321,165058,3231],{"class":327},[321,165060,152282],{"class":331},[321,165062,26188],{"class":327},[321,165064,152287],{"class":331},[321,165066,165067,165069,165071,165073,165076,165078],{"class":323,"line":1518},[321,165068,31444],{"class":380},[321,165070,164717],{"class":331},[321,165072,62824],{"class":436},[321,165074,165075],{"class":331},"], student[",[321,165077,151617],{"class":436},[321,165079,4863],{"class":331},[19,165081,165082],{},"统计平均分：",[312,165084,165086],{"className":30523,"code":165085,"language":30525,"meta":30,"style":30},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[318,165087,165088,165096,165100,165110,165122,165126,165141],{"__ignoreMap":30},[321,165089,165090,165092,165094],{"class":323,"line":324},[321,165091,157405],{"class":331},[321,165093,377],{"class":327},[321,165095,47478],{"class":380},[321,165097,165098],{"class":323,"line":167},[321,165099,2606],{"emptyLinePlaceholder":251},[321,165101,165102,165104,165106,165108],{"class":323,"line":200},[321,165103,3231],{"class":327},[321,165105,152282],{"class":331},[321,165107,26188],{"class":327},[321,165109,152287],{"class":331},[321,165111,165112,165114,165116,165118,165120],{"class":323,"line":1401},[321,165113,159452],{"class":331},[321,165115,9684],{"class":327},[321,165117,152294],{"class":331},[321,165119,151617],{"class":436},[321,165121,33391],{"class":331},[321,165123,165124],{"class":323,"line":1407},[321,165125,2606],{"emptyLinePlaceholder":251},[321,165127,165128,165130,165132,165134,165136,165138],{"class":323,"line":1421},[321,165129,163919],{"class":331},[321,165131,377],{"class":327},[321,165133,163924],{"class":331},[321,165135,916],{"class":327},[321,165137,7538],{"class":380},[321,165139,165140],{"class":331},"(students)\n",[321,165142,165143,165145,165147,165149,165151,165153,165155,165157,165159,165161],{"class":323,"line":1427},[321,165144,30560],{"class":380},[321,165146,332],{"class":331},[321,165148,384],{"class":327},[321,165150,163942],{"class":436},[321,165152,1228],{"class":380},[321,165154,163947],{"class":331},[321,165156,157304],{"class":327},[321,165158,1278],{"class":380},[321,165160,583],{"class":436},[321,165162,338],{"class":331},[19,165164,165165],{},"查找学生：",[312,165167,165169],{"className":30523,"code":165168,"language":30525,"meta":30,"style":30},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[318,165170,165171,165186,165190,165200,165214,165220,165224,165230],{"__ignoreMap":30},[321,165172,165173,165175,165177,165179,165181,165184],{"class":323,"line":324},[321,165174,111723],{"class":331},[321,165176,377],{"class":327},[321,165178,60750],{"class":380},[321,165180,332],{"class":331},[321,165182,165183],{"class":436},"\"请输入学生姓名:\"",[321,165185,338],{"class":331},[321,165187,165188],{"class":323,"line":167},[321,165189,2606],{"emptyLinePlaceholder":251},[321,165191,165192,165194,165196,165198],{"class":323,"line":200},[321,165193,3231],{"class":327},[321,165195,152282],{"class":331},[321,165197,26188],{"class":327},[321,165199,152287],{"class":331},[321,165201,165202,165204,165206,165208,165210,165212],{"class":323,"line":1401},[321,165203,3307],{"class":327},[321,165205,152294],{"class":331},[321,165207,62824],{"class":436},[321,165209,4649],{"class":331},[321,165211,3155],{"class":327},[321,165213,160577],{"class":331},[321,165215,165216,165218],{"class":323,"line":1407},[321,165217,32596],{"class":380},[321,165219,150187],{"class":331},[321,165221,165222],{"class":323,"line":1421},[321,165223,31772],{"class":327},[321,165225,165226,165228],{"class":323,"line":1427},[321,165227,1907],{"class":327},[321,165229,3945],{"class":331},[321,165231,165232,165234,165236,165239],{"class":323,"line":1518},[321,165233,31444],{"class":380},[321,165235,332],{"class":331},[321,165237,165238],{"class":436},"\"没有找到\"",[321,165240,338],{"class":331},[14,165242,165244],{"id":165243},"_613-容器通用操作","6.13 容器通用操作",[19,165246,165247],{},"长度：",[312,165249,165251],{"className":30523,"code":165250,"language":30525,"meta":30,"style":30},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[318,165252,165253,165272,165282],{"__ignoreMap":30},[321,165254,165255,165257,165260,165262,165264,165266,165268,165270],{"class":323,"line":324},[321,165256,7565],{"class":380},[321,165258,165259],{"class":331},"([",[321,165261,549],{"class":380},[321,165263,12642],{"class":331},[321,165265,409],{"class":380},[321,165267,12642],{"class":331},[321,165269,403],{"class":380},[321,165271,4863],{"class":331},[321,165273,165274,165276,165278,165280],{"class":323,"line":167},[321,165275,7565],{"class":380},[321,165277,332],{"class":331},[321,165279,156025],{"class":436},[321,165281,338],{"class":331},[321,165283,165284,165286,165289,165291,165293,165295],{"class":323,"line":200},[321,165285,7565],{"class":380},[321,165287,165288],{"class":331},"({",[321,165290,62824],{"class":436},[321,165292,51582],{"class":331},[321,165294,150033],{"class":436},[321,165296,165297],{"class":331},"})\n",[19,165299,165300],{},"最大最小：",[312,165302,165304],{"className":30523,"code":165303,"language":30525,"meta":30,"style":30},"max([1, 2, 3])\nmin([1, 2, 3])\n",[318,165305,165306,165324],{"__ignoreMap":30},[321,165307,165308,165310,165312,165314,165316,165318,165320,165322],{"class":323,"line":324},[321,165309,6222],{"class":380},[321,165311,165259],{"class":331},[321,165313,549],{"class":380},[321,165315,12642],{"class":331},[321,165317,409],{"class":380},[321,165319,12642],{"class":331},[321,165321,403],{"class":380},[321,165323,4863],{"class":331},[321,165325,165326,165329,165331,165333,165335,165337,165339,165341],{"class":323,"line":167},[321,165327,165328],{"class":380},"min",[321,165330,165259],{"class":331},[321,165332,549],{"class":380},[321,165334,12642],{"class":331},[321,165336,409],{"class":380},[321,165338,12642],{"class":331},[321,165340,403],{"class":380},[321,165342,4863],{"class":331},[19,165344,165345],{},"求和：",[312,165347,165349],{"className":30523,"code":165348,"language":30525,"meta":30,"style":30},"sum([1, 2, 3])\n",[318,165350,165351],{"__ignoreMap":30},[321,165352,165353,165356,165358,165360,165362,165364,165366,165368],{"class":323,"line":324},[321,165354,165355],{"class":380},"sum",[321,165357,165259],{"class":331},[321,165359,549],{"class":380},[321,165361,12642],{"class":331},[321,165363,409],{"class":380},[321,165365,12642],{"class":331},[321,165367,403],{"class":380},[321,165369,4863],{"class":331},[19,165371,163616],{},[312,165373,165375],{"className":30523,"code":165374,"language":30525,"meta":30,"style":30},"sorted([3, 1, 2])\n",[318,165376,165377],{"__ignoreMap":30},[321,165378,165379,165382,165384,165386,165388,165390,165392,165394],{"class":323,"line":324},[321,165380,165381],{"class":380},"sorted",[321,165383,165259],{"class":331},[321,165385,403],{"class":380},[321,165387,12642],{"class":331},[321,165389,549],{"class":380},[321,165391,12642],{"class":331},[321,165393,409],{"class":380},[321,165395,4863],{"class":331},[19,165397,165398],{},"类型转换：",[312,165400,165402],{"className":30523,"code":165401,"language":30525,"meta":30,"style":30},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[318,165403,165404,165414,165432],{"__ignoreMap":30},[321,165405,165406,165408,165410,165412],{"class":323,"line":324},[321,165407,154215],{"class":380},[321,165409,332],{"class":331},[321,165411,156025],{"class":436},[321,165413,338],{"class":331},[321,165415,165416,165418,165420,165422,165424,165426,165428,165430],{"class":323,"line":167},[321,165417,155410],{"class":380},[321,165419,165259],{"class":331},[321,165421,549],{"class":380},[321,165423,12642],{"class":331},[321,165425,409],{"class":380},[321,165427,12642],{"class":331},[321,165429,403],{"class":380},[321,165431,4863],{"class":331},[321,165433,165434,165436,165438,165440,165442,165444,165446,165448,165450,165452],{"class":323,"line":200},[321,165435,155435],{"class":380},[321,165437,165259],{"class":331},[321,165439,549],{"class":380},[321,165441,12642],{"class":331},[321,165443,549],{"class":380},[321,165445,12642],{"class":331},[321,165447,409],{"class":380},[321,165449,12642],{"class":331},[321,165451,403],{"class":380},[321,165453,4863],{"class":331},[19,165455,165456],{},"成员判断：",[312,165458,165460],{"className":30523,"code":165459,"language":30525,"meta":30,"style":30},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[318,165461,165462,165479,165503],{"__ignoreMap":30},[321,165463,165464,165466,165468,165471,165474,165477],{"class":323,"line":324},[321,165465,30560],{"class":380},[321,165467,332],{"class":331},[321,165469,165470],{"class":436},"\"a\"",[321,165472,165473],{"class":327}," in",[321,165475,165476],{"class":436}," \"abc\"",[321,165478,338],{"class":331},[321,165480,165481,165483,165485,165487,165489,165491,165493,165495,165497,165499,165501],{"class":323,"line":167},[321,165482,30560],{"class":380},[321,165484,332],{"class":331},[321,165486,549],{"class":380},[321,165488,165473],{"class":327},[321,165490,52371],{"class":331},[321,165492,549],{"class":380},[321,165494,12642],{"class":331},[321,165496,409],{"class":380},[321,165498,12642],{"class":331},[321,165500,403],{"class":380},[321,165502,4863],{"class":331},[321,165504,165505,165507,165509,165511,165513,165515,165517,165519,165521],{"class":323,"line":200},[321,165506,30560],{"class":380},[321,165508,332],{"class":331},[321,165510,62824],{"class":436},[321,165512,165473],{"class":327},[321,165514,4654],{"class":331},[321,165516,62824],{"class":436},[321,165518,51582],{"class":331},[321,165520,150033],{"class":436},[321,165522,165297],{"class":331},[14,165524,165526],{"id":165525},"_614-推导式","6.14 推导式",[19,165528,165529],{},"推导式用于快速生成容器。",[19,165531,165532],{},"列表推导式：",[312,165534,165536],{"className":30523,"code":165535,"language":30525,"meta":30,"style":30},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[318,165537,165538,165565],{"__ignoreMap":30},[321,165539,165540,165542,165544,165547,165549,165551,165553,165555,165557,165559,165561,165563],{"class":323,"line":324},[321,165541,164245],{"class":331},[321,165543,377],{"class":327},[321,165545,165546],{"class":331}," [i ",[321,165548,3231],{"class":327},[321,165550,9645],{"class":331},[321,165552,26188],{"class":327},[321,165554,32588],{"class":380},[321,165556,332],{"class":331},[321,165558,549],{"class":380},[321,165560,12642],{"class":331},[321,165562,676],{"class":380},[321,165564,97445],{"class":331},[321,165566,165567,165569],{"class":323,"line":167},[321,165568,30560],{"class":380},[321,165570,164461],{"class":331},[19,165572,165573],{},"带条件：",[312,165575,165577],{"className":30523,"code":165576,"language":30525,"meta":30,"style":30},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[318,165578,165579,165620],{"__ignoreMap":30},[321,165580,165581,165584,165586,165588,165590,165592,165594,165596,165598,165600,165602,165604,165606,165608,165610,165612,165614,165616,165618],{"class":323,"line":324},[321,165582,165583],{"class":331},"even_nums ",[321,165585,377],{"class":327},[321,165587,165546],{"class":331},[321,165589,3231],{"class":327},[321,165591,9645],{"class":331},[321,165593,26188],{"class":327},[321,165595,32588],{"class":380},[321,165597,332],{"class":331},[321,165599,549],{"class":380},[321,165601,12642],{"class":331},[321,165603,669],{"class":380},[321,165605,13921],{"class":331},[321,165607,1737],{"class":327},[321,165609,9645],{"class":331},[321,165611,660],{"class":327},[321,165613,14962],{"class":380},[321,165615,101704],{"class":327},[321,165617,4299],{"class":380},[321,165619,33391],{"class":331},[321,165621,165622,165624],{"class":323,"line":167},[321,165623,30560],{"class":380},[321,165625,165626],{"class":331},"(even_nums)\n",[19,165628,165629],{},"字典推导式：",[312,165631,165633],{"className":30523,"code":165632,"language":30525,"meta":30,"style":30},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[318,165634,165635,165669],{"__ignoreMap":30},[321,165636,165637,165640,165642,165645,165647,165649,165652,165654,165656,165658,165660,165662,165664,165666],{"class":323,"line":324},[321,165638,165639],{"class":331},"squares ",[321,165641,377],{"class":327},[321,165643,165644],{"class":331}," {i: i ",[321,165646,10868],{"class":327},[321,165648,14962],{"class":380},[321,165650,165651],{"class":327}," for",[321,165653,9645],{"class":331},[321,165655,26188],{"class":327},[321,165657,32588],{"class":380},[321,165659,332],{"class":331},[321,165661,549],{"class":380},[321,165663,12642],{"class":331},[321,165665,676],{"class":380},[321,165667,165668],{"class":331},")}\n",[321,165670,165671,165673],{"class":323,"line":167},[321,165672,30560],{"class":380},[321,165674,165675],{"class":331},"(squares)\n",[19,165677,165678],{},"集合推导式：",[312,165680,165682],{"className":30523,"code":165681,"language":30525,"meta":30,"style":30},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[318,165683,165684,165705],{"__ignoreMap":30},[321,165685,165686,165689,165691,165694,165696,165698,165700,165703],{"class":323,"line":324},[321,165687,165688],{"class":331},"chars ",[321,165690,377],{"class":327},[321,165692,165693],{"class":331}," {ch ",[321,165695,3231],{"class":327},[321,165697,159837],{"class":331},[321,165699,26188],{"class":327},[321,165701,165702],{"class":436}," \"hello\"",[321,165704,1771],{"class":331},[321,165706,165707,165709],{"class":323,"line":167},[321,165708,30560],{"class":380},[321,165710,165711],{"class":331},"(chars)\n",[19,165713,165714],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165716,165718],{"id":165717},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[312,165720,165722],{"className":30523,"code":165721,"language":30525,"meta":30,"style":30},"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",[318,165723,165724,165732,165752,165772,165792,165812,165816,165820,165828,165842,165851,165855,165865,165877,165881,165901,165910,165914,165930,165935,165939,165953,165957,165979,166015],{"__ignoreMap":30},[321,165725,165726,165728,165730],{"class":323,"line":324},[321,165727,159861],{"class":331},[321,165729,377],{"class":327},[321,165731,55592],{"class":331},[321,165733,165734,165736,165738,165740,165742,165744,165746,165748,165750],{"class":323,"line":167},[321,165735,148530],{"class":331},[321,165737,62824],{"class":436},[321,165739,51582],{"class":331},[321,165741,150033],{"class":436},[321,165743,12642],{"class":331},[321,165745,151617],{"class":436},[321,165747,51582],{"class":331},[321,165749,1321],{"class":380},[321,165751,5136],{"class":331},[321,165753,165754,165756,165758,165760,165762,165764,165766,165768,165770],{"class":323,"line":200},[321,165755,148530],{"class":331},[321,165757,62824],{"class":436},[321,165759,51582],{"class":331},[321,165761,151081],{"class":436},[321,165763,12642],{"class":331},[321,165765,151617],{"class":436},[321,165767,51582],{"class":331},[321,165769,1143],{"class":380},[321,165771,5136],{"class":331},[321,165773,165774,165776,165778,165780,165782,165784,165786,165788,165790],{"class":323,"line":1401},[321,165775,148530],{"class":331},[321,165777,62824],{"class":436},[321,165779,51582],{"class":331},[321,165781,159876],{"class":436},[321,165783,12642],{"class":331},[321,165785,151617],{"class":436},[321,165787,51582],{"class":331},[321,165789,738],{"class":380},[321,165791,5136],{"class":331},[321,165793,165794,165796,165798,165800,165802,165804,165806,165808,165810],{"class":323,"line":1407},[321,165795,148530],{"class":331},[321,165797,62824],{"class":436},[321,165799,51582],{"class":331},[321,165801,163455],{"class":436},[321,165803,12642],{"class":331},[321,165805,151617],{"class":436},[321,165807,51582],{"class":331},[321,165809,1214],{"class":380},[321,165811,5136],{"class":331},[321,165813,165814],{"class":323,"line":1421},[321,165815,33391],{"class":331},[321,165817,165818],{"class":323,"line":1427},[321,165819,2606],{"emptyLinePlaceholder":251},[321,165821,165822,165824,165826],{"class":323,"line":1518},[321,165823,157405],{"class":331},[321,165825,377],{"class":327},[321,165827,47478],{"class":380},[321,165829,165830,165833,165835,165838,165840],{"class":323,"line":1524},[321,165831,165832],{"class":331},"max_student ",[321,165834,377],{"class":327},[321,165836,165837],{"class":331}," students[",[321,165839,523],{"class":380},[321,165841,33391],{"class":331},[321,165843,165844,165847,165849],{"class":323,"line":1536},[321,165845,165846],{"class":331},"passed ",[321,165848,377],{"class":327},[321,165850,51983],{"class":331},[321,165852,165853],{"class":323,"line":1818},[321,165854,2606],{"emptyLinePlaceholder":251},[321,165856,165857,165859,165861,165863],{"class":323,"line":1823},[321,165858,3231],{"class":327},[321,165860,152282],{"class":331},[321,165862,26188],{"class":327},[321,165864,152287],{"class":331},[321,165866,165867,165869,165871,165873,165875],{"class":323,"line":1829},[321,165868,159452],{"class":331},[321,165870,9684],{"class":327},[321,165872,152294],{"class":331},[321,165874,151617],{"class":436},[321,165876,33391],{"class":331},[321,165878,165879],{"class":323,"line":1834},[321,165880,2606],{"emptyLinePlaceholder":251},[321,165882,165883,165885,165887,165889,165891,165893,165896,165898],{"class":323,"line":1848},[321,165884,3307],{"class":327},[321,165886,152294],{"class":331},[321,165888,151617],{"class":436},[321,165890,4649],{"class":331},[321,165892,1292],{"class":327},[321,165894,165895],{"class":331}," max_student[",[321,165897,151617],{"class":436},[321,165899,165900],{"class":331},"]:\n",[321,165902,165903,165906,165908],{"class":323,"line":1853},[321,165904,165905],{"class":331},"        max_student ",[321,165907,377],{"class":327},[321,165909,152310],{"class":331},[321,165911,165912],{"class":323,"line":1859},[321,165913,2606],{"emptyLinePlaceholder":251},[321,165915,165916,165918,165920,165922,165924,165926,165928],{"class":323,"line":1880},[321,165917,3307],{"class":327},[321,165919,152294],{"class":331},[321,165921,151617],{"class":436},[321,165923,4649],{"class":331},[321,165925,1916],{"class":327},[321,165927,157982],{"class":380},[321,165929,3945],{"class":331},[321,165931,165932],{"class":323,"line":1885},[321,165933,165934],{"class":331},"        passed.append(student)\n",[321,165936,165937],{"class":323,"line":1899},[321,165938,2606],{"emptyLinePlaceholder":251},[321,165940,165941,165943,165945,165947,165949,165951],{"class":323,"line":1904},[321,165942,163919],{"class":331},[321,165944,377],{"class":327},[321,165946,163924],{"class":331},[321,165948,916],{"class":327},[321,165950,7538],{"class":380},[321,165952,165140],{"class":331},[321,165954,165955],{"class":323,"line":1933},[321,165956,2606],{"emptyLinePlaceholder":251},[321,165958,165959,165961,165963,165965,165967,165969,165971,165973,165975,165977],{"class":323,"line":1938},[321,165960,30560],{"class":380},[321,165962,332],{"class":331},[321,165964,384],{"class":327},[321,165966,163942],{"class":436},[321,165968,1228],{"class":380},[321,165970,163947],{"class":331},[321,165972,157304],{"class":327},[321,165974,1278],{"class":380},[321,165976,583],{"class":436},[321,165978,338],{"class":331},[321,165980,165981,165983,165985,165987,165990,165992,165995,165997,165999,166001,166003,166005,166007,166009,166011,166013],{"class":323,"line":1955},[321,165982,30560],{"class":380},[321,165984,332],{"class":331},[321,165986,384],{"class":327},[321,165988,165989],{"class":436},"\"最高分学生:",[321,165991,1228],{"class":380},[321,165993,165994],{"class":331},"max_student[",[321,165996,153027],{"class":436},[321,165998,1272],{"class":331},[321,166000,1278],{"class":380},[321,166002,4654],{"class":380},[321,166004,165994],{"class":331},[321,166006,153065],{"class":436},[321,166008,1272],{"class":331},[321,166010,1278],{"class":380},[321,166012,583],{"class":436},[321,166014,338],{"class":331},[321,166016,166017,166019,166021,166023,166026,166029,166032,166034,166036],{"class":323,"line":1960},[321,166018,30560],{"class":380},[321,166020,332],{"class":331},[321,166022,384],{"class":327},[321,166024,166025],{"class":436},"\"及格人数:",[321,166027,166028],{"class":380},"{len",[321,166030,166031],{"class":331},"(passed)",[321,166033,1278],{"class":380},[321,166035,583],{"class":436},[321,166037,338],{"class":331},[14,166039,166041],{"id":166040},"_616-易错点","6.16 易错点",[151,166043,166044,166047,166050,166053,166059,166068],{},[154,166045,166046],{},"列表可变，元组和字符串不可变。",[154,166048,166049],{},"切片结束位置不包含。",[154,166051,166052],{},"字典通过 key 取值，不是通过索引。",[154,166054,166055,166056,28530],{},"空集合要用 ",[318,166057,166058],{},"set()",[154,166060,104511,166061,166064,166065,28530],{},[318,166062,166063],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[318,166066,166067],{},"get()",[154,166069,166070],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166072,166074],{"id":166073},"_617-本章练习","6.17 本章练习",[151,166076,166077,166080,166083,166086,166089],{},[154,166078,166079],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[154,166081,166082],{},"输入一句话，统计每个字符出现次数。",[154,166084,166085],{},"使用集合去除列表中的重复元素。",[154,166087,166088],{},"使用字典保存一个学生的信息，并实现修改成绩。",[154,166090,166091],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5333,166093,166094],{},"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":30,"searchDepth":167,"depth":167,"links":166096},[166097,166098,166099,166100,166101,166102,166103,166104,166105,166106,166107,166108,166109,166110,166111,166112,166113],{"id":163077,"depth":167,"text":163078},{"id":163194,"depth":167,"text":163195},{"id":163284,"depth":167,"text":163285},{"id":163408,"depth":167,"text":163409},{"id":163771,"depth":167,"text":163772},{"id":163958,"depth":167,"text":163959},{"id":164077,"depth":167,"text":164078},{"id":164219,"depth":167,"text":164220},{"id":164406,"depth":167,"text":164407},{"id":164650,"depth":167,"text":164651},{"id":164860,"depth":167,"text":164861},{"id":164945,"depth":167,"text":164946},{"id":165243,"depth":167,"text":165244},{"id":165525,"depth":167,"text":165526},{"id":165717,"depth":167,"text":165718},{"id":166040,"depth":167,"text":166041},{"id":166073,"depth":167,"text":166074},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163069,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166120,"title":166121,"body":166122,"description":23584,"extension":249,"meta":168294,"navigation":251,"path":168295,"seo":168296,"stem":168297,"__hash__":168298},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166123,"toc":168269},[166124,166127,166131,166134,166214,166217,166238,166241,166245,166248,166310,166313,166330,166334,166337,166382,166384,166392,166396,166399,166481,166484,166487,166512,166515,166538,166542,166545,166547,166609,166612,166614,166665,166669,166673,166679,166784,166788,166794,166865,166869,166872,166940,166943,167023,167027,167033,167069,167072,167075,167185,167191,167195,167198,167270,167273,167277,167281,167286,167348,167352,167357,167425,167429,167434,167550,167554,167557,167637,167640,167644,167647,167751,167753,167768,167771,167775,167913,167921,167925,167927,167938,167940,168198,168202,168234,168238,168266],[10,166125,166121],{"id":166126},"_7-函数进阶",[14,166128,166130],{"id":166129},"_71-多返回值","7.1 多返回值",[19,166132,166133],{},"Python 函数可以返回多个值，本质上返回的是元组。",[312,166135,166137],{"className":30523,"code":166136,"language":30525,"meta":30,"style":30},"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",[318,166138,166139,166148,166156,166164,166173,166180,166184,166188,166197,166203],{"__ignoreMap":30},[321,166140,166141,166143,166146],{"class":323,"line":324},[321,166142,32092],{"class":327},[321,166144,166145],{"class":2169}," get_info",[321,166147,32098],{"class":331},[321,166149,166150,166152,166154],{"class":323,"line":167},[321,166151,152515],{"class":331},[321,166153,377],{"class":327},[321,166155,149498],{"class":436},[321,166157,166158,166160,166162],{"class":323,"line":200},[321,166159,152531],{"class":331},[321,166161,377],{"class":327},[321,166163,146696],{"class":380},[321,166165,166166,166168,166170],{"class":323,"line":1401},[321,166167,152546],{"class":331},[321,166169,377],{"class":327},[321,166171,166172],{"class":380}," 95\n",[321,166174,166175,166177],{"class":323,"line":1407},[321,166176,4296],{"class":327},[321,166178,166179],{"class":331}," name, age, score\n",[321,166181,166182],{"class":323,"line":1421},[321,166183,2606],{"emptyLinePlaceholder":251},[321,166185,166186],{"class":323,"line":1427},[321,166187,2606],{"emptyLinePlaceholder":251},[321,166189,166190,166192,166194],{"class":323,"line":1518},[321,166191,161451],{"class":331},[321,166193,377],{"class":327},[321,166195,166196],{"class":331}," get_info()\n",[321,166198,166199,166201],{"class":323,"line":1524},[321,166200,30560],{"class":380},[321,166202,76730],{"class":331},[321,166204,166205,166207,166209,166211],{"class":323,"line":1536},[321,166206,30560],{"class":380},[321,166208,332],{"class":331},[321,166210,103252],{"class":380},[321,166212,166213],{"class":331},"(result))\n",[19,166215,166216],{},"可以直接解包：",[312,166218,166220],{"className":30523,"code":166219,"language":30525,"meta":30,"style":30},"name, age, score = get_info()\nprint(name, age, score)\n",[318,166221,166222,166231],{"__ignoreMap":30},[321,166223,166224,166227,166229],{"class":323,"line":324},[321,166225,166226],{"class":331},"name, age, score ",[321,166228,377],{"class":327},[321,166230,166196],{"class":331},[321,166232,166233,166235],{"class":323,"line":167},[321,166234,30560],{"class":380},[321,166236,166237],{"class":331},"(name, age, score)\n",[19,166239,166240],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166242,166244],{"id":166243},"_72-位置参数","7.2 位置参数",[19,166246,166247],{},"位置参数按顺序传递。",[312,166249,166251],{"className":30523,"code":166250,"language":30525,"meta":30,"style":30},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[318,166252,166253,166261,166289,166293,166297],{"__ignoreMap":30},[321,166254,166255,166257,166259],{"class":323,"line":324},[321,166256,32092],{"class":327},[321,166258,149517],{"class":2169},[321,166260,149520],{"class":331},[321,166262,166263,166265,166267,166269,166271,166273,166275,166277,166279,166281,166283,166285,166287],{"class":323,"line":167},[321,166264,31444],{"class":380},[321,166266,332],{"class":331},[321,166268,384],{"class":327},[321,166270,149531],{"class":436},[321,166272,1228],{"class":380},[321,166274,79955],{"class":331},[321,166276,1278],{"class":380},[321,166278,149540],{"class":436},[321,166280,1228],{"class":380},[321,166282,70366],{"class":331},[321,166284,1278],{"class":380},[321,166286,149549],{"class":436},[321,166288,338],{"class":331},[321,166290,166291],{"class":323,"line":200},[321,166292,2606],{"emptyLinePlaceholder":251},[321,166294,166295],{"class":323,"line":1401},[321,166296,2606],{"emptyLinePlaceholder":251},[321,166298,166299,166302,166304,166306,166308],{"class":323,"line":1407},[321,166300,166301],{"class":331},"introduce(",[321,166303,150033],{"class":436},[321,166305,12642],{"class":331},[321,166307,982],{"class":380},[321,166309,338],{"class":331},[19,166311,166312],{},"顺序错了就会得到错误含义：",[312,166314,166316],{"className":30523,"code":166315,"language":30525,"meta":30,"style":30},"introduce(18, \"小明\")\n",[318,166317,166318],{"__ignoreMap":30},[321,166319,166320,166322,166324,166326,166328],{"class":323,"line":324},[321,166321,166301],{"class":331},[321,166323,982],{"class":380},[321,166325,12642],{"class":331},[321,166327,150033],{"class":436},[321,166329,338],{"class":331},[14,166331,166333],{"id":166332},"_73-关键字参数","7.3 关键字参数",[19,166335,166336],{},"关键字参数按参数名传递。",[312,166338,166340],{"className":30523,"code":166339,"language":30525,"meta":30,"style":30},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[318,166341,166342,166362],{"__ignoreMap":30},[321,166343,166344,166346,166348,166350,166352,166354,166356,166358,166360],{"class":323,"line":324},[321,166345,166301],{"class":331},[321,166347,79955],{"class":5423},[321,166349,377],{"class":327},[321,166351,150033],{"class":436},[321,166353,12642],{"class":331},[321,166355,70366],{"class":5423},[321,166357,377],{"class":327},[321,166359,982],{"class":380},[321,166361,338],{"class":331},[321,166363,166364,166366,166368,166370,166372,166374,166376,166378,166380],{"class":323,"line":167},[321,166365,166301],{"class":331},[321,166367,70366],{"class":5423},[321,166369,377],{"class":327},[321,166371,982],{"class":380},[321,166373,12642],{"class":331},[321,166375,79955],{"class":5423},[321,166377,377],{"class":327},[321,166379,150033],{"class":436},[321,166381,338],{"class":331},[19,166383,118079],{},[151,166385,166386,166389],{},[154,166387,166388],{},"顺序不容易错。",[154,166390,166391],{},"调用时可读性更强。",[14,166393,166395],{"id":166394},"_74-默认参数","7.4 默认参数",[19,166397,166398],{},"默认参数给参数设置默认值。",[312,166400,166402],{"className":30523,"code":166401,"language":30525,"meta":30,"style":30},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[318,166403,166404,166420,166450,166454,166458,166468],{"__ignoreMap":30},[321,166405,166406,166408,166410,166413,166415,166418],{"class":323,"line":324},[321,166407,32092],{"class":327},[321,166409,122238],{"class":2169},[321,166411,166412],{"class":331},"(host, port",[321,166414,377],{"class":327},[321,166416,166417],{"class":380},"3306",[321,166419,30931],{"class":331},[321,166421,166422,166424,166426,166428,166431,166433,166435,166437,166439,166441,166444,166446,166448],{"class":323,"line":167},[321,166423,31444],{"class":380},[321,166425,332],{"class":331},[321,166427,384],{"class":327},[321,166429,166430],{"class":436},"\"连接",[321,166432,1228],{"class":380},[321,166434,27540],{"class":331},[321,166436,1278],{"class":380},[321,166438,1191],{"class":436},[321,166440,1228],{"class":380},[321,166442,166443],{"class":331},"port",[321,166445,1278],{"class":380},[321,166447,583],{"class":436},[321,166449,338],{"class":331},[321,166451,166452],{"class":323,"line":200},[321,166453,2606],{"emptyLinePlaceholder":251},[321,166455,166456],{"class":323,"line":1401},[321,166457,2606],{"emptyLinePlaceholder":251},[321,166459,166460,166463,166466],{"class":323,"line":1407},[321,166461,166462],{"class":331},"connect(",[321,166464,166465],{"class":436},"\"localhost\"",[321,166467,338],{"class":331},[321,166469,166470,166472,166474,166476,166479],{"class":323,"line":1421},[321,166471,166462],{"class":331},[321,166473,166465],{"class":436},[321,166475,12642],{"class":331},[321,166477,166478],{"class":380},"6379",[321,166480,338],{"class":331},[19,166482,166483],{},"注意：默认参数必须放在非默认参数后面。",[19,166485,166486],{},"错误：",[312,166488,166490],{"className":30523,"code":166489,"language":30525,"meta":30,"style":30},"def connect(port=3306, host):\n    pass\n",[318,166491,166492,166508],{"__ignoreMap":30},[321,166493,166494,166496,166498,166501,166503,166505],{"class":323,"line":324},[321,166495,32092],{"class":327},[321,166497,122238],{"class":2169},[321,166499,166500],{"class":331},"(port",[321,166502,377],{"class":327},[321,166504,166417],{"class":380},[321,166506,166507],{"class":331},", host):\n",[321,166509,166510],{"class":323,"line":167},[321,166511,149682],{"class":327},[19,166513,166514],{},"正确：",[312,166516,166518],{"className":30523,"code":166517,"language":30525,"meta":30,"style":30},"def connect(host, port=3306):\n    pass\n",[318,166519,166520,166534],{"__ignoreMap":30},[321,166521,166522,166524,166526,166528,166530,166532],{"class":323,"line":324},[321,166523,32092],{"class":327},[321,166525,122238],{"class":2169},[321,166527,166412],{"class":331},[321,166529,377],{"class":327},[321,166531,166417],{"class":380},[321,166533,30931],{"class":331},[321,166535,166536],{"class":323,"line":167},[321,166537,149682],{"class":327},[14,166539,166541],{"id":166540},"_75-默认参数的坑","7.5 默认参数的坑",[19,166543,166544],{},"不要使用可变对象作为默认参数。",[19,166546,157768],{},[312,166548,166550],{"className":30523,"code":166549,"language":30525,"meta":30,"style":30},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[318,166551,166552,166567,166572,166579,166583,166587,166598],{"__ignoreMap":30},[321,166553,166554,166556,166559,166562,166564],{"class":323,"line":324},[321,166555,32092],{"class":327},[321,166557,166558],{"class":2169}," add_item",[321,166560,166561],{"class":331},"(item, items",[321,166563,377],{"class":327},[321,166565,166566],{"class":331},"[]):\n",[321,166568,166569],{"class":323,"line":167},[321,166570,166571],{"class":331},"    items.append(item)\n",[321,166573,166574,166576],{"class":323,"line":200},[321,166575,4296],{"class":327},[321,166577,166578],{"class":331}," items\n",[321,166580,166581],{"class":323,"line":1401},[321,166582,2606],{"emptyLinePlaceholder":251},[321,166584,166585],{"class":323,"line":1407},[321,166586,2606],{"emptyLinePlaceholder":251},[321,166588,166589,166591,166594,166596],{"class":323,"line":1421},[321,166590,30560],{"class":380},[321,166592,166593],{"class":331},"(add_item(",[321,166595,165470],{"class":436},[321,166597,30642],{"class":331},[321,166599,166600,166602,166604,166607],{"class":323,"line":1427},[321,166601,30560],{"class":380},[321,166603,166593],{"class":331},[321,166605,166606],{"class":436},"\"b\"",[321,166608,30642],{"class":331},[19,166610,166611],{},"第二次调用会复用第一次的列表。",[19,166613,156033],{},[312,166615,166617],{"className":30523,"code":166616,"language":30525,"meta":30,"style":30},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[318,166618,166619,166633,166646,166655,166659],{"__ignoreMap":30},[321,166620,166621,166623,166625,166627,166629,166631],{"class":323,"line":324},[321,166622,32092],{"class":327},[321,166624,166558],{"class":2169},[321,166626,166561],{"class":331},[321,166628,377],{"class":327},[321,166630,95831],{"class":380},[321,166632,30931],{"class":331},[321,166634,166635,166637,166640,166642,166644],{"class":323,"line":167},[321,166636,3307],{"class":327},[321,166638,166639],{"class":331}," items ",[321,166641,39072],{"class":327},[321,166643,39078],{"class":380},[321,166645,3945],{"class":331},[321,166647,166648,166651,166653],{"class":323,"line":200},[321,166649,166650],{"class":331},"        items ",[321,166652,377],{"class":327},[321,166654,51983],{"class":331},[321,166656,166657],{"class":323,"line":1401},[321,166658,166571],{"class":331},[321,166660,166661,166663],{"class":323,"line":1407},[321,166662,4296],{"class":327},[321,166664,166578],{"class":331},[14,166666,166668],{"id":166667},"_76-不定长参数","7.6 不定长参数",[292,166670,166672],{"id":166671},"_761-args","7.6.1 *args",[19,166674,166675,166678],{},[318,166676,166677],{},"*args"," 接收任意数量的位置参数，得到元组。",[312,166680,166682],{"className":30523,"code":166681,"language":30525,"meta":30,"style":30},"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",[318,166683,166684,166697,166705,166716,166725,166731,166735,166739,166758],{"__ignoreMap":30},[321,166685,166686,166688,166690,166692,166694],{"class":323,"line":324},[321,166687,32092],{"class":327},[321,166689,5416],{"class":2169},[321,166691,332],{"class":331},[321,166693,787],{"class":327},[321,166695,166696],{"class":331},"args):\n",[321,166698,166699,166701,166703],{"class":323,"line":167},[321,166700,159452],{"class":331},[321,166702,377],{"class":327},[321,166704,47478],{"class":380},[321,166706,166707,166709,166711,166713],{"class":323,"line":200},[321,166708,3407],{"class":327},[321,166710,156325],{"class":331},[321,166712,26188],{"class":327},[321,166714,166715],{"class":331}," args:\n",[321,166717,166718,166720,166722],{"class":323,"line":1401},[321,166719,160127],{"class":331},[321,166721,9684],{"class":327},[321,166723,166724],{"class":331}," num\n",[321,166726,166727,166729],{"class":323,"line":1407},[321,166728,4296],{"class":327},[321,166730,162432],{"class":331},[321,166732,166733],{"class":323,"line":1421},[321,166734,2606],{"emptyLinePlaceholder":251},[321,166736,166737],{"class":323,"line":1427},[321,166738,2606],{"emptyLinePlaceholder":251},[321,166740,166741,166743,166746,166748,166750,166752,166754,166756],{"class":323,"line":1518},[321,166742,30560],{"class":380},[321,166744,166745],{"class":331},"(add(",[321,166747,549],{"class":380},[321,166749,12642],{"class":331},[321,166751,409],{"class":380},[321,166753,12642],{"class":331},[321,166755,403],{"class":380},[321,166757,30642],{"class":331},[321,166759,166760,166762,166764,166766,166768,166770,166772,166774,166776,166778,166780,166782],{"class":323,"line":1524},[321,166761,30560],{"class":380},[321,166763,166745],{"class":331},[321,166765,549],{"class":380},[321,166767,12642],{"class":331},[321,166769,409],{"class":380},[321,166771,12642],{"class":331},[321,166773,403],{"class":380},[321,166775,12642],{"class":331},[321,166777,625],{"class":380},[321,166779,12642],{"class":331},[321,166781,651],{"class":380},[321,166783,30642],{"class":331},[292,166785,166787],{"id":166786},"_762-kwargs","7.6.2 **kwargs",[19,166789,166790,166793],{},[318,166791,166792],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[312,166795,166797],{"className":30523,"code":166796,"language":30525,"meta":30,"style":30},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[318,166798,166799,166812,166823,166829,166833,166837],{"__ignoreMap":30},[321,166800,166801,166803,166805,166807,166809],{"class":323,"line":324},[321,166802,32092],{"class":327},[321,166804,162090],{"class":2169},[321,166806,332],{"class":331},[321,166808,10868],{"class":327},[321,166810,166811],{"class":331},"kwargs):\n",[321,166813,166814,166816,166818,166820],{"class":323,"line":167},[321,166815,3407],{"class":327},[321,166817,164930],{"class":331},[321,166819,26188],{"class":327},[321,166821,166822],{"class":331}," kwargs.items():\n",[321,166824,166825,166827],{"class":323,"line":200},[321,166826,32596],{"class":380},[321,166828,164942],{"class":331},[321,166830,166831],{"class":323,"line":1401},[321,166832,2606],{"emptyLinePlaceholder":251},[321,166834,166835],{"class":323,"line":1407},[321,166836,2606],{"emptyLinePlaceholder":251},[321,166838,166839,166841,166843,166845,166847,166849,166851,166853,166855,166857,166859,166861,166863],{"class":323,"line":1421},[321,166840,162155],{"class":331},[321,166842,79955],{"class":5423},[321,166844,377],{"class":327},[321,166846,150033],{"class":436},[321,166848,12642],{"class":331},[321,166850,70366],{"class":5423},[321,166852,377],{"class":327},[321,166854,982],{"class":380},[321,166856,12642],{"class":331},[321,166858,70417],{"class":5423},[321,166860,377],{"class":327},[321,166862,69414],{"class":436},[321,166864,338],{"class":331},[14,166866,166868],{"id":166867},"_77-参数解包","7.7 参数解包",[19,166870,166871],{},"列表或元组解包为位置参数：",[312,166873,166875],{"className":30523,"code":166874,"language":30525,"meta":30,"style":30},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[318,166876,166877,166886,166901,166905,166909,166929],{"__ignoreMap":30},[321,166878,166879,166881,166883],{"class":323,"line":324},[321,166880,32092],{"class":327},[321,166882,5416],{"class":2169},[321,166884,166885],{"class":331},"(a, b, c):\n",[321,166887,166888,166890,166892,166894,166896,166898],{"class":323,"line":167},[321,166889,4296],{"class":327},[321,166891,11076],{"class":331},[321,166893,813],{"class":327},[321,166895,11089],{"class":331},[321,166897,813],{"class":327},[321,166899,166900],{"class":331}," c\n",[321,166902,166903],{"class":323,"line":200},[321,166904,2606],{"emptyLinePlaceholder":251},[321,166906,166907],{"class":323,"line":1401},[321,166908,2606],{"emptyLinePlaceholder":251},[321,166910,166911,166913,166915,166917,166919,166921,166923,166925,166927],{"class":323,"line":1407},[321,166912,164245],{"class":331},[321,166914,377],{"class":327},[321,166916,52371],{"class":331},[321,166918,549],{"class":380},[321,166920,12642],{"class":331},[321,166922,409],{"class":380},[321,166924,12642],{"class":331},[321,166926,403],{"class":380},[321,166928,33391],{"class":331},[321,166930,166931,166933,166935,166937],{"class":323,"line":1421},[321,166932,30560],{"class":380},[321,166934,166745],{"class":331},[321,166936,787],{"class":327},[321,166938,166939],{"class":331},"nums))\n",[19,166941,166942],{},"字典解包为关键字参数：",[312,166944,166946],{"className":30523,"code":166945,"language":30525,"meta":30,"style":30},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[318,166947,166948,166956,166982,166986,166990,167014],{"__ignoreMap":30},[321,166949,166950,166952,166954],{"class":323,"line":324},[321,166951,32092],{"class":327},[321,166953,149517],{"class":2169},[321,166955,149520],{"class":331},[321,166957,166958,166960,166962,166964,166966,166968,166970,166972,166974,166976,166978,166980],{"class":323,"line":167},[321,166959,31444],{"class":380},[321,166961,332],{"class":331},[321,166963,384],{"class":327},[321,166965,583],{"class":436},[321,166967,1228],{"class":380},[321,166969,79955],{"class":331},[321,166971,1278],{"class":380},[321,166973,4654],{"class":380},[321,166975,70366],{"class":331},[321,166977,1278],{"class":380},[321,166979,583],{"class":436},[321,166981,338],{"class":331},[321,166983,166984],{"class":323,"line":200},[321,166985,2606],{"emptyLinePlaceholder":251},[321,166987,166988],{"class":323,"line":1401},[321,166989,2606],{"emptyLinePlaceholder":251},[321,166991,166992,166994,166996,166998,167000,167002,167004,167006,167008,167010,167012],{"class":323,"line":1407},[321,166993,116459],{"class":331},[321,166995,377],{"class":327},[321,166997,4654],{"class":331},[321,166999,62824],{"class":436},[321,167001,51582],{"class":331},[321,167003,150033],{"class":436},[321,167005,12642],{"class":331},[321,167007,69269],{"class":436},[321,167009,51582],{"class":331},[321,167011,982],{"class":380},[321,167013,1771],{"class":331},[321,167015,167016,167018,167020],{"class":323,"line":1421},[321,167017,166301],{"class":331},[321,167019,10868],{"class":327},[321,167021,167022],{"class":331},"info)\n",[14,167024,167026],{"id":167025},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167028,167029,167032],{},[318,167030,167031],{},"lambda"," 用于定义简单匿名函数。",[312,167034,167036],{"className":30523,"code":167035,"language":30525,"meta":30,"style":30},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[318,167037,167038,167055],{"__ignoreMap":30},[321,167039,167040,167043,167045,167048,167051,167053],{"class":323,"line":324},[321,167041,167042],{"class":331},"add ",[321,167044,377],{"class":327},[321,167046,167047],{"class":327}," lambda",[321,167049,167050],{"class":331}," a, b: a ",[321,167052,813],{"class":327},[321,167054,151249],{"class":331},[321,167056,167057,167059,167061,167063,167065,167067],{"class":323,"line":167},[321,167058,30560],{"class":380},[321,167060,166745],{"class":331},[321,167062,549],{"class":380},[321,167064,12642],{"class":331},[321,167066,409],{"class":380},[321,167068,30642],{"class":331},[19,167070,167071],{},"常和排序、过滤等函数一起使用。",[19,167073,167074],{},"按分数排序：",[312,167076,167078],{"className":30523,"code":167077,"language":30525,"meta":30,"style":30},"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",[318,167079,167080,167088,167108,167128,167148,167152,167156,167179],{"__ignoreMap":30},[321,167081,167082,167084,167086],{"class":323,"line":324},[321,167083,159861],{"class":331},[321,167085,377],{"class":327},[321,167087,55592],{"class":331},[321,167089,167090,167092,167094,167096,167098,167100,167102,167104,167106],{"class":323,"line":167},[321,167091,148530],{"class":331},[321,167093,62824],{"class":436},[321,167095,51582],{"class":331},[321,167097,150033],{"class":436},[321,167099,12642],{"class":331},[321,167101,151617],{"class":436},[321,167103,51582],{"class":331},[321,167105,1321],{"class":380},[321,167107,5136],{"class":331},[321,167109,167110,167112,167114,167116,167118,167120,167122,167124,167126],{"class":323,"line":200},[321,167111,148530],{"class":331},[321,167113,62824],{"class":436},[321,167115,51582],{"class":331},[321,167117,151081],{"class":436},[321,167119,12642],{"class":331},[321,167121,151617],{"class":436},[321,167123,51582],{"class":331},[321,167125,1143],{"class":380},[321,167127,5136],{"class":331},[321,167129,167130,167132,167134,167136,167138,167140,167142,167144,167146],{"class":323,"line":1401},[321,167131,148530],{"class":331},[321,167133,62824],{"class":436},[321,167135,51582],{"class":331},[321,167137,159876],{"class":436},[321,167139,12642],{"class":331},[321,167141,151617],{"class":436},[321,167143,51582],{"class":331},[321,167145,738],{"class":380},[321,167147,5136],{"class":331},[321,167149,167150],{"class":323,"line":1407},[321,167151,33391],{"class":331},[321,167153,167154],{"class":323,"line":1421},[321,167155,2606],{"emptyLinePlaceholder":251},[321,167157,167158,167161,167163,167165,167167,167169,167171,167173,167175,167177],{"class":323,"line":1427},[321,167159,167160],{"class":331},"students.sort(",[321,167162,154091],{"class":5423},[321,167164,154094],{"class":327},[321,167166,154097],{"class":331},[321,167168,151617],{"class":436},[321,167170,112347],{"class":331},[321,167172,163673],{"class":5423},[321,167174,377],{"class":327},[321,167176,31621],{"class":380},[321,167178,338],{"class":331},[321,167180,167181,167183],{"class":323,"line":1518},[321,167182,30560],{"class":380},[321,167184,165140],{"class":331},[19,167186,167187,167188,167190],{},"如果逻辑复杂，不要硬写 ",[318,167189,167031],{},"，定义普通函数更清晰。",[14,167192,167194],{"id":167193},"_79-函数作为参数","7.9 函数作为参数",[19,167196,167197],{},"函数可以作为参数传给另一个函数。",[312,167199,167201],{"className":30523,"code":167200,"language":30525,"meta":30,"style":30},"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",[318,167202,167203,167211,167221,167225,167229,167239,167246,167250,167254],{"__ignoreMap":30},[321,167204,167205,167207,167209],{"class":323,"line":324},[321,167206,32092],{"class":327},[321,167208,5416],{"class":2169},[321,167210,151238],{"class":331},[321,167212,167213,167215,167217,167219],{"class":323,"line":167},[321,167214,4296],{"class":327},[321,167216,11076],{"class":331},[321,167218,813],{"class":327},[321,167220,151249],{"class":331},[321,167222,167223],{"class":323,"line":200},[321,167224,2606],{"emptyLinePlaceholder":251},[321,167226,167227],{"class":323,"line":1401},[321,167228,2606],{"emptyLinePlaceholder":251},[321,167230,167231,167233,167236],{"class":323,"line":1407},[321,167232,32092],{"class":327},[321,167234,167235],{"class":2169}," calculate",[321,167237,167238],{"class":331},"(a, b, func):\n",[321,167240,167241,167243],{"class":323,"line":1421},[321,167242,4296],{"class":327},[321,167244,167245],{"class":331}," func(a, b)\n",[321,167247,167248],{"class":323,"line":1427},[321,167249,2606],{"emptyLinePlaceholder":251},[321,167251,167252],{"class":323,"line":1518},[321,167253,2606],{"emptyLinePlaceholder":251},[321,167255,167256,167258,167261,167263,167265,167267],{"class":323,"line":1524},[321,167257,30560],{"class":380},[321,167259,167260],{"class":331},"(calculate(",[321,167262,778],{"class":380},[321,167264,12642],{"class":331},[321,167266,1032],{"class":380},[321,167268,167269],{"class":331},", add))\n",[19,167271,167272],{},"这种思想在排序、回调、框架中经常出现。",[14,167274,167276],{"id":167275},"_710-mapfiltersorted","7.10 map、filter、sorted",[292,167278,167280],{"id":167279},"_7101-map","7.10.1 map",[19,167282,167283,167285],{},[318,167284,74189],{}," 对每个元素执行函数。",[312,167287,167289],{"className":30523,"code":167288,"language":30525,"meta":30,"style":30},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[318,167290,167291,167315,167338],{"__ignoreMap":30},[321,167292,167293,167295,167297,167299,167301,167303,167305,167307,167309,167311,167313],{"class":323,"line":324},[321,167294,164245],{"class":331},[321,167296,377],{"class":327},[321,167298,52371],{"class":331},[321,167300,549],{"class":380},[321,167302,12642],{"class":331},[321,167304,409],{"class":380},[321,167306,12642],{"class":331},[321,167308,403],{"class":380},[321,167310,12642],{"class":331},[321,167312,625],{"class":380},[321,167314,33391],{"class":331},[321,167316,167317,167319,167321,167324,167326,167328,167331,167333,167335],{"class":323,"line":167},[321,167318,161451],{"class":331},[321,167320,377],{"class":327},[321,167322,167323],{"class":380}," map",[321,167325,332],{"class":331},[321,167327,167031],{"class":327},[321,167329,167330],{"class":331}," x: x ",[321,167332,787],{"class":327},[321,167334,14962],{"class":380},[321,167336,167337],{"class":331},", nums)\n",[321,167339,167340,167342,167344,167346],{"class":323,"line":200},[321,167341,30560],{"class":380},[321,167343,332],{"class":331},[321,167345,154215],{"class":380},[321,167347,166213],{"class":331},[292,167349,167351],{"id":167350},"_7102-filter","7.10.2 filter",[19,167353,167354,167356],{},[318,167355,80196],{}," 保留满足条件的元素。",[312,167358,167360],{"className":30523,"code":167359,"language":30525,"meta":30,"style":30},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[318,167361,167362,167390,167415],{"__ignoreMap":30},[321,167363,167364,167366,167368,167370,167372,167374,167376,167378,167380,167382,167384,167386,167388],{"class":323,"line":324},[321,167365,164245],{"class":331},[321,167367,377],{"class":327},[321,167369,52371],{"class":331},[321,167371,549],{"class":380},[321,167373,12642],{"class":331},[321,167375,409],{"class":380},[321,167377,12642],{"class":331},[321,167379,403],{"class":380},[321,167381,12642],{"class":331},[321,167383,625],{"class":380},[321,167385,12642],{"class":331},[321,167387,651],{"class":380},[321,167389,33391],{"class":331},[321,167391,167392,167394,167396,167399,167401,167403,167405,167407,167409,167411,167413],{"class":323,"line":167},[321,167393,161451],{"class":331},[321,167395,377],{"class":327},[321,167397,167398],{"class":380}," filter",[321,167400,332],{"class":331},[321,167402,167031],{"class":327},[321,167404,167330],{"class":331},[321,167406,660],{"class":327},[321,167408,14962],{"class":380},[321,167410,101704],{"class":327},[321,167412,4299],{"class":380},[321,167414,167337],{"class":331},[321,167416,167417,167419,167421,167423],{"class":323,"line":200},[321,167418,30560],{"class":380},[321,167420,332],{"class":331},[321,167422,154215],{"class":380},[321,167424,166213],{"class":331},[292,167426,167428],{"id":167427},"_7103-sorted","7.10.3 sorted",[19,167430,167431,167433],{},[318,167432,165381],{}," 返回排序后的新列表。",[312,167435,167437],{"className":30523,"code":167436,"language":30525,"meta":30,"style":30},"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",[318,167438,167439,167447,167467,167487,167507,167511,167515,167544],{"__ignoreMap":30},[321,167440,167441,167443,167445],{"class":323,"line":324},[321,167442,159861],{"class":331},[321,167444,377],{"class":327},[321,167446,55592],{"class":331},[321,167448,167449,167451,167453,167455,167457,167459,167461,167463,167465],{"class":323,"line":167},[321,167450,148530],{"class":331},[321,167452,62824],{"class":436},[321,167454,51582],{"class":331},[321,167456,150033],{"class":436},[321,167458,12642],{"class":331},[321,167460,151617],{"class":436},[321,167462,51582],{"class":331},[321,167464,1321],{"class":380},[321,167466,5136],{"class":331},[321,167468,167469,167471,167473,167475,167477,167479,167481,167483,167485],{"class":323,"line":200},[321,167470,148530],{"class":331},[321,167472,62824],{"class":436},[321,167474,51582],{"class":331},[321,167476,151081],{"class":436},[321,167478,12642],{"class":331},[321,167480,151617],{"class":436},[321,167482,51582],{"class":331},[321,167484,1143],{"class":380},[321,167486,5136],{"class":331},[321,167488,167489,167491,167493,167495,167497,167499,167501,167503,167505],{"class":323,"line":1401},[321,167490,148530],{"class":331},[321,167492,62824],{"class":436},[321,167494,51582],{"class":331},[321,167496,159876],{"class":436},[321,167498,12642],{"class":331},[321,167500,151617],{"class":436},[321,167502,51582],{"class":331},[321,167504,738],{"class":380},[321,167506,5136],{"class":331},[321,167508,167509],{"class":323,"line":1407},[321,167510,33391],{"class":331},[321,167512,167513],{"class":323,"line":1421},[321,167514,2606],{"emptyLinePlaceholder":251},[321,167516,167517,167519,167521,167523,167526,167528,167530,167532,167534,167536,167538,167540,167542],{"class":323,"line":1427},[321,167518,161451],{"class":331},[321,167520,377],{"class":327},[321,167522,163749],{"class":380},[321,167524,167525],{"class":331},"(students, ",[321,167527,154091],{"class":5423},[321,167529,154094],{"class":327},[321,167531,154097],{"class":331},[321,167533,151617],{"class":436},[321,167535,112347],{"class":331},[321,167537,163673],{"class":5423},[321,167539,377],{"class":327},[321,167541,31621],{"class":380},[321,167543,338],{"class":331},[321,167545,167546,167548],{"class":323,"line":1518},[321,167547,30560],{"class":380},[321,167549,76730],{"class":331},[14,167551,167553],{"id":167552},"_711-闭包入门","7.11 闭包入门",[19,167555,167556],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[312,167558,167560],{"className":30523,"code":167559,"language":30525,"meta":30,"style":30},"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",[318,167561,167562,167572,167582,167593,167597,167604,167608,167612,167626],{"__ignoreMap":30},[321,167563,167564,167566,167569],{"class":323,"line":324},[321,167565,32092],{"class":327},[321,167567,167568],{"class":2169}," outer",[321,167570,167571],{"class":331},"(base):\n",[321,167573,167574,167576,167579],{"class":323,"line":167},[321,167575,30946],{"class":327},[321,167577,167578],{"class":2169}," inner",[321,167580,167581],{"class":331},"(num):\n",[321,167583,167584,167586,167589,167591],{"class":323,"line":200},[321,167585,14959],{"class":327},[321,167587,167588],{"class":331}," base ",[321,167590,813],{"class":327},[321,167592,166724],{"class":331},[321,167594,167595],{"class":323,"line":1401},[321,167596,2606],{"emptyLinePlaceholder":251},[321,167598,167599,167601],{"class":323,"line":1407},[321,167600,4296],{"class":327},[321,167602,167603],{"class":331}," inner\n",[321,167605,167606],{"class":323,"line":1421},[321,167607,2606],{"emptyLinePlaceholder":251},[321,167609,167610],{"class":323,"line":1427},[321,167611,2606],{"emptyLinePlaceholder":251},[321,167613,167614,167617,167619,167622,167624],{"class":323,"line":1518},[321,167615,167616],{"class":331},"add_10 ",[321,167618,377],{"class":327},[321,167620,167621],{"class":331}," outer(",[321,167623,778],{"class":380},[321,167625,338],{"class":331},[321,167627,167628,167630,167633,167635],{"class":323,"line":1524},[321,167629,30560],{"class":380},[321,167631,167632],{"class":331},"(add_10(",[321,167634,651],{"class":380},[321,167636,30642],{"class":331},[19,167638,167639],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167641,167643],{"id":167642},"_712-装饰器入门","7.12 装饰器入门",[19,167645,167646],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[312,167648,167650],{"className":30523,"code":167649,"language":30525,"meta":30,"style":30},"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",[318,167651,167652,167661,167670,167681,167686,167697,167701,167708,167712,167716,167721,167729,167739,167743,167747],{"__ignoreMap":30},[321,167653,167654,167656,167658],{"class":323,"line":324},[321,167655,32092],{"class":327},[321,167657,87336],{"class":2169},[321,167659,167660],{"class":331},"(func):\n",[321,167662,167663,167665,167668],{"class":323,"line":167},[321,167664,30946],{"class":327},[321,167666,167667],{"class":2169}," wrapper",[321,167669,32098],{"class":331},[321,167671,167672,167674,167676,167679],{"class":323,"line":200},[321,167673,32596],{"class":380},[321,167675,332],{"class":331},[321,167677,167678],{"class":436},"\"函数开始执行\"",[321,167680,338],{"class":331},[321,167682,167683],{"class":323,"line":1401},[321,167684,167685],{"class":331},"        func()\n",[321,167687,167688,167690,167692,167695],{"class":323,"line":1407},[321,167689,32596],{"class":380},[321,167691,332],{"class":331},[321,167693,167694],{"class":436},"\"函数执行结束\"",[321,167696,338],{"class":331},[321,167698,167699],{"class":323,"line":1421},[321,167700,2606],{"emptyLinePlaceholder":251},[321,167702,167703,167705],{"class":323,"line":1427},[321,167704,4296],{"class":327},[321,167706,167707],{"class":331}," wrapper\n",[321,167709,167710],{"class":323,"line":1518},[321,167711,2606],{"emptyLinePlaceholder":251},[321,167713,167714],{"class":323,"line":1524},[321,167715,2606],{"emptyLinePlaceholder":251},[321,167717,167718],{"class":323,"line":1536},[321,167719,167720],{"class":2169},"@log\n",[321,167722,167723,167725,167727],{"class":323,"line":1818},[321,167724,32092],{"class":327},[321,167726,161141],{"class":2169},[321,167728,32098],{"class":331},[321,167730,167731,167733,167735,167737],{"class":323,"line":1823},[321,167732,31444],{"class":380},[321,167734,332],{"class":331},[321,167736,6051],{"class":436},[321,167738,338],{"class":331},[321,167740,167741],{"class":323,"line":1829},[321,167742,2606],{"emptyLinePlaceholder":251},[321,167744,167745],{"class":323,"line":1834},[321,167746,2606],{"emptyLinePlaceholder":251},[321,167748,167749],{"class":323,"line":1848},[321,167750,161176],{"class":331},[19,167752,158419],{},[312,167754,167756],{"className":30523,"code":167755,"language":30525,"meta":30,"style":30},"say_hello = log(say_hello)\n",[318,167757,167758],{"__ignoreMap":30},[321,167759,167760,167763,167765],{"class":323,"line":324},[321,167761,167762],{"class":331},"say_hello ",[321,167764,377],{"class":327},[321,167766,167767],{"class":331}," log(say_hello)\n",[19,167769,167770],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167772,167774],{"id":167773},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[312,167776,167778],{"className":30523,"code":167777,"language":30525,"meta":30,"style":30},"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",[318,167779,167780,167788,167805,167815,167834,167844,167851,167855,167861,167865,167869,167873,167881,167891,167895,167899],{"__ignoreMap":30},[321,167781,167782,167784,167786],{"class":323,"line":324},[321,167783,32092],{"class":327},[321,167785,87336],{"class":2169},[321,167787,167660],{"class":331},[321,167789,167790,167792,167794,167796,167798,167801,167803],{"class":323,"line":167},[321,167791,30946],{"class":327},[321,167793,167667],{"class":2169},[321,167795,332],{"class":331},[321,167797,787],{"class":327},[321,167799,167800],{"class":331},"args, ",[321,167802,10868],{"class":327},[321,167804,166811],{"class":331},[321,167806,167807,167809,167811,167813],{"class":323,"line":200},[321,167808,32596],{"class":380},[321,167810,332],{"class":331},[321,167812,167678],{"class":436},[321,167814,338],{"class":331},[321,167816,167817,167820,167822,167825,167827,167829,167831],{"class":323,"line":1401},[321,167818,167819],{"class":331},"        result ",[321,167821,377],{"class":327},[321,167823,167824],{"class":331}," func(",[321,167826,787],{"class":327},[321,167828,167800],{"class":331},[321,167830,10868],{"class":327},[321,167832,167833],{"class":331},"kwargs)\n",[321,167835,167836,167838,167840,167842],{"class":323,"line":1407},[321,167837,32596],{"class":380},[321,167839,332],{"class":331},[321,167841,167694],{"class":436},[321,167843,338],{"class":331},[321,167845,167846,167848],{"class":323,"line":1421},[321,167847,14959],{"class":327},[321,167849,167850],{"class":331}," result\n",[321,167852,167853],{"class":323,"line":1427},[321,167854,2606],{"emptyLinePlaceholder":251},[321,167856,167857,167859],{"class":323,"line":1518},[321,167858,4296],{"class":327},[321,167860,167707],{"class":331},[321,167862,167863],{"class":323,"line":1524},[321,167864,2606],{"emptyLinePlaceholder":251},[321,167866,167867],{"class":323,"line":1536},[321,167868,2606],{"emptyLinePlaceholder":251},[321,167870,167871],{"class":323,"line":1818},[321,167872,167720],{"class":2169},[321,167874,167875,167877,167879],{"class":323,"line":1823},[321,167876,32092],{"class":327},[321,167878,5416],{"class":2169},[321,167880,151238],{"class":331},[321,167882,167883,167885,167887,167889],{"class":323,"line":1829},[321,167884,4296],{"class":327},[321,167886,11076],{"class":331},[321,167888,813],{"class":327},[321,167890,151249],{"class":331},[321,167892,167893],{"class":323,"line":1834},[321,167894,2606],{"emptyLinePlaceholder":251},[321,167896,167897],{"class":323,"line":1848},[321,167898,2606],{"emptyLinePlaceholder":251},[321,167900,167901,167903,167905,167907,167909,167911],{"class":323,"line":1853},[321,167902,30560],{"class":380},[321,167904,166745],{"class":331},[321,167906,778],{"class":380},[321,167908,12642],{"class":331},[321,167910,1032],{"class":380},[321,167912,30642],{"class":331},[19,167914,167915,167916,101163,167918,167920],{},"这个写法使用 ",[318,167917,166677],{},[318,167919,166792],{}," 接收原函数的所有参数。",[14,167922,167924],{"id":167923},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167926,123437],{},[151,167928,167929,167932,167935],{},[154,167930,167931],{},"给定一组学生数据。",[154,167933,167934],{},"封装函数，根据传入规则筛选学生。",[154,167936,167937],{},"筛选及格、优秀、未成年学生。",[19,167939,10242],{},[312,167941,167943],{"className":30523,"code":167942,"language":30525,"meta":30,"style":30},"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",[318,167944,167945,167953,167981,168009,168037,168041,168045,168049,168059,168067,168077,168084,168089,168095,168099,168103,168127,168150,168173,168177,168184,168191],{"__ignoreMap":30},[321,167946,167947,167949,167951],{"class":323,"line":324},[321,167948,159861],{"class":331},[321,167950,377],{"class":327},[321,167952,55592],{"class":331},[321,167954,167955,167957,167959,167961,167963,167965,167967,167969,167971,167973,167975,167977,167979],{"class":323,"line":167},[321,167956,148530],{"class":331},[321,167958,62824],{"class":436},[321,167960,51582],{"class":331},[321,167962,150033],{"class":436},[321,167964,12642],{"class":331},[321,167966,69269],{"class":436},[321,167968,51582],{"class":331},[321,167970,982],{"class":380},[321,167972,12642],{"class":331},[321,167974,151617],{"class":436},[321,167976,51582],{"class":331},[321,167978,1321],{"class":380},[321,167980,5136],{"class":331},[321,167982,167983,167985,167987,167989,167991,167993,167995,167997,167999,168001,168003,168005,168007],{"class":323,"line":200},[321,167984,148530],{"class":331},[321,167986,62824],{"class":436},[321,167988,51582],{"class":331},[321,167990,151081],{"class":436},[321,167992,12642],{"class":331},[321,167994,69269],{"class":436},[321,167996,51582],{"class":331},[321,167998,957],{"class":380},[321,168000,12642],{"class":331},[321,168002,151617],{"class":436},[321,168004,51582],{"class":331},[321,168006,1143],{"class":380},[321,168008,5136],{"class":331},[321,168010,168011,168013,168015,168017,168019,168021,168023,168025,168027,168029,168031,168033,168035],{"class":323,"line":1401},[321,168012,148530],{"class":331},[321,168014,62824],{"class":436},[321,168016,51582],{"class":331},[321,168018,159876],{"class":436},[321,168020,12642],{"class":331},[321,168022,69269],{"class":436},[321,168024,51582],{"class":331},[321,168026,1007],{"class":380},[321,168028,12642],{"class":331},[321,168030,151617],{"class":436},[321,168032,51582],{"class":331},[321,168034,1214],{"class":380},[321,168036,5136],{"class":331},[321,168038,168039],{"class":323,"line":1407},[321,168040,33391],{"class":331},[321,168042,168043],{"class":323,"line":1421},[321,168044,2606],{"emptyLinePlaceholder":251},[321,168046,168047],{"class":323,"line":1427},[321,168048,2606],{"emptyLinePlaceholder":251},[321,168050,168051,168053,168056],{"class":323,"line":1518},[321,168052,32092],{"class":327},[321,168054,168055],{"class":2169}," filter_students",[321,168057,168058],{"class":331},"(students, condition):\n",[321,168060,168061,168063,168065],{"class":323,"line":1524},[321,168062,161368],{"class":331},[321,168064,377],{"class":327},[321,168066,51983],{"class":331},[321,168068,168069,168071,168073,168075],{"class":323,"line":1536},[321,168070,3407],{"class":327},[321,168072,152282],{"class":331},[321,168074,26188],{"class":327},[321,168076,152287],{"class":331},[321,168078,168079,168081],{"class":323,"line":1818},[321,168080,2703],{"class":327},[321,168082,168083],{"class":331}," condition(student):\n",[321,168085,168086],{"class":323,"line":1823},[321,168087,168088],{"class":331},"            result.append(student)\n",[321,168090,168091,168093],{"class":323,"line":1829},[321,168092,4296],{"class":327},[321,168094,167850],{"class":331},[321,168096,168097],{"class":323,"line":1834},[321,168098,2606],{"emptyLinePlaceholder":251},[321,168100,168101],{"class":323,"line":1848},[321,168102,2606],{"emptyLinePlaceholder":251},[321,168104,168105,168107,168109,168112,168114,168117,168119,168121,168123,168125],{"class":323,"line":1853},[321,168106,165846],{"class":331},[321,168108,377],{"class":327},[321,168110,168111],{"class":331}," filter_students(students, ",[321,168113,167031],{"class":327},[321,168115,168116],{"class":331}," s: s[",[321,168118,151617],{"class":436},[321,168120,4649],{"class":331},[321,168122,1916],{"class":327},[321,168124,157982],{"class":380},[321,168126,338],{"class":331},[321,168128,168129,168132,168134,168136,168138,168140,168142,168144,168146,168148],{"class":323,"line":1859},[321,168130,168131],{"class":331},"excellent ",[321,168133,377],{"class":327},[321,168135,168111],{"class":331},[321,168137,167031],{"class":327},[321,168139,168116],{"class":331},[321,168141,151617],{"class":436},[321,168143,4649],{"class":331},[321,168145,1916],{"class":327},[321,168147,157933],{"class":380},[321,168149,338],{"class":331},[321,168151,168152,168155,168157,168159,168161,168163,168165,168167,168169,168171],{"class":323,"line":1880},[321,168153,168154],{"class":331},"under_age ",[321,168156,377],{"class":327},[321,168158,168111],{"class":331},[321,168160,167031],{"class":327},[321,168162,168116],{"class":331},[321,168164,69269],{"class":436},[321,168166,4649],{"class":331},[321,168168,1242],{"class":327},[321,168170,156430],{"class":380},[321,168172,338],{"class":331},[321,168174,168175],{"class":323,"line":1885},[321,168176,2606],{"emptyLinePlaceholder":251},[321,168178,168179,168181],{"class":323,"line":1899},[321,168180,30560],{"class":380},[321,168182,168183],{"class":331},"(passed)\n",[321,168185,168186,168188],{"class":323,"line":1904},[321,168187,30560],{"class":380},[321,168189,168190],{"class":331},"(excellent)\n",[321,168192,168193,168195],{"class":323,"line":1933},[321,168194,30560],{"class":380},[321,168196,168197],{"class":331},"(under_age)\n",[14,168199,168201],{"id":168200},"_715-易错点","7.15 易错点",[151,168203,168204,168207,168215,168220,168231],{},[154,168205,168206],{},"默认参数不要写可变对象。",[154,168208,168209,168211,168212,168214],{},[318,168210,166677],{}," 是元组，",[318,168213,166792],{}," 是字典。",[154,168216,168217,168219],{},[318,168218,167031],{}," 只适合简单表达式。",[154,168221,168222,101163,168224,168226,168227,168230],{},[318,168223,74189],{},[318,168225,80196],{}," 的结果是迭代器，常用 ",[318,168228,168229],{},"list()"," 转换查看。",[154,168232,168233],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168235,168237],{"id":168236},"_716-本章练习","7.16 本章练习",[151,168239,168240,168247,168253,168258,168263],{},[154,168241,168242,168243,168246],{},"写函数 ",[318,168244,168245],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[154,168248,168242,168249,168252],{},[318,168250,168251],{},"print_user(**kwargs)","，输出用户所有字段。",[154,168254,104511,168255,168257],{},[318,168256,167031],{}," 对学生列表按年龄排序。",[154,168259,104511,168260,168262],{},[318,168261,80196],{}," 找出成绩不及格的学生。",[154,168264,168265],{},"写一个装饰器，统计函数执行前后的提示信息。",[5333,168267,168268],{},"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":30,"searchDepth":167,"depth":167,"links":168270},[168271,168272,168273,168274,168275,168276,168280,168281,168282,168283,168288,168289,168290,168291,168292,168293],{"id":166129,"depth":167,"text":166130},{"id":166243,"depth":167,"text":166244},{"id":166332,"depth":167,"text":166333},{"id":166394,"depth":167,"text":166395},{"id":166540,"depth":167,"text":166541},{"id":166667,"depth":167,"text":166668,"children":168277},[168278,168279],{"id":166671,"depth":200,"text":166672},{"id":166786,"depth":200,"text":166787},{"id":166867,"depth":167,"text":166868},{"id":167025,"depth":167,"text":167026},{"id":167193,"depth":167,"text":167194},{"id":167275,"depth":167,"text":167276,"children":168284},[168285,168286,168287],{"id":167279,"depth":200,"text":167280},{"id":167350,"depth":200,"text":167351},{"id":167427,"depth":200,"text":167428},{"id":167552,"depth":167,"text":167553},{"id":167642,"depth":167,"text":167643},{"id":167773,"depth":167,"text":167774},{"id":167923,"depth":167,"text":167924},{"id":168200,"depth":167,"text":168201},{"id":168236,"depth":167,"text":168237},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166121,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168300,"title":168301,"body":168302,"description":23584,"extension":249,"meta":170821,"navigation":251,"path":170822,"seo":170823,"stem":170824,"__hash__":170825},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168303,"toc":170796},[168304,168307,168311,168314,168317,168348,168352,168356,168359,168386,168390,168393,168444,168447,168462,168465,168500,168504,168506,168530,168533,168593,168597,168601,168604,168661,168664,168684,168688,168691,168754,168758,168761,168817,168824,168848,168852,168855,168918,168922,168927,168978,168981,168985,168990,169057,169060,169142,169146,169151,169202,169205,169209,169212,169215,169223,169226,169272,169275,169321,169325,169331,169375,169378,169424,169427,169467,169470,169531,169535,169538,169628,169631,169773,169776,169843,169847,169850,169853,169994,169997,170075,170078,170254,170258,170260,170271,170273,170472,170476,170720,170724,170758,170762,170793],[10,168305,168301],{"id":168306},"_8-文件操作",[14,168308,168310],{"id":168309},"_81-文件操作的意义","8.1 文件操作的意义",[19,168312,168313],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168315,168316],{},"常见文件类型：",[151,168318,168319,168325,168331,168337,168343],{},[154,168320,168321,168324],{},[318,168322,168323],{},".txt","：普通文本。",[154,168326,168327,168330],{},[318,168328,168329],{},".csv","：表格文本。",[154,168332,168333,168336],{},[318,168334,168335],{},".json","：结构化数据。",[154,168338,168339,168342],{},[318,168340,168341],{},".log","：日志文件。",[154,168344,168345,168347],{},[318,168346,146497],{},"：Python 源代码。",[14,168349,168351],{"id":168350},"_82-路径","8.2 路径",[292,168353,168355],{"id":168354},"_821-相对路径","8.2.1 相对路径",[19,168357,168358],{},"相对当前运行目录：",[312,168360,168362],{"className":30523,"code":168361,"language":30525,"meta":30,"style":30},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[318,168363,168364],{"__ignoreMap":30},[321,168365,168366,168368,168370,168372,168374,168376,168378,168380,168382,168384],{"class":323,"line":324},[321,168367,87060],{"class":380},[321,168369,332],{"class":331},[321,168371,146941],{"class":436},[321,168373,12642],{"class":331},[321,168375,146946],{"class":436},[321,168377,12642],{"class":331},[321,168379,146951],{"class":5423},[321,168381,377],{"class":327},[321,168383,146956],{"class":436},[321,168385,338],{"class":331},[292,168387,168389],{"id":168388},"_822-绝对路径","8.2.2 绝对路径",[19,168391,168392],{},"从根目录或盘符开始：",[312,168394,168396],{"className":30523,"code":168395,"language":30525,"meta":30,"style":30},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[318,168397,168398,168421],{"__ignoreMap":30},[321,168399,168400,168402,168404,168407,168409,168411,168413,168415,168417,168419],{"class":323,"line":324},[321,168401,87060],{"class":380},[321,168403,332],{"class":331},[321,168405,168406],{"class":436},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[321,168408,12642],{"class":331},[321,168410,146946],{"class":436},[321,168412,12642],{"class":331},[321,168414,146951],{"class":5423},[321,168416,377],{"class":327},[321,168418,146956],{"class":436},[321,168420,338],{"class":331},[321,168422,168423,168425,168427,168430,168432,168434,168436,168438,168440,168442],{"class":323,"line":167},[321,168424,87060],{"class":380},[321,168426,332],{"class":331},[321,168428,168429],{"class":436},"\"D:\u002Fdata\u002Fdata.txt\"",[321,168431,12642],{"class":331},[321,168433,146946],{"class":436},[321,168435,12642],{"class":331},[321,168437,146951],{"class":5423},[321,168439,377],{"class":327},[321,168441,146956],{"class":436},[321,168443,338],{"class":331},[19,168445,168446],{},"Windows 路径建议写成：",[312,168448,168450],{"className":30523,"code":168449,"language":30525,"meta":30,"style":30},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[318,168451,168452],{"__ignoreMap":30},[321,168453,168454,168457,168459],{"class":323,"line":324},[321,168455,168456],{"class":331},"path ",[321,168458,377],{"class":327},[321,168460,168461],{"class":436}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168463,168464],{},"或原始字符串：",[312,168466,168468],{"className":30523,"code":168467,"language":30525,"meta":30,"style":30},"path = r\"D:\\data\\data.txt\"\n",[318,168469,168470],{"__ignoreMap":30},[321,168471,168472,168474,168476,168478,168480,168483,168486,168489,168491,168493,168495,168498],{"class":323,"line":324},[321,168473,168456],{"class":331},[321,168475,377],{"class":327},[321,168477,17328],{"class":327},[321,168479,583],{"class":436},[321,168481,168482],{"class":48122},"D:",[321,168484,168485],{"class":380},"\\d",[321,168487,168488],{"class":48122},"ata",[321,168490,168485],{"class":380},[321,168492,168488],{"class":48122},[321,168494,890],{"class":380},[321,168496,168497],{"class":48122},"txt",[321,168499,25278],{"class":436},[14,168501,168503],{"id":168502},"_83-open函数","8.3 open函数",[19,168505,5388],{},[312,168507,168509],{"className":30523,"code":168508,"language":30525,"meta":30,"style":30},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[318,168510,168511],{"__ignoreMap":30},[321,168512,168513,168515,168517,168519,168522,168524,168526,168528],{"class":323,"line":324},[321,168514,45499],{"class":5423},[321,168516,13771],{"class":327},[321,168518,146936],{"class":380},[321,168520,168521],{"class":331},"(文件路径, 打开模式, ",[321,168523,146951],{"class":5423},[321,168525,377],{"class":327},[321,168527,146956],{"class":436},[321,168529,338],{"class":331},[19,168531,168532],{},"常见模式：",[469,168534,168535,168544],{},[472,168536,168537],{},[475,168538,168539,168542],{},[478,168540,168541],{},"模式",[478,168543,26014],{},[516,168545,168546,168555,168564,168573,168583],{},[475,168547,168548,168552],{},[521,168549,168550],{},[318,168551,1002],{},[521,168553,168554],{},"只读，文件不存在会报错",[475,168556,168557,168561],{},[521,168558,168559],{},[318,168560,1127],{},[521,168562,168563],{},"只写，文件不存在会创建，存在会清空",[475,168565,168566,168570],{},[521,168567,168568],{},[318,168569,570],{},[521,168571,168572],{},"追加，文件不存在会创建",[475,168574,168575,168580],{},[521,168576,168577],{},[318,168578,168579],{},"rb",[521,168581,168582],{},"二进制只读",[475,168584,168585,168590],{},[521,168586,168587],{},[318,168588,168589],{},"wb",[521,168591,168592],{},"二进制只写",[14,168594,168596],{"id":168595},"_84-读取文件","8.4 读取文件",[292,168598,168600],{"id":168599},"_841-read","8.4.1 read",[19,168602,168603],{},"一次读取全部内容：",[312,168605,168607],{"className":30523,"code":168606,"language":30525,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[318,168608,168609,168635,168647,168654],{"__ignoreMap":30},[321,168610,168611,168613,168615,168617,168619,168621,168623,168625,168627,168629,168631,168633],{"class":323,"line":324},[321,168612,45499],{"class":5423},[321,168614,13771],{"class":327},[321,168616,146936],{"class":380},[321,168618,332],{"class":331},[321,168620,146941],{"class":436},[321,168622,12642],{"class":331},[321,168624,146946],{"class":436},[321,168626,12642],{"class":331},[321,168628,146951],{"class":5423},[321,168630,377],{"class":327},[321,168632,146956],{"class":436},[321,168634,338],{"class":331},[321,168636,168637,168640,168642,168644],{"class":323,"line":167},[321,168638,168639],{"class":331},"content ",[321,168641,377],{"class":327},[321,168643,148298],{"class":5423},[321,168645,168646],{"class":331},".read()\n",[321,168648,168649,168651],{"class":323,"line":200},[321,168650,30560],{"class":380},[321,168652,168653],{"class":331},"(content)\n",[321,168655,168656,168658],{"class":323,"line":1401},[321,168657,45499],{"class":5423},[321,168659,168660],{"class":331},".close()\n",[19,168662,168663],{},"可以指定读取字符数：",[312,168665,168667],{"className":30523,"code":168666,"language":30525,"meta":30,"style":30},"content = file.read(10)\n",[318,168668,168669],{"__ignoreMap":30},[321,168670,168671,168673,168675,168677,168680,168682],{"class":323,"line":324},[321,168672,168639],{"class":331},[321,168674,377],{"class":327},[321,168676,148298],{"class":5423},[321,168678,168679],{"class":331},".read(",[321,168681,778],{"class":380},[321,168683,338],{"class":331},[292,168685,168687],{"id":168686},"_842-readline","8.4.2 readline",[19,168689,168690],{},"一次读取一行：",[312,168692,168694],{"className":30523,"code":168693,"language":30525,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[318,168695,168696,168722,168726,168737,168744,168748],{"__ignoreMap":30},[321,168697,168698,168700,168702,168704,168706,168708,168710,168712,168714,168716,168718,168720],{"class":323,"line":324},[321,168699,45499],{"class":5423},[321,168701,13771],{"class":327},[321,168703,146936],{"class":380},[321,168705,332],{"class":331},[321,168707,146941],{"class":436},[321,168709,12642],{"class":331},[321,168711,146946],{"class":436},[321,168713,12642],{"class":331},[321,168715,146951],{"class":5423},[321,168717,377],{"class":327},[321,168719,146956],{"class":436},[321,168721,338],{"class":331},[321,168723,168724],{"class":323,"line":167},[321,168725,2606],{"emptyLinePlaceholder":251},[321,168727,168728,168730,168732,168734],{"class":323,"line":200},[321,168729,147397],{"class":331},[321,168731,377],{"class":327},[321,168733,148298],{"class":5423},[321,168735,168736],{"class":331},".readline()\n",[321,168738,168739,168741],{"class":323,"line":1401},[321,168740,30560],{"class":380},[321,168742,168743],{"class":331},"(line)\n",[321,168745,168746],{"class":323,"line":1407},[321,168747,2606],{"emptyLinePlaceholder":251},[321,168749,168750,168752],{"class":323,"line":1421},[321,168751,45499],{"class":5423},[321,168753,168660],{"class":331},[292,168755,168757],{"id":168756},"_843-readlines","8.4.3 readlines",[19,168759,168760],{},"读取所有行，返回列表：",[312,168762,168764],{"className":30523,"code":168763,"language":30525,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[318,168765,168766,168792,168804,168811],{"__ignoreMap":30},[321,168767,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790],{"class":323,"line":324},[321,168769,45499],{"class":5423},[321,168771,13771],{"class":327},[321,168773,146936],{"class":380},[321,168775,332],{"class":331},[321,168777,146941],{"class":436},[321,168779,12642],{"class":331},[321,168781,146946],{"class":436},[321,168783,12642],{"class":331},[321,168785,146951],{"class":5423},[321,168787,377],{"class":327},[321,168789,146956],{"class":436},[321,168791,338],{"class":331},[321,168793,168794,168797,168799,168801],{"class":323,"line":167},[321,168795,168796],{"class":331},"lines ",[321,168798,377],{"class":327},[321,168800,148298],{"class":5423},[321,168802,168803],{"class":331},".readlines()\n",[321,168805,168806,168808],{"class":323,"line":200},[321,168807,30560],{"class":380},[321,168809,168810],{"class":331},"(lines)\n",[321,168812,168813,168815],{"class":323,"line":1401},[321,168814,45499],{"class":5423},[321,168816,168660],{"class":331},[19,168818,168819,168820,168823],{},"每一行通常带有换行符，可以用 ",[318,168821,168822],{},"strip()"," 去掉：",[312,168825,168827],{"className":30523,"code":168826,"language":30525,"meta":30,"style":30},"for line in lines:\n    print(line.strip())\n",[318,168828,168829,168841],{"__ignoreMap":30},[321,168830,168831,168833,168836,168838],{"class":323,"line":324},[321,168832,3231],{"class":327},[321,168834,168835],{"class":331}," line ",[321,168837,26188],{"class":327},[321,168839,168840],{"class":331}," lines:\n",[321,168842,168843,168845],{"class":323,"line":167},[321,168844,31444],{"class":380},[321,168846,168847],{"class":331},"(line.strip())\n",[292,168849,168851],{"id":168850},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168853,168854],{},"推荐读取大文件时使用：",[312,168856,168858],{"className":30523,"code":168857,"language":30525,"meta":30,"style":30},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[318,168859,168860,168886,168890,168902,168908,168912],{"__ignoreMap":30},[321,168861,168862,168864,168866,168868,168870,168872,168874,168876,168878,168880,168882,168884],{"class":323,"line":324},[321,168863,45499],{"class":5423},[321,168865,13771],{"class":327},[321,168867,146936],{"class":380},[321,168869,332],{"class":331},[321,168871,146941],{"class":436},[321,168873,12642],{"class":331},[321,168875,146946],{"class":436},[321,168877,12642],{"class":331},[321,168879,146951],{"class":5423},[321,168881,377],{"class":327},[321,168883,146956],{"class":436},[321,168885,338],{"class":331},[321,168887,168888],{"class":323,"line":167},[321,168889,2606],{"emptyLinePlaceholder":251},[321,168891,168892,168894,168896,168898,168900],{"class":323,"line":200},[321,168893,3231],{"class":327},[321,168895,168835],{"class":331},[321,168897,26188],{"class":327},[321,168899,148298],{"class":5423},[321,168901,3945],{"class":331},[321,168903,168904,168906],{"class":323,"line":1401},[321,168905,31444],{"class":380},[321,168907,168847],{"class":331},[321,168909,168910],{"class":323,"line":1407},[321,168911,2606],{"emptyLinePlaceholder":251},[321,168913,168914,168916],{"class":323,"line":1421},[321,168915,45499],{"class":5423},[321,168917,168660],{"class":331},[14,168919,168921],{"id":168920},"_85-with语句","8.5 with语句",[19,168923,168924,168926],{},[318,168925,107978],{}," 会自动关闭文件，推荐使用。",[312,168928,168930],{"className":30523,"code":168929,"language":30525,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[318,168931,168932,168962,168972],{"__ignoreMap":30},[321,168933,168934,168936,168938,168940,168942,168944,168946,168948,168950,168952,168954,168956,168958,168960],{"class":323,"line":324},[321,168935,107978],{"class":327},[321,168937,146936],{"class":380},[321,168939,332],{"class":331},[321,168941,146941],{"class":436},[321,168943,12642],{"class":331},[321,168945,146946],{"class":436},[321,168947,12642],{"class":331},[321,168949,146951],{"class":5423},[321,168951,377],{"class":327},[321,168953,146956],{"class":436},[321,168955,13921],{"class":331},[321,168957,31528],{"class":327},[321,168959,148298],{"class":5423},[321,168961,3945],{"class":331},[321,168963,168964,168966,168968,168970],{"class":323,"line":167},[321,168965,146968],{"class":331},[321,168967,377],{"class":327},[321,168969,148298],{"class":5423},[321,168971,168646],{"class":331},[321,168973,168974,168976],{"class":323,"line":200},[321,168975,31444],{"class":380},[321,168977,168653],{"class":331},[19,168979,168980],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168982,168984],{"id":168983},"_86-写入文件","8.6 写入文件",[19,168986,168987,168989],{},[318,168988,1127],{}," 模式会清空原文件。",[312,168991,168993],{"className":30523,"code":168992,"language":30525,"meta":30,"style":30},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[318,168994,168995,169025,169042],{"__ignoreMap":30},[321,168996,168997,168999,169001,169003,169005,169007,169009,169011,169013,169015,169017,169019,169021,169023],{"class":323,"line":324},[321,168998,107978],{"class":327},[321,169000,146936],{"class":380},[321,169002,332],{"class":331},[321,169004,146941],{"class":436},[321,169006,12642],{"class":331},[321,169008,152121],{"class":436},[321,169010,12642],{"class":331},[321,169012,146951],{"class":5423},[321,169014,377],{"class":327},[321,169016,146956],{"class":436},[321,169018,13921],{"class":331},[321,169020,31528],{"class":327},[321,169022,148298],{"class":5423},[321,169024,3945],{"class":331},[321,169026,169027,169030,169033,169036,169038,169040],{"class":323,"line":167},[321,169028,169029],{"class":5423},"    file",[321,169031,169032],{"class":331},".write(",[321,169034,169035],{"class":436},"\"hello",[321,169037,156670],{"class":380},[321,169039,583],{"class":436},[321,169041,338],{"class":331},[321,169043,169044,169046,169048,169051,169053,169055],{"class":323,"line":200},[321,169045,169029],{"class":5423},[321,169047,169032],{"class":331},[321,169049,169050],{"class":436},"\"python",[321,169052,156670],{"class":380},[321,169054,583],{"class":436},[321,169056,338],{"class":331},[19,169058,169059],{},"写入多行：",[312,169061,169063],{"className":30523,"code":169062,"language":30525,"meta":30,"style":30},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[318,169064,169065,169100,169104,169135],{"__ignoreMap":30},[321,169066,169067,169069,169071,169073,169076,169078,169080,169082,169085,169087,169089,169091,169094,169096,169098],{"class":323,"line":324},[321,169068,168796],{"class":331},[321,169070,377],{"class":327},[321,169072,52371],{"class":331},[321,169074,169075],{"class":436},"\"小明,18",[321,169077,156670],{"class":380},[321,169079,583],{"class":436},[321,169081,12642],{"class":331},[321,169083,169084],{"class":436},"\"小红,17",[321,169086,156670],{"class":380},[321,169088,583],{"class":436},[321,169090,12642],{"class":331},[321,169092,169093],{"class":436},"\"小刚,19",[321,169095,156670],{"class":380},[321,169097,583],{"class":436},[321,169099,33391],{"class":331},[321,169101,169102],{"class":323,"line":167},[321,169103,2606],{"emptyLinePlaceholder":251},[321,169105,169106,169108,169110,169112,169115,169117,169119,169121,169123,169125,169127,169129,169131,169133],{"class":323,"line":200},[321,169107,107978],{"class":327},[321,169109,146936],{"class":380},[321,169111,332],{"class":331},[321,169113,169114],{"class":436},"\"students.txt\"",[321,169116,12642],{"class":331},[321,169118,152121],{"class":436},[321,169120,12642],{"class":331},[321,169122,146951],{"class":5423},[321,169124,377],{"class":327},[321,169126,146956],{"class":436},[321,169128,13921],{"class":331},[321,169130,31528],{"class":327},[321,169132,148298],{"class":5423},[321,169134,3945],{"class":331},[321,169136,169137,169139],{"class":323,"line":1401},[321,169138,169029],{"class":5423},[321,169140,169141],{"class":331},".writelines(lines)\n",[14,169143,169145],{"id":169144},"_87-追加文件","8.7 追加文件",[19,169147,169148,169150],{},[318,169149,570],{}," 模式不会清空原内容，而是在末尾追加。",[312,169152,169154],{"className":30523,"code":169153,"language":30525,"meta":30,"style":30},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[318,169155,169156,169187],{"__ignoreMap":30},[321,169157,169158,169160,169162,169164,169167,169169,169171,169173,169175,169177,169179,169181,169183,169185],{"class":323,"line":324},[321,169159,107978],{"class":327},[321,169161,146936],{"class":380},[321,169163,332],{"class":331},[321,169165,169166],{"class":436},"\"log.txt\"",[321,169168,12642],{"class":331},[321,169170,165470],{"class":436},[321,169172,12642],{"class":331},[321,169174,146951],{"class":5423},[321,169176,377],{"class":327},[321,169178,146956],{"class":436},[321,169180,13921],{"class":331},[321,169182,31528],{"class":327},[321,169184,148298],{"class":5423},[321,169186,3945],{"class":331},[321,169188,169189,169191,169193,169196,169198,169200],{"class":323,"line":167},[321,169190,169029],{"class":5423},[321,169192,169032],{"class":331},[321,169194,169195],{"class":436},"\"程序启动",[321,169197,156670],{"class":380},[321,169199,583],{"class":436},[321,169201,338],{"class":331},[19,169203,169204],{},"日志类文件常用追加模式。",[14,169206,169208],{"id":169207},"_88-文件编码","8.8 文件编码",[19,169210,169211],{},"编码决定文字如何保存为字节。",[19,169213,169214],{},"常见编码：",[151,169216,169217,169220],{},[154,169218,169219],{},"UTF-8：推荐。",[154,169221,169222],{},"GBK：部分 Windows 中文文件常见。",[19,169224,169225],{},"读取文件乱码时，可以尝试：",[312,169227,169229],{"className":30523,"code":169228,"language":30525,"meta":30,"style":30},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[318,169230,169231,169262],{"__ignoreMap":30},[321,169232,169233,169235,169237,169239,169241,169243,169245,169247,169249,169251,169254,169256,169258,169260],{"class":323,"line":324},[321,169234,107978],{"class":327},[321,169236,146936],{"class":380},[321,169238,332],{"class":331},[321,169240,146941],{"class":436},[321,169242,12642],{"class":331},[321,169244,146946],{"class":436},[321,169246,12642],{"class":331},[321,169248,146951],{"class":5423},[321,169250,377],{"class":327},[321,169252,169253],{"class":436},"\"gbk\"",[321,169255,13921],{"class":331},[321,169257,31528],{"class":327},[321,169259,148298],{"class":5423},[321,169261,3945],{"class":331},[321,169263,169264,169266,169268,169270],{"class":323,"line":167},[321,169265,146968],{"class":331},[321,169267,377],{"class":327},[321,169269,148298],{"class":5423},[321,169271,168646],{"class":331},[19,169273,169274],{},"写文件时建议统一 UTF-8：",[312,169276,169278],{"className":30523,"code":169277,"language":30525,"meta":30,"style":30},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[318,169279,169280,169310],{"__ignoreMap":30},[321,169281,169282,169284,169286,169288,169290,169292,169294,169296,169298,169300,169302,169304,169306,169308],{"class":323,"line":324},[321,169283,107978],{"class":327},[321,169285,146936],{"class":380},[321,169287,332],{"class":331},[321,169289,146941],{"class":436},[321,169291,12642],{"class":331},[321,169293,152121],{"class":436},[321,169295,12642],{"class":331},[321,169297,146951],{"class":5423},[321,169299,377],{"class":327},[321,169301,146956],{"class":436},[321,169303,13921],{"class":331},[321,169305,31528],{"class":327},[321,169307,148298],{"class":5423},[321,169309,3945],{"class":331},[321,169311,169312,169314,169316,169319],{"class":323,"line":167},[321,169313,169029],{"class":5423},[321,169315,169032],{"class":331},[321,169317,169318],{"class":436},"\"中文内容\"",[321,169320,338],{"class":331},[14,169322,169324],{"id":169323},"_89-pathlib","8.9 pathlib",[19,169326,169327,169330],{},[318,169328,169329],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[312,169332,169334],{"className":30523,"code":169333,"language":30525,"meta":30,"style":30},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[318,169335,169336,169346,169350,169368],{"__ignoreMap":30},[321,169337,169338,169340,169342,169344],{"class":323,"line":324},[321,169339,30882],{"class":327},[321,169341,108456],{"class":331},[321,169343,30537],{"class":327},[321,169345,108461],{"class":331},[321,169347,169348],{"class":323,"line":167},[321,169349,2606],{"emptyLinePlaceholder":251},[321,169351,169352,169354,169356,169358,169361,169363,169365],{"class":323,"line":200},[321,169353,168456],{"class":331},[321,169355,377],{"class":327},[321,169357,108690],{"class":331},[321,169359,169360],{"class":436},"\"data\"",[321,169362,13921],{"class":331},[321,169364,916],{"class":327},[321,169366,169367],{"class":436}," \"students.txt\"\n",[321,169369,169370,169372],{"class":323,"line":1401},[321,169371,30560],{"class":380},[321,169373,169374],{"class":331},"(path)\n",[19,169376,169377],{},"创建目录：",[312,169379,169381],{"className":30523,"code":169380,"language":30525,"meta":30,"style":30},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[318,169382,169383,169393,169397,169410],{"__ignoreMap":30},[321,169384,169385,169387,169389,169391],{"class":323,"line":324},[321,169386,30882],{"class":327},[321,169388,108456],{"class":331},[321,169390,30537],{"class":327},[321,169392,108461],{"class":331},[321,169394,169395],{"class":323,"line":167},[321,169396,2606],{"emptyLinePlaceholder":251},[321,169398,169399,169402,169404,169406,169408],{"class":323,"line":200},[321,169400,169401],{"class":331},"data_dir ",[321,169403,377],{"class":327},[321,169405,108690],{"class":331},[321,169407,169360],{"class":436},[321,169409,338],{"class":331},[321,169411,169412,169415,169418,169420,169422],{"class":323,"line":1401},[321,169413,169414],{"class":331},"data_dir.mkdir(",[321,169416,169417],{"class":5423},"exist_ok",[321,169419,377],{"class":327},[321,169421,31621],{"class":380},[321,169423,338],{"class":331},[19,169425,169426],{},"判断文件是否存在：",[312,169428,169430],{"className":30523,"code":169429,"language":30525,"meta":30,"style":30},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[318,169431,169432,169445,169449,169456],{"__ignoreMap":30},[321,169433,169434,169436,169438,169440,169443],{"class":323,"line":324},[321,169435,168456],{"class":331},[321,169437,377],{"class":327},[321,169439,108690],{"class":331},[321,169441,169442],{"class":436},"\"data\u002Fstudents.txt\"",[321,169444,338],{"class":331},[321,169446,169447],{"class":323,"line":167},[321,169448,2606],{"emptyLinePlaceholder":251},[321,169450,169451,169453],{"class":323,"line":200},[321,169452,1737],{"class":327},[321,169454,169455],{"class":331}," path.exists():\n",[321,169457,169458,169460,169462,169465],{"class":323,"line":1401},[321,169459,31444],{"class":380},[321,169461,332],{"class":331},[321,169463,169464],{"class":436},"\"文件存在\"",[321,169466,338],{"class":331},[19,169468,169469],{},"读写文本：",[312,169471,169473],{"className":30523,"code":169472,"language":30525,"meta":30,"style":30},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[318,169474,169475,169487,169491,169508,169525],{"__ignoreMap":30},[321,169476,169477,169479,169481,169483,169485],{"class":323,"line":324},[321,169478,168456],{"class":331},[321,169480,377],{"class":327},[321,169482,108690],{"class":331},[321,169484,146941],{"class":436},[321,169486,338],{"class":331},[321,169488,169489],{"class":323,"line":167},[321,169490,2606],{"emptyLinePlaceholder":251},[321,169492,169493,169496,169498,169500,169502,169504,169506],{"class":323,"line":200},[321,169494,169495],{"class":331},"path.write_text(",[321,169497,146021],{"class":436},[321,169499,12642],{"class":331},[321,169501,146951],{"class":5423},[321,169503,377],{"class":327},[321,169505,146956],{"class":436},[321,169507,338],{"class":331},[321,169509,169510,169512,169514,169517,169519,169521,169523],{"class":323,"line":1401},[321,169511,168639],{"class":331},[321,169513,377],{"class":327},[321,169515,169516],{"class":331}," path.read_text(",[321,169518,146951],{"class":5423},[321,169520,377],{"class":327},[321,169522,146956],{"class":436},[321,169524,338],{"class":331},[321,169526,169527,169529],{"class":323,"line":1407},[321,169528,30560],{"class":380},[321,169530,168653],{"class":331},[14,169532,169534],{"id":169533},"_810-json文件","8.10 JSON文件",[19,169536,169537],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[312,169539,169541],{"className":30523,"code":169540,"language":30525,"meta":30,"style":30},"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",[318,169542,169543,169549,169553,169561,169571,169581,169589,169593,169597,169622],{"__ignoreMap":30},[321,169544,169545,169547],{"class":323,"line":324},[321,169546,30537],{"class":327},[321,169548,147236],{"class":331},[321,169550,169551],{"class":323,"line":167},[321,169552,2606],{"emptyLinePlaceholder":251},[321,169554,169555,169557,169559],{"class":323,"line":200},[321,169556,149626],{"class":331},[321,169558,377],{"class":327},[321,169560,15779],{"class":331},[321,169562,169563,169565,169567,169569],{"class":323,"line":1401},[321,169564,147165],{"class":436},[321,169566,51582],{"class":331},[321,169568,150033],{"class":436},[321,169570,31611],{"class":331},[321,169572,169573,169575,169577,169579],{"class":323,"line":1407},[321,169574,164682],{"class":436},[321,169576,51582],{"class":331},[321,169578,982],{"class":380},[321,169580,31611],{"class":331},[321,169582,169583,169585,169587],{"class":323,"line":1421},[321,169584,164693],{"class":436},[321,169586,51582],{"class":331},[321,169588,164698],{"class":380},[321,169590,169591],{"class":323,"line":1427},[321,169592,1771],{"class":331},[321,169594,169595],{"class":323,"line":1518},[321,169596,2606],{"emptyLinePlaceholder":251},[321,169598,169599,169601,169603,169606,169608,169610,169612,169614,169616,169618,169620],{"class":323,"line":1524},[321,169600,156589],{"class":331},[321,169602,377],{"class":327},[321,169604,169605],{"class":331}," json.dumps(student, ",[321,169607,147282],{"class":5423},[321,169609,377],{"class":327},[321,169611,34132],{"class":380},[321,169613,12642],{"class":331},[321,169615,152157],{"class":5423},[321,169617,377],{"class":327},[321,169619,409],{"class":380},[321,169621,338],{"class":331},[321,169623,169624,169626],{"class":323,"line":1536},[321,169625,30560],{"class":380},[321,169627,164216],{"class":331},[19,169629,169630],{},"写入 JSON 文件：",[312,169632,169634],{"className":30523,"code":169633,"language":30525,"meta":30,"style":30},"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",[318,169635,169636,169642,169646,169654,169682,169710,169714,169718,169748],{"__ignoreMap":30},[321,169637,169638,169640],{"class":323,"line":324},[321,169639,30537],{"class":327},[321,169641,147236],{"class":331},[321,169643,169644],{"class":323,"line":167},[321,169645,2606],{"emptyLinePlaceholder":251},[321,169647,169648,169650,169652],{"class":323,"line":200},[321,169649,159861],{"class":331},[321,169651,377],{"class":327},[321,169653,55592],{"class":331},[321,169655,169656,169658,169660,169662,169664,169666,169668,169670,169672,169674,169676,169678,169680],{"class":323,"line":1401},[321,169657,148530],{"class":331},[321,169659,62824],{"class":436},[321,169661,51582],{"class":331},[321,169663,150033],{"class":436},[321,169665,12642],{"class":331},[321,169667,69269],{"class":436},[321,169669,51582],{"class":331},[321,169671,982],{"class":380},[321,169673,12642],{"class":331},[321,169675,151617],{"class":436},[321,169677,51582],{"class":331},[321,169679,1321],{"class":380},[321,169681,5136],{"class":331},[321,169683,169684,169686,169688,169690,169692,169694,169696,169698,169700,169702,169704,169706,169708],{"class":323,"line":1407},[321,169685,148530],{"class":331},[321,169687,62824],{"class":436},[321,169689,51582],{"class":331},[321,169691,151081],{"class":436},[321,169693,12642],{"class":331},[321,169695,69269],{"class":436},[321,169697,51582],{"class":331},[321,169699,957],{"class":380},[321,169701,12642],{"class":331},[321,169703,151617],{"class":436},[321,169705,51582],{"class":331},[321,169707,1143],{"class":380},[321,169709,5136],{"class":331},[321,169711,169712],{"class":323,"line":1421},[321,169713,33391],{"class":331},[321,169715,169716],{"class":323,"line":1427},[321,169717,2606],{"emptyLinePlaceholder":251},[321,169719,169720,169722,169724,169726,169728,169730,169732,169734,169736,169738,169740,169742,169744,169746],{"class":323,"line":1518},[321,169721,107978],{"class":327},[321,169723,146936],{"class":380},[321,169725,332],{"class":331},[321,169727,151976],{"class":436},[321,169729,12642],{"class":331},[321,169731,152121],{"class":436},[321,169733,12642],{"class":331},[321,169735,146951],{"class":5423},[321,169737,377],{"class":327},[321,169739,146956],{"class":436},[321,169741,13921],{"class":331},[321,169743,31528],{"class":327},[321,169745,148298],{"class":5423},[321,169747,3945],{"class":331},[321,169749,169750,169753,169755,169757,169759,169761,169763,169765,169767,169769,169771],{"class":323,"line":1524},[321,169751,169752],{"class":331},"    json.dump(students, ",[321,169754,45499],{"class":5423},[321,169756,12642],{"class":331},[321,169758,147282],{"class":5423},[321,169760,377],{"class":327},[321,169762,34132],{"class":380},[321,169764,12642],{"class":331},[321,169766,152157],{"class":5423},[321,169768,377],{"class":327},[321,169770,409],{"class":380},[321,169772,338],{"class":331},[19,169774,169775],{},"读取 JSON 文件：",[312,169777,169779],{"className":30523,"code":169778,"language":30525,"meta":30,"style":30},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[318,169780,169781,169787,169791,169821,169833,169837],{"__ignoreMap":30},[321,169782,169783,169785],{"class":323,"line":324},[321,169784,30537],{"class":327},[321,169786,147236],{"class":331},[321,169788,169789],{"class":323,"line":167},[321,169790,2606],{"emptyLinePlaceholder":251},[321,169792,169793,169795,169797,169799,169801,169803,169805,169807,169809,169811,169813,169815,169817,169819],{"class":323,"line":200},[321,169794,107978],{"class":327},[321,169796,146936],{"class":380},[321,169798,332],{"class":331},[321,169800,151976],{"class":436},[321,169802,12642],{"class":331},[321,169804,146946],{"class":436},[321,169806,12642],{"class":331},[321,169808,146951],{"class":5423},[321,169810,377],{"class":327},[321,169812,146956],{"class":436},[321,169814,13921],{"class":331},[321,169816,31528],{"class":327},[321,169818,148298],{"class":5423},[321,169820,3945],{"class":331},[321,169822,169823,169825,169827,169829,169831],{"class":323,"line":1401},[321,169824,153182],{"class":331},[321,169826,377],{"class":327},[321,169828,148309],{"class":331},[321,169830,45499],{"class":5423},[321,169832,338],{"class":331},[321,169834,169835],{"class":323,"line":1407},[321,169836,2606],{"emptyLinePlaceholder":251},[321,169838,169839,169841],{"class":323,"line":1421},[321,169840,30560],{"class":380},[321,169842,165140],{"class":331},[14,169844,169846],{"id":169845},"_811-csv文件","8.11 CSV文件",[19,169848,169849],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169851,169852],{},"写入 CSV：",[312,169854,169856],{"className":30523,"code":169855,"language":30525,"meta":30,"style":30},"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",[318,169857,169858,169865,169869,169877,169895,169911,169927,169931,169935,169975,169989],{"__ignoreMap":30},[321,169859,169860,169862],{"class":323,"line":324},[321,169861,30537],{"class":327},[321,169863,169864],{"class":331}," csv\n",[321,169866,169867],{"class":323,"line":167},[321,169868,2606],{"emptyLinePlaceholder":251},[321,169870,169871,169873,169875],{"class":323,"line":200},[321,169872,159861],{"class":331},[321,169874,377],{"class":327},[321,169876,55592],{"class":331},[321,169878,169879,169882,169884,169886,169888,169890,169893],{"class":323,"line":1401},[321,169880,169881],{"class":331},"    [",[321,169883,73244],{"class":436},[321,169885,12642],{"class":331},[321,169887,73277],{"class":436},[321,169889,12642],{"class":331},[321,169891,169892],{"class":436},"\"成绩\"",[321,169894,87981],{"class":331},[321,169896,169897,169899,169901,169903,169905,169907,169909],{"class":323,"line":1407},[321,169898,169881],{"class":331},[321,169900,150033],{"class":436},[321,169902,12642],{"class":331},[321,169904,982],{"class":380},[321,169906,12642],{"class":331},[321,169908,1321],{"class":380},[321,169910,87981],{"class":331},[321,169912,169913,169915,169917,169919,169921,169923,169925],{"class":323,"line":1421},[321,169914,169881],{"class":331},[321,169916,151081],{"class":436},[321,169918,12642],{"class":331},[321,169920,957],{"class":380},[321,169922,12642],{"class":331},[321,169924,1143],{"class":380},[321,169926,87981],{"class":331},[321,169928,169929],{"class":323,"line":1427},[321,169930,33391],{"class":331},[321,169932,169933],{"class":323,"line":1518},[321,169934,2606],{"emptyLinePlaceholder":251},[321,169936,169937,169939,169941,169943,169946,169948,169950,169952,169954,169956,169958,169960,169963,169965,169967,169969,169971,169973],{"class":323,"line":1524},[321,169938,107978],{"class":327},[321,169940,146936],{"class":380},[321,169942,332],{"class":331},[321,169944,169945],{"class":436},"\"students.csv\"",[321,169947,12642],{"class":331},[321,169949,152121],{"class":436},[321,169951,12642],{"class":331},[321,169953,146951],{"class":5423},[321,169955,377],{"class":327},[321,169957,146956],{"class":436},[321,169959,12642],{"class":331},[321,169961,169962],{"class":5423},"newline",[321,169964,377],{"class":327},[321,169966,7859],{"class":436},[321,169968,13921],{"class":331},[321,169970,31528],{"class":327},[321,169972,148298],{"class":5423},[321,169974,3945],{"class":331},[321,169976,169977,169980,169982,169985,169987],{"class":323,"line":1536},[321,169978,169979],{"class":331},"    writer ",[321,169981,377],{"class":327},[321,169983,169984],{"class":331}," csv.writer(",[321,169986,45499],{"class":5423},[321,169988,338],{"class":331},[321,169990,169991],{"class":323,"line":1818},[321,169992,169993],{"class":331},"    writer.writerows(students)\n",[19,169995,169996],{},"读取 CSV：",[312,169998,170000],{"className":30523,"code":169999,"language":30525,"meta":30,"style":30},"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",[318,170001,170002,170008,170012,170042,170056,170068],{"__ignoreMap":30},[321,170003,170004,170006],{"class":323,"line":324},[321,170005,30537],{"class":327},[321,170007,169864],{"class":331},[321,170009,170010],{"class":323,"line":167},[321,170011,2606],{"emptyLinePlaceholder":251},[321,170013,170014,170016,170018,170020,170022,170024,170026,170028,170030,170032,170034,170036,170038,170040],{"class":323,"line":200},[321,170015,107978],{"class":327},[321,170017,146936],{"class":380},[321,170019,332],{"class":331},[321,170021,169945],{"class":436},[321,170023,12642],{"class":331},[321,170025,146946],{"class":436},[321,170027,12642],{"class":331},[321,170029,146951],{"class":5423},[321,170031,377],{"class":327},[321,170033,146956],{"class":436},[321,170035,13921],{"class":331},[321,170037,31528],{"class":327},[321,170039,148298],{"class":5423},[321,170041,3945],{"class":331},[321,170043,170044,170047,170049,170052,170054],{"class":323,"line":1401},[321,170045,170046],{"class":331},"    reader ",[321,170048,377],{"class":327},[321,170050,170051],{"class":331}," csv.reader(",[321,170053,45499],{"class":5423},[321,170055,338],{"class":331},[321,170057,170058,170060,170063,170065],{"class":323,"line":1407},[321,170059,3407],{"class":327},[321,170061,170062],{"class":331}," row ",[321,170064,26188],{"class":327},[321,170066,170067],{"class":331}," reader:\n",[321,170069,170070,170072],{"class":323,"line":1421},[321,170071,32596],{"class":380},[321,170073,170074],{"class":331},"(row)\n",[19,170076,170077],{},"使用字典写入：",[312,170079,170081],{"className":30523,"code":170080,"language":30525,"meta":30,"style":30},"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",[318,170082,170083,170089,170093,170101,170129,170157,170161,170165,170203,170224,170245,170250],{"__ignoreMap":30},[321,170084,170085,170087],{"class":323,"line":324},[321,170086,30537],{"class":327},[321,170088,169864],{"class":331},[321,170090,170091],{"class":323,"line":167},[321,170092,2606],{"emptyLinePlaceholder":251},[321,170094,170095,170097,170099],{"class":323,"line":200},[321,170096,159861],{"class":331},[321,170098,377],{"class":327},[321,170100,55592],{"class":331},[321,170102,170103,170105,170107,170109,170111,170113,170115,170117,170119,170121,170123,170125,170127],{"class":323,"line":1401},[321,170104,148530],{"class":331},[321,170106,62824],{"class":436},[321,170108,51582],{"class":331},[321,170110,150033],{"class":436},[321,170112,12642],{"class":331},[321,170114,69269],{"class":436},[321,170116,51582],{"class":331},[321,170118,982],{"class":380},[321,170120,12642],{"class":331},[321,170122,151617],{"class":436},[321,170124,51582],{"class":331},[321,170126,1321],{"class":380},[321,170128,5136],{"class":331},[321,170130,170131,170133,170135,170137,170139,170141,170143,170145,170147,170149,170151,170153,170155],{"class":323,"line":1407},[321,170132,148530],{"class":331},[321,170134,62824],{"class":436},[321,170136,51582],{"class":331},[321,170138,151081],{"class":436},[321,170140,12642],{"class":331},[321,170142,69269],{"class":436},[321,170144,51582],{"class":331},[321,170146,957],{"class":380},[321,170148,12642],{"class":331},[321,170150,151617],{"class":436},[321,170152,51582],{"class":331},[321,170154,1143],{"class":380},[321,170156,5136],{"class":331},[321,170158,170159],{"class":323,"line":1421},[321,170160,33391],{"class":331},[321,170162,170163],{"class":323,"line":1427},[321,170164,2606],{"emptyLinePlaceholder":251},[321,170166,170167,170169,170171,170173,170175,170177,170179,170181,170183,170185,170187,170189,170191,170193,170195,170197,170199,170201],{"class":323,"line":1518},[321,170168,107978],{"class":327},[321,170170,146936],{"class":380},[321,170172,332],{"class":331},[321,170174,169945],{"class":436},[321,170176,12642],{"class":331},[321,170178,152121],{"class":436},[321,170180,12642],{"class":331},[321,170182,146951],{"class":5423},[321,170184,377],{"class":327},[321,170186,146956],{"class":436},[321,170188,12642],{"class":331},[321,170190,169962],{"class":5423},[321,170192,377],{"class":327},[321,170194,7859],{"class":436},[321,170196,13921],{"class":331},[321,170198,31528],{"class":327},[321,170200,148298],{"class":5423},[321,170202,3945],{"class":331},[321,170204,170205,170208,170210,170212,170214,170216,170218,170220,170222],{"class":323,"line":1524},[321,170206,170207],{"class":331},"    fieldnames ",[321,170209,377],{"class":327},[321,170211,52371],{"class":331},[321,170213,62824],{"class":436},[321,170215,12642],{"class":331},[321,170217,69269],{"class":436},[321,170219,12642],{"class":331},[321,170221,151617],{"class":436},[321,170223,33391],{"class":331},[321,170225,170226,170228,170230,170233,170235,170237,170240,170242],{"class":323,"line":1536},[321,170227,169979],{"class":331},[321,170229,377],{"class":327},[321,170231,170232],{"class":331}," csv.DictWriter(",[321,170234,45499],{"class":5423},[321,170236,12642],{"class":331},[321,170238,170239],{"class":5423},"fieldnames",[321,170241,377],{"class":327},[321,170243,170244],{"class":331},"fieldnames)\n",[321,170246,170247],{"class":323,"line":1818},[321,170248,170249],{"class":331},"    writer.writeheader()\n",[321,170251,170252],{"class":323,"line":1823},[321,170253,169993],{"class":331},[14,170255,170257],{"id":170256},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170259,123437],{},[151,170261,170262,170265,170268],{},[154,170263,170264],{},"读取文本文件。",[154,170266,170267],{},"统计每个单词出现次数。",[154,170269,170270],{},"输出出现次数最多的前 10 个单词。",[19,170272,10242],{},[312,170274,170276],{"className":30523,"code":170275,"language":30525,"meta":30,"style":30},"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",[318,170277,170278,170288,170292,170305,170321,170325,170335,170344,170348,170360,170380,170389,170393,170411,170415,170445,170449,170465],{"__ignoreMap":30},[321,170279,170280,170282,170284,170286],{"class":323,"line":324},[321,170281,30882],{"class":327},[321,170283,108456],{"class":331},[321,170285,30537],{"class":327},[321,170287,108461],{"class":331},[321,170289,170290],{"class":323,"line":167},[321,170291,2606],{"emptyLinePlaceholder":251},[321,170293,170294,170296,170298,170300,170303],{"class":323,"line":200},[321,170295,168456],{"class":331},[321,170297,377],{"class":327},[321,170299,108690],{"class":331},[321,170301,170302],{"class":436},"\"article.txt\"",[321,170304,338],{"class":331},[321,170306,170307,170309,170311,170313,170315,170317,170319],{"class":323,"line":1401},[321,170308,168639],{"class":331},[321,170310,377],{"class":327},[321,170312,169516],{"class":331},[321,170314,146951],{"class":5423},[321,170316,377],{"class":327},[321,170318,146956],{"class":436},[321,170320,338],{"class":331},[321,170322,170323],{"class":323,"line":1407},[321,170324,2606],{"emptyLinePlaceholder":251},[321,170326,170327,170330,170332],{"class":323,"line":1421},[321,170328,170329],{"class":331},"words ",[321,170331,377],{"class":327},[321,170333,170334],{"class":331}," content.lower().split()\n",[321,170336,170337,170340,170342],{"class":323,"line":1427},[321,170338,170339],{"class":331},"counter ",[321,170341,377],{"class":327},[321,170343,88013],{"class":331},[321,170345,170346],{"class":323,"line":1518},[321,170347,2606],{"emptyLinePlaceholder":251},[321,170349,170350,170352,170355,170357],{"class":323,"line":1524},[321,170351,3231],{"class":327},[321,170353,170354],{"class":331}," word ",[321,170356,26188],{"class":327},[321,170358,170359],{"class":331}," words:\n",[321,170361,170362,170365,170367,170370,170373,170375,170378],{"class":323,"line":1536},[321,170363,170364],{"class":331},"    word ",[321,170366,377],{"class":327},[321,170368,170369],{"class":331}," word.strip(",[321,170371,170372],{"class":436},"\".,!?;:",[321,170374,156640],{"class":380},[321,170376,170377],{"class":436},"'()[]\"",[321,170379,338],{"class":331},[321,170381,170382,170384,170386],{"class":323,"line":1818},[321,170383,3307],{"class":327},[321,170385,39075],{"class":327},[321,170387,170388],{"class":331}," word:\n",[321,170390,170391],{"class":323,"line":1823},[321,170392,148657],{"class":327},[321,170394,170395,170398,170400,170403,170405,170407,170409],{"class":323,"line":1829},[321,170396,170397],{"class":331},"    counter[word] ",[321,170399,377],{"class":327},[321,170401,170402],{"class":331}," counter.get(word, ",[321,170404,523],{"class":380},[321,170406,13921],{"class":331},[321,170408,813],{"class":327},[321,170410,55844],{"class":380},[321,170412,170413],{"class":323,"line":1834},[321,170414,2606],{"emptyLinePlaceholder":251},[321,170416,170417,170420,170422,170424,170427,170429,170431,170433,170435,170437,170439,170441,170443],{"class":323,"line":1848},[321,170418,170419],{"class":331},"items ",[321,170421,377],{"class":327},[321,170423,163749],{"class":380},[321,170425,170426],{"class":331},"(counter.items(), ",[321,170428,154091],{"class":5423},[321,170430,154094],{"class":327},[321,170432,154097],{"class":331},[321,170434,549],{"class":380},[321,170436,112347],{"class":331},[321,170438,163673],{"class":5423},[321,170440,377],{"class":327},[321,170442,31621],{"class":380},[321,170444,338],{"class":331},[321,170446,170447],{"class":323,"line":1853},[321,170448,2606],{"emptyLinePlaceholder":251},[321,170450,170451,170453,170456,170458,170461,170463],{"class":323,"line":1859},[321,170452,3231],{"class":327},[321,170454,170455],{"class":331}," word, count ",[321,170457,26188],{"class":327},[321,170459,170460],{"class":331}," items[:",[321,170462,778],{"class":380},[321,170464,165900],{"class":331},[321,170466,170467,170469],{"class":323,"line":1880},[321,170468,31444],{"class":380},[321,170470,170471],{"class":331},"(word, count)\n",[14,170473,170475],{"id":170474},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[312,170477,170479],{"className":30523,"code":170478,"language":30525,"meta":30,"style":30},"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",[318,170480,170481,170487,170497,170501,170513,170517,170521,170529,170539,170545,170549,170579,170589,170593,170597,170605,170635,170659,170663,170667,170675,170704,170709],{"__ignoreMap":30},[321,170482,170483,170485],{"class":323,"line":324},[321,170484,30537],{"class":327},[321,170486,147236],{"class":331},[321,170488,170489,170491,170493,170495],{"class":323,"line":167},[321,170490,30882],{"class":327},[321,170492,108456],{"class":331},[321,170494,30537],{"class":327},[321,170496,108461],{"class":331},[321,170498,170499],{"class":323,"line":200},[321,170500,2606],{"emptyLinePlaceholder":251},[321,170502,170503,170505,170507,170509,170511],{"class":323,"line":1401},[321,170504,151969],{"class":380},[321,170506,13771],{"class":327},[321,170508,108690],{"class":331},[321,170510,151976],{"class":436},[321,170512,338],{"class":331},[321,170514,170515],{"class":323,"line":1407},[321,170516,2606],{"emptyLinePlaceholder":251},[321,170518,170519],{"class":323,"line":1421},[321,170520,2606],{"emptyLinePlaceholder":251},[321,170522,170523,170525,170527],{"class":323,"line":1427},[321,170524,32092],{"class":327},[321,170526,151993],{"class":2169},[321,170528,32098],{"class":331},[321,170530,170531,170533,170535,170537],{"class":323,"line":1518},[321,170532,3307],{"class":327},[321,170534,39075],{"class":327},[321,170536,152004],{"class":380},[321,170538,152007],{"class":331},[321,170540,170541,170543],{"class":323,"line":1524},[321,170542,14959],{"class":327},[321,170544,51983],{"class":331},[321,170546,170547],{"class":323,"line":1536},[321,170548,2606],{"emptyLinePlaceholder":251},[321,170550,170551,170553,170555,170557,170559,170561,170563,170565,170567,170569,170571,170573,170575,170577],{"class":323,"line":1818},[321,170552,34323],{"class":327},[321,170554,146936],{"class":380},[321,170556,332],{"class":331},[321,170558,151969],{"class":380},[321,170560,12642],{"class":331},[321,170562,146946],{"class":436},[321,170564,12642],{"class":331},[321,170566,146951],{"class":5423},[321,170568,377],{"class":327},[321,170570,146956],{"class":436},[321,170572,13921],{"class":331},[321,170574,31528],{"class":327},[321,170576,148298],{"class":5423},[321,170578,3945],{"class":331},[321,170580,170581,170583,170585,170587],{"class":323,"line":1823},[321,170582,14959],{"class":327},[321,170584,148309],{"class":331},[321,170586,45499],{"class":5423},[321,170588,338],{"class":331},[321,170590,170591],{"class":323,"line":1829},[321,170592,2606],{"emptyLinePlaceholder":251},[321,170594,170595],{"class":323,"line":1834},[321,170596,2606],{"emptyLinePlaceholder":251},[321,170598,170599,170601,170603],{"class":323,"line":1848},[321,170600,32092],{"class":327},[321,170602,152103],{"class":2169},[321,170604,152106],{"class":331},[321,170606,170607,170609,170611,170613,170615,170617,170619,170621,170623,170625,170627,170629,170631,170633],{"class":323,"line":1853},[321,170608,34323],{"class":327},[321,170610,146936],{"class":380},[321,170612,332],{"class":331},[321,170614,151969],{"class":380},[321,170616,12642],{"class":331},[321,170618,152121],{"class":436},[321,170620,12642],{"class":331},[321,170622,146951],{"class":5423},[321,170624,377],{"class":327},[321,170626,146956],{"class":436},[321,170628,13921],{"class":331},[321,170630,31528],{"class":327},[321,170632,148298],{"class":5423},[321,170634,3945],{"class":331},[321,170636,170637,170639,170641,170643,170645,170647,170649,170651,170653,170655,170657],{"class":323,"line":1859},[321,170638,152142],{"class":331},[321,170640,45499],{"class":5423},[321,170642,12642],{"class":331},[321,170644,147282],{"class":5423},[321,170646,377],{"class":327},[321,170648,34132],{"class":380},[321,170650,12642],{"class":331},[321,170652,152157],{"class":5423},[321,170654,377],{"class":327},[321,170656,409],{"class":380},[321,170658,338],{"class":331},[321,170660,170661],{"class":323,"line":1880},[321,170662,2606],{"emptyLinePlaceholder":251},[321,170664,170665],{"class":323,"line":1885},[321,170666,2606],{"emptyLinePlaceholder":251},[321,170668,170669,170671,170673],{"class":323,"line":1899},[321,170670,159861],{"class":331},[321,170672,377],{"class":327},[321,170674,153187],{"class":331},[321,170676,170677,170680,170682,170684,170686,170688,170690,170692,170694,170696,170698,170700,170702],{"class":323,"line":1904},[321,170678,170679],{"class":331},"students.append({",[321,170681,62824],{"class":436},[321,170683,51582],{"class":331},[321,170685,150033],{"class":436},[321,170687,12642],{"class":331},[321,170689,69269],{"class":436},[321,170691,51582],{"class":331},[321,170693,982],{"class":380},[321,170695,12642],{"class":331},[321,170697,151617],{"class":436},[321,170699,51582],{"class":331},[321,170701,1321],{"class":380},[321,170703,165297],{"class":331},[321,170705,170706],{"class":323,"line":1933},[321,170707,170708],{"class":331},"save_students(students)\n",[321,170710,170711,170713,170715,170718],{"class":323,"line":1938},[321,170712,30560],{"class":380},[321,170714,332],{"class":331},[321,170716,170717],{"class":436},"\"保存成功\"",[321,170719,338],{"class":331},[14,170721,170723],{"id":170722},"_814-易错点","8.14 易错点",[151,170725,170726,170730,170736,170741,170748,170755],{},[154,170727,170728,168989],{},[318,170729,1127],{},[154,170731,170732,170733,28530],{},"读写中文要指定 ",[318,170734,170735],{},"encoding=\"utf-8\"",[154,170737,170738,170739,28530],{},"打开文件后要关闭，推荐使用 ",[318,170740,107978],{},[154,170742,170743,170744,170747],{},"读取大文件不要直接 ",[318,170745,170746],{},"read()"," 全部内容。",[154,170749,170750,170751,170754],{},"Windows 写 CSV 时建议加 ",[318,170752,170753],{},"newline=\"\"","，避免空行。",[154,170756,170757],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170759,170761],{"id":170760},"_815-本章练习","8.15 本章练习",[151,170763,170764,170771,170776,170779,170782],{},[154,170765,170766,170767,170770],{},"写入一个 ",[318,170768,170769],{},"students.txt","，每行保存一个学生姓名。",[154,170772,104500,170773,170775],{},[318,170774,170769],{}," 并输出所有学生。",[154,170777,170778],{},"把学生列表保存为 JSON 文件。",[154,170780,170781],{},"从 JSON 文件读取学生数据，计算平均分。",[154,170783,170784,170785,170788,170789,170792],{},"写一个日志函数 ",[318,170786,170787],{},"write_log(message)","，每次调用向 ",[318,170790,170791],{},"app.log"," 追加一行。",[5333,170794,170795],{},"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":30,"searchDepth":167,"depth":167,"links":170797},[170798,170799,170803,170804,170810,170811,170812,170813,170814,170815,170816,170817,170818,170819,170820],{"id":168309,"depth":167,"text":168310},{"id":168350,"depth":167,"text":168351,"children":170800},[170801,170802],{"id":168354,"depth":200,"text":168355},{"id":168388,"depth":200,"text":168389},{"id":168502,"depth":167,"text":168503},{"id":168595,"depth":167,"text":168596,"children":170805},[170806,170807,170808,170809],{"id":168599,"depth":200,"text":168600},{"id":168686,"depth":200,"text":168687},{"id":168756,"depth":200,"text":168757},{"id":168850,"depth":200,"text":168851},{"id":168920,"depth":167,"text":168921},{"id":168983,"depth":167,"text":168984},{"id":169144,"depth":167,"text":169145},{"id":169207,"depth":167,"text":169208},{"id":169323,"depth":167,"text":169324},{"id":169533,"depth":167,"text":169534},{"id":169845,"depth":167,"text":169846},{"id":170256,"depth":167,"text":170257},{"id":170474,"depth":167,"text":170475},{"id":170722,"depth":167,"text":170723},{"id":170760,"depth":167,"text":170761},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168301,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170827,"title":170828,"body":170829,"description":23584,"extension":249,"meta":173015,"navigation":251,"path":173016,"seo":173017,"stem":173018,"__hash__":173019},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170830,"toc":172982},[170831,170834,170838,170841,170844,170936,170938,170957,170962,170966,170969,170972,171001,171008,171011,171015,171018,171047,171049,171101,171107,171160,171164,171262,171265,171332,171336,171393,171395,171401,171405,171410,171416,171507,171512,171516,171519,171597,171600,171638,171642,171760,171763,171767,171770,171815,171818,171822,171827,171833,171883,171886,171917,171921,171925,171955,171959,171994,171998,172033,172073,172077,172093,172096,172100,172104,172183,172187,172228,172232,172287,172291,172325,172329,172359,172368,172375,172381,172438,172441,172449,172452,172456,172463,172466,172472,172475,172492,172497,172501,172507,172520,172523,172560,172563,172574,172577,172591,172594,172608,172612,172619,172652,172655,172657,172663,172666,172670,172672,172678,172683,172856,172860,172923,172927,172951,172955,172979],[10,170832,170828],{"id":170833},"_9-异常模块与包",[14,170835,170837],{"id":170836},"_91-什么是异常","9.1 什么是异常",[19,170839,170840],{},"异常是程序运行过程中出现的错误。",[19,170842,170843],{},"常见异常：",[469,170845,170846,170855],{},[472,170847,170848],{},[475,170849,170850,170853],{},[478,170851,170852],{},"异常",[478,170854,26014],{},[516,170856,170857,170867,170877,170886,170896,170906,170916,170926],{},[475,170858,170859,170864],{},[521,170860,170861],{},[318,170862,170863],{},"NameError",[521,170865,170866],{},"使用了未定义变量",[475,170868,170869,170874],{},[521,170870,170871],{},[318,170872,170873],{},"TypeError",[521,170875,170876],{},"类型不匹配",[475,170878,170879,170883],{},[521,170880,170881],{},[318,170882,154979],{},[521,170884,170885],{},"值不合法",[475,170887,170888,170893],{},[521,170889,170890],{},[318,170891,170892],{},"IndexError",[521,170894,170895],{},"列表索引越界",[475,170897,170898,170903],{},[521,170899,170900],{},[318,170901,170902],{},"KeyError",[521,170904,170905],{},"字典 key 不存在",[475,170907,170908,170913],{},[521,170909,170910],{},[318,170911,170912],{},"FileNotFoundError",[521,170914,170915],{},"文件不存在",[475,170917,170918,170923],{},[521,170919,170920],{},[318,170921,170922],{},"ZeroDivisionError",[521,170924,170925],{},"除数为 0",[475,170927,170928,170933],{},[521,170929,170930],{},[318,170931,170932],{},"ImportError",[521,170934,170935],{},"导入失败",[19,170937,15342],{},[312,170939,170941],{"className":30523,"code":170940,"language":30525,"meta":30,"style":30},"num = int(\"abc\")\n",[318,170942,170943],{"__ignoreMap":30},[321,170944,170945,170947,170949,170951,170953,170955],{"class":323,"line":324},[321,170946,155932],{"class":331},[321,170948,377],{"class":327},[321,170950,2588],{"class":380},[321,170952,332],{"class":331},[321,170954,156025],{"class":436},[321,170956,338],{"class":331},[19,170958,170959,170960,28530],{},"会触发 ",[318,170961,154979],{},[14,170963,170965],{"id":170964},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170967,170968],{},"如果不处理异常，程序会直接终止。",[19,170970,170971],{},"例如用户输入年龄：",[312,170973,170975],{"className":30523,"code":170974,"language":30525,"meta":30,"style":30},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[318,170976,170977,170995],{"__ignoreMap":30},[321,170978,170979,170981,170983,170985,170987,170989,170991,170993],{"class":323,"line":324},[321,170980,146691],{"class":331},[321,170982,377],{"class":327},[321,170984,2588],{"class":380},[321,170986,332],{"class":331},[321,170988,53966],{"class":380},[321,170990,332],{"class":331},[321,170992,152539],{"class":436},[321,170994,30642],{"class":331},[321,170996,170997,170999],{"class":323,"line":167},[321,170998,30560],{"class":380},[321,171000,155906],{"class":331},[19,171002,171003,171004,171007],{},"用户输入 ",[318,171005,171006],{},"abc","，程序就会报错退出。",[19,171009,171010],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171012,171014],{"id":171013},"_93-try-except","9.3 try except",[19,171016,171017],{},"基础语法：",[312,171019,171021],{"className":30523,"code":171020,"language":30525,"meta":30,"style":30},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[318,171022,171023,171030,171035,171042],{"__ignoreMap":30},[321,171024,171025,171028],{"class":323,"line":324},[321,171026,171027],{"class":327},"try",[321,171029,3945],{"class":331},[321,171031,171032],{"class":323,"line":167},[321,171033,171034],{"class":331},"    可能出错的代码\n",[321,171036,171037,171040],{"class":323,"line":200},[321,171038,171039],{"class":327},"except",[321,171041,3945],{"class":331},[321,171043,171044],{"class":323,"line":1401},[321,171045,171046],{"class":331},"    出错后的处理代码\n",[19,171048,15342],{},[312,171050,171052],{"className":30523,"code":171051,"language":30525,"meta":30,"style":30},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[318,171053,171054,171060,171078,171084,171090],{"__ignoreMap":30},[321,171055,171056,171058],{"class":323,"line":324},[321,171057,171027],{"class":327},[321,171059,3945],{"class":331},[321,171061,171062,171064,171066,171068,171070,171072,171074,171076],{"class":323,"line":167},[321,171063,152531],{"class":331},[321,171065,377],{"class":327},[321,171067,2588],{"class":380},[321,171069,332],{"class":331},[321,171071,53966],{"class":380},[321,171073,332],{"class":331},[321,171075,152539],{"class":436},[321,171077,30642],{"class":331},[321,171079,171080,171082],{"class":323,"line":200},[321,171081,31444],{"class":380},[321,171083,155906],{"class":331},[321,171085,171086,171088],{"class":323,"line":1401},[321,171087,171039],{"class":327},[321,171089,3945],{"class":331},[321,171091,171092,171094,171096,171099],{"class":323,"line":1407},[321,171093,31444],{"class":380},[321,171095,332],{"class":331},[321,171097,171098],{"class":436},"\"年龄必须是数字\"",[321,171100,338],{"class":331},[19,171102,171103,171104,171106],{},"不建议裸写 ",[318,171105,171039],{},"，最好指定异常类型。",[312,171108,171110],{"className":30523,"code":171109,"language":30525,"meta":30,"style":30},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[318,171111,171112,171118,171136,171142,171150],{"__ignoreMap":30},[321,171113,171114,171116],{"class":323,"line":324},[321,171115,171027],{"class":327},[321,171117,3945],{"class":331},[321,171119,171120,171122,171124,171126,171128,171130,171132,171134],{"class":323,"line":167},[321,171121,152531],{"class":331},[321,171123,377],{"class":327},[321,171125,2588],{"class":380},[321,171127,332],{"class":331},[321,171129,53966],{"class":380},[321,171131,332],{"class":331},[321,171133,152539],{"class":436},[321,171135,30642],{"class":331},[321,171137,171138,171140],{"class":323,"line":200},[321,171139,31444],{"class":380},[321,171141,155906],{"class":331},[321,171143,171144,171146,171148],{"class":323,"line":1401},[321,171145,171039],{"class":327},[321,171147,152371],{"class":380},[321,171149,3945],{"class":331},[321,171151,171152,171154,171156,171158],{"class":323,"line":1407},[321,171153,31444],{"class":380},[321,171155,332],{"class":331},[321,171157,171098],{"class":436},[321,171159,338],{"class":331},[14,171161,171163],{"id":171162},"_94-捕获多个异常","9.4 捕获多个异常",[312,171165,171167],{"className":30523,"code":171166,"language":30525,"meta":30,"style":30},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[318,171168,171169,171175,171196,171216,171223,171231,171242,171251],{"__ignoreMap":30},[321,171170,171171,171173],{"class":323,"line":324},[321,171172,171027],{"class":327},[321,171174,3945],{"class":331},[321,171176,171177,171180,171182,171184,171186,171188,171190,171192,171194],{"class":323,"line":167},[321,171178,171179],{"class":331},"    nums ",[321,171181,377],{"class":327},[321,171183,52371],{"class":331},[321,171185,549],{"class":380},[321,171187,12642],{"class":331},[321,171189,409],{"class":380},[321,171191,12642],{"class":331},[321,171193,403],{"class":380},[321,171195,33391],{"class":331},[321,171197,171198,171201,171203,171205,171207,171209,171211,171214],{"class":323,"line":200},[321,171199,171200],{"class":331},"    index ",[321,171202,377],{"class":327},[321,171204,2588],{"class":380},[321,171206,332],{"class":331},[321,171208,53966],{"class":380},[321,171210,332],{"class":331},[321,171212,171213],{"class":436},"\"请输入索引:\"",[321,171215,30642],{"class":331},[321,171217,171218,171220],{"class":323,"line":1401},[321,171219,31444],{"class":380},[321,171221,171222],{"class":331},"(nums[index])\n",[321,171224,171225,171227,171229],{"class":323,"line":1407},[321,171226,171039],{"class":327},[321,171228,152371],{"class":380},[321,171230,3945],{"class":331},[321,171232,171233,171235,171237,171240],{"class":323,"line":1421},[321,171234,31444],{"class":380},[321,171236,332],{"class":331},[321,171238,171239],{"class":436},"\"索引必须是整数\"",[321,171241,338],{"class":331},[321,171243,171244,171246,171249],{"class":323,"line":1427},[321,171245,171039],{"class":327},[321,171247,171248],{"class":380}," IndexError",[321,171250,3945],{"class":331},[321,171252,171253,171255,171257,171260],{"class":323,"line":1518},[321,171254,31444],{"class":380},[321,171256,332],{"class":331},[321,171258,171259],{"class":436},"\"索引越界\"",[321,171261,338],{"class":331},[19,171263,171264],{},"多个异常使用相同处理逻辑：",[312,171266,171268],{"className":30523,"code":171267,"language":30525,"meta":30,"style":30},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[318,171269,171270,171276,171294,171307,171321],{"__ignoreMap":30},[321,171271,171272,171274],{"class":323,"line":324},[321,171273,171027],{"class":327},[321,171275,3945],{"class":331},[321,171277,171278,171280,171282,171284,171286,171288,171290,171292],{"class":323,"line":167},[321,171279,45738],{"class":331},[321,171281,377],{"class":327},[321,171283,2588],{"class":380},[321,171285,332],{"class":331},[321,171287,53966],{"class":380},[321,171289,332],{"class":331},[321,171291,155941],{"class":436},[321,171293,30642],{"class":331},[321,171295,171296,171298,171300,171302,171304],{"class":323,"line":200},[321,171297,31444],{"class":380},[321,171299,332],{"class":331},[321,171301,778],{"class":380},[321,171303,156191],{"class":327},[321,171305,171306],{"class":331}," num)\n",[321,171308,171309,171311,171313,171315,171317,171319],{"class":323,"line":1401},[321,171310,171039],{"class":327},[321,171312,1864],{"class":331},[321,171314,154979],{"class":380},[321,171316,12642],{"class":331},[321,171318,170922],{"class":380},[321,171320,30931],{"class":331},[321,171322,171323,171325,171327,171330],{"class":323,"line":1407},[321,171324,31444],{"class":380},[321,171326,332],{"class":331},[321,171328,171329],{"class":436},"\"输入不合法\"",[321,171331,338],{"class":331},[14,171333,171335],{"id":171334},"_95-获取异常信息","9.5 获取异常信息",[312,171337,171339],{"className":30523,"code":171338,"language":30525,"meta":30,"style":30},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[318,171340,171341,171347,171361,171372],{"__ignoreMap":30},[321,171342,171343,171345],{"class":323,"line":324},[321,171344,171027],{"class":327},[321,171346,3945],{"class":331},[321,171348,171349,171351,171353,171355,171357,171359],{"class":323,"line":167},[321,171350,45738],{"class":331},[321,171352,377],{"class":327},[321,171354,2588],{"class":380},[321,171356,332],{"class":331},[321,171358,156025],{"class":436},[321,171360,338],{"class":331},[321,171362,171363,171365,171367,171369],{"class":323,"line":200},[321,171364,171039],{"class":327},[321,171366,152371],{"class":380},[321,171368,64749],{"class":327},[321,171370,171371],{"class":331}," e:\n",[321,171373,171374,171376,171378,171380,171383,171385,171387,171389,171391],{"class":323,"line":1401},[321,171375,31444],{"class":380},[321,171377,332],{"class":331},[321,171379,384],{"class":327},[321,171381,171382],{"class":436},"\"出错了:",[321,171384,1228],{"class":380},[321,171386,406],{"class":331},[321,171388,1278],{"class":380},[321,171390,583],{"class":436},[321,171392,338],{"class":331},[19,171394,146602],{},[312,171396,171399],{"className":171397,"code":171398,"language":5394,"meta":30},[5392],"出错了:invalid literal for int() with base 10: 'abc'\n",[318,171400,171398],{"__ignoreMap":30},[14,171402,171404],{"id":171403},"_96-else和finally","9.6 else和finally",[19,171406,171407,171409],{},[318,171408,1907],{},"：没有异常时执行。",[19,171411,171412,171415],{},[318,171413,171414],{},"finally","：无论是否异常都会执行。",[312,171417,171419],{"className":30523,"code":171418,"language":30525,"meta":30,"style":30},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[318,171420,171421,171427,171445,171453,171463,171469,171490,171496],{"__ignoreMap":30},[321,171422,171423,171425],{"class":323,"line":324},[321,171424,171027],{"class":327},[321,171426,3945],{"class":331},[321,171428,171429,171431,171433,171435,171437,171439,171441,171443],{"class":323,"line":167},[321,171430,45738],{"class":331},[321,171432,377],{"class":327},[321,171434,2588],{"class":380},[321,171436,332],{"class":331},[321,171438,53966],{"class":380},[321,171440,332],{"class":331},[321,171442,155941],{"class":436},[321,171444,30642],{"class":331},[321,171446,171447,171449,171451],{"class":323,"line":200},[321,171448,171039],{"class":327},[321,171450,152371],{"class":380},[321,171452,3945],{"class":331},[321,171454,171455,171457,171459,171461],{"class":323,"line":1401},[321,171456,31444],{"class":380},[321,171458,332],{"class":331},[321,171460,153359],{"class":436},[321,171462,338],{"class":331},[321,171464,171465,171467],{"class":323,"line":1407},[321,171466,1907],{"class":327},[321,171468,3945],{"class":331},[321,171470,171471,171473,171475,171477,171480,171482,171484,171486,171488],{"class":323,"line":1421},[321,171472,31444],{"class":380},[321,171474,332],{"class":331},[321,171476,384],{"class":327},[321,171478,171479],{"class":436},"\"输入正确:",[321,171481,1228],{"class":380},[321,171483,1871],{"class":331},[321,171485,1278],{"class":380},[321,171487,583],{"class":436},[321,171489,338],{"class":331},[321,171491,171492,171494],{"class":323,"line":1427},[321,171493,171414],{"class":327},[321,171495,3945],{"class":331},[321,171497,171498,171500,171502,171505],{"class":323,"line":1518},[321,171499,31444],{"class":380},[321,171501,332],{"class":331},[321,171503,171504],{"class":436},"\"程序结束\"",[321,171506,338],{"class":331},[19,171508,171509,171511],{},[318,171510,171414],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171513,171515],{"id":171514},"_97-抛出异常","9.7 抛出异常",[19,171517,171518],{},"程序可以主动抛出异常。",[312,171520,171522],{"className":30523,"code":171521,"language":30525,"meta":30,"style":30},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[318,171523,171524,171533,171545,171558,171578,171582,171586],{"__ignoreMap":30},[321,171525,171526,171528,171531],{"class":323,"line":324},[321,171527,32092],{"class":327},[321,171529,171530],{"class":2169}," set_age",[321,171532,161560],{"class":331},[321,171534,171535,171537,171539,171541,171543],{"class":323,"line":167},[321,171536,3307],{"class":327},[321,171538,15914],{"class":331},[321,171540,1242],{"class":327},[321,171542,4299],{"class":380},[321,171544,3945],{"class":331},[321,171546,171547,171549,171551,171553,171556],{"class":323,"line":200},[321,171548,103577],{"class":327},[321,171550,152371],{"class":380},[321,171552,332],{"class":331},[321,171554,171555],{"class":436},"\"年龄不能为负数\"",[321,171557,338],{"class":331},[321,171559,171560,171562,171564,171566,171568,171570,171572,171574,171576],{"class":323,"line":1401},[321,171561,31444],{"class":380},[321,171563,332],{"class":331},[321,171565,384],{"class":327},[321,171567,162128],{"class":436},[321,171569,1228],{"class":380},[321,171571,70366],{"class":331},[321,171573,1278],{"class":380},[321,171575,583],{"class":436},[321,171577,338],{"class":331},[321,171579,171580],{"class":323,"line":1407},[321,171581,2606],{"emptyLinePlaceholder":251},[321,171583,171584],{"class":323,"line":1421},[321,171585,2606],{"emptyLinePlaceholder":251},[321,171587,171588,171591,171593,171595],{"class":323,"line":1427},[321,171589,171590],{"class":331},"set_age(",[321,171592,864],{"class":327},[321,171594,549],{"class":380},[321,171596,338],{"class":331},[19,171598,171599],{},"调用者可以捕获：",[312,171601,171603],{"className":30523,"code":171602,"language":30525,"meta":30,"style":30},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[318,171604,171605,171611,171622,171632],{"__ignoreMap":30},[321,171606,171607,171609],{"class":323,"line":324},[321,171608,171027],{"class":327},[321,171610,3945],{"class":331},[321,171612,171613,171616,171618,171620],{"class":323,"line":167},[321,171614,171615],{"class":331},"    set_age(",[321,171617,864],{"class":327},[321,171619,549],{"class":380},[321,171621,338],{"class":331},[321,171623,171624,171626,171628,171630],{"class":323,"line":200},[321,171625,171039],{"class":327},[321,171627,152371],{"class":380},[321,171629,64749],{"class":327},[321,171631,171371],{"class":331},[321,171633,171634,171636],{"class":323,"line":1401},[321,171635,31444],{"class":380},[321,171637,67144],{"class":331},[14,171639,171641],{"id":171640},"_98-自定义异常","9.8 自定义异常",[312,171643,171645],{"className":30523,"code":171644,"language":30525,"meta":30,"style":30},"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",[318,171646,171647,171661,171665,171669,171673,171681,171691,171702,171712,171716,171720,171726,171743,171754],{"__ignoreMap":30},[321,171648,171649,171651,171654,171656,171659],{"class":323,"line":324},[321,171650,14901],{"class":327},[321,171652,171653],{"class":2169}," BalanceNotEnoughError",[321,171655,332],{"class":331},[321,171657,171658],{"class":380},"Exception",[321,171660,30931],{"class":331},[321,171662,171663],{"class":323,"line":167},[321,171664,149682],{"class":327},[321,171666,171667],{"class":323,"line":200},[321,171668,2606],{"emptyLinePlaceholder":251},[321,171670,171671],{"class":323,"line":1401},[321,171672,2606],{"emptyLinePlaceholder":251},[321,171674,171675,171677,171679],{"class":323,"line":1407},[321,171676,32092],{"class":327},[321,171678,150331],{"class":2169},[321,171680,162957],{"class":331},[321,171682,171683,171685,171687,171689],{"class":323,"line":1421},[321,171684,3307],{"class":327},[321,171686,150287],{"class":331},[321,171688,1292],{"class":327},[321,171690,162734],{"class":331},[321,171692,171693,171695,171698,171700],{"class":323,"line":1427},[321,171694,103577],{"class":327},[321,171696,171697],{"class":331}," BalanceNotEnoughError(",[321,171699,150382],{"class":436},[321,171701,338],{"class":331},[321,171703,171704,171706,171708,171710],{"class":323,"line":1518},[321,171705,4296],{"class":327},[321,171707,162964],{"class":331},[321,171709,864],{"class":327},[321,171711,150320],{"class":331},[321,171713,171714],{"class":323,"line":1524},[321,171715,2606],{"emptyLinePlaceholder":251},[321,171717,171718],{"class":323,"line":1536},[321,171719,2606],{"emptyLinePlaceholder":251},[321,171721,171722,171724],{"class":323,"line":1818},[321,171723,171027],{"class":327},[321,171725,3945],{"class":331},[321,171727,171728,171730,171732,171735,171737,171739,171741],{"class":323,"line":1823},[321,171729,162635],{"class":331},[321,171731,377],{"class":327},[321,171733,171734],{"class":331}," withdraw(",[321,171736,643],{"class":380},[321,171738,12642],{"class":331},[321,171740,1928],{"class":380},[321,171742,338],{"class":331},[321,171744,171745,171747,171750,171752],{"class":323,"line":1829},[321,171746,171039],{"class":327},[321,171748,171749],{"class":331}," BalanceNotEnoughError ",[321,171751,31528],{"class":327},[321,171753,171371],{"class":331},[321,171755,171756,171758],{"class":323,"line":1834},[321,171757,31444],{"class":380},[321,171759,67144],{"class":331},[19,171761,171762],{},"入门阶段大多数情况使用内置异常即可。",[14,171764,171766],{"id":171765},"_99-traceback","9.9 traceback",[19,171768,171769],{},"调试时可以输出完整异常堆栈。",[312,171771,171773],{"className":30523,"code":171772,"language":30525,"meta":30,"style":30},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[318,171774,171775,171782,171786,171792,171802,171810],{"__ignoreMap":30},[321,171776,171777,171779],{"class":323,"line":324},[321,171778,30537],{"class":327},[321,171780,171781],{"class":331}," traceback\n",[321,171783,171784],{"class":323,"line":167},[321,171785,2606],{"emptyLinePlaceholder":251},[321,171787,171788,171790],{"class":323,"line":200},[321,171789,171027],{"class":327},[321,171791,3945],{"class":331},[321,171793,171794,171796,171798,171800],{"class":323,"line":1401},[321,171795,2191],{"class":380},[321,171797,332],{"class":331},[321,171799,156025],{"class":436},[321,171801,338],{"class":331},[321,171803,171804,171806,171808],{"class":323,"line":1407},[321,171805,171039],{"class":327},[321,171807,152371],{"class":380},[321,171809,3945],{"class":331},[321,171811,171812],{"class":323,"line":1421},[321,171813,171814],{"class":331},"    traceback.print_exc()\n",[19,171816,171817],{},"日志系统中常把异常堆栈记录到文件。",[14,171819,171821],{"id":171820},"_910-什么是模块","9.10 什么是模块",[19,171823,171824,171825,126128],{},"模块就是一个 ",[318,171826,146497],{},[19,171828,171829,171830,24763],{},"例如创建 ",[318,171831,171832],{},"my_math.py",[312,171834,171836],{"className":30523,"code":171835,"language":30525,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[318,171837,171838,171846,171856,171860,171864,171873],{"__ignoreMap":30},[321,171839,171840,171842,171844],{"class":323,"line":324},[321,171841,32092],{"class":327},[321,171843,5416],{"class":2169},[321,171845,151238],{"class":331},[321,171847,171848,171850,171852,171854],{"class":323,"line":167},[321,171849,4296],{"class":327},[321,171851,11076],{"class":331},[321,171853,813],{"class":327},[321,171855,151249],{"class":331},[321,171857,171858],{"class":323,"line":200},[321,171859,2606],{"emptyLinePlaceholder":251},[321,171861,171862],{"class":323,"line":1401},[321,171863,2606],{"emptyLinePlaceholder":251},[321,171865,171866,171868,171871],{"class":323,"line":1407},[321,171867,32092],{"class":327},[321,171869,171870],{"class":2169}," sub",[321,171872,151238],{"class":331},[321,171874,171875,171877,171879,171881],{"class":323,"line":1421},[321,171876,4296],{"class":327},[321,171878,11076],{"class":331},[321,171880,864],{"class":327},[321,171882,151249],{"class":331},[19,171884,171885],{},"在另一个文件中导入：",[312,171887,171889],{"className":30523,"code":171888,"language":30525,"meta":30,"style":30},"import my_math\n\nprint(my_math.add(1, 2))\n",[318,171890,171891,171898,171902],{"__ignoreMap":30},[321,171892,171893,171895],{"class":323,"line":324},[321,171894,30537],{"class":327},[321,171896,171897],{"class":331}," my_math\n",[321,171899,171900],{"class":323,"line":167},[321,171901,2606],{"emptyLinePlaceholder":251},[321,171903,171904,171906,171909,171911,171913,171915],{"class":323,"line":200},[321,171905,30560],{"class":380},[321,171907,171908],{"class":331},"(my_math.add(",[321,171910,549],{"class":380},[321,171912,12642],{"class":331},[321,171914,409],{"class":380},[321,171916,30642],{"class":331},[14,171918,171920],{"id":171919},"_911-import导入","9.11 import导入",[292,171922,171924],{"id":171923},"_9111-导入模块","9.11.1 导入模块",[312,171926,171928],{"className":30523,"code":171927,"language":30525,"meta":30,"style":30},"import random\n\nprint(random.randint(1, 10))\n",[318,171929,171930,171936,171940],{"__ignoreMap":30},[321,171931,171932,171934],{"class":323,"line":324},[321,171933,30537],{"class":327},[321,171935,45473],{"class":331},[321,171937,171938],{"class":323,"line":167},[321,171939,2606],{"emptyLinePlaceholder":251},[321,171941,171942,171944,171947,171949,171951,171953],{"class":323,"line":200},[321,171943,30560],{"class":380},[321,171945,171946],{"class":331},"(random.randint(",[321,171948,549],{"class":380},[321,171950,12642],{"class":331},[321,171952,778],{"class":380},[321,171954,30642],{"class":331},[292,171956,171958],{"id":171957},"_9112-导入指定内容","9.11.2 导入指定内容",[312,171960,171962],{"className":30523,"code":171961,"language":30525,"meta":30,"style":30},"from random import randint\n\nprint(randint(1, 10))\n",[318,171963,171964,171975,171979],{"__ignoreMap":30},[321,171965,171966,171968,171970,171972],{"class":323,"line":324},[321,171967,30882],{"class":327},[321,171969,57941],{"class":331},[321,171971,30537],{"class":327},[321,171973,171974],{"class":331}," randint\n",[321,171976,171977],{"class":323,"line":167},[321,171978,2606],{"emptyLinePlaceholder":251},[321,171980,171981,171983,171986,171988,171990,171992],{"class":323,"line":200},[321,171982,30560],{"class":380},[321,171984,171985],{"class":331},"(randint(",[321,171987,549],{"class":380},[321,171989,12642],{"class":331},[321,171991,778],{"class":380},[321,171993,30642],{"class":331},[292,171995,171997],{"id":171996},"_9113-起别名","9.11.3 起别名",[312,171999,172001],{"className":30523,"code":172000,"language":30525,"meta":30,"style":30},"import random as rd\n\nprint(rd.randint(1, 10))\n",[318,172002,172003,172014,172018],{"__ignoreMap":30},[321,172004,172005,172007,172009,172011],{"class":323,"line":324},[321,172006,30537],{"class":327},[321,172008,57941],{"class":331},[321,172010,31528],{"class":327},[321,172012,172013],{"class":331}," rd\n",[321,172015,172016],{"class":323,"line":167},[321,172017,2606],{"emptyLinePlaceholder":251},[321,172019,172020,172022,172025,172027,172029,172031],{"class":323,"line":200},[321,172021,30560],{"class":380},[321,172023,172024],{"class":331},"(rd.randint(",[321,172026,549],{"class":380},[321,172028,12642],{"class":331},[321,172030,778],{"class":380},[321,172032,30642],{"class":331},[312,172034,172036],{"className":30523,"code":172035,"language":30525,"meta":30,"style":30},"from random import randint as rint\n\nprint(rint(1, 10))\n",[318,172037,172038,172054,172058],{"__ignoreMap":30},[321,172039,172040,172042,172044,172046,172049,172051],{"class":323,"line":324},[321,172041,30882],{"class":327},[321,172043,57941],{"class":331},[321,172045,30537],{"class":327},[321,172047,172048],{"class":331}," randint ",[321,172050,31528],{"class":327},[321,172052,172053],{"class":331}," rint\n",[321,172055,172056],{"class":323,"line":167},[321,172057,2606],{"emptyLinePlaceholder":251},[321,172059,172060,172062,172065,172067,172069,172071],{"class":323,"line":200},[321,172061,30560],{"class":380},[321,172063,172064],{"class":331},"(rint(",[321,172066,549],{"class":380},[321,172068,12642],{"class":331},[321,172070,778],{"class":380},[321,172072,30642],{"class":331},[292,172074,172076],{"id":172075},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[312,172078,172080],{"className":30523,"code":172079,"language":30525,"meta":30,"style":30},"from random import *\n",[318,172081,172082],{"__ignoreMap":30},[321,172083,172084,172086,172088,172090],{"class":323,"line":324},[321,172085,30882],{"class":327},[321,172087,57941],{"class":331},[321,172089,30537],{"class":327},[321,172091,172092],{"class":327}," *\n",[19,172094,172095],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172097,172099],{"id":172098},"_912-常用内置模块","9.12 常用内置模块",[292,172101,172103],{"id":172102},"_9121-random","9.12.1 random",[312,172105,172107],{"className":30523,"code":172106,"language":30525,"meta":30,"style":30},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[318,172108,172109,172115,172119,172133,172152],{"__ignoreMap":30},[321,172110,172111,172113],{"class":323,"line":324},[321,172112,30537],{"class":327},[321,172114,45473],{"class":331},[321,172116,172117],{"class":323,"line":167},[321,172118,2606],{"emptyLinePlaceholder":251},[321,172120,172121,172123,172125,172127,172129,172131],{"class":323,"line":200},[321,172122,30560],{"class":380},[321,172124,171946],{"class":331},[321,172126,549],{"class":380},[321,172128,12642],{"class":331},[321,172130,778],{"class":380},[321,172132,30642],{"class":331},[321,172134,172135,172137,172140,172142,172144,172146,172148,172150],{"class":323,"line":1401},[321,172136,30560],{"class":380},[321,172138,172139],{"class":331},"(random.choice([",[321,172141,150033],{"class":436},[321,172143,12642],{"class":331},[321,172145,151081],{"class":436},[321,172147,12642],{"class":331},[321,172149,159876],{"class":436},[321,172151,33288],{"class":331},[321,172153,172154,172156,172159,172161,172163,172165,172167,172169,172171,172173,172175,172177,172179,172181],{"class":323,"line":1407},[321,172155,30560],{"class":380},[321,172157,172158],{"class":331},"(random.sample([",[321,172160,549],{"class":380},[321,172162,12642],{"class":331},[321,172164,409],{"class":380},[321,172166,12642],{"class":331},[321,172168,403],{"class":380},[321,172170,12642],{"class":331},[321,172172,625],{"class":380},[321,172174,12642],{"class":331},[321,172176,651],{"class":380},[321,172178,112347],{"class":331},[321,172180,409],{"class":380},[321,172182,30642],{"class":331},[292,172184,172186],{"id":172185},"_9122-time","9.12.2 time",[312,172188,172190],{"className":30523,"code":172189,"language":30525,"meta":30,"style":30},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[318,172191,172192,172198,172202,172209,172217],{"__ignoreMap":30},[321,172193,172194,172196],{"class":323,"line":324},[321,172195,30537],{"class":327},[321,172197,31974],{"class":331},[321,172199,172200],{"class":323,"line":167},[321,172201,2606],{"emptyLinePlaceholder":251},[321,172203,172204,172206],{"class":323,"line":200},[321,172205,30560],{"class":380},[321,172207,172208],{"class":331},"(time.time())\n",[321,172210,172211,172213,172215],{"class":323,"line":1401},[321,172212,95216],{"class":331},[321,172214,549],{"class":380},[321,172216,338],{"class":331},[321,172218,172219,172221,172223,172226],{"class":323,"line":1407},[321,172220,30560],{"class":380},[321,172222,332],{"class":331},[321,172224,172225],{"class":436},"\"1秒后执行\"",[321,172227,338],{"class":331},[292,172229,172231],{"id":172230},"_9123-datetime","9.12.3 datetime",[312,172233,172235],{"className":30523,"code":172234,"language":30525,"meta":30,"style":30},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[318,172236,172237,172249,172253,172263,172270],{"__ignoreMap":30},[321,172238,172239,172241,172244,172246],{"class":323,"line":324},[321,172240,30882],{"class":327},[321,172242,172243],{"class":331}," datetime ",[321,172245,30537],{"class":327},[321,172247,172248],{"class":331}," datetime\n",[321,172250,172251],{"class":323,"line":167},[321,172252,2606],{"emptyLinePlaceholder":251},[321,172254,172255,172258,172260],{"class":323,"line":200},[321,172256,172257],{"class":331},"now ",[321,172259,377],{"class":327},[321,172261,172262],{"class":331}," datetime.now()\n",[321,172264,172265,172267],{"class":323,"line":1401},[321,172266,30560],{"class":380},[321,172268,172269],{"class":331},"(now)\n",[321,172271,172272,172274,172277,172280,172282,172285],{"class":323,"line":1407},[321,172273,30560],{"class":380},[321,172275,172276],{"class":331},"(now.strftime(",[321,172278,172279],{"class":436},"\"%Y-%m-",[321,172281,156836],{"class":380},[321,172283,172284],{"class":436}," %H:%M:%S\"",[321,172286,30642],{"class":331},[292,172288,172290],{"id":172289},"_9124-os","9.12.4 os",[312,172292,172294],{"className":30523,"code":172293,"language":30525,"meta":30,"style":30},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[318,172295,172296,172302,172306,172313],{"__ignoreMap":30},[321,172297,172298,172300],{"class":323,"line":324},[321,172299,30537],{"class":327},[321,172301,45450],{"class":331},[321,172303,172304],{"class":323,"line":167},[321,172305,2606],{"emptyLinePlaceholder":251},[321,172307,172308,172310],{"class":323,"line":200},[321,172309,30560],{"class":380},[321,172311,172312],{"class":331},"(os.getcwd())\n",[321,172314,172315,172317,172320,172323],{"class":323,"line":1401},[321,172316,30560],{"class":380},[321,172318,172319],{"class":331},"(os.listdir(",[321,172321,172322],{"class":436},"\".\"",[321,172324,30642],{"class":331},[292,172326,172328],{"id":172327},"_9125-sys","9.12.5 sys",[312,172330,172332],{"className":30523,"code":172331,"language":30525,"meta":30,"style":30},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[318,172333,172334,172341,172345,172352],{"__ignoreMap":30},[321,172335,172336,172338],{"class":323,"line":324},[321,172337,30537],{"class":327},[321,172339,172340],{"class":331}," sys\n",[321,172342,172343],{"class":323,"line":167},[321,172344,2606],{"emptyLinePlaceholder":251},[321,172346,172347,172349],{"class":323,"line":200},[321,172348,30560],{"class":380},[321,172350,172351],{"class":331},"(sys.version)\n",[321,172353,172354,172356],{"class":323,"line":1401},[321,172355,30560],{"class":380},[321,172357,172358],{"class":331},"(sys.path)\n",[14,172360,172362,172363,172365,172366,583],{"id":172361},"_913-if-name-main","9.13 if ",[481,172364,79955],{}," == \"",[481,172367,102203],{},[19,172369,172370,172371,172374],{},"模块被直接运行和被导入时，",[318,172372,172373],{},"__name__"," 的值不同。",[19,172376,172377,172378,24763],{},"创建 ",[318,172379,172380],{},"my_module.py",[312,172382,172384],{"className":30523,"code":172383,"language":30525,"meta":30,"style":30},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[318,172385,172386,172394,172404,172408,172412,172424],{"__ignoreMap":30},[321,172387,172388,172390,172392],{"class":323,"line":324},[321,172389,32092],{"class":327},[321,172391,5416],{"class":2169},[321,172393,151238],{"class":331},[321,172395,172396,172398,172400,172402],{"class":323,"line":167},[321,172397,4296],{"class":327},[321,172399,11076],{"class":331},[321,172401,813],{"class":327},[321,172403,151249],{"class":331},[321,172405,172406],{"class":323,"line":200},[321,172407,2606],{"emptyLinePlaceholder":251},[321,172409,172410],{"class":323,"line":1401},[321,172411,2606],{"emptyLinePlaceholder":251},[321,172413,172414,172416,172418,172420,172422],{"class":323,"line":1407},[321,172415,1737],{"class":327},[321,172417,31365],{"class":380},[321,172419,101704],{"class":327},[321,172421,101707],{"class":436},[321,172423,3945],{"class":331},[321,172425,172426,172428,172430,172432,172434,172436],{"class":323,"line":1421},[321,172427,31444],{"class":380},[321,172429,166745],{"class":331},[321,172431,549],{"class":380},[321,172433,12642],{"class":331},[321,172435,409],{"class":380},[321,172437,30642],{"class":331},[19,172439,172440],{},"作用：",[151,172442,172443,172446],{},[154,172444,172445],{},"直接运行该文件时，执行测试代码。",[154,172447,172448],{},"被其他文件导入时，不执行测试代码。",[19,172450,172451],{},"这是写模块时很常用的习惯。",[14,172453,172455],{"id":172454},"_914-包","9.14 包",[19,172457,172458,172459,172462],{},"包是包含 ",[318,172460,172461],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172464,172465],{},"目录结构：",[312,172467,172470],{"className":172468,"code":172469,"language":5394,"meta":30},[5392],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[318,172471,172469],{"__ignoreMap":30},[19,172473,172474],{},"导入：",[312,172476,172478],{"className":30523,"code":172477,"language":30525,"meta":30,"style":30},"from utils.file_utils import read_file\n",[318,172479,172480],{"__ignoreMap":30},[321,172481,172482,172484,172487,172489],{"class":323,"line":324},[321,172483,30882],{"class":327},[321,172485,172486],{"class":331}," utils.file_utils ",[321,172488,30537],{"class":327},[321,172490,172491],{"class":331}," read_file\n",[19,172493,172494,172496],{},[318,172495,172461],{}," 可以为空，也可以写包初始化逻辑。",[14,172498,172500],{"id":172499},"_915-第三方包","9.15 第三方包",[19,172502,172503,172504,172506],{},"第三方包通过 ",[318,172505,24039],{}," 安装。",[312,172508,172510],{"className":24030,"code":172509,"language":24032,"meta":30,"style":30},"pip install requests\n",[318,172511,172512],{"__ignoreMap":30},[321,172513,172514,172516,172518],{"class":323,"line":324},[321,172515,24039],{"class":2169},[321,172517,24042],{"class":436},[321,172519,146243],{"class":436},[19,172521,172522],{},"使用：",[312,172524,172526],{"className":30523,"code":172525,"language":30525,"meta":30,"style":30},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[318,172527,172528,172534,172538,172553],{"__ignoreMap":30},[321,172529,172530,172532],{"class":323,"line":324},[321,172531,30537],{"class":327},[321,172533,146243],{"class":331},[321,172535,172536],{"class":323,"line":167},[321,172537,2606],{"emptyLinePlaceholder":251},[321,172539,172540,172543,172545,172548,172551],{"class":323,"line":200},[321,172541,172542],{"class":331},"response ",[321,172544,377],{"class":327},[321,172546,172547],{"class":331}," requests.get(",[321,172549,172550],{"class":436},"\"https:\u002F\u002Fwww.example.com\"",[321,172552,338],{"class":331},[321,172554,172555,172557],{"class":323,"line":1401},[321,172556,30560],{"class":380},[321,172558,172559],{"class":331},"(response.status_code)\n",[19,172561,172562],{},"查看已安装包：",[312,172564,172566],{"className":24030,"code":172565,"language":24032,"meta":30,"style":30},"pip list\n",[318,172567,172568],{"__ignoreMap":30},[321,172569,172570,172572],{"class":323,"line":324},[321,172571,24039],{"class":2169},[321,172573,119100],{"class":436},[19,172575,172576],{},"导出项目依赖：",[312,172578,172579],{"className":24030,"code":146438,"language":24032,"meta":30,"style":30},[318,172580,172581],{"__ignoreMap":30},[321,172582,172583,172585,172587,172589],{"class":323,"line":324},[321,172584,24039],{"class":2169},[321,172586,146447],{"class":436},[321,172588,26367],{"class":327},[321,172590,146452],{"class":436},[19,172592,172593],{},"安装项目依赖：",[312,172595,172596],{"className":24030,"code":146458,"language":24032,"meta":30,"style":30},[318,172597,172598],{"__ignoreMap":30},[321,172599,172600,172602,172604,172606],{"class":323,"line":324},[321,172601,24039],{"class":2169},[321,172603,24042],{"class":436},[321,172605,119784],{"class":380},[321,172607,146452],{"class":436},[14,172609,172611],{"id":172610},"_916-模块搜索路径","9.16 模块搜索路径",[19,172613,172614,172615,172618],{},"Python 导入模块时会在 ",[318,172616,172617],{},"sys.path"," 中查找。",[312,172620,172622],{"className":30523,"code":172621,"language":30525,"meta":30,"style":30},"import sys\n\nfor path in sys.path:\n    print(path)\n",[318,172623,172624,172630,172634,172646],{"__ignoreMap":30},[321,172625,172626,172628],{"class":323,"line":324},[321,172627,30537],{"class":327},[321,172629,172340],{"class":331},[321,172631,172632],{"class":323,"line":167},[321,172633,2606],{"emptyLinePlaceholder":251},[321,172635,172636,172638,172641,172643],{"class":323,"line":200},[321,172637,3231],{"class":327},[321,172639,172640],{"class":331}," path ",[321,172642,26188],{"class":327},[321,172644,172645],{"class":331}," sys.path:\n",[321,172647,172648,172650],{"class":323,"line":1401},[321,172649,31444],{"class":380},[321,172651,169374],{"class":331},[19,172653,172654],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172656,157768],{},[312,172658,172661],{"className":172659,"code":172660,"language":5394,"meta":30},[5392],"random.py\njson.py\ntime.py\n",[318,172662,172660],{"__ignoreMap":30},[19,172664,172665],{},"这些文件名可能导致导入异常。",[14,172667,172669],{"id":172668},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172671,172465],{},[312,172673,172676],{"className":172674,"code":172675,"language":5394,"meta":30},[5392],"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",[318,172677,172675],{"__ignoreMap":30},[19,172679,172680,24763],{},[318,172681,172682],{},"utils\u002Ffile_utils.py",[312,172684,172686],{"className":30523,"code":172685,"language":30525,"meta":30,"style":30},"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",[318,172687,172688,172694,172704,172708,172712,172722,172732,172740,172746,172750,172777,172787,172791,172795,172805,172831],{"__ignoreMap":30},[321,172689,172690,172692],{"class":323,"line":324},[321,172691,30537],{"class":327},[321,172693,147236],{"class":331},[321,172695,172696,172698,172700,172702],{"class":323,"line":167},[321,172697,30882],{"class":327},[321,172699,108456],{"class":331},[321,172701,30537],{"class":327},[321,172703,108461],{"class":331},[321,172705,172706],{"class":323,"line":200},[321,172707,2606],{"emptyLinePlaceholder":251},[321,172709,172710],{"class":323,"line":1401},[321,172711,2606],{"emptyLinePlaceholder":251},[321,172713,172714,172716,172719],{"class":323,"line":1407},[321,172715,32092],{"class":327},[321,172717,172718],{"class":2169}," read_json",[321,172720,172721],{"class":331},"(path):\n",[321,172723,172724,172727,172729],{"class":323,"line":1421},[321,172725,172726],{"class":331},"    path ",[321,172728,377],{"class":327},[321,172730,172731],{"class":331}," Path(path)\n",[321,172733,172734,172736,172738],{"class":323,"line":1427},[321,172735,3307],{"class":327},[321,172737,39075],{"class":327},[321,172739,169455],{"class":331},[321,172741,172742,172744],{"class":323,"line":1518},[321,172743,14959],{"class":327},[321,172745,51983],{"class":331},[321,172747,172748],{"class":323,"line":1524},[321,172749,2606],{"emptyLinePlaceholder":251},[321,172751,172752,172754,172756,172759,172761,172763,172765,172767,172769,172771,172773,172775],{"class":323,"line":1536},[321,172753,34323],{"class":327},[321,172755,146936],{"class":380},[321,172757,172758],{"class":331},"(path, ",[321,172760,146946],{"class":436},[321,172762,12642],{"class":331},[321,172764,146951],{"class":5423},[321,172766,377],{"class":327},[321,172768,146956],{"class":436},[321,172770,13921],{"class":331},[321,172772,31528],{"class":327},[321,172774,148298],{"class":5423},[321,172776,3945],{"class":331},[321,172778,172779,172781,172783,172785],{"class":323,"line":1818},[321,172780,14959],{"class":327},[321,172782,148309],{"class":331},[321,172784,45499],{"class":5423},[321,172786,338],{"class":331},[321,172788,172789],{"class":323,"line":1823},[321,172790,2606],{"emptyLinePlaceholder":251},[321,172792,172793],{"class":323,"line":1829},[321,172794,2606],{"emptyLinePlaceholder":251},[321,172796,172797,172799,172802],{"class":323,"line":1834},[321,172798,32092],{"class":327},[321,172800,172801],{"class":2169}," write_json",[321,172803,172804],{"class":331},"(path, data):\n",[321,172806,172807,172809,172811,172813,172815,172817,172819,172821,172823,172825,172827,172829],{"class":323,"line":1848},[321,172808,34323],{"class":327},[321,172810,146936],{"class":380},[321,172812,172758],{"class":331},[321,172814,152121],{"class":436},[321,172816,12642],{"class":331},[321,172818,146951],{"class":5423},[321,172820,377],{"class":327},[321,172822,146956],{"class":436},[321,172824,13921],{"class":331},[321,172826,31528],{"class":327},[321,172828,148298],{"class":5423},[321,172830,3945],{"class":331},[321,172832,172833,172836,172838,172840,172842,172844,172846,172848,172850,172852,172854],{"class":323,"line":1853},[321,172834,172835],{"class":331},"        json.dump(data, ",[321,172837,45499],{"class":5423},[321,172839,12642],{"class":331},[321,172841,147282],{"class":5423},[321,172843,377],{"class":327},[321,172845,34132],{"class":380},[321,172847,12642],{"class":331},[321,172849,152157],{"class":5423},[321,172851,377],{"class":327},[321,172853,409],{"class":380},[321,172855,338],{"class":331},[19,172857,172858,24763],{},[318,172859,154752],{},[312,172861,172863],{"className":30523,"code":172862,"language":30525,"meta":30,"style":30},"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",[318,172864,172865,172876,172880,172893,172913],{"__ignoreMap":30},[321,172866,172867,172869,172871,172873],{"class":323,"line":324},[321,172868,30882],{"class":327},[321,172870,172486],{"class":331},[321,172872,30537],{"class":327},[321,172874,172875],{"class":331}," read_json, write_json\n",[321,172877,172878],{"class":323,"line":167},[321,172879,2606],{"emptyLinePlaceholder":251},[321,172881,172882,172884,172886,172889,172891],{"class":323,"line":200},[321,172883,159861],{"class":331},[321,172885,377],{"class":327},[321,172887,172888],{"class":331}," read_json(",[321,172890,151976],{"class":436},[321,172892,338],{"class":331},[321,172894,172895,172897,172899,172901,172903,172905,172907,172909,172911],{"class":323,"line":1401},[321,172896,170679],{"class":331},[321,172898,62824],{"class":436},[321,172900,51582],{"class":331},[321,172902,150033],{"class":436},[321,172904,12642],{"class":331},[321,172906,151617],{"class":436},[321,172908,51582],{"class":331},[321,172910,1321],{"class":380},[321,172912,165297],{"class":331},[321,172914,172915,172918,172920],{"class":323,"line":1407},[321,172916,172917],{"class":331},"write_json(",[321,172919,151976],{"class":436},[321,172921,172922],{"class":331},", students)\n",[14,172924,172926],{"id":172925},"_918-易错点","9.18 易错点",[151,172928,172929,172932,172937,172942,172945,172948],{},[154,172930,172931],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[154,172933,172934,172935,28530],{},"能指定异常类型就不要裸写 ",[318,172936,171039],{},[154,172938,172939,172941],{},[318,172940,171414],{}," 无论是否出错都会执行。",[154,172943,172944],{},"模块文件名不要和标准库重名。",[154,172946,172947],{},"导入自己写的模块时，要注意运行目录。",[154,172949,172950],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172952,172954],{"id":172953},"_919-本章练习","9.19 本章练习",[151,172956,172957,172960,172963,172969,172976],{},[154,172958,172959],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[154,172961,172962],{},"写函数读取文件，如果文件不存在则返回空字符串。",[154,172964,172377,172965,172968],{},[318,172966,172967],{},"math_utils.py","，实现加减乘除函数并导入使用。",[154,172970,172971,172972,172975],{},"创建一个 ",[318,172973,172974],{},"utils"," 包，把 JSON 读写函数放进去。",[154,172977,172978],{},"写一个程序，捕获除零异常和输入格式异常。",[5333,172980,172981],{},"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":30,"searchDepth":167,"depth":167,"links":172983},[172984,172985,172986,172987,172988,172989,172990,172991,172992,172993,172994,173000,173007,173009,173010,173011,173012,173013,173014],{"id":170836,"depth":167,"text":170837},{"id":170964,"depth":167,"text":170965},{"id":171013,"depth":167,"text":171014},{"id":171162,"depth":167,"text":171163},{"id":171334,"depth":167,"text":171335},{"id":171403,"depth":167,"text":171404},{"id":171514,"depth":167,"text":171515},{"id":171640,"depth":167,"text":171641},{"id":171765,"depth":167,"text":171766},{"id":171820,"depth":167,"text":171821},{"id":171919,"depth":167,"text":171920,"children":172995},[172996,172997,172998,172999],{"id":171923,"depth":200,"text":171924},{"id":171957,"depth":200,"text":171958},{"id":171996,"depth":200,"text":171997},{"id":172075,"depth":200,"text":172076},{"id":172098,"depth":167,"text":172099,"children":173001},[173002,173003,173004,173005,173006],{"id":172102,"depth":200,"text":172103},{"id":172185,"depth":200,"text":172186},{"id":172230,"depth":200,"text":172231},{"id":172289,"depth":200,"text":172290},{"id":172327,"depth":200,"text":172328},{"id":172361,"depth":167,"text":173008},"9.13 if name == \"main\"",{"id":172454,"depth":167,"text":172455},{"id":172499,"depth":167,"text":172500},{"id":172610,"depth":167,"text":172611},{"id":172668,"depth":167,"text":172669},{"id":172925,"depth":167,"text":172926},{"id":172953,"depth":167,"text":172954},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170828,"description":23584},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173021,"title":173022,"body":173023,"description":173186,"extension":249,"meta":173187,"navigation":251,"path":173188,"seo":173189,"stem":173190,"__hash__":173191},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173024,"toc":173181},[173025,173028,173031,173034,173045,173047,173121,173124,173127,173130,173133,173136,173139,173142,173145,173148,173151],[10,173026,173022],{"id":173027},"python教程",[19,173029,173030],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173032,173033],{},"建议学习环境：",[151,173035,173036,173039,173042],{},[154,173037,173038],{},"Python 版本：Python 3.10 及以上。",[154,173040,173041],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[154,173043,173044],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173046,117223],{"id":117223},[151,173048,173049,173055,173061,173067,173073,173079,173085,173091,173097,173103,173109,173115],{},[154,173050,173051],{},[570,173052,173054],{"href":173053},".\u002Fch1-Python","Python环境与第一个程序",[154,173056,173057],{},[570,173058,173060],{"href":173059},".\u002Fch2","基础语法、变量与字符串",[154,173062,173063],{},[570,173064,173066],{"href":173065},".\u002Fch3","判断语句",[154,173068,173069],{},[570,173070,173072],{"href":173071},".\u002Fch4","循环语句",[154,173074,173075],{},[570,173076,173078],{"href":173077},".\u002Fch5","函数基础",[154,173080,173081],{},[570,173082,173084],{"href":173083},".\u002Fch6","数据容器",[154,173086,173087],{},[570,173088,173090],{"href":173089},".\u002Fch7","函数进阶",[154,173092,173093],{},[570,173094,173096],{"href":173095},".\u002Fch8","文件操作",[154,173098,173099],{},[570,173100,173102],{"href":173101},".\u002Fch9","异常、模块与包",[154,173104,173105],{},[570,173106,173108],{"href":173107},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[154,173110,173111],{},[570,173112,173114],{"href":173113},".\u002Fch11","面向对象基础",[154,173116,173117],{},[570,173118,173120],{"href":173119},".\u002Fch12","综合案例与复习路线",[14,173122,173123],{"id":173123},"学习路线",[19,173125,173126],{},"第一阶段：能运行程序。",[19,173128,173129],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173131,173132],{},"第二阶段：能组织数据。",[19,173134,173135],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173137,173138],{},"第三阶段：能封装逻辑。",[19,173140,173141],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173143,173144],{},"第四阶段：能做小项目。",[19,173146,173147],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173149,173150],{"id":173150},"参考资料",[151,173152,173153,173160,173167,173174],{},[154,173154,173155,173156],{},"黑马程序员 Python 入门教程推荐：",[570,173157,173158],{"href":173158,"rel":173159},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24073],[154,173161,173162,173163],{},"Python 官方中文教程：",[570,173164,173165],{"href":173165,"rel":173166},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24073],[154,173168,173169,173170],{},"Python 标准库文档：",[570,173171,173172],{"href":173172,"rel":173173},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24073],[154,173175,173176,173177],{},"pyecharts 文档：",[570,173178,173179],{"href":173179,"rel":173180},"https:\u002F\u002Fpyecharts.org\u002F",[24073],{"title":30,"searchDepth":167,"depth":167,"links":173182},[173183,173184,173185],{"id":117223,"depth":167,"text":117223},{"id":173123,"depth":167,"text":173123},{"id":173150,"depth":167,"text":173150},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23586},"\u002Fwiki\u002F2024-10-10-python",{"title":173022,"description":173186},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331400527]