[{"data":1,"prerenderedAt":173427},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-04-qiang-hua-xue-xi\u002Fch1-qiang-hua-xue-xi-de-ji-ben-ren-shi":3,"wiki-doc-nav":645},{"id":4,"title":5,"body":6,"description":54,"extension":638,"meta":639,"navigation":640,"path":641,"seo":642,"stem":643,"__hash__":644},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":8,"toc":620},"minimark",[9,13,18,22,25,28,49,56,59,62,65,68,73,76,81,84,87,91,94,97,103,106,124,128,133,136,141,144,148,151,164,167,171,174,177,180,208,211,223,234,249,287,291,298,306,310,313,316,321,325,328,331,336,339,343,346,349,354,357,361,366,370,443,447,450,453,456,459,462,468,497,500,514,524,528,531,534,539,542,547,552,555,558,563,569,572,577,583,586,591,597,600,603,608,611,616],[10,11,5],"h1",{"id":12},"_1强化学习基本认识",[14,15,17],"h2",{"id":16},"_11什么是强化学习","1.1.什么是强化学习",[19,20,21],"p",{},"强化学习有两部分组成：智能体和环境；",[19,23,24],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,26,27],{},"强化学习与监督学习的区别:",[29,30,31,35,38,41],"ol",{},[32,33,34],"li",{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[32,36,37],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[32,39,40],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[32,42,43,44,48],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[45,46,47],"strong",{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,50,51],{},[52,53],"img",{"alt":54,"src":55},"","..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,57,58],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,60,61],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,63,64],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,66,67],{},"获取奖励",[19,69,70],{},[52,71],{"alt":54,"src":72},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,74,75],{},"强化学习可以分成标准强化学习和深度强化学习",[19,77,78],{},[52,79],{"alt":54,"src":80},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,82,83],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,85,86],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,88,90],{"id":89},"_12强化学习应用场景","1.2.强化学习应用场景",[19,92,93],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,95,96],{},"具身智能中的应用",[19,98,99,102],{},[45,100,101],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,104,105],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,107,108,109,112,113,116,117,120,121],{},"机器人是",[45,110,111],{},"躯体","，深度学习是",[45,114,115],{},"神经元****网络","，VLA是",[45,118,119],{},"通用的行为逻辑","，而强化学习是",[45,122,123],{},"教练",[14,125,127],{"id":126},"_13序列决策","1.3.序列决策",[129,130,132],"h3",{"id":131},"_131智能体与环境","1.3.1.智能体与环境",[19,134,135],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,137,138],{},[52,139],{"alt":54,"src":140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,142,143],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[129,145,147],{"id":146},"_132奖励","1.3.2.奖励",[19,149,150],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,152,153,154,163],{},"取某个策略的表现如何。强化学习的目的就是",[45,155,156,157,162],{},"最大化",[45,158,159],{},[45,160,161],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,165,166],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[129,168,170],{"id":169},"_133序列决策","1.3.3.序列决策",[19,172,173],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,175,176],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,178,179],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,181,182,186,187,190,191,194,195,197,198,201,202,201,205],{},[183,184,185],"em",{},"Ht"," = ",[183,188,189],{},"o","1*, a",[183,192,193],{},"1",", r",[183,196,193],{},", . . . ,* ",[183,199,200],{},"ot"," ",[183,203,204],{},", at ,",[183,206,207],{},"rt",[19,209,210],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,212,213,186,216,219,220,222],{},[183,214,215],{},"st",[183,217,218],{},"f"," (",[183,221,185],{},")",[19,224,225,226,229,230,233],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[45,227,228],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[45,231,232],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,235,236,237,240,241,244,245,248],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[45,238,239],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[45,242,243],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[183,246,247],{},"S, A, T, R, Ω, O, γ",")。",[19,250,251,252,255,256,259,260,263,264,267,268,271,272,263,275,278,279,282,283,286],{},"其中 ",[183,253,254],{},"S"," 表示状态空间，为隐变量，",[183,257,258],{},"A"," 为动作空间，",[183,261,262],{},"T","(",[183,265,266],{},"s ′ |s, a",") 为状态转移概率，",[183,269,270],{},"R"," 为奖励函数，",[183,273,274],{},"Ω",[183,276,277],{},"o|s, a",") 为观测概率，",[183,280,281],{},"O"," 为观测空间，",[183,284,285],{},"γ"," 为折扣因子。",[14,288,290],{"id":289},"_14动作空间","1.4.动作空间",[19,292,293,294,297],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[45,295,296],{},"动作空间"," ，动作空间分为:",[29,299,300,303],{},[32,301,302],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[32,304,305],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,307,309],{"id":308},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,311,312],{},"由策略、价值函数、模型三部分组成",[19,314,315],{},"这三者组成马尔可夫决策过程",[19,317,318],{},[52,319],{"alt":54,"src":320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[129,322,324],{"id":323},"_151策略","1.5.1.策略",[19,326,327],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,329,330],{},"策略可分为两种：",[19,332,333],{},[52,334],{"alt":54,"src":335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,337,338],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[129,340,342],{"id":341},"_152价值函数","1.5.2.价值函数",[19,344,345],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,347,348],{},"价值函数中有一个折扣因子，类似于存款利息",[19,350,351],{},[52,352],{"alt":54,"src":353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,355,356],{},"进入某个状态采取的最优动作可以通过Q函数得到",[129,358,360],{"id":359},"_153模型","1.5.3.模型",[19,362,363],{},[52,364],{"alt":54,"src":365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,367,369],{"id":368},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[371,372,373,387],"table",{},[374,375,376],"thead",{},[377,378,379,384],"tr",{},[380,381,383],"th",{"align":382},"left","类型",[380,385,386],{"align":382},"特点",[388,389,390,401,411,421,433],"tbody",{},[377,391,392,398],{},[393,394,395],"td",{"align":382},[45,396,397],{},"基于价值的智能体",[393,399,400],{"align":382},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[377,402,403,408],{},[393,404,405],{"align":382},[45,406,407],{},"基于策略的智能体",[393,409,410],{"align":382},"直接学习策略，没有学习价值函数",[377,412,413,418],{},[393,414,415],{"align":382},[45,416,417],{},"演员-评论员智能体",[393,419,420],{"align":382},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[377,422,423,428],{},[393,424,425],{"align":382},[45,426,427],{},"有模型强化学习智能体",[393,429,430],{"align":382},[52,431],{"alt":54,"src":432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[377,434,435,440],{},[393,436,437],{"align":382},[45,438,439],{},"免模型强化学习智能体",[393,441,442],{"align":382},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,444,446],{"id":445},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,448,449],{},"学习和规划是序列决策的两个基本问题",[19,451,452],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,454,455],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,457,458],{},"强化学习用到的库：Gym",[19,460,461],{},"Gym可以检验强化学习算法的优劣",[19,463,464,467],{},[45,465,466],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[469,470,474],"pre",{"className":471,"code":472,"language":473,"meta":54,"style":54},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[475,476,477],"code",{"__ignoreMap":54},[478,479,482,486,490,493],"span",{"class":480,"line":481},"line",1,[478,483,485],{"class":484},"sScJk","pip",[478,487,489],{"class":488},"sZZnC"," install",[478,491,492],{"class":488}," gym==",[478,494,496],{"class":495},"sj4cs","0.25.2\n",[19,498,499],{},"显示图形界面需要",[469,501,503],{"className":471,"code":502,"language":473,"meta":54,"style":54},"pip install pygame\n",[475,504,505],{"__ignoreMap":54},[478,506,507,509,511],{"class":480,"line":481},[478,508,485],{"class":484},[478,510,489],{"class":488},[478,512,513],{"class":488}," pygame\n",[19,515,516,517],{},"有关Gym库的相关文档介绍：",[518,519,523],"a",{"href":520,"rel":521},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[522],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,525,527],{"id":526},"_18一些补充基础概念","1.8.一些补充基础概念",[19,529,530],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,532,533],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,535,536],{},[52,537],{"alt":54,"src":538},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,540,541],{},"折扣率需要自己来设定",[19,543,544],{},[52,545],{"alt":54,"src":546},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[29,548,549],{},[32,550,551],{},"状态转移函数：",[19,553,554],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,556,557],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,559,560],{},[52,561],{"alt":54,"src":562},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[29,564,566],{"start":565},2,[32,567,568],{},"动作价值函数：",[19,570,571],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,573,574],{},[52,575],{"alt":54,"src":576},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[29,578,580],{"start":579},3,[32,581,582],{},"最优动作价值函数：",[19,584,585],{},"这个函数是对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,587,588],{},[52,589],{"alt":54,"src":590},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[29,592,594],{"start":593},4,[32,595,596],{},"状态价值函数:",[19,598,599],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,601,602],{},"它衡量的是“一个具体动作”的长期价值",[19,604,605],{},[52,606],{"alt":54,"src":607},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,609,610],{},"几个价值函数之间的比较：",[19,612,613],{},[52,614],{"alt":54,"src":615},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[617,618,619],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":54,"searchDepth":565,"depth":565,"links":621},[622,623,624,629,630,635,636,637],{"id":16,"depth":565,"text":17},{"id":89,"depth":565,"text":90},{"id":126,"depth":565,"text":127,"children":625},[626,627,628],{"id":131,"depth":579,"text":132},{"id":146,"depth":579,"text":147},{"id":169,"depth":579,"text":170},{"id":289,"depth":565,"text":290},{"id":308,"depth":565,"text":309,"children":631},[632,633,634],{"id":323,"depth":579,"text":324},{"id":341,"depth":579,"text":342},{"id":359,"depth":579,"text":360},{"id":368,"depth":565,"text":369},{"id":445,"depth":565,"text":446},{"id":526,"depth":565,"text":527},"md",{},true,"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":5,"description":54},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",[646,5728,6836,8256,11245,12596,14085,15173,23936,23949,24361,24387,24511,24752,24817,24835,24848,24895,25019,25188,25387,25567,25772,25908,26003,26040,26053,26363,27104,27812,27833,28853,30484,30635,30648,30660,30961,50773,50788,50805,50838,53710,77058,93203,93224,93337,93458,94228,94891,95252,95290,95396,95496,95539,95565,95626,97280,97381,97406,97897,98397,99477,99760,100502,101004,101016,103032,104696,106199,107897,109814,111733,113755,117225,117657,118120,118869,121813,122161,122183,122539,125846,125858,126261,126284,126431,126598,126803,127104,127661,128318,130249,131847,132496,133990,135421,136656,138350,140102,142512,142628,143563,143774,144659,145894,146122,146135,147290,149702,152070,155391,157868,159512,161289,163302,166354,168534,171061,173255],{"id":647,"title":648,"body":649,"description":54,"extension":638,"meta":5723,"navigation":640,"path":5724,"seo":5725,"stem":5726,"__hash__":5727},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":650,"toc":5695},[651,654,658,661,665,676,680,684,687,690,693,696,699,728,732,735,738,741,744,795,799,817,819,833,836,844,847,1694,1701,1718,1722,1811,1815,1821,1910,1914,1952,1956,2020,2024,2028,2034,2045,2049,2054,2058,2063,2067,2072,2076,2080,2085,2354,2359,2497,2502,2758,2761,2769,2773,2778,2881,2884,3190,3199,3300,3303,3306,3309,3312,3572,3577,3717,3720,3899,3902,4030,4033,4185,4189,4194,4197,4208,4216,4219,4326,4330,4334,4339,4389,4394,4399,4423,4428,4481,4484,4489,4666,4671,4956,4961,5358,5362,5367,5424,5429,5437,5440,5580,5583,5692],[10,652,648],{"id":653},"_1基础入门",[14,655,657],{"id":656},"_11注释","1.1注释",[19,659,660],{},"\u002F\u002F或者\u002F* *\u002F",[14,662,664],{"id":663},"_12命名","1.2命名",[29,666,667,670,673],{},[32,668,669],{},"字母数字下划线",[32,671,672],{},"开头必须是字母或_",[32,674,675],{},"不能使用关键词",[14,677,679],{"id":678},"_13数据类型","1.3数据类型",[129,681,683],{"id":682},"_131整形","1.3.1整形",[19,685,686],{},"short 短整形 2",[19,688,689],{},"int 整形 4",[19,691,692],{},"long 长整形 win4 linux32位4 linux64位8",[19,694,695],{},"long long 长长整形 8",[19,697,698],{},"利用sizeof可以求数据类型占用的内存空间大小",[469,700,704],{"className":701,"code":702,"language":703,"meta":54,"style":54},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[475,705,706,721],{"__ignoreMap":54},[478,707,708,712,715,718],{"class":480,"line":481},[478,709,711],{"class":710},"szBVR","sizeof",[478,713,263],{"class":714},"sVt8B",[478,716,717],{"class":710},"int",[478,719,720],{"class":714},")\n",[478,722,723,725],{"class":480,"line":565},[478,724,711],{"class":710},[478,726,727],{"class":714},"(num)\n",[129,729,731],{"id":730},"_132浮点型","1.3.2浮点型",[19,733,734],{},"float 单精度 4节 7位有效数字",[19,736,737],{},"double 双精度 8节 15-16有效数字",[19,739,740],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,742,743],{},"注意点：",[469,745,747],{"className":701,"code":746,"language":703,"meta":54,"style":54},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[475,748,749,772],{"__ignoreMap":54},[478,750,751,754,757,760,763,765,768],{"class":480,"line":481},[478,752,753],{"class":710},"float",[478,755,756],{"class":714}," f1",[478,758,759],{"class":710},"=",[478,761,762],{"class":495},"3.14",[478,764,218],{"class":710},[478,766,767],{"class":714},";",[478,769,771],{"class":770},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[478,773,774,776,779,781,784,787,790,792],{"class":480,"line":565},[478,775,753],{"class":710},[478,777,778],{"class":714}," f2",[478,780,759],{"class":710},[478,782,783],{"class":495},"3",[478,785,786],{"class":710},"e",[478,788,789],{"class":495},"2",[478,791,767],{"class":714},[478,793,794],{"class":770}," \u002F\u002F科学记数法\n",[129,796,798],{"id":797},"_133字符型","1.3.3字符型",[469,800,802],{"className":701,"code":801,"language":703,"meta":54,"style":54},"char ch='a'\n",[475,803,804],{"__ignoreMap":54},[478,805,806,809,812,814],{"class":480,"line":481},[478,807,808],{"class":710},"char",[478,810,811],{"class":714}," ch",[478,813,759],{"class":710},[478,815,816],{"class":488},"'a'\n",[19,818,743],{},[29,820,821,824,827,830],{},[32,822,823],{},"在显示字符型变量时，只能单引号，双引号x",[32,825,826],{},"单引号内只能一个字符，不能字符串",[32,828,829],{},"c和c++字符型变量只占用一个字符",[32,831,832],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,834,835],{},"ASCII码大致由以下两部分组成：",[29,837,838,841],{},[32,839,840],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[32,842,843],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,845,846],{},"ASCII码表格：",[371,848,849,889],{},[374,850,851],{},[377,852,853,859,864,868,873,877,881,885],{},[380,854,855,858],{},[45,856,857],{},"ASCII","值",[380,860,861],{},[45,862,863],{},"控制字符",[380,865,866,858],{},[45,867,857],{},[380,869,870],{},[45,871,872],{},"字符",[380,874,875,858],{},[45,876,857],{},[380,878,879],{},[45,880,872],{},[380,882,883,858],{},[45,884,857],{},[380,886,887],{},[45,888,872],{},[388,890,891,917,940,965,990,1016,1041,1066,1092,1117,1142,1168,1194,1219,1245,1271,1295,1319,1344,1368,1392,1416,1441,1466,1491,1516,1541,1567,1592,1617,1642,1668],{},[377,892,893,896,899,902,905,908,911,914],{},[393,894,895],{},"0",[393,897,898],{},"NUT",[393,900,901],{},"32",[393,903,904],{},"(space)",[393,906,907],{},"64",[393,909,910],{},"@",[393,912,913],{},"96",[393,915,916],{},"、",[377,918,919,921,924,927,930,933,935,938],{},[393,920,193],{},[393,922,923],{},"SOH",[393,925,926],{},"33",[393,928,929],{},"!",[393,931,932],{},"65",[393,934,258],{},[393,936,937],{},"97",[393,939,518],{},[377,941,942,944,947,950,953,956,959,962],{},[393,943,789],{},[393,945,946],{},"STX",[393,948,949],{},"34",[393,951,952],{},"\"",[393,954,955],{},"66",[393,957,958],{},"B",[393,960,961],{},"98",[393,963,964],{},"b",[377,966,967,969,972,975,978,981,984,987],{},[393,968,783],{},[393,970,971],{},"ETX",[393,973,974],{},"35",[393,976,977],{},"#",[393,979,980],{},"67",[393,982,983],{},"C",[393,985,986],{},"99",[393,988,989],{},"c",[377,991,992,995,998,1001,1004,1007,1010,1013],{},[393,993,994],{},"4",[393,996,997],{},"EOT",[393,999,1000],{},"36",[393,1002,1003],{},"$",[393,1005,1006],{},"68",[393,1008,1009],{},"D",[393,1011,1012],{},"100",[393,1014,1015],{},"d",[377,1017,1018,1021,1024,1027,1030,1033,1036,1039],{},[393,1019,1020],{},"5",[393,1022,1023],{},"ENQ",[393,1025,1026],{},"37",[393,1028,1029],{},"%",[393,1031,1032],{},"69",[393,1034,1035],{},"E",[393,1037,1038],{},"101",[393,1040,786],{},[377,1042,1043,1046,1049,1052,1055,1058,1061,1064],{},[393,1044,1045],{},"6",[393,1047,1048],{},"ACK",[393,1050,1051],{},"38",[393,1053,1054],{},"&",[393,1056,1057],{},"70",[393,1059,1060],{},"F",[393,1062,1063],{},"102",[393,1065,218],{},[377,1067,1068,1071,1074,1077,1080,1083,1086,1089],{},[393,1069,1070],{},"7",[393,1072,1073],{},"BEL",[393,1075,1076],{},"39",[393,1078,1079],{},",",[393,1081,1082],{},"71",[393,1084,1085],{},"G",[393,1087,1088],{},"103",[393,1090,1091],{},"g",[377,1093,1094,1097,1100,1103,1105,1108,1111,1114],{},[393,1095,1096],{},"8",[393,1098,1099],{},"BS",[393,1101,1102],{},"40",[393,1104,263],{},[393,1106,1107],{},"72",[393,1109,1110],{},"H",[393,1112,1113],{},"104",[393,1115,1116],{},"h",[377,1118,1119,1122,1125,1128,1130,1133,1136,1139],{},[393,1120,1121],{},"9",[393,1123,1124],{},"HT",[393,1126,1127],{},"41",[393,1129,222],{},[393,1131,1132],{},"73",[393,1134,1135],{},"I",[393,1137,1138],{},"105",[393,1140,1141],{},"i",[377,1143,1144,1147,1150,1153,1156,1159,1162,1165],{},[393,1145,1146],{},"10",[393,1148,1149],{},"LF",[393,1151,1152],{},"42",[393,1154,1155],{},"*",[393,1157,1158],{},"74",[393,1160,1161],{},"J",[393,1163,1164],{},"106",[393,1166,1167],{},"j",[377,1169,1170,1173,1176,1179,1182,1185,1188,1191],{},[393,1171,1172],{},"11",[393,1174,1175],{},"VT",[393,1177,1178],{},"43",[393,1180,1181],{},"+",[393,1183,1184],{},"75",[393,1186,1187],{},"K",[393,1189,1190],{},"107",[393,1192,1193],{},"k",[377,1195,1196,1199,1202,1205,1207,1210,1213,1216],{},[393,1197,1198],{},"12",[393,1200,1201],{},"FF",[393,1203,1204],{},"44",[393,1206,1079],{},[393,1208,1209],{},"76",[393,1211,1212],{},"L",[393,1214,1215],{},"108",[393,1217,1218],{},"l",[377,1220,1221,1224,1227,1230,1233,1236,1239,1242],{},[393,1222,1223],{},"13",[393,1225,1226],{},"CR",[393,1228,1229],{},"45",[393,1231,1232],{},"-",[393,1234,1235],{},"77",[393,1237,1238],{},"M",[393,1240,1241],{},"109",[393,1243,1244],{},"m",[377,1246,1247,1250,1253,1256,1259,1262,1265,1268],{},[393,1248,1249],{},"14",[393,1251,1252],{},"SO",[393,1254,1255],{},"46",[393,1257,1258],{},".",[393,1260,1261],{},"78",[393,1263,1264],{},"N",[393,1266,1267],{},"110",[393,1269,1270],{},"n",[377,1272,1273,1276,1279,1282,1285,1288,1290,1293],{},[393,1274,1275],{},"15",[393,1277,1278],{},"SI",[393,1280,1281],{},"47",[393,1283,1284],{},"\u002F",[393,1286,1287],{},"79",[393,1289,281],{},[393,1291,1292],{},"111",[393,1294,189],{},[377,1296,1297,1300,1303,1306,1308,1311,1314,1317],{},[393,1298,1299],{},"16",[393,1301,1302],{},"DLE",[393,1304,1305],{},"48",[393,1307,895],{},[393,1309,1310],{},"80",[393,1312,1313],{},"P",[393,1315,1316],{},"112",[393,1318,19],{},[377,1320,1321,1324,1327,1330,1332,1335,1338,1341],{},[393,1322,1323],{},"17",[393,1325,1326],{},"DCI",[393,1328,1329],{},"49",[393,1331,193],{},[393,1333,1334],{},"81",[393,1336,1337],{},"Q",[393,1339,1340],{},"113",[393,1342,1343],{},"q",[377,1345,1346,1349,1352,1355,1357,1360,1362,1365],{},[393,1347,1348],{},"18",[393,1350,1351],{},"DC2",[393,1353,1354],{},"50",[393,1356,789],{},[393,1358,1359],{},"82",[393,1361,270],{},[393,1363,1364],{},"114",[393,1366,1367],{},"r",[377,1369,1370,1373,1376,1379,1381,1384,1386,1389],{},[393,1371,1372],{},"19",[393,1374,1375],{},"DC3",[393,1377,1378],{},"51",[393,1380,783],{},[393,1382,1383],{},"83",[393,1385,254],{},[393,1387,1388],{},"115",[393,1390,1391],{},"s",[377,1393,1394,1397,1400,1403,1405,1408,1410,1413],{},[393,1395,1396],{},"20",[393,1398,1399],{},"DC4",[393,1401,1402],{},"52",[393,1404,994],{},[393,1406,1407],{},"84",[393,1409,262],{},[393,1411,1412],{},"116",[393,1414,1415],{},"t",[377,1417,1418,1421,1424,1427,1429,1432,1435,1438],{},[393,1419,1420],{},"21",[393,1422,1423],{},"NAK",[393,1425,1426],{},"53",[393,1428,1020],{},[393,1430,1431],{},"85",[393,1433,1434],{},"U",[393,1436,1437],{},"117",[393,1439,1440],{},"u",[377,1442,1443,1446,1449,1452,1454,1457,1460,1463],{},[393,1444,1445],{},"22",[393,1447,1448],{},"SYN",[393,1450,1451],{},"54",[393,1453,1045],{},[393,1455,1456],{},"86",[393,1458,1459],{},"V",[393,1461,1462],{},"118",[393,1464,1465],{},"v",[377,1467,1468,1471,1474,1477,1479,1482,1485,1488],{},[393,1469,1470],{},"23",[393,1472,1473],{},"TB",[393,1475,1476],{},"55",[393,1478,1070],{},[393,1480,1481],{},"87",[393,1483,1484],{},"W",[393,1486,1487],{},"119",[393,1489,1490],{},"w",[377,1492,1493,1496,1499,1502,1504,1507,1510,1513],{},[393,1494,1495],{},"24",[393,1497,1498],{},"CAN",[393,1500,1501],{},"56",[393,1503,1096],{},[393,1505,1506],{},"88",[393,1508,1509],{},"X",[393,1511,1512],{},"120",[393,1514,1515],{},"x",[377,1517,1518,1521,1524,1527,1529,1532,1535,1538],{},[393,1519,1520],{},"25",[393,1522,1523],{},"EM",[393,1525,1526],{},"57",[393,1528,1121],{},[393,1530,1531],{},"89",[393,1533,1534],{},"Y",[393,1536,1537],{},"121",[393,1539,1540],{},"y",[377,1542,1543,1546,1549,1552,1555,1558,1561,1564],{},[393,1544,1545],{},"26",[393,1547,1548],{},"SUB",[393,1550,1551],{},"58",[393,1553,1554],{},":",[393,1556,1557],{},"90",[393,1559,1560],{},"Z",[393,1562,1563],{},"122",[393,1565,1566],{},"z",[377,1568,1569,1572,1575,1578,1580,1583,1586,1589],{},[393,1570,1571],{},"27",[393,1573,1574],{},"ESC",[393,1576,1577],{},"59",[393,1579,767],{},[393,1581,1582],{},"91",[393,1584,1585],{},"[",[393,1587,1588],{},"123",[393,1590,1591],{},"{",[377,1593,1594,1597,1600,1603,1606,1609,1611,1614],{},[393,1595,1596],{},"28",[393,1598,1599],{},"FS",[393,1601,1602],{},"60",[393,1604,1605],{},"\u003C",[393,1607,1608],{},"92",[393,1610,1284],{},[393,1612,1613],{},"124",[393,1615,1616],{},"|",[377,1618,1619,1622,1625,1628,1630,1633,1636,1639],{},[393,1620,1621],{},"29",[393,1623,1624],{},"GS",[393,1626,1627],{},"61",[393,1629,759],{},[393,1631,1632],{},"93",[393,1634,1635],{},"]",[393,1637,1638],{},"125",[393,1640,1641],{},"}",[377,1643,1644,1647,1650,1653,1656,1659,1662,1665],{},[393,1645,1646],{},"30",[393,1648,1649],{},"RS",[393,1651,1652],{},"62",[393,1654,1655],{},">",[393,1657,1658],{},"94",[393,1660,1661],{},"^",[393,1663,1664],{},"126",[393,1666,1667],{},"`",[377,1669,1670,1673,1676,1679,1682,1685,1688,1691],{},[393,1671,1672],{},"31",[393,1674,1675],{},"US",[393,1677,1678],{},"63",[393,1680,1681],{},"?",[393,1683,1684],{},"95",[393,1686,1687],{},"_",[393,1689,1690],{},"127",[393,1692,1693],{},"DEL",[19,1695,1696,1697,1700],{},"ASCII 码大致由以下",[45,1698,1699],{},"两部分组","成：",[1702,1703,1704,1711],"ul",{},[32,1705,1706,1707,1710],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[45,1708,1709],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[32,1712,1713,1714,1717],{},"ASCII 打印字符：数字 ",[45,1715,1716],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[129,1719,1721],{"id":1720},"_134转义字符","1.3.4转义字符",[469,1723,1725],{"className":701,"code":1724,"language":703,"meta":54,"style":54},"\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",[475,1726,1727,1732,1748,1762,1767,1781,1787],{"__ignoreMap":54},[478,1728,1729],{"class":480,"line":481},[478,1730,1731],{"class":770},"\u002F\u002F换行符\n",[478,1733,1734,1737,1740,1743,1745],{"class":480,"line":565},[478,1735,1736],{"class":714},"cout ",[478,1738,1739],{"class":710},"\u003C\u003C",[478,1741,1742],{"class":488},"\"hello world\u002Fn\"",[478,1744,767],{"class":714},[478,1746,1747],{"class":770}," \u002F\u002F就等同于如下：\n",[478,1749,1750,1752,1754,1757,1759],{"class":480,"line":579},[478,1751,1736],{"class":714},[478,1753,1739],{"class":710},[478,1755,1756],{"class":488},"\"hello world\"",[478,1758,1739],{"class":710},[478,1760,1761],{"class":714},"endl;\n",[478,1763,1764],{"class":480,"line":593},[478,1765,1766],{"class":770},"\u002F\u002F反斜杠\n",[478,1768,1770,1772,1774,1777,1779],{"class":480,"line":1769},5,[478,1771,1736],{"class":714},[478,1773,1739],{"class":710},[478,1775,1776],{"class":488},"\"\u002F\u002F\"",[478,1778,1739],{"class":710},[478,1780,1761],{"class":714},[478,1782,1784],{"class":480,"line":1783},6,[478,1785,1786],{"class":770},"\u002F\u002F水平制表符\n",[478,1788,1790,1792,1794,1797,1800,1803,1805,1808],{"class":480,"line":1789},7,[478,1791,1736],{"class":714},[478,1793,1739],{"class":710},[478,1795,1796],{"class":488},"\"aaaa",[478,1798,1799],{"class":495},"\\t",[478,1801,1802],{"class":488},"helloworld\"",[478,1804,1739],{"class":710},[478,1806,1807],{"class":714},"endl;",[478,1809,1810],{"class":770}," \u002F\u002F输出窗口时有对齐效果\n",[129,1812,1814],{"id":1813},"_135字符串型","1.3.5字符串型",[19,1816,1817,1818,1820],{},"char 变量名",[478,1819],{},"=\"字符串值\"",[469,1822,1824],{"className":701,"code":1823,"language":703,"meta":54,"style":54},"\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",[475,1825,1826,1831,1836,1841,1846,1860,1873,1878,1884,1896],{"__ignoreMap":54},[478,1827,1828],{"class":480,"line":481},[478,1829,1830],{"class":770},"\u002F\u002Fc风格字符串\n",[478,1832,1833],{"class":480,"line":565},[478,1834,1835],{"class":770},"\u002F\u002F注意事项：\n",[478,1837,1838],{"class":480,"line":579},[478,1839,1840],{"class":770},"\u002F\u002F1.char字符串名[]\n",[478,1842,1843],{"class":480,"line":593},[478,1844,1845],{"class":770},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[478,1847,1848,1850,1853,1855,1857],{"class":480,"line":1769},[478,1849,808],{"class":710},[478,1851,1852],{"class":714}," str[]",[478,1854,759],{"class":710},[478,1856,1756],{"class":488},[478,1858,1859],{"class":714},";\n",[478,1861,1862,1864,1866,1869,1871],{"class":480,"line":1783},[478,1863,1736],{"class":714},[478,1865,1739],{"class":710},[478,1867,1868],{"class":714},"str",[478,1870,1739],{"class":710},[478,1872,1761],{"class":714},[478,1874,1875],{"class":480,"line":1789},[478,1876,1877],{"class":770},"\u002F\u002Fc++风格字符串\n",[478,1879,1881],{"class":480,"line":1880},8,[478,1882,1883],{"class":770},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[478,1885,1887,1890,1892,1894],{"class":480,"line":1886},9,[478,1888,1889],{"class":714},"string str2",[478,1891,759],{"class":710},[478,1893,1756],{"class":488},[478,1895,1859],{"class":714},[478,1897,1899,1901,1903,1906,1908],{"class":480,"line":1898},10,[478,1900,1736],{"class":714},[478,1902,1739],{"class":710},[478,1904,1905],{"class":714},"str2",[478,1907,1739],{"class":710},[478,1909,1761],{"class":714},[129,1911,1913],{"id":1912},"_136布尔类型bool","1.3.6布尔类型bool",[469,1915,1917],{"className":701,"code":1916,"language":703,"meta":54,"style":54},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[475,1918,1919,1934],{"__ignoreMap":54},[478,1920,1921,1924,1927,1929,1932],{"class":480,"line":481},[478,1922,1923],{"class":710},"bool",[478,1925,1926],{"class":714}," flag",[478,1928,759],{"class":710},[478,1930,1931],{"class":495},"true",[478,1933,1859],{"class":714},[478,1935,1936,1939,1942,1945,1947,1949],{"class":480,"line":565},[478,1937,1938],{"class":714},"cout",[478,1940,1941],{"class":710},"\u003C\u003Csizeof",[478,1943,1944],{"class":714},"(flag)",[478,1946,1739],{"class":710},[478,1948,1807],{"class":714},[478,1950,1951],{"class":770}," \u002F\u002F查看布尔占内存空间\n",[14,1953,1955],{"id":1954},"_14键盘输入cin","1.4键盘输入cin",[469,1957,1959],{"className":701,"code":1958,"language":703,"meta":54,"style":54},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[475,1960,1961,1974,1991,2002],{"__ignoreMap":54},[478,1962,1963,1965,1968,1970,1972],{"class":480,"line":481},[478,1964,717],{"class":710},[478,1966,1967],{"class":714}," a",[478,1969,759],{"class":710},[478,1971,895],{"class":495},[478,1973,1859],{"class":714},[478,1975,1976,1978,1980,1983,1985,1987,1989],{"class":480,"line":565},[478,1977,1938],{"class":714},[478,1979,1739],{"class":710},[478,1981,1982],{"class":488},"\"请给整型变量a赋值\"",[478,1984,1739],{"class":710},[478,1986,518],{"class":714},[478,1988,1739],{"class":710},[478,1990,1761],{"class":714},[478,1992,1993,1996,1999],{"class":480,"line":579},[478,1994,1995],{"class":714},"cin ",[478,1997,1998],{"class":710},">>",[478,2000,2001],{"class":714}," a;\n",[478,2003,2004,2006,2008,2011,2014,2016,2018],{"class":480,"line":593},[478,2005,1736],{"class":714},[478,2007,1739],{"class":710},[478,2009,2010],{"class":488}," \"整型变量a=\"",[478,2012,2013],{"class":710}," \u003C\u003C",[478,2015,518],{"class":714},[478,2017,1739],{"class":710},[478,2019,1761],{"class":714},[14,2021,2023],{"id":2022},"_15运算符","1.5运算符",[129,2025,2027],{"id":2026},"_151算术运算符","1.5.1算术运算符",[19,2029,2030,2033],{},[52,2031],{"alt":54,"src":2032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[29,2035,2036,2039,2042],{},[32,2037,2038],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[32,2040,2041],{},"两个小数不可以做取模运算",[32,2043,2044],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[129,2046,2048],{"id":2047},"_152赋值运算符","1.5.2赋值运算符",[19,2050,2051],{},[52,2052],{"alt":54,"src":2053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[129,2055,2057],{"id":2056},"_153比较运算符","1.5.3比较运算符",[19,2059,2060],{},[52,2061],{"alt":54,"src":2062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[129,2064,2066],{"id":2065},"_154逻辑运算符","1.5.4逻辑运算符",[19,2068,2069],{},[52,2070],{"alt":54,"src":2071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2073,2075],{"id":2074},"_16程序流程结构","1.6程序流程结构",[129,2077,2079],{"id":2078},"_161选择结构","1.6.1选择结构",[29,2081,2082],{},[32,2083,2084],{},"if语句\n单行、多行、多条件if语句",[469,2086,2088],{"className":701,"code":2087,"language":703,"meta":54,"style":54},"\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",[475,2089,2090,2095,2110,2115,2129,2134,2139,2148,2161,2165,2178,2183,2189,2194,2208,2213,2219,2239,2244,2258,2263,2292,2297,2314,2319,2324,2329,2343,2348],{"__ignoreMap":54},[478,2091,2092],{"class":480,"line":481},[478,2093,2094],{"class":770},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[478,2096,2097,2100,2103,2105,2108],{"class":480,"line":565},[478,2098,2099],{"class":710},"if",[478,2101,2102],{"class":714},"(score",[478,2104,1655],{"class":710},[478,2106,2107],{"class":495},"600",[478,2109,720],{"class":714},[478,2111,2112],{"class":480,"line":579},[478,2113,2114],{"class":714},"{\n",[478,2116,2117,2120,2122,2125,2127],{"class":480,"line":593},[478,2118,2119],{"class":714},"    cout",[478,2121,1739],{"class":710},[478,2123,2124],{"class":488},"'这是单行if语句'",[478,2126,1739],{"class":710},[478,2128,1761],{"class":714},[478,2130,2131],{"class":480,"line":1769},[478,2132,2133],{"class":714},"}\n",[478,2135,2136],{"class":480,"line":1783},[478,2137,2138],{"class":770},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[478,2140,2141,2143,2145],{"class":480,"line":1789},[478,2142,1995],{"class":714},[478,2144,1998],{"class":710},[478,2146,2147],{"class":714}," score\n",[478,2149,2150,2152,2154,2157,2159],{"class":480,"line":1880},[478,2151,2099],{"class":710},[478,2153,2102],{"class":714},[478,2155,2156],{"class":710},"\u003C=",[478,2158,2107],{"class":495},[478,2160,720],{"class":714},[478,2162,2163],{"class":480,"line":1886},[478,2164,2114],{"class":714},[478,2166,2167,2169,2171,2174,2176],{"class":480,"line":1898},[478,2168,2119],{"class":714},[478,2170,1998],{"class":710},[478,2172,2173],{"class":488},"\"小于等于600\"",[478,2175,1739],{"class":710},[478,2177,1761],{"class":714},[478,2179,2181],{"class":480,"line":2180},11,[478,2182,2133],{"class":714},[478,2184,2186],{"class":480,"line":2185},12,[478,2187,2188],{"class":710},"else\n",[478,2190,2192],{"class":480,"line":2191},13,[478,2193,2114],{"class":714},[478,2195,2197,2199,2201,2204,2206],{"class":480,"line":2196},14,[478,2198,2119],{"class":714},[478,2200,1998],{"class":710},[478,2202,2203],{"class":488},"\"大于600\"",[478,2205,1998],{"class":710},[478,2207,1761],{"class":714},[478,2209,2211],{"class":480,"line":2210},15,[478,2212,2133],{"class":714},[478,2214,2216],{"class":480,"line":2215},16,[478,2217,2218],{"class":770},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[478,2220,2222,2224,2226,2228,2230,2233,2235,2237],{"class":480,"line":2221},17,[478,2223,2099],{"class":710},[478,2225,219],{"class":714},[478,2227,895],{"class":495},[478,2229,1605],{"class":710},[478,2231,2232],{"class":714},"num",[478,2234,1605],{"class":710},[478,2236,1012],{"class":495},[478,2238,720],{"class":714},[478,2240,2242],{"class":480,"line":2241},18,[478,2243,2114],{"class":714},[478,2245,2247,2249,2251,2254,2256],{"class":480,"line":2246},19,[478,2248,2119],{"class":714},[478,2250,1739],{"class":710},[478,2252,2253],{"class":488},"\"小于100\"",[478,2255,1739],{"class":710},[478,2257,1761],{"class":714},[478,2259,2261],{"class":480,"line":2260},20,[478,2262,2133],{"class":714},[478,2264,2266,2269,2272,2275,2278,2280,2283,2285,2287,2290],{"class":480,"line":2265},21,[478,2267,2268],{"class":710},"else",[478,2270,2271],{"class":710}," if",[478,2273,2274],{"class":714}," (nmu",[478,2276,2277],{"class":710},">=",[478,2279,1012],{"class":495},[478,2281,2282],{"class":710},"&&",[478,2284,2232],{"class":714},[478,2286,1605],{"class":710},[478,2288,2289],{"class":495},"200",[478,2291,720],{"class":714},[478,2293,2295],{"class":480,"line":2294},22,[478,2296,2114],{"class":714},[478,2298,2300,2302,2304,2307,2309,2311],{"class":480,"line":2299},23,[478,2301,2119],{"class":714},[478,2303,1739],{"class":710},[478,2305,2306],{"class":488},"\"不小于100且小于200\"",[478,2308,1739],{"class":710},[478,2310,1807],{"class":714},[478,2312,2313],{"class":770}," \u002F\u002F可以无限else if,python中是elif：\n",[478,2315,2317],{"class":480,"line":2316},24,[478,2318,2133],{"class":714},[478,2320,2322],{"class":480,"line":2321},25,[478,2323,2188],{"class":710},[478,2325,2327],{"class":480,"line":2326},26,[478,2328,2114],{"class":714},[478,2330,2332,2334,2336,2339,2341],{"class":480,"line":2331},27,[478,2333,2119],{"class":714},[478,2335,1739],{"class":710},[478,2337,2338],{"class":488},"\"不小于200\"",[478,2340,1739],{"class":710},[478,2342,1761],{"class":714},[478,2344,2346],{"class":480,"line":2345},28,[478,2347,2133],{"class":714},[478,2349,2351],{"class":480,"line":2350},29,[478,2352,2353],{"class":770},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[29,2355,2356],{"start":565},[32,2357,2358],{},"三目运算符",[469,2360,2362],{"className":701,"code":2361,"language":703,"meta":54,"style":54},"\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",[475,2363,2364,2369,2374,2400,2422,2439,2444,2467,2482],{"__ignoreMap":54},[478,2365,2366],{"class":480,"line":481},[478,2367,2368],{"class":770},"\u002F\u002F创建三个变量a,b,c\n",[478,2370,2371],{"class":480,"line":565},[478,2372,2373],{"class":770},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[478,2375,2376,2378,2380,2382,2384,2387,2389,2391,2394,2396,2398],{"class":480,"line":579},[478,2377,717],{"class":710},[478,2379,1967],{"class":714},[478,2381,759],{"class":710},[478,2383,1396],{"class":495},[478,2385,2386],{"class":714},",b",[478,2388,759],{"class":710},[478,2390,1146],{"class":495},[478,2392,2393],{"class":714},",c",[478,2395,759],{"class":710},[478,2397,895],{"class":495},[478,2399,1859],{"class":714},[478,2401,2402,2404,2406,2409,2411,2413,2415,2417,2419],{"class":480,"line":593},[478,2403,989],{"class":714},[478,2405,759],{"class":710},[478,2407,2408],{"class":714},"(a",[478,2410,1655],{"class":710},[478,2412,964],{"class":714},[478,2414,1681],{"class":710},[478,2416,518],{"class":714},[478,2418,1554],{"class":710},[478,2420,2421],{"class":714},"b)\n",[478,2423,2424,2426,2428,2431,2433,2435,2437],{"class":480,"line":1769},[478,2425,1938],{"class":714},[478,2427,1739],{"class":710},[478,2429,2430],{"class":488},"\"c=\"",[478,2432,1739],{"class":710},[478,2434,989],{"class":714},[478,2436,1739],{"class":710},[478,2438,1761],{"class":714},[478,2440,2441],{"class":480,"line":1783},[478,2442,2443],{"class":770},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[478,2445,2446,2448,2450,2452,2454,2456,2458,2461,2463,2465],{"class":480,"line":1789},[478,2447,2408],{"class":714},[478,2449,1655],{"class":710},[478,2451,964],{"class":714},[478,2453,1681],{"class":710},[478,2455,518],{"class":714},[478,2457,1554],{"class":710},[478,2459,2460],{"class":714},"b)",[478,2462,759],{"class":710},[478,2464,1012],{"class":495},[478,2466,1859],{"class":714},[478,2468,2469,2471,2473,2475,2477,2479],{"class":480,"line":1880},[478,2470,1938],{"class":714},[478,2472,1739],{"class":710},[478,2474,518],{"class":714},[478,2476,1739],{"class":710},[478,2478,1807],{"class":714},[478,2480,2481],{"class":770}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[478,2483,2484,2486,2488,2490,2492,2494],{"class":480,"line":1886},[478,2485,1938],{"class":714},[478,2487,1739],{"class":710},[478,2489,964],{"class":714},[478,2491,1739],{"class":710},[478,2493,1807],{"class":714},[478,2495,2496],{"class":770}," \u002F\u002F10   a>b,b还是原值\n",[29,2498,2499],{"start":579},[32,2500,2501],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[469,2503,2505],{"className":701,"code":2504,"language":703,"meta":54,"style":54},"\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",[475,2506,2507,2512,2520,2533,2543,2547,2561,2574,2584,2592,2597,2622,2643,2665,2686,2708,2729,2749,2754],{"__ignoreMap":54},[478,2508,2509],{"class":480,"line":481},[478,2510,2511],{"class":770},"\u002F\u002F案例-电影打分\n",[478,2513,2514,2517],{"class":480,"line":565},[478,2515,2516],{"class":710},"#include",[478,2518,2519],{"class":488},"\u003Ciostream>\n",[478,2521,2522,2525,2528,2531],{"class":480,"line":579},[478,2523,2524],{"class":710},"using",[478,2526,2527],{"class":710}," namespace",[478,2529,2530],{"class":484}," std",[478,2532,1859],{"class":714},[478,2534,2535,2537,2540],{"class":480,"line":593},[478,2536,717],{"class":710},[478,2538,2539],{"class":484}," main",[478,2541,2542],{"class":714},"()\n",[478,2544,2545],{"class":480,"line":1769},[478,2546,2114],{"class":714},[478,2548,2549,2552,2555,2557,2559],{"class":480,"line":1783},[478,2550,2551],{"class":710},"    int",[478,2553,2554],{"class":714}," score",[478,2556,759],{"class":710},[478,2558,895],{"class":495},[478,2560,1859],{"class":714},[478,2562,2563,2565,2567,2570,2572],{"class":480,"line":1789},[478,2564,2119],{"class":714},[478,2566,1739],{"class":710},[478,2568,2569],{"class":488},"\"电影打分：\"",[478,2571,1739],{"class":710},[478,2573,1761],{"class":714},[478,2575,2576,2579,2581],{"class":480,"line":1880},[478,2577,2578],{"class":714},"    cin",[478,2580,1998],{"class":710},[478,2582,2583],{"class":714},"score;\n",[478,2585,2586,2589],{"class":480,"line":1886},[478,2587,2588],{"class":710},"    switch",[478,2590,2591],{"class":714},"(score)\n",[478,2593,2594],{"class":480,"line":1898},[478,2595,2596],{"class":714},"    {\n",[478,2598,2599,2602,2605,2608,2610,2613,2615,2617,2620],{"class":480,"line":2180},[478,2600,2601],{"class":710},"        case",[478,2603,2604],{"class":495}," 10",[478,2606,2607],{"class":714},":cout",[478,2609,1739],{"class":710},[478,2611,2612],{"class":488},"\"经典\"",[478,2614,1739],{"class":710},[478,2616,1807],{"class":714},[478,2618,2619],{"class":710},"break",[478,2621,1859],{"class":714},[478,2623,2624,2626,2629,2631,2633,2635,2637,2639,2641],{"class":480,"line":2185},[478,2625,2601],{"class":710},[478,2627,2628],{"class":495}," 9",[478,2630,2607],{"class":714},[478,2632,1739],{"class":710},[478,2634,2612],{"class":488},[478,2636,1739],{"class":710},[478,2638,1807],{"class":714},[478,2640,2619],{"class":710},[478,2642,1859],{"class":714},[478,2644,2645,2647,2650,2652,2654,2657,2659,2661,2663],{"class":480,"line":2191},[478,2646,2601],{"class":710},[478,2648,2649],{"class":495}," 8",[478,2651,2607],{"class":714},[478,2653,1739],{"class":710},[478,2655,2656],{"class":488},"\"非常好\"",[478,2658,1739],{"class":710},[478,2660,1807],{"class":714},[478,2662,2619],{"class":710},[478,2664,1859],{"class":714},[478,2666,2667,2669,2672,2674,2676,2678,2680,2682,2684],{"class":480,"line":2196},[478,2668,2601],{"class":710},[478,2670,2671],{"class":495}," 7",[478,2673,2607],{"class":714},[478,2675,1739],{"class":710},[478,2677,2656],{"class":488},[478,2679,1739],{"class":710},[478,2681,1807],{"class":714},[478,2683,2619],{"class":710},[478,2685,1859],{"class":714},[478,2687,2688,2690,2693,2695,2697,2700,2702,2704,2706],{"class":480,"line":2210},[478,2689,2601],{"class":710},[478,2691,2692],{"class":495}," 6",[478,2694,2607],{"class":714},[478,2696,1739],{"class":710},[478,2698,2699],{"class":488},"\"一般\"",[478,2701,1739],{"class":710},[478,2703,1807],{"class":714},[478,2705,2619],{"class":710},[478,2707,1859],{"class":714},[478,2709,2710,2712,2715,2717,2719,2721,2723,2725,2727],{"class":480,"line":2215},[478,2711,2601],{"class":710},[478,2713,2714],{"class":495}," 5",[478,2716,2607],{"class":714},[478,2718,1739],{"class":710},[478,2720,2699],{"class":488},[478,2722,1739],{"class":710},[478,2724,1807],{"class":714},[478,2726,2619],{"class":710},[478,2728,1859],{"class":714},[478,2730,2731,2734,2736,2738,2741,2743,2745,2747],{"class":480,"line":2221},[478,2732,2733],{"class":710},"        default",[478,2735,2607],{"class":714},[478,2737,1739],{"class":710},[478,2739,2740],{"class":488},"\"烂片\"",[478,2742,1739],{"class":710},[478,2744,1807],{"class":714},[478,2746,2619],{"class":710},[478,2748,1859],{"class":714},[478,2750,2751],{"class":480,"line":2241},[478,2752,2753],{"class":714},"    }\n",[478,2755,2756],{"class":480,"line":2246},[478,2757,2133],{"class":714},[19,2759,2760],{},"if和switch区别：",[1702,2762,2763,2766],{},[32,2764,2765],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[32,2767,2768],{},"switch优点：结构清晰，执行效率高",[129,2770,2772],{"id":2771},"_162循环结构","1.6.2循环结构",[29,2774,2775],{},[32,2776,2777],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[469,2779,2781],{"className":701,"code":2780,"language":703,"meta":54,"style":54},"\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",[475,2782,2783,2788,2796,2800,2813,2827,2831,2851,2861,2865,2877],{"__ignoreMap":54},[478,2784,2785],{"class":480,"line":481},[478,2786,2787],{"class":770},"\u002F\u002F打印0-9数字\n",[478,2789,2790,2792,2794],{"class":480,"line":565},[478,2791,717],{"class":710},[478,2793,2539],{"class":484},[478,2795,2542],{"class":714},[478,2797,2798],{"class":480,"line":579},[478,2799,2114],{"class":714},[478,2801,2802,2804,2807,2809,2811],{"class":480,"line":593},[478,2803,2551],{"class":710},[478,2805,2806],{"class":714}," num",[478,2808,759],{"class":710},[478,2810,895],{"class":495},[478,2812,1859],{"class":714},[478,2814,2815,2818,2821,2823,2825],{"class":480,"line":1769},[478,2816,2817],{"class":710},"    while",[478,2819,2820],{"class":714},"(num",[478,2822,1605],{"class":710},[478,2824,1146],{"class":495},[478,2826,720],{"class":714},[478,2828,2829],{"class":480,"line":1783},[478,2830,2596],{"class":714},[478,2832,2833,2836,2839,2841,2843,2845,2848],{"class":480,"line":1789},[478,2834,2835],{"class":484},"       std",[478,2837,2838],{"class":714},"::cout",[478,2840,1739],{"class":710},[478,2842,2232],{"class":714},[478,2844,1739],{"class":710},[478,2846,2847],{"class":484},"std",[478,2849,2850],{"class":714},"::endl;\n",[478,2852,2853,2856,2859],{"class":480,"line":1880},[478,2854,2855],{"class":714},"        num",[478,2857,2858],{"class":710},"++",[478,2860,1859],{"class":714},[478,2862,2863],{"class":480,"line":1886},[478,2864,2753],{"class":714},[478,2866,2867,2870,2872,2875],{"class":480,"line":1898},[478,2868,2869],{"class":484},"    system",[478,2871,263],{"class":714},[478,2873,2874],{"class":488},"\"pause\"",[478,2876,720],{"class":714},[478,2878,2879],{"class":480,"line":2180},[478,2880,2133],{"class":714},[19,2882,2883],{},"注意：写好循环条件，避免死循环情况",[469,2885,2887],{"className":701,"code":2886,"language":703,"meta":54,"style":54},"\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",[475,2888,2889,2894,2901,2908,2918,2926,2930,2935,2962,2967,2972,2980,3007,3012,3017,3030,3040,3044,3054,3059,3072,3077,3091,3096,3111,3115,3128,3132,3137,3141,3155,3163,3168,3174,3180,3185],{"__ignoreMap":54},[478,2890,2891],{"class":480,"line":481},[478,2892,2893],{"class":770},"\u002F\u002F循环结构-猜数字\n",[478,2895,2896,2898],{"class":480,"line":565},[478,2897,2516],{"class":710},[478,2899,2900],{"class":488}," \u003Ciostream>\n",[478,2902,2903,2905],{"class":480,"line":579},[478,2904,2516],{"class":710},[478,2906,2907],{"class":488}," \u003Cctime>\n",[478,2909,2910,2912,2914,2916],{"class":480,"line":593},[478,2911,2524],{"class":710},[478,2913,2527],{"class":710},[478,2915,2530],{"class":484},[478,2917,1859],{"class":714},[478,2919,2920,2922,2924],{"class":480,"line":1769},[478,2921,717],{"class":710},[478,2923,2539],{"class":484},[478,2925,2542],{"class":714},[478,2927,2928],{"class":480,"line":1783},[478,2929,2114],{"class":714},[478,2931,2932],{"class":480,"line":1789},[478,2933,2934],{"class":770},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[478,2936,2937,2940,2943,2946,2949,2951,2954,2956,2959],{"class":480,"line":1880},[478,2938,2939],{"class":484},"    srand",[478,2941,2942],{"class":714},"((",[478,2944,2945],{"class":710},"unsigned",[478,2947,2948],{"class":710}," int",[478,2950,222],{"class":714},[478,2952,2953],{"class":484},"time",[478,2955,263],{"class":714},[478,2957,2958],{"class":495},"NULL",[478,2960,2961],{"class":714},"));\n",[478,2963,2964],{"class":480,"line":1886},[478,2965,2966],{"emptyLinePlaceholder":640},"\n",[478,2968,2969],{"class":480,"line":1898},[478,2970,2971],{"class":770},"    \u002F\u002F1.系统生成随机数\n",[478,2973,2974,2977],{"class":480,"line":2180},[478,2975,2976],{"class":770},"    \u002F\u002Frand()%100",[478,2978,2979],{"class":770}," \u002F\u002F生成0-99的随机数\n",[478,2981,2982,2984,2986,2988,2991,2994,2996,2998,3000,3002,3004],{"class":480,"line":2185},[478,2983,2551],{"class":710},[478,2985,2806],{"class":714},[478,2987,759],{"class":710},[478,2989,2990],{"class":484},"rand",[478,2992,2993],{"class":714},"()",[478,2995,1029],{"class":710},[478,2997,1012],{"class":495},[478,2999,1181],{"class":710},[478,3001,193],{"class":495},[478,3003,767],{"class":714},[478,3005,3006],{"class":770}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[478,3008,3009],{"class":480,"line":2191},[478,3010,3011],{"class":770},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[478,3013,3014],{"class":480,"line":2196},[478,3015,3016],{"class":770},"    \u002F\u002F2.玩家猜测\n",[478,3018,3019,3021,3024,3026,3028],{"class":480,"line":2210},[478,3020,2551],{"class":710},[478,3022,3023],{"class":714}," val",[478,3025,759],{"class":710},[478,3027,895],{"class":495},[478,3029,1859],{"class":714},[478,3031,3032,3034,3036,3038],{"class":480,"line":2215},[478,3033,2817],{"class":710},[478,3035,219],{"class":714},[478,3037,193],{"class":495},[478,3039,720],{"class":714},[478,3041,3042],{"class":480,"line":2221},[478,3043,2596],{"class":714},[478,3045,3046,3049,3051],{"class":480,"line":2241},[478,3047,3048],{"class":714},"        cin",[478,3050,1998],{"class":710},[478,3052,3053],{"class":714},"val;\n",[478,3055,3056],{"class":480,"line":2246},[478,3057,3058],{"class":770},"        \u002F\u002F3.判断玩家猜测\n",[478,3060,3061,3064,3067,3069],{"class":480,"line":2260},[478,3062,3063],{"class":710},"        if",[478,3065,3066],{"class":714},"(val",[478,3068,1605],{"class":710},[478,3070,3071],{"class":714},"num) \n",[478,3073,3074],{"class":480,"line":2265},[478,3075,3076],{"class":714},"        {\n",[478,3078,3079,3082,3084,3087,3089],{"class":480,"line":2294},[478,3080,3081],{"class":714},"            cout",[478,3083,1739],{"class":710},[478,3085,3086],{"class":488},"\"猜小了！\"",[478,3088,1739],{"class":710},[478,3090,1761],{"class":714},[478,3092,3093],{"class":480,"line":2299},[478,3094,3095],{"class":714},"        }\n",[478,3097,3098,3101,3103,3106,3108],{"class":480,"line":2316},[478,3099,3100],{"class":710},"        else",[478,3102,2271],{"class":710},[478,3104,3105],{"class":714}," (val",[478,3107,1655],{"class":710},[478,3109,3110],{"class":714},"num)\n",[478,3112,3113],{"class":480,"line":2321},[478,3114,3076],{"class":714},[478,3116,3117,3119,3121,3124,3126],{"class":480,"line":2326},[478,3118,3081],{"class":714},[478,3120,1739],{"class":710},[478,3122,3123],{"class":488},"\"猜大了！\"",[478,3125,1739],{"class":710},[478,3127,1761],{"class":714},[478,3129,3130],{"class":480,"line":2331},[478,3131,3095],{"class":714},[478,3133,3134],{"class":480,"line":2345},[478,3135,3136],{"class":710},"        else\n",[478,3138,3139],{"class":480,"line":2350},[478,3140,3076],{"class":714},[478,3142,3144,3146,3148,3151,3153],{"class":480,"line":3143},30,[478,3145,3081],{"class":714},[478,3147,1739],{"class":710},[478,3149,3150],{"class":488},"\"猜对了！\"",[478,3152,1739],{"class":710},[478,3154,1761],{"class":714},[478,3156,3158,3161],{"class":480,"line":3157},31,[478,3159,3160],{"class":710},"            break",[478,3162,1859],{"class":714},[478,3164,3166],{"class":480,"line":3165},32,[478,3167,3095],{"class":714},[478,3169,3171],{"class":480,"line":3170},33,[478,3172,3173],{"class":770},"        \u002F\u002F猜对 退出游戏\n",[478,3175,3177],{"class":480,"line":3176},34,[478,3178,3179],{"class":770},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[478,3181,3183],{"class":480,"line":3182},35,[478,3184,2753],{"class":714},[478,3186,3188],{"class":480,"line":3187},36,[478,3189,2133],{"class":714},[29,3191,3192],{"start":565},[32,3193,3194,3195,3198],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[45,3196,3197],{},"do...while会先执行一次循环语句","，在判断循环语句",[469,3200,3202],{"className":701,"code":3201,"language":703,"meta":54,"style":54},"\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",[475,3203,3204,3209,3217,3221,3233,3241,3245,3262,3269,3273,3286,3296],{"__ignoreMap":54},[478,3205,3206],{"class":480,"line":481},[478,3207,3208],{"class":770},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[478,3210,3211,3213,3215],{"class":480,"line":565},[478,3212,717],{"class":710},[478,3214,2539],{"class":484},[478,3216,2542],{"class":714},[478,3218,3219],{"class":480,"line":579},[478,3220,2114],{"class":714},[478,3222,3223,3225,3227,3229,3231],{"class":480,"line":593},[478,3224,2551],{"class":710},[478,3226,2806],{"class":714},[478,3228,759],{"class":710},[478,3230,895],{"class":495},[478,3232,1859],{"class":714},[478,3234,3235,3238],{"class":480,"line":1769},[478,3236,3237],{"class":710},"    do",[478,3239,3240],{"class":714}," \n",[478,3242,3243],{"class":480,"line":1783},[478,3244,2596],{"class":714},[478,3246,3247,3250,3252,3254,3256,3258,3260],{"class":480,"line":1789},[478,3248,3249],{"class":484},"        std",[478,3251,2838],{"class":714},[478,3253,1739],{"class":710},[478,3255,2232],{"class":714},[478,3257,1739],{"class":710},[478,3259,2847],{"class":484},[478,3261,2850],{"class":714},[478,3263,3264,3266],{"class":480,"line":1880},[478,3265,2855],{"class":714},[478,3267,3268],{"class":710},"++\n",[478,3270,3271],{"class":480,"line":1886},[478,3272,2753],{"class":714},[478,3274,3275,3277,3279,3281,3283],{"class":480,"line":1898},[478,3276,2817],{"class":710},[478,3278,2820],{"class":714},[478,3280,1605],{"class":710},[478,3282,1146],{"class":495},[478,3284,3285],{"class":714},");\n",[478,3287,3288,3290,3292,3294],{"class":480,"line":2180},[478,3289,2869],{"class":484},[478,3291,263],{"class":714},[478,3293,2874],{"class":488},[478,3295,3285],{"class":714},[478,3297,3298],{"class":480,"line":2185},[478,3299,2133],{"class":714},[19,3301,3302],{},"案例-水仙花数",[19,3304,3305],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3307,3308],{},"例如：1^3+5^3+3^3=153",[19,3310,3311],{},"请用do...while语句，求出所有3位数的水仙花数",[469,3313,3315],{"className":701,"code":3314,"language":703,"meta":54,"style":54},"#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",[475,3316,3317,3323,3333,3341,3345,3350,3362,3368,3372,3377,3393,3409,3425,3440,3459,3474,3522,3526,3538,3542,3550,3554,3568],{"__ignoreMap":54},[478,3318,3319,3321],{"class":480,"line":481},[478,3320,2516],{"class":710},[478,3322,2900],{"class":488},[478,3324,3325,3327,3329,3331],{"class":480,"line":565},[478,3326,2524],{"class":710},[478,3328,2527],{"class":710},[478,3330,2530],{"class":484},[478,3332,1859],{"class":714},[478,3334,3335,3337,3339],{"class":480,"line":579},[478,3336,717],{"class":710},[478,3338,2539],{"class":484},[478,3340,2542],{"class":714},[478,3342,3343],{"class":480,"line":593},[478,3344,2114],{"class":714},[478,3346,3347],{"class":480,"line":1769},[478,3348,3349],{"class":770},"    \u002F\u002F1.先打印所有三位数字\n",[478,3351,3352,3354,3356,3358,3360],{"class":480,"line":1783},[478,3353,2551],{"class":710},[478,3355,2806],{"class":714},[478,3357,759],{"class":710},[478,3359,1012],{"class":495},[478,3361,1859],{"class":714},[478,3363,3364,3366],{"class":480,"line":1789},[478,3365,3237],{"class":710},[478,3367,3240],{"class":714},[478,3369,3370],{"class":480,"line":1880},[478,3371,2596],{"class":714},[478,3373,3374],{"class":480,"line":1886},[478,3375,3376],{"class":770},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[478,3378,3379,3382,3384,3386,3388,3390],{"class":480,"line":1898},[478,3380,3381],{"class":710},"        int",[478,3383,1967],{"class":714},[478,3385,759],{"class":710},[478,3387,895],{"class":495},[478,3389,767],{"class":714},[478,3391,3392],{"class":770}," \u002F\u002F个位\n",[478,3394,3395,3397,3400,3402,3404,3406],{"class":480,"line":2180},[478,3396,3381],{"class":710},[478,3398,3399],{"class":714}," b",[478,3401,759],{"class":710},[478,3403,895],{"class":495},[478,3405,767],{"class":714},[478,3407,3408],{"class":770}," \u002F\u002F十位\n",[478,3410,3411,3413,3416,3418,3420,3422],{"class":480,"line":2185},[478,3412,3381],{"class":710},[478,3414,3415],{"class":714}," c",[478,3417,759],{"class":710},[478,3419,895],{"class":495},[478,3421,767],{"class":714},[478,3423,3424],{"class":770}," \u002F\u002F百位\n",[478,3426,3427,3430,3432,3434,3436,3438],{"class":480,"line":2191},[478,3428,3429],{"class":714},"        a",[478,3431,759],{"class":710},[478,3433,2232],{"class":714},[478,3435,1029],{"class":710},[478,3437,1146],{"class":495},[478,3439,1859],{"class":714},[478,3441,3442,3445,3447,3449,3451,3453,3455,3457],{"class":480,"line":2196},[478,3443,3444],{"class":714},"        b",[478,3446,759],{"class":710},[478,3448,2232],{"class":714},[478,3450,1284],{"class":710},[478,3452,1146],{"class":495},[478,3454,1029],{"class":710},[478,3456,1146],{"class":495},[478,3458,1859],{"class":714},[478,3460,3461,3464,3466,3468,3470,3472],{"class":480,"line":2210},[478,3462,3463],{"class":714},"        c",[478,3465,759],{"class":710},[478,3467,2232],{"class":714},[478,3469,1284],{"class":710},[478,3471,1012],{"class":495},[478,3473,1859],{"class":714},[478,3475,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3513,3516,3519],{"class":480,"line":2215},[478,3477,3063],{"class":710},[478,3479,2408],{"class":714},[478,3481,1155],{"class":710},[478,3483,518],{"class":714},[478,3485,1155],{"class":710},[478,3487,518],{"class":714},[478,3489,1181],{"class":710},[478,3491,964],{"class":714},[478,3493,1155],{"class":710},[478,3495,964],{"class":714},[478,3497,1155],{"class":710},[478,3499,964],{"class":714},[478,3501,1181],{"class":710},[478,3503,989],{"class":714},[478,3505,1155],{"class":710},[478,3507,989],{"class":714},[478,3509,1155],{"class":710},[478,3511,3512],{"class":714},"c ",[478,3514,3515],{"class":710},"==",[478,3517,3518],{"class":714}," num)",[478,3520,3521],{"class":770}," \u002F\u002F如果是水仙花数，才打印\n",[478,3523,3524],{"class":480,"line":2221},[478,3525,3076],{"class":714},[478,3527,3528,3530,3532,3534,3536],{"class":480,"line":2241},[478,3529,3081],{"class":714},[478,3531,1739],{"class":710},[478,3533,2232],{"class":714},[478,3535,1739],{"class":710},[478,3537,1761],{"class":714},[478,3539,3540],{"class":480,"line":2246},[478,3541,3095],{"class":714},[478,3543,3544,3546,3548],{"class":480,"line":2260},[478,3545,2855],{"class":714},[478,3547,2858],{"class":710},[478,3549,1859],{"class":714},[478,3551,3552],{"class":480,"line":2265},[478,3553,2753],{"class":714},[478,3555,3556,3558,3561,3563,3566],{"class":480,"line":2294},[478,3557,2817],{"class":710},[478,3559,3560],{"class":714}," (num ",[478,3562,1605],{"class":710},[478,3564,3565],{"class":495}," 1000",[478,3567,3285],{"class":714},[478,3569,3570],{"class":480,"line":2299},[478,3571,2133],{"class":714},[29,3573,3574],{"start":579},[32,3575,3576],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[469,3578,3580],{"className":701,"code":3579,"language":703,"meta":54,"style":54},"\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",[475,3581,3582,3587,3616,3620,3632,3636,3641,3652,3659,3663,3677,3681,3688,3692,3704,3713],{"__ignoreMap":54},[478,3583,3584],{"class":480,"line":481},[478,3585,3586],{"class":770},"\u002F\u002F从数字0-9打印\n",[478,3588,3589,3592,3594,3596,3599,3601,3603,3606,3608,3610,3612,3614],{"class":480,"line":565},[478,3590,3591],{"class":710},"for",[478,3593,263],{"class":714},[478,3595,717],{"class":710},[478,3597,3598],{"class":714}," i",[478,3600,759],{"class":710},[478,3602,895],{"class":495},[478,3604,3605],{"class":714},";i",[478,3607,1605],{"class":710},[478,3609,1146],{"class":495},[478,3611,3605],{"class":714},[478,3613,2858],{"class":710},[478,3615,720],{"class":714},[478,3617,3618],{"class":480,"line":579},[478,3619,2114],{"class":714},[478,3621,3622,3624,3626,3628,3630],{"class":480,"line":593},[478,3623,2119],{"class":714},[478,3625,1739],{"class":710},[478,3627,1141],{"class":714},[478,3629,1739],{"class":710},[478,3631,1761],{"class":714},[478,3633,3634],{"class":480,"line":1769},[478,3635,2133],{"class":714},[478,3637,3638],{"class":480,"line":1783},[478,3639,3640],{"class":770},"\u002F\u002F上式可以进行拆分\n",[478,3642,3643,3645,3647,3649],{"class":480,"line":1789},[478,3644,717],{"class":710},[478,3646,3598],{"class":714},[478,3648,759],{"class":710},[478,3650,3651],{"class":495},"0\n",[478,3653,3654,3656],{"class":480,"line":1880},[478,3655,3591],{"class":710},[478,3657,3658],{"class":714},"(;;;)\n",[478,3660,3661],{"class":480,"line":1886},[478,3662,2114],{"class":714},[478,3664,3665,3668,3671,3673,3675],{"class":480,"line":1898},[478,3666,3667],{"class":710},"    if",[478,3669,3670],{"class":714},"(i",[478,3672,2277],{"class":710},[478,3674,1146],{"class":495},[478,3676,720],{"class":714},[478,3678,3679],{"class":480,"line":2180},[478,3680,2596],{"class":714},[478,3682,3683,3686],{"class":480,"line":2185},[478,3684,3685],{"class":710},"        break",[478,3687,1859],{"class":714},[478,3689,3690],{"class":480,"line":2191},[478,3691,2753],{"class":714},[478,3693,3694,3696,3698,3700,3702],{"class":480,"line":2196},[478,3695,2119],{"class":714},[478,3697,1739],{"class":710},[478,3699,1141],{"class":714},[478,3701,1739],{"class":710},[478,3703,1761],{"class":714},[478,3705,3706,3709,3711],{"class":480,"line":2210},[478,3707,3708],{"class":714},"    i",[478,3710,2858],{"class":710},[478,3712,1859],{"class":714},[478,3714,3715],{"class":480,"line":2215},[478,3716,2133],{"class":714},[19,3718,3719],{},"小练习",[469,3721,3723],{"className":701,"code":3722,"language":703,"meta":54,"style":54},"#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",[475,3724,3725,3731,3741,3749,3753,3758,3763,3791,3795,3800,3805,3846,3850,3863,3867,3871,3875,3887,3891,3895],{"__ignoreMap":54},[478,3726,3727,3729],{"class":480,"line":481},[478,3728,2516],{"class":710},[478,3730,2519],{"class":488},[478,3732,3733,3735,3737,3739],{"class":480,"line":565},[478,3734,2524],{"class":710},[478,3736,2527],{"class":710},[478,3738,2530],{"class":484},[478,3740,1859],{"class":714},[478,3742,3743,3745,3747],{"class":480,"line":579},[478,3744,717],{"class":710},[478,3746,2539],{"class":484},[478,3748,2542],{"class":714},[478,3750,3751],{"class":480,"line":593},[478,3752,2114],{"class":714},[478,3754,3755],{"class":480,"line":1769},[478,3756,3757],{"class":770},"    \u002F\u002F敲桌子案例\n",[478,3759,3760],{"class":480,"line":1783},[478,3761,3762],{"class":770},"    \u002F\u002F1.先输出1-100的数字\n",[478,3764,3765,3768,3770,3772,3774,3776,3778,3781,3783,3785,3787,3789],{"class":480,"line":1789},[478,3766,3767],{"class":710},"    for",[478,3769,263],{"class":714},[478,3771,717],{"class":710},[478,3773,3598],{"class":714},[478,3775,759],{"class":710},[478,3777,193],{"class":495},[478,3779,3780],{"class":714},"; i",[478,3782,2156],{"class":710},[478,3784,1012],{"class":495},[478,3786,3780],{"class":714},[478,3788,2858],{"class":710},[478,3790,720],{"class":714},[478,3792,3793],{"class":480,"line":1880},[478,3794,2596],{"class":714},[478,3796,3797],{"class":480,"line":1886},[478,3798,3799],{"class":770},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[478,3801,3802],{"class":480,"line":1898},[478,3803,3804],{"class":770},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[478,3806,3807,3809,3811,3813,3815,3817,3819,3822,3824,3826,3828,3830,3832,3834,3836,3838,3840,3842,3844],{"class":480,"line":2180},[478,3808,3063],{"class":710},[478,3810,3670],{"class":714},[478,3812,1029],{"class":710},[478,3814,1070],{"class":495},[478,3816,3515],{"class":710},[478,3818,895],{"class":495},[478,3820,3821],{"class":710}," ||",[478,3823,3598],{"class":714},[478,3825,1029],{"class":710},[478,3827,1146],{"class":495},[478,3829,3515],{"class":710},[478,3831,1070],{"class":495},[478,3833,3821],{"class":710},[478,3835,3598],{"class":714},[478,3837,1284],{"class":710},[478,3839,1146],{"class":495},[478,3841,3515],{"class":710},[478,3843,1070],{"class":495},[478,3845,720],{"class":714},[478,3847,3848],{"class":480,"line":2185},[478,3849,3076],{"class":714},[478,3851,3852,3854,3856,3859,3861],{"class":480,"line":2191},[478,3853,3081],{"class":714},[478,3855,1739],{"class":710},[478,3857,3858],{"class":488},"\"敲桌子\"",[478,3860,1739],{"class":710},[478,3862,1761],{"class":714},[478,3864,3865],{"class":480,"line":2196},[478,3866,3095],{"class":714},[478,3868,3869],{"class":480,"line":2210},[478,3870,3136],{"class":710},[478,3872,3873],{"class":480,"line":2215},[478,3874,3076],{"class":714},[478,3876,3877,3879,3881,3883,3885],{"class":480,"line":2221},[478,3878,3081],{"class":714},[478,3880,1739],{"class":710},[478,3882,1141],{"class":714},[478,3884,1739],{"class":710},[478,3886,1761],{"class":714},[478,3888,3889],{"class":480,"line":2241},[478,3890,3095],{"class":714},[478,3892,3893],{"class":480,"line":2246},[478,3894,2753],{"class":714},[478,3896,3897],{"class":480,"line":2260},[478,3898,2133],{"class":714},[19,3900,3901],{},"嵌套实现星图",[469,3903,3905],{"className":701,"code":3904,"language":703,"meta":54,"style":54},"#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",[475,3906,3907,3913,3923,3931,3935,3961,3965,3994,3998,4009,4013,4022,4026],{"__ignoreMap":54},[478,3908,3909,3911],{"class":480,"line":481},[478,3910,2516],{"class":710},[478,3912,2519],{"class":488},[478,3914,3915,3917,3919,3921],{"class":480,"line":565},[478,3916,2524],{"class":710},[478,3918,2527],{"class":710},[478,3920,2530],{"class":484},[478,3922,1859],{"class":714},[478,3924,3925,3927,3929],{"class":480,"line":579},[478,3926,717],{"class":710},[478,3928,2539],{"class":484},[478,3930,2542],{"class":714},[478,3932,3933],{"class":480,"line":593},[478,3934,2114],{"class":714},[478,3936,3937,3939,3941,3943,3945,3947,3949,3951,3953,3955,3957,3959],{"class":480,"line":1769},[478,3938,3767],{"class":710},[478,3940,219],{"class":714},[478,3942,717],{"class":710},[478,3944,3598],{"class":714},[478,3946,759],{"class":710},[478,3948,895],{"class":495},[478,3950,3605],{"class":714},[478,3952,1605],{"class":710},[478,3954,1146],{"class":495},[478,3956,3605],{"class":714},[478,3958,2858],{"class":710},[478,3960,720],{"class":714},[478,3962,3963],{"class":480,"line":1783},[478,3964,2596],{"class":714},[478,3966,3967,3970,3972,3974,3977,3979,3981,3984,3986,3988,3990,3992],{"class":480,"line":1789},[478,3968,3969],{"class":710},"        for",[478,3971,219],{"class":714},[478,3973,717],{"class":710},[478,3975,3976],{"class":714}," j",[478,3978,759],{"class":710},[478,3980,895],{"class":495},[478,3982,3983],{"class":714},";j",[478,3985,1605],{"class":710},[478,3987,1146],{"class":495},[478,3989,3983],{"class":714},[478,3991,2858],{"class":710},[478,3993,720],{"class":714},[478,3995,3996],{"class":480,"line":1880},[478,3997,3076],{"class":714},[478,3999,4000,4002,4004,4007],{"class":480,"line":1886},[478,4001,3081],{"class":714},[478,4003,1739],{"class":710},[478,4005,4006],{"class":488},"\"*\"",[478,4008,1859],{"class":714},[478,4010,4011],{"class":480,"line":1898},[478,4012,3095],{"class":714},[478,4014,4015,4018,4020],{"class":480,"line":2180},[478,4016,4017],{"class":714},"        cout",[478,4019,1739],{"class":710},[478,4021,1761],{"class":714},[478,4023,4024],{"class":480,"line":2185},[478,4025,2753],{"class":714},[478,4027,4028],{"class":480,"line":2191},[478,4029,2133],{"class":714},[19,4031,4032],{},"乘法口诀表",[469,4034,4036],{"className":701,"code":4035,"language":703,"meta":54,"style":54},"#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",[475,4037,4038,4044,4054,4062,4066,4092,4096,4121,4125,4165,4169,4177,4181],{"__ignoreMap":54},[478,4039,4040,4042],{"class":480,"line":481},[478,4041,2516],{"class":710},[478,4043,2900],{"class":488},[478,4045,4046,4048,4050,4052],{"class":480,"line":565},[478,4047,2524],{"class":710},[478,4049,2527],{"class":710},[478,4051,2530],{"class":484},[478,4053,1859],{"class":714},[478,4055,4056,4058,4060],{"class":480,"line":579},[478,4057,717],{"class":710},[478,4059,2539],{"class":484},[478,4061,2542],{"class":714},[478,4063,4064],{"class":480,"line":593},[478,4065,2114],{"class":714},[478,4067,4068,4070,4072,4074,4076,4078,4080,4082,4084,4086,4088,4090],{"class":480,"line":1769},[478,4069,3767],{"class":710},[478,4071,263],{"class":714},[478,4073,717],{"class":710},[478,4075,3598],{"class":714},[478,4077,759],{"class":710},[478,4079,193],{"class":495},[478,4081,3605],{"class":714},[478,4083,1605],{"class":710},[478,4085,1146],{"class":495},[478,4087,3605],{"class":714},[478,4089,2858],{"class":710},[478,4091,720],{"class":714},[478,4093,4094],{"class":480,"line":1783},[478,4095,2596],{"class":714},[478,4097,4098,4100,4102,4104,4106,4108,4110,4112,4114,4117,4119],{"class":480,"line":1789},[478,4099,3969],{"class":710},[478,4101,263],{"class":714},[478,4103,717],{"class":710},[478,4105,3976],{"class":714},[478,4107,759],{"class":710},[478,4109,193],{"class":495},[478,4111,3983],{"class":714},[478,4113,2156],{"class":710},[478,4115,4116],{"class":714},"i;j",[478,4118,2858],{"class":710},[478,4120,720],{"class":714},[478,4122,4123],{"class":480,"line":1880},[478,4124,3076],{"class":714},[478,4126,4127,4129,4131,4133,4135,4137,4139,4141,4143,4146,4148,4150,4152,4154,4156,4159,4161,4163],{"class":480,"line":1886},[478,4128,3081],{"class":714},[478,4130,1739],{"class":710},[478,4132,1167],{"class":714},[478,4134,1739],{"class":710},[478,4136,4006],{"class":488},[478,4138,1739],{"class":710},[478,4140,1141],{"class":714},[478,4142,1739],{"class":710},[478,4144,4145],{"class":488},"\"=\"",[478,4147,1739],{"class":710},[478,4149,1141],{"class":714},[478,4151,1155],{"class":710},[478,4153,1167],{"class":714},[478,4155,1739],{"class":710},[478,4157,4158],{"class":488},"'",[478,4160,1799],{"class":495},[478,4162,4158],{"class":488},[478,4164,1859],{"class":714},[478,4166,4167],{"class":480,"line":1898},[478,4168,3095],{"class":714},[478,4170,4171,4173,4175],{"class":480,"line":2180},[478,4172,4017],{"class":714},[478,4174,1739],{"class":710},[478,4176,1761],{"class":714},[478,4178,4179],{"class":480,"line":2185},[478,4180,2753],{"class":714},[478,4182,4183],{"class":480,"line":2191},[478,4184,2133],{"class":714},[129,4186,4188],{"id":4187},"_163跳出语句","1.6.3跳出语句",[29,4190,4191],{},[32,4192,4193],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4195,4196],{},"break使用时机：",[1702,4198,4199,4202,4205],{},[32,4200,4201],{},"出现在switch条件语句中，作用是终止case并跳出switch",[32,4203,4204],{},"出现在循环结构中，作用是跳出当前的循环结构",[32,4206,4207],{},"出现在嵌套循环中，跳出最近的内层循环语句",[29,4209,4210,4213],{"start":565},[32,4211,4212],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[32,4214,4215],{},"goto语句\n语法：goto 标记;",[19,4217,4218],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[469,4220,4222],{"className":701,"code":4221,"language":703,"meta":54,"style":54},"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",[475,4223,4224,4232,4236,4249,4259,4272,4285,4298,4306,4322],{"__ignoreMap":54},[478,4225,4226,4228,4230],{"class":480,"line":481},[478,4227,717],{"class":710},[478,4229,2539],{"class":484},[478,4231,2542],{"class":714},[478,4233,4234],{"class":480,"line":565},[478,4235,2114],{"class":714},[478,4237,4238,4240,4242,4245,4247],{"class":480,"line":579},[478,4239,2119],{"class":714},[478,4241,1739],{"class":710},[478,4243,4244],{"class":488},"\"1\"",[478,4246,1739],{"class":710},[478,4248,1761],{"class":714},[478,4250,4251,4254,4257],{"class":480,"line":593},[478,4252,4253],{"class":710},"    goto",[478,4255,4256],{"class":484}," FLAG",[478,4258,1859],{"class":714},[478,4260,4261,4263,4265,4268,4270],{"class":480,"line":1769},[478,4262,2119],{"class":714},[478,4264,1739],{"class":710},[478,4266,4267],{"class":488},"\"2\"",[478,4269,1739],{"class":710},[478,4271,1761],{"class":714},[478,4273,4274,4276,4278,4281,4283],{"class":480,"line":1783},[478,4275,2119],{"class":714},[478,4277,1739],{"class":710},[478,4279,4280],{"class":488},"\"3\"",[478,4282,1739],{"class":710},[478,4284,1761],{"class":714},[478,4286,4287,4289,4291,4294,4296],{"class":480,"line":1789},[478,4288,2119],{"class":714},[478,4290,1739],{"class":710},[478,4292,4293],{"class":488},"\"4\"",[478,4295,1739],{"class":710},[478,4297,1761],{"class":714},[478,4299,4300,4303],{"class":480,"line":1880},[478,4301,4302],{"class":484},"    FLAG",[478,4304,4305],{"class":714},":\n",[478,4307,4308,4310,4312,4315,4317,4319],{"class":480,"line":1886},[478,4309,2119],{"class":714},[478,4311,1739],{"class":710},[478,4313,4314],{"class":488},"\"5\"",[478,4316,1739],{"class":710},[478,4318,1807],{"class":714},[478,4320,4321],{"class":770},"\u002F\u002F跳过了2,3,4,直接到5\n",[478,4323,4324],{"class":480,"line":1898},[478,4325,2133],{"class":714},[14,4327,4329],{"id":4328},"_17数组","1.7数组",[129,4331,4333],{"id":4332},"_171一维数组","1.7.1一维数组",[29,4335,4336],{},[32,4337,4338],{},"一维数组定义方式",[371,4340,4341,4351],{},[374,4342,4343],{},[377,4344,4345,4348],{},[380,4346,4347],{},"方式",[380,4349,4350],{},"注意事项",[388,4352,4353,4367,4377],{},[377,4354,4355,4361],{},[393,4356,4357,4358,767],{},"数据类型 数组名",[478,4359,4360],{},"数组长度",[393,4362,4363,4364,4366],{},"这种方式是先定义再arr",[478,4365,1141],{},"赋值",[377,4368,4369,4374],{},[393,4370,4357,4371,4373],{},[478,4372,4360],{},"={值1,值2....};",[393,4375,4376],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[377,4378,4379,4383],{},[393,4380,4357,4381,4373],{},[478,4382],{},[393,4384,4385,4386,4388],{},"int arr",[478,4387],{},";这是不正确的，按照这样的方式定义必须有初始长度",[29,4390,4391],{"start":565},[32,4392,4393],{},"一维数组数组名\n用途：",[1702,4395,4396],{},[32,4397,4398],{},"1.可以统计整个数组在内存中的长度：",[469,4400,4402],{"className":701,"code":4401,"language":703,"meta":54,"style":54},"sizeof(arr);\nsizeof(arr[0]);\n",[475,4403,4404,4411],{"__ignoreMap":54},[478,4405,4406,4408],{"class":480,"line":481},[478,4407,711],{"class":710},[478,4409,4410],{"class":714},"(arr);\n",[478,4412,4413,4415,4418,4420],{"class":480,"line":565},[478,4414,711],{"class":710},[478,4416,4417],{"class":714},"(arr[",[478,4419,895],{"class":495},[478,4421,4422],{"class":714},"]);\n",[1702,4424,4425],{},[32,4426,4427],{},"2.可以获取数组在内存中的首地址:",[469,4429,4431],{"className":701,"code":4430,"language":703,"meta":54,"style":54},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[475,4432,4433,4438,4451,4456],{"__ignoreMap":54},[478,4434,4435],{"class":480,"line":481},[478,4436,4437],{"class":770},"\u002F\u002F查看16进制的首地址\n",[478,4439,4440,4442,4444,4447,4449],{"class":480,"line":565},[478,4441,1938],{"class":714},[478,4443,1739],{"class":710},[478,4445,4446],{"class":714},"arr",[478,4448,1739],{"class":710},[478,4450,1761],{"class":714},[478,4452,4453],{"class":480,"line":579},[478,4454,4455],{"class":770},"\u002F\u002F看10进制数\n",[478,4457,4458,4460,4462,4464,4466,4468,4470,4473,4475,4477,4479],{"class":480,"line":593},[478,4459,1938],{"class":714},[478,4461,1739],{"class":710},[478,4463,263],{"class":714},[478,4465,717],{"class":710},[478,4467,222],{"class":714},[478,4469,1054],{"class":710},[478,4471,4472],{"class":714},"arr[",[478,4474,895],{"class":495},[478,4476,1635],{"class":714},[478,4478,1739],{"class":710},[478,4480,1761],{"class":714},[19,4482,4483],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1702,4485,4486],{},[32,4487,4488],{},"1️⃣五只小猪称体重",[469,4490,4492],{"className":701,"code":4491,"language":703,"meta":54,"style":54},"#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",[475,4493,4494,4500,4510,4518,4522,4562,4575,4601,4605,4617,4621,4631,4635,4639,4652,4662],{"__ignoreMap":54},[478,4495,4496,4498],{"class":480,"line":481},[478,4497,2516],{"class":710},[478,4499,2519],{"class":488},[478,4501,4502,4504,4506,4508],{"class":480,"line":565},[478,4503,2524],{"class":710},[478,4505,2527],{"class":710},[478,4507,2530],{"class":484},[478,4509,1859],{"class":714},[478,4511,4512,4514,4516],{"class":480,"line":579},[478,4513,717],{"class":710},[478,4515,2539],{"class":484},[478,4517,2542],{"class":714},[478,4519,4520],{"class":480,"line":593},[478,4521,2114],{"class":714},[478,4523,4524,4526,4529,4531,4533,4535,4537,4540,4542,4545,4547,4549,4551,4554,4556,4559],{"class":480,"line":1769},[478,4525,2551],{"class":710},[478,4527,4528],{"class":714}," arr[",[478,4530,1020],{"class":495},[478,4532,1635],{"class":714},[478,4534,759],{"class":710},[478,4536,1591],{"class":714},[478,4538,4539],{"class":495},"300",[478,4541,1079],{"class":714},[478,4543,4544],{"class":495},"350",[478,4546,1079],{"class":714},[478,4548,2289],{"class":495},[478,4550,1079],{"class":714},[478,4552,4553],{"class":495},"400",[478,4555,1079],{"class":714},[478,4557,4558],{"class":495},"250",[478,4560,4561],{"class":714},"};\n",[478,4563,4564,4566,4569,4571,4573],{"class":480,"line":1783},[478,4565,2551],{"class":710},[478,4567,4568],{"class":714}," tmp",[478,4570,759],{"class":710},[478,4572,895],{"class":495},[478,4574,1859],{"class":714},[478,4576,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599],{"class":480,"line":1789},[478,4578,3767],{"class":710},[478,4580,219],{"class":714},[478,4582,717],{"class":710},[478,4584,3598],{"class":714},[478,4586,759],{"class":710},[478,4588,895],{"class":495},[478,4590,3605],{"class":714},[478,4592,1605],{"class":710},[478,4594,1020],{"class":495},[478,4596,3605],{"class":714},[478,4598,2858],{"class":710},[478,4600,720],{"class":714},[478,4602,4603],{"class":480,"line":1880},[478,4604,2596],{"class":714},[478,4606,4607,4609,4612,4614],{"class":480,"line":1886},[478,4608,3063],{"class":710},[478,4610,4611],{"class":714},"(tmp",[478,4613,1605],{"class":710},[478,4615,4616],{"class":714},"arr[i])\n",[478,4618,4619],{"class":480,"line":1898},[478,4620,3076],{"class":714},[478,4622,4623,4626,4628],{"class":480,"line":2180},[478,4624,4625],{"class":714},"            tmp",[478,4627,759],{"class":710},[478,4629,4630],{"class":714},"arr[i];\n",[478,4632,4633],{"class":480,"line":2185},[478,4634,3095],{"class":714},[478,4636,4637],{"class":480,"line":2191},[478,4638,2753],{"class":714},[478,4640,4641,4643,4645,4648,4650],{"class":480,"line":2196},[478,4642,2119],{"class":714},[478,4644,1739],{"class":710},[478,4646,4647],{"class":714},"tmp",[478,4649,1739],{"class":710},[478,4651,1761],{"class":714},[478,4653,4654,4657,4660],{"class":480,"line":2210},[478,4655,4656],{"class":710},"    return",[478,4658,4659],{"class":495}," 0",[478,4661,1859],{"class":714},[478,4663,4664],{"class":480,"line":2215},[478,4665,2133],{"class":714},[1702,4667,4668],{},[32,4669,4670],{},"2️⃣数组元素逆置",[469,4672,4674],{"className":701,"code":4673,"language":703,"meta":54,"style":54},"\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",[475,4675,4676,4681,4687,4697,4705,4709,4744,4760,4792,4805,4810,4815,4827,4837,4847,4852,4861,4871,4876,4881,4908,4912,4928,4932,4943,4952],{"__ignoreMap":54},[478,4677,4678],{"class":480,"line":481},[478,4679,4680],{"class":770},"\u002F\u002F元素逆置\n",[478,4682,4683,4685],{"class":480,"line":565},[478,4684,2516],{"class":710},[478,4686,2519],{"class":488},[478,4688,4689,4691,4693,4695],{"class":480,"line":579},[478,4690,2524],{"class":710},[478,4692,2527],{"class":710},[478,4694,2530],{"class":484},[478,4696,1859],{"class":714},[478,4698,4699,4701,4703],{"class":480,"line":593},[478,4700,717],{"class":710},[478,4702,2539],{"class":484},[478,4704,2542],{"class":714},[478,4706,4707],{"class":480,"line":1769},[478,4708,2114],{"class":714},[478,4710,4711,4714,4716,4718,4720,4722,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742],{"class":480,"line":1783},[478,4712,4713],{"class":710},"   int",[478,4715,4528],{"class":714},[478,4717,1020],{"class":495},[478,4719,1635],{"class":714},[478,4721,759],{"class":710},[478,4723,1591],{"class":714},[478,4725,193],{"class":495},[478,4727,1079],{"class":714},[478,4729,789],{"class":495},[478,4731,1079],{"class":714},[478,4733,783],{"class":495},[478,4735,1079],{"class":714},[478,4737,994],{"class":495},[478,4739,1079],{"class":714},[478,4741,1020],{"class":495},[478,4743,4561],{"class":714},[478,4745,4746,4748,4751,4753,4755,4757],{"class":480,"line":1789},[478,4747,4713],{"class":710},[478,4749,4750],{"class":714}," start",[478,4752,759],{"class":710},[478,4754,895],{"class":495},[478,4756,767],{"class":714},[478,4758,4759],{"class":770},"\u002F\u002F起始下标\n",[478,4761,4762,4764,4767,4770,4773,4776,4778,4780,4783,4785,4787,4789],{"class":480,"line":1880},[478,4763,4713],{"class":710},[478,4765,4766],{"class":714}," end",[478,4768,4769],{"class":710},"=sizeof",[478,4771,4772],{"class":714},"(arr)",[478,4774,4775],{"class":710},"\u002Fsizeof",[478,4777,4417],{"class":714},[478,4779,895],{"class":495},[478,4781,4782],{"class":714},"])",[478,4784,1232],{"class":710},[478,4786,193],{"class":495},[478,4788,767],{"class":714},[478,4790,4791],{"class":770},"\u002F\u002F结束下标\n",[478,4793,4794,4797,4800,4802],{"class":480,"line":1886},[478,4795,4796],{"class":710},"   while",[478,4798,4799],{"class":714}," (start",[478,4801,1605],{"class":710},[478,4803,4804],{"class":714},"end)\n",[478,4806,4807],{"class":480,"line":1898},[478,4808,4809],{"class":714},"   {\n",[478,4811,4812],{"class":480,"line":2180},[478,4813,4814],{"class":770},"    \u002F\u002F实现元素互换代码\n",[478,4816,4817,4819,4822,4824],{"class":480,"line":2185},[478,4818,2551],{"class":710},[478,4820,4821],{"class":714}," temp",[478,4823,759],{"class":710},[478,4825,4826],{"class":714},"arr[start];\n",[478,4828,4829,4832,4834],{"class":480,"line":2191},[478,4830,4831],{"class":714},"    arr[start]",[478,4833,759],{"class":710},[478,4835,4836],{"class":714},"arr[end];\n",[478,4838,4839,4842,4844],{"class":480,"line":2196},[478,4840,4841],{"class":714},"    arr[end]",[478,4843,759],{"class":710},[478,4845,4846],{"class":714},"temp;\n",[478,4848,4849],{"class":480,"line":2210},[478,4850,4851],{"class":770},"    \u002F\u002F下标更新\n",[478,4853,4854,4857,4859],{"class":480,"line":2215},[478,4855,4856],{"class":714},"    start",[478,4858,2858],{"class":710},[478,4860,1859],{"class":714},[478,4862,4863,4866,4869],{"class":480,"line":2221},[478,4864,4865],{"class":714},"    end",[478,4867,4868],{"class":710},"--",[478,4870,1859],{"class":714},[478,4872,4873],{"class":480,"line":2241},[478,4874,4875],{"class":714},"   }\n",[478,4877,4878],{"class":480,"line":2246},[478,4879,4880],{"class":770},"   \u002F\u002F输出逆置后的数组\n",[478,4882,4883,4886,4888,4890,4892,4894,4896,4898,4900,4902,4904,4906],{"class":480,"line":2260},[478,4884,4885],{"class":710},"   for",[478,4887,219],{"class":714},[478,4889,717],{"class":710},[478,4891,3598],{"class":714},[478,4893,759],{"class":710},[478,4895,895],{"class":495},[478,4897,3605],{"class":714},[478,4899,1605],{"class":710},[478,4901,1020],{"class":495},[478,4903,3605],{"class":714},[478,4905,2858],{"class":710},[478,4907,720],{"class":714},[478,4909,4910],{"class":480,"line":2265},[478,4911,4809],{"class":714},[478,4913,4914,4916,4918,4921,4923,4926],{"class":480,"line":2294},[478,4915,2119],{"class":714},[478,4917,1739],{"class":710},[478,4919,4920],{"class":714},"arr[i]",[478,4922,1739],{"class":710},[478,4924,4925],{"class":488},"\" \"",[478,4927,1859],{"class":714},[478,4929,4930],{"class":480,"line":2299},[478,4931,4875],{"class":714},[478,4933,4934,4937,4939,4941],{"class":480,"line":2316},[478,4935,4936],{"class":484},"   system",[478,4938,263],{"class":714},[478,4940,2874],{"class":488},[478,4942,3285],{"class":714},[478,4944,4945,4948,4950],{"class":480,"line":2321},[478,4946,4947],{"class":710},"   return",[478,4949,4659],{"class":495},[478,4951,1859],{"class":714},[478,4953,4954],{"class":480,"line":2326},[478,4955,2133],{"class":714},[1702,4957,4958],{},[32,4959,4960],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[469,4962,4964],{"className":701,"code":4963,"language":703,"meta":54,"style":54},"\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",[475,4965,4966,4971,4977,4987,4995,4999,5051,5064,5090,5094,5108,5112,5117,5122,5152,5156,5161,5195,5199,5204,5224,5229,5241,5257,5272,5277,5281,5285,5298,5324,5328,5342,5346,5354],{"__ignoreMap":54},[478,4967,4968],{"class":480,"line":481},[478,4969,4970],{"class":770},"\u002F\u002F冒泡排序,升序\n",[478,4972,4973,4975],{"class":480,"line":565},[478,4974,2516],{"class":710},[478,4976,2519],{"class":488},[478,4978,4979,4981,4983,4985],{"class":480,"line":579},[478,4980,2524],{"class":710},[478,4982,2527],{"class":710},[478,4984,2530],{"class":484},[478,4986,1859],{"class":714},[478,4988,4989,4991,4993],{"class":480,"line":593},[478,4990,717],{"class":710},[478,4992,2539],{"class":484},[478,4994,2542],{"class":714},[478,4996,4997],{"class":480,"line":1769},[478,4998,2114],{"class":714},[478,5000,5001,5003,5005,5007,5010,5012,5015,5017,5019,5021,5023,5025,5027,5029,5031,5033,5035,5037,5039,5041,5043,5045,5047,5049],{"class":480,"line":1783},[478,5002,2551],{"class":710},[478,5004,4528],{"class":714},[478,5006,1121],{"class":495},[478,5008,5009],{"class":714},"] ",[478,5011,759],{"class":710},[478,5013,5014],{"class":714}," {",[478,5016,994],{"class":495},[478,5018,1079],{"class":714},[478,5020,789],{"class":495},[478,5022,1079],{"class":714},[478,5024,1096],{"class":495},[478,5026,1079],{"class":714},[478,5028,895],{"class":495},[478,5030,1079],{"class":714},[478,5032,1020],{"class":495},[478,5034,1079],{"class":714},[478,5036,1070],{"class":495},[478,5038,1079],{"class":714},[478,5040,193],{"class":495},[478,5042,1079],{"class":714},[478,5044,783],{"class":495},[478,5046,1079],{"class":714},[478,5048,1121],{"class":495},[478,5050,4561],{"class":714},[478,5052,5053,5055,5057,5060,5062],{"class":480,"line":1789},[478,5054,2119],{"class":714},[478,5056,1739],{"class":710},[478,5058,5059],{"class":488},"\"排序前：\"",[478,5061,1739],{"class":710},[478,5063,1761],{"class":714},[478,5065,5066,5068,5070,5072,5074,5076,5078,5080,5082,5084,5086,5088],{"class":480,"line":1880},[478,5067,3767],{"class":710},[478,5069,219],{"class":714},[478,5071,717],{"class":710},[478,5073,3598],{"class":714},[478,5075,759],{"class":710},[478,5077,895],{"class":495},[478,5079,3605],{"class":714},[478,5081,1605],{"class":710},[478,5083,1121],{"class":495},[478,5085,3605],{"class":714},[478,5087,2858],{"class":710},[478,5089,720],{"class":714},[478,5091,5092],{"class":480,"line":1886},[478,5093,2596],{"class":714},[478,5095,5096,5098,5100,5102,5104,5106],{"class":480,"line":1898},[478,5097,4017],{"class":714},[478,5099,1739],{"class":710},[478,5101,4920],{"class":714},[478,5103,1739],{"class":710},[478,5105,4925],{"class":488},[478,5107,1859],{"class":714},[478,5109,5110],{"class":480,"line":2180},[478,5111,2753],{"class":714},[478,5113,5114],{"class":480,"line":2185},[478,5115,5116],{"class":770},"    \u002F\u002F开始冒泡排序\n",[478,5118,5119],{"class":480,"line":2191},[478,5120,5121],{"class":770},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[478,5123,5124,5126,5128,5130,5132,5134,5136,5138,5140,5142,5144,5146,5148,5150],{"class":480,"line":2196},[478,5125,3767],{"class":710},[478,5127,219],{"class":714},[478,5129,717],{"class":710},[478,5131,3598],{"class":714},[478,5133,759],{"class":710},[478,5135,895],{"class":495},[478,5137,3605],{"class":714},[478,5139,1605],{"class":710},[478,5141,1121],{"class":495},[478,5143,1232],{"class":710},[478,5145,193],{"class":495},[478,5147,3605],{"class":714},[478,5149,2858],{"class":710},[478,5151,720],{"class":714},[478,5153,5154],{"class":480,"line":2210},[478,5155,2596],{"class":714},[478,5157,5158],{"class":480,"line":2215},[478,5159,5160],{"class":770},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[478,5162,5163,5165,5167,5169,5171,5173,5175,5177,5179,5181,5183,5185,5187,5189,5191,5193],{"class":480,"line":2221},[478,5164,3969],{"class":710},[478,5166,219],{"class":714},[478,5168,717],{"class":710},[478,5170,3976],{"class":714},[478,5172,759],{"class":710},[478,5174,895],{"class":495},[478,5176,3983],{"class":714},[478,5178,1605],{"class":710},[478,5180,1121],{"class":495},[478,5182,1232],{"class":710},[478,5184,1141],{"class":714},[478,5186,1232],{"class":710},[478,5188,193],{"class":495},[478,5190,3983],{"class":714},[478,5192,2858],{"class":710},[478,5194,720],{"class":714},[478,5196,5197],{"class":480,"line":2241},[478,5198,3076],{"class":714},[478,5200,5201],{"class":480,"line":2246},[478,5202,5203],{"class":770},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[478,5205,5206,5209,5212,5214,5217,5219,5221],{"class":480,"line":2260},[478,5207,5208],{"class":710},"            if",[478,5210,5211],{"class":714},"(arr[j]",[478,5213,1655],{"class":710},[478,5215,5216],{"class":714},"arr[j",[478,5218,1181],{"class":710},[478,5220,193],{"class":495},[478,5222,5223],{"class":714},"])\n",[478,5225,5226],{"class":480,"line":2265},[478,5227,5228],{"class":714},"            {\n",[478,5230,5231,5234,5236,5238],{"class":480,"line":2294},[478,5232,5233],{"class":710},"                int",[478,5235,4821],{"class":714},[478,5237,759],{"class":710},[478,5239,5240],{"class":714},"arr[j];\n",[478,5242,5243,5246,5248,5250,5252,5254],{"class":480,"line":2299},[478,5244,5245],{"class":714},"                arr[j]",[478,5247,759],{"class":710},[478,5249,5216],{"class":714},[478,5251,1181],{"class":710},[478,5253,193],{"class":495},[478,5255,5256],{"class":714},"];\n",[478,5258,5259,5262,5264,5266,5268,5270],{"class":480,"line":2316},[478,5260,5261],{"class":714},"                arr[j",[478,5263,1181],{"class":710},[478,5265,193],{"class":495},[478,5267,1635],{"class":714},[478,5269,759],{"class":710},[478,5271,4846],{"class":714},[478,5273,5274],{"class":480,"line":2321},[478,5275,5276],{"class":714},"            }\n",[478,5278,5279],{"class":480,"line":2326},[478,5280,3095],{"class":714},[478,5282,5283],{"class":480,"line":2331},[478,5284,2753],{"class":714},[478,5286,5287,5289,5291,5294,5296],{"class":480,"line":2345},[478,5288,2119],{"class":714},[478,5290,1739],{"class":710},[478,5292,5293],{"class":488},"\"排序后：\"",[478,5295,1739],{"class":710},[478,5297,1761],{"class":714},[478,5299,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318,5320,5322],{"class":480,"line":2350},[478,5301,3767],{"class":710},[478,5303,219],{"class":714},[478,5305,717],{"class":710},[478,5307,3598],{"class":714},[478,5309,759],{"class":710},[478,5311,895],{"class":495},[478,5313,3605],{"class":714},[478,5315,1605],{"class":710},[478,5317,1121],{"class":495},[478,5319,3605],{"class":714},[478,5321,2858],{"class":710},[478,5323,720],{"class":714},[478,5325,5326],{"class":480,"line":3143},[478,5327,2596],{"class":714},[478,5329,5330,5332,5334,5336,5338,5340],{"class":480,"line":3157},[478,5331,4017],{"class":714},[478,5333,1739],{"class":710},[478,5335,4920],{"class":714},[478,5337,1739],{"class":710},[478,5339,4925],{"class":488},[478,5341,1859],{"class":714},[478,5343,5344],{"class":480,"line":3165},[478,5345,2753],{"class":714},[478,5347,5348,5350,5352],{"class":480,"line":3170},[478,5349,4656],{"class":710},[478,5351,4659],{"class":495},[478,5353,1859],{"class":714},[478,5355,5356],{"class":480,"line":3176},[478,5357,2133],{"class":714},[129,5359,5361],{"id":5360},"_172二维数组","1.7.2二维数组",[29,5363,5364],{},[32,5365,5366],{},"二维数组的四种定义方式",[371,5368,5369,5378],{},[374,5370,5371],{},[377,5372,5373,5376],{},[380,5374,5375],{},"序号",[380,5377,4347],{},[388,5379,5380,5390,5399,5408,5417],{},[377,5381,5382,5384],{},[393,5383,193],{},[393,5385,5386,5387,767],{},"数据类型 数组名[行数]",[478,5388,5389],{},"列数",[377,5391,5392,5394],{},[393,5393,789],{},[393,5395,5386,5396,5398],{},[478,5397,5389],{},"={ {数据1,数据2}，{数据3，数据4}... }",[377,5400,5401,5403],{},[393,5402,783],{},[393,5404,5386,5405,5407],{},[478,5406,5389],{},"={数据1,数据2,数据3...}",[377,5409,5410,5412],{},[393,5411,994],{},[393,5413,5414,5415,5407],{},"数据类型 数组名[]",[478,5416,5389],{},[377,5418,5419,5422],{},[393,5420,5421],{},"注意：不能只省略列数",[393,5423],{},[29,5425,5426],{"start":565},[32,5427,5428],{},"二维数组数组名",[1702,5430,5431,5434],{},[32,5432,5433],{},"1.查看二维数组所占内存空间",[32,5435,5436],{},"2.获取二维数组首地址",[19,5438,5439],{},"已知二维数组，求二维数组的行数与列数",[469,5441,5443],{"className":701,"code":5442,"language":703,"meta":54,"style":54},"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",[475,5444,5445,5453,5457,5475,5479,5497,5513,5518,5543,5576],{"__ignoreMap":54},[478,5446,5447,5449,5451],{"class":480,"line":481},[478,5448,717],{"class":710},[478,5450,2539],{"class":484},[478,5452,2542],{"class":714},[478,5454,5455],{"class":480,"line":565},[478,5456,2114],{"class":714},[478,5458,5459,5461,5463,5465,5468,5470,5472],{"class":480,"line":579},[478,5460,2551],{"class":710},[478,5462,4528],{"class":714},[478,5464,789],{"class":495},[478,5466,5467],{"class":714},"][",[478,5469,783],{"class":495},[478,5471,1635],{"class":714},[478,5473,5474],{"class":710},"=\n",[478,5476,5477],{"class":480,"line":593},[478,5478,2596],{"class":714},[478,5480,5481,5484,5486,5488,5490,5492,5494],{"class":480,"line":1769},[478,5482,5483],{"class":714},"        {",[478,5485,193],{"class":495},[478,5487,1079],{"class":714},[478,5489,789],{"class":495},[478,5491,1079],{"class":714},[478,5493,783],{"class":495},[478,5495,5496],{"class":714},"},\n",[478,5498,5499,5501,5503,5505,5507,5509,5511],{"class":480,"line":1783},[478,5500,5483],{"class":714},[478,5502,994],{"class":495},[478,5504,1079],{"class":714},[478,5506,1020],{"class":495},[478,5508,1079],{"class":714},[478,5510,1045],{"class":495},[478,5512,2133],{"class":714},[478,5514,5515],{"class":480,"line":1789},[478,5516,5517],{"class":714},"    };\n",[478,5519,5520,5522,5524,5527,5529,5531,5533,5535,5537,5539,5541],{"class":480,"line":1880},[478,5521,2119],{"class":714},[478,5523,1739],{"class":710},[478,5525,5526],{"class":488},"\"二维数组的行数\"",[478,5528,1941],{"class":710},[478,5530,4772],{"class":714},[478,5532,4775],{"class":710},[478,5534,4417],{"class":714},[478,5536,895],{"class":495},[478,5538,4782],{"class":714},[478,5540,1739],{"class":710},[478,5542,1761],{"class":714},[478,5544,5545,5547,5549,5552,5554,5556,5558,5560,5562,5564,5566,5568,5570,5572,5574],{"class":480,"line":1886},[478,5546,2119],{"class":714},[478,5548,1739],{"class":710},[478,5550,5551],{"class":488},"\"二维数组的列数\"",[478,5553,1941],{"class":710},[478,5555,4417],{"class":714},[478,5557,895],{"class":495},[478,5559,4782],{"class":714},[478,5561,4775],{"class":710},[478,5563,4417],{"class":714},[478,5565,895],{"class":495},[478,5567,5467],{"class":714},[478,5569,895],{"class":495},[478,5571,4782],{"class":714},[478,5573,1739],{"class":710},[478,5575,1761],{"class":714},[478,5577,5578],{"class":480,"line":1898},[478,5579,2133],{"class":714},[19,5581,5582],{},"查看二维数组首地址",[469,5584,5586],{"className":701,"code":5585,"language":703,"meta":54,"style":54},"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",[475,5587,5588,5605,5631,5656],{"__ignoreMap":54},[478,5589,5590,5592,5594,5597,5599,5601,5603],{"class":480,"line":481},[478,5591,1938],{"class":714},[478,5593,1739],{"class":710},[478,5595,5596],{"class":488},"\"二维数组首地址：\"",[478,5598,1739],{"class":710},[478,5600,4446],{"class":714},[478,5602,1739],{"class":710},[478,5604,1761],{"class":714},[478,5606,5607,5609,5611,5614,5616,5618,5620,5623,5625,5627,5629],{"class":480,"line":565},[478,5608,1938],{"class":714},[478,5610,1739],{"class":710},[478,5612,5613],{"class":488},"\"二维数组第一行的首地址：\"",[478,5615,1739],{"class":710},[478,5617,263],{"class":714},[478,5619,717],{"class":710},[478,5621,5622],{"class":714},")arr[",[478,5624,895],{"class":495},[478,5626,1635],{"class":714},[478,5628,1739],{"class":710},[478,5630,1761],{"class":714},[478,5632,5633,5635,5637,5640,5642,5644,5646,5648,5650,5652,5654],{"class":480,"line":579},[478,5634,1938],{"class":714},[478,5636,1739],{"class":710},[478,5638,5639],{"class":488},"\"二维数组第二行的首地址：\"",[478,5641,1739],{"class":710},[478,5643,263],{"class":714},[478,5645,717],{"class":710},[478,5647,5622],{"class":714},[478,5649,193],{"class":495},[478,5651,1635],{"class":714},[478,5653,1739],{"class":710},[478,5655,1761],{"class":714},[478,5657,5658,5660,5662,5665,5667,5669,5671,5673,5675,5677,5679,5681,5683,5685,5687,5689],{"class":480,"line":593},[478,5659,1938],{"class":714},[478,5661,1739],{"class":710},[478,5663,5664],{"class":488},"\"二维数组第一个元素的首地址:\"",[478,5666,1739],{"class":710},[478,5668,263],{"class":714},[478,5670,717],{"class":710},[478,5672,222],{"class":714},[478,5674,1054],{"class":710},[478,5676,4472],{"class":714},[478,5678,895],{"class":495},[478,5680,5467],{"class":714},[478,5682,895],{"class":495},[478,5684,1635],{"class":714},[478,5686,1739],{"class":710},[478,5688,1807],{"class":714},[478,5690,5691],{"class":770},"\u002F\u002F对于数，要加取址符\n",[617,5693,5694],{},"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":54,"searchDepth":565,"depth":565,"links":5696},[5697,5698,5699,5707,5708,5714,5719],{"id":656,"depth":565,"text":657},{"id":663,"depth":565,"text":664},{"id":678,"depth":565,"text":679,"children":5700},[5701,5702,5703,5704,5705,5706],{"id":682,"depth":579,"text":683},{"id":730,"depth":579,"text":731},{"id":797,"depth":579,"text":798},{"id":1720,"depth":579,"text":1721},{"id":1813,"depth":579,"text":1814},{"id":1912,"depth":579,"text":1913},{"id":1954,"depth":565,"text":1955},{"id":2022,"depth":565,"text":2023,"children":5709},[5710,5711,5712,5713],{"id":2026,"depth":579,"text":2027},{"id":2047,"depth":579,"text":2048},{"id":2056,"depth":579,"text":2057},{"id":2065,"depth":579,"text":2066},{"id":2074,"depth":565,"text":2075,"children":5715},[5716,5717,5718],{"id":2078,"depth":579,"text":2079},{"id":2771,"depth":579,"text":2772},{"id":4187,"depth":579,"text":4188},{"id":4328,"depth":565,"text":4329,"children":5720},[5721,5722],{"id":4332,"depth":579,"text":4333},{"id":5360,"depth":579,"text":5361},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":648,"description":54},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5729,"title":5730,"body":5731,"description":54,"extension":638,"meta":6831,"navigation":640,"path":6832,"seo":6833,"stem":6834,"__hash__":6835},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5732,"toc":6823},[5733,5736,5740,5748,5756,5759,5825,5829,5832,5908,5912,5915,5918,5921,6134,6138,6143,6207,6212,6279,6284,6375,6378,6483,6487,6490,6496,6640,6644,6647,6661,6664,6709,6712,6820],[10,5734,5730],{"id":5735},"_2函数",[14,5737,5739],{"id":5738},"_21函数概述","2.1函数概述",[29,5741,5742,5745],{},[32,5743,5744],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[32,5746,5747],{},"语法：",[469,5749,5754],{"className":5750,"code":5752,"language":5753,"meta":54},[5751],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[475,5755,5752],{"__ignoreMap":54},[19,5757,5758],{},"小案例",[469,5760,5762],{"className":701,"code":5761,"language":703,"meta":54,"style":54},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[475,5763,5764,5769,5793,5797,5814,5821],{"__ignoreMap":54},[478,5765,5766],{"class":480,"line":481},[478,5767,5768],{"class":770},"\u002F\u002Fnum1,num2形参\n",[478,5770,5771,5773,5776,5778,5780,5784,5786,5788,5791],{"class":480,"line":565},[478,5772,717],{"class":710},[478,5774,5775],{"class":484}," add",[478,5777,263],{"class":714},[478,5779,717],{"class":710},[478,5781,5783],{"class":5782},"s4XuR"," num1",[478,5785,1079],{"class":714},[478,5787,717],{"class":710},[478,5789,5790],{"class":5782}," num2",[478,5792,720],{"class":714},[478,5794,5795],{"class":480,"line":579},[478,5796,2114],{"class":714},[478,5798,5799,5801,5804,5806,5809,5811],{"class":480,"line":593},[478,5800,2551],{"class":710},[478,5802,5803],{"class":714}," sum",[478,5805,759],{"class":710},[478,5807,5808],{"class":714},"num1",[478,5810,1181],{"class":710},[478,5812,5813],{"class":714},"num2;\n",[478,5815,5816,5818],{"class":480,"line":1769},[478,5817,4656],{"class":710},[478,5819,5820],{"class":714}," sum;\n",[478,5822,5823],{"class":480,"line":1783},[478,5824,2133],{"class":714},[14,5826,5828],{"id":5827},"_22函数调用","2.2函数调用",[19,5830,5831],{},"调用刚刚写的求和函数",[469,5833,5835],{"className":701,"code":5834,"language":703,"meta":54,"style":54},"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",[475,5836,5837,5845,5849,5854,5866,5878,5887,5892,5904],{"__ignoreMap":54},[478,5838,5839,5841,5843],{"class":480,"line":481},[478,5840,717],{"class":710},[478,5842,2539],{"class":484},[478,5844,2542],{"class":714},[478,5846,5847],{"class":480,"line":565},[478,5848,2114],{"class":714},[478,5850,5851],{"class":480,"line":579},[478,5852,5853],{"class":770},"    \u002F\u002Fa,b实参\n",[478,5855,5856,5858,5860,5862,5864],{"class":480,"line":593},[478,5857,2551],{"class":710},[478,5859,1967],{"class":714},[478,5861,759],{"class":710},[478,5863,895],{"class":495},[478,5865,1859],{"class":714},[478,5867,5868,5870,5872,5874,5876],{"class":480,"line":1769},[478,5869,2551],{"class":710},[478,5871,3399],{"class":714},[478,5873,759],{"class":710},[478,5875,895],{"class":495},[478,5877,1859],{"class":714},[478,5879,5880,5882,5884],{"class":480,"line":1783},[478,5881,2578],{"class":714},[478,5883,1998],{"class":710},[478,5885,5886],{"class":714},"a,b;\n",[478,5888,5889],{"class":480,"line":1789},[478,5890,5891],{"class":770},"    \u002F\u002F调用函数时，实参值传给了形参\n",[478,5893,5894,5896,5898,5901],{"class":480,"line":1880},[478,5895,2119],{"class":714},[478,5897,1739],{"class":710},[478,5899,5900],{"class":484},"add",[478,5902,5903],{"class":714},"(a,b);\n",[478,5905,5906],{"class":480,"line":1886},[478,5907,2133],{"class":714},[14,5909,5911],{"id":5910},"_23值传递","2.3值传递",[19,5913,5914],{},"值传递就是函数调用时实参将数值传给形参",[19,5916,5917],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5919,5920],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[469,5922,5924],{"className":701,"code":5923,"language":703,"meta":54,"style":54},"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",[475,5925,5926,5948,5952,5965,5982,6000,6011,6020,6029,6042,6058,6074,6083,6087,6095,6099,6111,6123,6130],{"__ignoreMap":54},[478,5927,5928,5931,5934,5936,5938,5940,5942,5944,5946],{"class":480,"line":481},[478,5929,5930],{"class":710},"void",[478,5932,5933],{"class":484}," swap",[478,5935,263],{"class":714},[478,5937,717],{"class":710},[478,5939,5783],{"class":5782},[478,5941,1079],{"class":714},[478,5943,717],{"class":710},[478,5945,5790],{"class":5782},[478,5947,720],{"class":714},[478,5949,5950],{"class":480,"line":565},[478,5951,2114],{"class":714},[478,5953,5954,5956,5958,5961,5963],{"class":480,"line":579},[478,5955,2119],{"class":714},[478,5957,1739],{"class":710},[478,5959,5960],{"class":488},"\"交换前：\"",[478,5962,1739],{"class":710},[478,5964,1761],{"class":714},[478,5966,5967,5969,5971,5974,5976,5978,5980],{"class":480,"line":593},[478,5968,2119],{"class":714},[478,5970,1739],{"class":710},[478,5972,5973],{"class":488},"\"num1=\"",[478,5975,1739],{"class":710},[478,5977,5808],{"class":714},[478,5979,1739],{"class":710},[478,5981,1761],{"class":714},[478,5983,5984,5986,5988,5991,5993,5996,5998],{"class":480,"line":1769},[478,5985,2119],{"class":714},[478,5987,1739],{"class":710},[478,5989,5990],{"class":488},"\"num2=\"",[478,5992,1739],{"class":710},[478,5994,5995],{"class":714},"num2",[478,5997,1739],{"class":710},[478,5999,1761],{"class":714},[478,6001,6002,6004,6006,6008],{"class":480,"line":1783},[478,6003,2551],{"class":710},[478,6005,4821],{"class":714},[478,6007,759],{"class":710},[478,6009,6010],{"class":714},"num1;\n",[478,6012,6013,6016,6018],{"class":480,"line":1789},[478,6014,6015],{"class":714},"    num1",[478,6017,759],{"class":710},[478,6019,5813],{"class":714},[478,6021,6022,6025,6027],{"class":480,"line":1880},[478,6023,6024],{"class":714},"    num2",[478,6026,759],{"class":710},[478,6028,4846],{"class":714},[478,6030,6031,6033,6035,6038,6040],{"class":480,"line":1886},[478,6032,2119],{"class":714},[478,6034,1739],{"class":710},[478,6036,6037],{"class":488},"\"交换后：\"",[478,6039,1739],{"class":710},[478,6041,1761],{"class":714},[478,6043,6044,6046,6048,6050,6052,6054,6056],{"class":480,"line":1898},[478,6045,2119],{"class":714},[478,6047,1739],{"class":710},[478,6049,5973],{"class":488},[478,6051,1739],{"class":710},[478,6053,5808],{"class":714},[478,6055,1739],{"class":710},[478,6057,1761],{"class":714},[478,6059,6060,6062,6064,6066,6068,6070,6072],{"class":480,"line":2180},[478,6061,2119],{"class":714},[478,6063,1739],{"class":710},[478,6065,5990],{"class":488},[478,6067,1739],{"class":710},[478,6069,5995],{"class":714},[478,6071,1739],{"class":710},[478,6073,1761],{"class":714},[478,6075,6076,6078,6080],{"class":480,"line":2185},[478,6077,4656],{"class":710},[478,6079,767],{"class":714},[478,6081,6082],{"class":770},"\u002F\u002F或者不写\n",[478,6084,6085],{"class":480,"line":2191},[478,6086,2133],{"class":714},[478,6088,6089,6091,6093],{"class":480,"line":2196},[478,6090,717],{"class":710},[478,6092,2539],{"class":484},[478,6094,2542],{"class":714},[478,6096,6097],{"class":480,"line":2210},[478,6098,2114],{"class":714},[478,6100,6101,6103,6105,6107,6109],{"class":480,"line":2215},[478,6102,2551],{"class":710},[478,6104,1967],{"class":714},[478,6106,759],{"class":710},[478,6108,1146],{"class":495},[478,6110,1859],{"class":714},[478,6112,6113,6115,6117,6119,6121],{"class":480,"line":2221},[478,6114,2551],{"class":710},[478,6116,3399],{"class":714},[478,6118,759],{"class":710},[478,6120,1396],{"class":495},[478,6122,1859],{"class":714},[478,6124,6125,6128],{"class":480,"line":2241},[478,6126,6127],{"class":484},"    swap",[478,6129,5903],{"class":714},[478,6131,6132],{"class":480,"line":2246},[478,6133,2133],{"class":714},[14,6135,6137],{"id":6136},"_24函数的常见形式","2.4函数的常见形式",[29,6139,6140],{},[32,6141,6142],{},"无参无返",[469,6144,6146],{"className":701,"code":6145,"language":703,"meta":54,"style":54},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[475,6147,6148,6157,6161,6174,6178,6186,6190,6195,6203],{"__ignoreMap":54},[478,6149,6150,6152,6155],{"class":480,"line":481},[478,6151,5930],{"class":710},[478,6153,6154],{"class":484}," test01",[478,6156,2542],{"class":714},[478,6158,6159],{"class":480,"line":565},[478,6160,2114],{"class":714},[478,6162,6163,6165,6167,6170,6172],{"class":480,"line":579},[478,6164,2119],{"class":714},[478,6166,1739],{"class":710},[478,6168,6169],{"class":488},"\"你好\"",[478,6171,1739],{"class":710},[478,6173,1761],{"class":714},[478,6175,6176],{"class":480,"line":593},[478,6177,2133],{"class":714},[478,6179,6180,6182,6184],{"class":480,"line":1769},[478,6181,717],{"class":710},[478,6183,2539],{"class":484},[478,6185,2542],{"class":714},[478,6187,6188],{"class":480,"line":1783},[478,6189,2114],{"class":714},[478,6191,6192],{"class":480,"line":1789},[478,6193,6194],{"class":770},"    \u002F\u002F函数调用\n",[478,6196,6197,6200],{"class":480,"line":1880},[478,6198,6199],{"class":484},"    test01",[478,6201,6202],{"class":714},"();\n",[478,6204,6205],{"class":480,"line":1886},[478,6206,2133],{"class":714},[29,6208,6209],{"start":565},[32,6210,6211],{},"有参无返",[469,6213,6215],{"className":701,"code":6214,"language":703,"meta":54,"style":54},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[475,6216,6217,6232,6236,6248,6252,6260,6264,6275],{"__ignoreMap":54},[478,6218,6219,6221,6224,6226,6228,6230],{"class":480,"line":481},[478,6220,5930],{"class":710},[478,6222,6223],{"class":484}," test02",[478,6225,263],{"class":714},[478,6227,717],{"class":710},[478,6229,1967],{"class":5782},[478,6231,720],{"class":714},[478,6233,6234],{"class":480,"line":565},[478,6235,2114],{"class":714},[478,6237,6238,6240,6242,6244,6246],{"class":480,"line":579},[478,6239,2119],{"class":714},[478,6241,1739],{"class":710},[478,6243,6169],{"class":488},[478,6245,1739],{"class":710},[478,6247,1761],{"class":714},[478,6249,6250],{"class":480,"line":593},[478,6251,2133],{"class":714},[478,6253,6254,6256,6258],{"class":480,"line":1769},[478,6255,717],{"class":710},[478,6257,2539],{"class":484},[478,6259,2542],{"class":714},[478,6261,6262],{"class":480,"line":1783},[478,6263,2114],{"class":714},[478,6265,6266,6269,6271,6273],{"class":480,"line":1789},[478,6267,6268],{"class":484},"    test02",[478,6270,263],{"class":714},[478,6272,1012],{"class":495},[478,6274,3285],{"class":714},[478,6276,6277],{"class":480,"line":1880},[478,6278,2133],{"class":714},[29,6280,6281],{"start":579},[32,6282,6283],{},"无参有返",[469,6285,6287],{"className":701,"code":6286,"language":703,"meta":54,"style":54},"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",[475,6288,6289,6298,6302,6314,6323,6327,6335,6339,6352,6371],{"__ignoreMap":54},[478,6290,6291,6293,6296],{"class":480,"line":481},[478,6292,717],{"class":710},[478,6294,6295],{"class":484}," test03",[478,6297,2542],{"class":714},[478,6299,6300],{"class":480,"line":565},[478,6301,2114],{"class":714},[478,6303,6304,6306,6308,6310,6312],{"class":480,"line":579},[478,6305,2119],{"class":714},[478,6307,1739],{"class":710},[478,6309,6169],{"class":488},[478,6311,1739],{"class":710},[478,6313,1761],{"class":714},[478,6315,6316,6318,6321],{"class":480,"line":593},[478,6317,4656],{"class":710},[478,6319,6320],{"class":495}," 100",[478,6322,1859],{"class":714},[478,6324,6325],{"class":480,"line":1769},[478,6326,2133],{"class":714},[478,6328,6329,6331,6333],{"class":480,"line":1783},[478,6330,717],{"class":710},[478,6332,2539],{"class":484},[478,6334,2542],{"class":714},[478,6336,6337],{"class":480,"line":1789},[478,6338,2114],{"class":714},[478,6340,6341,6343,6345,6347,6350],{"class":480,"line":1880},[478,6342,2551],{"class":710},[478,6344,5783],{"class":714},[478,6346,759],{"class":710},[478,6348,6349],{"class":484},"test03",[478,6351,6202],{"class":714},[478,6353,6354,6356,6358,6360,6362,6364,6366,6368],{"class":480,"line":1886},[478,6355,2119],{"class":714},[478,6357,1739],{"class":710},[478,6359,5973],{"class":488},[478,6361,1739],{"class":710},[478,6363,5808],{"class":714},[478,6365,1739],{"class":710},[478,6367,1807],{"class":714},[478,6369,6370],{"class":770}," \u002F\u002F100\n",[478,6372,6373],{"class":480,"line":1898},[478,6374,2133],{"class":714},[19,6376,6377],{},"4.有参有返",[469,6379,6381],{"className":701,"code":6380,"language":703,"meta":54,"style":54},"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",[475,6382,6383,6398,6402,6415,6421,6425,6434,6438,6450,6464,6479],{"__ignoreMap":54},[478,6384,6385,6387,6390,6392,6394,6396],{"class":480,"line":481},[478,6386,717],{"class":710},[478,6388,6389],{"class":484}," test04",[478,6391,263],{"class":714},[478,6393,717],{"class":710},[478,6395,1967],{"class":5782},[478,6397,720],{"class":714},[478,6399,6400],{"class":480,"line":565},[478,6401,2114],{"class":714},[478,6403,6404,6406,6408,6411,6413],{"class":480,"line":579},[478,6405,2119],{"class":714},[478,6407,1739],{"class":710},[478,6409,6410],{"class":488},"\"hello\"",[478,6412,1739],{"class":710},[478,6414,1761],{"class":714},[478,6416,6417,6419],{"class":480,"line":593},[478,6418,4656],{"class":710},[478,6420,2001],{"class":714},[478,6422,6423],{"class":480,"line":1769},[478,6424,2133],{"class":714},[478,6426,6427,6429,6432],{"class":480,"line":1783},[478,6428,717],{"class":710},[478,6430,6431],{"class":484}," mian",[478,6433,2542],{"class":714},[478,6435,6436],{"class":480,"line":1789},[478,6437,2114],{"class":714},[478,6439,6440,6442,6444,6446,6448],{"class":480,"line":1880},[478,6441,2551],{"class":710},[478,6443,3399],{"class":714},[478,6445,759],{"class":710},[478,6447,193],{"class":495},[478,6449,1859],{"class":714},[478,6451,6452,6454,6456,6458,6461],{"class":480,"line":1886},[478,6453,2551],{"class":710},[478,6455,3415],{"class":714},[478,6457,759],{"class":710},[478,6459,6460],{"class":484},"test04",[478,6462,6463],{"class":714},"(b);\n",[478,6465,6466,6468,6470,6472,6474,6476],{"class":480,"line":1898},[478,6467,2119],{"class":714},[478,6469,1739],{"class":710},[478,6471,989],{"class":714},[478,6473,1739],{"class":710},[478,6475,1807],{"class":714},[478,6477,6478],{"class":770}," \u002F\u002F1\n",[478,6480,6481],{"class":480,"line":2180},[478,6482,2133],{"class":714},[14,6484,6486],{"id":6485},"_25函数的声明","2.5函数的声明",[19,6488,6489],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6491,6492,6493],{},"函数的",[45,6494,6495],{},"声明可以多次，但是函数的定义只能有一次",[469,6497,6499],{"className":701,"code":6498,"language":703,"meta":54,"style":54},"\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",[475,6500,6501,6506,6511,6536,6545,6549,6561,6573,6589,6593,6613,6617,6636],{"__ignoreMap":54},[478,6502,6503],{"class":480,"line":481},[478,6504,6505],{"class":770},"\u002F\u002F函数声明\n",[478,6507,6508],{"class":480,"line":565},[478,6509,6510],{"class":770},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[478,6512,6513,6515,6518,6520,6522,6524,6526,6528,6530,6533],{"class":480,"line":579},[478,6514,717],{"class":710},[478,6516,6517],{"class":484}," max",[478,6519,263],{"class":714},[478,6521,717],{"class":710},[478,6523,1967],{"class":5782},[478,6525,1079],{"class":714},[478,6527,717],{"class":710},[478,6529,3399],{"class":5782},[478,6531,6532],{"class":714},");",[478,6534,6535],{"class":770},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[478,6537,6538,6540,6542],{"class":480,"line":593},[478,6539,717],{"class":710},[478,6541,2539],{"class":484},[478,6543,6544],{"class":714},"() \n",[478,6546,6547],{"class":480,"line":1769},[478,6548,2114],{"class":714},[478,6550,6551,6553,6555,6557,6559],{"class":480,"line":1783},[478,6552,2551],{"class":710},[478,6554,1967],{"class":714},[478,6556,759],{"class":710},[478,6558,1146],{"class":495},[478,6560,1859],{"class":714},[478,6562,6563,6565,6567,6569,6571],{"class":480,"line":1789},[478,6564,2551],{"class":710},[478,6566,3399],{"class":714},[478,6568,759],{"class":710},[478,6570,1396],{"class":495},[478,6572,1859],{"class":714},[478,6574,6575,6577,6579,6582,6585,6587],{"class":480,"line":1880},[478,6576,2119],{"class":714},[478,6578,1739],{"class":710},[478,6580,6581],{"class":484},"max",[478,6583,6584],{"class":714},"(a,b)",[478,6586,1739],{"class":710},[478,6588,1761],{"class":714},[478,6590,6591],{"class":480,"line":1886},[478,6592,2133],{"class":714},[478,6594,6595,6597,6599,6601,6603,6605,6607,6609,6611],{"class":480,"line":1898},[478,6596,717],{"class":710},[478,6598,6517],{"class":484},[478,6600,263],{"class":714},[478,6602,717],{"class":710},[478,6604,1967],{"class":5782},[478,6606,1079],{"class":714},[478,6608,717],{"class":710},[478,6610,3399],{"class":5782},[478,6612,720],{"class":714},[478,6614,6615],{"class":480,"line":2180},[478,6616,2114],{"class":714},[478,6618,6619,6621,6623,6625,6627,6629,6631,6633],{"class":480,"line":2185},[478,6620,4656],{"class":710},[478,6622,1967],{"class":714},[478,6624,1655],{"class":710},[478,6626,964],{"class":714},[478,6628,1681],{"class":710},[478,6630,518],{"class":714},[478,6632,1554],{"class":710},[478,6634,6635],{"class":714},"b;\n",[478,6637,6638],{"class":480,"line":2191},[478,6639,2133],{"class":714},[14,6641,6643],{"id":6642},"_26函数的分文件编写","2.6函数的分文件编写",[19,6645,6646],{},"4个步骤：",[1702,6648,6649,6652,6655,6658],{},[32,6650,6651],{},"1.创建后缀名为.h的头文件",[32,6653,6654],{},"2.创建后缀名为.cpp的源文件",[32,6656,6657],{},"3.在头文件中写函数的定义",[32,6659,6660],{},"4.在源文件中写函数的定义\n示例：",[19,6662,6663],{},"头文件：swap.h",[469,6665,6667],{"className":701,"code":6666,"language":703,"meta":54,"style":54},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[475,6668,6669,6675,6685,6689],{"__ignoreMap":54},[478,6670,6671,6673],{"class":480,"line":481},[478,6672,2516],{"class":710},[478,6674,2519],{"class":488},[478,6676,6677,6679,6681,6683],{"class":480,"line":565},[478,6678,2524],{"class":710},[478,6680,2527],{"class":710},[478,6682,2530],{"class":484},[478,6684,1859],{"class":714},[478,6686,6687],{"class":480,"line":579},[478,6688,6505],{"class":770},[478,6690,6691,6693,6695,6697,6699,6701,6703,6705,6707],{"class":480,"line":593},[478,6692,5930],{"class":710},[478,6694,5933],{"class":484},[478,6696,263],{"class":714},[478,6698,717],{"class":710},[478,6700,1967],{"class":5782},[478,6702,1079],{"class":714},[478,6704,717],{"class":710},[478,6706,3399],{"class":5782},[478,6708,3285],{"class":714},[19,6710,6711],{},"源文件：swap.cpp",[469,6713,6715],{"className":701,"code":6714,"language":703,"meta":54,"style":54},"#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",[475,6716,6717,6724,6729,6749,6753,6764,6773,6782,6799,6816],{"__ignoreMap":54},[478,6718,6719,6721],{"class":480,"line":481},[478,6720,2516],{"class":710},[478,6722,6723],{"class":488}," \"swap.h\"\n",[478,6725,6726],{"class":480,"line":565},[478,6727,6728],{"class":770},"\u002F\u002F函数的定义\n",[478,6730,6731,6733,6735,6737,6739,6741,6743,6745,6747],{"class":480,"line":579},[478,6732,5930],{"class":710},[478,6734,5933],{"class":484},[478,6736,263],{"class":714},[478,6738,717],{"class":710},[478,6740,1967],{"class":5782},[478,6742,1079],{"class":714},[478,6744,717],{"class":710},[478,6746,3399],{"class":5782},[478,6748,720],{"class":714},[478,6750,6751],{"class":480,"line":593},[478,6752,2114],{"class":714},[478,6754,6755,6757,6759,6761],{"class":480,"line":1769},[478,6756,2551],{"class":710},[478,6758,4821],{"class":714},[478,6760,759],{"class":710},[478,6762,6763],{"class":714},"a;\n",[478,6765,6766,6769,6771],{"class":480,"line":1783},[478,6767,6768],{"class":714},"    a",[478,6770,759],{"class":710},[478,6772,6635],{"class":714},[478,6774,6775,6778,6780],{"class":480,"line":1789},[478,6776,6777],{"class":714},"    b",[478,6779,759],{"class":710},[478,6781,4846],{"class":714},[478,6783,6784,6786,6788,6791,6793,6795,6797],{"class":480,"line":1880},[478,6785,2119],{"class":714},[478,6787,1739],{"class":710},[478,6789,6790],{"class":488},"\"a=\"",[478,6792,1739],{"class":710},[478,6794,518],{"class":714},[478,6796,1739],{"class":710},[478,6798,1761],{"class":714},[478,6800,6801,6803,6805,6808,6810,6812,6814],{"class":480,"line":1886},[478,6802,2119],{"class":714},[478,6804,1739],{"class":710},[478,6806,6807],{"class":488},"\"b=\"",[478,6809,1739],{"class":710},[478,6811,964],{"class":714},[478,6813,1739],{"class":710},[478,6815,1761],{"class":714},[478,6817,6818],{"class":480,"line":1898},[478,6819,2133],{"class":714},[617,6821,6822],{},"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":54,"searchDepth":565,"depth":565,"links":6824},[6825,6826,6827,6828,6829,6830],{"id":5738,"depth":565,"text":5739},{"id":5827,"depth":565,"text":5828},{"id":5910,"depth":565,"text":5911},{"id":6136,"depth":565,"text":6137},{"id":6485,"depth":565,"text":6486},{"id":6642,"depth":565,"text":6643},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5730,"description":54},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6837,"title":6838,"body":6839,"description":6846,"extension":638,"meta":8251,"navigation":640,"path":8252,"seo":8253,"stem":8254,"__hash__":8255},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6840,"toc":8241},[6841,6844,6847,6851,7013,7017,7020,7023,7026,7029,7169,7173,7176,7179,7182,7247,7251,7256,7323,7326,7330,7333,7344,7349,7369,7372,7377,7396,7399,7403,7422,7425,7429,7664,7668,7671,7674,7677,7839,7842,7846,7849,7855,8238],[10,6842,6838],{"id":6843},"_3指针",[19,6845,6846],{},"通过指针保存一个地址，指针就是个地址",[14,6848,6850],{"id":6849},"_31定义指针","3.1定义指针",[469,6852,6854],{"className":701,"code":6853,"language":703,"meta":54,"style":54},"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",[475,6855,6856,6864,6868,6873,6885,6890,6898,6908,6926,6946,6950,6955,6960,6965,6979,6995,7009],{"__ignoreMap":54},[478,6857,6858,6860,6862],{"class":480,"line":481},[478,6859,717],{"class":710},[478,6861,2539],{"class":484},[478,6863,2542],{"class":714},[478,6865,6866],{"class":480,"line":565},[478,6867,2114],{"class":714},[478,6869,6870],{"class":480,"line":579},[478,6871,6872],{"class":770},"    \u002F\u002F1.定义指针\n",[478,6874,6875,6877,6879,6881,6883],{"class":480,"line":593},[478,6876,2551],{"class":710},[478,6878,1967],{"class":714},[478,6880,759],{"class":710},[478,6882,1146],{"class":495},[478,6884,1859],{"class":714},[478,6886,6887],{"class":480,"line":1769},[478,6888,6889],{"class":770},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[478,6891,6892,6895],{"class":480,"line":1783},[478,6893,6894],{"class":710},"    int*",[478,6896,6897],{"class":714},"p;\n",[478,6899,6900,6903,6906],{"class":480,"line":1789},[478,6901,6902],{"class":714},"    p",[478,6904,6905],{"class":710},"=&",[478,6907,6763],{"class":714},[478,6909,6910,6912,6914,6917,6920,6922,6924],{"class":480,"line":1880},[478,6911,2119],{"class":714},[478,6913,1739],{"class":710},[478,6915,6916],{"class":488},"\"a的地址为：\"",[478,6918,6919],{"class":710},"\u003C\u003C&",[478,6921,518],{"class":714},[478,6923,1739],{"class":710},[478,6925,1761],{"class":714},[478,6927,6928,6930,6932,6935,6937,6939,6941,6943],{"class":480,"line":1886},[478,6929,2119],{"class":714},[478,6931,1739],{"class":710},[478,6933,6934],{"class":488},"\"指针p为：\"",[478,6936,1739],{"class":710},[478,6938,19],{"class":714},[478,6940,1739],{"class":710},[478,6942,1807],{"class":714},[478,6944,6945],{"class":770},"\u002F\u002F指针p表示的就是a的地址\n",[478,6947,6948],{"class":480,"line":1898},[478,6949,2966],{"emptyLinePlaceholder":640},[478,6951,6952],{"class":480,"line":2180},[478,6953,6954],{"class":770},"    \u002F\u002F2.使用指针\n",[478,6956,6957],{"class":480,"line":2185},[478,6958,6959],{"class":770},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[478,6961,6962],{"class":480,"line":2191},[478,6963,6964],{"class":770},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[478,6966,6967,6970,6972,6974,6977],{"class":480,"line":2196},[478,6968,6969],{"class":710},"    *",[478,6971,19],{"class":714},[478,6973,759],{"class":710},[478,6975,6976],{"class":495},"1000",[478,6978,1859],{"class":714},[478,6980,6981,6983,6986,6988,6990,6992],{"class":480,"line":2210},[478,6982,2119],{"class":714},[478,6984,6985],{"class":710},"\u003C\u003C*",[478,6987,19],{"class":714},[478,6989,1739],{"class":710},[478,6991,1807],{"class":714},[478,6993,6994],{"class":770},"\u002F\u002F1000\n",[478,6996,6997,6999,7001,7003,7005,7007],{"class":480,"line":2215},[478,6998,2119],{"class":714},[478,7000,1739],{"class":710},[478,7002,518],{"class":714},[478,7004,1739],{"class":710},[478,7006,1807],{"class":714},[478,7008,6994],{"class":770},[478,7010,7011],{"class":480,"line":2221},[478,7012,2133],{"class":714},[14,7014,7016],{"id":7015},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7018,7019],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7021,7022],{},"在32位操作系统下：占用4个字节空间",[19,7024,7025],{},"在64位操作系统下：占用8个字节空间",[19,7027,7028],{},"上方是不管啥数据类型的",[469,7030,7032],{"className":701,"code":7031,"language":703,"meta":54,"style":54},"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",[475,7033,7034,7042,7046,7051,7063,7068,7073,7078,7091,7113,7139,7165],{"__ignoreMap":54},[478,7035,7036,7038,7040],{"class":480,"line":481},[478,7037,717],{"class":710},[478,7039,2539],{"class":484},[478,7041,2542],{"class":714},[478,7043,7044],{"class":480,"line":565},[478,7045,2114],{"class":714},[478,7047,7048],{"class":480,"line":579},[478,7049,7050],{"class":770},"    \u002F\u002F指针所占内存空间\n",[478,7052,7053,7055,7057,7059,7061],{"class":480,"line":593},[478,7054,2551],{"class":710},[478,7056,1967],{"class":714},[478,7058,759],{"class":710},[478,7060,1146],{"class":495},[478,7062,1859],{"class":714},[478,7064,7065],{"class":480,"line":1769},[478,7066,7067],{"class":770},"    \u002F\u002Fint *p;\n",[478,7069,7070],{"class":480,"line":1783},[478,7071,7072],{"class":770},"    \u002F\u002Fp=&a;\n",[478,7074,7075],{"class":480,"line":1789},[478,7076,7077],{"class":770},"    \u002F\u002F上述可以写为以下：\n",[478,7079,7080,7082,7085,7087,7089],{"class":480,"line":1880},[478,7081,2551],{"class":710},[478,7083,7084],{"class":710}," *",[478,7086,19],{"class":714},[478,7088,6905],{"class":710},[478,7090,6763],{"class":714},[478,7092,7093,7096,7098,7101,7103,7106,7108,7110],{"class":480,"line":1886},[478,7094,7095],{"class":714},"    cout ",[478,7097,1739],{"class":710},[478,7099,7100],{"class":488},"\"sizeof(int *)\"",[478,7102,1941],{"class":710},[478,7104,7105],{"class":714},"(p)",[478,7107,1739],{"class":710},[478,7109,1807],{"class":714},[478,7111,7112],{"class":770},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[478,7114,7115,7117,7119,7121,7123,7125,7127,7129,7131,7133,7136],{"class":480,"line":1898},[478,7116,7095],{"class":714},[478,7118,1739],{"class":710},[478,7120,7100],{"class":488},[478,7122,1941],{"class":710},[478,7124,263],{"class":714},[478,7126,717],{"class":710},[478,7128,7084],{"class":710},[478,7130,222],{"class":714},[478,7132,1739],{"class":710},[478,7134,7135],{"class":714},"endl",[478,7137,7138],{"class":770},"  \u002F\u002F4字节(32位的话)\n",[478,7140,7141,7143,7145,7148,7150,7152,7154,7156,7158,7160,7162],{"class":480,"line":2180},[478,7142,7095],{"class":714},[478,7144,1739],{"class":710},[478,7146,7147],{"class":488},"\"sizeof(char *)\"",[478,7149,1941],{"class":710},[478,7151,263],{"class":714},[478,7153,808],{"class":710},[478,7155,7084],{"class":710},[478,7157,222],{"class":714},[478,7159,1739],{"class":710},[478,7161,1807],{"class":714},[478,7163,7164],{"class":770}," \u002F\u002F4字节(32位的话)\n",[478,7166,7167],{"class":480,"line":2185},[478,7168,2133],{"class":714},[14,7170,7172],{"id":7171},"_33空指针","3.3空指针",[19,7174,7175],{},"空指针：指针变量指向内存中编号为0的空间",[19,7177,7178],{},"用途：初始化指针变量",[19,7180,7181],{},"注意：空指针指向的内存是不可以访问的",[469,7183,7185],{"className":701,"code":7184,"language":703,"meta":54,"style":54},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[475,7186,7187,7195,7199,7204,7218,7223,7238,7243],{"__ignoreMap":54},[478,7188,7189,7191,7193],{"class":480,"line":481},[478,7190,717],{"class":710},[478,7192,2539],{"class":484},[478,7194,2542],{"class":714},[478,7196,7197],{"class":480,"line":565},[478,7198,2114],{"class":714},[478,7200,7201],{"class":480,"line":579},[478,7202,7203],{"class":770},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[478,7205,7206,7208,7210,7212,7214,7216],{"class":480,"line":593},[478,7207,2551],{"class":710},[478,7209,7084],{"class":710},[478,7211,19],{"class":714},[478,7213,759],{"class":710},[478,7215,2958],{"class":495},[478,7217,1859],{"class":714},[478,7219,7220],{"class":480,"line":1769},[478,7221,7222],{"class":770},"    \u002F\u002F2.空指针不能进行访问\n",[478,7224,7225,7227,7229,7231,7233,7235],{"class":480,"line":1783},[478,7226,6969],{"class":710},[478,7228,19],{"class":714},[478,7230,759],{"class":710},[478,7232,1012],{"class":495},[478,7234,767],{"class":714},[478,7236,7237],{"class":770},"\u002F\u002F直接报错，压根不能访问\n",[478,7239,7240],{"class":480,"line":1789},[478,7241,7242],{"class":770},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[478,7244,7245],{"class":480,"line":1880},[478,7246,2133],{"class":714},[14,7248,7250],{"id":7249},"_34野指针","3.4野指针",[19,7252,7253],{},[45,7254,7255],{},"指针变量指向非法的内存空间",[469,7257,7259],{"className":701,"code":7258,"language":703,"meta":54,"style":54},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[475,7260,7261,7269,7273,7302,7307,7319],{"__ignoreMap":54},[478,7262,7263,7265,7267],{"class":480,"line":481},[478,7264,717],{"class":710},[478,7266,2539],{"class":484},[478,7268,2542],{"class":714},[478,7270,7271],{"class":480,"line":565},[478,7272,2114],{"class":714},[478,7274,7275,7277,7279,7281,7283,7285,7287,7289,7291,7294,7297,7299],{"class":480,"line":579},[478,7276,2551],{"class":710},[478,7278,7084],{"class":710},[478,7280,19],{"class":714},[478,7282,759],{"class":710},[478,7284,263],{"class":714},[478,7286,717],{"class":710},[478,7288,7084],{"class":710},[478,7290,222],{"class":714},[478,7292,7293],{"class":710},"0x",[478,7295,7296],{"class":495},"1100",[478,7298,767],{"class":714},[478,7300,7301],{"class":770}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[478,7303,7304],{"class":480,"line":593},[478,7305,7306],{"class":770},"    \u002F\u002F访问野指针报错\n",[478,7308,7309,7311,7313,7315,7317],{"class":480,"line":1769},[478,7310,2119],{"class":714},[478,7312,6985],{"class":710},[478,7314,19],{"class":714},[478,7316,1739],{"class":710},[478,7318,1761],{"class":714},[478,7320,7321],{"class":480,"line":1783},[478,7322,2133],{"class":714},[19,7324,7325],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7327,7329],{"id":7328},"_35const修饰指针","3.5const修饰指针",[19,7331,7332],{},"三种情况：",[1702,7334,7335,7338,7341],{},[32,7336,7337],{},"const修饰指针 常量指针",[32,7339,7340],{},"const修饰常量 指针常量",[32,7342,7343],{},"const即修饰指针，又修饰常量",[29,7345,7346],{},[32,7347,7348],{},"常量指针",[469,7350,7352],{"className":701,"code":7351,"language":703,"meta":54,"style":54},"const int *p=&a;\n",[475,7353,7354],{"__ignoreMap":54},[478,7355,7356,7359,7361,7363,7365,7367],{"class":480,"line":481},[478,7357,7358],{"class":710},"const",[478,7360,2948],{"class":710},[478,7362,7084],{"class":710},[478,7364,19],{"class":714},[478,7366,6905],{"class":710},[478,7368,6763],{"class":714},[19,7370,7371],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[29,7373,7374],{"start":565},[32,7375,7376],{},"指针常量",[469,7378,7380],{"className":701,"code":7379,"language":703,"meta":54,"style":54},"int *const p=&a;\n",[475,7381,7382],{"__ignoreMap":54},[478,7383,7384,7386,7389,7392,7394],{"class":480,"line":481},[478,7385,717],{"class":710},[478,7387,7388],{"class":710}," *const",[478,7390,7391],{"class":714}," p",[478,7393,6905],{"class":710},[478,7395,6763],{"class":714},[19,7397,7398],{},"指针的指向不可以改，指针指向的值可以改",[29,7400,7401],{"start":579},[32,7402,7343],{},[469,7404,7406],{"className":701,"code":7405,"language":703,"meta":54,"style":54},"const int *const p=&a;\n",[475,7407,7408],{"__ignoreMap":54},[478,7409,7410,7412,7414,7416,7418,7420],{"class":480,"line":481},[478,7411,7358],{"class":710},[478,7413,2948],{"class":710},[478,7415,7388],{"class":710},[478,7417,7391],{"class":714},[478,7419,6905],{"class":710},[478,7421,6763],{"class":714},[19,7423,7424],{},"指针的指向和指针指向的值都不可以改变",[14,7426,7428],{"id":7427},"_36指针和数组","3.6指针和数组",[469,7430,7432],{"className":701,"code":7431,"language":703,"meta":54,"style":54},"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",[475,7433,7434,7442,7446,7451,7505,7526,7542,7558,7569,7586,7591,7605,7631,7635,7647,7656,7660],{"__ignoreMap":54},[478,7435,7436,7438,7440],{"class":480,"line":481},[478,7437,717],{"class":710},[478,7439,2539],{"class":484},[478,7441,2542],{"class":714},[478,7443,7444],{"class":480,"line":565},[478,7445,2114],{"class":714},[478,7447,7448],{"class":480,"line":579},[478,7449,7450],{"class":770},"    \u002F\u002F利用指针访问数组中的元素\n",[478,7452,7453,7455,7457,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477,7479,7481,7483,7485,7487,7489,7491,7493,7495,7497,7499,7501,7503],{"class":480,"line":593},[478,7454,2551],{"class":710},[478,7456,4528],{"class":714},[478,7458,1146],{"class":495},[478,7460,1635],{"class":714},[478,7462,759],{"class":710},[478,7464,1591],{"class":714},[478,7466,193],{"class":495},[478,7468,1079],{"class":714},[478,7470,789],{"class":495},[478,7472,1079],{"class":714},[478,7474,783],{"class":495},[478,7476,1079],{"class":714},[478,7478,994],{"class":495},[478,7480,1079],{"class":714},[478,7482,1020],{"class":495},[478,7484,1079],{"class":714},[478,7486,1045],{"class":495},[478,7488,1079],{"class":714},[478,7490,1070],{"class":495},[478,7492,1079],{"class":714},[478,7494,1096],{"class":495},[478,7496,1079],{"class":714},[478,7498,1121],{"class":495},[478,7500,1079],{"class":714},[478,7502,1146],{"class":495},[478,7504,4561],{"class":714},[478,7506,7507,7509,7511,7514,7516,7518,7520,7522,7524],{"class":480,"line":1769},[478,7508,2119],{"class":714},[478,7510,1739],{"class":710},[478,7512,7513],{"class":488},"\"数组的第一个元素为：\"",[478,7515,1739],{"class":710},[478,7517,4472],{"class":714},[478,7519,895],{"class":495},[478,7521,1635],{"class":714},[478,7523,1739],{"class":710},[478,7525,1761],{"class":714},[478,7527,7528,7530,7532,7534,7536,7539],{"class":480,"line":1783},[478,7529,2551],{"class":710},[478,7531,7084],{"class":710},[478,7533,19],{"class":714},[478,7535,759],{"class":710},[478,7537,7538],{"class":714},"arr;",[478,7540,7541],{"class":770},"\u002F\u002F注意数才要加取地址符号&\n",[478,7543,7544,7546,7548,7550,7552,7554,7556],{"class":480,"line":1789},[478,7545,2119],{"class":714},[478,7547,1739],{"class":710},[478,7549,7513],{"class":488},[478,7551,6985],{"class":710},[478,7553,19],{"class":714},[478,7555,1739],{"class":710},[478,7557,1761],{"class":714},[478,7559,7560,7562,7564,7566],{"class":480,"line":1880},[478,7561,6902],{"class":714},[478,7563,2858],{"class":710},[478,7565,767],{"class":714},[478,7567,7568],{"class":770}," \u002F\u002F让指针向后偏移4个字节\n",[478,7570,7571,7573,7575,7578,7580,7582,7584],{"class":480,"line":1886},[478,7572,2119],{"class":714},[478,7574,1739],{"class":710},[478,7576,7577],{"class":488},"\"数组的第二个元素为：\"",[478,7579,6985],{"class":710},[478,7581,19],{"class":714},[478,7583,1739],{"class":710},[478,7585,1761],{"class":714},[478,7587,7588],{"class":480,"line":1898},[478,7589,7590],{"class":770},"    \u002F\u002F利用指针遍历数组\n",[478,7592,7593,7595,7597,7600,7602],{"class":480,"line":2180},[478,7594,2551],{"class":710},[478,7596,7084],{"class":710},[478,7598,7599],{"class":714},"p2",[478,7601,759],{"class":710},[478,7603,7604],{"class":714},"arr;\n",[478,7606,7607,7609,7611,7613,7615,7617,7619,7621,7623,7625,7627,7629],{"class":480,"line":2185},[478,7608,3767],{"class":710},[478,7610,219],{"class":714},[478,7612,717],{"class":710},[478,7614,3598],{"class":714},[478,7616,759],{"class":710},[478,7618,895],{"class":495},[478,7620,3605],{"class":714},[478,7622,1605],{"class":710},[478,7624,1146],{"class":495},[478,7626,3605],{"class":714},[478,7628,2858],{"class":710},[478,7630,720],{"class":714},[478,7632,7633],{"class":480,"line":2191},[478,7634,2596],{"class":714},[478,7636,7637,7639,7641,7643,7645],{"class":480,"line":2196},[478,7638,4017],{"class":714},[478,7640,6985],{"class":710},[478,7642,7599],{"class":714},[478,7644,1739],{"class":710},[478,7646,1761],{"class":714},[478,7648,7649,7652,7654],{"class":480,"line":2210},[478,7650,7651],{"class":714},"        p2",[478,7653,2858],{"class":710},[478,7655,1859],{"class":714},[478,7657,7658],{"class":480,"line":2215},[478,7659,2753],{"class":714},[478,7661,7662],{"class":480,"line":2221},[478,7663,2133],{"class":714},[14,7665,7667],{"id":7666},"_37指针和函数","3.7指针和函数",[19,7669,7670],{},"利用指针做函数参数，可以修改实参的值",[19,7672,7673],{},"值传递：只改变形参，不改变实参",[19,7675,7676],{},"地址传递：",[469,7678,7680],{"className":701,"code":7679,"language":703,"meta":54,"style":54},"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",[475,7681,7682,7707,7711,7723,7734,7744,7748,7756,7760,7772,7784,7789,7805,7820,7835],{"__ignoreMap":54},[478,7683,7684,7686,7688,7690,7692,7694,7697,7699,7701,7703,7705],{"class":480,"line":481},[478,7685,5930],{"class":710},[478,7687,5933],{"class":484},[478,7689,263],{"class":714},[478,7691,717],{"class":710},[478,7693,7084],{"class":710},[478,7695,7696],{"class":5782},"p1",[478,7698,1079],{"class":714},[478,7700,717],{"class":710},[478,7702,7084],{"class":710},[478,7704,7599],{"class":5782},[478,7706,720],{"class":714},[478,7708,7709],{"class":480,"line":565},[478,7710,2114],{"class":714},[478,7712,7713,7715,7717,7720],{"class":480,"line":579},[478,7714,2551],{"class":710},[478,7716,4821],{"class":714},[478,7718,7719],{"class":710},"=*",[478,7721,7722],{"class":714},"p1;\n",[478,7724,7725,7727,7729,7731],{"class":480,"line":593},[478,7726,6969],{"class":710},[478,7728,7696],{"class":714},[478,7730,7719],{"class":710},[478,7732,7733],{"class":714},"p2;\n",[478,7735,7736,7738,7740,7742],{"class":480,"line":1769},[478,7737,6969],{"class":710},[478,7739,7599],{"class":714},[478,7741,759],{"class":710},[478,7743,4846],{"class":714},[478,7745,7746],{"class":480,"line":1783},[478,7747,2133],{"class":714},[478,7749,7750,7752,7754],{"class":480,"line":1789},[478,7751,717],{"class":710},[478,7753,2539],{"class":484},[478,7755,2542],{"class":714},[478,7757,7758],{"class":480,"line":1880},[478,7759,2114],{"class":714},[478,7761,7762,7764,7766,7768,7770],{"class":480,"line":1886},[478,7763,2551],{"class":710},[478,7765,1967],{"class":714},[478,7767,759],{"class":710},[478,7769,1146],{"class":495},[478,7771,1859],{"class":714},[478,7773,7774,7776,7778,7780,7782],{"class":480,"line":1898},[478,7775,2551],{"class":710},[478,7777,3399],{"class":714},[478,7779,759],{"class":710},[478,7781,1396],{"class":495},[478,7783,1859],{"class":714},[478,7785,7786],{"class":480,"line":2180},[478,7787,7788],{"class":770},"    \u002F\u002F地址传递\n",[478,7790,7791,7793,7795,7797,7800,7802],{"class":480,"line":2185},[478,7792,6127],{"class":484},[478,7794,263],{"class":714},[478,7796,1054],{"class":710},[478,7798,7799],{"class":714},"a,",[478,7801,1054],{"class":710},[478,7803,7804],{"class":714},"b);\n",[478,7806,7807,7809,7811,7813,7815,7817],{"class":480,"line":2191},[478,7808,2119],{"class":714},[478,7810,1739],{"class":710},[478,7812,518],{"class":714},[478,7814,1739],{"class":710},[478,7816,1807],{"class":714},[478,7818,7819],{"class":770},"\u002F\u002F20\n",[478,7821,7822,7824,7826,7828,7830,7832],{"class":480,"line":2196},[478,7823,2119],{"class":714},[478,7825,1739],{"class":710},[478,7827,964],{"class":714},[478,7829,1739],{"class":710},[478,7831,1807],{"class":714},[478,7833,7834],{"class":770},"\u002F\u002F10\n",[478,7836,7837],{"class":480,"line":2210},[478,7838,2133],{"class":714},[19,7840,7841],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7843,7845],{"id":7844},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7847,7848],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7850,7851,7852,7854],{},"例如数组：int arr",[478,7853,1146],{},"={4,3,6,9,1,2,10,8,7,5}",[469,7856,7858],{"className":701,"code":7857,"language":703,"meta":54,"style":54},"#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",[475,7859,7860,7866,7876,7900,7904,7935,7939,7973,7977,7995,7999,8010,8025,8040,8044,8048,8052,8056,8060,8068,8072,8077,8131,8143,8155,8160,8168,8172,8177,8202,8206,8221,8230,8234],{"__ignoreMap":54},[478,7861,7862,7864],{"class":480,"line":481},[478,7863,2516],{"class":710},[478,7865,2519],{"class":488},[478,7867,7868,7870,7872,7874],{"class":480,"line":565},[478,7869,2524],{"class":710},[478,7871,2527],{"class":710},[478,7873,2530],{"class":484},[478,7875,1859],{"class":714},[478,7877,7878,7880,7883,7885,7887,7889,7891,7893,7895,7898],{"class":480,"line":579},[478,7879,5930],{"class":710},[478,7881,7882],{"class":484}," bubbleSort",[478,7884,263],{"class":714},[478,7886,717],{"class":710},[478,7888,7084],{"class":710},[478,7890,19],{"class":5782},[478,7892,1079],{"class":714},[478,7894,717],{"class":710},[478,7896,7897],{"class":5782}," len",[478,7899,720],{"class":714},[478,7901,7902],{"class":480,"line":593},[478,7903,2114],{"class":714},[478,7905,7906,7908,7910,7912,7914,7916,7918,7920,7922,7925,7927,7929,7931,7933],{"class":480,"line":1769},[478,7907,3767],{"class":710},[478,7909,263],{"class":714},[478,7911,717],{"class":710},[478,7913,3598],{"class":714},[478,7915,759],{"class":710},[478,7917,895],{"class":495},[478,7919,3605],{"class":714},[478,7921,1605],{"class":710},[478,7923,7924],{"class":714},"len",[478,7926,1232],{"class":710},[478,7928,193],{"class":495},[478,7930,3605],{"class":714},[478,7932,2858],{"class":710},[478,7934,720],{"class":714},[478,7936,7937],{"class":480,"line":1783},[478,7938,2596],{"class":714},[478,7940,7941,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961,7963,7965,7967,7969,7971],{"class":480,"line":1789},[478,7942,3969],{"class":710},[478,7944,263],{"class":714},[478,7946,717],{"class":710},[478,7948,3976],{"class":714},[478,7950,759],{"class":710},[478,7952,895],{"class":495},[478,7954,3983],{"class":714},[478,7956,1605],{"class":710},[478,7958,7924],{"class":714},[478,7960,1232],{"class":710},[478,7962,1141],{"class":714},[478,7964,1232],{"class":710},[478,7966,193],{"class":495},[478,7968,3983],{"class":714},[478,7970,2858],{"class":710},[478,7972,720],{"class":714},[478,7974,7975],{"class":480,"line":1880},[478,7976,3076],{"class":714},[478,7978,7979,7981,7984,7986,7989,7991,7993],{"class":480,"line":1886},[478,7980,5208],{"class":710},[478,7982,7983],{"class":714},"(p[j]",[478,7985,1655],{"class":710},[478,7987,7988],{"class":714},"p[j",[478,7990,1181],{"class":710},[478,7992,193],{"class":495},[478,7994,5223],{"class":714},[478,7996,7997],{"class":480,"line":1898},[478,7998,5228],{"class":714},[478,8000,8001,8003,8005,8007],{"class":480,"line":2180},[478,8002,5233],{"class":710},[478,8004,4821],{"class":714},[478,8006,759],{"class":710},[478,8008,8009],{"class":714},"p[j];\n",[478,8011,8012,8015,8017,8019,8021,8023],{"class":480,"line":2185},[478,8013,8014],{"class":714},"                p[j]",[478,8016,759],{"class":710},[478,8018,7988],{"class":714},[478,8020,1181],{"class":710},[478,8022,193],{"class":495},[478,8024,5256],{"class":714},[478,8026,8027,8030,8032,8034,8036,8038],{"class":480,"line":2191},[478,8028,8029],{"class":714},"                p[j",[478,8031,1181],{"class":710},[478,8033,193],{"class":495},[478,8035,1635],{"class":714},[478,8037,759],{"class":710},[478,8039,4846],{"class":714},[478,8041,8042],{"class":480,"line":2196},[478,8043,5276],{"class":714},[478,8045,8046],{"class":480,"line":2210},[478,8047,3095],{"class":714},[478,8049,8050],{"class":480,"line":2215},[478,8051,2753],{"class":714},[478,8053,8054],{"class":480,"line":2221},[478,8055,2133],{"class":714},[478,8057,8058],{"class":480,"line":2241},[478,8059,2966],{"emptyLinePlaceholder":640},[478,8061,8062,8064,8066],{"class":480,"line":2246},[478,8063,717],{"class":710},[478,8065,2539],{"class":484},[478,8067,2542],{"class":714},[478,8069,8070],{"class":480,"line":2260},[478,8071,2114],{"class":714},[478,8073,8074],{"class":480,"line":2265},[478,8075,8076],{"class":770},"    \u002F\u002F 1.创建数组\n",[478,8078,8079,8081,8083,8085,8087,8089,8091,8093,8095,8097,8099,8101,8103,8105,8107,8109,8111,8113,8115,8117,8119,8121,8123,8125,8127,8129],{"class":480,"line":2294},[478,8080,2551],{"class":710},[478,8082,4528],{"class":714},[478,8084,1146],{"class":495},[478,8086,1635],{"class":714},[478,8088,759],{"class":710},[478,8090,1591],{"class":714},[478,8092,994],{"class":495},[478,8094,1079],{"class":714},[478,8096,783],{"class":495},[478,8098,1079],{"class":714},[478,8100,1045],{"class":495},[478,8102,1079],{"class":714},[478,8104,1121],{"class":495},[478,8106,1079],{"class":714},[478,8108,193],{"class":495},[478,8110,1079],{"class":714},[478,8112,789],{"class":495},[478,8114,1079],{"class":714},[478,8116,1146],{"class":495},[478,8118,1079],{"class":714},[478,8120,1096],{"class":495},[478,8122,1079],{"class":714},[478,8124,1070],{"class":495},[478,8126,1079],{"class":714},[478,8128,1020],{"class":495},[478,8130,4561],{"class":714},[478,8132,8133,8135,8137,8139,8141],{"class":480,"line":2299},[478,8134,2551],{"class":710},[478,8136,7897],{"class":714},[478,8138,759],{"class":710},[478,8140,1146],{"class":495},[478,8142,1859],{"class":714},[478,8144,8145,8147,8149,8151,8153],{"class":480,"line":2316},[478,8146,2551],{"class":710},[478,8148,7084],{"class":710},[478,8150,19],{"class":714},[478,8152,759],{"class":710},[478,8154,7604],{"class":714},[478,8156,8157],{"class":480,"line":2321},[478,8158,8159],{"class":770},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[478,8161,8162,8165],{"class":480,"line":2326},[478,8163,8164],{"class":484},"    bubbleSort",[478,8166,8167],{"class":714},"(p,len);\n",[478,8169,8170],{"class":480,"line":2331},[478,8171,2966],{"emptyLinePlaceholder":640},[478,8173,8174],{"class":480,"line":2345},[478,8175,8176],{"class":770},"    \u002F\u002F 3.打印排序后的数组\n",[478,8178,8179,8181,8183,8185,8187,8189,8191,8193,8195,8198,8200],{"class":480,"line":2350},[478,8180,3767],{"class":710},[478,8182,219],{"class":714},[478,8184,717],{"class":710},[478,8186,3598],{"class":714},[478,8188,759],{"class":710},[478,8190,895],{"class":495},[478,8192,3780],{"class":714},[478,8194,1605],{"class":710},[478,8196,8197],{"class":714},"len; i",[478,8199,2858],{"class":710},[478,8201,720],{"class":714},[478,8203,8204],{"class":480,"line":3143},[478,8205,2596],{"class":714},[478,8207,8208,8210,8212,8214,8216,8219],{"class":480,"line":3157},[478,8209,4017],{"class":714},[478,8211,6985],{"class":710},[478,8213,19],{"class":714},[478,8215,1739],{"class":710},[478,8217,8218],{"class":488},"\"\"",[478,8220,1859],{"class":714},[478,8222,8223,8226,8228],{"class":480,"line":3165},[478,8224,8225],{"class":714},"        p",[478,8227,2858],{"class":710},[478,8229,1859],{"class":714},[478,8231,8232],{"class":480,"line":3170},[478,8233,2753],{"class":714},[478,8235,8236],{"class":480,"line":3176},[478,8237,2133],{"class":714},[617,8239,8240],{},"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":54,"searchDepth":565,"depth":565,"links":8242},[8243,8244,8245,8246,8247,8248,8249,8250],{"id":6849,"depth":565,"text":6850},{"id":7015,"depth":565,"text":7016},{"id":7171,"depth":565,"text":7172},{"id":7249,"depth":565,"text":7250},{"id":7328,"depth":565,"text":7329},{"id":7427,"depth":565,"text":7428},{"id":7666,"depth":565,"text":7667},{"id":7844,"depth":565,"text":7845},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6838,"description":6846},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8257,"title":8258,"body":8259,"description":8266,"extension":638,"meta":11240,"navigation":640,"path":11241,"seo":11242,"stem":11243,"__hash__":11244},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8260,"toc":11231},[8261,8264,8267,8271,8274,8277,8288,8626,8629,8633,8636,8643,8898,8902,8905,8908,9063,9067,9070,9073,9279,9283,9286,9589,9592,9600,9604,9607,9758,9760,9771,9828,9832,9837,10494,10502,10505,10599,10602,11222,11228],[10,8262,8258],{"id":8263},"_4结构体",[19,8265,8266],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8268,8270],{"id":8269},"_41结构体定义与使用","4.1结构体定义与使用",[19,8272,8273],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8275,8276],{},"通过结构体创建变量的方式：",[1702,8278,8279,8282,8285],{},[32,8280,8281],{},"struct 结构体名 变量名",[32,8283,8284],{},"struct 结构体名 变量名={成员1值，成员2值...}",[32,8286,8287],{},"定义结构体时顺便创建变量",[469,8289,8291],{"className":701,"code":8290,"language":703,"meta":54,"style":54},"#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",[475,8292,8293,8299,8309,8316,8321,8329,8333,8338,8342,8347,8352,8357,8364,8369,8376,8380,8387,8391,8395,8399,8403,8407,8411,8417,8421,8427,8435,8443,8447,8452,8457,8468,8473,8485,8496,8507,8512,8536,8541,8547,8574,8579,8585,8597,8609,8621],{"__ignoreMap":54},[478,8294,8295,8297],{"class":480,"line":481},[478,8296,2516],{"class":710},[478,8298,2519],{"class":488},[478,8300,8301,8303,8305,8307],{"class":480,"line":565},[478,8302,2524],{"class":710},[478,8304,2527],{"class":710},[478,8306,2530],{"class":484},[478,8308,1859],{"class":714},[478,8310,8311,8313],{"class":480,"line":579},[478,8312,2516],{"class":710},[478,8314,8315],{"class":488},"\u003Cstring>\n",[478,8317,8318],{"class":480,"line":593},[478,8319,8320],{"class":770},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[478,8322,8323,8326],{"class":480,"line":1769},[478,8324,8325],{"class":710},"struct",[478,8327,8328],{"class":484}," Student\n",[478,8330,8331],{"class":480,"line":1783},[478,8332,2114],{"class":714},[478,8334,8335],{"class":480,"line":1789},[478,8336,8337],{"class":770},"    \u002F\u002F成员列表\n",[478,8339,8340],{"class":480,"line":1880},[478,8341,2966],{"emptyLinePlaceholder":640},[478,8343,8344],{"class":480,"line":1886},[478,8345,8346],{"class":770},"    \u002F\u002F姓名\n",[478,8348,8349],{"class":480,"line":1898},[478,8350,8351],{"class":714},"    string name;\n",[478,8353,8354],{"class":480,"line":2180},[478,8355,8356],{"class":770},"    \u002F\u002F年龄\n",[478,8358,8359,8361],{"class":480,"line":2185},[478,8360,2551],{"class":710},[478,8362,8363],{"class":714}," age;\n",[478,8365,8366],{"class":480,"line":2191},[478,8367,8368],{"class":770},"    \u002F\u002F分数\n",[478,8370,8371,8373],{"class":480,"line":2196},[478,8372,2551],{"class":710},[478,8374,8375],{"class":714}," score;\n",[478,8377,8378],{"class":480,"line":2210},[478,8379,4561],{"class":714},[478,8381,8382,8384],{"class":480,"line":2215},[478,8383,8325],{"class":710},[478,8385,8386],{"class":484}," School\n",[478,8388,8389],{"class":480,"line":2221},[478,8390,2114],{"class":714},[478,8392,8393],{"class":480,"line":2241},[478,8394,8337],{"class":770},[478,8396,8397],{"class":480,"line":2246},[478,8398,2966],{"emptyLinePlaceholder":640},[478,8400,8401],{"class":480,"line":2260},[478,8402,8346],{"class":770},[478,8404,8405],{"class":480,"line":2265},[478,8406,8351],{"class":714},[478,8408,8409],{"class":480,"line":2294},[478,8410,8356],{"class":770},[478,8412,8413,8415],{"class":480,"line":2299},[478,8414,2551],{"class":710},[478,8416,8363],{"class":714},[478,8418,8419],{"class":480,"line":2316},[478,8420,8368],{"class":770},[478,8422,8423,8425],{"class":480,"line":2321},[478,8424,2551],{"class":710},[478,8426,8375],{"class":714},[478,8428,8429,8432],{"class":480,"line":2326},[478,8430,8431],{"class":714},"} s3;",[478,8433,8434],{"class":770}," \u002F\u002F创建结构体时就创建了变量\n",[478,8436,8437,8439,8441],{"class":480,"line":2331},[478,8438,717],{"class":710},[478,8440,2539],{"class":484},[478,8442,2542],{"class":714},[478,8444,8445],{"class":480,"line":2345},[478,8446,2114],{"class":714},[478,8448,8449],{"class":480,"line":2350},[478,8450,8451],{"class":770},"    \u002F\u002F2.通过学生类型创建具体学生\n",[478,8453,8454],{"class":480,"line":3143},[478,8455,8456],{"class":770},"    \u002F\u002F2.1 struct Student s1;\n",[478,8458,8459,8462,8465],{"class":480,"line":3157},[478,8460,8461],{"class":710},"    struct",[478,8463,8464],{"class":484}," Student",[478,8466,8467],{"class":714}," s1;\n",[478,8469,8470],{"class":480,"line":3165},[478,8471,8472],{"class":770},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[478,8474,8475,8478,8480,8483],{"class":480,"line":3170},[478,8476,8477],{"class":714},"    s1.name",[478,8479,759],{"class":710},[478,8481,8482],{"class":488},"\"张三\"",[478,8484,1859],{"class":714},[478,8486,8487,8490,8492,8494],{"class":480,"line":3176},[478,8488,8489],{"class":714},"    s1.age",[478,8491,759],{"class":710},[478,8493,1348],{"class":495},[478,8495,1859],{"class":714},[478,8497,8498,8501,8503,8505],{"class":480,"line":3182},[478,8499,8500],{"class":714},"    s1.score",[478,8502,759],{"class":710},[478,8504,955],{"class":495},[478,8506,1859],{"class":714},[478,8508,8509],{"class":480,"line":3187},[478,8510,8511],{"class":770},"    \u002F\u002F输出结果\n",[478,8513,8515,8517,8519,8522,8524,8527,8529,8532,8534],{"class":480,"line":8514},37,[478,8516,2119],{"class":714},[478,8518,1739],{"class":710},[478,8520,8521],{"class":714},"s1.name",[478,8523,1739],{"class":710},[478,8525,8526],{"class":714},"s1.age",[478,8528,1739],{"class":710},[478,8530,8531],{"class":714},"s1.score",[478,8533,1739],{"class":710},[478,8535,1761],{"class":714},[478,8537,8539],{"class":480,"line":8538},38,[478,8540,2966],{"emptyLinePlaceholder":640},[478,8542,8544],{"class":480,"line":8543},39,[478,8545,8546],{"class":770},"    \u002F\u002F2.2 struct Student s2={...}\n",[478,8548,8550,8552,8554,8557,8559,8561,8564,8566,8568,8570,8572],{"class":480,"line":8549},40,[478,8551,8461],{"class":710},[478,8553,8464],{"class":484},[478,8555,8556],{"class":714}," s2",[478,8558,759],{"class":710},[478,8560,1591],{"class":714},[478,8562,8563],{"class":488},"\"王五\"",[478,8565,1079],{"class":714},[478,8567,1348],{"class":495},[478,8569,1079],{"class":714},[478,8571,955],{"class":495},[478,8573,4561],{"class":714},[478,8575,8577],{"class":480,"line":8576},41,[478,8578,2966],{"emptyLinePlaceholder":640},[478,8580,8582],{"class":480,"line":8581},42,[478,8583,8584],{"class":770},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[478,8586,8588,8591,8593,8595],{"class":480,"line":8587},43,[478,8589,8590],{"class":714},"    s3.name",[478,8592,759],{"class":710},[478,8594,4244],{"class":488},[478,8596,1859],{"class":714},[478,8598,8600,8603,8605,8607],{"class":480,"line":8599},44,[478,8601,8602],{"class":714},"    s3.age",[478,8604,759],{"class":710},[478,8606,1348],{"class":495},[478,8608,1859],{"class":714},[478,8610,8612,8615,8617,8619],{"class":480,"line":8611},45,[478,8613,8614],{"class":714},"    s3.score",[478,8616,759],{"class":710},[478,8618,1396],{"class":495},[478,8620,1859],{"class":714},[478,8622,8624],{"class":480,"line":8623},46,[478,8625,2133],{"class":714},[19,8627,8628],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8630,8632],{"id":8631},"_42结构体数组","4.2结构体数组",[19,8634,8635],{},"将自定义的结构体放入到数组中方便维护",[19,8637,8638,8639,8642],{},"语法：struct 结构体名 数组名",[478,8640,8641],{},"元素个数","={ {}，{},...{} };",[469,8644,8646],{"className":701,"code":8645,"language":703,"meta":54,"style":54},"#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",[475,8647,8648,8654,8664,8670,8675,8681,8685,8689,8695,8701,8705,8709,8717,8721,8726,8741,8745,8761,8777,8781,8786,8802,8817,8832,8837,8863,8867,8890,8894],{"__ignoreMap":54},[478,8649,8650,8652],{"class":480,"line":481},[478,8651,2516],{"class":710},[478,8653,2519],{"class":488},[478,8655,8656,8658,8660,8662],{"class":480,"line":565},[478,8657,2524],{"class":710},[478,8659,2527],{"class":710},[478,8661,2530],{"class":484},[478,8663,1859],{"class":714},[478,8665,8666,8668],{"class":480,"line":579},[478,8667,2516],{"class":710},[478,8669,8315],{"class":488},[478,8671,8672],{"class":480,"line":593},[478,8673,8674],{"class":770},"\u002F\u002F1.定义结构体\n",[478,8676,8677,8679],{"class":480,"line":1769},[478,8678,8325],{"class":710},[478,8680,8328],{"class":484},[478,8682,8683],{"class":480,"line":1783},[478,8684,2114],{"class":714},[478,8686,8687],{"class":480,"line":1789},[478,8688,8351],{"class":714},[478,8690,8691,8693],{"class":480,"line":1880},[478,8692,2551],{"class":710},[478,8694,8363],{"class":714},[478,8696,8697,8699],{"class":480,"line":1886},[478,8698,2551],{"class":710},[478,8700,8375],{"class":714},[478,8702,8703],{"class":480,"line":1898},[478,8704,2966],{"emptyLinePlaceholder":640},[478,8706,8707],{"class":480,"line":2180},[478,8708,4561],{"class":714},[478,8710,8711,8713,8715],{"class":480,"line":2185},[478,8712,717],{"class":710},[478,8714,2539],{"class":484},[478,8716,2542],{"class":714},[478,8718,8719],{"class":480,"line":2191},[478,8720,2114],{"class":714},[478,8722,8723],{"class":480,"line":2196},[478,8724,8725],{"class":770},"    \u002F\u002F2.创建结构体数组\n",[478,8727,8728,8730,8732,8735,8737,8739],{"class":480,"line":2210},[478,8729,8461],{"class":710},[478,8731,8464],{"class":484},[478,8733,8734],{"class":714}," stuArray[",[478,8736,789],{"class":495},[478,8738,1635],{"class":714},[478,8740,5474],{"class":710},[478,8742,8743],{"class":480,"line":2215},[478,8744,2596],{"class":714},[478,8746,8747,8749,8751,8753,8755,8757,8759],{"class":480,"line":2221},[478,8748,5483],{"class":714},[478,8750,8482],{"class":488},[478,8752,1079],{"class":714},[478,8754,1348],{"class":495},[478,8756,1079],{"class":714},[478,8758,1012],{"class":495},[478,8760,5496],{"class":714},[478,8762,8763,8765,8767,8769,8771,8773,8775],{"class":480,"line":2241},[478,8764,5483],{"class":714},[478,8766,4244],{"class":488},[478,8768,1079],{"class":714},[478,8770,1275],{"class":495},[478,8772,1079],{"class":714},[478,8774,1275],{"class":495},[478,8776,2133],{"class":714},[478,8778,8779],{"class":480,"line":2246},[478,8780,2753],{"class":714},[478,8782,8783],{"class":480,"line":2260},[478,8784,8785],{"class":770},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[478,8787,8788,8791,8793,8796,8798,8800],{"class":480,"line":2265},[478,8789,8790],{"class":714},"    stuArray[",[478,8792,193],{"class":495},[478,8794,8795],{"class":714},"].name",[478,8797,759],{"class":710},[478,8799,4267],{"class":488},[478,8801,1859],{"class":714},[478,8803,8804,8806,8808,8811,8813,8815],{"class":480,"line":2294},[478,8805,8790],{"class":714},[478,8807,193],{"class":495},[478,8809,8810],{"class":714},"].age",[478,8812,759],{"class":710},[478,8814,789],{"class":495},[478,8816,1859],{"class":714},[478,8818,8819,8821,8823,8826,8828,8830],{"class":480,"line":2299},[478,8820,8790],{"class":714},[478,8822,193],{"class":495},[478,8824,8825],{"class":714},"].score",[478,8827,759],{"class":710},[478,8829,789],{"class":495},[478,8831,1859],{"class":714},[478,8833,8834],{"class":480,"line":2316},[478,8835,8836],{"class":770},"    \u002F\u002F4.遍历结构体数组\n",[478,8838,8839,8841,8843,8845,8847,8849,8851,8853,8855,8857,8859,8861],{"class":480,"line":2321},[478,8840,3767],{"class":710},[478,8842,219],{"class":714},[478,8844,717],{"class":710},[478,8846,3598],{"class":714},[478,8848,759],{"class":710},[478,8850,895],{"class":495},[478,8852,3605],{"class":714},[478,8854,1605],{"class":710},[478,8856,789],{"class":495},[478,8858,3605],{"class":714},[478,8860,2858],{"class":710},[478,8862,720],{"class":714},[478,8864,8865],{"class":480,"line":2326},[478,8866,2596],{"class":714},[478,8868,8869,8871,8873,8876,8878,8881,8883,8886,8888],{"class":480,"line":2331},[478,8870,4017],{"class":714},[478,8872,1739],{"class":710},[478,8874,8875],{"class":714},"stuArray[i].name",[478,8877,1739],{"class":710},[478,8879,8880],{"class":714},"stuArray[i].age",[478,8882,1739],{"class":710},[478,8884,8885],{"class":714},"stuArray[i].score",[478,8887,1739],{"class":710},[478,8889,1761],{"class":714},[478,8891,8892],{"class":480,"line":2345},[478,8893,2753],{"class":714},[478,8895,8896],{"class":480,"line":2350},[478,8897,2133],{"class":714},[14,8899,8901],{"id":8900},"_43结构体指针","4.3结构体指针",[19,8903,8904],{},"作用：通过指针访问结构体中的成员",[19,8906,8907],{},"利用操作符->可以通过结构体指针访问结构体属性",[469,8909,8911],{"className":701,"code":8910,"language":703,"meta":54,"style":54},"#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",[475,8912,8913,8919,8929,8935,8939,8945,8949,8953,8959,8965,8969,8977,8981,8986,9011,9016,9031,9036,9059],{"__ignoreMap":54},[478,8914,8915,8917],{"class":480,"line":481},[478,8916,2516],{"class":710},[478,8918,2519],{"class":488},[478,8920,8921,8923,8925,8927],{"class":480,"line":565},[478,8922,2524],{"class":710},[478,8924,2527],{"class":710},[478,8926,2530],{"class":484},[478,8928,1859],{"class":714},[478,8930,8931,8933],{"class":480,"line":579},[478,8932,2516],{"class":710},[478,8934,8315],{"class":488},[478,8936,8937],{"class":480,"line":593},[478,8938,8674],{"class":770},[478,8940,8941,8943],{"class":480,"line":1769},[478,8942,8325],{"class":710},[478,8944,8328],{"class":484},[478,8946,8947],{"class":480,"line":1783},[478,8948,2114],{"class":714},[478,8950,8951],{"class":480,"line":1789},[478,8952,8351],{"class":714},[478,8954,8955,8957],{"class":480,"line":1880},[478,8956,2551],{"class":710},[478,8958,8363],{"class":714},[478,8960,8961,8963],{"class":480,"line":1886},[478,8962,2551],{"class":710},[478,8964,8375],{"class":714},[478,8966,8967],{"class":480,"line":1898},[478,8968,4561],{"class":714},[478,8970,8971,8973,8975],{"class":480,"line":2180},[478,8972,717],{"class":710},[478,8974,2539],{"class":484},[478,8976,2542],{"class":714},[478,8978,8979],{"class":480,"line":2185},[478,8980,2114],{"class":714},[478,8982,8983],{"class":480,"line":2191},[478,8984,8985],{"class":770},"    \u002F\u002F创建学生结构体变量\n",[478,8987,8988,8990,8992,8995,8997,8999,9001,9003,9005,9007,9009],{"class":480,"line":2196},[478,8989,8461],{"class":710},[478,8991,8464],{"class":484},[478,8993,8994],{"class":714}," s",[478,8996,759],{"class":710},[478,8998,1591],{"class":714},[478,9000,8482],{"class":488},[478,9002,1079],{"class":714},[478,9004,1348],{"class":495},[478,9006,1079],{"class":714},[478,9008,2289],{"class":495},[478,9010,4561],{"class":714},[478,9012,9013],{"class":480,"line":2210},[478,9014,9015],{"class":770},"    \u002F\u002F通过指针指向结构体变量\n",[478,9017,9018,9020,9022,9024,9026,9028],{"class":480,"line":2215},[478,9019,8461],{"class":710},[478,9021,8464],{"class":484},[478,9023,7084],{"class":710},[478,9025,19],{"class":714},[478,9027,6905],{"class":710},[478,9029,9030],{"class":714},"s\n",[478,9032,9033],{"class":480,"line":2221},[478,9034,9035],{"class":770},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[478,9037,9038,9040,9042,9045,9047,9050,9052,9055,9057],{"class":480,"line":2241},[478,9039,2119],{"class":714},[478,9041,1739],{"class":710},[478,9043,9044],{"class":714},"p->name",[478,9046,1739],{"class":710},[478,9048,9049],{"class":714},"p->age",[478,9051,1739],{"class":710},[478,9053,9054],{"class":714},"p->score",[478,9056,1739],{"class":710},[478,9058,1761],{"class":714},[478,9060,9061],{"class":480,"line":2246},[478,9062,2133],{"class":714},[14,9064,9066],{"id":9065},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9068,9069],{},"作用：结构体中的成员可以是另一个结构体",[19,9071,9072],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[469,9074,9076],{"className":701,"code":9075,"language":703,"meta":54,"style":54},"#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",[475,9077,9078,9084,9094,9100,9105,9113,9117,9121,9127,9133,9137,9142,9149,9153,9160,9164,9170,9175,9179,9187,9191,9196,9201,9206,9217,9229,9240,9253,9264,9275],{"__ignoreMap":54},[478,9079,9080,9082],{"class":480,"line":481},[478,9081,2516],{"class":710},[478,9083,2519],{"class":488},[478,9085,9086,9088,9090,9092],{"class":480,"line":565},[478,9087,2524],{"class":710},[478,9089,2527],{"class":710},[478,9091,2530],{"class":484},[478,9093,1859],{"class":714},[478,9095,9096,9098],{"class":480,"line":579},[478,9097,2516],{"class":710},[478,9099,8315],{"class":488},[478,9101,9102],{"class":480,"line":593},[478,9103,9104],{"class":770},"\u002F\u002F定义学生结构体\n",[478,9106,9107,9109,9111],{"class":480,"line":1769},[478,9108,8325],{"class":710},[478,9110,8464],{"class":484},[478,9112,3240],{"class":714},[478,9114,9115],{"class":480,"line":1783},[478,9116,2114],{"class":714},[478,9118,9119],{"class":480,"line":1789},[478,9120,8351],{"class":714},[478,9122,9123,9125],{"class":480,"line":1880},[478,9124,2551],{"class":710},[478,9126,8363],{"class":714},[478,9128,9129,9131],{"class":480,"line":1886},[478,9130,2551],{"class":710},[478,9132,8375],{"class":714},[478,9134,9135],{"class":480,"line":1898},[478,9136,2133],{"class":714},[478,9138,9139],{"class":480,"line":2180},[478,9140,9141],{"class":770},"\u002F\u002F定义老师结构体\n",[478,9143,9144,9146],{"class":480,"line":2185},[478,9145,8325],{"class":710},[478,9147,9148],{"class":484}," Teacher\n",[478,9150,9151],{"class":480,"line":2191},[478,9152,2114],{"class":714},[478,9154,9155,9157],{"class":480,"line":2196},[478,9156,2551],{"class":710},[478,9158,9159],{"class":714}," id;\n",[478,9161,9162],{"class":480,"line":2210},[478,9163,8351],{"class":714},[478,9165,9166,9168],{"class":480,"line":2215},[478,9167,2551],{"class":710},[478,9169,8363],{"class":714},[478,9171,9172],{"class":480,"line":2221},[478,9173,9174],{"class":714},"    Student stu;\n",[478,9176,9177],{"class":480,"line":2241},[478,9178,2133],{"class":714},[478,9180,9181,9183,9185],{"class":480,"line":2246},[478,9182,717],{"class":710},[478,9184,2539],{"class":484},[478,9186,6544],{"class":714},[478,9188,9189],{"class":480,"line":2260},[478,9190,2114],{"class":714},[478,9192,9193],{"class":480,"line":2265},[478,9194,9195],{"class":770},"    \u002F\u002F结构体嵌套结构体\n",[478,9197,9198],{"class":480,"line":2294},[478,9199,9200],{"class":770},"    \u002F\u002F创建老师\n",[478,9202,9203],{"class":480,"line":2299},[478,9204,9205],{"class":714},"    Teacher t;\n",[478,9207,9208,9211,9213,9215],{"class":480,"line":2316},[478,9209,9210],{"class":714},"    t.id",[478,9212,759],{"class":710},[478,9214,1012],{"class":495},[478,9216,1859],{"class":714},[478,9218,9219,9222,9224,9227],{"class":480,"line":2321},[478,9220,9221],{"class":714},"    t.name",[478,9223,759],{"class":710},[478,9225,9226],{"class":488},"\"老王\"",[478,9228,1859],{"class":714},[478,9230,9231,9234,9236,9238],{"class":480,"line":2326},[478,9232,9233],{"class":714},"    t.age",[478,9235,759],{"class":710},[478,9237,1348],{"class":495},[478,9239,1859],{"class":714},[478,9241,9242,9245,9247,9250],{"class":480,"line":2331},[478,9243,9244],{"class":714},"    t.stu.name",[478,9246,759],{"class":710},[478,9248,9249],{"class":488},"\"小王\"",[478,9251,9252],{"class":714},"；\n",[478,9254,9255,9258,9260,9262],{"class":480,"line":2345},[478,9256,9257],{"class":714},"    t.stu.age",[478,9259,759],{"class":710},[478,9261,1396],{"class":495},[478,9263,1859],{"class":714},[478,9265,9266,9269,9271,9273],{"class":480,"line":2350},[478,9267,9268],{"class":714},"    t.stu.score",[478,9270,759],{"class":710},[478,9272,1045],{"class":495},[478,9274,1859],{"class":714},[478,9276,9277],{"class":480,"line":3143},[478,9278,2133],{"class":714},[14,9280,9282],{"id":9281},"_45结构体做函数参数","4.5结构体做函数参数",[19,9284,9285],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[469,9287,9289],{"className":701,"code":9288,"language":703,"meta":54,"style":54},"#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",[475,9290,9291,9297,9307,9313,9319,9323,9327,9333,9339,9343,9348,9353,9370,9374,9407,9411,9416,9435,9439,9470,9474,9482,9486,9495,9507,9519,9531,9544,9552,9565,9577,9585],{"__ignoreMap":54},[478,9292,9293,9295],{"class":480,"line":481},[478,9294,2516],{"class":710},[478,9296,2519],{"class":488},[478,9298,9299,9301,9303,9305],{"class":480,"line":565},[478,9300,2524],{"class":710},[478,9302,2527],{"class":710},[478,9304,2530],{"class":484},[478,9306,1859],{"class":714},[478,9308,9309,9311],{"class":480,"line":579},[478,9310,2516],{"class":710},[478,9312,8315],{"class":488},[478,9314,9315,9317],{"class":480,"line":593},[478,9316,8325],{"class":710},[478,9318,8328],{"class":484},[478,9320,9321],{"class":480,"line":1769},[478,9322,2114],{"class":714},[478,9324,9325],{"class":480,"line":1783},[478,9326,8351],{"class":714},[478,9328,9329,9331],{"class":480,"line":1789},[478,9330,2551],{"class":710},[478,9332,8363],{"class":714},[478,9334,9335,9337],{"class":480,"line":1880},[478,9336,2551],{"class":710},[478,9338,8375],{"class":714},[478,9340,9341],{"class":480,"line":1886},[478,9342,4561],{"class":714},[478,9344,9345],{"class":480,"line":1898},[478,9346,9347],{"class":770},"\u002F\u002F打印学生信息的函数\n",[478,9349,9350],{"class":480,"line":2180},[478,9351,9352],{"class":770},"\u002F\u002F值传递\n",[478,9354,9355,9357,9360,9362,9364,9366,9368],{"class":480,"line":2185},[478,9356,5930],{"class":710},[478,9358,9359],{"class":484}," printStudent1",[478,9361,263],{"class":714},[478,9363,8325],{"class":710},[478,9365,8464],{"class":484},[478,9367,8994],{"class":5782},[478,9369,720],{"class":714},[478,9371,9372],{"class":480,"line":2191},[478,9373,2114],{"class":714},[478,9375,9376,9378,9380,9383,9385,9388,9390,9393,9395,9397,9399,9402,9404],{"class":480,"line":2196},[478,9377,7095],{"class":714},[478,9379,1739],{"class":710},[478,9381,9382],{"class":714}," s.name ",[478,9384,1739],{"class":710},[478,9386,9387],{"class":488}," \" \"",[478,9389,2013],{"class":710},[478,9391,9392],{"class":714}," s.age ",[478,9394,1739],{"class":710},[478,9396,9387],{"class":488},[478,9398,2013],{"class":710},[478,9400,9401],{"class":714}," s.score ",[478,9403,1739],{"class":710},[478,9405,9406],{"class":714}," endl;\n",[478,9408,9409],{"class":480,"line":2210},[478,9410,2133],{"class":714},[478,9412,9413],{"class":480,"line":2215},[478,9414,9415],{"class":770},"\u002F\u002F地址传递\n",[478,9417,9418,9420,9423,9425,9427,9429,9431,9433],{"class":480,"line":2221},[478,9419,5930],{"class":710},[478,9421,9422],{"class":484}," printStudent2",[478,9424,263],{"class":714},[478,9426,8325],{"class":710},[478,9428,8464],{"class":484},[478,9430,7084],{"class":710},[478,9432,1391],{"class":5782},[478,9434,720],{"class":714},[478,9436,9437],{"class":480,"line":2241},[478,9438,2114],{"class":714},[478,9440,9441,9443,9445,9448,9450,9452,9454,9457,9459,9461,9463,9466,9468],{"class":480,"line":2246},[478,9442,7095],{"class":714},[478,9444,1739],{"class":710},[478,9446,9447],{"class":714}," s->name ",[478,9449,1739],{"class":710},[478,9451,9387],{"class":488},[478,9453,2013],{"class":710},[478,9455,9456],{"class":714}," s->age ",[478,9458,1739],{"class":710},[478,9460,9387],{"class":488},[478,9462,2013],{"class":710},[478,9464,9465],{"class":714}," s->score ",[478,9467,1739],{"class":710},[478,9469,9406],{"class":714},[478,9471,9472],{"class":480,"line":2260},[478,9473,2133],{"class":714},[478,9475,9476,9478,9480],{"class":480,"line":2265},[478,9477,717],{"class":710},[478,9479,2539],{"class":484},[478,9481,2542],{"class":714},[478,9483,9484],{"class":480,"line":2294},[478,9485,2114],{"class":714},[478,9487,9488,9490,9492],{"class":480,"line":2299},[478,9489,8461],{"class":710},[478,9491,8464],{"class":484},[478,9493,9494],{"class":714}," s;\n",[478,9496,9497,9500,9502,9505],{"class":480,"line":2316},[478,9498,9499],{"class":714},"    s.name ",[478,9501,759],{"class":710},[478,9503,9504],{"class":488}," \"张三\"",[478,9506,1859],{"class":714},[478,9508,9509,9512,9514,9517],{"class":480,"line":2321},[478,9510,9511],{"class":714},"    s.age ",[478,9513,759],{"class":710},[478,9515,9516],{"class":495}," 20",[478,9518,1859],{"class":714},[478,9520,9521,9524,9526,9529],{"class":480,"line":2326},[478,9522,9523],{"class":714},"    s.score ",[478,9525,759],{"class":710},[478,9527,9528],{"class":495}," 85",[478,9530,1859],{"class":714},[478,9532,9533,9535,9537,9540,9542],{"class":480,"line":2331},[478,9534,2119],{"class":714},[478,9536,1739],{"class":710},[478,9538,9539],{"class":488},"\"值传递:\"",[478,9541,1739],{"class":710},[478,9543,1761],{"class":714},[478,9545,9546,9549],{"class":480,"line":2345},[478,9547,9548],{"class":484},"    printStudent1",[478,9550,9551],{"class":714},"(s);\n",[478,9553,9554,9556,9558,9561,9563],{"class":480,"line":2350},[478,9555,2119],{"class":714},[478,9557,1739],{"class":710},[478,9559,9560],{"class":488},"\"地址传递:\"",[478,9562,1739],{"class":710},[478,9564,1761],{"class":714},[478,9566,9567,9570,9572,9574],{"class":480,"line":3143},[478,9568,9569],{"class":484},"    printStudent2",[478,9571,263],{"class":714},[478,9573,1054],{"class":710},[478,9575,9576],{"class":714},"s); \n",[478,9578,9579,9581,9583],{"class":480,"line":3157},[478,9580,4656],{"class":710},[478,9582,4659],{"class":495},[478,9584,1859],{"class":714},[478,9586,9587],{"class":480,"line":3165},[478,9588,2133],{"class":714},[19,9590,9591],{},"注意：",[1702,9593,9594,9597],{},[32,9595,9596],{},"1.先定义结构体，不要在函数中写结构体的定义",[32,9598,9599],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9601,9603],{"id":9602},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9605,9606],{},"用const防止误操作",[469,9608,9610],{"className":701,"code":9609,"language":703,"meta":54,"style":54},"#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",[475,9611,9612,9618,9628,9634,9639,9643,9647,9653,9659,9663,9679,9683,9706,9710,9718,9722,9743,9750,9754],{"__ignoreMap":54},[478,9613,9614,9616],{"class":480,"line":481},[478,9615,2516],{"class":710},[478,9617,2519],{"class":488},[478,9619,9620,9622,9624,9626],{"class":480,"line":565},[478,9621,2524],{"class":710},[478,9623,2527],{"class":710},[478,9625,2530],{"class":484},[478,9627,1859],{"class":714},[478,9629,9630,9632],{"class":480,"line":579},[478,9631,2516],{"class":710},[478,9633,8315],{"class":488},[478,9635,9636],{"class":480,"line":593},[478,9637,9638],{"class":714},"sctuct Student\n",[478,9640,9641],{"class":480,"line":1769},[478,9642,2114],{"class":714},[478,9644,9645],{"class":480,"line":1783},[478,9646,8351],{"class":714},[478,9648,9649,9651],{"class":480,"line":1789},[478,9650,2551],{"class":710},[478,9652,8363],{"class":714},[478,9654,9655,9657],{"class":480,"line":1880},[478,9656,2551],{"class":710},[478,9658,8375],{"class":714},[478,9660,9661],{"class":480,"line":1886},[478,9662,4561],{"class":714},[478,9664,9665,9667,9670,9672,9675,9677],{"class":480,"line":1898},[478,9666,5930],{"class":710},[478,9668,9669],{"class":484}," printStudents",[478,9671,263],{"class":714},[478,9673,9674],{"class":484},"student",[478,9676,8994],{"class":5782},[478,9678,720],{"class":714},[478,9680,9681],{"class":480,"line":2180},[478,9682,2114],{"class":714},[478,9684,9685,9687,9689,9692,9694,9697,9699,9702,9704],{"class":480,"line":2185},[478,9686,2119],{"class":714},[478,9688,1739],{"class":710},[478,9690,9691],{"class":714},"s.name",[478,9693,1739],{"class":710},[478,9695,9696],{"class":714},"s.age",[478,9698,1739],{"class":710},[478,9700,9701],{"class":714},"s.score",[478,9703,1739],{"class":710},[478,9705,1761],{"class":714},[478,9707,9708],{"class":480,"line":2191},[478,9709,2133],{"class":714},[478,9711,9712,9714,9716],{"class":480,"line":2196},[478,9713,717],{"class":710},[478,9715,2539],{"class":484},[478,9717,6544],{"class":714},[478,9719,9720],{"class":480,"line":2210},[478,9721,2114],{"class":714},[478,9723,9724,9727,9729,9731,9733,9735,9737,9739,9741],{"class":480,"line":2215},[478,9725,9726],{"class":714},"    Student s",[478,9728,759],{"class":710},[478,9730,1591],{"class":714},[478,9732,8482],{"class":488},[478,9734,1079],{"class":714},[478,9736,1348],{"class":495},[478,9738,1079],{"class":714},[478,9740,1348],{"class":495},[478,9742,4561],{"class":714},[478,9744,9745,9748],{"class":480,"line":2221},[478,9746,9747],{"class":484},"    printStudent",[478,9749,9551],{"class":714},[478,9751,9752],{"class":480,"line":2241},[478,9753,2966],{"emptyLinePlaceholder":640},[478,9755,9756],{"class":480,"line":2246},[478,9757,2133],{"class":714},[19,9759,9591],{},[1702,9761,9762,9765,9768],{},[32,9763,9764],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[32,9766,9767],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[32,9769,9770],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[469,9772,9774],{"className":701,"code":9773,"language":703,"meta":54,"style":54},"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",[475,9775,9776,9795,9799,9804,9824],{"__ignoreMap":54},[478,9777,9778,9780,9782,9784,9786,9789,9791,9793],{"class":480,"line":481},[478,9779,5930],{"class":710},[478,9781,9669],{"class":484},[478,9783,263],{"class":714},[478,9785,7358],{"class":710},[478,9787,9788],{"class":484}," student",[478,9790,7084],{"class":710},[478,9792,1391],{"class":5782},[478,9794,720],{"class":714},[478,9796,9797],{"class":480,"line":565},[478,9798,2114],{"class":714},[478,9800,9801],{"class":480,"line":579},[478,9802,9803],{"class":770},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[478,9805,9806,9808,9810,9812,9814,9816,9818,9820,9822],{"class":480,"line":593},[478,9807,2119],{"class":714},[478,9809,1739],{"class":710},[478,9811,9691],{"class":714},[478,9813,1739],{"class":710},[478,9815,9696],{"class":714},[478,9817,1739],{"class":710},[478,9819,9701],{"class":714},[478,9821,1739],{"class":710},[478,9823,1761],{"class":714},[478,9825,9826],{"class":480,"line":1769},[478,9827,2133],{"class":714},[14,9829,9831],{"id":9830},"_47案例","4.7案例",[29,9833,9834],{},[32,9835,9836],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[469,9838,9840],{"className":701,"code":9839,"language":703,"meta":54,"style":54},"#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",[475,9841,9842,9848,9858,9864,9871,9875,9881,9885,9890,9896,9902,9906,9910,9916,9920,9925,9930,9943,9947,9952,9978,9982,9994,10021,10025,10037,10047,10051,10056,10085,10089,10101,10110,10137,10148,10158,10162,10166,10170,10175,10199,10203,10227,10231,10250,10276,10280,10305,10328,10352,10357,10362,10367,10376,10381,10387,10408,10414,10428,10434,10461,10470,10476,10484,10489],{"__ignoreMap":54},[478,9843,9844,9846],{"class":480,"line":481},[478,9845,2516],{"class":710},[478,9847,2519],{"class":488},[478,9849,9850,9852,9854,9856],{"class":480,"line":565},[478,9851,2524],{"class":710},[478,9853,2527],{"class":710},[478,9855,2530],{"class":484},[478,9857,1859],{"class":714},[478,9859,9860,9862],{"class":480,"line":579},[478,9861,2516],{"class":710},[478,9863,8315],{"class":488},[478,9865,9866,9868],{"class":480,"line":593},[478,9867,2516],{"class":710},[478,9869,9870],{"class":488},"\u003Cctime>\n",[478,9872,9873],{"class":480,"line":1769},[478,9874,9104],{"class":770},[478,9876,9877,9879],{"class":480,"line":1783},[478,9878,8325],{"class":710},[478,9880,8328],{"class":484},[478,9882,9883],{"class":480,"line":1789},[478,9884,2114],{"class":714},[478,9886,9887],{"class":480,"line":1880},[478,9888,9889],{"class":714},"    string sName;\n",[478,9891,9892,9894],{"class":480,"line":1886},[478,9893,2551],{"class":710},[478,9895,8363],{"class":714},[478,9897,9898,9900],{"class":480,"line":1898},[478,9899,2551],{"class":710},[478,9901,8375],{"class":714},[478,9903,9904],{"class":480,"line":2180},[478,9905,4561],{"class":714},[478,9907,9908],{"class":480,"line":2185},[478,9909,9141],{"class":770},[478,9911,9912,9914],{"class":480,"line":2191},[478,9913,8325],{"class":710},[478,9915,9148],{"class":484},[478,9917,9918],{"class":480,"line":2196},[478,9919,2114],{"class":714},[478,9921,9922],{"class":480,"line":2210},[478,9923,9924],{"class":714},"    string tName;\n",[478,9926,9927],{"class":480,"line":2215},[478,9928,9929],{"class":770},"    \u002F\u002F学生数组\n",[478,9931,9932,9934,9936,9939,9941],{"class":480,"line":2221},[478,9933,8461],{"class":710},[478,9935,8464],{"class":484},[478,9937,9938],{"class":714}," sArray[",[478,9940,1020],{"class":495},[478,9942,5256],{"class":714},[478,9944,9945],{"class":480,"line":2241},[478,9946,4561],{"class":714},[478,9948,9949],{"class":480,"line":2246},[478,9950,9951],{"class":770},"\u002F\u002F给老师和学生赋值的函数\n",[478,9953,9954,9956,9959,9961,9963,9966,9969,9972,9974,9976],{"class":480,"line":2260},[478,9955,5930],{"class":710},[478,9957,9958],{"class":484}," allocateSpace",[478,9960,263],{"class":714},[478,9962,8325],{"class":710},[478,9964,9965],{"class":484}," Teacher",[478,9967,9968],{"class":5782}," tArray",[478,9970,9971],{"class":714},"[],",[478,9973,717],{"class":710},[478,9975,7897],{"class":5782},[478,9977,720],{"class":714},[478,9979,9980],{"class":480,"line":2265},[478,9981,2114],{"class":714},[478,9983,9984,9987,9989,9992],{"class":480,"line":2294},[478,9985,9986],{"class":714},"    string nameSeed",[478,9988,759],{"class":710},[478,9990,9991],{"class":488},"\"ABCDE\"",[478,9993,1859],{"class":714},[478,9995,9996,9998,10000,10002,10005,10007,10009,10012,10014,10017,10019],{"class":480,"line":2299},[478,9997,3767],{"class":710},[478,9999,219],{"class":714},[478,10001,717],{"class":710},[478,10003,10004],{"class":714}," i ",[478,10006,759],{"class":710},[478,10008,4659],{"class":495},[478,10010,10011],{"class":714},"; i ",[478,10013,1605],{"class":710},[478,10015,10016],{"class":714}," len; i",[478,10018,2858],{"class":710},[478,10020,720],{"class":714},[478,10022,10023],{"class":480,"line":2316},[478,10024,2596],{"class":714},[478,10026,10027,10030,10032,10035],{"class":480,"line":2321},[478,10028,10029],{"class":714},"        tArray[i].tName ",[478,10031,759],{"class":710},[478,10033,10034],{"class":488}," \"Teacher_\"",[478,10036,1859],{"class":714},[478,10038,10039,10041,10044],{"class":480,"line":2326},[478,10040,10029],{"class":714},[478,10042,10043],{"class":710},"+=",[478,10045,10046],{"class":714},"nameSeed[i];\n",[478,10048,10049],{"class":480,"line":2331},[478,10050,2966],{"emptyLinePlaceholder":640},[478,10052,10053],{"class":480,"line":2345},[478,10054,10055],{"class":770},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[478,10057,10058,10060,10062,10064,10067,10069,10071,10074,10076,10078,10081,10083],{"class":480,"line":2350},[478,10059,3969],{"class":710},[478,10061,219],{"class":714},[478,10063,717],{"class":710},[478,10065,10066],{"class":714}," j ",[478,10068,759],{"class":710},[478,10070,4659],{"class":495},[478,10072,10073],{"class":714},"; j ",[478,10075,1605],{"class":710},[478,10077,2714],{"class":495},[478,10079,10080],{"class":714},"; j",[478,10082,2858],{"class":710},[478,10084,720],{"class":714},[478,10086,10087],{"class":480,"line":3143},[478,10088,3076],{"class":714},[478,10090,10091,10094,10096,10099],{"class":480,"line":3157},[478,10092,10093],{"class":714},"            tArray[i].sArray[j].sName ",[478,10095,759],{"class":710},[478,10097,10098],{"class":488}," \"Student_\"",[478,10100,1859],{"class":714},[478,10102,10103,10105,10107],{"class":480,"line":3165},[478,10104,10093],{"class":714},[478,10106,10043],{"class":710},[478,10108,10109],{"class":714}," nameSeed[j];\n",[478,10111,10112,10115,10118,10120,10122,10124,10126,10128,10130,10132,10134],{"class":480,"line":3170},[478,10113,10114],{"class":710},"            int",[478,10116,10117],{"class":714}," random",[478,10119,759],{"class":710},[478,10121,2990],{"class":484},[478,10123,2993],{"class":714},[478,10125,1029],{"class":710},[478,10127,1602],{"class":495},[478,10129,1181],{"class":710},[478,10131,1102],{"class":495},[478,10133,767],{"class":714},[478,10135,10136],{"class":770},"\u002F\u002F40~99\n",[478,10138,10139,10142,10144,10146],{"class":480,"line":3176},[478,10140,10141],{"class":714},"            tArray[i].sArray[j].age ",[478,10143,759],{"class":710},[478,10145,9516],{"class":495},[478,10147,1859],{"class":714},[478,10149,10150,10153,10155],{"class":480,"line":3182},[478,10151,10152],{"class":714},"            tArray[i].sArray[j].score ",[478,10154,759],{"class":710},[478,10156,10157],{"class":714}," random;\n",[478,10159,10160],{"class":480,"line":3187},[478,10161,3095],{"class":714},[478,10163,10164],{"class":480,"line":8514},[478,10165,2753],{"class":714},[478,10167,10168],{"class":480,"line":8538},[478,10169,2133],{"class":714},[478,10171,10172],{"class":480,"line":8543},[478,10173,10174],{"class":770},"\u002F\u002F打印所有信息的函数\n",[478,10176,10177,10179,10182,10184,10186,10188,10190,10193,10195,10197],{"class":480,"line":8549},[478,10178,5930],{"class":710},[478,10180,10181],{"class":484}," printInfo",[478,10183,263],{"class":714},[478,10185,8325],{"class":710},[478,10187,9965],{"class":484},[478,10189,9968],{"class":5782},[478,10191,10192],{"class":714},"[], ",[478,10194,717],{"class":710},[478,10196,7897],{"class":5782},[478,10198,720],{"class":714},[478,10200,10201],{"class":480,"line":8576},[478,10202,2114],{"class":714},[478,10204,10205,10207,10209,10211,10213,10215,10217,10219,10221,10223,10225],{"class":480,"line":8581},[478,10206,3767],{"class":710},[478,10208,219],{"class":714},[478,10210,717],{"class":710},[478,10212,10004],{"class":714},[478,10214,759],{"class":710},[478,10216,4659],{"class":495},[478,10218,10011],{"class":714},[478,10220,1605],{"class":710},[478,10222,10016],{"class":714},[478,10224,2858],{"class":710},[478,10226,720],{"class":714},[478,10228,10229],{"class":480,"line":8587},[478,10230,2596],{"class":714},[478,10232,10233,10236,10238,10241,10243,10246,10248],{"class":480,"line":8599},[478,10234,10235],{"class":714},"        cout ",[478,10237,1739],{"class":710},[478,10239,10240],{"class":488}," \"Teacher: \"",[478,10242,2013],{"class":710},[478,10244,10245],{"class":714}," tArray[i].tName ",[478,10247,1739],{"class":710},[478,10249,9406],{"class":714},[478,10251,10252,10254,10256,10258,10260,10262,10264,10266,10268,10270,10272,10274],{"class":480,"line":8611},[478,10253,3969],{"class":710},[478,10255,219],{"class":714},[478,10257,717],{"class":710},[478,10259,10066],{"class":714},[478,10261,759],{"class":710},[478,10263,4659],{"class":495},[478,10265,10073],{"class":714},[478,10267,1605],{"class":710},[478,10269,2714],{"class":495},[478,10271,10080],{"class":714},[478,10273,2858],{"class":710},[478,10275,720],{"class":714},[478,10277,10278],{"class":480,"line":8623},[478,10279,3076],{"class":714},[478,10281,10283,10286,10288,10291,10293,10296,10298,10301,10303],{"class":480,"line":10282},47,[478,10284,10285],{"class":714},"            cout ",[478,10287,1739],{"class":710},[478,10289,10290],{"class":488}," \"",[478,10292,1799],{"class":495},[478,10294,10295],{"class":488},"Student: \"",[478,10297,2013],{"class":710},[478,10299,10300],{"class":714}," tArray[i].sArray[j].sName",[478,10302,1739],{"class":710},[478,10304,1761],{"class":714},[478,10306,10308,10310,10312,10314,10316,10319,10321,10324,10326],{"class":480,"line":10307},48,[478,10309,10285],{"class":714},[478,10311,1739],{"class":710},[478,10313,10290],{"class":488},[478,10315,1799],{"class":495},[478,10317,10318],{"class":488},"Age: \"",[478,10320,2013],{"class":710},[478,10322,10323],{"class":714}," tArray[i].sArray[j].age ",[478,10325,1739],{"class":710},[478,10327,9406],{"class":714},[478,10329,10331,10333,10335,10337,10339,10342,10344,10347,10349],{"class":480,"line":10330},49,[478,10332,10285],{"class":714},[478,10334,1739],{"class":710},[478,10336,10290],{"class":488},[478,10338,1799],{"class":495},[478,10340,10341],{"class":488},"Score: \"",[478,10343,2013],{"class":710},[478,10345,10346],{"class":714}," tArray[i].sArray[j].score ",[478,10348,1739],{"class":710},[478,10350,10351],{"class":714}," endl;   \n",[478,10353,10355],{"class":480,"line":10354},50,[478,10356,3095],{"class":714},[478,10358,10360],{"class":480,"line":10359},51,[478,10361,2753],{"class":714},[478,10363,10365],{"class":480,"line":10364},52,[478,10366,2133],{"class":714},[478,10368,10370,10372,10374],{"class":480,"line":10369},53,[478,10371,717],{"class":710},[478,10373,2539],{"class":484},[478,10375,2542],{"class":714},[478,10377,10379],{"class":480,"line":10378},54,[478,10380,2114],{"class":714},[478,10382,10384],{"class":480,"line":10383},55,[478,10385,10386],{"class":770},"    \u002F\u002F随机数种子\n",[478,10388,10390,10392,10394,10396,10398,10400,10402,10404,10406],{"class":480,"line":10389},56,[478,10391,2939],{"class":484},[478,10393,2942],{"class":714},[478,10395,2945],{"class":710},[478,10397,2948],{"class":710},[478,10399,222],{"class":714},[478,10401,2953],{"class":484},[478,10403,263],{"class":714},[478,10405,2958],{"class":495},[478,10407,2961],{"class":714},[478,10409,10411],{"class":480,"line":10410},57,[478,10412,10413],{"class":770},"    \u002F\u002F1.创建3名老师的数组\n",[478,10415,10417,10419,10421,10424,10426],{"class":480,"line":10416},58,[478,10418,8461],{"class":710},[478,10420,9965],{"class":484},[478,10422,10423],{"class":714}," tArray[",[478,10425,783],{"class":495},[478,10427,5256],{"class":714},[478,10429,10431],{"class":480,"line":10430},59,[478,10432,10433],{"class":770},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[478,10435,10437,10439,10442,10444,10447,10450,10452,10454,10457,10459],{"class":480,"line":10436},60,[478,10438,2551],{"class":710},[478,10440,10441],{"class":714}," len ",[478,10443,759],{"class":710},[478,10445,10446],{"class":710}," sizeof",[478,10448,10449],{"class":714},"(tArray) ",[478,10451,1284],{"class":710},[478,10453,10446],{"class":710},[478,10455,10456],{"class":714},"(tArray[",[478,10458,895],{"class":495},[478,10460,4422],{"class":714},[478,10462,10464,10467],{"class":480,"line":10463},61,[478,10465,10466],{"class":484},"    allocateSpace",[478,10468,10469],{"class":714},"(tArray, len);\n",[478,10471,10473],{"class":480,"line":10472},62,[478,10474,10475],{"class":770},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[478,10477,10479,10482],{"class":480,"line":10478},63,[478,10480,10481],{"class":484},"    printInfo",[478,10483,10469],{"class":714},[478,10485,10487],{"class":480,"line":10486},64,[478,10488,2966],{"emptyLinePlaceholder":640},[478,10490,10492],{"class":480,"line":10491},65,[478,10493,2133],{"class":714},[29,10495,10496],{"start":565},[32,10497,10498,10501],{},[45,10499,10500],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10503,10504],{},"五名英雄信息如下：",[469,10506,10510],{"className":10507,"code":10508,"language":10509,"meta":54,"style":54},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[475,10511,10512,10530,10547,10564,10581],{"__ignoreMap":54},[478,10513,10514,10516,10519,10521,10523,10525,10528],{"class":480,"line":481},[478,10515,5483],{"class":714},[478,10517,10518],{"class":488},"\"刘备\"",[478,10520,1079],{"class":714},[478,10522,1470],{"class":495},[478,10524,1079],{"class":714},[478,10526,10527],{"class":488},"\"男\"",[478,10529,5496],{"class":714},[478,10531,10532,10534,10537,10539,10541,10543,10545],{"class":480,"line":565},[478,10533,5483],{"class":714},[478,10535,10536],{"class":488},"\"关羽\"",[478,10538,1079],{"class":714},[478,10540,1445],{"class":495},[478,10542,1079],{"class":714},[478,10544,10527],{"class":488},[478,10546,5496],{"class":714},[478,10548,10549,10551,10554,10556,10558,10560,10562],{"class":480,"line":579},[478,10550,5483],{"class":714},[478,10552,10553],{"class":488},"\"张飞\"",[478,10555,1079],{"class":714},[478,10557,1396],{"class":495},[478,10559,1079],{"class":714},[478,10561,10527],{"class":488},[478,10563,5496],{"class":714},[478,10565,10566,10568,10571,10573,10575,10577,10579],{"class":480,"line":593},[478,10567,5483],{"class":714},[478,10569,10570],{"class":488},"\"赵云\"",[478,10572,1079],{"class":714},[478,10574,1420],{"class":495},[478,10576,1079],{"class":714},[478,10578,10527],{"class":488},[478,10580,5496],{"class":714},[478,10582,10583,10585,10588,10590,10592,10594,10597],{"class":480,"line":1769},[478,10584,5483],{"class":714},[478,10586,10587],{"class":488},"\"貂蝉\"",[478,10589,1079],{"class":714},[478,10591,1372],{"class":495},[478,10593,1079],{"class":714},[478,10595,10596],{"class":488},"\"女\"",[478,10598,5496],{"class":714},[19,10600,10601],{},"代码：",[469,10603,10605],{"className":701,"code":10604,"language":703,"meta":54,"style":54},"#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",[475,10606,10607,10613,10623,10629,10636,10640,10644,10650,10655,10659,10664,10687,10691,10716,10720,10753,10758,10787,10792,10807,10833,10853,10858,10863,10867,10871,10876,10898,10902,10926,10930,10992,10996,11000,11008,11012,11017,11028,11032,11048,11064,11080,11096,11112,11116,11136,11158,11163,11176,11183,11188,11194,11199,11212,11218],{"__ignoreMap":54},[478,10608,10609,10611],{"class":480,"line":481},[478,10610,2516],{"class":710},[478,10612,2519],{"class":488},[478,10614,10615,10617,10619,10621],{"class":480,"line":565},[478,10616,2524],{"class":710},[478,10618,2527],{"class":710},[478,10620,2530],{"class":484},[478,10622,1859],{"class":714},[478,10624,10625,10627],{"class":480,"line":579},[478,10626,2516],{"class":710},[478,10628,8315],{"class":488},[478,10630,10631,10633],{"class":480,"line":593},[478,10632,8325],{"class":710},[478,10634,10635],{"class":484}," Sanguo\n",[478,10637,10638],{"class":480,"line":1769},[478,10639,2114],{"class":714},[478,10641,10642],{"class":480,"line":1783},[478,10643,8351],{"class":714},[478,10645,10646,10648],{"class":480,"line":1789},[478,10647,2551],{"class":710},[478,10649,8363],{"class":714},[478,10651,10652],{"class":480,"line":1880},[478,10653,10654],{"class":714},"    string gender;\n",[478,10656,10657],{"class":480,"line":1886},[478,10658,4561],{"class":714},[478,10660,10661],{"class":480,"line":1898},[478,10662,10663],{"class":770},"\u002F\u002F定义排序函数\n",[478,10665,10666,10668,10670,10672,10675,10677,10679,10681,10683,10685],{"class":480,"line":2180},[478,10667,5930],{"class":710},[478,10669,7882],{"class":484},[478,10671,263],{"class":714},[478,10673,10674],{"class":484},"Sanguo",[478,10676,7084],{"class":710},[478,10678,1391],{"class":5782},[478,10680,1079],{"class":714},[478,10682,717],{"class":710},[478,10684,7897],{"class":5782},[478,10686,720],{"class":714},[478,10688,10689],{"class":480,"line":2185},[478,10690,2114],{"class":714},[478,10692,10693,10695,10697,10699,10701,10703,10705,10707,10709,10712,10714],{"class":480,"line":2191},[478,10694,3767],{"class":710},[478,10696,263],{"class":714},[478,10698,717],{"class":710},[478,10700,3598],{"class":714},[478,10702,759],{"class":710},[478,10704,895],{"class":495},[478,10706,3605],{"class":714},[478,10708,1605],{"class":710},[478,10710,10711],{"class":714},"len;i",[478,10713,2858],{"class":710},[478,10715,720],{"class":714},[478,10717,10718],{"class":480,"line":2196},[478,10719,2596],{"class":714},[478,10721,10722,10725,10727,10729,10731,10733,10735,10737,10739,10741,10743,10745,10747,10749,10751],{"class":480,"line":2210},[478,10723,10724],{"class":710},"     for",[478,10726,219],{"class":714},[478,10728,717],{"class":710},[478,10730,3976],{"class":714},[478,10732,759],{"class":710},[478,10734,895],{"class":495},[478,10736,3983],{"class":714},[478,10738,1605],{"class":710},[478,10740,7924],{"class":714},[478,10742,1232],{"class":710},[478,10744,193],{"class":495},[478,10746,1232],{"class":710},[478,10748,4116],{"class":714},[478,10750,2858],{"class":710},[478,10752,720],{"class":714},[478,10754,10755],{"class":480,"line":2215},[478,10756,10757],{"class":714},"     {\n",[478,10759,10760,10763,10766,10768,10771,10773,10776,10778,10780,10782,10784],{"class":480,"line":2221},[478,10761,10762],{"class":710},"         if",[478,10764,10765],{"class":714}," ((s",[478,10767,1181],{"class":710},[478,10769,10770],{"class":714},"j)->age ",[478,10772,1655],{"class":710},[478,10774,10775],{"class":714}," (s",[478,10777,1181],{"class":710},[478,10779,1167],{"class":714},[478,10781,1181],{"class":710},[478,10783,193],{"class":495},[478,10785,10786],{"class":714},")->age)\n",[478,10788,10789],{"class":480,"line":2241},[478,10790,10791],{"class":714},"         {\n",[478,10793,10794,10797,10799,10802,10804],{"class":480,"line":2246},[478,10795,10796],{"class":714},"             Sanguo temp",[478,10798,7719],{"class":710},[478,10800,10801],{"class":714},"(s",[478,10803,1181],{"class":710},[478,10805,10806],{"class":714},"j);\n",[478,10808,10809,10812,10814,10816,10819,10821,10823,10825,10827,10829,10831],{"class":480,"line":2260},[478,10810,10811],{"class":710},"             *",[478,10813,10801],{"class":714},[478,10815,1181],{"class":710},[478,10817,10818],{"class":714},"j)",[478,10820,7719],{"class":710},[478,10822,10801],{"class":714},[478,10824,1181],{"class":710},[478,10826,1167],{"class":714},[478,10828,1181],{"class":710},[478,10830,193],{"class":495},[478,10832,3285],{"class":714},[478,10834,10835,10837,10839,10841,10843,10845,10847,10849,10851],{"class":480,"line":2265},[478,10836,10811],{"class":710},[478,10838,10801],{"class":714},[478,10840,1181],{"class":710},[478,10842,1167],{"class":714},[478,10844,1181],{"class":710},[478,10846,193],{"class":495},[478,10848,222],{"class":714},[478,10850,759],{"class":710},[478,10852,4846],{"class":714},[478,10854,10855],{"class":480,"line":2294},[478,10856,10857],{"class":714},"         }\n",[478,10859,10860],{"class":480,"line":2299},[478,10861,10862],{"class":714},"     }\n",[478,10864,10865],{"class":480,"line":2316},[478,10866,2753],{"class":714},[478,10868,10869],{"class":480,"line":2321},[478,10870,2133],{"class":714},[478,10872,10873],{"class":480,"line":2326},[478,10874,10875],{"class":770},"\u002F\u002F定义打印函数\n",[478,10877,10878,10880,10882,10884,10886,10888,10890,10892,10894,10896],{"class":480,"line":2331},[478,10879,5930],{"class":710},[478,10881,10181],{"class":484},[478,10883,263],{"class":714},[478,10885,10674],{"class":484},[478,10887,7084],{"class":710},[478,10889,1391],{"class":5782},[478,10891,1079],{"class":714},[478,10893,717],{"class":710},[478,10895,7897],{"class":5782},[478,10897,720],{"class":714},[478,10899,10900],{"class":480,"line":2345},[478,10901,2114],{"class":714},[478,10903,10904,10906,10908,10910,10912,10914,10916,10918,10920,10922,10924],{"class":480,"line":2350},[478,10905,3767],{"class":710},[478,10907,219],{"class":714},[478,10909,717],{"class":710},[478,10911,3598],{"class":714},[478,10913,759],{"class":710},[478,10915,895],{"class":495},[478,10917,3605],{"class":714},[478,10919,1605],{"class":710},[478,10921,10711],{"class":714},[478,10923,2858],{"class":710},[478,10925,720],{"class":714},[478,10927,10928],{"class":480,"line":3143},[478,10929,2596],{"class":714},[478,10931,10932,10934,10936,10938,10940,10943,10945,10947,10949,10952,10954,10956,10958,10961,10963,10965,10967,10970,10972,10974,10976,10979,10981,10983,10985,10988,10990],{"class":480,"line":3157},[478,10933,4017],{"class":714},[478,10935,1739],{"class":710},[478,10937,952],{"class":488},[478,10939,1799],{"class":495},[478,10941,10942],{"class":488},"姓名：\"",[478,10944,1739],{"class":710},[478,10946,10801],{"class":714},[478,10948,1181],{"class":710},[478,10950,10951],{"class":714},"i)->name",[478,10953,1739],{"class":710},[478,10955,952],{"class":488},[478,10957,1799],{"class":495},[478,10959,10960],{"class":488},"年龄：\"",[478,10962,1739],{"class":710},[478,10964,10801],{"class":714},[478,10966,1181],{"class":710},[478,10968,10969],{"class":714},"i)->age",[478,10971,1739],{"class":710},[478,10973,952],{"class":488},[478,10975,1799],{"class":495},[478,10977,10978],{"class":488},"性别：\"",[478,10980,1739],{"class":710},[478,10982,10801],{"class":714},[478,10984,1181],{"class":710},[478,10986,10987],{"class":714},"i)->gender",[478,10989,1739],{"class":710},[478,10991,1761],{"class":714},[478,10993,10994],{"class":480,"line":3165},[478,10995,2753],{"class":714},[478,10997,10998],{"class":480,"line":3170},[478,10999,2133],{"class":714},[478,11001,11002,11004,11006],{"class":480,"line":3176},[478,11003,717],{"class":710},[478,11005,2539],{"class":484},[478,11007,2542],{"class":714},[478,11009,11010],{"class":480,"line":3182},[478,11011,2114],{"class":714},[478,11013,11014],{"class":480,"line":3187},[478,11015,11016],{"class":770},"    \u002F\u002F定义结构体变量\n",[478,11018,11019,11022,11024,11026],{"class":480,"line":8514},[478,11020,11021],{"class":714},"    Sanguo s1[",[478,11023,1020],{"class":495},[478,11025,1635],{"class":714},[478,11027,5474],{"class":710},[478,11029,11030],{"class":480,"line":8538},[478,11031,2596],{"class":714},[478,11033,11034,11036,11038,11040,11042,11044,11046],{"class":480,"line":8543},[478,11035,5483],{"class":714},[478,11037,10518],{"class":488},[478,11039,1079],{"class":714},[478,11041,1470],{"class":495},[478,11043,1079],{"class":714},[478,11045,10527],{"class":488},[478,11047,5496],{"class":714},[478,11049,11050,11052,11054,11056,11058,11060,11062],{"class":480,"line":8549},[478,11051,5483],{"class":714},[478,11053,10536],{"class":488},[478,11055,1079],{"class":714},[478,11057,1445],{"class":495},[478,11059,1079],{"class":714},[478,11061,10527],{"class":488},[478,11063,5496],{"class":714},[478,11065,11066,11068,11070,11072,11074,11076,11078],{"class":480,"line":8576},[478,11067,5483],{"class":714},[478,11069,10553],{"class":488},[478,11071,1079],{"class":714},[478,11073,1396],{"class":495},[478,11075,1079],{"class":714},[478,11077,10527],{"class":488},[478,11079,5496],{"class":714},[478,11081,11082,11084,11086,11088,11090,11092,11094],{"class":480,"line":8581},[478,11083,5483],{"class":714},[478,11085,10570],{"class":488},[478,11087,1079],{"class":714},[478,11089,1420],{"class":495},[478,11091,1079],{"class":714},[478,11093,10527],{"class":488},[478,11095,5496],{"class":714},[478,11097,11098,11100,11102,11104,11106,11108,11110],{"class":480,"line":8587},[478,11099,5483],{"class":714},[478,11101,10587],{"class":488},[478,11103,1079],{"class":714},[478,11105,1372],{"class":495},[478,11107,1079],{"class":714},[478,11109,10596],{"class":488},[478,11111,5496],{"class":714},[478,11113,11114],{"class":480,"line":8599},[478,11115,5517],{"class":714},[478,11117,11118,11120,11122,11124,11127,11129,11132,11134],{"class":480,"line":8611},[478,11119,2551],{"class":710},[478,11121,7897],{"class":714},[478,11123,4769],{"class":710},[478,11125,11126],{"class":714},"(s1)",[478,11128,4775],{"class":710},[478,11130,11131],{"class":714},"(s1[",[478,11133,895],{"class":495},[478,11135,4422],{"class":714},[478,11137,11138,11141,11143,11146,11148,11151,11154,11156],{"class":480,"line":8623},[478,11139,11140],{"class":714},"    Sanguo ",[478,11142,1155],{"class":710},[478,11144,11145],{"class":714},"s ",[478,11147,759],{"class":710},[478,11149,11150],{"class":710}," &",[478,11152,11153],{"class":714},"s1[",[478,11155,895],{"class":495},[478,11157,5256],{"class":714},[478,11159,11160],{"class":480,"line":10282},[478,11161,11162],{"class":770},"    \u002F\u002F排序前：\n",[478,11164,11165,11167,11169,11172,11174],{"class":480,"line":10307},[478,11166,7095],{"class":714},[478,11168,1739],{"class":710},[478,11170,11171],{"class":488}," \"排序前：\"",[478,11173,2013],{"class":710},[478,11175,9406],{"class":714},[478,11177,11178,11180],{"class":480,"line":10330},[478,11179,10481],{"class":484},[478,11181,11182],{"class":714},"(s,len);\n",[478,11184,11185],{"class":480,"line":10354},[478,11186,11187],{"class":770},"    \u002F\u002F调用排序函数\n",[478,11189,11190,11192],{"class":480,"line":10359},[478,11191,8164],{"class":484},[478,11193,11182],{"class":714},[478,11195,11196],{"class":480,"line":10364},[478,11197,11198],{"class":770},"    \u002F\u002F排序后\n",[478,11200,11201,11203,11205,11208,11210],{"class":480,"line":10369},[478,11202,7095],{"class":714},[478,11204,1739],{"class":710},[478,11206,11207],{"class":488}," \"排序后：\"",[478,11209,2013],{"class":710},[478,11211,9406],{"class":714},[478,11213,11214,11216],{"class":480,"line":10378},[478,11215,10481],{"class":484},[478,11217,11182],{"class":714},[478,11219,11220],{"class":480,"line":10383},[478,11221,2133],{"class":714},[19,11223,11224,11225,11227],{},"注意：使用指针时直接用传首地址**&s",[478,11226,895],{},"**",[617,11229,11230],{},"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":54,"searchDepth":565,"depth":565,"links":11232},[11233,11234,11235,11236,11237,11238,11239],{"id":8269,"depth":565,"text":8270},{"id":8631,"depth":565,"text":8632},{"id":8900,"depth":565,"text":8901},{"id":9065,"depth":565,"text":9066},{"id":9281,"depth":565,"text":9282},{"id":9602,"depth":565,"text":9603},{"id":9830,"depth":565,"text":9831},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8258,"description":8266},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11246,"title":11247,"body":11248,"description":54,"extension":638,"meta":12591,"navigation":640,"path":12592,"seo":12593,"stem":12594,"__hash__":12595},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11249,"toc":12585},[11250,11253,11257,11263,11277,11282,11285,11289,11296,11302,11305,11312,11318,11323,11326,11329,11332,11896,11899,11913,11917,11922,11938,12078,12081,12087,12090,12095,12103,12211,12214,12219,12222,12227,12230,12236,12239,12582],[10,11251,11247],{"id":11252},"_5程序内存模型",[14,11254,11256],{"id":11255},"_51内存分区模型","5.1内存分区模型",[19,11258,11259,11260],{},"C++程序在执行时，将内存大方向划分为",[45,11261,11262],{},"4个区域",[1702,11264,11265,11268,11271,11274],{},[32,11266,11267],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[32,11269,11270],{},"全局区：存放全局变量和静态变量以及常量",[32,11272,11273],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[32,11275,11276],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11278,11279],{},[45,11280,11281],{},"内存四区意义：",[19,11283,11284],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[129,11286,11288],{"id":11287},"_511程序运行前","5.1.1程序运行前",[19,11290,11291,11292,11295],{},"​\t在程序编译后，生成了exe可执行程序，",[45,11293,11294],{},"未执行该程序前","分为两个区域",[19,11297,11298,11299],{},"​\t",[45,11300,11301],{},"代码区：",[19,11303,11304],{},"​\t\t存放 CPU 执行的机器指令",[19,11306,11307,11308,11311],{},"​\t\t代码区是",[45,11309,11310],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11313,11307,11314,11317],{},[45,11315,11316],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11319,11298,11320],{},[45,11321,11322],{},"全局区：",[19,11324,11325],{},"​\t\t全局变量和静态变量存放在此.",[19,11327,11328],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11330,11331],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[469,11333,11335],{"className":701,"code":11334,"language":703,"meta":54,"style":54},"\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",[475,11336,11337,11342,11355,11368,11372,11377,11392,11407,11411,11420,11424,11429,11442,11455,11459,11464,11490,11516,11520,11547,11573,11577,11582,11598,11613,11617,11643,11669,11673,11698,11723,11727,11753,11779,11783,11799,11814,11840,11866,11870,11880,11884,11892],{"__ignoreMap":54},[478,11338,11339],{"class":480,"line":481},[478,11340,11341],{"class":770},"\u002F\u002F全局变量\n",[478,11343,11344,11346,11349,11351,11353],{"class":480,"line":565},[478,11345,717],{"class":710},[478,11347,11348],{"class":714}," g_a ",[478,11350,759],{"class":710},[478,11352,2604],{"class":495},[478,11354,1859],{"class":714},[478,11356,11357,11359,11362,11364,11366],{"class":480,"line":579},[478,11358,717],{"class":710},[478,11360,11361],{"class":714}," g_b ",[478,11363,759],{"class":710},[478,11365,2604],{"class":495},[478,11367,1859],{"class":714},[478,11369,11370],{"class":480,"line":593},[478,11371,2966],{"emptyLinePlaceholder":640},[478,11373,11374],{"class":480,"line":1769},[478,11375,11376],{"class":770},"\u002F\u002F全局常量\n",[478,11378,11379,11381,11383,11386,11388,11390],{"class":480,"line":1783},[478,11380,7358],{"class":710},[478,11382,2948],{"class":710},[478,11384,11385],{"class":714}," c_g_a ",[478,11387,759],{"class":710},[478,11389,2604],{"class":495},[478,11391,1859],{"class":714},[478,11393,11394,11396,11398,11401,11403,11405],{"class":480,"line":1789},[478,11395,7358],{"class":710},[478,11397,2948],{"class":710},[478,11399,11400],{"class":714}," c_g_b ",[478,11402,759],{"class":710},[478,11404,2604],{"class":495},[478,11406,1859],{"class":714},[478,11408,11409],{"class":480,"line":1880},[478,11410,2966],{"emptyLinePlaceholder":640},[478,11412,11413,11415,11417],{"class":480,"line":1886},[478,11414,717],{"class":710},[478,11416,2539],{"class":484},[478,11418,11419],{"class":714},"() {\n",[478,11421,11422],{"class":480,"line":1898},[478,11423,2966],{"emptyLinePlaceholder":640},[478,11425,11426],{"class":480,"line":2180},[478,11427,11428],{"class":770},"    \u002F\u002F局部变量\n",[478,11430,11431,11433,11436,11438,11440],{"class":480,"line":2185},[478,11432,2551],{"class":710},[478,11434,11435],{"class":714}," a ",[478,11437,759],{"class":710},[478,11439,2604],{"class":495},[478,11441,1859],{"class":714},[478,11443,11444,11446,11449,11451,11453],{"class":480,"line":2191},[478,11445,2551],{"class":710},[478,11447,11448],{"class":714}," b ",[478,11450,759],{"class":710},[478,11452,2604],{"class":495},[478,11454,1859],{"class":714},[478,11456,11457],{"class":480,"line":2196},[478,11458,2966],{"emptyLinePlaceholder":640},[478,11460,11461],{"class":480,"line":2210},[478,11462,11463],{"class":770},"    \u002F\u002F打印地址\n",[478,11465,11466,11468,11470,11473,11475,11477,11479,11481,11483,11486,11488],{"class":480,"line":2215},[478,11467,7095],{"class":714},[478,11469,1739],{"class":710},[478,11471,11472],{"class":488}," \"局部变量a地址为： \"",[478,11474,2013],{"class":710},[478,11476,219],{"class":714},[478,11478,717],{"class":710},[478,11480,222],{"class":714},[478,11482,1054],{"class":710},[478,11484,11485],{"class":714},"a ",[478,11487,1739],{"class":710},[478,11489,9406],{"class":714},[478,11491,11492,11494,11496,11499,11501,11503,11505,11507,11509,11512,11514],{"class":480,"line":2221},[478,11493,7095],{"class":714},[478,11495,1739],{"class":710},[478,11497,11498],{"class":488}," \"局部变量b地址为： \"",[478,11500,2013],{"class":710},[478,11502,219],{"class":714},[478,11504,717],{"class":710},[478,11506,222],{"class":714},[478,11508,1054],{"class":710},[478,11510,11511],{"class":714},"b ",[478,11513,1739],{"class":710},[478,11515,9406],{"class":714},[478,11517,11518],{"class":480,"line":2241},[478,11519,2966],{"emptyLinePlaceholder":640},[478,11521,11522,11524,11526,11529,11531,11534,11536,11538,11540,11543,11545],{"class":480,"line":2246},[478,11523,7095],{"class":714},[478,11525,1739],{"class":710},[478,11527,11528],{"class":488}," \"全局变量g_a地址为： \"",[478,11530,2013],{"class":710},[478,11532,11533],{"class":714},"  (",[478,11535,717],{"class":710},[478,11537,222],{"class":714},[478,11539,1054],{"class":710},[478,11541,11542],{"class":714},"g_a ",[478,11544,1739],{"class":710},[478,11546,9406],{"class":714},[478,11548,11549,11551,11553,11556,11558,11560,11562,11564,11566,11569,11571],{"class":480,"line":2260},[478,11550,7095],{"class":714},[478,11552,1739],{"class":710},[478,11554,11555],{"class":488}," \"全局变量g_b地址为： \"",[478,11557,2013],{"class":710},[478,11559,11533],{"class":714},[478,11561,717],{"class":710},[478,11563,222],{"class":714},[478,11565,1054],{"class":710},[478,11567,11568],{"class":714},"g_b ",[478,11570,1739],{"class":710},[478,11572,9406],{"class":714},[478,11574,11575],{"class":480,"line":2265},[478,11576,2966],{"emptyLinePlaceholder":640},[478,11578,11579],{"class":480,"line":2294},[478,11580,11581],{"class":770},"    \u002F\u002F静态变量\n",[478,11583,11584,11587,11589,11592,11594,11596],{"class":480,"line":2299},[478,11585,11586],{"class":710},"    static",[478,11588,2948],{"class":710},[478,11590,11591],{"class":714}," s_a ",[478,11593,759],{"class":710},[478,11595,2604],{"class":495},[478,11597,1859],{"class":714},[478,11599,11600,11602,11604,11607,11609,11611],{"class":480,"line":2316},[478,11601,11586],{"class":710},[478,11603,2948],{"class":710},[478,11605,11606],{"class":714}," s_b ",[478,11608,759],{"class":710},[478,11610,2604],{"class":495},[478,11612,1859],{"class":714},[478,11614,11615],{"class":480,"line":2321},[478,11616,2966],{"emptyLinePlaceholder":640},[478,11618,11619,11621,11623,11626,11628,11630,11632,11634,11636,11639,11641],{"class":480,"line":2326},[478,11620,7095],{"class":714},[478,11622,1739],{"class":710},[478,11624,11625],{"class":488}," \"静态变量s_a地址为： \"",[478,11627,2013],{"class":710},[478,11629,219],{"class":714},[478,11631,717],{"class":710},[478,11633,222],{"class":714},[478,11635,1054],{"class":710},[478,11637,11638],{"class":714},"s_a ",[478,11640,1739],{"class":710},[478,11642,9406],{"class":714},[478,11644,11645,11647,11649,11652,11654,11656,11658,11660,11662,11665,11667],{"class":480,"line":2331},[478,11646,7095],{"class":714},[478,11648,1739],{"class":710},[478,11650,11651],{"class":488}," \"静态变量s_b地址为： \"",[478,11653,2013],{"class":710},[478,11655,219],{"class":714},[478,11657,717],{"class":710},[478,11659,222],{"class":714},[478,11661,1054],{"class":710},[478,11663,11664],{"class":714},"s_b ",[478,11666,1739],{"class":710},[478,11668,9406],{"class":714},[478,11670,11671],{"class":480,"line":2345},[478,11672,2966],{"emptyLinePlaceholder":640},[478,11674,11675,11677,11679,11682,11684,11686,11688,11690,11692,11694,11696],{"class":480,"line":2350},[478,11676,7095],{"class":714},[478,11678,1739],{"class":710},[478,11680,11681],{"class":488}," \"字符串常量地址为： \"",[478,11683,2013],{"class":710},[478,11685,219],{"class":714},[478,11687,717],{"class":710},[478,11689,222],{"class":714},[478,11691,1054],{"class":710},[478,11693,1756],{"class":488},[478,11695,2013],{"class":710},[478,11697,9406],{"class":714},[478,11699,11700,11702,11704,11706,11708,11710,11712,11714,11716,11719,11721],{"class":480,"line":3143},[478,11701,7095],{"class":714},[478,11703,1739],{"class":710},[478,11705,11681],{"class":488},[478,11707,2013],{"class":710},[478,11709,219],{"class":714},[478,11711,717],{"class":710},[478,11713,222],{"class":714},[478,11715,1054],{"class":710},[478,11717,11718],{"class":488},"\"hello world1\"",[478,11720,2013],{"class":710},[478,11722,9406],{"class":714},[478,11724,11725],{"class":480,"line":3157},[478,11726,2966],{"emptyLinePlaceholder":640},[478,11728,11729,11731,11733,11736,11738,11740,11742,11744,11746,11749,11751],{"class":480,"line":3165},[478,11730,7095],{"class":714},[478,11732,1739],{"class":710},[478,11734,11735],{"class":488}," \"全局常量c_g_a地址为： \"",[478,11737,2013],{"class":710},[478,11739,219],{"class":714},[478,11741,717],{"class":710},[478,11743,222],{"class":714},[478,11745,1054],{"class":710},[478,11747,11748],{"class":714},"c_g_a ",[478,11750,1739],{"class":710},[478,11752,9406],{"class":714},[478,11754,11755,11757,11759,11762,11764,11766,11768,11770,11772,11775,11777],{"class":480,"line":3170},[478,11756,7095],{"class":714},[478,11758,1739],{"class":710},[478,11760,11761],{"class":488}," \"全局常量c_g_b地址为： \"",[478,11763,2013],{"class":710},[478,11765,219],{"class":714},[478,11767,717],{"class":710},[478,11769,222],{"class":714},[478,11771,1054],{"class":710},[478,11773,11774],{"class":714},"c_g_b ",[478,11776,1739],{"class":710},[478,11778,9406],{"class":714},[478,11780,11781],{"class":480,"line":3176},[478,11782,2966],{"emptyLinePlaceholder":640},[478,11784,11785,11788,11790,11793,11795,11797],{"class":480,"line":3182},[478,11786,11787],{"class":710},"    const",[478,11789,2948],{"class":710},[478,11791,11792],{"class":714}," c_l_a ",[478,11794,759],{"class":710},[478,11796,2604],{"class":495},[478,11798,1859],{"class":714},[478,11800,11801,11803,11805,11808,11810,11812],{"class":480,"line":3187},[478,11802,11787],{"class":710},[478,11804,2948],{"class":710},[478,11806,11807],{"class":714}," c_l_b ",[478,11809,759],{"class":710},[478,11811,2604],{"class":495},[478,11813,1859],{"class":714},[478,11815,11816,11818,11820,11823,11825,11827,11829,11831,11833,11836,11838],{"class":480,"line":8514},[478,11817,7095],{"class":714},[478,11819,1739],{"class":710},[478,11821,11822],{"class":488}," \"局部常量c_l_a地址为： \"",[478,11824,2013],{"class":710},[478,11826,219],{"class":714},[478,11828,717],{"class":710},[478,11830,222],{"class":714},[478,11832,1054],{"class":710},[478,11834,11835],{"class":714},"c_l_a ",[478,11837,1739],{"class":710},[478,11839,9406],{"class":714},[478,11841,11842,11844,11846,11849,11851,11853,11855,11857,11859,11862,11864],{"class":480,"line":8538},[478,11843,7095],{"class":714},[478,11845,1739],{"class":710},[478,11847,11848],{"class":488}," \"局部常量c_l_b地址为： \"",[478,11850,2013],{"class":710},[478,11852,219],{"class":714},[478,11854,717],{"class":710},[478,11856,222],{"class":714},[478,11858,1054],{"class":710},[478,11860,11861],{"class":714},"c_l_b ",[478,11863,1739],{"class":710},[478,11865,9406],{"class":714},[478,11867,11868],{"class":480,"line":8543},[478,11869,2966],{"emptyLinePlaceholder":640},[478,11871,11872,11874,11876,11878],{"class":480,"line":8549},[478,11873,2869],{"class":484},[478,11875,263],{"class":714},[478,11877,2874],{"class":488},[478,11879,3285],{"class":714},[478,11881,11882],{"class":480,"line":8576},[478,11883,2966],{"emptyLinePlaceholder":640},[478,11885,11886,11888,11890],{"class":480,"line":8581},[478,11887,4656],{"class":710},[478,11889,4659],{"class":495},[478,11891,1859],{"class":714},[478,11893,11894],{"class":480,"line":8587},[478,11895,2133],{"class":714},[19,11897,11898],{},"总结：",[1702,11900,11901,11904,11907,11910],{},[32,11902,11903],{},"c++中程序运行前分为全局区和代码区",[32,11905,11906],{},"代码区特点是共享和只读",[32,11908,11909],{},"全局区中存放全局变量、静态变量、常量",[32,11911,11912],{},"常量区中存放const修饰的全局常量和字符串常量",[129,11914,11916],{"id":11915},"_512程序运行后","5.1.2程序运行后",[29,11918,11919],{},[32,11920,11921],{},"栈区：",[1702,11923,11924,11931],{},[32,11925,11926,11927,11930],{},"由编译器自动分配释放, 存放",[45,11928,11929],{},"函数的参数值,局部变量","等",[32,11932,11933,11934,11937],{},"注意事项：",[45,11935,11936],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[469,11939,11941],{"className":701,"code":11940,"language":703,"meta":54,"style":54},"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",[475,11942,11943,11954,11958,11973,11985,11989,11993,12001,12006,12021,12039,12056,12066,12074],{"__ignoreMap":54},[478,11944,11945,11947,11949,11952],{"class":480,"line":481},[478,11946,717],{"class":710},[478,11948,7084],{"class":710},[478,11950,11951],{"class":484}," func",[478,11953,2542],{"class":714},[478,11955,11956],{"class":480,"line":565},[478,11957,2114],{"class":714},[478,11959,11960,11962,11964,11966,11968,11970],{"class":480,"line":579},[478,11961,2551],{"class":710},[478,11963,11435],{"class":714},[478,11965,759],{"class":710},[478,11967,2604],{"class":495},[478,11969,767],{"class":714},[478,11971,11972],{"class":770}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[478,11974,11975,11977,11979,11982],{"class":480,"line":593},[478,11976,4656],{"class":710},[478,11978,11150],{"class":710},[478,11980,11981],{"class":714},"a;",[478,11983,11984],{"class":770}," \u002F\u002F放回局部变量的地址\n",[478,11986,11987],{"class":480,"line":1769},[478,11988,2133],{"class":714},[478,11990,11991],{"class":480,"line":1783},[478,11992,2966],{"emptyLinePlaceholder":640},[478,11994,11995,11997,11999],{"class":480,"line":1789},[478,11996,717],{"class":710},[478,11998,2539],{"class":484},[478,12000,11419],{"class":714},[478,12002,12003],{"class":480,"line":1880},[478,12004,12005],{"class":770},"    \u002F\u002F接受func的返回值\n",[478,12007,12008,12010,12012,12015,12017,12019],{"class":480,"line":1886},[478,12009,2551],{"class":710},[478,12011,7084],{"class":710},[478,12013,12014],{"class":714},"p ",[478,12016,759],{"class":710},[478,12018,11951],{"class":484},[478,12020,6202],{"class":714},[478,12022,12023,12025,12027,12029,12031,12033,12036],{"class":480,"line":1898},[478,12024,7095],{"class":714},[478,12026,1739],{"class":710},[478,12028,7084],{"class":710},[478,12030,12014],{"class":714},[478,12032,1739],{"class":710},[478,12034,12035],{"class":714}," endl;",[478,12037,12038],{"class":770}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[478,12040,12041,12043,12045,12047,12049,12051,12053],{"class":480,"line":2180},[478,12042,7095],{"class":714},[478,12044,1739],{"class":710},[478,12046,7084],{"class":710},[478,12048,12014],{"class":714},[478,12050,1739],{"class":710},[478,12052,12035],{"class":714},[478,12054,12055],{"class":770}," \u002F\u002F第二次这个数据不再保留\n",[478,12057,12058,12060,12062,12064],{"class":480,"line":2185},[478,12059,2869],{"class":484},[478,12061,263],{"class":714},[478,12063,2874],{"class":488},[478,12065,3285],{"class":714},[478,12067,12068,12070,12072],{"class":480,"line":2191},[478,12069,4656],{"class":710},[478,12071,4659],{"class":495},[478,12073,1859],{"class":714},[478,12075,12076],{"class":480,"line":2196},[478,12077,2133],{"class":714},[19,12079,12080],{},"输出结果：",[19,12082,12083],{},[52,12084],{"alt":12085,"src":12086},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12088,12089],{},"总结：不要返回局部变量的地址",[29,12091,12092],{"start":565},[32,12093,12094],{},"堆区",[1702,12096,12097,12100],{},[32,12098,12099],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[32,12101,12102],{},"在c++中主要利用new在堆区开辟内存",[469,12104,12106],{"className":701,"code":12105,"language":703,"meta":54,"style":54},"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",[475,12107,12108,12123,12127,12132,12153,12160,12164,12172,12176,12181,12195,12207],{"__ignoreMap":54},[478,12109,12110,12112,12115,12118,12120],{"class":480,"line":481},[478,12111,717],{"class":710},[478,12113,12114],{"class":710},"  *",[478,12116,12117],{"class":484},"func",[478,12119,2993],{"class":714},[478,12121,12122],{"class":770},"  \u002F\u002F函数返回指针\n",[478,12124,12125],{"class":480,"line":565},[478,12126,2114],{"class":714},[478,12128,12129],{"class":480,"line":579},[478,12130,12131],{"class":770},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[478,12133,12134,12136,12138,12140,12142,12145,12147,12149,12151],{"class":480,"line":593},[478,12135,4713],{"class":710},[478,12137,7084],{"class":710},[478,12139,19],{"class":714},[478,12141,759],{"class":710},[478,12143,12144],{"class":710}," new",[478,12146,2948],{"class":710},[478,12148,263],{"class":714},[478,12150,1146],{"class":495},[478,12152,3285],{"class":714},[478,12154,12155,12157],{"class":480,"line":1769},[478,12156,4947],{"class":710},[478,12158,12159],{"class":714}," p;\n",[478,12161,12162],{"class":480,"line":1783},[478,12163,2133],{"class":714},[478,12165,12166,12168,12170],{"class":480,"line":1789},[478,12167,717],{"class":710},[478,12169,2539],{"class":484},[478,12171,2542],{"class":714},[478,12173,12174],{"class":480,"line":1880},[478,12175,2114],{"class":714},[478,12177,12178],{"class":480,"line":1886},[478,12179,12180],{"class":770},"    \u002F\u002F在堆区开辟数据\n",[478,12182,12183,12185,12187,12189,12191,12193],{"class":480,"line":1898},[478,12184,2551],{"class":710},[478,12186,7084],{"class":710},[478,12188,19],{"class":714},[478,12190,759],{"class":710},[478,12192,12117],{"class":484},[478,12194,6202],{"class":714},[478,12196,12197,12199,12201,12203,12205],{"class":480,"line":2180},[478,12198,2119],{"class":714},[478,12200,6985],{"class":710},[478,12202,19],{"class":714},[478,12204,1739],{"class":710},[478,12206,1761],{"class":714},[478,12208,12209],{"class":480,"line":2185},[478,12210,2133],{"class":714},[19,12212,12213],{},"图片展示：",[19,12215,12216],{},[52,12217],{"alt":12085,"src":12218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12220,12221],{},"堆区内存由程序员管生死！！！",[29,12223,12224],{"start":579},[32,12225,12226],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12228,12229],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12231,12232,12233],{},"​语法：",[475,12234,12235],{}," new 数据类型",[19,12237,12238],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[469,12240,12242],{"className":701,"code":12241,"language":703,"meta":54,"style":54},"\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",[475,12243,12244,12249,12259,12263,12268,12273,12295,12299,12307,12311,12325,12337,12349,12361,12366,12371,12382,12386,12391,12399,12403,12408,12430,12456,12460,12478,12482,12508,12512,12524,12528,12533,12538,12546,12550,12554,12562,12566,12572,12578],{"__ignoreMap":54},[478,12245,12246],{"class":480,"line":481},[478,12247,12248],{"class":770},"\u002F\u002F1.new的基本语法\n",[478,12250,12251,12253,12255,12257],{"class":480,"line":565},[478,12252,717],{"class":710},[478,12254,7084],{"class":710},[478,12256,12117],{"class":484},[478,12258,2542],{"class":714},[478,12260,12261],{"class":480,"line":579},[478,12262,2114],{"class":714},[478,12264,12265],{"class":480,"line":593},[478,12266,12267],{"class":770},"    \u002F\u002F在堆区创建整型数据\n",[478,12269,12270],{"class":480,"line":1769},[478,12271,12272],{"class":770},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[478,12274,12275,12277,12279,12281,12284,12286,12288,12290,12292],{"class":480,"line":1783},[478,12276,2551],{"class":710},[478,12278,7084],{"class":710},[478,12280,19],{"class":714},[478,12282,12283],{"class":710},"=new",[478,12285,2948],{"class":710},[478,12287,263],{"class":714},[478,12289,1146],{"class":495},[478,12291,6532],{"class":714},[478,12293,12294],{"class":770},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[478,12296,12297],{"class":480,"line":1789},[478,12298,2133],{"class":714},[478,12300,12301,12303,12305],{"class":480,"line":1880},[478,12302,5930],{"class":710},[478,12304,6154],{"class":484},[478,12306,2542],{"class":714},[478,12308,12309],{"class":480,"line":1886},[478,12310,2114],{"class":714},[478,12312,12313,12315,12317,12319,12321,12323],{"class":480,"line":1898},[478,12314,2551],{"class":710},[478,12316,7084],{"class":710},[478,12318,19],{"class":714},[478,12320,759],{"class":710},[478,12322,12117],{"class":484},[478,12324,6202],{"class":714},[478,12326,12327,12329,12331,12333,12335],{"class":480,"line":2180},[478,12328,2119],{"class":714},[478,12330,6985],{"class":710},[478,12332,19],{"class":714},[478,12334,1739],{"class":710},[478,12336,1761],{"class":714},[478,12338,12339,12341,12343,12345,12347],{"class":480,"line":2185},[478,12340,2119],{"class":714},[478,12342,6985],{"class":710},[478,12344,19],{"class":714},[478,12346,1739],{"class":710},[478,12348,1761],{"class":714},[478,12350,12351,12353,12355,12357,12359],{"class":480,"line":2191},[478,12352,2119],{"class":714},[478,12354,6985],{"class":710},[478,12356,19],{"class":714},[478,12358,1739],{"class":710},[478,12360,1761],{"class":714},[478,12362,12363],{"class":480,"line":2196},[478,12364,12365],{"class":770},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[478,12367,12368],{"class":480,"line":2210},[478,12369,12370],{"class":770},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[478,12372,12373,12376,12379],{"class":480,"line":2215},[478,12374,12375],{"class":710},"    delete",[478,12377,12378],{"class":714}," p;",[478,12380,12381],{"class":770},"\u002F\u002F删除这块地址\n",[478,12383,12384],{"class":480,"line":2221},[478,12385,2133],{"class":714},[478,12387,12388],{"class":480,"line":2241},[478,12389,12390],{"class":770},"\u002F\u002F2.在堆区利用new开辟数组\n",[478,12392,12393,12395,12397],{"class":480,"line":2246},[478,12394,5930],{"class":710},[478,12396,6223],{"class":484},[478,12398,2542],{"class":714},[478,12400,12401],{"class":480,"line":2260},[478,12402,2114],{"class":714},[478,12404,12405],{"class":480,"line":2265},[478,12406,12407],{"class":770},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[478,12409,12410,12412,12414,12416,12418,12420,12422,12424,12427],{"class":480,"line":2294},[478,12411,2551],{"class":710},[478,12413,7084],{"class":710},[478,12415,4446],{"class":714},[478,12417,12283],{"class":710},[478,12419,2948],{"class":710},[478,12421,1585],{"class":714},[478,12423,1146],{"class":495},[478,12425,12426],{"class":714},"];",[478,12428,12429],{"class":770},"\u002F\u002F10代表数组有10个元素\n",[478,12431,12432,12434,12436,12438,12440,12442,12444,12446,12448,12450,12452,12454],{"class":480,"line":2299},[478,12433,3767],{"class":710},[478,12435,219],{"class":714},[478,12437,717],{"class":710},[478,12439,3598],{"class":714},[478,12441,759],{"class":710},[478,12443,895],{"class":495},[478,12445,3605],{"class":714},[478,12447,1605],{"class":710},[478,12449,1146],{"class":495},[478,12451,3605],{"class":714},[478,12453,2858],{"class":710},[478,12455,720],{"class":714},[478,12457,12458],{"class":480,"line":2316},[478,12459,2596],{"class":714},[478,12461,12462,12465,12467,12469,12471,12473,12475],{"class":480,"line":2321},[478,12463,12464],{"class":714},"        arr[i]",[478,12466,759],{"class":710},[478,12468,1141],{"class":714},[478,12470,1181],{"class":710},[478,12472,1012],{"class":495},[478,12474,767],{"class":714},[478,12476,12477],{"class":770},"\u002F\u002F给10个元素赋值100～109\n",[478,12479,12480],{"class":480,"line":2326},[478,12481,2753],{"class":714},[478,12483,12484,12486,12488,12490,12492,12494,12496,12498,12500,12502,12504,12506],{"class":480,"line":2331},[478,12485,3767],{"class":710},[478,12487,219],{"class":714},[478,12489,717],{"class":710},[478,12491,3598],{"class":714},[478,12493,759],{"class":710},[478,12495,895],{"class":495},[478,12497,3605],{"class":714},[478,12499,1605],{"class":710},[478,12501,1146],{"class":495},[478,12503,3605],{"class":714},[478,12505,2858],{"class":710},[478,12507,720],{"class":714},[478,12509,12510],{"class":480,"line":2345},[478,12511,2596],{"class":714},[478,12513,12514,12516,12518,12520,12522],{"class":480,"line":2350},[478,12515,4017],{"class":714},[478,12517,1739],{"class":710},[478,12519,4920],{"class":714},[478,12521,1739],{"class":710},[478,12523,1761],{"class":714},[478,12525,12526],{"class":480,"line":3143},[478,12527,2753],{"class":714},[478,12529,12530],{"class":480,"line":3157},[478,12531,12532],{"class":770},"    \u002F\u002F释放堆区数组\n",[478,12534,12535],{"class":480,"line":3165},[478,12536,12537],{"class":770},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[478,12539,12540,12543],{"class":480,"line":3170},[478,12541,12542],{"class":710},"    delete[]",[478,12544,12545],{"class":714}," arr;\n",[478,12547,12548],{"class":480,"line":3176},[478,12549,2133],{"class":714},[478,12551,12552],{"class":480,"line":3182},[478,12553,2966],{"emptyLinePlaceholder":640},[478,12555,12556,12558,12560],{"class":480,"line":3187},[478,12557,717],{"class":710},[478,12559,2539],{"class":484},[478,12561,2542],{"class":714},[478,12563,12564],{"class":480,"line":8514},[478,12565,2114],{"class":714},[478,12567,12568,12570],{"class":480,"line":8538},[478,12569,6199],{"class":484},[478,12571,6202],{"class":714},[478,12573,12574,12576],{"class":480,"line":8543},[478,12575,6268],{"class":484},[478,12577,6202],{"class":714},[478,12579,12580],{"class":480,"line":8549},[478,12581,2133],{"class":714},[617,12583,12584],{},"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":54,"searchDepth":565,"depth":565,"links":12586},[12587],{"id":11255,"depth":565,"text":11256,"children":12588},[12589,12590],{"id":11287,"depth":579,"text":11288},{"id":11915,"depth":579,"text":11916},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11247,"description":54},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12597,"title":12598,"body":12599,"description":54,"extension":638,"meta":14080,"navigation":640,"path":14081,"seo":14082,"stem":14083,"__hash__":14084},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12600,"toc":14072},[12601,12604,12608,12611,12614,12783,12787,12792,12809,12814,12966,12970,12973,12976,13370,13374,13377,13382,13385,13697,13701,13707,13867,13869,13877,13881,13884,13891,14069],[10,12602,12598],{"id":12603},"_6引用",[14,12605,12607],{"id":12606},"_61引用基本用法","6.1引用基本用法",[19,12609,12610],{},"引用的本质：给变量起别名",[19,12612,12613],{},"语法：数据类型 &别名=原名",[469,12615,12617],{"className":701,"code":12616,"language":703,"meta":54,"style":54},"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",[475,12618,12619,12627,12631,12643,12655,12659,12678,12697,12701,12712,12716,12735,12753,12757,12767,12771,12779],{"__ignoreMap":54},[478,12620,12621,12623,12625],{"class":480,"line":481},[478,12622,717],{"class":710},[478,12624,2539],{"class":484},[478,12626,11419],{"class":714},[478,12628,12629],{"class":480,"line":565},[478,12630,2966],{"emptyLinePlaceholder":640},[478,12632,12633,12635,12637,12639,12641],{"class":480,"line":579},[478,12634,2551],{"class":710},[478,12636,11435],{"class":714},[478,12638,759],{"class":710},[478,12640,2604],{"class":495},[478,12642,1859],{"class":714},[478,12644,12645,12647,12649,12651,12653],{"class":480,"line":593},[478,12646,2551],{"class":710},[478,12648,11150],{"class":710},[478,12650,11511],{"class":714},[478,12652,759],{"class":710},[478,12654,2001],{"class":714},[478,12656,12657],{"class":480,"line":1769},[478,12658,2966],{"emptyLinePlaceholder":640},[478,12660,12661,12663,12665,12668,12670,12672,12674,12676],{"class":480,"line":1783},[478,12662,7095],{"class":714},[478,12664,1739],{"class":710},[478,12666,12667],{"class":488}," \"a = \"",[478,12669,2013],{"class":710},[478,12671,11435],{"class":714},[478,12673,1739],{"class":710},[478,12675,12035],{"class":714},[478,12677,7834],{"class":770},[478,12679,12680,12682,12684,12687,12689,12691,12693,12695],{"class":480,"line":1789},[478,12681,7095],{"class":714},[478,12683,1739],{"class":710},[478,12685,12686],{"class":488}," \"b = \"",[478,12688,2013],{"class":710},[478,12690,11448],{"class":714},[478,12692,1739],{"class":710},[478,12694,12035],{"class":714},[478,12696,7834],{"class":770},[478,12698,12699],{"class":480,"line":1880},[478,12700,2966],{"emptyLinePlaceholder":640},[478,12702,12703,12706,12708,12710],{"class":480,"line":1886},[478,12704,12705],{"class":714},"    b ",[478,12707,759],{"class":710},[478,12709,6320],{"class":495},[478,12711,1859],{"class":714},[478,12713,12714],{"class":480,"line":1898},[478,12715,2966],{"emptyLinePlaceholder":640},[478,12717,12718,12720,12722,12724,12726,12728,12730,12732],{"class":480,"line":2180},[478,12719,7095],{"class":714},[478,12721,1739],{"class":710},[478,12723,12667],{"class":488},[478,12725,2013],{"class":710},[478,12727,11435],{"class":714},[478,12729,1739],{"class":710},[478,12731,12035],{"class":714},[478,12733,12734],{"class":770},"\u002F\u002F100\n",[478,12736,12737,12739,12741,12743,12745,12747,12749,12751],{"class":480,"line":2185},[478,12738,7095],{"class":714},[478,12740,1739],{"class":710},[478,12742,12686],{"class":488},[478,12744,2013],{"class":710},[478,12746,11448],{"class":714},[478,12748,1739],{"class":710},[478,12750,12035],{"class":714},[478,12752,12734],{"class":770},[478,12754,12755],{"class":480,"line":2191},[478,12756,2966],{"emptyLinePlaceholder":640},[478,12758,12759,12761,12763,12765],{"class":480,"line":2196},[478,12760,2869],{"class":484},[478,12762,263],{"class":714},[478,12764,2874],{"class":488},[478,12766,3285],{"class":714},[478,12768,12769],{"class":480,"line":2210},[478,12770,2966],{"emptyLinePlaceholder":640},[478,12772,12773,12775,12777],{"class":480,"line":2215},[478,12774,4656],{"class":710},[478,12776,4659],{"class":495},[478,12778,1859],{"class":714},[478,12780,12781],{"class":480,"line":2221},[478,12782,2133],{"class":714},[14,12784,12786],{"id":12785},"_62引用的注意事项","6.2引用的注意事项",[29,12788,12789],{},[32,12790,12791],{},"引用必须要初始化",[469,12793,12795],{"className":701,"code":12794,"language":703,"meta":54,"style":54},"int &b;\u002F\u002F非常错误！\n",[475,12796,12797],{"__ignoreMap":54},[478,12798,12799,12801,12803,12806],{"class":480,"line":481},[478,12800,717],{"class":710},[478,12802,11150],{"class":710},[478,12804,12805],{"class":714},"b;",[478,12807,12808],{"class":770},"\u002F\u002F非常错误！\n",[29,12810,12811],{"start":565},[32,12812,12813],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[469,12815,12817],{"className":701,"code":12816,"language":703,"meta":54,"style":54},"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",[475,12818,12819,12827,12839,12851,12859,12875,12888,12906,12924,12944,12954,12962],{"__ignoreMap":54},[478,12820,12821,12823,12825],{"class":480,"line":481},[478,12822,717],{"class":710},[478,12824,2539],{"class":484},[478,12826,11419],{"class":714},[478,12828,12829,12831,12833,12835,12837],{"class":480,"line":565},[478,12830,2551],{"class":710},[478,12832,11435],{"class":714},[478,12834,759],{"class":710},[478,12836,2604],{"class":495},[478,12838,1859],{"class":714},[478,12840,12841,12843,12845,12847,12849],{"class":480,"line":579},[478,12842,2551],{"class":710},[478,12844,11448],{"class":714},[478,12846,759],{"class":710},[478,12848,9516],{"class":495},[478,12850,1859],{"class":714},[478,12852,12853,12856],{"class":480,"line":593},[478,12854,12855],{"class":770},"    \u002F\u002Fint &c;",[478,12857,12858],{"class":770}," \u002F\u002F错误，引用必须初始化\n",[478,12860,12861,12863,12865,12867,12869,12872],{"class":480,"line":1769},[478,12862,2551],{"class":710},[478,12864,11150],{"class":710},[478,12866,3512],{"class":714},[478,12868,759],{"class":710},[478,12870,12871],{"class":714}," a;",[478,12873,12874],{"class":770}," \u002F\u002F一旦初始化后，就不可以更改\n",[478,12876,12877,12880,12882,12885],{"class":480,"line":1783},[478,12878,12879],{"class":714},"    c ",[478,12881,759],{"class":710},[478,12883,12884],{"class":714}," b;",[478,12886,12887],{"class":770}," \u002F\u002F这是赋值操作，不是更改引用\n",[478,12889,12890,12892,12894,12896,12898,12900,12902,12904],{"class":480,"line":1789},[478,12891,7095],{"class":714},[478,12893,1739],{"class":710},[478,12895,12667],{"class":488},[478,12897,2013],{"class":710},[478,12899,11435],{"class":714},[478,12901,1739],{"class":710},[478,12903,12035],{"class":714},[478,12905,7819],{"class":770},[478,12907,12908,12910,12912,12914,12916,12918,12920,12922],{"class":480,"line":1880},[478,12909,7095],{"class":714},[478,12911,1739],{"class":710},[478,12913,12686],{"class":488},[478,12915,2013],{"class":710},[478,12917,11448],{"class":714},[478,12919,1739],{"class":710},[478,12921,12035],{"class":714},[478,12923,7819],{"class":770},[478,12925,12926,12928,12930,12933,12935,12938,12940,12942],{"class":480,"line":1886},[478,12927,7095],{"class":714},[478,12929,1739],{"class":710},[478,12931,12932],{"class":488}," \"c = \"",[478,12934,2013],{"class":710},[478,12936,12937],{"class":714}," c ",[478,12939,1739],{"class":710},[478,12941,12035],{"class":714},[478,12943,7819],{"class":770},[478,12945,12946,12948,12950,12952],{"class":480,"line":1898},[478,12947,2869],{"class":484},[478,12949,263],{"class":714},[478,12951,2874],{"class":488},[478,12953,3285],{"class":714},[478,12955,12956,12958,12960],{"class":480,"line":2180},[478,12957,4656],{"class":710},[478,12959,4659],{"class":495},[478,12961,1859],{"class":714},[478,12963,12964],{"class":480,"line":2185},[478,12965,2133],{"class":714},[14,12967,12969],{"id":12968},"_63引用做函数参数","6.3引用做函数参数",[19,12971,12972],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12974,12975],{},"优点：可以简化指针修改实参",[469,12977,12979],{"className":701,"code":12978,"language":703,"meta":54,"style":54},"\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",[475,12980,12981,12986,13009,13020,13030,13039,13043,13047,13052,13074,13086,13098,13108,13112,13116,13121,13143,13153,13161,13169,13173,13177,13185,13189,13201,13213,13217,13228,13254,13258,13278,13302,13306,13316,13340,13344,13354,13358,13366],{"__ignoreMap":54},[478,12982,12983],{"class":480,"line":481},[478,12984,12985],{"class":770},"\u002F\u002F1. 值传递\n",[478,12987,12988,12990,12993,12995,12997,12999,13002,13004,13006],{"class":480,"line":565},[478,12989,5930],{"class":710},[478,12991,12992],{"class":484}," mySwap01",[478,12994,263],{"class":714},[478,12996,717],{"class":710},[478,12998,1967],{"class":5782},[478,13000,13001],{"class":714},", ",[478,13003,717],{"class":710},[478,13005,3399],{"class":5782},[478,13007,13008],{"class":714},") {\n",[478,13010,13011,13013,13016,13018],{"class":480,"line":579},[478,13012,2551],{"class":710},[478,13014,13015],{"class":714}," temp ",[478,13017,759],{"class":710},[478,13019,2001],{"class":714},[478,13021,13022,13025,13027],{"class":480,"line":593},[478,13023,13024],{"class":714},"    a ",[478,13026,759],{"class":710},[478,13028,13029],{"class":714}," b;\n",[478,13031,13032,13034,13036],{"class":480,"line":1769},[478,13033,12705],{"class":714},[478,13035,759],{"class":710},[478,13037,13038],{"class":714}," temp;\n",[478,13040,13041],{"class":480,"line":1783},[478,13042,2133],{"class":714},[478,13044,13045],{"class":480,"line":1789},[478,13046,2966],{"emptyLinePlaceholder":640},[478,13048,13049],{"class":480,"line":1880},[478,13050,13051],{"class":770},"\u002F\u002F2. 地址传递\n",[478,13053,13054,13056,13059,13061,13064,13066,13068,13070,13072],{"class":480,"line":1886},[478,13055,5930],{"class":710},[478,13057,13058],{"class":484}," mySwap02",[478,13060,263],{"class":714},[478,13062,13063],{"class":710},"int*",[478,13065,1967],{"class":5782},[478,13067,13001],{"class":714},[478,13069,13063],{"class":710},[478,13071,3399],{"class":5782},[478,13073,13008],{"class":714},[478,13075,13076,13078,13080,13082,13084],{"class":480,"line":1898},[478,13077,2551],{"class":710},[478,13079,13015],{"class":714},[478,13081,759],{"class":710},[478,13083,7084],{"class":710},[478,13085,6763],{"class":714},[478,13087,13088,13090,13092,13094,13096],{"class":480,"line":2180},[478,13089,6969],{"class":710},[478,13091,11485],{"class":714},[478,13093,759],{"class":710},[478,13095,7084],{"class":710},[478,13097,6635],{"class":714},[478,13099,13100,13102,13104,13106],{"class":480,"line":2185},[478,13101,6969],{"class":710},[478,13103,11511],{"class":714},[478,13105,759],{"class":710},[478,13107,13038],{"class":714},[478,13109,13110],{"class":480,"line":2191},[478,13111,2133],{"class":714},[478,13113,13114],{"class":480,"line":2196},[478,13115,2966],{"emptyLinePlaceholder":640},[478,13117,13118],{"class":480,"line":2210},[478,13119,13120],{"class":770},"\u002F\u002F3. 引用传递\n",[478,13122,13123,13125,13128,13130,13133,13135,13137,13139,13141],{"class":480,"line":2215},[478,13124,5930],{"class":710},[478,13126,13127],{"class":484}," mySwap03",[478,13129,263],{"class":714},[478,13131,13132],{"class":710},"int&",[478,13134,1967],{"class":5782},[478,13136,13001],{"class":714},[478,13138,13132],{"class":710},[478,13140,3399],{"class":5782},[478,13142,13008],{"class":714},[478,13144,13145,13147,13149,13151],{"class":480,"line":2221},[478,13146,2551],{"class":710},[478,13148,13015],{"class":714},[478,13150,759],{"class":710},[478,13152,2001],{"class":714},[478,13154,13155,13157,13159],{"class":480,"line":2241},[478,13156,13024],{"class":714},[478,13158,759],{"class":710},[478,13160,13029],{"class":714},[478,13162,13163,13165,13167],{"class":480,"line":2246},[478,13164,12705],{"class":714},[478,13166,759],{"class":710},[478,13168,13038],{"class":714},[478,13170,13171],{"class":480,"line":2260},[478,13172,2133],{"class":714},[478,13174,13175],{"class":480,"line":2265},[478,13176,2966],{"emptyLinePlaceholder":640},[478,13178,13179,13181,13183],{"class":480,"line":2294},[478,13180,717],{"class":710},[478,13182,2539],{"class":484},[478,13184,11419],{"class":714},[478,13186,13187],{"class":480,"line":2299},[478,13188,2966],{"emptyLinePlaceholder":640},[478,13190,13191,13193,13195,13197,13199],{"class":480,"line":2316},[478,13192,2551],{"class":710},[478,13194,11435],{"class":714},[478,13196,759],{"class":710},[478,13198,2604],{"class":495},[478,13200,1859],{"class":714},[478,13202,13203,13205,13207,13209,13211],{"class":480,"line":2321},[478,13204,2551],{"class":710},[478,13206,11448],{"class":714},[478,13208,759],{"class":710},[478,13210,9516],{"class":495},[478,13212,1859],{"class":714},[478,13214,13215],{"class":480,"line":2326},[478,13216,2966],{"emptyLinePlaceholder":640},[478,13218,13219,13222,13225],{"class":480,"line":2331},[478,13220,13221],{"class":484},"    mySwap01",[478,13223,13224],{"class":714},"(a, b);",[478,13226,13227],{"class":770},"\u002F\u002F值传递，形参不会修饰实参\n",[478,13229,13230,13232,13234,13237,13239,13241,13243,13246,13248,13250,13252],{"class":480,"line":2345},[478,13231,7095],{"class":714},[478,13233,1739],{"class":710},[478,13235,13236],{"class":488}," \"a:\"",[478,13238,2013],{"class":710},[478,13240,11435],{"class":714},[478,13242,1739],{"class":710},[478,13244,13245],{"class":488}," \" b:\"",[478,13247,2013],{"class":710},[478,13249,11448],{"class":714},[478,13251,1739],{"class":710},[478,13253,9406],{"class":714},[478,13255,13256],{"class":480,"line":2350},[478,13257,2966],{"emptyLinePlaceholder":640},[478,13259,13260,13263,13265,13267,13270,13272,13275],{"class":480,"line":3143},[478,13261,13262],{"class":484},"    mySwap02",[478,13264,263],{"class":714},[478,13266,1054],{"class":710},[478,13268,13269],{"class":714},"a, ",[478,13271,1054],{"class":710},[478,13273,13274],{"class":714},"b);",[478,13276,13277],{"class":770},"\u002F\u002F地址传递，形参会修饰实参\n",[478,13279,13280,13282,13284,13286,13288,13290,13292,13294,13296,13298,13300],{"class":480,"line":3157},[478,13281,7095],{"class":714},[478,13283,1739],{"class":710},[478,13285,13236],{"class":488},[478,13287,2013],{"class":710},[478,13289,11435],{"class":714},[478,13291,1739],{"class":710},[478,13293,13245],{"class":488},[478,13295,2013],{"class":710},[478,13297,11448],{"class":714},[478,13299,1739],{"class":710},[478,13301,9406],{"class":714},[478,13303,13304],{"class":480,"line":3165},[478,13305,2966],{"emptyLinePlaceholder":640},[478,13307,13308,13311,13313],{"class":480,"line":3170},[478,13309,13310],{"class":484},"    mySwap03",[478,13312,13224],{"class":714},[478,13314,13315],{"class":770},"\u002F\u002F引用传递，形参会修饰实参\n",[478,13317,13318,13320,13322,13324,13326,13328,13330,13332,13334,13336,13338],{"class":480,"line":3176},[478,13319,7095],{"class":714},[478,13321,1739],{"class":710},[478,13323,13236],{"class":488},[478,13325,2013],{"class":710},[478,13327,11435],{"class":714},[478,13329,1739],{"class":710},[478,13331,13245],{"class":488},[478,13333,2013],{"class":710},[478,13335,11448],{"class":714},[478,13337,1739],{"class":710},[478,13339,9406],{"class":714},[478,13341,13342],{"class":480,"line":3182},[478,13343,2966],{"emptyLinePlaceholder":640},[478,13345,13346,13348,13350,13352],{"class":480,"line":3187},[478,13347,2869],{"class":484},[478,13349,263],{"class":714},[478,13351,2874],{"class":488},[478,13353,3285],{"class":714},[478,13355,13356],{"class":480,"line":8514},[478,13357,2966],{"emptyLinePlaceholder":640},[478,13359,13360,13362,13364],{"class":480,"line":8538},[478,13361,4656],{"class":710},[478,13363,4659],{"class":495},[478,13365,1859],{"class":714},[478,13367,13368],{"class":480,"line":8543},[478,13369,2133],{"class":714},[14,13371,13373],{"id":13372},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13375,13376],{},"作用：引用是可以作为函数的返回值存在的",[19,13378,9591,13379],{},[45,13380,13381],{},"不要返回局部变量引用",[19,13383,13384],{},"用法：函数调用作为左值",[469,13386,13388],{"className":10507,"code":13387,"language":10509,"meta":54,"style":54},"\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",[475,13389,13390,13395,13403,13418,13424,13428,13432,13437,13445,13462,13468,13472,13476,13484,13488,13493,13507,13527,13546,13550,13555,13568,13588,13606,13610,13626,13630,13649,13667,13671,13681,13685,13693],{"__ignoreMap":54},[478,13391,13392],{"class":480,"line":481},[478,13393,13394],{"class":770},"\u002F\u002F返回局部变量引用\n",[478,13396,13397,13399,13401],{"class":480,"line":565},[478,13398,13132],{"class":710},[478,13400,6154],{"class":484},[478,13402,11419],{"class":714},[478,13404,13405,13407,13409,13411,13413,13415],{"class":480,"line":579},[478,13406,2551],{"class":710},[478,13408,11435],{"class":714},[478,13410,759],{"class":710},[478,13412,2604],{"class":495},[478,13414,767],{"class":714},[478,13416,13417],{"class":770}," \u002F\u002F局部变量\n",[478,13419,13420,13422],{"class":480,"line":593},[478,13421,4656],{"class":710},[478,13423,2001],{"class":714},[478,13425,13426],{"class":480,"line":1769},[478,13427,2133],{"class":714},[478,13429,13430],{"class":480,"line":1783},[478,13431,2966],{"emptyLinePlaceholder":640},[478,13433,13434],{"class":480,"line":1789},[478,13435,13436],{"class":770},"\u002F\u002F返回静态变量引用\n",[478,13438,13439,13441,13443],{"class":480,"line":1880},[478,13440,13132],{"class":710},[478,13442,6223],{"class":484},[478,13444,11419],{"class":714},[478,13446,13447,13449,13451,13453,13455,13457,13459],{"class":480,"line":1886},[478,13448,11586],{"class":710},[478,13450,2948],{"class":710},[478,13452,11435],{"class":714},[478,13454,759],{"class":710},[478,13456,9516],{"class":495},[478,13458,767],{"class":714},[478,13460,13461],{"class":770},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[478,13463,13464,13466],{"class":480,"line":1898},[478,13465,4656],{"class":710},[478,13467,2001],{"class":714},[478,13469,13470],{"class":480,"line":2180},[478,13471,2133],{"class":714},[478,13473,13474],{"class":480,"line":2185},[478,13475,2966],{"emptyLinePlaceholder":640},[478,13477,13478,13480,13482],{"class":480,"line":2191},[478,13479,717],{"class":710},[478,13481,2539],{"class":484},[478,13483,11419],{"class":714},[478,13485,13486],{"class":480,"line":2196},[478,13487,2966],{"emptyLinePlaceholder":640},[478,13489,13490],{"class":480,"line":2210},[478,13491,13492],{"class":770},"    \u002F\u002F不能返回局部变量的引用\n",[478,13494,13495,13498,13501,13503,13505],{"class":480,"line":2215},[478,13496,13497],{"class":710},"    int&",[478,13499,13500],{"class":714}," ref ",[478,13502,759],{"class":710},[478,13504,6154],{"class":484},[478,13506,6202],{"class":714},[478,13508,13509,13511,13513,13516,13518,13520,13522,13524],{"class":480,"line":2221},[478,13510,7095],{"class":714},[478,13512,1739],{"class":710},[478,13514,13515],{"class":488}," \"ref = \"",[478,13517,2013],{"class":710},[478,13519,13500],{"class":714},[478,13521,1739],{"class":710},[478,13523,12035],{"class":714},[478,13525,13526],{"class":770},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[478,13528,13529,13531,13533,13535,13537,13539,13541,13543],{"class":480,"line":2241},[478,13530,7095],{"class":714},[478,13532,1739],{"class":710},[478,13534,13515],{"class":488},[478,13536,2013],{"class":710},[478,13538,13500],{"class":714},[478,13540,1739],{"class":710},[478,13542,12035],{"class":714},[478,13544,13545],{"class":770},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[478,13547,13548],{"class":480,"line":2246},[478,13549,2966],{"emptyLinePlaceholder":640},[478,13551,13552],{"class":480,"line":2260},[478,13553,13554],{"class":770},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[478,13556,13557,13559,13562,13564,13566],{"class":480,"line":2265},[478,13558,13497],{"class":710},[478,13560,13561],{"class":714}," ref2 ",[478,13563,759],{"class":710},[478,13565,6223],{"class":484},[478,13567,6202],{"class":714},[478,13569,13570,13572,13574,13577,13579,13581,13583,13585],{"class":480,"line":2294},[478,13571,7095],{"class":714},[478,13573,1739],{"class":710},[478,13575,13576],{"class":488}," \"ref2 = \"",[478,13578,2013],{"class":710},[478,13580,13561],{"class":714},[478,13582,1739],{"class":710},[478,13584,12035],{"class":714},[478,13586,13587],{"class":770}," \u002F\u002F20\n",[478,13589,13590,13592,13594,13596,13598,13600,13602,13604],{"class":480,"line":2299},[478,13591,7095],{"class":714},[478,13593,1739],{"class":710},[478,13595,13576],{"class":488},[478,13597,2013],{"class":710},[478,13599,13561],{"class":714},[478,13601,1739],{"class":710},[478,13603,12035],{"class":714},[478,13605,13587],{"class":770},[478,13607,13608],{"class":480,"line":2316},[478,13609,2966],{"emptyLinePlaceholder":640},[478,13611,13612,13614,13617,13619,13621,13623],{"class":480,"line":2321},[478,13613,6268],{"class":484},[478,13615,13616],{"class":714},"() ",[478,13618,759],{"class":710},[478,13620,3565],{"class":495},[478,13622,767],{"class":714},[478,13624,13625],{"class":770},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[478,13627,13628],{"class":480,"line":2326},[478,13629,2966],{"emptyLinePlaceholder":640},[478,13631,13632,13634,13636,13638,13640,13642,13644,13646],{"class":480,"line":2331},[478,13633,7095],{"class":714},[478,13635,1739],{"class":710},[478,13637,13576],{"class":488},[478,13639,2013],{"class":710},[478,13641,13561],{"class":714},[478,13643,1739],{"class":710},[478,13645,12035],{"class":714},[478,13647,13648],{"class":770}," \u002F\u002F1000\n",[478,13650,13651,13653,13655,13657,13659,13661,13663,13665],{"class":480,"line":2345},[478,13652,7095],{"class":714},[478,13654,1739],{"class":710},[478,13656,13576],{"class":488},[478,13658,2013],{"class":710},[478,13660,13561],{"class":714},[478,13662,1739],{"class":710},[478,13664,12035],{"class":714},[478,13666,13648],{"class":770},[478,13668,13669],{"class":480,"line":2350},[478,13670,2966],{"emptyLinePlaceholder":640},[478,13672,13673,13675,13677,13679],{"class":480,"line":3143},[478,13674,2869],{"class":484},[478,13676,263],{"class":714},[478,13678,2874],{"class":488},[478,13680,3285],{"class":714},[478,13682,13683],{"class":480,"line":3157},[478,13684,2966],{"emptyLinePlaceholder":640},[478,13686,13687,13689,13691],{"class":480,"line":3165},[478,13688,4656],{"class":710},[478,13690,4659],{"class":495},[478,13692,1859],{"class":714},[478,13694,13695],{"class":480,"line":3170},[478,13696,2133],{"class":714},[14,13698,13700],{"id":13699},"_65引用的本质","6.5引用的本质",[19,13702,13703,13704],{},"本质：",[45,13705,13706],{},"引用的本质在c++内部实现是一个指针常量.",[469,13708,13710],{"className":701,"code":13709,"language":703,"meta":54,"style":54},"\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",[475,13711,13712,13717,13733,13747,13751,13760,13772,13777,13782,13793,13806,13810,13826,13843,13847,13855,13863],{"__ignoreMap":54},[478,13713,13714],{"class":480,"line":481},[478,13715,13716],{"class":770},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[478,13718,13719,13721,13723,13725,13727,13730],{"class":480,"line":565},[478,13720,5930],{"class":710},[478,13722,11951],{"class":484},[478,13724,263],{"class":714},[478,13726,13132],{"class":710},[478,13728,13729],{"class":5782}," ref",[478,13731,13732],{"class":714},"){\n",[478,13734,13735,13738,13740,13742,13744],{"class":480,"line":579},[478,13736,13737],{"class":714},"    ref ",[478,13739,759],{"class":710},[478,13741,6320],{"class":495},[478,13743,767],{"class":714},[478,13745,13746],{"class":770}," \u002F\u002F ref是引用，转换为*ref = 100\n",[478,13748,13749],{"class":480,"line":593},[478,13750,2133],{"class":714},[478,13752,13753,13755,13757],{"class":480,"line":1769},[478,13754,717],{"class":710},[478,13756,2539],{"class":484},[478,13758,13759],{"class":714},"(){\n",[478,13761,13762,13764,13766,13768,13770],{"class":480,"line":1783},[478,13763,2551],{"class":710},[478,13765,11435],{"class":714},[478,13767,759],{"class":710},[478,13769,2604],{"class":495},[478,13771,1859],{"class":714},[478,13773,13774],{"class":480,"line":1789},[478,13775,13776],{"class":714},"    \n",[478,13778,13779],{"class":480,"line":1880},[478,13780,13781],{"class":770},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[478,13783,13784,13786,13788,13790],{"class":480,"line":1886},[478,13785,13497],{"class":710},[478,13787,13500],{"class":714},[478,13789,759],{"class":710},[478,13791,13792],{"class":714}," a; \n",[478,13794,13795,13797,13799,13801,13803],{"class":480,"line":1898},[478,13796,13737],{"class":714},[478,13798,759],{"class":710},[478,13800,9516],{"class":495},[478,13802,767],{"class":714},[478,13804,13805],{"class":770}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[478,13807,13808],{"class":480,"line":2180},[478,13809,13776],{"class":714},[478,13811,13812,13814,13816,13818,13820,13822,13824],{"class":480,"line":2185},[478,13813,7095],{"class":714},[478,13815,1739],{"class":710},[478,13817,13236],{"class":488},[478,13819,2013],{"class":710},[478,13821,11435],{"class":714},[478,13823,1739],{"class":710},[478,13825,9406],{"class":714},[478,13827,13828,13830,13832,13835,13837,13839,13841],{"class":480,"line":2191},[478,13829,7095],{"class":714},[478,13831,1739],{"class":710},[478,13833,13834],{"class":488}," \"ref:\"",[478,13836,2013],{"class":710},[478,13838,13500],{"class":714},[478,13840,1739],{"class":710},[478,13842,9406],{"class":714},[478,13844,13845],{"class":480,"line":2196},[478,13846,13776],{"class":714},[478,13848,13849,13852],{"class":480,"line":2210},[478,13850,13851],{"class":484},"    func",[478,13853,13854],{"class":714},"(a);\n",[478,13856,13857,13859,13861],{"class":480,"line":2215},[478,13858,4656],{"class":710},[478,13860,4659],{"class":495},[478,13862,1859],{"class":714},[478,13864,13865],{"class":480,"line":2221},[478,13866,2133],{"class":714},[19,13868,11898],{},[29,13870,13871,13874],{},[32,13872,13873],{},"引用的本质，就是一个指针常量",[32,13875,13876],{},"引用一旦初始化，就不可以发生改变",[14,13878,13880],{"id":13879},"_66常量引用","6.6常量引用",[19,13882,13883],{},"作用：常量引用主要用来修饰形参",[19,13885,13886,13887,13890],{},"在函数形参列表中，可以加",[45,13888,13889],{},"const修饰形参","，防止形参改变实参",[469,13892,13894],{"className":701,"code":13893,"language":703,"meta":54,"style":54},"\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",[475,13895,13896,13901,13906,13925,13930,13943,13947,13951,13959,13963,13968,13973,13987,13991,13999,14011,14015,14020,14032,14039,14043,14053,14057,14065],{"__ignoreMap":54},[478,13897,13898],{"class":480,"line":481},[478,13899,13900],{"class":770},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[478,13902,13903],{"class":480,"line":565},[478,13904,13905],{"class":770},"\u002F\u002F加上const就不能修改实参的\n",[478,13907,13908,13910,13913,13915,13917,13920,13923],{"class":480,"line":579},[478,13909,5930],{"class":710},[478,13911,13912],{"class":484}," showValue",[478,13914,263],{"class":714},[478,13916,7358],{"class":710},[478,13918,13919],{"class":710}," int&",[478,13921,13922],{"class":5782}," v",[478,13924,13008],{"class":714},[478,13926,13927],{"class":480,"line":593},[478,13928,13929],{"class":770},"    \u002F\u002Fv += 100;\n",[478,13931,13932,13934,13936,13939,13941],{"class":480,"line":1769},[478,13933,7095],{"class":714},[478,13935,1739],{"class":710},[478,13937,13938],{"class":714}," v ",[478,13940,1739],{"class":710},[478,13942,9406],{"class":714},[478,13944,13945],{"class":480,"line":1783},[478,13946,2133],{"class":714},[478,13948,13949],{"class":480,"line":1789},[478,13950,2966],{"emptyLinePlaceholder":640},[478,13952,13953,13955,13957],{"class":480,"line":1880},[478,13954,717],{"class":710},[478,13956,2539],{"class":484},[478,13958,11419],{"class":714},[478,13960,13961],{"class":480,"line":1886},[478,13962,2966],{"emptyLinePlaceholder":640},[478,13964,13965],{"class":480,"line":1898},[478,13966,13967],{"class":770},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[478,13969,13970],{"class":480,"line":2180},[478,13971,13972],{"class":770},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[478,13974,13975,13977,13979,13981,13983,13985],{"class":480,"line":2185},[478,13976,11787],{"class":710},[478,13978,13919],{"class":710},[478,13980,13500],{"class":714},[478,13982,759],{"class":710},[478,13984,2604],{"class":495},[478,13986,1859],{"class":714},[478,13988,13989],{"class":480,"line":2191},[478,13990,2966],{"emptyLinePlaceholder":640},[478,13992,13993,13996],{"class":480,"line":2196},[478,13994,13995],{"class":770},"    \u002F\u002Fref = 100;",[478,13997,13998],{"class":770},"  \u002F\u002F加入const后不可以修改变量\n",[478,14000,14001,14003,14005,14007,14009],{"class":480,"line":2210},[478,14002,7095],{"class":714},[478,14004,1739],{"class":710},[478,14006,13500],{"class":714},[478,14008,1739],{"class":710},[478,14010,9406],{"class":714},[478,14012,14013],{"class":480,"line":2215},[478,14014,2966],{"emptyLinePlaceholder":640},[478,14016,14017],{"class":480,"line":2221},[478,14018,14019],{"class":770},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[478,14021,14022,14024,14026,14028,14030],{"class":480,"line":2241},[478,14023,2551],{"class":710},[478,14025,11435],{"class":714},[478,14027,759],{"class":710},[478,14029,2604],{"class":495},[478,14031,1859],{"class":714},[478,14033,14034,14037],{"class":480,"line":2246},[478,14035,14036],{"class":484},"    showValue",[478,14038,13854],{"class":714},[478,14040,14041],{"class":480,"line":2260},[478,14042,2966],{"emptyLinePlaceholder":640},[478,14044,14045,14047,14049,14051],{"class":480,"line":2265},[478,14046,2869],{"class":484},[478,14048,263],{"class":714},[478,14050,2874],{"class":488},[478,14052,3285],{"class":714},[478,14054,14055],{"class":480,"line":2294},[478,14056,2966],{"emptyLinePlaceholder":640},[478,14058,14059,14061,14063],{"class":480,"line":2299},[478,14060,4656],{"class":710},[478,14062,4659],{"class":495},[478,14064,1859],{"class":714},[478,14066,14067],{"class":480,"line":2316},[478,14068,2133],{"class":714},[617,14070,14071],{},"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":54,"searchDepth":565,"depth":565,"links":14073},[14074,14075,14076,14077,14078,14079],{"id":12606,"depth":565,"text":12607},{"id":12785,"depth":565,"text":12786},{"id":12968,"depth":565,"text":12969},{"id":13372,"depth":565,"text":13373},{"id":13699,"depth":565,"text":13700},{"id":13879,"depth":565,"text":13880},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12598,"description":54},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14086,"title":14087,"body":14088,"description":54,"extension":638,"meta":15168,"navigation":640,"path":15169,"seo":15170,"stem":15171,"__hash__":15172},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14089,"toc":15160},[14090,14093,14097,14100,14105,14337,14339,14350,14354,14357,14364,14468,14471,14475,14478,14482,14485,14490,14512,14518,14845,14848,14852,14860,15157],[10,14091,14087],{"id":14092},"_7函数高级部分",[14,14094,14096],{"id":14095},"_71函数默认参数","7.1函数默认参数",[19,14098,14099],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14101,5747,14102],{},[475,14103,14104],{}," 返回值类型  函数名 （参数= 默认值）{}",[469,14106,14108],{"className":701,"code":14107,"language":703,"meta":54,"style":54},"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",[475,14109,14110,14145,14160,14164,14168,14173,14178,14207,14227,14237,14241,14245,14253,14257,14285,14307,14311,14321,14325,14333],{"__ignoreMap":54},[478,14111,14112,14114,14116,14118,14120,14122,14124,14126,14128,14131,14133,14135,14137,14139,14141,14143],{"class":480,"line":481},[478,14113,717],{"class":710},[478,14115,11951],{"class":484},[478,14117,263],{"class":714},[478,14119,717],{"class":710},[478,14121,1967],{"class":5782},[478,14123,13001],{"class":714},[478,14125,717],{"class":710},[478,14127,3399],{"class":5782},[478,14129,14130],{"class":710}," =",[478,14132,2604],{"class":495},[478,14134,13001],{"class":714},[478,14136,717],{"class":710},[478,14138,3415],{"class":5782},[478,14140,14130],{"class":710},[478,14142,2604],{"class":495},[478,14144,13008],{"class":714},[478,14146,14147,14149,14151,14153,14155,14157],{"class":480,"line":565},[478,14148,4656],{"class":710},[478,14150,11435],{"class":714},[478,14152,1181],{"class":710},[478,14154,11448],{"class":714},[478,14156,1181],{"class":710},[478,14158,14159],{"class":714}," c;\n",[478,14161,14162],{"class":480,"line":579},[478,14163,2133],{"class":714},[478,14165,14166],{"class":480,"line":593},[478,14167,2966],{"emptyLinePlaceholder":640},[478,14169,14170],{"class":480,"line":1769},[478,14171,14172],{"class":770},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[478,14174,14175],{"class":480,"line":1783},[478,14176,14177],{"class":770},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[478,14179,14180,14182,14185,14187,14189,14191,14193,14195,14197,14199,14201,14203,14205],{"class":480,"line":1789},[478,14181,717],{"class":710},[478,14183,14184],{"class":484}," func2",[478,14186,263],{"class":714},[478,14188,717],{"class":710},[478,14190,1967],{"class":5782},[478,14192,14130],{"class":710},[478,14194,2604],{"class":495},[478,14196,13001],{"class":714},[478,14198,717],{"class":710},[478,14200,3399],{"class":5782},[478,14202,14130],{"class":710},[478,14204,2604],{"class":495},[478,14206,3285],{"class":714},[478,14208,14209,14211,14213,14215,14217,14219,14221,14223,14225],{"class":480,"line":1880},[478,14210,717],{"class":710},[478,14212,14184],{"class":484},[478,14214,263],{"class":714},[478,14216,717],{"class":710},[478,14218,1967],{"class":5782},[478,14220,13001],{"class":714},[478,14222,717],{"class":710},[478,14224,3399],{"class":5782},[478,14226,13008],{"class":714},[478,14228,14229,14231,14233,14235],{"class":480,"line":1886},[478,14230,4656],{"class":710},[478,14232,11435],{"class":714},[478,14234,1181],{"class":710},[478,14236,13029],{"class":714},[478,14238,14239],{"class":480,"line":1898},[478,14240,2133],{"class":714},[478,14242,14243],{"class":480,"line":2180},[478,14244,2966],{"emptyLinePlaceholder":640},[478,14246,14247,14249,14251],{"class":480,"line":2185},[478,14248,717],{"class":710},[478,14250,2539],{"class":484},[478,14252,11419],{"class":714},[478,14254,14255],{"class":480,"line":2191},[478,14256,2966],{"emptyLinePlaceholder":640},[478,14258,14259,14261,14263,14266,14268,14270,14272,14274,14276,14278,14281,14283],{"class":480,"line":2196},[478,14260,7095],{"class":714},[478,14262,1739],{"class":710},[478,14264,14265],{"class":488}," \"ret = \"",[478,14267,2013],{"class":710},[478,14269,11951],{"class":484},[478,14271,263],{"class":714},[478,14273,1396],{"class":495},[478,14275,13001],{"class":714},[478,14277,1396],{"class":495},[478,14279,14280],{"class":714},") ",[478,14282,1739],{"class":710},[478,14284,9406],{"class":714},[478,14286,14287,14289,14291,14293,14295,14297,14299,14301,14303,14305],{"class":480,"line":2210},[478,14288,7095],{"class":714},[478,14290,1739],{"class":710},[478,14292,14265],{"class":488},[478,14294,2013],{"class":710},[478,14296,11951],{"class":484},[478,14298,263],{"class":714},[478,14300,1012],{"class":495},[478,14302,14280],{"class":714},[478,14304,1739],{"class":710},[478,14306,9406],{"class":714},[478,14308,14309],{"class":480,"line":2215},[478,14310,2966],{"emptyLinePlaceholder":640},[478,14312,14313,14315,14317,14319],{"class":480,"line":2221},[478,14314,2869],{"class":484},[478,14316,263],{"class":714},[478,14318,2874],{"class":488},[478,14320,3285],{"class":714},[478,14322,14323],{"class":480,"line":2241},[478,14324,2966],{"emptyLinePlaceholder":640},[478,14326,14327,14329,14331],{"class":480,"line":2246},[478,14328,4656],{"class":710},[478,14330,4659],{"class":495},[478,14332,1859],{"class":714},[478,14334,14335],{"class":480,"line":2260},[478,14336,2133],{"class":714},[19,14338,11898],{},[29,14340,14341,14344,14347],{},[32,14342,14343],{},"我传就用我；没传就用你",[32,14345,14346],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[32,14348,14349],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14351,14353],{"id":14352},"_72函数的占位参数","7.2函数的占位参数",[19,14355,14356],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14358,14359,201,14361],{},[45,14360,5747],{},[475,14362,14363],{},"返回值类型 函数名 (数据类型){}",[469,14365,14367],{"className":701,"code":14366,"language":703,"meta":54,"style":54},"\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",[475,14368,14369,14374,14392,14405,14409,14417,14421,14438,14442,14452,14456,14464],{"__ignoreMap":54},[478,14370,14371],{"class":480,"line":481},[478,14372,14373],{"class":770},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[478,14375,14376,14378,14380,14382,14384,14386,14388,14390],{"class":480,"line":565},[478,14377,5930],{"class":710},[478,14379,11951],{"class":484},[478,14381,263],{"class":714},[478,14383,717],{"class":710},[478,14385,1967],{"class":5782},[478,14387,13001],{"class":714},[478,14389,717],{"class":710},[478,14391,13008],{"class":714},[478,14393,14394,14396,14398,14401,14403],{"class":480,"line":579},[478,14395,7095],{"class":714},[478,14397,1739],{"class":710},[478,14399,14400],{"class":488}," \"this is func\"",[478,14402,2013],{"class":710},[478,14404,9406],{"class":714},[478,14406,14407],{"class":480,"line":593},[478,14408,2133],{"class":714},[478,14410,14411,14413,14415],{"class":480,"line":1769},[478,14412,717],{"class":710},[478,14414,2539],{"class":484},[478,14416,11419],{"class":714},[478,14418,14419],{"class":480,"line":1783},[478,14420,2966],{"emptyLinePlaceholder":640},[478,14422,14423,14425,14427,14429,14431,14433,14435],{"class":480,"line":1789},[478,14424,13851],{"class":484},[478,14426,263],{"class":714},[478,14428,1146],{"class":495},[478,14430,1079],{"class":714},[478,14432,1146],{"class":495},[478,14434,6532],{"class":714},[478,14436,14437],{"class":770}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[478,14439,14440],{"class":480,"line":1880},[478,14441,2966],{"emptyLinePlaceholder":640},[478,14443,14444,14446,14448,14450],{"class":480,"line":1886},[478,14445,2869],{"class":484},[478,14447,263],{"class":714},[478,14449,2874],{"class":488},[478,14451,3285],{"class":714},[478,14453,14454],{"class":480,"line":1898},[478,14455,2966],{"emptyLinePlaceholder":640},[478,14457,14458,14460,14462],{"class":480,"line":2180},[478,14459,4656],{"class":710},[478,14461,4659],{"class":495},[478,14463,1859],{"class":714},[478,14465,14466],{"class":480,"line":2185},[478,14467,2133],{"class":714},[19,14469,14470],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14472,14474],{"id":14473},"_73函数重载","7.3函数重载",[19,14476,14477],{},"意思是函数名是可以相同的",[129,14479,14481],{"id":14480},"_731基本语法","7.3.1基本语法",[19,14483,14484],{},"作用：函数名可以相同，提高复用性",[19,14486,14487],{},[45,14488,14489],{},"函数重载满足条件：",[1702,14491,14492,14495,14498],{},[32,14493,14494],{},"同一个作用域下",[32,14496,14497],{},"函数名称相同",[32,14499,14500,14501,14504,14505,14508,14509],{},"函数参数",[45,14502,14503],{},"类型不同","  或者 ",[45,14506,14507],{},"个数不同"," 或者 ",[45,14510,14511],{},"顺序不同",[19,14513,14514,14517],{},[45,14515,14516],{},"注意:","  函数的返回值不可以作为函数重载的条件",[469,14519,14521],{"className":10507,"code":14520,"language":10509,"meta":54,"style":54},"\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",[475,14522,14523,14528,14536,14540,14553,14557,14571,14575,14588,14592,14607,14611,14624,14628,14649,14653,14666,14670,14690,14694,14707,14711,14715,14720,14725,14730,14735,14740,14744,14748,14756,14760,14766,14776,14786,14800,14815,14819,14829,14833,14841],{"__ignoreMap":54},[478,14524,14525],{"class":480,"line":481},[478,14526,14527],{"class":770},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[478,14529,14530,14532,14534],{"class":480,"line":565},[478,14531,5930],{"class":710},[478,14533,11951],{"class":484},[478,14535,2542],{"class":714},[478,14537,14538],{"class":480,"line":579},[478,14539,2114],{"class":714},[478,14541,14542,14544,14546,14549,14551],{"class":480,"line":593},[478,14543,7095],{"class":714},[478,14545,1739],{"class":710},[478,14547,14548],{"class":488}," \"func 的调用！\"",[478,14550,2013],{"class":710},[478,14552,9406],{"class":714},[478,14554,14555],{"class":480,"line":1769},[478,14556,2133],{"class":714},[478,14558,14559,14561,14563,14565,14567,14569],{"class":480,"line":1783},[478,14560,5930],{"class":710},[478,14562,11951],{"class":484},[478,14564,263],{"class":714},[478,14566,717],{"class":710},[478,14568,1967],{"class":5782},[478,14570,720],{"class":714},[478,14572,14573],{"class":480,"line":1789},[478,14574,2114],{"class":714},[478,14576,14577,14579,14581,14584,14586],{"class":480,"line":1880},[478,14578,7095],{"class":714},[478,14580,1739],{"class":710},[478,14582,14583],{"class":488}," \"func (int a) 的调用！\"",[478,14585,2013],{"class":710},[478,14587,9406],{"class":714},[478,14589,14590],{"class":480,"line":1886},[478,14591,2133],{"class":714},[478,14593,14594,14596,14598,14600,14603,14605],{"class":480,"line":1898},[478,14595,5930],{"class":710},[478,14597,11951],{"class":484},[478,14599,263],{"class":714},[478,14601,14602],{"class":710},"double",[478,14604,1967],{"class":5782},[478,14606,720],{"class":714},[478,14608,14609],{"class":480,"line":2180},[478,14610,2114],{"class":714},[478,14612,14613,14615,14617,14620,14622],{"class":480,"line":2185},[478,14614,7095],{"class":714},[478,14616,1739],{"class":710},[478,14618,14619],{"class":488}," \"func (double a)的调用！\"",[478,14621,2013],{"class":710},[478,14623,9406],{"class":714},[478,14625,14626],{"class":480,"line":2191},[478,14627,2133],{"class":714},[478,14629,14630,14632,14634,14636,14638,14640,14643,14645,14647],{"class":480,"line":2196},[478,14631,5930],{"class":710},[478,14633,11951],{"class":484},[478,14635,263],{"class":714},[478,14637,717],{"class":710},[478,14639,1967],{"class":5782},[478,14641,14642],{"class":714}," ,",[478,14644,14602],{"class":710},[478,14646,3399],{"class":5782},[478,14648,720],{"class":714},[478,14650,14651],{"class":480,"line":2210},[478,14652,2114],{"class":714},[478,14654,14655,14657,14659,14662,14664],{"class":480,"line":2215},[478,14656,7095],{"class":714},[478,14658,1739],{"class":710},[478,14660,14661],{"class":488}," \"func (int a ,double b) 的调用！\"",[478,14663,2013],{"class":710},[478,14665,9406],{"class":714},[478,14667,14668],{"class":480,"line":2221},[478,14669,2133],{"class":714},[478,14671,14672,14674,14676,14678,14680,14682,14684,14686,14688],{"class":480,"line":2241},[478,14673,5930],{"class":710},[478,14675,11951],{"class":484},[478,14677,263],{"class":714},[478,14679,14602],{"class":710},[478,14681,1967],{"class":5782},[478,14683,14642],{"class":714},[478,14685,717],{"class":710},[478,14687,3399],{"class":5782},[478,14689,720],{"class":714},[478,14691,14692],{"class":480,"line":2246},[478,14693,2114],{"class":714},[478,14695,14696,14698,14700,14703,14705],{"class":480,"line":2260},[478,14697,7095],{"class":714},[478,14699,1739],{"class":710},[478,14701,14702],{"class":488}," \"func (double a ,int b)的调用！\"",[478,14704,2013],{"class":710},[478,14706,9406],{"class":714},[478,14708,14709],{"class":480,"line":2265},[478,14710,2133],{"class":714},[478,14712,14713],{"class":480,"line":2294},[478,14714,2966],{"emptyLinePlaceholder":640},[478,14716,14717],{"class":480,"line":2299},[478,14718,14719],{"class":770},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[478,14721,14722],{"class":480,"line":2316},[478,14723,14724],{"class":770},"\u002F\u002Fint func(double a, int b)\n",[478,14726,14727],{"class":480,"line":2321},[478,14728,14729],{"class":770},"\u002F\u002F{\n",[478,14731,14732],{"class":480,"line":2326},[478,14733,14734],{"class":770},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[478,14736,14737],{"class":480,"line":2331},[478,14738,14739],{"class":770},"\u002F\u002F}\n",[478,14741,14742],{"class":480,"line":2345},[478,14743,2966],{"emptyLinePlaceholder":640},[478,14745,14746],{"class":480,"line":2350},[478,14747,2966],{"emptyLinePlaceholder":640},[478,14749,14750,14752,14754],{"class":480,"line":3143},[478,14751,717],{"class":710},[478,14753,2539],{"class":484},[478,14755,11419],{"class":714},[478,14757,14758],{"class":480,"line":3157},[478,14759,2966],{"emptyLinePlaceholder":640},[478,14761,14762,14764],{"class":480,"line":3165},[478,14763,13851],{"class":484},[478,14765,6202],{"class":714},[478,14767,14768,14770,14772,14774],{"class":480,"line":3170},[478,14769,13851],{"class":484},[478,14771,263],{"class":714},[478,14773,1146],{"class":495},[478,14775,3285],{"class":714},[478,14777,14778,14780,14782,14784],{"class":480,"line":3176},[478,14779,13851],{"class":484},[478,14781,263],{"class":714},[478,14783,762],{"class":495},[478,14785,3285],{"class":714},[478,14787,14788,14790,14792,14794,14796,14798],{"class":480,"line":3182},[478,14789,13851],{"class":484},[478,14791,263],{"class":714},[478,14793,1146],{"class":495},[478,14795,1079],{"class":714},[478,14797,762],{"class":495},[478,14799,3285],{"class":714},[478,14801,14802,14804,14806,14808,14811,14813],{"class":480,"line":3187},[478,14803,13851],{"class":484},[478,14805,263],{"class":714},[478,14807,762],{"class":495},[478,14809,14810],{"class":714}," , ",[478,14812,1146],{"class":495},[478,14814,3285],{"class":714},[478,14816,14817],{"class":480,"line":8514},[478,14818,13776],{"class":714},[478,14820,14821,14823,14825,14827],{"class":480,"line":8538},[478,14822,2869],{"class":484},[478,14824,263],{"class":714},[478,14826,2874],{"class":488},[478,14828,3285],{"class":714},[478,14830,14831],{"class":480,"line":8543},[478,14832,2966],{"emptyLinePlaceholder":640},[478,14834,14835,14837,14839],{"class":480,"line":8549},[478,14836,4656],{"class":710},[478,14838,4659],{"class":495},[478,14840,1859],{"class":714},[478,14842,14843],{"class":480,"line":8576},[478,14844,2133],{"class":714},[19,14846,14847],{},"重点：函数返回值不可以作为函数重载条件！",[129,14849,14851],{"id":14850},"_732注意事项","7.3.2注意事项",[1702,14853,14854,14857],{},[32,14855,14856],{},"引用作为重载条件!!!",[32,14858,14859],{},"函数重载碰到函数默认参数",[469,14861,14863],{"className":701,"code":14862,"language":703,"meta":54,"style":54},"\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",[475,14864,14865,14870,14875,14879,14895,14899,14912,14916,14920,14938,14942,14955,14959,14963,14967,14972,14976,15000,15004,15017,15021,15025,15039,15043,15056,15060,15064,15072,15076,15088,15098,15111,15115,15119,15127,15131,15141,15145,15153],{"__ignoreMap":54},[478,14866,14867],{"class":480,"line":481},[478,14868,14869],{"class":770},"\u002F\u002F函数重载注意事项\n",[478,14871,14872],{"class":480,"line":565},[478,14873,14874],{"class":770},"\u002F\u002F1、引用作为重载条件\n",[478,14876,14877],{"class":480,"line":579},[478,14878,2966],{"emptyLinePlaceholder":640},[478,14880,14881,14883,14885,14887,14889,14891,14893],{"class":480,"line":593},[478,14882,5930],{"class":710},[478,14884,11951],{"class":484},[478,14886,263],{"class":714},[478,14888,717],{"class":710},[478,14890,11150],{"class":710},[478,14892,518],{"class":5782},[478,14894,720],{"class":714},[478,14896,14897],{"class":480,"line":1769},[478,14898,2114],{"class":714},[478,14900,14901,14903,14905,14908,14910],{"class":480,"line":1783},[478,14902,7095],{"class":714},[478,14904,1739],{"class":710},[478,14906,14907],{"class":488}," \"func (int &a) 调用 \"",[478,14909,2013],{"class":710},[478,14911,9406],{"class":714},[478,14913,14914],{"class":480,"line":1789},[478,14915,2133],{"class":714},[478,14917,14918],{"class":480,"line":1880},[478,14919,2966],{"emptyLinePlaceholder":640},[478,14921,14922,14924,14926,14928,14930,14932,14934,14936],{"class":480,"line":1886},[478,14923,5930],{"class":710},[478,14925,11951],{"class":484},[478,14927,263],{"class":714},[478,14929,7358],{"class":710},[478,14931,2948],{"class":710},[478,14933,11150],{"class":710},[478,14935,518],{"class":5782},[478,14937,720],{"class":714},[478,14939,14940],{"class":480,"line":1898},[478,14941,2114],{"class":714},[478,14943,14944,14946,14948,14951,14953],{"class":480,"line":2180},[478,14945,7095],{"class":714},[478,14947,1739],{"class":710},[478,14949,14950],{"class":488}," \"func (const int &a) 调用 \"",[478,14952,2013],{"class":710},[478,14954,9406],{"class":714},[478,14956,14957],{"class":480,"line":2185},[478,14958,2133],{"class":714},[478,14960,14961],{"class":480,"line":2191},[478,14962,2966],{"emptyLinePlaceholder":640},[478,14964,14965],{"class":480,"line":2196},[478,14966,2966],{"emptyLinePlaceholder":640},[478,14968,14969],{"class":480,"line":2210},[478,14970,14971],{"class":770},"\u002F\u002F2、函数重载碰到函数默认参数\n",[478,14973,14974],{"class":480,"line":2215},[478,14975,2966],{"emptyLinePlaceholder":640},[478,14977,14978,14980,14982,14984,14986,14988,14990,14992,14994,14996,14998],{"class":480,"line":2221},[478,14979,5930],{"class":710},[478,14981,14184],{"class":484},[478,14983,263],{"class":714},[478,14985,717],{"class":710},[478,14987,1967],{"class":5782},[478,14989,13001],{"class":714},[478,14991,717],{"class":710},[478,14993,3399],{"class":5782},[478,14995,14130],{"class":710},[478,14997,2604],{"class":495},[478,14999,720],{"class":714},[478,15001,15002],{"class":480,"line":2241},[478,15003,2114],{"class":714},[478,15005,15006,15008,15010,15013,15015],{"class":480,"line":2246},[478,15007,7095],{"class":714},[478,15009,1739],{"class":710},[478,15011,15012],{"class":488}," \"func2(int a, int b = 10) 调用\"",[478,15014,2013],{"class":710},[478,15016,9406],{"class":714},[478,15018,15019],{"class":480,"line":2260},[478,15020,2133],{"class":714},[478,15022,15023],{"class":480,"line":2265},[478,15024,2966],{"emptyLinePlaceholder":640},[478,15026,15027,15029,15031,15033,15035,15037],{"class":480,"line":2294},[478,15028,5930],{"class":710},[478,15030,14184],{"class":484},[478,15032,263],{"class":714},[478,15034,717],{"class":710},[478,15036,1967],{"class":5782},[478,15038,720],{"class":714},[478,15040,15041],{"class":480,"line":2299},[478,15042,2114],{"class":714},[478,15044,15045,15047,15049,15052,15054],{"class":480,"line":2316},[478,15046,7095],{"class":714},[478,15048,1739],{"class":710},[478,15050,15051],{"class":488}," \"func2(int a) 调用\"",[478,15053,2013],{"class":710},[478,15055,9406],{"class":714},[478,15057,15058],{"class":480,"line":2321},[478,15059,2133],{"class":714},[478,15061,15062],{"class":480,"line":2326},[478,15063,2966],{"emptyLinePlaceholder":640},[478,15065,15066,15068,15070],{"class":480,"line":2331},[478,15067,717],{"class":710},[478,15069,2539],{"class":484},[478,15071,11419],{"class":714},[478,15073,15074],{"class":480,"line":2345},[478,15075,13776],{"class":714},[478,15077,15078,15080,15082,15084,15086],{"class":480,"line":2350},[478,15079,2551],{"class":710},[478,15081,11435],{"class":714},[478,15083,759],{"class":710},[478,15085,2604],{"class":495},[478,15087,1859],{"class":714},[478,15089,15090,15092,15095],{"class":480,"line":3143},[478,15091,13851],{"class":484},[478,15093,15094],{"class":714},"(a);",[478,15096,15097],{"class":770}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[478,15099,15100,15102,15104,15106,15108],{"class":480,"line":3157},[478,15101,13851],{"class":484},[478,15103,263],{"class":714},[478,15105,1146],{"class":495},[478,15107,6532],{"class":714},[478,15109,15110],{"class":770},"\u002F\u002F调用有const   10是个常量\n",[478,15112,15113],{"class":480,"line":3165},[478,15114,2966],{"emptyLinePlaceholder":640},[478,15116,15117],{"class":480,"line":3170},[478,15118,2966],{"emptyLinePlaceholder":640},[478,15120,15121,15124],{"class":480,"line":3176},[478,15122,15123],{"class":770},"    \u002F\u002Ffunc2(10);",[478,15125,15126],{"class":770}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[478,15128,15129],{"class":480,"line":3182},[478,15130,2966],{"emptyLinePlaceholder":640},[478,15132,15133,15135,15137,15139],{"class":480,"line":3187},[478,15134,2869],{"class":484},[478,15136,263],{"class":714},[478,15138,2874],{"class":488},[478,15140,3285],{"class":714},[478,15142,15143],{"class":480,"line":8514},[478,15144,2966],{"emptyLinePlaceholder":640},[478,15146,15147,15149,15151],{"class":480,"line":8538},[478,15148,4656],{"class":710},[478,15150,4659],{"class":495},[478,15152,1859],{"class":714},[478,15154,15155],{"class":480,"line":8543},[478,15156,2133],{"class":714},[617,15158,15159],{},"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":54,"searchDepth":565,"depth":565,"links":15161},[15162,15163,15164],{"id":14095,"depth":565,"text":14096},{"id":14352,"depth":565,"text":14353},{"id":14473,"depth":565,"text":14474,"children":15165},[15166,15167],{"id":14480,"depth":579,"text":14481},{"id":14850,"depth":579,"text":14851},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14087,"description":54},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15174,"title":15175,"body":15176,"description":23930,"extension":638,"meta":23931,"navigation":640,"path":23932,"seo":23933,"stem":23934,"__hash__":23935},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15177,"toc":23911},[15178,15181,15187,15194,15199,15202,15205,15208,15212,15216,15219,15222,15230,15235,15238,15245,15250,15409,15412,15665,15668,15671,15674,15679,15682,15685,15696,15701,15937,15941,15951,15954,15962,16109,16113,16116,16119,16123,16568,16572,16580,16588,17500,17507,17512,18140,18143,18146,18149,18268,18271,18358,18361,18487,18490,18584,18587,18940,18944,18952,18956,18963,18966,18969,18980,18986,18991,19003,19011,19031,19039,19056,19242,19245,19249,19252,19255,19258,19261,19264,19267,19270,19730,19736,19740,19743,19754,20341,20344,20833,20837,20840,20843,20846,20849,20852,20860,21256,21260,21263,21266,21713,21716,21719,21724,21727,21732,21735,21739,21742,21744,21750,21753,22059,22069,22110,22114,22117,22119,22152,22155,22462,22464,22479,22482,22505,22514,22520,22523,22527,22530,22533,22538,22549,22554,22562,22567,22697,22700,22703,22878,22883,23095,23099,23102,23216,23221,23460,23464,23468,23471,23474,23479,23584,23587,23590,23593,23597,23708,23711,23714,23719,23771,23774,23777,23782,23828,23831,23836,23904,23906,23909],[10,15179,15175],{"id":15180},"_8类和对象",[19,15182,15183,15184],{},"C++面向对象的三大特性为",[45,15185,15186],{},"封装、继承、多态",[19,15188,15189,15190,15193],{},"C++认为",[45,15191,15192],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15195,15196],{},[45,15197,15198],{},"例如：",[19,15200,15201],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15203,15204],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15206,15207],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15209,15211],{"id":15210},"_81封装","8.1封装",[129,15213,15215],{"id":15214},"_811封装的意义","8.1.1封装的意义",[19,15217,15218],{},"封装是C++面向对象三大特性之一",[19,15220,15221],{},"封装的意义：",[1702,15223,15224,15227],{},[32,15225,15226],{},"将属性和行为作为一个整体，表现生活中的事物",[32,15228,15229],{},"将属性和行为加以权限控制",[19,15231,15232],{},[45,15233,15234],{},"封装意义一：",[19,15236,15237],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15239,15240,201,15242],{},[45,15241,5747],{},[475,15243,15244],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[29,15246,15247],{},[32,15248,15249],{},"**示例1：**设计一个圆类，求圆的周长",[469,15251,15253],{"className":701,"code":15252,"language":703,"meta":54,"style":54},"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",[475,15254,15255,15263,15267,15272,15277,15282,15287,15294,15299,15309,15313,15331,15335,15339,15347,15351,15356,15361,15366,15371,15382,15405],{"__ignoreMap":54},[478,15256,15257,15260],{"class":480,"line":481},[478,15258,15259],{"class":710},"class",[478,15261,15262],{"class":484}," Circle\n",[478,15264,15265],{"class":480,"line":565},[478,15266,2114],{"class":714},[478,15268,15269],{"class":480,"line":579},[478,15270,15271],{"class":770},"    \u002F\u002F访问权限\n",[478,15273,15274],{"class":480,"line":593},[478,15275,15276],{"class":770},"    \u002F\u002F公共权限\n",[478,15278,15279],{"class":480,"line":1769},[478,15280,15281],{"class":710},"public:\n",[478,15283,15284],{"class":480,"line":1783},[478,15285,15286],{"class":770},"    \u002F\u002F属性\n",[478,15288,15289,15291],{"class":480,"line":1789},[478,15290,2551],{"class":710},[478,15292,15293],{"class":714}," m_r;\n",[478,15295,15296],{"class":480,"line":1880},[478,15297,15298],{"class":770},"    \u002F\u002F行为\n",[478,15300,15301,15304,15307],{"class":480,"line":1886},[478,15302,15303],{"class":710},"    double",[478,15305,15306],{"class":484}," calculateZC",[478,15308,2542],{"class":714},[478,15310,15311],{"class":480,"line":1898},[478,15312,2596],{"class":714},[478,15314,15315,15318,15321,15323,15326,15328],{"class":480,"line":2180},[478,15316,15317],{"class":710},"        return",[478,15319,15320],{"class":495}," 2",[478,15322,1155],{"class":710},[478,15324,15325],{"class":714},"PI",[478,15327,1155],{"class":710},[478,15329,15330],{"class":714},"m_r;\n",[478,15332,15333],{"class":480,"line":2185},[478,15334,2753],{"class":714},[478,15336,15337],{"class":480,"line":2191},[478,15338,4561],{"class":714},[478,15340,15341,15343,15345],{"class":480,"line":2196},[478,15342,717],{"class":710},[478,15344,2539],{"class":484},[478,15346,2542],{"class":714},[478,15348,15349],{"class":480,"line":2210},[478,15350,2114],{"class":714},[478,15352,15353],{"class":480,"line":2215},[478,15354,15355],{"class":770},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[478,15357,15358],{"class":480,"line":2221},[478,15359,15360],{"class":770},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[478,15362,15363],{"class":480,"line":2241},[478,15364,15365],{"class":714},"    Circle c1;\n",[478,15367,15368],{"class":480,"line":2246},[478,15369,15370],{"class":770},"    \u002F\u002F给圆对象 的属性进行赋值\n",[478,15372,15373,15376,15378,15380],{"class":480,"line":2260},[478,15374,15375],{"class":714},"    c1.m_r",[478,15377,759],{"class":710},[478,15379,1146],{"class":495},[478,15381,1859],{"class":714},[478,15383,15384,15386,15388,15391,15393,15396,15399,15401,15403],{"class":480,"line":2265},[478,15385,2119],{"class":714},[478,15387,1739],{"class":710},[478,15389,15390],{"class":488},"\"圆的周长\"",[478,15392,1739],{"class":710},[478,15394,15395],{"class":714},"c1.",[478,15397,15398],{"class":484},"calculateZC",[478,15400,2993],{"class":714},[478,15402,1739],{"class":710},[478,15404,1761],{"class":714},[478,15406,15407],{"class":480,"line":2294},[478,15408,2133],{"class":714},[19,15410,15411],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[469,15413,15415],{"className":701,"code":15414,"language":703,"meta":54,"style":54},"#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",[475,15416,15417,15423,15433,15439,15445,15449,15453,15458,15465,15470,15488,15492,15502,15506,15511,15527,15531,15541,15545,15550,15558,15562,15594,15598,15602,15610,15614,15619,15624,15638,15652,15661],{"__ignoreMap":54},[478,15418,15419,15421],{"class":480,"line":481},[478,15420,2516],{"class":710},[478,15422,2519],{"class":488},[478,15424,15425,15427,15429,15431],{"class":480,"line":565},[478,15426,2524],{"class":710},[478,15428,2527],{"class":710},[478,15430,2530],{"class":484},[478,15432,1859],{"class":714},[478,15434,15435,15437],{"class":480,"line":579},[478,15436,2516],{"class":710},[478,15438,8315],{"class":488},[478,15440,15441,15443],{"class":480,"line":593},[478,15442,15259],{"class":710},[478,15444,8328],{"class":484},[478,15446,15447],{"class":480,"line":1769},[478,15448,2114],{"class":714},[478,15450,15451],{"class":480,"line":1783},[478,15452,15281],{"class":710},[478,15454,15455],{"class":480,"line":1789},[478,15456,15457],{"class":714},"    string m_name;\n",[478,15459,15460,15462],{"class":480,"line":1880},[478,15461,2551],{"class":710},[478,15463,15464],{"class":714}," m_id;\n",[478,15466,15467],{"class":480,"line":1886},[478,15468,15469],{"class":770},"    \u002F\u002F赋值姓名\n",[478,15471,15472,15475,15478,15480,15483,15486],{"class":480,"line":1898},[478,15473,15474],{"class":710},"    void",[478,15476,15477],{"class":484}," setName",[478,15479,263],{"class":714},[478,15481,15482],{"class":484},"string",[478,15484,15485],{"class":5782}," name",[478,15487,720],{"class":714},[478,15489,15490],{"class":480,"line":2180},[478,15491,2596],{"class":714},[478,15493,15494,15497,15499],{"class":480,"line":2185},[478,15495,15496],{"class":714},"        m_name",[478,15498,759],{"class":710},[478,15500,15501],{"class":714},"name;\n",[478,15503,15504],{"class":480,"line":2191},[478,15505,2753],{"class":714},[478,15507,15508],{"class":480,"line":2196},[478,15509,15510],{"class":770},"    \u002F\u002F赋值学号\n",[478,15512,15513,15515,15518,15520,15522,15525],{"class":480,"line":2210},[478,15514,15474],{"class":710},[478,15516,15517],{"class":484}," setId",[478,15519,263],{"class":714},[478,15521,717],{"class":710},[478,15523,15524],{"class":5782}," id",[478,15526,720],{"class":714},[478,15528,15529],{"class":480,"line":2215},[478,15530,2596],{"class":714},[478,15532,15533,15536,15538],{"class":480,"line":2221},[478,15534,15535],{"class":714},"        m_id",[478,15537,759],{"class":710},[478,15539,15540],{"class":714},"id;\n",[478,15542,15543],{"class":480,"line":2241},[478,15544,2753],{"class":714},[478,15546,15547],{"class":480,"line":2246},[478,15548,15549],{"class":770},"    \u002F\u002F打印学生信息\n",[478,15551,15552,15554,15556],{"class":480,"line":2260},[478,15553,15474],{"class":710},[478,15555,10181],{"class":484},[478,15557,2542],{"class":714},[478,15559,15560],{"class":480,"line":2265},[478,15561,2596],{"class":714},[478,15563,15564,15566,15568,15571,15573,15576,15578,15580,15582,15585,15587,15590,15592],{"class":480,"line":2294},[478,15565,4017],{"class":714},[478,15567,1739],{"class":710},[478,15569,15570],{"class":488},"\"姓名：\"",[478,15572,1739],{"class":710},[478,15574,15575],{"class":714},"m_name",[478,15577,1739],{"class":710},[478,15579,4925],{"class":488},[478,15581,1739],{"class":710},[478,15583,15584],{"class":488},"\"学号：\"",[478,15586,1739],{"class":710},[478,15588,15589],{"class":714},"m_id",[478,15591,1739],{"class":710},[478,15593,1761],{"class":714},[478,15595,15596],{"class":480,"line":2299},[478,15597,2753],{"class":714},[478,15599,15600],{"class":480,"line":2316},[478,15601,4561],{"class":714},[478,15603,15604,15606,15608],{"class":480,"line":2321},[478,15605,717],{"class":710},[478,15607,2539],{"class":484},[478,15609,2542],{"class":714},[478,15611,15612],{"class":480,"line":2326},[478,15613,2114],{"class":714},[478,15615,15616],{"class":480,"line":2331},[478,15617,15618],{"class":770},"    \u002F\u002F实例化\n",[478,15620,15621],{"class":480,"line":2345},[478,15622,15623],{"class":714},"    Student s1;\n",[478,15625,15626,15629,15632,15634,15636],{"class":480,"line":2350},[478,15627,15628],{"class":714},"    s1.",[478,15630,15631],{"class":484},"setName",[478,15633,263],{"class":714},[478,15635,8482],{"class":488},[478,15637,3285],{"class":714},[478,15639,15640,15642,15645,15647,15650],{"class":480,"line":3143},[478,15641,15628],{"class":714},[478,15643,15644],{"class":484},"setId",[478,15646,263],{"class":714},[478,15648,15649],{"class":495},"123456",[478,15651,3285],{"class":714},[478,15653,15654,15656,15659],{"class":480,"line":3157},[478,15655,15628],{"class":714},[478,15657,15658],{"class":484},"printInfo",[478,15660,6202],{"class":714},[478,15662,15663],{"class":480,"line":3165},[478,15664,2133],{"class":714},[19,15666,15667],{},"类中的属性和行为统称为成员",[19,15669,15670],{},"属性：成员属性(成员变量)",[19,15672,15673],{},"方法：成员函数(成员方法)",[19,15675,15676],{},[45,15677,15678],{},"封装意义二：",[19,15680,15681],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15683,15684],{},"访问权限有三种：",[29,15686,15687,15690,15693],{},[32,15688,15689],{},"public        公共权限",[32,15691,15692],{},"protected 保护权限",[32,15694,15695],{},"private      私有权限",[19,15697,15698],{},[45,15699,15700],{},"示例：",[469,15702,15704],{"className":10507,"code":15703,"language":10509,"meta":54,"style":54},"\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",[475,15705,15706,15711,15716,15721,15726,15730,15737,15741,15746,15750,15755,15759,15764,15769,15774,15778,15783,15788,15795,15799,15803,15811,15815,15826,15838,15850,15854,15858,15862,15870,15874,15879,15891,15899,15907,15911,15921,15925,15933],{"__ignoreMap":54},[478,15707,15708],{"class":480,"line":481},[478,15709,15710],{"class":770},"\u002F\u002F三种权限\n",[478,15712,15713],{"class":480,"line":565},[478,15714,15715],{"class":770},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[478,15717,15718],{"class":480,"line":579},[478,15719,15720],{"class":770},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[478,15722,15723],{"class":480,"line":593},[478,15724,15725],{"class":770},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[478,15727,15728],{"class":480,"line":1769},[478,15729,2966],{"emptyLinePlaceholder":640},[478,15731,15732,15734],{"class":480,"line":1783},[478,15733,15259],{"class":710},[478,15735,15736],{"class":484}," Person\n",[478,15738,15739],{"class":480,"line":1789},[478,15740,2114],{"class":714},[478,15742,15743],{"class":480,"line":1880},[478,15744,15745],{"class":770},"    \u002F\u002F姓名  公共权限\n",[478,15747,15748],{"class":480,"line":1886},[478,15749,15281],{"class":710},[478,15751,15752],{"class":480,"line":1898},[478,15753,15754],{"class":714},"    string m_Name;\n",[478,15756,15757],{"class":480,"line":2180},[478,15758,2966],{"emptyLinePlaceholder":640},[478,15760,15761],{"class":480,"line":2185},[478,15762,15763],{"class":770},"    \u002F\u002F汽车  保护权限\n",[478,15765,15766],{"class":480,"line":2191},[478,15767,15768],{"class":710},"protected:\n",[478,15770,15771],{"class":480,"line":2196},[478,15772,15773],{"class":714},"    string m_Car;\n",[478,15775,15776],{"class":480,"line":2210},[478,15777,2966],{"emptyLinePlaceholder":640},[478,15779,15780],{"class":480,"line":2215},[478,15781,15782],{"class":770},"    \u002F\u002F银行卡密码  私有权限\n",[478,15784,15785],{"class":480,"line":2221},[478,15786,15787],{"class":710},"private:\n",[478,15789,15790,15792],{"class":480,"line":2241},[478,15791,2551],{"class":710},[478,15793,15794],{"class":714}," m_Password;\n",[478,15796,15797],{"class":480,"line":2246},[478,15798,2966],{"emptyLinePlaceholder":640},[478,15800,15801],{"class":480,"line":2260},[478,15802,15281],{"class":710},[478,15804,15805,15807,15809],{"class":480,"line":2265},[478,15806,15474],{"class":710},[478,15808,11951],{"class":484},[478,15810,2542],{"class":714},[478,15812,15813],{"class":480,"line":2294},[478,15814,2596],{"class":714},[478,15816,15817,15820,15822,15824],{"class":480,"line":2299},[478,15818,15819],{"class":714},"        m_Name ",[478,15821,759],{"class":710},[478,15823,9504],{"class":488},[478,15825,1859],{"class":714},[478,15827,15828,15831,15833,15836],{"class":480,"line":2316},[478,15829,15830],{"class":714},"        m_Car ",[478,15832,759],{"class":710},[478,15834,15835],{"class":488}," \"拖拉机\"",[478,15837,1859],{"class":714},[478,15839,15840,15843,15845,15848],{"class":480,"line":2321},[478,15841,15842],{"class":714},"        m_Password ",[478,15844,759],{"class":710},[478,15846,15847],{"class":495}," 123456",[478,15849,1859],{"class":714},[478,15851,15852],{"class":480,"line":2326},[478,15853,2753],{"class":714},[478,15855,15856],{"class":480,"line":2331},[478,15857,4561],{"class":714},[478,15859,15860],{"class":480,"line":2345},[478,15861,2966],{"emptyLinePlaceholder":640},[478,15863,15864,15866,15868],{"class":480,"line":2350},[478,15865,717],{"class":710},[478,15867,2539],{"class":484},[478,15869,11419],{"class":714},[478,15871,15872],{"class":480,"line":3143},[478,15873,2966],{"emptyLinePlaceholder":640},[478,15875,15876],{"class":480,"line":3157},[478,15877,15878],{"class":714},"    Person p;\n",[478,15880,15881,15884,15886,15889],{"class":480,"line":3165},[478,15882,15883],{"class":714},"    p.m_Name ",[478,15885,759],{"class":710},[478,15887,15888],{"class":488}," \"李四\"",[478,15890,1859],{"class":714},[478,15892,15893,15896],{"class":480,"line":3170},[478,15894,15895],{"class":770},"    \u002F\u002Fp.m_Car = \"奔驰\";",[478,15897,15898],{"class":770},"  \u002F\u002F保护权限类外访问不到\n",[478,15900,15901,15904],{"class":480,"line":3176},[478,15902,15903],{"class":770},"    \u002F\u002Fp.m_Password = 123;",[478,15905,15906],{"class":770}," \u002F\u002F私有权限类外访问不到\n",[478,15908,15909],{"class":480,"line":3182},[478,15910,2966],{"emptyLinePlaceholder":640},[478,15912,15913,15915,15917,15919],{"class":480,"line":3187},[478,15914,2869],{"class":484},[478,15916,263],{"class":714},[478,15918,2874],{"class":488},[478,15920,3285],{"class":714},[478,15922,15923],{"class":480,"line":8514},[478,15924,2966],{"emptyLinePlaceholder":640},[478,15926,15927,15929,15931],{"class":480,"line":8538},[478,15928,4656],{"class":710},[478,15930,4659],{"class":495},[478,15932,1859],{"class":714},[478,15934,15935],{"class":480,"line":8543},[478,15936,2133],{"class":714},[129,15938,15940],{"id":15939},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15942,15943,15944,15947,15948],{},"在C++中 struct和class唯一的",[45,15945,15946],{},"区别","就在于 ",[45,15949,15950],{},"默认的访问权限不同",[19,15952,15953],{},"区别：",[1702,15955,15956,15959],{},[32,15957,15958],{},"struct 默认权限为公共",[32,15960,15961],{},"class   默认权限为私有",[469,15963,15965],{"className":10507,"code":15964,"language":10509,"meta":54,"style":54},"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",[475,15966,15967,15974,15978,15988,15992,15996,16003,16007,16017,16021,16025,16033,16037,16042,16056,16060,16065,16079,16083,16093,16097,16105],{"__ignoreMap":54},[478,15968,15969,15971],{"class":480,"line":481},[478,15970,15259],{"class":710},[478,15972,15973],{"class":484}," C1\n",[478,15975,15976],{"class":480,"line":565},[478,15977,2114],{"class":714},[478,15979,15980,15982,15985],{"class":480,"line":579},[478,15981,2551],{"class":710},[478,15983,15984],{"class":714},"  m_A;",[478,15986,15987],{"class":770}," \u002F\u002F默认是私有权限\n",[478,15989,15990],{"class":480,"line":593},[478,15991,4561],{"class":714},[478,15993,15994],{"class":480,"line":1769},[478,15995,2966],{"emptyLinePlaceholder":640},[478,15997,15998,16000],{"class":480,"line":1783},[478,15999,8325],{"class":710},[478,16001,16002],{"class":484}," C2\n",[478,16004,16005],{"class":480,"line":1789},[478,16006,2114],{"class":714},[478,16008,16009,16011,16014],{"class":480,"line":1880},[478,16010,2551],{"class":710},[478,16012,16013],{"class":714}," m_A;",[478,16015,16016],{"class":770},"  \u002F\u002F默认是公共权限\n",[478,16018,16019],{"class":480,"line":1886},[478,16020,4561],{"class":714},[478,16022,16023],{"class":480,"line":1898},[478,16024,2966],{"emptyLinePlaceholder":640},[478,16026,16027,16029,16031],{"class":480,"line":2180},[478,16028,717],{"class":710},[478,16030,2539],{"class":484},[478,16032,11419],{"class":714},[478,16034,16035],{"class":480,"line":2185},[478,16036,2966],{"emptyLinePlaceholder":640},[478,16038,16039],{"class":480,"line":2191},[478,16040,16041],{"class":714},"    C1 c1;\n",[478,16043,16044,16047,16049,16051,16053],{"class":480,"line":2196},[478,16045,16046],{"class":714},"    c1.m_A ",[478,16048,759],{"class":710},[478,16050,2604],{"class":495},[478,16052,767],{"class":714},[478,16054,16055],{"class":770}," \u002F\u002F错误，访问权限是私有\n",[478,16057,16058],{"class":480,"line":2210},[478,16059,2966],{"emptyLinePlaceholder":640},[478,16061,16062],{"class":480,"line":2215},[478,16063,16064],{"class":714},"    C2 c2;\n",[478,16066,16067,16070,16072,16074,16076],{"class":480,"line":2221},[478,16068,16069],{"class":714},"    c2.m_A ",[478,16071,759],{"class":710},[478,16073,2604],{"class":495},[478,16075,767],{"class":714},[478,16077,16078],{"class":770}," \u002F\u002F正确，访问权限是公共\n",[478,16080,16081],{"class":480,"line":2241},[478,16082,2966],{"emptyLinePlaceholder":640},[478,16084,16085,16087,16089,16091],{"class":480,"line":2246},[478,16086,2869],{"class":484},[478,16088,263],{"class":714},[478,16090,2874],{"class":488},[478,16092,3285],{"class":714},[478,16094,16095],{"class":480,"line":2260},[478,16096,2966],{"emptyLinePlaceholder":640},[478,16098,16099,16101,16103],{"class":480,"line":2265},[478,16100,4656],{"class":710},[478,16102,4659],{"class":495},[478,16104,1859],{"class":714},[478,16106,16107],{"class":480,"line":2294},[478,16108,2133],{"class":714},[129,16110,16112],{"id":16111},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16114,16115],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16117,16118],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16120,16121],{},[45,16122,15700],{},[469,16124,16126],{"className":10507,"code":16125,"language":10509,"meta":54,"style":54},"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",[475,16127,16128,16138,16142,16146,16151,16165,16174,16178,16188,16192,16199,16203,16207,16211,16216,16225,16232,16236,16241,16257,16280,16293,16300,16304,16313,16317,16321,16326,16342,16352,16356,16360,16364,16372,16376,16386,16390,16398,16402,16406,16414,16418,16422,16427,16440,16463,16467,16472,16485,16507,16511,16516,16530,16538,16542,16552,16556,16564],{"__ignoreMap":54},[478,16129,16130,16132,16135],{"class":480,"line":481},[478,16131,15259],{"class":710},[478,16133,16134],{"class":484}," Person",[478,16136,16137],{"class":714}," {\n",[478,16139,16140],{"class":480,"line":565},[478,16141,15281],{"class":710},[478,16143,16144],{"class":480,"line":579},[478,16145,2966],{"emptyLinePlaceholder":640},[478,16147,16148],{"class":480,"line":593},[478,16149,16150],{"class":770},"    \u002F\u002F姓名设置可读可写\n",[478,16152,16153,16155,16157,16159,16161,16163],{"class":480,"line":1769},[478,16154,15474],{"class":710},[478,16156,15477],{"class":484},[478,16158,263],{"class":714},[478,16160,15482],{"class":484},[478,16162,15485],{"class":5782},[478,16164,13008],{"class":714},[478,16166,16167,16169,16171],{"class":480,"line":1783},[478,16168,15819],{"class":714},[478,16170,759],{"class":710},[478,16172,16173],{"class":714}," name;\n",[478,16175,16176],{"class":480,"line":1789},[478,16177,2753],{"class":714},[478,16179,16180,16183,16186],{"class":480,"line":1880},[478,16181,16182],{"class":484},"    string",[478,16184,16185],{"class":484}," getName",[478,16187,2542],{"class":714},[478,16189,16190],{"class":480,"line":1886},[478,16191,2596],{"class":714},[478,16193,16194,16196],{"class":480,"line":1898},[478,16195,15317],{"class":710},[478,16197,16198],{"class":714}," m_Name;\n",[478,16200,16201],{"class":480,"line":2180},[478,16202,2753],{"class":714},[478,16204,16205],{"class":480,"line":2185},[478,16206,2966],{"emptyLinePlaceholder":640},[478,16208,16209],{"class":480,"line":2191},[478,16210,2966],{"emptyLinePlaceholder":640},[478,16212,16213],{"class":480,"line":2196},[478,16214,16215],{"class":770},"    \u002F\u002F获取年龄 \n",[478,16217,16218,16220,16223],{"class":480,"line":2210},[478,16219,2551],{"class":710},[478,16221,16222],{"class":484}," getAge",[478,16224,11419],{"class":714},[478,16226,16227,16229],{"class":480,"line":2215},[478,16228,15317],{"class":710},[478,16230,16231],{"class":714}," m_Age;\n",[478,16233,16234],{"class":480,"line":2221},[478,16235,2753],{"class":714},[478,16237,16238],{"class":480,"line":2241},[478,16239,16240],{"class":770},"    \u002F\u002F设置年龄\n",[478,16242,16243,16245,16248,16250,16252,16255],{"class":480,"line":2246},[478,16244,15474],{"class":710},[478,16246,16247],{"class":484}," setAge",[478,16249,263],{"class":714},[478,16251,717],{"class":710},[478,16253,16254],{"class":5782}," age",[478,16256,13008],{"class":714},[478,16258,16259,16261,16264,16266,16268,16270,16273,16275,16278],{"class":480,"line":2260},[478,16260,3063],{"class":710},[478,16262,16263],{"class":714}," (age ",[478,16265,1605],{"class":710},[478,16267,4659],{"class":495},[478,16269,3821],{"class":710},[478,16271,16272],{"class":714}," age ",[478,16274,1655],{"class":710},[478,16276,16277],{"class":495}," 150",[478,16279,13008],{"class":714},[478,16281,16282,16284,16286,16289,16291],{"class":480,"line":2265},[478,16283,10285],{"class":714},[478,16285,1739],{"class":710},[478,16287,16288],{"class":488}," \"你个老妖精!\"",[478,16290,2013],{"class":710},[478,16292,9406],{"class":714},[478,16294,16295,16298],{"class":480,"line":2294},[478,16296,16297],{"class":710},"            return",[478,16299,1859],{"class":714},[478,16301,16302],{"class":480,"line":2299},[478,16303,3095],{"class":714},[478,16305,16306,16309,16311],{"class":480,"line":2316},[478,16307,16308],{"class":714},"        m_Age ",[478,16310,759],{"class":710},[478,16312,8363],{"class":714},[478,16314,16315],{"class":480,"line":2321},[478,16316,2753],{"class":714},[478,16318,16319],{"class":480,"line":2326},[478,16320,2966],{"emptyLinePlaceholder":640},[478,16322,16323],{"class":480,"line":2331},[478,16324,16325],{"class":770},"    \u002F\u002F情人设置为只写\n",[478,16327,16328,16330,16333,16335,16337,16340],{"class":480,"line":2345},[478,16329,15474],{"class":710},[478,16331,16332],{"class":484}," setLover",[478,16334,263],{"class":714},[478,16336,15482],{"class":484},[478,16338,16339],{"class":5782}," lover",[478,16341,13008],{"class":714},[478,16343,16344,16347,16349],{"class":480,"line":2350},[478,16345,16346],{"class":714},"        m_Lover ",[478,16348,759],{"class":710},[478,16350,16351],{"class":714}," lover;\n",[478,16353,16354],{"class":480,"line":3143},[478,16355,2753],{"class":714},[478,16357,16358],{"class":480,"line":3157},[478,16359,2966],{"emptyLinePlaceholder":640},[478,16361,16362],{"class":480,"line":3165},[478,16363,15787],{"class":710},[478,16365,16366,16369],{"class":480,"line":3170},[478,16367,16368],{"class":714},"    string m_Name;",[478,16370,16371],{"class":770}," \u002F\u002F可读可写  姓名\n",[478,16373,16374],{"class":480,"line":3176},[478,16375,13776],{"class":714},[478,16377,16378,16380,16383],{"class":480,"line":3182},[478,16379,2551],{"class":710},[478,16381,16382],{"class":714}," m_Age;",[478,16384,16385],{"class":770}," \u002F\u002F只读  年龄\n",[478,16387,16388],{"class":480,"line":3187},[478,16389,2966],{"emptyLinePlaceholder":640},[478,16391,16392,16395],{"class":480,"line":8514},[478,16393,16394],{"class":714},"    string m_Lover;",[478,16396,16397],{"class":770}," \u002F\u002F只写  情人\n",[478,16399,16400],{"class":480,"line":8538},[478,16401,4561],{"class":714},[478,16403,16404],{"class":480,"line":8543},[478,16405,2966],{"emptyLinePlaceholder":640},[478,16407,16408,16410,16412],{"class":480,"line":8549},[478,16409,717],{"class":710},[478,16411,2539],{"class":484},[478,16413,11419],{"class":714},[478,16415,16416],{"class":480,"line":8576},[478,16417,2966],{"emptyLinePlaceholder":640},[478,16419,16420],{"class":480,"line":8581},[478,16421,15878],{"class":714},[478,16423,16424],{"class":480,"line":8587},[478,16425,16426],{"class":770},"    \u002F\u002F姓名设置\n",[478,16428,16429,16432,16434,16436,16438],{"class":480,"line":8599},[478,16430,16431],{"class":714},"    p.",[478,16433,15631],{"class":484},[478,16435,263],{"class":714},[478,16437,8482],{"class":488},[478,16439,3285],{"class":714},[478,16441,16442,16444,16446,16449,16451,16454,16457,16459,16461],{"class":480,"line":8611},[478,16443,7095],{"class":714},[478,16445,1739],{"class":710},[478,16447,16448],{"class":488}," \"姓名： \"",[478,16450,2013],{"class":710},[478,16452,16453],{"class":714}," p.",[478,16455,16456],{"class":484},"getName",[478,16458,13616],{"class":714},[478,16460,1739],{"class":710},[478,16462,9406],{"class":714},[478,16464,16465],{"class":480,"line":8623},[478,16466,2966],{"emptyLinePlaceholder":640},[478,16468,16469],{"class":480,"line":10282},[478,16470,16471],{"class":770},"    \u002F\u002F年龄设置\n",[478,16473,16474,16476,16479,16481,16483],{"class":480,"line":10307},[478,16475,16431],{"class":714},[478,16477,16478],{"class":484},"setAge",[478,16480,263],{"class":714},[478,16482,1354],{"class":495},[478,16484,3285],{"class":714},[478,16486,16487,16489,16491,16494,16496,16498,16501,16503,16505],{"class":480,"line":10330},[478,16488,7095],{"class":714},[478,16490,1739],{"class":710},[478,16492,16493],{"class":488}," \"年龄： \"",[478,16495,2013],{"class":710},[478,16497,16453],{"class":714},[478,16499,16500],{"class":484},"getAge",[478,16502,13616],{"class":714},[478,16504,1739],{"class":710},[478,16506,9406],{"class":714},[478,16508,16509],{"class":480,"line":10354},[478,16510,2966],{"emptyLinePlaceholder":640},[478,16512,16513],{"class":480,"line":10359},[478,16514,16515],{"class":770},"    \u002F\u002F情人设置\n",[478,16517,16518,16520,16523,16525,16528],{"class":480,"line":10364},[478,16519,16431],{"class":714},[478,16521,16522],{"class":484},"setLover",[478,16524,263],{"class":714},[478,16526,16527],{"class":488},"\"苍井\"",[478,16529,3285],{"class":714},[478,16531,16532,16535],{"class":480,"line":10369},[478,16533,16534],{"class":770},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[478,16536,16537],{"class":770},"  \u002F\u002F只写属性，不可以读取\n",[478,16539,16540],{"class":480,"line":10378},[478,16541,2966],{"emptyLinePlaceholder":640},[478,16543,16544,16546,16548,16550],{"class":480,"line":10383},[478,16545,2869],{"class":484},[478,16547,263],{"class":714},[478,16549,2874],{"class":488},[478,16551,3285],{"class":714},[478,16553,16554],{"class":480,"line":10389},[478,16555,2966],{"emptyLinePlaceholder":640},[478,16557,16558,16560,16562],{"class":480,"line":10410},[478,16559,4656],{"class":710},[478,16561,4659],{"class":495},[478,16563,1859],{"class":714},[478,16565,16566],{"class":480,"line":10416},[478,16567,2133],{"class":714},[129,16569,16571],{"id":16570},"_814封装案例","8.1.4封装案例",[29,16573,16574],{},[32,16575,16576,16579],{},[45,16577,16578],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1702,16581,16582,16585],{},[32,16583,16584],{},"求出立方体的面积和体积",[32,16586,16587],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[469,16589,16591],{"className":701,"code":16590,"language":703,"meta":54,"style":54},"#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",[475,16592,16593,16599,16609,16616,16620,16624,16629,16659,16663,16673,16683,16693,16697,16706,16710,16746,16750,16759,16763,16779,16783,16788,16797,16801,16808,16812,16821,16825,16832,16836,16845,16849,16856,16860,16865,16882,16886,16932,16936,16945,16949,16953,16957,16966,16970,16974,16979,16983,16989,16995,17001,17005,17009,17014,17036,17040,17094,17098,17106,17110,17115,17120,17133,17140,17156,17167,17173,17196,17202,17225,17239,17259,17265,17276,17299,17321,17326,17332,17346,17359,17364,17378,17383,17389,17394,17408,17413,17418,17432,17444,17449,17462,17467,17472,17477,17490,17495],{"__ignoreMap":54},[478,16594,16595,16597],{"class":480,"line":481},[478,16596,2516],{"class":710},[478,16598,2519],{"class":488},[478,16600,16601,16603,16605,16607],{"class":480,"line":565},[478,16602,2524],{"class":710},[478,16604,2527],{"class":710},[478,16606,2530],{"class":484},[478,16608,1859],{"class":714},[478,16610,16611,16613],{"class":480,"line":579},[478,16612,15259],{"class":710},[478,16614,16615],{"class":484}," Cube\n",[478,16617,16618],{"class":480,"line":593},[478,16619,2114],{"class":714},[478,16621,16622],{"class":480,"line":1769},[478,16623,15281],{"class":710},[478,16625,16626],{"class":480,"line":1783},[478,16627,16628],{"class":770},"    \u002F\u002F输入长宽高\n",[478,16630,16631,16633,16636,16638,16640,16643,16645,16647,16650,16652,16654,16657],{"class":480,"line":1789},[478,16632,15474],{"class":710},[478,16634,16635],{"class":484}," setLwh",[478,16637,263],{"class":714},[478,16639,717],{"class":710},[478,16641,16642],{"class":5782}," l",[478,16644,1079],{"class":714},[478,16646,717],{"class":710},[478,16648,16649],{"class":5782}," w",[478,16651,1079],{"class":714},[478,16653,717],{"class":710},[478,16655,16656],{"class":5782}," h",[478,16658,720],{"class":714},[478,16660,16661],{"class":480,"line":1880},[478,16662,2596],{"class":714},[478,16664,16665,16668,16670],{"class":480,"line":1886},[478,16666,16667],{"class":714},"        m_L",[478,16669,759],{"class":710},[478,16671,16672],{"class":714},"l;\n",[478,16674,16675,16678,16680],{"class":480,"line":1898},[478,16676,16677],{"class":714},"        m_W",[478,16679,759],{"class":710},[478,16681,16682],{"class":714},"w;\n",[478,16684,16685,16688,16690],{"class":480,"line":2180},[478,16686,16687],{"class":714},"        m_H",[478,16689,759],{"class":710},[478,16691,16692],{"class":714},"h;\n",[478,16694,16695],{"class":480,"line":2185},[478,16696,2753],{"class":714},[478,16698,16699,16701,16704],{"class":480,"line":2191},[478,16700,2551],{"class":710},[478,16702,16703],{"class":484}," mianji",[478,16705,2542],{"class":714},[478,16707,16708],{"class":480,"line":2196},[478,16709,2596],{"class":714},[478,16711,16712,16714,16716,16718,16721,16723,16726,16728,16731,16733,16736,16738,16741,16743],{"class":480,"line":2210},[478,16713,15317],{"class":710},[478,16715,15320],{"class":495},[478,16717,1155],{"class":710},[478,16719,16720],{"class":714},"(m_L",[478,16722,1155],{"class":710},[478,16724,16725],{"class":714},"m_W ",[478,16727,1181],{"class":710},[478,16729,16730],{"class":714}," m_L",[478,16732,1155],{"class":710},[478,16734,16735],{"class":714},"m_H ",[478,16737,1181],{"class":710},[478,16739,16740],{"class":714}," m_W",[478,16742,1155],{"class":710},[478,16744,16745],{"class":714},"m_H);\n",[478,16747,16748],{"class":480,"line":2215},[478,16749,2753],{"class":714},[478,16751,16752,16754,16757],{"class":480,"line":2221},[478,16753,2551],{"class":710},[478,16755,16756],{"class":484}," tiji",[478,16758,2542],{"class":714},[478,16760,16761],{"class":480,"line":2241},[478,16762,2596],{"class":714},[478,16764,16765,16767,16769,16771,16774,16776],{"class":480,"line":2246},[478,16766,15317],{"class":710},[478,16768,16730],{"class":714},[478,16770,1155],{"class":710},[478,16772,16773],{"class":714},"m_W",[478,16775,1155],{"class":710},[478,16777,16778],{"class":714},"m_H;\n",[478,16780,16781],{"class":480,"line":2260},[478,16782,2753],{"class":714},[478,16784,16785],{"class":480,"line":2265},[478,16786,16787],{"class":770},"    \u002F\u002F获取长宽高\n",[478,16789,16790,16792,16795],{"class":480,"line":2294},[478,16791,2551],{"class":710},[478,16793,16794],{"class":484}," getLength",[478,16796,2542],{"class":714},[478,16798,16799],{"class":480,"line":2299},[478,16800,2596],{"class":714},[478,16802,16803,16805],{"class":480,"line":2316},[478,16804,15317],{"class":710},[478,16806,16807],{"class":714}," m_L;\n",[478,16809,16810],{"class":480,"line":2321},[478,16811,2753],{"class":714},[478,16813,16814,16816,16819],{"class":480,"line":2326},[478,16815,2551],{"class":710},[478,16817,16818],{"class":484}," getWidth",[478,16820,2542],{"class":714},[478,16822,16823],{"class":480,"line":2331},[478,16824,2596],{"class":714},[478,16826,16827,16829],{"class":480,"line":2345},[478,16828,15317],{"class":710},[478,16830,16831],{"class":714}," m_W;\n",[478,16833,16834],{"class":480,"line":2350},[478,16835,2753],{"class":714},[478,16837,16838,16840,16843],{"class":480,"line":3143},[478,16839,2551],{"class":710},[478,16841,16842],{"class":484}," getHeight",[478,16844,2542],{"class":714},[478,16846,16847],{"class":480,"line":3157},[478,16848,2596],{"class":714},[478,16850,16851,16853],{"class":480,"line":3165},[478,16852,15317],{"class":710},[478,16854,16855],{"class":714}," m_H;\n",[478,16857,16858],{"class":480,"line":3170},[478,16859,2753],{"class":714},[478,16861,16862],{"class":480,"line":3176},[478,16863,16864],{"class":770},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[478,16866,16867,16870,16873,16875,16878,16880],{"class":480,"line":3182},[478,16868,16869],{"class":710},"    bool",[478,16871,16872],{"class":484}," isEqual",[478,16874,263],{"class":714},[478,16876,16877],{"class":484},"Cube",[478,16879,3415],{"class":5782},[478,16881,720],{"class":714},[478,16883,16884],{"class":480,"line":3187},[478,16885,2596],{"class":714},[478,16887,16888,16890,16893,16896,16898,16900,16903,16905,16908,16911,16913,16915,16918,16920,16922,16925,16927,16929],{"class":480,"line":8514},[478,16889,3063],{"class":710},[478,16891,16892],{"class":714}," (c.",[478,16894,16895],{"class":484},"getLength",[478,16897,13616],{"class":714},[478,16899,3515],{"class":710},[478,16901,16902],{"class":714}," m_L ",[478,16904,2282],{"class":710},[478,16906,16907],{"class":714}," c.",[478,16909,16910],{"class":484},"getWidth",[478,16912,13616],{"class":714},[478,16914,3515],{"class":710},[478,16916,16917],{"class":714}," m_W ",[478,16919,2282],{"class":710},[478,16921,16907],{"class":714},[478,16923,16924],{"class":484},"getHeight",[478,16926,13616],{"class":714},[478,16928,3515],{"class":710},[478,16930,16931],{"class":714}," m_H)\n",[478,16933,16934],{"class":480,"line":8538},[478,16935,3076],{"class":714},[478,16937,16938,16940,16943],{"class":480,"line":8543},[478,16939,16297],{"class":710},[478,16941,16942],{"class":495}," true",[478,16944,1859],{"class":714},[478,16946,16947],{"class":480,"line":8549},[478,16948,3095],{"class":714},[478,16950,16951],{"class":480,"line":8576},[478,16952,3136],{"class":710},[478,16954,16955],{"class":480,"line":8581},[478,16956,3076],{"class":714},[478,16958,16959,16961,16964],{"class":480,"line":8587},[478,16960,16297],{"class":710},[478,16962,16963],{"class":495}," false",[478,16965,1859],{"class":714},[478,16967,16968],{"class":480,"line":8599},[478,16969,3095],{"class":714},[478,16971,16972],{"class":480,"line":8611},[478,16973,2753],{"class":714},[478,16975,16976],{"class":480,"line":8623},[478,16977,16978],{"class":770},"    \u002F\u002F私有属性\n",[478,16980,16981],{"class":480,"line":10282},[478,16982,15787],{"class":710},[478,16984,16985,16987],{"class":480,"line":10307},[478,16986,2551],{"class":710},[478,16988,16807],{"class":714},[478,16990,16991,16993],{"class":480,"line":10330},[478,16992,2551],{"class":710},[478,16994,16831],{"class":714},[478,16996,16997,16999],{"class":480,"line":10354},[478,16998,2551],{"class":710},[478,17000,16855],{"class":714},[478,17002,17003],{"class":480,"line":10359},[478,17004,2966],{"emptyLinePlaceholder":640},[478,17006,17007],{"class":480,"line":10364},[478,17008,4561],{"class":714},[478,17010,17011],{"class":480,"line":10369},[478,17012,17013],{"class":770},"\u002F\u002F全局函数判断两个立方体是否相等\n",[478,17015,17016,17018,17020,17022,17024,17027,17029,17031,17034],{"class":480,"line":10378},[478,17017,1923],{"class":710},[478,17019,16872],{"class":484},[478,17021,263],{"class":714},[478,17023,16877],{"class":484},[478,17025,17026],{"class":5782}," c1",[478,17028,1079],{"class":714},[478,17030,16877],{"class":484},[478,17032,17033],{"class":5782}," c2",[478,17035,720],{"class":714},[478,17037,17038],{"class":480,"line":10383},[478,17039,2114],{"class":714},[478,17041,17042,17044,17047,17049,17051,17053,17056,17058,17061,17063,17065,17067,17069,17071,17073,17075,17077,17079,17081,17083,17085,17087,17089,17091],{"class":480,"line":10389},[478,17043,4656],{"class":710},[478,17045,17046],{"class":714}," (c1.",[478,17048,16895],{"class":484},[478,17050,13616],{"class":714},[478,17052,3515],{"class":710},[478,17054,17055],{"class":714}," c2.",[478,17057,16895],{"class":484},[478,17059,17060],{"class":714},"()) ",[478,17062,2282],{"class":710},[478,17064,17046],{"class":714},[478,17066,16910],{"class":484},[478,17068,13616],{"class":714},[478,17070,3515],{"class":710},[478,17072,17055],{"class":714},[478,17074,16910],{"class":484},[478,17076,17060],{"class":714},[478,17078,2282],{"class":710},[478,17080,17046],{"class":714},[478,17082,16924],{"class":484},[478,17084,13616],{"class":714},[478,17086,3515],{"class":710},[478,17088,17055],{"class":714},[478,17090,16924],{"class":484},[478,17092,17093],{"class":714},"());\n",[478,17095,17096],{"class":480,"line":10410},[478,17097,2133],{"class":714},[478,17099,17100,17102,17104],{"class":480,"line":10416},[478,17101,717],{"class":710},[478,17103,2539],{"class":484},[478,17105,2542],{"class":714},[478,17107,17108],{"class":480,"line":10430},[478,17109,2114],{"class":714},[478,17111,17112],{"class":480,"line":10436},[478,17113,17114],{"class":714},"    Cube c1;\n",[478,17116,17117],{"class":480,"line":10463},[478,17118,17119],{"class":770},"    \u002F\u002F输入立方体的长宽高\n",[478,17121,17122,17124,17126,17129,17131],{"class":480,"line":10472},[478,17123,2119],{"class":714},[478,17125,1739],{"class":710},[478,17127,17128],{"class":488},"\"请输入第一个立方体的长、宽、高：\"",[478,17130,1739],{"class":710},[478,17132,1761],{"class":714},[478,17134,17135,17137],{"class":480,"line":10478},[478,17136,2551],{"class":710},[478,17138,17139],{"class":714}," l,w,h,l1,w1,h1;\n",[478,17141,17142,17144,17146,17148,17150,17152,17154],{"class":480,"line":10486},[478,17143,2578],{"class":714},[478,17145,1998],{"class":710},[478,17147,1218],{"class":714},[478,17149,1998],{"class":710},[478,17151,1490],{"class":714},[478,17153,1998],{"class":710},[478,17155,16692],{"class":714},[478,17157,17158,17161,17164],{"class":480,"line":10491},[478,17159,17160],{"class":714},"    c1.",[478,17162,17163],{"class":484},"setLwh",[478,17165,17166],{"class":714},"(l,w,h);\n",[478,17168,17170],{"class":480,"line":17169},66,[478,17171,17172],{"class":770},"    \u002F\u002F面积\n",[478,17174,17176,17178,17180,17183,17185,17187,17190,17192,17194],{"class":480,"line":17175},67,[478,17177,2119],{"class":714},[478,17179,1739],{"class":710},[478,17181,17182],{"class":488},"\"立方体的表面积为：\"",[478,17184,1739],{"class":710},[478,17186,15395],{"class":714},[478,17188,17189],{"class":484},"mianji",[478,17191,2993],{"class":714},[478,17193,1739],{"class":710},[478,17195,1761],{"class":714},[478,17197,17199],{"class":480,"line":17198},68,[478,17200,17201],{"class":770},"    \u002F\u002F体积\n",[478,17203,17205,17207,17209,17212,17214,17216,17219,17221,17223],{"class":480,"line":17204},69,[478,17206,2119],{"class":714},[478,17208,1739],{"class":710},[478,17210,17211],{"class":488},"\"立方体的体积为：\"",[478,17213,1739],{"class":710},[478,17215,15395],{"class":714},[478,17217,17218],{"class":484},"tiji",[478,17220,2993],{"class":714},[478,17222,1739],{"class":710},[478,17224,1761],{"class":714},[478,17226,17228,17230,17232,17235,17237],{"class":480,"line":17227},70,[478,17229,2119],{"class":714},[478,17231,1739],{"class":710},[478,17233,17234],{"class":488},"\"请输入第二个立方体的长、宽、高：\"",[478,17236,1739],{"class":710},[478,17238,1761],{"class":714},[478,17240,17242,17244,17246,17249,17251,17254,17256],{"class":480,"line":17241},71,[478,17243,2578],{"class":714},[478,17245,1998],{"class":710},[478,17247,17248],{"class":714},"l1",[478,17250,1998],{"class":710},[478,17252,17253],{"class":714},"w1",[478,17255,1998],{"class":710},[478,17257,17258],{"class":714},"h1;\n",[478,17260,17262],{"class":480,"line":17261},72,[478,17263,17264],{"class":714},"    Cube c2;\n",[478,17266,17268,17271,17273],{"class":480,"line":17267},73,[478,17269,17270],{"class":714},"    c2.",[478,17272,17163],{"class":484},[478,17274,17275],{"class":714},"(l1,w1,h1);\n",[478,17277,17279,17281,17283,17286,17288,17291,17293,17295,17297],{"class":480,"line":17278},74,[478,17280,2119],{"class":714},[478,17282,1739],{"class":710},[478,17284,17285],{"class":488},"\"第二个立方体的表面积为：\"",[478,17287,1739],{"class":710},[478,17289,17290],{"class":714},"c2.",[478,17292,17189],{"class":484},[478,17294,2993],{"class":714},[478,17296,1739],{"class":710},[478,17298,1761],{"class":714},[478,17300,17302,17304,17306,17309,17311,17313,17315,17317,17319],{"class":480,"line":17301},75,[478,17303,2119],{"class":714},[478,17305,1739],{"class":710},[478,17307,17308],{"class":488},"\"第二个立方体的体积为：\"",[478,17310,1739],{"class":710},[478,17312,17290],{"class":714},[478,17314,17218],{"class":484},[478,17316,2993],{"class":714},[478,17318,1739],{"class":710},[478,17320,1761],{"class":714},[478,17322,17324],{"class":480,"line":17323},76,[478,17325,2966],{"emptyLinePlaceholder":640},[478,17327,17329],{"class":480,"line":17328},77,[478,17330,17331],{"class":770},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[478,17333,17335,17337,17339,17342,17344],{"class":480,"line":17334},78,[478,17336,2119],{"class":714},[478,17338,1739],{"class":710},[478,17340,17341],{"class":488},"\"内部函数判断结果：\"",[478,17343,1739],{"class":710},[478,17345,1761],{"class":714},[478,17347,17349,17351,17353,17356],{"class":480,"line":17348},79,[478,17350,3667],{"class":710},[478,17352,17046],{"class":714},[478,17354,17355],{"class":484},"isEqual",[478,17357,17358],{"class":714},"(c2))\n",[478,17360,17362],{"class":480,"line":17361},80,[478,17363,2596],{"class":714},[478,17365,17367,17369,17371,17374,17376],{"class":480,"line":17366},81,[478,17368,4017],{"class":714},[478,17370,1739],{"class":710},[478,17372,17373],{"class":488},"\"两个立方体相等\"",[478,17375,1739],{"class":710},[478,17377,1761],{"class":714},[478,17379,17381],{"class":480,"line":17380},82,[478,17382,2753],{"class":714},[478,17384,17386],{"class":480,"line":17385},83,[478,17387,17388],{"class":710},"    else\n",[478,17390,17392],{"class":480,"line":17391},84,[478,17393,2596],{"class":714},[478,17395,17397,17399,17401,17404,17406],{"class":480,"line":17396},85,[478,17398,4017],{"class":714},[478,17400,1739],{"class":710},[478,17402,17403],{"class":488},"\"两个立方体不相等\"",[478,17405,1739],{"class":710},[478,17407,1761],{"class":714},[478,17409,17411],{"class":480,"line":17410},86,[478,17412,2753],{"class":714},[478,17414,17416],{"class":480,"line":17415},87,[478,17417,2966],{"emptyLinePlaceholder":640},[478,17419,17421,17423,17425,17428,17430],{"class":480,"line":17420},88,[478,17422,2119],{"class":714},[478,17424,1739],{"class":710},[478,17426,17427],{"class":488},"\"全局函数判断结果：\"",[478,17429,1739],{"class":710},[478,17431,1761],{"class":714},[478,17433,17435,17437,17439,17441],{"class":480,"line":17434},89,[478,17436,3667],{"class":710},[478,17438,219],{"class":714},[478,17440,17355],{"class":484},[478,17442,17443],{"class":714},"(c1, c2))\n",[478,17445,17447],{"class":480,"line":17446},90,[478,17448,2596],{"class":714},[478,17450,17452,17454,17456,17458,17460],{"class":480,"line":17451},91,[478,17453,4017],{"class":714},[478,17455,1739],{"class":710},[478,17457,17373],{"class":488},[478,17459,1739],{"class":710},[478,17461,1761],{"class":714},[478,17463,17465],{"class":480,"line":17464},92,[478,17466,2753],{"class":714},[478,17468,17470],{"class":480,"line":17469},93,[478,17471,17388],{"class":710},[478,17473,17475],{"class":480,"line":17474},94,[478,17476,2596],{"class":714},[478,17478,17480,17482,17484,17486,17488],{"class":480,"line":17479},95,[478,17481,4017],{"class":714},[478,17483,1739],{"class":710},[478,17485,17403],{"class":488},[478,17487,1739],{"class":710},[478,17489,1761],{"class":714},[478,17491,17493],{"class":480,"line":17492},96,[478,17494,2753],{"class":714},[478,17496,17498],{"class":480,"line":17497},97,[478,17499,2133],{"class":714},[29,17501,17502],{"start":565},[32,17503,17504],{},[45,17505,17506],{},"练习案例2：点和圆的关系",[1702,17508,17509],{},[32,17510,17511],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[469,17513,17515],{"className":701,"code":17514,"language":703,"meta":54,"style":54},"#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",[475,17516,17517,17523,17533,17540,17547,17551,17555,17560,17594,17599,17615,17629,17633,17637,17644,17651,17655,17661,17665,17669,17673,17695,17718,17723,17737,17752,17756,17760,17766,17771,17776,17780,17806,17810,17840,17868,17896,17913,17917,17930,17934,17938,17942,17955,17959,17963,17971,17975,17979,17983,17988,17992,18003,18010,18019,18029,18040,18047,18060,18071,18081,18092,18099,18113,18118,18128,18136],{"__ignoreMap":54},[478,17518,17519,17521],{"class":480,"line":481},[478,17520,2516],{"class":710},[478,17522,2519],{"class":488},[478,17524,17525,17527,17529,17531],{"class":480,"line":565},[478,17526,2524],{"class":710},[478,17528,2527],{"class":710},[478,17530,2530],{"class":484},[478,17532,1859],{"class":714},[478,17534,17535,17537],{"class":480,"line":579},[478,17536,2516],{"class":710},[478,17538,17539],{"class":488},"\u003Ccmath>\n",[478,17541,17542,17544],{"class":480,"line":593},[478,17543,15259],{"class":710},[478,17545,17546],{"class":484}," Point\n",[478,17548,17549],{"class":480,"line":1769},[478,17550,2114],{"class":714},[478,17552,17553],{"class":480,"line":1783},[478,17554,15281],{"class":710},[478,17556,17557],{"class":480,"line":1789},[478,17558,17559],{"class":770},"    \u002F\u002F赋值\n",[478,17561,17562,17564,17567,17569,17571,17574,17576,17578,17581,17584,17586,17589,17591],{"class":480,"line":1880},[478,17563,15474],{"class":710},[478,17565,17566],{"class":484}," setPoint",[478,17568,263],{"class":714},[478,17570,14602],{"class":710},[478,17572,17573],{"class":5782}," x",[478,17575,13001],{"class":714},[478,17577,14602],{"class":710},[478,17579,17580],{"class":5782}," y",[478,17582,17583],{"class":714},") { m_x ",[478,17585,759],{"class":710},[478,17587,17588],{"class":714}," x; m_y ",[478,17590,759],{"class":710},[478,17592,17593],{"class":714}," y; }\n",[478,17595,17596],{"class":480,"line":1886},[478,17597,17598],{"class":770},"    \u002F\u002F获取坐标\n",[478,17600,17601,17603,17606,17609,17612],{"class":480,"line":1898},[478,17602,15303],{"class":710},[478,17604,17605],{"class":484}," getX",[478,17607,17608],{"class":714},"() { ",[478,17610,17611],{"class":710},"return",[478,17613,17614],{"class":714}," m_x; }\n",[478,17616,17617,17619,17622,17624,17626],{"class":480,"line":2180},[478,17618,15303],{"class":710},[478,17620,17621],{"class":484}," getY",[478,17623,17608],{"class":714},[478,17625,17611],{"class":710},[478,17627,17628],{"class":714}," m_y; }\n",[478,17630,17631],{"class":480,"line":2185},[478,17632,2966],{"emptyLinePlaceholder":640},[478,17634,17635],{"class":480,"line":2191},[478,17636,15787],{"class":710},[478,17638,17639,17641],{"class":480,"line":2196},[478,17640,15303],{"class":710},[478,17642,17643],{"class":714}," m_x;\n",[478,17645,17646,17648],{"class":480,"line":2210},[478,17647,15303],{"class":710},[478,17649,17650],{"class":714}," m_y;\n",[478,17652,17653],{"class":480,"line":2215},[478,17654,4561],{"class":714},[478,17656,17657,17659],{"class":480,"line":2221},[478,17658,15259],{"class":710},[478,17660,15262],{"class":484},[478,17662,17663],{"class":480,"line":2241},[478,17664,2114],{"class":714},[478,17666,17667],{"class":480,"line":2246},[478,17668,15281],{"class":710},[478,17670,17671],{"class":480,"line":2260},[478,17672,17559],{"class":770},[478,17674,17675,17677,17680,17682,17684,17687,17690,17692],{"class":480,"line":2265},[478,17676,15474],{"class":710},[478,17678,17679],{"class":484}," setRadius",[478,17681,263],{"class":714},[478,17683,14602],{"class":710},[478,17685,17686],{"class":5782}," r",[478,17688,17689],{"class":714},") { m_r ",[478,17691,759],{"class":710},[478,17693,17694],{"class":714}," r; }\n",[478,17696,17697,17699,17702,17704,17707,17710,17713,17715],{"class":480,"line":2294},[478,17698,15474],{"class":710},[478,17700,17701],{"class":484}," setCenter",[478,17703,263],{"class":714},[478,17705,17706],{"class":484},"Point",[478,17708,17709],{"class":5782}," center",[478,17711,17712],{"class":714},") { m_center ",[478,17714,759],{"class":710},[478,17716,17717],{"class":714}," center; }\n",[478,17719,17720],{"class":480,"line":2299},[478,17721,17722],{"class":770},"    \u002F\u002F获取属性\n",[478,17724,17725,17727,17730,17732,17734],{"class":480,"line":2316},[478,17726,15303],{"class":710},[478,17728,17729],{"class":484}," getRadius",[478,17731,17608],{"class":714},[478,17733,17611],{"class":710},[478,17735,17736],{"class":714}," m_r; }\n",[478,17738,17739,17742,17745,17747,17749],{"class":480,"line":2321},[478,17740,17741],{"class":484},"    Point",[478,17743,17744],{"class":484}," getCenter",[478,17746,17608],{"class":714},[478,17748,17611],{"class":710},[478,17750,17751],{"class":714}," m_center; }\n",[478,17753,17754],{"class":480,"line":2326},[478,17755,2966],{"emptyLinePlaceholder":640},[478,17757,17758],{"class":480,"line":2331},[478,17759,15787],{"class":710},[478,17761,17762,17764],{"class":480,"line":2345},[478,17763,15303],{"class":710},[478,17765,15293],{"class":714},[478,17767,17768],{"class":480,"line":2350},[478,17769,17770],{"class":770},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[478,17772,17773],{"class":480,"line":3143},[478,17774,17775],{"class":714},"    Point m_center;\n",[478,17777,17778],{"class":480,"line":3157},[478,17779,4561],{"class":714},[478,17781,17782,17784,17787,17789,17792,17794,17796,17798,17800,17802,17804],{"class":480,"line":3165},[478,17783,5930],{"class":710},[478,17785,17786],{"class":484}," isInCircle",[478,17788,263],{"class":714},[478,17790,17791],{"class":484},"Circle",[478,17793,11150],{"class":710},[478,17795,989],{"class":5782},[478,17797,1079],{"class":714},[478,17799,17706],{"class":484},[478,17801,11150],{"class":710},[478,17803,19],{"class":5782},[478,17805,720],{"class":714},[478,17807,17808],{"class":480,"line":3170},[478,17809,2114],{"class":714},[478,17811,17812,17814,17817,17819,17821,17824,17827,17830,17832,17834,17836,17838],{"class":480,"line":3176},[478,17813,15303],{"class":710},[478,17815,17816],{"class":714}," dx ",[478,17818,759],{"class":710},[478,17820,16907],{"class":714},[478,17822,17823],{"class":484},"getCenter",[478,17825,17826],{"class":714},"().",[478,17828,17829],{"class":484},"getX",[478,17831,13616],{"class":714},[478,17833,1232],{"class":710},[478,17835,16453],{"class":714},[478,17837,17829],{"class":484},[478,17839,6202],{"class":714},[478,17841,17842,17844,17847,17849,17851,17853,17855,17858,17860,17862,17864,17866],{"class":480,"line":3182},[478,17843,15303],{"class":710},[478,17845,17846],{"class":714}," dy ",[478,17848,759],{"class":710},[478,17850,16907],{"class":714},[478,17852,17823],{"class":484},[478,17854,17826],{"class":714},[478,17856,17857],{"class":484},"getY",[478,17859,13616],{"class":714},[478,17861,1232],{"class":710},[478,17863,16453],{"class":714},[478,17865,17857],{"class":484},[478,17867,6202],{"class":714},[478,17869,17870,17872,17875,17877,17880,17883,17885,17887,17889,17891,17893],{"class":480,"line":3187},[478,17871,15303],{"class":710},[478,17873,17874],{"class":714}," distance ",[478,17876,759],{"class":710},[478,17878,17879],{"class":484}," sqrt",[478,17881,17882],{"class":714},"(dx ",[478,17884,1155],{"class":710},[478,17886,17816],{"class":714},[478,17888,1181],{"class":710},[478,17890,17846],{"class":714},[478,17892,1155],{"class":710},[478,17894,17895],{"class":714}," dy);\n",[478,17897,17898,17900,17903,17905,17907,17910],{"class":480,"line":8514},[478,17899,3667],{"class":710},[478,17901,17902],{"class":714}," (distance ",[478,17904,1605],{"class":710},[478,17906,16907],{"class":714},[478,17908,17909],{"class":484},"getRadius",[478,17911,17912],{"class":714},"())\n",[478,17914,17915],{"class":480,"line":8538},[478,17916,2596],{"class":714},[478,17918,17919,17921,17923,17926,17928],{"class":480,"line":8543},[478,17920,10235],{"class":714},[478,17922,1739],{"class":710},[478,17924,17925],{"class":488}," \"点在圆内\"",[478,17927,2013],{"class":710},[478,17929,9406],{"class":714},[478,17931,17932],{"class":480,"line":8549},[478,17933,2753],{"class":714},[478,17935,17936],{"class":480,"line":8576},[478,17937,17388],{"class":710},[478,17939,17940],{"class":480,"line":8581},[478,17941,2596],{"class":714},[478,17943,17944,17946,17948,17951,17953],{"class":480,"line":8587},[478,17945,10235],{"class":714},[478,17947,1739],{"class":710},[478,17949,17950],{"class":488}," \"点在圆外\"",[478,17952,2013],{"class":710},[478,17954,9406],{"class":714},[478,17956,17957],{"class":480,"line":8599},[478,17958,2753],{"class":714},[478,17960,17961],{"class":480,"line":8611},[478,17962,2133],{"class":714},[478,17964,17965,17967,17969],{"class":480,"line":8623},[478,17966,717],{"class":710},[478,17968,2539],{"class":484},[478,17970,2542],{"class":714},[478,17972,17973],{"class":480,"line":10282},[478,17974,2114],{"class":714},[478,17976,17977],{"class":480,"line":10307},[478,17978,15618],{"class":770},[478,17980,17981],{"class":480,"line":10330},[478,17982,15365],{"class":714},[478,17984,17985],{"class":480,"line":10354},[478,17986,17987],{"class":714},"    Point p1;\n",[478,17989,17990],{"class":480,"line":10359},[478,17991,17559],{"class":770},[478,17993,17994,17996,17998,18001],{"class":480,"line":10364},[478,17995,2119],{"class":714},[478,17997,1739],{"class":710},[478,17999,18000],{"class":488},"\"请输入圆的半径：\"",[478,18002,1859],{"class":714},[478,18004,18005,18007],{"class":480,"line":10369},[478,18006,15303],{"class":710},[478,18008,18009],{"class":714}," r;\n",[478,18011,18012,18014,18016],{"class":480,"line":10378},[478,18013,2578],{"class":714},[478,18015,1998],{"class":710},[478,18017,18018],{"class":714},"r;\n",[478,18020,18021,18023,18026],{"class":480,"line":10383},[478,18022,17160],{"class":714},[478,18024,18025],{"class":484},"setRadius",[478,18027,18028],{"class":714},"(r);\n",[478,18030,18031,18033,18035,18038],{"class":480,"line":10389},[478,18032,2119],{"class":714},[478,18034,1739],{"class":710},[478,18036,18037],{"class":488},"\"请输入圆心坐标：\"",[478,18039,1859],{"class":714},[478,18041,18042,18044],{"class":480,"line":10410},[478,18043,15303],{"class":710},[478,18045,18046],{"class":714}," x, y;\n",[478,18048,18049,18051,18053,18055,18057],{"class":480,"line":10416},[478,18050,2578],{"class":714},[478,18052,1998],{"class":710},[478,18054,1515],{"class":714},[478,18056,1998],{"class":710},[478,18058,18059],{"class":714},"y;\n",[478,18061,18062,18065,18068],{"class":480,"line":10430},[478,18063,18064],{"class":714},"    p1.",[478,18066,18067],{"class":484},"setPoint",[478,18069,18070],{"class":714},"(x, y);\n",[478,18072,18073,18075,18078],{"class":480,"line":10436},[478,18074,17160],{"class":714},[478,18076,18077],{"class":484},"setCenter",[478,18079,18080],{"class":714},"(p1);\n",[478,18082,18083,18085,18087,18090],{"class":480,"line":10463},[478,18084,2119],{"class":714},[478,18086,1739],{"class":710},[478,18088,18089],{"class":488},"\"请输入测试点坐标：\"",[478,18091,1859],{"class":714},[478,18093,18094,18096],{"class":480,"line":10472},[478,18095,15303],{"class":710},[478,18097,18098],{"class":714}," x1, y1;\n",[478,18100,18101,18103,18105,18108,18110],{"class":480,"line":10478},[478,18102,2578],{"class":714},[478,18104,1998],{"class":710},[478,18106,18107],{"class":714},"x1",[478,18109,1998],{"class":710},[478,18111,18112],{"class":714},"y1;\n",[478,18114,18115],{"class":480,"line":10486},[478,18116,18117],{"class":714},"    Point p2;\n",[478,18119,18120,18123,18125],{"class":480,"line":10491},[478,18121,18122],{"class":714},"    p2.",[478,18124,18067],{"class":484},[478,18126,18127],{"class":714},"(x1, y1);\n",[478,18129,18130,18133],{"class":480,"line":17169},[478,18131,18132],{"class":484},"    isInCircle",[478,18134,18135],{"class":714},"(c1, p2);\n",[478,18137,18138],{"class":480,"line":17175},[478,18139,2133],{"class":714},[19,18141,18142],{},"在类中可以让另一个类作为本来的成员",[19,18144,18145],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18147,18148],{},"创建point.h",[469,18150,18152],{"className":701,"code":18151,"language":703,"meta":54,"style":54},"#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",[475,18153,18154,18165,18171,18181,18187,18191,18196,18200,18204,18224,18228,18236,18244,18248,18252,18258,18264],{"__ignoreMap":54},[478,18155,18156,18159,18162],{"class":480,"line":481},[478,18157,18158],{"class":710},"#pragma",[478,18160,18161],{"class":484}," once",[478,18163,18164],{"class":770}," \u002F\u002F防止头文件重复包含\n",[478,18166,18167,18169],{"class":480,"line":565},[478,18168,2516],{"class":710},[478,18170,2519],{"class":488},[478,18172,18173,18175,18177,18179],{"class":480,"line":579},[478,18174,2524],{"class":710},[478,18176,2527],{"class":710},[478,18178,2530],{"class":484},[478,18180,1859],{"class":714},[478,18182,18183,18185],{"class":480,"line":593},[478,18184,15259],{"class":710},[478,18186,17546],{"class":484},[478,18188,18189],{"class":480,"line":1769},[478,18190,2114],{"class":714},[478,18192,18193],{"class":480,"line":1783},[478,18194,18195],{"class":770},"\u002F\u002F做好声明与变量定义就可以\n",[478,18197,18198],{"class":480,"line":1789},[478,18199,15281],{"class":710},[478,18201,18202],{"class":480,"line":1880},[478,18203,17559],{"class":770},[478,18205,18206,18208,18210,18212,18214,18216,18218,18220,18222],{"class":480,"line":1886},[478,18207,15474],{"class":710},[478,18209,17566],{"class":484},[478,18211,263],{"class":714},[478,18213,14602],{"class":710},[478,18215,17573],{"class":5782},[478,18217,13001],{"class":714},[478,18219,14602],{"class":710},[478,18221,17580],{"class":5782},[478,18223,3285],{"class":714},[478,18225,18226],{"class":480,"line":1898},[478,18227,17598],{"class":770},[478,18229,18230,18232,18234],{"class":480,"line":2180},[478,18231,15303],{"class":710},[478,18233,17605],{"class":484},[478,18235,6202],{"class":714},[478,18237,18238,18240,18242],{"class":480,"line":2185},[478,18239,15303],{"class":710},[478,18241,17621],{"class":484},[478,18243,6202],{"class":714},[478,18245,18246],{"class":480,"line":2191},[478,18247,2966],{"emptyLinePlaceholder":640},[478,18249,18250],{"class":480,"line":2196},[478,18251,15787],{"class":710},[478,18253,18254,18256],{"class":480,"line":2210},[478,18255,15303],{"class":710},[478,18257,17643],{"class":714},[478,18259,18260,18262],{"class":480,"line":2215},[478,18261,15303],{"class":710},[478,18263,17650],{"class":714},[478,18265,18266],{"class":480,"line":2221},[478,18267,4561],{"class":714},[19,18269,18270],{},"创建point.cpp",[469,18272,18274],{"className":701,"code":18273,"language":703,"meta":54,"style":54},"#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",[475,18275,18276,18283,18288,18322,18326,18342],{"__ignoreMap":54},[478,18277,18278,18280],{"class":480,"line":481},[478,18279,2516],{"class":710},[478,18281,18282],{"class":488},"\u003Cpoint.h>\n",[478,18284,18285],{"class":480,"line":565},[478,18286,18287],{"class":770},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[478,18289,18290,18292,18295,18298,18300,18302,18304,18306,18308,18310,18312,18314,18316,18318,18320],{"class":480,"line":579},[478,18291,15474],{"class":710},[478,18293,18294],{"class":484}," Point",[478,18296,18297],{"class":714},"::",[478,18299,18067],{"class":484},[478,18301,263],{"class":714},[478,18303,14602],{"class":710},[478,18305,17573],{"class":5782},[478,18307,13001],{"class":714},[478,18309,14602],{"class":710},[478,18311,17580],{"class":5782},[478,18313,17583],{"class":714},[478,18315,759],{"class":710},[478,18317,17588],{"class":714},[478,18319,759],{"class":710},[478,18321,17593],{"class":714},[478,18323,18324],{"class":480,"line":593},[478,18325,17598],{"class":770},[478,18327,18328,18330,18332,18334,18336,18338,18340],{"class":480,"line":1769},[478,18329,15303],{"class":710},[478,18331,18294],{"class":484},[478,18333,18297],{"class":714},[478,18335,17829],{"class":484},[478,18337,17608],{"class":714},[478,18339,17611],{"class":710},[478,18341,17614],{"class":714},[478,18343,18344,18346,18348,18350,18352,18354,18356],{"class":480,"line":1783},[478,18345,15303],{"class":710},[478,18347,18294],{"class":484},[478,18349,18297],{"class":714},[478,18351,17857],{"class":484},[478,18353,17608],{"class":714},[478,18355,17611],{"class":710},[478,18357,17628],{"class":714},[19,18359,18360],{},"创建circle.h",[469,18362,18364],{"className":701,"code":18363,"language":703,"meta":54,"style":54},"#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",[475,18365,18366,18373,18379,18389,18395,18401,18405,18409,18413,18427,18441,18445,18453,18461,18465,18469,18475,18479,18483],{"__ignoreMap":54},[478,18367,18368,18370],{"class":480,"line":481},[478,18369,18158],{"class":710},[478,18371,18372],{"class":484}," once\n",[478,18374,18375,18377],{"class":480,"line":565},[478,18376,2516],{"class":710},[478,18378,2519],{"class":488},[478,18380,18381,18383,18385,18387],{"class":480,"line":579},[478,18382,2524],{"class":710},[478,18384,2527],{"class":710},[478,18386,2530],{"class":484},[478,18388,1859],{"class":714},[478,18390,18391,18393],{"class":480,"line":593},[478,18392,2516],{"class":710},[478,18394,18282],{"class":488},[478,18396,18397,18399],{"class":480,"line":1769},[478,18398,15259],{"class":710},[478,18400,15262],{"class":484},[478,18402,18403],{"class":480,"line":1783},[478,18404,2114],{"class":714},[478,18406,18407],{"class":480,"line":1789},[478,18408,15281],{"class":710},[478,18410,18411],{"class":480,"line":1880},[478,18412,17559],{"class":770},[478,18414,18415,18417,18419,18421,18423,18425],{"class":480,"line":1886},[478,18416,15474],{"class":710},[478,18418,17679],{"class":484},[478,18420,263],{"class":714},[478,18422,14602],{"class":710},[478,18424,17686],{"class":5782},[478,18426,3285],{"class":714},[478,18428,18429,18431,18433,18435,18437,18439],{"class":480,"line":1898},[478,18430,15474],{"class":710},[478,18432,17701],{"class":484},[478,18434,263],{"class":714},[478,18436,17706],{"class":484},[478,18438,17709],{"class":5782},[478,18440,3285],{"class":714},[478,18442,18443],{"class":480,"line":2180},[478,18444,17722],{"class":770},[478,18446,18447,18449,18451],{"class":480,"line":2185},[478,18448,15303],{"class":710},[478,18450,17729],{"class":484},[478,18452,6202],{"class":714},[478,18454,18455,18457,18459],{"class":480,"line":2191},[478,18456,17741],{"class":484},[478,18458,17744],{"class":484},[478,18460,6202],{"class":714},[478,18462,18463],{"class":480,"line":2196},[478,18464,2966],{"emptyLinePlaceholder":640},[478,18466,18467],{"class":480,"line":2210},[478,18468,15787],{"class":710},[478,18470,18471,18473],{"class":480,"line":2215},[478,18472,15303],{"class":710},[478,18474,15293],{"class":714},[478,18476,18477],{"class":480,"line":2221},[478,18478,17770],{"class":770},[478,18480,18481],{"class":480,"line":2241},[478,18482,17775],{"class":714},[478,18484,18485],{"class":480,"line":2246},[478,18486,4561],{"class":714},[19,18488,18489],{},"创建circle.cpp",[469,18491,18493],{"className":701,"code":18492,"language":703,"meta":54,"style":54},"#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",[475,18494,18495,18502,18525,18547,18552,18568],{"__ignoreMap":54},[478,18496,18497,18499],{"class":480,"line":481},[478,18498,2516],{"class":710},[478,18500,18501],{"class":488},"\u003Ccircle.h>\n",[478,18503,18504,18506,18509,18511,18513,18515,18517,18519,18521,18523],{"class":480,"line":565},[478,18505,5930],{"class":710},[478,18507,18508],{"class":484}," Circle",[478,18510,18297],{"class":714},[478,18512,18025],{"class":484},[478,18514,263],{"class":714},[478,18516,14602],{"class":710},[478,18518,17686],{"class":5782},[478,18520,17689],{"class":714},[478,18522,759],{"class":710},[478,18524,17694],{"class":714},[478,18526,18527,18529,18531,18533,18535,18537,18539,18541,18543,18545],{"class":480,"line":579},[478,18528,5930],{"class":710},[478,18530,18508],{"class":484},[478,18532,18297],{"class":714},[478,18534,18077],{"class":484},[478,18536,263],{"class":714},[478,18538,17706],{"class":484},[478,18540,17709],{"class":5782},[478,18542,17712],{"class":714},[478,18544,759],{"class":710},[478,18546,17717],{"class":714},[478,18548,18549],{"class":480,"line":593},[478,18550,18551],{"class":770},"\u002F\u002F获取属性\n",[478,18553,18554,18556,18558,18560,18562,18564,18566],{"class":480,"line":1769},[478,18555,14602],{"class":710},[478,18557,18508],{"class":484},[478,18559,18297],{"class":714},[478,18561,17909],{"class":484},[478,18563,17608],{"class":714},[478,18565,17611],{"class":710},[478,18567,17736],{"class":714},[478,18569,18570,18572,18574,18576,18578,18580,18582],{"class":480,"line":1783},[478,18571,17706],{"class":484},[478,18573,18508],{"class":484},[478,18575,18297],{"class":714},[478,18577,17823],{"class":484},[478,18579,17608],{"class":714},[478,18581,17611],{"class":710},[478,18583,17751],{"class":714},[19,18585,18586],{},"使用封装的类",[469,18588,18590],{"className":701,"code":18589,"language":703,"meta":54,"style":54},"#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",[475,18591,18592,18598,18608,18614,18620,18644,18648,18674,18700,18724,18738,18742,18754,18758,18762,18766,18778,18782,18786,18794,18798,18802,18806,18810,18814,18824,18830,18838,18846,18856,18862,18874,18882,18890,18900,18906,18918,18922,18930,18936],{"__ignoreMap":54},[478,18593,18594,18596],{"class":480,"line":481},[478,18595,2516],{"class":710},[478,18597,2519],{"class":488},[478,18599,18600,18602,18604,18606],{"class":480,"line":565},[478,18601,2524],{"class":710},[478,18603,2527],{"class":710},[478,18605,2530],{"class":484},[478,18607,1859],{"class":714},[478,18609,18610,18612],{"class":480,"line":579},[478,18611,2516],{"class":710},[478,18613,18501],{"class":488},[478,18615,18616,18618],{"class":480,"line":593},[478,18617,2516],{"class":710},[478,18619,18282],{"class":488},[478,18621,18622,18624,18626,18628,18630,18632,18634,18636,18638,18640,18642],{"class":480,"line":1769},[478,18623,5930],{"class":710},[478,18625,17786],{"class":484},[478,18627,263],{"class":714},[478,18629,17791],{"class":484},[478,18631,11150],{"class":710},[478,18633,989],{"class":5782},[478,18635,1079],{"class":714},[478,18637,17706],{"class":484},[478,18639,11150],{"class":710},[478,18641,19],{"class":5782},[478,18643,720],{"class":714},[478,18645,18646],{"class":480,"line":1783},[478,18647,2114],{"class":714},[478,18649,18650,18652,18654,18656,18658,18660,18662,18664,18666,18668,18670,18672],{"class":480,"line":1789},[478,18651,15303],{"class":710},[478,18653,17816],{"class":714},[478,18655,759],{"class":710},[478,18657,16907],{"class":714},[478,18659,17823],{"class":484},[478,18661,17826],{"class":714},[478,18663,17829],{"class":484},[478,18665,13616],{"class":714},[478,18667,1232],{"class":710},[478,18669,16453],{"class":714},[478,18671,17829],{"class":484},[478,18673,6202],{"class":714},[478,18675,18676,18678,18680,18682,18684,18686,18688,18690,18692,18694,18696,18698],{"class":480,"line":1880},[478,18677,15303],{"class":710},[478,18679,17846],{"class":714},[478,18681,759],{"class":710},[478,18683,16907],{"class":714},[478,18685,17823],{"class":484},[478,18687,17826],{"class":714},[478,18689,17857],{"class":484},[478,18691,13616],{"class":714},[478,18693,1232],{"class":710},[478,18695,16453],{"class":714},[478,18697,17857],{"class":484},[478,18699,6202],{"class":714},[478,18701,18702,18704,18706,18708,18710,18712,18714,18716,18718,18720,18722],{"class":480,"line":1886},[478,18703,15303],{"class":710},[478,18705,17874],{"class":714},[478,18707,759],{"class":710},[478,18709,17879],{"class":484},[478,18711,17882],{"class":714},[478,18713,1155],{"class":710},[478,18715,17816],{"class":714},[478,18717,1181],{"class":710},[478,18719,17846],{"class":714},[478,18721,1155],{"class":710},[478,18723,17895],{"class":714},[478,18725,18726,18728,18730,18732,18734,18736],{"class":480,"line":1898},[478,18727,3667],{"class":710},[478,18729,17902],{"class":714},[478,18731,1605],{"class":710},[478,18733,16907],{"class":714},[478,18735,17909],{"class":484},[478,18737,17912],{"class":714},[478,18739,18740],{"class":480,"line":2180},[478,18741,2596],{"class":714},[478,18743,18744,18746,18748,18750,18752],{"class":480,"line":2185},[478,18745,10235],{"class":714},[478,18747,1739],{"class":710},[478,18749,17925],{"class":488},[478,18751,2013],{"class":710},[478,18753,9406],{"class":714},[478,18755,18756],{"class":480,"line":2191},[478,18757,2753],{"class":714},[478,18759,18760],{"class":480,"line":2196},[478,18761,17388],{"class":710},[478,18763,18764],{"class":480,"line":2210},[478,18765,2596],{"class":714},[478,18767,18768,18770,18772,18774,18776],{"class":480,"line":2215},[478,18769,10235],{"class":714},[478,18771,1739],{"class":710},[478,18773,17950],{"class":488},[478,18775,2013],{"class":710},[478,18777,9406],{"class":714},[478,18779,18780],{"class":480,"line":2221},[478,18781,2753],{"class":714},[478,18783,18784],{"class":480,"line":2241},[478,18785,2133],{"class":714},[478,18787,18788,18790,18792],{"class":480,"line":2246},[478,18789,717],{"class":710},[478,18791,2539],{"class":484},[478,18793,2542],{"class":714},[478,18795,18796],{"class":480,"line":2260},[478,18797,2114],{"class":714},[478,18799,18800],{"class":480,"line":2265},[478,18801,15618],{"class":770},[478,18803,18804],{"class":480,"line":2294},[478,18805,15365],{"class":714},[478,18807,18808],{"class":480,"line":2299},[478,18809,17987],{"class":714},[478,18811,18812],{"class":480,"line":2316},[478,18813,17559],{"class":770},[478,18815,18816,18818,18820,18822],{"class":480,"line":2321},[478,18817,2119],{"class":714},[478,18819,1739],{"class":710},[478,18821,18000],{"class":488},[478,18823,1859],{"class":714},[478,18825,18826,18828],{"class":480,"line":2326},[478,18827,15303],{"class":710},[478,18829,18009],{"class":714},[478,18831,18832,18834,18836],{"class":480,"line":2331},[478,18833,2578],{"class":714},[478,18835,1998],{"class":710},[478,18837,18018],{"class":714},[478,18839,18840,18842,18844],{"class":480,"line":2345},[478,18841,17160],{"class":714},[478,18843,18025],{"class":484},[478,18845,18028],{"class":714},[478,18847,18848,18850,18852,18854],{"class":480,"line":2350},[478,18849,2119],{"class":714},[478,18851,1739],{"class":710},[478,18853,18037],{"class":488},[478,18855,1859],{"class":714},[478,18857,18858,18860],{"class":480,"line":3143},[478,18859,15303],{"class":710},[478,18861,18046],{"class":714},[478,18863,18864,18866,18868,18870,18872],{"class":480,"line":3157},[478,18865,2578],{"class":714},[478,18867,1998],{"class":710},[478,18869,1515],{"class":714},[478,18871,1998],{"class":710},[478,18873,18059],{"class":714},[478,18875,18876,18878,18880],{"class":480,"line":3165},[478,18877,18064],{"class":714},[478,18879,18067],{"class":484},[478,18881,18070],{"class":714},[478,18883,18884,18886,18888],{"class":480,"line":3170},[478,18885,17160],{"class":714},[478,18887,18077],{"class":484},[478,18889,18080],{"class":714},[478,18891,18892,18894,18896,18898],{"class":480,"line":3176},[478,18893,2119],{"class":714},[478,18895,1739],{"class":710},[478,18897,18089],{"class":488},[478,18899,1859],{"class":714},[478,18901,18902,18904],{"class":480,"line":3182},[478,18903,15303],{"class":710},[478,18905,18098],{"class":714},[478,18907,18908,18910,18912,18914,18916],{"class":480,"line":3187},[478,18909,2578],{"class":714},[478,18911,1998],{"class":710},[478,18913,18107],{"class":714},[478,18915,1998],{"class":710},[478,18917,18112],{"class":714},[478,18919,18920],{"class":480,"line":8514},[478,18921,18117],{"class":714},[478,18923,18924,18926,18928],{"class":480,"line":8538},[478,18925,18122],{"class":714},[478,18927,18067],{"class":484},[478,18929,18127],{"class":714},[478,18931,18932,18934],{"class":480,"line":8543},[478,18933,18132],{"class":484},[478,18935,18135],{"class":714},[478,18937,18938],{"class":480,"line":8549},[478,18939,2133],{"class":714},[14,18941,18943],{"id":18942},"_82对象的初始化清理","8.2对象的初始化清理",[1702,18945,18946,18949],{},[32,18947,18948],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[32,18950,18951],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[129,18953,18955],{"id":18954},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18957,18958,18959,18962],{},"对象的",[45,18960,18961],{},"初始化和清理","也是两个非常重要的安全问题",[19,18964,18965],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18967,18968],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18970,18971,18972,18975,18976,18979],{},"c++利用了",[45,18973,18974],{},"构造函数","和",[45,18977,18978],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18981,18982,18983],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[45,18984,18985],{},"我们不提供构造和析构，编译器会提供",[19,18987,18988],{},[45,18989,18990],{},"编译器提供的构造函数和析构函数是空实现。",[1702,18992,18993,18996],{},[32,18994,18995],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[32,18997,18998,18999,19002],{},"析构函数：主要作用在于对象",[45,19000,19001],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19004,19005,19008],{},[45,19006,19007],{},"构造函数语法：",[475,19009,19010],{},"类名(){}",[29,19012,19013,19016,19019,19022,19025],{},[32,19014,19015],{},"构造函数，没有返回值也不写void",[32,19017,19018],{},"函数名称与类名相同",[32,19020,19021],{},"构造函数可以有参数，因此可以发生重载",[32,19023,19024],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[32,19026,19027,19028,222],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[475,19029,19030],{},"Person(){}",[19,19032,19033,201,19036],{},[45,19034,19035],{},"析构函数语法：",[475,19037,19038],{},"~类名(){}",[29,19040,19041,19044,19047,19053],{},[32,19042,19043],{},"析构函数，没有返回值也不写void",[32,19045,19046],{},"函数名称与类名相同,在名称前加上符号  ~",[32,19048,19049,19050],{},"析构函数不可以有参数，因此",[45,19051,19052],{},"不可以发生重载",[32,19054,19055],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[469,19057,19059],{"className":701,"code":19058,"language":703,"meta":54,"style":54},"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",[475,19060,19061,19067,19071,19075,19080,19087,19091,19104,19108,19113,19120,19124,19137,19141,19145,19149,19153,19161,19165,19173,19177,19181,19189,19193,19198,19202,19209,19213,19226,19230,19238],{"__ignoreMap":54},[478,19062,19063,19065],{"class":480,"line":481},[478,19064,15259],{"class":710},[478,19066,15736],{"class":484},[478,19068,19069],{"class":480,"line":565},[478,19070,2114],{"class":714},[478,19072,19073],{"class":480,"line":579},[478,19074,15281],{"class":710},[478,19076,19077],{"class":480,"line":593},[478,19078,19079],{"class":770},"    \u002F\u002F构造函数\n",[478,19081,19082,19085],{"class":480,"line":1769},[478,19083,19084],{"class":484},"    Person",[478,19086,2542],{"class":714},[478,19088,19089],{"class":480,"line":1783},[478,19090,2596],{"class":714},[478,19092,19093,19095,19097,19100,19102],{"class":480,"line":1789},[478,19094,10235],{"class":714},[478,19096,1739],{"class":710},[478,19098,19099],{"class":488}," \"Person的构造函数调用\"",[478,19101,2013],{"class":710},[478,19103,9406],{"class":714},[478,19105,19106],{"class":480,"line":1880},[478,19107,2753],{"class":714},[478,19109,19110],{"class":480,"line":1886},[478,19111,19112],{"class":770},"    \u002F\u002F析构函数\n",[478,19114,19115,19118],{"class":480,"line":1898},[478,19116,19117],{"class":484},"    ~Person",[478,19119,2542],{"class":714},[478,19121,19122],{"class":480,"line":2180},[478,19123,2596],{"class":714},[478,19125,19126,19128,19130,19133,19135],{"class":480,"line":2185},[478,19127,10235],{"class":714},[478,19129,1739],{"class":710},[478,19131,19132],{"class":488}," \"Person的析构函数调用\"",[478,19134,2013],{"class":710},[478,19136,9406],{"class":714},[478,19138,19139],{"class":480,"line":2191},[478,19140,2753],{"class":714},[478,19142,19143],{"class":480,"line":2196},[478,19144,2966],{"emptyLinePlaceholder":640},[478,19146,19147],{"class":480,"line":2210},[478,19148,4561],{"class":714},[478,19150,19151],{"class":480,"line":2215},[478,19152,2966],{"emptyLinePlaceholder":640},[478,19154,19155,19157,19159],{"class":480,"line":2221},[478,19156,5930],{"class":710},[478,19158,6154],{"class":484},[478,19160,2542],{"class":714},[478,19162,19163],{"class":480,"line":2241},[478,19164,2114],{"class":714},[478,19166,19167,19170],{"class":480,"line":2246},[478,19168,19169],{"class":714},"    Person p;",[478,19171,19172],{"class":770},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[478,19174,19175],{"class":480,"line":2260},[478,19176,2133],{"class":714},[478,19178,19179],{"class":480,"line":2265},[478,19180,2966],{"emptyLinePlaceholder":640},[478,19182,19183,19185,19187],{"class":480,"line":2294},[478,19184,717],{"class":710},[478,19186,2539],{"class":484},[478,19188,11419],{"class":714},[478,19190,19191],{"class":480,"line":2299},[478,19192,13776],{"class":714},[478,19194,19195],{"class":480,"line":2316},[478,19196,19197],{"class":770},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[478,19199,19200],{"class":480,"line":2321},[478,19201,2966],{"emptyLinePlaceholder":640},[478,19203,19204,19206],{"class":480,"line":2326},[478,19205,19169],{"class":714},[478,19207,19208],{"class":770},"\u002F\u002F只有构造函数\n",[478,19210,19211],{"class":480,"line":2331},[478,19212,2966],{"emptyLinePlaceholder":640},[478,19214,19215,19217,19219,19221,19223],{"class":480,"line":2345},[478,19216,2869],{"class":484},[478,19218,263],{"class":714},[478,19220,2874],{"class":488},[478,19222,6532],{"class":714},[478,19224,19225],{"class":770},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[478,19227,19228],{"class":480,"line":2350},[478,19229,2966],{"emptyLinePlaceholder":640},[478,19231,19232,19234,19236],{"class":480,"line":3143},[478,19233,4656],{"class":710},[478,19235,4659],{"class":495},[478,19237,1859],{"class":714},[478,19239,19240],{"class":480,"line":3157},[478,19241,2133],{"class":714},[19,19243,19244],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[129,19246,19248],{"id":19247},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19250,19251],{},"两种分类方式：",[19,19253,19254],{},"​\t按参数分为： 有参构造和无参构造",[19,19256,19257],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19259,19260],{},"三种调用方式：",[19,19262,19263],{},"​\t括号法",[19,19265,19266],{},"​\t显示法",[19,19268,19269],{},"​\t隐式转换法",[469,19271,19273],{"className":701,"code":19272,"language":703,"meta":54,"style":54},"#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",[475,19274,19275,19281,19291,19296,19301,19306,19311,19315,19323,19327,19331,19335,19341,19345,19358,19362,19374,19378,19387,19400,19404,19408,19414,19418,19431,19435,19440,19456,19460,19465,19474,19487,19491,19497,19501,19506,19514,19518,19523,19527,19535,19539,19544,19549,19554,19559,19564,19568,19573,19578,19583,19588,19592,19597,19602,19618,19630,19635,19639,19644,19649,19654,19658,19663,19677,19690,19694,19702,19706,19712,19718,19726],{"__ignoreMap":54},[478,19276,19277,19279],{"class":480,"line":481},[478,19278,2516],{"class":710},[478,19280,2519],{"class":488},[478,19282,19283,19285,19287,19289],{"class":480,"line":565},[478,19284,2524],{"class":710},[478,19286,2527],{"class":710},[478,19288,2530],{"class":484},[478,19290,1859],{"class":714},[478,19292,19293],{"class":480,"line":579},[478,19294,19295],{"class":770},"\u002F\u002F1.构造函数的分类及调用\n",[478,19297,19298],{"class":480,"line":593},[478,19299,19300],{"class":770},"\u002F\u002F分类\n",[478,19302,19303],{"class":480,"line":1769},[478,19304,19305],{"class":770},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[478,19307,19308],{"class":480,"line":1783},[478,19309,19310],{"class":770},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[478,19312,19313],{"class":480,"line":1789},[478,19314,2966],{"emptyLinePlaceholder":640},[478,19316,19317,19319,19321],{"class":480,"line":1880},[478,19318,15259],{"class":710},[478,19320,16134],{"class":484},[478,19322,3240],{"class":714},[478,19324,19325],{"class":480,"line":1886},[478,19326,2114],{"class":714},[478,19328,19329],{"class":480,"line":1898},[478,19330,15281],{"class":710},[478,19332,19333],{"class":480,"line":2180},[478,19334,19079],{"class":770},[478,19336,19337,19339],{"class":480,"line":2185},[478,19338,19084],{"class":484},[478,19340,2542],{"class":714},[478,19342,19343],{"class":480,"line":2191},[478,19344,2596],{"class":714},[478,19346,19347,19349,19351,19354,19356],{"class":480,"line":2196},[478,19348,4017],{"class":714},[478,19350,1739],{"class":710},[478,19352,19353],{"class":488},"\"Person构造函数无参构造\"",[478,19355,1739],{"class":710},[478,19357,1761],{"class":714},[478,19359,19360],{"class":480,"line":2210},[478,19361,2753],{"class":714},[478,19363,19364,19366,19368,19370,19372],{"class":480,"line":2215},[478,19365,19084],{"class":484},[478,19367,263],{"class":714},[478,19369,717],{"class":710},[478,19371,1967],{"class":5782},[478,19373,720],{"class":714},[478,19375,19376],{"class":480,"line":2221},[478,19377,2596],{"class":714},[478,19379,19380,19383,19385],{"class":480,"line":2241},[478,19381,19382],{"class":714},"        age",[478,19384,759],{"class":710},[478,19386,6763],{"class":714},[478,19388,19389,19391,19393,19396,19398],{"class":480,"line":2246},[478,19390,4017],{"class":714},[478,19392,1739],{"class":710},[478,19394,19395],{"class":488},"\"Person构造函数有参构造\"",[478,19397,1739],{"class":710},[478,19399,1761],{"class":714},[478,19401,19402],{"class":480,"line":2260},[478,19403,2753],{"class":714},[478,19405,19406],{"class":480,"line":2265},[478,19407,19112],{"class":770},[478,19409,19410,19412],{"class":480,"line":2294},[478,19411,19117],{"class":484},[478,19413,2542],{"class":714},[478,19415,19416],{"class":480,"line":2299},[478,19417,2596],{"class":714},[478,19419,19420,19422,19424,19427,19429],{"class":480,"line":2316},[478,19421,4017],{"class":714},[478,19423,1739],{"class":710},[478,19425,19426],{"class":488},"\"Person析构函数被调用\"",[478,19428,1739],{"class":710},[478,19430,1761],{"class":714},[478,19432,19433],{"class":480,"line":2321},[478,19434,2753],{"class":714},[478,19436,19437],{"class":480,"line":2326},[478,19438,19439],{"class":770},"    \u002F\u002F拷贝构造函数\n",[478,19441,19442,19444,19446,19448,19450,19452,19454],{"class":480,"line":2331},[478,19443,19084],{"class":484},[478,19445,263],{"class":714},[478,19447,7358],{"class":710},[478,19449,16134],{"class":484},[478,19451,11150],{"class":710},[478,19453,19],{"class":5782},[478,19455,720],{"class":714},[478,19457,19458],{"class":480,"line":2345},[478,19459,2596],{"class":714},[478,19461,19462],{"class":480,"line":2350},[478,19463,19464],{"class":770},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[478,19466,19467,19469,19471],{"class":480,"line":3143},[478,19468,19382],{"class":714},[478,19470,759],{"class":710},[478,19472,19473],{"class":714},"p.age;\n",[478,19475,19476,19478,19480,19483,19485],{"class":480,"line":3157},[478,19477,4017],{"class":714},[478,19479,1739],{"class":710},[478,19481,19482],{"class":488},"\"Person拷贝构造函数被调用\"",[478,19484,1739],{"class":710},[478,19486,1761],{"class":714},[478,19488,19489],{"class":480,"line":3165},[478,19490,2753],{"class":714},[478,19492,19493,19495],{"class":480,"line":3170},[478,19494,2551],{"class":710},[478,19496,8363],{"class":714},[478,19498,19499],{"class":480,"line":3176},[478,19500,4561],{"class":714},[478,19502,19503],{"class":480,"line":3182},[478,19504,19505],{"class":770},"\u002F\u002F调用\n",[478,19507,19508,19510,19512],{"class":480,"line":3187},[478,19509,5930],{"class":710},[478,19511,6154],{"class":484},[478,19513,2542],{"class":714},[478,19515,19516],{"class":480,"line":8514},[478,19517,2114],{"class":714},[478,19519,19520],{"class":480,"line":8538},[478,19521,19522],{"class":770},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[478,19524,19525],{"class":480,"line":8543},[478,19526,2133],{"class":714},[478,19528,19529,19531,19533],{"class":480,"line":8549},[478,19530,5930],{"class":710},[478,19532,6223],{"class":484},[478,19534,2542],{"class":714},[478,19536,19537],{"class":480,"line":8576},[478,19538,2114],{"class":714},[478,19540,19541],{"class":480,"line":8581},[478,19542,19543],{"class":770},"    \u002F\u002F1.括号法\n",[478,19545,19546],{"class":480,"line":8587},[478,19547,19548],{"class":770},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[478,19550,19551],{"class":480,"line":8599},[478,19552,19553],{"class":770},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[478,19555,19556],{"class":480,"line":8611},[478,19557,19558],{"class":770},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[478,19560,19561],{"class":480,"line":8623},[478,19562,19563],{"class":770},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[478,19565,19566],{"class":480,"line":10282},[478,19567,2966],{"emptyLinePlaceholder":640},[478,19569,19570],{"class":480,"line":10307},[478,19571,19572],{"class":770},"    \u002F\u002F注意事项\n",[478,19574,19575],{"class":480,"line":10330},[478,19576,19577],{"class":770},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[478,19579,19580],{"class":480,"line":10354},[478,19581,19582],{"class":770},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[478,19584,19585],{"class":480,"line":10359},[478,19586,19587],{"class":770},"    \u002F\u002F Person p4();\n",[478,19589,19590],{"class":480,"line":10364},[478,19591,2966],{"emptyLinePlaceholder":640},[478,19593,19594],{"class":480,"line":10369},[478,19595,19596],{"class":770},"    \u002F\u002F2.显示法\n",[478,19598,19599],{"class":480,"line":10378},[478,19600,19601],{"class":714},"    Person p1;\n",[478,19603,19604,19607,19609,19612,19614,19616],{"class":480,"line":10383},[478,19605,19606],{"class":714},"    Person p2",[478,19608,759],{"class":710},[478,19610,19611],{"class":484},"Person",[478,19613,263],{"class":714},[478,19615,1146],{"class":495},[478,19617,3285],{"class":714},[478,19619,19620,19623,19625,19627],{"class":480,"line":10389},[478,19621,19622],{"class":714},"    Person p3",[478,19624,759],{"class":710},[478,19626,19611],{"class":484},[478,19628,19629],{"class":714},"(p2);\n",[478,19631,19632],{"class":480,"line":10410},[478,19633,19634],{"class":770},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[478,19636,19637],{"class":480,"line":10416},[478,19638,2966],{"emptyLinePlaceholder":640},[478,19640,19641],{"class":480,"line":10430},[478,19642,19643],{"class":770},"    \u002F\u002F 注意事项2\n",[478,19645,19646],{"class":480,"line":10436},[478,19647,19648],{"class":770},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[478,19650,19651],{"class":480,"line":10463},[478,19652,19653],{"class":770},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[478,19655,19656],{"class":480,"line":10472},[478,19657,2966],{"emptyLinePlaceholder":640},[478,19659,19660],{"class":480,"line":10478},[478,19661,19662],{"class":770},"    \u002F\u002F3.隐士转换法\n",[478,19664,19665,19668,19670,19672,19674],{"class":480,"line":10486},[478,19666,19667],{"class":714},"    Person p4",[478,19669,759],{"class":710},[478,19671,1146],{"class":495},[478,19673,767],{"class":714},[478,19675,19676],{"class":770},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[478,19678,19679,19682,19684,19687],{"class":480,"line":10491},[478,19680,19681],{"class":714},"    Person p5",[478,19683,759],{"class":710},[478,19685,19686],{"class":714},"p4;",[478,19688,19689],{"class":770}," \u002F\u002F 这里会调用拷贝构造函数\n",[478,19691,19692],{"class":480,"line":17169},[478,19693,2133],{"class":714},[478,19695,19696,19698,19700],{"class":480,"line":17175},[478,19697,717],{"class":710},[478,19699,2539],{"class":484},[478,19701,2542],{"class":714},[478,19703,19704],{"class":480,"line":17198},[478,19705,2114],{"class":714},[478,19707,19708,19710],{"class":480,"line":17204},[478,19709,6199],{"class":484},[478,19711,6202],{"class":714},[478,19713,19714,19716],{"class":480,"line":17227},[478,19715,6268],{"class":484},[478,19717,6202],{"class":714},[478,19719,19720,19722,19724],{"class":480,"line":17241},[478,19721,4656],{"class":710},[478,19723,4659],{"class":495},[478,19725,1859],{"class":714},[478,19727,19728],{"class":480,"line":17261},[478,19729,2133],{"class":714},[19,19731,19732,19735],{},[45,19733,19734],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[129,19737,19739],{"id":19738},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19741,19742],{},"C++中拷贝构造函数调用时机通常有三种情况",[1702,19744,19745,19748,19751],{},[32,19746,19747],{},"使用一个已经创建完毕的对象来初始化一个新对象",[32,19749,19750],{},"值传递的方式给函数参数传值",[32,19752,19753],{},"以值方式返回局部对象",[469,19755,19757],{"className":701,"code":19756,"language":703,"meta":54,"style":54},"#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",[475,19758,19759,19765,19775,19779,19784,19788,19793,19798,19803,19809,19813,19817,19823,19827,19840,19844,19849,19861,19865,19873,19886,19890,19894,19910,19914,19923,19936,19940,19946,19950,19962,19966,19972,19976,19980,19988,19992,20005,20013,20031,20035,20040,20045,20060,20064,20077,20081,20089,20093,20097,20105,20109,20114,20123,20127,20131,20156,20166,20170,20178,20182,20193,20218,20222,20226,20230,20238,20242,20247,20252,20259,20264,20269,20274,20279,20283,20288,20292,20297,20301,20306,20311,20315,20319,20324,20329,20337],{"__ignoreMap":54},[478,19760,19761,19763],{"class":480,"line":481},[478,19762,2516],{"class":710},[478,19764,2519],{"class":488},[478,19766,19767,19769,19771,19773],{"class":480,"line":565},[478,19768,2524],{"class":710},[478,19770,2527],{"class":710},[478,19772,2530],{"class":484},[478,19774,1859],{"class":714},[478,19776,19777],{"class":480,"line":579},[478,19778,2966],{"emptyLinePlaceholder":640},[478,19780,19781],{"class":480,"line":593},[478,19782,19783],{"class":770},"\u002F\u002F拷贝构造函数调用时机\n",[478,19785,19786],{"class":480,"line":1769},[478,19787,2966],{"emptyLinePlaceholder":640},[478,19789,19790],{"class":480,"line":1783},[478,19791,19792],{"class":770},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[478,19794,19795],{"class":480,"line":1789},[478,19796,19797],{"class":770},"\u002F\u002F2.值传递的方式给函数参数传值\n",[478,19799,19800],{"class":480,"line":1880},[478,19801,19802],{"class":770},"\u002F\u002F3.以值方式返回局部对象\n",[478,19804,19805,19807],{"class":480,"line":1886},[478,19806,15259],{"class":710},[478,19808,15736],{"class":484},[478,19810,19811],{"class":480,"line":1898},[478,19812,2114],{"class":714},[478,19814,19815],{"class":480,"line":2180},[478,19816,15281],{"class":710},[478,19818,19819,19821],{"class":480,"line":2185},[478,19820,19084],{"class":484},[478,19822,2542],{"class":714},[478,19824,19825],{"class":480,"line":2191},[478,19826,2596],{"class":714},[478,19828,19829,19831,19833,19836,19838],{"class":480,"line":2196},[478,19830,10235],{"class":714},[478,19832,1739],{"class":710},[478,19834,19835],{"class":488}," \"Person的默认构造函数调用\"",[478,19837,2013],{"class":710},[478,19839,9406],{"class":714},[478,19841,19842],{"class":480,"line":2210},[478,19843,2753],{"class":714},[478,19845,19846],{"class":480,"line":2215},[478,19847,19848],{"class":770},"    \u002F\u002F有参构造\n",[478,19850,19851,19853,19855,19857,19859],{"class":480,"line":2221},[478,19852,19084],{"class":484},[478,19854,263],{"class":714},[478,19856,717],{"class":710},[478,19858,16254],{"class":5782},[478,19860,720],{"class":714},[478,19862,19863],{"class":480,"line":2241},[478,19864,2596],{"class":714},[478,19866,19867,19869,19871],{"class":480,"line":2246},[478,19868,16308],{"class":714},[478,19870,759],{"class":710},[478,19872,8363],{"class":714},[478,19874,19875,19877,19879,19882,19884],{"class":480,"line":2260},[478,19876,10235],{"class":714},[478,19878,1739],{"class":710},[478,19880,19881],{"class":488}," \"Person的有参构造函数调用\"",[478,19883,2013],{"class":710},[478,19885,9406],{"class":714},[478,19887,19888],{"class":480,"line":2265},[478,19889,2753],{"class":714},[478,19891,19892],{"class":480,"line":2294},[478,19893,19439],{"class":770},[478,19895,19896,19898,19900,19902,19904,19906,19908],{"class":480,"line":2299},[478,19897,19084],{"class":484},[478,19899,263],{"class":714},[478,19901,7358],{"class":710},[478,19903,16134],{"class":484},[478,19905,11150],{"class":710},[478,19907,19],{"class":5782},[478,19909,720],{"class":714},[478,19911,19912],{"class":480,"line":2316},[478,19913,2596],{"class":714},[478,19915,19916,19918,19920],{"class":480,"line":2321},[478,19917,16308],{"class":714},[478,19919,759],{"class":710},[478,19921,19922],{"class":714}," p.m_Age;\n",[478,19924,19925,19927,19929,19932,19934],{"class":480,"line":2326},[478,19926,10235],{"class":714},[478,19928,1739],{"class":710},[478,19930,19931],{"class":488}," \"Person的拷贝构造函数调用\"",[478,19933,2013],{"class":710},[478,19935,9406],{"class":714},[478,19937,19938],{"class":480,"line":2331},[478,19939,2753],{"class":714},[478,19941,19942,19944],{"class":480,"line":2345},[478,19943,19117],{"class":484},[478,19945,2542],{"class":714},[478,19947,19948],{"class":480,"line":2350},[478,19949,2596],{"class":714},[478,19951,19952,19954,19956,19958,19960],{"class":480,"line":3143},[478,19953,10235],{"class":714},[478,19955,1739],{"class":710},[478,19957,19132],{"class":488},[478,19959,2013],{"class":710},[478,19961,9406],{"class":714},[478,19963,19964],{"class":480,"line":3157},[478,19965,2753],{"class":714},[478,19967,19968,19970],{"class":480,"line":3165},[478,19969,2551],{"class":710},[478,19971,16231],{"class":714},[478,19973,19974],{"class":480,"line":3170},[478,19975,4561],{"class":714},[478,19977,19978],{"class":480,"line":3176},[478,19979,19792],{"class":770},[478,19981,19982,19984,19986],{"class":480,"line":3182},[478,19983,5930],{"class":710},[478,19985,6154],{"class":484},[478,19987,2542],{"class":714},[478,19989,19990],{"class":480,"line":3187},[478,19991,2114],{"class":714},[478,19993,19994,19997,19999,20001,20003],{"class":480,"line":8514},[478,19995,19996],{"class":714},"    Person ",[478,19998,7696],{"class":484},[478,20000,263],{"class":714},[478,20002,1396],{"class":495},[478,20004,3285],{"class":714},[478,20006,20007,20009,20011],{"class":480,"line":8538},[478,20008,19996],{"class":714},[478,20010,7599],{"class":484},[478,20012,18080],{"class":714},[478,20014,20015,20017,20019,20022,20024,20027,20029],{"class":480,"line":8543},[478,20016,2119],{"class":714},[478,20018,1739],{"class":710},[478,20020,20021],{"class":488},"\"P2的年龄为：\"",[478,20023,1739],{"class":710},[478,20025,20026],{"class":714},"p2.m_Age",[478,20028,1739],{"class":710},[478,20030,1761],{"class":714},[478,20032,20033],{"class":480,"line":8549},[478,20034,2133],{"class":714},[478,20036,20037],{"class":480,"line":8576},[478,20038,20039],{"class":770},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[478,20041,20042],{"class":480,"line":8581},[478,20043,20044],{"class":770},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[478,20046,20047,20049,20052,20054,20056,20058],{"class":480,"line":8587},[478,20048,5930],{"class":710},[478,20050,20051],{"class":484}," doWork",[478,20053,263],{"class":714},[478,20055,19611],{"class":484},[478,20057,7391],{"class":5782},[478,20059,720],{"class":714},[478,20061,20062],{"class":480,"line":8599},[478,20063,2114],{"class":714},[478,20065,20066,20068,20070,20073,20075],{"class":480,"line":8611},[478,20067,7095],{"class":714},[478,20069,1739],{"class":710},[478,20071,20072],{"class":488}," \"doWork函数调用\"",[478,20074,2013],{"class":710},[478,20076,9406],{"class":714},[478,20078,20079],{"class":480,"line":8623},[478,20080,2133],{"class":714},[478,20082,20083,20085,20087],{"class":480,"line":10282},[478,20084,5930],{"class":710},[478,20086,6223],{"class":484},[478,20088,2542],{"class":714},[478,20090,20091],{"class":480,"line":10307},[478,20092,2114],{"class":714},[478,20094,20095],{"class":480,"line":10330},[478,20096,15878],{"class":714},[478,20098,20099,20102],{"class":480,"line":10354},[478,20100,20101],{"class":484},"    doWork",[478,20103,20104],{"class":714},"(p);\n",[478,20106,20107],{"class":480,"line":10359},[478,20108,2133],{"class":714},[478,20110,20111],{"class":480,"line":10364},[478,20112,20113],{"class":770},"\u002F\u002F 3.以值方式返回局部对象\n",[478,20115,20116,20118,20121],{"class":480,"line":10369},[478,20117,19611],{"class":484},[478,20119,20120],{"class":484}," doWork2",[478,20122,2542],{"class":714},[478,20124,20125],{"class":480,"line":10378},[478,20126,2114],{"class":714},[478,20128,20129],{"class":480,"line":10383},[478,20130,19601],{"class":714},[478,20132,20133,20135,20137,20139,20141,20143,20145,20147,20149,20151,20153],{"class":480,"line":10389},[478,20134,2119],{"class":714},[478,20136,1739],{"class":710},[478,20138,263],{"class":714},[478,20140,717],{"class":710},[478,20142,7084],{"class":710},[478,20144,222],{"class":714},[478,20146,1054],{"class":710},[478,20148,7696],{"class":714},[478,20150,1739],{"class":710},[478,20152,1807],{"class":714},[478,20154,20155],{"class":770},"\u002F\u002F打印p1的地址\n",[478,20157,20158,20160,20163],{"class":480,"line":10410},[478,20159,4656],{"class":710},[478,20161,20162],{"class":714}," p1;",[478,20164,20165],{"class":770},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[478,20167,20168],{"class":480,"line":10416},[478,20169,2133],{"class":714},[478,20171,20172,20174,20176],{"class":480,"line":10430},[478,20173,5930],{"class":710},[478,20175,6295],{"class":484},[478,20177,2542],{"class":714},[478,20179,20180],{"class":480,"line":10436},[478,20181,2114],{"class":714},[478,20183,20184,20187,20189,20191],{"class":480,"line":10463},[478,20185,20186],{"class":714},"    Person p ",[478,20188,759],{"class":710},[478,20190,20120],{"class":484},[478,20192,6202],{"class":714},[478,20194,20195,20197,20199,20201,20203,20205,20207,20209,20211,20213,20215],{"class":480,"line":10472},[478,20196,2119],{"class":714},[478,20198,1739],{"class":710},[478,20200,263],{"class":714},[478,20202,717],{"class":710},[478,20204,7084],{"class":710},[478,20206,222],{"class":714},[478,20208,1054],{"class":710},[478,20210,19],{"class":714},[478,20212,1739],{"class":710},[478,20214,1807],{"class":714},[478,20216,20217],{"class":770},"\u002F\u002F打印p的地址\n",[478,20219,20220],{"class":480,"line":10478},[478,20221,2133],{"class":714},[478,20223,20224],{"class":480,"line":10486},[478,20225,2966],{"emptyLinePlaceholder":640},[478,20227,20228],{"class":480,"line":10491},[478,20229,2966],{"emptyLinePlaceholder":640},[478,20231,20232,20234,20236],{"class":480,"line":17169},[478,20233,717],{"class":710},[478,20235,2539],{"class":484},[478,20237,2542],{"class":714},[478,20239,20240],{"class":480,"line":17175},[478,20241,2114],{"class":714},[478,20243,20244],{"class":480,"line":17198},[478,20245,20246],{"class":770},"    \u002F\u002F test01();\n",[478,20248,20249],{"class":480,"line":17204},[478,20250,20251],{"class":770},"    \u002F\u002F test02();\n",[478,20253,20254,20257],{"class":480,"line":17227},[478,20255,20256],{"class":484},"    test03",[478,20258,6202],{"class":714},[478,20260,20261],{"class":480,"line":17241},[478,20262,20263],{"class":770},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[478,20265,20266],{"class":480,"line":17261},[478,20267,20268],{"class":770},"\u002F\u002F 输出结果如下：\n",[478,20270,20271],{"class":480,"line":17267},[478,20272,20273],{"class":770},"\u002F\u002F Person的默认构造函数调用\n",[478,20275,20276],{"class":480,"line":17278},[478,20277,20278],{"class":770},"\u002F\u002F 0x7fffffffceec\n",[478,20280,20281],{"class":480,"line":17301},[478,20282,20278],{"class":770},[478,20284,20285],{"class":480,"line":17323},[478,20286,20287],{"class":770},"\u002F\u002F Person的析构函数调用\n",[478,20289,20290],{"class":480,"line":17328},[478,20291,2966],{"emptyLinePlaceholder":640},[478,20293,20294],{"class":480,"line":17334},[478,20295,20296],{"class":770},"\u002F\u002F 之前的输出结果如下：\n",[478,20298,20299],{"class":480,"line":17348},[478,20300,20273],{"class":770},[478,20302,20303],{"class":480,"line":17361},[478,20304,20305],{"class":770},"\u002F\u002F 地址\n",[478,20307,20308],{"class":480,"line":17366},[478,20309,20310],{"class":770},"\u002F\u002F Person的拷贝构造函数调用\n",[478,20312,20313],{"class":480,"line":17380},[478,20314,20287],{"class":770},[478,20316,20317],{"class":480,"line":17385},[478,20318,20305],{"class":770},[478,20320,20321],{"class":480,"line":17391},[478,20322,20323],{"class":770},"\u002F\u002F (这两次输出的地址也是不同的) \n",[478,20325,20326],{"class":480,"line":17396},[478,20327,20328],{"class":770},"\u002F\u002F Person的析构函数调用     \n",[478,20330,20331,20333,20335],{"class":480,"line":17410},[478,20332,4656],{"class":710},[478,20334,4659],{"class":495},[478,20336,1859],{"class":714},[478,20338,20339],{"class":480,"line":17415},[478,20340,2133],{"class":714},[19,20342,20343],{},"简化版理解",[469,20345,20347],{"className":701,"code":20346,"language":703,"meta":54,"style":54},"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",[475,20348,20349,20357,20361,20367,20380,20391,20395,20407,20420,20428,20432,20448,20461,20470,20474,20479,20485,20498,20502,20506,20513,20517,20521,20526,20534,20538,20554,20567,20580,20584,20589,20597,20601,20605,20610,20615,20631,20639,20646,20652,20656,20660,20665,20673,20677,20681,20704,20711,20715,20719,20727,20731,20741,20763,20767,20771,20775,20783,20787,20792,20797,20803,20807,20817,20821,20829],{"__ignoreMap":54},[478,20350,20351,20353,20355],{"class":480,"line":481},[478,20352,15259],{"class":710},[478,20354,16134],{"class":484},[478,20356,16137],{"class":714},[478,20358,20359],{"class":480,"line":565},[478,20360,15281],{"class":710},[478,20362,20363,20365],{"class":480,"line":579},[478,20364,19084],{"class":484},[478,20366,11419],{"class":714},[478,20368,20369,20371,20373,20376,20378],{"class":480,"line":593},[478,20370,10235],{"class":714},[478,20372,1739],{"class":710},[478,20374,20375],{"class":488}," \"无参构造函数!\"",[478,20377,2013],{"class":710},[478,20379,9406],{"class":714},[478,20381,20382,20385,20387,20389],{"class":480,"line":1769},[478,20383,20384],{"class":714},"        mAge ",[478,20386,759],{"class":710},[478,20388,4659],{"class":495},[478,20390,1859],{"class":714},[478,20392,20393],{"class":480,"line":1783},[478,20394,2753],{"class":714},[478,20396,20397,20399,20401,20403,20405],{"class":480,"line":1789},[478,20398,19084],{"class":484},[478,20400,263],{"class":714},[478,20402,717],{"class":710},[478,20404,16254],{"class":5782},[478,20406,13008],{"class":714},[478,20408,20409,20411,20413,20416,20418],{"class":480,"line":1880},[478,20410,10235],{"class":714},[478,20412,1739],{"class":710},[478,20414,20415],{"class":488}," \"有参构造函数!\"",[478,20417,2013],{"class":710},[478,20419,9406],{"class":714},[478,20421,20422,20424,20426],{"class":480,"line":1886},[478,20423,20384],{"class":714},[478,20425,759],{"class":710},[478,20427,8363],{"class":714},[478,20429,20430],{"class":480,"line":1898},[478,20431,2753],{"class":714},[478,20433,20434,20436,20438,20440,20442,20444,20446],{"class":480,"line":2180},[478,20435,19084],{"class":484},[478,20437,263],{"class":714},[478,20439,7358],{"class":710},[478,20441,16134],{"class":484},[478,20443,1054],{"class":710},[478,20445,7391],{"class":5782},[478,20447,13008],{"class":714},[478,20449,20450,20452,20454,20457,20459],{"class":480,"line":2185},[478,20451,10235],{"class":714},[478,20453,1739],{"class":710},[478,20455,20456],{"class":488}," \"拷贝构造函数!\"",[478,20458,2013],{"class":710},[478,20460,9406],{"class":714},[478,20462,20463,20465,20467],{"class":480,"line":2191},[478,20464,20384],{"class":714},[478,20466,759],{"class":710},[478,20468,20469],{"class":714}," p.mAge;\n",[478,20471,20472],{"class":480,"line":2196},[478,20473,2753],{"class":714},[478,20475,20476],{"class":480,"line":2210},[478,20477,20478],{"class":770},"    \u002F\u002F析构函数在释放内存之前调用\n",[478,20480,20481,20483],{"class":480,"line":2215},[478,20482,19117],{"class":484},[478,20484,11419],{"class":714},[478,20486,20487,20489,20491,20494,20496],{"class":480,"line":2221},[478,20488,10235],{"class":714},[478,20490,1739],{"class":710},[478,20492,20493],{"class":488}," \"析构函数!\"",[478,20495,2013],{"class":710},[478,20497,9406],{"class":714},[478,20499,20500],{"class":480,"line":2241},[478,20501,2753],{"class":714},[478,20503,20504],{"class":480,"line":2246},[478,20505,15281],{"class":710},[478,20507,20508,20510],{"class":480,"line":2260},[478,20509,2551],{"class":710},[478,20511,20512],{"class":714}," mAge;\n",[478,20514,20515],{"class":480,"line":2265},[478,20516,4561],{"class":714},[478,20518,20519],{"class":480,"line":2294},[478,20520,2966],{"emptyLinePlaceholder":640},[478,20522,20523],{"class":480,"line":2299},[478,20524,20525],{"class":770},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[478,20527,20528,20530,20532],{"class":480,"line":2316},[478,20529,5930],{"class":710},[478,20531,6154],{"class":484},[478,20533,11419],{"class":714},[478,20535,20536],{"class":480,"line":2321},[478,20537,2966],{"emptyLinePlaceholder":640},[478,20539,20540,20542,20545,20547,20549,20551],{"class":480,"line":2326},[478,20541,19996],{"class":714},[478,20543,20544],{"class":484},"man",[478,20546,263],{"class":714},[478,20548,1012],{"class":495},[478,20550,6532],{"class":714},[478,20552,20553],{"class":770}," \u002F\u002Fp对象已经创建完毕\n",[478,20555,20556,20558,20561,20564],{"class":480,"line":2331},[478,20557,19996],{"class":714},[478,20559,20560],{"class":484},"newman",[478,20562,20563],{"class":714},"(man);",[478,20565,20566],{"class":770}," \u002F\u002F调用拷贝构造函数\n",[478,20568,20569,20572,20574,20577],{"class":480,"line":2345},[478,20570,20571],{"class":714},"    Person newman2 ",[478,20573,759],{"class":710},[478,20575,20576],{"class":714}," man;",[478,20578,20579],{"class":770}," \u002F\u002F拷贝构造\n",[478,20581,20582],{"class":480,"line":2350},[478,20583,2966],{"emptyLinePlaceholder":640},[478,20585,20586],{"class":480,"line":3143},[478,20587,20588],{"class":770},"    \u002F\u002FPerson newman3;\n",[478,20590,20591,20594],{"class":480,"line":3157},[478,20592,20593],{"class":770},"    \u002F\u002Fnewman3 = man;",[478,20595,20596],{"class":770}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[478,20598,20599],{"class":480,"line":3165},[478,20600,2133],{"class":714},[478,20602,20603],{"class":480,"line":3170},[478,20604,2966],{"emptyLinePlaceholder":640},[478,20606,20607],{"class":480,"line":3176},[478,20608,20609],{"class":770},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[478,20611,20612],{"class":480,"line":3182},[478,20613,20614],{"class":770},"\u002F\u002F相当于Person p1 = p;\n",[478,20616,20617,20619,20621,20623,20625,20628],{"class":480,"line":3187},[478,20618,5930],{"class":710},[478,20620,20051],{"class":484},[478,20622,263],{"class":714},[478,20624,19611],{"class":484},[478,20626,20627],{"class":5782}," p1",[478,20629,20630],{"class":714},") {}\n",[478,20632,20633,20635,20637],{"class":480,"line":8514},[478,20634,5930],{"class":710},[478,20636,6223],{"class":484},[478,20638,11419],{"class":714},[478,20640,20641,20643],{"class":480,"line":8538},[478,20642,19169],{"class":714},[478,20644,20645],{"class":770}," \u002F\u002F无参构造函数\n",[478,20647,20648,20650],{"class":480,"line":8543},[478,20649,20101],{"class":484},[478,20651,20104],{"class":714},[478,20653,20654],{"class":480,"line":8549},[478,20655,2133],{"class":714},[478,20657,20658],{"class":480,"line":8576},[478,20659,2966],{"emptyLinePlaceholder":640},[478,20661,20662],{"class":480,"line":8581},[478,20663,20664],{"class":770},"\u002F\u002F3. 以值方式返回局部对象\n",[478,20666,20667,20669,20671],{"class":480,"line":8587},[478,20668,19611],{"class":484},[478,20670,20120],{"class":484},[478,20672,2542],{"class":714},[478,20674,20675],{"class":480,"line":8599},[478,20676,2114],{"class":714},[478,20678,20679],{"class":480,"line":8611},[478,20680,19601],{"class":714},[478,20682,20683,20685,20687,20689,20691,20693,20695,20697,20700,20702],{"class":480,"line":8623},[478,20684,7095],{"class":714},[478,20686,1739],{"class":710},[478,20688,219],{"class":714},[478,20690,717],{"class":710},[478,20692,7084],{"class":710},[478,20694,222],{"class":714},[478,20696,1054],{"class":710},[478,20698,20699],{"class":714},"p1 ",[478,20701,1739],{"class":710},[478,20703,9406],{"class":714},[478,20705,20706,20708],{"class":480,"line":10282},[478,20707,4656],{"class":710},[478,20709,20710],{"class":714}," p1;\n",[478,20712,20713],{"class":480,"line":10307},[478,20714,2133],{"class":714},[478,20716,20717],{"class":480,"line":10330},[478,20718,2966],{"emptyLinePlaceholder":640},[478,20720,20721,20723,20725],{"class":480,"line":10354},[478,20722,5930],{"class":710},[478,20724,6295],{"class":484},[478,20726,2542],{"class":714},[478,20728,20729],{"class":480,"line":10359},[478,20730,2114],{"class":714},[478,20732,20733,20735,20737,20739],{"class":480,"line":10364},[478,20734,20186],{"class":714},[478,20736,759],{"class":710},[478,20738,20120],{"class":484},[478,20740,6202],{"class":714},[478,20742,20743,20745,20747,20749,20751,20753,20755,20757,20759,20761],{"class":480,"line":10369},[478,20744,7095],{"class":714},[478,20746,1739],{"class":710},[478,20748,219],{"class":714},[478,20750,717],{"class":710},[478,20752,7084],{"class":710},[478,20754,222],{"class":714},[478,20756,1054],{"class":710},[478,20758,12014],{"class":714},[478,20760,1739],{"class":710},[478,20762,9406],{"class":714},[478,20764,20765],{"class":480,"line":10378},[478,20766,2133],{"class":714},[478,20768,20769],{"class":480,"line":10383},[478,20770,2966],{"emptyLinePlaceholder":640},[478,20772,20773],{"class":480,"line":10389},[478,20774,2966],{"emptyLinePlaceholder":640},[478,20776,20777,20779,20781],{"class":480,"line":10410},[478,20778,717],{"class":710},[478,20780,2539],{"class":484},[478,20782,11419],{"class":714},[478,20784,20785],{"class":480,"line":10416},[478,20786,2966],{"emptyLinePlaceholder":640},[478,20788,20789],{"class":480,"line":10430},[478,20790,20791],{"class":770},"    \u002F\u002Ftest01();\n",[478,20793,20794],{"class":480,"line":10436},[478,20795,20796],{"class":770},"    \u002F\u002Ftest02();\n",[478,20798,20799,20801],{"class":480,"line":10463},[478,20800,20256],{"class":484},[478,20802,6202],{"class":714},[478,20804,20805],{"class":480,"line":10472},[478,20806,2966],{"emptyLinePlaceholder":640},[478,20808,20809,20811,20813,20815],{"class":480,"line":10478},[478,20810,2869],{"class":484},[478,20812,263],{"class":714},[478,20814,2874],{"class":488},[478,20816,3285],{"class":714},[478,20818,20819],{"class":480,"line":10486},[478,20820,2966],{"emptyLinePlaceholder":640},[478,20822,20823,20825,20827],{"class":480,"line":10491},[478,20824,4656],{"class":710},[478,20826,4659],{"class":495},[478,20828,1859],{"class":714},[478,20830,20831],{"class":480,"line":17169},[478,20832,2133],{"class":714},[129,20834,20836],{"id":20835},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20838,20839],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20841,20842],{},"1．默认构造函数(无参，函数体为空)",[19,20844,20845],{},"2．默认析构函数(无参，函数体为空)",[19,20847,20848],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20850,20851],{},"构造函数调用规则如下：",[1702,20853,20854,20857],{},[32,20855,20856],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[32,20858,20859],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[469,20861,20863],{"className":701,"code":20862,"language":703,"meta":54,"style":54},"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",[475,20864,20865,20873,20877,20882,20888,20900,20904,20909,20921,20930,20942,20946,20950,20966,20975,20987,20991,20995,21001,21013,21017,21021,21027,21031,21035,21043,21047,21059,21064,21072,21076,21094,21098,21102,21110,21114,21119,21127,21142,21155,21159,21164,21171,21187,21200,21204,21208,21216,21220,21226,21230,21240,21244,21252],{"__ignoreMap":54},[478,20866,20867,20869,20871],{"class":480,"line":481},[478,20868,15259],{"class":710},[478,20870,16134],{"class":484},[478,20872,16137],{"class":714},[478,20874,20875],{"class":480,"line":565},[478,20876,15281],{"class":710},[478,20878,20879],{"class":480,"line":579},[478,20880,20881],{"class":770},"    \u002F\u002F无参（默认）构造函数\n",[478,20883,20884,20886],{"class":480,"line":593},[478,20885,19084],{"class":484},[478,20887,11419],{"class":714},[478,20889,20890,20892,20894,20896,20898],{"class":480,"line":1769},[478,20891,10235],{"class":714},[478,20893,1739],{"class":710},[478,20895,20375],{"class":488},[478,20897,2013],{"class":710},[478,20899,9406],{"class":714},[478,20901,20902],{"class":480,"line":1783},[478,20903,2753],{"class":714},[478,20905,20906],{"class":480,"line":1789},[478,20907,20908],{"class":770},"    \u002F\u002F有参构造函数\n",[478,20910,20911,20913,20915,20917,20919],{"class":480,"line":1880},[478,20912,19084],{"class":484},[478,20914,263],{"class":714},[478,20916,717],{"class":710},[478,20918,1967],{"class":5782},[478,20920,13008],{"class":714},[478,20922,20923,20926,20928],{"class":480,"line":1886},[478,20924,20925],{"class":714},"        age ",[478,20927,759],{"class":710},[478,20929,2001],{"class":714},[478,20931,20932,20934,20936,20938,20940],{"class":480,"line":1898},[478,20933,10235],{"class":714},[478,20935,1739],{"class":710},[478,20937,20415],{"class":488},[478,20939,2013],{"class":710},[478,20941,9406],{"class":714},[478,20943,20944],{"class":480,"line":2180},[478,20945,2753],{"class":714},[478,20947,20948],{"class":480,"line":2185},[478,20949,19439],{"class":770},[478,20951,20952,20954,20956,20958,20960,20962,20964],{"class":480,"line":2191},[478,20953,19084],{"class":484},[478,20955,263],{"class":714},[478,20957,7358],{"class":710},[478,20959,16134],{"class":484},[478,20961,1054],{"class":710},[478,20963,7391],{"class":5782},[478,20965,13008],{"class":714},[478,20967,20968,20970,20972],{"class":480,"line":2196},[478,20969,20925],{"class":714},[478,20971,759],{"class":710},[478,20973,20974],{"class":714}," p.age;\n",[478,20976,20977,20979,20981,20983,20985],{"class":480,"line":2210},[478,20978,10235],{"class":714},[478,20980,1739],{"class":710},[478,20982,20456],{"class":488},[478,20984,2013],{"class":710},[478,20986,9406],{"class":714},[478,20988,20989],{"class":480,"line":2215},[478,20990,2753],{"class":714},[478,20992,20993],{"class":480,"line":2221},[478,20994,19112],{"class":770},[478,20996,20997,20999],{"class":480,"line":2241},[478,20998,19117],{"class":484},[478,21000,11419],{"class":714},[478,21002,21003,21005,21007,21009,21011],{"class":480,"line":2246},[478,21004,10235],{"class":714},[478,21006,1739],{"class":710},[478,21008,20493],{"class":488},[478,21010,2013],{"class":710},[478,21012,9406],{"class":714},[478,21014,21015],{"class":480,"line":2260},[478,21016,2753],{"class":714},[478,21018,21019],{"class":480,"line":2265},[478,21020,15281],{"class":710},[478,21022,21023,21025],{"class":480,"line":2294},[478,21024,2551],{"class":710},[478,21026,8363],{"class":714},[478,21028,21029],{"class":480,"line":2299},[478,21030,4561],{"class":714},[478,21032,21033],{"class":480,"line":2316},[478,21034,2966],{"emptyLinePlaceholder":640},[478,21036,21037,21039,21041],{"class":480,"line":2321},[478,21038,5930],{"class":710},[478,21040,6154],{"class":484},[478,21042,2542],{"class":714},[478,21044,21045],{"class":480,"line":2326},[478,21046,2114],{"class":714},[478,21048,21049,21051,21053,21055,21057],{"class":480,"line":2331},[478,21050,19996],{"class":714},[478,21052,7696],{"class":484},[478,21054,263],{"class":714},[478,21056,1348],{"class":495},[478,21058,3285],{"class":714},[478,21060,21061],{"class":480,"line":2345},[478,21062,21063],{"class":770},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[478,21065,21066,21068,21070],{"class":480,"line":2350},[478,21067,19996],{"class":714},[478,21069,7599],{"class":484},[478,21071,18080],{"class":714},[478,21073,21074],{"class":480,"line":3143},[478,21075,2966],{"emptyLinePlaceholder":640},[478,21077,21078,21080,21082,21085,21087,21090,21092],{"class":480,"line":3157},[478,21079,7095],{"class":714},[478,21081,1739],{"class":710},[478,21083,21084],{"class":488}," \"p2的年龄为： \"",[478,21086,2013],{"class":710},[478,21088,21089],{"class":714}," p2.age ",[478,21091,1739],{"class":710},[478,21093,9406],{"class":714},[478,21095,21096],{"class":480,"line":3165},[478,21097,2133],{"class":714},[478,21099,21100],{"class":480,"line":3170},[478,21101,2966],{"emptyLinePlaceholder":640},[478,21103,21104,21106,21108],{"class":480,"line":3176},[478,21105,5930],{"class":710},[478,21107,6223],{"class":484},[478,21109,2542],{"class":714},[478,21111,21112],{"class":480,"line":3182},[478,21113,2114],{"class":714},[478,21115,21116],{"class":480,"line":3187},[478,21117,21118],{"class":770},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[478,21120,21121,21124],{"class":480,"line":8514},[478,21122,21123],{"class":714},"    Person p1;",[478,21125,21126],{"class":770}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[478,21128,21129,21131,21133,21135,21137,21139],{"class":480,"line":8538},[478,21130,19996],{"class":714},[478,21132,7599],{"class":484},[478,21134,263],{"class":714},[478,21136,1146],{"class":495},[478,21138,6532],{"class":714},[478,21140,21141],{"class":770}," \u002F\u002F用户提供的有参\n",[478,21143,21144,21146,21149,21152],{"class":480,"line":8543},[478,21145,19996],{"class":714},[478,21147,21148],{"class":484},"p3",[478,21150,21151],{"class":714},"(p2);",[478,21153,21154],{"class":770}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[478,21156,21157],{"class":480,"line":8549},[478,21158,2966],{"emptyLinePlaceholder":640},[478,21160,21161],{"class":480,"line":8576},[478,21162,21163],{"class":770},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[478,21165,21166,21169],{"class":480,"line":8581},[478,21167,21168],{"class":714},"    Person p4;",[478,21170,21126],{"class":770},[478,21172,21173,21175,21178,21180,21182,21184],{"class":480,"line":8587},[478,21174,19996],{"class":714},[478,21176,21177],{"class":484},"p5",[478,21179,263],{"class":714},[478,21181,1146],{"class":495},[478,21183,6532],{"class":714},[478,21185,21186],{"class":770}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[478,21188,21189,21191,21194,21197],{"class":480,"line":8599},[478,21190,19996],{"class":714},[478,21192,21193],{"class":484},"p6",[478,21195,21196],{"class":714},"(p5);",[478,21198,21199],{"class":770}," \u002F\u002F用户自己提供拷贝构造\n",[478,21201,21202],{"class":480,"line":8611},[478,21203,2133],{"class":714},[478,21205,21206],{"class":480,"line":8623},[478,21207,2966],{"emptyLinePlaceholder":640},[478,21209,21210,21212,21214],{"class":480,"line":10282},[478,21211,717],{"class":710},[478,21213,2539],{"class":484},[478,21215,11419],{"class":714},[478,21217,21218],{"class":480,"line":10307},[478,21219,2966],{"emptyLinePlaceholder":640},[478,21221,21222,21224],{"class":480,"line":10330},[478,21223,6199],{"class":484},[478,21225,6202],{"class":714},[478,21227,21228],{"class":480,"line":10354},[478,21229,2966],{"emptyLinePlaceholder":640},[478,21231,21232,21234,21236,21238],{"class":480,"line":10359},[478,21233,2869],{"class":484},[478,21235,263],{"class":714},[478,21237,2874],{"class":488},[478,21239,3285],{"class":714},[478,21241,21242],{"class":480,"line":10364},[478,21243,2966],{"emptyLinePlaceholder":640},[478,21245,21246,21248,21250],{"class":480,"line":10369},[478,21247,4656],{"class":710},[478,21249,4659],{"class":495},[478,21251,1859],{"class":714},[478,21253,21254],{"class":480,"line":10378},[478,21255,2133],{"class":714},[129,21257,21259],{"id":21258},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21261,21262],{},"浅拷贝：简单的赋值拷贝操作",[19,21264,21265],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[469,21267,21269],{"className":701,"code":21268,"language":703,"meta":54,"style":54},"#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",[475,21270,21271,21277,21287,21293,21297,21301,21306,21312,21316,21329,21333,21337,21344,21348,21358,21373,21386,21390,21395,21400,21416,21420,21433,21438,21443,21448,21457,21462,21477,21481,21485,21489,21495,21499,21504,21519,21523,21534,21548,21552,21561,21565,21571,21583,21587,21595,21599,21616,21647,21655,21683,21687,21691,21699,21703,21709],{"__ignoreMap":54},[478,21272,21273,21275],{"class":480,"line":481},[478,21274,2516],{"class":710},[478,21276,2519],{"class":488},[478,21278,21279,21281,21283,21285],{"class":480,"line":565},[478,21280,2524],{"class":710},[478,21282,2527],{"class":710},[478,21284,2530],{"class":484},[478,21286,1859],{"class":714},[478,21288,21289,21291],{"class":480,"line":579},[478,21290,15259],{"class":710},[478,21292,15736],{"class":484},[478,21294,21295],{"class":480,"line":593},[478,21296,2114],{"class":714},[478,21298,21299],{"class":480,"line":1769},[478,21300,15281],{"class":710},[478,21302,21303],{"class":480,"line":1783},[478,21304,21305],{"class":770},"    \u002F\u002F默认构造函数\n",[478,21307,21308,21310],{"class":480,"line":1789},[478,21309,19084],{"class":484},[478,21311,2542],{"class":714},[478,21313,21314],{"class":480,"line":1880},[478,21315,2596],{"class":714},[478,21317,21318,21320,21322,21325,21327],{"class":480,"line":1886},[478,21319,4017],{"class":714},[478,21321,1739],{"class":710},[478,21323,21324],{"class":488},"\"默认构造函数\"",[478,21326,1739],{"class":710},[478,21328,1761],{"class":714},[478,21330,21331],{"class":480,"line":1898},[478,21332,2753],{"class":714},[478,21334,21335],{"class":480,"line":2180},[478,21336,20908],{"class":770},[478,21338,21339,21341],{"class":480,"line":2185},[478,21340,19117],{"class":484},[478,21342,21343],{"class":714},"(int age,int height)\n",[478,21345,21346],{"class":480,"line":2191},[478,21347,2596],{"class":714},[478,21349,21350,21353,21355],{"class":480,"line":2196},[478,21351,21352],{"class":714},"        m_Age",[478,21354,759],{"class":710},[478,21356,21357],{"class":714},"age;\n",[478,21359,21360,21363,21365,21367,21370],{"class":480,"line":2210},[478,21361,21362],{"class":714},"        m_Height",[478,21364,12283],{"class":710},[478,21366,2948],{"class":710},[478,21368,21369],{"class":714},"(height);",[478,21371,21372],{"class":770},"\u002F\u002F放到堆区\n",[478,21374,21375,21377,21379,21382,21384],{"class":480,"line":2215},[478,21376,4017],{"class":714},[478,21378,1739],{"class":710},[478,21380,21381],{"class":488},"\"有参构造函数\"",[478,21383,1739],{"class":710},[478,21385,1761],{"class":714},[478,21387,21388],{"class":480,"line":2221},[478,21389,2753],{"class":714},[478,21391,21392],{"class":480,"line":2241},[478,21393,21394],{"class":770},"    \u002F\u002F深拷贝解决上述问题\n",[478,21396,21397],{"class":480,"line":2246},[478,21398,21399],{"class":770},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[478,21401,21402,21404,21406,21408,21410,21412,21414],{"class":480,"line":2260},[478,21403,19084],{"class":484},[478,21405,263],{"class":714},[478,21407,7358],{"class":710},[478,21409,16134],{"class":484},[478,21411,11150],{"class":710},[478,21413,19],{"class":5782},[478,21415,720],{"class":714},[478,21417,21418],{"class":480,"line":2265},[478,21419,2596],{"class":714},[478,21421,21422,21424,21426,21429,21431],{"class":480,"line":2294},[478,21423,4017],{"class":714},[478,21425,1739],{"class":710},[478,21427,21428],{"class":488},"\"拷贝构造函数\"",[478,21430,1739],{"class":710},[478,21432,1761],{"class":714},[478,21434,21435],{"class":480,"line":2299},[478,21436,21437],{"class":770},"        \u002F\u002F编译器默认的写如下注释部分\n",[478,21439,21440],{"class":480,"line":2316},[478,21441,21442],{"class":770},"        \u002F\u002Fm_Age=p.m_Age;\n",[478,21444,21445],{"class":480,"line":2321},[478,21446,21447],{"class":770},"        \u002F\u002Fm_Height=p.m_Height;\n",[478,21449,21450,21452,21454],{"class":480,"line":2326},[478,21451,21352],{"class":714},[478,21453,759],{"class":710},[478,21455,21456],{"class":714},"p.m_Age;\n",[478,21458,21459],{"class":480,"line":2331},[478,21460,21461],{"class":770},"        \u002F\u002F深拷贝操作\n",[478,21463,21464,21466,21468,21470,21472,21474],{"class":480,"line":2345},[478,21465,21362],{"class":714},[478,21467,12283],{"class":710},[478,21469,2948],{"class":710},[478,21471,263],{"class":714},[478,21473,1155],{"class":710},[478,21475,21476],{"class":714},"p.m_Height);\n",[478,21478,21479],{"class":480,"line":2350},[478,21480,2753],{"class":714},[478,21482,21483],{"class":480,"line":3143},[478,21484,2966],{"emptyLinePlaceholder":640},[478,21486,21487],{"class":480,"line":3157},[478,21488,19112],{"class":770},[478,21490,21491,21493],{"class":480,"line":3165},[478,21492,19117],{"class":484},[478,21494,2542],{"class":714},[478,21496,21497],{"class":480,"line":3170},[478,21498,2596],{"class":714},[478,21500,21501],{"class":480,"line":3176},[478,21502,21503],{"class":770},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[478,21505,21506,21508,21511,21514,21517],{"class":480,"line":3182},[478,21507,3063],{"class":710},[478,21509,21510],{"class":714},"(m_Height ",[478,21512,21513],{"class":710},"!=",[478,21515,21516],{"class":495}," NULL",[478,21518,720],{"class":714},[478,21520,21521],{"class":480,"line":3187},[478,21522,3076],{"class":714},[478,21524,21525,21528,21531],{"class":480,"line":8514},[478,21526,21527],{"class":710},"            delete",[478,21529,21530],{"class":714}," m_Height;",[478,21532,21533],{"class":770}," \u002F\u002F释放堆区内存\n",[478,21535,21536,21539,21541,21543,21545],{"class":480,"line":8538},[478,21537,21538],{"class":714},"            m_Height",[478,21540,759],{"class":710},[478,21542,2958],{"class":495},[478,21544,767],{"class":714},[478,21546,21547],{"class":770}," \u002F\u002F防止野指针\n",[478,21549,21550],{"class":480,"line":8543},[478,21551,3095],{"class":714},[478,21553,21554,21556,21558],{"class":480,"line":8549},[478,21555,4017],{"class":714},[478,21557,1739],{"class":710},[478,21559,21560],{"class":488},"\"Person的析构函数调用\"\n",[478,21562,21563],{"class":480,"line":8576},[478,21564,2753],{"class":714},[478,21566,21567,21569],{"class":480,"line":8581},[478,21568,2551],{"class":710},[478,21570,16231],{"class":714},[478,21572,21573,21575,21577,21580],{"class":480,"line":8587},[478,21574,2551],{"class":710},[478,21576,7084],{"class":710},[478,21578,21579],{"class":714},"m_Height;",[478,21581,21582],{"class":770}," \u002F\u002F定义一个指针，指向身高\n",[478,21584,21585],{"class":480,"line":8599},[478,21586,4561],{"class":714},[478,21588,21589,21591,21593],{"class":480,"line":8611},[478,21590,5930],{"class":710},[478,21592,6154],{"class":484},[478,21594,2542],{"class":714},[478,21596,21597],{"class":480,"line":8623},[478,21598,2114],{"class":714},[478,21600,21601,21603,21605,21607,21609,21611,21614],{"class":480,"line":10282},[478,21602,19996],{"class":714},[478,21604,7696],{"class":484},[478,21606,263],{"class":714},[478,21608,1348],{"class":495},[478,21610,1079],{"class":714},[478,21612,21613],{"class":495},"160",[478,21615,3285],{"class":714},[478,21617,21618,21620,21622,21625,21627,21630,21632,21635,21637,21640,21642,21644],{"class":480,"line":10307},[478,21619,2119],{"class":714},[478,21621,1739],{"class":710},[478,21623,21624],{"class":488},"\"p1的年龄为:\"",[478,21626,1739],{"class":710},[478,21628,21629],{"class":714},"p1.m_Age",[478,21631,1739],{"class":710},[478,21633,21634],{"class":488},"\"身高为：\"",[478,21636,6985],{"class":710},[478,21638,21639],{"class":714},"p1.m_Height",[478,21641,1739],{"class":710},[478,21643,1807],{"class":714},[478,21645,21646],{"class":770},"  \u002F\u002F18\n",[478,21648,21649,21651,21653],{"class":480,"line":10330},[478,21650,19996],{"class":714},[478,21652,7599],{"class":484},[478,21654,18080],{"class":714},[478,21656,21657,21659,21661,21664,21666,21668,21670,21672,21674,21677,21679,21681],{"class":480,"line":10354},[478,21658,2119],{"class":714},[478,21660,1739],{"class":710},[478,21662,21663],{"class":488},"\"p2的年龄为：\"",[478,21665,1739],{"class":710},[478,21667,20026],{"class":714},[478,21669,1739],{"class":710},[478,21671,21634],{"class":488},[478,21673,6985],{"class":710},[478,21675,21676],{"class":714},"p2.m_Height",[478,21678,1739],{"class":710},[478,21680,1807],{"class":714},[478,21682,21646],{"class":770},[478,21684,21685],{"class":480,"line":10359},[478,21686,13776],{"class":714},[478,21688,21689],{"class":480,"line":10364},[478,21690,2133],{"class":714},[478,21692,21693,21695,21697],{"class":480,"line":10369},[478,21694,717],{"class":710},[478,21696,2539],{"class":484},[478,21698,2542],{"class":714},[478,21700,21701],{"class":480,"line":10378},[478,21702,2114],{"class":714},[478,21704,21705,21707],{"class":480,"line":10383},[478,21706,6199],{"class":484},[478,21708,6202],{"class":714},[478,21710,21711],{"class":480,"line":10389},[478,21712,2133],{"class":714},[19,21714,21715],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21717,21718],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21720,21721],{},[52,21722],{"alt":54,"src":21723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21725,21726],{},"浅拷贝问题要使用深拷贝来解决",[19,21728,21729],{},[52,21730],{"alt":54,"src":21731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21733,21734],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[129,21736,21738],{"id":21737},"_826初始化列表","8.2.6初始化列表",[19,21740,21741],{},"作用：初始化属性",[19,21743,5747],{},[469,21745,21748],{"className":21746,"code":21747,"language":5753},[5751],"构造函数():属性1(值1),属性2(值2).....{}\n",[475,21749,21747],{"__ignoreMap":54},[19,21751,21752],{},"例子",[469,21754,21756],{"className":701,"code":21755,"language":703,"meta":54,"style":54},"#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",[475,21757,21758,21764,21774,21780,21784,21789,21793,21798,21803,21808,21813,21818,21823,21827,21832,21837,21880,21889,21907,21925,21943,21947,21951,21958,21965,21972,21976,21980,21988,21992,21996,22016,22025,22029,22033,22043,22047,22055],{"__ignoreMap":54},[478,21759,21760,21762],{"class":480,"line":481},[478,21761,2516],{"class":710},[478,21763,2519],{"class":488},[478,21765,21766,21768,21770,21772],{"class":480,"line":565},[478,21767,2524],{"class":710},[478,21769,2527],{"class":710},[478,21771,2530],{"class":484},[478,21773,1859],{"class":714},[478,21775,21776,21778],{"class":480,"line":579},[478,21777,15259],{"class":710},[478,21779,15736],{"class":484},[478,21781,21782],{"class":480,"line":593},[478,21783,2114],{"class":714},[478,21785,21786],{"class":480,"line":1769},[478,21787,21788],{"class":710},"    public:\n",[478,21790,21791],{"class":480,"line":1783},[478,21792,2966],{"emptyLinePlaceholder":640},[478,21794,21795],{"class":480,"line":1789},[478,21796,21797],{"class":770},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[478,21799,21800],{"class":480,"line":1880},[478,21801,21802],{"class":770},"    \u002F\u002FPerson(int a, int b, int c) {\n",[478,21804,21805],{"class":480,"line":1886},[478,21806,21807],{"class":770},"    \u002F\u002F  m_A = a;\n",[478,21809,21810],{"class":480,"line":1898},[478,21811,21812],{"class":770},"    \u002F\u002F  m_B = b;\n",[478,21814,21815],{"class":480,"line":2180},[478,21816,21817],{"class":770},"    \u002F\u002F  m_C = c;\n",[478,21819,21820],{"class":480,"line":2185},[478,21821,21822],{"class":770},"    \u002F\u002F}\n",[478,21824,21825],{"class":480,"line":2191},[478,21826,2966],{"emptyLinePlaceholder":640},[478,21828,21829],{"class":480,"line":2196},[478,21830,21831],{"class":770},"    \u002F\u002F初始化列表方式初始化\n",[478,21833,21834],{"class":480,"line":2210},[478,21835,21836],{"class":770},"    \u002F\u002F使用有参构造函数\n",[478,21838,21839,21841,21843,21845,21847,21849,21851,21853,21855,21857,21859,21862,21865,21868,21871,21874,21877],{"class":480,"line":2215},[478,21840,19084],{"class":484},[478,21842,263],{"class":714},[478,21844,717],{"class":710},[478,21846,1967],{"class":5782},[478,21848,13001],{"class":714},[478,21850,717],{"class":710},[478,21852,3399],{"class":5782},[478,21854,13001],{"class":714},[478,21856,717],{"class":710},[478,21858,3415],{"class":5782},[478,21860,21861],{"class":714},") :",[478,21863,21864],{"class":484},"m_A",[478,21866,21867],{"class":714},"(a), ",[478,21869,21870],{"class":484},"m_B",[478,21872,21873],{"class":714},"(b), ",[478,21875,21876],{"class":484},"m_C",[478,21878,21879],{"class":714},"(c) {}\n",[478,21881,21882,21884,21887],{"class":480,"line":2221},[478,21883,15474],{"class":710},[478,21885,21886],{"class":484}," PrintPerson",[478,21888,11419],{"class":714},[478,21890,21891,21893,21895,21898,21900,21903,21905],{"class":480,"line":2241},[478,21892,10235],{"class":714},[478,21894,1739],{"class":710},[478,21896,21897],{"class":488}," \"mA:\"",[478,21899,2013],{"class":710},[478,21901,21902],{"class":714}," m_A ",[478,21904,1739],{"class":710},[478,21906,9406],{"class":714},[478,21908,21909,21911,21913,21916,21918,21921,21923],{"class":480,"line":2246},[478,21910,10235],{"class":714},[478,21912,1739],{"class":710},[478,21914,21915],{"class":488}," \"mB:\"",[478,21917,2013],{"class":710},[478,21919,21920],{"class":714}," m_B ",[478,21922,1739],{"class":710},[478,21924,9406],{"class":714},[478,21926,21927,21929,21931,21934,21936,21939,21941],{"class":480,"line":2260},[478,21928,10235],{"class":714},[478,21930,1739],{"class":710},[478,21932,21933],{"class":488}," \"mC:\"",[478,21935,2013],{"class":710},[478,21937,21938],{"class":714}," m_C ",[478,21940,1739],{"class":710},[478,21942,9406],{"class":714},[478,21944,21945],{"class":480,"line":2265},[478,21946,2753],{"class":714},[478,21948,21949],{"class":480,"line":2294},[478,21950,15787],{"class":710},[478,21952,21953,21955],{"class":480,"line":2299},[478,21954,2551],{"class":710},[478,21956,21957],{"class":714}," m_A;\n",[478,21959,21960,21962],{"class":480,"line":2316},[478,21961,2551],{"class":710},[478,21963,21964],{"class":714}," m_B;\n",[478,21966,21967,21969],{"class":480,"line":2321},[478,21968,2551],{"class":710},[478,21970,21971],{"class":714}," m_C;\n",[478,21973,21974],{"class":480,"line":2326},[478,21975,4561],{"class":714},[478,21977,21978],{"class":480,"line":2331},[478,21979,2966],{"emptyLinePlaceholder":640},[478,21981,21982,21984,21986],{"class":480,"line":2345},[478,21983,717],{"class":710},[478,21985,2539],{"class":484},[478,21987,6544],{"class":714},[478,21989,21990],{"class":480,"line":2350},[478,21991,2114],{"class":714},[478,21993,21994],{"class":480,"line":3143},[478,21995,2966],{"emptyLinePlaceholder":640},[478,21997,21998,22000,22002,22004,22006,22008,22010,22012,22014],{"class":480,"line":3157},[478,21999,19996],{"class":714},[478,22001,19],{"class":484},[478,22003,263],{"class":714},[478,22005,193],{"class":495},[478,22007,13001],{"class":714},[478,22009,789],{"class":495},[478,22011,13001],{"class":714},[478,22013,783],{"class":495},[478,22015,3285],{"class":714},[478,22017,22018,22020,22023],{"class":480,"line":3165},[478,22019,16431],{"class":714},[478,22021,22022],{"class":484},"PrintPerson",[478,22024,6202],{"class":714},[478,22026,22027],{"class":480,"line":3170},[478,22028,2966],{"emptyLinePlaceholder":640},[478,22030,22031],{"class":480,"line":3176},[478,22032,2966],{"emptyLinePlaceholder":640},[478,22034,22035,22037,22039,22041],{"class":480,"line":3182},[478,22036,2869],{"class":484},[478,22038,263],{"class":714},[478,22040,2874],{"class":488},[478,22042,3285],{"class":714},[478,22044,22045],{"class":480,"line":3187},[478,22046,2966],{"emptyLinePlaceholder":640},[478,22048,22049,22051,22053],{"class":480,"line":8514},[478,22050,4656],{"class":710},[478,22052,4659],{"class":495},[478,22054,1859],{"class":714},[478,22056,22057],{"class":480,"line":8538},[478,22058,2133],{"class":714},[19,22060,22061,22062,22065,22066],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[45,22063,22064],{},"参数名就是定义的对象属性","，",[45,22067,22068],{},"属性后面的值为有参构造函数的形参",[469,22070,22072],{"className":701,"code":22071,"language":703,"meta":54,"style":54},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[475,22073,22074],{"__ignoreMap":54},[478,22075,22076,22078,22080,22082,22085,22087,22090,22092,22095,22097,22100,22102,22105,22107],{"class":480,"line":481},[478,22077,19611],{"class":484},[478,22079,263],{"class":714},[478,22081,717],{"class":710},[478,22083,22084],{"class":714}," a.",[478,22086,717],{"class":710},[478,22088,22089],{"class":714}," b,",[478,22091,717],{"class":710},[478,22093,22094],{"class":714}," b):",[478,22096,21864],{"class":484},[478,22098,22099],{"class":714},"(a),",[478,22101,21870],{"class":484},[478,22103,22104],{"class":714},"(c),",[478,22106,21876],{"class":484},[478,22108,22109],{"class":714},"(b) {}\n",[129,22111,22113],{"id":22112},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22115,22116],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22118,15198],{},[469,22120,22122],{"className":701,"code":22121,"language":703,"meta":54,"style":54},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[475,22123,22124,22129,22134,22138,22143,22147],{"__ignoreMap":54},[478,22125,22126],{"class":480,"line":481},[478,22127,22128],{"class":714},"A{};\n",[478,22130,22131],{"class":480,"line":565},[478,22132,22133],{"class":714},"B\n",[478,22135,22136],{"class":480,"line":579},[478,22137,2114],{"class":714},[478,22139,22140],{"class":480,"line":593},[478,22141,22142],{"class":714},"    A a;\n",[478,22144,22145],{"class":480,"line":1769},[478,22146,2133],{"class":714},[478,22148,22149],{"class":480,"line":1783},[478,22150,22151],{"class":770},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22153,22154],{},"案例",[469,22156,22158],{"className":701,"code":22157,"language":703,"meta":54,"style":54},"\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",[475,22159,22160,22165,22172,22176,22181,22186,22200,22204,22214,22225,22229,22236,22240,22253,22257,22262,22267,22271,22277,22281,22285,22289,22320,22324,22335,22339,22345,22349,22362,22366,22370,22374,22379,22384,22388,22396,22400,22417,22436,22440,22448,22452,22458],{"__ignoreMap":54},[478,22161,22162],{"class":480,"line":481},[478,22163,22164],{"class":770},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[478,22166,22167,22169],{"class":480,"line":565},[478,22168,15259],{"class":710},[478,22170,22171],{"class":484}," Phone\n",[478,22173,22174],{"class":480,"line":579},[478,22175,2114],{"class":714},[478,22177,22178],{"class":480,"line":593},[478,22179,22180],{"class":714},"public：\n",[478,22182,22183],{"class":480,"line":1769},[478,22184,22185],{"class":770},"    \u002F\u002F 赋值(构造函数)\n",[478,22187,22188,22191,22193,22195,22198],{"class":480,"line":1783},[478,22189,22190],{"class":484},"    Phone",[478,22192,263],{"class":714},[478,22194,15482],{"class":484},[478,22196,22197],{"class":5782}," pName",[478,22199,720],{"class":714},[478,22201,22202],{"class":480,"line":1789},[478,22203,2596],{"class":714},[478,22205,22206,22209,22211],{"class":480,"line":1880},[478,22207,22208],{"class":714},"        m_pName",[478,22210,759],{"class":710},[478,22212,22213],{"class":714},"pName;\n",[478,22215,22216,22218,22220,22223],{"class":480,"line":1886},[478,22217,4017],{"class":714},[478,22219,1739],{"class":710},[478,22221,22222],{"class":488},"\"Phone的构造函数调用\"",[478,22224,1859],{"class":714},[478,22226,22227],{"class":480,"line":1898},[478,22228,2753],{"class":714},[478,22230,22231,22234],{"class":480,"line":2180},[478,22232,22233],{"class":484},"    ~Phone",[478,22235,2542],{"class":714},[478,22237,22238],{"class":480,"line":2185},[478,22239,2596],{"class":714},[478,22241,22242,22244,22246,22249,22251],{"class":480,"line":2191},[478,22243,4017],{"class":714},[478,22245,1739],{"class":710},[478,22247,22248],{"class":488},"\"Phone析构函数调用\"",[478,22250,1739],{"class":710},[478,22252,1761],{"class":714},[478,22254,22255],{"class":480,"line":2196},[478,22256,2753],{"class":714},[478,22258,22259],{"class":480,"line":2210},[478,22260,22261],{"class":770},"    \u002F\u002F\n",[478,22263,22264],{"class":480,"line":2215},[478,22265,22266],{"class":714},"    string m_PName;\n",[478,22268,22269],{"class":480,"line":2221},[478,22270,4561],{"class":714},[478,22272,22273,22275],{"class":480,"line":2241},[478,22274,15259],{"class":710},[478,22276,15736],{"class":484},[478,22278,22279],{"class":480,"line":2246},[478,22280,2114],{"class":714},[478,22282,22283],{"class":480,"line":2260},[478,22284,15281],{"class":710},[478,22286,22287],{"class":480,"line":2265},[478,22288,17559],{"class":770},[478,22290,22291,22293,22295,22297,22299,22301,22303,22306,22309,22311,22314,22317],{"class":480,"line":2294},[478,22292,19084],{"class":484},[478,22294,263],{"class":714},[478,22296,15482],{"class":484},[478,22298,15485],{"class":5782},[478,22300,1079],{"class":714},[478,22302,15482],{"class":484},[478,22304,22305],{"class":5782}," pname",[478,22307,22308],{"class":714},"):",[478,22310,15575],{"class":484},[478,22312,22313],{"class":714},"(name),m_phone.",[478,22315,22316],{"class":484},"m_PName",[478,22318,22319],{"class":714},"(pname) \n",[478,22321,22322],{"class":480,"line":2299},[478,22323,2596],{"class":714},[478,22325,22326,22328,22330,22333],{"class":480,"line":2316},[478,22327,4017],{"class":714},[478,22329,1739],{"class":710},[478,22331,22332],{"class":488},"\"Person的构造函数调用\"",[478,22334,1859],{"class":714},[478,22336,22337],{"class":480,"line":2321},[478,22338,2753],{"class":714},[478,22340,22341,22343],{"class":480,"line":2326},[478,22342,19117],{"class":484},[478,22344,2542],{"class":714},[478,22346,22347],{"class":480,"line":2331},[478,22348,2596],{"class":714},[478,22350,22351,22353,22355,22358,22360],{"class":480,"line":2345},[478,22352,4017],{"class":714},[478,22354,1739],{"class":710},[478,22356,22357],{"class":488},"\"Person析构函数调用\"",[478,22359,1739],{"class":710},[478,22361,1761],{"class":714},[478,22363,22364],{"class":480,"line":2350},[478,22365,2753],{"class":714},[478,22367,22368],{"class":480,"line":3143},[478,22369,8346],{"class":770},[478,22371,22372],{"class":480,"line":3157},[478,22373,15457],{"class":714},[478,22375,22376],{"class":480,"line":3165},[478,22377,22378],{"class":770},"    \u002F\u002F手机\n",[478,22380,22381],{"class":480,"line":3170},[478,22382,22383],{"class":714},"    Phone m_Phone;\n",[478,22385,22386],{"class":480,"line":3176},[478,22387,4561],{"class":714},[478,22389,22390,22392,22394],{"class":480,"line":3182},[478,22391,5930],{"class":710},[478,22393,6154],{"class":484},[478,22395,2542],{"class":714},[478,22397,22398],{"class":480,"line":3187},[478,22399,2114],{"class":714},[478,22401,22402,22404,22406,22408,22410,22412,22415],{"class":480,"line":8514},[478,22403,19996],{"class":714},[478,22405,19],{"class":484},[478,22407,263],{"class":714},[478,22409,8482],{"class":488},[478,22411,1079],{"class":714},[478,22413,22414],{"class":488},"\"安卓\"",[478,22416,3285],{"class":714},[478,22418,22419,22421,22423,22426,22428,22431,22433],{"class":480,"line":8538},[478,22420,2119],{"class":714},[478,22422,1739],{"class":710},[478,22424,22425],{"class":714},"p.Name",[478,22427,1739],{"class":710},[478,22429,22430],{"class":488},"\"拿着：\"",[478,22432,1739],{"class":710},[478,22434,22435],{"class":714},"p.m_phone.m_PName;\n",[478,22437,22438],{"class":480,"line":8543},[478,22439,2133],{"class":714},[478,22441,22442,22444,22446],{"class":480,"line":8549},[478,22443,717],{"class":710},[478,22445,2539],{"class":484},[478,22447,2542],{"class":714},[478,22449,22450],{"class":480,"line":8576},[478,22451,2114],{"class":714},[478,22453,22454,22456],{"class":480,"line":8581},[478,22455,6199],{"class":484},[478,22457,6202],{"class":714},[478,22459,22460],{"class":480,"line":8587},[478,22461,2133],{"class":714},[19,22463,9591],{},[469,22465,22467],{"className":701,"code":22466,"language":703,"meta":54,"style":54},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[475,22468,22469,22474],{"__ignoreMap":54},[478,22470,22471],{"class":480,"line":481},[478,22472,22473],{"class":770},"    \u002F\u002F不需要写这个：\n",[478,22475,22476],{"class":480,"line":565},[478,22477,22478],{"class":770},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22480,22481],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[469,22483,22485],{"className":701,"code":22484,"language":703,"meta":54,"style":54},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[475,22486,22487],{"__ignoreMap":54},[478,22488,22489,22491,22494,22496,22499,22502],{"class":480,"line":481},[478,22490,19611],{"class":484},[478,22492,22493],{"class":714},"(string name.string pname):",[478,22495,15575],{"class":484},[478,22497,22498],{"class":714},"(name),",[478,22500,22501],{"class":484},"m_phone",[478,22503,22504],{"class":714},"(pname) {}\n",[19,22506,22507,22508,759,22511],{},"采用的是隐式转换法，实际为如下：\n",[475,22509,22510],{},"m_phone(pname)",[475,22512,22513],{},"Phone m_phone=pname",[19,22515,22516,22519],{},[45,22517,22518],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22521,22522],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[129,22524,22526],{"id":22525},"_828静态对象","8.2.8静态对象",[19,22528,22529],{},"静态对象在成员对象前static，称为静态对象",[19,22531,22532],{},"静态对象分为两类：",[29,22534,22535],{},[32,22536,22537],{},"静态成员变量",[1702,22539,22540,22543,22546],{},[32,22541,22542],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[32,22544,22545],{},"②在编译阶段分配内存",[32,22547,22548],{},"③类内声明，类外初始化",[29,22550,22551],{"start":565},[32,22552,22553],{},"静态成员函数",[1702,22555,22556,22559],{},[32,22557,22558],{},"①所有对象共享同一个函数",[32,22560,22561],{},"②静态成员函数只能访问静态成员变量",[22563,22564,22566],"h4",{"id":22565},"_8281静态成员变量","8.2.8.1静态成员变量",[469,22568,22570],{"className":701,"code":22569,"language":703,"meta":54,"style":54},"#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",[475,22571,22572,22578,22588,22594,22598,22602,22607,22612,22617,22625,22629,22633,22637,22645,22649,22653,22658,22671,22675,22683,22687,22693],{"__ignoreMap":54},[478,22573,22574,22576],{"class":480,"line":481},[478,22575,2516],{"class":710},[478,22577,2519],{"class":488},[478,22579,22580,22582,22584,22586],{"class":480,"line":565},[478,22581,2524],{"class":710},[478,22583,2527],{"class":710},[478,22585,2530],{"class":484},[478,22587,1859],{"class":714},[478,22589,22590,22592],{"class":480,"line":579},[478,22591,15259],{"class":710},[478,22593,15736],{"class":484},[478,22595,22596],{"class":480,"line":593},[478,22597,2114],{"class":714},[478,22599,22600],{"class":480,"line":1769},[478,22601,15281],{"class":710},[478,22603,22604],{"class":480,"line":1783},[478,22605,22606],{"class":770},"    \u002F\u002F非静态成员变量\n",[478,22608,22609],{"class":480,"line":1789},[478,22610,22611],{"class":770},"    \u002F\u002F int m_A;\n",[478,22613,22614],{"class":480,"line":1880},[478,22615,22616],{"class":770},"    \u002F\u002F定义静态成员变量\n",[478,22618,22619,22621,22623],{"class":480,"line":1886},[478,22620,11586],{"class":710},[478,22622,2948],{"class":710},[478,22624,21957],{"class":714},[478,22626,22627],{"class":480,"line":1898},[478,22628,2966],{"emptyLinePlaceholder":640},[478,22630,22631],{"class":480,"line":2180},[478,22632,2966],{"emptyLinePlaceholder":640},[478,22634,22635],{"class":480,"line":2185},[478,22636,4561],{"class":714},[478,22638,22639,22641,22643],{"class":480,"line":2191},[478,22640,5930],{"class":710},[478,22642,6154],{"class":484},[478,22644,2542],{"class":714},[478,22646,22647],{"class":480,"line":2196},[478,22648,2114],{"class":714},[478,22650,22651],{"class":480,"line":2210},[478,22652,15878],{"class":714},[478,22654,22655],{"class":480,"line":2215},[478,22656,22657],{"class":770},"    \u002F\u002F输出类成员变量这块内存\n",[478,22659,22660,22662,22664,22667,22669],{"class":480,"line":2221},[478,22661,2119],{"class":714},[478,22663,1739],{"class":710},[478,22665,22666],{"class":714},"p.m_A",[478,22668,1739],{"class":710},[478,22670,1761],{"class":714},[478,22672,22673],{"class":480,"line":2241},[478,22674,2133],{"class":714},[478,22676,22677,22679,22681],{"class":480,"line":2246},[478,22678,717],{"class":710},[478,22680,2539],{"class":484},[478,22682,2542],{"class":714},[478,22684,22685],{"class":480,"line":2260},[478,22686,2114],{"class":714},[478,22688,22689,22691],{"class":480,"line":2265},[478,22690,6199],{"class":484},[478,22692,2542],{"class":714},[478,22694,22695],{"class":480,"line":2294},[478,22696,2133],{"class":714},[19,22698,22699],{},"此时输出是报错的：无法解析外部命令",[19,22701,22702],{},"解决这一问题：必须用到类内声明，类外初始化操作",[469,22704,22706],{"className":701,"code":22705,"language":703,"meta":54,"style":54},"#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",[475,22707,22708,22714,22724,22730,22734,22738,22743,22751,22755,22760,22775,22783,22787,22791,22796,22801,22813,22818,22829,22834,22839,22852,22856,22864,22868,22874],{"__ignoreMap":54},[478,22709,22710,22712],{"class":480,"line":481},[478,22711,2516],{"class":710},[478,22713,2519],{"class":488},[478,22715,22716,22718,22720,22722],{"class":480,"line":565},[478,22717,2524],{"class":710},[478,22719,2527],{"class":710},[478,22721,2530],{"class":484},[478,22723,1859],{"class":714},[478,22725,22726,22728],{"class":480,"line":579},[478,22727,15259],{"class":710},[478,22729,15736],{"class":484},[478,22731,22732],{"class":480,"line":593},[478,22733,2114],{"class":714},[478,22735,22736],{"class":480,"line":1769},[478,22737,15281],{"class":710},[478,22739,22740],{"class":480,"line":1783},[478,22741,22742],{"class":770},"    \u002F\u002F类内声明\n",[478,22744,22745,22747,22749],{"class":480,"line":1789},[478,22746,11586],{"class":710},[478,22748,2948],{"class":710},[478,22750,21957],{"class":714},[478,22752,22753],{"class":480,"line":1880},[478,22754,4561],{"class":714},[478,22756,22757],{"class":480,"line":1886},[478,22758,22759],{"class":770},"\u002F\u002F类外初始化\n",[478,22761,22762,22764,22766,22769,22771,22773],{"class":480,"line":1898},[478,22763,717],{"class":710},[478,22765,16134],{"class":484},[478,22767,22768],{"class":714},"::m_A",[478,22770,759],{"class":710},[478,22772,1146],{"class":495},[478,22774,1859],{"class":714},[478,22776,22777,22779,22781],{"class":480,"line":2180},[478,22778,5930],{"class":710},[478,22780,6154],{"class":484},[478,22782,2542],{"class":714},[478,22784,22785],{"class":480,"line":2185},[478,22786,2114],{"class":714},[478,22788,22789],{"class":480,"line":2191},[478,22790,15878],{"class":714},[478,22792,22793],{"class":480,"line":2196},[478,22794,22795],{"class":770},"    \u002F\u002F访问变量的原内存空间\n",[478,22797,22798],{"class":480,"line":2210},[478,22799,22800],{"class":770},"    \u002F\u002F100\n",[478,22802,22803,22805,22807,22809,22811],{"class":480,"line":2215},[478,22804,2119],{"class":714},[478,22806,1739],{"class":710},[478,22808,22666],{"class":714},[478,22810,1739],{"class":710},[478,22812,1761],{"class":714},[478,22814,22815],{"class":480,"line":2221},[478,22816,22817],{"class":714},"    Person p2;\n",[478,22819,22820,22823,22825,22827],{"class":480,"line":2241},[478,22821,22822],{"class":714},"    p2.m_A",[478,22824,759],{"class":710},[478,22826,2289],{"class":495},[478,22828,1859],{"class":714},[478,22830,22831],{"class":480,"line":2246},[478,22832,22833],{"class":770},"    \u002F\u002F继续访问这片空间\n",[478,22835,22836],{"class":480,"line":2260},[478,22837,22838],{"class":770},"    \u002F\u002F200\n",[478,22840,22841,22843,22845,22848,22850],{"class":480,"line":2265},[478,22842,2119],{"class":714},[478,22844,1739],{"class":710},[478,22846,22847],{"class":714},"p2.m_A",[478,22849,1739],{"class":710},[478,22851,1761],{"class":714},[478,22853,22854],{"class":480,"line":2294},[478,22855,2133],{"class":714},[478,22857,22858,22860,22862],{"class":480,"line":2299},[478,22859,717],{"class":710},[478,22861,2539],{"class":484},[478,22863,2542],{"class":714},[478,22865,22866],{"class":480,"line":2316},[478,22867,2114],{"class":714},[478,22869,22870,22872],{"class":480,"line":2321},[478,22871,6199],{"class":484},[478,22873,6202],{"class":714},[478,22875,22876],{"class":480,"line":2326},[478,22877,2133],{"class":714},[19,22879,22880],{},[45,22881,22882],{},"静态变量的访问",[469,22884,22886],{"className":701,"code":22885,"language":703,"meta":54,"style":54},"#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",[475,22887,22888,22894,22904,22910,22914,22918,22922,22930,22934,22939,22947,22951,22955,22969,22984,22992,22996,23001,23006,23011,23016,23028,23033,23038,23052,23069,23073,23081,23085,23091],{"__ignoreMap":54},[478,22889,22890,22892],{"class":480,"line":481},[478,22891,2516],{"class":710},[478,22893,2519],{"class":488},[478,22895,22896,22898,22900,22902],{"class":480,"line":565},[478,22897,2524],{"class":710},[478,22899,2527],{"class":710},[478,22901,2530],{"class":484},[478,22903,1859],{"class":714},[478,22905,22906,22908],{"class":480,"line":579},[478,22907,15259],{"class":710},[478,22909,15736],{"class":484},[478,22911,22912],{"class":480,"line":593},[478,22913,2114],{"class":714},[478,22915,22916],{"class":480,"line":1769},[478,22917,15281],{"class":710},[478,22919,22920],{"class":480,"line":1783},[478,22921,22742],{"class":770},[478,22923,22924,22926,22928],{"class":480,"line":1789},[478,22925,11586],{"class":710},[478,22927,2948],{"class":710},[478,22929,21957],{"class":714},[478,22931,22932],{"class":480,"line":1880},[478,22933,15787],{"class":710},[478,22935,22936],{"class":480,"line":1886},[478,22937,22938],{"class":770},"    \u002F\u002F静态成员变量也是有访问权限的\n",[478,22940,22941,22943,22945],{"class":480,"line":1898},[478,22942,11586],{"class":710},[478,22944,2948],{"class":710},[478,22946,21964],{"class":714},[478,22948,22949],{"class":480,"line":2180},[478,22950,4561],{"class":714},[478,22952,22953],{"class":480,"line":2185},[478,22954,22759],{"class":770},[478,22956,22957,22959,22961,22963,22965,22967],{"class":480,"line":2191},[478,22958,717],{"class":710},[478,22960,16134],{"class":484},[478,22962,22768],{"class":714},[478,22964,759],{"class":710},[478,22966,1146],{"class":495},[478,22968,1859],{"class":714},[478,22970,22971,22973,22975,22978,22980,22982],{"class":480,"line":2196},[478,22972,717],{"class":710},[478,22974,16134],{"class":484},[478,22976,22977],{"class":714},"::m_B",[478,22979,759],{"class":710},[478,22981,1396],{"class":495},[478,22983,1859],{"class":714},[478,22985,22986,22988,22990],{"class":480,"line":2210},[478,22987,5930],{"class":710},[478,22989,6223],{"class":484},[478,22991,2542],{"class":714},[478,22993,22994],{"class":480,"line":2215},[478,22995,2114],{"class":714},[478,22997,22998],{"class":480,"line":2221},[478,22999,23000],{"class":770},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[478,23002,23003],{"class":480,"line":2241},[478,23004,23005],{"class":770},"    \u002F\u002F静态成员变量有两种访问方式：\n",[478,23007,23008],{"class":480,"line":2246},[478,23009,23010],{"class":770},"    \u002F\u002F1.通过对象进行访问\n",[478,23012,23013],{"class":480,"line":2260},[478,23014,23015],{"class":714},"    Person p;  \n",[478,23017,23018,23020,23022,23024,23026],{"class":480,"line":2265},[478,23019,2119],{"class":714},[478,23021,1739],{"class":710},[478,23023,22666],{"class":714},[478,23025,1739],{"class":710},[478,23027,1761],{"class":714},[478,23029,23030],{"class":480,"line":2294},[478,23031,23032],{"class":770},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[478,23034,23035],{"class":480,"line":2299},[478,23036,23037],{"class":770},"    \u002F\u002F2.通过类名进行访问\n",[478,23039,23040,23042,23044,23046,23048,23050],{"class":480,"line":2316},[478,23041,2119],{"class":714},[478,23043,1739],{"class":710},[478,23045,19611],{"class":484},[478,23047,22768],{"class":714},[478,23049,1739],{"class":710},[478,23051,1761],{"class":714},[478,23053,23054,23056,23058,23060,23062,23064,23066],{"class":480,"line":2321},[478,23055,2119],{"class":714},[478,23057,1739],{"class":710},[478,23059,19611],{"class":484},[478,23061,22977],{"class":714},[478,23063,1739],{"class":710},[478,23065,1807],{"class":714},[478,23067,23068],{"class":770}," \u002F\u002F没有访问权限，报错\n",[478,23070,23071],{"class":480,"line":2326},[478,23072,2133],{"class":714},[478,23074,23075,23077,23079],{"class":480,"line":2331},[478,23076,717],{"class":710},[478,23078,2539],{"class":484},[478,23080,2542],{"class":714},[478,23082,23083],{"class":480,"line":2345},[478,23084,2114],{"class":714},[478,23086,23087,23089],{"class":480,"line":2350},[478,23088,6268],{"class":484},[478,23090,6202],{"class":714},[478,23092,23093],{"class":480,"line":3143},[478,23094,2133],{"class":714},[22563,23096,23098],{"id":23097},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23100,23101],{},"1.静态成员函数定义与访问",[469,23103,23105],{"className":701,"code":23104,"language":703,"meta":54,"style":54},"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",[475,23106,23107,23113,23117,23121,23126,23137,23141,23155,23159,23163,23171,23175,23180,23185,23189,23197,23202,23212],{"__ignoreMap":54},[478,23108,23109,23111],{"class":480,"line":481},[478,23110,15259],{"class":710},[478,23112,15736],{"class":484},[478,23114,23115],{"class":480,"line":565},[478,23116,2114],{"class":714},[478,23118,23119],{"class":480,"line":579},[478,23120,15281],{"class":710},[478,23122,23123],{"class":480,"line":593},[478,23124,23125],{"class":770},"    \u002F\u002F在公共权限下定义静态成员函数\n",[478,23127,23128,23130,23133,23135],{"class":480,"line":1769},[478,23129,11586],{"class":710},[478,23131,23132],{"class":710}," void",[478,23134,11951],{"class":484},[478,23136,2542],{"class":714},[478,23138,23139],{"class":480,"line":1783},[478,23140,2596],{"class":714},[478,23142,23143,23146,23148,23151,23153],{"class":480,"line":1789},[478,23144,23145],{"class":714},"        coout",[478,23147,1739],{"class":710},[478,23149,23150],{"class":488},"\"静态成员函数的调用\"",[478,23152,1739],{"class":710},[478,23154,1761],{"class":714},[478,23156,23157],{"class":480,"line":1880},[478,23158,2753],{"class":714},[478,23160,23161],{"class":480,"line":1886},[478,23162,4561],{"class":714},[478,23164,23165,23167,23169],{"class":480,"line":1898},[478,23166,5930],{"class":710},[478,23168,6154],{"class":484},[478,23170,2542],{"class":714},[478,23172,23173],{"class":480,"line":2180},[478,23174,2114],{"class":714},[478,23176,23177],{"class":480,"line":2185},[478,23178,23179],{"class":770},"    \u002F\u002F静态成员函数的调用方式:\n",[478,23181,23182],{"class":480,"line":2191},[478,23183,23184],{"class":770},"    \u002F\u002F1.通过对象访问\n",[478,23186,23187],{"class":480,"line":2196},[478,23188,15878],{"class":714},[478,23190,23191,23193,23195],{"class":480,"line":2210},[478,23192,16431],{"class":714},[478,23194,12117],{"class":484},[478,23196,6202],{"class":714},[478,23198,23199],{"class":480,"line":2215},[478,23200,23201],{"class":770},"    \u002F\u002F2.通过类名访问\n",[478,23203,23204,23206,23208,23210],{"class":480,"line":2221},[478,23205,19084],{"class":484},[478,23207,18297],{"class":714},[478,23209,12117],{"class":484},[478,23211,6202],{"class":714},[478,23213,23214],{"class":480,"line":2241},[478,23215,2133],{"class":714},[29,23217,23218],{"start":565},[32,23219,23220],{},"静态成员函数只能访问静态成员变量",[469,23222,23224],{"className":701,"code":23223,"language":703,"meta":54,"style":54},"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",[475,23225,23226,23232,23236,23240,23244,23254,23258,23272,23277,23289,23293,23304,23314,23318,23322,23326,23336,23340,23353,23357,23361,23365,23369,23383,23391,23395,23399,23403,23407,23415,23419,23429,23434,23438,23446,23450,23456],{"__ignoreMap":54},[478,23227,23228,23230],{"class":480,"line":481},[478,23229,15259],{"class":710},[478,23231,15736],{"class":484},[478,23233,23234],{"class":480,"line":565},[478,23235,2114],{"class":714},[478,23237,23238],{"class":480,"line":579},[478,23239,15281],{"class":710},[478,23241,23242],{"class":480,"line":593},[478,23243,23125],{"class":770},[478,23245,23246,23248,23250,23252],{"class":480,"line":1769},[478,23247,11586],{"class":710},[478,23249,23132],{"class":710},[478,23251,11951],{"class":484},[478,23253,2542],{"class":714},[478,23255,23256],{"class":480,"line":1783},[478,23257,2596],{"class":714},[478,23259,23260,23263,23265,23267,23269],{"class":480,"line":1789},[478,23261,23262],{"class":714},"        m_A",[478,23264,759],{"class":710},[478,23266,1012],{"class":495},[478,23268,767],{"class":714},[478,23270,23271],{"class":770}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[478,23273,23274],{"class":480,"line":1880},[478,23275,23276],{"class":770},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[478,23278,23279,23281,23283,23285,23287],{"class":480,"line":1886},[478,23280,23145],{"class":714},[478,23282,1739],{"class":710},[478,23284,23150],{"class":488},[478,23286,1739],{"class":710},[478,23288,1761],{"class":714},[478,23290,23291],{"class":480,"line":1898},[478,23292,2753],{"class":714},[478,23294,23295,23297,23299,23301],{"class":480,"line":2180},[478,23296,11586],{"class":710},[478,23298,2948],{"class":710},[478,23300,16013],{"class":714},[478,23302,23303],{"class":770}," \u002F\u002F静态成员变量\n",[478,23305,23306,23308,23311],{"class":480,"line":2185},[478,23307,2551],{"class":710},[478,23309,23310],{"class":714}," m_B;",[478,23312,23313],{"class":770}," \u002F\u002F非静态成员变量\n",[478,23315,23316],{"class":480,"line":2191},[478,23317,2966],{"emptyLinePlaceholder":640},[478,23319,23320],{"class":480,"line":2196},[478,23321,15787],{"class":710},[478,23323,23324],{"class":480,"line":2210},[478,23325,22938],{"class":770},[478,23327,23328,23330,23332,23334],{"class":480,"line":2215},[478,23329,11586],{"class":710},[478,23331,23132],{"class":710},[478,23333,14184],{"class":484},[478,23335,2542],{"class":714},[478,23337,23338],{"class":480,"line":2221},[478,23339,2596],{"class":714},[478,23341,23342,23344,23346,23349,23351],{"class":480,"line":2241},[478,23343,4017],{"class":714},[478,23345,1739],{"class":710},[478,23347,23348],{"class":488},"\"这是私有权限下的静态函数调用\"",[478,23350,1739],{"class":710},[478,23352,1761],{"class":714},[478,23354,23355],{"class":480,"line":2246},[478,23356,2753],{"class":714},[478,23358,23359],{"class":480,"line":2260},[478,23360,2966],{"emptyLinePlaceholder":640},[478,23362,23363],{"class":480,"line":2265},[478,23364,2966],{"emptyLinePlaceholder":640},[478,23366,23367],{"class":480,"line":2294},[478,23368,4561],{"class":714},[478,23370,23371,23373,23375,23377,23379,23381],{"class":480,"line":2299},[478,23372,717],{"class":710},[478,23374,16134],{"class":484},[478,23376,22768],{"class":714},[478,23378,759],{"class":710},[478,23380,895],{"class":495},[478,23382,1859],{"class":714},[478,23384,23385,23387,23389],{"class":480,"line":2316},[478,23386,5930],{"class":710},[478,23388,6154],{"class":484},[478,23390,2542],{"class":714},[478,23392,23393],{"class":480,"line":2321},[478,23394,2114],{"class":714},[478,23396,23397],{"class":480,"line":2326},[478,23398,23179],{"class":770},[478,23400,23401],{"class":480,"line":2331},[478,23402,23184],{"class":770},[478,23404,23405],{"class":480,"line":2345},[478,23406,15878],{"class":714},[478,23408,23409,23411,23413],{"class":480,"line":2350},[478,23410,16431],{"class":714},[478,23412,12117],{"class":484},[478,23414,6202],{"class":714},[478,23416,23417],{"class":480,"line":3143},[478,23418,23201],{"class":770},[478,23420,23421,23423,23425,23427],{"class":480,"line":3157},[478,23422,19084],{"class":484},[478,23424,18297],{"class":714},[478,23426,12117],{"class":484},[478,23428,6202],{"class":714},[478,23430,23431],{"class":480,"line":3165},[478,23432,23433],{"class":770},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[478,23435,23436],{"class":480,"line":3170},[478,23437,2133],{"class":714},[478,23439,23440,23442,23444],{"class":480,"line":3176},[478,23441,717],{"class":710},[478,23443,2539],{"class":484},[478,23445,2542],{"class":714},[478,23447,23448],{"class":480,"line":3182},[478,23449,2114],{"class":714},[478,23451,23452,23454],{"class":480,"line":3187},[478,23453,6199],{"class":484},[478,23455,6202],{"class":714},[478,23457,23458],{"class":480,"line":8514},[478,23459,2133],{"class":714},[129,23461,23463],{"id":23462},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22563,23465,23467],{"id":23466},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23469,23470],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23472,23473],{},"只有非静态成员变量才属于类的对象上",[23475,23476,23478],"h5",{"id":23477},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[469,23480,23482],{"className":701,"code":23481,"language":703,"meta":54,"style":54},"#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",[475,23483,23484,23491,23501,23507,23511,23515,23519,23527,23531,23535,23558,23562,23570,23574,23580],{"__ignoreMap":54},[478,23485,23486,23488],{"class":480,"line":481},[478,23487,2516],{"class":710},[478,23489,23490],{"class":488},"\u003Ciostraem>\n",[478,23492,23493,23495,23497,23499],{"class":480,"line":565},[478,23494,2524],{"class":710},[478,23496,2527],{"class":710},[478,23498,2530],{"class":484},[478,23500,1859],{"class":714},[478,23502,23503,23505],{"class":480,"line":579},[478,23504,15259],{"class":710},[478,23506,15736],{"class":484},[478,23508,23509],{"class":480,"line":593},[478,23510,2114],{"class":714},[478,23512,23513],{"class":480,"line":1769},[478,23514,2966],{"emptyLinePlaceholder":640},[478,23516,23517],{"class":480,"line":1783},[478,23518,4561],{"class":714},[478,23520,23521,23523,23525],{"class":480,"line":1789},[478,23522,5930],{"class":710},[478,23524,6154],{"class":484},[478,23526,2542],{"class":714},[478,23528,23529],{"class":480,"line":1880},[478,23530,2114],{"class":714},[478,23532,23533],{"class":480,"line":1886},[478,23534,15878],{"class":714},[478,23536,23537,23539,23541,23544,23546,23549,23551,23553,23555],{"class":480,"line":1898},[478,23538,2119],{"class":714},[478,23540,1739],{"class":710},[478,23542,23543],{"class":488},"\"size of p=\"",[478,23545,1739],{"class":710},[478,23547,23548],{"class":484},"sizeoif",[478,23550,7105],{"class":714},[478,23552,1739],{"class":710},[478,23554,1807],{"class":714},[478,23556,23557],{"class":770}," \u002F\u002F查看这个空类的占用的内存空间\n",[478,23559,23560],{"class":480,"line":2180},[478,23561,2133],{"class":714},[478,23563,23564,23566,23568],{"class":480,"line":2185},[478,23565,717],{"class":710},[478,23567,2539],{"class":484},[478,23569,2542],{"class":714},[478,23571,23572],{"class":480,"line":2191},[478,23573,2114],{"class":714},[478,23575,23576,23578],{"class":480,"line":2196},[478,23577,6199],{"class":484},[478,23579,6202],{"class":714},[478,23581,23582],{"class":480,"line":2210},[478,23583,2133],{"class":714},[19,23585,23586],{},"输出结果为：size of p=1",[19,23588,23589],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23591,23592],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23475,23594,23596],{"id":23595},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[469,23598,23600],{"className":701,"code":23599,"language":703,"meta":54,"style":54},"#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",[475,23601,23602,23608,23618,23626,23630,23639,23643,23651,23655,23659,23678,23682,23686,23694,23698,23704],{"__ignoreMap":54},[478,23603,23604,23606],{"class":480,"line":481},[478,23605,2516],{"class":710},[478,23607,2519],{"class":488},[478,23609,23610,23612,23614,23616],{"class":480,"line":565},[478,23611,2524],{"class":710},[478,23613,2527],{"class":710},[478,23615,2530],{"class":484},[478,23617,1859],{"class":714},[478,23619,23620,23622,23624],{"class":480,"line":579},[478,23621,15259],{"class":710},[478,23623,16134],{"class":484},[478,23625,3240],{"class":714},[478,23627,23628],{"class":480,"line":593},[478,23629,2114],{"class":714},[478,23631,23632,23634,23636],{"class":480,"line":1769},[478,23633,2551],{"class":710},[478,23635,16013],{"class":714},[478,23637,23638],{"class":770},"\u002F\u002F非静态成员变量\n",[478,23640,23641],{"class":480,"line":1783},[478,23642,4561],{"class":714},[478,23644,23645,23647,23649],{"class":480,"line":1789},[478,23646,5930],{"class":710},[478,23648,6154],{"class":484},[478,23650,2542],{"class":714},[478,23652,23653],{"class":480,"line":1880},[478,23654,2114],{"class":714},[478,23656,23657],{"class":480,"line":1886},[478,23658,15878],{"class":714},[478,23660,23661,23663,23665,23667,23669,23671,23673,23675],{"class":480,"line":1898},[478,23662,2119],{"class":714},[478,23664,1739],{"class":710},[478,23666,23543],{"class":488},[478,23668,1941],{"class":710},[478,23670,7105],{"class":714},[478,23672,1739],{"class":710},[478,23674,1807],{"class":714},[478,23676,23677],{"class":770}," \u002F\u002F查看不是空对象时占用多少内存\n",[478,23679,23680],{"class":480,"line":2180},[478,23681,2966],{"emptyLinePlaceholder":640},[478,23683,23684],{"class":480,"line":2185},[478,23685,2133],{"class":714},[478,23687,23688,23690,23692],{"class":480,"line":2191},[478,23689,717],{"class":710},[478,23691,2539],{"class":484},[478,23693,2542],{"class":714},[478,23695,23696],{"class":480,"line":2196},[478,23697,2114],{"class":714},[478,23699,23700,23702],{"class":480,"line":2210},[478,23701,6199],{"class":484},[478,23703,6202],{"class":714},[478,23705,23706],{"class":480,"line":2215},[478,23707,2133],{"class":714},[19,23709,23710],{},"输出结果：size of p=4",[19,23712,23713],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[29,23715,23716],{},[32,23717,23718],{},"如果加上非静态成员变量，Person类修改如下",[469,23720,23722],{"className":701,"code":23721,"language":703,"meta":54,"style":54},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[475,23723,23724,23730,23734,23740,23748,23752,23757],{"__ignoreMap":54},[478,23725,23726,23728],{"class":480,"line":481},[478,23727,15259],{"class":710},[478,23729,15736],{"class":484},[478,23731,23732],{"class":480,"line":565},[478,23733,2114],{"class":714},[478,23735,23736,23738],{"class":480,"line":579},[478,23737,2551],{"class":710},[478,23739,21957],{"class":714},[478,23741,23742,23744,23746],{"class":480,"line":593},[478,23743,11586],{"class":710},[478,23745,2948],{"class":710},[478,23747,21964],{"class":714},[478,23749,23750],{"class":480,"line":1769},[478,23751,4561],{"class":714},[478,23753,23754],{"class":480,"line":1783},[478,23755,23756],{"class":770},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[478,23758,23759,23761,23763,23765,23767,23769],{"class":480,"line":1789},[478,23760,717],{"class":710},[478,23762,16134],{"class":484},[478,23764,22977],{"class":714},[478,23766,759],{"class":710},[478,23768,895],{"class":495},[478,23770,1859],{"class":714},[19,23772,23773],{},"输出结果：4",[19,23775,23776],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[29,23778,23779],{"start":565},[32,23780,23781],{},"加上非静态成员函数",[469,23783,23785],{"className":701,"code":23784,"language":703,"meta":54,"style":54},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[475,23786,23787,23794,23798,23804,23812,23816,23820,23824],{"__ignoreMap":54},[478,23788,23789,23791],{"class":480,"line":481},[478,23790,15259],{"class":710},[478,23792,23793],{"class":484},"  Person\n",[478,23795,23796],{"class":480,"line":565},[478,23797,2114],{"class":714},[478,23799,23800,23802],{"class":480,"line":579},[478,23801,2551],{"class":710},[478,23803,21957],{"class":714},[478,23805,23806,23808,23810],{"class":480,"line":593},[478,23807,15474],{"class":710},[478,23809,11951],{"class":484},[478,23811,2542],{"class":714},[478,23813,23814],{"class":480,"line":1769},[478,23815,2596],{"class":714},[478,23817,23818],{"class":480,"line":1783},[478,23819,2966],{"emptyLinePlaceholder":640},[478,23821,23822],{"class":480,"line":1789},[478,23823,2753],{"class":714},[478,23825,23826],{"class":480,"line":1880},[478,23827,4561],{"class":714},[19,23829,23830],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[29,23832,23833],{"start":579},[32,23834,23835],{},"加上静态成员函数",[469,23837,23839],{"className":701,"code":23838,"language":703,"meta":54,"style":54},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[475,23840,23841,23847,23851,23857,23865,23869,23873,23877,23888,23892,23896,23900],{"__ignoreMap":54},[478,23842,23843,23845],{"class":480,"line":481},[478,23844,15259],{"class":710},[478,23846,23793],{"class":484},[478,23848,23849],{"class":480,"line":565},[478,23850,2114],{"class":714},[478,23852,23853,23855],{"class":480,"line":579},[478,23854,2551],{"class":710},[478,23856,21957],{"class":714},[478,23858,23859,23861,23863],{"class":480,"line":593},[478,23860,15474],{"class":710},[478,23862,11951],{"class":484},[478,23864,2542],{"class":714},[478,23866,23867],{"class":480,"line":1769},[478,23868,2596],{"class":714},[478,23870,23871],{"class":480,"line":1783},[478,23872,2966],{"emptyLinePlaceholder":640},[478,23874,23875],{"class":480,"line":1789},[478,23876,2753],{"class":714},[478,23878,23879,23881,23883,23886],{"class":480,"line":1880},[478,23880,11586],{"class":710},[478,23882,23132],{"class":710},[478,23884,23885],{"class":484}," func1",[478,23887,2542],{"class":714},[478,23889,23890],{"class":480,"line":1886},[478,23891,2596],{"class":714},[478,23893,23894],{"class":480,"line":1898},[478,23895,2966],{"emptyLinePlaceholder":640},[478,23897,23898],{"class":480,"line":2180},[478,23899,2753],{"class":714},[478,23901,23902],{"class":480,"line":2185},[478,23903,4561],{"class":714},[19,23905,23773],{},[19,23907,23908],{},"解释：静态成员函数也不属于类上",[617,23910,8240],{},{"title":54,"searchDepth":565,"depth":565,"links":23912},[23913,23919],{"id":15210,"depth":565,"text":15211,"children":23914},[23915,23916,23917,23918],{"id":15214,"depth":579,"text":15215},{"id":15939,"depth":579,"text":15940},{"id":16111,"depth":579,"text":16112},{"id":16570,"depth":579,"text":16571},{"id":18942,"depth":565,"text":18943,"children":23920},[23921,23922,23923,23924,23925,23926,23927,23928,23929],{"id":18954,"depth":579,"text":18955},{"id":19247,"depth":579,"text":19248},{"id":19738,"depth":579,"text":19739},{"id":20835,"depth":579,"text":20836},{"id":21258,"depth":579,"text":21259},{"id":21737,"depth":579,"text":21738},{"id":22112,"depth":579,"text":22113},{"id":22525,"depth":579,"text":22526},{"id":23462,"depth":579,"text":23463},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15175,"description":23930},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23937,"title":703,"body":23938,"description":23942,"extension":638,"meta":23943,"navigation":640,"path":23945,"seo":23946,"stem":23947,"__hash__":23948},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23939,"toc":23940},[],{"title":54,"searchDepth":565,"depth":565,"links":23941},[],null,{"category":23944},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":703,"description":23942},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":4,"title":5,"body":23950,"description":54,"extension":638,"meta":24359,"navigation":640,"path":641,"seo":24360,"stem":643,"__hash__":644},{"type":7,"value":23951,"toc":24341},[23952,23954,23956,23958,23960,23962,23974,23978,23980,23982,23984,23986,23990,23992,23996,23998,24000,24002,24004,24006,24010,24012,24022,24024,24026,24028,24032,24034,24036,24038,24046,24048,24050,24052,24054,24056,24072,24074,24082,24088,24096,24116,24118,24122,24128,24130,24132,24134,24138,24140,24142,24144,24148,24150,24152,24154,24156,24160,24162,24164,24168,24170,24224,24226,24228,24230,24232,24234,24236,24240,24254,24256,24268,24273,24275,24277,24279,24283,24285,24289,24293,24295,24297,24301,24305,24307,24311,24315,24317,24321,24325,24327,24329,24333,24335,24339],[10,23953,5],{"id":12},[14,23955,17],{"id":16},[19,23957,21],{},[19,23959,24],{},[19,23961,27],{},[29,23963,23964,23966,23968,23970],{},[32,23965,34],{},[32,23967,37],{},[32,23969,40],{},[32,23971,43,23972,48],{},[45,23973,47],{},[19,23975,23976],{},[52,23977],{"alt":54,"src":55},[19,23979,58],{},[19,23981,61],{},[19,23983,64],{},[19,23985,67],{},[19,23987,23988],{},[52,23989],{"alt":54,"src":72},[19,23991,75],{},[19,23993,23994],{},[52,23995],{"alt":54,"src":80},[19,23997,83],{},[19,23999,86],{},[14,24001,90],{"id":89},[19,24003,93],{},[19,24005,96],{},[19,24007,24008,102],{},[45,24009,101],{},[19,24011,105],{},[19,24013,108,24014,112,24016,116,24018,120,24020],{},[45,24015,111],{},[45,24017,115],{},[45,24019,119],{},[45,24021,123],{},[14,24023,127],{"id":126},[129,24025,132],{"id":131},[19,24027,135],{},[19,24029,24030],{},[52,24031],{"alt":54,"src":140},[19,24033,143],{},[129,24035,147],{"id":146},[19,24037,150],{},[19,24039,153,24040,163],{},[45,24041,156,24042,162],{},[45,24043,24044],{},[45,24045,161],{},[19,24047,166],{},[129,24049,170],{"id":169},[19,24051,173],{},[19,24053,176],{},[19,24055,179],{},[19,24057,24058,186,24060,190,24062,194,24064,197,24066,201,24068,201,24070],{},[183,24059,185],{},[183,24061,189],{},[183,24063,193],{},[183,24065,193],{},[183,24067,200],{},[183,24069,204],{},[183,24071,207],{},[19,24073,210],{},[19,24075,24076,186,24078,219,24080,222],{},[183,24077,215],{},[183,24079,218],{},[183,24081,185],{},[19,24083,225,24084,229,24086,233],{},[45,24085,228],{},[45,24087,232],{},[19,24089,236,24090,240,24092,244,24094,248],{},[45,24091,239],{},[45,24093,243],{},[183,24095,247],{},[19,24097,251,24098,255,24100,259,24102,263,24104,267,24106,271,24108,263,24110,278,24112,282,24114,286],{},[183,24099,254],{},[183,24101,258],{},[183,24103,262],{},[183,24105,266],{},[183,24107,270],{},[183,24109,274],{},[183,24111,277],{},[183,24113,281],{},[183,24115,285],{},[14,24117,290],{"id":289},[19,24119,293,24120,297],{},[45,24121,296],{},[29,24123,24124,24126],{},[32,24125,302],{},[32,24127,305],{},[14,24129,309],{"id":308},[19,24131,312],{},[19,24133,315],{},[19,24135,24136],{},[52,24137],{"alt":54,"src":320},[129,24139,324],{"id":323},[19,24141,327],{},[19,24143,330],{},[19,24145,24146],{},[52,24147],{"alt":54,"src":335},[19,24149,338],{},[129,24151,342],{"id":341},[19,24153,345],{},[19,24155,348],{},[19,24157,24158],{},[52,24159],{"alt":54,"src":353},[19,24161,356],{},[129,24163,360],{"id":359},[19,24165,24166],{},[52,24167],{"alt":54,"src":365},[14,24169,369],{"id":368},[371,24171,24172,24180],{},[374,24173,24174],{},[377,24175,24176,24178],{},[380,24177,383],{"align":382},[380,24179,386],{"align":382},[388,24181,24182,24190,24198,24206,24216],{},[377,24183,24184,24188],{},[393,24185,24186],{"align":382},[45,24187,397],{},[393,24189,400],{"align":382},[377,24191,24192,24196],{},[393,24193,24194],{"align":382},[45,24195,407],{},[393,24197,410],{"align":382},[377,24199,24200,24204],{},[393,24201,24202],{"align":382},[45,24203,417],{},[393,24205,420],{"align":382},[377,24207,24208,24212],{},[393,24209,24210],{"align":382},[45,24211,427],{},[393,24213,24214],{"align":382},[52,24215],{"alt":54,"src":432},[377,24217,24218,24222],{},[393,24219,24220],{"align":382},[45,24221,439],{},[393,24223,442],{"align":382},[14,24225,446],{"id":445},[19,24227,449],{},[19,24229,452],{},[19,24231,455],{},[19,24233,458],{},[19,24235,461],{},[19,24237,24238,467],{},[45,24239,466],{},[469,24241,24242],{"className":471,"code":472,"language":473,"meta":54,"style":54},[475,24243,24244],{"__ignoreMap":54},[478,24245,24246,24248,24250,24252],{"class":480,"line":481},[478,24247,485],{"class":484},[478,24249,489],{"class":488},[478,24251,492],{"class":488},[478,24253,496],{"class":495},[19,24255,499],{},[469,24257,24258],{"className":471,"code":502,"language":473,"meta":54,"style":54},[475,24259,24260],{"__ignoreMap":54},[478,24261,24262,24264,24266],{"class":480,"line":481},[478,24263,485],{"class":484},[478,24265,489],{"class":488},[478,24267,513],{"class":488},[19,24269,516,24270],{},[518,24271,523],{"href":520,"rel":24272},[522],[14,24274,527],{"id":526},[19,24276,530],{},[19,24278,533],{},[19,24280,24281],{},[52,24282],{"alt":54,"src":538},[19,24284,541],{},[19,24286,24287],{},[52,24288],{"alt":54,"src":546},[29,24290,24291],{},[32,24292,551],{},[19,24294,554],{},[19,24296,557],{},[19,24298,24299],{},[52,24300],{"alt":54,"src":562},[29,24302,24303],{"start":565},[32,24304,568],{},[19,24306,571],{},[19,24308,24309],{},[52,24310],{"alt":54,"src":576},[29,24312,24313],{"start":579},[32,24314,582],{},[19,24316,585],{},[19,24318,24319],{},[52,24320],{"alt":54,"src":590},[29,24322,24323],{"start":593},[32,24324,596],{},[19,24326,599],{},[19,24328,602],{},[19,24330,24331],{},[52,24332],{"alt":54,"src":607},[19,24334,610],{},[19,24336,24337],{},[52,24338],{"alt":54,"src":615},[617,24340,619],{},{"title":54,"searchDepth":565,"depth":565,"links":24342},[24343,24344,24345,24350,24351,24356,24357,24358],{"id":16,"depth":565,"text":17},{"id":89,"depth":565,"text":90},{"id":126,"depth":565,"text":127,"children":24346},[24347,24348,24349],{"id":131,"depth":579,"text":132},{"id":146,"depth":579,"text":147},{"id":169,"depth":579,"text":170},{"id":289,"depth":565,"text":290},{"id":308,"depth":565,"text":309,"children":24352},[24353,24354,24355],{"id":323,"depth":579,"text":324},{"id":341,"depth":579,"text":342},{"id":359,"depth":579,"text":360},{"id":368,"depth":565,"text":369},{"id":445,"depth":565,"text":446},{"id":526,"depth":565,"text":527},{},{"title":5,"description":54},{"id":24362,"title":24363,"body":24364,"description":24371,"extension":638,"meta":24382,"navigation":640,"path":24383,"seo":24384,"stem":24385,"__hash__":24386},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24365,"toc":24380},[24366,24369,24372,24377],[10,24367,24363],{"id":24368},"_2马尔可夫决策过程",[19,24370,24371],{},"这是强化学习的基本框架",[19,24373,24374],{},[52,24375],{"alt":54,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24378,24379],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":54,"searchDepth":565,"depth":565,"links":24381},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24363,"description":24371},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24388,"title":24389,"body":24390,"description":54,"extension":638,"meta":24506,"navigation":640,"path":24507,"seo":24508,"stem":24509,"__hash__":24510},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24391,"toc":24501},[24392,24395,24399,24402,24407,24412,24415,24420,24423,24428,24431,24435,24440,24443,24448,24453,24458,24461,24465,24470,24473,24478,24483,24488,24493,24496],[10,24393,24389],{"id":24394},"_3动作价值函数",[14,24396,24398],{"id":24397},"_31dqn","3.1.DQN",[19,24400,24401],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24403,24404],{},[52,24405],{"alt":54,"src":24406},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24408,24409],{},[52,24410],{"alt":54,"src":24411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24413,24414],{},"DQN算法的描述：",[19,24416,24417],{},[52,24418],{"alt":54,"src":24419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24421,24422],{},"这里的Dense指的是全连接层",[19,24424,24425],{},[52,24426],{"alt":54,"src":24427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24429,24430],{},"当前观测的状态为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,24432,24434],{"id":24433},"_32dqn的举例","3.2.DQN的举例",[19,24436,24437],{},[52,24438],{"alt":54,"src":24439},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24441,24442],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24444,24445],{},[52,24446],{"alt":54,"src":24447},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24449,24450],{},[52,24451],{"alt":54,"src":24452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24454,24455],{},[52,24456],{"alt":54,"src":24457},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24459,24460],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24462,24464],{"id":24463},"_33td算法","3.3.TD算法",[19,24466,24467],{},[52,24468],{"alt":54,"src":24469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24471,24472],{},"强化学习TD算法公式的粗略解释：",[19,24474,24475],{},[52,24476],{"alt":54,"src":24477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24479,24480],{},[52,24481],{"alt":54,"src":24482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24484,24485],{},[52,24486],{"alt":54,"src":24487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24489,24490],{},[52,24491],{"alt":54,"src":24492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24494,24495],{},"TD算法总结：",[19,24497,24498],{},[52,24499],{"alt":54,"src":24500},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":54,"searchDepth":565,"depth":565,"links":24502},[24503,24504,24505],{"id":24397,"depth":565,"text":24398},{"id":24433,"depth":565,"text":24434},{"id":24463,"depth":565,"text":24464},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24389,"description":54},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24512,"title":24513,"body":24514,"description":54,"extension":638,"meta":24747,"navigation":640,"path":24748,"seo":24749,"stem":24750,"__hash__":24751},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24515,"toc":24743},[24516,24519,24523,24526,24529,24534,24539,24542,24547,24552,24555,24560,24563,24568,24571,24576,24579,24584,24587,24592,24597,24600,24605,24608,24611,24616,24619,24624,24629,24633,24636,24639,24644,24649,24652,24657,24662,24665,24670,24673,24676,24681,24684,24689,24692,24697,24702,24705,24710,24715,24718,24723,24726,24731,24734],[10,24517,24513],{"id":24518},"_4策略学习",[14,24520,24522],{"id":24521},"_41概念描述","4.1.概念描述",[19,24524,24525],{},"用神经网络（策略网络）近似策略函数",[19,24527,24528],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24530,24531],{},[52,24532],{"alt":54,"src":24533},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24535,24536],{},[52,24537],{"alt":54,"src":24538},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24540,24541],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24543,24544],{},[52,24545],{"alt":54,"src":24546},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24548,24549],{},[52,24550],{"alt":54,"src":24551},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24553,24554],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24556,24557],{},[52,24558],{"alt":54,"src":24559},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24561,24562],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24564,24565],{},[52,24566],{"alt":54,"src":24567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24569,24570],{},"改进theta要用到策略梯度算法",[19,24572,24573],{},[52,24574],{"alt":54,"src":24575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24577,24578],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24580,24581],{},[52,24582],{"alt":54,"src":24583},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24585,24586],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24588,24589],{},[52,24590],{"alt":54,"src":24591},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24593,24594],{},[52,24595],{"alt":54,"src":24596},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24598,24599],{},"梯度公式总结：",[19,24601,24602],{},[52,24603],{"alt":54,"src":24604},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24606,24607],{},"两个公式的分别应用场景：",[19,24609,24610],{},"对于离散的动作：",[19,24612,24613],{},[52,24614],{"alt":54,"src":24615},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24617,24618],{},"对于连续的动作：",[19,24620,24621],{},[52,24622],{"alt":54,"src":24623},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24625,24626],{},[52,24627],{"alt":54,"src":24628},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24630,24632],{"id":24631},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24634,24635],{},"使用蒙特卡洛来近似计算策略梯度",[19,24637,24638],{},"蒙特卡洛法的解释如下：",[19,24640,24641],{},[52,24642],{"alt":54,"src":24643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24645,24646],{},[52,24647],{"alt":54,"src":24648},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24650,24651],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[29,24653,24654],{},[32,24655,24656],{},"方法一：reinforce算法",[19,24658,24659],{},[52,24660],{"alt":54,"src":24661},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24663,24664],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[29,24666,24667],{"start":565},[32,24668,24669],{},"方法二：actor-critic算法",[19,24671,24672],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24674,24675],{},"两个网络的构建：",[19,24677,24678],{},[52,24679],{"alt":54,"src":24680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24682,24683],{},"actor网路：",[19,24685,24686],{},[52,24687],{"alt":54,"src":24688},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24690,24691],{},"critic网络",[19,24693,24694],{},[52,24695],{"alt":54,"src":24696},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[29,24698,24699],{"start":579},[32,24700,24701],{},"网络的训练",[19,24703,24704],{},"网络描述",[19,24706,24707],{},[52,24708],{"alt":54,"src":24709},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24711,24712],{},[52,24713],{"alt":54,"src":24714},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24716,24717],{},"TD算法更新梯度：",[19,24719,24720],{},[52,24721],{"alt":54,"src":24722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24724,24725],{},"策略网络更新梯度：",[19,24727,24728],{},[52,24729],{"alt":54,"src":24730},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24732,24733],{},"训练整个流程的具体描述：",[19,24735,24736,24739,24740],{},[52,24737],{"alt":54,"src":24738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[52,24741],{"alt":54,"src":24742},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":54,"searchDepth":565,"depth":565,"links":24744},[24745,24746],{"id":24521,"depth":565,"text":24522},{"id":24631,"depth":565,"text":24632},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24513,"description":54},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24753,"title":24754,"body":24755,"description":24762,"extension":638,"meta":24812,"navigation":640,"path":24813,"seo":24814,"stem":24815,"__hash__":24816},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24756,"toc":24808},[24757,24760,24763,24767,24770,24775,24779,24782,24787,24790,24795,24800,24803],[10,24758,24754],{"id":24759},"_5alphago算法",[19,24761,24762],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24764,24766],{"id":24765},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24768,24769],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24771,24772],{},[52,24773],{"alt":54,"src":24774},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24776,24778],{"id":24777},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24780,24781],{},"采用强化学习的方式训练策略网络",[19,24783,24784],{},[52,24785],{"alt":54,"src":24786},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24788,24789],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24791,24792],{},[52,24793],{"alt":54,"src":24794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24796,24797],{},[52,24798],{"alt":54,"src":24799},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24801,24802],{},"强化学习训练策略网络的总结：",[19,24804,24805],{},[52,24806],{"alt":54,"src":24807},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":54,"searchDepth":565,"depth":565,"links":24809},[24810,24811],{"id":24765,"depth":565,"text":24766},{"id":24777,"depth":565,"text":24778},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24754,"description":24762},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24818,"title":24819,"body":24820,"description":24827,"extension":638,"meta":24830,"navigation":640,"path":24831,"seo":24832,"stem":24833,"__hash__":24834},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24821,"toc":24828},[24822,24825],[10,24823,24819],{"id":24824},"_6价值网络",[19,24826,24827],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":54,"searchDepth":565,"depth":565,"links":24829},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24819,"description":24827},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24836,"title":24837,"body":24838,"description":24842,"extension":638,"meta":24843,"navigation":640,"path":24844,"seo":24845,"stem":24846,"__hash__":24847},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24839,"toc":24840},[],{"title":54,"searchDepth":565,"depth":565,"links":24841},[],"记录自己的强化学习笔记。",{"category":23944},"\u002Fwiki\u002F2025-12-04",{"title":24837,"description":24842},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24849,"title":24850,"body":24851,"description":23942,"extension":638,"meta":24890,"navigation":640,"path":24891,"seo":24892,"stem":24893,"__hash__":24894},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24852,"toc":24888},[24853,24856,24859,24865,24868,24874,24877,24882,24885],[10,24854,24850],{"id":24855},"_1-项目概览与官方资源",[19,24857,24858],{},"官方文档：",[19,24860,24861],{},[518,24862,24863],{"href":24863,"rel":24864},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[522],[19,24866,24867],{},"官方代码仓库：",[19,24869,24870],{},[518,24871,24872],{"href":24872,"rel":24873},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[522],[19,24875,24876],{},"复现大体流程：",[19,24878,24879],{},[52,24880],{"alt":54,"src":24881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24883,24884],{},"本教程的目标是打通这条链路：",[19,24886,24887],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":54,"searchDepth":565,"depth":565,"links":24889},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24850,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24896,"title":24897,"body":24898,"description":23942,"extension":638,"meta":25014,"navigation":640,"path":25015,"seo":25016,"stem":25017,"__hash__":25018},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24899,"toc":25009},[24900,24903,24907,24910,24917,24921,24924,24933,24943,24947,24977,24980,25006],[10,24901,24897],{"id":24902},"_2-环境准备与设备连接",[14,24904,24906],{"id":24905},"_21-系统与环境","2.1 系统与环境",[19,24908,24909],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24911,24912,24913,24916],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[475,24914,24915],{},"lerobot"," 依赖。",[14,24918,24920],{"id":24919},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24922,24923],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[469,24925,24927],{"className":471,"code":24926,"language":473,"meta":54,"style":54},"lerobot-find-out\n",[475,24928,24929],{"__ignoreMap":54},[478,24930,24931],{"class":480,"line":481},[478,24932,24926],{"class":484},[19,24934,24935,24936,916,24939,24942],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[475,24937,24938],{},"\u002Fdev\u002FttyACM0",[475,24940,24941],{},"\u002Fdev\u002FttyACM1","）。",[14,24944,24946],{"id":24945},"_23-串口授权","2.3 串口授权",[469,24948,24950],{"className":471,"code":24949,"language":473,"meta":54,"style":54},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[475,24951,24952,24966],{"__ignoreMap":54},[478,24953,24954,24957,24960,24963],{"class":480,"line":481},[478,24955,24956],{"class":484},"sudo",[478,24958,24959],{"class":488}," chmod",[478,24961,24962],{"class":495}," 666",[478,24964,24965],{"class":488}," \u002Fdev\u002FttyACM0\n",[478,24967,24968,24970,24972,24974],{"class":480,"line":565},[478,24969,24956],{"class":484},[478,24971,24959],{"class":488},[478,24973,24962],{"class":495},[478,24975,24976],{"class":488}," \u002Fdev\u002FttyACM1\n",[19,24978,24979],{},"说明：",[1702,24981,24982,24987,24993,25003],{},[32,24983,24984,24986],{},[475,24985,24956],{},"：以 root 权限执行命令。",[32,24988,24989,24992],{},[475,24990,24991],{},"chmod","：修改设备节点权限。",[32,24994,24995,24998,24999,25002],{},[475,24996,24997],{},"666","：",[475,25000,25001],{},"rw-rw-rw-","，所有用户可读写。",[32,25004,25005],{},"串口号必须替换为你机器上的真实端口。",[617,25007,25008],{},"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":54,"searchDepth":565,"depth":565,"links":25010},[25011,25012,25013],{"id":24905,"depth":565,"text":24906},{"id":24919,"depth":565,"text":24920},{"id":24945,"depth":565,"text":24946},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24897,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25020,"title":25021,"body":25022,"description":23942,"extension":638,"meta":25183,"navigation":640,"path":25184,"seo":25185,"stem":25186,"__hash__":25187},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25023,"toc":25179},[25024,25028,25032,25038,25041,25098,25101,25105,25108,25176],[10,25025,25027],{"id":25026},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25029,25031],{"id":25030},"_31-配置电机-id","3.1 配置电机 ID",[19,25033,25034,25035,25037],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[475,25036,193],{},"，需要改成机械臂链路里不冲突的编号。",[19,25039,25040],{},"方式一：用 LeRobot 命令逐步写入。",[469,25042,25044],{"className":471,"code":25043,"language":473,"meta":54,"style":54},"# 主臂舵机配置 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",[475,25045,25046,25051,25059,25066,25071,25075,25080,25086,25093],{"__ignoreMap":54},[478,25047,25048],{"class":480,"line":481},[478,25049,25050],{"class":770},"# 主臂舵机配置 ID\n",[478,25052,25053,25056],{"class":480,"line":565},[478,25054,25055],{"class":484},"lerobot-setup-motors",[478,25057,25058],{"class":495}," \\\n",[478,25060,25061,25064],{"class":480,"line":579},[478,25062,25063],{"class":495},"  --teleop.type=so101_leader",[478,25065,25058],{"class":495},[478,25067,25068],{"class":480,"line":593},[478,25069,25070],{"class":495},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[478,25072,25073],{"class":480,"line":1769},[478,25074,2966],{"emptyLinePlaceholder":640},[478,25076,25077],{"class":480,"line":1783},[478,25078,25079],{"class":770},"# 从臂舵机配置 ID\n",[478,25081,25082,25084],{"class":480,"line":1789},[478,25083,25055],{"class":484},[478,25085,25058],{"class":495},[478,25087,25088,25091],{"class":480,"line":1880},[478,25089,25090],{"class":495},"  --robot.type=so101_follower",[478,25092,25058],{"class":495},[478,25094,25095],{"class":480,"line":1886},[478,25096,25097],{"class":495},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25099,25100],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25102,25104],{"id":25103},"_32-机械臂校准","3.2 机械臂校准",[19,25106,25107],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[469,25109,25111],{"className":471,"code":25110,"language":473,"meta":54,"style":54},"# 主臂校准\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",[475,25112,25113,25118,25125,25131,25138,25143,25147,25152,25158,25164,25171],{"__ignoreMap":54},[478,25114,25115],{"class":480,"line":481},[478,25116,25117],{"class":770},"# 主臂校准\n",[478,25119,25120,25123],{"class":480,"line":565},[478,25121,25122],{"class":484},"lerobot-calibrate",[478,25124,25058],{"class":495},[478,25126,25127,25129],{"class":480,"line":579},[478,25128,25063],{"class":495},[478,25130,25058],{"class":495},[478,25132,25133,25136],{"class":480,"line":593},[478,25134,25135],{"class":495},"  --teleop.port=\u002Fdev\u002FttyACM0",[478,25137,25058],{"class":495},[478,25139,25140],{"class":480,"line":1769},[478,25141,25142],{"class":495},"  --teleop.id=my_awesome_leader_arm\n",[478,25144,25145],{"class":480,"line":1783},[478,25146,2966],{"emptyLinePlaceholder":640},[478,25148,25149],{"class":480,"line":1789},[478,25150,25151],{"class":770},"# 从臂校准\n",[478,25153,25154,25156],{"class":480,"line":1880},[478,25155,25122],{"class":484},[478,25157,25058],{"class":495},[478,25159,25160,25162],{"class":480,"line":1886},[478,25161,25090],{"class":495},[478,25163,25058],{"class":495},[478,25165,25166,25169],{"class":480,"line":1898},[478,25167,25168],{"class":495},"  --robot.port=\u002Fdev\u002FttyACM1",[478,25170,25058],{"class":495},[478,25172,25173],{"class":480,"line":2180},[478,25174,25175],{"class":495},"  --robot.id=my_awesome_follower_arm\n",[617,25177,25178],{},"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":54,"searchDepth":565,"depth":565,"links":25180},[25181,25182],{"id":25030,"depth":565,"text":25031},{"id":25103,"depth":565,"text":25104},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25021,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25189,"title":25190,"body":25191,"description":23942,"extension":638,"meta":25382,"navigation":640,"path":25383,"seo":25384,"stem":25385,"__hash__":25386},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25192,"toc":25378},[25193,25196,25200,25247,25251,25264,25327,25330,25375],[10,25194,25190],{"id":25195},"_4-遥操与相机接入",[14,25197,25199],{"id":25198},"_41-不带相机遥操","4.1 不带相机遥操",[469,25201,25203],{"className":471,"code":25202,"language":473,"meta":54,"style":54},"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",[475,25204,25205,25212,25218,25224,25231,25237,25243],{"__ignoreMap":54},[478,25206,25207,25210],{"class":480,"line":481},[478,25208,25209],{"class":484},"lerobot-teleoperate",[478,25211,25058],{"class":495},[478,25213,25214,25216],{"class":480,"line":565},[478,25215,25090],{"class":495},[478,25217,25058],{"class":495},[478,25219,25220,25222],{"class":480,"line":579},[478,25221,25168],{"class":495},[478,25223,25058],{"class":495},[478,25225,25226,25229],{"class":480,"line":593},[478,25227,25228],{"class":495},"  --robot.id=my_awesome_follower_arm",[478,25230,25058],{"class":495},[478,25232,25233,25235],{"class":480,"line":1769},[478,25234,25063],{"class":495},[478,25236,25058],{"class":495},[478,25238,25239,25241],{"class":480,"line":1783},[478,25240,25135],{"class":495},[478,25242,25058],{"class":495},[478,25244,25245],{"class":480,"line":1789},[478,25246,25142],{"class":495},[14,25248,25250],{"id":25249},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[469,25252,25254],{"className":471,"code":25253,"language":473,"meta":54,"style":54},"lerobot-find-cameras opencv\n",[475,25255,25256],{"__ignoreMap":54},[478,25257,25258,25261],{"class":480,"line":481},[478,25259,25260],{"class":484},"lerobot-find-cameras",[478,25262,25263],{"class":488}," opencv\n",[469,25265,25267],{"className":471,"code":25266,"language":473,"meta":54,"style":54},"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",[475,25268,25269,25275,25281,25287,25293,25303,25309,25315,25322],{"__ignoreMap":54},[478,25270,25271,25273],{"class":480,"line":481},[478,25272,25209],{"class":484},[478,25274,25058],{"class":495},[478,25276,25277,25279],{"class":480,"line":565},[478,25278,25090],{"class":495},[478,25280,25058],{"class":495},[478,25282,25283,25285],{"class":480,"line":579},[478,25284,25168],{"class":495},[478,25286,25058],{"class":495},[478,25288,25289,25291],{"class":480,"line":593},[478,25290,25228],{"class":495},[478,25292,25058],{"class":495},[478,25294,25295,25298,25301],{"class":480,"line":1769},[478,25296,25297],{"class":495},"  --robot.cameras=",[478,25299,25300],{"class":488},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[478,25302,25058],{"class":495},[478,25304,25305,25307],{"class":480,"line":1783},[478,25306,25063],{"class":495},[478,25308,25058],{"class":495},[478,25310,25311,25313],{"class":480,"line":1789},[478,25312,25135],{"class":495},[478,25314,25058],{"class":495},[478,25316,25317,25320],{"class":480,"line":1880},[478,25318,25319],{"class":495},"  --teleop.id=my_awesome_leader_arm",[478,25321,25058],{"class":495},[478,25323,25324],{"class":480,"line":1886},[478,25325,25326],{"class":495},"  --display_data=true\n",[19,25328,25329],{},"相机参数说明：",[1702,25331,25332,25338,25344,25353,25363,25369],{},[32,25333,25334,25337],{},[475,25335,25336],{},"front","：相机名称。",[32,25339,25340,25343],{},[475,25341,25342],{},"type: opencv","：相机驱动类型。",[32,25345,25346,25349,25350,24942],{},[475,25347,25348],{},"index_or_path","：设备编号或设备路径（如 ",[475,25351,25352],{},"\u002Fdev\u002Fvideo4",[32,25354,25355,25358,25359,25362],{},[475,25356,25357],{},"width"," \u002F ",[475,25360,25361],{},"height","：图像分辨率。",[32,25364,25365,25368],{},[475,25366,25367],{},"fps","：采样帧率。",[32,25370,25371,25374],{},[475,25372,25373],{},"--display_data=true","：启用实时可视化。",[617,25376,25377],{},"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":54,"searchDepth":565,"depth":565,"links":25379},[25380,25381],{"id":25198,"depth":565,"text":25199},{"id":25249,"depth":565,"text":25250},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25190,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25388,"title":25389,"body":25390,"description":23942,"extension":638,"meta":25562,"navigation":640,"path":25563,"seo":25564,"stem":25565,"__hash__":25566},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25391,"toc":25557},[25392,25396,25400,25405,25410,25413,25455,25461,25465,25514,25519,25523,25526,25534,25539,25544,25549,25554],[10,25393,25395],{"id":25394},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25397,25399],{"id":25398},"_51-生成访问令牌","5.1 生成访问令牌",[19,25401,25402],{},[52,25403],{"alt":54,"src":25404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25406,25407],{},[52,25408],{"alt":54,"src":25409},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25411,25412],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[469,25414,25416],{"className":471,"code":25415,"language":473,"meta":54,"style":54},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[475,25417,25418,25431],{"__ignoreMap":54},[478,25419,25420,25423,25426,25428],{"class":480,"line":481},[478,25421,25422],{"class":710},"export",[478,25424,25425],{"class":714}," HF_TOKEN",[478,25427,759],{"class":710},[478,25429,25430],{"class":488},"\"your_huggingface_token\"\n",[478,25432,25433,25436,25439,25442,25445,25447,25450,25452],{"class":480,"line":565},[478,25434,25435],{"class":484},"hf",[478,25437,25438],{"class":488}," auth",[478,25440,25441],{"class":488}," login",[478,25443,25444],{"class":495}," --token",[478,25446,10290],{"class":488},[478,25448,25449],{"class":714},"$HF_TOKEN",[478,25451,952],{"class":488},[478,25453,25454],{"class":495}," --add-to-git-credential\n",[19,25456,25457,25460],{},[475,25458,25459],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25462,25464],{"id":25463},"_52-验证登录","5.2 验证登录",[469,25466,25468],{"className":471,"code":25467,"language":473,"meta":54,"style":54},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[475,25469,25470,25501],{"__ignoreMap":54},[478,25471,25472,25475,25477,25480,25482,25484,25487,25490,25493,25496,25499],{"class":480,"line":481},[478,25473,25474],{"class":714},"HF_USER",[478,25476,759],{"class":710},[478,25478,25479],{"class":714},"$(",[478,25481,25435],{"class":484},[478,25483,25438],{"class":488},[478,25485,25486],{"class":488}," whoami",[478,25488,25489],{"class":710}," |",[478,25491,25492],{"class":484}," head",[478,25494,25495],{"class":495}," -n",[478,25497,25498],{"class":495}," 1",[478,25500,720],{"class":714},[478,25502,25503,25506,25508,25511],{"class":480,"line":565},[478,25504,25505],{"class":495},"echo",[478,25507,10290],{"class":488},[478,25509,25510],{"class":714},"$HF_USER",[478,25512,25513],{"class":488},"\"\n",[19,25515,25516],{},[52,25517],{"alt":54,"src":25518},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25520,25522],{"id":25521},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25524,25525],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1702,25527,25528,25531],{},[32,25529,25530],{},"Dataset Repo（用于上传演示数据）",[32,25532,25533],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25535,25536],{},[52,25537],{"alt":54,"src":25538},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25540,25541],{},[52,25542],{"alt":54,"src":25543},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25545,25546],{},[52,25547],{"alt":54,"src":25548},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25550,25551],{},[52,25552],{"alt":54,"src":25553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[617,25555,25556],{},"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":54,"searchDepth":565,"depth":565,"links":25558},[25559,25560,25561],{"id":25398,"depth":565,"text":25399},{"id":25463,"depth":565,"text":25464},{"id":25521,"depth":565,"text":25522},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25389,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25568,"title":25569,"body":25570,"description":23942,"extension":638,"meta":25767,"navigation":640,"path":25768,"seo":25769,"stem":25770,"__hash__":25771},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25571,"toc":25762},[25572,25576,25580,25676,25684,25689,25693,25709,25712,25716,25759],[10,25573,25575],{"id":25574},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25577,25579],{"id":25578},"_61-录制示教数据","6.1 录制示教数据",[469,25581,25583],{"className":471,"code":25582,"language":473,"meta":54,"style":54},"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",[475,25584,25585,25592,25598,25604,25610,25619,25625,25631,25637,25644,25654,25661,25671],{"__ignoreMap":54},[478,25586,25587,25590],{"class":480,"line":481},[478,25588,25589],{"class":484},"lerobot-record",[478,25591,25058],{"class":495},[478,25593,25594,25596],{"class":480,"line":565},[478,25595,25090],{"class":495},[478,25597,25058],{"class":495},[478,25599,25600,25602],{"class":480,"line":579},[478,25601,25168],{"class":495},[478,25603,25058],{"class":495},[478,25605,25606,25608],{"class":480,"line":593},[478,25607,25228],{"class":495},[478,25609,25058],{"class":495},[478,25611,25612,25614,25617],{"class":480,"line":1769},[478,25613,25297],{"class":495},[478,25615,25616],{"class":488},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[478,25618,25058],{"class":495},[478,25620,25621,25623],{"class":480,"line":1783},[478,25622,25063],{"class":495},[478,25624,25058],{"class":495},[478,25626,25627,25629],{"class":480,"line":1789},[478,25628,25135],{"class":495},[478,25630,25058],{"class":495},[478,25632,25633,25635],{"class":480,"line":1880},[478,25634,25319],{"class":495},[478,25636,25058],{"class":495},[478,25638,25639,25642],{"class":480,"line":1886},[478,25640,25641],{"class":495},"  --display_data=true",[478,25643,25058],{"class":495},[478,25645,25646,25649,25652],{"class":480,"line":1898},[478,25647,25648],{"class":495},"  --dataset.repo_id=",[478,25650,25651],{"class":488},"\"Embodied-AI-6\u002Fso101_test\"",[478,25653,25058],{"class":495},[478,25655,25656,25659],{"class":480,"line":2180},[478,25657,25658],{"class":495},"  --dataset.num_episodes=10",[478,25660,25058],{"class":495},[478,25662,25663,25666,25669],{"class":480,"line":2185},[478,25664,25665],{"class":495},"  --dataset.single_task=",[478,25667,25668],{"class":488},"\"Grab the green cube\"",[478,25670,25058],{"class":495},[478,25672,25673],{"class":480,"line":2191},[478,25674,25675],{"class":495},"  --resume=true\n",[1702,25677,25678],{},[32,25679,25680,25683],{},[475,25681,25682],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25685,25686],{},[52,25687],{"alt":54,"src":25688},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25690,25692],{"id":25691},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[469,25694,25696],{"className":471,"code":25695,"language":473,"meta":54,"style":54},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[475,25697,25698],{"__ignoreMap":54},[478,25699,25700,25703,25706],{"class":480,"line":481},[478,25701,25702],{"class":484},"rm",[478,25704,25705],{"class":495}," -rf",[478,25707,25708],{"class":488}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25710,25711],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25713,25715],{"id":25714},"_63-回放指定-episode","6.3 回放指定 episode",[469,25717,25719],{"className":471,"code":25718,"language":473,"meta":54,"style":54},"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",[475,25720,25721,25728,25734,25740,25746,25754],{"__ignoreMap":54},[478,25722,25723,25726],{"class":480,"line":481},[478,25724,25725],{"class":484},"lerobot-replay",[478,25727,25058],{"class":495},[478,25729,25730,25732],{"class":480,"line":565},[478,25731,25090],{"class":495},[478,25733,25058],{"class":495},[478,25735,25736,25738],{"class":480,"line":579},[478,25737,25168],{"class":495},[478,25739,25058],{"class":495},[478,25741,25742,25744],{"class":480,"line":593},[478,25743,25228],{"class":495},[478,25745,25058],{"class":495},[478,25747,25748,25750,25752],{"class":480,"line":1769},[478,25749,25648],{"class":495},[478,25751,25651],{"class":488},[478,25753,25058],{"class":495},[478,25755,25756],{"class":480,"line":1783},[478,25757,25758],{"class":495},"  --dataset.episode=0\n",[617,25760,25761],{},"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":54,"searchDepth":565,"depth":565,"links":25763},[25764,25765,25766],{"id":25578,"depth":565,"text":25579},{"id":25691,"depth":565,"text":25692},{"id":25714,"depth":565,"text":25715},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25569,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25773,"title":25774,"body":25775,"description":23942,"extension":638,"meta":25903,"navigation":640,"path":25904,"seo":25905,"stem":25906,"__hash__":25907},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25776,"toc":25901},[25777,25781,25844,25847,25894,25899],[10,25778,25780],{"id":25779},"_7-act-模型训练","7. ACT 模型训练",[469,25782,25784],{"className":471,"code":25783,"language":473,"meta":54,"style":54},"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",[475,25785,25786,25793,25801,25808,25815,25822,25829,25836],{"__ignoreMap":54},[478,25787,25788,25791],{"class":480,"line":481},[478,25789,25790],{"class":484},"lerobot-train",[478,25792,25058],{"class":495},[478,25794,25795,25797,25799],{"class":480,"line":565},[478,25796,25648],{"class":495},[478,25798,25651],{"class":488},[478,25800,25058],{"class":495},[478,25802,25803,25806],{"class":480,"line":579},[478,25804,25805],{"class":495},"  --policy.type=act",[478,25807,25058],{"class":495},[478,25809,25810,25813],{"class":480,"line":593},[478,25811,25812],{"class":495},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[478,25814,25058],{"class":495},[478,25816,25817,25820],{"class":480,"line":1769},[478,25818,25819],{"class":495},"  --job_name=act_so101_test",[478,25821,25058],{"class":495},[478,25823,25824,25827],{"class":480,"line":1783},[478,25825,25826],{"class":495},"  --policy.device=cuda",[478,25828,25058],{"class":495},[478,25830,25831,25834],{"class":480,"line":1789},[478,25832,25833],{"class":495},"  --wandb.enable=false",[478,25835,25058],{"class":495},[478,25837,25838,25841],{"class":480,"line":1880},[478,25839,25840],{"class":495},"  --policy.repo_id=",[478,25842,25843],{"class":488},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25845,25846],{},"参数说明：",[1702,25848,25849,25855,25861,25867,25873,25882,25888],{},[32,25850,25851,25854],{},[475,25852,25853],{},"--dataset.repo_id","：训练数据集仓库。",[32,25856,25857,25860],{},[475,25858,25859],{},"--policy.type=act","：策略模型类型为 ACT。",[32,25862,25863,25866],{},[475,25864,25865],{},"--output_dir","：本地训练输出目录。",[32,25868,25869,25872],{},[475,25870,25871],{},"--job_name","：训练任务名称。",[32,25874,25875,25878,25879,24942],{},[475,25876,25877],{},"--policy.device","：训练设备（如 ",[475,25880,25881],{},"cuda",[32,25883,25884,25887],{},[475,25885,25886],{},"--wandb.enable","：是否启用 WandB 可视化。",[32,25889,25890,25893],{},[475,25891,25892],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25895,25896],{},[52,25897],{"alt":54,"src":25898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[617,25900,25761],{},{"title":54,"searchDepth":565,"depth":565,"links":25902},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25774,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25909,"title":25910,"body":25911,"description":23942,"extension":638,"meta":25998,"navigation":640,"path":25999,"seo":26000,"stem":26001,"__hash__":26002},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25912,"toc":25996},[25913,25916,25919,25986,25994],[10,25914,25910],{"id":25915},"_8-策略部署与自动采集",[19,25917,25918],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[469,25920,25922],{"className":471,"code":25921,"language":473,"meta":54,"style":54},"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",[475,25923,25924,25930,25936,25942,25950,25956,25963,25971,25979],{"__ignoreMap":54},[478,25925,25926,25928],{"class":480,"line":481},[478,25927,25589],{"class":484},[478,25929,25058],{"class":495},[478,25931,25932,25934],{"class":480,"line":565},[478,25933,25090],{"class":495},[478,25935,25058],{"class":495},[478,25937,25938,25940],{"class":480,"line":579},[478,25939,25168],{"class":495},[478,25941,25058],{"class":495},[478,25943,25944,25946,25948],{"class":480,"line":593},[478,25945,25297],{"class":495},[478,25947,25616],{"class":488},[478,25949,25058],{"class":495},[478,25951,25952,25954],{"class":480,"line":1769},[478,25953,25228],{"class":495},[478,25955,25058],{"class":495},[478,25957,25958,25961],{"class":480,"line":1783},[478,25959,25960],{"class":495},"  --display_data=false",[478,25962,25058],{"class":495},[478,25964,25965,25967,25969],{"class":480,"line":1789},[478,25966,25648],{"class":495},[478,25968,25651],{"class":488},[478,25970,25058],{"class":495},[478,25972,25973,25975,25977],{"class":480,"line":1880},[478,25974,25665],{"class":495},[478,25976,25668],{"class":488},[478,25978,25058],{"class":495},[478,25980,25981,25984],{"class":480,"line":1886},[478,25982,25983],{"class":495},"  --policy.path=",[478,25985,25843],{"class":488},[1702,25987,25988],{},[32,25989,25990,25993],{},[475,25991,25992],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[617,25995,25761],{},{"title":54,"searchDepth":565,"depth":565,"links":25997},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25910,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26004,"title":26005,"body":26006,"description":23942,"extension":638,"meta":26035,"navigation":640,"path":26036,"seo":26037,"stem":26038,"__hash__":26039},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26007,"toc":26033},[26008,26012,26015,26021,26024,26030],[10,26009,26011],{"id":26010},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26013,26014],{},"项目地址：",[19,26016,26017],{},[518,26018,26019],{"href":26019,"rel":26020},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[522],[19,26022,26023],{},"参考教程：",[19,26025,26026],{},[518,26027,26028],{"href":26028,"rel":26029},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[522],[19,26031,26032],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":54,"searchDepth":565,"depth":565,"links":26034},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26005,"description":23942},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26041,"title":26042,"body":26043,"description":26047,"extension":638,"meta":26048,"navigation":640,"path":26049,"seo":26050,"stem":26051,"__hash__":26052},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26044,"toc":26045},[],{"title":54,"searchDepth":565,"depth":565,"links":26046},[],"act复现",{"category":23944},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26042,"description":26047},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26054,"title":26055,"body":26056,"description":54,"extension":638,"meta":26358,"navigation":640,"path":26359,"seo":26360,"stem":26361,"__hash__":26362},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26057,"toc":26350},[26058,26061,26065,26075,26082,26089,26092,26099,26102,26105,26109,26121,26125,26171,26174,26177,26180,26183,26186,26190,26228,26234,26238,26292,26297,26300,26303,26308,26311,26316,26319,26322,26326,26329,26332,26336],[10,26059,26055],{"id":26060},"_1简介",[129,26062,26064],{"id":26063},"_11什么是-docker","1.1什么是 Docker？",[19,26066,26067,26068,26071,26072],{},"Docker 是一个开源的 ",[45,26069,26070],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[45,26073,26074],{},"一次构建，到处运行。",[19,26076,26077,26078,26081],{},"“ ",[45,26079,26080],{},"一次构建，到处运行"," ”也就是说：",[29,26083,26084],{},[32,26085,26086],{},[45,26087,26088],{},"之前：",[19,26090,26091],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[29,26093,26094],{},[32,26095,26096],{},[45,26097,26098],{},"使用docker后：",[19,26100,26101],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26103,26104],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[129,26106,26108],{"id":26107},"_12它是怎么工作的","1.2.它是怎么工作的？",[1702,26110,26111,26114],{},[32,26112,26113],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[32,26115,26116,26117,26120],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[45,26118,26119],{},"无论在哪运行都一样稳定"," 。",[129,26122,26124],{"id":26123},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[371,26126,26127,26137],{},[374,26128,26129],{},[377,26130,26131,26134],{},[380,26132,26133],{"align":382},"概念",[380,26135,26136],{"align":382},"解释",[388,26138,26139,26147,26155,26163],{},[377,26140,26141,26144],{},[393,26142,26143],{"align":382},"镜像",[393,26145,26146],{"align":382},"Image，运行容器的模板，像是一个应用快照",[377,26148,26149,26152],{},[393,26150,26151],{"align":382},"容器",[393,26153,26154],{"align":382},"Container，运行中的镜像实例，有自己的文件系统、网络等",[377,26156,26157,26160],{},[393,26158,26159],{"align":382},"Dockerfile",[393,26161,26162],{"align":382},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[377,26164,26165,26168],{},[393,26166,26167],{"align":382},"仓库",[393,26169,26170],{"align":382},"Registry，存放镜像的地方，比如 Docker Hub",[19,26172,26173],{},"抽象化理解:",[19,26175,26176],{},"Docker镜像≈C++类",[19,26178,26179],{},"Docker容器≈C++类实例(即对象)",[19,26181,26182],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26184,26185],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[129,26187,26189],{"id":26188},"_14类比理解","1.4.类比理解",[371,26191,26192,26202],{},[374,26193,26194],{},[377,26195,26196,26199],{},[380,26197,26198],{"align":382},"传统部署",[380,26200,26201],{"align":382},"Docker部署",[388,26203,26204,26212,26220],{},[377,26205,26206,26209],{},[393,26207,26208],{"align":382},"手动安装依赖、调试版本不一致问题",[393,26210,26211],{"align":382},"一次打包环境和代码",[377,26213,26214,26217],{},[393,26215,26216],{"align":382},"程序“裸奔”跑在系统上",[393,26218,26219],{"align":382},"程序“穿着容器”隔离运行",[377,26221,26222,26225],{},[393,26223,26224],{"align":382},"容易“在我电脑上能跑”",[393,26226,26227],{"align":382},"保证“无论在哪都能跑”",[19,26229,26230,26231],{},"就像快递包裹： ",[45,26232,26233],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[129,26235,26237],{"id":26236},"_15docker-的核心优势","1.5.Docker 的核心优势",[371,26239,26240,26250],{},[374,26241,26242],{},[377,26243,26244,26247],{},[380,26245,26246],{"align":382},"优势",[380,26248,26249],{"align":382},"说明",[388,26251,26252,26260,26268,26276,26284],{},[377,26253,26254,26257],{},[393,26255,26256],{"align":382},"轻量级",[393,26258,26259],{"align":382},"基于系统内核共享，启动速度快，占资源少",[377,26261,26262,26265],{},[393,26263,26264],{"align":382},"跨平台",[393,26266,26267],{"align":382},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[377,26269,26270,26273],{},[393,26271,26272],{"align":382},"易于迁移部署",[393,26274,26275],{"align":382},"应用和环境一起封装，不怕依赖不一致",[377,26277,26278,26281],{},[393,26279,26280],{"align":382},"易于版本控制",[393,26282,26283],{"align":382},"镜像版本可控，支持回滚",[377,26285,26286,26289],{},[393,26287,26288],{"align":382},"生态丰富",[393,26290,26291],{"align":382},"Docker Hub 上有成千上万的现成镜像可用",[29,26293,26294],{},[32,26295,26296],{},"在Linux上可以几乎实现无性能损失。",[19,26298,26299],{},"docker里的发行版和本机共用Linux内核。",[19,26301,26302],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[29,26304,26305],{},[32,26306,26307],{},"可以快速部署在绝大多数Linux发行版",[19,26309,26310],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[29,26312,26313],{},[32,26314,26315],{},"配置环境简单",[19,26317,26318],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26320,26321],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[29,26323,26324],{},[32,26325,26288],{},[19,26327,26328],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26330,26331],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[129,26333,26335],{"id":26334},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1702,26337,26338,26341,26344,26347],{},[32,26339,26340],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[32,26342,26343],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[32,26345,26346],{},"微服务架构：每个服务一个容器，灵活组合",[32,26348,26349],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":54,"searchDepth":565,"depth":565,"links":26351},[26352,26353,26354,26355,26356,26357],{"id":26063,"depth":579,"text":26064},{"id":26107,"depth":579,"text":26108},{"id":26123,"depth":579,"text":26124},{"id":26188,"depth":579,"text":26189},{"id":26236,"depth":579,"text":26237},{"id":26334,"depth":579,"text":26335},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26055,"description":54},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26364,"title":26365,"body":26366,"description":54,"extension":638,"meta":27099,"navigation":640,"path":27100,"seo":27101,"stem":27102,"__hash__":27103},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26367,"toc":27094},[26368,26371,26375,26378,26381,26387,26393,26397,26406,26409,26466,26469,26520,26523,26606,26609,26646,26650,26661,26674,26681,26684,26764,26767,26817,26820,26843,26847,26854,26857,26873,26879,26882,26898,26904,26907,26923,26937,26943,26963,26969,26972,26984,26990,26993,27007,27013,27016,27036,27041,27044,27047,27051,27054,27057,27060,27067,27070,27073,27076,27081,27086,27091],[10,26369,26365],{"id":26370},"_2安装docker",[129,26372,26374],{"id":26373},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26376,26377],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26379,26380],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26382,26383],{},[518,26384,26385],{"href":26385,"rel":26386},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[522],[19,26388,26389],{},[518,26390,26391],{"href":26391,"rel":26392},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[522],[22563,26394,26396],{"id":26395},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26398,26399,26400,26405],{},"以下内容根据 ",[518,26401,26404],{"href":26402,"rel":26403},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[522],"官方文档"," 修改而来。",[19,26407,26408],{},"如果你过去安装过 docker，先删掉：",[469,26410,26412],{"className":471,"code":26411,"language":473,"meta":54,"style":54},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[475,26413,26414],{"__ignoreMap":54},[478,26415,26416,26418,26421,26424,26427,26430,26433,26436,26439,26442,26445,26448,26451,26454,26457,26460,26463],{"class":480,"line":481},[478,26417,3591],{"class":710},[478,26419,26420],{"class":714}," pkg ",[478,26422,26423],{"class":710},"in",[478,26425,26426],{"class":488}," docker.io",[478,26428,26429],{"class":488}," docker-doc",[478,26431,26432],{"class":488}," docker-compose",[478,26434,26435],{"class":488}," docker-compose-v2",[478,26437,26438],{"class":488}," podman-docker",[478,26440,26441],{"class":488}," containerd",[478,26443,26444],{"class":488}," runc",[478,26446,26447],{"class":714},"; ",[478,26449,26450],{"class":710},"do",[478,26452,26453],{"class":484}," sudo",[478,26455,26456],{"class":488}," apt-get",[478,26458,26459],{"class":488}," remove",[478,26461,26462],{"class":714}," $pkg; ",[478,26464,26465],{"class":710},"done\n",[19,26467,26468],{},"首先安装依赖和GPG：",[469,26470,26474],{"className":26471,"code":26472,"language":26473,"meta":54,"style":54},"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",[475,26475,26476,26481,26486,26491,26496,26501,26506,26510,26515],{"__ignoreMap":54},[478,26477,26478],{"class":480,"line":481},[478,26479,26480],{},"# Add Docker's official GPG key:\n",[478,26482,26483],{"class":480,"line":565},[478,26484,26485],{},"sudo apt-get update\n",[478,26487,26488],{"class":480,"line":579},[478,26489,26490],{},"sudo apt-get install ca-certificates curl\n",[478,26492,26493],{"class":480,"line":593},[478,26494,26495],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[478,26497,26498],{"class":480,"line":1769},[478,26499,26500],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[478,26502,26503],{"class":480,"line":1783},[478,26504,26505],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[478,26507,26508],{"class":480,"line":1789},[478,26509,2966],{"emptyLinePlaceholder":640},[478,26511,26512],{"class":480,"line":1880},[478,26513,26514],{},"# 如果上面这行报错就弄下面这行\n",[478,26516,26517],{"class":480,"line":1886},[478,26518,26519],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26521,26522],{},"信任 Docker 的 GPG 公钥并添加仓库：",[469,26524,26526],{"className":471,"code":26525,"language":473,"meta":54,"style":54},"# 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",[475,26527,26528,26533,26539,26556,26589],{"__ignoreMap":54},[478,26529,26530],{"class":480,"line":481},[478,26531,26532],{"class":770},"# Add the repository to Apt sources:\n",[478,26534,26535,26537],{"class":480,"line":565},[478,26536,25505],{"class":495},[478,26538,25058],{"class":495},[478,26540,26541,26544,26547,26550,26553],{"class":480,"line":579},[478,26542,26543],{"class":488},"  \"deb [arch=$(",[478,26545,26546],{"class":484},"dpkg",[478,26548,26549],{"class":495}," --print-architecture",[478,26551,26552],{"class":488},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[478,26554,26555],{"class":495},"\\\n",[478,26557,26558,26561,26563,26565,26568,26571,26573,26575,26578,26580,26582,26585,26587],{"class":480,"line":593},[478,26559,26560],{"class":488},"  \"",[478,26562,25479],{"class":714},[478,26564,1258],{"class":495},[478,26566,26567],{"class":488}," \u002Fetc\u002Fos-release",[478,26569,26570],{"class":714}," && ",[478,26572,25505],{"class":495},[478,26574,10290],{"class":488},[478,26576,26577],{"class":714},"$VERSION_CODENAME",[478,26579,952],{"class":488},[478,26581,222],{"class":714},[478,26583,26584],{"class":488},"\" stable\"",[478,26586,25489],{"class":710},[478,26588,25058],{"class":495},[478,26590,26591,26594,26597,26600,26603],{"class":480,"line":1769},[478,26592,26593],{"class":484},"  sudo",[478,26595,26596],{"class":488}," tee",[478,26598,26599],{"class":488}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[478,26601,26602],{"class":710}," >",[478,26604,26605],{"class":488}," \u002Fdev\u002Fnull\n",[19,26607,26608],{},"最后安装",[469,26610,26612],{"className":471,"code":26611,"language":473,"meta":54,"style":54},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[475,26613,26614,26623],{"__ignoreMap":54},[478,26615,26616,26618,26620],{"class":480,"line":481},[478,26617,24956],{"class":484},[478,26619,26456],{"class":488},[478,26621,26622],{"class":488}," update\n",[478,26624,26625,26627,26629,26631,26634,26637,26640,26643],{"class":480,"line":565},[478,26626,24956],{"class":484},[478,26628,26456],{"class":488},[478,26630,489],{"class":488},[478,26632,26633],{"class":488}," docker-ce",[478,26635,26636],{"class":488}," docker-ce-cli",[478,26638,26639],{"class":488}," containerd.io",[478,26641,26642],{"class":488}," docker-buildx-plugin",[478,26644,26645],{"class":488}," docker-compose-plugin\n",[22563,26647,26649],{"id":26648},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26651,26652,26653,26656,26657,26660],{},"查看自己自己包管理工具版本（dnf是 ",[45,26654,26655],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[45,26658,26659],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[469,26662,26664],{"className":471,"code":26663,"language":473,"meta":54,"style":54},"dnf --version\n",[475,26665,26666],{"__ignoreMap":54},[478,26667,26668,26671],{"class":480,"line":481},[478,26669,26670],{"class":484},"dnf",[478,26672,26673],{"class":495}," --version\n",[19,26675,26399,26676,26680],{},[518,26677,26404],{"href":26678,"rel":26679},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[522]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26682,26683],{},"如果你之前安装过 docker，请先删掉",[469,26685,26687],{"className":471,"code":26686,"language":473,"meta":54,"style":54},"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",[475,26688,26689,26703,26710,26717,26724,26731,26738,26745,26752,26759],{"__ignoreMap":54},[478,26690,26691,26693,26696,26698,26701],{"class":480,"line":481},[478,26692,24956],{"class":484},[478,26694,26695],{"class":488}," dnf",[478,26697,26459],{"class":488},[478,26699,26700],{"class":488}," docker",[478,26702,25058],{"class":495},[478,26704,26705,26708],{"class":480,"line":565},[478,26706,26707],{"class":488},"                  docker-client",[478,26709,25058],{"class":495},[478,26711,26712,26715],{"class":480,"line":579},[478,26713,26714],{"class":488},"                  docker-client-latest",[478,26716,25058],{"class":495},[478,26718,26719,26722],{"class":480,"line":593},[478,26720,26721],{"class":488},"                  docker-common",[478,26723,25058],{"class":495},[478,26725,26726,26729],{"class":480,"line":1769},[478,26727,26728],{"class":488},"                  docker-latest",[478,26730,25058],{"class":495},[478,26732,26733,26736],{"class":480,"line":1783},[478,26734,26735],{"class":488},"                  docker-latest-logrotate",[478,26737,25058],{"class":495},[478,26739,26740,26743],{"class":480,"line":1789},[478,26741,26742],{"class":488},"                  docker-logrotate",[478,26744,25058],{"class":495},[478,26746,26747,26750],{"class":480,"line":1880},[478,26748,26749],{"class":488},"                  docker-selinux",[478,26751,25058],{"class":495},[478,26753,26754,26757],{"class":480,"line":1886},[478,26755,26756],{"class":488},"                  docker-engine-selinux",[478,26758,25058],{"class":495},[478,26760,26761],{"class":480,"line":1898},[478,26762,26763],{"class":488},"                  docker-engine\n",[19,26765,26766],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[469,26768,26770],{"className":471,"code":26769,"language":473,"meta":54,"style":54},"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",[475,26771,26772,26786,26801],{"__ignoreMap":54},[478,26773,26774,26776,26778,26781,26783],{"class":480,"line":481},[478,26775,24956],{"class":484},[478,26777,26695],{"class":488},[478,26779,26780],{"class":495}," -y",[478,26782,489],{"class":488},[478,26784,26785],{"class":488}," dnf-plugins-core\n",[478,26787,26788,26790,26792,26795,26798],{"class":480,"line":565},[478,26789,24956],{"class":484},[478,26791,26695],{"class":488},[478,26793,26794],{"class":488}," config-manager",[478,26796,26797],{"class":488}," addrepo",[478,26799,26800],{"class":495}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[478,26802,26803,26805,26808,26811,26814],{"class":480,"line":579},[478,26804,24956],{"class":484},[478,26806,26807],{"class":488}," sed",[478,26809,26810],{"class":495}," -i",[478,26812,26813],{"class":488}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[478,26815,26816],{"class":488}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26818,26819],{},"最后安装：",[469,26821,26823],{"className":471,"code":26822,"language":473,"meta":54,"style":54},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[475,26824,26825],{"__ignoreMap":54},[478,26826,26827,26829,26831,26833,26835,26837,26839,26841],{"class":480,"line":481},[478,26828,24956],{"class":484},[478,26830,26695],{"class":488},[478,26832,489],{"class":488},[478,26834,26633],{"class":488},[478,26836,26636],{"class":488},[478,26838,26639],{"class":488},[478,26840,26642],{"class":488},[478,26842,26645],{"class":488},[129,26844,26846],{"id":26845},"_22配置环境","2.2.配置环境",[22563,26848,26850,26853],{"id":26849},"_221检查-docker-服务状态",[45,26851,26852],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26855,26856],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[469,26858,26860],{"className":471,"code":26859,"language":473,"meta":54,"style":54},"systemctl status docker\n",[475,26861,26862],{"__ignoreMap":54},[478,26863,26864,26867,26870],{"class":480,"line":481},[478,26865,26866],{"class":484},"systemctl",[478,26868,26869],{"class":488}," status",[478,26871,26872],{"class":488}," docker\n",[22563,26874,26876,26853],{"id":26875},"_222启动-docker-服务",[45,26877,26878],{},"2.2.2.启动 Docker 服务",[19,26880,26881],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[469,26883,26885],{"className":471,"code":26884,"language":473,"meta":54,"style":54},"sudo systemctl start docker\n",[475,26886,26887],{"__ignoreMap":54},[478,26888,26889,26891,26894,26896],{"class":480,"line":481},[478,26890,24956],{"class":484},[478,26892,26893],{"class":488}," systemctl",[478,26895,4750],{"class":488},[478,26897,26872],{"class":488},[22563,26899,26901,26853],{"id":26900},"_223设置-docker-开机自启",[45,26902,26903],{},"2.2.3.设置 Docker 开机自启",[19,26905,26906],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[469,26908,26910],{"className":471,"code":26909,"language":473,"meta":54,"style":54},"sudo systemctl enable docker\n",[475,26911,26912],{"__ignoreMap":54},[478,26913,26914,26916,26918,26921],{"class":480,"line":481},[478,26915,24956],{"class":484},[478,26917,26893],{"class":488},[478,26919,26920],{"class":488}," enable",[478,26922,26872],{"class":488},[22563,26924,26926,201,26929,201,26934,26853],{"id":26925},"_224将用户添加到-docker-组",[45,26927,26928],{},"2.2.4.将用户添加到",[45,26930,26931],{},[475,26932,26933],{},"docker",[45,26935,26936],{},"组",[19,26938,26939,26940,26942],{},"使用以下命令将当前用户添加到 ",[475,26941,26933],{}," 组：",[469,26944,26946],{"className":471,"code":26945,"language":473,"meta":54,"style":54},"sudo usermod -aG docker $USER\n",[475,26947,26948],{"__ignoreMap":54},[478,26949,26950,26952,26955,26958,26960],{"class":480,"line":481},[478,26951,24956],{"class":484},[478,26953,26954],{"class":488}," usermod",[478,26956,26957],{"class":495}," -aG",[478,26959,26700],{"class":488},[478,26961,26962],{"class":714}," $USER\n",[22563,26964,26966,26853],{"id":26965},"_225退出并重新登录",[45,26967,26968],{},"2.2.5.退出并重新登录",[19,26970,26971],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[469,26973,26975],{"className":471,"code":26974,"language":473,"meta":54,"style":54},"newgrp docker\n",[475,26976,26977],{"__ignoreMap":54},[478,26978,26979,26982],{"class":480,"line":481},[478,26980,26981],{"class":484},"newgrp",[478,26983,26872],{"class":488},[22563,26985,26987,26853],{"id":26986},"_226重新启动-docker-服务如果需要",[45,26988,26989],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26991,26992],{},"确保 Docker 服务正在运行，可以使用以下命令：",[469,26994,26995],{"className":471,"code":26884,"language":473,"meta":54,"style":54},[475,26996,26997],{"__ignoreMap":54},[478,26998,26999,27001,27003,27005],{"class":480,"line":481},[478,27000,24956],{"class":484},[478,27002,26893],{"class":488},[478,27004,4750],{"class":488},[478,27006,26872],{"class":488},[22563,27008,27010,26853],{"id":27009},"_227重启电脑后检查-docker-服务状态",[45,27011,27012],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27014,27015],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[469,27017,27019],{"className":471,"code":27018,"language":473,"meta":54,"style":54},"sudo reboot\nsystemctl status docker\n",[475,27020,27021,27028],{"__ignoreMap":54},[478,27022,27023,27025],{"class":480,"line":481},[478,27024,24956],{"class":484},[478,27026,27027],{"class":488}," reboot\n",[478,27029,27030,27032,27034],{"class":480,"line":565},[478,27031,26866],{"class":484},[478,27033,26869],{"class":488},[478,27035,26872],{"class":488},[19,27037,27038],{},[52,27039],{"alt":54,"src":27040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27042,27043],{},"第三行显示enabled说明开机自启动成功",[19,27045,27046],{},"按q退出",[129,27048,27050],{"id":27049},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27052,27053],{},"优先使用linux来使用docker是比较好的",[19,27055,27056],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27058,27059],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27061,27062,27063],{},"官方下载安装:",[518,27064,27065],{"href":27065,"rel":27066},"https:\u002F\u002Fwww.docker.com\u002F",[522],[19,27068,27069],{},"Windows的Docker显卡直通与USB直通:",[19,27071,27072],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27074,27075],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27077,27078],{},[52,27079],{"alt":54,"src":27080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27082,27083],{},[52,27084],{"alt":54,"src":27085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27087,27088],{},[52,27089],{"alt":54,"src":27090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[617,27092,27093],{},"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":54,"searchDepth":565,"depth":565,"links":27095},[27096,27097,27098],{"id":26373,"depth":579,"text":26374},{"id":26845,"depth":579,"text":26846},{"id":27049,"depth":579,"text":27050},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26365,"description":54},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27105,"title":27106,"body":27107,"description":27114,"extension":638,"meta":27807,"navigation":640,"path":27808,"seo":27809,"stem":27810,"__hash__":27811},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27108,"toc":27801},[27109,27112,27115,27119,27124,27129,27132,27160,27165,27174,27177,27182,27186,27193,27198,27204,27208,27211,27215,27220,27312,27317,27335,27340,27361,27366,27382,27386,27391,27420,27425,27471,27476,27520,27528,27545,27550,27566,27571,27585,27588,27591,27594,27597,27626,27629,27634,27638,27641,27644,27650,27653,27656,27659,27721,27728,27733,27736,27754,27758,27761,27778,27781,27784,27798],[10,27110,27106],{"id":27111},"_3docker直通",[19,27113,27114],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[129,27116,27118],{"id":27117},"_31usb直通","3.1.USB直通",[19,27120,27121],{},[52,27122],{"alt":54,"src":27123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[29,27125,27126],{},[32,27127,27128],{},"方法一(不是很推荐新手)：",[19,27130,27131],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[469,27133,27135],{"className":471,"code":27134,"language":473,"meta":54,"style":54},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[475,27136,27137,27145,27150],{"__ignoreMap":54},[478,27138,27139,27142],{"class":480,"line":481},[478,27140,27141],{"class":484},"ls",[478,27143,27144],{"class":488}," \u002Fdev\n",[478,27146,27147],{"class":480,"line":565},[478,27148,27149],{"class":770},"#例如\n",[478,27151,27152,27155,27157],{"class":480,"line":579},[478,27153,27154],{"class":714},"--device",[478,27156,759],{"class":710},[478,27158,27159],{"class":488},"\u002Fdev\u002Ftty_USB0\n",[29,27161,27162],{"start":565},[32,27163,27164],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[469,27166,27168],{"className":471,"code":27167,"language":473,"meta":54,"style":54},"--privileged\n",[475,27169,27170],{"__ignoreMap":54},[478,27171,27172],{"class":480,"line":481},[478,27173,27167],{"class":484},[19,27175,27176],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27178,27179],{},[52,27180],{"alt":54,"src":27181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[129,27183,27185],{"id":27184},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27187,27188,27189,27192],{},"NVIDIA Container Toolkit使用户 ",[45,27190,27191],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27194,27195],{},[52,27196],{"alt":54,"src":27197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27199,27200],{},[518,27201,27202],{"href":27202,"rel":27203},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[522],[22563,27205,27207],{"id":27206},"_321安装","3.2.1.安装",[19,27209,27210],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23475,27212,27214],{"id":27213},"_3211ubuntu","3.2.1.1.Ubuntu",[29,27216,27217],{},[32,27218,27219],{},"配置存储库 并更新",[469,27221,27223],{"className":471,"code":27222,"language":473,"meta":54,"style":54},"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",[475,27224,27225,27254,27274,27286,27298,27304],{"__ignoreMap":54},[478,27226,27227,27230,27233,27236,27238,27240,27243,27246,27249,27252],{"class":480,"line":481},[478,27228,27229],{"class":484},"curl",[478,27231,27232],{"class":495}," -fsSL",[478,27234,27235],{"class":488}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[478,27237,25489],{"class":710},[478,27239,26453],{"class":484},[478,27241,27242],{"class":488}," gpg",[478,27244,27245],{"class":495}," --dearmor",[478,27247,27248],{"class":495}," -o",[478,27250,27251],{"class":488}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[478,27253,25058],{"class":495},[478,27255,27256,27259,27261,27264,27267,27270,27272],{"class":480,"line":565},[478,27257,27258],{"class":714},"  && ",[478,27260,27229],{"class":484},[478,27262,27263],{"class":495}," -s",[478,27265,27266],{"class":495}," -L",[478,27268,27269],{"class":488}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[478,27271,25489],{"class":710},[478,27273,25058],{"class":495},[478,27275,27276,27279,27282,27284],{"class":480,"line":579},[478,27277,27278],{"class":484},"    sed",[478,27280,27281],{"class":488}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[478,27283,25489],{"class":710},[478,27285,25058],{"class":495},[478,27287,27288,27291,27293,27296],{"class":480,"line":593},[478,27289,27290],{"class":484},"    sudo",[478,27292,26596],{"class":488},[478,27294,27295],{"class":488}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[478,27297,25058],{"class":495},[478,27299,27300,27302],{"class":480,"line":1769},[478,27301,27258],{"class":714},[478,27303,26555],{"class":495},[478,27305,27306,27308,27310],{"class":480,"line":1783},[478,27307,27290],{"class":484},[478,27309,26456],{"class":488},[478,27311,26622],{"class":488},[29,27313,27314],{"start":565},[32,27315,27316],{},"安装nvidia-docker2",[469,27318,27320],{"className":471,"code":27319,"language":473,"meta":54,"style":54},"sudo apt-get install -y nvidia-docker2\n",[475,27321,27322],{"__ignoreMap":54},[478,27323,27324,27326,27328,27330,27332],{"class":480,"line":481},[478,27325,24956],{"class":484},[478,27327,26456],{"class":488},[478,27329,489],{"class":488},[478,27331,26780],{"class":495},[478,27333,27334],{"class":488}," nvidia-docker2\n",[29,27336,27337],{"start":579},[32,27338,27339],{},"使用nvidia-ctk命令配置container runtime",[469,27341,27343],{"className":471,"code":27342,"language":473,"meta":54,"style":54},"sudo nvidia-ctk runtime configure --runtime=docker\n",[475,27344,27345],{"__ignoreMap":54},[478,27346,27347,27349,27352,27355,27358],{"class":480,"line":481},[478,27348,24956],{"class":484},[478,27350,27351],{"class":488}," nvidia-ctk",[478,27353,27354],{"class":488}," runtime",[478,27356,27357],{"class":488}," configure",[478,27359,27360],{"class":495}," --runtime=docker\n",[29,27362,27363],{"start":593},[32,27364,27365],{},"重启docker服务:",[469,27367,27369],{"className":471,"code":27368,"language":473,"meta":54,"style":54},"sudo systemctl restart docker\n",[475,27370,27371],{"__ignoreMap":54},[478,27372,27373,27375,27377,27380],{"class":480,"line":481},[478,27374,24956],{"class":484},[478,27376,26893],{"class":488},[478,27378,27379],{"class":488}," restart",[478,27381,26872],{"class":488},[23475,27383,27385],{"id":27384},"_3212fedora","3.2.1.2.Fedora",[29,27387,27388],{},[32,27389,27390],{},"配置存储库",[469,27392,27394],{"className":471,"code":27393,"language":473,"meta":54,"style":54},"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",[475,27395,27396,27411],{"__ignoreMap":54},[478,27397,27398,27400,27402,27404,27407,27409],{"class":480,"line":481},[478,27399,27229],{"class":484},[478,27401,27263],{"class":495},[478,27403,27266],{"class":495},[478,27405,27406],{"class":488}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[478,27408,25489],{"class":710},[478,27410,25058],{"class":495},[478,27412,27413,27415,27417],{"class":480,"line":565},[478,27414,24956],{"class":484},[478,27416,26596],{"class":488},[478,27418,27419],{"class":488}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[29,27421,27422],{"start":565},[32,27423,27424],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[469,27426,27428],{"className":471,"code":27427,"language":473,"meta":54,"style":54},"# 如果是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",[475,27429,27430,27435,27449,27453,27458],{"__ignoreMap":54},[478,27431,27432],{"class":480,"line":481},[478,27433,27434],{"class":770},"# 如果是RHEL或者Rocky（DNF4）\n",[478,27436,27437,27439,27441,27443,27446],{"class":480,"line":565},[478,27438,24956],{"class":484},[478,27440,26695],{"class":488},[478,27442,26794],{"class":488},[478,27444,27445],{"class":495}," --add-repo",[478,27447,27448],{"class":488}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[478,27450,27451],{"class":480,"line":579},[478,27452,2966],{"emptyLinePlaceholder":640},[478,27454,27455],{"class":480,"line":593},[478,27456,27457],{"class":770},"# 如果是Feodra41+（DNF5）\n",[478,27459,27460,27462,27464,27466,27468],{"class":480,"line":1769},[478,27461,24956],{"class":484},[478,27463,26695],{"class":488},[478,27465,26794],{"class":488},[478,27467,26797],{"class":488},[478,27469,27470],{"class":495}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[29,27472,27473],{"start":579},[32,27474,27475],{},"安装NVIDIA Container Toolki包",[469,27477,27479],{"className":471,"code":27478,"language":473,"meta":54,"style":54},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[475,27480,27481,27486,27499,27503,27508],{"__ignoreMap":54},[478,27482,27483],{"class":480,"line":481},[478,27484,27485],{"class":770},"# 如果是RHEL或者Rocky\n",[478,27487,27488,27490,27492,27494,27496],{"class":480,"line":565},[478,27489,24956],{"class":484},[478,27491,26695],{"class":488},[478,27493,489],{"class":488},[478,27495,26780],{"class":495},[478,27497,27498],{"class":488}," nvidia-container-toolkit\n",[478,27500,27501],{"class":480,"line":579},[478,27502,2966],{"emptyLinePlaceholder":640},[478,27504,27505],{"class":480,"line":593},[478,27506,27507],{"class":770},"# 如果是Fedora\n",[478,27509,27510,27512,27514,27516,27518],{"class":480,"line":1769},[478,27511,24956],{"class":484},[478,27513,26695],{"class":488},[478,27515,489],{"class":488},[478,27517,26780],{"class":495},[478,27519,27498],{"class":488},[29,27521,27522],{"start":593},[32,27523,27524,27525,27527],{},"安装nvidia-docker2 ： 在Fedora上使用",[475,27526,26670],{},"进行安装",[469,27529,27531],{"className":471,"code":27530,"language":473,"meta":54,"style":54},"sudo dnf install -y nvidia-docker2\n",[475,27532,27533],{"__ignoreMap":54},[478,27534,27535,27537,27539,27541,27543],{"class":480,"line":481},[478,27536,24956],{"class":484},[478,27538,26695],{"class":488},[478,27540,489],{"class":488},[478,27542,26780],{"class":495},[478,27544,27334],{"class":488},[29,27546,27547],{"start":1769},[32,27548,27549],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[469,27551,27552],{"className":471,"code":27342,"language":473,"meta":54,"style":54},[475,27553,27554],{"__ignoreMap":54},[478,27555,27556,27558,27560,27562,27564],{"class":480,"line":481},[478,27557,24956],{"class":484},[478,27559,27351],{"class":488},[478,27561,27354],{"class":488},[478,27563,27357],{"class":488},[478,27565,27360],{"class":495},[29,27567,27568],{"start":1783},[32,27569,27570],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[469,27572,27573],{"className":471,"code":27368,"language":473,"meta":54,"style":54},[475,27574,27575],{"__ignoreMap":54},[478,27576,27577,27579,27581,27583],{"class":480,"line":481},[478,27578,24956],{"class":484},[478,27580,26893],{"class":488},[478,27582,27379],{"class":488},[478,27584,26872],{"class":488},[19,27586,27587],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27589,27590],{},"方法：",[19,27592,27593],{},"1️⃣nvidia-smi",[19,27595,27596],{},"2️⃣运行nvidia cuda 容器进行测试",[469,27598,27600],{"className":471,"code":27599,"language":473,"meta":54,"style":54},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[475,27601,27602],{"__ignoreMap":54},[478,27603,27604,27606,27608,27611,27614,27617,27620,27623],{"class":480,"line":481},[478,27605,24956],{"class":484},[478,27607,26700],{"class":488},[478,27609,27610],{"class":488}," run",[478,27612,27613],{"class":495}," --rm",[478,27615,27616],{"class":495}," --gpus",[478,27618,27619],{"class":488}," all",[478,27621,27622],{"class":488}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[478,27624,27625],{"class":488}," nvidia-smi\n",[19,27627,27628],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27630,27631],{},[52,27632],{"alt":54,"src":27633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[129,27635,27637],{"id":27636},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27639,27640],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27642,27643],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27645,27646],{},[518,27647,27648],{"href":27648,"rel":27649},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[522],[19,27651,27652],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27654,27655],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27657,27658],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[371,27660,27661,27677],{},[374,27662,27663],{},[377,27664,27665,27668,27671,27674],{},[380,27666,27667],{"align":382},"镜像类型",[380,27669,27670],{"align":382},"适用场景",[380,27672,27673],{"align":382},"示例标签",[380,27675,27676],{"align":382},"大小",[388,27678,27679,27693,27707],{},[377,27680,27681,27684,27687,27690],{},[393,27682,27683],{"align":382},"base",[393,27685,27686],{"align":382},"仅需 CUDA 运行时库",[393,27688,27689],{"align":382},"12.4.0-base-ubuntu22.04",[393,27691,27692],{"align":382},"~240MB",[377,27694,27695,27698,27701,27704],{},[393,27696,27697],{"align":382},"runtime",[393,27699,27700],{"align":382},"部署编译后的应用（含数学库）",[393,27702,27703],{"align":382},"12.4.0-runtime-ubuntu22.04",[393,27705,27706],{"align":382},"~2GB",[377,27708,27709,27712,27715,27718],{},[393,27710,27711],{"align":382},"devel",[393,27713,27714],{"align":382},"开发环境（含编译工具）",[393,27716,27717],{"align":382},"12.4.0-devel-ubuntu22.04",[393,27719,27720],{"align":382},"~3GB",[19,27722,27723,27724,27727],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[475,27725,27726],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27729,27730],{},[52,27731],{"alt":54,"src":27732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27734,27735],{},"在dockerfile里就可以开头这么写：",[469,27737,27739],{"className":471,"code":27738,"language":473,"meta":54,"style":54},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[475,27740,27741,27746],{"__ignoreMap":54},[478,27742,27743],{"class":480,"line":481},[478,27744,27745],{"class":770},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[478,27747,27748,27751],{"class":480,"line":565},[478,27749,27750],{"class":484},"FROM",[478,27752,27753],{"class":488}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[129,27755,27757],{"id":27756},"_34配置以太网","3.4.配置以太网",[19,27759,27760],{},"指定网络模式",[469,27762,27764],{"className":471,"code":27763,"language":473,"meta":54,"style":54},"--net=host \\\n",[475,27765,27766],{"__ignoreMap":54},[478,27767,27768,27771,27773,27776],{"class":480,"line":481},[478,27769,27770],{"class":714},"--net",[478,27772,759],{"class":710},[478,27774,27775],{"class":488},"host",[478,27777,25058],{"class":484},[19,27779,27780],{},"启动参数里加上这行即可。具体在下方",[19,27782,27783],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1702,27785,27786,27789,27792,27795],{},[32,27787,27788],{},"--net=bridge:默认选项，表示连接到默认的网桥",[32,27790,27791],{},"--net=host:容器使用宿主机的网络",[32,27793,27794],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[32,27796,27797],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[617,27799,27800],{},"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":54,"searchDepth":565,"depth":565,"links":27802},[27803,27804,27805,27806],{"id":27117,"depth":579,"text":27118},{"id":27184,"depth":579,"text":27185},{"id":27636,"depth":579,"text":27637},{"id":27756,"depth":579,"text":27757},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27106,"description":27114},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27813,"title":27814,"body":27815,"description":27822,"extension":638,"meta":27828,"navigation":640,"path":27829,"seo":27830,"stem":27831,"__hash__":27832},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27816,"toc":27826},[27817,27820,27823],[10,27818,27814],{"id":27819},"_4dockerhub换源",[19,27821,27822],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27824,27825],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":54,"searchDepth":565,"depth":565,"links":27827},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27814,"description":27822},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27834,"title":27835,"body":27836,"description":54,"extension":638,"meta":28848,"navigation":640,"path":28849,"seo":28850,"stem":28851,"__hash__":28852},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27837,"toc":28843},[27838,27841,27845,27851,27855,27858,28198,28201,28204,28207,28212,28217,28220,28223,28226,28229,28248,28251,28262,28268,28450,28460,28476,28739,28741,28766,28781,28790,28840],[10,27839,27835],{"id":27840},"_5docker命令学习",[129,27842,27844],{"id":27843},"_51参考文档","5.1.参考文档",[19,27846,27847],{},[518,27848,27849],{"href":27849,"rel":27850},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[522],[129,27852,27854],{"id":27853},"_52常用命令","5.2.常用命令",[19,27856,27857],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[371,27859,27860,27873],{},[374,27861,27862],{},[377,27863,27864,27867,27870],{},[380,27865,27866],{"align":382},"命令",[380,27868,27869],{"align":382},"描述",[380,27871,27872],{"align":382},"示例",[388,27874,27875,27886,27897,27908,27919,27930,27941,27952,27962,27973,27984,27995,28005,28016,28027,28038,28048,28058,28068,28078,28089,28100,28111,28122,28133,28144,28154,28165,28176,28187],{},[377,27876,27877,27880,27883],{},[393,27878,27879],{"align":382},"docker run",[393,27881,27882],{"align":382},"创建并启动一个新的容器。",[393,27884,27885],{"align":382},"docker run -it ubuntu bash",[377,27887,27888,27891,27894],{},[393,27889,27890],{"align":382},"docker build",[393,27892,27893],{"align":382},"通过指定的 Dockerfile 创建一个新的镜像。",[393,27895,27896],{"align":382},"docker build -t myimage .",[377,27898,27899,27902,27905],{},[393,27900,27901],{"align":382},"docker pull",[393,27903,27904],{"align":382},"从 Docker 仓库拉取镜像。",[393,27906,27907],{"align":382},"docker pull ubuntu",[377,27909,27910,27913,27916],{},[393,27911,27912],{"align":382},"docker push",[393,27914,27915],{"align":382},"将本地镜像推送到 Docker 仓库。",[393,27917,27918],{"align":382},"docker push myimage",[377,27920,27921,27924,27927],{},[393,27922,27923],{"align":382},"docker stop",[393,27925,27926],{"align":382},"停止一个正在运行的容器。",[393,27928,27929],{"align":382},"docker stop container_id",[377,27931,27932,27935,27938],{},[393,27933,27934],{"align":382},"docker start",[393,27936,27937],{"align":382},"启动一个已经存在的容器。",[393,27939,27940],{"align":382},"docker start container_id",[377,27942,27943,27946,27949],{},[393,27944,27945],{"align":382},"docker restart",[393,27947,27948],{"align":382},"重新启动容器。",[393,27950,27951],{"align":382},"docker restart container_id",[377,27953,27954,27957,27960],{},[393,27955,27956],{"align":382},"docker ps",[393,27958,27959],{"align":382},"列出当前正在运行的容器。",[393,27961,27956],{"align":382},[377,27963,27964,27967,27970],{},[393,27965,27966],{"align":382},"docker rm",[393,27968,27969],{"align":382},"删除一个或多个停止的容器。",[393,27971,27972],{"align":382},"docker rm container_id",[377,27974,27975,27978,27981],{},[393,27976,27977],{"align":382},"docker exec",[393,27979,27980],{"align":382},"在一个正在运行的容器中执行命令。",[393,27982,27983],{"align":382},"docker exec -it container_id bash",[377,27985,27986,27989,27992],{},[393,27987,27988],{"align":382},"docker logs",[393,27990,27991],{"align":382},"查看容器的日志输出。",[393,27993,27994],{"align":382},"docker logs container_id",[377,27996,27997,28000,28003],{},[393,27998,27999],{"align":382},"docker images",[393,28001,28002],{"align":382},"列出本地所有镜像。",[393,28004,27999],{"align":382},[377,28006,28007,28010,28013],{},[393,28008,28009],{"align":382},"docker rmi",[393,28011,28012],{"align":382},"删除一个或多个镜像。",[393,28014,28015],{"align":382},"docker rmi myimage",[377,28017,28018,28021,28024],{},[393,28019,28020],{"align":382},"docker network",[393,28022,28023],{"align":382},"管理 Docker 网络。",[393,28025,28026],{"align":382},"docker network ls",[377,28028,28029,28032,28035],{},[393,28030,28031],{"align":382},"docker volume",[393,28033,28034],{"align":382},"管理 Docker 数据卷。",[393,28036,28037],{"align":382},"docker volume ls",[377,28039,28040,28043,28046],{},[393,28041,28042],{"align":382},"docker-compose up",[393,28044,28045],{"align":382},"启动 docker-compose.yml 中定义的所有服务。",[393,28047,28042],{"align":382},[377,28049,28050,28053,28056],{},[393,28051,28052],{"align":382},"docker-compose down",[393,28054,28055],{"align":382},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[393,28057,28052],{"align":382},[377,28059,28060,28063,28066],{},[393,28061,28062],{"align":382},"docker info",[393,28064,28065],{"align":382},"显示 Docker 系统的详细信息。",[393,28067,28062],{"align":382},[377,28069,28070,28073,28076],{},[393,28071,28072],{"align":382},"docker stats",[393,28074,28075],{"align":382},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[393,28077,28072],{"align":382},[377,28079,28080,28083,28086],{},[393,28081,28082],{"align":382},"docker inspect",[393,28084,28085],{"align":382},"查看容器或镜像的详细信息（JSON 格式）。",[393,28087,28088],{"align":382},"docker inspect container_id",[377,28090,28091,28094,28097],{},[393,28092,28093],{"align":382},"docker save",[393,28095,28096],{"align":382},"将一个镜像保存为 tar 文件。",[393,28098,28099],{"align":382},"docker save -o myimage.tar myimage",[377,28101,28102,28105,28108],{},[393,28103,28104],{"align":382},"docker load",[393,28106,28107],{"align":382},"从 tar 文件中加载镜像。",[393,28109,28110],{"align":382},"docker load -i myimage.tar",[377,28112,28113,28116,28119],{},[393,28114,28115],{"align":382},"docker tag",[393,28117,28118],{"align":382},"为镜像添加标签（tag）。",[393,28120,28121],{"align":382},"docker tag myimage myimage:v1",[377,28123,28124,28127,28130],{},[393,28125,28126],{"align":382},"docker buildx build",[393,28128,28129],{"align":382},"使用 Buildx 构建多架构镜像。",[393,28131,28132],{"align":382},"docker buildx build -t myimage .",[377,28134,28135,28138,28141],{},[393,28136,28137],{"align":382},"docker buildx create",[393,28139,28140],{"align":382},"创建一个新的 Buildx 构建实例。",[393,28142,28143],{"align":382},"docker buildx create –use",[377,28145,28146,28149,28152],{},[393,28147,28148],{"align":382},"docker buildx ls",[393,28150,28151],{"align":382},"列出所有可用的 Buildx 构建实例。",[393,28153,28148],{"align":382},[377,28155,28156,28159,28162],{},[393,28157,28158],{"align":382},"docker buildx use",[393,28160,28161],{"align":382},"设置当前的 Buildx 构建实例。",[393,28163,28164],{"align":382},"docker buildx use mybuilder",[377,28166,28167,28170,28173],{},[393,28168,28169],{"align":382},"docker buildx bake",[393,28171,28172],{"align":382},"使用 Bake 文件批量构建镜像。",[393,28174,28175],{"align":382},"docker buildx bake -f bake.hcl",[377,28177,28178,28181,28184],{},[393,28179,28180],{"align":382},"docker buildx build –push",[393,28182,28183],{"align":382},"构建镜像并推送到镜像仓库。",[393,28185,28186],{"align":382},"docker buildx build –push -t myimage .",[377,28188,28189,28192,28195],{},[393,28190,28191],{"align":382},"docker buildx build –platform",[393,28193,28194],{"align":382},"构建镜像并为多个平台生成支持。",[393,28196,28197],{"align":382},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28199,28200],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28202,28203],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28205,28206],{},"docker images 可以查看已经下载的镜像",[19,28208,28209],{},[52,28210],{"alt":54,"src":28211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28213,28214],{},[45,28215,28216],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28218,28219],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28221,28222],{},"docker container logs 查看容器日志",[19,28224,28225],{},"docker top 查看容器里的进程",[19,28227,28228],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[469,28230,28232],{"className":471,"code":28231,"language":473,"meta":54,"style":54},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[475,28233,28234],{"__ignoreMap":54},[478,28235,28236,28239,28242,28245],{"class":480,"line":481},[478,28237,28238],{"class":484},"如：docker",[478,28240,28241],{"class":488}," cp",[478,28243,28244],{"class":488}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[478,28246,28247],{"class":488}," \u002Fmydata\u002Fnginx\n",[19,28249,28250],{},"docker run时在启动容器的时候会有几个常用的选项：",[1702,28252,28253,28256,28259],{},[32,28254,28255],{},"-d选项：表示后台运行",[32,28257,28258],{},"-P选项：随机端口映射",[32,28260,28261],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[129,28263,28265],{"id":28264},"_53run命令的参数非常重要",[45,28266,28267],{},"5.3.run命令的参数（非常重要）",[371,28269,28270,28283],{},[374,28271,28272],{},[377,28273,28274,28277,28280],{},[380,28275,28276],{"align":382},"参数\u002F配置",[380,28278,28279],{"align":382},"功能说明",[380,28281,28282],{"align":382},"重要性与参考依据",[388,28284,28285,28296,28307,28318,28329,28340,28351,28362,28373,28384,28395,28406,28417,28428,28439],{},[377,28286,28287,28290,28293],{},[393,28288,28289],{"align":382},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[393,28291,28292],{"align":382},"指定容器名称，便于后续管理",[393,28294,28295],{"align":382},"替代随机生成的容器名。",[377,28297,28298,28301,28304],{},[393,28299,28300],{"align":382},"–gpus all",[393,28302,28303],{"align":382},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[393,28305,28306],{"align":382},"用于CUDA加速等GPU依赖任务。",[377,28308,28309,28312,28315],{},[393,28310,28311],{"align":382},"-e NVIDIA_DRIVER_CAPABILITIES=all",[393,28313,28314],{"align":382},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[393,28316,28317],{"align":382},"确保容器内GPU功能完整67。",[377,28319,28320,28323,28326],{},[393,28321,28322],{"align":382},"-dit",[393,28324,28325],{"align":382},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[393,28327,28328],{"align":382},"允许容器在后台运行并支持交互操作。",[377,28330,28331,28334,28337],{},[393,28332,28333],{"align":382},"–privileged",[393,28335,28336],{"align":382},"赋予容器完全主机权限（可访问设备、内核模块等）",[393,28338,28339],{"align":382},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[377,28341,28342,28345,28348],{},[393,28343,28344],{"align":382},"–net=host",[393,28346,28347],{"align":382},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[393,28349,28350],{"align":382},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[377,28352,28353,28356,28359],{},[393,28354,28355],{"align":382},"–group-add audio–group-add video–group-add dialout",[393,28357,28358],{"align":382},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[393,28360,28361],{"align":382},"避免权限问题（如避免无法调用摄像头、麦克风）。",[377,28363,28364,28367,28370],{},[393,28365,28366],{"align":382},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[393,28368,28369],{"align":382},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[393,28371,28372],{"align":382},"支持容器内运行图形界面应用（如OpenCV可视化）。",[377,28374,28375,28378,28381],{},[393,28376,28377],{"align":382},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[393,28379,28380],{"align":382},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[393,28382,28383],{"align":382},"实现容器内图形显示。",[377,28385,28386,28389,28392],{},[393,28387,28388],{"align":382},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[393,28390,28391],{"align":382},"挂载X11认证文件（只读）",[393,28393,28394],{"align":382},"确保容器有权连接宿主机显示服务。",[377,28396,28397,28400,28403],{},[393,28398,28399],{"align":382},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[393,28401,28402],{"align":382},"挂载Wayland显示协议相关目录",[393,28404,28405],{"align":382},"支持Wayland协议的图形显示。",[377,28407,28408,28411,28414],{},[393,28409,28410],{"align":382},"–ulimit nofile=1024:524288",[393,28412,28413],{"align":382},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[393,28415,28416],{"align":382},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[377,28418,28419,28422,28425],{},[393,28420,28421],{"align":382},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[393,28423,28424],{"align":382},"挂载宿主机用户目录到容器内同名路径",[393,28426,28427],{"align":382},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[377,28429,28430,28433,28436],{},[393,28431,28432],{"align":382},"-w \u002Fhome\u002Ftungchiahui",[393,28434,28435],{"align":382},"设置容器启动后的默认工作目录",[393,28437,28438],{"align":382},"直接进入项目路径，方便执行命令2324。",[377,28440,28441,28444,28447],{},[393,28442,28443],{"align":382},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[393,28445,28446],{"align":382},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[393,28448,28449],{"align":382},"提供预配置的深度学习与机器人开发环境。",[19,28451,28452,28453,28455,28456,28459],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[475,28454,24956],{},"加不加",[475,28457,28458],{},"sudo -E","都无所谓。",[19,28461,28462,28463,28465,28466,28468,28469,28472,28473,28475],{},"用户已经被加到docker组了，不用",[475,28464,24956],{},"也行跑，其次，",[475,28467,24956],{},"运行的话，你的",[475,28470,28471],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[475,28474,28471],{},"更不可能变了。",[469,28477,28479],{"className":471,"code":28478,"language":473,"meta":54,"style":54},"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",[475,28480,28481,28494,28504,28514,28526,28533,28540,28547,28557,28566,28575,28589,28601,28613,28622,28632,28641,28656,28689,28716,28727,28734],{"__ignoreMap":54},[478,28482,28483,28485,28487,28489,28492],{"class":480,"line":481},[478,28484,24956],{"class":484},[478,28486,26700],{"class":488},[478,28488,27610],{"class":488},[478,28490,28491],{"class":495}," --name=ros_opencv_cuda",[478,28493,25058],{"class":495},[478,28495,28496,28499,28502],{"class":480,"line":565},[478,28497,28498],{"class":714},"--gpus ",[478,28500,28501],{"class":488},"all",[478,28503,25058],{"class":495},[478,28505,28506,28509,28512],{"class":480,"line":579},[478,28507,28508],{"class":714},"-e ",[478,28510,28511],{"class":488},"NVIDIA_DRIVER_CAPABILITIES=all",[478,28513,25058],{"class":495},[478,28515,28516,28518,28521,28524],{"class":480,"line":593},[478,28517,28508],{"class":714},[478,28519,28520],{"class":488},"DISPLAY=",[478,28522,28523],{"class":714},"$DISPLAY ",[478,28525,26555],{"class":495},[478,28527,28528,28531],{"class":480,"line":1769},[478,28529,28530],{"class":714},"-dit ",[478,28532,26555],{"class":495},[478,28534,28535,28538],{"class":480,"line":1783},[478,28536,28537],{"class":714},"--privileged ",[478,28539,26555],{"class":495},[478,28541,28542,28545],{"class":480,"line":1789},[478,28543,28544],{"class":714},"--net=host ",[478,28546,26555],{"class":495},[478,28548,28549,28552,28555],{"class":480,"line":1880},[478,28550,28551],{"class":714},"--group-add ",[478,28553,28554],{"class":488},"audio",[478,28556,25058],{"class":495},[478,28558,28559,28561,28564],{"class":480,"line":1886},[478,28560,28551],{"class":714},[478,28562,28563],{"class":488},"video",[478,28565,25058],{"class":495},[478,28567,28568,28570,28573],{"class":480,"line":1898},[478,28569,28551],{"class":714},[478,28571,28572],{"class":488},"dialout",[478,28574,25058],{"class":495},[478,28576,28577,28579,28582,28584,28587],{"class":480,"line":2180},[478,28578,28508],{"class":714},[478,28580,28581],{"class":488},"XAUTHORITY=",[478,28583,28471],{"class":714},[478,28585,28586],{"class":488},"\u002F.Xauthority",[478,28588,25058],{"class":495},[478,28590,28591,28593,28596,28599],{"class":480,"line":2185},[478,28592,28508],{"class":714},[478,28594,28595],{"class":488},"WAYLAND_DISPLAY=",[478,28597,28598],{"class":714},"$WAYLAND_DISPLAY ",[478,28600,26555],{"class":495},[478,28602,28603,28605,28608,28611],{"class":480,"line":2191},[478,28604,28508],{"class":714},[478,28606,28607],{"class":488},"XDG_RUNTIME_DIR=",[478,28609,28610],{"class":714},"$XDG_RUNTIME_DIR ",[478,28612,26555],{"class":495},[478,28614,28615,28617,28620],{"class":480,"line":2196},[478,28616,28508],{"class":714},[478,28618,28619],{"class":488},"QT_QPA_PLATFORM=xcb",[478,28621,25058],{"class":495},[478,28623,28624,28627,28630],{"class":480,"line":2210},[478,28625,28626],{"class":714},"-v ",[478,28628,28629],{"class":488},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[478,28631,25058],{"class":495},[478,28633,28634,28636,28639],{"class":480,"line":2215},[478,28635,28626],{"class":714},[478,28637,28638],{"class":488},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[478,28640,25058],{"class":495},[478,28642,28643,28646,28649,28651,28654],{"class":480,"line":2221},[478,28644,28645],{"class":714},"-v $HOME",[478,28647,28648],{"class":488},"\u002F.Xauthority:",[478,28650,28471],{"class":714},[478,28652,28653],{"class":488},"\u002F.Xauthority:ro",[478,28655,25058],{"class":495},[478,28657,28658,28660,28663,28665,28668,28671,28673,28676,28678,28680,28682,28684,28687],{"class":480,"line":2241},[478,28659,28626],{"class":714},[478,28661,28662],{"class":488},"\u002Frun\u002Fuser\u002F",[478,28664,25479],{"class":714},[478,28666,28667],{"class":484},"id",[478,28669,28670],{"class":495}," -u",[478,28672,222],{"class":714},[478,28674,28675],{"class":488},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[478,28677,25479],{"class":714},[478,28679,28667],{"class":484},[478,28681,28670],{"class":495},[478,28683,222],{"class":714},[478,28685,28686],{"class":488},"\u002Fwayland-0",[478,28688,25058],{"class":495},[478,28690,28691,28693,28695,28697,28699,28701,28703,28706,28708,28710,28712,28714],{"class":480,"line":2246},[478,28692,28626],{"class":714},[478,28694,28662],{"class":488},[478,28696,25479],{"class":714},[478,28698,28667],{"class":484},[478,28700,28670],{"class":495},[478,28702,222],{"class":714},[478,28704,28705],{"class":488},":\u002Frun\u002Fuser\u002F",[478,28707,25479],{"class":714},[478,28709,28667],{"class":484},[478,28711,28670],{"class":495},[478,28713,14280],{"class":714},[478,28715,26555],{"class":495},[478,28717,28718,28720,28722,28725],{"class":480,"line":2260},[478,28719,28645],{"class":714},[478,28721,1554],{"class":488},[478,28723,28724],{"class":714},"$HOME ",[478,28726,26555],{"class":495},[478,28728,28729,28732],{"class":480,"line":2265},[478,28730,28731],{"class":714},"-w $HOME ",[478,28733,26555],{"class":495},[478,28735,28736],{"class":480,"line":2294},[478,28737,28738],{"class":714},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28740,9591],{},[29,28742,28743,28751,28754,28757],{},[32,28744,28745,201,28747,28750],{},[475,28746,28511],{},[475,28748,28749],{},"--gpus all","没有英伟达显卡请注释。",[32,28752,28753],{},"--name后面请自己为容器起名。",[32,28755,28756],{},"最后一行仓库名称请你自己找对应的镜像填上。",[32,28758,28759,28760,28765],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[183,28761,28762],{},[45,28763,28764],{},"请不要加","。",[469,28767,28769],{"className":471,"code":28768,"language":473,"meta":54,"style":54},"--ulimit nofile=1024:524288 \\\n",[475,28770,28771],{"__ignoreMap":54},[478,28772,28773,28776,28779],{"class":480,"line":481},[478,28774,28775],{"class":484},"--ulimit",[478,28777,28778],{"class":488}," nofile=1024:524288",[478,28780,25058],{"class":495},[19,28782,28783,28784,28789],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[183,28785,28786],{},[45,28787,28788],{},"不建议","**.**",[469,28791,28793],{"className":471,"code":28792,"language":473,"meta":54,"style":54},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[475,28794,28795,28822,28831],{"__ignoreMap":54},[478,28796,28797,28800,28803,28805,28807,28809,28811,28813,28815,28818,28820],{"class":480,"line":481},[478,28798,28799],{"class":484},"--user",[478,28801,28802],{"class":714}," $(",[478,28804,28667],{"class":484},[478,28806,28670],{"class":495},[478,28808,222],{"class":714},[478,28810,1554],{"class":488},[478,28812,25479],{"class":714},[478,28814,28667],{"class":484},[478,28816,28817],{"class":495}," -g",[478,28819,14280],{"class":714},[478,28821,26555],{"class":495},[478,28823,28824,28826,28829],{"class":480,"line":565},[478,28825,28626],{"class":714},[478,28827,28828],{"class":488},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[478,28830,25058],{"class":495},[478,28832,28833,28835,28838],{"class":480,"line":579},[478,28834,28626],{"class":714},[478,28836,28837],{"class":488},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[478,28839,25058],{"class":495},[617,28841,28842],{},"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":54,"searchDepth":565,"depth":565,"links":28844},[28845,28846,28847],{"id":27843,"depth":579,"text":27844},{"id":27853,"depth":579,"text":27854},{"id":28264,"depth":579,"text":28267},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27835,"description":54},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28854,"title":28855,"body":28856,"description":54,"extension":638,"meta":30479,"navigation":640,"path":30480,"seo":30481,"stem":30482,"__hash__":30483},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28857,"toc":30474},[28858,28861,28865,28868,29090,29094,29098,29101,29207,29212,29215,29220,29223,29228,29231,29236,29239,29251,29254,29259,29266,29294,29301,29377,29382,29385,29408,29410,29485,29490,29493,29497,29505,29510,29515,29519,29530,29536,29539,29542,29566,29569,29572,29600,29603,29606,30071,30074,30079,30084,30088,30111,30116,30120,30124,30127,30130,30133,30160,30163,30166,30184,30187,30190,30212,30220,30225,30230,30234,30237,30240,30243,30246,30291,30294,30312,30315,30320,30323,30344,30347,30403,30406,30411,30415,30418,30425,30428,30431,30436,30439,30455,30458,30471],[10,28859,28855],{"id":28860},"_6手动创建docker镜像",[129,28862,28864],{"id":28863},"_61dockerfile","6.1.DockerFile",[19,28866,28867],{},"常用命令：",[371,28869,28870,28881],{},[374,28871,28872],{},[377,28873,28874,28877,28879],{},[380,28875,28876],{"align":382},"指令",[380,28878,26249],{"align":382},[380,28880,27872],{"align":382},[388,28882,28883,28893,28909,28920,28931,28942,28953,28964,28975,28989,29003,29014,29028,29039,29050,29064,29079],{},[377,28884,28885,28887,28890],{},[393,28886,27750],{"align":382},[393,28888,28889],{"align":382},"指定基础镜像，是 Dockerfile 的起点",[393,28891,28892],{"align":382},"FROM ubuntu:22.04",[377,28894,28895,28898,28901],{},[393,28896,28897],{"align":382},"LABEL",[393,28899,28900],{"align":382},"添加元数据（如作者、版本等）",[393,28902,28903,28904,28908],{"align":382},"LABEL maintainer=”",[518,28905,28907],{"href":28906},"mailto:you@example.com","you@example.com","”",[377,28910,28911,28914,28917],{},[393,28912,28913],{"align":382},"ENV",[393,28915,28916],{"align":382},"设置环境变量",[393,28918,28919],{"align":382},"ENV PORT=8080",[377,28921,28922,28925,28928],{},[393,28923,28924],{"align":382},"ARG",[393,28926,28927],{"align":382},"构建参数，只在构建期间可用",[393,28929,28930],{"align":382},"ARG VERSION=1.0",[377,28932,28933,28936,28939],{},[393,28934,28935],{"align":382},"RUN",[393,28937,28938],{"align":382},"构建镜像时运行命令",[393,28940,28941],{"align":382},"RUN apt-get update && apt-get install -y curl",[377,28943,28944,28947,28950],{},[393,28945,28946],{"align":382},"COPY",[393,28948,28949],{"align":382},"复制文件到镜像中",[393,28951,28952],{"align":382},"COPY . \u002Fapp",[377,28954,28955,28958,28961],{},[393,28956,28957],{"align":382},"ADD",[393,28959,28960],{"align":382},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[393,28962,28963],{"align":382},"ADD archive.tar.gz \u002Fdata\u002F",[377,28965,28966,28969,28972],{},[393,28967,28968],{"align":382},"WORKDIR",[393,28970,28971],{"align":382},"设置工作目录",[393,28973,28974],{"align":382},"WORKDIR \u002Fopt",[377,28976,28977,28980,28983],{},[393,28978,28979],{"align":382},"CMD",[393,28981,28982],{"align":382},"设置容器启动时默认命令（可被 docker run 覆盖）",[393,28984,28985,28986],{"align":382},"CMD ",[478,28987,28988],{},"“node”, “index.js”",[377,28990,28991,28994,28997],{},[393,28992,28993],{"align":382},"ENTRYPOINT",[393,28995,28996],{"align":382},"设置容器启动时固定命令（通常用于 CLI 工具等）",[393,28998,28999,29000],{"align":382},"ENTRYPOINT ",[478,29001,29002],{},"“python3”",[377,29004,29005,29008,29011],{},[393,29006,29007],{"align":382},"EXPOSE",[393,29009,29010],{"align":382},"声明镜像内服务监听的端口（不会自动映射）",[393,29012,29013],{"align":382},"EXPOSE 80",[377,29015,29016,29019,29022],{},[393,29017,29018],{"align":382},"VOLUME",[393,29020,29021],{"align":382},"声明数据卷挂载点",[393,29023,29024,29025],{"align":382},"VOLUME ",[478,29026,29027],{},"“\u002Fdata”",[377,29029,29030,29033,29036],{},[393,29031,29032],{"align":382},"USER",[393,29034,29035],{"align":382},"设置后续命令执行的用户",[393,29037,29038],{"align":382},"USER appuser",[377,29040,29041,29044,29047],{},[393,29042,29043],{"align":382},"ONBUILD",[393,29045,29046],{"align":382},"当镜像作为其他镜像基础镜像时触发的构建指令",[393,29048,29049],{"align":382},"ONBUILD COPY . \u002Fsrc",[377,29051,29052,29055,29058],{},[393,29053,29054],{"align":382},"SHELL",[393,29056,29057],{"align":382},"更改默认 shell，比如将 sh -c 改为 bash -c",[393,29059,29060,29061],{"align":382},"SHELL ",[478,29062,29063],{},"“\u002Fbin\u002Fbash”, “-c”",[377,29065,29066,29069,29072],{},[393,29067,29068],{"align":382},"HEALTHCHECK",[393,29070,29071],{"align":382},"定义容器运行时的健康检查命令",[393,29073,29074,29075],{"align":382},"`HEALTHCHECK CMD curl –fail ",[518,29076,29077],{"href":29077,"rel":29078},"http:\u002F\u002Flocalhost:8080",[522],[377,29080,29081,29084,29087],{},[393,29082,29083],{"align":382},"STOPSIGNAL",[393,29085,29086],{"align":382},"容器停止时发送的信号",[393,29088,29089],{"align":382},"STOPSIGNAL SIGKILL",[129,29091,29093],{"id":29092},"_62自己创建容器","6.2.自己创建容器",[22563,29095,29097],{"id":29096},"_621手动创建","6.2.1.手动创建",[19,29099,29100],{},"在x86电脑上编译x86的：",[469,29102,29104],{"className":471,"code":29103,"language":473,"meta":54,"style":54},"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",[475,29105,29106,29122,29126,29139,29143,29156,29160,29173,29177,29190,29194],{"__ignoreMap":54},[478,29107,29108,29110,29113,29116,29119],{"class":480,"line":481},[478,29109,26933],{"class":484},[478,29111,29112],{"class":488}," build",[478,29114,29115],{"class":495}," -t",[478,29117,29118],{"class":488}," ros-melodic-cuda118-cudnn8-bionic:latest",[478,29120,29121],{"class":488}," .\n",[478,29123,29124],{"class":480,"line":565},[478,29125,2966],{"emptyLinePlaceholder":640},[478,29127,29128,29130,29132,29134,29137],{"class":480,"line":579},[478,29129,26933],{"class":484},[478,29131,29112],{"class":488},[478,29133,29115],{"class":495},[478,29135,29136],{"class":488}," ros-noetic-focal:latest",[478,29138,29121],{"class":488},[478,29140,29141],{"class":480,"line":593},[478,29142,2966],{"emptyLinePlaceholder":640},[478,29144,29145,29147,29149,29151,29154],{"class":480,"line":1769},[478,29146,26933],{"class":484},[478,29148,29112],{"class":488},[478,29150,29115],{"class":495},[478,29152,29153],{"class":488}," ros-humble-jammy:latest",[478,29155,29121],{"class":488},[478,29157,29158],{"class":480,"line":1783},[478,29159,2966],{"emptyLinePlaceholder":640},[478,29161,29162,29164,29166,29168,29171],{"class":480,"line":1789},[478,29163,26933],{"class":484},[478,29165,29112],{"class":488},[478,29167,29115],{"class":495},[478,29169,29170],{"class":488}," ros-jazzy-noble:latest",[478,29172,29121],{"class":488},[478,29174,29175],{"class":480,"line":1880},[478,29176,2966],{"emptyLinePlaceholder":640},[478,29178,29179,29181,29183,29185,29188],{"class":480,"line":1886},[478,29180,26933],{"class":484},[478,29182,29112],{"class":488},[478,29184,29115],{"class":495},[478,29186,29187],{"class":488}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[478,29189,29121],{"class":488},[478,29191,29192],{"class":480,"line":1898},[478,29193,2966],{"emptyLinePlaceholder":640},[478,29195,29196,29198,29200,29202,29205],{"class":480,"line":2180},[478,29197,26933],{"class":484},[478,29199,29112],{"class":488},[478,29201,29115],{"class":495},[478,29203,29204],{"class":488}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[478,29206,29121],{"class":488},[19,29208,29209],{},[52,29210],{"alt":54,"src":29211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29213,29214],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29216,29217],{},[52,29218],{"alt":54,"src":29219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29221,29222],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[29,29224,29225],{},[32,29226,29227],{},"创建 Docker Hub 账户",[19,29229,29230],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[29,29232,29233],{"start":565},[32,29234,29235],{},"登录 Docker Hub",[19,29237,29238],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[469,29240,29242],{"className":471,"code":29241,"language":473,"meta":54,"style":54},"docker login\n",[475,29243,29244],{"__ignoreMap":54},[478,29245,29246,29248],{"class":480,"line":481},[478,29247,26933],{"class":484},[478,29249,29250],{"class":488}," login\n",[19,29252,29253],{},"输入你的 Docker Hub 用户名和密码进行验证。",[29,29255,29256],{},[32,29257,29258],{},"为你的镜像打标签",[19,29260,29261,29262,29265],{},"Docker Hub 使用 ",[475,29263,29264],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[469,29267,29269],{"className":471,"code":29268,"language":473,"meta":54,"style":54},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[475,29270,29271],{"__ignoreMap":54},[478,29272,29273,29275,29278,29280,29283,29286,29289,29291],{"class":480,"line":481},[478,29274,26933],{"class":484},[478,29276,29277],{"class":488}," tag",[478,29279,29170],{"class":488},[478,29281,29282],{"class":710}," \u003C",[478,29284,29285],{"class":488},"你的用户",[478,29287,29288],{"class":714},"名",[478,29290,1655],{"class":710},[478,29292,29293],{"class":488},"\u002Fros-jazzy-noble:latest\n",[19,29295,29296,29297,29300],{},"例如，如果你的 Docker Hub 用户名是 ",[475,29298,29299],{},"tungchiahui","，你应该执行：",[469,29302,29304],{"className":471,"code":29303,"language":473,"meta":54,"style":54},"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",[475,29305,29306,29317,29321,29332,29336,29347,29351,29362,29366],{"__ignoreMap":54},[478,29307,29308,29310,29312,29314],{"class":480,"line":481},[478,29309,26933],{"class":484},[478,29311,29277],{"class":488},[478,29313,29136],{"class":488},[478,29315,29316],{"class":488}," tungchiahui\u002Fros-noetic-focal:latest\n",[478,29318,29319],{"class":480,"line":565},[478,29320,2966],{"emptyLinePlaceholder":640},[478,29322,29323,29325,29327,29329],{"class":480,"line":579},[478,29324,26933],{"class":484},[478,29326,29277],{"class":488},[478,29328,29153],{"class":488},[478,29330,29331],{"class":488}," tungchiahui\u002Fros-humble-jammy:latest\n",[478,29333,29334],{"class":480,"line":593},[478,29335,2966],{"emptyLinePlaceholder":640},[478,29337,29338,29340,29342,29344],{"class":480,"line":1769},[478,29339,26933],{"class":484},[478,29341,29277],{"class":488},[478,29343,29170],{"class":488},[478,29345,29346],{"class":488}," tungchiahui\u002Fros-jazzy-noble:latest\n",[478,29348,29349],{"class":480,"line":1783},[478,29350,2966],{"emptyLinePlaceholder":640},[478,29352,29353,29355,29357,29359],{"class":480,"line":1789},[478,29354,26933],{"class":484},[478,29356,29277],{"class":488},[478,29358,29187],{"class":488},[478,29360,29361],{"class":488}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[478,29363,29364],{"class":480,"line":1880},[478,29365,2966],{"emptyLinePlaceholder":640},[478,29367,29368,29370,29372,29374],{"class":480,"line":1886},[478,29369,26933],{"class":484},[478,29371,29277],{"class":488},[478,29373,29204],{"class":488},[478,29375,29376],{"class":488}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[29,29378,29379],{"start":565},[32,29380,29381],{},"推送镜像到 Docker Hub",[19,29383,29384],{},"使用以下命令将镜像推送到 Docker Hub：",[469,29386,29388],{"className":471,"code":29387,"language":473,"meta":54,"style":54},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[475,29389,29390],{"__ignoreMap":54},[478,29391,29392,29394,29397,29399,29401,29403,29405],{"class":480,"line":481},[478,29393,26933],{"class":484},[478,29395,29396],{"class":488}," push",[478,29398,29282],{"class":710},[478,29400,29285],{"class":488},[478,29402,29288],{"class":714},[478,29404,1655],{"class":710},[478,29406,29407],{"class":488},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29409,15198],{},[469,29411,29413],{"className":471,"code":29412,"language":473,"meta":54,"style":54},"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",[475,29414,29415,29423,29427,29435,29439,29447,29451,29460,29464,29472,29476],{"__ignoreMap":54},[478,29416,29417,29419,29421],{"class":480,"line":481},[478,29418,26933],{"class":484},[478,29420,29396],{"class":488},[478,29422,29316],{"class":488},[478,29424,29425],{"class":480,"line":565},[478,29426,2966],{"emptyLinePlaceholder":640},[478,29428,29429,29431,29433],{"class":480,"line":579},[478,29430,26933],{"class":484},[478,29432,29396],{"class":488},[478,29434,29331],{"class":488},[478,29436,29437],{"class":480,"line":593},[478,29438,2966],{"emptyLinePlaceholder":640},[478,29440,29441,29443,29445],{"class":480,"line":1769},[478,29442,26933],{"class":484},[478,29444,29396],{"class":488},[478,29446,29346],{"class":488},[478,29448,29449],{"class":480,"line":1783},[478,29450,2966],{"emptyLinePlaceholder":640},[478,29452,29453,29455,29457],{"class":480,"line":1789},[478,29454,26933],{"class":484},[478,29456,29396],{"class":488},[478,29458,29459],{"class":488}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[478,29461,29462],{"class":480,"line":1880},[478,29463,2966],{"emptyLinePlaceholder":640},[478,29465,29466,29468,29470],{"class":480,"line":1886},[478,29467,26933],{"class":484},[478,29469,29396],{"class":488},[478,29471,29376],{"class":488},[478,29473,29474],{"class":480,"line":1898},[478,29475,2966],{"emptyLinePlaceholder":640},[478,29477,29478,29480,29482],{"class":480,"line":2180},[478,29479,26933],{"class":484},[478,29481,29396],{"class":488},[478,29483,29484],{"class":488}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[29,29486,29487],{"start":579},[32,29488,29489],{},"验证推送成功",[19,29491,29492],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29494,29495],{},[45,29496,4350],{},[1702,29498,29499,29502],{},[32,29500,29501],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[32,29503,29504],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29506,29507],{},[52,29508],{"alt":54,"src":29509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29511,29512],{},[52,29513],{"alt":54,"src":29514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22563,29516,29518],{"id":29517},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29520,29521,29522,29525,29526,29529],{},"如果您想在 ",[45,29523,29524],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[45,29527,29528],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29531,29532,29533],{},"1. ",[45,29534,29535],{},"启用 Docker 跨平台构建",[19,29537,29538],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29540,29541],{},"第一步：启用 buildx（只需执行一次）",[469,29543,29545],{"className":471,"code":29544,"language":473,"meta":54,"style":54},"docker buildx create --name multiarch_builder --use\n",[475,29546,29547],{"__ignoreMap":54},[478,29548,29549,29551,29554,29557,29560,29563],{"class":480,"line":481},[478,29550,26933],{"class":484},[478,29552,29553],{"class":488}," buildx",[478,29555,29556],{"class":488}," create",[478,29558,29559],{"class":495}," --name",[478,29561,29562],{"class":488}," multiarch_builder",[478,29564,29565],{"class":495}," --use\n",[19,29567,29568],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29570,29571],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[469,29573,29575],{"className":471,"code":29574,"language":473,"meta":54,"style":54},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[475,29576,29577],{"__ignoreMap":54},[478,29578,29579,29581,29583,29585,29588,29591,29594,29597],{"class":480,"line":481},[478,29580,26933],{"class":484},[478,29582,27610],{"class":488},[478,29584,27613],{"class":495},[478,29586,29587],{"class":495}," --privileged",[478,29589,29590],{"class":488}," multiarch\u002Fqemu-user-static",[478,29592,29593],{"class":495}," --reset",[478,29595,29596],{"class":495}," -p",[478,29598,29599],{"class":488}," yes\n",[19,29601,29602],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29604,29605],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[469,29607,29609],{"className":471,"code":29608,"language":473,"meta":54,"style":54},"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",[475,29610,29611,29653,29657,29662,29672,29682,29691,29697,29701,29705,29715,29723,29732,29738,29742,29746,29756,29764,29773,29779,29783,29787,29797,29805,29814,29820,29824,29828,29838,29846,29855,29861,29865,29869,29879,29887,29896,29902,29906,29910,29920,29928,29937,29943,29947,29951,29961,29969,29978,29984,29988,29992,30002,30010,30019,30025,30029,30033,30044,30052,30061,30067],{"__ignoreMap":54},[478,29612,29613,29615,29617,29619,29622,29625,29627,29629,29632,29634,29636,29638,29640,29643,29646,29648,29651],{"class":480,"line":481},[478,29614,26933],{"class":484},[478,29616,29553],{"class":488},[478,29618,29112],{"class":488},[478,29620,29621],{"class":495}," --platform",[478,29623,29624],{"class":488}," linux\u002Famd64,linux\u002Farm64",[478,29626,29115],{"class":495},[478,29628,29282],{"class":710},[478,29630,29631],{"class":488},"你的镜像",[478,29633,29288],{"class":714},[478,29635,1655],{"class":710},[478,29637,1554],{"class":488},[478,29639,1605],{"class":710},[478,29641,29642],{"class":488},"标",[478,29644,29645],{"class":714},"签",[478,29647,1655],{"class":710},[478,29649,29650],{"class":495}," --push",[478,29652,29121],{"class":488},[478,29654,29655],{"class":480,"line":565},[478,29656,2966],{"emptyLinePlaceholder":640},[478,29658,29659],{"class":480,"line":579},[478,29660,29661],{"class":770},"# 例子：\n",[478,29663,29664,29666,29668,29670],{"class":480,"line":593},[478,29665,26933],{"class":484},[478,29667,29553],{"class":488},[478,29669,29112],{"class":488},[478,29671,25058],{"class":495},[478,29673,29674,29677,29680],{"class":480,"line":1769},[478,29675,29676],{"class":714},"--platform ",[478,29678,29679],{"class":488},"linux\u002Famd64,linux\u002Farm64",[478,29681,25058],{"class":495},[478,29683,29684,29686,29689],{"class":480,"line":1783},[478,29685,29115],{"class":495},[478,29687,29688],{"class":488}," tungchiahui\u002Fros:noetic-focal",[478,29690,25058],{"class":495},[478,29692,29693,29695],{"class":480,"line":1789},[478,29694,29650],{"class":495},[478,29696,25058],{"class":495},[478,29698,29699],{"class":480,"line":1880},[478,29700,29121],{"class":488},[478,29702,29703],{"class":480,"line":1886},[478,29704,2966],{"emptyLinePlaceholder":640},[478,29706,29707,29709,29711,29713],{"class":480,"line":1898},[478,29708,26933],{"class":484},[478,29710,29553],{"class":488},[478,29712,29112],{"class":488},[478,29714,25058],{"class":495},[478,29716,29717,29719,29721],{"class":480,"line":2180},[478,29718,29676],{"class":714},[478,29720,29679],{"class":488},[478,29722,25058],{"class":495},[478,29724,29725,29727,29730],{"class":480,"line":2185},[478,29726,29115],{"class":495},[478,29728,29729],{"class":488}," tungchiahui\u002Fros:humble-jammy",[478,29731,25058],{"class":495},[478,29733,29734,29736],{"class":480,"line":2191},[478,29735,29650],{"class":495},[478,29737,25058],{"class":495},[478,29739,29740],{"class":480,"line":2196},[478,29741,29121],{"class":488},[478,29743,29744],{"class":480,"line":2210},[478,29745,2966],{"emptyLinePlaceholder":640},[478,29747,29748,29750,29752,29754],{"class":480,"line":2215},[478,29749,26933],{"class":484},[478,29751,29553],{"class":488},[478,29753,29112],{"class":488},[478,29755,25058],{"class":495},[478,29757,29758,29760,29762],{"class":480,"line":2221},[478,29759,29676],{"class":714},[478,29761,29679],{"class":488},[478,29763,25058],{"class":495},[478,29765,29766,29768,29771],{"class":480,"line":2241},[478,29767,29115],{"class":495},[478,29769,29770],{"class":488}," tungchiahui\u002Fros:jazzy-noble",[478,29772,25058],{"class":495},[478,29774,29775,29777],{"class":480,"line":2246},[478,29776,29650],{"class":495},[478,29778,25058],{"class":495},[478,29780,29781],{"class":480,"line":2260},[478,29782,29121],{"class":488},[478,29784,29785],{"class":480,"line":2265},[478,29786,2966],{"emptyLinePlaceholder":640},[478,29788,29789,29791,29793,29795],{"class":480,"line":2294},[478,29790,26700],{"class":484},[478,29792,29553],{"class":488},[478,29794,29112],{"class":488},[478,29796,25058],{"class":495},[478,29798,29799,29801,29803],{"class":480,"line":2299},[478,29800,29676],{"class":714},[478,29802,29679],{"class":488},[478,29804,25058],{"class":495},[478,29806,29807,29809,29812],{"class":480,"line":2316},[478,29808,29115],{"class":495},[478,29810,29811],{"class":488}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[478,29813,25058],{"class":495},[478,29815,29816,29818],{"class":480,"line":2321},[478,29817,29650],{"class":495},[478,29819,25058],{"class":495},[478,29821,29822],{"class":480,"line":2326},[478,29823,29121],{"class":488},[478,29825,29826],{"class":480,"line":2331},[478,29827,2966],{"emptyLinePlaceholder":640},[478,29829,29830,29832,29834,29836],{"class":480,"line":2345},[478,29831,26933],{"class":484},[478,29833,29553],{"class":488},[478,29835,29112],{"class":488},[478,29837,25058],{"class":495},[478,29839,29840,29842,29844],{"class":480,"line":2350},[478,29841,29676],{"class":714},[478,29843,29679],{"class":488},[478,29845,25058],{"class":495},[478,29847,29848,29850,29853],{"class":480,"line":3143},[478,29849,29115],{"class":495},[478,29851,29852],{"class":488}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[478,29854,25058],{"class":495},[478,29856,29857,29859],{"class":480,"line":3157},[478,29858,29650],{"class":495},[478,29860,25058],{"class":495},[478,29862,29863],{"class":480,"line":3165},[478,29864,29121],{"class":488},[478,29866,29867],{"class":480,"line":3170},[478,29868,2966],{"emptyLinePlaceholder":640},[478,29870,29871,29873,29875,29877],{"class":480,"line":3176},[478,29872,26700],{"class":484},[478,29874,29553],{"class":488},[478,29876,29112],{"class":488},[478,29878,25058],{"class":495},[478,29880,29881,29883,29885],{"class":480,"line":3182},[478,29882,29676],{"class":714},[478,29884,29679],{"class":488},[478,29886,25058],{"class":495},[478,29888,29889,29891,29894],{"class":480,"line":3187},[478,29890,29115],{"class":495},[478,29892,29893],{"class":488}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[478,29895,25058],{"class":495},[478,29897,29898,29900],{"class":480,"line":8514},[478,29899,29650],{"class":495},[478,29901,25058],{"class":495},[478,29903,29904],{"class":480,"line":8538},[478,29905,29121],{"class":488},[478,29907,29908],{"class":480,"line":8543},[478,29909,2966],{"emptyLinePlaceholder":640},[478,29911,29912,29914,29916,29918],{"class":480,"line":8549},[478,29913,26933],{"class":484},[478,29915,29553],{"class":488},[478,29917,29112],{"class":488},[478,29919,25058],{"class":495},[478,29921,29922,29924,29926],{"class":480,"line":8576},[478,29923,29676],{"class":714},[478,29925,29679],{"class":488},[478,29927,25058],{"class":495},[478,29929,29930,29932,29935],{"class":480,"line":8581},[478,29931,29115],{"class":495},[478,29933,29934],{"class":488}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[478,29936,25058],{"class":495},[478,29938,29939,29941],{"class":480,"line":8587},[478,29940,29650],{"class":495},[478,29942,25058],{"class":495},[478,29944,29945],{"class":480,"line":8599},[478,29946,29121],{"class":488},[478,29948,29949],{"class":480,"line":8611},[478,29950,2966],{"emptyLinePlaceholder":640},[478,29952,29953,29955,29957,29959],{"class":480,"line":8623},[478,29954,26933],{"class":484},[478,29956,29553],{"class":488},[478,29958,29112],{"class":488},[478,29960,25058],{"class":495},[478,29962,29963,29965,29967],{"class":480,"line":10282},[478,29964,29676],{"class":714},[478,29966,29679],{"class":488},[478,29968,25058],{"class":495},[478,29970,29971,29973,29976],{"class":480,"line":10307},[478,29972,29115],{"class":495},[478,29974,29975],{"class":488}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[478,29977,25058],{"class":495},[478,29979,29980,29982],{"class":480,"line":10330},[478,29981,29650],{"class":495},[478,29983,25058],{"class":495},[478,29985,29986],{"class":480,"line":10354},[478,29987,29121],{"class":488},[478,29989,29990],{"class":480,"line":10359},[478,29991,2966],{"emptyLinePlaceholder":640},[478,29993,29994,29996,29998,30000],{"class":480,"line":10364},[478,29995,26700],{"class":484},[478,29997,29553],{"class":488},[478,29999,29112],{"class":488},[478,30001,25058],{"class":495},[478,30003,30004,30006,30008],{"class":480,"line":10369},[478,30005,29676],{"class":714},[478,30007,29679],{"class":488},[478,30009,25058],{"class":495},[478,30011,30012,30014,30017],{"class":480,"line":10378},[478,30013,29115],{"class":495},[478,30015,30016],{"class":488}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[478,30018,25058],{"class":495},[478,30020,30021,30023],{"class":480,"line":10383},[478,30022,29650],{"class":495},[478,30024,25058],{"class":495},[478,30026,30027],{"class":480,"line":10389},[478,30028,29121],{"class":488},[478,30030,30031],{"class":480,"line":10410},[478,30032,2966],{"emptyLinePlaceholder":640},[478,30034,30035,30038,30040,30042],{"class":480,"line":10416},[478,30036,30037],{"class":484},"  docker",[478,30039,29553],{"class":488},[478,30041,29112],{"class":488},[478,30043,25058],{"class":495},[478,30045,30046,30048,30050],{"class":480,"line":10430},[478,30047,29676],{"class":714},[478,30049,29679],{"class":488},[478,30051,25058],{"class":495},[478,30053,30054,30056,30059],{"class":480,"line":10436},[478,30055,29115],{"class":495},[478,30057,30058],{"class":488}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[478,30060,25058],{"class":495},[478,30062,30063,30065],{"class":480,"line":10463},[478,30064,29650],{"class":495},[478,30066,25058],{"class":495},[478,30068,30069],{"class":480,"line":10472},[478,30070,29121],{"class":488},[19,30072,30073],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30075,30076],{},[52,30077],{"alt":54,"src":30078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30080,30081],{},[52,30082],{"alt":54,"src":30083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22563,30085,30087],{"id":30086},"_623清除构建缓存","6.2.3.清除构建缓存",[469,30089,30091],{"className":471,"code":30090,"language":473,"meta":54,"style":54},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[475,30092,30093,30098],{"__ignoreMap":54},[478,30094,30095],{"class":480,"line":481},[478,30096,30097],{"class":770},"# 清理BuildKit构建缓存\n",[478,30099,30100,30102,30105,30108],{"class":480,"line":565},[478,30101,26933],{"class":484},[478,30103,30104],{"class":488}," builder",[478,30106,30107],{"class":488}," prune",[478,30109,30110],{"class":495}," -f\n",[19,30112,30113],{},[52,30114],{"alt":54,"src":30115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[129,30117,30119],{"id":30118},"_63补充","6.3.补充",[22563,30121,30123],{"id":30122},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30125,30126],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30128,30129],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30131,30132],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[469,30134,30136],{"className":471,"code":30135,"language":473,"meta":54,"style":54},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[475,30137,30138,30145],{"__ignoreMap":54},[478,30139,30140,30142],{"class":480,"line":481},[478,30141,27750],{"class":484},[478,30143,30144],{"class":488}," nginx\n",[478,30146,30147,30149,30152,30155,30157],{"class":480,"line":565},[478,30148,28935],{"class":484},[478,30150,30151],{"class":488}," echo",[478,30153,30154],{"class":488}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[478,30156,26602],{"class":710},[478,30158,30159],{"class":488}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30161,30162],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30164,30165],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[469,30167,30169],{"className":471,"code":30168,"language":473,"meta":54,"style":54},"docker build -t nginx:tuling .\n",[475,30170,30171],{"__ignoreMap":54},[478,30172,30173,30175,30177,30179,30182],{"class":480,"line":481},[478,30174,26933],{"class":484},[478,30176,29112],{"class":488},[478,30178,29115],{"class":495},[478,30180,30181],{"class":488}," nginx:tuling",[478,30183,29121],{"class":488},[19,30185,30186],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30188,30189],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[469,30191,30193],{"className":471,"code":30192,"language":473,"meta":54,"style":54},"docker run -d -p 92:80 nginx:tuling\n",[475,30194,30195],{"__ignoreMap":54},[478,30196,30197,30199,30201,30204,30206,30209],{"class":480,"line":481},[478,30198,26933],{"class":484},[478,30200,27610],{"class":488},[478,30202,30203],{"class":495}," -d",[478,30205,29596],{"class":495},[478,30207,30208],{"class":488}," 92:80",[478,30210,30211],{"class":488}," nginx:tuling\n",[19,30213,30214,30215],{},"4、访问 ",[518,30216,30219],{"href":30217,"rel":30218},"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",[522],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30221,30222],{},[52,30223],{"alt":54,"src":30224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30226,30227],{},[52,30228],{"alt":54,"src":30229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22563,30231,30233],{"id":30232},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30235,30236],{},"只需要知道大体流程即可",[19,30238,30239],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30241,30242],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30244,30245],{},"2、在Dockerfile中添加以下内容",[469,30247,30249],{"className":26471,"code":30248,"language":26473,"meta":54,"style":54},"# 基于哪个镜像\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",[475,30250,30251,30256,30261,30266,30271,30276,30281,30286],{"__ignoreMap":54},[478,30252,30253],{"class":480,"line":481},[478,30254,30255],{},"# 基于哪个镜像\n",[478,30257,30258],{"class":480,"line":565},[478,30259,30260],{},"From java:8\n",[478,30262,30263],{"class":480,"line":579},[478,30264,30265],{},"# 复制文件到容器\n",[478,30267,30268],{"class":480,"line":593},[478,30269,30270],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[478,30272,30273],{"class":480,"line":1769},[478,30274,30275],{},"# 声明需要暴露的端口\n",[478,30277,30278],{"class":480,"line":1783},[478,30279,30280],{},"EXPOSE 8877\n",[478,30282,30283],{"class":480,"line":1789},[478,30284,30285],{},"# 配置容器启动后执行的命令\n",[478,30287,30288],{"class":480,"line":1880},[478,30289,30290],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30292,30293],{},"3、使用docker build命令构建镜像",[469,30295,30297],{"className":471,"code":30296,"language":473,"meta":54,"style":54},"docker build -t tulingmall-member:0.0.5 .\n",[475,30298,30299],{"__ignoreMap":54},[478,30300,30301,30303,30305,30307,30310],{"class":480,"line":481},[478,30302,26933],{"class":484},[478,30304,29112],{"class":488},[478,30306,29115],{"class":495},[478,30308,30309],{"class":488}," tulingmall-member:0.0.5",[478,30311,29121],{"class":488},[19,30313,30314],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30316,30317],{},[52,30318],{"alt":54,"src":30319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30321,30322],{},"4、启动镜像，加-d可在后台启动",[469,30324,30326],{"className":471,"code":30325,"language":473,"meta":54,"style":54},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[475,30327,30328],{"__ignoreMap":54},[478,30329,30330,30332,30334,30336,30338,30341],{"class":480,"line":481},[478,30331,26933],{"class":484},[478,30333,27610],{"class":488},[478,30335,30203],{"class":495},[478,30337,29596],{"class":495},[478,30339,30340],{"class":488}," 8877:8877",[478,30342,30343],{"class":488}," tulingmall-member:0.0.5\n",[19,30345,30346],{},"加上JVM参数：",[469,30348,30350],{"className":471,"code":30349,"language":473,"meta":54,"style":54},"# --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",[475,30351,30352,30357,30372,30382,30391,30398],{"__ignoreMap":54},[478,30353,30354],{"class":480,"line":481},[478,30355,30356],{"class":770},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[478,30358,30359,30361,30363,30366,30368,30370],{"class":480,"line":565},[478,30360,26933],{"class":484},[478,30362,27610],{"class":488},[478,30364,30365],{"class":495},"  -d",[478,30367,29596],{"class":495},[478,30369,30340],{"class":488},[478,30371,25058],{"class":495},[478,30373,30374,30376,30379],{"class":480,"line":579},[478,30375,28508],{"class":714},[478,30377,30378],{"class":488},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[478,30380,30381],{"class":495},"  \\\n",[478,30383,30384,30386,30389],{"class":480,"line":593},[478,30385,28508],{"class":714},[478,30387,30388],{"class":488},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[478,30390,30381],{"class":495},[478,30392,30393,30396],{"class":480,"line":1769},[478,30394,30395],{"class":714},"--cap-add=SYS_PTRACE  ",[478,30397,26555],{"class":495},[478,30399,30400],{"class":480,"line":1783},[478,30401,30402],{"class":714},"tulingmall-member:0.0.5\n",[19,30404,30405],{},"5、访问会员服务接口",[19,30407,30408],{},[52,30409],{"alt":54,"src":30410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22563,30412,30414],{"id":30413},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30416,30417],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30419,30420,30421],{},"阿里云docker镜像仓库：",[518,30422,30423],{"href":30423,"rel":30424},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[522],[19,30426,30427],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30429,30430],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30432,30433],{},[52,30434],{"alt":54,"src":30435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30437,30438],{},"要把镜像推送到镜像仓库",[469,30440,30442],{"className":471,"code":30441,"language":473,"meta":54,"style":54},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[475,30443,30444],{"__ignoreMap":54},[478,30445,30446,30448,30450,30452],{"class":480,"line":481},[478,30447,26933],{"class":484},[478,30449,29277],{"class":488},[478,30451,30309],{"class":488},[478,30453,30454],{"class":488}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30456,30457],{},"最后将镜像推送到远程仓库",[469,30459,30461],{"className":471,"code":30460,"language":473,"meta":54,"style":54},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[475,30462,30463],{"__ignoreMap":54},[478,30464,30465,30467,30469],{"class":480,"line":481},[478,30466,26933],{"class":484},[478,30468,29396],{"class":488},[478,30470,30454],{"class":488},[617,30472,30473],{},"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":54,"searchDepth":565,"depth":565,"links":30475},[30476,30477,30478],{"id":28863,"depth":579,"text":28864},{"id":29092,"depth":579,"text":29093},{"id":30118,"depth":579,"text":30119},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28855,"description":54},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30485,"title":30486,"body":30487,"description":54,"extension":638,"meta":30630,"navigation":640,"path":30631,"seo":30632,"stem":30633,"__hash__":30634},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30488,"toc":30628},[30489,30492,30497,30502,30505,30510,30515,30518,30523,30528,30531,30536,30539,30542,30545,30548,30551,30554,30574,30596,30599,30602,30622,30625],[10,30490,30486],{"id":30491},"_7vscode远程开发",[29,30493,30494],{},[32,30495,30496],{},"插件1：微软Docker工具",[19,30498,30499],{},[52,30500],{"alt":54,"src":30501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30503,30504],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30506,30507],{},[52,30508],{"alt":54,"src":30509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[29,30511,30512],{"start":565},[32,30513,30514],{},"插件2：微软Docker远程开发工具",[19,30516,30517],{},"下面这是远程开发的插件。",[19,30519,30520],{},[52,30521],{"alt":54,"src":30522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30524,30525],{},[52,30526],{"alt":54,"src":30527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30529,30530],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30532,30533],{},[52,30534],{"alt":54,"src":30535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30537,30538],{},"安装完拓展之后，vscode进行链接：",[19,30540,30541],{},"1.按ctrl+shift+p",[19,30543,30544],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30546,30547],{},"3.选择目前运行的容器",[19,30549,30550],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30552,30553],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[469,30555,30557],{"className":471,"code":30556,"language":473,"meta":54,"style":54},"docker run -v 主机目录:容器目录 image-name\n",[475,30558,30559],{"__ignoreMap":54},[478,30560,30561,30563,30565,30568,30571],{"class":480,"line":481},[478,30562,26933],{"class":484},[478,30564,27610],{"class":488},[478,30566,30567],{"class":495}," -v",[478,30569,30570],{"class":488}," 主机目录:容器目录",[478,30572,30573],{"class":488}," image-name\n",[469,30575,30577],{"className":471,"code":30576,"language":473,"meta":54,"style":54},"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",[475,30578,30579],{"__ignoreMap":54},[478,30580,30581,30583,30585,30588,30590,30593],{"class":480,"line":481},[478,30582,26933],{"class":484},[478,30584,27610],{"class":488},[478,30586,30587],{"class":495}," -it",[478,30589,30567],{"class":495},[478,30591,30592],{"class":488}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[478,30594,30595],{"class":488}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30597,30598],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30600,30601],{},"查看挂载情况：",[469,30603,30605],{"className":471,"code":30604,"language":473,"meta":54,"style":54},"mount | grep -i project\n",[475,30606,30607],{"__ignoreMap":54},[478,30608,30609,30612,30614,30617,30619],{"class":480,"line":481},[478,30610,30611],{"class":484},"mount",[478,30613,25489],{"class":710},[478,30615,30616],{"class":484}," grep",[478,30618,26810],{"class":495},[478,30620,30621],{"class":488}," project\n",[19,30623,30624],{},"也可以通过ls来进行查看",[617,30626,30627],{},"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":54,"searchDepth":565,"depth":565,"links":30629},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30486,"description":54},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30636,"title":30637,"body":30638,"description":23942,"extension":638,"meta":30642,"navigation":640,"path":30644,"seo":30645,"stem":30646,"__hash__":30647},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30639,"toc":30640},[],{"title":54,"searchDepth":565,"depth":565,"links":30641},[],{"category":30643},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30637,"description":23942},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30649,"title":30650,"body":30651,"description":23942,"extension":638,"meta":30655,"navigation":640,"path":30656,"seo":30657,"stem":30658,"__hash__":30659},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30652,"toc":30653},[],{"title":54,"searchDepth":565,"depth":565,"links":30654},[],{"category":30643},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30650,"description":23942},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30661,"title":30662,"body":30663,"description":23942,"extension":638,"meta":30956,"navigation":640,"path":30957,"seo":30958,"stem":30959,"__hash__":30960},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30664,"toc":30954},[30665,30668,30676,30691,30696,30747,30750,30756,30943,30948,30951],[10,30666,30662],{"id":30667},"_1验证深度学习环境",[19,30669,30670,30671],{},"关于环境的安装，看",[518,30672,30675],{"href":30673,"rel":30674},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[522],"Pytorch-->深度学习",[19,30677,30678,30679,30682,30683,30686,30687,30690],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[475,30680,30681],{},"pytorch-cuda=12.4"," 是一个“ ",[45,30684,30685],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[45,30688,30689],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30692,30693],{},[52,30694],{"alt":54,"src":30695},"\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",[469,30697,30699],{"className":471,"code":30698,"language":473,"meta":54,"style":54},"# 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",[475,30700,30701,30706],{"__ignoreMap":54},[478,30702,30703],{"class":480,"line":481},[478,30704,30705],{"class":770},"# CUDA 12.4\n",[478,30707,30708,30711,30713,30716,30719,30722,30725,30728,30730,30733,30736,30739,30742,30744],{"class":480,"line":565},[478,30709,30710],{"class":484},"conda",[478,30712,489],{"class":488},[478,30714,30715],{"class":488}," pytorch==",[478,30717,30718],{"class":495},"2.5.1",[478,30720,30721],{"class":488}," torchvision==",[478,30723,30724],{"class":495},"0.20.1",[478,30726,30727],{"class":488}," torchaudio==",[478,30729,30718],{"class":495},[478,30731,30732],{"class":488}," pytorch-cuda=",[478,30734,30735],{"class":495},"12.4",[478,30737,30738],{"class":495}," -c",[478,30740,30741],{"class":488}," pytorch",[478,30743,30738],{"class":495},[478,30745,30746],{"class":488}," nvidia\n",[19,30748,30749],{},"）：",[19,30751,30752],{},[518,30753,30754],{"href":30754,"rel":30755},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[522],[469,30757,30761],{"className":30758,"code":30759,"language":30760,"meta":54,"style":54},"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",[475,30762,30763,30768,30776,30781,30791,30807,30812,30822,30859,30866,30878,30894,30899,30909,30921,30931],{"__ignoreMap":54},[478,30764,30765],{"class":480,"line":481},[478,30766,30767],{"class":770},"# 对深度学习环境进行测试\n",[478,30769,30770,30773],{"class":480,"line":565},[478,30771,30772],{"class":710},"import",[478,30774,30775],{"class":714}," torch\n",[478,30777,30778],{"class":480,"line":579},[478,30779,30780],{"class":770},"# 查看cuda是否被激活\n",[478,30782,30783,30786,30788],{"class":480,"line":593},[478,30784,30785],{"class":714},"flag",[478,30787,759],{"class":710},[478,30789,30790],{"class":714},"torch.cuda.is_available()\n",[478,30792,30793,30796,30798,30801,30804],{"class":480,"line":1769},[478,30794,30795],{"class":495},"print",[478,30797,263],{"class":714},[478,30799,30800],{"class":488},"\"cuda:\"",[478,30802,30803],{"class":714},", flag)   ",[478,30805,30806],{"class":770},"#返回true的话说明被激活\n",[478,30808,30809],{"class":480,"line":1783},[478,30810,30811],{"class":770},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[478,30813,30814,30817,30819],{"class":480,"line":1789},[478,30815,30816],{"class":714},"ngpu",[478,30818,759],{"class":710},[478,30820,30821],{"class":495},"1\n",[478,30823,30824,30827,30829,30832,30835,30837,30840,30843,30846,30848,30850,30852,30854,30857],{"class":480,"line":1880},[478,30825,30826],{"class":714},"device",[478,30828,759],{"class":710},[478,30830,30831],{"class":714},"torch.device(",[478,30833,30834],{"class":488},"\"cuda:0\"",[478,30836,2271],{"class":710},[478,30838,30839],{"class":714},"(torch.cuda.is_available() ",[478,30841,30842],{"class":710},"and",[478,30844,30845],{"class":714}," ngpu",[478,30847,1655],{"class":710},[478,30849,895],{"class":495},[478,30851,14280],{"class":714},[478,30853,2268],{"class":710},[478,30855,30856],{"class":488}," \"cpu\"",[478,30858,720],{"class":714},[478,30860,30861,30863],{"class":480,"line":1886},[478,30862,30795],{"class":495},[478,30864,30865],{"class":714},"(device)\n",[478,30867,30868,30870,30873,30875],{"class":480,"line":1898},[478,30869,30795],{"class":495},[478,30871,30872],{"class":714},"(torch.cuda.get_device_name(",[478,30874,895],{"class":495},[478,30876,30877],{"class":714},"))\n",[478,30879,30880,30882,30885,30887,30889,30891],{"class":480,"line":2180},[478,30881,30795],{"class":495},[478,30883,30884],{"class":714},"(torch.rand(",[478,30886,783],{"class":495},[478,30888,1079],{"class":714},[478,30890,783],{"class":495},[478,30892,30893],{"class":714},").cuda())\n",[478,30895,30896],{"class":480,"line":2185},[478,30897,30898],{"class":770},"# 查看cuda和cudnn的版本\n",[478,30900,30901,30904,30906],{"class":480,"line":2191},[478,30902,30903],{"class":714},"cuda_version",[478,30905,759],{"class":710},[478,30907,30908],{"class":714},"torch.version.cuda\n",[478,30910,30911,30913,30915,30918],{"class":480,"line":2196},[478,30912,30795],{"class":495},[478,30914,263],{"class":714},[478,30916,30917],{"class":488},"\"cuda version\"",[478,30919,30920],{"class":714},",cuda_version)\n",[478,30922,30923,30926,30928],{"class":480,"line":2210},[478,30924,30925],{"class":714},"cudnn_version",[478,30927,759],{"class":710},[478,30929,30930],{"class":714},"torch.backends.cudnn.version()\n",[478,30932,30933,30935,30937,30940],{"class":480,"line":2215},[478,30934,30795],{"class":495},[478,30936,263],{"class":714},[478,30938,30939],{"class":488},"\"cudnn version\"",[478,30941,30942],{"class":714},",cudnn_version)\n",[19,30944,30945],{},[52,30946],{"alt":54,"src":30947},"\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,30949,30950],{},"cuda:0 指的是一块显卡",[617,30952,30953],{},"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":54,"searchDepth":565,"depth":565,"links":30955},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30662,"description":23942},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30962,"title":30963,"body":30964,"description":23942,"extension":638,"meta":50768,"navigation":640,"path":50769,"seo":50770,"stem":50771,"__hash__":50772},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30965,"toc":50762},[30966,30969,30973,30977,30980,30985,30990,30993,30998,31003,31008,31011,31015,31020,31024,31029,31032,31037,31040,31043,31046,31049,31054,31057,31062,31067,31072,31077,31080,31084,31087,31092,31696,31701,31704,31709,31712,31715,32179,32182,32185,32188,32191,34242,34245,34250,34255,35050,35053,35058,35836,35840,37499,37503,38217,38221,38225,38230,38235,38240,38243,38248,38253,38258,38263,38268,38272,38277,39559,39564,39567,39570,39573,39728,39731,39734,40950,40955,41650,41654,41658,41663,41668,41671,41676,41681,41686,41691,41696,41701,41706,41711,41716,41721,41726,41731,41736,41741,41746,41751,41756,41761,41766,41771,41776,41781,41786,41791,41796,41801,41806,41811,41816,41821,41825,41829,41832,43310,43314,44961,44965,45659,45663,45666,45669,46213,46216,46220,46223,47620,47624,47627,48205,49992,49996,49999,50759],[10,30967,30963],{"id":30968},"_2经典神经网络",[129,30970,30972],{"id":30971},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22563,30974,30976],{"id":30975},"_211原理介绍","2.1.1.原理介绍",[19,30978,30979],{},"LeNet-5",[29,30981,30982],{},[32,30983,30984],{},"原理",[19,30986,30987],{},[52,30988],{"alt":54,"src":30989},"\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,30991,30992],{},"B是batch批次；C是channel通道",[29,30994,30995],{"start":565},[32,30996,30997],{},"网络参数详细",[19,30999,31000],{},[52,31001],{"alt":54,"src":31002},"\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,31004,31005],{},[52,31006],{"alt":54,"src":31007},"\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,31009,31010],{},"AlexNet",[29,31012,31013],{},[32,31014,30984],{},[19,31016,31017],{},[52,31018],{"alt":54,"src":31019},"\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",[29,31021,31022],{"start":565},[32,31023,30997],{},[19,31025,31026],{},[52,31027],{"alt":54,"src":31028},"\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,31030,31031],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31033,31034],{},[52,31035],{"alt":54,"src":31036},"\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,31038,31039],{},"数据处理中的图像增强操作:",[19,31041,31042],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31044,31045],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31047,31048],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31050,31051],{},[52,31052],{"alt":54,"src":31053},"\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,31055,31056],{},"提升网络精确度的方法：LRN正则化",[19,31058,31059],{},[52,31060],{"alt":54,"src":31061},"\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,31063,31064],{},[52,31065],{"alt":54,"src":31066},"\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",[29,31068,31069],{"start":579},[32,31070,31071],{},"AlexNet的总结",[19,31073,31074],{},[52,31075],{"alt":54,"src":31076},"\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,31078,31079],{},"比LeNet模型要深一丢丢",[22563,31081,31083],{"id":31082},"_212代码实现","2.1.2.代码实现",[19,31085,31086],{},"（1）LeNet",[29,31088,31089],{},[32,31090,31091],{},"模型搭建",[469,31093,31095],{"className":30758,"code":31094,"language":30760,"meta":54,"style":54},"# 导入库\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",[475,31096,31097,31102,31108,31113,31126,31131,31143,31147,31167,31172,31177,31188,31193,31212,31216,31221,31270,31282,31287,31316,31351,31378,31383,31395,31400,31420,31439,31458,31462,31467,31477,31494,31505,31520,31531,31542,31557,31572,31583,31590,31594,31608,31613,31636,31641,31646,31651,31655,31660,31665,31675],{"__ignoreMap":54},[478,31098,31099],{"class":480,"line":481},[478,31100,31101],{"class":770},"# 导入库\n",[478,31103,31104,31106],{"class":480,"line":565},[478,31105,30772],{"class":710},[478,31107,30775],{"class":714},[478,31109,31110],{"class":480,"line":579},[478,31111,31112],{"class":770},"# 导入神经网络层\n",[478,31114,31115,31118,31121,31123],{"class":480,"line":593},[478,31116,31117],{"class":710},"from",[478,31119,31120],{"class":714}," torch ",[478,31122,30772],{"class":710},[478,31124,31125],{"class":714}," nn\n",[478,31127,31128],{"class":480,"line":1769},[478,31129,31130],{"class":770},"# 导入展示神经网络参数的包\n",[478,31132,31133,31135,31138,31140],{"class":480,"line":1783},[478,31134,31117],{"class":710},[478,31136,31137],{"class":714}," torchsummary ",[478,31139,30772],{"class":710},[478,31141,31142],{"class":714}," summary\n",[478,31144,31145],{"class":480,"line":1789},[478,31146,2966],{"emptyLinePlaceholder":640},[478,31148,31149,31151,31154,31156,31159,31161,31164],{"class":480,"line":1880},[478,31150,15259],{"class":710},[478,31152,31153],{"class":484}," LeNet",[478,31155,263],{"class":714},[478,31157,31158],{"class":484},"nn",[478,31160,1258],{"class":714},[478,31162,31163],{"class":484},"Module",[478,31165,31166],{"class":714},"):\n",[478,31168,31169],{"class":480,"line":1886},[478,31170,31171],{"class":770},"    # 模型初始化:\n",[478,31173,31174],{"class":480,"line":1898},[478,31175,31176],{"class":770},"    # 定义一些网络层和激活函数\n",[478,31178,31179,31182,31185],{"class":480,"line":2180},[478,31180,31181],{"class":710},"    def",[478,31183,31184],{"class":495}," __init__",[478,31186,31187],{"class":714},"(self):\n",[478,31189,31190],{"class":480,"line":2185},[478,31191,31192],{"class":770},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[478,31194,31195,31198,31201,31204,31207,31210],{"class":480,"line":2191},[478,31196,31197],{"class":495},"        super",[478,31199,31200],{"class":714},"(LeNet,",[478,31202,31203],{"class":495},"self",[478,31205,31206],{"class":714},").",[478,31208,31209],{"class":495},"__init__",[478,31211,2542],{"class":714},[478,31213,31214],{"class":480,"line":2196},[478,31215,2966],{"emptyLinePlaceholder":640},[478,31217,31218],{"class":480,"line":2210},[478,31219,31220],{"class":770},"        # 定义网络层\n",[478,31222,31223,31226,31229,31231,31234,31237,31239,31241,31243,31246,31248,31250,31252,31255,31257,31259,31261,31264,31266,31268],{"class":480,"line":2215},[478,31224,31225],{"class":495},"        self",[478,31227,31228],{"class":714},".c1",[478,31230,759],{"class":710},[478,31232,31233],{"class":714},"nn.Conv2d(",[478,31235,31236],{"class":5782},"in_channels",[478,31238,759],{"class":710},[478,31240,193],{"class":495},[478,31242,1079],{"class":714},[478,31244,31245],{"class":5782},"out_channels",[478,31247,759],{"class":710},[478,31249,1045],{"class":495},[478,31251,1079],{"class":714},[478,31253,31254],{"class":5782},"kernel_size",[478,31256,759],{"class":710},[478,31258,1020],{"class":495},[478,31260,1079],{"class":714},[478,31262,31263],{"class":5782},"padding",[478,31265,759],{"class":710},[478,31267,789],{"class":495},[478,31269,720],{"class":714},[478,31271,31272,31274,31277,31279],{"class":480,"line":2221},[478,31273,31225],{"class":495},[478,31275,31276],{"class":714},".sig",[478,31278,759],{"class":710},[478,31280,31281],{"class":714},"nn.Sigmoid()\n",[478,31283,31284],{"class":480,"line":2241},[478,31285,31286],{"class":770},"        # 定义池化\n",[478,31288,31289,31291,31294,31296,31299,31301,31303,31305,31307,31310,31312,31314],{"class":480,"line":2246},[478,31290,31225],{"class":495},[478,31292,31293],{"class":714},".s2",[478,31295,759],{"class":710},[478,31297,31298],{"class":714},"nn.AvgPool2d(",[478,31300,31254],{"class":5782},[478,31302,759],{"class":710},[478,31304,789],{"class":495},[478,31306,1079],{"class":714},[478,31308,31309],{"class":5782},"stride",[478,31311,759],{"class":710},[478,31313,789],{"class":495},[478,31315,720],{"class":714},[478,31317,31318,31320,31323,31325,31327,31329,31331,31333,31335,31337,31339,31341,31343,31345,31347,31349],{"class":480,"line":2260},[478,31319,31225],{"class":495},[478,31321,31322],{"class":714},".c3",[478,31324,759],{"class":710},[478,31326,31233],{"class":714},[478,31328,31236],{"class":5782},[478,31330,759],{"class":710},[478,31332,1045],{"class":495},[478,31334,1079],{"class":714},[478,31336,31245],{"class":5782},[478,31338,759],{"class":710},[478,31340,1299],{"class":495},[478,31342,1079],{"class":714},[478,31344,31254],{"class":5782},[478,31346,759],{"class":710},[478,31348,1020],{"class":495},[478,31350,720],{"class":714},[478,31352,31353,31355,31358,31360,31362,31364,31366,31368,31370,31372,31374,31376],{"class":480,"line":2265},[478,31354,31225],{"class":495},[478,31356,31357],{"class":714},".s4",[478,31359,759],{"class":710},[478,31361,31298],{"class":714},[478,31363,31254],{"class":5782},[478,31365,759],{"class":710},[478,31367,789],{"class":495},[478,31369,1079],{"class":714},[478,31371,31309],{"class":5782},[478,31373,759],{"class":710},[478,31375,789],{"class":495},[478,31377,720],{"class":714},[478,31379,31380],{"class":480,"line":2294},[478,31381,31382],{"class":770},"        # 定义平展层\n",[478,31384,31385,31387,31390,31392],{"class":480,"line":2299},[478,31386,31225],{"class":495},[478,31388,31389],{"class":714},".flatten",[478,31391,759],{"class":710},[478,31393,31394],{"class":714},"nn.Flatten()\n",[478,31396,31397],{"class":480,"line":2316},[478,31398,31399],{"class":770},"        # 定义全连接层\n",[478,31401,31402,31404,31407,31409,31412,31414,31416,31418],{"class":480,"line":2321},[478,31403,31225],{"class":495},[478,31405,31406],{"class":714},".f5",[478,31408,759],{"class":710},[478,31410,31411],{"class":714},"nn.Linear(",[478,31413,4553],{"class":495},[478,31415,1079],{"class":714},[478,31417,1512],{"class":495},[478,31419,720],{"class":714},[478,31421,31422,31424,31427,31429,31431,31433,31435,31437],{"class":480,"line":2326},[478,31423,31225],{"class":495},[478,31425,31426],{"class":714},".f6",[478,31428,759],{"class":710},[478,31430,31411],{"class":714},[478,31432,1512],{"class":495},[478,31434,1079],{"class":714},[478,31436,1407],{"class":495},[478,31438,720],{"class":714},[478,31440,31441,31443,31446,31448,31450,31452,31454,31456],{"class":480,"line":2331},[478,31442,31225],{"class":495},[478,31444,31445],{"class":714},".f7",[478,31447,759],{"class":710},[478,31449,31411],{"class":714},[478,31451,1407],{"class":495},[478,31453,1079],{"class":714},[478,31455,1146],{"class":495},[478,31457,720],{"class":714},[478,31459,31460],{"class":480,"line":2345},[478,31461,2966],{"emptyLinePlaceholder":640},[478,31463,31464],{"class":480,"line":2350},[478,31465,31466],{"class":770},"    # 写工具->写前向传播\n",[478,31468,31469,31471,31474],{"class":480,"line":3143},[478,31470,31181],{"class":710},[478,31472,31473],{"class":484}," forward",[478,31475,31476],{"class":714},"(self,x):\n",[478,31478,31479,31482,31484,31486,31489,31491],{"class":480,"line":3157},[478,31480,31481],{"class":714},"        x",[478,31483,759],{"class":710},[478,31485,31203],{"class":495},[478,31487,31488],{"class":714},".sig(",[478,31490,31203],{"class":495},[478,31492,31493],{"class":714},".c1(x))\n",[478,31495,31496,31498,31500,31502],{"class":480,"line":3165},[478,31497,31481],{"class":714},[478,31499,759],{"class":710},[478,31501,31203],{"class":495},[478,31503,31504],{"class":714},".s2(x)\n",[478,31506,31507,31509,31511,31513,31515,31517],{"class":480,"line":3170},[478,31508,31481],{"class":714},[478,31510,759],{"class":710},[478,31512,31203],{"class":495},[478,31514,31488],{"class":714},[478,31516,31203],{"class":495},[478,31518,31519],{"class":714},".c3(x))\n",[478,31521,31522,31524,31526,31528],{"class":480,"line":3176},[478,31523,31481],{"class":714},[478,31525,759],{"class":710},[478,31527,31203],{"class":495},[478,31529,31530],{"class":714},".s4(x)\n",[478,31532,31533,31535,31537,31539],{"class":480,"line":3182},[478,31534,31481],{"class":714},[478,31536,759],{"class":710},[478,31538,31203],{"class":495},[478,31540,31541],{"class":714},".flatten(x)\n",[478,31543,31544,31546,31548,31550,31552,31554],{"class":480,"line":3187},[478,31545,31481],{"class":714},[478,31547,759],{"class":710},[478,31549,31203],{"class":495},[478,31551,31488],{"class":714},[478,31553,31203],{"class":495},[478,31555,31556],{"class":714},".f5(x))\n",[478,31558,31559,31561,31563,31565,31567,31569],{"class":480,"line":8514},[478,31560,31481],{"class":714},[478,31562,759],{"class":710},[478,31564,31203],{"class":495},[478,31566,31488],{"class":714},[478,31568,31203],{"class":495},[478,31570,31571],{"class":714},".f6(x))\n",[478,31573,31574,31576,31578,31580],{"class":480,"line":8538},[478,31575,31481],{"class":714},[478,31577,759],{"class":710},[478,31579,31203],{"class":495},[478,31581,31582],{"class":714},".f7(x)\n",[478,31584,31585,31587],{"class":480,"line":8543},[478,31586,15317],{"class":710},[478,31588,31589],{"class":714}," x\n",[478,31591,31592],{"class":480,"line":8549},[478,31593,2966],{"emptyLinePlaceholder":640},[478,31595,31596,31598,31601,31603,31606],{"class":480,"line":8576},[478,31597,2099],{"class":710},[478,31599,31600],{"class":495}," __name__",[478,31602,3515],{"class":710},[478,31604,31605],{"class":488},"\"__main__\"",[478,31607,4305],{"class":714},[478,31609,31610],{"class":480,"line":8581},[478,31611,31612],{"class":770},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[478,31614,31615,31618,31620,31622,31625,31627,31630,31632,31634],{"class":480,"line":8587},[478,31616,31617],{"class":714},"    device",[478,31619,759],{"class":710},[478,31621,30831],{"class":714},[478,31623,31624],{"class":488},"\"cuda\"",[478,31626,2271],{"class":710},[478,31628,31629],{"class":714}," torch.cuda.is_available() ",[478,31631,2268],{"class":710},[478,31633,30856],{"class":488},[478,31635,720],{"class":714},[478,31637,31638],{"class":480,"line":8599},[478,31639,31640],{"class":770},"    # 如果就是想指定用cpu用下方代码:\n",[478,31642,31643],{"class":480,"line":8611},[478,31644,31645],{"class":770},"    # device=\"cpu\"\n",[478,31647,31648],{"class":480,"line":8623},[478,31649,31650],{"class":770},"    # print(device)\n",[478,31652,31653],{"class":480,"line":10282},[478,31654,2966],{"emptyLinePlaceholder":640},[478,31656,31657],{"class":480,"line":10307},[478,31658,31659],{"class":770},"    # 实例化模型\n",[478,31661,31662],{"class":480,"line":10330},[478,31663,31664],{"class":770},"    # 将模型放到设备中去运行\n",[478,31666,31667,31670,31672],{"class":480,"line":10354},[478,31668,31669],{"class":714},"    model",[478,31671,759],{"class":710},[478,31673,31674],{"class":714},"LeNet().to(device)\n",[478,31676,31677,31680,31683,31685,31687,31689,31691,31693],{"class":480,"line":10359},[478,31678,31679],{"class":495},"    print",[478,31681,31682],{"class":714},"(summary(model,(",[478,31684,193],{"class":495},[478,31686,1079],{"class":714},[478,31688,1596],{"class":495},[478,31690,1079],{"class":714},[478,31692,1596],{"class":495},[478,31694,31695],{"class":714},")))\n",[19,31697,31698],{},[52,31699],{"alt":54,"src":31700},"\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,31702,31703],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[29,31705,31706],{"start":565},[32,31707,31708],{},"训练",[19,31710,31711],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31713,31714],{},"在训练之前可以将数据展示看一下",[469,31716,31718],{"className":30758,"code":31717,"language":30760,"meta":54,"style":54},"# 建立画图的函数，用于展示数据\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",[475,31719,31720,31725,31730,31742,31754,31767,31772,31784,31789,31801,31806,31818,31822,31826,31847,31859,31864,31885,31896,31900,31905,31923,31934,31939,31950,31955,31966,31970,31975,31990,32003,32008,32013,32026,32039,32052,32057,32061,32066,32086,32103,32123,32136,32149,32159,32174],{"__ignoreMap":54},[478,31721,31722],{"class":480,"line":481},[478,31723,31724],{"class":770},"# 建立画图的函数，用于展示数据\n",[478,31726,31727],{"class":480,"line":565},[478,31728,31729],{"class":770},"# torchvision中包含很多内置的数据集\n",[478,31731,31732,31734,31737,31739],{"class":480,"line":579},[478,31733,31117],{"class":710},[478,31735,31736],{"class":714}," sklearn.externals.array_api_compat.torch ",[478,31738,30772],{"class":710},[478,31740,31741],{"class":714}," squeeze\n",[478,31743,31744,31746,31749,31751],{"class":480,"line":593},[478,31745,31117],{"class":710},[478,31747,31748],{"class":714}," torchvision.datasets ",[478,31750,30772],{"class":710},[478,31752,31753],{"class":714}," FashionMNIST\n",[478,31755,31756,31758,31761,31764],{"class":480,"line":1769},[478,31757,30772],{"class":710},[478,31759,31760],{"class":714}," numpy ",[478,31762,31763],{"class":710},"as",[478,31765,31766],{"class":714}," np\n",[478,31768,31769],{"class":480,"line":1783},[478,31770,31771],{"class":770},"# 引入处理数据集的包\n",[478,31773,31774,31776,31779,31781],{"class":480,"line":1789},[478,31775,31117],{"class":710},[478,31777,31778],{"class":714}," torchvision ",[478,31780,30772],{"class":710},[478,31782,31783],{"class":714}," transforms\n",[478,31785,31786],{"class":480,"line":1880},[478,31787,31788],{"class":770},"# 从torch库中引入数据处理的包\n",[478,31790,31791,31793,31796,31798],{"class":480,"line":1886},[478,31792,30772],{"class":710},[478,31794,31795],{"class":714}," torch.utils.data ",[478,31797,31763],{"class":710},[478,31799,31800],{"class":714}," Data\n",[478,31802,31803],{"class":480,"line":1898},[478,31804,31805],{"class":770},"# 导入画图的库\n",[478,31807,31808,31810,31813,31815],{"class":480,"line":2180},[478,31809,30772],{"class":710},[478,31811,31812],{"class":714}," matplotlib.pyplot ",[478,31814,31763],{"class":710},[478,31816,31817],{"class":714}," plt\n",[478,31819,31820],{"class":480,"line":2185},[478,31821,2966],{"emptyLinePlaceholder":640},[478,31823,31824],{"class":480,"line":2191},[478,31825,2966],{"emptyLinePlaceholder":640},[478,31827,31828,31831,31833,31836,31839,31841,31844],{"class":480,"line":2196},[478,31829,31830],{"class":714},"train_data",[478,31832,759],{"class":710},[478,31834,31835],{"class":714},"FashionMNIST(",[478,31837,31838],{"class":5782},"root",[478,31840,759],{"class":710},[478,31842,31843],{"class":488},"'.\u002Fdata'",[478,31845,31846],{"class":714},",\n",[478,31848,31849,31852,31854,31857],{"class":480,"line":2210},[478,31850,31851],{"class":5782},"                        train",[478,31853,759],{"class":710},[478,31855,31856],{"class":495},"True",[478,31858,31846],{"class":714},[478,31860,31861],{"class":480,"line":2215},[478,31862,31863],{"class":770},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[478,31865,31866,31869,31871,31874,31877,31879,31882],{"class":480,"line":2221},[478,31867,31868],{"class":5782},"                        transform",[478,31870,759],{"class":710},[478,31872,31873],{"class":714},"transforms.Compose([transforms.Resize(",[478,31875,31876],{"class":5782},"size",[478,31878,759],{"class":710},[478,31880,31881],{"class":495},"224",[478,31883,31884],{"class":714},"),transforms.ToTensor()]),\n",[478,31886,31887,31890,31892,31894],{"class":480,"line":2241},[478,31888,31889],{"class":5782},"                        download",[478,31891,759],{"class":710},[478,31893,31856],{"class":495},[478,31895,720],{"class":714},[478,31897,31898],{"class":480,"line":2246},[478,31899,2966],{"emptyLinePlaceholder":640},[478,31901,31902],{"class":480,"line":2260},[478,31903,31904],{"class":770},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[478,31906,31907,31910,31912,31915,31918,31920],{"class":480,"line":2265},[478,31908,31909],{"class":714},"train_loader",[478,31911,759],{"class":710},[478,31913,31914],{"class":714},"Data.DataLoader(",[478,31916,31917],{"class":5782},"dataset",[478,31919,759],{"class":710},[478,31921,31922],{"class":714},"train_data,\n",[478,31924,31925,31928,31930,31932],{"class":480,"line":2294},[478,31926,31927],{"class":5782},"                             batch_size",[478,31929,759],{"class":710},[478,31931,907],{"class":495},[478,31933,31846],{"class":714},[478,31935,31936],{"class":480,"line":2299},[478,31937,31938],{"class":770},"                             # 数据是否打乱\n",[478,31940,31941,31944,31946,31948],{"class":480,"line":2316},[478,31942,31943],{"class":5782},"                             shuffle",[478,31945,759],{"class":710},[478,31947,31856],{"class":495},[478,31949,31846],{"class":714},[478,31951,31952],{"class":480,"line":2321},[478,31953,31954],{"class":770},"                             # 规定加载数据的进程\n",[478,31956,31957,31960,31962,31964],{"class":480,"line":2326},[478,31958,31959],{"class":5782},"                             num_workers",[478,31961,759],{"class":710},[478,31963,895],{"class":495},[478,31965,720],{"class":714},[478,31967,31968],{"class":480,"line":2331},[478,31969,2966],{"emptyLinePlaceholder":640},[478,31971,31972],{"class":480,"line":2345},[478,31973,31974],{"class":770},"# 获得一个batch的数据\n",[478,31976,31977,31979,31982,31984,31987],{"class":480,"line":2350},[478,31978,3591],{"class":710},[478,31980,31981],{"class":714}," step,(b_x,b_y) ",[478,31983,26423],{"class":710},[478,31985,31986],{"class":495}," enumerate",[478,31988,31989],{"class":714},"(train_loader):\n",[478,31991,31992,31994,31997,31999,32001],{"class":480,"line":3143},[478,31993,3667],{"class":710},[478,31995,31996],{"class":714}," step ",[478,31998,1655],{"class":710},[478,32000,4659],{"class":495},[478,32002,4305],{"class":714},[478,32004,32005],{"class":480,"line":3157},[478,32006,32007],{"class":710},"        break\n",[478,32009,32010],{"class":480,"line":3165},[478,32011,32012],{"class":770},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[478,32014,32015,32018,32020,32023],{"class":480,"line":3170},[478,32016,32017],{"class":714},"batch_x",[478,32019,759],{"class":710},[478,32021,32022],{"class":714},"b_x.squeeze().numpy()  ",[478,32024,32025],{"class":770},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[478,32027,32028,32031,32033,32036],{"class":480,"line":3176},[478,32029,32030],{"class":714},"batch_y",[478,32032,759],{"class":710},[478,32034,32035],{"class":714},"b_y.numpy()   ",[478,32037,32038],{"class":770},"#将张量转换成功numpy数组\n",[478,32040,32041,32044,32046,32049],{"class":480,"line":3182},[478,32042,32043],{"class":714},"class_label",[478,32045,759],{"class":710},[478,32047,32048],{"class":714},"train_data.classes  ",[478,32050,32051],{"class":770},"#训练集标签\n",[478,32053,32054],{"class":480,"line":3187},[478,32055,32056],{"class":770},"# print(class_label)\n",[478,32058,32059],{"class":480,"line":8514},[478,32060,2966],{"emptyLinePlaceholder":640},[478,32062,32063],{"class":480,"line":8538},[478,32064,32065],{"class":770},"# 可视化一个batch的图像\n",[478,32067,32068,32071,32074,32076,32078,32080,32082,32084],{"class":480,"line":8543},[478,32069,32070],{"class":714},"plt.figure(",[478,32072,32073],{"class":5782},"figsize",[478,32075,759],{"class":710},[478,32077,263],{"class":714},[478,32079,1198],{"class":495},[478,32081,1079],{"class":714},[478,32083,1020],{"class":495},[478,32085,30877],{"class":714},[478,32087,32088,32090,32093,32095,32098,32100],{"class":480,"line":8549},[478,32089,3591],{"class":710},[478,32091,32092],{"class":714}," ii ",[478,32094,26423],{"class":710},[478,32096,32097],{"class":714}," np.arange(",[478,32099,7924],{"class":495},[478,32101,32102],{"class":714},"(batch_y)):\n",[478,32104,32105,32108,32110,32112,32114,32117,32119,32121],{"class":480,"line":8576},[478,32106,32107],{"class":714},"    plt.subplot(",[478,32109,994],{"class":495},[478,32111,1079],{"class":714},[478,32113,1299],{"class":495},[478,32115,32116],{"class":714},",ii ",[478,32118,1181],{"class":710},[478,32120,25498],{"class":495},[478,32122,720],{"class":714},[478,32124,32125,32128,32131,32133],{"class":480,"line":8581},[478,32126,32127],{"class":714},"    plt.imshow(batch_x[ii,:,:],",[478,32129,32130],{"class":5782},"cmap",[478,32132,759],{"class":710},[478,32134,32135],{"class":714},"plt.cm.gray)\n",[478,32137,32138,32141,32143,32145,32147],{"class":480,"line":8587},[478,32139,32140],{"class":714},"    plt.title(class_label[batch_y[ii]],",[478,32142,31876],{"class":5782},[478,32144,759],{"class":710},[478,32146,1146],{"class":495},[478,32148,720],{"class":714},[478,32150,32151,32154,32157],{"class":480,"line":8599},[478,32152,32153],{"class":714},"    plt.axis(",[478,32155,32156],{"class":488},"\"off\"",[478,32158,720],{"class":714},[478,32160,32161,32164,32167,32169,32172],{"class":480,"line":8611},[478,32162,32163],{"class":714},"    plt.subplots_adjust(",[478,32165,32166],{"class":5782},"wspace",[478,32168,759],{"class":710},[478,32170,32171],{"class":495},"0.05",[478,32173,720],{"class":714},[478,32175,32176],{"class":480,"line":8623},[478,32177,32178],{"class":714},"plt.show()\n",[19,32180,32181],{},"用matplotlib进行展示的过程可以后续再补",[19,32183,32184],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32186,32187],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32189,32190],{},"模型训练：",[469,32192,32194],{"className":30758,"code":32193,"language":30760,"meta":54,"style":54},"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",[475,32195,32196,32203,32210,32214,32226,32232,32243,32253,32263,32273,32283,32288,32300,32310,32314,32318,32323,32334,32347,32358,32375,32386,32425,32441,32453,32464,32469,32480,32496,32507,32518,32529,32536,32540,32545,32550,32554,32559,32569,32590,32594,32598,32603,32608,32613,32633,32637,32642,32652,32656,32661,32670,32675,32680,32685,32695,32699,32703,32708,32713,32723,32728,32738,32743,32752,32757,32766,32771,32780,32784,32789,32799,32803,32807,32812,32827,32855,32870,32874,32879,32884,32893,32898,32907,32912,32921,32926,32935,32940,32949,32954,32963,32968,32981,32986,32996,33001,33011,33017,33023,33029,33035,33046,33052,33072,33078,33089,33095,33101,33107,33113,33119,33125,33131,33151,33157,33173,33179,33193,33199,33214,33220,33229,33235,33244,33250,33256,33265,33271,33282,33288,33307,33313,33324,33330,33350,33366,33372,33386,33392,33398,33409,33415,33421,33431,33437,33448,33454,33464,33469,33475,33524,33571,33576,33582,33601,33607,33627,33633,33639,33649,33654,33660,33676,33721,33727,33733,33739,33750,33756,33762,33768,33786,33800,33809,33818,33827,33836,33842,33848,33856,33861,33867,33878,33884,33904,33910,33916,33922,33939,33945,33951,33957,33963,33969,33996,34020,34026,34032,34038,34049,34060,34066,34083,34106,34129,34135,34140,34149,34159,34165,34170,34176,34189,34195,34206,34217,34236],{"__ignoreMap":54},[478,32197,32198,32200],{"class":480,"line":481},[478,32199,30772],{"class":710},[478,32201,32202],{"class":714}," copy\n",[478,32204,32205,32207],{"class":480,"line":565},[478,32206,30772],{"class":710},[478,32208,32209],{"class":714}," time\n",[478,32211,32212],{"class":480,"line":579},[478,32213,2966],{"emptyLinePlaceholder":640},[478,32215,32216,32218,32221,32223],{"class":480,"line":593},[478,32217,30772],{"class":710},[478,32219,32220],{"class":714}," pandas ",[478,32222,31763],{"class":710},[478,32224,32225],{"class":714}," pd\n",[478,32227,32228,32230],{"class":480,"line":1769},[478,32229,30772],{"class":710},[478,32231,30775],{"class":714},[478,32233,32234,32236,32238,32240],{"class":480,"line":1783},[478,32235,31117],{"class":710},[478,32237,31795],{"class":714},[478,32239,30772],{"class":710},[478,32241,32242],{"class":714}," Dataset\n",[478,32244,32245,32247,32249,32251],{"class":480,"line":1789},[478,32246,31117],{"class":710},[478,32248,31748],{"class":714},[478,32250,30772],{"class":710},[478,32252,31753],{"class":714},[478,32254,32255,32257,32259,32261],{"class":480,"line":1880},[478,32256,31117],{"class":710},[478,32258,31778],{"class":714},[478,32260,30772],{"class":710},[478,32262,31783],{"class":714},[478,32264,32265,32267,32269,32271],{"class":480,"line":1886},[478,32266,30772],{"class":710},[478,32268,31795],{"class":714},[478,32270,31763],{"class":710},[478,32272,31800],{"class":714},[478,32274,32275,32277,32279,32281],{"class":480,"line":1898},[478,32276,30772],{"class":710},[478,32278,31812],{"class":714},[478,32280,31763],{"class":710},[478,32282,31817],{"class":714},[478,32284,32285],{"class":480,"line":2180},[478,32286,32287],{"class":770},"# 导入模型\n",[478,32289,32290,32292,32295,32297],{"class":480,"line":2185},[478,32291,31117],{"class":710},[478,32293,32294],{"class":714}," model ",[478,32296,30772],{"class":710},[478,32298,32299],{"class":714}," LeNet\n",[478,32301,32302,32304,32306,32308],{"class":480,"line":2191},[478,32303,31117],{"class":710},[478,32305,31120],{"class":714},[478,32307,30772],{"class":710},[478,32309,31125],{"class":714},[478,32311,32312],{"class":480,"line":2196},[478,32313,2966],{"emptyLinePlaceholder":640},[478,32315,32316],{"class":480,"line":2210},[478,32317,2966],{"emptyLinePlaceholder":640},[478,32319,32320],{"class":480,"line":2215},[478,32321,32322],{"class":770},"# 处理训练集与验证集函数--->划分数据集\n",[478,32324,32325,32328,32331],{"class":480,"line":2221},[478,32326,32327],{"class":710},"def",[478,32329,32330],{"class":484}," train_val_data_process",[478,32332,32333],{"class":714},"():\n",[478,32335,32336,32339,32341,32343,32345],{"class":480,"line":2241},[478,32337,32338],{"class":714},"    train_data",[478,32340,759],{"class":710},[478,32342,31835],{"class":714},[478,32344,31843],{"class":488},[478,32346,31846],{"class":714},[478,32348,32349,32352,32354,32356],{"class":480,"line":2246},[478,32350,32351],{"class":5782},"                            train",[478,32353,759],{"class":710},[478,32355,31856],{"class":495},[478,32357,31846],{"class":714},[478,32359,32360,32363,32365,32367,32369,32371,32373],{"class":480,"line":2260},[478,32361,32362],{"class":5782},"                            transform",[478,32364,759],{"class":710},[478,32366,31873],{"class":714},[478,32368,31876],{"class":5782},[478,32370,759],{"class":710},[478,32372,1596],{"class":495},[478,32374,31884],{"class":714},[478,32376,32377,32380,32382,32384],{"class":480,"line":2265},[478,32378,32379],{"class":5782},"                            download",[478,32381,759],{"class":710},[478,32383,31856],{"class":495},[478,32385,720],{"class":714},[478,32387,32388,32391,32393,32396,32399,32401,32404,32406,32408,32411,32413,32415,32418,32420,32422],{"class":480,"line":2294},[478,32389,32390],{"class":714},"    train_data,val_data",[478,32392,759],{"class":710},[478,32394,32395],{"class":714},"Data.random_split(train_data,[",[478,32397,32398],{"class":495},"round",[478,32400,263],{"class":714},[478,32402,32403],{"class":495},"0.8",[478,32405,1155],{"class":710},[478,32407,7924],{"class":495},[478,32409,32410],{"class":714},"(train_data)),",[478,32412,32398],{"class":495},[478,32414,263],{"class":714},[478,32416,32417],{"class":495},"0.2",[478,32419,1155],{"class":710},[478,32421,7924],{"class":495},[478,32423,32424],{"class":714},"(train_data))])\n",[478,32426,32427,32430,32432,32435,32437,32439],{"class":480,"line":2299},[478,32428,32429],{"class":714},"    train_dataloader ",[478,32431,759],{"class":710},[478,32433,32434],{"class":714}," Data.DataLoader(",[478,32436,31917],{"class":5782},[478,32438,759],{"class":710},[478,32440,31922],{"class":714},[478,32442,32443,32446,32448,32451],{"class":480,"line":2316},[478,32444,32445],{"class":5782},"                                       batch_size",[478,32447,759],{"class":710},[478,32449,32450],{"class":495},"128",[478,32452,31846],{"class":714},[478,32454,32455,32458,32460,32462],{"class":480,"line":2321},[478,32456,32457],{"class":5782},"                                       shuffle",[478,32459,759],{"class":710},[478,32461,31856],{"class":495},[478,32463,31846],{"class":714},[478,32465,32466],{"class":480,"line":2326},[478,32467,32468],{"class":770},"                                       # 规定8个进程\n",[478,32470,32471,32474,32476,32478],{"class":480,"line":2331},[478,32472,32473],{"class":5782},"                                       num_workers",[478,32475,759],{"class":710},[478,32477,1096],{"class":495},[478,32479,720],{"class":714},[478,32481,32482,32485,32487,32489,32491,32493],{"class":480,"line":2345},[478,32483,32484],{"class":714},"    val_dataloader",[478,32486,759],{"class":710},[478,32488,31914],{"class":714},[478,32490,31917],{"class":5782},[478,32492,759],{"class":710},[478,32494,32495],{"class":714},"val_data,\n",[478,32497,32498,32501,32503,32505],{"class":480,"line":2350},[478,32499,32500],{"class":5782},"                                   batch_size",[478,32502,759],{"class":710},[478,32504,32450],{"class":495},[478,32506,31846],{"class":714},[478,32508,32509,32512,32514,32516],{"class":480,"line":3143},[478,32510,32511],{"class":5782},"                                   shuffle",[478,32513,759],{"class":710},[478,32515,31856],{"class":495},[478,32517,31846],{"class":714},[478,32519,32520,32523,32525,32527],{"class":480,"line":3157},[478,32521,32522],{"class":5782},"                                   num_workers",[478,32524,759],{"class":710},[478,32526,1096],{"class":495},[478,32528,720],{"class":714},[478,32530,32531,32533],{"class":480,"line":3165},[478,32532,4656],{"class":710},[478,32534,32535],{"class":714}," train_dataloader,val_dataloader\n",[478,32537,32538],{"class":480,"line":3170},[478,32539,2966],{"emptyLinePlaceholder":640},[478,32541,32542],{"class":480,"line":3176},[478,32543,32544],{"class":770},"# 验证是否出错\n",[478,32546,32547],{"class":480,"line":3182},[478,32548,32549],{"class":770},"# train_val_data_process()\n",[478,32551,32552],{"class":480,"line":3187},[478,32553,2966],{"emptyLinePlaceholder":640},[478,32555,32556],{"class":480,"line":8514},[478,32557,32558],{"class":770},"# 定义模型训练函数\n",[478,32560,32561,32563,32566],{"class":480,"line":8538},[478,32562,32327],{"class":710},[478,32564,32565],{"class":484}," train_model_process",[478,32567,32568],{"class":714},"(model,train_dataloader,val_dataloader,num_epochs):\n",[478,32570,32571,32573,32575,32577,32579,32581,32583,32585,32588],{"class":480,"line":8543},[478,32572,31617],{"class":714},[478,32574,759],{"class":710},[478,32576,30831],{"class":714},[478,32578,31624],{"class":488},[478,32580,2271],{"class":710},[478,32582,31629],{"class":714},[478,32584,2268],{"class":710},[478,32586,32587],{"class":488}," 'cpu'",[478,32589,720],{"class":714},[478,32591,32592],{"class":480,"line":8549},[478,32593,2966],{"emptyLinePlaceholder":640},[478,32595,32596],{"class":480,"line":8576},[478,32597,2966],{"emptyLinePlaceholder":640},[478,32599,32600],{"class":480,"line":8581},[478,32601,32602],{"class":770},"    # 定义优化器\n",[478,32604,32605],{"class":480,"line":8587},[478,32606,32607],{"class":770},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[478,32609,32610],{"class":480,"line":8599},[478,32611,32612],{"class":770},"    # lr为学习率\n",[478,32614,32615,32618,32620,32623,32626,32628,32631],{"class":480,"line":8611},[478,32616,32617],{"class":714},"    optimizer",[478,32619,759],{"class":710},[478,32621,32622],{"class":714},"torch.optim.Adam(model.parameters(),",[478,32624,32625],{"class":5782},"lr",[478,32627,759],{"class":710},[478,32629,32630],{"class":495},"0.001",[478,32632,720],{"class":714},[478,32634,32635],{"class":480,"line":8623},[478,32636,2966],{"emptyLinePlaceholder":640},[478,32638,32639],{"class":480,"line":10282},[478,32640,32641],{"class":770},"    # 定义损失函数使用交叉熵损失函数\n",[478,32643,32644,32647,32649],{"class":480,"line":10307},[478,32645,32646],{"class":714},"    criterion",[478,32648,759],{"class":710},[478,32650,32651],{"class":714},"nn.CrossEntropyLoss()\n",[478,32653,32654],{"class":480,"line":10330},[478,32655,2966],{"emptyLinePlaceholder":640},[478,32657,32658],{"class":480,"line":10354},[478,32659,32660],{"class":770},"    # 将模型放到GPU中进行训练\n",[478,32662,32663,32665,32667],{"class":480,"line":10359},[478,32664,31669],{"class":714},[478,32666,759],{"class":710},[478,32668,32669],{"class":714},"model.to(device)\n",[478,32671,32672],{"class":480,"line":10364},[478,32673,32674],{"class":770},"    # 复制当前模型的参数\n",[478,32676,32677],{"class":480,"line":10369},[478,32678,32679],{"class":770},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[478,32681,32682],{"class":480,"line":10378},[478,32683,32684],{"class":770},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[478,32686,32687,32690,32692],{"class":480,"line":10383},[478,32688,32689],{"class":714},"    best_model_wts",[478,32691,759],{"class":710},[478,32693,32694],{"class":714},"copy.deepcopy(model.state_dict())\n",[478,32696,32697],{"class":480,"line":10389},[478,32698,2966],{"emptyLinePlaceholder":640},[478,32700,32701],{"class":480,"line":10410},[478,32702,2966],{"emptyLinePlaceholder":640},[478,32704,32705],{"class":480,"line":10416},[478,32706,32707],{"class":770},"    # 初始化参数\n",[478,32709,32710],{"class":480,"line":10430},[478,32711,32712],{"class":770},"    # 最高准确度\n",[478,32714,32715,32718,32720],{"class":480,"line":10436},[478,32716,32717],{"class":714},"    best_acc",[478,32719,759],{"class":710},[478,32721,32722],{"class":495},"0.0\n",[478,32724,32725],{"class":480,"line":10463},[478,32726,32727],{"class":770},"    # 训练集损失列表\n",[478,32729,32730,32733,32735],{"class":480,"line":10472},[478,32731,32732],{"class":714},"    train_loss_all",[478,32734,759],{"class":710},[478,32736,32737],{"class":714},"[]\n",[478,32739,32740],{"class":480,"line":10478},[478,32741,32742],{"class":770},"    # 验证集函数列表\n",[478,32744,32745,32748,32750],{"class":480,"line":10486},[478,32746,32747],{"class":714},"    val_loss_all",[478,32749,759],{"class":710},[478,32751,32737],{"class":714},[478,32753,32754],{"class":480,"line":10491},[478,32755,32756],{"class":770},"    # 训练集准确度列表\n",[478,32758,32759,32762,32764],{"class":480,"line":17169},[478,32760,32761],{"class":714},"    train_acc_all",[478,32763,759],{"class":710},[478,32765,32737],{"class":714},[478,32767,32768],{"class":480,"line":17175},[478,32769,32770],{"class":770},"    # 验证集准确度列表\n",[478,32772,32773,32776,32778],{"class":480,"line":17198},[478,32774,32775],{"class":714},"    val_acc_all",[478,32777,759],{"class":710},[478,32779,32737],{"class":714},[478,32781,32782],{"class":480,"line":17204},[478,32783,2966],{"emptyLinePlaceholder":640},[478,32785,32786],{"class":480,"line":17227},[478,32787,32788],{"class":770},"    # 保存当前时间--->方便看每轮训练的时间\n",[478,32790,32791,32794,32796],{"class":480,"line":17241},[478,32792,32793],{"class":714},"    since",[478,32795,759],{"class":710},[478,32797,32798],{"class":714},"time.time()\n",[478,32800,32801],{"class":480,"line":17261},[478,32802,2966],{"emptyLinePlaceholder":640},[478,32804,32805],{"class":480,"line":17267},[478,32806,2966],{"emptyLinePlaceholder":640},[478,32808,32809],{"class":480,"line":17278},[478,32810,32811],{"class":770},"    # 准备工作完成--->开始训练模型\n",[478,32813,32814,32816,32819,32821,32824],{"class":480,"line":17301},[478,32815,3767],{"class":710},[478,32817,32818],{"class":714}," epoch ",[478,32820,26423],{"class":710},[478,32822,32823],{"class":495}," range",[478,32825,32826],{"class":714},"(num_epochs):\n",[478,32828,32829,32832,32834,32837,32840,32842,32844,32846,32849,32851,32853],{"class":480,"line":17323},[478,32830,32831],{"class":495},"        print",[478,32833,263],{"class":714},[478,32835,32836],{"class":488},"\"Epoch ",[478,32838,32839],{"class":495},"{}",[478,32841,1284],{"class":488},[478,32843,32839],{"class":495},[478,32845,952],{"class":488},[478,32847,32848],{"class":714},".format(epoch,num_epochs",[478,32850,1232],{"class":710},[478,32852,193],{"class":495},[478,32854,30877],{"class":714},[478,32856,32857,32859,32861,32864,32866,32868],{"class":480,"line":17328},[478,32858,32831],{"class":495},[478,32860,263],{"class":714},[478,32862,32863],{"class":488},"\"-\"",[478,32865,1155],{"class":710},[478,32867,1146],{"class":495},[478,32869,720],{"class":714},[478,32871,32872],{"class":480,"line":17334},[478,32873,2966],{"emptyLinePlaceholder":640},[478,32875,32876],{"class":480,"line":17348},[478,32877,32878],{"class":770},"        # 初始化参数\n",[478,32880,32881],{"class":480,"line":17361},[478,32882,32883],{"class":770},"        # 训练集损失函数\n",[478,32885,32886,32889,32891],{"class":480,"line":17366},[478,32887,32888],{"class":714},"        train_loss",[478,32890,759],{"class":710},[478,32892,32722],{"class":495},[478,32894,32895],{"class":480,"line":17380},[478,32896,32897],{"class":770},"        # 训练集准确度\n",[478,32899,32900,32903,32905],{"class":480,"line":17385},[478,32901,32902],{"class":714},"        train_corrects",[478,32904,759],{"class":710},[478,32906,3651],{"class":495},[478,32908,32909],{"class":480,"line":17391},[478,32910,32911],{"class":770},"        # 验证集损失函数\n",[478,32913,32914,32917,32919],{"class":480,"line":17396},[478,32915,32916],{"class":714},"        val_loss",[478,32918,759],{"class":710},[478,32920,32722],{"class":495},[478,32922,32923],{"class":480,"line":17410},[478,32924,32925],{"class":770},"        # 验证集准确度\n",[478,32927,32928,32931,32933],{"class":480,"line":17415},[478,32929,32930],{"class":714},"        val_corrects",[478,32932,759],{"class":710},[478,32934,3651],{"class":495},[478,32936,32937],{"class":480,"line":17420},[478,32938,32939],{"class":770},"        # 训练集样本数量\n",[478,32941,32942,32945,32947],{"class":480,"line":17434},[478,32943,32944],{"class":714},"        train_num",[478,32946,759],{"class":710},[478,32948,3651],{"class":495},[478,32950,32951],{"class":480,"line":17446},[478,32952,32953],{"class":770},"        # 验证集样本数量\n",[478,32955,32956,32959,32961],{"class":480,"line":17451},[478,32957,32958],{"class":714},"        val_num",[478,32960,759],{"class":710},[478,32962,3651],{"class":495},[478,32964,32965],{"class":480,"line":17464},[478,32966,32967],{"class":770},"        # 将数据放到设备,并开始训练\n",[478,32969,32970,32972,32974,32976,32978],{"class":480,"line":17469},[478,32971,3969],{"class":710},[478,32973,31981],{"class":714},[478,32975,26423],{"class":710},[478,32977,31986],{"class":495},[478,32979,32980],{"class":714},"(train_dataloader):\n",[478,32982,32983],{"class":480,"line":17474},[478,32984,32985],{"class":770},"            # 将特征放入到训练设备\n",[478,32987,32988,32991,32993],{"class":480,"line":17479},[478,32989,32990],{"class":714},"            b_x",[478,32992,759],{"class":710},[478,32994,32995],{"class":714},"b_x.to(device)\n",[478,32997,32998],{"class":480,"line":17492},[478,32999,33000],{"class":770},"            # 将标签放入到训练设备当中\n",[478,33002,33003,33006,33008],{"class":480,"line":17497},[478,33004,33005],{"class":714},"            b_y",[478,33007,759],{"class":710},[478,33009,33010],{"class":714},"b_y.to(device)\n",[478,33012,33014],{"class":480,"line":33013},98,[478,33015,33016],{"class":770},"            # 设置模型为训练模式\n",[478,33018,33020],{"class":480,"line":33019},99,[478,33021,33022],{"class":714},"            model.train()\n",[478,33024,33026],{"class":480,"line":33025},100,[478,33027,33028],{"class":770},"            # 将数据放到模型当中,开始前向传播\n",[478,33030,33032],{"class":480,"line":33031},101,[478,33033,33034],{"class":770},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[478,33036,33038,33041,33043],{"class":480,"line":33037},102,[478,33039,33040],{"class":714},"            output",[478,33042,759],{"class":710},[478,33044,33045],{"class":714},"model(b_x)\n",[478,33047,33049],{"class":480,"line":33048},103,[478,33050,33051],{"class":770},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[478,33053,33055,33058,33060,33063,33066,33068,33070],{"class":480,"line":33054},104,[478,33056,33057],{"class":714},"            pre_lab",[478,33059,759],{"class":710},[478,33061,33062],{"class":714},"torch.argmax(output,",[478,33064,33065],{"class":5782},"dim",[478,33067,759],{"class":710},[478,33069,193],{"class":495},[478,33071,720],{"class":714},[478,33073,33075],{"class":480,"line":33074},105,[478,33076,33077],{"class":770},"            # 计算每一个batch的损失函数\n",[478,33079,33081,33084,33086],{"class":480,"line":33080},106,[478,33082,33083],{"class":714},"            loss",[478,33085,759],{"class":710},[478,33087,33088],{"class":714},"criterion(output,b_y)\n",[478,33090,33092],{"class":480,"line":33091},107,[478,33093,33094],{"class":770},"            # 将梯度初始化为0\n",[478,33096,33098],{"class":480,"line":33097},108,[478,33099,33100],{"class":714},"            optimizer.zero_grad()\n",[478,33102,33104],{"class":480,"line":33103},109,[478,33105,33106],{"class":770},"            # 梯度置为0后再进行反向传播\n",[478,33108,33110],{"class":480,"line":33109},110,[478,33111,33112],{"class":714},"            loss.backward()\n",[478,33114,33116],{"class":480,"line":33115},111,[478,33117,33118],{"class":770},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[478,33120,33122],{"class":480,"line":33121},112,[478,33123,33124],{"class":714},"            optimizer.step()\n",[478,33126,33128],{"class":480,"line":33127},113,[478,33129,33130],{"class":770},"            # loss.item()指的是batch的平均损失\n",[478,33132,33134,33137,33139,33142,33144,33147,33149],{"class":480,"line":33133},114,[478,33135,33136],{"class":714},"            train_loss",[478,33138,10043],{"class":710},[478,33140,33141],{"class":714},"loss.item()",[478,33143,1155],{"class":710},[478,33145,33146],{"class":714},"b_x.size(",[478,33148,895],{"class":495},[478,33150,720],{"class":714},[478,33152,33154],{"class":480,"line":33153},115,[478,33155,33156],{"class":770},"            # 计算每个批次中正确预测的数量\n",[478,33158,33160,33163,33165,33168,33170],{"class":480,"line":33159},116,[478,33161,33162],{"class":714},"            train_corrects",[478,33164,10043],{"class":710},[478,33166,33167],{"class":714},"torch.sum(pre_lab",[478,33169,3515],{"class":710},[478,33171,33172],{"class":714},"b_y.data)\n",[478,33174,33176],{"class":480,"line":33175},117,[478,33177,33178],{"class":770},"            # 计算目前为止一共处理了多少样本\n",[478,33180,33182,33185,33187,33189,33191],{"class":480,"line":33181},118,[478,33183,33184],{"class":714},"            train_num",[478,33186,10043],{"class":710},[478,33188,33146],{"class":714},[478,33190,895],{"class":495},[478,33192,720],{"class":714},[478,33194,33196],{"class":480,"line":33195},119,[478,33197,33198],{"class":770},"        # 验证数据\n",[478,33200,33202,33204,33207,33209,33211],{"class":480,"line":33201},120,[478,33203,3969],{"class":710},[478,33205,33206],{"class":714}," step ,(b_x,b_y) ",[478,33208,26423],{"class":710},[478,33210,31986],{"class":495},[478,33212,33213],{"class":714},"(val_dataloader):\n",[478,33215,33217],{"class":480,"line":33216},121,[478,33218,33219],{"class":770},"            # 将特征放到验证设备当中\n",[478,33221,33223,33225,33227],{"class":480,"line":33222},122,[478,33224,32990],{"class":714},[478,33226,759],{"class":710},[478,33228,32995],{"class":714},[478,33230,33232],{"class":480,"line":33231},123,[478,33233,33234],{"class":770},"            # 将标签放到放到训练设备当中\n",[478,33236,33238,33240,33242],{"class":480,"line":33237},124,[478,33239,33005],{"class":714},[478,33241,759],{"class":710},[478,33243,33010],{"class":714},[478,33245,33247],{"class":480,"line":33246},125,[478,33248,33249],{"class":770},"            # 开启验证模式，设置模型为评估模式\n",[478,33251,33253],{"class":480,"line":33252},126,[478,33254,33255],{"class":714},"            model.eval()\n",[478,33257,33259,33262],{"class":480,"line":33258},127,[478,33260,33261],{"class":710},"            with",[478,33263,33264],{"class":714}," torch.no_grad():\n",[478,33266,33268],{"class":480,"line":33267},128,[478,33269,33270],{"class":770},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[478,33272,33274,33277,33279],{"class":480,"line":33273},129,[478,33275,33276],{"class":714},"                output ",[478,33278,759],{"class":710},[478,33280,33281],{"class":714}," model(b_x)\n",[478,33283,33285],{"class":480,"line":33284},130,[478,33286,33287],{"class":770},"                # 查找每一行中最大值对应的下标\n",[478,33289,33291,33294,33296,33299,33301,33303,33305],{"class":480,"line":33290},131,[478,33292,33293],{"class":714},"                pre_lab ",[478,33295,759],{"class":710},[478,33297,33298],{"class":714}," torch.argmax(output, ",[478,33300,33065],{"class":5782},[478,33302,759],{"class":710},[478,33304,193],{"class":495},[478,33306,720],{"class":714},[478,33308,33310],{"class":480,"line":33309},132,[478,33311,33312],{"class":770},"                # 计算验证集上的当前 batch 损失\n",[478,33314,33316,33319,33321],{"class":480,"line":33315},133,[478,33317,33318],{"class":714},"                val_batch_loss ",[478,33320,759],{"class":710},[478,33322,33323],{"class":714}," criterion(output, b_y)\n",[478,33325,33327],{"class":480,"line":33326},134,[478,33328,33329],{"class":770},"                # 对损失函数进行累加（按样本数加权）\n",[478,33331,33333,33336,33338,33341,33343,33346,33348],{"class":480,"line":33332},135,[478,33334,33335],{"class":714},"                val_loss ",[478,33337,10043],{"class":710},[478,33339,33340],{"class":714}," val_batch_loss.item() ",[478,33342,1155],{"class":710},[478,33344,33345],{"class":714}," b_x.size(",[478,33347,895],{"class":495},[478,33349,720],{"class":714},[478,33351,33353,33356,33358,33361,33363],{"class":480,"line":33352},136,[478,33354,33355],{"class":714},"                val_corrects ",[478,33357,10043],{"class":710},[478,33359,33360],{"class":714}," torch.sum(pre_lab ",[478,33362,3515],{"class":710},[478,33364,33365],{"class":714}," b_y.data)\n",[478,33367,33369],{"class":480,"line":33368},137,[478,33370,33371],{"class":770},"                # 当前用于验证的样本数量\n",[478,33373,33375,33378,33380,33382,33384],{"class":480,"line":33374},138,[478,33376,33377],{"class":714},"            val_num ",[478,33379,10043],{"class":710},[478,33381,33345],{"class":714},[478,33383,895],{"class":495},[478,33385,720],{"class":714},[478,33387,33389],{"class":480,"line":33388},139,[478,33390,33391],{"class":770},"        # 计算并保存每一次迭代的loss值和准确率\n",[478,33393,33395],{"class":480,"line":33394},140,[478,33396,33397],{"class":770},"        # 计算并保存训练集的loss值\n",[478,33399,33401,33404,33406],{"class":480,"line":33400},141,[478,33402,33403],{"class":714},"        train_loss_all.append(train_loss",[478,33405,1284],{"class":710},[478,33407,33408],{"class":714},"train_num)\n",[478,33410,33412],{"class":480,"line":33411},142,[478,33413,33414],{"class":770},"        # 取双精度\n",[478,33416,33418],{"class":480,"line":33417},143,[478,33419,33420],{"class":770},"        # 计算并保存训练集的准确率\n",[478,33422,33424,33427,33429],{"class":480,"line":33423},144,[478,33425,33426],{"class":714},"        train_acc_all.append(train_corrects.double().item()",[478,33428,1284],{"class":710},[478,33430,33408],{"class":714},[478,33432,33434],{"class":480,"line":33433},145,[478,33435,33436],{"class":770},"        # 计算并保存验证集的loss值\n",[478,33438,33440,33443,33445],{"class":480,"line":33439},146,[478,33441,33442],{"class":714},"        val_loss_all.append(val_loss",[478,33444,1284],{"class":710},[478,33446,33447],{"class":714},"val_num)\n",[478,33449,33451],{"class":480,"line":33450},147,[478,33452,33453],{"class":770},"        # 计算并保存验证集的准确率\n",[478,33455,33457,33460,33462],{"class":480,"line":33456},148,[478,33458,33459],{"class":714},"        val_acc_all.append(val_corrects.double().item()",[478,33461,1284],{"class":710},[478,33463,33447],{"class":714},[478,33465,33467],{"class":480,"line":33466},149,[478,33468,2966],{"emptyLinePlaceholder":640},[478,33470,33472],{"class":480,"line":33471},150,[478,33473,33474],{"class":770},"        # 打印训练一轮的loss值和准确率\n",[478,33476,33478,33480,33482,33484,33486,33489,33491,33494,33496,33499,33501,33503,33505,33507,33510,33512,33514,33517,33519,33521],{"class":480,"line":33477},151,[478,33479,32831],{"class":495},[478,33481,263],{"class":714},[478,33483,4158],{"class":488},[478,33485,32839],{"class":495},[478,33487,33488],{"class":488},"train loss:",[478,33490,1591],{"class":495},[478,33492,33493],{"class":710},":.4f",[478,33495,1641],{"class":495},[478,33497,33498],{"class":488}," train acc:",[478,33500,1591],{"class":495},[478,33502,33493],{"class":710},[478,33504,1641],{"class":495},[478,33506,4158],{"class":488},[478,33508,33509],{"class":714},".format(epoch,train_loss_all[",[478,33511,1232],{"class":710},[478,33513,193],{"class":495},[478,33515,33516],{"class":714},"],train_acc_all[",[478,33518,1232],{"class":710},[478,33520,193],{"class":495},[478,33522,33523],{"class":714},"]))\n",[478,33525,33527,33529,33531,33533,33535,33538,33540,33542,33544,33547,33549,33551,33553,33555,33558,33560,33562,33565,33567,33569],{"class":480,"line":33526},152,[478,33528,32831],{"class":495},[478,33530,263],{"class":714},[478,33532,4158],{"class":488},[478,33534,32839],{"class":495},[478,33536,33537],{"class":488},"val loss:",[478,33539,1591],{"class":495},[478,33541,33493],{"class":710},[478,33543,1641],{"class":495},[478,33545,33546],{"class":488}," val acc:",[478,33548,1591],{"class":495},[478,33550,33493],{"class":710},[478,33552,1641],{"class":495},[478,33554,4158],{"class":488},[478,33556,33557],{"class":714},".format(epoch,val_loss_all[",[478,33559,1232],{"class":710},[478,33561,193],{"class":495},[478,33563,33564],{"class":714},"],val_acc_all[",[478,33566,1232],{"class":710},[478,33568,193],{"class":495},[478,33570,33523],{"class":714},[478,33572,33574],{"class":480,"line":33573},153,[478,33575,2966],{"emptyLinePlaceholder":640},[478,33577,33579],{"class":480,"line":33578},154,[478,33580,33581],{"class":770},"        # 判断准确度--->保存最优模型\n",[478,33583,33585,33587,33590,33592,33594,33596,33598],{"class":480,"line":33584},155,[478,33586,3063],{"class":710},[478,33588,33589],{"class":714}," val_acc_all[",[478,33591,1232],{"class":710},[478,33593,193],{"class":495},[478,33595,1635],{"class":714},[478,33597,1655],{"class":710},[478,33599,33600],{"class":714},"best_acc:\n",[478,33602,33604],{"class":480,"line":33603},156,[478,33605,33606],{"class":770},"            # 保存当前模型准确度\n",[478,33608,33610,33613,33615,33617,33620,33622,33624],{"class":480,"line":33609},157,[478,33611,33612],{"class":714},"            best_acc:",[478,33614,753],{"class":495},[478,33616,759],{"class":710},[478,33618,33619],{"class":714},"val_acc_all[",[478,33621,1232],{"class":710},[478,33623,193],{"class":495},[478,33625,33626],{"class":714},"]\n",[478,33628,33630],{"class":480,"line":33629},158,[478,33631,33632],{"class":770},"            # 保存当前的准确度\n",[478,33634,33636],{"class":480,"line":33635},159,[478,33637,33638],{"class":770},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[478,33640,33642,33645,33647],{"class":480,"line":33641},160,[478,33643,33644],{"class":714},"            best_model_wts",[478,33646,759],{"class":710},[478,33648,32694],{"class":714},[478,33650,33652],{"class":480,"line":33651},161,[478,33653,2966],{"emptyLinePlaceholder":640},[478,33655,33657],{"class":480,"line":33656},162,[478,33658,33659],{"class":770},"        # 计算耗时\n",[478,33661,33663,33666,33668,33671,33673],{"class":480,"line":33662},163,[478,33664,33665],{"class":714},"        time_use",[478,33667,759],{"class":710},[478,33669,33670],{"class":714},"time.time()",[478,33672,1232],{"class":710},[478,33674,33675],{"class":714},"since\n",[478,33677,33679,33681,33683,33686,33688,33691,33693,33695,33697,33699,33701,33704,33707,33710,33712,33715,33717,33719],{"class":480,"line":33678},164,[478,33680,32831],{"class":495},[478,33682,263],{"class":714},[478,33684,33685],{"class":488},"'训练和验证耗费的时间",[478,33687,1591],{"class":495},[478,33689,33690],{"class":710},":.0f",[478,33692,1641],{"class":495},[478,33694,1244],{"class":488},[478,33696,1591],{"class":495},[478,33698,33690],{"class":710},[478,33700,1641],{"class":495},[478,33702,33703],{"class":488},"s'",[478,33705,33706],{"class":714},".format(time_use",[478,33708,33709],{"class":710},"\u002F\u002F",[478,33711,1602],{"class":495},[478,33713,33714],{"class":714},",time_use",[478,33716,1029],{"class":710},[478,33718,1602],{"class":495},[478,33720,30877],{"class":714},[478,33722,33724],{"class":480,"line":33723},165,[478,33725,33726],{"class":770},"    # 选择最优参数\n",[478,33728,33730],{"class":480,"line":33729},166,[478,33731,33732],{"class":770},"    # 加载最高准确率下的模型参数\n",[478,33734,33736],{"class":480,"line":33735},167,[478,33737,33738],{"class":770},"    # model.load_state_dict(best_model_wts)\n",[478,33740,33742,33745,33748],{"class":480,"line":33741},168,[478,33743,33744],{"class":714},"    torch.save(model.state_dict(best_model_wts), ",[478,33746,33747],{"class":488},"'.\u002Fbest_model.pth'",[478,33749,720],{"class":714},[478,33751,33753],{"class":480,"line":33752},169,[478,33754,33755],{"class":770},"    # 或者写成\n",[478,33757,33759],{"class":480,"line":33758},170,[478,33760,33761],{"class":770},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[478,33763,33765],{"class":480,"line":33764},171,[478,33766,33767],{"class":770},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[478,33769,33771,33774,33776,33779,33782,33784],{"class":480,"line":33770},172,[478,33772,33773],{"class":714},"    train_process",[478,33775,759],{"class":710},[478,33777,33778],{"class":714},"pd.DataFrame(",[478,33780,33781],{"class":5782},"data",[478,33783,759],{"class":710},[478,33785,2114],{"class":714},[478,33787,33789,33792,33794,33797],{"class":480,"line":33788},173,[478,33790,33791],{"class":488},"        \"epoch\"",[478,33793,1554],{"class":714},[478,33795,33796],{"class":495},"range",[478,33798,33799],{"class":714},"(num_epochs),\n",[478,33801,33803,33806],{"class":480,"line":33802},174,[478,33804,33805],{"class":488},"        \"train_loss_all\"",[478,33807,33808],{"class":714},":train_loss_all,\n",[478,33810,33812,33815],{"class":480,"line":33811},175,[478,33813,33814],{"class":488},"        \"val_loss_all\"",[478,33816,33817],{"class":714},":val_loss_all,\n",[478,33819,33821,33824],{"class":480,"line":33820},176,[478,33822,33823],{"class":488},"        \"train_acc_all\"",[478,33825,33826],{"class":714},":train_acc_all,\n",[478,33828,33830,33833],{"class":480,"line":33829},177,[478,33831,33832],{"class":488},"        \"val_acc_all\"",[478,33834,33835],{"class":714},":val_acc_all\n",[478,33837,33839],{"class":480,"line":33838},178,[478,33840,33841],{"class":714},"    })\n",[478,33843,33845],{"class":480,"line":33844},179,[478,33846,33847],{"class":770},"    # 返回训练保存的过程\n",[478,33849,33851,33853],{"class":480,"line":33850},180,[478,33852,4656],{"class":710},[478,33854,33855],{"class":714}," train_process\n",[478,33857,33859],{"class":480,"line":33858},181,[478,33860,2966],{"emptyLinePlaceholder":640},[478,33862,33864],{"class":480,"line":33863},182,[478,33865,33866],{"class":770},"# 将loss值和精度按照图片的形式展示出来\n",[478,33868,33870,33872,33875],{"class":480,"line":33869},183,[478,33871,32327],{"class":710},[478,33873,33874],{"class":484}," matplot_acc_loss",[478,33876,33877],{"class":714},"(train_process):\n",[478,33879,33881],{"class":480,"line":33880},184,[478,33882,33883],{"class":770},"    # 设置图的大小\n",[478,33885,33887,33890,33892,33894,33896,33898,33900,33902],{"class":480,"line":33886},185,[478,33888,33889],{"class":714},"    plt.figure(",[478,33891,32073],{"class":5782},[478,33893,759],{"class":710},[478,33895,263],{"class":714},[478,33897,1198],{"class":495},[478,33899,1079],{"class":714},[478,33901,994],{"class":495},[478,33903,30877],{"class":714},[478,33905,33907],{"class":480,"line":33906},186,[478,33908,33909],{"class":770},"    # 设置图中有几张图\n",[478,33911,33913],{"class":480,"line":33912},187,[478,33914,33915],{"class":770},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[478,33917,33919],{"class":480,"line":33918},188,[478,33920,33921],{"class":770},"    # ①loss图\n",[478,33923,33925,33927,33929,33931,33933,33935,33937],{"class":480,"line":33924},189,[478,33926,32107],{"class":714},[478,33928,193],{"class":495},[478,33930,1079],{"class":714},[478,33932,789],{"class":495},[478,33934,1079],{"class":714},[478,33936,193],{"class":495},[478,33938,720],{"class":714},[478,33940,33942],{"class":480,"line":33941},190,[478,33943,33944],{"class":770},"    # 补充:\n",[478,33946,33948],{"class":480,"line":33947},191,[478,33949,33950],{"class":770},"    # plt.subplot(nrows, ncols, index)\n",[478,33952,33954],{"class":480,"line":33953},192,[478,33955,33956],{"class":770},"    # nrows：行数\n",[478,33958,33960],{"class":480,"line":33959},193,[478,33961,33962],{"class":770},"    # ncols：列数\n",[478,33964,33966],{"class":480,"line":33965},194,[478,33967,33968],{"class":770},"    # index：目前选中第几个子图（从1开始）\n",[478,33970,33972,33975,33978,33981,33984,33986,33989,33991,33994],{"class":480,"line":33971},195,[478,33973,33974],{"class":714},"    plt.plot(train_process[",[478,33976,33977],{"class":488},"\"epoch\"",[478,33979,33980],{"class":714},"],train_process.train_loss_all,",[478,33982,33983],{"class":488},"'ro-'",[478,33985,1079],{"class":714},[478,33987,33988],{"class":5782},"label",[478,33990,759],{"class":710},[478,33992,33993],{"class":488},"'train loss'",[478,33995,720],{"class":714},[478,33997,33999,34001,34003,34006,34009,34011,34013,34015,34018],{"class":480,"line":33998},196,[478,34000,33974],{"class":714},[478,34002,33977],{"class":488},[478,34004,34005],{"class":714},"],train_process.val_loss_all,",[478,34007,34008],{"class":488},"'bs--'",[478,34010,1079],{"class":714},[478,34012,33988],{"class":5782},[478,34014,759],{"class":710},[478,34016,34017],{"class":488},"'val loss'",[478,34019,720],{"class":714},[478,34021,34023],{"class":480,"line":34022},197,[478,34024,34025],{"class":770},"    # 添加一个图例\n",[478,34027,34029],{"class":480,"line":34028},198,[478,34030,34031],{"class":714},"    plt.legend()\n",[478,34033,34035],{"class":480,"line":34034},199,[478,34036,34037],{"class":770},"    # 给轴添加标签\n",[478,34039,34041,34044,34047],{"class":480,"line":34040},200,[478,34042,34043],{"class":714},"    plt.xlabel(",[478,34045,34046],{"class":488},"'epoch'",[478,34048,720],{"class":714},[478,34050,34052,34055,34058],{"class":480,"line":34051},201,[478,34053,34054],{"class":714},"    plt.ylabel(",[478,34056,34057],{"class":488},"'loss'",[478,34059,720],{"class":714},[478,34061,34063],{"class":480,"line":34062},202,[478,34064,34065],{"class":770},"    # ②准确度图\n",[478,34067,34069,34071,34073,34075,34077,34079,34081],{"class":480,"line":34068},203,[478,34070,32107],{"class":714},[478,34072,193],{"class":495},[478,34074,1079],{"class":714},[478,34076,789],{"class":495},[478,34078,1079],{"class":714},[478,34080,789],{"class":495},[478,34082,720],{"class":714},[478,34084,34086,34088,34090,34093,34095,34097,34099,34101,34104],{"class":480,"line":34085},204,[478,34087,33974],{"class":714},[478,34089,33977],{"class":488},[478,34091,34092],{"class":714},"],train_process.train_acc_all,",[478,34094,33983],{"class":488},[478,34096,1079],{"class":714},[478,34098,33988],{"class":5782},[478,34100,759],{"class":710},[478,34102,34103],{"class":488},"'train acc'",[478,34105,720],{"class":714},[478,34107,34109,34111,34113,34116,34118,34120,34122,34124,34127],{"class":480,"line":34108},205,[478,34110,33974],{"class":714},[478,34112,33977],{"class":488},[478,34114,34115],{"class":714},"],train_process.val_acc_all,",[478,34117,34008],{"class":488},[478,34119,1079],{"class":714},[478,34121,33988],{"class":5782},[478,34123,759],{"class":710},[478,34125,34126],{"class":488},"'val acc'",[478,34128,720],{"class":714},[478,34130,34132],{"class":480,"line":34131},206,[478,34133,34134],{"class":770},"    # 添加图例\n",[478,34136,34138],{"class":480,"line":34137},207,[478,34139,34031],{"class":714},[478,34141,34143,34145,34147],{"class":480,"line":34142},208,[478,34144,34043],{"class":714},[478,34146,33977],{"class":488},[478,34148,720],{"class":714},[478,34150,34152,34154,34157],{"class":480,"line":34151},209,[478,34153,34054],{"class":714},[478,34155,34156],{"class":488},"\"acc\"",[478,34158,720],{"class":714},[478,34160,34162],{"class":480,"line":34161},210,[478,34163,34164],{"class":714},"    plt.show()\n",[478,34166,34168],{"class":480,"line":34167},211,[478,34169,2966],{"emptyLinePlaceholder":640},[478,34171,34173],{"class":480,"line":34172},212,[478,34174,34175],{"class":770},"# 正式开始训练:\n",[478,34177,34179,34181,34183,34185,34187],{"class":480,"line":34178},213,[478,34180,2099],{"class":710},[478,34182,31600],{"class":495},[478,34184,3515],{"class":710},[478,34186,31605],{"class":488},[478,34188,4305],{"class":714},[478,34190,34192],{"class":480,"line":34191},214,[478,34193,34194],{"class":770},"    # 将模型实例化\n",[478,34196,34198,34201,34203],{"class":480,"line":34197},215,[478,34199,34200],{"class":714},"    LeNet",[478,34202,759],{"class":710},[478,34204,34205],{"class":714},"LeNet()\n",[478,34207,34209,34212,34214],{"class":480,"line":34208},216,[478,34210,34211],{"class":714},"    train_dataloader,val_dataloader",[478,34213,759],{"class":710},[478,34215,34216],{"class":714},"train_val_data_process()\n",[478,34218,34220,34222,34224,34227,34230,34232,34234],{"class":480,"line":34219},217,[478,34221,33773],{"class":714},[478,34223,759],{"class":710},[478,34225,34226],{"class":714},"train_model_process(LeNet,train_dataloader,val_dataloader,",[478,34228,34229],{"class":5782},"num_epochs",[478,34231,759],{"class":710},[478,34233,1396],{"class":495},[478,34235,720],{"class":714},[478,34237,34239],{"class":480,"line":34238},218,[478,34240,34241],{"class":714},"    matplot_acc_loss(train_process)\n",[19,34243,34244],{},"画图的补充点学习：",[19,34246,34247],{},[52,34248],{"alt":54,"src":34249},"\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",[29,34251,34252],{"start":579},[32,34253,34254],{},"测试",[469,34256,34258],{"className":30758,"code":34257,"language":30760,"meta":54,"style":54},"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",[475,34259,34260,34266,34276,34288,34298,34303,34313,34323,34327,34332,34341,34358,34370,34387,34398,34414,34419,34430,34441,34452,34459,34463,34468,34478,34483,34500,34508,34512,34517,34526,34535,34539,34544,34549,34554,34561,34566,34578,34588,34598,34603,34607,34612,34621,34626,34642,34647,34652,34657,34671,34676,34690,34694,34699,34714,34719,34731,34735,34740,34752,34757,34765,34770,34775,34785,34790,34799,34804,34809,34813,34818,34823,34839,34847,34852,34857,34916,34922,34927,34938,34946,34954,34958,34963,34967,34972,34980,34985,35001,35006,35016,35026],{"__ignoreMap":54},[478,34261,34262,34264],{"class":480,"line":481},[478,34263,30772],{"class":710},[478,34265,30775],{"class":714},[478,34267,34268,34270,34272,34274],{"class":480,"line":565},[478,34269,30772],{"class":710},[478,34271,31795],{"class":714},[478,34273,31763],{"class":710},[478,34275,31800],{"class":714},[478,34277,34278,34280,34283,34285],{"class":480,"line":579},[478,34279,31117],{"class":710},[478,34281,34282],{"class":714}," jupyter_client.consoleapp ",[478,34284,30772],{"class":710},[478,34286,34287],{"class":714}," classes\n",[478,34289,34290,34292,34294,34296],{"class":480,"line":593},[478,34291,31117],{"class":710},[478,34293,31778],{"class":714},[478,34295,30772],{"class":710},[478,34297,31783],{"class":714},[478,34299,34300],{"class":480,"line":1769},[478,34301,34302],{"class":770},"# 导入数据集\n",[478,34304,34305,34307,34309,34311],{"class":480,"line":1783},[478,34306,31117],{"class":710},[478,34308,31748],{"class":714},[478,34310,30772],{"class":710},[478,34312,31753],{"class":714},[478,34314,34315,34317,34319,34321],{"class":480,"line":1789},[478,34316,31117],{"class":710},[478,34318,32294],{"class":714},[478,34320,30772],{"class":710},[478,34322,32299],{"class":714},[478,34324,34325],{"class":480,"line":1880},[478,34326,2966],{"emptyLinePlaceholder":640},[478,34328,34329],{"class":480,"line":1886},[478,34330,34331],{"class":770},"# 测试数据处理\n",[478,34333,34334,34336,34339],{"class":480,"line":1898},[478,34335,32327],{"class":710},[478,34337,34338],{"class":484}," test_data_process",[478,34340,32333],{"class":714},[478,34342,34343,34346,34348,34350,34352,34354,34356],{"class":480,"line":2180},[478,34344,34345],{"class":714},"    test_data",[478,34347,759],{"class":710},[478,34349,31835],{"class":714},[478,34351,31838],{"class":5782},[478,34353,759],{"class":710},[478,34355,31843],{"class":488},[478,34357,31846],{"class":714},[478,34359,34360,34363,34365,34368],{"class":480,"line":2185},[478,34361,34362],{"class":5782},"                           train",[478,34364,759],{"class":710},[478,34366,34367],{"class":495},"False",[478,34369,31846],{"class":714},[478,34371,34372,34375,34377,34379,34381,34383,34385],{"class":480,"line":2191},[478,34373,34374],{"class":5782},"                           transform",[478,34376,759],{"class":710},[478,34378,31873],{"class":714},[478,34380,31876],{"class":5782},[478,34382,759],{"class":710},[478,34384,1596],{"class":495},[478,34386,31884],{"class":714},[478,34388,34389,34392,34394,34396],{"class":480,"line":2196},[478,34390,34391],{"class":5782},"                           download",[478,34393,759],{"class":710},[478,34395,31856],{"class":495},[478,34397,720],{"class":714},[478,34399,34400,34403,34405,34407,34409,34411],{"class":480,"line":2210},[478,34401,34402],{"class":714},"    test_dataloader",[478,34404,759],{"class":710},[478,34406,31914],{"class":714},[478,34408,31917],{"class":5782},[478,34410,759],{"class":710},[478,34412,34413],{"class":714},"test_data,\n",[478,34415,34416],{"class":480,"line":2215},[478,34417,34418],{"class":770},"                                    # 这里是一张一张进行测试\n",[478,34420,34421,34424,34426,34428],{"class":480,"line":2221},[478,34422,34423],{"class":5782},"                                    batch_size",[478,34425,759],{"class":710},[478,34427,193],{"class":495},[478,34429,31846],{"class":714},[478,34431,34432,34435,34437,34439],{"class":480,"line":2241},[478,34433,34434],{"class":5782},"                                    shuffle",[478,34436,759],{"class":710},[478,34438,31856],{"class":495},[478,34440,31846],{"class":714},[478,34442,34443,34446,34448,34450],{"class":480,"line":2246},[478,34444,34445],{"class":5782},"                                    num_workers",[478,34447,759],{"class":710},[478,34449,895],{"class":495},[478,34451,720],{"class":714},[478,34453,34454,34456],{"class":480,"line":2260},[478,34455,4656],{"class":710},[478,34457,34458],{"class":714}," test_dataloader\n",[478,34460,34461],{"class":480,"line":2265},[478,34462,2966],{"emptyLinePlaceholder":640},[478,34464,34465],{"class":480,"line":2294},[478,34466,34467],{"class":770},"# 定义模型测试函数\n",[478,34469,34470,34472,34475],{"class":480,"line":2299},[478,34471,32327],{"class":710},[478,34473,34474],{"class":484}," test_model_process",[478,34476,34477],{"class":714},"(model,test_dataloader):\n",[478,34479,34480],{"class":480,"line":2316},[478,34481,34482],{"class":770},"    # 将模型放到设备当中，先进行判断\n",[478,34484,34485,34487,34489,34491,34493,34495,34497],{"class":480,"line":2321},[478,34486,31617],{"class":714},[478,34488,759],{"class":710},[478,34490,31624],{"class":488},[478,34492,2271],{"class":710},[478,34494,31629],{"class":714},[478,34496,2268],{"class":710},[478,34498,34499],{"class":488}," \"cpu\"\n",[478,34501,34502,34504,34506],{"class":480,"line":2326},[478,34503,31669],{"class":714},[478,34505,759],{"class":710},[478,34507,32669],{"class":714},[478,34509,34510],{"class":480,"line":2331},[478,34511,2966],{"emptyLinePlaceholder":640},[478,34513,34514],{"class":480,"line":2345},[478,34515,34516],{"class":770},"    # 设置初始化参数\n",[478,34518,34519,34522,34524],{"class":480,"line":2350},[478,34520,34521],{"class":714},"    test_corrects",[478,34523,759],{"class":710},[478,34525,32722],{"class":495},[478,34527,34528,34531,34533],{"class":480,"line":3143},[478,34529,34530],{"class":714},"    test_num",[478,34532,759],{"class":710},[478,34534,3651],{"class":495},[478,34536,34537],{"class":480,"line":3157},[478,34538,2966],{"emptyLinePlaceholder":640},[478,34540,34541],{"class":480,"line":3165},[478,34542,34543],{"class":770},"    # 进行模型测试\n",[478,34545,34546],{"class":480,"line":3170},[478,34547,34548],{"class":770},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[478,34550,34551],{"class":480,"line":3176},[478,34552,34553],{"class":770},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[478,34555,34556,34559],{"class":480,"line":3182},[478,34557,34558],{"class":710},"    with",[478,34560,33264],{"class":714},[478,34562,34563],{"class":480,"line":3187},[478,34564,34565],{"class":770},"        # 从数据中进行\n",[478,34567,34568,34570,34573,34575],{"class":480,"line":8514},[478,34569,3969],{"class":710},[478,34571,34572],{"class":714}," test_data_x,test_data_y ",[478,34574,26423],{"class":710},[478,34576,34577],{"class":714}," test_dataloader:\n",[478,34579,34580,34583,34585],{"class":480,"line":8538},[478,34581,34582],{"class":714},"            test_data_x",[478,34584,759],{"class":710},[478,34586,34587],{"class":714},"test_data_x.to(device)\n",[478,34589,34590,34593,34595],{"class":480,"line":8543},[478,34591,34592],{"class":714},"            test_data_y",[478,34594,759],{"class":710},[478,34596,34597],{"class":714},"test_data_y.to(device)\n",[478,34599,34600],{"class":480,"line":8549},[478,34601,34602],{"class":770},"            # 设置为验证模式\n",[478,34604,34605],{"class":480,"line":8576},[478,34606,33255],{"class":714},[478,34608,34609],{"class":480,"line":8581},[478,34610,34611],{"class":770},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[478,34613,34614,34616,34618],{"class":480,"line":8587},[478,34615,33040],{"class":714},[478,34617,759],{"class":710},[478,34619,34620],{"class":714},"model(test_data_x)\n",[478,34622,34623],{"class":480,"line":8599},[478,34624,34625],{"class":770},"            # 查找每一行中最大值对应的下标\n",[478,34627,34628,34630,34632,34634,34636,34638,34640],{"class":480,"line":8611},[478,34629,33057],{"class":714},[478,34631,759],{"class":710},[478,34633,33062],{"class":714},[478,34635,33065],{"class":5782},[478,34637,759],{"class":710},[478,34639,193],{"class":495},[478,34641,720],{"class":714},[478,34643,34644],{"class":480,"line":8623},[478,34645,34646],{"class":770},"            # 计算正确率\n",[478,34648,34649],{"class":480,"line":10282},[478,34650,34651],{"class":770},"            # .data表示是一个不带梯度信息的tensor\n",[478,34653,34654],{"class":480,"line":10307},[478,34655,34656],{"class":770},"            # 如果预测正确，则准确度test_corrects加1\n",[478,34658,34659,34662,34664,34666,34668],{"class":480,"line":10330},[478,34660,34661],{"class":714},"            test_corrects",[478,34663,10043],{"class":710},[478,34665,33167],{"class":714},[478,34667,3515],{"class":710},[478,34669,34670],{"class":714},"test_data_y.data)\n",[478,34672,34673],{"class":480,"line":10354},[478,34674,34675],{"class":770},"            # 将所有的测试样本进行累计\n",[478,34677,34678,34681,34683,34686,34688],{"class":480,"line":10359},[478,34679,34680],{"class":714},"            test_num",[478,34682,10043],{"class":710},[478,34684,34685],{"class":714},"test_data_x.size(",[478,34687,895],{"class":495},[478,34689,720],{"class":714},[478,34691,34692],{"class":480,"line":10364},[478,34693,2966],{"emptyLinePlaceholder":640},[478,34695,34696],{"class":480,"line":10369},[478,34697,34698],{"class":770},"        # 计算准确度\n",[478,34700,34701,34704,34706,34709,34711],{"class":480,"line":10378},[478,34702,34703],{"class":714},"        test_acc",[478,34705,759],{"class":710},[478,34707,34708],{"class":714},"test_corrects.double().item()",[478,34710,1284],{"class":710},[478,34712,34713],{"class":714},"test_num\n",[478,34715,34716],{"class":480,"line":10383},[478,34717,34718],{"class":770},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[478,34720,34721,34723,34725,34728],{"class":480,"line":10389},[478,34722,32831],{"class":495},[478,34724,263],{"class":714},[478,34726,34727],{"class":488},"\"测试的准确率：\"",[478,34729,34730],{"class":714},",test_acc)\n",[478,34732,34733],{"class":480,"line":10410},[478,34734,2966],{"emptyLinePlaceholder":640},[478,34736,34737],{"class":480,"line":10416},[478,34738,34739],{"class":770},"# 实现模型的测试功能\n",[478,34741,34742,34744,34746,34748,34750],{"class":480,"line":10430},[478,34743,2099],{"class":710},[478,34745,31600],{"class":495},[478,34747,3515],{"class":710},[478,34749,31605],{"class":488},[478,34751,4305],{"class":714},[478,34753,34754],{"class":480,"line":10436},[478,34755,34756],{"class":770},"    # 加载模型\n",[478,34758,34759,34761,34763],{"class":480,"line":10463},[478,34760,31669],{"class":714},[478,34762,759],{"class":710},[478,34764,34205],{"class":714},[478,34766,34767],{"class":480,"line":10472},[478,34768,34769],{"class":770},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[478,34771,34772],{"class":480,"line":10478},[478,34773,34774],{"class":770},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[478,34776,34777,34780,34783],{"class":480,"line":10486},[478,34778,34779],{"class":714},"    model.load_state_dict(torch.load(",[478,34781,34782],{"class":488},"'best_model.pth'",[478,34784,30877],{"class":714},[478,34786,34787],{"class":480,"line":10491},[478,34788,34789],{"class":770},"    # 数据加载\n",[478,34791,34792,34794,34796],{"class":480,"line":17169},[478,34793,34402],{"class":714},[478,34795,759],{"class":710},[478,34797,34798],{"class":714},"test_data_process()\n",[478,34800,34801],{"class":480,"line":17175},[478,34802,34803],{"class":770},"    # 加载模型测试的函数\n",[478,34805,34806],{"class":480,"line":17198},[478,34807,34808],{"class":714},"    test_model_process(model,test_dataloader)\n",[478,34810,34811],{"class":480,"line":17204},[478,34812,2966],{"emptyLinePlaceholder":640},[478,34814,34815],{"class":480,"line":17227},[478,34816,34817],{"class":770},"    # 验证集推理实现：\n",[478,34819,34820],{"class":480,"line":17241},[478,34821,34822],{"class":770},"    # 加载数据加载的更详细一些\n",[478,34824,34825,34827,34829,34831,34833,34835,34837],{"class":480,"line":17261},[478,34826,31617],{"class":714},[478,34828,759],{"class":710},[478,34830,31624],{"class":488},[478,34832,2271],{"class":710},[478,34834,31629],{"class":714},[478,34836,2268],{"class":710},[478,34838,34499],{"class":488},[478,34840,34841,34843,34845],{"class":480,"line":17267},[478,34842,31669],{"class":714},[478,34844,759],{"class":710},[478,34846,32669],{"class":714},[478,34848,34849],{"class":480,"line":17278},[478,34850,34851],{"class":770},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[478,34853,34854],{"class":480,"line":17301},[478,34855,34856],{"class":770},"    # 顺序不可改变\n",[478,34858,34859,34862,34864,34866,34869,34871,34874,34876,34879,34881,34884,34886,34889,34891,34894,34896,34899,34901,34904,34906,34909,34911,34914],{"class":480,"line":17323},[478,34860,34861],{"class":714},"    classes",[478,34863,759],{"class":710},[478,34865,1585],{"class":714},[478,34867,34868],{"class":488},"'T-shirt\u002Ftop'",[478,34870,1079],{"class":714},[478,34872,34873],{"class":488},"'Trouser'",[478,34875,1079],{"class":714},[478,34877,34878],{"class":488},"'Pullover'",[478,34880,1079],{"class":714},[478,34882,34883],{"class":488},"'Dress'",[478,34885,1079],{"class":714},[478,34887,34888],{"class":488},"'Coat'",[478,34890,1079],{"class":714},[478,34892,34893],{"class":488},"'Sandal'",[478,34895,1079],{"class":714},[478,34897,34898],{"class":488},"'Shirt'",[478,34900,1079],{"class":714},[478,34902,34903],{"class":488},"'Sneaker'",[478,34905,1079],{"class":714},[478,34907,34908],{"class":488},"'Bag'",[478,34910,1079],{"class":714},[478,34912,34913],{"class":488},"'Ankle boot'",[478,34915,33626],{"class":714},[478,34917,34918,34920],{"class":480,"line":17328},[478,34919,34558],{"class":710},[478,34921,33264],{"class":714},[478,34923,34924],{"class":480,"line":17334},[478,34925,34926],{"class":770},"        # 将数据和标签都放到设备当中\n",[478,34928,34929,34931,34934,34936],{"class":480,"line":17348},[478,34930,3969],{"class":710},[478,34932,34933],{"class":714}," b_x,b_y ",[478,34935,26423],{"class":710},[478,34937,34577],{"class":714},[478,34939,34940,34942,34944],{"class":480,"line":17361},[478,34941,32990],{"class":714},[478,34943,759],{"class":710},[478,34945,32995],{"class":714},[478,34947,34948,34950,34952],{"class":480,"line":17366},[478,34949,33005],{"class":714},[478,34951,759],{"class":710},[478,34953,33010],{"class":714},[478,34955,34956],{"class":480,"line":17380},[478,34957,2966],{"emptyLinePlaceholder":640},[478,34959,34960],{"class":480,"line":17385},[478,34961,34962],{"class":770},"            # 设置模型为验证模式\n",[478,34964,34965],{"class":480,"line":17391},[478,34966,33255],{"class":714},[478,34968,34969],{"class":480,"line":17396},[478,34970,34971],{"class":770},"            # 模型推理结果\n",[478,34973,34974,34976,34978],{"class":480,"line":17410},[478,34975,33040],{"class":714},[478,34977,759],{"class":710},[478,34979,33045],{"class":714},[478,34981,34982],{"class":480,"line":17415},[478,34983,34984],{"class":770},"            # 获取最大下标，最大下标就是类别号\n",[478,34986,34987,34989,34991,34993,34995,34997,34999],{"class":480,"line":17420},[478,34988,33057],{"class":714},[478,34990,759],{"class":710},[478,34992,33062],{"class":714},[478,34994,33065],{"class":5782},[478,34996,759],{"class":710},[478,34998,193],{"class":495},[478,35000,720],{"class":714},[478,35002,35003],{"class":480,"line":17434},[478,35004,35005],{"class":770},"            # 取出张量中的数值\n",[478,35007,35008,35011,35013],{"class":480,"line":17446},[478,35009,35010],{"class":714},"            result",[478,35012,759],{"class":710},[478,35014,35015],{"class":714},"pre_lab.item()\n",[478,35017,35018,35021,35023],{"class":480,"line":17451},[478,35019,35020],{"class":714},"            label",[478,35022,759],{"class":710},[478,35024,35025],{"class":714},"b_y.item()\n",[478,35027,35028,35031,35033,35036,35039,35042,35044,35047],{"class":480,"line":17464},[478,35029,35030],{"class":495},"            print",[478,35032,263],{"class":714},[478,35034,35035],{"class":488},"\"预测值：\"",[478,35037,35038],{"class":714},",classes[result],",[478,35040,35041],{"class":488},"\"------\"",[478,35043,1079],{"class":714},[478,35045,35046],{"class":488},"\"真实值：\"",[478,35048,35049],{"class":714},",classes[label])\n",[19,35051,35052],{},"（2）AlexNet",[29,35054,35055],{},[32,35056,35057],{},"神经网络构建",[469,35059,35061],{"className":30758,"code":35060,"language":30760,"meta":54,"style":54},"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",[475,35062,35063,35069,35079,35089,35101,35105,35122,35130,35145,35157,35199,35226,35269,35295,35339,35382,35425,35452,35456,35466,35471,35499,35518,35537,35541,35546,35554,35569,35579,35593,35603,35618,35633,35648,35659,35663,35668,35678,35693,35698,35712,35727,35739,35744,35755,35760,35766,35771,35783,35803,35808,35817],{"__ignoreMap":54},[478,35064,35065,35067],{"class":480,"line":481},[478,35066,30772],{"class":710},[478,35068,30775],{"class":714},[478,35070,35071,35073,35075,35077],{"class":480,"line":565},[478,35072,31117],{"class":710},[478,35074,31120],{"class":714},[478,35076,30772],{"class":710},[478,35078,31125],{"class":714},[478,35080,35081,35083,35085,35087],{"class":480,"line":579},[478,35082,31117],{"class":710},[478,35084,31137],{"class":714},[478,35086,30772],{"class":710},[478,35088,31142],{"class":714},[478,35090,35091,35093,35096,35098],{"class":480,"line":593},[478,35092,30772],{"class":710},[478,35094,35095],{"class":714}," torch.nn.functional ",[478,35097,31763],{"class":710},[478,35099,35100],{"class":714}," F\n",[478,35102,35103],{"class":480,"line":1769},[478,35104,2966],{"emptyLinePlaceholder":640},[478,35106,35107,35109,35112,35114,35116,35118,35120],{"class":480,"line":1783},[478,35108,15259],{"class":710},[478,35110,35111],{"class":484}," AlexNet",[478,35113,263],{"class":714},[478,35115,31158],{"class":484},[478,35117,1258],{"class":714},[478,35119,31163],{"class":484},[478,35121,31166],{"class":714},[478,35123,35124,35126,35128],{"class":480,"line":1789},[478,35125,31181],{"class":710},[478,35127,31184],{"class":495},[478,35129,31187],{"class":714},[478,35131,35132,35134,35137,35139,35141,35143],{"class":480,"line":1880},[478,35133,31197],{"class":495},[478,35135,35136],{"class":714},"(AlexNet,",[478,35138,31203],{"class":495},[478,35140,31206],{"class":714},[478,35142,31209],{"class":495},[478,35144,2542],{"class":714},[478,35146,35147,35149,35152,35154],{"class":480,"line":1886},[478,35148,31225],{"class":495},[478,35150,35151],{"class":714},".ReLu",[478,35153,759],{"class":710},[478,35155,35156],{"class":714},"nn.ReLU()\n",[478,35158,35159,35161,35163,35165,35167,35169,35171,35173,35175,35177,35179,35181,35183,35185,35187,35189,35191,35193,35195,35197],{"class":480,"line":1898},[478,35160,31225],{"class":495},[478,35162,31228],{"class":714},[478,35164,759],{"class":710},[478,35166,31233],{"class":714},[478,35168,31236],{"class":5782},[478,35170,759],{"class":710},[478,35172,193],{"class":495},[478,35174,1079],{"class":714},[478,35176,31245],{"class":5782},[478,35178,759],{"class":710},[478,35180,913],{"class":495},[478,35182,1079],{"class":714},[478,35184,31254],{"class":5782},[478,35186,759],{"class":710},[478,35188,1172],{"class":495},[478,35190,1079],{"class":714},[478,35192,31309],{"class":5782},[478,35194,759],{"class":710},[478,35196,994],{"class":495},[478,35198,720],{"class":714},[478,35200,35201,35203,35205,35207,35210,35212,35214,35216,35218,35220,35222,35224],{"class":480,"line":2180},[478,35202,31225],{"class":495},[478,35204,31293],{"class":714},[478,35206,759],{"class":710},[478,35208,35209],{"class":714},"nn.MaxPool2d(",[478,35211,31254],{"class":5782},[478,35213,759],{"class":710},[478,35215,783],{"class":495},[478,35217,1079],{"class":714},[478,35219,31309],{"class":5782},[478,35221,759],{"class":710},[478,35223,789],{"class":495},[478,35225,720],{"class":714},[478,35227,35228,35230,35232,35234,35236,35238,35240,35242,35244,35246,35248,35251,35253,35255,35257,35259,35261,35263,35265,35267],{"class":480,"line":2185},[478,35229,31225],{"class":495},[478,35231,31322],{"class":714},[478,35233,759],{"class":710},[478,35235,31233],{"class":714},[478,35237,31236],{"class":5782},[478,35239,759],{"class":710},[478,35241,913],{"class":495},[478,35243,1079],{"class":714},[478,35245,31245],{"class":5782},[478,35247,759],{"class":710},[478,35249,35250],{"class":495},"256",[478,35252,1079],{"class":714},[478,35254,31254],{"class":5782},[478,35256,759],{"class":710},[478,35258,1020],{"class":495},[478,35260,1079],{"class":714},[478,35262,31263],{"class":5782},[478,35264,759],{"class":710},[478,35266,789],{"class":495},[478,35268,720],{"class":714},[478,35270,35271,35273,35275,35277,35279,35281,35283,35285,35287,35289,35291,35293],{"class":480,"line":2191},[478,35272,31225],{"class":495},[478,35274,31357],{"class":714},[478,35276,759],{"class":710},[478,35278,35209],{"class":714},[478,35280,31254],{"class":5782},[478,35282,759],{"class":710},[478,35284,783],{"class":495},[478,35286,1079],{"class":714},[478,35288,31309],{"class":5782},[478,35290,759],{"class":710},[478,35292,789],{"class":495},[478,35294,720],{"class":714},[478,35296,35297,35299,35302,35304,35306,35308,35310,35312,35314,35316,35318,35321,35323,35325,35327,35329,35331,35333,35335,35337],{"class":480,"line":2196},[478,35298,31225],{"class":495},[478,35300,35301],{"class":714},".c5",[478,35303,759],{"class":710},[478,35305,31233],{"class":714},[478,35307,31236],{"class":5782},[478,35309,759],{"class":710},[478,35311,35250],{"class":495},[478,35313,1079],{"class":714},[478,35315,31245],{"class":5782},[478,35317,759],{"class":710},[478,35319,35320],{"class":495},"384",[478,35322,1079],{"class":714},[478,35324,31254],{"class":5782},[478,35326,759],{"class":710},[478,35328,783],{"class":495},[478,35330,1079],{"class":714},[478,35332,31263],{"class":5782},[478,35334,759],{"class":710},[478,35336,193],{"class":495},[478,35338,720],{"class":714},[478,35340,35341,35343,35346,35348,35350,35352,35354,35356,35358,35360,35362,35364,35366,35368,35370,35372,35374,35376,35378,35380],{"class":480,"line":2210},[478,35342,31225],{"class":495},[478,35344,35345],{"class":714},".c6",[478,35347,759],{"class":710},[478,35349,31233],{"class":714},[478,35351,31236],{"class":5782},[478,35353,759],{"class":710},[478,35355,35320],{"class":495},[478,35357,1079],{"class":714},[478,35359,31245],{"class":5782},[478,35361,759],{"class":710},[478,35363,35320],{"class":495},[478,35365,1079],{"class":714},[478,35367,31254],{"class":5782},[478,35369,759],{"class":710},[478,35371,783],{"class":495},[478,35373,1079],{"class":714},[478,35375,31263],{"class":5782},[478,35377,759],{"class":710},[478,35379,193],{"class":495},[478,35381,720],{"class":714},[478,35383,35384,35386,35389,35391,35393,35395,35397,35399,35401,35403,35405,35407,35409,35411,35413,35415,35417,35419,35421,35423],{"class":480,"line":2215},[478,35385,31225],{"class":495},[478,35387,35388],{"class":714},".c7",[478,35390,759],{"class":710},[478,35392,31233],{"class":714},[478,35394,31236],{"class":5782},[478,35396,759],{"class":710},[478,35398,35320],{"class":495},[478,35400,1079],{"class":714},[478,35402,31245],{"class":5782},[478,35404,759],{"class":710},[478,35406,35250],{"class":495},[478,35408,1079],{"class":714},[478,35410,31254],{"class":5782},[478,35412,759],{"class":710},[478,35414,783],{"class":495},[478,35416,1079],{"class":714},[478,35418,31263],{"class":5782},[478,35420,759],{"class":710},[478,35422,193],{"class":495},[478,35424,720],{"class":714},[478,35426,35427,35429,35432,35434,35436,35438,35440,35442,35444,35446,35448,35450],{"class":480,"line":2221},[478,35428,31225],{"class":495},[478,35430,35431],{"class":714},".s8",[478,35433,759],{"class":710},[478,35435,35209],{"class":714},[478,35437,31254],{"class":5782},[478,35439,759],{"class":710},[478,35441,783],{"class":495},[478,35443,1079],{"class":714},[478,35445,31309],{"class":5782},[478,35447,759],{"class":710},[478,35449,789],{"class":495},[478,35451,720],{"class":714},[478,35453,35454],{"class":480,"line":2241},[478,35455,31382],{"class":770},[478,35457,35458,35460,35462,35464],{"class":480,"line":2246},[478,35459,31225],{"class":495},[478,35461,31389],{"class":714},[478,35463,759],{"class":710},[478,35465,31394],{"class":714},[478,35467,35468],{"class":480,"line":2260},[478,35469,35470],{"class":770},"       # 定义全连接层\n",[478,35472,35473,35475,35478,35480,35482,35484,35486,35488,35490,35492,35494,35497],{"class":480,"line":2265},[478,35474,31225],{"class":495},[478,35476,35477],{"class":714},".f1",[478,35479,759],{"class":710},[478,35481,31411],{"class":714},[478,35483,1045],{"class":495},[478,35485,1155],{"class":710},[478,35487,1045],{"class":495},[478,35489,1155],{"class":710},[478,35491,35250],{"class":495},[478,35493,1079],{"class":714},[478,35495,35496],{"class":495},"4096",[478,35498,720],{"class":714},[478,35500,35501,35503,35506,35508,35510,35512,35514,35516],{"class":480,"line":2294},[478,35502,31225],{"class":495},[478,35504,35505],{"class":714},".f2",[478,35507,759],{"class":710},[478,35509,31411],{"class":714},[478,35511,35496],{"class":495},[478,35513,1079],{"class":714},[478,35515,35496],{"class":495},[478,35517,720],{"class":714},[478,35519,35520,35522,35525,35527,35529,35531,35533,35535],{"class":480,"line":2299},[478,35521,31225],{"class":495},[478,35523,35524],{"class":714},".f3",[478,35526,759],{"class":710},[478,35528,31411],{"class":714},[478,35530,35496],{"class":495},[478,35532,1079],{"class":714},[478,35534,1146],{"class":495},[478,35536,720],{"class":714},[478,35538,35539],{"class":480,"line":2316},[478,35540,2966],{"emptyLinePlaceholder":640},[478,35542,35543],{"class":480,"line":2321},[478,35544,35545],{"class":770},"    # 定义前向传播\n",[478,35547,35548,35550,35552],{"class":480,"line":2326},[478,35549,31181],{"class":710},[478,35551,31473],{"class":484},[478,35553,31476],{"class":714},[478,35555,35556,35558,35560,35562,35565,35567],{"class":480,"line":2331},[478,35557,31481],{"class":714},[478,35559,759],{"class":710},[478,35561,31203],{"class":495},[478,35563,35564],{"class":714},".ReLu(",[478,35566,31203],{"class":495},[478,35568,31493],{"class":714},[478,35570,35571,35573,35575,35577],{"class":480,"line":2345},[478,35572,31481],{"class":714},[478,35574,759],{"class":710},[478,35576,31203],{"class":495},[478,35578,31504],{"class":714},[478,35580,35581,35583,35585,35587,35589,35591],{"class":480,"line":2350},[478,35582,31481],{"class":714},[478,35584,759],{"class":710},[478,35586,31203],{"class":495},[478,35588,35564],{"class":714},[478,35590,31203],{"class":495},[478,35592,31519],{"class":714},[478,35594,35595,35597,35599,35601],{"class":480,"line":3143},[478,35596,31481],{"class":714},[478,35598,759],{"class":710},[478,35600,31203],{"class":495},[478,35602,31530],{"class":714},[478,35604,35605,35607,35609,35611,35613,35615],{"class":480,"line":3157},[478,35606,31481],{"class":714},[478,35608,759],{"class":710},[478,35610,31203],{"class":495},[478,35612,35564],{"class":714},[478,35614,31203],{"class":495},[478,35616,35617],{"class":714},".c5(x))\n",[478,35619,35620,35622,35624,35626,35628,35630],{"class":480,"line":3165},[478,35621,31481],{"class":714},[478,35623,759],{"class":710},[478,35625,31203],{"class":495},[478,35627,35564],{"class":714},[478,35629,31203],{"class":495},[478,35631,35632],{"class":714},".c6(x))\n",[478,35634,35635,35637,35639,35641,35643,35645],{"class":480,"line":3170},[478,35636,31481],{"class":714},[478,35638,759],{"class":710},[478,35640,31203],{"class":495},[478,35642,35564],{"class":714},[478,35644,31203],{"class":495},[478,35646,35647],{"class":714},".c7(x))\n",[478,35649,35650,35652,35654,35656],{"class":480,"line":3176},[478,35651,31481],{"class":714},[478,35653,759],{"class":710},[478,35655,31203],{"class":495},[478,35657,35658],{"class":714},".s8(x)\n",[478,35660,35661],{"class":480,"line":3182},[478,35662,2966],{"emptyLinePlaceholder":640},[478,35664,35665],{"class":480,"line":3187},[478,35666,35667],{"class":770},"        # 展平加线性全连接层\n",[478,35669,35670,35672,35674,35676],{"class":480,"line":8514},[478,35671,31481],{"class":714},[478,35673,759],{"class":710},[478,35675,31203],{"class":495},[478,35677,31541],{"class":714},[478,35679,35680,35682,35684,35686,35688,35690],{"class":480,"line":8538},[478,35681,31481],{"class":714},[478,35683,759],{"class":710},[478,35685,31203],{"class":495},[478,35687,35564],{"class":714},[478,35689,31203],{"class":495},[478,35691,35692],{"class":714},".f1(x))\n",[478,35694,35695],{"class":480,"line":8543},[478,35696,35697],{"class":770},"        # 还需要dropout对神经元随机进行失活\n",[478,35699,35700,35702,35704,35707,35710],{"class":480,"line":8549},[478,35701,31481],{"class":714},[478,35703,759],{"class":710},[478,35705,35706],{"class":714},"F.dropout(x,",[478,35708,35709],{"class":495},"0.5",[478,35711,720],{"class":714},[478,35713,35714,35716,35718,35720,35722,35724],{"class":480,"line":8576},[478,35715,31481],{"class":714},[478,35717,759],{"class":710},[478,35719,31203],{"class":495},[478,35721,35564],{"class":714},[478,35723,31203],{"class":495},[478,35725,35726],{"class":714},".f2(x))\n",[478,35728,35729,35731,35733,35735,35737],{"class":480,"line":8581},[478,35730,31481],{"class":714},[478,35732,759],{"class":710},[478,35734,35706],{"class":714},[478,35736,35709],{"class":495},[478,35738,720],{"class":714},[478,35740,35741],{"class":480,"line":8587},[478,35742,35743],{"class":770},"        # 直接输出\n",[478,35745,35746,35748,35750,35752],{"class":480,"line":8599},[478,35747,31481],{"class":714},[478,35749,759],{"class":710},[478,35751,31203],{"class":495},[478,35753,35754],{"class":714},".f3(x)\n",[478,35756,35757],{"class":480,"line":8611},[478,35758,35759],{"class":770},"        # 前向传播输出\n",[478,35761,35762,35764],{"class":480,"line":8623},[478,35763,15317],{"class":710},[478,35765,31589],{"class":714},[478,35767,35768],{"class":480,"line":10282},[478,35769,35770],{"class":770},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[478,35772,35773,35775,35777,35779,35781],{"class":480,"line":10307},[478,35774,2099],{"class":710},[478,35776,31600],{"class":495},[478,35778,3515],{"class":710},[478,35780,31605],{"class":488},[478,35782,4305],{"class":714},[478,35784,35785,35787,35789,35791,35793,35795,35797,35799,35801],{"class":480,"line":10330},[478,35786,31617],{"class":714},[478,35788,759],{"class":710},[478,35790,30831],{"class":714},[478,35792,31624],{"class":488},[478,35794,2271],{"class":710},[478,35796,31629],{"class":714},[478,35798,2268],{"class":710},[478,35800,30856],{"class":488},[478,35802,720],{"class":714},[478,35804,35805],{"class":480,"line":10354},[478,35806,35807],{"class":770},"    # 模型实例化，然后将实例化的模型放到设备中\n",[478,35809,35810,35812,35814],{"class":480,"line":10359},[478,35811,31669],{"class":714},[478,35813,759],{"class":710},[478,35815,35816],{"class":714},"AlexNet().to(device)\n",[478,35818,35819,35821,35823,35825,35827,35830,35832,35834],{"class":480,"line":10364},[478,35820,31679],{"class":495},[478,35822,31682],{"class":714},[478,35824,193],{"class":495},[478,35826,1079],{"class":714},[478,35828,35829],{"class":495},"227",[478,35831,1079],{"class":714},[478,35833,35829],{"class":495},[478,35835,31695],{"class":714},[29,35837,35838],{"start":565},[32,35839,31708],{},[469,35841,35843],{"className":30758,"code":35842,"language":30760,"meta":54,"style":54},"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",[475,35844,35845,35851,35857,35867,35873,35883,35893,35903,35913,35923,35927,35938,35948,35952,35956,35960,35968,35980,35990,36006,36016,36048,36062,36072,36082,36086,36096,36110,36120,36130,36140,36146,36150,36154,36158,36162,36166,36174,36194,36198,36202,36206,36210,36214,36230,36234,36238,36246,36250,36254,36262,36266,36270,36274,36282,36286,36290,36294,36298,36306,36310,36318,36322,36330,36334,36342,36346,36354,36358,36362,36370,36374,36378,36382,36394,36418,36432,36436,36440,36444,36452,36456,36464,36468,36476,36480,36488,36492,36500,36504,36512,36516,36528,36532,36540,36544,36552,36556,36560,36564,36568,36576,36580,36596,36600,36608,36612,36616,36620,36624,36628,36632,36636,36652,36656,36668,36672,36684,36688,36700,36704,36712,36716,36724,36728,36732,36737,36743,36747,36756,36760,36777,36781,36790,36794,36812,36825,36830,36843,36847,36851,36859,36863,36867,36875,36879,36887,36891,36899,36903,36907,36949,36991,36995,36999,37015,37019,37035,37039,37043,37051,37055,37059,37071,37109,37114,37119,37128,37132,37146,37156,37162,37168,37174,37180,37184,37188,37194,37198,37202,37210,37214,37232,37236,37240,37244,37260,37264,37268,37272,37276,37280,37300,37320,37324,37328,37332,37340,37348,37352,37368,37388,37408,37412,37416,37424,37432,37436,37440,37444,37456,37460,37470,37478,37495],{"__ignoreMap":54},[478,35846,35847,35849],{"class":480,"line":481},[478,35848,30772],{"class":710},[478,35850,32202],{"class":714},[478,35852,35853,35855],{"class":480,"line":565},[478,35854,30772],{"class":710},[478,35856,32209],{"class":714},[478,35858,35859,35861,35863,35865],{"class":480,"line":579},[478,35860,30772],{"class":710},[478,35862,32220],{"class":714},[478,35864,31763],{"class":710},[478,35866,32225],{"class":714},[478,35868,35869,35871],{"class":480,"line":593},[478,35870,30772],{"class":710},[478,35872,30775],{"class":714},[478,35874,35875,35877,35879,35881],{"class":480,"line":1769},[478,35876,31117],{"class":710},[478,35878,31795],{"class":714},[478,35880,30772],{"class":710},[478,35882,32242],{"class":714},[478,35884,35885,35887,35889,35891],{"class":480,"line":1783},[478,35886,31117],{"class":710},[478,35888,31748],{"class":714},[478,35890,30772],{"class":710},[478,35892,31753],{"class":714},[478,35894,35895,35897,35899,35901],{"class":480,"line":1789},[478,35896,31117],{"class":710},[478,35898,31778],{"class":714},[478,35900,30772],{"class":710},[478,35902,31783],{"class":714},[478,35904,35905,35907,35909,35911],{"class":480,"line":1880},[478,35906,30772],{"class":710},[478,35908,31795],{"class":714},[478,35910,31763],{"class":710},[478,35912,31800],{"class":714},[478,35914,35915,35917,35919,35921],{"class":480,"line":1886},[478,35916,30772],{"class":710},[478,35918,31812],{"class":714},[478,35920,31763],{"class":710},[478,35922,31817],{"class":714},[478,35924,35925],{"class":480,"line":1898},[478,35926,32287],{"class":770},[478,35928,35929,35931,35933,35935],{"class":480,"line":2180},[478,35930,31117],{"class":710},[478,35932,32294],{"class":714},[478,35934,30772],{"class":710},[478,35936,35937],{"class":714}," AlexNet\n",[478,35939,35940,35942,35944,35946],{"class":480,"line":2185},[478,35941,31117],{"class":710},[478,35943,31120],{"class":714},[478,35945,30772],{"class":710},[478,35947,31125],{"class":714},[478,35949,35950],{"class":480,"line":2191},[478,35951,2966],{"emptyLinePlaceholder":640},[478,35953,35954],{"class":480,"line":2196},[478,35955,2966],{"emptyLinePlaceholder":640},[478,35957,35958],{"class":480,"line":2210},[478,35959,32322],{"class":770},[478,35961,35962,35964,35966],{"class":480,"line":2215},[478,35963,32327],{"class":710},[478,35965,32330],{"class":484},[478,35967,32333],{"class":714},[478,35969,35970,35972,35974,35976,35978],{"class":480,"line":2221},[478,35971,32338],{"class":714},[478,35973,759],{"class":710},[478,35975,31835],{"class":714},[478,35977,31843],{"class":488},[478,35979,31846],{"class":714},[478,35981,35982,35984,35986,35988],{"class":480,"line":2241},[478,35983,32351],{"class":5782},[478,35985,759],{"class":710},[478,35987,31856],{"class":495},[478,35989,31846],{"class":714},[478,35991,35992,35994,35996,35998,36000,36002,36004],{"class":480,"line":2246},[478,35993,32362],{"class":5782},[478,35995,759],{"class":710},[478,35997,31873],{"class":714},[478,35999,31876],{"class":5782},[478,36001,759],{"class":710},[478,36003,35829],{"class":495},[478,36005,31884],{"class":714},[478,36007,36008,36010,36012,36014],{"class":480,"line":2260},[478,36009,32379],{"class":5782},[478,36011,759],{"class":710},[478,36013,31856],{"class":495},[478,36015,720],{"class":714},[478,36017,36018,36020,36022,36024,36026,36028,36030,36032,36034,36036,36038,36040,36042,36044,36046],{"class":480,"line":2265},[478,36019,32390],{"class":714},[478,36021,759],{"class":710},[478,36023,32395],{"class":714},[478,36025,32398],{"class":495},[478,36027,263],{"class":714},[478,36029,32403],{"class":495},[478,36031,1155],{"class":710},[478,36033,7924],{"class":495},[478,36035,32410],{"class":714},[478,36037,32398],{"class":495},[478,36039,263],{"class":714},[478,36041,32417],{"class":495},[478,36043,1155],{"class":710},[478,36045,7924],{"class":495},[478,36047,32424],{"class":714},[478,36049,36050,36052,36054,36056,36058,36060],{"class":480,"line":2294},[478,36051,32429],{"class":714},[478,36053,759],{"class":710},[478,36055,32434],{"class":714},[478,36057,31917],{"class":5782},[478,36059,759],{"class":710},[478,36061,31922],{"class":714},[478,36063,36064,36066,36068,36070],{"class":480,"line":2299},[478,36065,32445],{"class":5782},[478,36067,759],{"class":710},[478,36069,32450],{"class":495},[478,36071,31846],{"class":714},[478,36073,36074,36076,36078,36080],{"class":480,"line":2316},[478,36075,32457],{"class":5782},[478,36077,759],{"class":710},[478,36079,31856],{"class":495},[478,36081,31846],{"class":714},[478,36083,36084],{"class":480,"line":2321},[478,36085,32468],{"class":770},[478,36087,36088,36090,36092,36094],{"class":480,"line":2326},[478,36089,32473],{"class":5782},[478,36091,759],{"class":710},[478,36093,1096],{"class":495},[478,36095,720],{"class":714},[478,36097,36098,36100,36102,36104,36106,36108],{"class":480,"line":2331},[478,36099,32484],{"class":714},[478,36101,759],{"class":710},[478,36103,31914],{"class":714},[478,36105,31917],{"class":5782},[478,36107,759],{"class":710},[478,36109,32495],{"class":714},[478,36111,36112,36114,36116,36118],{"class":480,"line":2345},[478,36113,32500],{"class":5782},[478,36115,759],{"class":710},[478,36117,32450],{"class":495},[478,36119,31846],{"class":714},[478,36121,36122,36124,36126,36128],{"class":480,"line":2350},[478,36123,32511],{"class":5782},[478,36125,759],{"class":710},[478,36127,31856],{"class":495},[478,36129,31846],{"class":714},[478,36131,36132,36134,36136,36138],{"class":480,"line":3143},[478,36133,32522],{"class":5782},[478,36135,759],{"class":710},[478,36137,1096],{"class":495},[478,36139,720],{"class":714},[478,36141,36142,36144],{"class":480,"line":3157},[478,36143,4656],{"class":710},[478,36145,32535],{"class":714},[478,36147,36148],{"class":480,"line":3165},[478,36149,2966],{"emptyLinePlaceholder":640},[478,36151,36152],{"class":480,"line":3170},[478,36153,32544],{"class":770},[478,36155,36156],{"class":480,"line":3176},[478,36157,32549],{"class":770},[478,36159,36160],{"class":480,"line":3182},[478,36161,2966],{"emptyLinePlaceholder":640},[478,36163,36164],{"class":480,"line":3187},[478,36165,32558],{"class":770},[478,36167,36168,36170,36172],{"class":480,"line":8514},[478,36169,32327],{"class":710},[478,36171,32565],{"class":484},[478,36173,32568],{"class":714},[478,36175,36176,36178,36180,36182,36184,36186,36188,36190,36192],{"class":480,"line":8538},[478,36177,31617],{"class":714},[478,36179,759],{"class":710},[478,36181,30831],{"class":714},[478,36183,31624],{"class":488},[478,36185,2271],{"class":710},[478,36187,31629],{"class":714},[478,36189,2268],{"class":710},[478,36191,32587],{"class":488},[478,36193,720],{"class":714},[478,36195,36196],{"class":480,"line":8543},[478,36197,2966],{"emptyLinePlaceholder":640},[478,36199,36200],{"class":480,"line":8549},[478,36201,2966],{"emptyLinePlaceholder":640},[478,36203,36204],{"class":480,"line":8576},[478,36205,32602],{"class":770},[478,36207,36208],{"class":480,"line":8581},[478,36209,32607],{"class":770},[478,36211,36212],{"class":480,"line":8587},[478,36213,32612],{"class":770},[478,36215,36216,36218,36220,36222,36224,36226,36228],{"class":480,"line":8599},[478,36217,32617],{"class":714},[478,36219,759],{"class":710},[478,36221,32622],{"class":714},[478,36223,32625],{"class":5782},[478,36225,759],{"class":710},[478,36227,32630],{"class":495},[478,36229,720],{"class":714},[478,36231,36232],{"class":480,"line":8611},[478,36233,2966],{"emptyLinePlaceholder":640},[478,36235,36236],{"class":480,"line":8623},[478,36237,32641],{"class":770},[478,36239,36240,36242,36244],{"class":480,"line":10282},[478,36241,32646],{"class":714},[478,36243,759],{"class":710},[478,36245,32651],{"class":714},[478,36247,36248],{"class":480,"line":10307},[478,36249,2966],{"emptyLinePlaceholder":640},[478,36251,36252],{"class":480,"line":10330},[478,36253,32660],{"class":770},[478,36255,36256,36258,36260],{"class":480,"line":10354},[478,36257,31669],{"class":714},[478,36259,759],{"class":710},[478,36261,32669],{"class":714},[478,36263,36264],{"class":480,"line":10359},[478,36265,32674],{"class":770},[478,36267,36268],{"class":480,"line":10364},[478,36269,32679],{"class":770},[478,36271,36272],{"class":480,"line":10369},[478,36273,32684],{"class":770},[478,36275,36276,36278,36280],{"class":480,"line":10378},[478,36277,32689],{"class":714},[478,36279,759],{"class":710},[478,36281,32694],{"class":714},[478,36283,36284],{"class":480,"line":10383},[478,36285,2966],{"emptyLinePlaceholder":640},[478,36287,36288],{"class":480,"line":10389},[478,36289,2966],{"emptyLinePlaceholder":640},[478,36291,36292],{"class":480,"line":10410},[478,36293,32707],{"class":770},[478,36295,36296],{"class":480,"line":10416},[478,36297,32712],{"class":770},[478,36299,36300,36302,36304],{"class":480,"line":10430},[478,36301,32717],{"class":714},[478,36303,759],{"class":710},[478,36305,32722],{"class":495},[478,36307,36308],{"class":480,"line":10436},[478,36309,32727],{"class":770},[478,36311,36312,36314,36316],{"class":480,"line":10463},[478,36313,32732],{"class":714},[478,36315,759],{"class":710},[478,36317,32737],{"class":714},[478,36319,36320],{"class":480,"line":10472},[478,36321,32742],{"class":770},[478,36323,36324,36326,36328],{"class":480,"line":10478},[478,36325,32747],{"class":714},[478,36327,759],{"class":710},[478,36329,32737],{"class":714},[478,36331,36332],{"class":480,"line":10486},[478,36333,32756],{"class":770},[478,36335,36336,36338,36340],{"class":480,"line":10491},[478,36337,32761],{"class":714},[478,36339,759],{"class":710},[478,36341,32737],{"class":714},[478,36343,36344],{"class":480,"line":17169},[478,36345,32770],{"class":770},[478,36347,36348,36350,36352],{"class":480,"line":17175},[478,36349,32775],{"class":714},[478,36351,759],{"class":710},[478,36353,32737],{"class":714},[478,36355,36356],{"class":480,"line":17198},[478,36357,2966],{"emptyLinePlaceholder":640},[478,36359,36360],{"class":480,"line":17204},[478,36361,32788],{"class":770},[478,36363,36364,36366,36368],{"class":480,"line":17227},[478,36365,32793],{"class":714},[478,36367,759],{"class":710},[478,36369,32798],{"class":714},[478,36371,36372],{"class":480,"line":17241},[478,36373,2966],{"emptyLinePlaceholder":640},[478,36375,36376],{"class":480,"line":17261},[478,36377,2966],{"emptyLinePlaceholder":640},[478,36379,36380],{"class":480,"line":17267},[478,36381,32811],{"class":770},[478,36383,36384,36386,36388,36390,36392],{"class":480,"line":17278},[478,36385,3767],{"class":710},[478,36387,32818],{"class":714},[478,36389,26423],{"class":710},[478,36391,32823],{"class":495},[478,36393,32826],{"class":714},[478,36395,36396,36398,36400,36402,36404,36406,36408,36410,36412,36414,36416],{"class":480,"line":17301},[478,36397,32831],{"class":495},[478,36399,263],{"class":714},[478,36401,32836],{"class":488},[478,36403,32839],{"class":495},[478,36405,1284],{"class":488},[478,36407,32839],{"class":495},[478,36409,952],{"class":488},[478,36411,32848],{"class":714},[478,36413,1232],{"class":710},[478,36415,193],{"class":495},[478,36417,30877],{"class":714},[478,36419,36420,36422,36424,36426,36428,36430],{"class":480,"line":17323},[478,36421,32831],{"class":495},[478,36423,263],{"class":714},[478,36425,32863],{"class":488},[478,36427,1155],{"class":710},[478,36429,1146],{"class":495},[478,36431,720],{"class":714},[478,36433,36434],{"class":480,"line":17328},[478,36435,2966],{"emptyLinePlaceholder":640},[478,36437,36438],{"class":480,"line":17334},[478,36439,32878],{"class":770},[478,36441,36442],{"class":480,"line":17348},[478,36443,32883],{"class":770},[478,36445,36446,36448,36450],{"class":480,"line":17361},[478,36447,32888],{"class":714},[478,36449,759],{"class":710},[478,36451,32722],{"class":495},[478,36453,36454],{"class":480,"line":17366},[478,36455,32897],{"class":770},[478,36457,36458,36460,36462],{"class":480,"line":17380},[478,36459,32902],{"class":714},[478,36461,759],{"class":710},[478,36463,3651],{"class":495},[478,36465,36466],{"class":480,"line":17385},[478,36467,32911],{"class":770},[478,36469,36470,36472,36474],{"class":480,"line":17391},[478,36471,32916],{"class":714},[478,36473,759],{"class":710},[478,36475,32722],{"class":495},[478,36477,36478],{"class":480,"line":17396},[478,36479,32925],{"class":770},[478,36481,36482,36484,36486],{"class":480,"line":17410},[478,36483,32930],{"class":714},[478,36485,759],{"class":710},[478,36487,3651],{"class":495},[478,36489,36490],{"class":480,"line":17415},[478,36491,32939],{"class":770},[478,36493,36494,36496,36498],{"class":480,"line":17420},[478,36495,32944],{"class":714},[478,36497,759],{"class":710},[478,36499,3651],{"class":495},[478,36501,36502],{"class":480,"line":17434},[478,36503,32953],{"class":770},[478,36505,36506,36508,36510],{"class":480,"line":17446},[478,36507,32958],{"class":714},[478,36509,759],{"class":710},[478,36511,3651],{"class":495},[478,36513,36514],{"class":480,"line":17451},[478,36515,32967],{"class":770},[478,36517,36518,36520,36522,36524,36526],{"class":480,"line":17464},[478,36519,3969],{"class":710},[478,36521,31981],{"class":714},[478,36523,26423],{"class":710},[478,36525,31986],{"class":495},[478,36527,32980],{"class":714},[478,36529,36530],{"class":480,"line":17469},[478,36531,32985],{"class":770},[478,36533,36534,36536,36538],{"class":480,"line":17474},[478,36535,32990],{"class":714},[478,36537,759],{"class":710},[478,36539,32995],{"class":714},[478,36541,36542],{"class":480,"line":17479},[478,36543,33000],{"class":770},[478,36545,36546,36548,36550],{"class":480,"line":17492},[478,36547,33005],{"class":714},[478,36549,759],{"class":710},[478,36551,33010],{"class":714},[478,36553,36554],{"class":480,"line":17497},[478,36555,33016],{"class":770},[478,36557,36558],{"class":480,"line":33013},[478,36559,33022],{"class":714},[478,36561,36562],{"class":480,"line":33019},[478,36563,33028],{"class":770},[478,36565,36566],{"class":480,"line":33025},[478,36567,33034],{"class":770},[478,36569,36570,36572,36574],{"class":480,"line":33031},[478,36571,33040],{"class":714},[478,36573,759],{"class":710},[478,36575,33045],{"class":714},[478,36577,36578],{"class":480,"line":33037},[478,36579,33051],{"class":770},[478,36581,36582,36584,36586,36588,36590,36592,36594],{"class":480,"line":33048},[478,36583,33057],{"class":714},[478,36585,759],{"class":710},[478,36587,33062],{"class":714},[478,36589,33065],{"class":5782},[478,36591,759],{"class":710},[478,36593,193],{"class":495},[478,36595,720],{"class":714},[478,36597,36598],{"class":480,"line":33054},[478,36599,33077],{"class":770},[478,36601,36602,36604,36606],{"class":480,"line":33074},[478,36603,33083],{"class":714},[478,36605,759],{"class":710},[478,36607,33088],{"class":714},[478,36609,36610],{"class":480,"line":33080},[478,36611,33094],{"class":770},[478,36613,36614],{"class":480,"line":33091},[478,36615,33100],{"class":714},[478,36617,36618],{"class":480,"line":33097},[478,36619,33106],{"class":770},[478,36621,36622],{"class":480,"line":33103},[478,36623,33112],{"class":714},[478,36625,36626],{"class":480,"line":33109},[478,36627,33118],{"class":770},[478,36629,36630],{"class":480,"line":33115},[478,36631,33124],{"class":714},[478,36633,36634],{"class":480,"line":33121},[478,36635,33130],{"class":770},[478,36637,36638,36640,36642,36644,36646,36648,36650],{"class":480,"line":33127},[478,36639,33136],{"class":714},[478,36641,10043],{"class":710},[478,36643,33141],{"class":714},[478,36645,1155],{"class":710},[478,36647,33146],{"class":714},[478,36649,895],{"class":495},[478,36651,720],{"class":714},[478,36653,36654],{"class":480,"line":33133},[478,36655,33156],{"class":770},[478,36657,36658,36660,36662,36664,36666],{"class":480,"line":33153},[478,36659,33162],{"class":714},[478,36661,10043],{"class":710},[478,36663,33167],{"class":714},[478,36665,3515],{"class":710},[478,36667,33172],{"class":714},[478,36669,36670],{"class":480,"line":33159},[478,36671,33178],{"class":770},[478,36673,36674,36676,36678,36680,36682],{"class":480,"line":33175},[478,36675,33184],{"class":714},[478,36677,10043],{"class":710},[478,36679,33146],{"class":714},[478,36681,895],{"class":495},[478,36683,720],{"class":714},[478,36685,36686],{"class":480,"line":33181},[478,36687,33198],{"class":770},[478,36689,36690,36692,36694,36696,36698],{"class":480,"line":33195},[478,36691,3969],{"class":710},[478,36693,33206],{"class":714},[478,36695,26423],{"class":710},[478,36697,31986],{"class":495},[478,36699,33213],{"class":714},[478,36701,36702],{"class":480,"line":33201},[478,36703,33219],{"class":770},[478,36705,36706,36708,36710],{"class":480,"line":33216},[478,36707,32990],{"class":714},[478,36709,759],{"class":710},[478,36711,32995],{"class":714},[478,36713,36714],{"class":480,"line":33222},[478,36715,33234],{"class":770},[478,36717,36718,36720,36722],{"class":480,"line":33231},[478,36719,33005],{"class":714},[478,36721,759],{"class":710},[478,36723,33010],{"class":714},[478,36725,36726],{"class":480,"line":33237},[478,36727,33249],{"class":770},[478,36729,36730],{"class":480,"line":33246},[478,36731,33255],{"class":714},[478,36733,36734],{"class":480,"line":33252},[478,36735,36736],{"class":770},"            # 验证时不计算梯度以节省内存\u002F计算\n",[478,36738,36739,36741],{"class":480,"line":33258},[478,36740,33261],{"class":710},[478,36742,33264],{"class":714},[478,36744,36745],{"class":480,"line":33267},[478,36746,33270],{"class":770},[478,36748,36749,36752,36754],{"class":480,"line":33273},[478,36750,36751],{"class":714},"                output",[478,36753,759],{"class":710},[478,36755,33045],{"class":714},[478,36757,36758],{"class":480,"line":33284},[478,36759,33287],{"class":770},[478,36761,36762,36765,36767,36769,36771,36773,36775],{"class":480,"line":33290},[478,36763,36764],{"class":714},"                pre_lab",[478,36766,759],{"class":710},[478,36768,33062],{"class":714},[478,36770,33065],{"class":5782},[478,36772,759],{"class":710},[478,36774,193],{"class":495},[478,36776,720],{"class":714},[478,36778,36779],{"class":480,"line":33309},[478,36780,33312],{"class":770},[478,36782,36783,36786,36788],{"class":480,"line":33315},[478,36784,36785],{"class":714},"                val_batch_loss",[478,36787,759],{"class":710},[478,36789,33088],{"class":714},[478,36791,36792],{"class":480,"line":33326},[478,36793,33329],{"class":770},[478,36795,36796,36799,36801,36804,36806,36808,36810],{"class":480,"line":33332},[478,36797,36798],{"class":714},"                val_loss",[478,36800,10043],{"class":710},[478,36802,36803],{"class":714},"val_batch_loss.item()",[478,36805,1155],{"class":710},[478,36807,33146],{"class":714},[478,36809,895],{"class":495},[478,36811,720],{"class":714},[478,36813,36814,36817,36819,36821,36823],{"class":480,"line":33352},[478,36815,36816],{"class":714},"                val_corrects",[478,36818,10043],{"class":710},[478,36820,33167],{"class":714},[478,36822,3515],{"class":710},[478,36824,33172],{"class":714},[478,36826,36827],{"class":480,"line":33368},[478,36828,36829],{"class":770},"            # 当前用于验证的样本数量\n",[478,36831,36832,36835,36837,36839,36841],{"class":480,"line":33374},[478,36833,36834],{"class":714},"            val_num",[478,36836,10043],{"class":710},[478,36838,33146],{"class":714},[478,36840,895],{"class":495},[478,36842,720],{"class":714},[478,36844,36845],{"class":480,"line":33388},[478,36846,33391],{"class":770},[478,36848,36849],{"class":480,"line":33394},[478,36850,33397],{"class":770},[478,36852,36853,36855,36857],{"class":480,"line":33400},[478,36854,33403],{"class":714},[478,36856,1284],{"class":710},[478,36858,33408],{"class":714},[478,36860,36861],{"class":480,"line":33411},[478,36862,33414],{"class":770},[478,36864,36865],{"class":480,"line":33417},[478,36866,33420],{"class":770},[478,36868,36869,36871,36873],{"class":480,"line":33423},[478,36870,33426],{"class":714},[478,36872,1284],{"class":710},[478,36874,33408],{"class":714},[478,36876,36877],{"class":480,"line":33433},[478,36878,33436],{"class":770},[478,36880,36881,36883,36885],{"class":480,"line":33439},[478,36882,33442],{"class":714},[478,36884,1284],{"class":710},[478,36886,33447],{"class":714},[478,36888,36889],{"class":480,"line":33450},[478,36890,33453],{"class":770},[478,36892,36893,36895,36897],{"class":480,"line":33456},[478,36894,33459],{"class":714},[478,36896,1284],{"class":710},[478,36898,33447],{"class":714},[478,36900,36901],{"class":480,"line":33466},[478,36902,2966],{"emptyLinePlaceholder":640},[478,36904,36905],{"class":480,"line":33471},[478,36906,33474],{"class":770},[478,36908,36909,36911,36913,36915,36917,36919,36921,36923,36925,36927,36929,36931,36933,36935,36937,36939,36941,36943,36945,36947],{"class":480,"line":33477},[478,36910,32831],{"class":495},[478,36912,263],{"class":714},[478,36914,4158],{"class":488},[478,36916,32839],{"class":495},[478,36918,33488],{"class":488},[478,36920,1591],{"class":495},[478,36922,33493],{"class":710},[478,36924,1641],{"class":495},[478,36926,33498],{"class":488},[478,36928,1591],{"class":495},[478,36930,33493],{"class":710},[478,36932,1641],{"class":495},[478,36934,4158],{"class":488},[478,36936,33509],{"class":714},[478,36938,1232],{"class":710},[478,36940,193],{"class":495},[478,36942,33516],{"class":714},[478,36944,1232],{"class":710},[478,36946,193],{"class":495},[478,36948,33523],{"class":714},[478,36950,36951,36953,36955,36957,36959,36961,36963,36965,36967,36969,36971,36973,36975,36977,36979,36981,36983,36985,36987,36989],{"class":480,"line":33526},[478,36952,32831],{"class":495},[478,36954,263],{"class":714},[478,36956,4158],{"class":488},[478,36958,32839],{"class":495},[478,36960,33537],{"class":488},[478,36962,1591],{"class":495},[478,36964,33493],{"class":710},[478,36966,1641],{"class":495},[478,36968,33546],{"class":488},[478,36970,1591],{"class":495},[478,36972,33493],{"class":710},[478,36974,1641],{"class":495},[478,36976,4158],{"class":488},[478,36978,33557],{"class":714},[478,36980,1232],{"class":710},[478,36982,193],{"class":495},[478,36984,33564],{"class":714},[478,36986,1232],{"class":710},[478,36988,193],{"class":495},[478,36990,33523],{"class":714},[478,36992,36993],{"class":480,"line":33573},[478,36994,2966],{"emptyLinePlaceholder":640},[478,36996,36997],{"class":480,"line":33578},[478,36998,33581],{"class":770},[478,37000,37001,37003,37005,37007,37009,37011,37013],{"class":480,"line":33584},[478,37002,3063],{"class":710},[478,37004,33589],{"class":714},[478,37006,1232],{"class":710},[478,37008,193],{"class":495},[478,37010,1635],{"class":714},[478,37012,1655],{"class":710},[478,37014,33600],{"class":714},[478,37016,37017],{"class":480,"line":33603},[478,37018,33606],{"class":770},[478,37020,37021,37023,37025,37027,37029,37031,37033],{"class":480,"line":33609},[478,37022,33612],{"class":714},[478,37024,753],{"class":495},[478,37026,759],{"class":710},[478,37028,33619],{"class":714},[478,37030,1232],{"class":710},[478,37032,193],{"class":495},[478,37034,33626],{"class":714},[478,37036,37037],{"class":480,"line":33629},[478,37038,33632],{"class":770},[478,37040,37041],{"class":480,"line":33635},[478,37042,33638],{"class":770},[478,37044,37045,37047,37049],{"class":480,"line":33641},[478,37046,33644],{"class":714},[478,37048,759],{"class":710},[478,37050,32694],{"class":714},[478,37052,37053],{"class":480,"line":33651},[478,37054,2966],{"emptyLinePlaceholder":640},[478,37056,37057],{"class":480,"line":33656},[478,37058,33659],{"class":770},[478,37060,37061,37063,37065,37067,37069],{"class":480,"line":33662},[478,37062,33665],{"class":714},[478,37064,759],{"class":710},[478,37066,33670],{"class":714},[478,37068,1232],{"class":710},[478,37070,33675],{"class":714},[478,37072,37073,37075,37077,37079,37081,37083,37085,37087,37089,37091,37093,37095,37097,37099,37101,37103,37105,37107],{"class":480,"line":33678},[478,37074,32831],{"class":495},[478,37076,263],{"class":714},[478,37078,33685],{"class":488},[478,37080,1591],{"class":495},[478,37082,33690],{"class":710},[478,37084,1641],{"class":495},[478,37086,1244],{"class":488},[478,37088,1591],{"class":495},[478,37090,33690],{"class":710},[478,37092,1641],{"class":495},[478,37094,33703],{"class":488},[478,37096,33706],{"class":714},[478,37098,33709],{"class":710},[478,37100,1602],{"class":495},[478,37102,33714],{"class":714},[478,37104,1029],{"class":710},[478,37106,1602],{"class":495},[478,37108,30877],{"class":714},[478,37110,37111],{"class":480,"line":33723},[478,37112,37113],{"class":770},"    # 选择最优参数并保存\n",[478,37115,37116],{"class":480,"line":33729},[478,37117,37118],{"class":770},"    # 保存最佳模型权重字典\n",[478,37120,37121,37124,37126],{"class":480,"line":33735},[478,37122,37123],{"class":714},"    torch.save(best_model_wts,",[478,37125,33747],{"class":488},[478,37127,720],{"class":714},[478,37129,37130],{"class":480,"line":33741},[478,37131,33767],{"class":770},[478,37133,37134,37136,37138,37140,37142,37144],{"class":480,"line":33752},[478,37135,33773],{"class":714},[478,37137,759],{"class":710},[478,37139,33778],{"class":714},[478,37141,33781],{"class":5782},[478,37143,759],{"class":710},[478,37145,2114],{"class":714},[478,37147,37148,37150,37152,37154],{"class":480,"line":33758},[478,37149,33791],{"class":488},[478,37151,1554],{"class":714},[478,37153,33796],{"class":495},[478,37155,33799],{"class":714},[478,37157,37158,37160],{"class":480,"line":33764},[478,37159,33805],{"class":488},[478,37161,33808],{"class":714},[478,37163,37164,37166],{"class":480,"line":33770},[478,37165,33814],{"class":488},[478,37167,33817],{"class":714},[478,37169,37170,37172],{"class":480,"line":33788},[478,37171,33823],{"class":488},[478,37173,33826],{"class":714},[478,37175,37176,37178],{"class":480,"line":33802},[478,37177,33832],{"class":488},[478,37179,33835],{"class":714},[478,37181,37182],{"class":480,"line":33811},[478,37183,33841],{"class":714},[478,37185,37186],{"class":480,"line":33820},[478,37187,33847],{"class":770},[478,37189,37190,37192],{"class":480,"line":33829},[478,37191,4656],{"class":710},[478,37193,33855],{"class":714},[478,37195,37196],{"class":480,"line":33838},[478,37197,2966],{"emptyLinePlaceholder":640},[478,37199,37200],{"class":480,"line":33844},[478,37201,33866],{"class":770},[478,37203,37204,37206,37208],{"class":480,"line":33850},[478,37205,32327],{"class":710},[478,37207,33874],{"class":484},[478,37209,33877],{"class":714},[478,37211,37212],{"class":480,"line":33858},[478,37213,33883],{"class":770},[478,37215,37216,37218,37220,37222,37224,37226,37228,37230],{"class":480,"line":33863},[478,37217,33889],{"class":714},[478,37219,32073],{"class":5782},[478,37221,759],{"class":710},[478,37223,263],{"class":714},[478,37225,1198],{"class":495},[478,37227,1079],{"class":714},[478,37229,994],{"class":495},[478,37231,30877],{"class":714},[478,37233,37234],{"class":480,"line":33869},[478,37235,33909],{"class":770},[478,37237,37238],{"class":480,"line":33880},[478,37239,33915],{"class":770},[478,37241,37242],{"class":480,"line":33886},[478,37243,33921],{"class":770},[478,37245,37246,37248,37250,37252,37254,37256,37258],{"class":480,"line":33906},[478,37247,32107],{"class":714},[478,37249,193],{"class":495},[478,37251,1079],{"class":714},[478,37253,789],{"class":495},[478,37255,1079],{"class":714},[478,37257,193],{"class":495},[478,37259,720],{"class":714},[478,37261,37262],{"class":480,"line":33912},[478,37263,33944],{"class":770},[478,37265,37266],{"class":480,"line":33918},[478,37267,33950],{"class":770},[478,37269,37270],{"class":480,"line":33924},[478,37271,33956],{"class":770},[478,37273,37274],{"class":480,"line":33941},[478,37275,33962],{"class":770},[478,37277,37278],{"class":480,"line":33947},[478,37279,33968],{"class":770},[478,37281,37282,37284,37286,37288,37290,37292,37294,37296,37298],{"class":480,"line":33953},[478,37283,33974],{"class":714},[478,37285,33977],{"class":488},[478,37287,33980],{"class":714},[478,37289,33983],{"class":488},[478,37291,1079],{"class":714},[478,37293,33988],{"class":5782},[478,37295,759],{"class":710},[478,37297,33993],{"class":488},[478,37299,720],{"class":714},[478,37301,37302,37304,37306,37308,37310,37312,37314,37316,37318],{"class":480,"line":33959},[478,37303,33974],{"class":714},[478,37305,33977],{"class":488},[478,37307,34005],{"class":714},[478,37309,34008],{"class":488},[478,37311,1079],{"class":714},[478,37313,33988],{"class":5782},[478,37315,759],{"class":710},[478,37317,34017],{"class":488},[478,37319,720],{"class":714},[478,37321,37322],{"class":480,"line":33965},[478,37323,34025],{"class":770},[478,37325,37326],{"class":480,"line":33971},[478,37327,34031],{"class":714},[478,37329,37330],{"class":480,"line":33998},[478,37331,34037],{"class":770},[478,37333,37334,37336,37338],{"class":480,"line":34022},[478,37335,34043],{"class":714},[478,37337,34046],{"class":488},[478,37339,720],{"class":714},[478,37341,37342,37344,37346],{"class":480,"line":34028},[478,37343,34054],{"class":714},[478,37345,34057],{"class":488},[478,37347,720],{"class":714},[478,37349,37350],{"class":480,"line":34034},[478,37351,34065],{"class":770},[478,37353,37354,37356,37358,37360,37362,37364,37366],{"class":480,"line":34040},[478,37355,32107],{"class":714},[478,37357,193],{"class":495},[478,37359,1079],{"class":714},[478,37361,789],{"class":495},[478,37363,1079],{"class":714},[478,37365,789],{"class":495},[478,37367,720],{"class":714},[478,37369,37370,37372,37374,37376,37378,37380,37382,37384,37386],{"class":480,"line":34051},[478,37371,33974],{"class":714},[478,37373,33977],{"class":488},[478,37375,34092],{"class":714},[478,37377,33983],{"class":488},[478,37379,1079],{"class":714},[478,37381,33988],{"class":5782},[478,37383,759],{"class":710},[478,37385,34103],{"class":488},[478,37387,720],{"class":714},[478,37389,37390,37392,37394,37396,37398,37400,37402,37404,37406],{"class":480,"line":34062},[478,37391,33974],{"class":714},[478,37393,33977],{"class":488},[478,37395,34115],{"class":714},[478,37397,34008],{"class":488},[478,37399,1079],{"class":714},[478,37401,33988],{"class":5782},[478,37403,759],{"class":710},[478,37405,34126],{"class":488},[478,37407,720],{"class":714},[478,37409,37410],{"class":480,"line":34068},[478,37411,34134],{"class":770},[478,37413,37414],{"class":480,"line":34085},[478,37415,34031],{"class":714},[478,37417,37418,37420,37422],{"class":480,"line":34108},[478,37419,34043],{"class":714},[478,37421,33977],{"class":488},[478,37423,720],{"class":714},[478,37425,37426,37428,37430],{"class":480,"line":34131},[478,37427,34054],{"class":714},[478,37429,34156],{"class":488},[478,37431,720],{"class":714},[478,37433,37434],{"class":480,"line":34137},[478,37435,34164],{"class":714},[478,37437,37438],{"class":480,"line":34142},[478,37439,2966],{"emptyLinePlaceholder":640},[478,37441,37442],{"class":480,"line":34151},[478,37443,34175],{"class":770},[478,37445,37446,37448,37450,37452,37454],{"class":480,"line":34161},[478,37447,2099],{"class":710},[478,37449,31600],{"class":495},[478,37451,3515],{"class":710},[478,37453,31605],{"class":488},[478,37455,4305],{"class":714},[478,37457,37458],{"class":480,"line":34167},[478,37459,34194],{"class":770},[478,37461,37462,37465,37467],{"class":480,"line":34172},[478,37463,37464],{"class":714},"    AlexNet",[478,37466,759],{"class":710},[478,37468,37469],{"class":714},"AlexNet()\n",[478,37471,37472,37474,37476],{"class":480,"line":34178},[478,37473,34211],{"class":714},[478,37475,759],{"class":710},[478,37477,34216],{"class":714},[478,37479,37480,37482,37484,37487,37489,37491,37493],{"class":480,"line":34191},[478,37481,33773],{"class":714},[478,37483,759],{"class":710},[478,37485,37486],{"class":714},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[478,37488,34229],{"class":5782},[478,37490,759],{"class":710},[478,37492,1396],{"class":495},[478,37494,720],{"class":714},[478,37496,37497],{"class":480,"line":34197},[478,37498,34241],{"class":714},[29,37500,37501],{"start":579},[32,37502,34254],{},[469,37504,37506],{"className":30758,"code":37505,"language":30760,"meta":54,"style":54},"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",[475,37507,37508,37514,37524,37534,37544,37548,37558,37568,37579,37583,37587,37591,37599,37615,37625,37641,37651,37665,37669,37679,37689,37699,37705,37709,37713,37721,37725,37741,37749,37753,37757,37765,37773,37777,37781,37785,37789,37795,37799,37809,37817,37825,37829,37833,37837,37845,37849,37865,37869,37873,37877,37889,37893,37905,37909,37913,37925,37929,37939,37943,37947,37959,37963,37971,37975,37979,37987,37991,37999,38003,38007,38011,38015,38019,38035,38043,38047,38051,38099,38105,38109,38119,38127,38135,38139,38143,38147,38151,38159,38163,38179,38183,38191,38199],{"__ignoreMap":54},[478,37509,37510,37512],{"class":480,"line":481},[478,37511,30772],{"class":710},[478,37513,30775],{"class":714},[478,37515,37516,37518,37520,37522],{"class":480,"line":565},[478,37517,30772],{"class":710},[478,37519,31795],{"class":714},[478,37521,31763],{"class":710},[478,37523,31800],{"class":714},[478,37525,37526,37528,37530,37532],{"class":480,"line":579},[478,37527,31117],{"class":710},[478,37529,34282],{"class":714},[478,37531,30772],{"class":710},[478,37533,34287],{"class":714},[478,37535,37536,37538,37540,37542],{"class":480,"line":593},[478,37537,31117],{"class":710},[478,37539,31778],{"class":714},[478,37541,30772],{"class":710},[478,37543,31783],{"class":714},[478,37545,37546],{"class":480,"line":1769},[478,37547,34302],{"class":770},[478,37549,37550,37552,37554,37556],{"class":480,"line":1783},[478,37551,31117],{"class":710},[478,37553,31748],{"class":714},[478,37555,30772],{"class":710},[478,37557,31753],{"class":714},[478,37559,37560,37562,37564,37566],{"class":480,"line":1789},[478,37561,31117],{"class":710},[478,37563,32294],{"class":714},[478,37565,30772],{"class":710},[478,37567,35937],{"class":714},[478,37569,37570,37572,37575,37577],{"class":480,"line":1880},[478,37571,31117],{"class":710},[478,37573,37574],{"class":714}," 练习.AlexNet.model ",[478,37576,30772],{"class":710},[478,37578,35937],{"class":714},[478,37580,37581],{"class":480,"line":1886},[478,37582,2966],{"emptyLinePlaceholder":640},[478,37584,37585],{"class":480,"line":1898},[478,37586,2966],{"emptyLinePlaceholder":640},[478,37588,37589],{"class":480,"line":2180},[478,37590,34331],{"class":770},[478,37592,37593,37595,37597],{"class":480,"line":2185},[478,37594,32327],{"class":710},[478,37596,34338],{"class":484},[478,37598,32333],{"class":714},[478,37600,37601,37603,37605,37607,37609,37611,37613],{"class":480,"line":2191},[478,37602,34345],{"class":714},[478,37604,759],{"class":710},[478,37606,31835],{"class":714},[478,37608,31838],{"class":5782},[478,37610,759],{"class":710},[478,37612,31843],{"class":488},[478,37614,31846],{"class":714},[478,37616,37617,37619,37621,37623],{"class":480,"line":2196},[478,37618,34362],{"class":5782},[478,37620,759],{"class":710},[478,37622,34367],{"class":495},[478,37624,31846],{"class":714},[478,37626,37627,37629,37631,37633,37635,37637,37639],{"class":480,"line":2210},[478,37628,34374],{"class":5782},[478,37630,759],{"class":710},[478,37632,31873],{"class":714},[478,37634,31876],{"class":5782},[478,37636,759],{"class":710},[478,37638,35829],{"class":495},[478,37640,31884],{"class":714},[478,37642,37643,37645,37647,37649],{"class":480,"line":2215},[478,37644,34391],{"class":5782},[478,37646,759],{"class":710},[478,37648,31856],{"class":495},[478,37650,720],{"class":714},[478,37652,37653,37655,37657,37659,37661,37663],{"class":480,"line":2221},[478,37654,34402],{"class":714},[478,37656,759],{"class":710},[478,37658,31914],{"class":714},[478,37660,31917],{"class":5782},[478,37662,759],{"class":710},[478,37664,34413],{"class":714},[478,37666,37667],{"class":480,"line":2241},[478,37668,34418],{"class":770},[478,37670,37671,37673,37675,37677],{"class":480,"line":2246},[478,37672,34423],{"class":5782},[478,37674,759],{"class":710},[478,37676,193],{"class":495},[478,37678,31846],{"class":714},[478,37680,37681,37683,37685,37687],{"class":480,"line":2260},[478,37682,34434],{"class":5782},[478,37684,759],{"class":710},[478,37686,31856],{"class":495},[478,37688,31846],{"class":714},[478,37690,37691,37693,37695,37697],{"class":480,"line":2265},[478,37692,34445],{"class":5782},[478,37694,759],{"class":710},[478,37696,895],{"class":495},[478,37698,720],{"class":714},[478,37700,37701,37703],{"class":480,"line":2294},[478,37702,4656],{"class":710},[478,37704,34458],{"class":714},[478,37706,37707],{"class":480,"line":2299},[478,37708,2966],{"emptyLinePlaceholder":640},[478,37710,37711],{"class":480,"line":2316},[478,37712,34467],{"class":770},[478,37714,37715,37717,37719],{"class":480,"line":2321},[478,37716,32327],{"class":710},[478,37718,34474],{"class":484},[478,37720,34477],{"class":714},[478,37722,37723],{"class":480,"line":2326},[478,37724,34482],{"class":770},[478,37726,37727,37729,37731,37733,37735,37737,37739],{"class":480,"line":2331},[478,37728,31617],{"class":714},[478,37730,759],{"class":710},[478,37732,31624],{"class":488},[478,37734,2271],{"class":710},[478,37736,31629],{"class":714},[478,37738,2268],{"class":710},[478,37740,34499],{"class":488},[478,37742,37743,37745,37747],{"class":480,"line":2345},[478,37744,31669],{"class":714},[478,37746,759],{"class":710},[478,37748,32669],{"class":714},[478,37750,37751],{"class":480,"line":2350},[478,37752,2966],{"emptyLinePlaceholder":640},[478,37754,37755],{"class":480,"line":3143},[478,37756,34516],{"class":770},[478,37758,37759,37761,37763],{"class":480,"line":3157},[478,37760,34521],{"class":714},[478,37762,759],{"class":710},[478,37764,32722],{"class":495},[478,37766,37767,37769,37771],{"class":480,"line":3165},[478,37768,34530],{"class":714},[478,37770,759],{"class":710},[478,37772,3651],{"class":495},[478,37774,37775],{"class":480,"line":3170},[478,37776,2966],{"emptyLinePlaceholder":640},[478,37778,37779],{"class":480,"line":3176},[478,37780,34543],{"class":770},[478,37782,37783],{"class":480,"line":3182},[478,37784,34548],{"class":770},[478,37786,37787],{"class":480,"line":3187},[478,37788,34553],{"class":770},[478,37790,37791,37793],{"class":480,"line":8514},[478,37792,34558],{"class":710},[478,37794,33264],{"class":714},[478,37796,37797],{"class":480,"line":8538},[478,37798,34565],{"class":770},[478,37800,37801,37803,37805,37807],{"class":480,"line":8543},[478,37802,3969],{"class":710},[478,37804,34572],{"class":714},[478,37806,26423],{"class":710},[478,37808,34577],{"class":714},[478,37810,37811,37813,37815],{"class":480,"line":8549},[478,37812,34582],{"class":714},[478,37814,759],{"class":710},[478,37816,34587],{"class":714},[478,37818,37819,37821,37823],{"class":480,"line":8576},[478,37820,34592],{"class":714},[478,37822,759],{"class":710},[478,37824,34597],{"class":714},[478,37826,37827],{"class":480,"line":8581},[478,37828,34602],{"class":770},[478,37830,37831],{"class":480,"line":8587},[478,37832,33255],{"class":714},[478,37834,37835],{"class":480,"line":8599},[478,37836,34611],{"class":770},[478,37838,37839,37841,37843],{"class":480,"line":8611},[478,37840,33040],{"class":714},[478,37842,759],{"class":710},[478,37844,34620],{"class":714},[478,37846,37847],{"class":480,"line":8623},[478,37848,34625],{"class":770},[478,37850,37851,37853,37855,37857,37859,37861,37863],{"class":480,"line":10282},[478,37852,33057],{"class":714},[478,37854,759],{"class":710},[478,37856,33062],{"class":714},[478,37858,33065],{"class":5782},[478,37860,759],{"class":710},[478,37862,193],{"class":495},[478,37864,720],{"class":714},[478,37866,37867],{"class":480,"line":10307},[478,37868,34646],{"class":770},[478,37870,37871],{"class":480,"line":10330},[478,37872,34651],{"class":770},[478,37874,37875],{"class":480,"line":10354},[478,37876,34656],{"class":770},[478,37878,37879,37881,37883,37885,37887],{"class":480,"line":10359},[478,37880,34661],{"class":714},[478,37882,10043],{"class":710},[478,37884,33167],{"class":714},[478,37886,3515],{"class":710},[478,37888,34670],{"class":714},[478,37890,37891],{"class":480,"line":10364},[478,37892,34675],{"class":770},[478,37894,37895,37897,37899,37901,37903],{"class":480,"line":10369},[478,37896,34680],{"class":714},[478,37898,10043],{"class":710},[478,37900,34685],{"class":714},[478,37902,895],{"class":495},[478,37904,720],{"class":714},[478,37906,37907],{"class":480,"line":10378},[478,37908,2966],{"emptyLinePlaceholder":640},[478,37910,37911],{"class":480,"line":10383},[478,37912,34698],{"class":770},[478,37914,37915,37917,37919,37921,37923],{"class":480,"line":10389},[478,37916,34703],{"class":714},[478,37918,759],{"class":710},[478,37920,34708],{"class":714},[478,37922,1284],{"class":710},[478,37924,34713],{"class":714},[478,37926,37927],{"class":480,"line":10410},[478,37928,34718],{"class":770},[478,37930,37931,37933,37935,37937],{"class":480,"line":10416},[478,37932,32831],{"class":495},[478,37934,263],{"class":714},[478,37936,34727],{"class":488},[478,37938,34730],{"class":714},[478,37940,37941],{"class":480,"line":10430},[478,37942,2966],{"emptyLinePlaceholder":640},[478,37944,37945],{"class":480,"line":10436},[478,37946,34739],{"class":770},[478,37948,37949,37951,37953,37955,37957],{"class":480,"line":10463},[478,37950,2099],{"class":710},[478,37952,31600],{"class":495},[478,37954,3515],{"class":710},[478,37956,31605],{"class":488},[478,37958,4305],{"class":714},[478,37960,37961],{"class":480,"line":10472},[478,37962,34756],{"class":770},[478,37964,37965,37967,37969],{"class":480,"line":10478},[478,37966,31669],{"class":714},[478,37968,759],{"class":710},[478,37970,37469],{"class":714},[478,37972,37973],{"class":480,"line":10486},[478,37974,34769],{"class":770},[478,37976,37977],{"class":480,"line":10491},[478,37978,34774],{"class":770},[478,37980,37981,37983,37985],{"class":480,"line":17169},[478,37982,34779],{"class":714},[478,37984,34782],{"class":488},[478,37986,30877],{"class":714},[478,37988,37989],{"class":480,"line":17175},[478,37990,34789],{"class":770},[478,37992,37993,37995,37997],{"class":480,"line":17198},[478,37994,34402],{"class":714},[478,37996,759],{"class":710},[478,37998,34798],{"class":714},[478,38000,38001],{"class":480,"line":17204},[478,38002,34803],{"class":770},[478,38004,38005],{"class":480,"line":17227},[478,38006,34808],{"class":714},[478,38008,38009],{"class":480,"line":17241},[478,38010,2966],{"emptyLinePlaceholder":640},[478,38012,38013],{"class":480,"line":17261},[478,38014,34817],{"class":770},[478,38016,38017],{"class":480,"line":17267},[478,38018,34822],{"class":770},[478,38020,38021,38023,38025,38027,38029,38031,38033],{"class":480,"line":17278},[478,38022,31617],{"class":714},[478,38024,759],{"class":710},[478,38026,31624],{"class":488},[478,38028,2271],{"class":710},[478,38030,31629],{"class":714},[478,38032,2268],{"class":710},[478,38034,34499],{"class":488},[478,38036,38037,38039,38041],{"class":480,"line":17301},[478,38038,31669],{"class":714},[478,38040,759],{"class":710},[478,38042,32669],{"class":714},[478,38044,38045],{"class":480,"line":17323},[478,38046,34851],{"class":770},[478,38048,38049],{"class":480,"line":17328},[478,38050,34856],{"class":770},[478,38052,38053,38055,38057,38059,38061,38063,38065,38067,38069,38071,38073,38075,38077,38079,38081,38083,38085,38087,38089,38091,38093,38095,38097],{"class":480,"line":17334},[478,38054,34861],{"class":714},[478,38056,759],{"class":710},[478,38058,1585],{"class":714},[478,38060,34868],{"class":488},[478,38062,1079],{"class":714},[478,38064,34873],{"class":488},[478,38066,1079],{"class":714},[478,38068,34878],{"class":488},[478,38070,1079],{"class":714},[478,38072,34883],{"class":488},[478,38074,1079],{"class":714},[478,38076,34888],{"class":488},[478,38078,1079],{"class":714},[478,38080,34893],{"class":488},[478,38082,1079],{"class":714},[478,38084,34898],{"class":488},[478,38086,1079],{"class":714},[478,38088,34903],{"class":488},[478,38090,1079],{"class":714},[478,38092,34908],{"class":488},[478,38094,1079],{"class":714},[478,38096,34913],{"class":488},[478,38098,33626],{"class":714},[478,38100,38101,38103],{"class":480,"line":17348},[478,38102,34558],{"class":710},[478,38104,33264],{"class":714},[478,38106,38107],{"class":480,"line":17361},[478,38108,34926],{"class":770},[478,38110,38111,38113,38115,38117],{"class":480,"line":17366},[478,38112,3969],{"class":710},[478,38114,34933],{"class":714},[478,38116,26423],{"class":710},[478,38118,34577],{"class":714},[478,38120,38121,38123,38125],{"class":480,"line":17380},[478,38122,32990],{"class":714},[478,38124,759],{"class":710},[478,38126,32995],{"class":714},[478,38128,38129,38131,38133],{"class":480,"line":17385},[478,38130,33005],{"class":714},[478,38132,759],{"class":710},[478,38134,33010],{"class":714},[478,38136,38137],{"class":480,"line":17391},[478,38138,2966],{"emptyLinePlaceholder":640},[478,38140,38141],{"class":480,"line":17396},[478,38142,34962],{"class":770},[478,38144,38145],{"class":480,"line":17410},[478,38146,33255],{"class":714},[478,38148,38149],{"class":480,"line":17415},[478,38150,34971],{"class":770},[478,38152,38153,38155,38157],{"class":480,"line":17420},[478,38154,33040],{"class":714},[478,38156,759],{"class":710},[478,38158,33045],{"class":714},[478,38160,38161],{"class":480,"line":17434},[478,38162,34984],{"class":770},[478,38164,38165,38167,38169,38171,38173,38175,38177],{"class":480,"line":17446},[478,38166,33057],{"class":714},[478,38168,759],{"class":710},[478,38170,33062],{"class":714},[478,38172,33065],{"class":5782},[478,38174,759],{"class":710},[478,38176,193],{"class":495},[478,38178,720],{"class":714},[478,38180,38181],{"class":480,"line":17451},[478,38182,35005],{"class":770},[478,38184,38185,38187,38189],{"class":480,"line":17464},[478,38186,35010],{"class":714},[478,38188,759],{"class":710},[478,38190,35015],{"class":714},[478,38192,38193,38195,38197],{"class":480,"line":17469},[478,38194,35020],{"class":714},[478,38196,759],{"class":710},[478,38198,35025],{"class":714},[478,38200,38201,38203,38205,38207,38209,38211,38213,38215],{"class":480,"line":17474},[478,38202,35030],{"class":495},[478,38204,263],{"class":714},[478,38206,35035],{"class":488},[478,38208,35038],{"class":714},[478,38210,35041],{"class":488},[478,38212,1079],{"class":714},[478,38214,35046],{"class":488},[478,38216,35049],{"class":714},[129,38218,38220],{"id":38219},"_22vgg","2.2.VGG",[22563,38222,38224],{"id":38223},"_221原理","2.2.1.原理",[19,38226,38227],{},[52,38228],{"alt":54,"src":38229},"\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,38231,38232],{},[52,38233],{"alt":54,"src":38234},"\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,38236,38237],{},[52,38238],{"alt":54,"src":38239},"\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,38241,38242],{},"参数详细描述：",[19,38244,38245],{},[52,38246],{"alt":54,"src":38247},"\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,38249,38250],{},[52,38251],{"alt":54,"src":38252},"\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,38254,38255],{},[52,38256],{"alt":54,"src":38257},"\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,38259,38260],{},[52,38261],{"alt":54,"src":38262},"\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,38264,38265],{},[52,38266],{"alt":54,"src":38267},"\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",[22563,38269,38271],{"id":38270},"_222代码实现","2.2.2.代码实现",[29,38273,38274],{},[32,38275,38276],{},"网络搭建",[469,38278,38280],{"className":30758,"code":38279,"language":30760,"meta":54,"style":54},"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",[475,38281,38282,38288,38300,38310,38320,38324,38341,38349,38368,38373,38378,38390,38428,38433,38469,38473,38502,38507,38512,38523,38559,38563,38599,38603,38631,38635,38640,38651,38687,38691,38727,38731,38767,38771,38799,38803,38808,38819,38856,38860,38896,38900,38936,38940,38968,38972,38977,38988,39024,39028,39064,39068,39104,39108,39136,39140,39145,39156,39161,39166,39171,39192,39196,39208,39212,39224,39228,39232,39237,39242,39257,39262,39272,39277,39292,39297,39316,39321,39330,39335,39345,39350,39355,39369,39374,39388,39396,39400,39404,39412,39423,39434,39445,39456,39467,39478,39484,39488,39493,39506,39526,39532,39541],{"__ignoreMap":54},[478,38283,38284,38286],{"class":480,"line":481},[478,38285,30772],{"class":710},[478,38287,30775],{"class":714},[478,38289,38290,38292,38295,38297],{"class":480,"line":565},[478,38291,31117],{"class":710},[478,38293,38294],{"class":714}," sympy.core.sympify ",[478,38296,30772],{"class":710},[478,38298,38299],{"class":714}," kernS\n",[478,38301,38302,38304,38306,38308],{"class":480,"line":579},[478,38303,31117],{"class":710},[478,38305,31120],{"class":714},[478,38307,30772],{"class":710},[478,38309,31125],{"class":714},[478,38311,38312,38314,38316,38318],{"class":480,"line":593},[478,38313,31117],{"class":710},[478,38315,31137],{"class":714},[478,38317,30772],{"class":710},[478,38319,31142],{"class":714},[478,38321,38322],{"class":480,"line":1769},[478,38323,2966],{"emptyLinePlaceholder":640},[478,38325,38326,38328,38331,38333,38335,38337,38339],{"class":480,"line":1783},[478,38327,15259],{"class":710},[478,38329,38330],{"class":484}," VGG16",[478,38332,263],{"class":714},[478,38334,31158],{"class":484},[478,38336,1258],{"class":714},[478,38338,31163],{"class":484},[478,38340,31166],{"class":714},[478,38342,38343,38345,38347],{"class":480,"line":1789},[478,38344,31181],{"class":710},[478,38346,31184],{"class":495},[478,38348,31187],{"class":714},[478,38350,38351,38353,38355,38358,38360,38362,38364,38366],{"class":480,"line":1880},[478,38352,31197],{"class":495},[478,38354,263],{"class":714},[478,38356,38357],{"class":495},"VGG16",[478,38359,13001],{"class":714},[478,38361,31203],{"class":495},[478,38363,31206],{"class":714},[478,38365,31209],{"class":495},[478,38367,2542],{"class":714},[478,38369,38370],{"class":480,"line":1886},[478,38371,38372],{"class":770},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[478,38374,38375],{"class":480,"line":1898},[478,38376,38377],{"class":770},"        # 这里用的是灰度图\n",[478,38379,38380,38382,38385,38387],{"class":480,"line":2180},[478,38381,31225],{"class":495},[478,38383,38384],{"class":714},".block1",[478,38386,759],{"class":710},[478,38388,38389],{"class":714},"nn.Sequential(\n",[478,38391,38392,38395,38397,38399,38401,38403,38405,38407,38409,38411,38413,38415,38417,38419,38421,38423,38425],{"class":480,"line":2185},[478,38393,38394],{"class":714},"            nn.Conv2d(",[478,38396,31236],{"class":5782},[478,38398,759],{"class":710},[478,38400,193],{"class":495},[478,38402,1079],{"class":714},[478,38404,31245],{"class":5782},[478,38406,759],{"class":710},[478,38408,907],{"class":495},[478,38410,1079],{"class":714},[478,38412,31254],{"class":5782},[478,38414,759],{"class":710},[478,38416,783],{"class":495},[478,38418,1079],{"class":714},[478,38420,31263],{"class":5782},[478,38422,759],{"class":710},[478,38424,193],{"class":495},[478,38426,38427],{"class":714},"),\n",[478,38429,38430],{"class":480,"line":2191},[478,38431,38432],{"class":714},"            nn.ReLU(),\n",[478,38434,38435,38437,38439,38441,38443,38445,38447,38449,38451,38453,38455,38457,38459,38461,38463,38465,38467],{"class":480,"line":2196},[478,38436,38394],{"class":714},[478,38438,31236],{"class":5782},[478,38440,759],{"class":710},[478,38442,907],{"class":495},[478,38444,1079],{"class":714},[478,38446,31245],{"class":5782},[478,38448,759],{"class":710},[478,38450,907],{"class":495},[478,38452,1079],{"class":714},[478,38454,31254],{"class":5782},[478,38456,759],{"class":710},[478,38458,783],{"class":495},[478,38460,1079],{"class":714},[478,38462,31263],{"class":5782},[478,38464,759],{"class":710},[478,38466,193],{"class":495},[478,38468,38427],{"class":714},[478,38470,38471],{"class":480,"line":2210},[478,38472,38432],{"class":714},[478,38474,38475,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500],{"class":480,"line":2215},[478,38476,38477],{"class":714},"            nn.MaxPool2d(",[478,38479,31254],{"class":5782},[478,38481,759],{"class":710},[478,38483,789],{"class":495},[478,38485,1079],{"class":714},[478,38487,31309],{"class":5782},[478,38489,759],{"class":710},[478,38491,789],{"class":495},[478,38493,1079],{"class":714},[478,38495,31263],{"class":5782},[478,38497,759],{"class":710},[478,38499,895],{"class":495},[478,38501,720],{"class":714},[478,38503,38504],{"class":480,"line":2221},[478,38505,38506],{"class":714},"        )\n",[478,38508,38509],{"class":480,"line":2241},[478,38510,38511],{"class":770},"        # 第二层\n",[478,38513,38514,38516,38519,38521],{"class":480,"line":2246},[478,38515,31225],{"class":495},[478,38517,38518],{"class":714},".block2",[478,38520,759],{"class":710},[478,38522,38389],{"class":714},[478,38524,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555,38557],{"class":480,"line":2260},[478,38526,38394],{"class":714},[478,38528,31236],{"class":5782},[478,38530,759],{"class":710},[478,38532,907],{"class":495},[478,38534,1079],{"class":714},[478,38536,31245],{"class":5782},[478,38538,759],{"class":710},[478,38540,32450],{"class":495},[478,38542,1079],{"class":714},[478,38544,31254],{"class":5782},[478,38546,759],{"class":710},[478,38548,783],{"class":495},[478,38550,1079],{"class":714},[478,38552,31263],{"class":5782},[478,38554,759],{"class":710},[478,38556,193],{"class":495},[478,38558,38427],{"class":714},[478,38560,38561],{"class":480,"line":2265},[478,38562,38432],{"class":714},[478,38564,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597],{"class":480,"line":2294},[478,38566,38394],{"class":714},[478,38568,31236],{"class":5782},[478,38570,759],{"class":710},[478,38572,32450],{"class":495},[478,38574,1079],{"class":714},[478,38576,31245],{"class":5782},[478,38578,759],{"class":710},[478,38580,32450],{"class":495},[478,38582,1079],{"class":714},[478,38584,31254],{"class":5782},[478,38586,759],{"class":710},[478,38588,783],{"class":495},[478,38590,1079],{"class":714},[478,38592,31263],{"class":5782},[478,38594,759],{"class":710},[478,38596,193],{"class":495},[478,38598,38427],{"class":714},[478,38600,38601],{"class":480,"line":2299},[478,38602,38432],{"class":714},[478,38604,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627,38629],{"class":480,"line":2316},[478,38606,38477],{"class":714},[478,38608,31254],{"class":5782},[478,38610,759],{"class":710},[478,38612,789],{"class":495},[478,38614,1079],{"class":714},[478,38616,31309],{"class":5782},[478,38618,759],{"class":710},[478,38620,789],{"class":495},[478,38622,1079],{"class":714},[478,38624,31263],{"class":5782},[478,38626,759],{"class":710},[478,38628,895],{"class":495},[478,38630,720],{"class":714},[478,38632,38633],{"class":480,"line":2321},[478,38634,38506],{"class":714},[478,38636,38637],{"class":480,"line":2326},[478,38638,38639],{"class":770},"        # 第三层\n",[478,38641,38642,38644,38647,38649],{"class":480,"line":2331},[478,38643,31225],{"class":495},[478,38645,38646],{"class":714},".block3",[478,38648,759],{"class":710},[478,38650,38389],{"class":714},[478,38652,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685],{"class":480,"line":2345},[478,38654,38394],{"class":714},[478,38656,31236],{"class":5782},[478,38658,759],{"class":710},[478,38660,32450],{"class":495},[478,38662,1079],{"class":714},[478,38664,31245],{"class":5782},[478,38666,759],{"class":710},[478,38668,35250],{"class":495},[478,38670,1079],{"class":714},[478,38672,31254],{"class":5782},[478,38674,759],{"class":710},[478,38676,783],{"class":495},[478,38678,1079],{"class":714},[478,38680,31263],{"class":5782},[478,38682,759],{"class":710},[478,38684,193],{"class":495},[478,38686,38427],{"class":714},[478,38688,38689],{"class":480,"line":2350},[478,38690,38432],{"class":714},[478,38692,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725],{"class":480,"line":3143},[478,38694,38394],{"class":714},[478,38696,31236],{"class":5782},[478,38698,759],{"class":710},[478,38700,35250],{"class":495},[478,38702,1079],{"class":714},[478,38704,31245],{"class":5782},[478,38706,759],{"class":710},[478,38708,35250],{"class":495},[478,38710,1079],{"class":714},[478,38712,31254],{"class":5782},[478,38714,759],{"class":710},[478,38716,783],{"class":495},[478,38718,1079],{"class":714},[478,38720,31263],{"class":5782},[478,38722,759],{"class":710},[478,38724,193],{"class":495},[478,38726,38427],{"class":714},[478,38728,38729],{"class":480,"line":3157},[478,38730,38432],{"class":714},[478,38732,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765],{"class":480,"line":3165},[478,38734,38394],{"class":714},[478,38736,31236],{"class":5782},[478,38738,759],{"class":710},[478,38740,35250],{"class":495},[478,38742,1079],{"class":714},[478,38744,31245],{"class":5782},[478,38746,759],{"class":710},[478,38748,35250],{"class":495},[478,38750,1079],{"class":714},[478,38752,31254],{"class":5782},[478,38754,759],{"class":710},[478,38756,783],{"class":495},[478,38758,1079],{"class":714},[478,38760,31263],{"class":5782},[478,38762,759],{"class":710},[478,38764,193],{"class":495},[478,38766,38427],{"class":714},[478,38768,38769],{"class":480,"line":3170},[478,38770,38432],{"class":714},[478,38772,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797],{"class":480,"line":3176},[478,38774,38477],{"class":714},[478,38776,31254],{"class":5782},[478,38778,759],{"class":710},[478,38780,789],{"class":495},[478,38782,1079],{"class":714},[478,38784,31309],{"class":5782},[478,38786,759],{"class":710},[478,38788,789],{"class":495},[478,38790,1079],{"class":714},[478,38792,31263],{"class":5782},[478,38794,759],{"class":710},[478,38796,895],{"class":495},[478,38798,720],{"class":714},[478,38800,38801],{"class":480,"line":3182},[478,38802,38506],{"class":714},[478,38804,38805],{"class":480,"line":3187},[478,38806,38807],{"class":770},"        # 第四层\n",[478,38809,38810,38812,38815,38817],{"class":480,"line":8514},[478,38811,31225],{"class":495},[478,38813,38814],{"class":714},".block4",[478,38816,759],{"class":710},[478,38818,38389],{"class":714},[478,38820,38821,38823,38825,38827,38829,38831,38833,38835,38838,38840,38842,38844,38846,38848,38850,38852,38854],{"class":480,"line":8538},[478,38822,38394],{"class":714},[478,38824,31236],{"class":5782},[478,38826,759],{"class":710},[478,38828,35250],{"class":495},[478,38830,1079],{"class":714},[478,38832,31245],{"class":5782},[478,38834,759],{"class":710},[478,38836,38837],{"class":495},"512",[478,38839,1079],{"class":714},[478,38841,31254],{"class":5782},[478,38843,759],{"class":710},[478,38845,783],{"class":495},[478,38847,1079],{"class":714},[478,38849,31263],{"class":5782},[478,38851,759],{"class":710},[478,38853,193],{"class":495},[478,38855,38427],{"class":714},[478,38857,38858],{"class":480,"line":8543},[478,38859,38432],{"class":714},[478,38861,38862,38864,38866,38868,38870,38872,38874,38876,38878,38880,38882,38884,38886,38888,38890,38892,38894],{"class":480,"line":8549},[478,38863,38394],{"class":714},[478,38865,31236],{"class":5782},[478,38867,759],{"class":710},[478,38869,38837],{"class":495},[478,38871,1079],{"class":714},[478,38873,31245],{"class":5782},[478,38875,759],{"class":710},[478,38877,38837],{"class":495},[478,38879,1079],{"class":714},[478,38881,31254],{"class":5782},[478,38883,759],{"class":710},[478,38885,783],{"class":495},[478,38887,1079],{"class":714},[478,38889,31263],{"class":5782},[478,38891,759],{"class":710},[478,38893,193],{"class":495},[478,38895,38427],{"class":714},[478,38897,38898],{"class":480,"line":8576},[478,38899,38432],{"class":714},[478,38901,38902,38904,38906,38908,38910,38912,38914,38916,38918,38920,38922,38924,38926,38928,38930,38932,38934],{"class":480,"line":8581},[478,38903,38394],{"class":714},[478,38905,31236],{"class":5782},[478,38907,759],{"class":710},[478,38909,38837],{"class":495},[478,38911,1079],{"class":714},[478,38913,31245],{"class":5782},[478,38915,759],{"class":710},[478,38917,38837],{"class":495},[478,38919,1079],{"class":714},[478,38921,31254],{"class":5782},[478,38923,759],{"class":710},[478,38925,783],{"class":495},[478,38927,1079],{"class":714},[478,38929,31263],{"class":5782},[478,38931,759],{"class":710},[478,38933,193],{"class":495},[478,38935,38427],{"class":714},[478,38937,38938],{"class":480,"line":8587},[478,38939,38432],{"class":714},[478,38941,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966],{"class":480,"line":8599},[478,38943,38477],{"class":714},[478,38945,31254],{"class":5782},[478,38947,759],{"class":710},[478,38949,789],{"class":495},[478,38951,1079],{"class":714},[478,38953,31309],{"class":5782},[478,38955,759],{"class":710},[478,38957,789],{"class":495},[478,38959,1079],{"class":714},[478,38961,31263],{"class":5782},[478,38963,759],{"class":710},[478,38965,895],{"class":495},[478,38967,720],{"class":714},[478,38969,38970],{"class":480,"line":8611},[478,38971,38506],{"class":714},[478,38973,38974],{"class":480,"line":8623},[478,38975,38976],{"class":770},"        # 第五层\n",[478,38978,38979,38981,38984,38986],{"class":480,"line":10282},[478,38980,31225],{"class":495},[478,38982,38983],{"class":714},".block5",[478,38985,759],{"class":710},[478,38987,38389],{"class":714},[478,38989,38990,38992,38994,38996,38998,39000,39002,39004,39006,39008,39010,39012,39014,39016,39018,39020,39022],{"class":480,"line":10307},[478,38991,38394],{"class":714},[478,38993,31236],{"class":5782},[478,38995,759],{"class":710},[478,38997,38837],{"class":495},[478,38999,1079],{"class":714},[478,39001,31245],{"class":5782},[478,39003,759],{"class":710},[478,39005,38837],{"class":495},[478,39007,1079],{"class":714},[478,39009,31254],{"class":5782},[478,39011,759],{"class":710},[478,39013,783],{"class":495},[478,39015,1079],{"class":714},[478,39017,31263],{"class":5782},[478,39019,759],{"class":710},[478,39021,193],{"class":495},[478,39023,38427],{"class":714},[478,39025,39026],{"class":480,"line":10330},[478,39027,38432],{"class":714},[478,39029,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048,39050,39052,39054,39056,39058,39060,39062],{"class":480,"line":10354},[478,39031,38394],{"class":714},[478,39033,31236],{"class":5782},[478,39035,759],{"class":710},[478,39037,38837],{"class":495},[478,39039,1079],{"class":714},[478,39041,31245],{"class":5782},[478,39043,759],{"class":710},[478,39045,38837],{"class":495},[478,39047,1079],{"class":714},[478,39049,31254],{"class":5782},[478,39051,759],{"class":710},[478,39053,783],{"class":495},[478,39055,1079],{"class":714},[478,39057,31263],{"class":5782},[478,39059,759],{"class":710},[478,39061,193],{"class":495},[478,39063,38427],{"class":714},[478,39065,39066],{"class":480,"line":10359},[478,39067,38432],{"class":714},[478,39069,39070,39072,39074,39076,39078,39080,39082,39084,39086,39088,39090,39092,39094,39096,39098,39100,39102],{"class":480,"line":10364},[478,39071,38394],{"class":714},[478,39073,31236],{"class":5782},[478,39075,759],{"class":710},[478,39077,38837],{"class":495},[478,39079,1079],{"class":714},[478,39081,31245],{"class":5782},[478,39083,759],{"class":710},[478,39085,38837],{"class":495},[478,39087,1079],{"class":714},[478,39089,31254],{"class":5782},[478,39091,759],{"class":710},[478,39093,783],{"class":495},[478,39095,1079],{"class":714},[478,39097,31263],{"class":5782},[478,39099,759],{"class":710},[478,39101,193],{"class":495},[478,39103,38427],{"class":714},[478,39105,39106],{"class":480,"line":10369},[478,39107,38432],{"class":714},[478,39109,39110,39112,39114,39116,39118,39120,39122,39124,39126,39128,39130,39132,39134],{"class":480,"line":10378},[478,39111,38477],{"class":714},[478,39113,31254],{"class":5782},[478,39115,759],{"class":710},[478,39117,789],{"class":495},[478,39119,1079],{"class":714},[478,39121,31309],{"class":5782},[478,39123,759],{"class":710},[478,39125,789],{"class":495},[478,39127,1079],{"class":714},[478,39129,31263],{"class":5782},[478,39131,759],{"class":710},[478,39133,895],{"class":495},[478,39135,720],{"class":714},[478,39137,39138],{"class":480,"line":10383},[478,39139,38506],{"class":714},[478,39141,39142],{"class":480,"line":10389},[478,39143,39144],{"class":770},"        # 全连接层\n",[478,39146,39147,39149,39152,39154],{"class":480,"line":10410},[478,39148,31225],{"class":495},[478,39150,39151],{"class":714},".block6",[478,39153,759],{"class":710},[478,39155,38389],{"class":714},[478,39157,39158],{"class":480,"line":10416},[478,39159,39160],{"class":770},"            # 平展操作\n",[478,39162,39163],{"class":480,"line":10430},[478,39164,39165],{"class":770},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[478,39167,39168],{"class":480,"line":10436},[478,39169,39170],{"class":714},"            nn.Flatten(),\n",[478,39172,39173,39176,39178,39180,39182,39184,39186,39188,39190],{"class":480,"line":10463},[478,39174,39175],{"class":714},"            nn.Linear(",[478,39177,1070],{"class":495},[478,39179,1155],{"class":710},[478,39181,1070],{"class":495},[478,39183,1155],{"class":710},[478,39185,38837],{"class":495},[478,39187,1079],{"class":714},[478,39189,35250],{"class":495},[478,39191,38427],{"class":714},[478,39193,39194],{"class":480,"line":10472},[478,39195,38432],{"class":714},[478,39197,39198,39200,39202,39204,39206],{"class":480,"line":10478},[478,39199,39175],{"class":714},[478,39201,35250],{"class":495},[478,39203,1079],{"class":714},[478,39205,32450],{"class":495},[478,39207,38427],{"class":714},[478,39209,39210],{"class":480,"line":10486},[478,39211,38432],{"class":714},[478,39213,39214,39216,39218,39220,39222],{"class":480,"line":10491},[478,39215,39175],{"class":714},[478,39217,32450],{"class":495},[478,39219,1079],{"class":714},[478,39221,1146],{"class":495},[478,39223,720],{"class":714},[478,39225,39226],{"class":480,"line":17169},[478,39227,38506],{"class":714},[478,39229,39230],{"class":480,"line":17175},[478,39231,2966],{"emptyLinePlaceholder":640},[478,39233,39234],{"class":480,"line":17198},[478,39235,39236],{"class":770},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[478,39238,39239],{"class":480,"line":17204},[478,39240,39241],{"class":770},"        # 循环遍历模型\n",[478,39243,39244,39246,39249,39251,39254],{"class":480,"line":17227},[478,39245,3969],{"class":710},[478,39247,39248],{"class":714}," m ",[478,39250,26423],{"class":710},[478,39252,39253],{"class":495}," self",[478,39255,39256],{"class":714},".modules():\n",[478,39258,39259],{"class":480,"line":17241},[478,39260,39261],{"class":770},"            # print(m)\n",[478,39263,39264,39266,39269],{"class":480,"line":17261},[478,39265,5208],{"class":710},[478,39267,39268],{"class":495}," isinstance",[478,39270,39271],{"class":714},"(m,nn.Conv2d):\n",[478,39273,39274],{"class":480,"line":17267},[478,39275,39276],{"class":770},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[478,39278,39279,39282,39285,39287,39290],{"class":480,"line":17278},[478,39280,39281],{"class":714},"                nn.init.kaiming_normal_(m.weight,",[478,39283,39284],{"class":5782},"nonlinearity",[478,39286,759],{"class":710},[478,39288,39289],{"class":488},"'relu'",[478,39291,720],{"class":714},[478,39293,39294],{"class":480,"line":17301},[478,39295,39296],{"class":770},"                # 判断b参数是否存在\n",[478,39298,39299,39302,39305,39308,39311,39314],{"class":480,"line":17323},[478,39300,39301],{"class":710},"                if",[478,39303,39304],{"class":714}," m.bias ",[478,39306,39307],{"class":710},"is",[478,39309,39310],{"class":710}," not",[478,39312,39313],{"class":495}," None",[478,39315,4305],{"class":714},[478,39317,39318],{"class":480,"line":17328},[478,39319,39320],{"class":770},"                    # 如果参数不存在的化初始化b=0\n",[478,39322,39323,39326,39328],{"class":480,"line":17334},[478,39324,39325],{"class":714},"                    nn.init.constant_(m.bias,",[478,39327,895],{"class":495},[478,39329,720],{"class":714},[478,39331,39332],{"class":480,"line":17348},[478,39333,39334],{"class":770},"            # 全连接层初始化\n",[478,39336,39337,39340,39342],{"class":480,"line":17361},[478,39338,39339],{"class":710},"            elif",[478,39341,39268],{"class":495},[478,39343,39344],{"class":714},"(m,nn.Linear):\n",[478,39346,39347],{"class":480,"line":17366},[478,39348,39349],{"class":770},"                # 这个初始化方法是利用的是正太分布的方式\n",[478,39351,39352],{"class":480,"line":17380},[478,39353,39354],{"class":770},"                # 均值为0，方差为0.01\n",[478,39356,39357,39360,39362,39364,39367],{"class":480,"line":17385},[478,39358,39359],{"class":714},"                nn.init.normal_(m.weight,",[478,39361,895],{"class":495},[478,39363,1079],{"class":714},[478,39365,39366],{"class":495},"0.01",[478,39368,720],{"class":714},[478,39370,39371],{"class":480,"line":17391},[478,39372,39373],{"class":770},"                # 初始化b参数\n",[478,39375,39376,39378,39380,39382,39384,39386],{"class":480,"line":17396},[478,39377,39301],{"class":710},[478,39379,39304],{"class":714},[478,39381,39307],{"class":710},[478,39383,39310],{"class":710},[478,39385,39313],{"class":495},[478,39387,4305],{"class":714},[478,39389,39390,39392,39394],{"class":480,"line":17410},[478,39391,39325],{"class":714},[478,39393,895],{"class":495},[478,39395,720],{"class":714},[478,39397,39398],{"class":480,"line":17415},[478,39399,2966],{"emptyLinePlaceholder":640},[478,39401,39402],{"class":480,"line":17420},[478,39403,35545],{"class":770},[478,39405,39406,39408,39410],{"class":480,"line":17434},[478,39407,31181],{"class":710},[478,39409,31473],{"class":484},[478,39411,31476],{"class":714},[478,39413,39414,39416,39418,39420],{"class":480,"line":17446},[478,39415,31481],{"class":714},[478,39417,759],{"class":710},[478,39419,31203],{"class":495},[478,39421,39422],{"class":714},".block1(x)\n",[478,39424,39425,39427,39429,39431],{"class":480,"line":17451},[478,39426,31481],{"class":714},[478,39428,759],{"class":710},[478,39430,31203],{"class":495},[478,39432,39433],{"class":714},".block2(x)\n",[478,39435,39436,39438,39440,39442],{"class":480,"line":17464},[478,39437,31481],{"class":714},[478,39439,759],{"class":710},[478,39441,31203],{"class":495},[478,39443,39444],{"class":714},".block3(x)\n",[478,39446,39447,39449,39451,39453],{"class":480,"line":17469},[478,39448,31481],{"class":714},[478,39450,759],{"class":710},[478,39452,31203],{"class":495},[478,39454,39455],{"class":714},".block4(x)\n",[478,39457,39458,39460,39462,39464],{"class":480,"line":17474},[478,39459,31481],{"class":714},[478,39461,759],{"class":710},[478,39463,31203],{"class":495},[478,39465,39466],{"class":714},".block5(x)\n",[478,39468,39469,39471,39473,39475],{"class":480,"line":17479},[478,39470,31481],{"class":714},[478,39472,759],{"class":710},[478,39474,31203],{"class":495},[478,39476,39477],{"class":714},".block6(x)\n",[478,39479,39480,39482],{"class":480,"line":17492},[478,39481,15317],{"class":710},[478,39483,31589],{"class":714},[478,39485,39486],{"class":480,"line":17497},[478,39487,2966],{"emptyLinePlaceholder":640},[478,39489,39490],{"class":480,"line":33013},[478,39491,39492],{"class":770},"# 验证模型\n",[478,39494,39495,39497,39499,39501,39504],{"class":480,"line":33019},[478,39496,2099],{"class":710},[478,39498,31600],{"class":495},[478,39500,3515],{"class":710},[478,39502,39503],{"class":488},"'__main__'",[478,39505,4305],{"class":714},[478,39507,39508,39510,39512,39514,39516,39518,39520,39522,39524],{"class":480,"line":33025},[478,39509,31617],{"class":714},[478,39511,759],{"class":710},[478,39513,30831],{"class":714},[478,39515,31624],{"class":488},[478,39517,2271],{"class":710},[478,39519,31629],{"class":714},[478,39521,2268],{"class":710},[478,39523,30856],{"class":488},[478,39525,720],{"class":714},[478,39527,39528,39530],{"class":480,"line":33031},[478,39529,31679],{"class":495},[478,39531,30865],{"class":714},[478,39533,39534,39536,39538],{"class":480,"line":33037},[478,39535,31669],{"class":714},[478,39537,759],{"class":710},[478,39539,39540],{"class":714},"VGG16().to(device)\n",[478,39542,39543,39545,39547,39549,39551,39553,39555,39557],{"class":480,"line":33048},[478,39544,31679],{"class":495},[478,39546,31682],{"class":714},[478,39548,193],{"class":495},[478,39550,1079],{"class":714},[478,39552,31881],{"class":495},[478,39554,1079],{"class":714},[478,39556,31881],{"class":495},[478,39558,31695],{"class":714},[29,39560,39561],{"start":565},[32,39562,39563],{},"训练代码",[19,39565,39566],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39568,39569],{},"解决方式:",[19,39571,39572],{},"①权重初始化",[469,39574,39576],{"className":30758,"code":39575,"language":30760,"meta":54,"style":54},"# 权重初始化,保证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",[475,39577,39578,39583,39588,39600,39605,39613,39618,39631,39636,39650,39655,39664,39669,39678,39683,39688,39701,39706,39720],{"__ignoreMap":54},[478,39579,39580],{"class":480,"line":481},[478,39581,39582],{"class":770},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[478,39584,39585],{"class":480,"line":565},[478,39586,39587],{"class":770},"# 循环遍历模型\n",[478,39589,39590,39592,39594,39596,39598],{"class":480,"line":579},[478,39591,3591],{"class":710},[478,39593,39248],{"class":714},[478,39595,26423],{"class":710},[478,39597,39253],{"class":495},[478,39599,39256],{"class":714},[478,39601,39602],{"class":480,"line":593},[478,39603,39604],{"class":770},"    # print(m)\n",[478,39606,39607,39609,39611],{"class":480,"line":1769},[478,39608,3667],{"class":710},[478,39610,39268],{"class":495},[478,39612,39271],{"class":714},[478,39614,39615],{"class":480,"line":1783},[478,39616,39617],{"class":770},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[478,39619,39620,39623,39625,39627,39629],{"class":480,"line":1789},[478,39621,39622],{"class":714},"        nn.init.kaiming_normal_(m.weight,",[478,39624,39284],{"class":5782},[478,39626,759],{"class":710},[478,39628,39289],{"class":488},[478,39630,720],{"class":714},[478,39632,39633],{"class":480,"line":1880},[478,39634,39635],{"class":770},"        # 判断b参数是否存在\n",[478,39637,39638,39640,39642,39644,39646,39648],{"class":480,"line":1886},[478,39639,3063],{"class":710},[478,39641,39304],{"class":714},[478,39643,39307],{"class":710},[478,39645,39310],{"class":710},[478,39647,39313],{"class":495},[478,39649,4305],{"class":714},[478,39651,39652],{"class":480,"line":1898},[478,39653,39654],{"class":770},"            # 如果参数不存在的化初始化b=0\n",[478,39656,39657,39660,39662],{"class":480,"line":2180},[478,39658,39659],{"class":714},"            nn.init.constant_(m.bias,",[478,39661,895],{"class":495},[478,39663,720],{"class":714},[478,39665,39666],{"class":480,"line":2185},[478,39667,39668],{"class":770},"    # 全连接层初始化\n",[478,39670,39671,39674,39676],{"class":480,"line":2191},[478,39672,39673],{"class":710},"    elif",[478,39675,39268],{"class":495},[478,39677,39344],{"class":714},[478,39679,39680],{"class":480,"line":2196},[478,39681,39682],{"class":770},"        # 这个初始化方法是利用的是正太分布的方式\n",[478,39684,39685],{"class":480,"line":2210},[478,39686,39687],{"class":770},"        # 均值为0，方差为0.01\n",[478,39689,39690,39693,39695,39697,39699],{"class":480,"line":2215},[478,39691,39692],{"class":714},"        nn.init.normal_(m.weight,",[478,39694,895],{"class":495},[478,39696,1079],{"class":714},[478,39698,39366],{"class":495},[478,39700,720],{"class":714},[478,39702,39703],{"class":480,"line":2221},[478,39704,39705],{"class":770},"        # 初始化b参数\n",[478,39707,39708,39710,39712,39714,39716,39718],{"class":480,"line":2241},[478,39709,3063],{"class":710},[478,39711,39304],{"class":714},[478,39713,39307],{"class":710},[478,39715,39310],{"class":710},[478,39717,39313],{"class":495},[478,39719,4305],{"class":714},[478,39721,39722,39724,39726],{"class":480,"line":2246},[478,39723,39659],{"class":714},[478,39725,895],{"class":495},[478,39727,720],{"class":714},[19,39729,39730],{},"②尽可能地增加批次",[19,39732,39733],{},"训练完整代码：",[469,39735,39736],{"className":30758,"code":38279,"language":30760,"meta":54,"style":54},[475,39737,39738,39744,39754,39764,39774,39778,39794,39802,39820,39824,39828,39838,39874,39878,39914,39918,39946,39950,39954,39964,40000,40004,40040,40044,40072,40076,40080,40090,40126,40130,40166,40170,40206,40210,40238,40242,40246,40256,40292,40296,40332,40336,40372,40376,40404,40408,40412,40422,40458,40462,40498,40502,40538,40542,40570,40574,40578,40588,40592,40596,40600,40620,40624,40636,40640,40652,40656,40660,40664,40668,40680,40684,40692,40696,40708,40712,40726,40730,40738,40742,40750,40754,40758,40770,40774,40788,40796,40800,40804,40812,40822,40832,40842,40852,40862,40872,40878,40882,40886,40898,40918,40924,40932],{"__ignoreMap":54},[478,39739,39740,39742],{"class":480,"line":481},[478,39741,30772],{"class":710},[478,39743,30775],{"class":714},[478,39745,39746,39748,39750,39752],{"class":480,"line":565},[478,39747,31117],{"class":710},[478,39749,38294],{"class":714},[478,39751,30772],{"class":710},[478,39753,38299],{"class":714},[478,39755,39756,39758,39760,39762],{"class":480,"line":579},[478,39757,31117],{"class":710},[478,39759,31120],{"class":714},[478,39761,30772],{"class":710},[478,39763,31125],{"class":714},[478,39765,39766,39768,39770,39772],{"class":480,"line":593},[478,39767,31117],{"class":710},[478,39769,31137],{"class":714},[478,39771,30772],{"class":710},[478,39773,31142],{"class":714},[478,39775,39776],{"class":480,"line":1769},[478,39777,2966],{"emptyLinePlaceholder":640},[478,39779,39780,39782,39784,39786,39788,39790,39792],{"class":480,"line":1783},[478,39781,15259],{"class":710},[478,39783,38330],{"class":484},[478,39785,263],{"class":714},[478,39787,31158],{"class":484},[478,39789,1258],{"class":714},[478,39791,31163],{"class":484},[478,39793,31166],{"class":714},[478,39795,39796,39798,39800],{"class":480,"line":1789},[478,39797,31181],{"class":710},[478,39799,31184],{"class":495},[478,39801,31187],{"class":714},[478,39803,39804,39806,39808,39810,39812,39814,39816,39818],{"class":480,"line":1880},[478,39805,31197],{"class":495},[478,39807,263],{"class":714},[478,39809,38357],{"class":495},[478,39811,13001],{"class":714},[478,39813,31203],{"class":495},[478,39815,31206],{"class":714},[478,39817,31209],{"class":495},[478,39819,2542],{"class":714},[478,39821,39822],{"class":480,"line":1886},[478,39823,38372],{"class":770},[478,39825,39826],{"class":480,"line":1898},[478,39827,38377],{"class":770},[478,39829,39830,39832,39834,39836],{"class":480,"line":2180},[478,39831,31225],{"class":495},[478,39833,38384],{"class":714},[478,39835,759],{"class":710},[478,39837,38389],{"class":714},[478,39839,39840,39842,39844,39846,39848,39850,39852,39854,39856,39858,39860,39862,39864,39866,39868,39870,39872],{"class":480,"line":2185},[478,39841,38394],{"class":714},[478,39843,31236],{"class":5782},[478,39845,759],{"class":710},[478,39847,193],{"class":495},[478,39849,1079],{"class":714},[478,39851,31245],{"class":5782},[478,39853,759],{"class":710},[478,39855,907],{"class":495},[478,39857,1079],{"class":714},[478,39859,31254],{"class":5782},[478,39861,759],{"class":710},[478,39863,783],{"class":495},[478,39865,1079],{"class":714},[478,39867,31263],{"class":5782},[478,39869,759],{"class":710},[478,39871,193],{"class":495},[478,39873,38427],{"class":714},[478,39875,39876],{"class":480,"line":2191},[478,39877,38432],{"class":714},[478,39879,39880,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908,39910,39912],{"class":480,"line":2196},[478,39881,38394],{"class":714},[478,39883,31236],{"class":5782},[478,39885,759],{"class":710},[478,39887,907],{"class":495},[478,39889,1079],{"class":714},[478,39891,31245],{"class":5782},[478,39893,759],{"class":710},[478,39895,907],{"class":495},[478,39897,1079],{"class":714},[478,39899,31254],{"class":5782},[478,39901,759],{"class":710},[478,39903,783],{"class":495},[478,39905,1079],{"class":714},[478,39907,31263],{"class":5782},[478,39909,759],{"class":710},[478,39911,193],{"class":495},[478,39913,38427],{"class":714},[478,39915,39916],{"class":480,"line":2210},[478,39917,38432],{"class":714},[478,39919,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944],{"class":480,"line":2215},[478,39921,38477],{"class":714},[478,39923,31254],{"class":5782},[478,39925,759],{"class":710},[478,39927,789],{"class":495},[478,39929,1079],{"class":714},[478,39931,31309],{"class":5782},[478,39933,759],{"class":710},[478,39935,789],{"class":495},[478,39937,1079],{"class":714},[478,39939,31263],{"class":5782},[478,39941,759],{"class":710},[478,39943,895],{"class":495},[478,39945,720],{"class":714},[478,39947,39948],{"class":480,"line":2221},[478,39949,38506],{"class":714},[478,39951,39952],{"class":480,"line":2241},[478,39953,38511],{"class":770},[478,39955,39956,39958,39960,39962],{"class":480,"line":2246},[478,39957,31225],{"class":495},[478,39959,38518],{"class":714},[478,39961,759],{"class":710},[478,39963,38389],{"class":714},[478,39965,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992,39994,39996,39998],{"class":480,"line":2260},[478,39967,38394],{"class":714},[478,39969,31236],{"class":5782},[478,39971,759],{"class":710},[478,39973,907],{"class":495},[478,39975,1079],{"class":714},[478,39977,31245],{"class":5782},[478,39979,759],{"class":710},[478,39981,32450],{"class":495},[478,39983,1079],{"class":714},[478,39985,31254],{"class":5782},[478,39987,759],{"class":710},[478,39989,783],{"class":495},[478,39991,1079],{"class":714},[478,39993,31263],{"class":5782},[478,39995,759],{"class":710},[478,39997,193],{"class":495},[478,39999,38427],{"class":714},[478,40001,40002],{"class":480,"line":2265},[478,40003,38432],{"class":714},[478,40005,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032,40034,40036,40038],{"class":480,"line":2294},[478,40007,38394],{"class":714},[478,40009,31236],{"class":5782},[478,40011,759],{"class":710},[478,40013,32450],{"class":495},[478,40015,1079],{"class":714},[478,40017,31245],{"class":5782},[478,40019,759],{"class":710},[478,40021,32450],{"class":495},[478,40023,1079],{"class":714},[478,40025,31254],{"class":5782},[478,40027,759],{"class":710},[478,40029,783],{"class":495},[478,40031,1079],{"class":714},[478,40033,31263],{"class":5782},[478,40035,759],{"class":710},[478,40037,193],{"class":495},[478,40039,38427],{"class":714},[478,40041,40042],{"class":480,"line":2299},[478,40043,38432],{"class":714},[478,40045,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070],{"class":480,"line":2316},[478,40047,38477],{"class":714},[478,40049,31254],{"class":5782},[478,40051,759],{"class":710},[478,40053,789],{"class":495},[478,40055,1079],{"class":714},[478,40057,31309],{"class":5782},[478,40059,759],{"class":710},[478,40061,789],{"class":495},[478,40063,1079],{"class":714},[478,40065,31263],{"class":5782},[478,40067,759],{"class":710},[478,40069,895],{"class":495},[478,40071,720],{"class":714},[478,40073,40074],{"class":480,"line":2321},[478,40075,38506],{"class":714},[478,40077,40078],{"class":480,"line":2326},[478,40079,38639],{"class":770},[478,40081,40082,40084,40086,40088],{"class":480,"line":2331},[478,40083,31225],{"class":495},[478,40085,38646],{"class":714},[478,40087,759],{"class":710},[478,40089,38389],{"class":714},[478,40091,40092,40094,40096,40098,40100,40102,40104,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124],{"class":480,"line":2345},[478,40093,38394],{"class":714},[478,40095,31236],{"class":5782},[478,40097,759],{"class":710},[478,40099,32450],{"class":495},[478,40101,1079],{"class":714},[478,40103,31245],{"class":5782},[478,40105,759],{"class":710},[478,40107,35250],{"class":495},[478,40109,1079],{"class":714},[478,40111,31254],{"class":5782},[478,40113,759],{"class":710},[478,40115,783],{"class":495},[478,40117,1079],{"class":714},[478,40119,31263],{"class":5782},[478,40121,759],{"class":710},[478,40123,193],{"class":495},[478,40125,38427],{"class":714},[478,40127,40128],{"class":480,"line":2350},[478,40129,38432],{"class":714},[478,40131,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150,40152,40154,40156,40158,40160,40162,40164],{"class":480,"line":3143},[478,40133,38394],{"class":714},[478,40135,31236],{"class":5782},[478,40137,759],{"class":710},[478,40139,35250],{"class":495},[478,40141,1079],{"class":714},[478,40143,31245],{"class":5782},[478,40145,759],{"class":710},[478,40147,35250],{"class":495},[478,40149,1079],{"class":714},[478,40151,31254],{"class":5782},[478,40153,759],{"class":710},[478,40155,783],{"class":495},[478,40157,1079],{"class":714},[478,40159,31263],{"class":5782},[478,40161,759],{"class":710},[478,40163,193],{"class":495},[478,40165,38427],{"class":714},[478,40167,40168],{"class":480,"line":3157},[478,40169,38432],{"class":714},[478,40171,40172,40174,40176,40178,40180,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204],{"class":480,"line":3165},[478,40173,38394],{"class":714},[478,40175,31236],{"class":5782},[478,40177,759],{"class":710},[478,40179,35250],{"class":495},[478,40181,1079],{"class":714},[478,40183,31245],{"class":5782},[478,40185,759],{"class":710},[478,40187,35250],{"class":495},[478,40189,1079],{"class":714},[478,40191,31254],{"class":5782},[478,40193,759],{"class":710},[478,40195,783],{"class":495},[478,40197,1079],{"class":714},[478,40199,31263],{"class":5782},[478,40201,759],{"class":710},[478,40203,193],{"class":495},[478,40205,38427],{"class":714},[478,40207,40208],{"class":480,"line":3170},[478,40209,38432],{"class":714},[478,40211,40212,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236],{"class":480,"line":3176},[478,40213,38477],{"class":714},[478,40215,31254],{"class":5782},[478,40217,759],{"class":710},[478,40219,789],{"class":495},[478,40221,1079],{"class":714},[478,40223,31309],{"class":5782},[478,40225,759],{"class":710},[478,40227,789],{"class":495},[478,40229,1079],{"class":714},[478,40231,31263],{"class":5782},[478,40233,759],{"class":710},[478,40235,895],{"class":495},[478,40237,720],{"class":714},[478,40239,40240],{"class":480,"line":3182},[478,40241,38506],{"class":714},[478,40243,40244],{"class":480,"line":3187},[478,40245,38807],{"class":770},[478,40247,40248,40250,40252,40254],{"class":480,"line":8514},[478,40249,31225],{"class":495},[478,40251,38814],{"class":714},[478,40253,759],{"class":710},[478,40255,38389],{"class":714},[478,40257,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288,40290],{"class":480,"line":8538},[478,40259,38394],{"class":714},[478,40261,31236],{"class":5782},[478,40263,759],{"class":710},[478,40265,35250],{"class":495},[478,40267,1079],{"class":714},[478,40269,31245],{"class":5782},[478,40271,759],{"class":710},[478,40273,38837],{"class":495},[478,40275,1079],{"class":714},[478,40277,31254],{"class":5782},[478,40279,759],{"class":710},[478,40281,783],{"class":495},[478,40283,1079],{"class":714},[478,40285,31263],{"class":5782},[478,40287,759],{"class":710},[478,40289,193],{"class":495},[478,40291,38427],{"class":714},[478,40293,40294],{"class":480,"line":8543},[478,40295,38432],{"class":714},[478,40297,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328,40330],{"class":480,"line":8549},[478,40299,38394],{"class":714},[478,40301,31236],{"class":5782},[478,40303,759],{"class":710},[478,40305,38837],{"class":495},[478,40307,1079],{"class":714},[478,40309,31245],{"class":5782},[478,40311,759],{"class":710},[478,40313,38837],{"class":495},[478,40315,1079],{"class":714},[478,40317,31254],{"class":5782},[478,40319,759],{"class":710},[478,40321,783],{"class":495},[478,40323,1079],{"class":714},[478,40325,31263],{"class":5782},[478,40327,759],{"class":710},[478,40329,193],{"class":495},[478,40331,38427],{"class":714},[478,40333,40334],{"class":480,"line":8576},[478,40335,38432],{"class":714},[478,40337,40338,40340,40342,40344,40346,40348,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368,40370],{"class":480,"line":8581},[478,40339,38394],{"class":714},[478,40341,31236],{"class":5782},[478,40343,759],{"class":710},[478,40345,38837],{"class":495},[478,40347,1079],{"class":714},[478,40349,31245],{"class":5782},[478,40351,759],{"class":710},[478,40353,38837],{"class":495},[478,40355,1079],{"class":714},[478,40357,31254],{"class":5782},[478,40359,759],{"class":710},[478,40361,783],{"class":495},[478,40363,1079],{"class":714},[478,40365,31263],{"class":5782},[478,40367,759],{"class":710},[478,40369,193],{"class":495},[478,40371,38427],{"class":714},[478,40373,40374],{"class":480,"line":8587},[478,40375,38432],{"class":714},[478,40377,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402],{"class":480,"line":8599},[478,40379,38477],{"class":714},[478,40381,31254],{"class":5782},[478,40383,759],{"class":710},[478,40385,789],{"class":495},[478,40387,1079],{"class":714},[478,40389,31309],{"class":5782},[478,40391,759],{"class":710},[478,40393,789],{"class":495},[478,40395,1079],{"class":714},[478,40397,31263],{"class":5782},[478,40399,759],{"class":710},[478,40401,895],{"class":495},[478,40403,720],{"class":714},[478,40405,40406],{"class":480,"line":8611},[478,40407,38506],{"class":714},[478,40409,40410],{"class":480,"line":8623},[478,40411,38976],{"class":770},[478,40413,40414,40416,40418,40420],{"class":480,"line":10282},[478,40415,31225],{"class":495},[478,40417,38983],{"class":714},[478,40419,759],{"class":710},[478,40421,38389],{"class":714},[478,40423,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456],{"class":480,"line":10307},[478,40425,38394],{"class":714},[478,40427,31236],{"class":5782},[478,40429,759],{"class":710},[478,40431,38837],{"class":495},[478,40433,1079],{"class":714},[478,40435,31245],{"class":5782},[478,40437,759],{"class":710},[478,40439,38837],{"class":495},[478,40441,1079],{"class":714},[478,40443,31254],{"class":5782},[478,40445,759],{"class":710},[478,40447,783],{"class":495},[478,40449,1079],{"class":714},[478,40451,31263],{"class":5782},[478,40453,759],{"class":710},[478,40455,193],{"class":495},[478,40457,38427],{"class":714},[478,40459,40460],{"class":480,"line":10330},[478,40461,38432],{"class":714},[478,40463,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490,40492,40494,40496],{"class":480,"line":10354},[478,40465,38394],{"class":714},[478,40467,31236],{"class":5782},[478,40469,759],{"class":710},[478,40471,38837],{"class":495},[478,40473,1079],{"class":714},[478,40475,31245],{"class":5782},[478,40477,759],{"class":710},[478,40479,38837],{"class":495},[478,40481,1079],{"class":714},[478,40483,31254],{"class":5782},[478,40485,759],{"class":710},[478,40487,783],{"class":495},[478,40489,1079],{"class":714},[478,40491,31263],{"class":5782},[478,40493,759],{"class":710},[478,40495,193],{"class":495},[478,40497,38427],{"class":714},[478,40499,40500],{"class":480,"line":10359},[478,40501,38432],{"class":714},[478,40503,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528,40530,40532,40534,40536],{"class":480,"line":10364},[478,40505,38394],{"class":714},[478,40507,31236],{"class":5782},[478,40509,759],{"class":710},[478,40511,38837],{"class":495},[478,40513,1079],{"class":714},[478,40515,31245],{"class":5782},[478,40517,759],{"class":710},[478,40519,38837],{"class":495},[478,40521,1079],{"class":714},[478,40523,31254],{"class":5782},[478,40525,759],{"class":710},[478,40527,783],{"class":495},[478,40529,1079],{"class":714},[478,40531,31263],{"class":5782},[478,40533,759],{"class":710},[478,40535,193],{"class":495},[478,40537,38427],{"class":714},[478,40539,40540],{"class":480,"line":10369},[478,40541,38432],{"class":714},[478,40543,40544,40546,40548,40550,40552,40554,40556,40558,40560,40562,40564,40566,40568],{"class":480,"line":10378},[478,40545,38477],{"class":714},[478,40547,31254],{"class":5782},[478,40549,759],{"class":710},[478,40551,789],{"class":495},[478,40553,1079],{"class":714},[478,40555,31309],{"class":5782},[478,40557,759],{"class":710},[478,40559,789],{"class":495},[478,40561,1079],{"class":714},[478,40563,31263],{"class":5782},[478,40565,759],{"class":710},[478,40567,895],{"class":495},[478,40569,720],{"class":714},[478,40571,40572],{"class":480,"line":10383},[478,40573,38506],{"class":714},[478,40575,40576],{"class":480,"line":10389},[478,40577,39144],{"class":770},[478,40579,40580,40582,40584,40586],{"class":480,"line":10410},[478,40581,31225],{"class":495},[478,40583,39151],{"class":714},[478,40585,759],{"class":710},[478,40587,38389],{"class":714},[478,40589,40590],{"class":480,"line":10416},[478,40591,39160],{"class":770},[478,40593,40594],{"class":480,"line":10430},[478,40595,39165],{"class":770},[478,40597,40598],{"class":480,"line":10436},[478,40599,39170],{"class":714},[478,40601,40602,40604,40606,40608,40610,40612,40614,40616,40618],{"class":480,"line":10463},[478,40603,39175],{"class":714},[478,40605,1070],{"class":495},[478,40607,1155],{"class":710},[478,40609,1070],{"class":495},[478,40611,1155],{"class":710},[478,40613,38837],{"class":495},[478,40615,1079],{"class":714},[478,40617,35250],{"class":495},[478,40619,38427],{"class":714},[478,40621,40622],{"class":480,"line":10472},[478,40623,38432],{"class":714},[478,40625,40626,40628,40630,40632,40634],{"class":480,"line":10478},[478,40627,39175],{"class":714},[478,40629,35250],{"class":495},[478,40631,1079],{"class":714},[478,40633,32450],{"class":495},[478,40635,38427],{"class":714},[478,40637,40638],{"class":480,"line":10486},[478,40639,38432],{"class":714},[478,40641,40642,40644,40646,40648,40650],{"class":480,"line":10491},[478,40643,39175],{"class":714},[478,40645,32450],{"class":495},[478,40647,1079],{"class":714},[478,40649,1146],{"class":495},[478,40651,720],{"class":714},[478,40653,40654],{"class":480,"line":17169},[478,40655,38506],{"class":714},[478,40657,40658],{"class":480,"line":17175},[478,40659,2966],{"emptyLinePlaceholder":640},[478,40661,40662],{"class":480,"line":17198},[478,40663,39236],{"class":770},[478,40665,40666],{"class":480,"line":17204},[478,40667,39241],{"class":770},[478,40669,40670,40672,40674,40676,40678],{"class":480,"line":17227},[478,40671,3969],{"class":710},[478,40673,39248],{"class":714},[478,40675,26423],{"class":710},[478,40677,39253],{"class":495},[478,40679,39256],{"class":714},[478,40681,40682],{"class":480,"line":17241},[478,40683,39261],{"class":770},[478,40685,40686,40688,40690],{"class":480,"line":17261},[478,40687,5208],{"class":710},[478,40689,39268],{"class":495},[478,40691,39271],{"class":714},[478,40693,40694],{"class":480,"line":17267},[478,40695,39276],{"class":770},[478,40697,40698,40700,40702,40704,40706],{"class":480,"line":17278},[478,40699,39281],{"class":714},[478,40701,39284],{"class":5782},[478,40703,759],{"class":710},[478,40705,39289],{"class":488},[478,40707,720],{"class":714},[478,40709,40710],{"class":480,"line":17301},[478,40711,39296],{"class":770},[478,40713,40714,40716,40718,40720,40722,40724],{"class":480,"line":17323},[478,40715,39301],{"class":710},[478,40717,39304],{"class":714},[478,40719,39307],{"class":710},[478,40721,39310],{"class":710},[478,40723,39313],{"class":495},[478,40725,4305],{"class":714},[478,40727,40728],{"class":480,"line":17328},[478,40729,39320],{"class":770},[478,40731,40732,40734,40736],{"class":480,"line":17334},[478,40733,39325],{"class":714},[478,40735,895],{"class":495},[478,40737,720],{"class":714},[478,40739,40740],{"class":480,"line":17348},[478,40741,39334],{"class":770},[478,40743,40744,40746,40748],{"class":480,"line":17361},[478,40745,39339],{"class":710},[478,40747,39268],{"class":495},[478,40749,39344],{"class":714},[478,40751,40752],{"class":480,"line":17366},[478,40753,39349],{"class":770},[478,40755,40756],{"class":480,"line":17380},[478,40757,39354],{"class":770},[478,40759,40760,40762,40764,40766,40768],{"class":480,"line":17385},[478,40761,39359],{"class":714},[478,40763,895],{"class":495},[478,40765,1079],{"class":714},[478,40767,39366],{"class":495},[478,40769,720],{"class":714},[478,40771,40772],{"class":480,"line":17391},[478,40773,39373],{"class":770},[478,40775,40776,40778,40780,40782,40784,40786],{"class":480,"line":17396},[478,40777,39301],{"class":710},[478,40779,39304],{"class":714},[478,40781,39307],{"class":710},[478,40783,39310],{"class":710},[478,40785,39313],{"class":495},[478,40787,4305],{"class":714},[478,40789,40790,40792,40794],{"class":480,"line":17410},[478,40791,39325],{"class":714},[478,40793,895],{"class":495},[478,40795,720],{"class":714},[478,40797,40798],{"class":480,"line":17415},[478,40799,2966],{"emptyLinePlaceholder":640},[478,40801,40802],{"class":480,"line":17420},[478,40803,35545],{"class":770},[478,40805,40806,40808,40810],{"class":480,"line":17434},[478,40807,31181],{"class":710},[478,40809,31473],{"class":484},[478,40811,31476],{"class":714},[478,40813,40814,40816,40818,40820],{"class":480,"line":17446},[478,40815,31481],{"class":714},[478,40817,759],{"class":710},[478,40819,31203],{"class":495},[478,40821,39422],{"class":714},[478,40823,40824,40826,40828,40830],{"class":480,"line":17451},[478,40825,31481],{"class":714},[478,40827,759],{"class":710},[478,40829,31203],{"class":495},[478,40831,39433],{"class":714},[478,40833,40834,40836,40838,40840],{"class":480,"line":17464},[478,40835,31481],{"class":714},[478,40837,759],{"class":710},[478,40839,31203],{"class":495},[478,40841,39444],{"class":714},[478,40843,40844,40846,40848,40850],{"class":480,"line":17469},[478,40845,31481],{"class":714},[478,40847,759],{"class":710},[478,40849,31203],{"class":495},[478,40851,39455],{"class":714},[478,40853,40854,40856,40858,40860],{"class":480,"line":17474},[478,40855,31481],{"class":714},[478,40857,759],{"class":710},[478,40859,31203],{"class":495},[478,40861,39466],{"class":714},[478,40863,40864,40866,40868,40870],{"class":480,"line":17479},[478,40865,31481],{"class":714},[478,40867,759],{"class":710},[478,40869,31203],{"class":495},[478,40871,39477],{"class":714},[478,40873,40874,40876],{"class":480,"line":17492},[478,40875,15317],{"class":710},[478,40877,31589],{"class":714},[478,40879,40880],{"class":480,"line":17497},[478,40881,2966],{"emptyLinePlaceholder":640},[478,40883,40884],{"class":480,"line":33013},[478,40885,39492],{"class":770},[478,40887,40888,40890,40892,40894,40896],{"class":480,"line":33019},[478,40889,2099],{"class":710},[478,40891,31600],{"class":495},[478,40893,3515],{"class":710},[478,40895,39503],{"class":488},[478,40897,4305],{"class":714},[478,40899,40900,40902,40904,40906,40908,40910,40912,40914,40916],{"class":480,"line":33025},[478,40901,31617],{"class":714},[478,40903,759],{"class":710},[478,40905,30831],{"class":714},[478,40907,31624],{"class":488},[478,40909,2271],{"class":710},[478,40911,31629],{"class":714},[478,40913,2268],{"class":710},[478,40915,30856],{"class":488},[478,40917,720],{"class":714},[478,40919,40920,40922],{"class":480,"line":33031},[478,40921,31679],{"class":495},[478,40923,30865],{"class":714},[478,40925,40926,40928,40930],{"class":480,"line":33037},[478,40927,31669],{"class":714},[478,40929,759],{"class":710},[478,40931,39540],{"class":714},[478,40933,40934,40936,40938,40940,40942,40944,40946,40948],{"class":480,"line":33048},[478,40935,31679],{"class":495},[478,40937,31682],{"class":714},[478,40939,193],{"class":495},[478,40941,1079],{"class":714},[478,40943,31881],{"class":495},[478,40945,1079],{"class":714},[478,40947,31881],{"class":495},[478,40949,31695],{"class":714},[29,40951,40952],{"start":579},[32,40953,40954],{},"测试代码",[469,40956,40958],{"className":30758,"code":40957,"language":30760,"meta":54,"style":54},"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",[475,40959,40960,40966,40976,40986,40990,41000,41011,41015,41019,41023,41031,41047,41057,41073,41083,41097,41101,41111,41121,41131,41137,41141,41145,41153,41157,41173,41181,41185,41189,41197,41205,41209,41213,41217,41221,41227,41231,41241,41249,41257,41261,41265,41269,41277,41281,41297,41301,41305,41309,41321,41325,41337,41341,41345,41357,41361,41371,41375,41379,41391,41395,41404,41408,41412,41420,41424,41432,41436,41440,41444,41448,41452,41468,41476,41480,41484,41532,41538,41542,41552,41560,41568,41572,41576,41580,41584,41592,41596,41612,41616,41624,41632],{"__ignoreMap":54},[478,40961,40962,40964],{"class":480,"line":481},[478,40963,30772],{"class":710},[478,40965,30775],{"class":714},[478,40967,40968,40970,40972,40974],{"class":480,"line":565},[478,40969,30772],{"class":710},[478,40971,31795],{"class":714},[478,40973,31763],{"class":710},[478,40975,31800],{"class":714},[478,40977,40978,40980,40982,40984],{"class":480,"line":579},[478,40979,31117],{"class":710},[478,40981,31778],{"class":714},[478,40983,30772],{"class":710},[478,40985,31783],{"class":714},[478,40987,40988],{"class":480,"line":593},[478,40989,34302],{"class":770},[478,40991,40992,40994,40996,40998],{"class":480,"line":1769},[478,40993,31117],{"class":710},[478,40995,31748],{"class":714},[478,40997,30772],{"class":710},[478,40999,31753],{"class":714},[478,41001,41002,41004,41006,41008],{"class":480,"line":1783},[478,41003,31117],{"class":710},[478,41005,32294],{"class":714},[478,41007,30772],{"class":710},[478,41009,41010],{"class":495}," VGG16\n",[478,41012,41013],{"class":480,"line":1789},[478,41014,2966],{"emptyLinePlaceholder":640},[478,41016,41017],{"class":480,"line":1880},[478,41018,2966],{"emptyLinePlaceholder":640},[478,41020,41021],{"class":480,"line":1886},[478,41022,34331],{"class":770},[478,41024,41025,41027,41029],{"class":480,"line":1898},[478,41026,32327],{"class":710},[478,41028,34338],{"class":484},[478,41030,32333],{"class":714},[478,41032,41033,41035,41037,41039,41041,41043,41045],{"class":480,"line":2180},[478,41034,34345],{"class":714},[478,41036,759],{"class":710},[478,41038,31835],{"class":714},[478,41040,31838],{"class":5782},[478,41042,759],{"class":710},[478,41044,31843],{"class":488},[478,41046,31846],{"class":714},[478,41048,41049,41051,41053,41055],{"class":480,"line":2185},[478,41050,34362],{"class":5782},[478,41052,759],{"class":710},[478,41054,34367],{"class":495},[478,41056,31846],{"class":714},[478,41058,41059,41061,41063,41065,41067,41069,41071],{"class":480,"line":2191},[478,41060,34374],{"class":5782},[478,41062,759],{"class":710},[478,41064,31873],{"class":714},[478,41066,31876],{"class":5782},[478,41068,759],{"class":710},[478,41070,31881],{"class":495},[478,41072,31884],{"class":714},[478,41074,41075,41077,41079,41081],{"class":480,"line":2196},[478,41076,34391],{"class":5782},[478,41078,759],{"class":710},[478,41080,31856],{"class":495},[478,41082,720],{"class":714},[478,41084,41085,41087,41089,41091,41093,41095],{"class":480,"line":2210},[478,41086,34402],{"class":714},[478,41088,759],{"class":710},[478,41090,31914],{"class":714},[478,41092,31917],{"class":5782},[478,41094,759],{"class":710},[478,41096,34413],{"class":714},[478,41098,41099],{"class":480,"line":2215},[478,41100,34418],{"class":770},[478,41102,41103,41105,41107,41109],{"class":480,"line":2221},[478,41104,34423],{"class":5782},[478,41106,759],{"class":710},[478,41108,193],{"class":495},[478,41110,31846],{"class":714},[478,41112,41113,41115,41117,41119],{"class":480,"line":2241},[478,41114,34434],{"class":5782},[478,41116,759],{"class":710},[478,41118,31856],{"class":495},[478,41120,31846],{"class":714},[478,41122,41123,41125,41127,41129],{"class":480,"line":2246},[478,41124,34445],{"class":5782},[478,41126,759],{"class":710},[478,41128,895],{"class":495},[478,41130,720],{"class":714},[478,41132,41133,41135],{"class":480,"line":2260},[478,41134,4656],{"class":710},[478,41136,34458],{"class":714},[478,41138,41139],{"class":480,"line":2265},[478,41140,2966],{"emptyLinePlaceholder":640},[478,41142,41143],{"class":480,"line":2294},[478,41144,34467],{"class":770},[478,41146,41147,41149,41151],{"class":480,"line":2299},[478,41148,32327],{"class":710},[478,41150,34474],{"class":484},[478,41152,34477],{"class":714},[478,41154,41155],{"class":480,"line":2316},[478,41156,34482],{"class":770},[478,41158,41159,41161,41163,41165,41167,41169,41171],{"class":480,"line":2321},[478,41160,31617],{"class":714},[478,41162,759],{"class":710},[478,41164,31624],{"class":488},[478,41166,2271],{"class":710},[478,41168,31629],{"class":714},[478,41170,2268],{"class":710},[478,41172,34499],{"class":488},[478,41174,41175,41177,41179],{"class":480,"line":2326},[478,41176,31669],{"class":714},[478,41178,759],{"class":710},[478,41180,32669],{"class":714},[478,41182,41183],{"class":480,"line":2331},[478,41184,2966],{"emptyLinePlaceholder":640},[478,41186,41187],{"class":480,"line":2345},[478,41188,34516],{"class":770},[478,41190,41191,41193,41195],{"class":480,"line":2350},[478,41192,34521],{"class":714},[478,41194,759],{"class":710},[478,41196,32722],{"class":495},[478,41198,41199,41201,41203],{"class":480,"line":3143},[478,41200,34530],{"class":714},[478,41202,759],{"class":710},[478,41204,3651],{"class":495},[478,41206,41207],{"class":480,"line":3157},[478,41208,2966],{"emptyLinePlaceholder":640},[478,41210,41211],{"class":480,"line":3165},[478,41212,34543],{"class":770},[478,41214,41215],{"class":480,"line":3170},[478,41216,34548],{"class":770},[478,41218,41219],{"class":480,"line":3176},[478,41220,34553],{"class":770},[478,41222,41223,41225],{"class":480,"line":3182},[478,41224,34558],{"class":710},[478,41226,33264],{"class":714},[478,41228,41229],{"class":480,"line":3187},[478,41230,34565],{"class":770},[478,41232,41233,41235,41237,41239],{"class":480,"line":8514},[478,41234,3969],{"class":710},[478,41236,34572],{"class":714},[478,41238,26423],{"class":710},[478,41240,34577],{"class":714},[478,41242,41243,41245,41247],{"class":480,"line":8538},[478,41244,34582],{"class":714},[478,41246,759],{"class":710},[478,41248,34587],{"class":714},[478,41250,41251,41253,41255],{"class":480,"line":8543},[478,41252,34592],{"class":714},[478,41254,759],{"class":710},[478,41256,34597],{"class":714},[478,41258,41259],{"class":480,"line":8549},[478,41260,34602],{"class":770},[478,41262,41263],{"class":480,"line":8576},[478,41264,33255],{"class":714},[478,41266,41267],{"class":480,"line":8581},[478,41268,34611],{"class":770},[478,41270,41271,41273,41275],{"class":480,"line":8587},[478,41272,33040],{"class":714},[478,41274,759],{"class":710},[478,41276,34620],{"class":714},[478,41278,41279],{"class":480,"line":8599},[478,41280,34625],{"class":770},[478,41282,41283,41285,41287,41289,41291,41293,41295],{"class":480,"line":8611},[478,41284,33057],{"class":714},[478,41286,759],{"class":710},[478,41288,33062],{"class":714},[478,41290,33065],{"class":5782},[478,41292,759],{"class":710},[478,41294,193],{"class":495},[478,41296,720],{"class":714},[478,41298,41299],{"class":480,"line":8623},[478,41300,34646],{"class":770},[478,41302,41303],{"class":480,"line":10282},[478,41304,34651],{"class":770},[478,41306,41307],{"class":480,"line":10307},[478,41308,34656],{"class":770},[478,41310,41311,41313,41315,41317,41319],{"class":480,"line":10330},[478,41312,34661],{"class":714},[478,41314,10043],{"class":710},[478,41316,33167],{"class":714},[478,41318,3515],{"class":710},[478,41320,34670],{"class":714},[478,41322,41323],{"class":480,"line":10354},[478,41324,34675],{"class":770},[478,41326,41327,41329,41331,41333,41335],{"class":480,"line":10359},[478,41328,34680],{"class":714},[478,41330,10043],{"class":710},[478,41332,34685],{"class":714},[478,41334,895],{"class":495},[478,41336,720],{"class":714},[478,41338,41339],{"class":480,"line":10364},[478,41340,2966],{"emptyLinePlaceholder":640},[478,41342,41343],{"class":480,"line":10369},[478,41344,34698],{"class":770},[478,41346,41347,41349,41351,41353,41355],{"class":480,"line":10378},[478,41348,34703],{"class":714},[478,41350,759],{"class":710},[478,41352,34708],{"class":714},[478,41354,1284],{"class":710},[478,41356,34713],{"class":714},[478,41358,41359],{"class":480,"line":10383},[478,41360,34718],{"class":770},[478,41362,41363,41365,41367,41369],{"class":480,"line":10389},[478,41364,32831],{"class":495},[478,41366,263],{"class":714},[478,41368,34727],{"class":488},[478,41370,34730],{"class":714},[478,41372,41373],{"class":480,"line":10410},[478,41374,2966],{"emptyLinePlaceholder":640},[478,41376,41377],{"class":480,"line":10416},[478,41378,34739],{"class":770},[478,41380,41381,41383,41385,41387,41389],{"class":480,"line":10430},[478,41382,2099],{"class":710},[478,41384,31600],{"class":495},[478,41386,3515],{"class":710},[478,41388,31605],{"class":488},[478,41390,4305],{"class":714},[478,41392,41393],{"class":480,"line":10436},[478,41394,34756],{"class":770},[478,41396,41397,41399,41401],{"class":480,"line":10463},[478,41398,31669],{"class":714},[478,41400,759],{"class":710},[478,41402,41403],{"class":714},"VGG16()\n",[478,41405,41406],{"class":480,"line":10472},[478,41407,34769],{"class":770},[478,41409,41410],{"class":480,"line":10478},[478,41411,34774],{"class":770},[478,41413,41414,41416,41418],{"class":480,"line":10486},[478,41415,34779],{"class":714},[478,41417,34782],{"class":488},[478,41419,30877],{"class":714},[478,41421,41422],{"class":480,"line":10491},[478,41423,34789],{"class":770},[478,41425,41426,41428,41430],{"class":480,"line":17169},[478,41427,34402],{"class":714},[478,41429,759],{"class":710},[478,41431,34798],{"class":714},[478,41433,41434],{"class":480,"line":17175},[478,41435,34803],{"class":770},[478,41437,41438],{"class":480,"line":17198},[478,41439,34808],{"class":714},[478,41441,41442],{"class":480,"line":17204},[478,41443,2966],{"emptyLinePlaceholder":640},[478,41445,41446],{"class":480,"line":17227},[478,41447,34817],{"class":770},[478,41449,41450],{"class":480,"line":17241},[478,41451,34822],{"class":770},[478,41453,41454,41456,41458,41460,41462,41464,41466],{"class":480,"line":17261},[478,41455,31617],{"class":714},[478,41457,759],{"class":710},[478,41459,31624],{"class":488},[478,41461,2271],{"class":710},[478,41463,31629],{"class":714},[478,41465,2268],{"class":710},[478,41467,34499],{"class":488},[478,41469,41470,41472,41474],{"class":480,"line":17267},[478,41471,31669],{"class":714},[478,41473,759],{"class":710},[478,41475,32669],{"class":714},[478,41477,41478],{"class":480,"line":17278},[478,41479,34851],{"class":770},[478,41481,41482],{"class":480,"line":17301},[478,41483,34856],{"class":770},[478,41485,41486,41488,41490,41492,41494,41496,41498,41500,41502,41504,41506,41508,41510,41512,41514,41516,41518,41520,41522,41524,41526,41528,41530],{"class":480,"line":17323},[478,41487,34861],{"class":714},[478,41489,759],{"class":710},[478,41491,1585],{"class":714},[478,41493,34868],{"class":488},[478,41495,1079],{"class":714},[478,41497,34873],{"class":488},[478,41499,1079],{"class":714},[478,41501,34878],{"class":488},[478,41503,1079],{"class":714},[478,41505,34883],{"class":488},[478,41507,1079],{"class":714},[478,41509,34888],{"class":488},[478,41511,1079],{"class":714},[478,41513,34893],{"class":488},[478,41515,1079],{"class":714},[478,41517,34898],{"class":488},[478,41519,1079],{"class":714},[478,41521,34903],{"class":488},[478,41523,1079],{"class":714},[478,41525,34908],{"class":488},[478,41527,1079],{"class":714},[478,41529,34913],{"class":488},[478,41531,33626],{"class":714},[478,41533,41534,41536],{"class":480,"line":17328},[478,41535,34558],{"class":710},[478,41537,33264],{"class":714},[478,41539,41540],{"class":480,"line":17334},[478,41541,34926],{"class":770},[478,41543,41544,41546,41548,41550],{"class":480,"line":17348},[478,41545,3969],{"class":710},[478,41547,34933],{"class":714},[478,41549,26423],{"class":710},[478,41551,34577],{"class":714},[478,41553,41554,41556,41558],{"class":480,"line":17361},[478,41555,32990],{"class":714},[478,41557,759],{"class":710},[478,41559,32995],{"class":714},[478,41561,41562,41564,41566],{"class":480,"line":17366},[478,41563,33005],{"class":714},[478,41565,759],{"class":710},[478,41567,33010],{"class":714},[478,41569,41570],{"class":480,"line":17380},[478,41571,2966],{"emptyLinePlaceholder":640},[478,41573,41574],{"class":480,"line":17385},[478,41575,34962],{"class":770},[478,41577,41578],{"class":480,"line":17391},[478,41579,33255],{"class":714},[478,41581,41582],{"class":480,"line":17396},[478,41583,34971],{"class":770},[478,41585,41586,41588,41590],{"class":480,"line":17410},[478,41587,33040],{"class":714},[478,41589,759],{"class":710},[478,41591,33045],{"class":714},[478,41593,41594],{"class":480,"line":17415},[478,41595,34984],{"class":770},[478,41597,41598,41600,41602,41604,41606,41608,41610],{"class":480,"line":17420},[478,41599,33057],{"class":714},[478,41601,759],{"class":710},[478,41603,33062],{"class":714},[478,41605,33065],{"class":5782},[478,41607,759],{"class":710},[478,41609,193],{"class":495},[478,41611,720],{"class":714},[478,41613,41614],{"class":480,"line":17434},[478,41615,35005],{"class":770},[478,41617,41618,41620,41622],{"class":480,"line":17446},[478,41619,35010],{"class":714},[478,41621,759],{"class":710},[478,41623,35015],{"class":714},[478,41625,41626,41628,41630],{"class":480,"line":17451},[478,41627,35020],{"class":714},[478,41629,759],{"class":710},[478,41631,35025],{"class":714},[478,41633,41634,41636,41638,41640,41642,41644,41646,41648],{"class":480,"line":17464},[478,41635,35030],{"class":495},[478,41637,263],{"class":714},[478,41639,35035],{"class":488},[478,41641,35038],{"class":714},[478,41643,35041],{"class":488},[478,41645,1079],{"class":714},[478,41647,35046],{"class":488},[478,41649,35049],{"class":714},[129,41651,41653],{"id":41652},"_23googlenet","2.3.GoogLeNet",[22563,41655,41657],{"id":41656},"_231原理","2.3.1.原理",[29,41659,41660],{},[32,41661,41662],{},"网络结构",[19,41664,41665],{},[52,41666],{"alt":54,"src":41667},"\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,41669,41670],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41672,41673],{},[52,41674],{"alt":54,"src":41675},"\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,41677,41678],{},[52,41679],{"alt":54,"src":41680},"\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,41682,41683],{},[52,41684],{"alt":54,"src":41685},"\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",[29,41687,41688],{"start":565},[32,41689,41690],{},"1x1卷积的优点",[19,41692,41693],{},[52,41694],{"alt":54,"src":41695},"\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",[29,41697,41698],{"start":579},[32,41699,41700],{},"全局平均池化层优点",[19,41702,41703],{},[52,41704],{"alt":54,"src":41705},"\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,41707,41708],{},[52,41709],{"alt":54,"src":41710},"\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",[29,41712,41713],{"start":593},[32,41714,41715],{},"参数详细描述",[19,41717,41718],{},[52,41719],{"alt":54,"src":41720},"\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,41722,41723],{},[52,41724],{"alt":54,"src":41725},"\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,41727,41728],{},[52,41729],{"alt":54,"src":41730},"\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,41732,41733],{},[52,41734],{"alt":54,"src":41735},"\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,41737,41738],{},[52,41739],{"alt":54,"src":41740},"\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,41742,41743],{},[52,41744],{"alt":54,"src":41745},"\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,41747,41748],{},[52,41749],{"alt":54,"src":41750},"\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,41752,41753],{},[52,41754],{"alt":54,"src":41755},"\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,41757,41758],{},[52,41759],{"alt":54,"src":41760},"\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,41762,41763],{},[52,41764],{"alt":54,"src":41765},"\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,41767,41768],{},[52,41769],{"alt":54,"src":41770},"\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,41772,41773],{},[52,41774],{"alt":54,"src":41775},"\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,41777,41778],{},[52,41779],{"alt":54,"src":41780},"\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,41782,41783],{},[52,41784],{"alt":54,"src":41785},"\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,41787,41788],{},[52,41789],{"alt":54,"src":41790},"\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,41792,41793],{},[52,41794],{"alt":54,"src":41795},"\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,41797,41798],{},[52,41799],{"alt":54,"src":41800},"\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,41802,41803],{},[52,41804],{"alt":54,"src":41805},"\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,41807,41808],{},[52,41809],{"alt":54,"src":41810},"\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,41812,41813],{},[52,41814],{"alt":54,"src":41815},"\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,41817,41818],{},[52,41819],{"alt":54,"src":41820},"\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",[22563,41822,41824],{"id":41823},"_232代码实现","2.3.2.代码实现",[29,41826,41827],{},[32,41828,31091],{},[19,41830,41831],{},"根据原理一步一步搭建即可",[469,41833,41835],{"className":30758,"code":41834,"language":30760,"meta":54,"style":54},"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",[475,41836,41837,41843,41853,41863,41867,41884,41893,41908,41918,41923,41956,41961,41998,42045,42050,42086,42133,42138,42143,42178,42210,42214,42222,42238,42262,42287,42308,42313,42328,42332,42336,42341,42358,42363,42372,42387,42398,42442,42446,42474,42478,42489,42517,42521,42558,42562,42590,42594,42605,42641,42673,42701,42705,42716,42750,42782,42814,42847,42881,42909,42913,42924,42957,42989,43003,43007,43020,43024,43029,43041,43049,43071,43076,43081,43086,43091,43096,43101,43115,43123,43132,43145,43160,43169,43173,43181,43192,43203,43214,43225,43236,43242,43246,43251,43263,43283,43292],{"__ignoreMap":54},[478,41838,41839,41841],{"class":480,"line":481},[478,41840,30772],{"class":710},[478,41842,30775],{"class":714},[478,41844,41845,41847,41849,41851],{"class":480,"line":565},[478,41846,31117],{"class":710},[478,41848,31120],{"class":714},[478,41850,30772],{"class":710},[478,41852,31125],{"class":714},[478,41854,41855,41857,41859,41861],{"class":480,"line":579},[478,41856,31117],{"class":710},[478,41858,31137],{"class":714},[478,41860,30772],{"class":710},[478,41862,31142],{"class":714},[478,41864,41865],{"class":480,"line":593},[478,41866,2966],{"emptyLinePlaceholder":640},[478,41868,41869,41871,41874,41876,41878,41880,41882],{"class":480,"line":1769},[478,41870,15259],{"class":710},[478,41872,41873],{"class":484}," Inception",[478,41875,263],{"class":714},[478,41877,31158],{"class":484},[478,41879,1258],{"class":714},[478,41881,31163],{"class":484},[478,41883,31166],{"class":714},[478,41885,41886,41888,41890],{"class":480,"line":1783},[478,41887,31181],{"class":710},[478,41889,31184],{"class":495},[478,41891,41892],{"class":714},"(self,in_channels,c1,c2,c3,c4):\n",[478,41894,41895,41897,41900,41902,41904,41906],{"class":480,"line":1789},[478,41896,31197],{"class":495},[478,41898,41899],{"class":714},"(Inception,",[478,41901,31203],{"class":495},[478,41903,31206],{"class":714},[478,41905,31209],{"class":495},[478,41907,2542],{"class":714},[478,41909,41910,41912,41914,41916],{"class":480,"line":1880},[478,41911,31225],{"class":495},[478,41913,35151],{"class":714},[478,41915,759],{"class":710},[478,41917,35156],{"class":714},[478,41919,41920],{"class":480,"line":1886},[478,41921,41922],{"class":770},"        # 路线1：定义1*1卷积\n",[478,41924,41925,41927,41930,41932,41934,41936,41938,41941,41943,41945,41948,41950,41952,41954],{"class":480,"line":1898},[478,41926,31225],{"class":495},[478,41928,41929],{"class":714},".p1_1",[478,41931,759],{"class":710},[478,41933,31233],{"class":714},[478,41935,31236],{"class":5782},[478,41937,759],{"class":710},[478,41939,41940],{"class":714},"in_channels,",[478,41942,31245],{"class":5782},[478,41944,759],{"class":710},[478,41946,41947],{"class":714},"c1,",[478,41949,31254],{"class":5782},[478,41951,759],{"class":710},[478,41953,193],{"class":495},[478,41955,720],{"class":714},[478,41957,41958],{"class":480,"line":2180},[478,41959,41960],{"class":770},"        # 路线2：定义1*1卷积和3*3\n",[478,41962,41963,41965,41968,41970,41972,41974,41976,41978,41980,41982,41985,41987,41990,41992,41994,41996],{"class":480,"line":2185},[478,41964,31225],{"class":495},[478,41966,41967],{"class":714},".p2_1",[478,41969,759],{"class":710},[478,41971,31233],{"class":714},[478,41973,31236],{"class":5782},[478,41975,759],{"class":710},[478,41977,41940],{"class":714},[478,41979,31245],{"class":5782},[478,41981,759],{"class":710},[478,41983,41984],{"class":714},"c2[",[478,41986,895],{"class":495},[478,41988,41989],{"class":714},"],",[478,41991,31254],{"class":5782},[478,41993,759],{"class":710},[478,41995,193],{"class":495},[478,41997,720],{"class":714},[478,41999,42000,42002,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043],{"class":480,"line":2191},[478,42001,31225],{"class":495},[478,42003,42004],{"class":714},".p2_2",[478,42006,759],{"class":710},[478,42008,31233],{"class":714},[478,42010,31236],{"class":5782},[478,42012,759],{"class":710},[478,42014,41984],{"class":714},[478,42016,895],{"class":495},[478,42018,41989],{"class":714},[478,42020,31245],{"class":5782},[478,42022,759],{"class":710},[478,42024,41984],{"class":714},[478,42026,193],{"class":495},[478,42028,41989],{"class":714},[478,42030,31254],{"class":5782},[478,42032,759],{"class":710},[478,42034,783],{"class":495},[478,42036,1079],{"class":714},[478,42038,31263],{"class":5782},[478,42040,759],{"class":710},[478,42042,193],{"class":495},[478,42044,720],{"class":714},[478,42046,42047],{"class":480,"line":2196},[478,42048,42049],{"class":770},"        # 路线3：定义1*1卷积和5*5\n",[478,42051,42052,42054,42057,42059,42061,42063,42065,42067,42069,42071,42074,42076,42078,42080,42082,42084],{"class":480,"line":2210},[478,42053,31225],{"class":495},[478,42055,42056],{"class":714},".p3_1",[478,42058,759],{"class":710},[478,42060,31233],{"class":714},[478,42062,31236],{"class":5782},[478,42064,759],{"class":710},[478,42066,41940],{"class":714},[478,42068,31245],{"class":5782},[478,42070,759],{"class":710},[478,42072,42073],{"class":714},"c3[",[478,42075,895],{"class":495},[478,42077,41989],{"class":714},[478,42079,31254],{"class":5782},[478,42081,759],{"class":710},[478,42083,193],{"class":495},[478,42085,720],{"class":714},[478,42087,42088,42090,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129,42131],{"class":480,"line":2215},[478,42089,31225],{"class":495},[478,42091,42092],{"class":714},".p3_2",[478,42094,759],{"class":710},[478,42096,31233],{"class":714},[478,42098,31236],{"class":5782},[478,42100,759],{"class":710},[478,42102,42073],{"class":714},[478,42104,895],{"class":495},[478,42106,41989],{"class":714},[478,42108,31245],{"class":5782},[478,42110,759],{"class":710},[478,42112,42073],{"class":714},[478,42114,193],{"class":495},[478,42116,41989],{"class":714},[478,42118,31254],{"class":5782},[478,42120,759],{"class":710},[478,42122,1020],{"class":495},[478,42124,1079],{"class":714},[478,42126,31263],{"class":5782},[478,42128,759],{"class":710},[478,42130,789],{"class":495},[478,42132,720],{"class":714},[478,42134,42135],{"class":480,"line":2221},[478,42136,42137],{"class":770},"        # 路线4：定义3*3最大池化和1*1卷积\n",[478,42139,42140],{"class":480,"line":2241},[478,42141,42142],{"class":770},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[478,42144,42145,42147,42150,42152,42154,42156,42158,42160,42162,42164,42166,42168,42170,42172,42174,42176],{"class":480,"line":2246},[478,42146,31225],{"class":495},[478,42148,42149],{"class":714},".p4_1",[478,42151,759],{"class":710},[478,42153,35209],{"class":714},[478,42155,31254],{"class":5782},[478,42157,759],{"class":710},[478,42159,783],{"class":495},[478,42161,1079],{"class":714},[478,42163,31309],{"class":5782},[478,42165,759],{"class":710},[478,42167,193],{"class":495},[478,42169,1079],{"class":714},[478,42171,31263],{"class":5782},[478,42173,759],{"class":710},[478,42175,193],{"class":495},[478,42177,720],{"class":714},[478,42179,42180,42182,42185,42187,42189,42191,42193,42195,42197,42199,42202,42204,42206,42208],{"class":480,"line":2260},[478,42181,31225],{"class":495},[478,42183,42184],{"class":714},".p4_2",[478,42186,759],{"class":710},[478,42188,31233],{"class":714},[478,42190,31236],{"class":5782},[478,42192,759],{"class":710},[478,42194,41940],{"class":714},[478,42196,31245],{"class":5782},[478,42198,759],{"class":710},[478,42200,42201],{"class":714},"c4,",[478,42203,31254],{"class":5782},[478,42205,759],{"class":710},[478,42207,193],{"class":495},[478,42209,720],{"class":714},[478,42211,42212],{"class":480,"line":2265},[478,42213,2966],{"emptyLinePlaceholder":640},[478,42215,42216,42218,42220],{"class":480,"line":2294},[478,42217,31181],{"class":710},[478,42219,31473],{"class":484},[478,42221,31476],{"class":714},[478,42223,42224,42227,42229,42231,42233,42235],{"class":480,"line":2299},[478,42225,42226],{"class":714},"        p1",[478,42228,759],{"class":710},[478,42230,31203],{"class":495},[478,42232,35564],{"class":714},[478,42234,31203],{"class":495},[478,42236,42237],{"class":714},".p1_1(x))\n",[478,42239,42240,42242,42244,42246,42248,42250,42253,42255,42257,42259],{"class":480,"line":2316},[478,42241,7651],{"class":714},[478,42243,759],{"class":710},[478,42245,31203],{"class":495},[478,42247,35564],{"class":714},[478,42249,31203],{"class":495},[478,42251,42252],{"class":714},".p2_2(",[478,42254,31203],{"class":495},[478,42256,35564],{"class":714},[478,42258,31203],{"class":495},[478,42260,42261],{"class":714},".p2_1(x))))\n",[478,42263,42264,42267,42269,42271,42273,42275,42278,42280,42282,42284],{"class":480,"line":2321},[478,42265,42266],{"class":714},"        p3",[478,42268,759],{"class":710},[478,42270,31203],{"class":495},[478,42272,35564],{"class":714},[478,42274,31203],{"class":495},[478,42276,42277],{"class":714},".p3_2(",[478,42279,31203],{"class":495},[478,42281,35564],{"class":714},[478,42283,31203],{"class":495},[478,42285,42286],{"class":714},".p3_1(x))))\n",[478,42288,42289,42292,42294,42296,42298,42300,42303,42305],{"class":480,"line":2326},[478,42290,42291],{"class":714},"        p4",[478,42293,759],{"class":710},[478,42295,31203],{"class":495},[478,42297,35564],{"class":714},[478,42299,31203],{"class":495},[478,42301,42302],{"class":714},".p4_2(",[478,42304,31203],{"class":495},[478,42306,42307],{"class":714},".p4_1(x)))\n",[478,42309,42310],{"class":480,"line":2331},[478,42311,42312],{"class":770},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[478,42314,42315,42317,42320,42322,42324,42326],{"class":480,"line":2345},[478,42316,15317],{"class":710},[478,42318,42319],{"class":714}," torch.cat((p1,p2,p3,p4),",[478,42321,33065],{"class":5782},[478,42323,759],{"class":710},[478,42325,193],{"class":495},[478,42327,720],{"class":714},[478,42329,42330],{"class":480,"line":2350},[478,42331,2966],{"emptyLinePlaceholder":640},[478,42333,42334],{"class":480,"line":3143},[478,42335,2966],{"emptyLinePlaceholder":640},[478,42337,42338],{"class":480,"line":3157},[478,42339,42340],{"class":770},"# 搭建GoogLeNet网络\n",[478,42342,42343,42345,42348,42350,42352,42354,42356],{"class":480,"line":3165},[478,42344,15259],{"class":710},[478,42346,42347],{"class":484}," GoogLeNet",[478,42349,263],{"class":714},[478,42351,31158],{"class":484},[478,42353,1258],{"class":714},[478,42355,31163],{"class":484},[478,42357,31166],{"class":714},[478,42359,42360],{"class":480,"line":3170},[478,42361,42362],{"class":770},"    # 必须把Inception导入到里边\n",[478,42364,42365,42367,42369],{"class":480,"line":3176},[478,42366,31181],{"class":710},[478,42368,31184],{"class":495},[478,42370,42371],{"class":714},"(self,Inception):\n",[478,42373,42374,42376,42379,42381,42383,42385],{"class":480,"line":3182},[478,42375,31197],{"class":495},[478,42377,42378],{"class":714},"(GoogLeNet,",[478,42380,31203],{"class":495},[478,42382,31206],{"class":714},[478,42384,31209],{"class":495},[478,42386,2542],{"class":714},[478,42388,42389,42391,42394,42396],{"class":480,"line":3187},[478,42390,31225],{"class":495},[478,42392,42393],{"class":714},".b1",[478,42395,759],{"class":710},[478,42397,38389],{"class":714},[478,42399,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418,42420,42422,42424,42426,42428,42430,42432,42434,42436,42438,42440],{"class":480,"line":8514},[478,42401,38394],{"class":714},[478,42403,31236],{"class":5782},[478,42405,759],{"class":710},[478,42407,193],{"class":495},[478,42409,1079],{"class":714},[478,42411,31245],{"class":5782},[478,42413,759],{"class":710},[478,42415,907],{"class":495},[478,42417,1079],{"class":714},[478,42419,31254],{"class":5782},[478,42421,759],{"class":710},[478,42423,1070],{"class":495},[478,42425,1079],{"class":714},[478,42427,31309],{"class":5782},[478,42429,759],{"class":710},[478,42431,789],{"class":495},[478,42433,1079],{"class":714},[478,42435,31263],{"class":5782},[478,42437,759],{"class":710},[478,42439,783],{"class":495},[478,42441,38427],{"class":714},[478,42443,42444],{"class":480,"line":8538},[478,42445,38432],{"class":714},[478,42447,42448,42450,42452,42454,42456,42458,42460,42462,42464,42466,42468,42470,42472],{"class":480,"line":8543},[478,42449,38477],{"class":714},[478,42451,31254],{"class":5782},[478,42453,759],{"class":710},[478,42455,783],{"class":495},[478,42457,1079],{"class":714},[478,42459,31309],{"class":5782},[478,42461,759],{"class":710},[478,42463,789],{"class":495},[478,42465,1079],{"class":714},[478,42467,31263],{"class":5782},[478,42469,759],{"class":710},[478,42471,193],{"class":495},[478,42473,720],{"class":714},[478,42475,42476],{"class":480,"line":8549},[478,42477,38506],{"class":714},[478,42479,42480,42482,42485,42487],{"class":480,"line":8576},[478,42481,31225],{"class":495},[478,42483,42484],{"class":714},".b2",[478,42486,759],{"class":710},[478,42488,38389],{"class":714},[478,42490,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509,42511,42513,42515],{"class":480,"line":8581},[478,42492,38394],{"class":714},[478,42494,31236],{"class":5782},[478,42496,759],{"class":710},[478,42498,907],{"class":495},[478,42500,1079],{"class":714},[478,42502,31245],{"class":5782},[478,42504,759],{"class":710},[478,42506,907],{"class":495},[478,42508,1079],{"class":714},[478,42510,31254],{"class":5782},[478,42512,759],{"class":710},[478,42514,193],{"class":495},[478,42516,38427],{"class":714},[478,42518,42519],{"class":480,"line":8587},[478,42520,38432],{"class":714},[478,42522,42523,42525,42527,42529,42531,42533,42535,42537,42540,42542,42544,42546,42548,42550,42552,42554,42556],{"class":480,"line":8599},[478,42524,38394],{"class":714},[478,42526,31236],{"class":5782},[478,42528,759],{"class":710},[478,42530,907],{"class":495},[478,42532,1079],{"class":714},[478,42534,31245],{"class":5782},[478,42536,759],{"class":710},[478,42538,42539],{"class":495},"192",[478,42541,1079],{"class":714},[478,42543,31254],{"class":5782},[478,42545,759],{"class":710},[478,42547,783],{"class":495},[478,42549,1079],{"class":714},[478,42551,31263],{"class":5782},[478,42553,759],{"class":710},[478,42555,193],{"class":495},[478,42557,38427],{"class":714},[478,42559,42560],{"class":480,"line":8611},[478,42561,38432],{"class":714},[478,42563,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588],{"class":480,"line":8623},[478,42565,38477],{"class":714},[478,42567,31254],{"class":5782},[478,42569,759],{"class":710},[478,42571,783],{"class":495},[478,42573,1079],{"class":714},[478,42575,31309],{"class":5782},[478,42577,759],{"class":710},[478,42579,789],{"class":495},[478,42581,1079],{"class":714},[478,42583,31263],{"class":5782},[478,42585,759],{"class":710},[478,42587,193],{"class":495},[478,42589,720],{"class":714},[478,42591,42592],{"class":480,"line":10282},[478,42593,38506],{"class":714},[478,42595,42596,42598,42601,42603],{"class":480,"line":10307},[478,42597,31225],{"class":495},[478,42599,42600],{"class":714},".b3",[478,42602,759],{"class":710},[478,42604,38389],{"class":714},[478,42606,42607,42610,42612,42614,42616,42619,42621,42623,42625,42628,42630,42632,42634,42637,42639],{"class":480,"line":10330},[478,42608,42609],{"class":714},"            Inception(",[478,42611,42539],{"class":495},[478,42613,1079],{"class":714},[478,42615,907],{"class":495},[478,42617,42618],{"class":714},",(",[478,42620,913],{"class":495},[478,42622,1079],{"class":714},[478,42624,32450],{"class":495},[478,42626,42627],{"class":714},"),(",[478,42629,1299],{"class":495},[478,42631,1079],{"class":714},[478,42633,901],{"class":495},[478,42635,42636],{"class":714},"),",[478,42638,901],{"class":495},[478,42640,38427],{"class":714},[478,42642,42643,42645,42647,42649,42651,42653,42655,42657,42659,42661,42663,42665,42667,42669,42671],{"class":480,"line":10354},[478,42644,42609],{"class":714},[478,42646,35250],{"class":495},[478,42648,1079],{"class":714},[478,42650,32450],{"class":495},[478,42652,42618],{"class":714},[478,42654,32450],{"class":495},[478,42656,1079],{"class":714},[478,42658,42539],{"class":495},[478,42660,42627],{"class":714},[478,42662,901],{"class":495},[478,42664,1079],{"class":714},[478,42666,913],{"class":495},[478,42668,42636],{"class":714},[478,42670,907],{"class":495},[478,42672,38427],{"class":714},[478,42674,42675,42677,42679,42681,42683,42685,42687,42689,42691,42693,42695,42697,42699],{"class":480,"line":10359},[478,42676,38477],{"class":714},[478,42678,31254],{"class":5782},[478,42680,759],{"class":710},[478,42682,783],{"class":495},[478,42684,1079],{"class":714},[478,42686,31309],{"class":5782},[478,42688,759],{"class":710},[478,42690,789],{"class":495},[478,42692,1079],{"class":714},[478,42694,31263],{"class":5782},[478,42696,759],{"class":710},[478,42698,193],{"class":495},[478,42700,720],{"class":714},[478,42702,42703],{"class":480,"line":10364},[478,42704,38506],{"class":714},[478,42706,42707,42709,42712,42714],{"class":480,"line":10369},[478,42708,31225],{"class":495},[478,42710,42711],{"class":714},".b4",[478,42713,759],{"class":710},[478,42715,38389],{"class":714},[478,42717,42718,42720,42723,42725,42727,42729,42731,42733,42736,42738,42740,42742,42744,42746,42748],{"class":480,"line":10378},[478,42719,42609],{"class":714},[478,42721,42722],{"class":495},"480",[478,42724,1079],{"class":714},[478,42726,42539],{"class":495},[478,42728,42618],{"class":714},[478,42730,913],{"class":495},[478,42732,1079],{"class":714},[478,42734,42735],{"class":495},"208",[478,42737,42627],{"class":714},[478,42739,1299],{"class":495},[478,42741,1079],{"class":714},[478,42743,1305],{"class":495},[478,42745,42636],{"class":714},[478,42747,907],{"class":495},[478,42749,38427],{"class":714},[478,42751,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780],{"class":480,"line":10383},[478,42753,42609],{"class":714},[478,42755,38837],{"class":495},[478,42757,1079],{"class":714},[478,42759,21613],{"class":495},[478,42761,42618],{"class":714},[478,42763,1316],{"class":495},[478,42765,1079],{"class":714},[478,42767,31881],{"class":495},[478,42769,42627],{"class":714},[478,42771,1495],{"class":495},[478,42773,1079],{"class":714},[478,42775,907],{"class":495},[478,42777,42636],{"class":714},[478,42779,907],{"class":495},[478,42781,38427],{"class":714},[478,42783,42784,42786,42788,42790,42792,42794,42796,42798,42800,42802,42804,42806,42808,42810,42812],{"class":480,"line":10389},[478,42785,42609],{"class":714},[478,42787,38837],{"class":495},[478,42789,1079],{"class":714},[478,42791,32450],{"class":495},[478,42793,42618],{"class":714},[478,42795,32450],{"class":495},[478,42797,1079],{"class":714},[478,42799,35250],{"class":495},[478,42801,42627],{"class":714},[478,42803,1495],{"class":495},[478,42805,1079],{"class":714},[478,42807,907],{"class":495},[478,42809,42636],{"class":714},[478,42811,907],{"class":495},[478,42813,38427],{"class":714},[478,42815,42816,42818,42820,42822,42824,42826,42828,42830,42833,42835,42837,42839,42841,42843,42845],{"class":480,"line":10410},[478,42817,42609],{"class":714},[478,42819,38837],{"class":495},[478,42821,1079],{"class":714},[478,42823,1316],{"class":495},[478,42825,42618],{"class":714},[478,42827,32450],{"class":495},[478,42829,1079],{"class":714},[478,42831,42832],{"class":495},"288",[478,42834,42627],{"class":714},[478,42836,901],{"class":495},[478,42838,1079],{"class":714},[478,42840,907],{"class":495},[478,42842,42636],{"class":714},[478,42844,907],{"class":495},[478,42846,38427],{"class":714},[478,42848,42849,42851,42854,42856,42858,42860,42862,42864,42867,42869,42871,42873,42875,42877,42879],{"class":480,"line":10416},[478,42850,42609],{"class":714},[478,42852,42853],{"class":495},"528",[478,42855,1079],{"class":714},[478,42857,35250],{"class":495},[478,42859,42618],{"class":714},[478,42861,21613],{"class":495},[478,42863,1079],{"class":714},[478,42865,42866],{"class":495},"320",[478,42868,42627],{"class":714},[478,42870,901],{"class":495},[478,42872,1079],{"class":714},[478,42874,32450],{"class":495},[478,42876,42636],{"class":714},[478,42878,32450],{"class":495},[478,42880,38427],{"class":714},[478,42882,42883,42885,42887,42889,42891,42893,42895,42897,42899,42901,42903,42905,42907],{"class":480,"line":10430},[478,42884,38477],{"class":714},[478,42886,31254],{"class":5782},[478,42888,759],{"class":710},[478,42890,783],{"class":495},[478,42892,1079],{"class":714},[478,42894,31309],{"class":5782},[478,42896,759],{"class":710},[478,42898,789],{"class":495},[478,42900,1079],{"class":714},[478,42902,31263],{"class":5782},[478,42904,759],{"class":710},[478,42906,193],{"class":495},[478,42908,720],{"class":714},[478,42910,42911],{"class":480,"line":10436},[478,42912,38506],{"class":714},[478,42914,42915,42917,42920,42922],{"class":480,"line":10463},[478,42916,31225],{"class":495},[478,42918,42919],{"class":714},".b5",[478,42921,759],{"class":710},[478,42923,38389],{"class":714},[478,42925,42926,42928,42931,42933,42935,42937,42939,42941,42943,42945,42947,42949,42951,42953,42955],{"class":480,"line":10472},[478,42927,42609],{"class":714},[478,42929,42930],{"class":495},"832",[478,42932,1079],{"class":714},[478,42934,35250],{"class":495},[478,42936,42618],{"class":714},[478,42938,21613],{"class":495},[478,42940,1079],{"class":714},[478,42942,42866],{"class":495},[478,42944,42627],{"class":714},[478,42946,901],{"class":495},[478,42948,1079],{"class":714},[478,42950,32450],{"class":495},[478,42952,42636],{"class":714},[478,42954,32450],{"class":495},[478,42956,38427],{"class":714},[478,42958,42959,42961,42963,42965,42967,42969,42971,42973,42975,42977,42979,42981,42983,42985,42987],{"class":480,"line":10478},[478,42960,42609],{"class":714},[478,42962,42930],{"class":495},[478,42964,1079],{"class":714},[478,42966,35320],{"class":495},[478,42968,42618],{"class":714},[478,42970,42539],{"class":495},[478,42972,1079],{"class":714},[478,42974,35320],{"class":495},[478,42976,42627],{"class":714},[478,42978,1305],{"class":495},[478,42980,1079],{"class":714},[478,42982,32450],{"class":495},[478,42984,42636],{"class":714},[478,42986,32450],{"class":495},[478,42988,38427],{"class":714},[478,42990,42991,42994,42996,42998,43000],{"class":480,"line":10486},[478,42992,42993],{"class":714},"            nn.AdaptiveAvgPool2d((",[478,42995,193],{"class":495},[478,42997,1079],{"class":714},[478,42999,193],{"class":495},[478,43001,43002],{"class":714},")),\n",[478,43004,43005],{"class":480,"line":10491},[478,43006,39170],{"class":714},[478,43008,43009,43011,43014,43016,43018],{"class":480,"line":17169},[478,43010,39175],{"class":714},[478,43012,43013],{"class":495},"1024",[478,43015,1079],{"class":714},[478,43017,1146],{"class":495},[478,43019,720],{"class":714},[478,43021,43022],{"class":480,"line":17175},[478,43023,38506],{"class":714},[478,43025,43026],{"class":480,"line":17198},[478,43027,43028],{"class":770},"        # 对模型参数初始化\n",[478,43030,43031,43033,43035,43037,43039],{"class":480,"line":17204},[478,43032,3969],{"class":710},[478,43034,39248],{"class":714},[478,43036,26423],{"class":710},[478,43038,39253],{"class":495},[478,43040,39256],{"class":714},[478,43042,43043,43045,43047],{"class":480,"line":17227},[478,43044,5208],{"class":710},[478,43046,39268],{"class":495},[478,43048,39271],{"class":714},[478,43050,43051,43053,43056,43058,43061,43063,43065,43067,43069],{"class":480,"line":17241},[478,43052,39281],{"class":714},[478,43054,43055],{"class":5782},"mode",[478,43057,759],{"class":710},[478,43059,43060],{"class":488},"'fan_out'",[478,43062,1079],{"class":714},[478,43064,39284],{"class":5782},[478,43066,759],{"class":710},[478,43068,39289],{"class":488},[478,43070,720],{"class":714},[478,43072,43073],{"class":480,"line":17261},[478,43074,43075],{"class":770},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[478,43077,43078],{"class":480,"line":17267},[478,43079,43080],{"class":770},"                # ② mode = 'fan_out'决定使用的fan值：\n",[478,43082,43083],{"class":480,"line":17278},[478,43084,43085],{"class":770},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[478,43087,43088],{"class":480,"line":17301},[478,43089,43090],{"class":770},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[478,43092,43093],{"class":480,"line":17323},[478,43094,43095],{"class":770},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[478,43097,43098],{"class":480,"line":17328},[478,43099,43100],{"class":770},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[478,43102,43103,43105,43107,43109,43111,43113],{"class":480,"line":17334},[478,43104,39301],{"class":710},[478,43106,39304],{"class":714},[478,43108,39307],{"class":710},[478,43110,39310],{"class":710},[478,43112,39313],{"class":495},[478,43114,4305],{"class":714},[478,43116,43117,43119,43121],{"class":480,"line":17348},[478,43118,39325],{"class":714},[478,43120,895],{"class":495},[478,43122,720],{"class":714},[478,43124,43125,43128,43130],{"class":480,"line":17361},[478,43126,43127],{"class":710},"                elif",[478,43129,39268],{"class":495},[478,43131,39344],{"class":714},[478,43133,43134,43137,43139,43141,43143],{"class":480,"line":17366},[478,43135,43136],{"class":714},"                    nn.init.normal_(m.weight,",[478,43138,895],{"class":495},[478,43140,1079],{"class":714},[478,43142,39366],{"class":495},[478,43144,720],{"class":714},[478,43146,43147,43150,43152,43154,43156,43158],{"class":480,"line":17380},[478,43148,43149],{"class":710},"                    if",[478,43151,39304],{"class":714},[478,43153,39307],{"class":710},[478,43155,39310],{"class":710},[478,43157,39313],{"class":495},[478,43159,4305],{"class":714},[478,43161,43162,43165,43167],{"class":480,"line":17385},[478,43163,43164],{"class":714},"                        nn.init.constant_(m.bias,",[478,43166,895],{"class":495},[478,43168,720],{"class":714},[478,43170,43171],{"class":480,"line":17391},[478,43172,35545],{"class":770},[478,43174,43175,43177,43179],{"class":480,"line":17396},[478,43176,31181],{"class":710},[478,43178,31473],{"class":484},[478,43180,31476],{"class":714},[478,43182,43183,43185,43187,43189],{"class":480,"line":17410},[478,43184,31481],{"class":714},[478,43186,759],{"class":710},[478,43188,31203],{"class":495},[478,43190,43191],{"class":714},".b1(x)\n",[478,43193,43194,43196,43198,43200],{"class":480,"line":17415},[478,43195,31481],{"class":714},[478,43197,759],{"class":710},[478,43199,31203],{"class":495},[478,43201,43202],{"class":714},".b2(x)\n",[478,43204,43205,43207,43209,43211],{"class":480,"line":17420},[478,43206,31481],{"class":714},[478,43208,759],{"class":710},[478,43210,31203],{"class":495},[478,43212,43213],{"class":714},".b3(x)\n",[478,43215,43216,43218,43220,43222],{"class":480,"line":17434},[478,43217,31481],{"class":714},[478,43219,759],{"class":710},[478,43221,31203],{"class":495},[478,43223,43224],{"class":714},".b4(x)\n",[478,43226,43227,43229,43231,43233],{"class":480,"line":17446},[478,43228,31481],{"class":714},[478,43230,759],{"class":710},[478,43232,31203],{"class":495},[478,43234,43235],{"class":714},".b5(x)\n",[478,43237,43238,43240],{"class":480,"line":17451},[478,43239,15317],{"class":710},[478,43241,31589],{"class":714},[478,43243,43244],{"class":480,"line":17464},[478,43245,2966],{"emptyLinePlaceholder":640},[478,43247,43248],{"class":480,"line":17469},[478,43249,43250],{"class":770},"# 模型展示\n",[478,43252,43253,43255,43257,43259,43261],{"class":480,"line":17474},[478,43254,2099],{"class":710},[478,43256,31600],{"class":495},[478,43258,3515],{"class":710},[478,43260,31605],{"class":488},[478,43262,4305],{"class":714},[478,43264,43265,43267,43269,43271,43273,43275,43277,43279,43281],{"class":480,"line":17479},[478,43266,31617],{"class":714},[478,43268,759],{"class":710},[478,43270,30831],{"class":714},[478,43272,31624],{"class":488},[478,43274,2271],{"class":710},[478,43276,31629],{"class":714},[478,43278,2268],{"class":710},[478,43280,30856],{"class":488},[478,43282,720],{"class":714},[478,43284,43285,43287,43289],{"class":480,"line":17492},[478,43286,31669],{"class":714},[478,43288,759],{"class":710},[478,43290,43291],{"class":714},"GoogLeNet(Inception).to(device)\n",[478,43293,43294,43296,43298,43300,43302,43304,43306,43308],{"class":480,"line":17497},[478,43295,31679],{"class":495},[478,43297,31682],{"class":714},[478,43299,193],{"class":495},[478,43301,1079],{"class":714},[478,43303,31881],{"class":495},[478,43305,1079],{"class":714},[478,43307,31881],{"class":495},[478,43309,31695],{"class":714},[29,43311,43312],{"start":565},[32,43313,39563],{},[469,43315,43317],{"className":30758,"code":43316,"language":30760,"meta":54,"style":54},"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",[475,43318,43319,43325,43331,43341,43347,43357,43367,43377,43387,43397,43401,43412,43422,43426,43430,43434,43442,43454,43464,43480,43490,43522,43536,43546,43556,43560,43570,43584,43594,43604,43614,43620,43624,43628,43632,43636,43640,43648,43668,43672,43676,43680,43684,43688,43704,43708,43712,43720,43724,43728,43736,43740,43744,43748,43756,43760,43764,43768,43772,43780,43784,43792,43796,43804,43808,43816,43820,43828,43832,43836,43844,43848,43852,43856,43868,43892,43906,43910,43914,43918,43926,43930,43938,43942,43950,43954,43962,43966,43974,43978,43986,43990,44002,44006,44014,44018,44026,44030,44034,44038,44042,44050,44054,44070,44074,44082,44086,44090,44094,44098,44102,44106,44110,44126,44130,44142,44146,44158,44162,44174,44178,44186,44190,44198,44202,44206,44210,44216,44220,44228,44232,44248,44252,44260,44264,44280,44292,44296,44308,44312,44316,44324,44328,44332,44340,44344,44352,44356,44364,44368,44372,44414,44456,44460,44464,44480,44484,44500,44504,44508,44516,44520,44524,44536,44574,44578,44582,44590,44594,44608,44618,44624,44630,44636,44642,44646,44650,44656,44660,44664,44672,44676,44694,44698,44702,44706,44722,44726,44730,44734,44738,44742,44762,44782,44786,44790,44794,44802,44810,44814,44830,44850,44870,44874,44878,44886,44894,44898,44902,44906,44918,44922,44932,44940,44957],{"__ignoreMap":54},[478,43320,43321,43323],{"class":480,"line":481},[478,43322,30772],{"class":710},[478,43324,32202],{"class":714},[478,43326,43327,43329],{"class":480,"line":565},[478,43328,30772],{"class":710},[478,43330,32209],{"class":714},[478,43332,43333,43335,43337,43339],{"class":480,"line":579},[478,43334,30772],{"class":710},[478,43336,32220],{"class":714},[478,43338,31763],{"class":710},[478,43340,32225],{"class":714},[478,43342,43343,43345],{"class":480,"line":593},[478,43344,30772],{"class":710},[478,43346,30775],{"class":714},[478,43348,43349,43351,43353,43355],{"class":480,"line":1769},[478,43350,31117],{"class":710},[478,43352,31795],{"class":714},[478,43354,30772],{"class":710},[478,43356,32242],{"class":714},[478,43358,43359,43361,43363,43365],{"class":480,"line":1783},[478,43360,31117],{"class":710},[478,43362,31748],{"class":714},[478,43364,30772],{"class":710},[478,43366,31753],{"class":714},[478,43368,43369,43371,43373,43375],{"class":480,"line":1789},[478,43370,31117],{"class":710},[478,43372,31778],{"class":714},[478,43374,30772],{"class":710},[478,43376,31783],{"class":714},[478,43378,43379,43381,43383,43385],{"class":480,"line":1880},[478,43380,30772],{"class":710},[478,43382,31795],{"class":714},[478,43384,31763],{"class":710},[478,43386,31800],{"class":714},[478,43388,43389,43391,43393,43395],{"class":480,"line":1886},[478,43390,30772],{"class":710},[478,43392,31812],{"class":714},[478,43394,31763],{"class":710},[478,43396,31817],{"class":714},[478,43398,43399],{"class":480,"line":1898},[478,43400,32287],{"class":770},[478,43402,43403,43405,43407,43409],{"class":480,"line":2180},[478,43404,31117],{"class":710},[478,43406,32294],{"class":714},[478,43408,30772],{"class":710},[478,43410,43411],{"class":714}," GoogLeNet, Inception\n",[478,43413,43414,43416,43418,43420],{"class":480,"line":2185},[478,43415,31117],{"class":710},[478,43417,31120],{"class":714},[478,43419,30772],{"class":710},[478,43421,31125],{"class":714},[478,43423,43424],{"class":480,"line":2191},[478,43425,2966],{"emptyLinePlaceholder":640},[478,43427,43428],{"class":480,"line":2196},[478,43429,2966],{"emptyLinePlaceholder":640},[478,43431,43432],{"class":480,"line":2210},[478,43433,32322],{"class":770},[478,43435,43436,43438,43440],{"class":480,"line":2215},[478,43437,32327],{"class":710},[478,43439,32330],{"class":484},[478,43441,32333],{"class":714},[478,43443,43444,43446,43448,43450,43452],{"class":480,"line":2221},[478,43445,32338],{"class":714},[478,43447,759],{"class":710},[478,43449,31835],{"class":714},[478,43451,31843],{"class":488},[478,43453,31846],{"class":714},[478,43455,43456,43458,43460,43462],{"class":480,"line":2241},[478,43457,32351],{"class":5782},[478,43459,759],{"class":710},[478,43461,31856],{"class":495},[478,43463,31846],{"class":714},[478,43465,43466,43468,43470,43472,43474,43476,43478],{"class":480,"line":2246},[478,43467,32362],{"class":5782},[478,43469,759],{"class":710},[478,43471,31873],{"class":714},[478,43473,31876],{"class":5782},[478,43475,759],{"class":710},[478,43477,35829],{"class":495},[478,43479,31884],{"class":714},[478,43481,43482,43484,43486,43488],{"class":480,"line":2260},[478,43483,32379],{"class":5782},[478,43485,759],{"class":710},[478,43487,31856],{"class":495},[478,43489,720],{"class":714},[478,43491,43492,43494,43496,43498,43500,43502,43504,43506,43508,43510,43512,43514,43516,43518,43520],{"class":480,"line":2265},[478,43493,32390],{"class":714},[478,43495,759],{"class":710},[478,43497,32395],{"class":714},[478,43499,32398],{"class":495},[478,43501,263],{"class":714},[478,43503,32403],{"class":495},[478,43505,1155],{"class":710},[478,43507,7924],{"class":495},[478,43509,32410],{"class":714},[478,43511,32398],{"class":495},[478,43513,263],{"class":714},[478,43515,32417],{"class":495},[478,43517,1155],{"class":710},[478,43519,7924],{"class":495},[478,43521,32424],{"class":714},[478,43523,43524,43526,43528,43530,43532,43534],{"class":480,"line":2294},[478,43525,32429],{"class":714},[478,43527,759],{"class":710},[478,43529,32434],{"class":714},[478,43531,31917],{"class":5782},[478,43533,759],{"class":710},[478,43535,31922],{"class":714},[478,43537,43538,43540,43542,43544],{"class":480,"line":2299},[478,43539,32445],{"class":5782},[478,43541,759],{"class":710},[478,43543,901],{"class":495},[478,43545,31846],{"class":714},[478,43547,43548,43550,43552,43554],{"class":480,"line":2316},[478,43549,32457],{"class":5782},[478,43551,759],{"class":710},[478,43553,31856],{"class":495},[478,43555,31846],{"class":714},[478,43557,43558],{"class":480,"line":2321},[478,43559,32468],{"class":770},[478,43561,43562,43564,43566,43568],{"class":480,"line":2326},[478,43563,32473],{"class":5782},[478,43565,759],{"class":710},[478,43567,1096],{"class":495},[478,43569,720],{"class":714},[478,43571,43572,43574,43576,43578,43580,43582],{"class":480,"line":2331},[478,43573,32484],{"class":714},[478,43575,759],{"class":710},[478,43577,31914],{"class":714},[478,43579,31917],{"class":5782},[478,43581,759],{"class":710},[478,43583,32495],{"class":714},[478,43585,43586,43588,43590,43592],{"class":480,"line":2345},[478,43587,32500],{"class":5782},[478,43589,759],{"class":710},[478,43591,901],{"class":495},[478,43593,31846],{"class":714},[478,43595,43596,43598,43600,43602],{"class":480,"line":2350},[478,43597,32511],{"class":5782},[478,43599,759],{"class":710},[478,43601,31856],{"class":495},[478,43603,31846],{"class":714},[478,43605,43606,43608,43610,43612],{"class":480,"line":3143},[478,43607,32522],{"class":5782},[478,43609,759],{"class":710},[478,43611,1096],{"class":495},[478,43613,720],{"class":714},[478,43615,43616,43618],{"class":480,"line":3157},[478,43617,4656],{"class":710},[478,43619,32535],{"class":714},[478,43621,43622],{"class":480,"line":3165},[478,43623,2966],{"emptyLinePlaceholder":640},[478,43625,43626],{"class":480,"line":3170},[478,43627,32544],{"class":770},[478,43629,43630],{"class":480,"line":3176},[478,43631,32549],{"class":770},[478,43633,43634],{"class":480,"line":3182},[478,43635,2966],{"emptyLinePlaceholder":640},[478,43637,43638],{"class":480,"line":3187},[478,43639,32558],{"class":770},[478,43641,43642,43644,43646],{"class":480,"line":8514},[478,43643,32327],{"class":710},[478,43645,32565],{"class":484},[478,43647,32568],{"class":714},[478,43649,43650,43652,43654,43656,43658,43660,43662,43664,43666],{"class":480,"line":8538},[478,43651,31617],{"class":714},[478,43653,759],{"class":710},[478,43655,30831],{"class":714},[478,43657,31624],{"class":488},[478,43659,2271],{"class":710},[478,43661,31629],{"class":714},[478,43663,2268],{"class":710},[478,43665,32587],{"class":488},[478,43667,720],{"class":714},[478,43669,43670],{"class":480,"line":8543},[478,43671,2966],{"emptyLinePlaceholder":640},[478,43673,43674],{"class":480,"line":8549},[478,43675,2966],{"emptyLinePlaceholder":640},[478,43677,43678],{"class":480,"line":8576},[478,43679,32602],{"class":770},[478,43681,43682],{"class":480,"line":8581},[478,43683,32607],{"class":770},[478,43685,43686],{"class":480,"line":8587},[478,43687,32612],{"class":770},[478,43689,43690,43692,43694,43696,43698,43700,43702],{"class":480,"line":8599},[478,43691,32617],{"class":714},[478,43693,759],{"class":710},[478,43695,32622],{"class":714},[478,43697,32625],{"class":5782},[478,43699,759],{"class":710},[478,43701,32630],{"class":495},[478,43703,720],{"class":714},[478,43705,43706],{"class":480,"line":8611},[478,43707,2966],{"emptyLinePlaceholder":640},[478,43709,43710],{"class":480,"line":8623},[478,43711,32641],{"class":770},[478,43713,43714,43716,43718],{"class":480,"line":10282},[478,43715,32646],{"class":714},[478,43717,759],{"class":710},[478,43719,32651],{"class":714},[478,43721,43722],{"class":480,"line":10307},[478,43723,2966],{"emptyLinePlaceholder":640},[478,43725,43726],{"class":480,"line":10330},[478,43727,32660],{"class":770},[478,43729,43730,43732,43734],{"class":480,"line":10354},[478,43731,31669],{"class":714},[478,43733,759],{"class":710},[478,43735,32669],{"class":714},[478,43737,43738],{"class":480,"line":10359},[478,43739,32674],{"class":770},[478,43741,43742],{"class":480,"line":10364},[478,43743,32679],{"class":770},[478,43745,43746],{"class":480,"line":10369},[478,43747,32684],{"class":770},[478,43749,43750,43752,43754],{"class":480,"line":10378},[478,43751,32689],{"class":714},[478,43753,759],{"class":710},[478,43755,32694],{"class":714},[478,43757,43758],{"class":480,"line":10383},[478,43759,2966],{"emptyLinePlaceholder":640},[478,43761,43762],{"class":480,"line":10389},[478,43763,2966],{"emptyLinePlaceholder":640},[478,43765,43766],{"class":480,"line":10410},[478,43767,32707],{"class":770},[478,43769,43770],{"class":480,"line":10416},[478,43771,32712],{"class":770},[478,43773,43774,43776,43778],{"class":480,"line":10430},[478,43775,32717],{"class":714},[478,43777,759],{"class":710},[478,43779,32722],{"class":495},[478,43781,43782],{"class":480,"line":10436},[478,43783,32727],{"class":770},[478,43785,43786,43788,43790],{"class":480,"line":10463},[478,43787,32732],{"class":714},[478,43789,759],{"class":710},[478,43791,32737],{"class":714},[478,43793,43794],{"class":480,"line":10472},[478,43795,32742],{"class":770},[478,43797,43798,43800,43802],{"class":480,"line":10478},[478,43799,32747],{"class":714},[478,43801,759],{"class":710},[478,43803,32737],{"class":714},[478,43805,43806],{"class":480,"line":10486},[478,43807,32756],{"class":770},[478,43809,43810,43812,43814],{"class":480,"line":10491},[478,43811,32761],{"class":714},[478,43813,759],{"class":710},[478,43815,32737],{"class":714},[478,43817,43818],{"class":480,"line":17169},[478,43819,32770],{"class":770},[478,43821,43822,43824,43826],{"class":480,"line":17175},[478,43823,32775],{"class":714},[478,43825,759],{"class":710},[478,43827,32737],{"class":714},[478,43829,43830],{"class":480,"line":17198},[478,43831,2966],{"emptyLinePlaceholder":640},[478,43833,43834],{"class":480,"line":17204},[478,43835,32788],{"class":770},[478,43837,43838,43840,43842],{"class":480,"line":17227},[478,43839,32793],{"class":714},[478,43841,759],{"class":710},[478,43843,32798],{"class":714},[478,43845,43846],{"class":480,"line":17241},[478,43847,2966],{"emptyLinePlaceholder":640},[478,43849,43850],{"class":480,"line":17261},[478,43851,2966],{"emptyLinePlaceholder":640},[478,43853,43854],{"class":480,"line":17267},[478,43855,32811],{"class":770},[478,43857,43858,43860,43862,43864,43866],{"class":480,"line":17278},[478,43859,3767],{"class":710},[478,43861,32818],{"class":714},[478,43863,26423],{"class":710},[478,43865,32823],{"class":495},[478,43867,32826],{"class":714},[478,43869,43870,43872,43874,43876,43878,43880,43882,43884,43886,43888,43890],{"class":480,"line":17301},[478,43871,32831],{"class":495},[478,43873,263],{"class":714},[478,43875,32836],{"class":488},[478,43877,32839],{"class":495},[478,43879,1284],{"class":488},[478,43881,32839],{"class":495},[478,43883,952],{"class":488},[478,43885,32848],{"class":714},[478,43887,1232],{"class":710},[478,43889,193],{"class":495},[478,43891,30877],{"class":714},[478,43893,43894,43896,43898,43900,43902,43904],{"class":480,"line":17323},[478,43895,32831],{"class":495},[478,43897,263],{"class":714},[478,43899,32863],{"class":488},[478,43901,1155],{"class":710},[478,43903,1146],{"class":495},[478,43905,720],{"class":714},[478,43907,43908],{"class":480,"line":17328},[478,43909,2966],{"emptyLinePlaceholder":640},[478,43911,43912],{"class":480,"line":17334},[478,43913,32878],{"class":770},[478,43915,43916],{"class":480,"line":17348},[478,43917,32883],{"class":770},[478,43919,43920,43922,43924],{"class":480,"line":17361},[478,43921,32888],{"class":714},[478,43923,759],{"class":710},[478,43925,32722],{"class":495},[478,43927,43928],{"class":480,"line":17366},[478,43929,32897],{"class":770},[478,43931,43932,43934,43936],{"class":480,"line":17380},[478,43933,32902],{"class":714},[478,43935,759],{"class":710},[478,43937,3651],{"class":495},[478,43939,43940],{"class":480,"line":17385},[478,43941,32911],{"class":770},[478,43943,43944,43946,43948],{"class":480,"line":17391},[478,43945,32916],{"class":714},[478,43947,759],{"class":710},[478,43949,32722],{"class":495},[478,43951,43952],{"class":480,"line":17396},[478,43953,32925],{"class":770},[478,43955,43956,43958,43960],{"class":480,"line":17410},[478,43957,32930],{"class":714},[478,43959,759],{"class":710},[478,43961,3651],{"class":495},[478,43963,43964],{"class":480,"line":17415},[478,43965,32939],{"class":770},[478,43967,43968,43970,43972],{"class":480,"line":17420},[478,43969,32944],{"class":714},[478,43971,759],{"class":710},[478,43973,3651],{"class":495},[478,43975,43976],{"class":480,"line":17434},[478,43977,32953],{"class":770},[478,43979,43980,43982,43984],{"class":480,"line":17446},[478,43981,32958],{"class":714},[478,43983,759],{"class":710},[478,43985,3651],{"class":495},[478,43987,43988],{"class":480,"line":17451},[478,43989,32967],{"class":770},[478,43991,43992,43994,43996,43998,44000],{"class":480,"line":17464},[478,43993,3969],{"class":710},[478,43995,31981],{"class":714},[478,43997,26423],{"class":710},[478,43999,31986],{"class":495},[478,44001,32980],{"class":714},[478,44003,44004],{"class":480,"line":17469},[478,44005,32985],{"class":770},[478,44007,44008,44010,44012],{"class":480,"line":17474},[478,44009,32990],{"class":714},[478,44011,759],{"class":710},[478,44013,32995],{"class":714},[478,44015,44016],{"class":480,"line":17479},[478,44017,33000],{"class":770},[478,44019,44020,44022,44024],{"class":480,"line":17492},[478,44021,33005],{"class":714},[478,44023,759],{"class":710},[478,44025,33010],{"class":714},[478,44027,44028],{"class":480,"line":17497},[478,44029,33016],{"class":770},[478,44031,44032],{"class":480,"line":33013},[478,44033,33022],{"class":714},[478,44035,44036],{"class":480,"line":33019},[478,44037,33028],{"class":770},[478,44039,44040],{"class":480,"line":33025},[478,44041,33034],{"class":770},[478,44043,44044,44046,44048],{"class":480,"line":33031},[478,44045,33040],{"class":714},[478,44047,759],{"class":710},[478,44049,33045],{"class":714},[478,44051,44052],{"class":480,"line":33037},[478,44053,33051],{"class":770},[478,44055,44056,44058,44060,44062,44064,44066,44068],{"class":480,"line":33048},[478,44057,33057],{"class":714},[478,44059,759],{"class":710},[478,44061,33062],{"class":714},[478,44063,33065],{"class":5782},[478,44065,759],{"class":710},[478,44067,193],{"class":495},[478,44069,720],{"class":714},[478,44071,44072],{"class":480,"line":33054},[478,44073,33077],{"class":770},[478,44075,44076,44078,44080],{"class":480,"line":33074},[478,44077,33083],{"class":714},[478,44079,759],{"class":710},[478,44081,33088],{"class":714},[478,44083,44084],{"class":480,"line":33080},[478,44085,33094],{"class":770},[478,44087,44088],{"class":480,"line":33091},[478,44089,33100],{"class":714},[478,44091,44092],{"class":480,"line":33097},[478,44093,33106],{"class":770},[478,44095,44096],{"class":480,"line":33103},[478,44097,33112],{"class":714},[478,44099,44100],{"class":480,"line":33109},[478,44101,33118],{"class":770},[478,44103,44104],{"class":480,"line":33115},[478,44105,33124],{"class":714},[478,44107,44108],{"class":480,"line":33121},[478,44109,33130],{"class":770},[478,44111,44112,44114,44116,44118,44120,44122,44124],{"class":480,"line":33127},[478,44113,33136],{"class":714},[478,44115,10043],{"class":710},[478,44117,33141],{"class":714},[478,44119,1155],{"class":710},[478,44121,33146],{"class":714},[478,44123,895],{"class":495},[478,44125,720],{"class":714},[478,44127,44128],{"class":480,"line":33133},[478,44129,33156],{"class":770},[478,44131,44132,44134,44136,44138,44140],{"class":480,"line":33153},[478,44133,33162],{"class":714},[478,44135,10043],{"class":710},[478,44137,33167],{"class":714},[478,44139,3515],{"class":710},[478,44141,33172],{"class":714},[478,44143,44144],{"class":480,"line":33159},[478,44145,33178],{"class":770},[478,44147,44148,44150,44152,44154,44156],{"class":480,"line":33175},[478,44149,33184],{"class":714},[478,44151,10043],{"class":710},[478,44153,33146],{"class":714},[478,44155,895],{"class":495},[478,44157,720],{"class":714},[478,44159,44160],{"class":480,"line":33181},[478,44161,33198],{"class":770},[478,44163,44164,44166,44168,44170,44172],{"class":480,"line":33195},[478,44165,3969],{"class":710},[478,44167,33206],{"class":714},[478,44169,26423],{"class":710},[478,44171,31986],{"class":495},[478,44173,33213],{"class":714},[478,44175,44176],{"class":480,"line":33201},[478,44177,33219],{"class":770},[478,44179,44180,44182,44184],{"class":480,"line":33216},[478,44181,32990],{"class":714},[478,44183,759],{"class":710},[478,44185,32995],{"class":714},[478,44187,44188],{"class":480,"line":33222},[478,44189,33234],{"class":770},[478,44191,44192,44194,44196],{"class":480,"line":33231},[478,44193,33005],{"class":714},[478,44195,759],{"class":710},[478,44197,33010],{"class":714},[478,44199,44200],{"class":480,"line":33237},[478,44201,33249],{"class":770},[478,44203,44204],{"class":480,"line":33246},[478,44205,33255],{"class":714},[478,44207,44208],{"class":480,"line":33252},[478,44209,36736],{"class":770},[478,44211,44212,44214],{"class":480,"line":33258},[478,44213,33261],{"class":710},[478,44215,33264],{"class":714},[478,44217,44218],{"class":480,"line":33267},[478,44219,33270],{"class":770},[478,44221,44222,44224,44226],{"class":480,"line":33273},[478,44223,36751],{"class":714},[478,44225,759],{"class":710},[478,44227,33045],{"class":714},[478,44229,44230],{"class":480,"line":33284},[478,44231,33287],{"class":770},[478,44233,44234,44236,44238,44240,44242,44244,44246],{"class":480,"line":33290},[478,44235,36764],{"class":714},[478,44237,759],{"class":710},[478,44239,33062],{"class":714},[478,44241,33065],{"class":5782},[478,44243,759],{"class":710},[478,44245,193],{"class":495},[478,44247,720],{"class":714},[478,44249,44250],{"class":480,"line":33309},[478,44251,33312],{"class":770},[478,44253,44254,44256,44258],{"class":480,"line":33315},[478,44255,36785],{"class":714},[478,44257,759],{"class":710},[478,44259,33088],{"class":714},[478,44261,44262],{"class":480,"line":33326},[478,44263,33329],{"class":770},[478,44265,44266,44268,44270,44272,44274,44276,44278],{"class":480,"line":33332},[478,44267,36798],{"class":714},[478,44269,10043],{"class":710},[478,44271,36803],{"class":714},[478,44273,1155],{"class":710},[478,44275,33146],{"class":714},[478,44277,895],{"class":495},[478,44279,720],{"class":714},[478,44281,44282,44284,44286,44288,44290],{"class":480,"line":33352},[478,44283,36816],{"class":714},[478,44285,10043],{"class":710},[478,44287,33167],{"class":714},[478,44289,3515],{"class":710},[478,44291,33172],{"class":714},[478,44293,44294],{"class":480,"line":33368},[478,44295,36829],{"class":770},[478,44297,44298,44300,44302,44304,44306],{"class":480,"line":33374},[478,44299,36834],{"class":714},[478,44301,10043],{"class":710},[478,44303,33146],{"class":714},[478,44305,895],{"class":495},[478,44307,720],{"class":714},[478,44309,44310],{"class":480,"line":33388},[478,44311,33391],{"class":770},[478,44313,44314],{"class":480,"line":33394},[478,44315,33397],{"class":770},[478,44317,44318,44320,44322],{"class":480,"line":33400},[478,44319,33403],{"class":714},[478,44321,1284],{"class":710},[478,44323,33408],{"class":714},[478,44325,44326],{"class":480,"line":33411},[478,44327,33414],{"class":770},[478,44329,44330],{"class":480,"line":33417},[478,44331,33420],{"class":770},[478,44333,44334,44336,44338],{"class":480,"line":33423},[478,44335,33426],{"class":714},[478,44337,1284],{"class":710},[478,44339,33408],{"class":714},[478,44341,44342],{"class":480,"line":33433},[478,44343,33436],{"class":770},[478,44345,44346,44348,44350],{"class":480,"line":33439},[478,44347,33442],{"class":714},[478,44349,1284],{"class":710},[478,44351,33447],{"class":714},[478,44353,44354],{"class":480,"line":33450},[478,44355,33453],{"class":770},[478,44357,44358,44360,44362],{"class":480,"line":33456},[478,44359,33459],{"class":714},[478,44361,1284],{"class":710},[478,44363,33447],{"class":714},[478,44365,44366],{"class":480,"line":33466},[478,44367,2966],{"emptyLinePlaceholder":640},[478,44369,44370],{"class":480,"line":33471},[478,44371,33474],{"class":770},[478,44373,44374,44376,44378,44380,44382,44384,44386,44388,44390,44392,44394,44396,44398,44400,44402,44404,44406,44408,44410,44412],{"class":480,"line":33477},[478,44375,32831],{"class":495},[478,44377,263],{"class":714},[478,44379,4158],{"class":488},[478,44381,32839],{"class":495},[478,44383,33488],{"class":488},[478,44385,1591],{"class":495},[478,44387,33493],{"class":710},[478,44389,1641],{"class":495},[478,44391,33498],{"class":488},[478,44393,1591],{"class":495},[478,44395,33493],{"class":710},[478,44397,1641],{"class":495},[478,44399,4158],{"class":488},[478,44401,33509],{"class":714},[478,44403,1232],{"class":710},[478,44405,193],{"class":495},[478,44407,33516],{"class":714},[478,44409,1232],{"class":710},[478,44411,193],{"class":495},[478,44413,33523],{"class":714},[478,44415,44416,44418,44420,44422,44424,44426,44428,44430,44432,44434,44436,44438,44440,44442,44444,44446,44448,44450,44452,44454],{"class":480,"line":33526},[478,44417,32831],{"class":495},[478,44419,263],{"class":714},[478,44421,4158],{"class":488},[478,44423,32839],{"class":495},[478,44425,33537],{"class":488},[478,44427,1591],{"class":495},[478,44429,33493],{"class":710},[478,44431,1641],{"class":495},[478,44433,33546],{"class":488},[478,44435,1591],{"class":495},[478,44437,33493],{"class":710},[478,44439,1641],{"class":495},[478,44441,4158],{"class":488},[478,44443,33557],{"class":714},[478,44445,1232],{"class":710},[478,44447,193],{"class":495},[478,44449,33564],{"class":714},[478,44451,1232],{"class":710},[478,44453,193],{"class":495},[478,44455,33523],{"class":714},[478,44457,44458],{"class":480,"line":33573},[478,44459,2966],{"emptyLinePlaceholder":640},[478,44461,44462],{"class":480,"line":33578},[478,44463,33581],{"class":770},[478,44465,44466,44468,44470,44472,44474,44476,44478],{"class":480,"line":33584},[478,44467,3063],{"class":710},[478,44469,33589],{"class":714},[478,44471,1232],{"class":710},[478,44473,193],{"class":495},[478,44475,1635],{"class":714},[478,44477,1655],{"class":710},[478,44479,33600],{"class":714},[478,44481,44482],{"class":480,"line":33603},[478,44483,33606],{"class":770},[478,44485,44486,44488,44490,44492,44494,44496,44498],{"class":480,"line":33609},[478,44487,33612],{"class":714},[478,44489,753],{"class":495},[478,44491,759],{"class":710},[478,44493,33619],{"class":714},[478,44495,1232],{"class":710},[478,44497,193],{"class":495},[478,44499,33626],{"class":714},[478,44501,44502],{"class":480,"line":33629},[478,44503,33632],{"class":770},[478,44505,44506],{"class":480,"line":33635},[478,44507,33638],{"class":770},[478,44509,44510,44512,44514],{"class":480,"line":33641},[478,44511,33644],{"class":714},[478,44513,759],{"class":710},[478,44515,32694],{"class":714},[478,44517,44518],{"class":480,"line":33651},[478,44519,2966],{"emptyLinePlaceholder":640},[478,44521,44522],{"class":480,"line":33656},[478,44523,33659],{"class":770},[478,44525,44526,44528,44530,44532,44534],{"class":480,"line":33662},[478,44527,33665],{"class":714},[478,44529,759],{"class":710},[478,44531,33670],{"class":714},[478,44533,1232],{"class":710},[478,44535,33675],{"class":714},[478,44537,44538,44540,44542,44544,44546,44548,44550,44552,44554,44556,44558,44560,44562,44564,44566,44568,44570,44572],{"class":480,"line":33678},[478,44539,32831],{"class":495},[478,44541,263],{"class":714},[478,44543,33685],{"class":488},[478,44545,1591],{"class":495},[478,44547,33690],{"class":710},[478,44549,1641],{"class":495},[478,44551,1244],{"class":488},[478,44553,1591],{"class":495},[478,44555,33690],{"class":710},[478,44557,1641],{"class":495},[478,44559,33703],{"class":488},[478,44561,33706],{"class":714},[478,44563,33709],{"class":710},[478,44565,1602],{"class":495},[478,44567,33714],{"class":714},[478,44569,1029],{"class":710},[478,44571,1602],{"class":495},[478,44573,30877],{"class":714},[478,44575,44576],{"class":480,"line":33723},[478,44577,37113],{"class":770},[478,44579,44580],{"class":480,"line":33729},[478,44581,37118],{"class":770},[478,44583,44584,44586,44588],{"class":480,"line":33735},[478,44585,37123],{"class":714},[478,44587,33747],{"class":488},[478,44589,720],{"class":714},[478,44591,44592],{"class":480,"line":33741},[478,44593,33767],{"class":770},[478,44595,44596,44598,44600,44602,44604,44606],{"class":480,"line":33752},[478,44597,33773],{"class":714},[478,44599,759],{"class":710},[478,44601,33778],{"class":714},[478,44603,33781],{"class":5782},[478,44605,759],{"class":710},[478,44607,2114],{"class":714},[478,44609,44610,44612,44614,44616],{"class":480,"line":33758},[478,44611,33791],{"class":488},[478,44613,1554],{"class":714},[478,44615,33796],{"class":495},[478,44617,33799],{"class":714},[478,44619,44620,44622],{"class":480,"line":33764},[478,44621,33805],{"class":488},[478,44623,33808],{"class":714},[478,44625,44626,44628],{"class":480,"line":33770},[478,44627,33814],{"class":488},[478,44629,33817],{"class":714},[478,44631,44632,44634],{"class":480,"line":33788},[478,44633,33823],{"class":488},[478,44635,33826],{"class":714},[478,44637,44638,44640],{"class":480,"line":33802},[478,44639,33832],{"class":488},[478,44641,33835],{"class":714},[478,44643,44644],{"class":480,"line":33811},[478,44645,33841],{"class":714},[478,44647,44648],{"class":480,"line":33820},[478,44649,33847],{"class":770},[478,44651,44652,44654],{"class":480,"line":33829},[478,44653,4656],{"class":710},[478,44655,33855],{"class":714},[478,44657,44658],{"class":480,"line":33838},[478,44659,2966],{"emptyLinePlaceholder":640},[478,44661,44662],{"class":480,"line":33844},[478,44663,33866],{"class":770},[478,44665,44666,44668,44670],{"class":480,"line":33850},[478,44667,32327],{"class":710},[478,44669,33874],{"class":484},[478,44671,33877],{"class":714},[478,44673,44674],{"class":480,"line":33858},[478,44675,33883],{"class":770},[478,44677,44678,44680,44682,44684,44686,44688,44690,44692],{"class":480,"line":33863},[478,44679,33889],{"class":714},[478,44681,32073],{"class":5782},[478,44683,759],{"class":710},[478,44685,263],{"class":714},[478,44687,1198],{"class":495},[478,44689,1079],{"class":714},[478,44691,994],{"class":495},[478,44693,30877],{"class":714},[478,44695,44696],{"class":480,"line":33869},[478,44697,33909],{"class":770},[478,44699,44700],{"class":480,"line":33880},[478,44701,33915],{"class":770},[478,44703,44704],{"class":480,"line":33886},[478,44705,33921],{"class":770},[478,44707,44708,44710,44712,44714,44716,44718,44720],{"class":480,"line":33906},[478,44709,32107],{"class":714},[478,44711,193],{"class":495},[478,44713,1079],{"class":714},[478,44715,789],{"class":495},[478,44717,1079],{"class":714},[478,44719,193],{"class":495},[478,44721,720],{"class":714},[478,44723,44724],{"class":480,"line":33912},[478,44725,33944],{"class":770},[478,44727,44728],{"class":480,"line":33918},[478,44729,33950],{"class":770},[478,44731,44732],{"class":480,"line":33924},[478,44733,33956],{"class":770},[478,44735,44736],{"class":480,"line":33941},[478,44737,33962],{"class":770},[478,44739,44740],{"class":480,"line":33947},[478,44741,33968],{"class":770},[478,44743,44744,44746,44748,44750,44752,44754,44756,44758,44760],{"class":480,"line":33953},[478,44745,33974],{"class":714},[478,44747,33977],{"class":488},[478,44749,33980],{"class":714},[478,44751,33983],{"class":488},[478,44753,1079],{"class":714},[478,44755,33988],{"class":5782},[478,44757,759],{"class":710},[478,44759,33993],{"class":488},[478,44761,720],{"class":714},[478,44763,44764,44766,44768,44770,44772,44774,44776,44778,44780],{"class":480,"line":33959},[478,44765,33974],{"class":714},[478,44767,33977],{"class":488},[478,44769,34005],{"class":714},[478,44771,34008],{"class":488},[478,44773,1079],{"class":714},[478,44775,33988],{"class":5782},[478,44777,759],{"class":710},[478,44779,34017],{"class":488},[478,44781,720],{"class":714},[478,44783,44784],{"class":480,"line":33965},[478,44785,34025],{"class":770},[478,44787,44788],{"class":480,"line":33971},[478,44789,34031],{"class":714},[478,44791,44792],{"class":480,"line":33998},[478,44793,34037],{"class":770},[478,44795,44796,44798,44800],{"class":480,"line":34022},[478,44797,34043],{"class":714},[478,44799,34046],{"class":488},[478,44801,720],{"class":714},[478,44803,44804,44806,44808],{"class":480,"line":34028},[478,44805,34054],{"class":714},[478,44807,34057],{"class":488},[478,44809,720],{"class":714},[478,44811,44812],{"class":480,"line":34034},[478,44813,34065],{"class":770},[478,44815,44816,44818,44820,44822,44824,44826,44828],{"class":480,"line":34040},[478,44817,32107],{"class":714},[478,44819,193],{"class":495},[478,44821,1079],{"class":714},[478,44823,789],{"class":495},[478,44825,1079],{"class":714},[478,44827,789],{"class":495},[478,44829,720],{"class":714},[478,44831,44832,44834,44836,44838,44840,44842,44844,44846,44848],{"class":480,"line":34051},[478,44833,33974],{"class":714},[478,44835,33977],{"class":488},[478,44837,34092],{"class":714},[478,44839,33983],{"class":488},[478,44841,1079],{"class":714},[478,44843,33988],{"class":5782},[478,44845,759],{"class":710},[478,44847,34103],{"class":488},[478,44849,720],{"class":714},[478,44851,44852,44854,44856,44858,44860,44862,44864,44866,44868],{"class":480,"line":34062},[478,44853,33974],{"class":714},[478,44855,33977],{"class":488},[478,44857,34115],{"class":714},[478,44859,34008],{"class":488},[478,44861,1079],{"class":714},[478,44863,33988],{"class":5782},[478,44865,759],{"class":710},[478,44867,34126],{"class":488},[478,44869,720],{"class":714},[478,44871,44872],{"class":480,"line":34068},[478,44873,34134],{"class":770},[478,44875,44876],{"class":480,"line":34085},[478,44877,34031],{"class":714},[478,44879,44880,44882,44884],{"class":480,"line":34108},[478,44881,34043],{"class":714},[478,44883,33977],{"class":488},[478,44885,720],{"class":714},[478,44887,44888,44890,44892],{"class":480,"line":34131},[478,44889,34054],{"class":714},[478,44891,34156],{"class":488},[478,44893,720],{"class":714},[478,44895,44896],{"class":480,"line":34137},[478,44897,34164],{"class":714},[478,44899,44900],{"class":480,"line":34142},[478,44901,2966],{"emptyLinePlaceholder":640},[478,44903,44904],{"class":480,"line":34151},[478,44905,34175],{"class":770},[478,44907,44908,44910,44912,44914,44916],{"class":480,"line":34161},[478,44909,2099],{"class":710},[478,44911,31600],{"class":495},[478,44913,3515],{"class":710},[478,44915,31605],{"class":488},[478,44917,4305],{"class":714},[478,44919,44920],{"class":480,"line":34167},[478,44921,34194],{"class":770},[478,44923,44924,44927,44929],{"class":480,"line":34172},[478,44925,44926],{"class":714},"    GoogLeNet",[478,44928,759],{"class":710},[478,44930,44931],{"class":714},"GoogLeNet(Inception)\n",[478,44933,44934,44936,44938],{"class":480,"line":34178},[478,44935,34211],{"class":714},[478,44937,759],{"class":710},[478,44939,34216],{"class":714},[478,44941,44942,44944,44946,44949,44951,44953,44955],{"class":480,"line":34191},[478,44943,33773],{"class":714},[478,44945,759],{"class":710},[478,44947,44948],{"class":714},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[478,44950,34229],{"class":5782},[478,44952,759],{"class":710},[478,44954,1646],{"class":495},[478,44956,720],{"class":714},[478,44958,44959],{"class":480,"line":34197},[478,44960,34241],{"class":714},[29,44962,44963],{"start":579},[32,44964,40954],{},[469,44966,44968],{"className":30758,"code":44967,"language":30760,"meta":54,"style":54},"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",[475,44969,44970,44976,44986,44996,45000,45010,45021,45025,45029,45033,45041,45057,45067,45083,45093,45107,45111,45121,45131,45141,45147,45151,45155,45163,45167,45183,45191,45195,45199,45207,45215,45219,45223,45227,45231,45237,45241,45251,45259,45267,45271,45275,45279,45287,45291,45307,45311,45315,45319,45331,45335,45347,45351,45355,45367,45371,45381,45385,45389,45401,45405,45413,45417,45421,45429,45433,45441,45445,45449,45453,45457,45461,45477,45485,45489,45493,45541,45547,45551,45561,45569,45577,45581,45585,45589,45593,45601,45605,45621,45625,45633,45641],{"__ignoreMap":54},[478,44971,44972,44974],{"class":480,"line":481},[478,44973,30772],{"class":710},[478,44975,30775],{"class":714},[478,44977,44978,44980,44982,44984],{"class":480,"line":565},[478,44979,30772],{"class":710},[478,44981,31795],{"class":714},[478,44983,31763],{"class":710},[478,44985,31800],{"class":714},[478,44987,44988,44990,44992,44994],{"class":480,"line":579},[478,44989,31117],{"class":710},[478,44991,31778],{"class":714},[478,44993,30772],{"class":710},[478,44995,31783],{"class":714},[478,44997,44998],{"class":480,"line":593},[478,44999,34302],{"class":770},[478,45001,45002,45004,45006,45008],{"class":480,"line":1769},[478,45003,31117],{"class":710},[478,45005,31748],{"class":714},[478,45007,30772],{"class":710},[478,45009,31753],{"class":714},[478,45011,45012,45014,45016,45018],{"class":480,"line":1783},[478,45013,31117],{"class":710},[478,45015,32294],{"class":714},[478,45017,30772],{"class":710},[478,45019,45020],{"class":714}," GoogLeNet,Inception\n",[478,45022,45023],{"class":480,"line":1789},[478,45024,2966],{"emptyLinePlaceholder":640},[478,45026,45027],{"class":480,"line":1880},[478,45028,2966],{"emptyLinePlaceholder":640},[478,45030,45031],{"class":480,"line":1886},[478,45032,34331],{"class":770},[478,45034,45035,45037,45039],{"class":480,"line":1898},[478,45036,32327],{"class":710},[478,45038,34338],{"class":484},[478,45040,32333],{"class":714},[478,45042,45043,45045,45047,45049,45051,45053,45055],{"class":480,"line":2180},[478,45044,34345],{"class":714},[478,45046,759],{"class":710},[478,45048,31835],{"class":714},[478,45050,31838],{"class":5782},[478,45052,759],{"class":710},[478,45054,31843],{"class":488},[478,45056,31846],{"class":714},[478,45058,45059,45061,45063,45065],{"class":480,"line":2185},[478,45060,34362],{"class":5782},[478,45062,759],{"class":710},[478,45064,34367],{"class":495},[478,45066,31846],{"class":714},[478,45068,45069,45071,45073,45075,45077,45079,45081],{"class":480,"line":2191},[478,45070,34374],{"class":5782},[478,45072,759],{"class":710},[478,45074,31873],{"class":714},[478,45076,31876],{"class":5782},[478,45078,759],{"class":710},[478,45080,35829],{"class":495},[478,45082,31884],{"class":714},[478,45084,45085,45087,45089,45091],{"class":480,"line":2196},[478,45086,34391],{"class":5782},[478,45088,759],{"class":710},[478,45090,31856],{"class":495},[478,45092,720],{"class":714},[478,45094,45095,45097,45099,45101,45103,45105],{"class":480,"line":2210},[478,45096,34402],{"class":714},[478,45098,759],{"class":710},[478,45100,31914],{"class":714},[478,45102,31917],{"class":5782},[478,45104,759],{"class":710},[478,45106,34413],{"class":714},[478,45108,45109],{"class":480,"line":2215},[478,45110,34418],{"class":770},[478,45112,45113,45115,45117,45119],{"class":480,"line":2221},[478,45114,34423],{"class":5782},[478,45116,759],{"class":710},[478,45118,193],{"class":495},[478,45120,31846],{"class":714},[478,45122,45123,45125,45127,45129],{"class":480,"line":2241},[478,45124,34434],{"class":5782},[478,45126,759],{"class":710},[478,45128,31856],{"class":495},[478,45130,31846],{"class":714},[478,45132,45133,45135,45137,45139],{"class":480,"line":2246},[478,45134,34445],{"class":5782},[478,45136,759],{"class":710},[478,45138,895],{"class":495},[478,45140,720],{"class":714},[478,45142,45143,45145],{"class":480,"line":2260},[478,45144,4656],{"class":710},[478,45146,34458],{"class":714},[478,45148,45149],{"class":480,"line":2265},[478,45150,2966],{"emptyLinePlaceholder":640},[478,45152,45153],{"class":480,"line":2294},[478,45154,34467],{"class":770},[478,45156,45157,45159,45161],{"class":480,"line":2299},[478,45158,32327],{"class":710},[478,45160,34474],{"class":484},[478,45162,34477],{"class":714},[478,45164,45165],{"class":480,"line":2316},[478,45166,34482],{"class":770},[478,45168,45169,45171,45173,45175,45177,45179,45181],{"class":480,"line":2321},[478,45170,31617],{"class":714},[478,45172,759],{"class":710},[478,45174,31624],{"class":488},[478,45176,2271],{"class":710},[478,45178,31629],{"class":714},[478,45180,2268],{"class":710},[478,45182,34499],{"class":488},[478,45184,45185,45187,45189],{"class":480,"line":2326},[478,45186,31669],{"class":714},[478,45188,759],{"class":710},[478,45190,32669],{"class":714},[478,45192,45193],{"class":480,"line":2331},[478,45194,2966],{"emptyLinePlaceholder":640},[478,45196,45197],{"class":480,"line":2345},[478,45198,34516],{"class":770},[478,45200,45201,45203,45205],{"class":480,"line":2350},[478,45202,34521],{"class":714},[478,45204,759],{"class":710},[478,45206,32722],{"class":495},[478,45208,45209,45211,45213],{"class":480,"line":3143},[478,45210,34530],{"class":714},[478,45212,759],{"class":710},[478,45214,3651],{"class":495},[478,45216,45217],{"class":480,"line":3157},[478,45218,2966],{"emptyLinePlaceholder":640},[478,45220,45221],{"class":480,"line":3165},[478,45222,34543],{"class":770},[478,45224,45225],{"class":480,"line":3170},[478,45226,34548],{"class":770},[478,45228,45229],{"class":480,"line":3176},[478,45230,34553],{"class":770},[478,45232,45233,45235],{"class":480,"line":3182},[478,45234,34558],{"class":710},[478,45236,33264],{"class":714},[478,45238,45239],{"class":480,"line":3187},[478,45240,34565],{"class":770},[478,45242,45243,45245,45247,45249],{"class":480,"line":8514},[478,45244,3969],{"class":710},[478,45246,34572],{"class":714},[478,45248,26423],{"class":710},[478,45250,34577],{"class":714},[478,45252,45253,45255,45257],{"class":480,"line":8538},[478,45254,34582],{"class":714},[478,45256,759],{"class":710},[478,45258,34587],{"class":714},[478,45260,45261,45263,45265],{"class":480,"line":8543},[478,45262,34592],{"class":714},[478,45264,759],{"class":710},[478,45266,34597],{"class":714},[478,45268,45269],{"class":480,"line":8549},[478,45270,34602],{"class":770},[478,45272,45273],{"class":480,"line":8576},[478,45274,33255],{"class":714},[478,45276,45277],{"class":480,"line":8581},[478,45278,34611],{"class":770},[478,45280,45281,45283,45285],{"class":480,"line":8587},[478,45282,33040],{"class":714},[478,45284,759],{"class":710},[478,45286,34620],{"class":714},[478,45288,45289],{"class":480,"line":8599},[478,45290,34625],{"class":770},[478,45292,45293,45295,45297,45299,45301,45303,45305],{"class":480,"line":8611},[478,45294,33057],{"class":714},[478,45296,759],{"class":710},[478,45298,33062],{"class":714},[478,45300,33065],{"class":5782},[478,45302,759],{"class":710},[478,45304,193],{"class":495},[478,45306,720],{"class":714},[478,45308,45309],{"class":480,"line":8623},[478,45310,34646],{"class":770},[478,45312,45313],{"class":480,"line":10282},[478,45314,34651],{"class":770},[478,45316,45317],{"class":480,"line":10307},[478,45318,34656],{"class":770},[478,45320,45321,45323,45325,45327,45329],{"class":480,"line":10330},[478,45322,34661],{"class":714},[478,45324,10043],{"class":710},[478,45326,33167],{"class":714},[478,45328,3515],{"class":710},[478,45330,34670],{"class":714},[478,45332,45333],{"class":480,"line":10354},[478,45334,34675],{"class":770},[478,45336,45337,45339,45341,45343,45345],{"class":480,"line":10359},[478,45338,34680],{"class":714},[478,45340,10043],{"class":710},[478,45342,34685],{"class":714},[478,45344,895],{"class":495},[478,45346,720],{"class":714},[478,45348,45349],{"class":480,"line":10364},[478,45350,2966],{"emptyLinePlaceholder":640},[478,45352,45353],{"class":480,"line":10369},[478,45354,34698],{"class":770},[478,45356,45357,45359,45361,45363,45365],{"class":480,"line":10378},[478,45358,34703],{"class":714},[478,45360,759],{"class":710},[478,45362,34708],{"class":714},[478,45364,1284],{"class":710},[478,45366,34713],{"class":714},[478,45368,45369],{"class":480,"line":10383},[478,45370,34718],{"class":770},[478,45372,45373,45375,45377,45379],{"class":480,"line":10389},[478,45374,32831],{"class":495},[478,45376,263],{"class":714},[478,45378,34727],{"class":488},[478,45380,34730],{"class":714},[478,45382,45383],{"class":480,"line":10410},[478,45384,2966],{"emptyLinePlaceholder":640},[478,45386,45387],{"class":480,"line":10416},[478,45388,34739],{"class":770},[478,45390,45391,45393,45395,45397,45399],{"class":480,"line":10430},[478,45392,2099],{"class":710},[478,45394,31600],{"class":495},[478,45396,3515],{"class":710},[478,45398,31605],{"class":488},[478,45400,4305],{"class":714},[478,45402,45403],{"class":480,"line":10436},[478,45404,34756],{"class":770},[478,45406,45407,45409,45411],{"class":480,"line":10463},[478,45408,31669],{"class":714},[478,45410,759],{"class":710},[478,45412,44931],{"class":714},[478,45414,45415],{"class":480,"line":10472},[478,45416,34769],{"class":770},[478,45418,45419],{"class":480,"line":10478},[478,45420,34774],{"class":770},[478,45422,45423,45425,45427],{"class":480,"line":10486},[478,45424,34779],{"class":714},[478,45426,34782],{"class":488},[478,45428,30877],{"class":714},[478,45430,45431],{"class":480,"line":10491},[478,45432,34789],{"class":770},[478,45434,45435,45437,45439],{"class":480,"line":17169},[478,45436,34402],{"class":714},[478,45438,759],{"class":710},[478,45440,34798],{"class":714},[478,45442,45443],{"class":480,"line":17175},[478,45444,34803],{"class":770},[478,45446,45447],{"class":480,"line":17198},[478,45448,34808],{"class":714},[478,45450,45451],{"class":480,"line":17204},[478,45452,2966],{"emptyLinePlaceholder":640},[478,45454,45455],{"class":480,"line":17227},[478,45456,34817],{"class":770},[478,45458,45459],{"class":480,"line":17241},[478,45460,34822],{"class":770},[478,45462,45463,45465,45467,45469,45471,45473,45475],{"class":480,"line":17261},[478,45464,31617],{"class":714},[478,45466,759],{"class":710},[478,45468,31624],{"class":488},[478,45470,2271],{"class":710},[478,45472,31629],{"class":714},[478,45474,2268],{"class":710},[478,45476,34499],{"class":488},[478,45478,45479,45481,45483],{"class":480,"line":17267},[478,45480,31669],{"class":714},[478,45482,759],{"class":710},[478,45484,32669],{"class":714},[478,45486,45487],{"class":480,"line":17278},[478,45488,34851],{"class":770},[478,45490,45491],{"class":480,"line":17301},[478,45492,34856],{"class":770},[478,45494,45495,45497,45499,45501,45503,45505,45507,45509,45511,45513,45515,45517,45519,45521,45523,45525,45527,45529,45531,45533,45535,45537,45539],{"class":480,"line":17323},[478,45496,34861],{"class":714},[478,45498,759],{"class":710},[478,45500,1585],{"class":714},[478,45502,34868],{"class":488},[478,45504,1079],{"class":714},[478,45506,34873],{"class":488},[478,45508,1079],{"class":714},[478,45510,34878],{"class":488},[478,45512,1079],{"class":714},[478,45514,34883],{"class":488},[478,45516,1079],{"class":714},[478,45518,34888],{"class":488},[478,45520,1079],{"class":714},[478,45522,34893],{"class":488},[478,45524,1079],{"class":714},[478,45526,34898],{"class":488},[478,45528,1079],{"class":714},[478,45530,34903],{"class":488},[478,45532,1079],{"class":714},[478,45534,34908],{"class":488},[478,45536,1079],{"class":714},[478,45538,34913],{"class":488},[478,45540,33626],{"class":714},[478,45542,45543,45545],{"class":480,"line":17328},[478,45544,34558],{"class":710},[478,45546,33264],{"class":714},[478,45548,45549],{"class":480,"line":17334},[478,45550,34926],{"class":770},[478,45552,45553,45555,45557,45559],{"class":480,"line":17348},[478,45554,3969],{"class":710},[478,45556,34933],{"class":714},[478,45558,26423],{"class":710},[478,45560,34577],{"class":714},[478,45562,45563,45565,45567],{"class":480,"line":17361},[478,45564,32990],{"class":714},[478,45566,759],{"class":710},[478,45568,32995],{"class":714},[478,45570,45571,45573,45575],{"class":480,"line":17366},[478,45572,33005],{"class":714},[478,45574,759],{"class":710},[478,45576,33010],{"class":714},[478,45578,45579],{"class":480,"line":17380},[478,45580,2966],{"emptyLinePlaceholder":640},[478,45582,45583],{"class":480,"line":17385},[478,45584,34962],{"class":770},[478,45586,45587],{"class":480,"line":17391},[478,45588,33255],{"class":714},[478,45590,45591],{"class":480,"line":17396},[478,45592,34971],{"class":770},[478,45594,45595,45597,45599],{"class":480,"line":17410},[478,45596,33040],{"class":714},[478,45598,759],{"class":710},[478,45600,33045],{"class":714},[478,45602,45603],{"class":480,"line":17415},[478,45604,34984],{"class":770},[478,45606,45607,45609,45611,45613,45615,45617,45619],{"class":480,"line":17420},[478,45608,33057],{"class":714},[478,45610,759],{"class":710},[478,45612,33062],{"class":714},[478,45614,33065],{"class":5782},[478,45616,759],{"class":710},[478,45618,193],{"class":495},[478,45620,720],{"class":714},[478,45622,45623],{"class":480,"line":17434},[478,45624,35005],{"class":770},[478,45626,45627,45629,45631],{"class":480,"line":17446},[478,45628,35010],{"class":714},[478,45630,759],{"class":710},[478,45632,35015],{"class":714},[478,45634,45635,45637,45639],{"class":480,"line":17451},[478,45636,35020],{"class":714},[478,45638,759],{"class":710},[478,45640,35025],{"class":714},[478,45642,45643,45645,45647,45649,45651,45653,45655,45657],{"class":480,"line":17464},[478,45644,35030],{"class":495},[478,45646,263],{"class":714},[478,45648,35035],{"class":488},[478,45650,35038],{"class":714},[478,45652,35041],{"class":488},[478,45654,1079],{"class":714},[478,45656,35046],{"class":488},[478,45658,35049],{"class":714},[129,45660,45662],{"id":45661},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45664,45665],{},"猫狗分类任务",[19,45667,45668],{},"划分数据集和验证集",[469,45670,45672],{"className":30758,"code":45671,"language":30760,"meta":54,"style":54},"# 创建脚本，用于划分数据集和验证集\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",[475,45673,45674,45679,45686,45691,45702,45709,45713,45723,45737,45746,45750,45755,45765,45785,45789,45794,45804,45815,45828,45832,45837,45846,45856,45867,45871,45876,45886,45890,45895,45900,45905,45910,45915,45919,45929,45956,45969,45981,46008,46013,46018,46032,46037,46049,46064,46079,46087,46091,46096,46102,46114,46127,46132,46137,46142,46192,46198,46202],{"__ignoreMap":54},[478,45675,45676],{"class":480,"line":481},[478,45677,45678],{"class":770},"# 创建脚本，用于划分数据集和验证集\n",[478,45680,45681,45683],{"class":480,"line":565},[478,45682,30772],{"class":710},[478,45684,45685],{"class":714}," os\n",[478,45687,45688],{"class":480,"line":579},[478,45689,45690],{"class":770},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[478,45692,45693,45695,45698,45700],{"class":480,"line":593},[478,45694,31117],{"class":710},[478,45696,45697],{"class":714}," shutil ",[478,45699,30772],{"class":710},[478,45701,32202],{"class":714},[478,45703,45704,45706],{"class":480,"line":1769},[478,45705,30772],{"class":710},[478,45707,45708],{"class":714}," random\n",[478,45710,45711],{"class":480,"line":1783},[478,45712,2966],{"emptyLinePlaceholder":640},[478,45714,45715,45717,45720],{"class":480,"line":1789},[478,45716,32327],{"class":710},[478,45718,45719],{"class":484}," mkfile",[478,45721,45722],{"class":714},"(file):\n",[478,45724,45725,45727,45729,45732,45735],{"class":480,"line":1880},[478,45726,3667],{"class":710},[478,45728,39310],{"class":710},[478,45730,45731],{"class":714}," os.path.exists(",[478,45733,45734],{"class":5782},"file",[478,45736,31166],{"class":714},[478,45738,45739,45742,45744],{"class":480,"line":1886},[478,45740,45741],{"class":714},"        os.makedirs(",[478,45743,45734],{"class":5782},[478,45745,720],{"class":714},[478,45747,45748],{"class":480,"line":1898},[478,45749,2966],{"emptyLinePlaceholder":640},[478,45751,45752],{"class":480,"line":2180},[478,45753,45754],{"class":770},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[478,45756,45757,45760,45762],{"class":480,"line":2185},[478,45758,45759],{"class":714},"file_path",[478,45761,759],{"class":710},[478,45763,45764],{"class":488},"'data_cat_dog'\n",[478,45766,45767,45770,45772,45775,45777,45780,45782],{"class":480,"line":2191},[478,45768,45769],{"class":714},"flower_class",[478,45771,759],{"class":710},[478,45773,45774],{"class":714},"[cla ",[478,45776,3591],{"class":710},[478,45778,45779],{"class":714}," cla ",[478,45781,26423],{"class":710},[478,45783,45784],{"class":714}," os.listdir(file_path)]\n",[478,45786,45787],{"class":480,"line":2196},[478,45788,2966],{"emptyLinePlaceholder":640},[478,45790,45791],{"class":480,"line":2210},[478,45792,45793],{"class":770},"# 创建训练集train文件夹\n",[478,45795,45796,45799,45802],{"class":480,"line":2215},[478,45797,45798],{"class":714},"mkfile(",[478,45800,45801],{"class":488},"'data\u002Ftrain'",[478,45803,720],{"class":714},[478,45805,45806,45808,45810,45812],{"class":480,"line":2221},[478,45807,3591],{"class":710},[478,45809,45779],{"class":714},[478,45811,26423],{"class":710},[478,45813,45814],{"class":714}," flower_class:\n",[478,45816,45817,45820,45823,45825],{"class":480,"line":2241},[478,45818,45819],{"class":714},"    mkfile(",[478,45821,45822],{"class":488},"'data\u002Ftrain\u002F'",[478,45824,1181],{"class":710},[478,45826,45827],{"class":714},"cla)\n",[478,45829,45830],{"class":480,"line":2246},[478,45831,2966],{"emptyLinePlaceholder":640},[478,45833,45834],{"class":480,"line":2260},[478,45835,45836],{"class":770},"# 创建验证集val文件夹\n",[478,45838,45839,45841,45844],{"class":480,"line":2265},[478,45840,45798],{"class":714},[478,45842,45843],{"class":488},"'data\u002Ftest'",[478,45845,720],{"class":714},[478,45847,45848,45850,45852,45854],{"class":480,"line":2294},[478,45849,3591],{"class":710},[478,45851,45779],{"class":714},[478,45853,26423],{"class":710},[478,45855,45814],{"class":714},[478,45857,45858,45860,45863,45865],{"class":480,"line":2299},[478,45859,45819],{"class":714},[478,45861,45862],{"class":488},"'data\u002Ftest\u002F'",[478,45864,1181],{"class":710},[478,45866,45827],{"class":714},[478,45868,45869],{"class":480,"line":2316},[478,45870,2966],{"emptyLinePlaceholder":640},[478,45872,45873],{"class":480,"line":2321},[478,45874,45875],{"class":770},"# 划分比例，训练集：测试集=9：1\n",[478,45877,45878,45881,45883],{"class":480,"line":2326},[478,45879,45880],{"class":714},"split_rate",[478,45882,759],{"class":710},[478,45884,45885],{"class":495},"0.1\n",[478,45887,45888],{"class":480,"line":2331},[478,45889,2966],{"emptyLinePlaceholder":640},[478,45891,45892],{"class":480,"line":2345},[478,45893,45894],{"class":770},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[478,45896,45897],{"class":480,"line":2350},[478,45898,45899],{"class":770},"# cla_path：当前类别的原始图片路径\n",[478,45901,45902],{"class":480,"line":3143},[478,45903,45904],{"class":770},"# images：当前类别下所有图片的文件名列表\n",[478,45906,45907],{"class":480,"line":3157},[478,45908,45909],{"class":770},"# num：该类别图片总数\n",[478,45911,45912],{"class":480,"line":3165},[478,45913,45914],{"class":770},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[478,45916,45917],{"class":480,"line":3170},[478,45918,2966],{"emptyLinePlaceholder":640},[478,45920,45921,45923,45925,45927],{"class":480,"line":3176},[478,45922,3591],{"class":710},[478,45924,45779],{"class":714},[478,45926,26423],{"class":710},[478,45928,45814],{"class":714},[478,45930,45931,45934,45936,45939,45941,45944,45947,45949,45951,45953],{"class":480,"line":3182},[478,45932,45933],{"class":714},"    cla_path ",[478,45935,759],{"class":710},[478,45937,45938],{"class":714}," file_path ",[478,45940,1181],{"class":710},[478,45942,45943],{"class":488}," '\u002F'",[478,45945,45946],{"class":710}," +",[478,45948,45779],{"class":714},[478,45950,1181],{"class":710},[478,45952,45943],{"class":488},[478,45954,45955],{"class":770},"  # 某一类别的子目录\n",[478,45957,45958,45961,45963,45966],{"class":480,"line":3187},[478,45959,45960],{"class":714},"    images ",[478,45962,759],{"class":710},[478,45964,45965],{"class":714}," os.listdir(cla_path)  ",[478,45967,45968],{"class":770},"# iamges 列表存储了该目录下所有图像的名称\n",[478,45970,45971,45974,45976,45978],{"class":480,"line":8514},[478,45972,45973],{"class":714},"    num ",[478,45975,759],{"class":710},[478,45977,7897],{"class":495},[478,45979,45980],{"class":714},"(images)\n",[478,45982,45983,45986,45988,45991,45993,45995,45997,46000,46002,46005],{"class":480,"line":8538},[478,45984,45985],{"class":714},"    eval_index ",[478,45987,759],{"class":710},[478,45989,45990],{"class":714}," random.sample(images, ",[478,45992,1193],{"class":5782},[478,45994,759],{"class":710},[478,45996,717],{"class":495},[478,45998,45999],{"class":714},"(num ",[478,46001,1155],{"class":710},[478,46003,46004],{"class":714}," split_rate))  ",[478,46006,46007],{"class":770},"# 从images列表中随机抽取 k 个图像名称\n",[478,46009,46010],{"class":480,"line":8543},[478,46011,46012],{"class":770},"    # 遍历该类别下的所有图片\n",[478,46014,46015],{"class":480,"line":8549},[478,46016,46017],{"class":770},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[478,46019,46020,46022,46025,46027,46029],{"class":480,"line":8576},[478,46021,3767],{"class":710},[478,46023,46024],{"class":714}," index, image ",[478,46026,26423],{"class":710},[478,46028,31986],{"class":495},[478,46030,46031],{"class":714},"(images):\n",[478,46033,46034],{"class":480,"line":8581},[478,46035,46036],{"class":770},"        # eval_index 中保存验证集val的图像名称\n",[478,46038,46039,46041,46044,46046],{"class":480,"line":8587},[478,46040,3063],{"class":710},[478,46042,46043],{"class":714}," image ",[478,46045,26423],{"class":710},[478,46047,46048],{"class":714}," eval_index:\n",[478,46050,46051,46054,46056,46059,46061],{"class":480,"line":8599},[478,46052,46053],{"class":714},"            image_path ",[478,46055,759],{"class":710},[478,46057,46058],{"class":714}," cla_path ",[478,46060,1181],{"class":710},[478,46062,46063],{"class":714}," image\n",[478,46065,46066,46069,46071,46074,46076],{"class":480,"line":8611},[478,46067,46068],{"class":714},"            new_path ",[478,46070,759],{"class":710},[478,46072,46073],{"class":488}," 'data\u002Ftest\u002F'",[478,46075,45946],{"class":710},[478,46077,46078],{"class":714}," cla\n",[478,46080,46081,46084],{"class":480,"line":8623},[478,46082,46083],{"class":714},"            copy(image_path, new_path)  ",[478,46085,46086],{"class":770},"# 将选中的图像复制到新路径\n",[478,46088,46089],{"class":480,"line":10282},[478,46090,2966],{"emptyLinePlaceholder":640},[478,46092,46093],{"class":480,"line":10307},[478,46094,46095],{"class":770},"        # 其余的图像保存在训练集train中\n",[478,46097,46098,46100],{"class":480,"line":10330},[478,46099,3100],{"class":710},[478,46101,4305],{"class":714},[478,46103,46104,46106,46108,46110,46112],{"class":480,"line":10354},[478,46105,46053],{"class":714},[478,46107,759],{"class":710},[478,46109,46058],{"class":714},[478,46111,1181],{"class":710},[478,46113,46063],{"class":714},[478,46115,46116,46118,46120,46123,46125],{"class":480,"line":10359},[478,46117,46068],{"class":714},[478,46119,759],{"class":710},[478,46121,46122],{"class":488}," 'data\u002Ftrain\u002F'",[478,46124,45946],{"class":710},[478,46126,46078],{"class":714},[478,46128,46129],{"class":480,"line":10364},[478,46130,46131],{"class":714},"            copy(image_path, new_path)\n",[478,46133,46134],{"class":480,"line":10369},[478,46135,46136],{"class":770},"            # 打印进度条信息\n",[478,46138,46139],{"class":480,"line":10378},[478,46140,46141],{"class":770},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[478,46143,46144,46146,46148,46150,46153,46155,46157,46160,46162,46164,46166,46169,46172,46174,46176,46179,46182,46184,46186,46189],{"class":480,"line":10383},[478,46145,32831],{"class":495},[478,46147,263],{"class":714},[478,46149,952],{"class":488},[478,46151,46152],{"class":495},"\\r",[478,46154,1585],{"class":488},[478,46156,32839],{"class":495},[478,46158,46159],{"class":488},"] processing [",[478,46161,32839],{"class":495},[478,46163,1284],{"class":488},[478,46165,32839],{"class":495},[478,46167,46168],{"class":488},"]\"",[478,46170,46171],{"class":714},".format(cla, index ",[478,46173,1181],{"class":710},[478,46175,25498],{"class":495},[478,46177,46178],{"class":714},", num), ",[478,46180,46181],{"class":5782},"end",[478,46183,759],{"class":710},[478,46185,8218],{"class":488},[478,46187,46188],{"class":714},")  ",[478,46190,46191],{"class":770},"# processing bar\n",[478,46193,46194,46196],{"class":480,"line":10389},[478,46195,31679],{"class":495},[478,46197,2542],{"class":714},[478,46199,46200],{"class":480,"line":10410},[478,46201,2966],{"emptyLinePlaceholder":640},[478,46203,46204,46206,46208,46211],{"class":480,"line":10416},[478,46205,30795],{"class":495},[478,46207,263],{"class":714},[478,46209,46210],{"class":488},"\"processing done!\"",[478,46212,720],{"class":714},[19,46214,46215],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22563,46217,46219],{"id":46218},"_242模型代码","2.4.2.模型代码",[19,46221,46222],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[469,46224,46226],{"className":30758,"code":46225,"language":30760,"meta":54,"style":54},"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",[475,46227,46228,46234,46244,46254,46258,46274,46282,46296,46306,46310,46340,46344,46378,46424,46428,46462,46508,46512,46516,46550,46580,46584,46592,46606,46628,46650,46668,46672,46686,46690,46694,46710,46714,46722,46736,46746,46790,46794,46822,46826,46836,46864,46868,46904,46908,46936,46940,46950,46982,47014,47042,47046,47056,47088,47120,47152,47184,47216,47244,47248,47258,47290,47322,47334,47338,47350,47354,47358,47370,47378,47398,47402,47406,47410,47414,47418,47422,47436,47444,47452,47464,47478,47486,47490,47498,47508,47518,47528,47538,47548,47554,47558,47562,47574,47594,47602],{"__ignoreMap":54},[478,46229,46230,46232],{"class":480,"line":481},[478,46231,30772],{"class":710},[478,46233,30775],{"class":714},[478,46235,46236,46238,46240,46242],{"class":480,"line":565},[478,46237,31117],{"class":710},[478,46239,31120],{"class":714},[478,46241,30772],{"class":710},[478,46243,31125],{"class":714},[478,46245,46246,46248,46250,46252],{"class":480,"line":579},[478,46247,31117],{"class":710},[478,46249,31137],{"class":714},[478,46251,30772],{"class":710},[478,46253,31142],{"class":714},[478,46255,46256],{"class":480,"line":593},[478,46257,2966],{"emptyLinePlaceholder":640},[478,46259,46260,46262,46264,46266,46268,46270,46272],{"class":480,"line":1769},[478,46261,15259],{"class":710},[478,46263,41873],{"class":484},[478,46265,263],{"class":714},[478,46267,31158],{"class":484},[478,46269,1258],{"class":714},[478,46271,31163],{"class":484},[478,46273,31166],{"class":714},[478,46275,46276,46278,46280],{"class":480,"line":1783},[478,46277,31181],{"class":710},[478,46279,31184],{"class":495},[478,46281,41892],{"class":714},[478,46283,46284,46286,46288,46290,46292,46294],{"class":480,"line":1789},[478,46285,31197],{"class":495},[478,46287,41899],{"class":714},[478,46289,31203],{"class":495},[478,46291,31206],{"class":714},[478,46293,31209],{"class":495},[478,46295,2542],{"class":714},[478,46297,46298,46300,46302,46304],{"class":480,"line":1880},[478,46299,31225],{"class":495},[478,46301,35151],{"class":714},[478,46303,759],{"class":710},[478,46305,35156],{"class":714},[478,46307,46308],{"class":480,"line":1886},[478,46309,41922],{"class":770},[478,46311,46312,46314,46316,46318,46320,46322,46324,46326,46328,46330,46332,46334,46336,46338],{"class":480,"line":1898},[478,46313,31225],{"class":495},[478,46315,41929],{"class":714},[478,46317,759],{"class":710},[478,46319,31233],{"class":714},[478,46321,31236],{"class":5782},[478,46323,759],{"class":710},[478,46325,41940],{"class":714},[478,46327,31245],{"class":5782},[478,46329,759],{"class":710},[478,46331,41947],{"class":714},[478,46333,31254],{"class":5782},[478,46335,759],{"class":710},[478,46337,193],{"class":495},[478,46339,720],{"class":714},[478,46341,46342],{"class":480,"line":2180},[478,46343,41960],{"class":770},[478,46345,46346,46348,46350,46352,46354,46356,46358,46360,46362,46364,46366,46368,46370,46372,46374,46376],{"class":480,"line":2185},[478,46347,31225],{"class":495},[478,46349,41967],{"class":714},[478,46351,759],{"class":710},[478,46353,31233],{"class":714},[478,46355,31236],{"class":5782},[478,46357,759],{"class":710},[478,46359,41940],{"class":714},[478,46361,31245],{"class":5782},[478,46363,759],{"class":710},[478,46365,41984],{"class":714},[478,46367,895],{"class":495},[478,46369,41989],{"class":714},[478,46371,31254],{"class":5782},[478,46373,759],{"class":710},[478,46375,193],{"class":495},[478,46377,720],{"class":714},[478,46379,46380,46382,46384,46386,46388,46390,46392,46394,46396,46398,46400,46402,46404,46406,46408,46410,46412,46414,46416,46418,46420,46422],{"class":480,"line":2191},[478,46381,31225],{"class":495},[478,46383,42004],{"class":714},[478,46385,759],{"class":710},[478,46387,31233],{"class":714},[478,46389,31236],{"class":5782},[478,46391,759],{"class":710},[478,46393,41984],{"class":714},[478,46395,895],{"class":495},[478,46397,41989],{"class":714},[478,46399,31245],{"class":5782},[478,46401,759],{"class":710},[478,46403,41984],{"class":714},[478,46405,193],{"class":495},[478,46407,41989],{"class":714},[478,46409,31254],{"class":5782},[478,46411,759],{"class":710},[478,46413,783],{"class":495},[478,46415,1079],{"class":714},[478,46417,31263],{"class":5782},[478,46419,759],{"class":710},[478,46421,193],{"class":495},[478,46423,720],{"class":714},[478,46425,46426],{"class":480,"line":2196},[478,46427,42049],{"class":770},[478,46429,46430,46432,46434,46436,46438,46440,46442,46444,46446,46448,46450,46452,46454,46456,46458,46460],{"class":480,"line":2210},[478,46431,31225],{"class":495},[478,46433,42056],{"class":714},[478,46435,759],{"class":710},[478,46437,31233],{"class":714},[478,46439,31236],{"class":5782},[478,46441,759],{"class":710},[478,46443,41940],{"class":714},[478,46445,31245],{"class":5782},[478,46447,759],{"class":710},[478,46449,42073],{"class":714},[478,46451,895],{"class":495},[478,46453,41989],{"class":714},[478,46455,31254],{"class":5782},[478,46457,759],{"class":710},[478,46459,193],{"class":495},[478,46461,720],{"class":714},[478,46463,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498,46500,46502,46504,46506],{"class":480,"line":2215},[478,46465,31225],{"class":495},[478,46467,42092],{"class":714},[478,46469,759],{"class":710},[478,46471,31233],{"class":714},[478,46473,31236],{"class":5782},[478,46475,759],{"class":710},[478,46477,42073],{"class":714},[478,46479,895],{"class":495},[478,46481,41989],{"class":714},[478,46483,31245],{"class":5782},[478,46485,759],{"class":710},[478,46487,42073],{"class":714},[478,46489,193],{"class":495},[478,46491,41989],{"class":714},[478,46493,31254],{"class":5782},[478,46495,759],{"class":710},[478,46497,1020],{"class":495},[478,46499,1079],{"class":714},[478,46501,31263],{"class":5782},[478,46503,759],{"class":710},[478,46505,789],{"class":495},[478,46507,720],{"class":714},[478,46509,46510],{"class":480,"line":2221},[478,46511,42137],{"class":770},[478,46513,46514],{"class":480,"line":2241},[478,46515,42142],{"class":770},[478,46517,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540,46542,46544,46546,46548],{"class":480,"line":2246},[478,46519,31225],{"class":495},[478,46521,42149],{"class":714},[478,46523,759],{"class":710},[478,46525,35209],{"class":714},[478,46527,31254],{"class":5782},[478,46529,759],{"class":710},[478,46531,783],{"class":495},[478,46533,1079],{"class":714},[478,46535,31309],{"class":5782},[478,46537,759],{"class":710},[478,46539,193],{"class":495},[478,46541,1079],{"class":714},[478,46543,31263],{"class":5782},[478,46545,759],{"class":710},[478,46547,193],{"class":495},[478,46549,720],{"class":714},[478,46551,46552,46554,46556,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578],{"class":480,"line":2260},[478,46553,31225],{"class":495},[478,46555,42184],{"class":714},[478,46557,759],{"class":710},[478,46559,31233],{"class":714},[478,46561,31236],{"class":5782},[478,46563,759],{"class":710},[478,46565,41940],{"class":714},[478,46567,31245],{"class":5782},[478,46569,759],{"class":710},[478,46571,42201],{"class":714},[478,46573,31254],{"class":5782},[478,46575,759],{"class":710},[478,46577,193],{"class":495},[478,46579,720],{"class":714},[478,46581,46582],{"class":480,"line":2265},[478,46583,2966],{"emptyLinePlaceholder":640},[478,46585,46586,46588,46590],{"class":480,"line":2294},[478,46587,31181],{"class":710},[478,46589,31473],{"class":484},[478,46591,31476],{"class":714},[478,46593,46594,46596,46598,46600,46602,46604],{"class":480,"line":2299},[478,46595,42226],{"class":714},[478,46597,759],{"class":710},[478,46599,31203],{"class":495},[478,46601,35564],{"class":714},[478,46603,31203],{"class":495},[478,46605,42237],{"class":714},[478,46607,46608,46610,46612,46614,46616,46618,46620,46622,46624,46626],{"class":480,"line":2316},[478,46609,7651],{"class":714},[478,46611,759],{"class":710},[478,46613,31203],{"class":495},[478,46615,35564],{"class":714},[478,46617,31203],{"class":495},[478,46619,42252],{"class":714},[478,46621,31203],{"class":495},[478,46623,35564],{"class":714},[478,46625,31203],{"class":495},[478,46627,42261],{"class":714},[478,46629,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648],{"class":480,"line":2321},[478,46631,42266],{"class":714},[478,46633,759],{"class":710},[478,46635,31203],{"class":495},[478,46637,35564],{"class":714},[478,46639,31203],{"class":495},[478,46641,42277],{"class":714},[478,46643,31203],{"class":495},[478,46645,35564],{"class":714},[478,46647,31203],{"class":495},[478,46649,42286],{"class":714},[478,46651,46652,46654,46656,46658,46660,46662,46664,46666],{"class":480,"line":2326},[478,46653,42291],{"class":714},[478,46655,759],{"class":710},[478,46657,31203],{"class":495},[478,46659,35564],{"class":714},[478,46661,31203],{"class":495},[478,46663,42302],{"class":714},[478,46665,31203],{"class":495},[478,46667,42307],{"class":714},[478,46669,46670],{"class":480,"line":2331},[478,46671,42312],{"class":770},[478,46673,46674,46676,46678,46680,46682,46684],{"class":480,"line":2345},[478,46675,15317],{"class":710},[478,46677,42319],{"class":714},[478,46679,33065],{"class":5782},[478,46681,759],{"class":710},[478,46683,193],{"class":495},[478,46685,720],{"class":714},[478,46687,46688],{"class":480,"line":2350},[478,46689,2966],{"emptyLinePlaceholder":640},[478,46691,46692],{"class":480,"line":3143},[478,46693,42340],{"class":770},[478,46695,46696,46698,46700,46702,46704,46706,46708],{"class":480,"line":3157},[478,46697,15259],{"class":710},[478,46699,42347],{"class":484},[478,46701,263],{"class":714},[478,46703,31158],{"class":484},[478,46705,1258],{"class":714},[478,46707,31163],{"class":484},[478,46709,31166],{"class":714},[478,46711,46712],{"class":480,"line":3165},[478,46713,42362],{"class":770},[478,46715,46716,46718,46720],{"class":480,"line":3170},[478,46717,31181],{"class":710},[478,46719,31184],{"class":495},[478,46721,42371],{"class":714},[478,46723,46724,46726,46728,46730,46732,46734],{"class":480,"line":3176},[478,46725,31197],{"class":495},[478,46727,42378],{"class":714},[478,46729,31203],{"class":495},[478,46731,31206],{"class":714},[478,46733,31209],{"class":495},[478,46735,2542],{"class":714},[478,46737,46738,46740,46742,46744],{"class":480,"line":3182},[478,46739,31225],{"class":495},[478,46741,42393],{"class":714},[478,46743,759],{"class":710},[478,46745,38389],{"class":714},[478,46747,46748,46750,46752,46754,46756,46758,46760,46762,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788],{"class":480,"line":3187},[478,46749,38394],{"class":714},[478,46751,31236],{"class":5782},[478,46753,759],{"class":710},[478,46755,783],{"class":495},[478,46757,1079],{"class":714},[478,46759,31245],{"class":5782},[478,46761,759],{"class":710},[478,46763,907],{"class":495},[478,46765,1079],{"class":714},[478,46767,31254],{"class":5782},[478,46769,759],{"class":710},[478,46771,1070],{"class":495},[478,46773,1079],{"class":714},[478,46775,31309],{"class":5782},[478,46777,759],{"class":710},[478,46779,789],{"class":495},[478,46781,1079],{"class":714},[478,46783,31263],{"class":5782},[478,46785,759],{"class":710},[478,46787,783],{"class":495},[478,46789,38427],{"class":714},[478,46791,46792],{"class":480,"line":8514},[478,46793,38432],{"class":714},[478,46795,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820],{"class":480,"line":8538},[478,46797,38477],{"class":714},[478,46799,31254],{"class":5782},[478,46801,759],{"class":710},[478,46803,783],{"class":495},[478,46805,1079],{"class":714},[478,46807,31309],{"class":5782},[478,46809,759],{"class":710},[478,46811,789],{"class":495},[478,46813,1079],{"class":714},[478,46815,31263],{"class":5782},[478,46817,759],{"class":710},[478,46819,193],{"class":495},[478,46821,720],{"class":714},[478,46823,46824],{"class":480,"line":8543},[478,46825,38506],{"class":714},[478,46827,46828,46830,46832,46834],{"class":480,"line":8549},[478,46829,31225],{"class":495},[478,46831,42484],{"class":714},[478,46833,759],{"class":710},[478,46835,38389],{"class":714},[478,46837,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856,46858,46860,46862],{"class":480,"line":8576},[478,46839,38394],{"class":714},[478,46841,31236],{"class":5782},[478,46843,759],{"class":710},[478,46845,907],{"class":495},[478,46847,1079],{"class":714},[478,46849,31245],{"class":5782},[478,46851,759],{"class":710},[478,46853,907],{"class":495},[478,46855,1079],{"class":714},[478,46857,31254],{"class":5782},[478,46859,759],{"class":710},[478,46861,193],{"class":495},[478,46863,38427],{"class":714},[478,46865,46866],{"class":480,"line":8581},[478,46867,38432],{"class":714},[478,46869,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902],{"class":480,"line":8587},[478,46871,38394],{"class":714},[478,46873,31236],{"class":5782},[478,46875,759],{"class":710},[478,46877,907],{"class":495},[478,46879,1079],{"class":714},[478,46881,31245],{"class":5782},[478,46883,759],{"class":710},[478,46885,42539],{"class":495},[478,46887,1079],{"class":714},[478,46889,31254],{"class":5782},[478,46891,759],{"class":710},[478,46893,783],{"class":495},[478,46895,1079],{"class":714},[478,46897,31263],{"class":5782},[478,46899,759],{"class":710},[478,46901,193],{"class":495},[478,46903,38427],{"class":714},[478,46905,46906],{"class":480,"line":8599},[478,46907,38432],{"class":714},[478,46909,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934],{"class":480,"line":8611},[478,46911,38477],{"class":714},[478,46913,31254],{"class":5782},[478,46915,759],{"class":710},[478,46917,783],{"class":495},[478,46919,1079],{"class":714},[478,46921,31309],{"class":5782},[478,46923,759],{"class":710},[478,46925,789],{"class":495},[478,46927,1079],{"class":714},[478,46929,31263],{"class":5782},[478,46931,759],{"class":710},[478,46933,193],{"class":495},[478,46935,720],{"class":714},[478,46937,46938],{"class":480,"line":8623},[478,46939,38506],{"class":714},[478,46941,46942,46944,46946,46948],{"class":480,"line":10282},[478,46943,31225],{"class":495},[478,46945,42600],{"class":714},[478,46947,759],{"class":710},[478,46949,38389],{"class":714},[478,46951,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972,46974,46976,46978,46980],{"class":480,"line":10307},[478,46953,42609],{"class":714},[478,46955,42539],{"class":495},[478,46957,1079],{"class":714},[478,46959,907],{"class":495},[478,46961,42618],{"class":714},[478,46963,913],{"class":495},[478,46965,1079],{"class":714},[478,46967,32450],{"class":495},[478,46969,42627],{"class":714},[478,46971,1299],{"class":495},[478,46973,1079],{"class":714},[478,46975,901],{"class":495},[478,46977,42636],{"class":714},[478,46979,901],{"class":495},[478,46981,38427],{"class":714},[478,46983,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006,47008,47010,47012],{"class":480,"line":10330},[478,46985,42609],{"class":714},[478,46987,35250],{"class":495},[478,46989,1079],{"class":714},[478,46991,32450],{"class":495},[478,46993,42618],{"class":714},[478,46995,32450],{"class":495},[478,46997,1079],{"class":714},[478,46999,42539],{"class":495},[478,47001,42627],{"class":714},[478,47003,901],{"class":495},[478,47005,1079],{"class":714},[478,47007,913],{"class":495},[478,47009,42636],{"class":714},[478,47011,907],{"class":495},[478,47013,38427],{"class":714},[478,47015,47016,47018,47020,47022,47024,47026,47028,47030,47032,47034,47036,47038,47040],{"class":480,"line":10354},[478,47017,38477],{"class":714},[478,47019,31254],{"class":5782},[478,47021,759],{"class":710},[478,47023,783],{"class":495},[478,47025,1079],{"class":714},[478,47027,31309],{"class":5782},[478,47029,759],{"class":710},[478,47031,789],{"class":495},[478,47033,1079],{"class":714},[478,47035,31263],{"class":5782},[478,47037,759],{"class":710},[478,47039,193],{"class":495},[478,47041,720],{"class":714},[478,47043,47044],{"class":480,"line":10359},[478,47045,38506],{"class":714},[478,47047,47048,47050,47052,47054],{"class":480,"line":10364},[478,47049,31225],{"class":495},[478,47051,42711],{"class":714},[478,47053,759],{"class":710},[478,47055,38389],{"class":714},[478,47057,47058,47060,47062,47064,47066,47068,47070,47072,47074,47076,47078,47080,47082,47084,47086],{"class":480,"line":10369},[478,47059,42609],{"class":714},[478,47061,42722],{"class":495},[478,47063,1079],{"class":714},[478,47065,42539],{"class":495},[478,47067,42618],{"class":714},[478,47069,913],{"class":495},[478,47071,1079],{"class":714},[478,47073,42735],{"class":495},[478,47075,42627],{"class":714},[478,47077,1299],{"class":495},[478,47079,1079],{"class":714},[478,47081,1305],{"class":495},[478,47083,42636],{"class":714},[478,47085,907],{"class":495},[478,47087,38427],{"class":714},[478,47089,47090,47092,47094,47096,47098,47100,47102,47104,47106,47108,47110,47112,47114,47116,47118],{"class":480,"line":10378},[478,47091,42609],{"class":714},[478,47093,38837],{"class":495},[478,47095,1079],{"class":714},[478,47097,21613],{"class":495},[478,47099,42618],{"class":714},[478,47101,1316],{"class":495},[478,47103,1079],{"class":714},[478,47105,31881],{"class":495},[478,47107,42627],{"class":714},[478,47109,1495],{"class":495},[478,47111,1079],{"class":714},[478,47113,907],{"class":495},[478,47115,42636],{"class":714},[478,47117,907],{"class":495},[478,47119,38427],{"class":714},[478,47121,47122,47124,47126,47128,47130,47132,47134,47136,47138,47140,47142,47144,47146,47148,47150],{"class":480,"line":10383},[478,47123,42609],{"class":714},[478,47125,38837],{"class":495},[478,47127,1079],{"class":714},[478,47129,32450],{"class":495},[478,47131,42618],{"class":714},[478,47133,32450],{"class":495},[478,47135,1079],{"class":714},[478,47137,35250],{"class":495},[478,47139,42627],{"class":714},[478,47141,1495],{"class":495},[478,47143,1079],{"class":714},[478,47145,907],{"class":495},[478,47147,42636],{"class":714},[478,47149,907],{"class":495},[478,47151,38427],{"class":714},[478,47153,47154,47156,47158,47160,47162,47164,47166,47168,47170,47172,47174,47176,47178,47180,47182],{"class":480,"line":10389},[478,47155,42609],{"class":714},[478,47157,38837],{"class":495},[478,47159,1079],{"class":714},[478,47161,1316],{"class":495},[478,47163,42618],{"class":714},[478,47165,32450],{"class":495},[478,47167,1079],{"class":714},[478,47169,42832],{"class":495},[478,47171,42627],{"class":714},[478,47173,901],{"class":495},[478,47175,1079],{"class":714},[478,47177,907],{"class":495},[478,47179,42636],{"class":714},[478,47181,907],{"class":495},[478,47183,38427],{"class":714},[478,47185,47186,47188,47190,47192,47194,47196,47198,47200,47202,47204,47206,47208,47210,47212,47214],{"class":480,"line":10410},[478,47187,42609],{"class":714},[478,47189,42853],{"class":495},[478,47191,1079],{"class":714},[478,47193,35250],{"class":495},[478,47195,42618],{"class":714},[478,47197,21613],{"class":495},[478,47199,1079],{"class":714},[478,47201,42866],{"class":495},[478,47203,42627],{"class":714},[478,47205,901],{"class":495},[478,47207,1079],{"class":714},[478,47209,32450],{"class":495},[478,47211,42636],{"class":714},[478,47213,32450],{"class":495},[478,47215,38427],{"class":714},[478,47217,47218,47220,47222,47224,47226,47228,47230,47232,47234,47236,47238,47240,47242],{"class":480,"line":10416},[478,47219,38477],{"class":714},[478,47221,31254],{"class":5782},[478,47223,759],{"class":710},[478,47225,783],{"class":495},[478,47227,1079],{"class":714},[478,47229,31309],{"class":5782},[478,47231,759],{"class":710},[478,47233,789],{"class":495},[478,47235,1079],{"class":714},[478,47237,31263],{"class":5782},[478,47239,759],{"class":710},[478,47241,193],{"class":495},[478,47243,720],{"class":714},[478,47245,47246],{"class":480,"line":10430},[478,47247,38506],{"class":714},[478,47249,47250,47252,47254,47256],{"class":480,"line":10436},[478,47251,31225],{"class":495},[478,47253,42919],{"class":714},[478,47255,759],{"class":710},[478,47257,38389],{"class":714},[478,47259,47260,47262,47264,47266,47268,47270,47272,47274,47276,47278,47280,47282,47284,47286,47288],{"class":480,"line":10463},[478,47261,42609],{"class":714},[478,47263,42930],{"class":495},[478,47265,1079],{"class":714},[478,47267,35250],{"class":495},[478,47269,42618],{"class":714},[478,47271,21613],{"class":495},[478,47273,1079],{"class":714},[478,47275,42866],{"class":495},[478,47277,42627],{"class":714},[478,47279,901],{"class":495},[478,47281,1079],{"class":714},[478,47283,32450],{"class":495},[478,47285,42636],{"class":714},[478,47287,32450],{"class":495},[478,47289,38427],{"class":714},[478,47291,47292,47294,47296,47298,47300,47302,47304,47306,47308,47310,47312,47314,47316,47318,47320],{"class":480,"line":10472},[478,47293,42609],{"class":714},[478,47295,42930],{"class":495},[478,47297,1079],{"class":714},[478,47299,35320],{"class":495},[478,47301,42618],{"class":714},[478,47303,42539],{"class":495},[478,47305,1079],{"class":714},[478,47307,35320],{"class":495},[478,47309,42627],{"class":714},[478,47311,1305],{"class":495},[478,47313,1079],{"class":714},[478,47315,32450],{"class":495},[478,47317,42636],{"class":714},[478,47319,32450],{"class":495},[478,47321,38427],{"class":714},[478,47323,47324,47326,47328,47330,47332],{"class":480,"line":10478},[478,47325,42993],{"class":714},[478,47327,193],{"class":495},[478,47329,1079],{"class":714},[478,47331,193],{"class":495},[478,47333,43002],{"class":714},[478,47335,47336],{"class":480,"line":10486},[478,47337,39170],{"class":714},[478,47339,47340,47342,47344,47346,47348],{"class":480,"line":10491},[478,47341,39175],{"class":714},[478,47343,43013],{"class":495},[478,47345,1079],{"class":714},[478,47347,789],{"class":495},[478,47349,720],{"class":714},[478,47351,47352],{"class":480,"line":17169},[478,47353,38506],{"class":714},[478,47355,47356],{"class":480,"line":17175},[478,47357,43028],{"class":770},[478,47359,47360,47362,47364,47366,47368],{"class":480,"line":17198},[478,47361,3969],{"class":710},[478,47363,39248],{"class":714},[478,47365,26423],{"class":710},[478,47367,39253],{"class":495},[478,47369,39256],{"class":714},[478,47371,47372,47374,47376],{"class":480,"line":17204},[478,47373,5208],{"class":710},[478,47375,39268],{"class":495},[478,47377,39271],{"class":714},[478,47379,47380,47382,47384,47386,47388,47390,47392,47394,47396],{"class":480,"line":17227},[478,47381,39281],{"class":714},[478,47383,43055],{"class":5782},[478,47385,759],{"class":710},[478,47387,43060],{"class":488},[478,47389,1079],{"class":714},[478,47391,39284],{"class":5782},[478,47393,759],{"class":710},[478,47395,39289],{"class":488},[478,47397,720],{"class":714},[478,47399,47400],{"class":480,"line":17241},[478,47401,43075],{"class":770},[478,47403,47404],{"class":480,"line":17261},[478,47405,43080],{"class":770},[478,47407,47408],{"class":480,"line":17267},[478,47409,43085],{"class":770},[478,47411,47412],{"class":480,"line":17278},[478,47413,43090],{"class":770},[478,47415,47416],{"class":480,"line":17301},[478,47417,43095],{"class":770},[478,47419,47420],{"class":480,"line":17323},[478,47421,43100],{"class":770},[478,47423,47424,47426,47428,47430,47432,47434],{"class":480,"line":17328},[478,47425,39301],{"class":710},[478,47427,39304],{"class":714},[478,47429,39307],{"class":710},[478,47431,39310],{"class":710},[478,47433,39313],{"class":495},[478,47435,4305],{"class":714},[478,47437,47438,47440,47442],{"class":480,"line":17334},[478,47439,39325],{"class":714},[478,47441,895],{"class":495},[478,47443,720],{"class":714},[478,47445,47446,47448,47450],{"class":480,"line":17348},[478,47447,43127],{"class":710},[478,47449,39268],{"class":495},[478,47451,39344],{"class":714},[478,47453,47454,47456,47458,47460,47462],{"class":480,"line":17361},[478,47455,43136],{"class":714},[478,47457,895],{"class":495},[478,47459,1079],{"class":714},[478,47461,39366],{"class":495},[478,47463,720],{"class":714},[478,47465,47466,47468,47470,47472,47474,47476],{"class":480,"line":17366},[478,47467,43149],{"class":710},[478,47469,39304],{"class":714},[478,47471,39307],{"class":710},[478,47473,39310],{"class":710},[478,47475,39313],{"class":495},[478,47477,4305],{"class":714},[478,47479,47480,47482,47484],{"class":480,"line":17380},[478,47481,43164],{"class":714},[478,47483,895],{"class":495},[478,47485,720],{"class":714},[478,47487,47488],{"class":480,"line":17385},[478,47489,35545],{"class":770},[478,47491,47492,47494,47496],{"class":480,"line":17391},[478,47493,31181],{"class":710},[478,47495,31473],{"class":484},[478,47497,31476],{"class":714},[478,47499,47500,47502,47504,47506],{"class":480,"line":17396},[478,47501,31481],{"class":714},[478,47503,759],{"class":710},[478,47505,31203],{"class":495},[478,47507,43191],{"class":714},[478,47509,47510,47512,47514,47516],{"class":480,"line":17410},[478,47511,31481],{"class":714},[478,47513,759],{"class":710},[478,47515,31203],{"class":495},[478,47517,43202],{"class":714},[478,47519,47520,47522,47524,47526],{"class":480,"line":17415},[478,47521,31481],{"class":714},[478,47523,759],{"class":710},[478,47525,31203],{"class":495},[478,47527,43213],{"class":714},[478,47529,47530,47532,47534,47536],{"class":480,"line":17420},[478,47531,31481],{"class":714},[478,47533,759],{"class":710},[478,47535,31203],{"class":495},[478,47537,43224],{"class":714},[478,47539,47540,47542,47544,47546],{"class":480,"line":17434},[478,47541,31481],{"class":714},[478,47543,759],{"class":710},[478,47545,31203],{"class":495},[478,47547,43235],{"class":714},[478,47549,47550,47552],{"class":480,"line":17446},[478,47551,15317],{"class":710},[478,47553,31589],{"class":714},[478,47555,47556],{"class":480,"line":17451},[478,47557,2966],{"emptyLinePlaceholder":640},[478,47559,47560],{"class":480,"line":17464},[478,47561,43250],{"class":770},[478,47563,47564,47566,47568,47570,47572],{"class":480,"line":17469},[478,47565,2099],{"class":710},[478,47567,31600],{"class":495},[478,47569,3515],{"class":710},[478,47571,31605],{"class":488},[478,47573,4305],{"class":714},[478,47575,47576,47578,47580,47582,47584,47586,47588,47590,47592],{"class":480,"line":17474},[478,47577,31617],{"class":714},[478,47579,759],{"class":710},[478,47581,30831],{"class":714},[478,47583,31624],{"class":488},[478,47585,2271],{"class":710},[478,47587,31629],{"class":714},[478,47589,2268],{"class":710},[478,47591,30856],{"class":488},[478,47593,720],{"class":714},[478,47595,47596,47598,47600],{"class":480,"line":17479},[478,47597,31669],{"class":714},[478,47599,759],{"class":710},[478,47601,43291],{"class":714},[478,47603,47604,47606,47608,47610,47612,47614,47616,47618],{"class":480,"line":17492},[478,47605,31679],{"class":495},[478,47607,31682],{"class":714},[478,47609,193],{"class":495},[478,47611,1079],{"class":714},[478,47613,31881],{"class":495},[478,47615,1079],{"class":714},[478,47617,31881],{"class":495},[478,47619,31695],{"class":714},[22563,47621,47623],{"id":47622},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47625,47626],{},"计算图片的均值与方差，用于训练中归一化处理操作",[469,47628,47630],{"className":30758,"code":47629,"language":30760,"meta":54,"style":54},"# 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",[475,47631,47632,47637,47650,47655,47661,47666,47676,47680,47685,47695,47699,47704,47714,47731,47735,47740,47752,47764,47795,47804,47814,47824,47828,47833,47848,47852,47857,47862,47867,47877,47882,47907,47911,47916,47931,47935,47948,47952,47957,47962,47967,47972,47977,47987,47997,48020,48028,48036,48044,48048,48060,48064,48069,48073,48077,48084,48104,48128,48135,48149,48154,48159,48163,48177,48181,48193],{"__ignoreMap":54},[478,47633,47634],{"class":480,"line":481},[478,47635,47636],{"class":770},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[478,47638,47639,47641,47644,47647],{"class":480,"line":565},[478,47640,31117],{"class":710},[478,47642,47643],{"class":495}," PIL",[478,47645,47646],{"class":710}," import",[478,47648,47649],{"class":714}," Image\n",[478,47651,47652],{"class":480,"line":579},[478,47653,47654],{"class":770},"# os 用来处理文件夹和文件路径\n",[478,47656,47657,47659],{"class":480,"line":593},[478,47658,30772],{"class":710},[478,47660,45685],{"class":714},[478,47662,47663],{"class":480,"line":1769},[478,47664,47665],{"class":770},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[478,47667,47668,47670,47672,47674],{"class":480,"line":1783},[478,47669,30772],{"class":710},[478,47671,31760],{"class":714},[478,47673,31763],{"class":710},[478,47675,31766],{"class":714},[478,47677,47678],{"class":480,"line":1789},[478,47679,2966],{"emptyLinePlaceholder":640},[478,47681,47682],{"class":480,"line":1880},[478,47683,47684],{"class":770},"# 文件夹路径，包含所有图片文件\n",[478,47686,47687,47690,47692],{"class":480,"line":1886},[478,47688,47689],{"class":714},"folder_path ",[478,47691,759],{"class":710},[478,47693,47694],{"class":488}," 'data_cat_dog'\n",[478,47696,47697],{"class":480,"line":1898},[478,47698,2966],{"emptyLinePlaceholder":640},[478,47700,47701],{"class":480,"line":2180},[478,47702,47703],{"class":770},"# 初始化累积变量\n",[478,47705,47706,47709,47711],{"class":480,"line":2185},[478,47707,47708],{"class":714},"total_pixels ",[478,47710,759],{"class":710},[478,47712,47713],{"class":495}," 0\n",[478,47715,47716,47719,47721,47724,47726,47728],{"class":480,"line":2191},[478,47717,47718],{"class":714},"sum_normalized_pixel_values ",[478,47720,759],{"class":710},[478,47722,47723],{"class":714}," np.zeros(",[478,47725,783],{"class":495},[478,47727,46188],{"class":714},[478,47729,47730],{"class":770},"# 如果是RGB图像，需要三个通道的均值和方差\n",[478,47732,47733],{"class":480,"line":2196},[478,47734,2966],{"emptyLinePlaceholder":640},[478,47736,47737],{"class":480,"line":2210},[478,47738,47739],{"class":770},"# 遍历文件夹中的图片文件\n",[478,47741,47742,47744,47747,47749],{"class":480,"line":2215},[478,47743,3591],{"class":710},[478,47745,47746],{"class":714}," root, dirs, files ",[478,47748,26423],{"class":710},[478,47750,47751],{"class":714}," os.walk(folder_path):\n",[478,47753,47754,47756,47759,47761],{"class":480,"line":2221},[478,47755,3767],{"class":710},[478,47757,47758],{"class":714}," filename ",[478,47760,26423],{"class":710},[478,47762,47763],{"class":714}," files:\n",[478,47765,47766,47768,47771,47774,47776,47779,47781,47784,47786,47789,47792],{"class":480,"line":2241},[478,47767,3063],{"class":710},[478,47769,47770],{"class":714}," filename.endswith((",[478,47772,47773],{"class":488},"'.jpg'",[478,47775,13001],{"class":714},[478,47777,47778],{"class":488},"'.jpeg'",[478,47780,13001],{"class":714},[478,47782,47783],{"class":488},"'.png'",[478,47785,13001],{"class":714},[478,47787,47788],{"class":488},"'.bmp'",[478,47790,47791],{"class":714},")):  ",[478,47793,47794],{"class":770},"# 可根据实际情况添加其他格式\n",[478,47796,47797,47799,47801],{"class":480,"line":2246},[478,47798,46053],{"class":714},[478,47800,759],{"class":710},[478,47802,47803],{"class":714}," os.path.join(root, filename)\n",[478,47805,47806,47809,47811],{"class":480,"line":2260},[478,47807,47808],{"class":714},"            image ",[478,47810,759],{"class":710},[478,47812,47813],{"class":714}," Image.open(image_path)\n",[478,47815,47816,47819,47821],{"class":480,"line":2265},[478,47817,47818],{"class":714},"            image_array ",[478,47820,759],{"class":710},[478,47822,47823],{"class":714}," np.array(image)\n",[478,47825,47826],{"class":480,"line":2294},[478,47827,2966],{"emptyLinePlaceholder":640},[478,47829,47830],{"class":480,"line":2299},[478,47831,47832],{"class":770},"            # 归一化像素值到0-1之间\n",[478,47834,47835,47838,47840,47843,47845],{"class":480,"line":2316},[478,47836,47837],{"class":714},"            normalized_image_array ",[478,47839,759],{"class":710},[478,47841,47842],{"class":714}," image_array ",[478,47844,1284],{"class":710},[478,47846,47847],{"class":495}," 255.0\n",[478,47849,47850],{"class":480,"line":2321},[478,47851,2966],{"emptyLinePlaceholder":640},[478,47853,47854],{"class":480,"line":2326},[478,47855,47856],{"class":770},"            # print(image_path)\n",[478,47858,47859],{"class":480,"line":2331},[478,47860,47861],{"class":770},"            # print(normalized_image_array.shape)\n",[478,47863,47864],{"class":480,"line":2345},[478,47865,47866],{"class":770},"            # 累积归一化后的像素值和像素数量\n",[478,47868,47869,47872,47874],{"class":480,"line":2350},[478,47870,47871],{"class":714},"            total_pixels ",[478,47873,10043],{"class":710},[478,47875,47876],{"class":714}," normalized_image_array.size\n",[478,47878,47879],{"class":480,"line":3143},[478,47880,47881],{"class":770},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[478,47883,47884,47887,47889,47892,47895,47897,47899,47901,47903,47905],{"class":480,"line":3157},[478,47885,47886],{"class":714},"            sum_normalized_pixel_values ",[478,47888,10043],{"class":710},[478,47890,47891],{"class":714}," np.sum(normalized_image_array, ",[478,47893,47894],{"class":5782},"axis",[478,47896,759],{"class":710},[478,47898,263],{"class":714},[478,47900,895],{"class":495},[478,47902,13001],{"class":714},[478,47904,193],{"class":495},[478,47906,30877],{"class":714},[478,47908,47909],{"class":480,"line":3165},[478,47910,2966],{"emptyLinePlaceholder":640},[478,47912,47913],{"class":480,"line":3170},[478,47914,47915],{"class":770},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[478,47917,47918,47921,47923,47926,47928],{"class":480,"line":3176},[478,47919,47920],{"class":714},"mean ",[478,47922,759],{"class":710},[478,47924,47925],{"class":714}," sum_normalized_pixel_values ",[478,47927,1284],{"class":710},[478,47929,47930],{"class":714}," total_pixels\n",[478,47932,47933],{"class":480,"line":3182},[478,47934,2966],{"emptyLinePlaceholder":640},[478,47936,47937,47940,47942,47944,47946],{"class":480,"line":3187},[478,47938,47939],{"class":714},"sum_squared_diff ",[478,47941,759],{"class":710},[478,47943,47723],{"class":714},[478,47945,783],{"class":495},[478,47947,720],{"class":714},[478,47949,47950],{"class":480,"line":8514},[478,47951,2966],{"emptyLinePlaceholder":640},[478,47953,47954],{"class":480,"line":8538},[478,47955,47956],{"class":770},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[478,47958,47959],{"class":480,"line":8543},[478,47960,47961],{"class":770},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[478,47963,47964],{"class":480,"line":8549},[478,47965,47966],{"class":770},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[478,47968,47969],{"class":480,"line":8576},[478,47970,47971],{"class":770},"# Image.open(image_path)：打开图片\n",[478,47973,47974],{"class":480,"line":8581},[478,47975,47976],{"class":770},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[478,47978,47979,47981,47983,47985],{"class":480,"line":8587},[478,47980,3591],{"class":710},[478,47982,47746],{"class":714},[478,47984,26423],{"class":710},[478,47986,47751],{"class":714},[478,47988,47989,47991,47993,47995],{"class":480,"line":8599},[478,47990,3767],{"class":710},[478,47992,47758],{"class":714},[478,47994,26423],{"class":710},[478,47996,47763],{"class":714},[478,47998,47999,48001,48003,48005,48007,48009,48011,48013,48015,48017],{"class":480,"line":8611},[478,48000,3063],{"class":710},[478,48002,47770],{"class":714},[478,48004,47773],{"class":488},[478,48006,13001],{"class":714},[478,48008,47778],{"class":488},[478,48010,13001],{"class":714},[478,48012,47783],{"class":488},[478,48014,13001],{"class":714},[478,48016,47788],{"class":488},[478,48018,48019],{"class":714},")):\n",[478,48021,48022,48024,48026],{"class":480,"line":8623},[478,48023,46053],{"class":714},[478,48025,759],{"class":710},[478,48027,47803],{"class":714},[478,48029,48030,48032,48034],{"class":480,"line":10282},[478,48031,47808],{"class":714},[478,48033,759],{"class":710},[478,48035,47813],{"class":714},[478,48037,48038,48040,48042],{"class":480,"line":10307},[478,48039,47818],{"class":714},[478,48041,759],{"class":710},[478,48043,47823],{"class":714},[478,48045,48046],{"class":480,"line":10330},[478,48047,47832],{"class":770},[478,48049,48050,48052,48054,48056,48058],{"class":480,"line":10354},[478,48051,47837],{"class":714},[478,48053,759],{"class":710},[478,48055,47842],{"class":714},[478,48057,1284],{"class":710},[478,48059,47847],{"class":495},[478,48061,48062],{"class":480,"line":10359},[478,48063,47861],{"class":770},[478,48065,48066],{"class":480,"line":10364},[478,48067,48068],{"class":770},"            # print(mean.shape)\n",[478,48070,48071],{"class":480,"line":10369},[478,48072,47856],{"class":770},[478,48074,48075],{"class":480,"line":10378},[478,48076,2966],{"emptyLinePlaceholder":640},[478,48078,48079,48082],{"class":480,"line":10383},[478,48080,48081],{"class":710},"            try",[478,48083,4305],{"class":714},[478,48085,48086,48089,48091,48094,48096,48099,48101],{"class":480,"line":10389},[478,48087,48088],{"class":714},"                diff ",[478,48090,759],{"class":710},[478,48092,48093],{"class":714}," (normalized_image_array ",[478,48095,1232],{"class":710},[478,48097,48098],{"class":714}," mean) ",[478,48100,11227],{"class":710},[478,48102,48103],{"class":495}," 2\n",[478,48105,48106,48109,48111,48114,48116,48118,48120,48122,48124,48126],{"class":480,"line":10410},[478,48107,48108],{"class":714},"                sum_squared_diff ",[478,48110,10043],{"class":710},[478,48112,48113],{"class":714}," np.sum(diff, ",[478,48115,47894],{"class":5782},[478,48117,759],{"class":710},[478,48119,263],{"class":714},[478,48121,895],{"class":495},[478,48123,13001],{"class":714},[478,48125,193],{"class":495},[478,48127,30877],{"class":714},[478,48129,48130,48133],{"class":480,"line":10416},[478,48131,48132],{"class":710},"            except",[478,48134,4305],{"class":714},[478,48136,48137,48140,48142,48144,48147],{"class":480,"line":10430},[478,48138,48139],{"class":495},"                print",[478,48141,263],{"class":714},[478,48143,218],{"class":710},[478,48145,48146],{"class":488},"\"捕获到自定义异常\"",[478,48148,720],{"class":714},[478,48150,48151],{"class":480,"line":10436},[478,48152,48153],{"class":770},"            # diff = (normalized_image_array - mean) ** 2\n",[478,48155,48156],{"class":480,"line":10463},[478,48157,48158],{"class":770},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[478,48160,48161],{"class":480,"line":10472},[478,48162,2966],{"emptyLinePlaceholder":640},[478,48164,48165,48168,48170,48173,48175],{"class":480,"line":10478},[478,48166,48167],{"class":714},"variance ",[478,48169,759],{"class":710},[478,48171,48172],{"class":714}," sum_squared_diff ",[478,48174,1284],{"class":710},[478,48176,47930],{"class":714},[478,48178,48179],{"class":480,"line":10486},[478,48180,2966],{"emptyLinePlaceholder":640},[478,48182,48183,48185,48187,48190],{"class":480,"line":10491},[478,48184,30795],{"class":495},[478,48186,263],{"class":714},[478,48188,48189],{"class":488},"\"Mean:\"",[478,48191,48192],{"class":714},", mean)\n",[478,48194,48195,48197,48199,48202],{"class":480,"line":17169},[478,48196,30795],{"class":495},[478,48198,263],{"class":714},[478,48200,48201],{"class":488},"\"Variance:\"",[478,48203,48204],{"class":714},", variance)\n",[469,48206,48208],{"className":30758,"code":48207,"language":30760,"meta":54,"style":54},"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",[475,48209,48210,48216,48222,48232,48238,48248,48262,48272,48282,48292,48296,48306,48316,48320,48324,48332,48337,48342,48361,48365,48370,48375,48380,48385,48426,48431,48441,48446,48459,48464,48469,48474,48479,48484,48488,48493,48498,48520,48524,48556,48570,48580,48590,48594,48604,48618,48628,48638,48648,48654,48658,48662,48666,48670,48674,48682,48702,48706,48710,48714,48718,48734,48738,48742,48750,48754,48758,48766,48770,48774,48778,48786,48790,48794,48798,48806,48810,48818,48822,48830,48834,48842,48846,48854,48858,48862,48870,48874,48878,48890,48914,48928,48932,48936,48940,48948,48952,48960,48964,48972,48976,48984,48988,48996,49000,49008,49012,49024,49028,49036,49040,49048,49052,49056,49060,49064,49072,49076,49092,49096,49104,49108,49112,49116,49120,49124,49128,49132,49148,49152,49164,49168,49180,49184,49196,49200,49208,49212,49220,49224,49228,49232,49238,49242,49250,49254,49270,49274,49282,49286,49302,49314,49318,49330,49334,49338,49346,49350,49354,49362,49366,49374,49378,49386,49390,49394,49436,49478,49482,49486,49502,49506,49522,49526,49530,49538,49542,49546,49558,49596,49600,49604,49612,49616,49630,49640,49646,49652,49658,49664,49668,49672,49678,49682,49686,49694,49698,49716,49720,49724,49728,49744,49748,49752,49756,49760,49764,49784,49804,49808,49812,49816,49824,49832,49836,49852,49872,49892,49896,49901,49910,49919,49924,49929,49934,49947,49952,49961,49970,49987],{"__ignoreMap":54},[478,48211,48212,48214],{"class":480,"line":481},[478,48213,30772],{"class":710},[478,48215,32202],{"class":714},[478,48217,48218,48220],{"class":480,"line":565},[478,48219,30772],{"class":710},[478,48221,32209],{"class":714},[478,48223,48224,48226,48228,48230],{"class":480,"line":579},[478,48225,30772],{"class":710},[478,48227,32220],{"class":714},[478,48229,31763],{"class":710},[478,48231,32225],{"class":714},[478,48233,48234,48236],{"class":480,"line":593},[478,48235,30772],{"class":710},[478,48237,30775],{"class":714},[478,48239,48240,48242,48244,48246],{"class":480,"line":1769},[478,48241,31117],{"class":710},[478,48243,31795],{"class":714},[478,48245,30772],{"class":710},[478,48247,32242],{"class":714},[478,48249,48250,48252,48254,48256,48259],{"class":480,"line":1783},[478,48251,31117],{"class":710},[478,48253,31748],{"class":714},[478,48255,30772],{"class":710},[478,48257,48258],{"class":714}," ImageFolder ",[478,48260,48261],{"class":770},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[478,48263,48264,48266,48268,48270],{"class":480,"line":1789},[478,48265,31117],{"class":710},[478,48267,31778],{"class":714},[478,48269,30772],{"class":710},[478,48271,31783],{"class":714},[478,48273,48274,48276,48278,48280],{"class":480,"line":1880},[478,48275,30772],{"class":710},[478,48277,31795],{"class":714},[478,48279,31763],{"class":710},[478,48281,31800],{"class":714},[478,48283,48284,48286,48288,48290],{"class":480,"line":1886},[478,48285,30772],{"class":710},[478,48287,31812],{"class":714},[478,48289,31763],{"class":710},[478,48291,31817],{"class":714},[478,48293,48294],{"class":480,"line":1898},[478,48295,32287],{"class":770},[478,48297,48298,48300,48302,48304],{"class":480,"line":2180},[478,48299,31117],{"class":710},[478,48301,32294],{"class":714},[478,48303,30772],{"class":710},[478,48305,43411],{"class":714},[478,48307,48308,48310,48312,48314],{"class":480,"line":2185},[478,48309,31117],{"class":710},[478,48311,31120],{"class":714},[478,48313,30772],{"class":710},[478,48315,31125],{"class":714},[478,48317,48318],{"class":480,"line":2191},[478,48319,2966],{"emptyLinePlaceholder":640},[478,48321,48322],{"class":480,"line":2196},[478,48323,32322],{"class":770},[478,48325,48326,48328,48330],{"class":480,"line":2210},[478,48327,32327],{"class":710},[478,48329,32330],{"class":484},[478,48331,32333],{"class":714},[478,48333,48334],{"class":480,"line":2215},[478,48335,48336],{"class":770},"    # 导入自己的数据集，并进行数据处理\n",[478,48338,48339],{"class":480,"line":2221},[478,48340,48341],{"class":770},"    # 定义数据集的路径\n",[478,48343,48344,48347,48349,48351,48353,48355,48359],{"class":480,"line":2241},[478,48345,48346],{"class":495},"    ROOT_PATH",[478,48348,759],{"class":710},[478,48350,1367],{"class":710},[478,48352,952],{"class":488},[478,48354,1258],{"class":495},[478,48356,48358],{"class":48357},"sA_wV","\u002Fdata\u002Ftrain",[478,48360,25513],{"class":488},[478,48362,48363],{"class":480,"line":2246},[478,48364,2966],{"emptyLinePlaceholder":640},[478,48366,48367],{"class":480,"line":2260},[478,48368,48369],{"class":770},"    # 定义归一化方法\n",[478,48371,48372],{"class":480,"line":2265},[478,48373,48374],{"class":770},"    # 这里需要先计算一下数据集的均值和方差\n",[478,48376,48377],{"class":480,"line":2294},[478,48378,48379],{"class":770},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[478,48381,48382],{"class":480,"line":2299},[478,48383,48384],{"class":770},"    # 第一个参数是均值，第二个参数是方差\n",[478,48386,48387,48390,48392,48395,48398,48400,48403,48405,48408,48411,48414,48416,48419,48421,48424],{"class":480,"line":2316},[478,48388,48389],{"class":714},"    normalize",[478,48391,759],{"class":710},[478,48393,48394],{"class":714},"transforms.Normalize([",[478,48396,48397],{"class":495},"0.162",[478,48399,1079],{"class":714},[478,48401,48402],{"class":495},"0.151",[478,48404,1079],{"class":714},[478,48406,48407],{"class":495},"0.138",[478,48409,48410],{"class":714},"],[",[478,48412,48413],{"class":495},"0.058",[478,48415,1079],{"class":714},[478,48417,48418],{"class":495},"0.052",[478,48420,1079],{"class":714},[478,48422,48423],{"class":495},"0.048",[478,48425,5223],{"class":714},[478,48427,48428],{"class":480,"line":2321},[478,48429,48430],{"class":770},"    # 定义数据集处理方法变量\n",[478,48432,48433,48436,48438],{"class":480,"line":2326},[478,48434,48435],{"class":714},"    train_transform",[478,48437,759],{"class":710},[478,48439,48440],{"class":714},"transforms.Compose([\n",[478,48442,48443],{"class":480,"line":2331},[478,48444,48445],{"class":770},"        # 调整图像大小为224*224\n",[478,48447,48448,48451,48453,48455,48457],{"class":480,"line":2345},[478,48449,48450],{"class":714},"        transforms.Resize((",[478,48452,31881],{"class":495},[478,48454,1079],{"class":714},[478,48456,31881],{"class":495},[478,48458,43002],{"class":714},[478,48460,48461],{"class":480,"line":2350},[478,48462,48463],{"class":770},"        # 将图像转换为张量\n",[478,48465,48466],{"class":480,"line":3143},[478,48467,48468],{"class":714},"        transforms.ToTensor(),\n",[478,48470,48471],{"class":480,"line":3157},[478,48472,48473],{"class":714},"        normalize])\n",[478,48475,48476],{"class":480,"line":3165},[478,48477,48478],{"class":770},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[478,48480,48481],{"class":480,"line":3170},[478,48482,48483],{"class":770},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[478,48485,48486],{"class":480,"line":3176},[478,48487,2966],{"emptyLinePlaceholder":640},[478,48489,48490],{"class":480,"line":3182},[478,48491,48492],{"class":770},"    # 加载数据集\n",[478,48494,48495],{"class":480,"line":3187},[478,48496,48497],{"class":770},"    # 传入数据集路径与处理方法\n",[478,48499,48500,48502,48504,48507,48510,48512,48515,48517],{"class":480,"line":8514},[478,48501,32338],{"class":714},[478,48503,759],{"class":710},[478,48505,48506],{"class":714},"ImageFolder(",[478,48508,48509],{"class":495},"ROOT_PATH",[478,48511,1079],{"class":714},[478,48513,48514],{"class":5782},"transform",[478,48516,759],{"class":710},[478,48518,48519],{"class":714},"train_transform)\n",[478,48521,48522],{"class":480,"line":8538},[478,48523,2966],{"emptyLinePlaceholder":640},[478,48525,48526,48528,48530,48532,48534,48536,48538,48540,48542,48544,48546,48548,48550,48552,48554],{"class":480,"line":8543},[478,48527,32390],{"class":714},[478,48529,759],{"class":710},[478,48531,32395],{"class":714},[478,48533,32398],{"class":495},[478,48535,263],{"class":714},[478,48537,32403],{"class":495},[478,48539,1155],{"class":710},[478,48541,7924],{"class":495},[478,48543,32410],{"class":714},[478,48545,32398],{"class":495},[478,48547,263],{"class":714},[478,48549,32417],{"class":495},[478,48551,1155],{"class":710},[478,48553,7924],{"class":495},[478,48555,32424],{"class":714},[478,48557,48558,48560,48562,48564,48566,48568],{"class":480,"line":8549},[478,48559,32429],{"class":714},[478,48561,759],{"class":710},[478,48563,32434],{"class":714},[478,48565,31917],{"class":5782},[478,48567,759],{"class":710},[478,48569,31922],{"class":714},[478,48571,48572,48574,48576,48578],{"class":480,"line":8576},[478,48573,32445],{"class":5782},[478,48575,759],{"class":710},[478,48577,901],{"class":495},[478,48579,31846],{"class":714},[478,48581,48582,48584,48586,48588],{"class":480,"line":8581},[478,48583,32457],{"class":5782},[478,48585,759],{"class":710},[478,48587,31856],{"class":495},[478,48589,31846],{"class":714},[478,48591,48592],{"class":480,"line":8587},[478,48593,32468],{"class":770},[478,48595,48596,48598,48600,48602],{"class":480,"line":8599},[478,48597,32473],{"class":5782},[478,48599,759],{"class":710},[478,48601,1096],{"class":495},[478,48603,720],{"class":714},[478,48605,48606,48608,48610,48612,48614,48616],{"class":480,"line":8611},[478,48607,32484],{"class":714},[478,48609,759],{"class":710},[478,48611,31914],{"class":714},[478,48613,31917],{"class":5782},[478,48615,759],{"class":710},[478,48617,32495],{"class":714},[478,48619,48620,48622,48624,48626],{"class":480,"line":8623},[478,48621,32500],{"class":5782},[478,48623,759],{"class":710},[478,48625,901],{"class":495},[478,48627,31846],{"class":714},[478,48629,48630,48632,48634,48636],{"class":480,"line":10282},[478,48631,32511],{"class":5782},[478,48633,759],{"class":710},[478,48635,31856],{"class":495},[478,48637,31846],{"class":714},[478,48639,48640,48642,48644,48646],{"class":480,"line":10307},[478,48641,32522],{"class":5782},[478,48643,759],{"class":710},[478,48645,1096],{"class":495},[478,48647,720],{"class":714},[478,48649,48650,48652],{"class":480,"line":10330},[478,48651,4656],{"class":710},[478,48653,32535],{"class":714},[478,48655,48656],{"class":480,"line":10354},[478,48657,2966],{"emptyLinePlaceholder":640},[478,48659,48660],{"class":480,"line":10359},[478,48661,32544],{"class":770},[478,48663,48664],{"class":480,"line":10364},[478,48665,32549],{"class":770},[478,48667,48668],{"class":480,"line":10369},[478,48669,2966],{"emptyLinePlaceholder":640},[478,48671,48672],{"class":480,"line":10378},[478,48673,32558],{"class":770},[478,48675,48676,48678,48680],{"class":480,"line":10383},[478,48677,32327],{"class":710},[478,48679,32565],{"class":484},[478,48681,32568],{"class":714},[478,48683,48684,48686,48688,48690,48692,48694,48696,48698,48700],{"class":480,"line":10389},[478,48685,31617],{"class":714},[478,48687,759],{"class":710},[478,48689,30831],{"class":714},[478,48691,31624],{"class":488},[478,48693,2271],{"class":710},[478,48695,31629],{"class":714},[478,48697,2268],{"class":710},[478,48699,32587],{"class":488},[478,48701,720],{"class":714},[478,48703,48704],{"class":480,"line":10410},[478,48705,2966],{"emptyLinePlaceholder":640},[478,48707,48708],{"class":480,"line":10416},[478,48709,32602],{"class":770},[478,48711,48712],{"class":480,"line":10430},[478,48713,32607],{"class":770},[478,48715,48716],{"class":480,"line":10436},[478,48717,32612],{"class":770},[478,48719,48720,48722,48724,48726,48728,48730,48732],{"class":480,"line":10463},[478,48721,32617],{"class":714},[478,48723,759],{"class":710},[478,48725,32622],{"class":714},[478,48727,32625],{"class":5782},[478,48729,759],{"class":710},[478,48731,32630],{"class":495},[478,48733,720],{"class":714},[478,48735,48736],{"class":480,"line":10472},[478,48737,2966],{"emptyLinePlaceholder":640},[478,48739,48740],{"class":480,"line":10478},[478,48741,32641],{"class":770},[478,48743,48744,48746,48748],{"class":480,"line":10486},[478,48745,32646],{"class":714},[478,48747,759],{"class":710},[478,48749,32651],{"class":714},[478,48751,48752],{"class":480,"line":10491},[478,48753,2966],{"emptyLinePlaceholder":640},[478,48755,48756],{"class":480,"line":17169},[478,48757,32660],{"class":770},[478,48759,48760,48762,48764],{"class":480,"line":17175},[478,48761,31669],{"class":714},[478,48763,759],{"class":710},[478,48765,32669],{"class":714},[478,48767,48768],{"class":480,"line":17198},[478,48769,32674],{"class":770},[478,48771,48772],{"class":480,"line":17204},[478,48773,32679],{"class":770},[478,48775,48776],{"class":480,"line":17227},[478,48777,32684],{"class":770},[478,48779,48780,48782,48784],{"class":480,"line":17241},[478,48781,32689],{"class":714},[478,48783,759],{"class":710},[478,48785,32694],{"class":714},[478,48787,48788],{"class":480,"line":17261},[478,48789,2966],{"emptyLinePlaceholder":640},[478,48791,48792],{"class":480,"line":17267},[478,48793,32707],{"class":770},[478,48795,48796],{"class":480,"line":17278},[478,48797,32712],{"class":770},[478,48799,48800,48802,48804],{"class":480,"line":17301},[478,48801,32717],{"class":714},[478,48803,759],{"class":710},[478,48805,32722],{"class":495},[478,48807,48808],{"class":480,"line":17323},[478,48809,32727],{"class":770},[478,48811,48812,48814,48816],{"class":480,"line":17328},[478,48813,32732],{"class":714},[478,48815,759],{"class":710},[478,48817,32737],{"class":714},[478,48819,48820],{"class":480,"line":17334},[478,48821,32742],{"class":770},[478,48823,48824,48826,48828],{"class":480,"line":17348},[478,48825,32747],{"class":714},[478,48827,759],{"class":710},[478,48829,32737],{"class":714},[478,48831,48832],{"class":480,"line":17361},[478,48833,32756],{"class":770},[478,48835,48836,48838,48840],{"class":480,"line":17366},[478,48837,32761],{"class":714},[478,48839,759],{"class":710},[478,48841,32737],{"class":714},[478,48843,48844],{"class":480,"line":17380},[478,48845,32770],{"class":770},[478,48847,48848,48850,48852],{"class":480,"line":17385},[478,48849,32775],{"class":714},[478,48851,759],{"class":710},[478,48853,32737],{"class":714},[478,48855,48856],{"class":480,"line":17391},[478,48857,2966],{"emptyLinePlaceholder":640},[478,48859,48860],{"class":480,"line":17396},[478,48861,32788],{"class":770},[478,48863,48864,48866,48868],{"class":480,"line":17410},[478,48865,32793],{"class":714},[478,48867,759],{"class":710},[478,48869,32798],{"class":714},[478,48871,48872],{"class":480,"line":17415},[478,48873,2966],{"emptyLinePlaceholder":640},[478,48875,48876],{"class":480,"line":17420},[478,48877,32811],{"class":770},[478,48879,48880,48882,48884,48886,48888],{"class":480,"line":17434},[478,48881,3767],{"class":710},[478,48883,32818],{"class":714},[478,48885,26423],{"class":710},[478,48887,32823],{"class":495},[478,48889,32826],{"class":714},[478,48891,48892,48894,48896,48898,48900,48902,48904,48906,48908,48910,48912],{"class":480,"line":17446},[478,48893,32831],{"class":495},[478,48895,263],{"class":714},[478,48897,32836],{"class":488},[478,48899,32839],{"class":495},[478,48901,1284],{"class":488},[478,48903,32839],{"class":495},[478,48905,952],{"class":488},[478,48907,32848],{"class":714},[478,48909,1232],{"class":710},[478,48911,193],{"class":495},[478,48913,30877],{"class":714},[478,48915,48916,48918,48920,48922,48924,48926],{"class":480,"line":17451},[478,48917,32831],{"class":495},[478,48919,263],{"class":714},[478,48921,32863],{"class":488},[478,48923,1155],{"class":710},[478,48925,1146],{"class":495},[478,48927,720],{"class":714},[478,48929,48930],{"class":480,"line":17464},[478,48931,2966],{"emptyLinePlaceholder":640},[478,48933,48934],{"class":480,"line":17469},[478,48935,32878],{"class":770},[478,48937,48938],{"class":480,"line":17474},[478,48939,32883],{"class":770},[478,48941,48942,48944,48946],{"class":480,"line":17479},[478,48943,32888],{"class":714},[478,48945,759],{"class":710},[478,48947,32722],{"class":495},[478,48949,48950],{"class":480,"line":17492},[478,48951,32897],{"class":770},[478,48953,48954,48956,48958],{"class":480,"line":17497},[478,48955,32902],{"class":714},[478,48957,759],{"class":710},[478,48959,3651],{"class":495},[478,48961,48962],{"class":480,"line":33013},[478,48963,32911],{"class":770},[478,48965,48966,48968,48970],{"class":480,"line":33019},[478,48967,32916],{"class":714},[478,48969,759],{"class":710},[478,48971,32722],{"class":495},[478,48973,48974],{"class":480,"line":33025},[478,48975,32925],{"class":770},[478,48977,48978,48980,48982],{"class":480,"line":33031},[478,48979,32930],{"class":714},[478,48981,759],{"class":710},[478,48983,3651],{"class":495},[478,48985,48986],{"class":480,"line":33037},[478,48987,32939],{"class":770},[478,48989,48990,48992,48994],{"class":480,"line":33048},[478,48991,32944],{"class":714},[478,48993,759],{"class":710},[478,48995,3651],{"class":495},[478,48997,48998],{"class":480,"line":33054},[478,48999,32953],{"class":770},[478,49001,49002,49004,49006],{"class":480,"line":33074},[478,49003,32958],{"class":714},[478,49005,759],{"class":710},[478,49007,3651],{"class":495},[478,49009,49010],{"class":480,"line":33080},[478,49011,32967],{"class":770},[478,49013,49014,49016,49018,49020,49022],{"class":480,"line":33091},[478,49015,3969],{"class":710},[478,49017,31981],{"class":714},[478,49019,26423],{"class":710},[478,49021,31986],{"class":495},[478,49023,32980],{"class":714},[478,49025,49026],{"class":480,"line":33097},[478,49027,32985],{"class":770},[478,49029,49030,49032,49034],{"class":480,"line":33103},[478,49031,32990],{"class":714},[478,49033,759],{"class":710},[478,49035,32995],{"class":714},[478,49037,49038],{"class":480,"line":33109},[478,49039,33000],{"class":770},[478,49041,49042,49044,49046],{"class":480,"line":33115},[478,49043,33005],{"class":714},[478,49045,759],{"class":710},[478,49047,33010],{"class":714},[478,49049,49050],{"class":480,"line":33121},[478,49051,33016],{"class":770},[478,49053,49054],{"class":480,"line":33127},[478,49055,33022],{"class":714},[478,49057,49058],{"class":480,"line":33133},[478,49059,33028],{"class":770},[478,49061,49062],{"class":480,"line":33153},[478,49063,33034],{"class":770},[478,49065,49066,49068,49070],{"class":480,"line":33159},[478,49067,33040],{"class":714},[478,49069,759],{"class":710},[478,49071,33045],{"class":714},[478,49073,49074],{"class":480,"line":33175},[478,49075,33051],{"class":770},[478,49077,49078,49080,49082,49084,49086,49088,49090],{"class":480,"line":33181},[478,49079,33057],{"class":714},[478,49081,759],{"class":710},[478,49083,33062],{"class":714},[478,49085,33065],{"class":5782},[478,49087,759],{"class":710},[478,49089,193],{"class":495},[478,49091,720],{"class":714},[478,49093,49094],{"class":480,"line":33195},[478,49095,33077],{"class":770},[478,49097,49098,49100,49102],{"class":480,"line":33201},[478,49099,33083],{"class":714},[478,49101,759],{"class":710},[478,49103,33088],{"class":714},[478,49105,49106],{"class":480,"line":33216},[478,49107,33094],{"class":770},[478,49109,49110],{"class":480,"line":33222},[478,49111,33100],{"class":714},[478,49113,49114],{"class":480,"line":33231},[478,49115,33106],{"class":770},[478,49117,49118],{"class":480,"line":33237},[478,49119,33112],{"class":714},[478,49121,49122],{"class":480,"line":33246},[478,49123,33118],{"class":770},[478,49125,49126],{"class":480,"line":33252},[478,49127,33124],{"class":714},[478,49129,49130],{"class":480,"line":33258},[478,49131,33130],{"class":770},[478,49133,49134,49136,49138,49140,49142,49144,49146],{"class":480,"line":33267},[478,49135,33136],{"class":714},[478,49137,10043],{"class":710},[478,49139,33141],{"class":714},[478,49141,1155],{"class":710},[478,49143,33146],{"class":714},[478,49145,895],{"class":495},[478,49147,720],{"class":714},[478,49149,49150],{"class":480,"line":33273},[478,49151,33156],{"class":770},[478,49153,49154,49156,49158,49160,49162],{"class":480,"line":33284},[478,49155,33162],{"class":714},[478,49157,10043],{"class":710},[478,49159,33167],{"class":714},[478,49161,3515],{"class":710},[478,49163,33172],{"class":714},[478,49165,49166],{"class":480,"line":33290},[478,49167,33178],{"class":770},[478,49169,49170,49172,49174,49176,49178],{"class":480,"line":33309},[478,49171,33184],{"class":714},[478,49173,10043],{"class":710},[478,49175,33146],{"class":714},[478,49177,895],{"class":495},[478,49179,720],{"class":714},[478,49181,49182],{"class":480,"line":33315},[478,49183,33198],{"class":770},[478,49185,49186,49188,49190,49192,49194],{"class":480,"line":33326},[478,49187,3969],{"class":710},[478,49189,33206],{"class":714},[478,49191,26423],{"class":710},[478,49193,31986],{"class":495},[478,49195,33213],{"class":714},[478,49197,49198],{"class":480,"line":33332},[478,49199,33219],{"class":770},[478,49201,49202,49204,49206],{"class":480,"line":33352},[478,49203,32990],{"class":714},[478,49205,759],{"class":710},[478,49207,32995],{"class":714},[478,49209,49210],{"class":480,"line":33368},[478,49211,33234],{"class":770},[478,49213,49214,49216,49218],{"class":480,"line":33374},[478,49215,33005],{"class":714},[478,49217,759],{"class":710},[478,49219,33010],{"class":714},[478,49221,49222],{"class":480,"line":33388},[478,49223,33249],{"class":770},[478,49225,49226],{"class":480,"line":33394},[478,49227,33255],{"class":714},[478,49229,49230],{"class":480,"line":33400},[478,49231,36736],{"class":770},[478,49233,49234,49236],{"class":480,"line":33411},[478,49235,33261],{"class":710},[478,49237,33264],{"class":714},[478,49239,49240],{"class":480,"line":33417},[478,49241,33270],{"class":770},[478,49243,49244,49246,49248],{"class":480,"line":33423},[478,49245,36751],{"class":714},[478,49247,759],{"class":710},[478,49249,33045],{"class":714},[478,49251,49252],{"class":480,"line":33433},[478,49253,33287],{"class":770},[478,49255,49256,49258,49260,49262,49264,49266,49268],{"class":480,"line":33439},[478,49257,36764],{"class":714},[478,49259,759],{"class":710},[478,49261,33062],{"class":714},[478,49263,33065],{"class":5782},[478,49265,759],{"class":710},[478,49267,193],{"class":495},[478,49269,720],{"class":714},[478,49271,49272],{"class":480,"line":33450},[478,49273,33312],{"class":770},[478,49275,49276,49278,49280],{"class":480,"line":33456},[478,49277,36785],{"class":714},[478,49279,759],{"class":710},[478,49281,33088],{"class":714},[478,49283,49284],{"class":480,"line":33466},[478,49285,33329],{"class":770},[478,49287,49288,49290,49292,49294,49296,49298,49300],{"class":480,"line":33471},[478,49289,36798],{"class":714},[478,49291,10043],{"class":710},[478,49293,36803],{"class":714},[478,49295,1155],{"class":710},[478,49297,33146],{"class":714},[478,49299,895],{"class":495},[478,49301,720],{"class":714},[478,49303,49304,49306,49308,49310,49312],{"class":480,"line":33477},[478,49305,36816],{"class":714},[478,49307,10043],{"class":710},[478,49309,33167],{"class":714},[478,49311,3515],{"class":710},[478,49313,33172],{"class":714},[478,49315,49316],{"class":480,"line":33526},[478,49317,36829],{"class":770},[478,49319,49320,49322,49324,49326,49328],{"class":480,"line":33573},[478,49321,36834],{"class":714},[478,49323,10043],{"class":710},[478,49325,33146],{"class":714},[478,49327,895],{"class":495},[478,49329,720],{"class":714},[478,49331,49332],{"class":480,"line":33578},[478,49333,33391],{"class":770},[478,49335,49336],{"class":480,"line":33584},[478,49337,33397],{"class":770},[478,49339,49340,49342,49344],{"class":480,"line":33603},[478,49341,33403],{"class":714},[478,49343,1284],{"class":710},[478,49345,33408],{"class":714},[478,49347,49348],{"class":480,"line":33609},[478,49349,33414],{"class":770},[478,49351,49352],{"class":480,"line":33629},[478,49353,33420],{"class":770},[478,49355,49356,49358,49360],{"class":480,"line":33635},[478,49357,33426],{"class":714},[478,49359,1284],{"class":710},[478,49361,33408],{"class":714},[478,49363,49364],{"class":480,"line":33641},[478,49365,33436],{"class":770},[478,49367,49368,49370,49372],{"class":480,"line":33651},[478,49369,33442],{"class":714},[478,49371,1284],{"class":710},[478,49373,33447],{"class":714},[478,49375,49376],{"class":480,"line":33656},[478,49377,33453],{"class":770},[478,49379,49380,49382,49384],{"class":480,"line":33662},[478,49381,33459],{"class":714},[478,49383,1284],{"class":710},[478,49385,33447],{"class":714},[478,49387,49388],{"class":480,"line":33678},[478,49389,2966],{"emptyLinePlaceholder":640},[478,49391,49392],{"class":480,"line":33723},[478,49393,33474],{"class":770},[478,49395,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414,49416,49418,49420,49422,49424,49426,49428,49430,49432,49434],{"class":480,"line":33729},[478,49397,32831],{"class":495},[478,49399,263],{"class":714},[478,49401,4158],{"class":488},[478,49403,32839],{"class":495},[478,49405,33488],{"class":488},[478,49407,1591],{"class":495},[478,49409,33493],{"class":710},[478,49411,1641],{"class":495},[478,49413,33498],{"class":488},[478,49415,1591],{"class":495},[478,49417,33493],{"class":710},[478,49419,1641],{"class":495},[478,49421,4158],{"class":488},[478,49423,33509],{"class":714},[478,49425,1232],{"class":710},[478,49427,193],{"class":495},[478,49429,33516],{"class":714},[478,49431,1232],{"class":710},[478,49433,193],{"class":495},[478,49435,33523],{"class":714},[478,49437,49438,49440,49442,49444,49446,49448,49450,49452,49454,49456,49458,49460,49462,49464,49466,49468,49470,49472,49474,49476],{"class":480,"line":33735},[478,49439,32831],{"class":495},[478,49441,263],{"class":714},[478,49443,4158],{"class":488},[478,49445,32839],{"class":495},[478,49447,33537],{"class":488},[478,49449,1591],{"class":495},[478,49451,33493],{"class":710},[478,49453,1641],{"class":495},[478,49455,33546],{"class":488},[478,49457,1591],{"class":495},[478,49459,33493],{"class":710},[478,49461,1641],{"class":495},[478,49463,4158],{"class":488},[478,49465,33557],{"class":714},[478,49467,1232],{"class":710},[478,49469,193],{"class":495},[478,49471,33564],{"class":714},[478,49473,1232],{"class":710},[478,49475,193],{"class":495},[478,49477,33523],{"class":714},[478,49479,49480],{"class":480,"line":33741},[478,49481,2966],{"emptyLinePlaceholder":640},[478,49483,49484],{"class":480,"line":33752},[478,49485,33581],{"class":770},[478,49487,49488,49490,49492,49494,49496,49498,49500],{"class":480,"line":33758},[478,49489,3063],{"class":710},[478,49491,33589],{"class":714},[478,49493,1232],{"class":710},[478,49495,193],{"class":495},[478,49497,1635],{"class":714},[478,49499,1655],{"class":710},[478,49501,33600],{"class":714},[478,49503,49504],{"class":480,"line":33764},[478,49505,33606],{"class":770},[478,49507,49508,49510,49512,49514,49516,49518,49520],{"class":480,"line":33770},[478,49509,33612],{"class":714},[478,49511,753],{"class":495},[478,49513,759],{"class":710},[478,49515,33619],{"class":714},[478,49517,1232],{"class":710},[478,49519,193],{"class":495},[478,49521,33626],{"class":714},[478,49523,49524],{"class":480,"line":33788},[478,49525,33632],{"class":770},[478,49527,49528],{"class":480,"line":33802},[478,49529,33638],{"class":770},[478,49531,49532,49534,49536],{"class":480,"line":33811},[478,49533,33644],{"class":714},[478,49535,759],{"class":710},[478,49537,32694],{"class":714},[478,49539,49540],{"class":480,"line":33820},[478,49541,2966],{"emptyLinePlaceholder":640},[478,49543,49544],{"class":480,"line":33829},[478,49545,33659],{"class":770},[478,49547,49548,49550,49552,49554,49556],{"class":480,"line":33838},[478,49549,33665],{"class":714},[478,49551,759],{"class":710},[478,49553,33670],{"class":714},[478,49555,1232],{"class":710},[478,49557,33675],{"class":714},[478,49559,49560,49562,49564,49566,49568,49570,49572,49574,49576,49578,49580,49582,49584,49586,49588,49590,49592,49594],{"class":480,"line":33844},[478,49561,32831],{"class":495},[478,49563,263],{"class":714},[478,49565,33685],{"class":488},[478,49567,1591],{"class":495},[478,49569,33690],{"class":710},[478,49571,1641],{"class":495},[478,49573,1244],{"class":488},[478,49575,1591],{"class":495},[478,49577,33690],{"class":710},[478,49579,1641],{"class":495},[478,49581,33703],{"class":488},[478,49583,33706],{"class":714},[478,49585,33709],{"class":710},[478,49587,1602],{"class":495},[478,49589,33714],{"class":714},[478,49591,1029],{"class":710},[478,49593,1602],{"class":495},[478,49595,30877],{"class":714},[478,49597,49598],{"class":480,"line":33850},[478,49599,37113],{"class":770},[478,49601,49602],{"class":480,"line":33858},[478,49603,37118],{"class":770},[478,49605,49606,49608,49610],{"class":480,"line":33863},[478,49607,37123],{"class":714},[478,49609,33747],{"class":488},[478,49611,720],{"class":714},[478,49613,49614],{"class":480,"line":33869},[478,49615,33767],{"class":770},[478,49617,49618,49620,49622,49624,49626,49628],{"class":480,"line":33880},[478,49619,33773],{"class":714},[478,49621,759],{"class":710},[478,49623,33778],{"class":714},[478,49625,33781],{"class":5782},[478,49627,759],{"class":710},[478,49629,2114],{"class":714},[478,49631,49632,49634,49636,49638],{"class":480,"line":33886},[478,49633,33791],{"class":488},[478,49635,1554],{"class":714},[478,49637,33796],{"class":495},[478,49639,33799],{"class":714},[478,49641,49642,49644],{"class":480,"line":33906},[478,49643,33805],{"class":488},[478,49645,33808],{"class":714},[478,49647,49648,49650],{"class":480,"line":33912},[478,49649,33814],{"class":488},[478,49651,33817],{"class":714},[478,49653,49654,49656],{"class":480,"line":33918},[478,49655,33823],{"class":488},[478,49657,33826],{"class":714},[478,49659,49660,49662],{"class":480,"line":33924},[478,49661,33832],{"class":488},[478,49663,33835],{"class":714},[478,49665,49666],{"class":480,"line":33941},[478,49667,33841],{"class":714},[478,49669,49670],{"class":480,"line":33947},[478,49671,33847],{"class":770},[478,49673,49674,49676],{"class":480,"line":33953},[478,49675,4656],{"class":710},[478,49677,33855],{"class":714},[478,49679,49680],{"class":480,"line":33959},[478,49681,2966],{"emptyLinePlaceholder":640},[478,49683,49684],{"class":480,"line":33965},[478,49685,33866],{"class":770},[478,49687,49688,49690,49692],{"class":480,"line":33971},[478,49689,32327],{"class":710},[478,49691,33874],{"class":484},[478,49693,33877],{"class":714},[478,49695,49696],{"class":480,"line":33998},[478,49697,33883],{"class":770},[478,49699,49700,49702,49704,49706,49708,49710,49712,49714],{"class":480,"line":34022},[478,49701,33889],{"class":714},[478,49703,32073],{"class":5782},[478,49705,759],{"class":710},[478,49707,263],{"class":714},[478,49709,1198],{"class":495},[478,49711,1079],{"class":714},[478,49713,994],{"class":495},[478,49715,30877],{"class":714},[478,49717,49718],{"class":480,"line":34028},[478,49719,33909],{"class":770},[478,49721,49722],{"class":480,"line":34034},[478,49723,33915],{"class":770},[478,49725,49726],{"class":480,"line":34040},[478,49727,33921],{"class":770},[478,49729,49730,49732,49734,49736,49738,49740,49742],{"class":480,"line":34051},[478,49731,32107],{"class":714},[478,49733,193],{"class":495},[478,49735,1079],{"class":714},[478,49737,789],{"class":495},[478,49739,1079],{"class":714},[478,49741,193],{"class":495},[478,49743,720],{"class":714},[478,49745,49746],{"class":480,"line":34062},[478,49747,33944],{"class":770},[478,49749,49750],{"class":480,"line":34068},[478,49751,33950],{"class":770},[478,49753,49754],{"class":480,"line":34085},[478,49755,33956],{"class":770},[478,49757,49758],{"class":480,"line":34108},[478,49759,33962],{"class":770},[478,49761,49762],{"class":480,"line":34131},[478,49763,33968],{"class":770},[478,49765,49766,49768,49770,49772,49774,49776,49778,49780,49782],{"class":480,"line":34137},[478,49767,33974],{"class":714},[478,49769,33977],{"class":488},[478,49771,33980],{"class":714},[478,49773,33983],{"class":488},[478,49775,1079],{"class":714},[478,49777,33988],{"class":5782},[478,49779,759],{"class":710},[478,49781,33993],{"class":488},[478,49783,720],{"class":714},[478,49785,49786,49788,49790,49792,49794,49796,49798,49800,49802],{"class":480,"line":34142},[478,49787,33974],{"class":714},[478,49789,33977],{"class":488},[478,49791,34005],{"class":714},[478,49793,34008],{"class":488},[478,49795,1079],{"class":714},[478,49797,33988],{"class":5782},[478,49799,759],{"class":710},[478,49801,34017],{"class":488},[478,49803,720],{"class":714},[478,49805,49806],{"class":480,"line":34151},[478,49807,34025],{"class":770},[478,49809,49810],{"class":480,"line":34161},[478,49811,34031],{"class":714},[478,49813,49814],{"class":480,"line":34167},[478,49815,34037],{"class":770},[478,49817,49818,49820,49822],{"class":480,"line":34172},[478,49819,34043],{"class":714},[478,49821,34046],{"class":488},[478,49823,720],{"class":714},[478,49825,49826,49828,49830],{"class":480,"line":34178},[478,49827,34054],{"class":714},[478,49829,34057],{"class":488},[478,49831,720],{"class":714},[478,49833,49834],{"class":480,"line":34191},[478,49835,34065],{"class":770},[478,49837,49838,49840,49842,49844,49846,49848,49850],{"class":480,"line":34197},[478,49839,32107],{"class":714},[478,49841,193],{"class":495},[478,49843,1079],{"class":714},[478,49845,789],{"class":495},[478,49847,1079],{"class":714},[478,49849,789],{"class":495},[478,49851,720],{"class":714},[478,49853,49854,49856,49858,49860,49862,49864,49866,49868,49870],{"class":480,"line":34208},[478,49855,33974],{"class":714},[478,49857,33977],{"class":488},[478,49859,34092],{"class":714},[478,49861,33983],{"class":488},[478,49863,1079],{"class":714},[478,49865,33988],{"class":5782},[478,49867,759],{"class":710},[478,49869,34103],{"class":488},[478,49871,720],{"class":714},[478,49873,49874,49876,49878,49880,49882,49884,49886,49888,49890],{"class":480,"line":34219},[478,49875,33974],{"class":714},[478,49877,33977],{"class":488},[478,49879,34115],{"class":714},[478,49881,34008],{"class":488},[478,49883,1079],{"class":714},[478,49885,33988],{"class":5782},[478,49887,759],{"class":710},[478,49889,34126],{"class":488},[478,49891,720],{"class":714},[478,49893,49894],{"class":480,"line":34238},[478,49895,34134],{"class":770},[478,49897,49899],{"class":480,"line":49898},219,[478,49900,34031],{"class":714},[478,49902,49904,49906,49908],{"class":480,"line":49903},220,[478,49905,34043],{"class":714},[478,49907,33977],{"class":488},[478,49909,720],{"class":714},[478,49911,49913,49915,49917],{"class":480,"line":49912},221,[478,49914,34054],{"class":714},[478,49916,34156],{"class":488},[478,49918,720],{"class":714},[478,49920,49922],{"class":480,"line":49921},222,[478,49923,34164],{"class":714},[478,49925,49927],{"class":480,"line":49926},223,[478,49928,2966],{"emptyLinePlaceholder":640},[478,49930,49932],{"class":480,"line":49931},224,[478,49933,34175],{"class":770},[478,49935,49937,49939,49941,49943,49945],{"class":480,"line":49936},225,[478,49938,2099],{"class":710},[478,49940,31600],{"class":495},[478,49942,3515],{"class":710},[478,49944,31605],{"class":488},[478,49946,4305],{"class":714},[478,49948,49950],{"class":480,"line":49949},226,[478,49951,34194],{"class":770},[478,49953,49955,49957,49959],{"class":480,"line":49954},227,[478,49956,44926],{"class":714},[478,49958,759],{"class":710},[478,49960,44931],{"class":714},[478,49962,49964,49966,49968],{"class":480,"line":49963},228,[478,49965,34211],{"class":714},[478,49967,759],{"class":710},[478,49969,34216],{"class":714},[478,49971,49973,49975,49977,49979,49981,49983,49985],{"class":480,"line":49972},229,[478,49974,33773],{"class":714},[478,49976,759],{"class":710},[478,49978,44948],{"class":714},[478,49980,34229],{"class":5782},[478,49982,759],{"class":710},[478,49984,1602],{"class":495},[478,49986,720],{"class":714},[478,49988,49990],{"class":480,"line":49989},230,[478,49991,34241],{"class":714},[22563,49993,49995],{"id":49994},"_242测试代码","2.4.2.测试代码",[19,49997,49998],{},"使用测试集进行测试与推理",[469,50000,50002],{"className":30758,"code":50001,"language":30760,"meta":54,"style":54},"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",[475,50003,50004,50010,50020,50030,50041,50051,50055,50059,50067,50072,50076,50093,50097,50101,50105,50109,50113,50145,50149,50157,50161,50173,50177,50181,50185,50189,50193,50197,50201,50205,50223,50237,50241,50251,50261,50271,50277,50281,50285,50293,50297,50313,50321,50325,50329,50337,50345,50349,50353,50357,50361,50367,50371,50381,50389,50397,50401,50405,50409,50417,50421,50437,50441,50445,50449,50461,50465,50477,50481,50485,50497,50501,50511,50515,50519,50531,50535,50543,50547,50551,50559,50563,50571,50575,50579,50583,50587,50591,50607,50615,50619,50623,50641,50647,50651,50661,50669,50677,50681,50685,50689,50693,50701,50705,50721,50725,50733,50741],{"__ignoreMap":54},[478,50005,50006,50008],{"class":480,"line":481},[478,50007,30772],{"class":710},[478,50009,30775],{"class":714},[478,50011,50012,50014,50016,50018],{"class":480,"line":565},[478,50013,30772],{"class":710},[478,50015,31795],{"class":714},[478,50017,31763],{"class":710},[478,50019,31800],{"class":714},[478,50021,50022,50024,50026,50028],{"class":480,"line":579},[478,50023,31117],{"class":710},[478,50025,31778],{"class":714},[478,50027,30772],{"class":710},[478,50029,31783],{"class":714},[478,50031,50032,50034,50036,50038],{"class":480,"line":593},[478,50033,31117],{"class":710},[478,50035,31748],{"class":714},[478,50037,30772],{"class":710},[478,50039,50040],{"class":714}," ImageFolder\n",[478,50042,50043,50045,50047,50049],{"class":480,"line":1769},[478,50044,31117],{"class":710},[478,50046,32294],{"class":714},[478,50048,30772],{"class":710},[478,50050,45020],{"class":714},[478,50052,50053],{"class":480,"line":1783},[478,50054,2966],{"emptyLinePlaceholder":640},[478,50056,50057],{"class":480,"line":1789},[478,50058,34331],{"class":770},[478,50060,50061,50063,50065],{"class":480,"line":1880},[478,50062,32327],{"class":710},[478,50064,34338],{"class":484},[478,50066,32333],{"class":714},[478,50068,50069],{"class":480,"line":1886},[478,50070,50071],{"class":770},"   # 导入自己的数据集，并进行数据处理\n",[478,50073,50074],{"class":480,"line":1898},[478,50075,48341],{"class":770},[478,50077,50078,50080,50082,50084,50086,50088,50091],{"class":480,"line":2180},[478,50079,48346],{"class":495},[478,50081,759],{"class":710},[478,50083,1367],{"class":710},[478,50085,952],{"class":488},[478,50087,1258],{"class":495},[478,50089,50090],{"class":48357},"\u002Fdata\u002Ftest",[478,50092,25513],{"class":488},[478,50094,50095],{"class":480,"line":2185},[478,50096,2966],{"emptyLinePlaceholder":640},[478,50098,50099],{"class":480,"line":2191},[478,50100,48369],{"class":770},[478,50102,50103],{"class":480,"line":2196},[478,50104,48374],{"class":770},[478,50106,50107],{"class":480,"line":2210},[478,50108,48379],{"class":770},[478,50110,50111],{"class":480,"line":2215},[478,50112,48384],{"class":770},[478,50114,50115,50117,50119,50121,50123,50125,50127,50129,50131,50133,50135,50137,50139,50141,50143],{"class":480,"line":2221},[478,50116,48389],{"class":714},[478,50118,759],{"class":710},[478,50120,48394],{"class":714},[478,50122,48397],{"class":495},[478,50124,1079],{"class":714},[478,50126,48402],{"class":495},[478,50128,1079],{"class":714},[478,50130,48407],{"class":495},[478,50132,48410],{"class":714},[478,50134,48413],{"class":495},[478,50136,1079],{"class":714},[478,50138,48418],{"class":495},[478,50140,1079],{"class":714},[478,50142,48423],{"class":495},[478,50144,5223],{"class":714},[478,50146,50147],{"class":480,"line":2241},[478,50148,48430],{"class":770},[478,50150,50151,50153,50155],{"class":480,"line":2246},[478,50152,48435],{"class":714},[478,50154,759],{"class":710},[478,50156,48440],{"class":714},[478,50158,50159],{"class":480,"line":2260},[478,50160,48445],{"class":770},[478,50162,50163,50165,50167,50169,50171],{"class":480,"line":2265},[478,50164,48450],{"class":714},[478,50166,31881],{"class":495},[478,50168,1079],{"class":714},[478,50170,31881],{"class":495},[478,50172,43002],{"class":714},[478,50174,50175],{"class":480,"line":2294},[478,50176,48463],{"class":770},[478,50178,50179],{"class":480,"line":2299},[478,50180,48468],{"class":714},[478,50182,50183],{"class":480,"line":2316},[478,50184,48473],{"class":714},[478,50186,50187],{"class":480,"line":2321},[478,50188,48478],{"class":770},[478,50190,50191],{"class":480,"line":2326},[478,50192,48483],{"class":770},[478,50194,50195],{"class":480,"line":2331},[478,50196,2966],{"emptyLinePlaceholder":640},[478,50198,50199],{"class":480,"line":2345},[478,50200,48492],{"class":770},[478,50202,50203],{"class":480,"line":2350},[478,50204,48497],{"class":770},[478,50206,50207,50209,50211,50213,50215,50217,50219,50221],{"class":480,"line":3143},[478,50208,34345],{"class":714},[478,50210,759],{"class":710},[478,50212,48506],{"class":714},[478,50214,48509],{"class":495},[478,50216,1079],{"class":714},[478,50218,48514],{"class":5782},[478,50220,759],{"class":710},[478,50222,48519],{"class":714},[478,50224,50225,50227,50229,50231,50233,50235],{"class":480,"line":3157},[478,50226,34402],{"class":714},[478,50228,759],{"class":710},[478,50230,31914],{"class":714},[478,50232,31917],{"class":5782},[478,50234,759],{"class":710},[478,50236,34413],{"class":714},[478,50238,50239],{"class":480,"line":3165},[478,50240,34418],{"class":770},[478,50242,50243,50245,50247,50249],{"class":480,"line":3170},[478,50244,34423],{"class":5782},[478,50246,759],{"class":710},[478,50248,193],{"class":495},[478,50250,31846],{"class":714},[478,50252,50253,50255,50257,50259],{"class":480,"line":3176},[478,50254,34434],{"class":5782},[478,50256,759],{"class":710},[478,50258,31856],{"class":495},[478,50260,31846],{"class":714},[478,50262,50263,50265,50267,50269],{"class":480,"line":3182},[478,50264,34445],{"class":5782},[478,50266,759],{"class":710},[478,50268,895],{"class":495},[478,50270,720],{"class":714},[478,50272,50273,50275],{"class":480,"line":3187},[478,50274,4656],{"class":710},[478,50276,34458],{"class":714},[478,50278,50279],{"class":480,"line":8514},[478,50280,2966],{"emptyLinePlaceholder":640},[478,50282,50283],{"class":480,"line":8538},[478,50284,34467],{"class":770},[478,50286,50287,50289,50291],{"class":480,"line":8543},[478,50288,32327],{"class":710},[478,50290,34474],{"class":484},[478,50292,34477],{"class":714},[478,50294,50295],{"class":480,"line":8549},[478,50296,34482],{"class":770},[478,50298,50299,50301,50303,50305,50307,50309,50311],{"class":480,"line":8576},[478,50300,31617],{"class":714},[478,50302,759],{"class":710},[478,50304,31624],{"class":488},[478,50306,2271],{"class":710},[478,50308,31629],{"class":714},[478,50310,2268],{"class":710},[478,50312,34499],{"class":488},[478,50314,50315,50317,50319],{"class":480,"line":8581},[478,50316,31669],{"class":714},[478,50318,759],{"class":710},[478,50320,32669],{"class":714},[478,50322,50323],{"class":480,"line":8587},[478,50324,2966],{"emptyLinePlaceholder":640},[478,50326,50327],{"class":480,"line":8599},[478,50328,34516],{"class":770},[478,50330,50331,50333,50335],{"class":480,"line":8611},[478,50332,34521],{"class":714},[478,50334,759],{"class":710},[478,50336,32722],{"class":495},[478,50338,50339,50341,50343],{"class":480,"line":8623},[478,50340,34530],{"class":714},[478,50342,759],{"class":710},[478,50344,3651],{"class":495},[478,50346,50347],{"class":480,"line":10282},[478,50348,2966],{"emptyLinePlaceholder":640},[478,50350,50351],{"class":480,"line":10307},[478,50352,34543],{"class":770},[478,50354,50355],{"class":480,"line":10330},[478,50356,34548],{"class":770},[478,50358,50359],{"class":480,"line":10354},[478,50360,34553],{"class":770},[478,50362,50363,50365],{"class":480,"line":10359},[478,50364,34558],{"class":710},[478,50366,33264],{"class":714},[478,50368,50369],{"class":480,"line":10364},[478,50370,34565],{"class":770},[478,50372,50373,50375,50377,50379],{"class":480,"line":10369},[478,50374,3969],{"class":710},[478,50376,34572],{"class":714},[478,50378,26423],{"class":710},[478,50380,34577],{"class":714},[478,50382,50383,50385,50387],{"class":480,"line":10378},[478,50384,34582],{"class":714},[478,50386,759],{"class":710},[478,50388,34587],{"class":714},[478,50390,50391,50393,50395],{"class":480,"line":10383},[478,50392,34592],{"class":714},[478,50394,759],{"class":710},[478,50396,34597],{"class":714},[478,50398,50399],{"class":480,"line":10389},[478,50400,34602],{"class":770},[478,50402,50403],{"class":480,"line":10410},[478,50404,33255],{"class":714},[478,50406,50407],{"class":480,"line":10416},[478,50408,34611],{"class":770},[478,50410,50411,50413,50415],{"class":480,"line":10430},[478,50412,33040],{"class":714},[478,50414,759],{"class":710},[478,50416,34620],{"class":714},[478,50418,50419],{"class":480,"line":10436},[478,50420,34625],{"class":770},[478,50422,50423,50425,50427,50429,50431,50433,50435],{"class":480,"line":10463},[478,50424,33057],{"class":714},[478,50426,759],{"class":710},[478,50428,33062],{"class":714},[478,50430,33065],{"class":5782},[478,50432,759],{"class":710},[478,50434,193],{"class":495},[478,50436,720],{"class":714},[478,50438,50439],{"class":480,"line":10472},[478,50440,34646],{"class":770},[478,50442,50443],{"class":480,"line":10478},[478,50444,34651],{"class":770},[478,50446,50447],{"class":480,"line":10486},[478,50448,34656],{"class":770},[478,50450,50451,50453,50455,50457,50459],{"class":480,"line":10491},[478,50452,34661],{"class":714},[478,50454,10043],{"class":710},[478,50456,33167],{"class":714},[478,50458,3515],{"class":710},[478,50460,34670],{"class":714},[478,50462,50463],{"class":480,"line":17169},[478,50464,34675],{"class":770},[478,50466,50467,50469,50471,50473,50475],{"class":480,"line":17175},[478,50468,34680],{"class":714},[478,50470,10043],{"class":710},[478,50472,34685],{"class":714},[478,50474,895],{"class":495},[478,50476,720],{"class":714},[478,50478,50479],{"class":480,"line":17198},[478,50480,2966],{"emptyLinePlaceholder":640},[478,50482,50483],{"class":480,"line":17204},[478,50484,34698],{"class":770},[478,50486,50487,50489,50491,50493,50495],{"class":480,"line":17227},[478,50488,34703],{"class":714},[478,50490,759],{"class":710},[478,50492,34708],{"class":714},[478,50494,1284],{"class":710},[478,50496,34713],{"class":714},[478,50498,50499],{"class":480,"line":17241},[478,50500,34718],{"class":770},[478,50502,50503,50505,50507,50509],{"class":480,"line":17261},[478,50504,32831],{"class":495},[478,50506,263],{"class":714},[478,50508,34727],{"class":488},[478,50510,34730],{"class":714},[478,50512,50513],{"class":480,"line":17267},[478,50514,2966],{"emptyLinePlaceholder":640},[478,50516,50517],{"class":480,"line":17278},[478,50518,34739],{"class":770},[478,50520,50521,50523,50525,50527,50529],{"class":480,"line":17301},[478,50522,2099],{"class":710},[478,50524,31600],{"class":495},[478,50526,3515],{"class":710},[478,50528,31605],{"class":488},[478,50530,4305],{"class":714},[478,50532,50533],{"class":480,"line":17323},[478,50534,34756],{"class":770},[478,50536,50537,50539,50541],{"class":480,"line":17328},[478,50538,31669],{"class":714},[478,50540,759],{"class":710},[478,50542,44931],{"class":714},[478,50544,50545],{"class":480,"line":17334},[478,50546,34769],{"class":770},[478,50548,50549],{"class":480,"line":17348},[478,50550,34774],{"class":770},[478,50552,50553,50555,50557],{"class":480,"line":17361},[478,50554,34779],{"class":714},[478,50556,34782],{"class":488},[478,50558,30877],{"class":714},[478,50560,50561],{"class":480,"line":17366},[478,50562,34789],{"class":770},[478,50564,50565,50567,50569],{"class":480,"line":17380},[478,50566,34402],{"class":714},[478,50568,759],{"class":710},[478,50570,34798],{"class":714},[478,50572,50573],{"class":480,"line":17385},[478,50574,34803],{"class":770},[478,50576,50577],{"class":480,"line":17391},[478,50578,34808],{"class":714},[478,50580,50581],{"class":480,"line":17396},[478,50582,2966],{"emptyLinePlaceholder":640},[478,50584,50585],{"class":480,"line":17410},[478,50586,34817],{"class":770},[478,50588,50589],{"class":480,"line":17415},[478,50590,34822],{"class":770},[478,50592,50593,50595,50597,50599,50601,50603,50605],{"class":480,"line":17420},[478,50594,31617],{"class":714},[478,50596,759],{"class":710},[478,50598,31624],{"class":488},[478,50600,2271],{"class":710},[478,50602,31629],{"class":714},[478,50604,2268],{"class":710},[478,50606,34499],{"class":488},[478,50608,50609,50611,50613],{"class":480,"line":17434},[478,50610,31669],{"class":714},[478,50612,759],{"class":710},[478,50614,32669],{"class":714},[478,50616,50617],{"class":480,"line":17446},[478,50618,34851],{"class":770},[478,50620,50621],{"class":480,"line":17451},[478,50622,34856],{"class":770},[478,50624,50625,50627,50629,50631,50634,50636,50639],{"class":480,"line":17464},[478,50626,34861],{"class":714},[478,50628,759],{"class":710},[478,50630,1585],{"class":714},[478,50632,50633],{"class":488},"'猫'",[478,50635,1079],{"class":714},[478,50637,50638],{"class":488},"'狗'",[478,50640,33626],{"class":714},[478,50642,50643,50645],{"class":480,"line":17469},[478,50644,34558],{"class":710},[478,50646,33264],{"class":714},[478,50648,50649],{"class":480,"line":17474},[478,50650,34926],{"class":770},[478,50652,50653,50655,50657,50659],{"class":480,"line":17479},[478,50654,3969],{"class":710},[478,50656,34933],{"class":714},[478,50658,26423],{"class":710},[478,50660,34577],{"class":714},[478,50662,50663,50665,50667],{"class":480,"line":17492},[478,50664,32990],{"class":714},[478,50666,759],{"class":710},[478,50668,32995],{"class":714},[478,50670,50671,50673,50675],{"class":480,"line":17497},[478,50672,33005],{"class":714},[478,50674,759],{"class":710},[478,50676,33010],{"class":714},[478,50678,50679],{"class":480,"line":33013},[478,50680,2966],{"emptyLinePlaceholder":640},[478,50682,50683],{"class":480,"line":33019},[478,50684,34962],{"class":770},[478,50686,50687],{"class":480,"line":33025},[478,50688,33255],{"class":714},[478,50690,50691],{"class":480,"line":33031},[478,50692,34971],{"class":770},[478,50694,50695,50697,50699],{"class":480,"line":33037},[478,50696,33040],{"class":714},[478,50698,759],{"class":710},[478,50700,33045],{"class":714},[478,50702,50703],{"class":480,"line":33048},[478,50704,34984],{"class":770},[478,50706,50707,50709,50711,50713,50715,50717,50719],{"class":480,"line":33054},[478,50708,33057],{"class":714},[478,50710,759],{"class":710},[478,50712,33062],{"class":714},[478,50714,33065],{"class":5782},[478,50716,759],{"class":710},[478,50718,193],{"class":495},[478,50720,720],{"class":714},[478,50722,50723],{"class":480,"line":33074},[478,50724,35005],{"class":770},[478,50726,50727,50729,50731],{"class":480,"line":33080},[478,50728,35010],{"class":714},[478,50730,759],{"class":710},[478,50732,35015],{"class":714},[478,50734,50735,50737,50739],{"class":480,"line":33091},[478,50736,35020],{"class":714},[478,50738,759],{"class":710},[478,50740,35025],{"class":714},[478,50742,50743,50745,50747,50749,50751,50753,50755,50757],{"class":480,"line":33097},[478,50744,35030],{"class":495},[478,50746,263],{"class":714},[478,50748,35035],{"class":488},[478,50750,35038],{"class":714},[478,50752,35041],{"class":488},[478,50754,1079],{"class":714},[478,50756,35046],{"class":488},[478,50758,35049],{"class":714},[617,50760,50761],{},"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":54,"searchDepth":565,"depth":565,"links":50763},[50764,50765,50766,50767],{"id":30971,"depth":579,"text":30972},{"id":38219,"depth":579,"text":38220},{"id":41652,"depth":579,"text":41653},{"id":45661,"depth":579,"text":45662},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30963,"description":23942},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50774,"title":50775,"body":50776,"description":23942,"extension":638,"meta":50783,"navigation":640,"path":50784,"seo":50785,"stem":50786,"__hash__":50787},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50777,"toc":50781},[50778],[10,50779,50775],{"id":50780},"_3yolo模型学习",{"title":54,"searchDepth":565,"depth":565,"links":50782},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50775,"description":23942},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50789,"title":50790,"body":50791,"description":50798,"extension":638,"meta":50799,"navigation":640,"path":50801,"seo":50802,"stem":50803,"__hash__":50804},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50792,"toc":50796},[50793],[19,50794,50795],{},"yolo模型还未补充",{"title":54,"searchDepth":565,"depth":565,"links":50797},[],"深度学习学习",{"category":50800},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50790,"description":50798},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50806,"title":50807,"body":50808,"description":23942,"extension":638,"meta":50833,"navigation":640,"path":50834,"seo":50835,"stem":50836,"__hash__":50837},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50809,"toc":50831},[50810,50813,50816,50821,50828],[10,50811,50807],{"id":50812},"_1工具",[19,50814,50815],{},"提示错误插件：有问题会提前报错",[19,50817,50818],{},[52,50819],{"alt":54,"src":50820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50822,50823],{},[518,50824,50827],{"href":50825,"rel":50826},"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",[522],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50829,50830],{},"alt键加上下箭头可以实现语句的移动",{"title":54,"searchDepth":565,"depth":565,"links":50832},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50807,"description":23942},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50839,"title":50840,"body":50841,"description":23942,"extension":638,"meta":53705,"navigation":640,"path":53706,"seo":53707,"stem":53708,"__hash__":53709},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50842,"toc":53656},[50843,50846,50850,50854,50859,50862,50867,50871,50878,50883,50890,50895,50902,50907,50911,50916,50919,50923,50928,50932,50937,50940,50943,50946,50949,50952,50955,50958,50961,50966,50971,50976,50980,50983,50986,50990,50995,50998,51006,51011,51028,51036,51041,51046,51051,51056,51061,51064,51069,51074,51078,51087,51092,51097,51101,51106,51109,51113,51118,51126,51131,51136,51139,51144,51149,51154,51157,51160,51163,51168,51173,51176,51181,51184,51189,51192,51195,51198,51203,51206,51209,51224,51229,51234,51239,51242,51245,51248,51262,51265,51270,51275,51278,51281,51284,51287,51290,51293,51296,51300,51304,51309,51313,51316,51321,51326,51329,51334,51337,51341,51346,51349,51352,51355,51358,51361,51364,51367,51370,51373,51377,51382,51387,51392,51395,51398,51402,51407,51410,51414,51417,51420,51425,51428,51431,51435,51439,51442,51447,51452,51455,51484,51489,51494,51499,51504,51508,51513,51517,51522,51525,51529,51533,51538,51542,51547,51552,51556,51561,51564,51566,51569,51574,51578,51583,51587,51591,51596,51601,51606,51611,51615,51620,51625,51630,51633,51636,51641,51644,51649,51654,51659,51664,51668,52475,52479,52822,52827,52830,52833,52836,52839,52842,52845,52848,52851,52853,52856,52858,52861,52865,52870,52873,52876,52879,52883,52888,52893,52913,52916,52920,52925,52930,52947,52951,52980,52984,53006,53008,53047,53055,53061,53065,53068,53071,53076,53081,53084,53087,53090,53095,53100,53103,53106,53109,53112,53115,53118,53121,53124,53127,53130,53133,53135,53138,53141,53144,53147,53150,53153,53156,53159,53163,53168,53171,53176,53179,53182,53185,53188,53191,53194,53197,53199,53202,53205,53208,53211,53214,53217,53221,53224,53233,53236,53241,53244,53249,53252,53255,53258,53261,53264,53267,53270,53274,53278,53281,53284,53289,53294,53299,53303,53308,53313,53316,53319,53322,53325,53328,53333,53336,53341,53343,53348,53351,53355,53360,53363,53366,53371,53375,53378,53383,53386,53389,53418,53423,53426,53429,53432,53435,53438,53442,53445,53531,53535,53538,53543,53548,53555,53558,53561,53564,53567,53570,53575,53580,53583,53586,53589,53592,53595,53598,53601,53604,53607,53609,53612,53616,53621,53626,53631,53634,53639,53644,53647,53650,53653],[10,50844,50840],{"id":50845},"_2基础语法",[14,50847,50849],{"id":50848},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[129,50851,50853],{"id":50852},"_211-js组成","2.1.1 js组成",[29,50855,50856],{},[32,50857,50858],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50860,50861],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[29,50863,50864],{"start":565},[32,50865,50866],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[129,50868,50870],{"id":50869},"_212-js书写位置","2.1.2 js书写位置",[29,50872,50873],{},[32,50874,50875],{},[45,50876,50877],{},"内部 JavaScript",[19,50879,50880],{},[52,50881],{"alt":54,"src":50882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[29,50884,50885],{"start":565},[32,50886,50887],{},[45,50888,50889],{},"外部 JavaScript",[19,50891,50892],{},[52,50893],{"alt":54,"src":50894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[29,50896,50897],{"start":579},[32,50898,50899],{},[45,50900,50901],{},"内联 JavaScript",[19,50903,50904],{},[52,50905],{"alt":54,"src":50906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[129,50908,50910],{"id":50909},"_213-javascript注释","2.1.3 JavaScript注释",[19,50912,50913],{},[52,50914],{"alt":54,"src":50915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50917,50918],{},"alt+shift+a一定要记住！",[129,50920,50922],{"id":50921},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50924,50925],{},[52,50926],{"alt":54,"src":50927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[129,50929,50931],{"id":50930},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[29,50933,50934],{},[32,50935,50936],{},"输出语法：",[19,50938,50939],{},"①document.write('要出的内容')",[19,50941,50942],{},"向body内输出内容；",[19,50944,50945],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50947,50948],{},"②alert('要出的内容')",[19,50950,50951],{},"页面弹出警告对话框",[19,50953,50954],{},"③console.log('控制台打印')",[19,50956,50957],{},"控制台输出语法，程序员调试使用",[19,50959,50960],{},"输入log就行，自动生成：",[19,50962,50963],{},[52,50964],{"alt":54,"src":50965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[29,50967,50968],{"start":565},[32,50969,50970],{},"输入语法：",[19,50972,50973],{},[52,50974],{"alt":54,"src":50975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[129,50977,50979],{"id":50978},"_2116-字面量","21.1.6 字面量",[19,50981,50982],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50984,50985],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50987,50989],{"id":50988},"_22-变量","2.2 变量",[29,50991,50992],{},[32,50993,50994],{},"变量声明",[19,50996,50997],{},"let 变量名",[1702,50999,51000,51003],{},[32,51001,51002],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[32,51004,51005],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[29,51007,51008],{"start":565},[32,51009,51010],{},"变量赋值",[469,51012,51016],{"className":51013,"code":51014,"language":51015,"meta":54,"style":54},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[475,51017,51018,51023],{"__ignoreMap":54},[478,51019,51020],{"class":480,"line":481},[478,51021,51022],{"class":714},"let age\n",[478,51024,51025],{"class":480,"line":565},[478,51026,51027],{"class":714},"age=18\n",[29,51029,51030,51033],{"start":579},[32,51031,51032],{},"连这些（变量的初始化）：let age=18",[32,51034,51035],{},"更新变量",[19,51037,51038],{},[52,51039],{"alt":54,"src":51040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[29,51042,51043],{"start":1769},[32,51044,51045],{},"声明多个变量",[19,51047,51048],{},[52,51049],{"alt":54,"src":51050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[29,51052,51053],{"start":1783},[32,51054,51055],{},"变量命名规则与规范",[19,51057,51058],{},[52,51059],{"alt":54,"src":51060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51062,51063],{},"遵守小驼峰！",[29,51065,51066],{"start":1789},[32,51067,51068],{},"变量拓展-let和var的区别",[19,51070,51071],{},[52,51072],{"alt":54,"src":51073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51075,51077],{"id":51076},"_23-数组","2.3 数组",[469,51079,51081],{"className":51013,"code":51080,"language":51015,"meta":54,"style":54},"let arr = []\n",[475,51082,51083],{"__ignoreMap":54},[478,51084,51085],{"class":480,"line":481},[478,51086,51080],{"class":714},[19,51088,51089],{},[52,51090],{"alt":54,"src":51091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51093,51094],{},[52,51095],{"alt":54,"src":51096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51098,51100],{"id":51099},"_24-常量","2.4 常量",[19,51102,51103],{},[52,51104],{"alt":54,"src":51105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51107,51108],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51110,51112],{"id":51111},"_25-数据类型","2.5 数据类型",[19,51114,51115],{},[52,51116],{"alt":54,"src":51117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[29,51119,51120,51123],{},[32,51121,51122],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[32,51124,51125],{},"算数运算符：",[19,51127,51128],{},[52,51129],{"alt":54,"src":51130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[29,51132,51133],{"start":579},[32,51134,51135],{},"数字类型（Number）",[19,51137,51138],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51140,51141],{},[52,51142],{"alt":54,"src":51143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[29,51145,51146],{"start":593},[32,51147,51148],{},"字符串类型（string）",[19,51150,51151],{},[52,51152],{"alt":54,"src":51153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51155,51156],{},"反引号也是可以使用的",[19,51158,51159],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51161,51162],{},"例如：document.write(\"我今年\"+age+\"岁\")",[29,51164,51165],{"start":1769},[32,51166,51167],{},"模板字符串",[19,51169,51170],{},[52,51171],{"alt":54,"src":51172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51174,51175],{},"类似于python的字符串格式化",[29,51177,51178],{"start":1783},[32,51179,51180],{},"布尔类型",[19,51182,51183],{},"true 和 false",[29,51185,51186],{"start":1789},[32,51187,51188],{},"未定义类型（underfined）",[19,51190,51191],{},"表示没有赋值",[19,51193,51194],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51196,51197],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[29,51199,51200],{"start":1880},[32,51201,51202],{},"null（空类型）",[19,51204,51205],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51207,51208],{},"赋值了，但是内容为空",[469,51210,51212],{"className":51013,"code":51211,"language":51015,"meta":54,"style":54},"typeof null\n输出的是'object'，是一个对象数据类型\n",[475,51213,51214,51219],{"__ignoreMap":54},[478,51215,51216],{"class":480,"line":481},[478,51217,51218],{"class":714},"typeof null\n",[478,51220,51221],{"class":480,"line":565},[478,51222,51223],{"class":714},"输出的是'object'，是一个对象数据类型\n",[29,51225,51226],{"start":1886},[32,51227,51228],{},"控制台检测数据类型",[19,51230,51231],{},[52,51232],{"alt":54,"src":51233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[29,51235,51236],{"start":1898},[32,51237,51238],{},"类型转换",[19,51240,51241],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51243,51244],{},"转换方式：隐式转换和显示转换",[19,51246,51247],{},"①隐式转换",[1702,51249,51250,51253,51256,51259],{},[32,51251,51252],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[32,51254,51255],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[32,51257,51258],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[32,51260,51261],{},"任何数据和字符串相加结果都是字符串",[19,51263,51264],{},"②显示转换",[19,51266,51267],{},[52,51268],{"alt":54,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51271,51272],{},[52,51273],{"alt":54,"src":51274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51276,51277],{},"在输入的时候要用好隐式转换，简单写起来",[19,51279,51280],{},"let num = +prompt(’请输入数字：‘)",[19,51282,51283],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51285,51286],{},"console.log(parseInt('12.333px'))",[19,51288,51289],{},"输出为：12",[19,51291,51292],{},"console.log(parseInt('a'a'a12.333px'))",[19,51294,51295],{},"输出：NaN",[14,51297,51299],{"id":51298},"_26-运算符","2.6 运算符",[129,51301,51303],{"id":51302},"_261-赋值运算符","2.6.1 赋值运算符",[19,51305,51306],{},[52,51307],{"alt":54,"src":51308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[129,51310,51312],{"id":51311},"_262-一元运算符","2.6.2 一元运算符",[19,51314,51315],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51317,51318],{},[52,51319],{"alt":54,"src":51320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51322,51323],{},[52,51324],{"alt":54,"src":51325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51327,51328],{},"两者的区别：",[19,51330,51331],{},[52,51332],{"alt":54,"src":51333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51335,51336],{},"前置先自加；后置后加，代码执行完之后再加",[129,51338,51340],{"id":51339},"_263-比较运算符","2.6.3 比较运算符",[19,51342,51343],{},[52,51344],{"alt":54,"src":51345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51347,51348],{},"比较运算符也有隐式转换",[19,51350,51351],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51353,51354],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51356,51357],{},"要使用三等，开发的时候",[19,51359,51360],{},"NaN不等于任何人，包括它自己",[19,51362,51363],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51365,51366],{},"7\u002F10=0.7",[19,51368,51369],{},"最后：0.5+0.2=0.7",[19,51371,51372],{},"字符串比较，比较的是字符对应的ASCII码",[129,51374,51376],{"id":51375},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51378,51379],{},[52,51380],{"alt":54,"src":51381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51383,51384],{},[52,51385],{"alt":54,"src":51386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51388,51389],{},[52,51390],{"alt":54,"src":51391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51393,51394],{},"上述题目选D",[19,51396,51397],{},"与真2假1；或真1假2",[129,51399,51401],{"id":51400},"_265-运算符优先级","2.6.5 运算符优先级",[19,51403,51404],{},[52,51405],{"alt":54,"src":51406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51408,51409],{},"先算逻辑与，后算逻辑或",[14,51411,51413],{"id":51412},"_27-语句","2.7 语句",[19,51415,51416],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51418,51419],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51421,51422],{},[52,51423],{"alt":54,"src":51424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51426,51427],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51429,51430],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[129,51432,51434],{"id":51433},"_271-分支语句","2.7.1 分支语句",[22563,51436,51438],{"id":51437},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51440,51441],{},"if语句单行简单的话，可以不写{}，写在一行就行",[29,51443,51444],{},[32,51445,51446],{},"单分支语句",[19,51448,51449],{},[52,51450],{"alt":54,"src":51451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51453,51454],{},"除了0，所有数字都为真",[469,51456,51458],{"className":51013,"code":51457,"language":51015,"meta":54,"style":54},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[475,51459,51460,51465,51470,51475,51479],{"__ignoreMap":54},[478,51461,51462],{"class":480,"line":481},[478,51463,51464],{"class":714},"if（0) {\n",[478,51466,51467],{"class":480,"line":565},[478,51468,51469],{"class":714},"    let a=1\n",[478,51471,51472],{"class":480,"line":579},[478,51473,51474],{"class":714},"    alert(typeof a)\n",[478,51476,51477],{"class":480,"line":593},[478,51478,2133],{"class":714},[478,51480,51481],{"class":480,"line":1769},[478,51482,51483],{"class":714},"不输出，括号为假\n",[29,51485,51486],{"start":565},[32,51487,51488],{},"双分支语句",[19,51490,51491],{},[52,51492],{"alt":54,"src":51493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[29,51495,51496],{"start":579},[32,51497,51498],{},"多分支语句",[19,51500,51501],{},[52,51502],{"alt":54,"src":51503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22563,51505,51507],{"id":51506},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51509,51510],{},[52,51511],{"alt":54,"src":51512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22563,51514,51516],{"id":51515},"_2713-switch语句","2.7.1.3 switch语句",[19,51518,51519],{},[52,51520],{"alt":54,"src":51521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51523,51524],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[129,51526,51528],{"id":51527},"_272-循环语句","2.7.2 循环语句",[22563,51530,51532],{"id":51531},"_2721-断点演示","2.7.2.1 断点演示",[19,51534,51535],{},[52,51536],{"alt":54,"src":51537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22563,51539,51541],{"id":51540},"_2722-while循环","2.7.2.2 while循环",[19,51543,51544],{},[52,51545],{"alt":54,"src":51546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51548,51549],{},[52,51550],{"alt":54,"src":51551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22563,51553,51555],{"id":51554},"_2723-for循环","2.7.2.3 for循环",[19,51557,51558],{},[52,51559],{"alt":54,"src":51560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51562,51563],{},"for(;;) {",[19,51565,1641],{},[19,51567,51568],{},"表示无限循环",[19,51570,51571],{},[52,51572],{"alt":54,"src":51573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22563,51575,51577],{"id":51576},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51579,51580],{},[52,51581],{"alt":54,"src":51582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51584,51586],{"id":51585},"_28-数组","2.8 数组",[129,51588,51590],{"id":51589},"_281-基础认识","2.8.1 基础认识",[19,51592,51593],{},[52,51594],{"alt":54,"src":51595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51597,51598],{},[52,51599],{"alt":54,"src":51600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51602,51603],{},[52,51604],{"alt":54,"src":51605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51607,51608],{},[52,51609],{"alt":54,"src":51610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[129,51612,51614],{"id":51613},"_282-操作数组","2.8.2 操作数组",[19,51616,51617],{},[52,51618],{"alt":54,"src":51619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[29,51621,51622],{},[32,51623,51624],{},"添加元素",[19,51626,51627],{},[52,51628],{"alt":54,"src":51629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51631,51632],{},"console.log(arr.push('green'))",[19,51634,51635],{},"输出结果：为新数组的长度",[19,51637,51638],{},[52,51639],{"alt":54,"src":51640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51642,51643],{},"push用的非常多，一定要记住",[29,51645,51646],{},[32,51647,51648],{},"删除元素",[19,51650,51651],{},[52,51652],{"alt":54,"src":51653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51655,51656],{},[52,51657],{"alt":54,"src":51658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51660,51661],{},[52,51662],{"alt":54,"src":51663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[129,51665,51667],{"id":51666},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[469,51669,51671],{"className":51013,"code":51670,"language":51015,"meta":54,"style":54},"\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",[475,51672,51673,51688,51704,51708,51717,51735,51759,51781,51795,51803,51810,51822,51833,51837,51841,51848,51860,51875,51888,51907,51924,51939,51951,51963,51975,51979,51983,51994,52004,52016,52028,52040,52051,52055,52059,52071,52075,52089,52093,52097,52108,52122,52134,52148,52152,52161,52170,52174,52183,52187,52196,52201,52206,52219,52247,52252,52257,52282,52287,52291,52296,52301,52316,52320,52325,52355,52367,52383,52399,52413,52418,52425,52429,52434,52447,52455,52463,52467],{"__ignoreMap":54},[478,51674,51675,51678,51682,51685],{"class":480,"line":481},[478,51676,51677],{"class":714},"\u003C!",[478,51679,51681],{"class":51680},"s9eBZ","DOCTYPE",[478,51683,51684],{"class":484}," html",[478,51686,51687],{"class":714},">\n",[478,51689,51690,51692,51694,51697,51699,51702],{"class":480,"line":565},[478,51691,1605],{"class":714},[478,51693,51015],{"class":51680},[478,51695,51696],{"class":484}," lang",[478,51698,759],{"class":714},[478,51700,51701],{"class":488},"\"en\"",[478,51703,51687],{"class":714},[478,51705,51706],{"class":480,"line":579},[478,51707,2966],{"emptyLinePlaceholder":640},[478,51709,51710,51712,51715],{"class":480,"line":593},[478,51711,1605],{"class":714},[478,51713,51714],{"class":51680},"head",[478,51716,51687],{"class":714},[478,51718,51719,51722,51725,51728,51730,51733],{"class":480,"line":1769},[478,51720,51721],{"class":714},"    \u003C",[478,51723,51724],{"class":51680},"meta",[478,51726,51727],{"class":484}," charset",[478,51729,759],{"class":714},[478,51731,51732],{"class":488},"\"UTF-8\"",[478,51734,51687],{"class":714},[478,51736,51737,51739,51741,51744,51746,51749,51752,51754,51757],{"class":480,"line":1783},[478,51738,51721],{"class":714},[478,51740,51724],{"class":51680},[478,51742,51743],{"class":484}," http-equiv",[478,51745,759],{"class":714},[478,51747,51748],{"class":488},"\"X-UA-Compatible\"",[478,51750,51751],{"class":484}," content",[478,51753,759],{"class":714},[478,51755,51756],{"class":488},"\"IE=edge\"",[478,51758,51687],{"class":714},[478,51760,51761,51763,51765,51767,51769,51772,51774,51776,51779],{"class":480,"line":1789},[478,51762,51721],{"class":714},[478,51764,51724],{"class":51680},[478,51766,15485],{"class":484},[478,51768,759],{"class":714},[478,51770,51771],{"class":488},"\"viewport\"",[478,51773,51751],{"class":484},[478,51775,759],{"class":714},[478,51777,51778],{"class":488},"\"width=device-width, initial-scale=1.0\"",[478,51780,51687],{"class":714},[478,51782,51783,51785,51788,51791,51793],{"class":480,"line":1880},[478,51784,51721],{"class":714},[478,51786,51787],{"class":51680},"title",[478,51789,51790],{"class":714},">Document\u003C\u002F",[478,51792,51787],{"class":51680},[478,51794,51687],{"class":714},[478,51796,51797,51799,51801],{"class":480,"line":1886},[478,51798,51721],{"class":714},[478,51800,617],{"class":51680},[478,51802,51687],{"class":714},[478,51804,51805,51808],{"class":480,"line":1898},[478,51806,51807],{"class":51680},"        *",[478,51809,16137],{"class":714},[478,51811,51812,51815,51818,51820],{"class":480,"line":2180},[478,51813,51814],{"class":495},"            margin",[478,51816,51817],{"class":714},": ",[478,51819,895],{"class":495},[478,51821,1859],{"class":714},[478,51823,51824,51827,51829,51831],{"class":480,"line":2185},[478,51825,51826],{"class":495},"            padding",[478,51828,51817],{"class":714},[478,51830,895],{"class":495},[478,51832,1859],{"class":714},[478,51834,51835],{"class":480,"line":2191},[478,51836,3095],{"class":714},[478,51838,51839],{"class":480,"line":2196},[478,51840,2966],{"emptyLinePlaceholder":640},[478,51842,51843,51846],{"class":480,"line":2210},[478,51844,51845],{"class":484},"        .box",[478,51847,16137],{"class":714},[478,51849,51850,51853,51855,51858],{"class":480,"line":2215},[478,51851,51852],{"class":495},"            display",[478,51854,51817],{"class":714},[478,51856,51857],{"class":495},"flex",[478,51859,1859],{"class":714},[478,51861,51862,51865,51867,51870,51873],{"class":480,"line":2221},[478,51863,51864],{"class":495},"            width",[478,51866,51817],{"class":714},[478,51868,51869],{"class":495},"700",[478,51871,51872],{"class":710},"px",[478,51874,1859],{"class":714},[478,51876,51877,51880,51882,51884,51886],{"class":480,"line":2241},[478,51878,51879],{"class":495},"            height",[478,51881,51817],{"class":714},[478,51883,4539],{"class":495},[478,51885,51872],{"class":710},[478,51887,1859],{"class":714},[478,51889,51890,51893,51895,51897,51899,51902,51905],{"class":480,"line":2246},[478,51891,51892],{"class":495},"            border-left",[478,51894,51817],{"class":714},[478,51896,193],{"class":495},[478,51898,51872],{"class":710},[478,51900,51901],{"class":495}," solid",[478,51903,51904],{"class":495}," pink",[478,51906,1859],{"class":714},[478,51908,51909,51912,51914,51916,51918,51920,51922],{"class":480,"line":2260},[478,51910,51911],{"class":495},"            border-bottom",[478,51913,51817],{"class":714},[478,51915,193],{"class":495},[478,51917,51872],{"class":710},[478,51919,51901],{"class":495},[478,51921,51904],{"class":495},[478,51923,1859],{"class":714},[478,51925,51926,51928,51930,51932,51934,51937],{"class":480,"line":2265},[478,51927,51814],{"class":495},[478,51929,51817],{"class":714},[478,51931,1354],{"class":495},[478,51933,51872],{"class":710},[478,51935,51936],{"class":495}," auto",[478,51938,1859],{"class":714},[478,51940,51941,51944,51946,51949],{"class":480,"line":2294},[478,51942,51943],{"class":495},"            justify-content",[478,51945,51817],{"class":714},[478,51947,51948],{"class":495},"space-around",[478,51950,1859],{"class":714},[478,51952,51953,51956,51958,51961],{"class":480,"line":2299},[478,51954,51955],{"class":495},"            align-items",[478,51957,51817],{"class":714},[478,51959,51960],{"class":495},"flex-end",[478,51962,1859],{"class":714},[478,51964,51965,51968,51970,51973],{"class":480,"line":2316},[478,51966,51967],{"class":495},"            text-align",[478,51969,51817],{"class":714},[478,51971,51972],{"class":495},"center",[478,51974,1859],{"class":714},[478,51976,51977],{"class":480,"line":2321},[478,51978,3095],{"class":714},[478,51980,51981],{"class":480,"line":2326},[478,51982,2966],{"emptyLinePlaceholder":640},[478,51984,51985,51987,51989,51992],{"class":480,"line":2331},[478,51986,51845],{"class":484},[478,51988,1655],{"class":710},[478,51990,51991],{"class":51680},"div",[478,51993,16137],{"class":714},[478,51995,51996,51998,52000,52002],{"class":480,"line":2345},[478,51997,51852],{"class":495},[478,51999,51817],{"class":714},[478,52001,51857],{"class":495},[478,52003,1859],{"class":714},[478,52005,52006,52008,52010,52012,52014],{"class":480,"line":2350},[478,52007,51864],{"class":495},[478,52009,51817],{"class":714},[478,52011,1354],{"class":495},[478,52013,51872],{"class":710},[478,52015,1859],{"class":714},[478,52017,52018,52021,52023,52026],{"class":480,"line":3143},[478,52019,52020],{"class":495},"            background-color",[478,52022,51817],{"class":714},[478,52024,52025],{"class":495},"pink",[478,52027,1859],{"class":714},[478,52029,52030,52033,52035,52038],{"class":480,"line":3157},[478,52031,52032],{"class":495},"            flex-direction",[478,52034,51817],{"class":714},[478,52036,52037],{"class":495},"column",[478,52039,1859],{"class":714},[478,52041,52042,52044,52046,52049],{"class":480,"line":3165},[478,52043,51943],{"class":495},[478,52045,51817],{"class":714},[478,52047,52048],{"class":495},"space-between",[478,52050,1859],{"class":714},[478,52052,52053],{"class":480,"line":3170},[478,52054,3095],{"class":714},[478,52056,52057],{"class":480,"line":3176},[478,52058,2966],{"emptyLinePlaceholder":640},[478,52060,52061,52063,52066,52069],{"class":480,"line":3182},[478,52062,51845],{"class":484},[478,52064,52065],{"class":51680}," div",[478,52067,52068],{"class":51680}," span",[478,52070,16137],{"class":714},[478,52072,52073],{"class":480,"line":3187},[478,52074,2966],{"emptyLinePlaceholder":640},[478,52076,52077,52080,52082,52085,52087],{"class":480,"line":8514},[478,52078,52079],{"class":495},"            margin-top",[478,52081,51817],{"class":714},[478,52083,52084],{"class":495},"-20",[478,52086,51872],{"class":710},[478,52088,1859],{"class":714},[478,52090,52091],{"class":480,"line":8538},[478,52092,3095],{"class":714},[478,52094,52095],{"class":480,"line":8543},[478,52096,2966],{"emptyLinePlaceholder":640},[478,52098,52099,52101,52103,52106],{"class":480,"line":8549},[478,52100,51845],{"class":484},[478,52102,52065],{"class":51680},[478,52104,52105],{"class":51680}," h4",[478,52107,16137],{"class":714},[478,52109,52110,52113,52115,52118,52120],{"class":480,"line":8576},[478,52111,52112],{"class":495},"            margin-bottom",[478,52114,51817],{"class":714},[478,52116,52117],{"class":495},"-35",[478,52119,51872],{"class":710},[478,52121,1859],{"class":714},[478,52123,52124,52126,52128,52130,52132],{"class":480,"line":8581},[478,52125,51864],{"class":495},[478,52127,51817],{"class":714},[478,52129,1057],{"class":495},[478,52131,51872],{"class":710},[478,52133,1859],{"class":714},[478,52135,52136,52139,52141,52144,52146],{"class":480,"line":8587},[478,52137,52138],{"class":495},"            margin-left",[478,52140,51817],{"class":714},[478,52142,52143],{"class":495},"-10",[478,52145,51872],{"class":710},[478,52147,1859],{"class":714},[478,52149,52150],{"class":480,"line":8599},[478,52151,3095],{"class":714},[478,52153,52154,52157,52159],{"class":480,"line":8611},[478,52155,52156],{"class":714},"    \u003C\u002F",[478,52158,617],{"class":51680},[478,52160,51687],{"class":714},[478,52162,52163,52166,52168],{"class":480,"line":8623},[478,52164,52165],{"class":714},"\u003C\u002F",[478,52167,51714],{"class":51680},[478,52169,51687],{"class":714},[478,52171,52172],{"class":480,"line":10282},[478,52173,2966],{"emptyLinePlaceholder":640},[478,52175,52176,52178,52181],{"class":480,"line":10307},[478,52177,1605],{"class":714},[478,52179,52180],{"class":51680},"body",[478,52182,51687],{"class":714},[478,52184,52185],{"class":480,"line":10330},[478,52186,2966],{"emptyLinePlaceholder":640},[478,52188,52189,52191,52194],{"class":480,"line":10354},[478,52190,51721],{"class":714},[478,52192,52193],{"class":51680},"script",[478,52195,51687],{"class":714},[478,52197,52198],{"class":480,"line":10359},[478,52199,52200],{"class":770},"        \u002F\u002F 1. 四次弹框效果\n",[478,52202,52203],{"class":480,"line":10364},[478,52204,52205],{"class":770},"        \u002F\u002F 声明一个新的数组\n",[478,52207,52208,52211,52214,52216],{"class":480,"line":10369},[478,52209,52210],{"class":710},"        let",[478,52212,52213],{"class":714}," arr ",[478,52215,759],{"class":710},[478,52217,52218],{"class":714}," []\n",[478,52220,52221,52223,52225,52228,52230,52232,52234,52236,52238,52241,52243,52245],{"class":480,"line":10378},[478,52222,3969],{"class":710},[478,52224,219],{"class":714},[478,52226,52227],{"class":710},"let",[478,52229,10004],{"class":714},[478,52231,759],{"class":710},[478,52233,25498],{"class":495},[478,52235,10011],{"class":714},[478,52237,2156],{"class":710},[478,52239,52240],{"class":495}," 4",[478,52242,3780],{"class":714},[478,52244,2858],{"class":710},[478,52246,13008],{"class":714},[478,52248,52249],{"class":480,"line":10383},[478,52250,52251],{"class":770},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[478,52253,52254],{"class":480,"line":10389},[478,52255,52256],{"class":770},"            \u002F\u002F arr.push(num)\n",[478,52258,52259,52262,52265,52267,52270,52272,52275,52277,52280],{"class":480,"line":10410},[478,52260,52261],{"class":714},"            arr.",[478,52263,52264],{"class":484},"push",[478,52266,263],{"class":714},[478,52268,52269],{"class":484},"prompt",[478,52271,263],{"class":714},[478,52273,52274],{"class":488},"`请输入第${",[478,52276,1141],{"class":714},[478,52278,52279],{"class":488},"}季度的数据:`",[478,52281,30877],{"class":714},[478,52283,52284],{"class":480,"line":10416},[478,52285,52286],{"class":770},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[478,52288,52289],{"class":480,"line":10430},[478,52290,3095],{"class":714},[478,52292,52293],{"class":480,"line":10436},[478,52294,52295],{"class":770},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[478,52297,52298],{"class":480,"line":10463},[478,52299,52300],{"class":770},"        \u002F\u002F 盒子开头\n",[478,52302,52303,52306,52309,52311,52314],{"class":480,"line":10472},[478,52304,52305],{"class":714},"        document.",[478,52307,52308],{"class":484},"write",[478,52310,263],{"class":714},[478,52312,52313],{"class":488},"` \u003Cdiv class=\"box\">`",[478,52315,720],{"class":714},[478,52317,52318],{"class":480,"line":10478},[478,52319,2966],{"emptyLinePlaceholder":640},[478,52321,52322],{"class":480,"line":10486},[478,52323,52324],{"class":770},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[478,52326,52327,52329,52331,52333,52335,52337,52339,52341,52343,52346,52349,52351,52353],{"class":480,"line":10491},[478,52328,3969],{"class":710},[478,52330,219],{"class":714},[478,52332,52227],{"class":710},[478,52334,10004],{"class":714},[478,52336,759],{"class":710},[478,52338,4659],{"class":495},[478,52340,10011],{"class":714},[478,52342,1605],{"class":710},[478,52344,52345],{"class":714}," arr.",[478,52347,52348],{"class":495},"length",[478,52350,3780],{"class":714},[478,52352,2858],{"class":710},[478,52354,13008],{"class":714},[478,52356,52357,52360,52362,52364],{"class":480,"line":17169},[478,52358,52359],{"class":714},"            document.",[478,52361,52308],{"class":484},[478,52363,263],{"class":714},[478,52365,52366],{"class":488},"`\n",[478,52368,52369,52372,52374,52376,52378,52380],{"class":480,"line":17175},[478,52370,52371],{"class":488},"              \u003Cdiv style=\"height: ${",[478,52373,4446],{"class":714},[478,52375,1585],{"class":488},[478,52377,1141],{"class":714},[478,52379,1635],{"class":488},[478,52381,52382],{"class":488},"}px;\">\n",[478,52384,52385,52388,52390,52392,52394,52396],{"class":480,"line":17198},[478,52386,52387],{"class":488},"                \u003Cspan>${",[478,52389,4446],{"class":714},[478,52391,1585],{"class":488},[478,52393,1141],{"class":714},[478,52395,1635],{"class":488},[478,52397,52398],{"class":488},"}\u003C\u002Fspan>\n",[478,52400,52401,52404,52406,52408,52410],{"class":480,"line":17204},[478,52402,52403],{"class":488},"                \u003Ch4>第${",[478,52405,1141],{"class":714},[478,52407,45946],{"class":710},[478,52409,25498],{"class":495},[478,52411,52412],{"class":488},"}季度\u003C\u002Fh4>\n",[478,52414,52415],{"class":480,"line":17227},[478,52416,52417],{"class":488},"              \u003C\u002Fdiv>          \n",[478,52419,52420,52423],{"class":480,"line":17241},[478,52421,52422],{"class":488},"            `",[478,52424,720],{"class":714},[478,52426,52427],{"class":480,"line":17261},[478,52428,3095],{"class":714},[478,52430,52431],{"class":480,"line":17267},[478,52432,52433],{"class":770},"        \u002F\u002F 盒子结尾\n",[478,52435,52436,52438,52440,52442,52445],{"class":480,"line":17278},[478,52437,52305],{"class":714},[478,52439,52308],{"class":484},[478,52441,263],{"class":714},[478,52443,52444],{"class":488},"` \u003C\u002Fdiv>`",[478,52446,720],{"class":714},[478,52448,52449,52451,52453],{"class":480,"line":17301},[478,52450,52156],{"class":714},[478,52452,52193],{"class":51680},[478,52454,51687],{"class":714},[478,52456,52457,52459,52461],{"class":480,"line":17323},[478,52458,52165],{"class":714},[478,52460,52180],{"class":51680},[478,52462,51687],{"class":714},[478,52464,52465],{"class":480,"line":17328},[478,52466,2966],{"emptyLinePlaceholder":640},[478,52468,52469,52471,52473],{"class":480,"line":17334},[478,52470,52165],{"class":714},[478,52472,51015],{"class":51680},[478,52474,51687],{"class":714},[129,52476,52478],{"id":52477},"_284-冒泡排序","2.8.4 冒泡排序",[469,52480,52482],{"className":51013,"code":52481,"language":51015,"meta":54,"style":54},"\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",[475,52483,52484,52494,52508,52512,52520,52535,52555,52567,52575,52579,52587,52595,52627,52660,52697,52702,52721,52726,52739,52754,52770,52774,52779,52783,52793,52802,52810,52814],{"__ignoreMap":54},[478,52485,52486,52488,52490,52492],{"class":480,"line":481},[478,52487,51677],{"class":714},[478,52489,51681],{"class":51680},[478,52491,51684],{"class":484},[478,52493,51687],{"class":714},[478,52495,52496,52498,52500,52502,52504,52506],{"class":480,"line":565},[478,52497,1605],{"class":714},[478,52499,51015],{"class":51680},[478,52501,51696],{"class":484},[478,52503,759],{"class":714},[478,52505,51701],{"class":488},[478,52507,51687],{"class":714},[478,52509,52510],{"class":480,"line":579},[478,52511,2966],{"emptyLinePlaceholder":640},[478,52513,52514,52516,52518],{"class":480,"line":593},[478,52515,1605],{"class":714},[478,52517,51714],{"class":51680},[478,52519,51687],{"class":714},[478,52521,52522,52525,52527,52529,52531,52533],{"class":480,"line":1769},[478,52523,52524],{"class":714},"  \u003C",[478,52526,51724],{"class":51680},[478,52528,51727],{"class":484},[478,52530,759],{"class":714},[478,52532,51732],{"class":488},[478,52534,51687],{"class":714},[478,52536,52537,52539,52541,52543,52545,52547,52549,52551,52553],{"class":480,"line":1783},[478,52538,52524],{"class":714},[478,52540,51724],{"class":51680},[478,52542,15485],{"class":484},[478,52544,759],{"class":714},[478,52546,51771],{"class":488},[478,52548,51751],{"class":484},[478,52550,759],{"class":714},[478,52552,51778],{"class":488},[478,52554,51687],{"class":714},[478,52556,52557,52559,52561,52563,52565],{"class":480,"line":1789},[478,52558,52524],{"class":714},[478,52560,51787],{"class":51680},[478,52562,51790],{"class":714},[478,52564,51787],{"class":51680},[478,52566,51687],{"class":714},[478,52568,52569,52571,52573],{"class":480,"line":1880},[478,52570,52165],{"class":714},[478,52572,51714],{"class":51680},[478,52574,51687],{"class":714},[478,52576,52577],{"class":480,"line":1886},[478,52578,2966],{"emptyLinePlaceholder":640},[478,52580,52581,52583,52585],{"class":480,"line":1898},[478,52582,1605],{"class":714},[478,52584,52180],{"class":51680},[478,52586,51687],{"class":714},[478,52588,52589,52591,52593],{"class":480,"line":2180},[478,52590,52524],{"class":714},[478,52592,52193],{"class":51680},[478,52594,51687],{"class":714},[478,52596,52597,52600,52602,52604,52607,52609,52611,52613,52615,52617,52619,52621,52623,52625],{"class":480,"line":2185},[478,52598,52599],{"class":710},"    let",[478,52601,52213],{"class":714},[478,52603,759],{"class":710},[478,52605,52606],{"class":714}," [",[478,52608,1020],{"class":495},[478,52610,13001],{"class":714},[478,52612,994],{"class":495},[478,52614,13001],{"class":714},[478,52616,783],{"class":495},[478,52618,13001],{"class":714},[478,52620,789],{"class":495},[478,52622,13001],{"class":714},[478,52624,193],{"class":495},[478,52626,33626],{"class":714},[478,52628,52629,52631,52633,52635,52637,52639,52641,52643,52645,52647,52649,52652,52654,52656,52658],{"class":480,"line":2191},[478,52630,3767],{"class":710},[478,52632,219],{"class":714},[478,52634,52227],{"class":710},[478,52636,10004],{"class":714},[478,52638,759],{"class":710},[478,52640,4659],{"class":495},[478,52642,10011],{"class":714},[478,52644,1605],{"class":710},[478,52646,52345],{"class":714},[478,52648,52348],{"class":495},[478,52650,52651],{"class":710}," -",[478,52653,25498],{"class":495},[478,52655,3780],{"class":714},[478,52657,2858],{"class":710},[478,52659,13008],{"class":714},[478,52661,52662,52665,52667,52669,52671,52673,52675,52677,52679,52681,52683,52685,52687,52689,52691,52693,52695],{"class":480,"line":2196},[478,52663,52664],{"class":710},"      for",[478,52666,219],{"class":714},[478,52668,52227],{"class":710},[478,52670,10066],{"class":714},[478,52672,759],{"class":710},[478,52674,4659],{"class":495},[478,52676,10073],{"class":714},[478,52678,1605],{"class":710},[478,52680,52345],{"class":714},[478,52682,52348],{"class":495},[478,52684,52651],{"class":710},[478,52686,10004],{"class":714},[478,52688,1232],{"class":710},[478,52690,25498],{"class":495},[478,52692,10080],{"class":714},[478,52694,2858],{"class":710},[478,52696,13008],{"class":714},[478,52698,52699],{"class":480,"line":2210},[478,52700,52701],{"class":770},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[478,52703,52704,52706,52709,52711,52714,52716,52718],{"class":480,"line":2215},[478,52705,3063],{"class":710},[478,52707,52708],{"class":714}," (arr[j] ",[478,52710,1655],{"class":710},[478,52712,52713],{"class":714}," arr[j ",[478,52715,1181],{"class":710},[478,52717,25498],{"class":495},[478,52719,52720],{"class":714},"]) {\n",[478,52722,52723],{"class":480,"line":2221},[478,52724,52725],{"class":770},"          \u002F\u002F 交换两个变量\n",[478,52727,52728,52731,52734,52736],{"class":480,"line":2241},[478,52729,52730],{"class":710},"          let",[478,52732,52733],{"class":714}," tmp ",[478,52735,759],{"class":710},[478,52737,52738],{"class":714}," arr[j]\n",[478,52740,52741,52744,52746,52748,52750,52752],{"class":480,"line":2246},[478,52742,52743],{"class":714},"          arr[j] ",[478,52745,759],{"class":710},[478,52747,52713],{"class":714},[478,52749,1181],{"class":710},[478,52751,25498],{"class":495},[478,52753,33626],{"class":714},[478,52755,52756,52759,52761,52763,52765,52767],{"class":480,"line":2260},[478,52757,52758],{"class":714},"          arr[j ",[478,52760,1181],{"class":710},[478,52762,25498],{"class":495},[478,52764,5009],{"class":714},[478,52766,759],{"class":710},[478,52768,52769],{"class":714}," tmp\n",[478,52771,52772],{"class":480,"line":2265},[478,52773,3095],{"class":714},[478,52775,52776],{"class":480,"line":2294},[478,52777,52778],{"class":714},"      }\n",[478,52780,52781],{"class":480,"line":2299},[478,52782,2753],{"class":714},[478,52784,52785,52788,52790],{"class":480,"line":2316},[478,52786,52787],{"class":714},"    document.",[478,52789,52308],{"class":484},[478,52791,52792],{"class":714},"(arr)\n",[478,52794,52795,52798,52800],{"class":480,"line":2321},[478,52796,52797],{"class":714},"  \u003C\u002F",[478,52799,52193],{"class":51680},[478,52801,51687],{"class":714},[478,52803,52804,52806,52808],{"class":480,"line":2326},[478,52805,52165],{"class":714},[478,52807,52180],{"class":51680},[478,52809,51687],{"class":714},[478,52811,52812],{"class":480,"line":2331},[478,52813,2966],{"emptyLinePlaceholder":640},[478,52815,52816,52818,52820],{"class":480,"line":2345},[478,52817,52165],{"class":714},[478,52819,51015],{"class":51680},[478,52821,51687],{"class":714},[19,52823,52824],{},[52,52825],{"alt":54,"src":52826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52828,52829],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52831,52832],{},"let arr = [4, 2, 5, 1, 3]",[19,52834,52835],{},"\u002F\u002F 1.升序排列写法",[19,52837,52838],{},"arr.sort(function (a, b) {",[19,52840,52841],{},"return a - b",[19,52843,52844],{},"})",[19,52846,52847],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52849,52850],{},"\u002F\u002F 降序排列写法",[19,52852,52838],{},[19,52854,52855],{},"return b - a",[19,52857,52844],{},[19,52859,52860],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52862,52864],{"id":52863},"_29-函数","2.9 函数",[19,52866,52867],{},[52,52868],{"alt":54,"src":52869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52871,52872],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52874,52875],{},"函数的声明用function",[19,52877,52878],{},"函数里边可以嵌套函数",[129,52880,52882],{"id":52881},"_291-函数传参","2.9.1 函数传参",[19,52884,52885],{},[52,52886],{"alt":54,"src":52887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52889,52890],{},[52,52891],{"alt":54,"src":52892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1702,52894,52895,52898,52901,52904,52907,52910],{},[32,52896,52897],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[32,52899,52900],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[32,52902,52903],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[32,52905,52906],{},"开发中尽量保持形参和实参个数一致",[32,52908,52909],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[32,52911,52912],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52914,52915],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[129,52917,52919],{"id":52918},"_292-函数的返回值","2.9.2 函数的返回值",[19,52921,52922],{},[52,52923],{"alt":54,"src":52924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52926,52927],{},[52,52928],{"alt":54,"src":52929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1702,52931,52932,52935,52938,52941,52944],{},[32,52933,52934],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[32,52936,52937],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[32,52939,52940],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[32,52942,52943],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[32,52945,52946],{},"断点调试:进入函数内部看执行过程F11",[129,52948,52950],{"id":52949},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[469,52952,52954],{"className":51013,"code":52953,"language":51015,"meta":54,"style":54},"    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",[475,52955,52956,52961,52966,52970,52975],{"__ignoreMap":54},[478,52957,52958],{"class":480,"line":481},[478,52959,52960],{"class":714},"    function fn(a, b) {\n",[478,52962,52963],{"class":480,"line":565},[478,52964,52965],{"class":714},"      console.log(a + b);\n",[478,52967,52968],{"class":480,"line":579},[478,52969,2753],{"class":714},[478,52971,52972],{"class":480,"line":593},[478,52973,52974],{"class":714},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[478,52976,52977],{"class":480,"line":1769},[478,52978,52979],{"class":714},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[129,52981,52983],{"id":52982},"_294-作用域","2.9.4 作用域",[1702,52985,52986,52992,52997,53000,53003],{},[32,52987,52988,52989],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[45,52990,52991],{},"作用域",[32,52993,52994],{},[45,52995,52996],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[32,52998,52999],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[32,53001,53002],{},"函数内部可以直接所使用全局变量",[32,53004,53005],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53007,15198],{},[469,53009,53011],{"className":51013,"code":53010,"language":51015,"meta":54,"style":54},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[475,53012,53013,53018,53023,53027,53032,53037,53042],{"__ignoreMap":54},[478,53014,53015],{"class":480,"line":481},[478,53016,53017],{"class":714},"    function fun() {\n",[478,53019,53020],{"class":480,"line":565},[478,53021,53022],{"class":714},"      num = 10\n",[478,53024,53025],{"class":480,"line":579},[478,53026,2753],{"class":714},[478,53028,53029],{"class":480,"line":593},[478,53030,53031],{"class":714},"    fun()\n",[478,53033,53034],{"class":480,"line":1769},[478,53035,53036],{"class":714},"    console.log(num)\n",[478,53038,53039],{"class":480,"line":1783},[478,53040,53041],{"class":714},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[478,53043,53044],{"class":480,"line":1789},[478,53045,53046],{"class":714},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1702,53048,53049,53052],{},[32,53050,53051],{},"函数内部的形参可以看做是局部变量",[32,53053,53054],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53056,53057,53058],{},"变量访问原则： ",[45,53059,53060],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[129,53062,53064],{"id":53063},"_295-匿名函数","2.9.5 匿名函数",[19,53066,53067],{},"函数可以分为具名函数和匿名函数",[19,53069,53070],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[29,53072,53073],{},[32,53074,53075],{},"函数表达式",[19,53077,53078],{},[52,53079],{"alt":54,"src":53080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53082,53083],{},"里边也可以写参数",[19,53085,53086],{},"具名函数调用位置可以随意调整；",[19,53088,53089],{},"匿名函数函数表达式形式只能在声明后才可以使用",[29,53091,53092],{"start":565},[32,53093,53094],{},"立即执行函数",[19,53096,53097],{},[52,53098],{"alt":54,"src":53099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53101,53102],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53104,53105],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53107,53108],{},"(function () {})();",[19,53110,53111],{},"不要落下最后的;",[19,53113,53114],{},"立即执行函数必须要加;",[19,53116,53117],{},"分号写前写后都没问题",[19,53119,53120],{},"写前：",[19,53122,53123],{},"(function() {})()",[19,53125,53126],{},";(function () {})();",[19,53128,53129],{},"写后:",[19,53131,53132],{},"(function() {})();",[19,53134,53108],{},[19,53136,53137],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53139,53140],{},"还有一种写法：",[19,53142,53143],{},"(function(){}());",[19,53145,53146],{},"或者:",[19,53148,53149],{},"!function(){}();",[19,53151,53152],{},"立即执行函数有时候也是可以加名字的：",[19,53154,53155],{},"(function flexible(window,document) {}(window,document));",[19,53157,53158],{},"省一些调用方法",[129,53160,53162],{"id":53161},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53164,53165],{},[52,53166],{"alt":54,"src":53167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53169,53170],{},"这样就不用非得给x,y初始化了",[19,53172,53173],{},[52,53174],{"alt":54,"src":53175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53177,53178],{},"代码执行时先看左边",[19,53180,53181],{},"例如：console.log(false && 3+5)",[19,53183,53184],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53186,53187],{},"&&都是真时，就返回最后一个真值",[19,53189,53190],{},"console.log(11 && 22)",[19,53192,53193],{},"输出22",[19,53195,53196],{},"逻辑与：遇真则真",[19,53198,15198],{},[19,53200,53201],{},"let age=1",[19,53203,53204],{},"console.log(11 || age++)",[19,53206,53207],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53209,53210],{},"console.log(11 || 22)",[19,53212,53213],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53215,53216],{},"||如果都是假的话，就取最后一个假的值了",[129,53218,53220],{"id":53219},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53222,53223],{},"显示转换：",[19,53225,53226,53229,53230],{},[45,53227,53228],{},"记忆","： ",[45,53231,53232],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53234,53235],{},"空字符串为假，其他字符串全为真",[19,53237,53238],{},[52,53239],{"alt":54,"src":53240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53242,53243],{},"隐式转换：",[19,53245,53246],{},[52,53247],{"alt":54,"src":53248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53250,53251],{},"隐式转换:",[19,53253,53254],{},"null+3=3",[19,53256,53257],{},"undefined+3=NaN",[19,53259,53260],{},"null==undefined 输出true,他两个都当0看",[19,53262,53263],{},"null===undefined 输出false",[19,53265,53266],{},"undefined做任何操作都是NaN",[19,53268,53269],{},"NaN不等于NaN，NaN表示计算错误",[14,53271,53273],{"id":53272},"_210-对象","2.10 对象",[129,53275,53277],{"id":53276},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53279,53280],{},"对象也是一种数据类型，里边的数据是无序的",[19,53282,53283],{},"对象由属性和方法组成",[19,53285,53286],{},[52,53287],{"alt":54,"src":53288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53290,53291],{},[52,53292],{"alt":54,"src":53293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53295,53296],{},[52,53297],{"alt":54,"src":53298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[129,53300,53302],{"id":53301},"_2102-对象属性","2.10.2 对象属性",[19,53304,53305],{},[52,53306],{"alt":54,"src":53307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[29,53309,53310],{},[32,53311,53312],{},"查询对象",[19,53314,53315],{},"对象名.属性 goods.uname",[19,53317,53318],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53320,53321],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53323,53324],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53326,53327],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[29,53329,53330],{"start":565},[32,53331,53332],{},"重新赋值",[19,53334,53335],{},"对象名.属性=新值",[29,53337,53338],{"start":579},[32,53339,53340],{},"增加新数据",[19,53342,53335],{},[29,53344,53345],{"start":593},[32,53346,53347],{},"删除对象中的属性",[19,53349,53350],{},"delete 对象名.属性",[129,53352,53354],{"id":53353},"_2103-对象方法","2.10.3 对象方法",[19,53356,53357],{},[52,53358],{"alt":54,"src":53359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53361,53362],{},"后边跟的是匿名函数",[19,53364,53365],{},"对象外面的叫函数；对象内部的叫方法",[19,53367,53368],{},[52,53369],{"alt":54,"src":53370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[129,53372,53374],{"id":53373},"_2104-遍历对象","2.10.4 遍历对象",[19,53376,53377],{},"理解为加括号的python字典遍历",[19,53379,53380],{},[52,53381],{"alt":54,"src":53382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53384,53385],{},"k是字符串类型",[19,53387,53388],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[469,53390,53392],{"className":51013,"code":53391,"language":51015,"meta":54,"style":54},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[475,53393,53394,53399,53404,53409,53414],{"__ignoreMap":54},[478,53395,53396],{"class":480,"line":481},[478,53397,53398],{"class":714},"   let arr = [1, 2, 3]\n",[478,53400,53401],{"class":480,"line":565},[478,53402,53403],{"class":714},"    for (let k in arr) {\n",[478,53405,53406],{"class":480,"line":579},[478,53407,53408],{"class":714},"      console.log(k)\n",[478,53410,53411],{"class":480,"line":593},[478,53412,53413],{"class":714},"      console.log(arr[k])\n",[478,53415,53416],{"class":480,"line":1769},[478,53417,2753],{"class":714},[19,53419,53420],{},[52,53421],{"alt":54,"src":53422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53424,53425],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53427,53428],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53430,53431],{},"for in 得到的k是属性名",[52193,53433,53434],{},"\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,53436,53437],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[129,53439,53441],{"id":53440},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53443,53444],{},"数组中放对象信息",[469,53446,53450],{"className":53447,"code":53448,"language":53449,"meta":54,"style":54},"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",[475,53451,53452,53460,53465,53470,53475,53480,53485,53490,53495,53500,53505,53510,53515,53519,53523],{"__ignoreMap":54},[478,53453,53454,53456,53458],{"class":480,"line":481},[478,53455,1605],{"class":714},[478,53457,52193],{"class":51680},[478,53459,51687],{"class":714},[478,53461,53462],{"class":480,"line":565},[478,53463,53464],{"class":714},"    let students = [\n",[478,53466,53467],{"class":480,"line":579},[478,53468,53469],{"class":714},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[478,53471,53472],{"class":480,"line":593},[478,53473,53474],{"class":714},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[478,53476,53477],{"class":480,"line":1769},[478,53478,53479],{"class":714},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[478,53481,53482],{"class":480,"line":1783},[478,53483,53484],{"class":714},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[478,53486,53487],{"class":480,"line":1789},[478,53488,53489],{"class":714},"    ]\n",[478,53491,53492],{"class":480,"line":1880},[478,53493,53494],{"class":714},"    for (let i = 0; i \u003C students.length; i++) {\n",[478,53496,53497],{"class":480,"line":1886},[478,53498,53499],{"class":714},"      for (let k in students[i]) {\n",[478,53501,53502],{"class":480,"line":1898},[478,53503,53504],{"class":714},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[478,53506,53507],{"class":480,"line":2180},[478,53508,53509],{"class":714},"        \u002F\u002F输出每个人的名字：\n",[478,53511,53512],{"class":480,"line":2185},[478,53513,53514],{"class":714},"        \u002F\u002Fconsole.log(students[i].name)\n",[478,53516,53517],{"class":480,"line":2191},[478,53518,52778],{"class":714},[478,53520,53521],{"class":480,"line":2196},[478,53522,2753],{"class":714},[478,53524,53525,53527,53529],{"class":480,"line":2210},[478,53526,52797],{"class":714},[478,53528,52193],{"class":51680},[478,53530,51687],{"class":714},[129,53532,53534],{"id":53533},"_2106-内置对象","2.10.6 内置对象",[19,53536,53537],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[29,53539,53540],{},[32,53541,53542],{},"数学对象Math",[19,53544,53545],{},[52,53546],{"alt":54,"src":53547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53549,53550],{},[518,53551,53554],{"href":53552,"rel":53553},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[522],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53556,53557],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53559,53560],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53562,53563],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53565,53566],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53568,53569],{},"null属于对象数据类型",[29,53571,53572],{"start":565},[32,53573,53574],{},"生成任意范围随机数",[19,53576,53577],{},[52,53578],{"alt":54,"src":53579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53581,53582],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53584,53585],{},"乘以几就取不到几",[19,53587,53588],{},"取数组中的随机元素：",[19,53590,53591],{},"let arr = ['red', 'green', 'blue']",[19,53593,53594],{},"let random = Math.floor(Math.random() * arr.length)",[19,53596,53597],{},"console.log(arr[random])",[19,53599,53600],{},"这个函数得到的是全闭区间",[19,53602,53603],{},"function getRandom(N, M) {",[19,53605,53606],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53608,1641],{},[19,53610,53611],{},"console.log(getRandom(4, 8))",[129,53613,53615],{"id":53614},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53617,53618],{},[52,53619],{"alt":54,"src":53620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53622,53623],{},[52,53624],{"alt":54,"src":53625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53627,53628],{},[52,53629],{"alt":54,"src":53630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53632,53633],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53635,53636],{},[52,53637],{"alt":54,"src":53638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53640,53641],{},[52,53642],{"alt":54,"src":53643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53645,53646],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53648,53649],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53651,53652],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[617,53654,53655],{},"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":54,"searchDepth":565,"depth":565,"links":53657},[53658,53666,53667,53668,53669,53670,53677,53681,53687,53696],{"id":50848,"depth":565,"text":50849,"children":53659},[53660,53661,53662,53663,53664,53665],{"id":50852,"depth":579,"text":50853},{"id":50869,"depth":579,"text":50870},{"id":50909,"depth":579,"text":50910},{"id":50921,"depth":579,"text":50922},{"id":50930,"depth":579,"text":50931},{"id":50978,"depth":579,"text":50979},{"id":50988,"depth":565,"text":50989},{"id":51076,"depth":565,"text":51077},{"id":51099,"depth":565,"text":51100},{"id":51111,"depth":565,"text":51112},{"id":51298,"depth":565,"text":51299,"children":53671},[53672,53673,53674,53675,53676],{"id":51302,"depth":579,"text":51303},{"id":51311,"depth":579,"text":51312},{"id":51339,"depth":579,"text":51340},{"id":51375,"depth":579,"text":51376},{"id":51400,"depth":579,"text":51401},{"id":51412,"depth":565,"text":51413,"children":53678},[53679,53680],{"id":51433,"depth":579,"text":51434},{"id":51527,"depth":579,"text":51528},{"id":51585,"depth":565,"text":51586,"children":53682},[53683,53684,53685,53686],{"id":51589,"depth":579,"text":51590},{"id":51613,"depth":579,"text":51614},{"id":51666,"depth":579,"text":51667},{"id":52477,"depth":579,"text":52478},{"id":52863,"depth":565,"text":52864,"children":53688},[53689,53690,53691,53692,53693,53694,53695],{"id":52881,"depth":579,"text":52882},{"id":52918,"depth":579,"text":52919},{"id":52949,"depth":579,"text":52950},{"id":52982,"depth":579,"text":52983},{"id":53063,"depth":579,"text":53064},{"id":53161,"depth":579,"text":53162},{"id":53219,"depth":579,"text":53220},{"id":53272,"depth":565,"text":53273,"children":53697},[53698,53699,53700,53701,53702,53703,53704],{"id":53276,"depth":579,"text":53277},{"id":53301,"depth":579,"text":53302},{"id":53353,"depth":579,"text":53354},{"id":53373,"depth":579,"text":53374},{"id":53440,"depth":579,"text":53441},{"id":53533,"depth":579,"text":53534},{"id":53614,"depth":579,"text":53615},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50840,"description":23942},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53711,"title":53712,"body":53713,"description":23942,"extension":638,"meta":77053,"navigation":640,"path":77054,"seo":77055,"stem":77056,"__hash__":77057},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53714,"toc":76993},[53715,53718,53721,53724,53729,53732,53735,53738,53742,53746,53752,53757,53765,53772,53775,53779,53784,53789,53794,53797,53800,53811,53814,53818,53821,53824,53829,53834,53839,53842,53845,53937,53940,53945,53948,53953,53956,53959,53964,53967,53972,53976,53979,53993,53997,54002,54005,54008,54012,54017,54020,54024,54028,54033,54037,54042,54045,54048,54051,54054,54057,54060,54065,54070,54098,54101,54104,54107,54112,54115,54118,54121,54124,54128,54157,54161,54166,54171,54174,54177,54180,54185,54300,54305,54310,54471,54476,54479,54483,54488,54493,54496,54499,54502,54505,54508,54511,54514,54517,54520,54523,54526,54529,54532,54535,54537,54540,54543,54546,54551,54555,54952,54955,54961,54965,54970,56252,56257,56260,56263,56266,56271,57467,57471,57477,57482,57485,57490,57495,57499,57503,57508,57511,57516,57519,57522,57526,58434,58437,58441,58662,58665,58668,58671,58897,58900,59124,59127,59131,59136,59139,59142,59370,59373,59406,59409,59413,59418,59422,59425,59428,59431,59434,59437,59440,59443,59448,60728,60732,60735,61828,61832,61835,61838,61841,61844,61848,61851,61854,61856,61864,63345,63349,63352,63355,63358,63567,63570,63574,63578,63583,63588,63591,63594,63599,63603,63608,63611,63720,63724,63729,63734,63737,63740,63744,63749,63754,63759,63762,63765,63776,63779,63784,63789,63792,63795,63868,63872,63877,63880,63882,63893,63897,63902,65228,65231,65234,65237,65239,65242,65245,65248,65251,65254,65257,65260,65263,65266,65269,65272,65275,65277,65279,65282,65286,66380,66383,66386,66402,66416,66419,66424,66430,66435,66439,66443,66448,66452,66457,66899,66904,66907,66911,66916,66919,66922,66926,66931,66935,66940,66945,66949,66954,66959,66962,66967,66972,66976,66981,66986,67090,67093,67097,67102,67468,67471,67474,67477,67480,67483,67486,67489,67492,68788,68792,68797,68802,68805,68808,68811,68814,68816,68821,68826,68829,68833,68838,68843,68848,68851,68854,68857,68860,68863,68868,68871,68875,68880,68885,68889,68894,68897,68902,68905,68908,68911,68914,68917,68922,68925,68928,68931,68934,68938,68943,68946,68950,68955,68958,68961,68965,68994,68997,69001,69005,69010,69014,69019,69022,69025,69028,69031,69034,69037,69040,69043,69046,69049,69052,69055,69058,69061,69065,69070,69075,69078,69082,69086,69091,69094,69098,69101,69104,69109,69114,69119,69124,69129,69132,69135,69140,69145,69149,69154,69157,69162,69165,69168,69171,69174,69179,69182,69191,69195,69200,69203,69206,69210,69213,69218,69222,69225,69231,69237,69241,69267,69270,70831,70834,71330,71333,71338,71343,71348,71352,71357,71362,71367,71371,71376,71379,71382,71385,71388,71392,71395,71400,71403,71408,71412,71417,71420,71425,71430,71435,71438,71441,71446,71451,71454,71457,71461,71464,71469,71472,71477,71480,71485,71490,71495,71498,71503,71568,71571,71582,71586,71591,71763,71767,71772,71775,71778,71781,71785,71796,71800,71803,71808,71813,71816,71819,71822,71825,71828,71830,71833,71836,71839,71844,71847,71852,71855,71859,71862,71865,71879,71883,71886,71941,71946,71949,71952,71957,71960,71964,71969,72099,72103,72108,72113,72194,72199,72203,72206,72211,72216,72222,72225,72228,72231,72235,72240,72243,72254,72258,72275,75322,75326,75329,75332,75335,75356,75360,75363,75371,75374,75379,75382,75385,75390,75395,75399,75420,75424,75429,75432,75435,75438,75441,75445,75450,75453,75457,75462,75465,75470,75473,75478,75481,75486,76689,76693,76698,76701,76706,76990],[10,53716,53712],{"id":53717},"_3web-apis",[19,53719,53720],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53722,53723],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53725,53726],{},[52,53727],{"alt":54,"src":53728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53730,53731],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53733,53734],{},"建议数组和对象使用 const 来声明",[19,53736,53737],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53739,53741],{"id":53740},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[129,53743,53745],{"id":53744},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53747,53748,53751],{},[475,53749,53750],{},"document"," = HTML 文件解析后的对象化表示；",[19,53753,53754,53756],{},[475,53755,53750],{}," ≠ HTML 文件本身",[19,53758,53759,53764],{},[45,53760,53761],{},[475,53762,53763],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53766,53767,53771],{},[45,53768,53769],{},[475,53770,53750],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53773,53774],{},"document实际上为window.document的简写",[129,53776,53778],{"id":53777},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53780,53781],{},[52,53782],{"alt":54,"src":53783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53785,53786],{},[52,53787],{"alt":54,"src":53788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53790,53791],{},[52,53792],{"alt":54,"src":53793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53795,53796],{},"console.dir()",[19,53798,53799],{},"dir用来打印对象",[1702,53801,53802,53805,53808],{},[32,53803,53804],{},"任何一个标签，都是一个对象",[32,53806,53807],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[32,53809,53810],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53812,53813],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[129,53815,53817],{"id":53816},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53819,53820],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53822,53823],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53825,53826],{},[45,53827,53828],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[29,53830,53831],{},[32,53832,53833],{},"利用CSS选择器来获取标签元素",[19,53835,53836],{},[52,53837],{"alt":54,"src":53838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53840,53841],{},"里边的选择器必须必须加引号！！！",[19,53843,53844],{},"只选择第一个元素",[469,53846,53848],{"className":53447,"code":53847,"language":53449,"meta":54,"style":54},"\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",[475,53849,53850,53858,53879,53898,53906,53911,53916,53921,53929],{"__ignoreMap":54},[478,53851,53852,53854,53856],{"class":480,"line":481},[478,53853,1605],{"class":714},[478,53855,52180],{"class":51680},[478,53857,51687],{"class":714},[478,53859,53860,53862,53864,53867,53869,53872,53875,53877],{"class":480,"line":565},[478,53861,52524],{"class":714},[478,53863,51991],{"class":51680},[478,53865,53866],{"class":484}," class",[478,53868,759],{"class":714},[478,53870,53871],{"class":488},"\"box\"",[478,53873,53874],{"class":714},">123\u003C\u002F",[478,53876,51991],{"class":51680},[478,53878,51687],{"class":714},[478,53880,53881,53883,53885,53887,53889,53891,53894,53896],{"class":480,"line":579},[478,53882,52524],{"class":714},[478,53884,51991],{"class":51680},[478,53886,53866],{"class":484},[478,53888,759],{"class":714},[478,53890,53871],{"class":488},[478,53892,53893],{"class":714},">456\u003C\u002F",[478,53895,51991],{"class":51680},[478,53897,51687],{"class":714},[478,53899,53900,53902,53904],{"class":480,"line":593},[478,53901,52524],{"class":714},[478,53903,52193],{"class":51680},[478,53905,51687],{"class":714},[478,53907,53908],{"class":480,"line":1769},[478,53909,53910],{"class":714},"    \u002F\u002F 1.获取匹配的第一个元素\n",[478,53912,53913],{"class":480,"line":1783},[478,53914,53915],{"class":714},"    const box = document.querySelector('div')\n",[478,53917,53918],{"class":480,"line":1789},[478,53919,53920],{"class":714},"    console.dir(box)\n",[478,53922,53923,53925,53927],{"class":480,"line":1880},[478,53924,52797],{"class":714},[478,53926,52193],{"class":51680},[478,53928,51687],{"class":714},[478,53930,53931,53933,53935],{"class":480,"line":1886},[478,53932,52165],{"class":714},[478,53934,52180],{"class":51680},[478,53936,51687],{"class":714},[19,53938,53939],{},"只选123，不选456",[19,53941,53942],{},[52,53943],{"alt":54,"src":53944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53946,53947],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53949,53950],{},[52,53951],{"alt":54,"src":53952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53954,53955],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53957,53958],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[29,53960,53961],{"start":565},[32,53962,53963],{},"其他方法来获取标签元素",[19,53965,53966],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53968,53969],{},[52,53970],{"alt":54,"src":53971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[129,53973,53975],{"id":53974},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53977,53978],{},"设置修改DOM元素内容有两种方式：",[1702,53980,53981,53984,53987,53990],{},[32,53982,53983],{},"元素.innerText=''",[32,53985,53986],{},"元素.innerHTML=''",[32,53988,53989],{},"不写字符串输出数字也是可以的",[32,53991,53992],{},"元素.innerHtml=1",[22563,53994,53996],{"id":53995},"_3131-innertext","3.1.3.1 innerText",[19,53998,53999],{},[52,54000],{"alt":54,"src":54001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54003,54004],{},"思路：实现了修改盒子中的内容！",[19,54006,54007],{},"它只显示纯文本，不解析标签",[22563,54009,54011],{"id":54010},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54013,54014],{},[52,54015],{"alt":54,"src":54016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54018,54019],{},"相比于innerText，他的强大之处在于可以解析标签",[129,54021,54023],{"id":54022},"_314-操作元素属性","3.1.4 操作元素属性",[22563,54025,54027],{"id":54026},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54029,54030],{},[52,54031],{"alt":54,"src":54032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22563,54034,54036],{"id":54035},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54038,54039],{},[52,54040],{"alt":54,"src":54041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54043,54044],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54046,54047],{},"div.style.backgroundColor = 'hotpink'",[19,54049,54050],{},"如果按照css的写法，-表示减，就会出错",[19,54052,54053],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54055,54056],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54058,54059],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54061,54062],{},[52,54063],{"alt":54,"src":54064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54066,54067],{},[52,54068],{"alt":54,"src":54069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[29,54071,54072,54075,54078,54081,54084,54087],{},[32,54073,54074],{},"className这个方式就是修改很多样式的时候来使用的！",[32,54076,54077],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[32,54079,54080],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[32,54082,54083],{},"className为属性名，如果还用class的话就导致与关键字冲突",[32,54085,54086],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[32,54088,54089,54090,54095],{},"解析标签的时候就变为了",[51991,54091],{"className":54092},[54093,54094],"nav","box",[54096,54097],"br",{},[19,54099,54100],{},"例子：",[51991,54102],{"className":54103},[54093],[52193,54105,54106],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54108,54109],{},[52,54110],{"alt":54,"src":54111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54113,54114],{},"追加和删除类名用classList",[19,54116,54117],{},"常用于类似于开关的操作",[19,54119,54120],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54122,54123],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22563,54125,54127],{"id":54126},"_3143-牢记点","3.1.4.3 牢记点",[29,54129,54130,54133,54136,54139,54142,54145,54148,54151,54154],{},[32,54131,54132],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[32,54134,54135],{},"使用style属性操作css时不要忘记引号",[32,54137,54138],{},"使用className或者classList时也不要忘记引号",[32,54140,54141],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[32,54143,54144],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[32,54146,54147],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[32,54149,54150],{},"若： let arr=['1','2',3] arr[0]=1",[32,54152,54153],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[32,54155,54156],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[129,54158,54160],{"id":54159},"_315-操作表单元素","3.1.5 操作表单元素",[29,54162,54163],{},[32,54164,54165],{},"天生的属性",[19,54167,54168],{},[52,54169],{"alt":54,"src":54170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54172,54173],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54175,54176],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54178,54179],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54181,54182],{},[52,54183],{"alt":54,"src":54184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[469,54186,54188],{"className":51013,"code":54187,"language":51015,"meta":54,"style":54},"在复选框中如果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",[475,54189,54190,54195,54227,54232,54237,54242,54247,54251,54256,54261,54278,54290,54295],{"__ignoreMap":54},[478,54191,54192],{"class":480,"line":481},[478,54193,54194],{"class":714},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[478,54196,54197,54199,54202,54205,54207,54210,54212,54214,54216,54218,54220,54222,54225],{"class":480,"line":565},[478,54198,1605],{"class":714},[478,54200,54201],{"class":51680},"input",[478,54203,54204],{"class":484}," type",[478,54206,759],{"class":714},[478,54208,54209],{"class":488},"\"checkbox\"",[478,54211,15485],{"class":484},[478,54213,759],{"class":714},[478,54215,8218],{"class":488},[478,54217,15524],{"class":484},[478,54219,759],{"class":714},[478,54221,8218],{"class":488},[478,54223,54224],{"class":484}," checked",[478,54226,51687],{"class":714},[478,54228,54229],{"class":480,"line":579},[478,54230,54231],{"class":714},"不选的话：\n",[478,54233,54234],{"class":480,"line":593},[478,54235,54236],{"class":714},"const input = document.querySelector('input')\n",[478,54238,54239],{"class":480,"line":1769},[478,54240,54241],{"class":714},"input.checked=false\n",[478,54243,54244],{"class":480,"line":1783},[478,54245,54246],{"class":714},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[478,54248,54249],{"class":480,"line":1789},[478,54250,2966],{"emptyLinePlaceholder":640},[478,54252,54253],{"class":480,"line":1880},[478,54254,54255],{"class":714},"禁用按钮：\n",[478,54257,54258],{"class":480,"line":1886},[478,54259,54260],{"class":714},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[478,54262,54263,54265,54268,54271,54274,54276],{"class":480,"line":1898},[478,54264,1605],{"class":714},[478,54266,54267],{"class":51680},"button",[478,54269,54270],{"class":484}," disabled",[478,54272,54273],{"class":714},">点击\u003C\u002F",[478,54275,54267],{"class":51680},[478,54277,51687],{"class":714},[478,54279,54280,54282,54284,54286,54288],{"class":480,"line":2180},[478,54281,1605],{"class":714},[478,54283,54267],{"class":51680},[478,54285,54273],{"class":714},[478,54287,54267],{"class":51680},[478,54289,51687],{"class":714},[478,54291,54292],{"class":480,"line":2185},[478,54293,54294],{"class":714},"const bt = document.querySelector('button')\n",[478,54296,54297],{"class":480,"line":2191},[478,54298,54299],{"class":714},"bt.disabled = false\n",[29,54301,54302],{"start":565},[32,54303,54304],{},"自定义属性",[19,54306,54307],{},[52,54308],{"alt":54,"src":54309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[469,54311,54313],{"className":53447,"code":54312,"language":53449,"meta":54,"style":54},"\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",[475,54314,54315,54323,54351,54370,54389,54408,54427,54435,54440,54445,54450,54455,54463],{"__ignoreMap":54},[478,54316,54317,54319,54321],{"class":480,"line":481},[478,54318,1605],{"class":714},[478,54320,52180],{"class":51680},[478,54322,51687],{"class":714},[478,54324,54325,54327,54329,54332,54334,54336,54339,54341,54344,54347,54349],{"class":480,"line":565},[478,54326,52524],{"class":714},[478,54328,51991],{"class":51680},[478,54330,54331],{"class":484}," data-id",[478,54333,759],{"class":714},[478,54335,4244],{"class":488},[478,54337,54338],{"class":484}," data-spm",[478,54340,759],{"class":714},[478,54342,54343],{"class":488},"\"我不知道\"",[478,54345,54346],{"class":714},">1\u003C\u002F",[478,54348,51991],{"class":51680},[478,54350,51687],{"class":714},[478,54352,54353,54355,54357,54359,54361,54363,54366,54368],{"class":480,"line":579},[478,54354,52524],{"class":714},[478,54356,51991],{"class":51680},[478,54358,54331],{"class":484},[478,54360,759],{"class":714},[478,54362,4267],{"class":488},[478,54364,54365],{"class":714},">2\u003C\u002F",[478,54367,51991],{"class":51680},[478,54369,51687],{"class":714},[478,54371,54372,54374,54376,54378,54380,54382,54385,54387],{"class":480,"line":593},[478,54373,52524],{"class":714},[478,54375,51991],{"class":51680},[478,54377,54331],{"class":484},[478,54379,759],{"class":714},[478,54381,4280],{"class":488},[478,54383,54384],{"class":714},">3\u003C\u002F",[478,54386,51991],{"class":51680},[478,54388,51687],{"class":714},[478,54390,54391,54393,54395,54397,54399,54401,54404,54406],{"class":480,"line":1769},[478,54392,52524],{"class":714},[478,54394,51991],{"class":51680},[478,54396,54331],{"class":484},[478,54398,759],{"class":714},[478,54400,4293],{"class":488},[478,54402,54403],{"class":714},">4\u003C\u002F",[478,54405,51991],{"class":51680},[478,54407,51687],{"class":714},[478,54409,54410,54412,54414,54416,54418,54420,54423,54425],{"class":480,"line":1783},[478,54411,52524],{"class":714},[478,54413,51991],{"class":51680},[478,54415,54331],{"class":484},[478,54417,759],{"class":714},[478,54419,4314],{"class":488},[478,54421,54422],{"class":714},">5\u003C\u002F",[478,54424,51991],{"class":51680},[478,54426,51687],{"class":714},[478,54428,54429,54431,54433],{"class":480,"line":1789},[478,54430,52524],{"class":714},[478,54432,52193],{"class":51680},[478,54434,51687],{"class":714},[478,54436,54437],{"class":480,"line":1880},[478,54438,54439],{"class":714},"    const one = document.querySelector('div')\n",[478,54441,54442],{"class":480,"line":1886},[478,54443,54444],{"class":714},"    console.log(one.dataset)\n",[478,54446,54447],{"class":480,"line":1898},[478,54448,54449],{"class":714},"    console.log(one.dataset.id)\n",[478,54451,54452],{"class":480,"line":2180},[478,54453,54454],{"class":714},"    console.log(one.dataset.spm)\n",[478,54456,54457,54459,54461],{"class":480,"line":2185},[478,54458,52797],{"class":714},[478,54460,52193],{"class":51680},[478,54462,51687],{"class":714},[478,54464,54465,54467,54469],{"class":480,"line":2191},[478,54466,52165],{"class":714},[478,54468,52180],{"class":51680},[478,54470,51687],{"class":714},[19,54472,54473],{},[52,54474],{"alt":54,"src":54475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54477,54478],{},"document.querySelector选择的是第一个对象（元素）",[129,54480,54482],{"id":54481},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54484,54485],{},[52,54486],{"alt":54,"src":54487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54489,54490],{},[52,54491],{"alt":54,"src":54492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54494,54495],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52193,54497,54498],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54500,54501],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52193,54503,54504],{},"\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,54506,54507],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54509,54510],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54512,54513],{},"单位为毫秒！！！",[19,54515,54516],{},"可以搭配匿名函数来用！！！",[19,54518,54519],{},"setInterval(function () {",[19,54521,54522],{},"alert('两秒执行一次')",[19,54524,54525],{},"}, 2000)",[19,54527,54528],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54530,54531],{},"function fn() {",[19,54533,54534],{},"document.write(1)",[19,54536,1641],{},[19,54538,54539],{},"setInterval(fn, 1000)",[19,54541,54542],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54544,54545],{},"setInterval('fn()', 1000)",[19,54547,54548],{},[52,54549],{"alt":54,"src":54550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22563,54552,54554],{"id":54553},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[469,54556,54558],{"className":51013,"code":54557,"language":51015,"meta":54,"style":54},"\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",[475,54559,54560,54570,54584,54588,54596,54610,54630,54642,54650,54654,54662,54699,54704,54709,54714,54722,54730,54752,54760,54765,54787,54792,54797,54808,54813,54833,54841,54856,54871,54882,54887,54897,54907,54911,54920,54924,54932,54940,54944],{"__ignoreMap":54},[478,54561,54562,54564,54566,54568],{"class":480,"line":481},[478,54563,51677],{"class":714},[478,54565,51681],{"class":51680},[478,54567,51684],{"class":484},[478,54569,51687],{"class":714},[478,54571,54572,54574,54576,54578,54580,54582],{"class":480,"line":565},[478,54573,1605],{"class":714},[478,54575,51015],{"class":51680},[478,54577,51696],{"class":484},[478,54579,759],{"class":714},[478,54581,51701],{"class":488},[478,54583,51687],{"class":714},[478,54585,54586],{"class":480,"line":579},[478,54587,2966],{"emptyLinePlaceholder":640},[478,54589,54590,54592,54594],{"class":480,"line":593},[478,54591,1605],{"class":714},[478,54593,51714],{"class":51680},[478,54595,51687],{"class":714},[478,54597,54598,54600,54602,54604,54606,54608],{"class":480,"line":1769},[478,54599,52524],{"class":714},[478,54601,51724],{"class":51680},[478,54603,51727],{"class":484},[478,54605,759],{"class":714},[478,54607,51732],{"class":488},[478,54609,51687],{"class":714},[478,54611,54612,54614,54616,54618,54620,54622,54624,54626,54628],{"class":480,"line":1783},[478,54613,52524],{"class":714},[478,54615,51724],{"class":51680},[478,54617,15485],{"class":484},[478,54619,759],{"class":714},[478,54621,51771],{"class":488},[478,54623,51751],{"class":484},[478,54625,759],{"class":714},[478,54627,51778],{"class":488},[478,54629,51687],{"class":714},[478,54631,54632,54634,54636,54638,54640],{"class":480,"line":1789},[478,54633,52524],{"class":714},[478,54635,51787],{"class":51680},[478,54637,51790],{"class":714},[478,54639,51787],{"class":51680},[478,54641,51687],{"class":714},[478,54643,54644,54646,54648],{"class":480,"line":1880},[478,54645,52165],{"class":714},[478,54647,51714],{"class":51680},[478,54649,51687],{"class":714},[478,54651,54652],{"class":480,"line":1886},[478,54653,2966],{"emptyLinePlaceholder":640},[478,54655,54656,54658,54660],{"class":480,"line":1898},[478,54657,1605],{"class":714},[478,54659,52180],{"class":51680},[478,54661,51687],{"class":714},[478,54663,54664,54666,54669,54671,54673,54675,54677,54679,54681,54684,54686,54689,54692,54694,54697],{"class":480,"line":2180},[478,54665,52524],{"class":714},[478,54667,54668],{"class":51680},"textarea",[478,54670,15485],{"class":484},[478,54672,759],{"class":714},[478,54674,8218],{"class":488},[478,54676,15524],{"class":484},[478,54678,759],{"class":714},[478,54680,8218],{"class":488},[478,54682,54683],{"class":484}," cols",[478,54685,759],{"class":714},[478,54687,54688],{"class":488},"\"30\"",[478,54690,54691],{"class":484}," rows",[478,54693,759],{"class":714},[478,54695,54696],{"class":488},"\"10\"",[478,54698,51687],{"class":714},[478,54700,54701],{"class":480,"line":2185},[478,54702,54703],{"class":714},"        用户注册协议\n",[478,54705,54706],{"class":480,"line":2191},[478,54707,54708],{"class":714},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[478,54710,54711],{"class":480,"line":2196},[478,54712,54713],{"class":714},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[478,54715,54716,54718,54720],{"class":480,"line":2210},[478,54717,52156],{"class":714},[478,54719,54668],{"class":51680},[478,54721,51687],{"class":714},[478,54723,54724,54726,54728],{"class":480,"line":2215},[478,54725,52524],{"class":714},[478,54727,54096],{"class":51680},[478,54729,51687],{"class":714},[478,54731,54732,54734,54736,54738,54740,54743,54745,54748,54750],{"class":480,"line":2221},[478,54733,52524],{"class":714},[478,54735,54267],{"class":51680},[478,54737,53866],{"class":484},[478,54739,759],{"class":714},[478,54741,54742],{"class":488},"\"btn\"",[478,54744,54270],{"class":484},[478,54746,54747],{"class":714},">我已经阅读用户协议(5)\u003C\u002F",[478,54749,54267],{"class":51680},[478,54751,51687],{"class":714},[478,54753,54754,54756,54758],{"class":480,"line":2241},[478,54755,52524],{"class":714},[478,54757,52193],{"class":51680},[478,54759,51687],{"class":714},[478,54761,54762],{"class":480,"line":2246},[478,54763,54764],{"class":770},"    \u002F\u002F 1. 获取元素\n",[478,54766,54767,54769,54772,54774,54777,54780,54782,54785],{"class":480,"line":2260},[478,54768,11787],{"class":710},[478,54770,54771],{"class":495}," btn",[478,54773,14130],{"class":710},[478,54775,54776],{"class":714}," document.",[478,54778,54779],{"class":484},"querySelector",[478,54781,263],{"class":714},[478,54783,54784],{"class":488},"'.btn'",[478,54786,720],{"class":714},[478,54788,54789],{"class":480,"line":2265},[478,54790,54791],{"class":770},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[478,54793,54794],{"class":480,"line":2294},[478,54795,54796],{"class":770},"    \u002F\u002F 2. 倒计时\n",[478,54798,54799,54801,54803,54805],{"class":480,"line":2299},[478,54800,52599],{"class":710},[478,54802,10004],{"class":714},[478,54804,759],{"class":710},[478,54806,54807],{"class":495}," 5\n",[478,54809,54810],{"class":480,"line":2316},[478,54811,54812],{"class":770},"    \u002F\u002F 2.1 开启定时器\n",[478,54814,54815,54817,54820,54822,54825,54827,54830],{"class":480,"line":2321},[478,54816,52599],{"class":710},[478,54818,54819],{"class":714}," n ",[478,54821,759],{"class":710},[478,54823,54824],{"class":484}," setInterval",[478,54826,263],{"class":714},[478,54828,54829],{"class":710},"function",[478,54831,54832],{"class":714}," () {\n",[478,54834,54835,54838],{"class":480,"line":2326},[478,54836,54837],{"class":714},"      i",[478,54839,54840],{"class":710},"--\n",[478,54842,54843,54846,54848,54851,54853],{"class":480,"line":2331},[478,54844,54845],{"class":714},"      btn.innerHTML ",[478,54847,759],{"class":710},[478,54849,54850],{"class":488}," `我已经阅读用户协议(${",[478,54852,1141],{"class":714},[478,54854,54855],{"class":488},"})`\n",[478,54857,54858,54861,54864,54867,54869],{"class":480,"line":2345},[478,54859,54860],{"class":710},"      if",[478,54862,54863],{"class":714}," (i ",[478,54865,54866],{"class":710},"===",[478,54868,4659],{"class":495},[478,54870,13008],{"class":714},[478,54872,54873,54876,54879],{"class":480,"line":2350},[478,54874,54875],{"class":484},"        clearInterval",[478,54877,54878],{"class":714},"(n)  ",[478,54880,54881],{"class":770},"\u002F\u002F 关闭定时器\n",[478,54883,54884],{"class":480,"line":3143},[478,54885,54886],{"class":770},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[478,54888,54889,54892,54894],{"class":480,"line":3157},[478,54890,54891],{"class":714},"        btn.disabled ",[478,54893,759],{"class":710},[478,54895,54896],{"class":495}," false\n",[478,54898,54899,54902,54904],{"class":480,"line":3165},[478,54900,54901],{"class":714},"        btn.innerHTML ",[478,54903,759],{"class":710},[478,54905,54906],{"class":488}," '同意'\n",[478,54908,54909],{"class":480,"line":3170},[478,54910,52778],{"class":714},[478,54912,54913,54916,54918],{"class":480,"line":3176},[478,54914,54915],{"class":714},"    }, ",[478,54917,6976],{"class":495},[478,54919,720],{"class":714},[478,54921,54922],{"class":480,"line":3182},[478,54923,2966],{"emptyLinePlaceholder":640},[478,54925,54926,54928,54930],{"class":480,"line":3187},[478,54927,52797],{"class":714},[478,54929,52193],{"class":51680},[478,54931,51687],{"class":714},[478,54933,54934,54936,54938],{"class":480,"line":8514},[478,54935,52165],{"class":714},[478,54937,52180],{"class":51680},[478,54939,51687],{"class":714},[478,54941,54942],{"class":480,"line":8538},[478,54943,2966],{"emptyLinePlaceholder":640},[478,54945,54946,54948,54950],{"class":480,"line":8543},[478,54947,52165],{"class":714},[478,54949,51015],{"class":51680},[478,54951,51687],{"class":714},[19,54953,54954],{},"不要一直想着用死循环,避免死循环",[19,54956,54957,54960],{},[475,54958,54959],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22563,54962,54964],{"id":54963},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[29,54966,54967],{},[32,54968,54969],{},"法1",[469,54971,54973],{"className":51013,"code":54972,"language":51015,"meta":54,"style":54},"\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",[475,54974,54975,54985,54999,55003,55011,55025,55045,55057,55065,55071,55082,55093,55097,55101,55108,55120,55124,55128,55135,55147,55161,55174,55188,55192,55196,55203,55214,55225,55236,55248,55260,55272,55276,55280,55288,55298,55311,55323,55336,55340,55344,55351,55361,55373,55385,55396,55407,55417,55429,55441,55445,55449,55458,55470,55482,55510,55523,55527,55531,55538,55549,55553,55561,55569,55573,55581,55595,55610,55634,55642,55657,55670,55678,55699,55711,55723,55735,55747,55759,55771,55783,55792,55800,55808,55816,55828,55851,55870,55889,55908,55927,55946,55965,55985,55989,56009,56028,56048,56069,56080,56097,56107,56117,56127,56132,56137,56142,56147,56172,56185,56189,56212,56216,56224,56232,56240,56244],{"__ignoreMap":54},[478,54976,54977,54979,54981,54983],{"class":480,"line":481},[478,54978,51677],{"class":714},[478,54980,51681],{"class":51680},[478,54982,51684],{"class":484},[478,54984,51687],{"class":714},[478,54986,54987,54989,54991,54993,54995,54997],{"class":480,"line":565},[478,54988,1605],{"class":714},[478,54990,51015],{"class":51680},[478,54992,51696],{"class":484},[478,54994,759],{"class":714},[478,54996,51701],{"class":488},[478,54998,51687],{"class":714},[478,55000,55001],{"class":480,"line":579},[478,55002,2966],{"emptyLinePlaceholder":640},[478,55004,55005,55007,55009],{"class":480,"line":593},[478,55006,1605],{"class":714},[478,55008,51714],{"class":51680},[478,55010,51687],{"class":714},[478,55012,55013,55015,55017,55019,55021,55023],{"class":480,"line":1769},[478,55014,52524],{"class":714},[478,55016,51724],{"class":51680},[478,55018,51727],{"class":484},[478,55020,759],{"class":714},[478,55022,51732],{"class":488},[478,55024,51687],{"class":714},[478,55026,55027,55029,55031,55033,55035,55037,55039,55041,55043],{"class":480,"line":1783},[478,55028,52524],{"class":714},[478,55030,51724],{"class":51680},[478,55032,15485],{"class":484},[478,55034,759],{"class":714},[478,55036,51771],{"class":488},[478,55038,51751],{"class":484},[478,55040,759],{"class":714},[478,55042,51778],{"class":488},[478,55044,51687],{"class":714},[478,55046,55047,55049,55051,55053,55055],{"class":480,"line":1789},[478,55048,52524],{"class":714},[478,55050,51787],{"class":51680},[478,55052,51790],{"class":714},[478,55054,51787],{"class":51680},[478,55056,51687],{"class":714},[478,55058,55059,55061,55063],{"class":480,"line":1880},[478,55060,52524],{"class":714},[478,55062,617],{"class":51680},[478,55064,51687],{"class":714},[478,55066,55067,55069],{"class":480,"line":1886},[478,55068,6969],{"class":51680},[478,55070,16137],{"class":714},[478,55072,55073,55076,55078,55080],{"class":480,"line":1898},[478,55074,55075],{"class":495},"      padding",[478,55077,51817],{"class":714},[478,55079,895],{"class":495},[478,55081,1859],{"class":714},[478,55083,55084,55087,55089,55091],{"class":480,"line":2180},[478,55085,55086],{"class":495},"      margin",[478,55088,51817],{"class":714},[478,55090,895],{"class":495},[478,55092,1859],{"class":714},[478,55094,55095],{"class":480,"line":2185},[478,55096,2753],{"class":714},[478,55098,55099],{"class":480,"line":2191},[478,55100,2966],{"emptyLinePlaceholder":640},[478,55102,55103,55106],{"class":480,"line":2196},[478,55104,55105],{"class":51680},"    li",[478,55107,16137],{"class":714},[478,55109,55110,55113,55115,55118],{"class":480,"line":2210},[478,55111,55112],{"class":495},"      list-style",[478,55114,51817],{"class":714},[478,55116,55117],{"class":495},"none",[478,55119,1859],{"class":714},[478,55121,55122],{"class":480,"line":2215},[478,55123,2753],{"class":714},[478,55125,55126],{"class":480,"line":2221},[478,55127,2966],{"emptyLinePlaceholder":640},[478,55129,55130,55133],{"class":480,"line":2241},[478,55131,55132],{"class":484},"    .box",[478,55134,16137],{"class":714},[478,55136,55137,55140,55142,55145],{"class":480,"line":2246},[478,55138,55139],{"class":495},"      position",[478,55141,51817],{"class":714},[478,55143,55144],{"class":495},"relative",[478,55146,1859],{"class":714},[478,55148,55149,55152,55154,55157,55159],{"class":480,"line":2260},[478,55150,55151],{"class":495},"      width",[478,55153,51817],{"class":714},[478,55155,55156],{"class":495},"976",[478,55158,51872],{"class":710},[478,55160,1859],{"class":714},[478,55162,55163,55166,55168,55170,55172],{"class":480,"line":2265},[478,55164,55165],{"class":495},"      height",[478,55167,51817],{"class":714},[478,55169,2107],{"class":495},[478,55171,51872],{"class":710},[478,55173,1859],{"class":714},[478,55175,55176,55178,55180,55182,55184,55186],{"class":480,"line":2294},[478,55177,55086],{"class":495},[478,55179,51817],{"class":714},[478,55181,1012],{"class":495},[478,55183,51872],{"class":710},[478,55185,51936],{"class":495},[478,55187,1859],{"class":714},[478,55189,55190],{"class":480,"line":2299},[478,55191,2753],{"class":714},[478,55193,55194],{"class":480,"line":2316},[478,55195,2966],{"emptyLinePlaceholder":640},[478,55197,55198,55201],{"class":480,"line":2321},[478,55199,55200],{"class":484},"    .slider-footer",[478,55202,16137],{"class":714},[478,55204,55205,55207,55209,55212],{"class":480,"line":2326},[478,55206,55139],{"class":495},[478,55208,51817],{"class":714},[478,55210,55211],{"class":495},"absolute",[478,55213,1859],{"class":714},[478,55215,55216,55219,55221,55223],{"class":480,"line":2331},[478,55217,55218],{"class":495},"      left",[478,55220,51817],{"class":714},[478,55222,895],{"class":495},[478,55224,1859],{"class":714},[478,55226,55227,55230,55232,55234],{"class":480,"line":2345},[478,55228,55229],{"class":495},"      bottom",[478,55231,51817],{"class":714},[478,55233,895],{"class":495},[478,55235,1859],{"class":714},[478,55237,55238,55240,55242,55244,55246],{"class":480,"line":2350},[478,55239,55151],{"class":495},[478,55241,51817],{"class":714},[478,55243,1012],{"class":495},[478,55245,1029],{"class":710},[478,55247,1859],{"class":714},[478,55249,55250,55252,55254,55256,55258],{"class":480,"line":3143},[478,55251,55165],{"class":495},[478,55253,51817],{"class":714},[478,55255,1275],{"class":495},[478,55257,1029],{"class":710},[478,55259,1859],{"class":714},[478,55261,55262,55265,55267,55270],{"class":480,"line":3157},[478,55263,55264],{"class":495},"      background-color",[478,55266,51817],{"class":714},[478,55268,55269],{"class":495},"skyblue",[478,55271,1859],{"class":714},[478,55273,55274],{"class":480,"line":3165},[478,55275,2753],{"class":714},[478,55277,55278],{"class":480,"line":3170},[478,55279,2966],{"emptyLinePlaceholder":640},[478,55281,55282,55284,55286],{"class":480,"line":3176},[478,55283,55200],{"class":484},[478,55285,7391],{"class":51680},[478,55287,16137],{"class":714},[478,55289,55290,55292,55294,55296],{"class":480,"line":3182},[478,55291,55139],{"class":495},[478,55293,51817],{"class":714},[478,55295,55211],{"class":495},[478,55297,1859],{"class":714},[478,55299,55300,55303,55305,55307,55309],{"class":480,"line":3187},[478,55301,55302],{"class":495},"      font-size",[478,55304,51817],{"class":714},[478,55306,1596],{"class":495},[478,55308,51872],{"class":710},[478,55310,1859],{"class":714},[478,55312,55313,55315,55317,55319,55321],{"class":480,"line":8514},[478,55314,55218],{"class":495},[478,55316,51817],{"class":714},[478,55318,1396],{"class":495},[478,55320,51872],{"class":710},[478,55322,1859],{"class":714},[478,55324,55325,55328,55330,55332,55334],{"class":480,"line":8538},[478,55326,55327],{"class":495},"      top",[478,55329,51817],{"class":714},[478,55331,1020],{"class":495},[478,55333,51872],{"class":710},[478,55335,1859],{"class":714},[478,55337,55338],{"class":480,"line":8543},[478,55339,2753],{"class":714},[478,55341,55342],{"class":480,"line":8549},[478,55343,2966],{"emptyLinePlaceholder":640},[478,55345,55346,55349],{"class":480,"line":8576},[478,55347,55348],{"class":51680},"    ul",[478,55350,16137],{"class":714},[478,55352,55353,55355,55357,55359],{"class":480,"line":8581},[478,55354,55139],{"class":495},[478,55356,51817],{"class":714},[478,55358,55211],{"class":495},[478,55360,1859],{"class":714},[478,55362,55363,55365,55367,55369,55371],{"class":480,"line":8587},[478,55364,55327],{"class":495},[478,55366,51817],{"class":714},[478,55368,1476],{"class":495},[478,55370,51872],{"class":710},[478,55372,1859],{"class":714},[478,55374,55375,55377,55379,55381,55383],{"class":480,"line":8599},[478,55376,55218],{"class":495},[478,55378,51817],{"class":714},[478,55380,1396],{"class":495},[478,55382,51872],{"class":710},[478,55384,1859],{"class":714},[478,55386,55387,55390,55392,55394],{"class":480,"line":8611},[478,55388,55389],{"class":495},"      display",[478,55391,51817],{"class":714},[478,55393,51857],{"class":495},[478,55395,1859],{"class":714},[478,55397,55398,55401,55403,55405],{"class":480,"line":8623},[478,55399,55400],{"class":495},"      justify-content",[478,55402,51817],{"class":714},[478,55404,52048],{"class":495},[478,55406,1859],{"class":714},[478,55408,55409,55411,55413,55415],{"class":480,"line":10282},[478,55410,55139],{"class":495},[478,55412,51817],{"class":714},[478,55414,55211],{"class":495},[478,55416,1859],{"class":714},[478,55418,55419,55421,55423,55425,55427],{"class":480,"line":10307},[478,55420,55151],{"class":495},[478,55422,51817],{"class":714},[478,55424,4558],{"class":495},[478,55426,51872],{"class":710},[478,55428,1859],{"class":714},[478,55430,55431,55433,55435,55437,55439],{"class":480,"line":10330},[478,55432,55165],{"class":495},[478,55434,51817],{"class":714},[478,55436,1396],{"class":495},[478,55438,51872],{"class":710},[478,55440,1859],{"class":714},[478,55442,55443],{"class":480,"line":10354},[478,55444,2753],{"class":714},[478,55446,55447],{"class":480,"line":10359},[478,55448,2966],{"emptyLinePlaceholder":640},[478,55450,55451,55453,55456],{"class":480,"line":10364},[478,55452,55348],{"class":51680},[478,55454,55455],{"class":51680}," li",[478,55457,16137],{"class":714},[478,55459,55460,55462,55464,55466,55468],{"class":480,"line":10369},[478,55461,55151],{"class":495},[478,55463,51817],{"class":714},[478,55465,1396],{"class":495},[478,55467,51872],{"class":710},[478,55469,1859],{"class":714},[478,55471,55472,55474,55476,55478,55480],{"class":480,"line":10378},[478,55473,55165],{"class":495},[478,55475,51817],{"class":714},[478,55477,1396],{"class":495},[478,55479,51872],{"class":710},[478,55481,1859],{"class":714},[478,55483,55484,55486,55488,55491,55493,55495,55497,55499,55501,55503,55505,55508],{"class":480,"line":10383},[478,55485,55264],{"class":495},[478,55487,51817],{"class":714},[478,55489,55490],{"class":495},"rgba",[478,55492,263],{"class":714},[478,55494,895],{"class":495},[478,55496,13001],{"class":714},[478,55498,895],{"class":495},[478,55500,13001],{"class":714},[478,55502,895],{"class":495},[478,55504,13001],{"class":714},[478,55506,55507],{"class":495},".4",[478,55509,3285],{"class":714},[478,55511,55512,55515,55517,55519,55521],{"class":480,"line":10389},[478,55513,55514],{"class":495},"      border-radius",[478,55516,51817],{"class":714},[478,55518,1146],{"class":495},[478,55520,51872],{"class":710},[478,55522,1859],{"class":714},[478,55524,55525],{"class":480,"line":10410},[478,55526,2753],{"class":714},[478,55528,55529],{"class":480,"line":10416},[478,55530,2966],{"emptyLinePlaceholder":640},[478,55532,55533,55536],{"class":480,"line":10430},[478,55534,55535],{"class":484},"    .activate",[478,55537,16137],{"class":714},[478,55539,55540,55542,55544,55547],{"class":480,"line":10436},[478,55541,55264],{"class":495},[478,55543,51817],{"class":714},[478,55545,55546],{"class":495},"#f7f7f7",[478,55548,1859],{"class":714},[478,55550,55551],{"class":480,"line":10463},[478,55552,2753],{"class":714},[478,55554,55555,55557,55559],{"class":480,"line":10472},[478,55556,52797],{"class":714},[478,55558,617],{"class":51680},[478,55560,51687],{"class":714},[478,55562,55563,55565,55567],{"class":480,"line":10478},[478,55564,52165],{"class":714},[478,55566,51714],{"class":51680},[478,55568,51687],{"class":714},[478,55570,55571],{"class":480,"line":10486},[478,55572,2966],{"emptyLinePlaceholder":640},[478,55574,55575,55577,55579],{"class":480,"line":10491},[478,55576,1605],{"class":714},[478,55578,52180],{"class":51680},[478,55580,51687],{"class":714},[478,55582,55583,55585,55587,55589,55591,55593],{"class":480,"line":17169},[478,55584,52524],{"class":714},[478,55586,51991],{"class":51680},[478,55588,53866],{"class":484},[478,55590,759],{"class":714},[478,55592,53871],{"class":488},[478,55594,51687],{"class":714},[478,55596,55597,55599,55601,55603,55605,55608],{"class":480,"line":17175},[478,55598,51721],{"class":714},[478,55600,51991],{"class":51680},[478,55602,53866],{"class":484},[478,55604,759],{"class":714},[478,55606,55607],{"class":488},"\"slider-wrapper\"",[478,55609,51687],{"class":714},[478,55611,55612,55615,55617,55620,55622,55625,55628,55630,55632],{"class":480,"line":17198},[478,55613,55614],{"class":714},"      \u003C",[478,55616,52],{"class":51680},[478,55618,55619],{"class":484}," src",[478,55621,759],{"class":714},[478,55623,55624],{"class":488},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[478,55626,55627],{"class":484}," alt",[478,55629,759],{"class":714},[478,55631,8218],{"class":488},[478,55633,51687],{"class":714},[478,55635,55636,55638,55640],{"class":480,"line":17204},[478,55637,52156],{"class":714},[478,55639,51991],{"class":51680},[478,55641,51687],{"class":714},[478,55643,55644,55646,55648,55650,55652,55655],{"class":480,"line":17227},[478,55645,51721],{"class":714},[478,55647,51991],{"class":51680},[478,55649,53866],{"class":484},[478,55651,759],{"class":714},[478,55653,55654],{"class":488},"\"slider-footer\"",[478,55656,51687],{"class":714},[478,55658,55659,55661,55663,55666,55668],{"class":480,"line":17241},[478,55660,55614],{"class":714},[478,55662,19],{"class":51680},[478,55664,55665],{"class":714},">对人类来说会不会太超前了?\u003C\u002F",[478,55667,19],{"class":51680},[478,55669,51687],{"class":714},[478,55671,55672,55674,55676],{"class":480,"line":17261},[478,55673,55614],{"class":714},[478,55675,1702],{"class":51680},[478,55677,51687],{"class":714},[478,55679,55680,55683,55685,55687,55689,55692,55695,55697],{"class":480,"line":17267},[478,55681,55682],{"class":714},"        \u003C",[478,55684,32],{"class":51680},[478,55686,53866],{"class":484},[478,55688,759],{"class":714},[478,55690,55691],{"class":488},"\"activate\"",[478,55693,55694],{"class":714},">\u003C\u002F",[478,55696,32],{"class":51680},[478,55698,51687],{"class":714},[478,55700,55701,55703,55705,55707,55709],{"class":480,"line":17278},[478,55702,55682],{"class":714},[478,55704,32],{"class":51680},[478,55706,55694],{"class":714},[478,55708,32],{"class":51680},[478,55710,51687],{"class":714},[478,55712,55713,55715,55717,55719,55721],{"class":480,"line":17301},[478,55714,55682],{"class":714},[478,55716,32],{"class":51680},[478,55718,55694],{"class":714},[478,55720,32],{"class":51680},[478,55722,51687],{"class":714},[478,55724,55725,55727,55729,55731,55733],{"class":480,"line":17323},[478,55726,55682],{"class":714},[478,55728,32],{"class":51680},[478,55730,55694],{"class":714},[478,55732,32],{"class":51680},[478,55734,51687],{"class":714},[478,55736,55737,55739,55741,55743,55745],{"class":480,"line":17328},[478,55738,55682],{"class":714},[478,55740,32],{"class":51680},[478,55742,55694],{"class":714},[478,55744,32],{"class":51680},[478,55746,51687],{"class":714},[478,55748,55749,55751,55753,55755,55757],{"class":480,"line":17334},[478,55750,55682],{"class":714},[478,55752,32],{"class":51680},[478,55754,55694],{"class":714},[478,55756,32],{"class":51680},[478,55758,51687],{"class":714},[478,55760,55761,55763,55765,55767,55769],{"class":480,"line":17348},[478,55762,55682],{"class":714},[478,55764,32],{"class":51680},[478,55766,55694],{"class":714},[478,55768,32],{"class":51680},[478,55770,51687],{"class":714},[478,55772,55773,55775,55777,55779,55781],{"class":480,"line":17361},[478,55774,55682],{"class":714},[478,55776,32],{"class":51680},[478,55778,55694],{"class":714},[478,55780,32],{"class":51680},[478,55782,51687],{"class":714},[478,55784,55785,55788,55790],{"class":480,"line":17366},[478,55786,55787],{"class":714},"      \u003C\u002F",[478,55789,1702],{"class":51680},[478,55791,51687],{"class":714},[478,55793,55794,55796,55798],{"class":480,"line":17380},[478,55795,52156],{"class":714},[478,55797,51991],{"class":51680},[478,55799,51687],{"class":714},[478,55801,55802,55804,55806],{"class":480,"line":17385},[478,55803,52797],{"class":714},[478,55805,51991],{"class":51680},[478,55807,51687],{"class":714},[478,55809,55810,55812,55814],{"class":480,"line":17391},[478,55811,52524],{"class":714},[478,55813,52193],{"class":51680},[478,55815,51687],{"class":714},[478,55817,55818,55820,55823,55825],{"class":480,"line":17396},[478,55819,11787],{"class":710},[478,55821,55822],{"class":495}," arrImage",[478,55824,14130],{"class":710},[478,55826,55827],{"class":714}," [\n",[478,55829,55830,55833,55836,55839,55842,55845,55848],{"class":480,"line":17410},[478,55831,55832],{"class":714},"      { url: ",[478,55834,55835],{"class":488},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[478,55837,55838],{"class":714},", title: ",[478,55840,55841],{"class":488},"'对人类来说会不会太超前了?'",[478,55843,55844],{"class":714},", color: ",[478,55846,55847],{"class":488},"'rgba(100,67,68)'",[478,55849,55850],{"class":714}," },\n",[478,55852,55853,55855,55858,55860,55863,55865,55868],{"class":480,"line":17415},[478,55854,55832],{"class":714},[478,55856,55857],{"class":488},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[478,55859,55838],{"class":714},[478,55861,55862],{"class":488},"'开启剑与雪的黑暗传说!'",[478,55864,55844],{"class":714},[478,55866,55867],{"class":488},"'rgba(43,35,26)'",[478,55869,55850],{"class":714},[478,55871,55872,55874,55877,55879,55882,55884,55887],{"class":480,"line":17420},[478,55873,55832],{"class":714},[478,55875,55876],{"class":488},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[478,55878,55838],{"class":714},[478,55880,55881],{"class":488},"'真正的jo厨出现了!'",[478,55883,55844],{"class":714},[478,55885,55886],{"class":488},"'rgba(36,31,33)'",[478,55888,55850],{"class":714},[478,55890,55891,55893,55896,55898,55901,55903,55906],{"class":480,"line":17434},[478,55892,55832],{"class":714},[478,55894,55895],{"class":488},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[478,55897,55838],{"class":714},[478,55899,55900],{"class":488},"'李玉刚:让世界通过b站看到东方大国文化'",[478,55902,55844],{"class":714},[478,55904,55905],{"class":488},"'rgba(139,98,66)'",[478,55907,55850],{"class":714},[478,55909,55910,55912,55915,55917,55920,55922,55925],{"class":480,"line":17446},[478,55911,55832],{"class":714},[478,55913,55914],{"class":488},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[478,55916,55838],{"class":714},[478,55918,55919],{"class":488},"'快来分享你的寒假日常吧'",[478,55921,55844],{"class":714},[478,55923,55924],{"class":488},"'rgba(67,90,92)'",[478,55926,55850],{"class":714},[478,55928,55929,55931,55934,55936,55939,55941,55944],{"class":480,"line":17451},[478,55930,55832],{"class":714},[478,55932,55933],{"class":488},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[478,55935,55838],{"class":714},[478,55937,55938],{"class":488},"'哔哩哔哩小年YEAR'",[478,55940,55844],{"class":714},[478,55942,55943],{"class":488},"'rgba(166,131,143)'",[478,55945,55850],{"class":714},[478,55947,55948,55950,55953,55955,55958,55960,55963],{"class":480,"line":17464},[478,55949,55832],{"class":714},[478,55951,55952],{"class":488},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[478,55954,55838],{"class":714},[478,55956,55957],{"class":488},"'一站式解决你的电脑配置问题'",[478,55959,55844],{"class":714},[478,55961,55962],{"class":488},"'rgba(53,29,25)'",[478,55964,55850],{"class":714},[478,55966,55967,55969,55972,55974,55977,55979,55982],{"class":480,"line":17469},[478,55968,55832],{"class":714},[478,55970,55971],{"class":488},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[478,55973,55838],{"class":714},[478,55975,55976],{"class":488},"'谁不想和小猫咪贴贴呢?'",[478,55978,55844],{"class":714},[478,55980,55981],{"class":488},"'rgba(99,72,114)'",[478,55983,55984],{"class":714}," }\n",[478,55986,55987],{"class":480,"line":17474},[478,55988,53489],{"class":714},[478,55990,55991,55993,55996,55998,56000,56002,56004,56007],{"class":480,"line":17479},[478,55992,11787],{"class":710},[478,55994,55995],{"class":495}," img",[478,55997,14130],{"class":710},[478,55999,54776],{"class":714},[478,56001,54779],{"class":484},[478,56003,263],{"class":714},[478,56005,56006],{"class":488},"'.slider-wrapper img'",[478,56008,720],{"class":714},[478,56010,56011,56013,56015,56017,56019,56021,56023,56026],{"class":480,"line":17492},[478,56012,11787],{"class":710},[478,56014,7391],{"class":495},[478,56016,14130],{"class":710},[478,56018,54776],{"class":714},[478,56020,54779],{"class":484},[478,56022,263],{"class":714},[478,56024,56025],{"class":488},"'.slider-footer p'",[478,56027,720],{"class":714},[478,56029,56030,56032,56035,56037,56039,56041,56043,56046],{"class":480,"line":17497},[478,56031,11787],{"class":710},[478,56033,56034],{"class":495}," color",[478,56036,14130],{"class":710},[478,56038,54776],{"class":714},[478,56040,54779],{"class":484},[478,56042,263],{"class":714},[478,56044,56045],{"class":488},"'.slider-footer'",[478,56047,720],{"class":714},[478,56049,56050,56052,56055,56057,56059,56062,56064,56067],{"class":480,"line":33013},[478,56051,11787],{"class":710},[478,56053,56054],{"class":495}," lis",[478,56056,14130],{"class":710},[478,56058,54776],{"class":714},[478,56060,56061],{"class":484},"querySelectorAll",[478,56063,263],{"class":714},[478,56065,56066],{"class":488},"'.slider-footer ul li'",[478,56068,720],{"class":714},[478,56070,56071,56073,56075,56077],{"class":480,"line":33019},[478,56072,52599],{"class":710},[478,56074,10004],{"class":714},[478,56076,759],{"class":710},[478,56078,56079],{"class":495}," 1\n",[478,56081,56082,56084,56087,56089,56091,56093,56095],{"class":480,"line":33025},[478,56083,52599],{"class":710},[478,56085,56086],{"class":714}," timer ",[478,56088,759],{"class":710},[478,56090,54824],{"class":484},[478,56092,263],{"class":714},[478,56094,54829],{"class":710},[478,56096,54832],{"class":714},[478,56098,56099,56102,56104],{"class":480,"line":33031},[478,56100,56101],{"class":714},"      img.src ",[478,56103,759],{"class":710},[478,56105,56106],{"class":714}," arrImage[i].url\n",[478,56108,56109,56112,56114],{"class":480,"line":33037},[478,56110,56111],{"class":714},"      p.innerHTML ",[478,56113,759],{"class":710},[478,56115,56116],{"class":714}," arrImage[i].title\n",[478,56118,56119,56122,56124],{"class":480,"line":33048},[478,56120,56121],{"class":714},"      color.style.backgroundColor ",[478,56123,759],{"class":710},[478,56125,56126],{"class":714}," arrImage[i].color\n",[478,56128,56129],{"class":480,"line":33054},[478,56130,56131],{"class":770},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[478,56133,56134],{"class":480,"line":33074},[478,56135,56136],{"class":770},"      \u002F\u002F li.classList.add('activate')\n",[478,56138,56139],{"class":480,"line":33080},[478,56140,56141],{"class":770},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[478,56143,56144],{"class":480,"line":33091},[478,56145,56146],{"class":770},"      \u002F\u002F lis[i].classList.remove('activate')\n",[478,56148,56149,56152,56154,56156,56159,56162,56165,56167,56170],{"class":480,"line":33097},[478,56150,56151],{"class":714},"      document.",[478,56153,54779],{"class":484},[478,56155,263],{"class":714},[478,56157,56158],{"class":488},"'.activate'",[478,56160,56161],{"class":714},")?.classList.",[478,56163,56164],{"class":484},"toggle",[478,56166,263],{"class":714},[478,56168,56169],{"class":488},"'activate'",[478,56171,720],{"class":714},[478,56173,56174,56177,56179,56181,56183],{"class":480,"line":33103},[478,56175,56176],{"class":714},"      lis[i].classList.",[478,56178,5900],{"class":484},[478,56180,263],{"class":714},[478,56182,56169],{"class":488},[478,56184,720],{"class":714},[478,56186,56187],{"class":480,"line":33109},[478,56188,2966],{"emptyLinePlaceholder":640},[478,56190,56191,56194,56196,56198,56200,56202,56204,56206,56209],{"class":480,"line":33115},[478,56192,56193],{"class":714},"      i ",[478,56195,759],{"class":710},[478,56197,54863],{"class":714},[478,56199,1181],{"class":710},[478,56201,25498],{"class":495},[478,56203,14280],{"class":714},[478,56205,1029],{"class":710},[478,56207,56208],{"class":714}," arrImage.",[478,56210,56211],{"class":495},"length\n",[478,56213,56214],{"class":480,"line":33121},[478,56215,2966],{"emptyLinePlaceholder":640},[478,56217,56218,56220,56222],{"class":480,"line":33127},[478,56219,54915],{"class":714},[478,56221,6976],{"class":495},[478,56223,720],{"class":714},[478,56225,56226,56228,56230],{"class":480,"line":33133},[478,56227,52797],{"class":714},[478,56229,52193],{"class":51680},[478,56231,51687],{"class":714},[478,56233,56234,56236,56238],{"class":480,"line":33153},[478,56235,52165],{"class":714},[478,56237,52180],{"class":51680},[478,56239,51687],{"class":714},[478,56241,56242],{"class":480,"line":33159},[478,56243,2966],{"emptyLinePlaceholder":640},[478,56245,56246,56248,56250],{"class":480,"line":33175},[478,56247,52165],{"class":714},[478,56249,51015],{"class":51680},[478,56251,51687],{"class":714},[19,56253,56254],{},[52,56255],{"alt":54,"src":56256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56258,56259],{},"?.就是短路保护,确保输出正常进行",[19,56261,56262],{},"不要忘记取余%,有时候可以用",[19,56264,56265],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[29,56267,56268],{"start":565},[32,56269,56270],{},"法2",[469,56272,56274],{"className":51013,"code":56273,"language":51015,"meta":54,"style":54},"\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",[475,56275,56276,56286,56300,56304,56312,56326,56346,56358,56366,56372,56382,56392,56396,56400,56406,56416,56420,56424,56430,56440,56452,56464,56478,56482,56486,56492,56502,56512,56522,56534,56546,56556,56560,56564,56572,56582,56594,56606,56618,56622,56626,56632,56642,56654,56666,56676,56686,56696,56708,56720,56724,56728,56736,56748,56760,56786,56798,56802,56806,56812,56822,56826,56834,56842,56846,56854,56868,56882,56902,56910,56924,56936,56944,56962,56974,56986,56998,57010,57022,57034,57046,57054,57062,57070,57078,57089,57105,57121,57137,57153,57169,57185,57201,57217,57221,57226,57244,57262,57272,57277,57282,57293,57299,57314,57323,57327,57332,57341,57346,57355,57360,57365,57370,57393,57423,57427,57435,57439,57447,57455,57459],{"__ignoreMap":54},[478,56277,56278,56280,56282,56284],{"class":480,"line":481},[478,56279,51677],{"class":714},[478,56281,51681],{"class":51680},[478,56283,51684],{"class":484},[478,56285,51687],{"class":714},[478,56287,56288,56290,56292,56294,56296,56298],{"class":480,"line":565},[478,56289,1605],{"class":714},[478,56291,51015],{"class":51680},[478,56293,51696],{"class":484},[478,56295,759],{"class":714},[478,56297,51701],{"class":488},[478,56299,51687],{"class":714},[478,56301,56302],{"class":480,"line":579},[478,56303,2966],{"emptyLinePlaceholder":640},[478,56305,56306,56308,56310],{"class":480,"line":593},[478,56307,1605],{"class":714},[478,56309,51714],{"class":51680},[478,56311,51687],{"class":714},[478,56313,56314,56316,56318,56320,56322,56324],{"class":480,"line":1769},[478,56315,52524],{"class":714},[478,56317,51724],{"class":51680},[478,56319,51727],{"class":484},[478,56321,759],{"class":714},[478,56323,51732],{"class":488},[478,56325,51687],{"class":714},[478,56327,56328,56330,56332,56334,56336,56338,56340,56342,56344],{"class":480,"line":1783},[478,56329,52524],{"class":714},[478,56331,51724],{"class":51680},[478,56333,15485],{"class":484},[478,56335,759],{"class":714},[478,56337,51771],{"class":488},[478,56339,51751],{"class":484},[478,56341,759],{"class":714},[478,56343,51778],{"class":488},[478,56345,51687],{"class":714},[478,56347,56348,56350,56352,56354,56356],{"class":480,"line":1789},[478,56349,52524],{"class":714},[478,56351,51787],{"class":51680},[478,56353,51790],{"class":714},[478,56355,51787],{"class":51680},[478,56357,51687],{"class":714},[478,56359,56360,56362,56364],{"class":480,"line":1880},[478,56361,52524],{"class":714},[478,56363,617],{"class":51680},[478,56365,51687],{"class":714},[478,56367,56368,56370],{"class":480,"line":1886},[478,56369,6969],{"class":51680},[478,56371,16137],{"class":714},[478,56373,56374,56376,56378,56380],{"class":480,"line":1898},[478,56375,55075],{"class":495},[478,56377,51817],{"class":714},[478,56379,895],{"class":495},[478,56381,1859],{"class":714},[478,56383,56384,56386,56388,56390],{"class":480,"line":2180},[478,56385,55086],{"class":495},[478,56387,51817],{"class":714},[478,56389,895],{"class":495},[478,56391,1859],{"class":714},[478,56393,56394],{"class":480,"line":2185},[478,56395,2753],{"class":714},[478,56397,56398],{"class":480,"line":2191},[478,56399,2966],{"emptyLinePlaceholder":640},[478,56401,56402,56404],{"class":480,"line":2196},[478,56403,55105],{"class":51680},[478,56405,16137],{"class":714},[478,56407,56408,56410,56412,56414],{"class":480,"line":2210},[478,56409,55112],{"class":495},[478,56411,51817],{"class":714},[478,56413,55117],{"class":495},[478,56415,1859],{"class":714},[478,56417,56418],{"class":480,"line":2215},[478,56419,2753],{"class":714},[478,56421,56422],{"class":480,"line":2221},[478,56423,2966],{"emptyLinePlaceholder":640},[478,56425,56426,56428],{"class":480,"line":2241},[478,56427,55132],{"class":484},[478,56429,16137],{"class":714},[478,56431,56432,56434,56436,56438],{"class":480,"line":2246},[478,56433,55139],{"class":495},[478,56435,51817],{"class":714},[478,56437,55144],{"class":495},[478,56439,1859],{"class":714},[478,56441,56442,56444,56446,56448,56450],{"class":480,"line":2260},[478,56443,55151],{"class":495},[478,56445,51817],{"class":714},[478,56447,55156],{"class":495},[478,56449,51872],{"class":710},[478,56451,1859],{"class":714},[478,56453,56454,56456,56458,56460,56462],{"class":480,"line":2265},[478,56455,55165],{"class":495},[478,56457,51817],{"class":714},[478,56459,2107],{"class":495},[478,56461,51872],{"class":710},[478,56463,1859],{"class":714},[478,56465,56466,56468,56470,56472,56474,56476],{"class":480,"line":2294},[478,56467,55086],{"class":495},[478,56469,51817],{"class":714},[478,56471,1012],{"class":495},[478,56473,51872],{"class":710},[478,56475,51936],{"class":495},[478,56477,1859],{"class":714},[478,56479,56480],{"class":480,"line":2299},[478,56481,2753],{"class":714},[478,56483,56484],{"class":480,"line":2316},[478,56485,2966],{"emptyLinePlaceholder":640},[478,56487,56488,56490],{"class":480,"line":2321},[478,56489,55200],{"class":484},[478,56491,16137],{"class":714},[478,56493,56494,56496,56498,56500],{"class":480,"line":2326},[478,56495,55139],{"class":495},[478,56497,51817],{"class":714},[478,56499,55211],{"class":495},[478,56501,1859],{"class":714},[478,56503,56504,56506,56508,56510],{"class":480,"line":2331},[478,56505,55218],{"class":495},[478,56507,51817],{"class":714},[478,56509,895],{"class":495},[478,56511,1859],{"class":714},[478,56513,56514,56516,56518,56520],{"class":480,"line":2345},[478,56515,55229],{"class":495},[478,56517,51817],{"class":714},[478,56519,895],{"class":495},[478,56521,1859],{"class":714},[478,56523,56524,56526,56528,56530,56532],{"class":480,"line":2350},[478,56525,55151],{"class":495},[478,56527,51817],{"class":714},[478,56529,1012],{"class":495},[478,56531,1029],{"class":710},[478,56533,1859],{"class":714},[478,56535,56536,56538,56540,56542,56544],{"class":480,"line":3143},[478,56537,55165],{"class":495},[478,56539,51817],{"class":714},[478,56541,1275],{"class":495},[478,56543,1029],{"class":710},[478,56545,1859],{"class":714},[478,56547,56548,56550,56552,56554],{"class":480,"line":3157},[478,56549,55264],{"class":495},[478,56551,51817],{"class":714},[478,56553,55269],{"class":495},[478,56555,1859],{"class":714},[478,56557,56558],{"class":480,"line":3165},[478,56559,2753],{"class":714},[478,56561,56562],{"class":480,"line":3170},[478,56563,2966],{"emptyLinePlaceholder":640},[478,56565,56566,56568,56570],{"class":480,"line":3176},[478,56567,55200],{"class":484},[478,56569,7391],{"class":51680},[478,56571,16137],{"class":714},[478,56573,56574,56576,56578,56580],{"class":480,"line":3182},[478,56575,55139],{"class":495},[478,56577,51817],{"class":714},[478,56579,55211],{"class":495},[478,56581,1859],{"class":714},[478,56583,56584,56586,56588,56590,56592],{"class":480,"line":3187},[478,56585,55302],{"class":495},[478,56587,51817],{"class":714},[478,56589,1596],{"class":495},[478,56591,51872],{"class":710},[478,56593,1859],{"class":714},[478,56595,56596,56598,56600,56602,56604],{"class":480,"line":8514},[478,56597,55218],{"class":495},[478,56599,51817],{"class":714},[478,56601,1396],{"class":495},[478,56603,51872],{"class":710},[478,56605,1859],{"class":714},[478,56607,56608,56610,56612,56614,56616],{"class":480,"line":8538},[478,56609,55327],{"class":495},[478,56611,51817],{"class":714},[478,56613,1020],{"class":495},[478,56615,51872],{"class":710},[478,56617,1859],{"class":714},[478,56619,56620],{"class":480,"line":8543},[478,56621,2753],{"class":714},[478,56623,56624],{"class":480,"line":8549},[478,56625,2966],{"emptyLinePlaceholder":640},[478,56627,56628,56630],{"class":480,"line":8576},[478,56629,55348],{"class":51680},[478,56631,16137],{"class":714},[478,56633,56634,56636,56638,56640],{"class":480,"line":8581},[478,56635,55139],{"class":495},[478,56637,51817],{"class":714},[478,56639,55211],{"class":495},[478,56641,1859],{"class":714},[478,56643,56644,56646,56648,56650,56652],{"class":480,"line":8587},[478,56645,55327],{"class":495},[478,56647,51817],{"class":714},[478,56649,1476],{"class":495},[478,56651,51872],{"class":710},[478,56653,1859],{"class":714},[478,56655,56656,56658,56660,56662,56664],{"class":480,"line":8599},[478,56657,55218],{"class":495},[478,56659,51817],{"class":714},[478,56661,1396],{"class":495},[478,56663,51872],{"class":710},[478,56665,1859],{"class":714},[478,56667,56668,56670,56672,56674],{"class":480,"line":8611},[478,56669,55389],{"class":495},[478,56671,51817],{"class":714},[478,56673,51857],{"class":495},[478,56675,1859],{"class":714},[478,56677,56678,56680,56682,56684],{"class":480,"line":8623},[478,56679,55400],{"class":495},[478,56681,51817],{"class":714},[478,56683,52048],{"class":495},[478,56685,1859],{"class":714},[478,56687,56688,56690,56692,56694],{"class":480,"line":10282},[478,56689,55139],{"class":495},[478,56691,51817],{"class":714},[478,56693,55211],{"class":495},[478,56695,1859],{"class":714},[478,56697,56698,56700,56702,56704,56706],{"class":480,"line":10307},[478,56699,55151],{"class":495},[478,56701,51817],{"class":714},[478,56703,4558],{"class":495},[478,56705,51872],{"class":710},[478,56707,1859],{"class":714},[478,56709,56710,56712,56714,56716,56718],{"class":480,"line":10330},[478,56711,55165],{"class":495},[478,56713,51817],{"class":714},[478,56715,1396],{"class":495},[478,56717,51872],{"class":710},[478,56719,1859],{"class":714},[478,56721,56722],{"class":480,"line":10354},[478,56723,2753],{"class":714},[478,56725,56726],{"class":480,"line":10359},[478,56727,2966],{"emptyLinePlaceholder":640},[478,56729,56730,56732,56734],{"class":480,"line":10364},[478,56731,55348],{"class":51680},[478,56733,55455],{"class":51680},[478,56735,16137],{"class":714},[478,56737,56738,56740,56742,56744,56746],{"class":480,"line":10369},[478,56739,55151],{"class":495},[478,56741,51817],{"class":714},[478,56743,1396],{"class":495},[478,56745,51872],{"class":710},[478,56747,1859],{"class":714},[478,56749,56750,56752,56754,56756,56758],{"class":480,"line":10378},[478,56751,55165],{"class":495},[478,56753,51817],{"class":714},[478,56755,1396],{"class":495},[478,56757,51872],{"class":710},[478,56759,1859],{"class":714},[478,56761,56762,56764,56766,56768,56770,56772,56774,56776,56778,56780,56782,56784],{"class":480,"line":10383},[478,56763,55264],{"class":495},[478,56765,51817],{"class":714},[478,56767,55490],{"class":495},[478,56769,263],{"class":714},[478,56771,895],{"class":495},[478,56773,13001],{"class":714},[478,56775,895],{"class":495},[478,56777,13001],{"class":714},[478,56779,895],{"class":495},[478,56781,13001],{"class":714},[478,56783,55507],{"class":495},[478,56785,3285],{"class":714},[478,56787,56788,56790,56792,56794,56796],{"class":480,"line":10389},[478,56789,55514],{"class":495},[478,56791,51817],{"class":714},[478,56793,1146],{"class":495},[478,56795,51872],{"class":710},[478,56797,1859],{"class":714},[478,56799,56800],{"class":480,"line":10410},[478,56801,2753],{"class":714},[478,56803,56804],{"class":480,"line":10416},[478,56805,2966],{"emptyLinePlaceholder":640},[478,56807,56808,56810],{"class":480,"line":10430},[478,56809,55535],{"class":484},[478,56811,16137],{"class":714},[478,56813,56814,56816,56818,56820],{"class":480,"line":10436},[478,56815,55264],{"class":495},[478,56817,51817],{"class":714},[478,56819,55546],{"class":495},[478,56821,1859],{"class":714},[478,56823,56824],{"class":480,"line":10463},[478,56825,2753],{"class":714},[478,56827,56828,56830,56832],{"class":480,"line":10472},[478,56829,52797],{"class":714},[478,56831,617],{"class":51680},[478,56833,51687],{"class":714},[478,56835,56836,56838,56840],{"class":480,"line":10478},[478,56837,52165],{"class":714},[478,56839,51714],{"class":51680},[478,56841,51687],{"class":714},[478,56843,56844],{"class":480,"line":10486},[478,56845,2966],{"emptyLinePlaceholder":640},[478,56847,56848,56850,56852],{"class":480,"line":10491},[478,56849,1605],{"class":714},[478,56851,52180],{"class":51680},[478,56853,51687],{"class":714},[478,56855,56856,56858,56860,56862,56864,56866],{"class":480,"line":17169},[478,56857,52524],{"class":714},[478,56859,51991],{"class":51680},[478,56861,53866],{"class":484},[478,56863,759],{"class":714},[478,56865,53871],{"class":488},[478,56867,51687],{"class":714},[478,56869,56870,56872,56874,56876,56878,56880],{"class":480,"line":17175},[478,56871,51721],{"class":714},[478,56873,51991],{"class":51680},[478,56875,53866],{"class":484},[478,56877,759],{"class":714},[478,56879,55607],{"class":488},[478,56881,51687],{"class":714},[478,56883,56884,56886,56888,56890,56892,56894,56896,56898,56900],{"class":480,"line":17198},[478,56885,55614],{"class":714},[478,56887,52],{"class":51680},[478,56889,55619],{"class":484},[478,56891,759],{"class":714},[478,56893,55624],{"class":488},[478,56895,55627],{"class":484},[478,56897,759],{"class":714},[478,56899,8218],{"class":488},[478,56901,51687],{"class":714},[478,56903,56904,56906,56908],{"class":480,"line":17204},[478,56905,52156],{"class":714},[478,56907,51991],{"class":51680},[478,56909,51687],{"class":714},[478,56911,56912,56914,56916,56918,56920,56922],{"class":480,"line":17227},[478,56913,51721],{"class":714},[478,56915,51991],{"class":51680},[478,56917,53866],{"class":484},[478,56919,759],{"class":714},[478,56921,55654],{"class":488},[478,56923,51687],{"class":714},[478,56925,56926,56928,56930,56932,56934],{"class":480,"line":17241},[478,56927,55614],{"class":714},[478,56929,19],{"class":51680},[478,56931,55665],{"class":714},[478,56933,19],{"class":51680},[478,56935,51687],{"class":714},[478,56937,56938,56940,56942],{"class":480,"line":17261},[478,56939,55614],{"class":714},[478,56941,1702],{"class":51680},[478,56943,51687],{"class":714},[478,56945,56946,56948,56950,56952,56954,56956,56958,56960],{"class":480,"line":17267},[478,56947,55682],{"class":714},[478,56949,32],{"class":51680},[478,56951,53866],{"class":484},[478,56953,759],{"class":714},[478,56955,55691],{"class":488},[478,56957,55694],{"class":714},[478,56959,32],{"class":51680},[478,56961,51687],{"class":714},[478,56963,56964,56966,56968,56970,56972],{"class":480,"line":17278},[478,56965,55682],{"class":714},[478,56967,32],{"class":51680},[478,56969,55694],{"class":714},[478,56971,32],{"class":51680},[478,56973,51687],{"class":714},[478,56975,56976,56978,56980,56982,56984],{"class":480,"line":17301},[478,56977,55682],{"class":714},[478,56979,32],{"class":51680},[478,56981,55694],{"class":714},[478,56983,32],{"class":51680},[478,56985,51687],{"class":714},[478,56987,56988,56990,56992,56994,56996],{"class":480,"line":17323},[478,56989,55682],{"class":714},[478,56991,32],{"class":51680},[478,56993,55694],{"class":714},[478,56995,32],{"class":51680},[478,56997,51687],{"class":714},[478,56999,57000,57002,57004,57006,57008],{"class":480,"line":17328},[478,57001,55682],{"class":714},[478,57003,32],{"class":51680},[478,57005,55694],{"class":714},[478,57007,32],{"class":51680},[478,57009,51687],{"class":714},[478,57011,57012,57014,57016,57018,57020],{"class":480,"line":17334},[478,57013,55682],{"class":714},[478,57015,32],{"class":51680},[478,57017,55694],{"class":714},[478,57019,32],{"class":51680},[478,57021,51687],{"class":714},[478,57023,57024,57026,57028,57030,57032],{"class":480,"line":17348},[478,57025,55682],{"class":714},[478,57027,32],{"class":51680},[478,57029,55694],{"class":714},[478,57031,32],{"class":51680},[478,57033,51687],{"class":714},[478,57035,57036,57038,57040,57042,57044],{"class":480,"line":17361},[478,57037,55682],{"class":714},[478,57039,32],{"class":51680},[478,57041,55694],{"class":714},[478,57043,32],{"class":51680},[478,57045,51687],{"class":714},[478,57047,57048,57050,57052],{"class":480,"line":17366},[478,57049,55787],{"class":714},[478,57051,1702],{"class":51680},[478,57053,51687],{"class":714},[478,57055,57056,57058,57060],{"class":480,"line":17380},[478,57057,52156],{"class":714},[478,57059,51991],{"class":51680},[478,57061,51687],{"class":714},[478,57063,57064,57066,57068],{"class":480,"line":17385},[478,57065,52797],{"class":714},[478,57067,51991],{"class":51680},[478,57069,51687],{"class":714},[478,57071,57072,57074,57076],{"class":480,"line":17391},[478,57073,52524],{"class":714},[478,57075,52193],{"class":51680},[478,57077,51687],{"class":714},[478,57079,57080,57082,57085,57087],{"class":480,"line":17396},[478,57081,11787],{"class":710},[478,57083,57084],{"class":495}," sliderData",[478,57086,14130],{"class":710},[478,57088,55827],{"class":714},[478,57090,57091,57093,57095,57097,57099,57101,57103],{"class":480,"line":17410},[478,57092,55832],{"class":714},[478,57094,55835],{"class":488},[478,57096,55838],{"class":714},[478,57098,55841],{"class":488},[478,57100,55844],{"class":714},[478,57102,55847],{"class":488},[478,57104,55850],{"class":714},[478,57106,57107,57109,57111,57113,57115,57117,57119],{"class":480,"line":17415},[478,57108,55832],{"class":714},[478,57110,55857],{"class":488},[478,57112,55838],{"class":714},[478,57114,55862],{"class":488},[478,57116,55844],{"class":714},[478,57118,55867],{"class":488},[478,57120,55850],{"class":714},[478,57122,57123,57125,57127,57129,57131,57133,57135],{"class":480,"line":17420},[478,57124,55832],{"class":714},[478,57126,55876],{"class":488},[478,57128,55838],{"class":714},[478,57130,55881],{"class":488},[478,57132,55844],{"class":714},[478,57134,55886],{"class":488},[478,57136,55850],{"class":714},[478,57138,57139,57141,57143,57145,57147,57149,57151],{"class":480,"line":17434},[478,57140,55832],{"class":714},[478,57142,55895],{"class":488},[478,57144,55838],{"class":714},[478,57146,55900],{"class":488},[478,57148,55844],{"class":714},[478,57150,55905],{"class":488},[478,57152,55850],{"class":714},[478,57154,57155,57157,57159,57161,57163,57165,57167],{"class":480,"line":17446},[478,57156,55832],{"class":714},[478,57158,55914],{"class":488},[478,57160,55838],{"class":714},[478,57162,55919],{"class":488},[478,57164,55844],{"class":714},[478,57166,55924],{"class":488},[478,57168,55850],{"class":714},[478,57170,57171,57173,57175,57177,57179,57181,57183],{"class":480,"line":17451},[478,57172,55832],{"class":714},[478,57174,55933],{"class":488},[478,57176,55838],{"class":714},[478,57178,55938],{"class":488},[478,57180,55844],{"class":714},[478,57182,55943],{"class":488},[478,57184,55850],{"class":714},[478,57186,57187,57189,57191,57193,57195,57197,57199],{"class":480,"line":17464},[478,57188,55832],{"class":714},[478,57190,55952],{"class":488},[478,57192,55838],{"class":714},[478,57194,55957],{"class":488},[478,57196,55844],{"class":714},[478,57198,55962],{"class":488},[478,57200,55850],{"class":714},[478,57202,57203,57205,57207,57209,57211,57213,57215],{"class":480,"line":17469},[478,57204,55832],{"class":714},[478,57206,55971],{"class":488},[478,57208,55838],{"class":714},[478,57210,55976],{"class":488},[478,57212,55844],{"class":714},[478,57214,55981],{"class":488},[478,57216,55984],{"class":714},[478,57218,57219],{"class":480,"line":17474},[478,57220,53489],{"class":714},[478,57222,57223],{"class":480,"line":17479},[478,57224,57225],{"class":770},"    \u002F\u002F 1.获取元素\n",[478,57227,57228,57230,57232,57234,57236,57238,57240,57242],{"class":480,"line":17492},[478,57229,11787],{"class":710},[478,57231,55995],{"class":495},[478,57233,14130],{"class":710},[478,57235,54776],{"class":714},[478,57237,54779],{"class":484},[478,57239,263],{"class":714},[478,57241,56006],{"class":488},[478,57243,720],{"class":714},[478,57245,57246,57248,57250,57252,57254,57256,57258,57260],{"class":480,"line":17497},[478,57247,11787],{"class":710},[478,57249,7391],{"class":495},[478,57251,14130],{"class":710},[478,57253,54776],{"class":714},[478,57255,54779],{"class":484},[478,57257,263],{"class":714},[478,57259,56025],{"class":488},[478,57261,720],{"class":714},[478,57263,57264,57266,57268,57270],{"class":480,"line":33013},[478,57265,52599],{"class":710},[478,57267,10004],{"class":714},[478,57269,759],{"class":710},[478,57271,47713],{"class":495},[478,57273,57274],{"class":480,"line":33019},[478,57275,57276],{"class":770},"    \u002F\u002F 2.开启定时器\n",[478,57278,57279],{"class":480,"line":33025},[478,57280,57281],{"class":770},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[478,57283,57284,57287,57289,57291],{"class":480,"line":33031},[478,57285,57286],{"class":484},"    setInterval",[478,57288,263],{"class":714},[478,57290,54829],{"class":710},[478,57292,54832],{"class":714},[478,57294,57295,57297],{"class":480,"line":33037},[478,57296,54837],{"class":714},[478,57298,3268],{"class":710},[478,57300,57301,57303,57305,57307,57310,57312],{"class":480,"line":33048},[478,57302,54860],{"class":710},[478,57304,54863],{"class":714},[478,57306,2277],{"class":710},[478,57308,57309],{"class":714}," sliderData.",[478,57311,52348],{"class":495},[478,57313,13008],{"class":714},[478,57315,57316,57319,57321],{"class":480,"line":33054},[478,57317,57318],{"class":714},"        i ",[478,57320,759],{"class":710},[478,57322,47713],{"class":495},[478,57324,57325],{"class":480,"line":33074},[478,57326,52778],{"class":714},[478,57328,57329],{"class":480,"line":33080},[478,57330,57331],{"class":770},"      \u002F\u002F 更换图片路径\n",[478,57333,57334,57336,57338],{"class":480,"line":33091},[478,57335,56101],{"class":714},[478,57337,759],{"class":710},[478,57339,57340],{"class":714}," sliderData[i].url\n",[478,57342,57343],{"class":480,"line":33097},[478,57344,57345],{"class":770},"      \u002F\u002F 把文字写到p里面\n",[478,57347,57348,57350,57352],{"class":480,"line":33103},[478,57349,56111],{"class":714},[478,57351,759],{"class":710},[478,57353,57354],{"class":714}," sliderData[i].title\n",[478,57356,57357],{"class":480,"line":33109},[478,57358,57359],{"class":770},"      \u002F\u002F 小圆点\n",[478,57361,57362],{"class":480,"line":33115},[478,57363,57364],{"class":770},"      \u002F\u002F 先删除以前的active\n",[478,57366,57367],{"class":480,"line":33121},[478,57368,57369],{"class":770},"      \u002F\u002F 只让当前li添加active\n",[478,57371,57372,57374,57376,57378,57381,57384,57387,57389,57391],{"class":480,"line":33127},[478,57373,56151],{"class":714},[478,57375,54779],{"class":484},[478,57377,263],{"class":714},[478,57379,57380],{"class":488},"'.slider-footer .activate'",[478,57382,57383],{"class":714},").classList.",[478,57385,57386],{"class":484},"remove",[478,57388,263],{"class":714},[478,57390,56169],{"class":488},[478,57392,720],{"class":714},[478,57394,57395,57397,57399,57401,57404,57406,57408,57410,57413,57415,57417,57419,57421],{"class":480,"line":33133},[478,57396,56151],{"class":714},[478,57398,54779],{"class":484},[478,57400,263],{"class":714},[478,57402,57403],{"class":488},"`.slider-footer ul li:nth-child(${",[478,57405,1141],{"class":714},[478,57407,45946],{"class":710},[478,57409,25498],{"class":495},[478,57411,57412],{"class":488},"})`",[478,57414,57383],{"class":714},[478,57416,5900],{"class":484},[478,57418,263],{"class":714},[478,57420,56169],{"class":488},[478,57422,720],{"class":714},[478,57424,57425],{"class":480,"line":33153},[478,57426,2966],{"emptyLinePlaceholder":640},[478,57428,57429,57431,57433],{"class":480,"line":33159},[478,57430,54915],{"class":714},[478,57432,6976],{"class":495},[478,57434,720],{"class":714},[478,57436,57437],{"class":480,"line":33175},[478,57438,2966],{"emptyLinePlaceholder":640},[478,57440,57441,57443,57445],{"class":480,"line":33181},[478,57442,52797],{"class":714},[478,57444,52193],{"class":51680},[478,57446,51687],{"class":714},[478,57448,57449,57451,57453],{"class":480,"line":33195},[478,57450,52165],{"class":714},[478,57452,52180],{"class":51680},[478,57454,51687],{"class":714},[478,57456,57457],{"class":480,"line":33201},[478,57458,2966],{"emptyLinePlaceholder":640},[478,57460,57461,57463,57465],{"class":480,"line":33216},[478,57462,52165],{"class":714},[478,57464,51015],{"class":51680},[478,57466,51687],{"class":714},[129,57468,57470],{"id":57469},"_317-重要知识点","3.1.7 重要知识点",[19,57472,57473,57474],{},"浏览器在渲染文本时， ",[45,57475,57476],{},"没有空格或换行符就没有“断行点”",[19,57478,57479],{},[52,57480],{"alt":54,"src":57481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57483,57484],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57486,57487],{},[52,57488],{"alt":54,"src":57489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57491,57492],{},[52,57493],{"alt":54,"src":57494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57496,57498],{"id":57497},"_32-dom事件基础","3.2 DOM事件基础",[129,57500,57502],{"id":57501},"_321-事件监听","3.2.1 事件监听",[19,57504,57505],{},[52,57506],{"alt":54,"src":57507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57509,57510],{},"事件监听有响应的发生",[19,57512,57513],{},[52,57514],{"alt":54,"src":57515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57517,57518],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57520,57521],{},"对于有名函数,要执行的函数名后边不要加()",[129,57523,57525],{"id":57524},"_322-随机点名案例","3.2.2 随机点名案例",[469,57527,57529],{"className":51013,"code":57528,"language":51015,"meta":54,"style":54},"\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",[475,57530,57531,57541,57555,57559,57567,57581,57601,57613,57621,57627,57637,57647,57651,57655,57662,57673,57677,57681,57687,57699,57713,57723,57735,57748,57752,57756,57763,57767,57780,57792,57804,57808,57812,57816,57823,57833,57837,57841,57850,57862,57874,57889,57893,57901,57909,57913,57921,57934,57948,57961,57981,57989,58004,58024,58044,58052,58056,58064,58069,58105,58125,58130,58149,58154,58165,58170,58181,58186,58205,58220,58225,58251,58261,58270,58275,58291,58296,58301,58306,58321,58325,58329,58334,58353,58370,58378,58383,58398,58402,58406,58414,58422,58426],{"__ignoreMap":54},[478,57532,57533,57535,57537,57539],{"class":480,"line":481},[478,57534,51677],{"class":714},[478,57536,51681],{"class":51680},[478,57538,51684],{"class":484},[478,57540,51687],{"class":714},[478,57542,57543,57545,57547,57549,57551,57553],{"class":480,"line":565},[478,57544,1605],{"class":714},[478,57546,51015],{"class":51680},[478,57548,51696],{"class":484},[478,57550,759],{"class":714},[478,57552,51701],{"class":488},[478,57554,51687],{"class":714},[478,57556,57557],{"class":480,"line":579},[478,57558,2966],{"emptyLinePlaceholder":640},[478,57560,57561,57563,57565],{"class":480,"line":593},[478,57562,1605],{"class":714},[478,57564,51714],{"class":51680},[478,57566,51687],{"class":714},[478,57568,57569,57571,57573,57575,57577,57579],{"class":480,"line":1769},[478,57570,52524],{"class":714},[478,57572,51724],{"class":51680},[478,57574,51727],{"class":484},[478,57576,759],{"class":714},[478,57578,51732],{"class":488},[478,57580,51687],{"class":714},[478,57582,57583,57585,57587,57589,57591,57593,57595,57597,57599],{"class":480,"line":1783},[478,57584,52524],{"class":714},[478,57586,51724],{"class":51680},[478,57588,15485],{"class":484},[478,57590,759],{"class":714},[478,57592,51771],{"class":488},[478,57594,51751],{"class":484},[478,57596,759],{"class":714},[478,57598,51778],{"class":488},[478,57600,51687],{"class":714},[478,57602,57603,57605,57607,57609,57611],{"class":480,"line":1789},[478,57604,52524],{"class":714},[478,57606,51787],{"class":51680},[478,57608,51790],{"class":714},[478,57610,51787],{"class":51680},[478,57612,51687],{"class":714},[478,57614,57615,57617,57619],{"class":480,"line":1880},[478,57616,52524],{"class":714},[478,57618,617],{"class":51680},[478,57620,51687],{"class":714},[478,57622,57623,57625],{"class":480,"line":1886},[478,57624,6969],{"class":51680},[478,57626,16137],{"class":714},[478,57628,57629,57631,57633,57635],{"class":480,"line":1898},[478,57630,55086],{"class":495},[478,57632,51817],{"class":714},[478,57634,895],{"class":495},[478,57636,1859],{"class":714},[478,57638,57639,57641,57643,57645],{"class":480,"line":2180},[478,57640,55075],{"class":495},[478,57642,51817],{"class":714},[478,57644,895],{"class":495},[478,57646,1859],{"class":714},[478,57648,57649],{"class":480,"line":2185},[478,57650,2753],{"class":714},[478,57652,57653],{"class":480,"line":2191},[478,57654,2966],{"emptyLinePlaceholder":640},[478,57656,57657,57660],{"class":480,"line":2196},[478,57658,57659],{"class":51680},"    h2",[478,57661,16137],{"class":714},[478,57663,57664,57667,57669,57671],{"class":480,"line":2210},[478,57665,57666],{"class":495},"      text-align",[478,57668,51817],{"class":714},[478,57670,51972],{"class":495},[478,57672,1859],{"class":714},[478,57674,57675],{"class":480,"line":2215},[478,57676,2753],{"class":714},[478,57678,57679],{"class":480,"line":2221},[478,57680,2966],{"emptyLinePlaceholder":640},[478,57682,57683,57685],{"class":480,"line":2241},[478,57684,55132],{"class":484},[478,57686,16137],{"class":714},[478,57688,57689,57691,57693,57695,57697],{"class":480,"line":2246},[478,57690,55151],{"class":495},[478,57692,51817],{"class":714},[478,57694,2107],{"class":495},[478,57696,51872],{"class":710},[478,57698,1859],{"class":714},[478,57700,57701,57703,57705,57707,57709,57711],{"class":480,"line":2260},[478,57702,55086],{"class":495},[478,57704,51817],{"class":714},[478,57706,1354],{"class":495},[478,57708,51872],{"class":710},[478,57710,51936],{"class":495},[478,57712,1859],{"class":714},[478,57714,57715,57717,57719,57721],{"class":480,"line":2265},[478,57716,55389],{"class":495},[478,57718,51817],{"class":714},[478,57720,51857],{"class":495},[478,57722,1859],{"class":714},[478,57724,57725,57727,57729,57731,57733],{"class":480,"line":2294},[478,57726,55302],{"class":495},[478,57728,51817],{"class":714},[478,57730,1520],{"class":495},[478,57732,51872],{"class":710},[478,57734,1859],{"class":714},[478,57736,57737,57740,57742,57744,57746],{"class":480,"line":2299},[478,57738,57739],{"class":495},"      line-height",[478,57741,51817],{"class":714},[478,57743,1102],{"class":495},[478,57745,51872],{"class":710},[478,57747,1859],{"class":714},[478,57749,57750],{"class":480,"line":2316},[478,57751,2753],{"class":714},[478,57753,57754],{"class":480,"line":2321},[478,57755,2966],{"emptyLinePlaceholder":640},[478,57757,57758,57761],{"class":480,"line":2326},[478,57759,57760],{"class":484},"    .qs",[478,57762,16137],{"class":714},[478,57764,57765],{"class":480,"line":2331},[478,57766,2966],{"emptyLinePlaceholder":640},[478,57768,57769,57771,57773,57776,57778],{"class":480,"line":2345},[478,57770,55151],{"class":495},[478,57772,51817],{"class":714},[478,57774,57775],{"class":495},"450",[478,57777,51872],{"class":710},[478,57779,1859],{"class":714},[478,57781,57782,57784,57786,57788,57790],{"class":480,"line":2350},[478,57783,55165],{"class":495},[478,57785,51817],{"class":714},[478,57787,1102],{"class":495},[478,57789,51872],{"class":710},[478,57791,1859],{"class":714},[478,57793,57794,57797,57799,57802],{"class":480,"line":3143},[478,57795,57796],{"class":495},"      color",[478,57798,51817],{"class":714},[478,57800,57801],{"class":495},"red",[478,57803,1859],{"class":714},[478,57805,57806],{"class":480,"line":3157},[478,57807,2966],{"emptyLinePlaceholder":640},[478,57809,57810],{"class":480,"line":3165},[478,57811,2753],{"class":714},[478,57813,57814],{"class":480,"line":3170},[478,57815,2966],{"emptyLinePlaceholder":640},[478,57817,57818,57821],{"class":480,"line":3176},[478,57819,57820],{"class":484},"    .btns",[478,57822,16137],{"class":714},[478,57824,57825,57827,57829,57831],{"class":480,"line":3182},[478,57826,57666],{"class":495},[478,57828,51817],{"class":714},[478,57830,51972],{"class":495},[478,57832,1859],{"class":714},[478,57834,57835],{"class":480,"line":3187},[478,57836,2753],{"class":714},[478,57838,57839],{"class":480,"line":8514},[478,57840,2966],{"emptyLinePlaceholder":640},[478,57842,57843,57845,57848],{"class":480,"line":8538},[478,57844,57820],{"class":484},[478,57846,57847],{"class":51680}," button",[478,57849,16137],{"class":714},[478,57851,57852,57854,57856,57858,57860],{"class":480,"line":8543},[478,57853,55151],{"class":495},[478,57855,51817],{"class":714},[478,57857,1512],{"class":495},[478,57859,51872],{"class":710},[478,57861,1859],{"class":714},[478,57863,57864,57866,57868,57870,57872],{"class":480,"line":8549},[478,57865,55165],{"class":495},[478,57867,51817],{"class":714},[478,57869,974],{"class":495},[478,57871,51872],{"class":710},[478,57873,1859],{"class":714},[478,57875,57876,57878,57880,57882,57885,57887],{"class":480,"line":8576},[478,57877,55086],{"class":495},[478,57879,51817],{"class":714},[478,57881,895],{"class":495},[478,57883,57884],{"class":495}," 50",[478,57886,51872],{"class":710},[478,57888,1859],{"class":714},[478,57890,57891],{"class":480,"line":8581},[478,57892,2753],{"class":714},[478,57894,57895,57897,57899],{"class":480,"line":8587},[478,57896,52797],{"class":714},[478,57898,617],{"class":51680},[478,57900,51687],{"class":714},[478,57902,57903,57905,57907],{"class":480,"line":8599},[478,57904,52165],{"class":714},[478,57906,51714],{"class":51680},[478,57908,51687],{"class":714},[478,57910,57911],{"class":480,"line":8611},[478,57912,2966],{"emptyLinePlaceholder":640},[478,57914,57915,57917,57919],{"class":480,"line":8623},[478,57916,1605],{"class":714},[478,57918,52180],{"class":51680},[478,57920,51687],{"class":714},[478,57922,57923,57925,57927,57930,57932],{"class":480,"line":10282},[478,57924,52524],{"class":714},[478,57926,14],{"class":51680},[478,57928,57929],{"class":714},">随机点名\u003C\u002F",[478,57931,14],{"class":51680},[478,57933,51687],{"class":714},[478,57935,57936,57938,57940,57942,57944,57946],{"class":480,"line":10307},[478,57937,52524],{"class":714},[478,57939,51991],{"class":51680},[478,57941,53866],{"class":484},[478,57943,759],{"class":714},[478,57945,53871],{"class":488},[478,57947,51687],{"class":714},[478,57949,57950,57952,57954,57957,57959],{"class":480,"line":10330},[478,57951,51721],{"class":714},[478,57953,478],{"class":51680},[478,57955,57956],{"class":714},">名字是：\u003C\u002F",[478,57958,478],{"class":51680},[478,57960,51687],{"class":714},[478,57962,57963,57965,57967,57969,57971,57974,57977,57979],{"class":480,"line":10354},[478,57964,51721],{"class":714},[478,57966,51991],{"class":51680},[478,57968,53866],{"class":484},[478,57970,759],{"class":714},[478,57972,57973],{"class":488},"\"qs\"",[478,57975,57976],{"class":714},">这里显示姓名\u003C\u002F",[478,57978,51991],{"class":51680},[478,57980,51687],{"class":714},[478,57982,57983,57985,57987],{"class":480,"line":10359},[478,57984,52797],{"class":714},[478,57986,51991],{"class":51680},[478,57988,51687],{"class":714},[478,57990,57991,57993,57995,57997,57999,58002],{"class":480,"line":10364},[478,57992,52524],{"class":714},[478,57994,51991],{"class":51680},[478,57996,53866],{"class":484},[478,57998,759],{"class":714},[478,58000,58001],{"class":488},"\"btns\"",[478,58003,51687],{"class":714},[478,58005,58006,58008,58010,58012,58014,58017,58020,58022],{"class":480,"line":10369},[478,58007,51721],{"class":714},[478,58009,54267],{"class":51680},[478,58011,53866],{"class":484},[478,58013,759],{"class":714},[478,58015,58016],{"class":488},"\"start\"",[478,58018,58019],{"class":714},">开始\u003C\u002F",[478,58021,54267],{"class":51680},[478,58023,51687],{"class":714},[478,58025,58026,58028,58030,58032,58034,58037,58040,58042],{"class":480,"line":10378},[478,58027,51721],{"class":714},[478,58029,54267],{"class":51680},[478,58031,53866],{"class":484},[478,58033,759],{"class":714},[478,58035,58036],{"class":488},"\"end\"",[478,58038,58039],{"class":714},">结束\u003C\u002F",[478,58041,54267],{"class":51680},[478,58043,51687],{"class":714},[478,58045,58046,58048,58050],{"class":480,"line":10383},[478,58047,52797],{"class":714},[478,58049,51991],{"class":51680},[478,58051,51687],{"class":714},[478,58053,58054],{"class":480,"line":10389},[478,58055,2966],{"emptyLinePlaceholder":640},[478,58057,58058,58060,58062],{"class":480,"line":10410},[478,58059,52524],{"class":714},[478,58061,52193],{"class":51680},[478,58063,51687],{"class":714},[478,58065,58066],{"class":480,"line":10416},[478,58067,58068],{"class":770},"    \u002F\u002F 数据数组\n",[478,58070,58071,58073,58076,58078,58080,58083,58085,58088,58090,58093,58095,58098,58100,58103],{"class":480,"line":10430},[478,58072,11787],{"class":710},[478,58074,58075],{"class":495}," arr",[478,58077,14130],{"class":710},[478,58079,52606],{"class":714},[478,58081,58082],{"class":488},"'马超'",[478,58084,13001],{"class":714},[478,58086,58087],{"class":488},"'黄忠'",[478,58089,13001],{"class":714},[478,58091,58092],{"class":488},"'赵云'",[478,58094,13001],{"class":714},[478,58096,58097],{"class":488},"'关羽'",[478,58099,13001],{"class":714},[478,58101,58102],{"class":488},"'张飞'",[478,58104,33626],{"class":714},[478,58106,58107,58109,58112,58114,58116,58118,58120,58123],{"class":480,"line":10436},[478,58108,11787],{"class":710},[478,58110,58111],{"class":495}," qs",[478,58113,14130],{"class":710},[478,58115,54776],{"class":714},[478,58117,54779],{"class":484},[478,58119,263],{"class":714},[478,58121,58122],{"class":488},"'.qs'",[478,58124,720],{"class":714},[478,58126,58127],{"class":480,"line":10463},[478,58128,58129],{"class":770},"    \u002F\u002F 1.业务1.开始按钮模块\n",[478,58131,58132,58134,58136,58138,58140,58142,58144,58147],{"class":480,"line":10472},[478,58133,11787],{"class":710},[478,58135,4750],{"class":495},[478,58137,14130],{"class":710},[478,58139,54776],{"class":714},[478,58141,54779],{"class":484},[478,58143,263],{"class":714},[478,58145,58146],{"class":488},"'.start'",[478,58148,720],{"class":714},[478,58150,58151],{"class":480,"line":10478},[478,58152,58153],{"class":770},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[478,58155,58156,58158,58161,58163],{"class":480,"line":10486},[478,58157,52599],{"class":710},[478,58159,58160],{"class":714}," timerId ",[478,58162,759],{"class":710},[478,58164,47713],{"class":495},[478,58166,58167],{"class":480,"line":10491},[478,58168,58169],{"class":770},"    \u002F\u002F 随机号要全局变量\n",[478,58171,58172,58174,58177,58179],{"class":480,"line":17169},[478,58173,52599],{"class":710},[478,58175,58176],{"class":714}," random ",[478,58178,759],{"class":710},[478,58180,47713],{"class":495},[478,58182,58183],{"class":480,"line":17175},[478,58184,58185],{"class":770},"    \u002F\u002F 1.1 添加点击事件\n",[478,58187,58188,58191,58194,58196,58199,58201,58203],{"class":480,"line":17198},[478,58189,58190],{"class":714},"    start.",[478,58192,58193],{"class":484},"addEventListener",[478,58195,263],{"class":714},[478,58197,58198],{"class":488},"'click'",[478,58200,13001],{"class":714},[478,58202,54829],{"class":710},[478,58204,54832],{"class":714},[478,58206,58207,58210,58212,58214,58216,58218],{"class":480,"line":17204},[478,58208,58209],{"class":714},"      timerId ",[478,58211,759],{"class":710},[478,58213,54824],{"class":484},[478,58215,263],{"class":714},[478,58217,54829],{"class":710},[478,58219,54832],{"class":714},[478,58221,58222],{"class":480,"line":17227},[478,58223,58224],{"class":770},"        \u002F\u002F 随机数\n",[478,58226,58227,58230,58232,58235,58238,58241,58243,58245,58247,58249],{"class":480,"line":17241},[478,58228,58229],{"class":714},"        random ",[478,58231,759],{"class":710},[478,58233,58234],{"class":484}," parseInt",[478,58236,58237],{"class":714},"(Math.",[478,58239,58240],{"class":484},"random",[478,58242,13616],{"class":714},[478,58244,1155],{"class":710},[478,58246,52345],{"class":714},[478,58248,52348],{"class":495},[478,58250,720],{"class":714},[478,58252,58253,58256,58258],{"class":480,"line":17261},[478,58254,58255],{"class":714},"        qs.innerHTML ",[478,58257,759],{"class":710},[478,58259,58260],{"class":714}," arr[random]\n",[478,58262,58263,58266,58268],{"class":480,"line":17267},[478,58264,58265],{"class":714},"      }, ",[478,58267,974],{"class":495},[478,58269,720],{"class":714},[478,58271,58272],{"class":480,"line":17278},[478,58273,58274],{"class":770},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[478,58276,58277,58279,58282,58284,58287,58289],{"class":480,"line":17301},[478,58278,54860],{"class":710},[478,58280,58281],{"class":714}," (arr.",[478,58283,52348],{"class":495},[478,58285,58286],{"class":710}," ===",[478,58288,25498],{"class":495},[478,58290,13008],{"class":714},[478,58292,58293],{"class":480,"line":17323},[478,58294,58295],{"class":770},"        \u002F\u002F start.disabled = true\n",[478,58297,58298],{"class":480,"line":17328},[478,58299,58300],{"class":770},"        \u002F\u002F end.disabled = true\n",[478,58302,58303],{"class":480,"line":17334},[478,58304,58305],{"class":770},"        \u002F\u002F 可以合起来写\n",[478,58307,58308,58311,58313,58316,58318],{"class":480,"line":17348},[478,58309,58310],{"class":714},"        start.disabled ",[478,58312,759],{"class":710},[478,58314,58315],{"class":714}," end.disabled ",[478,58317,759],{"class":710},[478,58319,58320],{"class":495}," true\n",[478,58322,58323],{"class":480,"line":17361},[478,58324,52778],{"class":714},[478,58326,58327],{"class":480,"line":17366},[478,58328,33841],{"class":714},[478,58330,58331],{"class":480,"line":17380},[478,58332,58333],{"class":770},"    \u002F\u002F 1.2 关闭按钮模块\n",[478,58335,58336,58338,58340,58342,58344,58346,58348,58351],{"class":480,"line":17385},[478,58337,11787],{"class":710},[478,58339,4766],{"class":495},[478,58341,14130],{"class":710},[478,58343,54776],{"class":714},[478,58345,54779],{"class":484},[478,58347,263],{"class":714},[478,58349,58350],{"class":488},"'.end'",[478,58352,720],{"class":714},[478,58354,58355,58358,58360,58362,58364,58366,58368],{"class":480,"line":17391},[478,58356,58357],{"class":714},"    end.",[478,58359,58193],{"class":484},[478,58361,263],{"class":714},[478,58363,58198],{"class":488},[478,58365,13001],{"class":714},[478,58367,54829],{"class":710},[478,58369,54832],{"class":714},[478,58371,58372,58375],{"class":480,"line":17396},[478,58373,58374],{"class":484},"      clearInterval",[478,58376,58377],{"class":714},"(timerId)\n",[478,58379,58380],{"class":480,"line":17410},[478,58381,58382],{"class":770},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[478,58384,58385,58388,58391,58394,58396],{"class":480,"line":17415},[478,58386,58387],{"class":714},"      arr.",[478,58389,58390],{"class":484},"splice",[478,58392,58393],{"class":714},"(random, ",[478,58395,193],{"class":495},[478,58397,720],{"class":714},[478,58399,58400],{"class":480,"line":17420},[478,58401,33841],{"class":714},[478,58403,58404],{"class":480,"line":17434},[478,58405,2966],{"emptyLinePlaceholder":640},[478,58407,58408,58410,58412],{"class":480,"line":17446},[478,58409,52797],{"class":714},[478,58411,52193],{"class":51680},[478,58413,51687],{"class":714},[478,58415,58416,58418,58420],{"class":480,"line":17451},[478,58417,52165],{"class":714},[478,58419,52180],{"class":51680},[478,58421,51687],{"class":714},[478,58423,58424],{"class":480,"line":17464},[478,58425,2966],{"emptyLinePlaceholder":640},[478,58427,58428,58430,58432],{"class":480,"line":17469},[478,58429,52165],{"class":714},[478,58431,51015],{"class":51680},[478,58433,51687],{"class":714},[19,58435,58436],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[129,58438,58440],{"id":58439},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[469,58442,58444],{"className":51013,"code":58443,"language":51015,"meta":54,"style":54},"\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",[475,58445,58446,58456,58470,58474,58482,58496,58516,58528,58536,58540,58548,58560,58568,58587,58604,58620,58630,58634,58642,58650,58654],{"__ignoreMap":54},[478,58447,58448,58450,58452,58454],{"class":480,"line":481},[478,58449,51677],{"class":714},[478,58451,51681],{"class":51680},[478,58453,51684],{"class":484},[478,58455,51687],{"class":714},[478,58457,58458,58460,58462,58464,58466,58468],{"class":480,"line":565},[478,58459,1605],{"class":714},[478,58461,51015],{"class":51680},[478,58463,51696],{"class":484},[478,58465,759],{"class":714},[478,58467,51701],{"class":488},[478,58469,51687],{"class":714},[478,58471,58472],{"class":480,"line":579},[478,58473,2966],{"emptyLinePlaceholder":640},[478,58475,58476,58478,58480],{"class":480,"line":593},[478,58477,1605],{"class":714},[478,58479,51714],{"class":51680},[478,58481,51687],{"class":714},[478,58483,58484,58486,58488,58490,58492,58494],{"class":480,"line":1769},[478,58485,52524],{"class":714},[478,58487,51724],{"class":51680},[478,58489,51727],{"class":484},[478,58491,759],{"class":714},[478,58493,51732],{"class":488},[478,58495,51687],{"class":714},[478,58497,58498,58500,58502,58504,58506,58508,58510,58512,58514],{"class":480,"line":1783},[478,58499,52524],{"class":714},[478,58501,51724],{"class":51680},[478,58503,15485],{"class":484},[478,58505,759],{"class":714},[478,58507,51771],{"class":488},[478,58509,51751],{"class":484},[478,58511,759],{"class":714},[478,58513,51778],{"class":488},[478,58515,51687],{"class":714},[478,58517,58518,58520,58522,58524,58526],{"class":480,"line":1789},[478,58519,52524],{"class":714},[478,58521,51787],{"class":51680},[478,58523,51790],{"class":714},[478,58525,51787],{"class":51680},[478,58527,51687],{"class":714},[478,58529,58530,58532,58534],{"class":480,"line":1880},[478,58531,52165],{"class":714},[478,58533,51714],{"class":51680},[478,58535,51687],{"class":714},[478,58537,58538],{"class":480,"line":1886},[478,58539,2966],{"emptyLinePlaceholder":640},[478,58541,58542,58544,58546],{"class":480,"line":1898},[478,58543,1605],{"class":714},[478,58545,52180],{"class":51680},[478,58547,51687],{"class":714},[478,58549,58550,58552,58554,58556,58558],{"class":480,"line":2180},[478,58551,52524],{"class":714},[478,58553,54267],{"class":51680},[478,58555,54273],{"class":714},[478,58557,54267],{"class":51680},[478,58559,51687],{"class":714},[478,58561,58562,58564,58566],{"class":480,"line":2185},[478,58563,52524],{"class":714},[478,58565,52193],{"class":51680},[478,58567,51687],{"class":714},[478,58569,58570,58572,58574,58576,58578,58580,58582,58585],{"class":480,"line":2191},[478,58571,11787],{"class":710},[478,58573,54771],{"class":495},[478,58575,14130],{"class":710},[478,58577,54776],{"class":714},[478,58579,54779],{"class":484},[478,58581,263],{"class":714},[478,58583,58584],{"class":488},"'button'",[478,58586,720],{"class":714},[478,58588,58589,58592,58594,58596,58598,58600,58602],{"class":480,"line":2196},[478,58590,58591],{"class":714},"    btn.",[478,58593,58193],{"class":484},[478,58595,263],{"class":714},[478,58597,58198],{"class":488},[478,58599,13001],{"class":714},[478,58601,54829],{"class":710},[478,58603,54832],{"class":714},[478,58605,58606,58609,58611,58613,58616,58618],{"class":480,"line":2210},[478,58607,58608],{"class":710},"      const",[478,58610,2806],{"class":495},[478,58612,14130],{"class":710},[478,58614,58615],{"class":714}," Math.",[478,58617,58240],{"class":484},[478,58619,2542],{"class":714},[478,58621,58622,58625,58628],{"class":480,"line":2215},[478,58623,58624],{"class":714},"      console.",[478,58626,58627],{"class":484},"log",[478,58629,727],{"class":714},[478,58631,58632],{"class":480,"line":2221},[478,58633,33841],{"class":714},[478,58635,58636,58638,58640],{"class":480,"line":2241},[478,58637,52797],{"class":714},[478,58639,52193],{"class":51680},[478,58641,51687],{"class":714},[478,58643,58644,58646,58648],{"class":480,"line":2246},[478,58645,52165],{"class":714},[478,58647,52180],{"class":51680},[478,58649,51687],{"class":714},[478,58651,58652],{"class":480,"line":2260},[478,58653,2966],{"emptyLinePlaceholder":640},[478,58655,58656,58658,58660],{"class":480,"line":2265},[478,58657,52165],{"class":714},[478,58659,51015],{"class":51680},[478,58661,51687],{"class":714},[19,58663,58664],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58666,58667],{},"常量不可以重新赋值",[19,58669,58670],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[469,58672,58674],{"className":51013,"code":58673,"language":51015,"meta":54,"style":54},"\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",[475,58675,58676,58686,58700,58704,58712,58726,58746,58758,58766,58770,58778,58790,58798,58809,58827,58843,58857,58865,58869,58877,58885,58889],{"__ignoreMap":54},[478,58677,58678,58680,58682,58684],{"class":480,"line":481},[478,58679,51677],{"class":714},[478,58681,51681],{"class":51680},[478,58683,51684],{"class":484},[478,58685,51687],{"class":714},[478,58687,58688,58690,58692,58694,58696,58698],{"class":480,"line":565},[478,58689,1605],{"class":714},[478,58691,51015],{"class":51680},[478,58693,51696],{"class":484},[478,58695,759],{"class":714},[478,58697,51701],{"class":488},[478,58699,51687],{"class":714},[478,58701,58702],{"class":480,"line":579},[478,58703,2966],{"emptyLinePlaceholder":640},[478,58705,58706,58708,58710],{"class":480,"line":593},[478,58707,1605],{"class":714},[478,58709,51714],{"class":51680},[478,58711,51687],{"class":714},[478,58713,58714,58716,58718,58720,58722,58724],{"class":480,"line":1769},[478,58715,52524],{"class":714},[478,58717,51724],{"class":51680},[478,58719,51727],{"class":484},[478,58721,759],{"class":714},[478,58723,51732],{"class":488},[478,58725,51687],{"class":714},[478,58727,58728,58730,58732,58734,58736,58738,58740,58742,58744],{"class":480,"line":1783},[478,58729,52524],{"class":714},[478,58731,51724],{"class":51680},[478,58733,15485],{"class":484},[478,58735,759],{"class":714},[478,58737,51771],{"class":488},[478,58739,51751],{"class":484},[478,58741,759],{"class":714},[478,58743,51778],{"class":488},[478,58745,51687],{"class":714},[478,58747,58748,58750,58752,58754,58756],{"class":480,"line":1789},[478,58749,52524],{"class":714},[478,58751,51787],{"class":51680},[478,58753,51790],{"class":714},[478,58755,51787],{"class":51680},[478,58757,51687],{"class":714},[478,58759,58760,58762,58764],{"class":480,"line":1880},[478,58761,52165],{"class":714},[478,58763,51714],{"class":51680},[478,58765,51687],{"class":714},[478,58767,58768],{"class":480,"line":1886},[478,58769,2966],{"emptyLinePlaceholder":640},[478,58771,58772,58774,58776],{"class":480,"line":1898},[478,58773,1605],{"class":714},[478,58775,52180],{"class":51680},[478,58777,51687],{"class":714},[478,58779,58780,58782,58784,58786,58788],{"class":480,"line":2180},[478,58781,52524],{"class":714},[478,58783,54267],{"class":51680},[478,58785,54273],{"class":714},[478,58787,54267],{"class":51680},[478,58789,51687],{"class":714},[478,58791,58792,58794,58796],{"class":480,"line":2185},[478,58793,52524],{"class":714},[478,58795,52193],{"class":51680},[478,58797,51687],{"class":714},[478,58799,58800,58802,58804,58806],{"class":480,"line":2191},[478,58801,11787],{"class":710},[478,58803,2806],{"class":495},[478,58805,14130],{"class":710},[478,58807,58808],{"class":495}," 10\n",[478,58810,58811,58813,58815,58817,58819,58821,58823,58825],{"class":480,"line":2196},[478,58812,11787],{"class":710},[478,58814,54771],{"class":495},[478,58816,14130],{"class":710},[478,58818,54776],{"class":714},[478,58820,54779],{"class":484},[478,58822,263],{"class":714},[478,58824,58584],{"class":488},[478,58826,720],{"class":714},[478,58828,58829,58831,58833,58835,58837,58839,58841],{"class":480,"line":2210},[478,58830,58591],{"class":714},[478,58832,58193],{"class":484},[478,58834,263],{"class":714},[478,58836,58198],{"class":488},[478,58838,13001],{"class":714},[478,58840,54829],{"class":710},[478,58842,54832],{"class":714},[478,58844,58845,58847,58849,58851,58853,58855],{"class":480,"line":2215},[478,58846,58608],{"class":710},[478,58848,2806],{"class":495},[478,58850,14130],{"class":710},[478,58852,58615],{"class":714},[478,58854,58240],{"class":484},[478,58856,2542],{"class":714},[478,58858,58859,58861,58863],{"class":480,"line":2221},[478,58860,58624],{"class":714},[478,58862,58627],{"class":484},[478,58864,727],{"class":714},[478,58866,58867],{"class":480,"line":2241},[478,58868,33841],{"class":714},[478,58870,58871,58873,58875],{"class":480,"line":2246},[478,58872,52797],{"class":714},[478,58874,52193],{"class":51680},[478,58876,51687],{"class":714},[478,58878,58879,58881,58883],{"class":480,"line":2260},[478,58880,52165],{"class":714},[478,58882,52180],{"class":51680},[478,58884,51687],{"class":714},[478,58886,58887],{"class":480,"line":2265},[478,58888,2966],{"emptyLinePlaceholder":640},[478,58890,58891,58893,58895],{"class":480,"line":2294},[478,58892,52165],{"class":714},[478,58894,51015],{"class":51680},[478,58896,51687],{"class":714},[19,58898,58899],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[469,58901,58903],{"className":51013,"code":58902,"language":51015,"meta":54,"style":54},"\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",[475,58904,58905,58915,58929,58933,58941,58955,58975,58987,58995,58999,59007,59019,59027,59037,59055,59071,59084,59092,59096,59104,59112,59116],{"__ignoreMap":54},[478,58906,58907,58909,58911,58913],{"class":480,"line":481},[478,58908,51677],{"class":714},[478,58910,51681],{"class":51680},[478,58912,51684],{"class":484},[478,58914,51687],{"class":714},[478,58916,58917,58919,58921,58923,58925,58927],{"class":480,"line":565},[478,58918,1605],{"class":714},[478,58920,51015],{"class":51680},[478,58922,51696],{"class":484},[478,58924,759],{"class":714},[478,58926,51701],{"class":488},[478,58928,51687],{"class":714},[478,58930,58931],{"class":480,"line":579},[478,58932,2966],{"emptyLinePlaceholder":640},[478,58934,58935,58937,58939],{"class":480,"line":593},[478,58936,1605],{"class":714},[478,58938,51714],{"class":51680},[478,58940,51687],{"class":714},[478,58942,58943,58945,58947,58949,58951,58953],{"class":480,"line":1769},[478,58944,52524],{"class":714},[478,58946,51724],{"class":51680},[478,58948,51727],{"class":484},[478,58950,759],{"class":714},[478,58952,51732],{"class":488},[478,58954,51687],{"class":714},[478,58956,58957,58959,58961,58963,58965,58967,58969,58971,58973],{"class":480,"line":1783},[478,58958,52524],{"class":714},[478,58960,51724],{"class":51680},[478,58962,15485],{"class":484},[478,58964,759],{"class":714},[478,58966,51771],{"class":488},[478,58968,51751],{"class":484},[478,58970,759],{"class":714},[478,58972,51778],{"class":488},[478,58974,51687],{"class":714},[478,58976,58977,58979,58981,58983,58985],{"class":480,"line":1789},[478,58978,52524],{"class":714},[478,58980,51787],{"class":51680},[478,58982,51790],{"class":714},[478,58984,51787],{"class":51680},[478,58986,51687],{"class":714},[478,58988,58989,58991,58993],{"class":480,"line":1880},[478,58990,52165],{"class":714},[478,58992,51714],{"class":51680},[478,58994,51687],{"class":714},[478,58996,58997],{"class":480,"line":1886},[478,58998,2966],{"emptyLinePlaceholder":640},[478,59000,59001,59003,59005],{"class":480,"line":1898},[478,59002,1605],{"class":714},[478,59004,52180],{"class":51680},[478,59006,51687],{"class":714},[478,59008,59009,59011,59013,59015,59017],{"class":480,"line":2180},[478,59010,52524],{"class":714},[478,59012,54267],{"class":51680},[478,59014,54273],{"class":714},[478,59016,54267],{"class":51680},[478,59018,51687],{"class":714},[478,59020,59021,59023,59025],{"class":480,"line":2185},[478,59022,52524],{"class":714},[478,59024,52193],{"class":51680},[478,59026,51687],{"class":714},[478,59028,59029,59031,59033,59035],{"class":480,"line":2191},[478,59030,11787],{"class":710},[478,59032,2806],{"class":495},[478,59034,14130],{"class":710},[478,59036,58808],{"class":495},[478,59038,59039,59041,59043,59045,59047,59049,59051,59053],{"class":480,"line":2196},[478,59040,11787],{"class":710},[478,59042,54771],{"class":495},[478,59044,14130],{"class":710},[478,59046,54776],{"class":714},[478,59048,54779],{"class":484},[478,59050,263],{"class":714},[478,59052,58584],{"class":488},[478,59054,720],{"class":714},[478,59056,59057,59059,59061,59063,59065,59067,59069],{"class":480,"line":2210},[478,59058,58591],{"class":714},[478,59060,58193],{"class":484},[478,59062,263],{"class":714},[478,59064,58198],{"class":488},[478,59066,13001],{"class":714},[478,59068,54829],{"class":710},[478,59070,54832],{"class":714},[478,59072,59073,59076,59078,59080,59082],{"class":480,"line":2215},[478,59074,59075],{"class":714},"      num ",[478,59077,759],{"class":710},[478,59079,58615],{"class":714},[478,59081,58240],{"class":484},[478,59083,2542],{"class":714},[478,59085,59086,59088,59090],{"class":480,"line":2221},[478,59087,58624],{"class":714},[478,59089,58627],{"class":484},[478,59091,727],{"class":714},[478,59093,59094],{"class":480,"line":2241},[478,59095,33841],{"class":714},[478,59097,59098,59100,59102],{"class":480,"line":2246},[478,59099,52797],{"class":714},[478,59101,52193],{"class":51680},[478,59103,51687],{"class":714},[478,59105,59106,59108,59110],{"class":480,"line":2260},[478,59107,52165],{"class":714},[478,59109,52180],{"class":51680},[478,59111,51687],{"class":714},[478,59113,59114],{"class":480,"line":2265},[478,59115,2966],{"emptyLinePlaceholder":640},[478,59117,59118,59120,59122],{"class":480,"line":2294},[478,59119,52165],{"class":714},[478,59121,51015],{"class":51680},[478,59123,51687],{"class":714},[19,59125,59126],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[129,59128,59130],{"id":59129},"_324-事件监听版本","3.2.4 事件监听版本",[19,59132,59133],{},[52,59134],{"alt":54,"src":59135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59137,59138],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59140,59141],{},"这种方式会覆盖前边的事件监听:",[469,59143,59145],{"className":51013,"code":59144,"language":51015,"meta":54,"style":54},"\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",[475,59146,59147,59157,59171,59175,59183,59197,59217,59229,59237,59241,59249,59261,59269,59287,59301,59312,59316,59328,59338,59342,59350,59358,59362],{"__ignoreMap":54},[478,59148,59149,59151,59153,59155],{"class":480,"line":481},[478,59150,51677],{"class":714},[478,59152,51681],{"class":51680},[478,59154,51684],{"class":484},[478,59156,51687],{"class":714},[478,59158,59159,59161,59163,59165,59167,59169],{"class":480,"line":565},[478,59160,1605],{"class":714},[478,59162,51015],{"class":51680},[478,59164,51696],{"class":484},[478,59166,759],{"class":714},[478,59168,51701],{"class":488},[478,59170,51687],{"class":714},[478,59172,59173],{"class":480,"line":579},[478,59174,2966],{"emptyLinePlaceholder":640},[478,59176,59177,59179,59181],{"class":480,"line":593},[478,59178,1605],{"class":714},[478,59180,51714],{"class":51680},[478,59182,51687],{"class":714},[478,59184,59185,59187,59189,59191,59193,59195],{"class":480,"line":1769},[478,59186,52524],{"class":714},[478,59188,51724],{"class":51680},[478,59190,51727],{"class":484},[478,59192,759],{"class":714},[478,59194,51732],{"class":488},[478,59196,51687],{"class":714},[478,59198,59199,59201,59203,59205,59207,59209,59211,59213,59215],{"class":480,"line":1783},[478,59200,52524],{"class":714},[478,59202,51724],{"class":51680},[478,59204,15485],{"class":484},[478,59206,759],{"class":714},[478,59208,51771],{"class":488},[478,59210,51751],{"class":484},[478,59212,759],{"class":714},[478,59214,51778],{"class":488},[478,59216,51687],{"class":714},[478,59218,59219,59221,59223,59225,59227],{"class":480,"line":1789},[478,59220,52524],{"class":714},[478,59222,51787],{"class":51680},[478,59224,51790],{"class":714},[478,59226,51787],{"class":51680},[478,59228,51687],{"class":714},[478,59230,59231,59233,59235],{"class":480,"line":1880},[478,59232,52165],{"class":714},[478,59234,51714],{"class":51680},[478,59236,51687],{"class":714},[478,59238,59239],{"class":480,"line":1886},[478,59240,2966],{"emptyLinePlaceholder":640},[478,59242,59243,59245,59247],{"class":480,"line":1898},[478,59244,1605],{"class":714},[478,59246,52180],{"class":51680},[478,59248,51687],{"class":714},[478,59250,59251,59253,59255,59257,59259],{"class":480,"line":2180},[478,59252,52524],{"class":714},[478,59254,54267],{"class":51680},[478,59256,54273],{"class":714},[478,59258,54267],{"class":51680},[478,59260,51687],{"class":714},[478,59262,59263,59265,59267],{"class":480,"line":2185},[478,59264,52524],{"class":714},[478,59266,52193],{"class":51680},[478,59268,51687],{"class":714},[478,59270,59271,59273,59275,59277,59279,59281,59283,59285],{"class":480,"line":2191},[478,59272,11787],{"class":710},[478,59274,54771],{"class":495},[478,59276,14130],{"class":710},[478,59278,54776],{"class":714},[478,59280,54779],{"class":484},[478,59282,263],{"class":714},[478,59284,58584],{"class":488},[478,59286,720],{"class":714},[478,59288,59289,59291,59294,59296,59299],{"class":480,"line":2196},[478,59290,58591],{"class":714},[478,59292,59293],{"class":484},"onclick",[478,59295,14130],{"class":710},[478,59297,59298],{"class":710}," function",[478,59300,54832],{"class":714},[478,59302,59303,59306,59308,59310],{"class":480,"line":2210},[478,59304,59305],{"class":484},"      alert",[478,59307,263],{"class":714},[478,59309,1172],{"class":495},[478,59311,720],{"class":714},[478,59313,59314],{"class":480,"line":2215},[478,59315,2753],{"class":714},[478,59317,59318,59320,59322,59324,59326],{"class":480,"line":2221},[478,59319,58591],{"class":714},[478,59321,59293],{"class":484},[478,59323,14130],{"class":710},[478,59325,59298],{"class":710},[478,59327,54832],{"class":714},[478,59329,59330,59332,59334,59336],{"class":480,"line":2241},[478,59331,59305],{"class":484},[478,59333,263],{"class":714},[478,59335,1445],{"class":495},[478,59337,720],{"class":714},[478,59339,59340],{"class":480,"line":2246},[478,59341,2753],{"class":714},[478,59343,59344,59346,59348],{"class":480,"line":2260},[478,59345,52797],{"class":714},[478,59347,52193],{"class":51680},[478,59349,51687],{"class":714},[478,59351,59352,59354,59356],{"class":480,"line":2265},[478,59353,52165],{"class":714},[478,59355,52180],{"class":51680},[478,59357,51687],{"class":714},[478,59359,59360],{"class":480,"line":2294},[478,59361,2966],{"emptyLinePlaceholder":640},[478,59363,59364,59366,59368],{"class":480,"line":2299},[478,59365,52165],{"class":714},[478,59367,51015],{"class":51680},[478,59369,51687],{"class":714},[19,59371,59372],{},"只要点击就输出结果为22,前边11被覆盖了",[469,59374,59376],{"className":51013,"code":59375,"language":51015,"meta":54,"style":54},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[475,59377,59378,59383,59388,59392,59397,59402],{"__ignoreMap":54},[478,59379,59380],{"class":480,"line":481},[478,59381,59382],{"class":714},"  btn.addEventListener('click', function () {\n",[478,59384,59385],{"class":480,"line":565},[478,59386,59387],{"class":714},"      alert(11)\n",[478,59389,59390],{"class":480,"line":579},[478,59391,33841],{"class":714},[478,59393,59394],{"class":480,"line":593},[478,59395,59396],{"class":714},"    btn.addEventListener('click', function () {\n",[478,59398,59399],{"class":480,"line":1769},[478,59400,59401],{"class":714},"      alert(22)\n",[478,59403,59404],{"class":480,"line":1783},[478,59405,33841],{"class":714},[19,59407,59408],{},"点击第一次输出11,第二次点击为22",[129,59410,59412],{"id":59411},"_325-事件类型","3.2.5 事件类型",[19,59414,59415],{},[52,59416],{"alt":54,"src":59417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22563,59419,59421],{"id":59420},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59423,59424],{},"补充知识:",[19,59426,59427],{},"轮播图自动播放模块,可以使用",[19,59429,59430],{},"let timerId = setInterval(function () {",[19,59432,59433],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59435,59436],{},"用js方法模拟进行点击事件,click必须加()",[19,59438,59439],{},"next.click()",[19,59441,59442],{},"}, 1000)",[19,59444,59445],{},[52,59446],{"alt":54,"src":59447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[469,59449,59451],{"className":53447,"code":59450,"language":53449,"meta":54,"style":54},"\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",[475,59452,59453,59457,59467,59481,59485,59493,59508,59528,59548,59561,59569,59574,59579,59583,59587,59592,59597,59602,59607,59611,59615,59620,59625,59630,59634,59638,59643,59647,59652,59657,59661,59665,59670,59675,59680,59685,59690,59694,59698,59703,59708,59713,59718,59723,59727,59731,59736,59741,59746,59751,59756,59761,59766,59771,59776,59781,59785,59789,59794,59799,59803,59807,59812,59817,59821,59826,59831,59835,59839,59844,59848,59853,59858,59862,59867,59871,59875,59880,59885,59890,59895,59900,59905,59910,59914,59918,59922,59927,59932,59937,59942,59946,59954,59962,59966,59974,59989,60003,60024,60032,60046,60059,60074,60093,60105,60117,60129,60141,60153,60165,60177,60185,60200,60224,60248,60256,60264,60272,60280,60285,60290,60295,60300,60305,60310,60315,60320,60325,60330,60334,60339,60344,60349,60354,60359,60364,60369,60374,60379,60383,60388,60393,60398,60403,60408,60413,60418,60423,60428,60433,60438,60443,60447,60451,60456,60461,60466,60470,60475,60480,60485,60490,60495,60499,60504,60508,60512,60516,60520,60524,60528,60533,60538,60543,60548,60553,60558,60563,60568,60573,60577,60581,60586,60591,60596,60601,60606,60610,60615,60620,60625,60630,60635,60640,60644,60648,60653,60657,60662,60666,60671,60676,60681,60686,60691,60696,60700,60708,60716,60720],{"__ignoreMap":54},[478,59454,59455],{"class":480,"line":481},[478,59456,2966],{"emptyLinePlaceholder":640},[478,59458,59459,59461,59463,59465],{"class":480,"line":565},[478,59460,51677],{"class":714},[478,59462,51681],{"class":710},[478,59464,51684],{"class":495},[478,59466,51687],{"class":714},[478,59468,59469,59471,59473,59475,59477,59479],{"class":480,"line":579},[478,59470,1605],{"class":714},[478,59472,51015],{"class":51680},[478,59474,51696],{"class":484},[478,59476,759],{"class":714},[478,59478,51701],{"class":488},[478,59480,51687],{"class":714},[478,59482,59483],{"class":480,"line":593},[478,59484,2966],{"emptyLinePlaceholder":640},[478,59486,59487,59489,59491],{"class":480,"line":1769},[478,59488,1605],{"class":714},[478,59490,51714],{"class":51680},[478,59492,51687],{"class":714},[478,59494,59495,59497,59499,59501,59503,59505],{"class":480,"line":1783},[478,59496,52524],{"class":714},[478,59498,51724],{"class":51680},[478,59500,51727],{"class":484},[478,59502,759],{"class":714},[478,59504,51732],{"class":488},[478,59506,59507],{"class":714}," \u002F>\n",[478,59509,59510,59512,59514,59516,59518,59520,59522,59524,59526],{"class":480,"line":1789},[478,59511,52524],{"class":714},[478,59513,51724],{"class":51680},[478,59515,51743],{"class":484},[478,59517,759],{"class":714},[478,59519,51748],{"class":488},[478,59521,51751],{"class":484},[478,59523,759],{"class":714},[478,59525,51756],{"class":488},[478,59527,59507],{"class":714},[478,59529,59530,59532,59534,59536,59538,59540,59542,59544,59546],{"class":480,"line":1880},[478,59531,52524],{"class":714},[478,59533,51724],{"class":51680},[478,59535,15485],{"class":484},[478,59537,759],{"class":714},[478,59539,51771],{"class":488},[478,59541,51751],{"class":484},[478,59543,759],{"class":714},[478,59545,51778],{"class":488},[478,59547,59507],{"class":714},[478,59549,59550,59552,59554,59557,59559],{"class":480,"line":1886},[478,59551,52524],{"class":714},[478,59553,51787],{"class":51680},[478,59555,59556],{"class":714},">轮播图点击切换\u003C\u002F",[478,59558,51787],{"class":51680},[478,59560,51687],{"class":714},[478,59562,59563,59565,59567],{"class":480,"line":1898},[478,59564,52524],{"class":714},[478,59566,617],{"class":51680},[478,59568,51687],{"class":714},[478,59570,59571],{"class":480,"line":2180},[478,59572,59573],{"class":714},"    * {\n",[478,59575,59576],{"class":480,"line":2185},[478,59577,59578],{"class":714},"      box-sizing: border-box;\n",[478,59580,59581],{"class":480,"line":2191},[478,59582,2753],{"class":714},[478,59584,59585],{"class":480,"line":2196},[478,59586,2966],{"emptyLinePlaceholder":640},[478,59588,59589],{"class":480,"line":2210},[478,59590,59591],{"class":714},"    .slider {\n",[478,59593,59594],{"class":480,"line":2215},[478,59595,59596],{"class":714},"      width: 560px;\n",[478,59598,59599],{"class":480,"line":2221},[478,59600,59601],{"class":714},"      height: 400px;\n",[478,59603,59604],{"class":480,"line":2241},[478,59605,59606],{"class":714},"      overflow: hidden;\n",[478,59608,59609],{"class":480,"line":2246},[478,59610,2753],{"class":714},[478,59612,59613],{"class":480,"line":2260},[478,59614,2966],{"emptyLinePlaceholder":640},[478,59616,59617],{"class":480,"line":2265},[478,59618,59619],{"class":714},"    .slider-wrapper {\n",[478,59621,59622],{"class":480,"line":2294},[478,59623,59624],{"class":714},"      width: 100%;\n",[478,59626,59627],{"class":480,"line":2299},[478,59628,59629],{"class":714},"      height: 320px;\n",[478,59631,59632],{"class":480,"line":2316},[478,59633,2753],{"class":714},[478,59635,59636],{"class":480,"line":2321},[478,59637,2966],{"emptyLinePlaceholder":640},[478,59639,59640],{"class":480,"line":2326},[478,59641,59642],{"class":714},"    .slider-wrapper img {\n",[478,59644,59645],{"class":480,"line":2331},[478,59646,59624],{"class":714},[478,59648,59649],{"class":480,"line":2345},[478,59650,59651],{"class":714},"      height: 100%;\n",[478,59653,59654],{"class":480,"line":2350},[478,59655,59656],{"class":714},"      display: block;\n",[478,59658,59659],{"class":480,"line":3143},[478,59660,2753],{"class":714},[478,59662,59663],{"class":480,"line":3157},[478,59664,2966],{"emptyLinePlaceholder":640},[478,59666,59667],{"class":480,"line":3165},[478,59668,59669],{"class":714},"    .slider-footer {\n",[478,59671,59672],{"class":480,"line":3170},[478,59673,59674],{"class":714},"      height: 80px;\n",[478,59676,59677],{"class":480,"line":3176},[478,59678,59679],{"class":714},"      background-color: rgb(100, 67, 68);\n",[478,59681,59682],{"class":480,"line":3182},[478,59683,59684],{"class":714},"      padding: 12px 12px 0 12px;\n",[478,59686,59687],{"class":480,"line":3187},[478,59688,59689],{"class":714},"      position: relative;\n",[478,59691,59692],{"class":480,"line":8514},[478,59693,2753],{"class":714},[478,59695,59696],{"class":480,"line":8538},[478,59697,2966],{"emptyLinePlaceholder":640},[478,59699,59700],{"class":480,"line":8543},[478,59701,59702],{"class":714},"    .slider-footer .toggle {\n",[478,59704,59705],{"class":480,"line":8549},[478,59706,59707],{"class":714},"      position: absolute;\n",[478,59709,59710],{"class":480,"line":8576},[478,59711,59712],{"class":714},"      right: 0;\n",[478,59714,59715],{"class":480,"line":8581},[478,59716,59717],{"class":714},"      top: 12px;\n",[478,59719,59720],{"class":480,"line":8587},[478,59721,59722],{"class":714},"      display: flex;\n",[478,59724,59725],{"class":480,"line":8599},[478,59726,2753],{"class":714},[478,59728,59729],{"class":480,"line":8611},[478,59730,2966],{"emptyLinePlaceholder":640},[478,59732,59733],{"class":480,"line":8623},[478,59734,59735],{"class":714},"    .slider-footer .toggle button {\n",[478,59737,59738],{"class":480,"line":10282},[478,59739,59740],{"class":714},"      margin-right: 12px;\n",[478,59742,59743],{"class":480,"line":10307},[478,59744,59745],{"class":714},"      width: 28px;\n",[478,59747,59748],{"class":480,"line":10330},[478,59749,59750],{"class":714},"      height: 28px;\n",[478,59752,59753],{"class":480,"line":10354},[478,59754,59755],{"class":714},"      appearance: none;\n",[478,59757,59758],{"class":480,"line":10359},[478,59759,59760],{"class":714},"      border: none;\n",[478,59762,59763],{"class":480,"line":10364},[478,59764,59765],{"class":714},"      background: rgba(255, 255, 255, 0.1);\n",[478,59767,59768],{"class":480,"line":10369},[478,59769,59770],{"class":714},"      color: #fff;\n",[478,59772,59773],{"class":480,"line":10378},[478,59774,59775],{"class":714},"      border-radius: 4px;\n",[478,59777,59778],{"class":480,"line":10383},[478,59779,59780],{"class":714},"      cursor: pointer;\n",[478,59782,59783],{"class":480,"line":10389},[478,59784,2753],{"class":714},[478,59786,59787],{"class":480,"line":10410},[478,59788,2966],{"emptyLinePlaceholder":640},[478,59790,59791],{"class":480,"line":10416},[478,59792,59793],{"class":714},"    .slider-footer .toggle button:hover {\n",[478,59795,59796],{"class":480,"line":10430},[478,59797,59798],{"class":714},"      background: rgba(255, 255, 255, 0.2);\n",[478,59800,59801],{"class":480,"line":10436},[478,59802,2753],{"class":714},[478,59804,59805],{"class":480,"line":10463},[478,59806,2966],{"emptyLinePlaceholder":640},[478,59808,59809],{"class":480,"line":10472},[478,59810,59811],{"class":714},"    .slider-footer p {\n",[478,59813,59814],{"class":480,"line":10478},[478,59815,59816],{"class":714},"      margin: 0;\n",[478,59818,59819],{"class":480,"line":10486},[478,59820,59770],{"class":714},[478,59822,59823],{"class":480,"line":10491},[478,59824,59825],{"class":714},"      font-size: 18px;\n",[478,59827,59828],{"class":480,"line":17169},[478,59829,59830],{"class":714},"      margin-bottom: 10px;\n",[478,59832,59833],{"class":480,"line":17175},[478,59834,2753],{"class":714},[478,59836,59837],{"class":480,"line":17198},[478,59838,2966],{"emptyLinePlaceholder":640},[478,59840,59841],{"class":480,"line":17204},[478,59842,59843],{"class":714},"    .slider-indicator {\n",[478,59845,59846],{"class":480,"line":17227},[478,59847,59816],{"class":714},[478,59849,59850],{"class":480,"line":17241},[478,59851,59852],{"class":714},"      padding: 0;\n",[478,59854,59855],{"class":480,"line":17261},[478,59856,59857],{"class":714},"      list-style: none;\n",[478,59859,59860],{"class":480,"line":17267},[478,59861,59722],{"class":714},[478,59863,59864],{"class":480,"line":17278},[478,59865,59866],{"class":714},"      align-items: center;\n",[478,59868,59869],{"class":480,"line":17301},[478,59870,2753],{"class":714},[478,59872,59873],{"class":480,"line":17323},[478,59874,2966],{"emptyLinePlaceholder":640},[478,59876,59877],{"class":480,"line":17328},[478,59878,59879],{"class":714},"    .slider-indicator li {\n",[478,59881,59882],{"class":480,"line":17334},[478,59883,59884],{"class":714},"      width: 8px;\n",[478,59886,59887],{"class":480,"line":17348},[478,59888,59889],{"class":714},"      height: 8px;\n",[478,59891,59892],{"class":480,"line":17361},[478,59893,59894],{"class":714},"      margin: 4px;\n",[478,59896,59897],{"class":480,"line":17366},[478,59898,59899],{"class":714},"      border-radius: 50%;\n",[478,59901,59902],{"class":480,"line":17380},[478,59903,59904],{"class":714},"      background: #fff;\n",[478,59906,59907],{"class":480,"line":17385},[478,59908,59909],{"class":714},"      opacity: 0.4;\n",[478,59911,59912],{"class":480,"line":17391},[478,59913,59780],{"class":714},[478,59915,59916],{"class":480,"line":17396},[478,59917,2753],{"class":714},[478,59919,59920],{"class":480,"line":17410},[478,59921,2966],{"emptyLinePlaceholder":640},[478,59923,59924],{"class":480,"line":17415},[478,59925,59926],{"class":714},"    .slider-indicator li.active {\n",[478,59928,59929],{"class":480,"line":17420},[478,59930,59931],{"class":714},"      width: 12px;\n",[478,59933,59934],{"class":480,"line":17434},[478,59935,59936],{"class":714},"      height: 12px;\n",[478,59938,59939],{"class":480,"line":17446},[478,59940,59941],{"class":714},"      opacity: 1;\n",[478,59943,59944],{"class":480,"line":17451},[478,59945,2753],{"class":714},[478,59947,59948,59950,59952],{"class":480,"line":17464},[478,59949,52797],{"class":714},[478,59951,617],{"class":51680},[478,59953,51687],{"class":714},[478,59955,59956,59958,59960],{"class":480,"line":17469},[478,59957,52165],{"class":714},[478,59959,51714],{"class":51680},[478,59961,51687],{"class":714},[478,59963,59964],{"class":480,"line":17474},[478,59965,2966],{"emptyLinePlaceholder":640},[478,59967,59968,59970,59972],{"class":480,"line":17479},[478,59969,1605],{"class":714},[478,59971,52180],{"class":51680},[478,59973,51687],{"class":714},[478,59975,59976,59978,59980,59982,59984,59987],{"class":480,"line":17492},[478,59977,52524],{"class":714},[478,59979,51991],{"class":51680},[478,59981,53866],{"class":484},[478,59983,759],{"class":714},[478,59985,59986],{"class":488},"\"slider\"",[478,59988,51687],{"class":714},[478,59990,59991,59993,59995,59997,59999,60001],{"class":480,"line":17497},[478,59992,51721],{"class":714},[478,59994,51991],{"class":51680},[478,59996,53866],{"class":484},[478,59998,759],{"class":714},[478,60000,55607],{"class":488},[478,60002,51687],{"class":714},[478,60004,60005,60007,60009,60011,60013,60016,60018,60020,60022],{"class":480,"line":33013},[478,60006,55614],{"class":714},[478,60008,52],{"class":51680},[478,60010,55619],{"class":484},[478,60012,759],{"class":714},[478,60014,60015],{"class":488},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[478,60017,55627],{"class":484},[478,60019,759],{"class":714},[478,60021,8218],{"class":488},[478,60023,59507],{"class":714},[478,60025,60026,60028,60030],{"class":480,"line":33019},[478,60027,52156],{"class":714},[478,60029,51991],{"class":51680},[478,60031,51687],{"class":714},[478,60033,60034,60036,60038,60040,60042,60044],{"class":480,"line":33025},[478,60035,51721],{"class":714},[478,60037,51991],{"class":51680},[478,60039,53866],{"class":484},[478,60041,759],{"class":714},[478,60043,55654],{"class":488},[478,60045,51687],{"class":714},[478,60047,60048,60050,60052,60055,60057],{"class":480,"line":33031},[478,60049,55614],{"class":714},[478,60051,19],{"class":51680},[478,60053,60054],{"class":714},">对人类来说会不会太超前了？\u003C\u002F",[478,60056,19],{"class":51680},[478,60058,51687],{"class":714},[478,60060,60061,60063,60065,60067,60069,60072],{"class":480,"line":33037},[478,60062,55614],{"class":714},[478,60064,1702],{"class":51680},[478,60066,53866],{"class":484},[478,60068,759],{"class":714},[478,60070,60071],{"class":488},"\"slider-indicator\"",[478,60073,51687],{"class":714},[478,60075,60076,60078,60080,60082,60084,60087,60089,60091],{"class":480,"line":33048},[478,60077,55682],{"class":714},[478,60079,32],{"class":51680},[478,60081,53866],{"class":484},[478,60083,759],{"class":714},[478,60085,60086],{"class":488},"\"active\"",[478,60088,55694],{"class":714},[478,60090,32],{"class":51680},[478,60092,51687],{"class":714},[478,60094,60095,60097,60099,60101,60103],{"class":480,"line":33054},[478,60096,55682],{"class":714},[478,60098,32],{"class":51680},[478,60100,55694],{"class":714},[478,60102,32],{"class":51680},[478,60104,51687],{"class":714},[478,60106,60107,60109,60111,60113,60115],{"class":480,"line":33074},[478,60108,55682],{"class":714},[478,60110,32],{"class":51680},[478,60112,55694],{"class":714},[478,60114,32],{"class":51680},[478,60116,51687],{"class":714},[478,60118,60119,60121,60123,60125,60127],{"class":480,"line":33080},[478,60120,55682],{"class":714},[478,60122,32],{"class":51680},[478,60124,55694],{"class":714},[478,60126,32],{"class":51680},[478,60128,51687],{"class":714},[478,60130,60131,60133,60135,60137,60139],{"class":480,"line":33091},[478,60132,55682],{"class":714},[478,60134,32],{"class":51680},[478,60136,55694],{"class":714},[478,60138,32],{"class":51680},[478,60140,51687],{"class":714},[478,60142,60143,60145,60147,60149,60151],{"class":480,"line":33097},[478,60144,55682],{"class":714},[478,60146,32],{"class":51680},[478,60148,55694],{"class":714},[478,60150,32],{"class":51680},[478,60152,51687],{"class":714},[478,60154,60155,60157,60159,60161,60163],{"class":480,"line":33103},[478,60156,55682],{"class":714},[478,60158,32],{"class":51680},[478,60160,55694],{"class":714},[478,60162,32],{"class":51680},[478,60164,51687],{"class":714},[478,60166,60167,60169,60171,60173,60175],{"class":480,"line":33109},[478,60168,55682],{"class":714},[478,60170,32],{"class":51680},[478,60172,55694],{"class":714},[478,60174,32],{"class":51680},[478,60176,51687],{"class":714},[478,60178,60179,60181,60183],{"class":480,"line":33115},[478,60180,55787],{"class":714},[478,60182,1702],{"class":51680},[478,60184,51687],{"class":714},[478,60186,60187,60189,60191,60193,60195,60198],{"class":480,"line":33121},[478,60188,55614],{"class":714},[478,60190,51991],{"class":51680},[478,60192,53866],{"class":484},[478,60194,759],{"class":714},[478,60196,60197],{"class":488},"\"toggle\"",[478,60199,51687],{"class":714},[478,60201,60202,60204,60206,60208,60210,60213,60215,60218,60220,60222],{"class":480,"line":33127},[478,60203,55682],{"class":714},[478,60205,54267],{"class":51680},[478,60207,53866],{"class":484},[478,60209,759],{"class":714},[478,60211,60212],{"class":488},"\"prev\"",[478,60214,1655],{"class":714},[478,60216,60217],{"class":495},"&lt;",[478,60219,52165],{"class":714},[478,60221,54267],{"class":51680},[478,60223,51687],{"class":714},[478,60225,60226,60228,60230,60232,60234,60237,60239,60242,60244,60246],{"class":480,"line":33133},[478,60227,55682],{"class":714},[478,60229,54267],{"class":51680},[478,60231,53866],{"class":484},[478,60233,759],{"class":714},[478,60235,60236],{"class":488},"\"next\"",[478,60238,1655],{"class":714},[478,60240,60241],{"class":495},"&gt;",[478,60243,52165],{"class":714},[478,60245,54267],{"class":51680},[478,60247,51687],{"class":714},[478,60249,60250,60252,60254],{"class":480,"line":33153},[478,60251,55787],{"class":714},[478,60253,51991],{"class":51680},[478,60255,51687],{"class":714},[478,60257,60258,60260,60262],{"class":480,"line":33159},[478,60259,52156],{"class":714},[478,60261,51991],{"class":51680},[478,60263,51687],{"class":714},[478,60265,60266,60268,60270],{"class":480,"line":33175},[478,60267,52797],{"class":714},[478,60269,51991],{"class":51680},[478,60271,51687],{"class":714},[478,60273,60274,60276,60278],{"class":480,"line":33181},[478,60275,52524],{"class":714},[478,60277,52193],{"class":51680},[478,60279,51687],{"class":714},[478,60281,60282],{"class":480,"line":33195},[478,60283,60284],{"class":714},"    \u002F\u002F 1. 初始数据\n",[478,60286,60287],{"class":480,"line":33201},[478,60288,60289],{"class":714},"    const data = [\n",[478,60291,60292],{"class":480,"line":33216},[478,60293,60294],{"class":714},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[478,60296,60297],{"class":480,"line":33222},[478,60298,60299],{"class":714},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[478,60301,60302],{"class":480,"line":33231},[478,60303,60304],{"class":714},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[478,60306,60307],{"class":480,"line":33237},[478,60308,60309],{"class":714},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[478,60311,60312],{"class":480,"line":33246},[478,60313,60314],{"class":714},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[478,60316,60317],{"class":480,"line":33252},[478,60318,60319],{"class":714},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[478,60321,60322],{"class":480,"line":33258},[478,60323,60324],{"class":714},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[478,60326,60327],{"class":480,"line":33267},[478,60328,60329],{"class":714},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[478,60331,60332],{"class":480,"line":33273},[478,60333,53489],{"class":714},[478,60335,60336],{"class":480,"line":33284},[478,60337,60338],{"class":714},"    \u002F\u002F 获取元素\n",[478,60340,60341],{"class":480,"line":33290},[478,60342,60343],{"class":714},"    const img = document.querySelector('.slider-wrapper img')\n",[478,60345,60346],{"class":480,"line":33309},[478,60347,60348],{"class":714},"    const p = document.querySelector('.slider-footer p')\n",[478,60350,60351],{"class":480,"line":33315},[478,60352,60353],{"class":714},"    const footer = document.querySelector('.slider-footer')\n",[478,60355,60356],{"class":480,"line":33326},[478,60357,60358],{"class":714},"    \u002F\u002F 1. 右按钮业务\n",[478,60360,60361],{"class":480,"line":33332},[478,60362,60363],{"class":714},"    \u002F\u002F 1.1 获取右侧按钮 \n",[478,60365,60366],{"class":480,"line":33352},[478,60367,60368],{"class":714},"    const next = document.querySelector('.next')\n",[478,60370,60371],{"class":480,"line":33368},[478,60372,60373],{"class":714},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[478,60375,60376],{"class":480,"line":33374},[478,60377,60378],{"class":714},"    \u002F\u002F 1.2 注册点击事件\n",[478,60380,60381],{"class":480,"line":33388},[478,60382,2966],{"emptyLinePlaceholder":640},[478,60384,60385],{"class":480,"line":33394},[478,60386,60387],{"class":714},"    next.addEventListener('click', function () {\n",[478,60389,60390],{"class":480,"line":33400},[478,60391,60392],{"class":714},"      \u002F\u002F console.log(11)\n",[478,60394,60395],{"class":480,"line":33411},[478,60396,60397],{"class":714},"      i++\n",[478,60399,60400],{"class":480,"line":33417},[478,60401,60402],{"class":714},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[478,60404,60405],{"class":480,"line":33423},[478,60406,60407],{"class":714},"      \u002F\u002F if (i >= 8) {\n",[478,60409,60410],{"class":480,"line":33433},[478,60411,60412],{"class":714},"      \u002F\u002F   i = 0\n",[478,60414,60415],{"class":480,"line":33439},[478,60416,60417],{"class":714},"      \u002F\u002F }\n",[478,60419,60420],{"class":480,"line":33450},[478,60421,60422],{"class":714},"      i = i >= data.length ? 0 : i\n",[478,60424,60425],{"class":480,"line":33456},[478,60426,60427],{"class":714},"      \u002F\u002F 1.3 得到对应的对象\n",[478,60429,60430],{"class":480,"line":33466},[478,60431,60432],{"class":714},"      \u002F\u002F console.log(data[i])\n",[478,60434,60435],{"class":480,"line":33471},[478,60436,60437],{"class":714},"      \u002F\u002F 调用函数\n",[478,60439,60440],{"class":480,"line":33477},[478,60441,60442],{"class":714},"      toggle()\n",[478,60444,60445],{"class":480,"line":33526},[478,60446,33841],{"class":714},[478,60448,60449],{"class":480,"line":33573},[478,60450,2966],{"emptyLinePlaceholder":640},[478,60452,60453],{"class":480,"line":33578},[478,60454,60455],{"class":714},"    \u002F\u002F 2. 左侧按钮业务\n",[478,60457,60458],{"class":480,"line":33584},[478,60459,60460],{"class":714},"    \u002F\u002F 2.1 获取左侧按钮 \n",[478,60462,60463],{"class":480,"line":33603},[478,60464,60465],{"class":714},"    const prev = document.querySelector('.prev')\n",[478,60467,60468],{"class":480,"line":33609},[478,60469,60378],{"class":714},[478,60471,60472],{"class":480,"line":33629},[478,60473,60474],{"class":714},"    prev.addEventListener('click', function () {\n",[478,60476,60477],{"class":480,"line":33635},[478,60478,60479],{"class":714},"      i--\n",[478,60481,60482],{"class":480,"line":33641},[478,60483,60484],{"class":714},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[478,60486,60487],{"class":480,"line":33651},[478,60488,60489],{"class":714},"      \u002F\u002F if (i \u003C 0) {\n",[478,60491,60492],{"class":480,"line":33656},[478,60493,60494],{"class":714},"      \u002F\u002F   i = 7\n",[478,60496,60497],{"class":480,"line":33662},[478,60498,60417],{"class":714},[478,60500,60501],{"class":480,"line":33678},[478,60502,60503],{"class":714},"      i = i \u003C 0 ? data.length - 1 : i\n",[478,60505,60506],{"class":480,"line":33723},[478,60507,60427],{"class":714},[478,60509,60510],{"class":480,"line":33729},[478,60511,60432],{"class":714},[478,60513,60514],{"class":480,"line":33735},[478,60515,60437],{"class":714},[478,60517,60518],{"class":480,"line":33741},[478,60519,60442],{"class":714},[478,60521,60522],{"class":480,"line":33752},[478,60523,33841],{"class":714},[478,60525,60526],{"class":480,"line":33758},[478,60527,2966],{"emptyLinePlaceholder":640},[478,60529,60530],{"class":480,"line":33764},[478,60531,60532],{"class":714},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[478,60534,60535],{"class":480,"line":33770},[478,60536,60537],{"class":714},"    function toggle() {\n",[478,60539,60540],{"class":480,"line":33788},[478,60541,60542],{"class":714},"      \u002F\u002F 1.4 渲染对应的数据\n",[478,60544,60545],{"class":480,"line":33802},[478,60546,60547],{"class":714},"      img.src = data[i].url\n",[478,60549,60550],{"class":480,"line":33811},[478,60551,60552],{"class":714},"      p.innerHTML = data[i].title\n",[478,60554,60555],{"class":480,"line":33820},[478,60556,60557],{"class":714},"      footer.style.backgroundColor = data[i].color\n",[478,60559,60560],{"class":480,"line":33829},[478,60561,60562],{"class":714},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[478,60564,60565],{"class":480,"line":33838},[478,60566,60567],{"class":714},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[478,60569,60570],{"class":480,"line":33844},[478,60571,60572],{"class":714},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[478,60574,60575],{"class":480,"line":33850},[478,60576,2753],{"class":714},[478,60578,60579],{"class":480,"line":33858},[478,60580,2966],{"emptyLinePlaceholder":640},[478,60582,60583],{"class":480,"line":33863},[478,60584,60585],{"class":714},"    \u002F\u002F 3. 自动播放模块\n",[478,60587,60588],{"class":480,"line":33869},[478,60589,60590],{"class":714},"    let timerId = setInterval(function () {\n",[478,60592,60593],{"class":480,"line":33880},[478,60594,60595],{"class":714},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[478,60597,60598],{"class":480,"line":33886},[478,60599,60600],{"class":714},"      next.click()\n",[478,60602,60603],{"class":480,"line":33906},[478,60604,60605],{"class":714},"    }, 1000)\n",[478,60607,60608],{"class":480,"line":33912},[478,60609,2966],{"emptyLinePlaceholder":640},[478,60611,60612],{"class":480,"line":33918},[478,60613,60614],{"class":714},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[478,60616,60617],{"class":480,"line":33924},[478,60618,60619],{"class":714},"    const slider = document.querySelector('.slider')\n",[478,60621,60622],{"class":480,"line":33941},[478,60623,60624],{"class":714},"    \u002F\u002F 注册事件\n",[478,60626,60627],{"class":480,"line":33947},[478,60628,60629],{"class":714},"    slider.addEventListener('mouseenter', function () {\n",[478,60631,60632],{"class":480,"line":33953},[478,60633,60634],{"class":714},"      \u002F\u002F 停止定时器\n",[478,60636,60637],{"class":480,"line":33959},[478,60638,60639],{"class":714},"      clearInterval(timerId)\n",[478,60641,60642],{"class":480,"line":33965},[478,60643,33841],{"class":714},[478,60645,60646],{"class":480,"line":33971},[478,60647,2966],{"emptyLinePlaceholder":640},[478,60649,60650],{"class":480,"line":33998},[478,60651,60652],{"class":714},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[478,60654,60655],{"class":480,"line":34022},[478,60656,60624],{"class":714},[478,60658,60659],{"class":480,"line":34028},[478,60660,60661],{"class":714},"    slider.addEventListener('mouseleave', function () {\n",[478,60663,60664],{"class":480,"line":34034},[478,60665,60634],{"class":714},[478,60667,60668],{"class":480,"line":34040},[478,60669,60670],{"class":714},"      if (timerId) clearInterval(timerId)\n",[478,60672,60673],{"class":480,"line":34051},[478,60674,60675],{"class":714},"      \u002F\u002F 开启定时器\n",[478,60677,60678],{"class":480,"line":34062},[478,60679,60680],{"class":714},"      timerId = setInterval(function () {\n",[478,60682,60683],{"class":480,"line":34068},[478,60684,60685],{"class":714},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[478,60687,60688],{"class":480,"line":34085},[478,60689,60690],{"class":714},"        next.click()\n",[478,60692,60693],{"class":480,"line":34108},[478,60694,60695],{"class":714},"      }, 1000)\n",[478,60697,60698],{"class":480,"line":34131},[478,60699,33841],{"class":714},[478,60701,60702,60704,60706],{"class":480,"line":34137},[478,60703,52797],{"class":714},[478,60705,52193],{"class":51680},[478,60707,51687],{"class":714},[478,60709,60710,60712,60714],{"class":480,"line":34142},[478,60711,52165],{"class":714},[478,60713,52180],{"class":51680},[478,60715,51687],{"class":714},[478,60717,60718],{"class":480,"line":34151},[478,60719,2966],{"emptyLinePlaceholder":640},[478,60721,60722,60724,60726],{"class":480,"line":34161},[478,60723,52165],{"class":714},[478,60725,51015],{"class":51680},[478,60727,51687],{"class":714},[22563,60729,60731],{"id":60730},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60733,60734],{},"小米搜索框案例：",[469,60736,60738],{"className":51013,"code":60737,"language":51015,"meta":54,"style":54},"\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",[475,60739,60740,60750,60764,60768,60776,60790,60810,60830,60842,60850,60856,60866,60876,60888,60892,60896,60903,60907,60918,60922,60926,60933,60944,60957,60971,60975,60979,60988,61000,61012,61026,61039,61052,61070,61081,61085,61089,61098,61115,61119,61123,61130,61140,61150,61161,61174,61186,61202,61213,61225,61229,61233,61241,61252,61269,61281,61293,61304,61308,61312,61323,61334,61338,61346,61350,61358,61362,61370,61385,61408,61423,61454,61481,61508,61535,61562,61589,61616,61625,61633,61641,61646,61666,61686,61691,61696,61714,61719,61729,61734,61748,61753,61758,61775,61784,61796,61800,61808,61816,61820],{"__ignoreMap":54},[478,60741,60742,60744,60746,60748],{"class":480,"line":481},[478,60743,51677],{"class":714},[478,60745,51681],{"class":51680},[478,60747,51684],{"class":484},[478,60749,51687],{"class":714},[478,60751,60752,60754,60756,60758,60760,60762],{"class":480,"line":565},[478,60753,1605],{"class":714},[478,60755,51015],{"class":51680},[478,60757,51696],{"class":484},[478,60759,759],{"class":714},[478,60761,51701],{"class":488},[478,60763,51687],{"class":714},[478,60765,60766],{"class":480,"line":579},[478,60767,2966],{"emptyLinePlaceholder":640},[478,60769,60770,60772,60774],{"class":480,"line":593},[478,60771,1605],{"class":714},[478,60773,51714],{"class":51680},[478,60775,51687],{"class":714},[478,60777,60778,60780,60782,60784,60786,60788],{"class":480,"line":1769},[478,60779,51721],{"class":714},[478,60781,51724],{"class":51680},[478,60783,51727],{"class":484},[478,60785,759],{"class":714},[478,60787,51732],{"class":488},[478,60789,51687],{"class":714},[478,60791,60792,60794,60796,60798,60800,60802,60804,60806,60808],{"class":480,"line":1783},[478,60793,51721],{"class":714},[478,60795,51724],{"class":51680},[478,60797,51743],{"class":484},[478,60799,759],{"class":714},[478,60801,51748],{"class":488},[478,60803,51751],{"class":484},[478,60805,759],{"class":714},[478,60807,51756],{"class":488},[478,60809,51687],{"class":714},[478,60811,60812,60814,60816,60818,60820,60822,60824,60826,60828],{"class":480,"line":1789},[478,60813,51721],{"class":714},[478,60815,51724],{"class":51680},[478,60817,15485],{"class":484},[478,60819,759],{"class":714},[478,60821,51771],{"class":488},[478,60823,51751],{"class":484},[478,60825,759],{"class":714},[478,60827,51778],{"class":488},[478,60829,51687],{"class":714},[478,60831,60832,60834,60836,60838,60840],{"class":480,"line":1880},[478,60833,51721],{"class":714},[478,60835,51787],{"class":51680},[478,60837,51790],{"class":714},[478,60839,51787],{"class":51680},[478,60841,51687],{"class":714},[478,60843,60844,60846,60848],{"class":480,"line":1886},[478,60845,51721],{"class":714},[478,60847,617],{"class":51680},[478,60849,51687],{"class":714},[478,60851,60852,60854],{"class":480,"line":1898},[478,60853,51807],{"class":51680},[478,60855,16137],{"class":714},[478,60857,60858,60860,60862,60864],{"class":480,"line":2180},[478,60859,51814],{"class":495},[478,60861,51817],{"class":714},[478,60863,895],{"class":495},[478,60865,1859],{"class":714},[478,60867,60868,60870,60872,60874],{"class":480,"line":2185},[478,60869,51826],{"class":495},[478,60871,51817],{"class":714},[478,60873,895],{"class":495},[478,60875,1859],{"class":714},[478,60877,60878,60881,60883,60886],{"class":480,"line":2191},[478,60879,60880],{"class":495},"            box-sizing",[478,60882,51817],{"class":714},[478,60884,60885],{"class":495},"border-box",[478,60887,1859],{"class":714},[478,60889,60890],{"class":480,"line":2196},[478,60891,3095],{"class":714},[478,60893,60894],{"class":480,"line":2210},[478,60895,2966],{"emptyLinePlaceholder":640},[478,60897,60898,60901],{"class":480,"line":2215},[478,60899,60900],{"class":51680},"        ul",[478,60902,16137],{"class":714},[478,60904,60905],{"class":480,"line":2221},[478,60906,2966],{"emptyLinePlaceholder":640},[478,60908,60909,60912,60914,60916],{"class":480,"line":2241},[478,60910,60911],{"class":495},"            list-style",[478,60913,51817],{"class":714},[478,60915,55117],{"class":495},[478,60917,1859],{"class":714},[478,60919,60920],{"class":480,"line":2246},[478,60921,3095],{"class":714},[478,60923,60924],{"class":480,"line":2260},[478,60925,2966],{"emptyLinePlaceholder":640},[478,60927,60928,60931],{"class":480,"line":2265},[478,60929,60930],{"class":484},"        .mi",[478,60932,16137],{"class":714},[478,60934,60935,60938,60940,60942],{"class":480,"line":2294},[478,60936,60937],{"class":495},"            position",[478,60939,51817],{"class":714},[478,60941,55144],{"class":495},[478,60943,1859],{"class":714},[478,60945,60946,60948,60950,60953,60955],{"class":480,"line":2299},[478,60947,51864],{"class":495},[478,60949,51817],{"class":714},[478,60951,60952],{"class":495},"223",[478,60954,51872],{"class":710},[478,60956,1859],{"class":714},[478,60958,60959,60961,60963,60965,60967,60969],{"class":480,"line":2316},[478,60960,51814],{"class":495},[478,60962,51817],{"class":714},[478,60964,1012],{"class":495},[478,60966,51872],{"class":710},[478,60968,51936],{"class":495},[478,60970,1859],{"class":714},[478,60972,60973],{"class":480,"line":2321},[478,60974,3095],{"class":714},[478,60976,60977],{"class":480,"line":2326},[478,60978,2966],{"emptyLinePlaceholder":640},[478,60980,60981,60983,60986],{"class":480,"line":2331},[478,60982,60930],{"class":484},[478,60984,60985],{"class":51680}," input",[478,60987,16137],{"class":714},[478,60989,60990,60992,60994,60996,60998],{"class":480,"line":2345},[478,60991,51864],{"class":495},[478,60993,51817],{"class":714},[478,60995,60952],{"class":495},[478,60997,51872],{"class":710},[478,60999,1859],{"class":714},[478,61001,61002,61004,61006,61008,61010],{"class":480,"line":2350},[478,61003,51879],{"class":495},[478,61005,51817],{"class":714},[478,61007,1305],{"class":495},[478,61009,51872],{"class":710},[478,61011,1859],{"class":714},[478,61013,61014,61016,61018,61020,61022,61024],{"class":480,"line":3143},[478,61015,51826],{"class":495},[478,61017,51817],{"class":714},[478,61019,895],{"class":495},[478,61021,2604],{"class":495},[478,61023,51872],{"class":710},[478,61025,1859],{"class":714},[478,61027,61028,61031,61033,61035,61037],{"class":480,"line":3157},[478,61029,61030],{"class":495},"            font-size",[478,61032,51817],{"class":714},[478,61034,1249],{"class":495},[478,61036,51872],{"class":710},[478,61038,1859],{"class":714},[478,61040,61041,61044,61046,61048,61050],{"class":480,"line":3165},[478,61042,61043],{"class":495},"            line-height",[478,61045,51817],{"class":714},[478,61047,1305],{"class":495},[478,61049,51872],{"class":710},[478,61051,1859],{"class":714},[478,61053,61054,61057,61059,61061,61063,61065,61068],{"class":480,"line":3170},[478,61055,61056],{"class":495},"            border",[478,61058,51817],{"class":714},[478,61060,193],{"class":495},[478,61062,51872],{"class":710},[478,61064,51901],{"class":495},[478,61066,61067],{"class":495}," #e0e0e0",[478,61069,1859],{"class":714},[478,61071,61072,61075,61077,61079],{"class":480,"line":3176},[478,61073,61074],{"class":495},"            outline",[478,61076,51817],{"class":714},[478,61078,55117],{"class":495},[478,61080,1859],{"class":714},[478,61082,61083],{"class":480,"line":3182},[478,61084,3095],{"class":714},[478,61086,61087],{"class":480,"line":3187},[478,61088,2966],{"emptyLinePlaceholder":640},[478,61090,61091,61093,61096],{"class":480,"line":8514},[478,61092,60930],{"class":484},[478,61094,61095],{"class":484}," .search",[478,61097,16137],{"class":714},[478,61099,61100,61102,61104,61106,61108,61110,61113],{"class":480,"line":8538},[478,61101,61056],{"class":495},[478,61103,51817],{"class":714},[478,61105,193],{"class":495},[478,61107,51872],{"class":710},[478,61109,51901],{"class":495},[478,61111,61112],{"class":495}," #ff6700",[478,61114,1859],{"class":714},[478,61116,61117],{"class":480,"line":8543},[478,61118,3095],{"class":714},[478,61120,61121],{"class":480,"line":8549},[478,61122,2966],{"emptyLinePlaceholder":640},[478,61124,61125,61128],{"class":480,"line":8576},[478,61126,61127],{"class":484},"        .result-list",[478,61129,16137],{"class":714},[478,61131,61132,61134,61136,61138],{"class":480,"line":8581},[478,61133,51852],{"class":495},[478,61135,51817],{"class":714},[478,61137,55117],{"class":495},[478,61139,1859],{"class":714},[478,61141,61142,61144,61146,61148],{"class":480,"line":8587},[478,61143,60937],{"class":495},[478,61145,51817],{"class":714},[478,61147,55211],{"class":495},[478,61149,1859],{"class":714},[478,61151,61152,61155,61157,61159],{"class":480,"line":8599},[478,61153,61154],{"class":495},"            left",[478,61156,51817],{"class":714},[478,61158,895],{"class":495},[478,61160,1859],{"class":714},[478,61162,61163,61166,61168,61170,61172],{"class":480,"line":8611},[478,61164,61165],{"class":495},"            top",[478,61167,51817],{"class":714},[478,61169,1305],{"class":495},[478,61171,51872],{"class":710},[478,61173,1859],{"class":714},[478,61175,61176,61178,61180,61182,61184],{"class":480,"line":8623},[478,61177,51864],{"class":495},[478,61179,51817],{"class":714},[478,61181,60952],{"class":495},[478,61183,51872],{"class":710},[478,61185,1859],{"class":714},[478,61187,61188,61190,61192,61194,61196,61198,61200],{"class":480,"line":10282},[478,61189,61056],{"class":495},[478,61191,51817],{"class":714},[478,61193,193],{"class":495},[478,61195,51872],{"class":710},[478,61197,51901],{"class":495},[478,61199,61112],{"class":495},[478,61201,1859],{"class":714},[478,61203,61204,61207,61209,61211],{"class":480,"line":10307},[478,61205,61206],{"class":495},"            border-top",[478,61208,51817],{"class":714},[478,61210,895],{"class":495},[478,61212,1859],{"class":714},[478,61214,61215,61218,61220,61223],{"class":480,"line":10330},[478,61216,61217],{"class":495},"            background",[478,61219,51817],{"class":714},[478,61221,61222],{"class":495},"#fff",[478,61224,1859],{"class":714},[478,61226,61227],{"class":480,"line":10354},[478,61228,3095],{"class":714},[478,61230,61231],{"class":480,"line":10359},[478,61232,2966],{"emptyLinePlaceholder":640},[478,61234,61235,61237,61239],{"class":480,"line":10364},[478,61236,61127],{"class":484},[478,61238,1967],{"class":51680},[478,61240,16137],{"class":714},[478,61242,61243,61245,61247,61250],{"class":480,"line":10369},[478,61244,51852],{"class":495},[478,61246,51817],{"class":714},[478,61248,61249],{"class":495},"block",[478,61251,1859],{"class":714},[478,61253,61254,61256,61258,61260,61262,61265,61267],{"class":480,"line":10378},[478,61255,51826],{"class":495},[478,61257,51817],{"class":714},[478,61259,1045],{"class":495},[478,61261,51872],{"class":710},[478,61263,61264],{"class":495}," 15",[478,61266,51872],{"class":710},[478,61268,1859],{"class":714},[478,61270,61271,61273,61275,61277,61279],{"class":480,"line":10383},[478,61272,61030],{"class":495},[478,61274,51817],{"class":714},[478,61276,1198],{"class":495},[478,61278,51872],{"class":710},[478,61280,1859],{"class":714},[478,61282,61283,61286,61288,61291],{"class":480,"line":10389},[478,61284,61285],{"class":495},"            color",[478,61287,51817],{"class":714},[478,61289,61290],{"class":495},"#424242",[478,61292,1859],{"class":714},[478,61294,61295,61298,61300,61302],{"class":480,"line":10410},[478,61296,61297],{"class":495},"            text-decoration",[478,61299,51817],{"class":714},[478,61301,55117],{"class":495},[478,61303,1859],{"class":714},[478,61305,61306],{"class":480,"line":10416},[478,61307,3095],{"class":714},[478,61309,61310],{"class":480,"line":10430},[478,61311,2966],{"emptyLinePlaceholder":640},[478,61313,61314,61316,61318,61321],{"class":480,"line":10436},[478,61315,61127],{"class":484},[478,61317,1967],{"class":51680},[478,61319,61320],{"class":484},":hover",[478,61322,16137],{"class":714},[478,61324,61325,61327,61329,61332],{"class":480,"line":10463},[478,61326,52020],{"class":495},[478,61328,51817],{"class":714},[478,61330,61331],{"class":495},"#eee",[478,61333,1859],{"class":714},[478,61335,61336],{"class":480,"line":10472},[478,61337,3095],{"class":714},[478,61339,61340,61342,61344],{"class":480,"line":10478},[478,61341,52156],{"class":714},[478,61343,617],{"class":51680},[478,61345,51687],{"class":714},[478,61347,61348],{"class":480,"line":10486},[478,61349,2966],{"emptyLinePlaceholder":640},[478,61351,61352,61354,61356],{"class":480,"line":10491},[478,61353,52165],{"class":714},[478,61355,51714],{"class":51680},[478,61357,51687],{"class":714},[478,61359,61360],{"class":480,"line":17169},[478,61361,2966],{"emptyLinePlaceholder":640},[478,61363,61364,61366,61368],{"class":480,"line":17175},[478,61365,1605],{"class":714},[478,61367,52180],{"class":51680},[478,61369,51687],{"class":714},[478,61371,61372,61374,61376,61378,61380,61383],{"class":480,"line":17198},[478,61373,51721],{"class":714},[478,61375,51991],{"class":51680},[478,61377,53866],{"class":484},[478,61379,759],{"class":714},[478,61381,61382],{"class":488},"\"mi\"",[478,61384,51687],{"class":714},[478,61386,61387,61389,61391,61393,61395,61398,61401,61403,61406],{"class":480,"line":17204},[478,61388,55682],{"class":714},[478,61390,54201],{"class":51680},[478,61392,54204],{"class":484},[478,61394,759],{"class":714},[478,61396,61397],{"class":488},"\"search\"",[478,61399,61400],{"class":484}," placeholder",[478,61402,759],{"class":714},[478,61404,61405],{"class":488},"\"小米笔记本\"",[478,61407,51687],{"class":714},[478,61409,61410,61412,61414,61416,61418,61421],{"class":480,"line":17227},[478,61411,55682],{"class":714},[478,61413,1702],{"class":51680},[478,61415,53866],{"class":484},[478,61417,759],{"class":714},[478,61419,61420],{"class":488},"\"result-list\"",[478,61422,51687],{"class":714},[478,61424,61425,61428,61430,61433,61435,61438,61440,61443,61446,61448,61450,61452],{"class":480,"line":17241},[478,61426,61427],{"class":714},"            \u003C",[478,61429,32],{"class":51680},[478,61431,61432],{"class":714},">\u003C",[478,61434,518],{"class":51680},[478,61436,61437],{"class":484}," href",[478,61439,759],{"class":714},[478,61441,61442],{"class":488},"\"#\"",[478,61444,61445],{"class":714},">全部商品\u003C\u002F",[478,61447,518],{"class":51680},[478,61449,55694],{"class":714},[478,61451,32],{"class":51680},[478,61453,51687],{"class":714},[478,61455,61456,61458,61460,61462,61464,61466,61468,61470,61473,61475,61477,61479],{"class":480,"line":17261},[478,61457,61427],{"class":714},[478,61459,32],{"class":51680},[478,61461,61432],{"class":714},[478,61463,518],{"class":51680},[478,61465,61437],{"class":484},[478,61467,759],{"class":714},[478,61469,61442],{"class":488},[478,61471,61472],{"class":714},">小米11\u003C\u002F",[478,61474,518],{"class":51680},[478,61476,55694],{"class":714},[478,61478,32],{"class":51680},[478,61480,51687],{"class":714},[478,61482,61483,61485,61487,61489,61491,61493,61495,61497,61500,61502,61504,61506],{"class":480,"line":17267},[478,61484,61427],{"class":714},[478,61486,32],{"class":51680},[478,61488,61432],{"class":714},[478,61490,518],{"class":51680},[478,61492,61437],{"class":484},[478,61494,759],{"class":714},[478,61496,61442],{"class":488},[478,61498,61499],{"class":714},">小米10S\u003C\u002F",[478,61501,518],{"class":51680},[478,61503,55694],{"class":714},[478,61505,32],{"class":51680},[478,61507,51687],{"class":714},[478,61509,61510,61512,61514,61516,61518,61520,61522,61524,61527,61529,61531,61533],{"class":480,"line":17278},[478,61511,61427],{"class":714},[478,61513,32],{"class":51680},[478,61515,61432],{"class":714},[478,61517,518],{"class":51680},[478,61519,61437],{"class":484},[478,61521,759],{"class":714},[478,61523,61442],{"class":488},[478,61525,61526],{"class":714},">小米笔记本\u003C\u002F",[478,61528,518],{"class":51680},[478,61530,55694],{"class":714},[478,61532,32],{"class":51680},[478,61534,51687],{"class":714},[478,61536,61537,61539,61541,61543,61545,61547,61549,61551,61554,61556,61558,61560],{"class":480,"line":17301},[478,61538,61427],{"class":714},[478,61540,32],{"class":51680},[478,61542,61432],{"class":714},[478,61544,518],{"class":51680},[478,61546,61437],{"class":484},[478,61548,759],{"class":714},[478,61550,61442],{"class":488},[478,61552,61553],{"class":714},">小米手机\u003C\u002F",[478,61555,518],{"class":51680},[478,61557,55694],{"class":714},[478,61559,32],{"class":51680},[478,61561,51687],{"class":714},[478,61563,61564,61566,61568,61570,61572,61574,61576,61578,61581,61583,61585,61587],{"class":480,"line":17323},[478,61565,61427],{"class":714},[478,61567,32],{"class":51680},[478,61569,61432],{"class":714},[478,61571,518],{"class":51680},[478,61573,61437],{"class":484},[478,61575,759],{"class":714},[478,61577,61442],{"class":488},[478,61579,61580],{"class":714},">黑鲨4\u003C\u002F",[478,61582,518],{"class":51680},[478,61584,55694],{"class":714},[478,61586,32],{"class":51680},[478,61588,51687],{"class":714},[478,61590,61591,61593,61595,61597,61599,61601,61603,61605,61608,61610,61612,61614],{"class":480,"line":17328},[478,61592,61427],{"class":714},[478,61594,32],{"class":51680},[478,61596,61432],{"class":714},[478,61598,518],{"class":51680},[478,61600,61437],{"class":484},[478,61602,759],{"class":714},[478,61604,61442],{"class":488},[478,61606,61607],{"class":714},">空调\u003C\u002F",[478,61609,518],{"class":51680},[478,61611,55694],{"class":714},[478,61613,32],{"class":51680},[478,61615,51687],{"class":714},[478,61617,61618,61621,61623],{"class":480,"line":17334},[478,61619,61620],{"class":714},"        \u003C\u002F",[478,61622,1702],{"class":51680},[478,61624,51687],{"class":714},[478,61626,61627,61629,61631],{"class":480,"line":17348},[478,61628,52156],{"class":714},[478,61630,51991],{"class":51680},[478,61632,51687],{"class":714},[478,61634,61635,61637,61639],{"class":480,"line":17361},[478,61636,51721],{"class":714},[478,61638,52193],{"class":51680},[478,61640,51687],{"class":714},[478,61642,61643],{"class":480,"line":17366},[478,61644,61645],{"class":770},"        \u002F\u002F 1. 获取元素\n",[478,61647,61648,61651,61653,61655,61657,61659,61661,61664],{"class":480,"line":17380},[478,61649,61650],{"class":710},"        const",[478,61652,60985],{"class":495},[478,61654,14130],{"class":710},[478,61656,54776],{"class":714},[478,61658,54779],{"class":484},[478,61660,263],{"class":714},[478,61662,61663],{"class":488},"'[type=search]'",[478,61665,720],{"class":714},[478,61667,61668,61670,61673,61675,61677,61679,61681,61684],{"class":480,"line":17385},[478,61669,61650],{"class":710},[478,61671,61672],{"class":495}," ul",[478,61674,14130],{"class":710},[478,61676,54776],{"class":714},[478,61678,54779],{"class":484},[478,61680,263],{"class":714},[478,61682,61683],{"class":488},"'.result-list'",[478,61685,720],{"class":714},[478,61687,61688],{"class":480,"line":17391},[478,61689,61690],{"class":770},"        \u002F\u002F console.log(input)\n",[478,61692,61693],{"class":480,"line":17396},[478,61694,61695],{"class":770},"        \u002F\u002F 2. 监听事件 获得焦点\n",[478,61697,61698,61701,61703,61705,61708,61710,61712],{"class":480,"line":17410},[478,61699,61700],{"class":714},"        input.",[478,61702,58193],{"class":484},[478,61704,263],{"class":714},[478,61706,61707],{"class":488},"'focus'",[478,61709,13001],{"class":714},[478,61711,54829],{"class":710},[478,61713,54832],{"class":714},[478,61715,61716],{"class":480,"line":17415},[478,61717,61718],{"class":770},"            \u002F\u002F ul显示\n",[478,61720,61721,61724,61726],{"class":480,"line":17420},[478,61722,61723],{"class":714},"            ul.style.display ",[478,61725,759],{"class":710},[478,61727,61728],{"class":488}," 'block'\n",[478,61730,61731],{"class":480,"line":17434},[478,61732,61733],{"class":770},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[478,61735,61736,61739,61741,61743,61746],{"class":480,"line":17446},[478,61737,61738],{"class":714},"            input.classList.",[478,61740,5900],{"class":484},[478,61742,263],{"class":714},[478,61744,61745],{"class":488},"'search'",[478,61747,720],{"class":714},[478,61749,61750],{"class":480,"line":17451},[478,61751,61752],{"class":714},"        })\n",[478,61754,61755],{"class":480,"line":17464},[478,61756,61757],{"class":770},"        \u002F\u002F 3. 监听事件 失去焦点\n",[478,61759,61760,61762,61764,61766,61769,61771,61773],{"class":480,"line":17469},[478,61761,61700],{"class":714},[478,61763,58193],{"class":484},[478,61765,263],{"class":714},[478,61767,61768],{"class":488},"'blur'",[478,61770,13001],{"class":714},[478,61772,54829],{"class":710},[478,61774,54832],{"class":714},[478,61776,61777,61779,61781],{"class":480,"line":17474},[478,61778,61723],{"class":714},[478,61780,759],{"class":710},[478,61782,61783],{"class":488}," 'none'\n",[478,61785,61786,61788,61790,61792,61794],{"class":480,"line":17479},[478,61787,61738],{"class":714},[478,61789,57386],{"class":484},[478,61791,263],{"class":714},[478,61793,61745],{"class":488},[478,61795,720],{"class":714},[478,61797,61798],{"class":480,"line":17492},[478,61799,61752],{"class":714},[478,61801,61802,61804,61806],{"class":480,"line":17497},[478,61803,52156],{"class":714},[478,61805,52193],{"class":51680},[478,61807,51687],{"class":714},[478,61809,61810,61812,61814],{"class":480,"line":33013},[478,61811,52165],{"class":714},[478,61813,52180],{"class":51680},[478,61815,51687],{"class":714},[478,61817,61818],{"class":480,"line":33019},[478,61819,2966],{"emptyLinePlaceholder":640},[478,61821,61822,61824,61826],{"class":480,"line":33025},[478,61823,52165],{"class":714},[478,61825,51015],{"class":51680},[478,61827,51687],{"class":714},[22563,61829,61831],{"id":61830},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61833,61834],{},"评论字数统计案例",[19,61836,61837],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61839,61840],{},"牢记focus伪类选择器",[51724,61842],{"charSet":61843},"UTF-8",[51724,61845],{"name":61846,"content":61847},"viewport","width=device-width, initial-scale=1.0",[51787,61849,61850],{},"Document",[617,61852,61853],{},"\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",[54201,61855],{"type":5753},[1702,61857,61858,61861],{},[32,61859,61860],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[32,61862,61863],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[469,61865,61867],{"className":51013,"code":61866,"language":51015,"meta":54,"style":54},"\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",[475,61868,61869,61879,61893,61897,61905,61919,61939,61959,61972,61980,61987,62000,62014,62024,62034,62038,62042,62049,62061,62073,62085,62097,62126,62139,62143,62147,62156,62167,62179,62190,62201,62213,62224,62236,62252,62264,62268,62272,62283,62294,62304,62316,62320,62324,62332,62343,62353,62364,62376,62389,62401,62413,62417,62421,62430,62442,62453,62466,62477,62491,62495,62499,62506,62518,62530,62540,62544,62548,62557,62569,62579,62583,62587,62598,62608,62627,62640,62644,62648,62658,62668,62672,62676,62687,62698,62710,62722,62726,62730,62741,62752,62766,62770,62774,62785,62795,62807,62811,62819,62827,62831,62839,62854,62873,62913,62926,62934,62948,62968,62976,62991,63014,63032,63047,63067,63087,63107,63115,63123,63131,63139,63159,63179,63184,63201,63210,63214,63219,63235,63243,63247,63252,63269,63274,63299,63303,63307,63312,63317,63325,63333,63337],{"__ignoreMap":54},[478,61870,61871,61873,61875,61877],{"class":480,"line":481},[478,61872,51677],{"class":714},[478,61874,51681],{"class":51680},[478,61876,51684],{"class":484},[478,61878,51687],{"class":714},[478,61880,61881,61883,61885,61887,61889,61891],{"class":480,"line":565},[478,61882,1605],{"class":714},[478,61884,51015],{"class":51680},[478,61886,51696],{"class":484},[478,61888,759],{"class":714},[478,61890,51701],{"class":488},[478,61892,51687],{"class":714},[478,61894,61895],{"class":480,"line":579},[478,61896,2966],{"emptyLinePlaceholder":640},[478,61898,61899,61901,61903],{"class":480,"line":593},[478,61900,1605],{"class":714},[478,61902,51714],{"class":51680},[478,61904,51687],{"class":714},[478,61906,61907,61909,61911,61913,61915,61917],{"class":480,"line":1769},[478,61908,52524],{"class":714},[478,61910,51724],{"class":51680},[478,61912,51727],{"class":484},[478,61914,759],{"class":714},[478,61916,51732],{"class":488},[478,61918,51687],{"class":714},[478,61920,61921,61923,61925,61927,61929,61931,61933,61935,61937],{"class":480,"line":1783},[478,61922,52524],{"class":714},[478,61924,51724],{"class":51680},[478,61926,51743],{"class":484},[478,61928,759],{"class":714},[478,61930,51748],{"class":488},[478,61932,51751],{"class":484},[478,61934,759],{"class":714},[478,61936,51756],{"class":488},[478,61938,51687],{"class":714},[478,61940,61941,61943,61945,61947,61949,61951,61953,61955,61957],{"class":480,"line":1789},[478,61942,52524],{"class":714},[478,61944,51724],{"class":51680},[478,61946,15485],{"class":484},[478,61948,759],{"class":714},[478,61950,51771],{"class":488},[478,61952,51751],{"class":484},[478,61954,759],{"class":714},[478,61956,51778],{"class":488},[478,61958,51687],{"class":714},[478,61960,61961,61963,61965,61968,61970],{"class":480,"line":1880},[478,61962,52524],{"class":714},[478,61964,51787],{"class":51680},[478,61966,61967],{"class":714},">评论回车发布\u003C\u002F",[478,61969,51787],{"class":51680},[478,61971,51687],{"class":714},[478,61973,61974,61976,61978],{"class":480,"line":1886},[478,61975,52524],{"class":714},[478,61977,617],{"class":51680},[478,61979,51687],{"class":714},[478,61981,61982,61985],{"class":480,"line":1898},[478,61983,61984],{"class":484},"    .wrapper",[478,61986,16137],{"class":714},[478,61988,61989,61992,61994,61996,61998],{"class":480,"line":2180},[478,61990,61991],{"class":495},"      min-width",[478,61993,51817],{"class":714},[478,61995,4553],{"class":495},[478,61997,51872],{"class":710},[478,61999,1859],{"class":714},[478,62001,62002,62005,62007,62010,62012],{"class":480,"line":2185},[478,62003,62004],{"class":495},"      max-width",[478,62006,51817],{"class":714},[478,62008,62009],{"class":495},"800",[478,62011,51872],{"class":710},[478,62013,1859],{"class":714},[478,62015,62016,62018,62020,62022],{"class":480,"line":2191},[478,62017,55389],{"class":495},[478,62019,51817],{"class":714},[478,62021,51857],{"class":495},[478,62023,1859],{"class":714},[478,62025,62026,62028,62030,62032],{"class":480,"line":2196},[478,62027,55400],{"class":495},[478,62029,51817],{"class":714},[478,62031,51960],{"class":495},[478,62033,1859],{"class":714},[478,62035,62036],{"class":480,"line":2210},[478,62037,2753],{"class":714},[478,62039,62040],{"class":480,"line":2215},[478,62041,2966],{"emptyLinePlaceholder":640},[478,62043,62044,62047],{"class":480,"line":2221},[478,62045,62046],{"class":484},"    .avatar",[478,62048,16137],{"class":714},[478,62050,62051,62053,62055,62057,62059],{"class":480,"line":2241},[478,62052,55151],{"class":495},[478,62054,51817],{"class":714},[478,62056,1305],{"class":495},[478,62058,51872],{"class":710},[478,62060,1859],{"class":714},[478,62062,62063,62065,62067,62069,62071],{"class":480,"line":2246},[478,62064,55165],{"class":495},[478,62066,51817],{"class":714},[478,62068,1305],{"class":495},[478,62070,51872],{"class":710},[478,62072,1859],{"class":714},[478,62074,62075,62077,62079,62081,62083],{"class":480,"line":2260},[478,62076,55514],{"class":495},[478,62078,51817],{"class":714},[478,62080,1354],{"class":495},[478,62082,1029],{"class":710},[478,62084,1859],{"class":714},[478,62086,62087,62090,62092,62095],{"class":480,"line":2265},[478,62088,62089],{"class":495},"      overflow",[478,62091,51817],{"class":714},[478,62093,62094],{"class":495},"hidden",[478,62096,1859],{"class":714},[478,62098,62099,62102,62104,62107,62109,62112,62114,62117,62119,62121,62124],{"class":480,"line":2294},[478,62100,62101],{"class":495},"      background",[478,62103,51817],{"class":714},[478,62105,62106],{"class":495},"url",[478,62108,263],{"class":714},[478,62110,62111],{"class":5782},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[478,62113,14280],{"class":714},[478,62115,62116],{"class":495},"no-repeat",[478,62118,17709],{"class":495},[478,62120,25358],{"class":714},[478,62122,62123],{"class":495},"cover",[478,62125,1859],{"class":714},[478,62127,62128,62131,62133,62135,62137],{"class":480,"line":2299},[478,62129,62130],{"class":495},"      margin-right",[478,62132,51817],{"class":714},[478,62134,1396],{"class":495},[478,62136,51872],{"class":710},[478,62138,1859],{"class":714},[478,62140,62141],{"class":480,"line":2316},[478,62142,2753],{"class":714},[478,62144,62145],{"class":480,"line":2321},[478,62146,2966],{"emptyLinePlaceholder":640},[478,62148,62149,62151,62154],{"class":480,"line":2326},[478,62150,61984],{"class":484},[478,62152,62153],{"class":51680}," textarea",[478,62155,16137],{"class":714},[478,62157,62158,62161,62163,62165],{"class":480,"line":2331},[478,62159,62160],{"class":495},"      outline",[478,62162,51817],{"class":714},[478,62164,55117],{"class":495},[478,62166,1859],{"class":714},[478,62168,62169,62172,62174,62177],{"class":480,"line":2345},[478,62170,62171],{"class":495},"      border-color",[478,62173,51817],{"class":714},[478,62175,62176],{"class":495},"transparent",[478,62178,1859],{"class":714},[478,62180,62181,62184,62186,62188],{"class":480,"line":2350},[478,62182,62183],{"class":495},"      resize",[478,62185,51817],{"class":714},[478,62187,55117],{"class":495},[478,62189,1859],{"class":714},[478,62191,62192,62194,62196,62199],{"class":480,"line":3143},[478,62193,62101],{"class":495},[478,62195,51817],{"class":714},[478,62197,62198],{"class":495},"#f5f5f5",[478,62200,1859],{"class":714},[478,62202,62203,62205,62207,62209,62211],{"class":480,"line":3157},[478,62204,55514],{"class":495},[478,62206,51817],{"class":714},[478,62208,994],{"class":495},[478,62210,51872],{"class":710},[478,62212,1859],{"class":714},[478,62214,62215,62218,62220,62222],{"class":480,"line":3165},[478,62216,62217],{"class":495},"      flex",[478,62219,51817],{"class":714},[478,62221,193],{"class":495},[478,62223,1859],{"class":714},[478,62225,62226,62228,62230,62232,62234],{"class":480,"line":3170},[478,62227,55075],{"class":495},[478,62229,51817],{"class":714},[478,62231,1146],{"class":495},[478,62233,51872],{"class":710},[478,62235,1859],{"class":714},[478,62237,62238,62241,62243,62245,62248,62250],{"class":480,"line":3176},[478,62239,62240],{"class":495},"      transition",[478,62242,51817],{"class":714},[478,62244,28501],{"class":495},[478,62246,62247],{"class":495}," 0.5",[478,62249,1391],{"class":710},[478,62251,1859],{"class":714},[478,62253,62254,62256,62258,62260,62262],{"class":480,"line":3182},[478,62255,55165],{"class":495},[478,62257,51817],{"class":714},[478,62259,1646],{"class":495},[478,62261,51872],{"class":710},[478,62263,1859],{"class":714},[478,62265,62266],{"class":480,"line":3187},[478,62267,2753],{"class":714},[478,62269,62270],{"class":480,"line":8514},[478,62271,2966],{"emptyLinePlaceholder":640},[478,62273,62274,62276,62278,62281],{"class":480,"line":8538},[478,62275,61984],{"class":484},[478,62277,62153],{"class":51680},[478,62279,62280],{"class":484},":focus",[478,62282,16137],{"class":714},[478,62284,62285,62287,62289,62292],{"class":480,"line":8543},[478,62286,62171],{"class":495},[478,62288,51817],{"class":714},[478,62290,62291],{"class":495},"#e4e4e4",[478,62293,1859],{"class":714},[478,62295,62296,62298,62300,62302],{"class":480,"line":8549},[478,62297,62101],{"class":495},[478,62299,51817],{"class":714},[478,62301,61222],{"class":495},[478,62303,1859],{"class":714},[478,62305,62306,62308,62310,62312,62314],{"class":480,"line":8576},[478,62307,55165],{"class":495},[478,62309,51817],{"class":714},[478,62311,1354],{"class":495},[478,62313,51872],{"class":710},[478,62315,1859],{"class":714},[478,62317,62318],{"class":480,"line":8581},[478,62319,2753],{"class":714},[478,62321,62322],{"class":480,"line":8587},[478,62323,2966],{"emptyLinePlaceholder":640},[478,62325,62326,62328,62330],{"class":480,"line":8599},[478,62327,61984],{"class":484},[478,62329,57847],{"class":51680},[478,62331,16137],{"class":714},[478,62333,62334,62336,62338,62341],{"class":480,"line":8611},[478,62335,62101],{"class":495},[478,62337,51817],{"class":714},[478,62339,62340],{"class":495},"#00aeec",[478,62342,1859],{"class":714},[478,62344,62345,62347,62349,62351],{"class":480,"line":8623},[478,62346,57796],{"class":495},[478,62348,51817],{"class":714},[478,62350,61222],{"class":495},[478,62352,1859],{"class":714},[478,62354,62355,62358,62360,62362],{"class":480,"line":10282},[478,62356,62357],{"class":495},"      border",[478,62359,51817],{"class":714},[478,62361,55117],{"class":495},[478,62363,1859],{"class":714},[478,62365,62366,62368,62370,62372,62374],{"class":480,"line":10307},[478,62367,55514],{"class":495},[478,62369,51817],{"class":714},[478,62371,994],{"class":495},[478,62373,51872],{"class":710},[478,62375,1859],{"class":714},[478,62377,62378,62381,62383,62385,62387],{"class":480,"line":10330},[478,62379,62380],{"class":495},"      margin-left",[478,62382,51817],{"class":714},[478,62384,1146],{"class":495},[478,62386,51872],{"class":710},[478,62388,1859],{"class":714},[478,62390,62391,62393,62395,62397,62399],{"class":480,"line":10354},[478,62392,55151],{"class":495},[478,62394,51817],{"class":714},[478,62396,1057],{"class":495},[478,62398,51872],{"class":710},[478,62400,1859],{"class":714},[478,62402,62403,62406,62408,62411],{"class":480,"line":10359},[478,62404,62405],{"class":495},"      cursor",[478,62407,51817],{"class":714},[478,62409,62410],{"class":495},"pointer",[478,62412,1859],{"class":714},[478,62414,62415],{"class":480,"line":10364},[478,62416,2753],{"class":714},[478,62418,62419],{"class":480,"line":10369},[478,62420,2966],{"emptyLinePlaceholder":640},[478,62422,62423,62425,62428],{"class":480,"line":10378},[478,62424,61984],{"class":484},[478,62426,62427],{"class":484}," .total",[478,62429,16137],{"class":714},[478,62431,62432,62434,62436,62438,62440],{"class":480,"line":10383},[478,62433,62130],{"class":495},[478,62435,51817],{"class":714},[478,62437,1310],{"class":495},[478,62439,51872],{"class":710},[478,62441,1859],{"class":714},[478,62443,62444,62446,62448,62451],{"class":480,"line":10389},[478,62445,57796],{"class":495},[478,62447,51817],{"class":714},[478,62449,62450],{"class":495},"#999",[478,62452,1859],{"class":714},[478,62454,62455,62458,62460,62462,62464],{"class":480,"line":10410},[478,62456,62457],{"class":495},"      margin-top",[478,62459,51817],{"class":714},[478,62461,1020],{"class":495},[478,62463,51872],{"class":710},[478,62465,1859],{"class":714},[478,62467,62468,62471,62473,62475],{"class":480,"line":10416},[478,62469,62470],{"class":495},"      opacity",[478,62472,51817],{"class":714},[478,62474,895],{"class":495},[478,62476,1859],{"class":714},[478,62478,62479,62481,62483,62485,62487,62489],{"class":480,"line":10430},[478,62480,62240],{"class":495},[478,62482,51817],{"class":714},[478,62484,28501],{"class":495},[478,62486,62247],{"class":495},[478,62488,1391],{"class":710},[478,62490,1859],{"class":714},[478,62492,62493],{"class":480,"line":10436},[478,62494,2753],{"class":714},[478,62496,62497],{"class":480,"line":10463},[478,62498,2966],{"emptyLinePlaceholder":640},[478,62500,62501,62504],{"class":480,"line":10472},[478,62502,62503],{"class":484},"    .list",[478,62505,16137],{"class":714},[478,62507,62508,62510,62512,62514,62516],{"class":480,"line":10478},[478,62509,61991],{"class":495},[478,62511,51817],{"class":714},[478,62513,4553],{"class":495},[478,62515,51872],{"class":710},[478,62517,1859],{"class":714},[478,62519,62520,62522,62524,62526,62528],{"class":480,"line":10486},[478,62521,62004],{"class":495},[478,62523,51817],{"class":714},[478,62525,62009],{"class":495},[478,62527,51872],{"class":710},[478,62529,1859],{"class":714},[478,62531,62532,62534,62536,62538],{"class":480,"line":10491},[478,62533,55389],{"class":495},[478,62535,51817],{"class":714},[478,62537,51857],{"class":495},[478,62539,1859],{"class":714},[478,62541,62542],{"class":480,"line":17169},[478,62543,2753],{"class":714},[478,62545,62546],{"class":480,"line":17175},[478,62547,2966],{"emptyLinePlaceholder":640},[478,62549,62550,62552,62555],{"class":480,"line":17198},[478,62551,62503],{"class":484},[478,62553,62554],{"class":484}," .item",[478,62556,16137],{"class":714},[478,62558,62559,62561,62563,62565,62567],{"class":480,"line":17204},[478,62560,55151],{"class":495},[478,62562,51817],{"class":714},[478,62564,1012],{"class":495},[478,62566,1029],{"class":710},[478,62568,1859],{"class":714},[478,62570,62571,62573,62575,62577],{"class":480,"line":17227},[478,62572,55389],{"class":495},[478,62574,51817],{"class":714},[478,62576,51857],{"class":495},[478,62578,1859],{"class":714},[478,62580,62581],{"class":480,"line":17241},[478,62582,2753],{"class":714},[478,62584,62585],{"class":480,"line":17261},[478,62586,2966],{"emptyLinePlaceholder":640},[478,62588,62589,62591,62593,62596],{"class":480,"line":17267},[478,62590,62503],{"class":484},[478,62592,62554],{"class":484},[478,62594,62595],{"class":484}," .info",[478,62597,16137],{"class":714},[478,62599,62600,62602,62604,62606],{"class":480,"line":17278},[478,62601,62217],{"class":495},[478,62603,51817],{"class":714},[478,62605,193],{"class":495},[478,62607,1859],{"class":714},[478,62609,62610,62613,62615,62617,62619,62622,62625],{"class":480,"line":17301},[478,62611,62612],{"class":495},"      border-bottom",[478,62614,51817],{"class":714},[478,62616,193],{"class":495},[478,62618,51872],{"class":710},[478,62620,62621],{"class":495}," dashed",[478,62623,62624],{"class":495}," #e4e4e4",[478,62626,1859],{"class":714},[478,62628,62629,62632,62634,62636,62638],{"class":480,"line":17323},[478,62630,62631],{"class":495},"      padding-bottom",[478,62633,51817],{"class":714},[478,62635,1146],{"class":495},[478,62637,51872],{"class":710},[478,62639,1859],{"class":714},[478,62641,62642],{"class":480,"line":17328},[478,62643,2753],{"class":714},[478,62645,62646],{"class":480,"line":17334},[478,62647,2966],{"emptyLinePlaceholder":640},[478,62649,62650,62652,62654,62656],{"class":480,"line":17348},[478,62651,62503],{"class":484},[478,62653,62554],{"class":484},[478,62655,7391],{"class":51680},[478,62657,16137],{"class":714},[478,62659,62660,62662,62664,62666],{"class":480,"line":17361},[478,62661,55086],{"class":495},[478,62663,51817],{"class":714},[478,62665,895],{"class":495},[478,62667,1859],{"class":714},[478,62669,62670],{"class":480,"line":17366},[478,62671,2753],{"class":714},[478,62673,62674],{"class":480,"line":17380},[478,62675,2966],{"emptyLinePlaceholder":640},[478,62677,62678,62680,62682,62685],{"class":480,"line":17385},[478,62679,62503],{"class":484},[478,62681,62554],{"class":484},[478,62683,62684],{"class":484}," .name",[478,62686,16137],{"class":714},[478,62688,62689,62691,62693,62696],{"class":480,"line":17391},[478,62690,57796],{"class":495},[478,62692,51817],{"class":714},[478,62694,62695],{"class":495},"#FB7299",[478,62697,1859],{"class":714},[478,62699,62700,62702,62704,62706,62708],{"class":480,"line":17396},[478,62701,55302],{"class":495},[478,62703,51817],{"class":714},[478,62705,1249],{"class":495},[478,62707,51872],{"class":710},[478,62709,1859],{"class":714},[478,62711,62712,62715,62717,62720],{"class":480,"line":17410},[478,62713,62714],{"class":495},"      font-weight",[478,62716,51817],{"class":714},[478,62718,62719],{"class":495},"bold",[478,62721,1859],{"class":714},[478,62723,62724],{"class":480,"line":17415},[478,62725,2753],{"class":714},[478,62727,62728],{"class":480,"line":17420},[478,62729,2966],{"emptyLinePlaceholder":640},[478,62731,62732,62734,62736,62739],{"class":480,"line":17434},[478,62733,62503],{"class":484},[478,62735,62554],{"class":484},[478,62737,62738],{"class":484}," .text",[478,62740,16137],{"class":714},[478,62742,62743,62745,62747,62750],{"class":480,"line":17446},[478,62744,57796],{"class":495},[478,62746,51817],{"class":714},[478,62748,62749],{"class":495},"#333",[478,62751,1859],{"class":714},[478,62753,62754,62756,62758,62760,62762,62764],{"class":480,"line":17451},[478,62755,55075],{"class":495},[478,62757,51817],{"class":714},[478,62759,1146],{"class":495},[478,62761,51872],{"class":710},[478,62763,4659],{"class":495},[478,62765,1859],{"class":714},[478,62767,62768],{"class":480,"line":17464},[478,62769,2753],{"class":714},[478,62771,62772],{"class":480,"line":17469},[478,62773,2966],{"emptyLinePlaceholder":640},[478,62775,62776,62778,62780,62783],{"class":480,"line":17474},[478,62777,62503],{"class":484},[478,62779,62554],{"class":484},[478,62781,62782],{"class":484}," .time",[478,62784,16137],{"class":714},[478,62786,62787,62789,62791,62793],{"class":480,"line":17479},[478,62788,57796],{"class":495},[478,62790,51817],{"class":714},[478,62792,62450],{"class":495},[478,62794,1859],{"class":714},[478,62796,62797,62799,62801,62803,62805],{"class":480,"line":17492},[478,62798,55302],{"class":495},[478,62800,51817],{"class":714},[478,62802,1198],{"class":495},[478,62804,51872],{"class":710},[478,62806,1859],{"class":714},[478,62808,62809],{"class":480,"line":17497},[478,62810,2753],{"class":714},[478,62812,62813,62815,62817],{"class":480,"line":33013},[478,62814,52797],{"class":714},[478,62816,617],{"class":51680},[478,62818,51687],{"class":714},[478,62820,62821,62823,62825],{"class":480,"line":33019},[478,62822,52165],{"class":714},[478,62824,51714],{"class":51680},[478,62826,51687],{"class":714},[478,62828,62829],{"class":480,"line":33025},[478,62830,2966],{"emptyLinePlaceholder":640},[478,62832,62833,62835,62837],{"class":480,"line":33031},[478,62834,1605],{"class":714},[478,62836,52180],{"class":51680},[478,62838,51687],{"class":714},[478,62840,62841,62843,62845,62847,62849,62852],{"class":480,"line":33037},[478,62842,52524],{"class":714},[478,62844,51991],{"class":51680},[478,62846,53866],{"class":484},[478,62848,759],{"class":714},[478,62850,62851],{"class":488},"\"wrapper\"",[478,62853,51687],{"class":714},[478,62855,62856,62858,62860,62862,62864,62867,62869,62871],{"class":480,"line":33048},[478,62857,51721],{"class":714},[478,62859,1141],{"class":51680},[478,62861,53866],{"class":484},[478,62863,759],{"class":714},[478,62865,62866],{"class":488},"\"avatar\"",[478,62868,55694],{"class":714},[478,62870,1141],{"class":51680},[478,62872,51687],{"class":714},[478,62874,62875,62877,62879,62881,62883,62886,62888,62890,62893,62895,62897,62899,62902,62904,62907,62909,62911],{"class":480,"line":33054},[478,62876,51721],{"class":714},[478,62878,54668],{"class":51680},[478,62880,15524],{"class":484},[478,62882,759],{"class":714},[478,62884,62885],{"class":488},"\"tx\"",[478,62887,61400],{"class":484},[478,62889,759],{"class":714},[478,62891,62892],{"class":488},"\"发一条友善的评论\"",[478,62894,54691],{"class":484},[478,62896,759],{"class":714},[478,62898,4267],{"class":488},[478,62900,62901],{"class":484}," maxlength",[478,62903,759],{"class":714},[478,62905,62906],{"class":488},"\"200\"",[478,62908,55694],{"class":714},[478,62910,54668],{"class":51680},[478,62912,51687],{"class":714},[478,62914,62915,62917,62919,62922,62924],{"class":480,"line":33074},[478,62916,51721],{"class":714},[478,62918,54267],{"class":51680},[478,62920,62921],{"class":714},">发布\u003C\u002F",[478,62923,54267],{"class":51680},[478,62925,51687],{"class":714},[478,62927,62928,62930,62932],{"class":480,"line":33080},[478,62929,52797],{"class":714},[478,62931,51991],{"class":51680},[478,62933,51687],{"class":714},[478,62935,62936,62938,62940,62942,62944,62946],{"class":480,"line":33091},[478,62937,52524],{"class":714},[478,62939,51991],{"class":51680},[478,62941,53866],{"class":484},[478,62943,759],{"class":714},[478,62945,62851],{"class":488},[478,62947,51687],{"class":714},[478,62949,62950,62952,62954,62956,62958,62961,62964,62966],{"class":480,"line":33097},[478,62951,51721],{"class":714},[478,62953,478],{"class":51680},[478,62955,53866],{"class":484},[478,62957,759],{"class":714},[478,62959,62960],{"class":488},"\"total\"",[478,62962,62963],{"class":714},">0\u002F200字\u003C\u002F",[478,62965,478],{"class":51680},[478,62967,51687],{"class":714},[478,62969,62970,62972,62974],{"class":480,"line":33103},[478,62971,52797],{"class":714},[478,62973,51991],{"class":51680},[478,62975,51687],{"class":714},[478,62977,62978,62980,62982,62984,62986,62989],{"class":480,"line":33109},[478,62979,52524],{"class":714},[478,62981,51991],{"class":51680},[478,62983,53866],{"class":484},[478,62985,759],{"class":714},[478,62987,62988],{"class":488},"\"list\"",[478,62990,51687],{"class":714},[478,62992,62993,62995,62997,62999,63001,63004,63007,63009,63012],{"class":480,"line":33115},[478,62994,51721],{"class":714},[478,62996,51991],{"class":51680},[478,62998,53866],{"class":484},[478,63000,759],{"class":714},[478,63002,63003],{"class":488},"\"item\"",[478,63005,63006],{"class":484}," style",[478,63008,759],{"class":714},[478,63010,63011],{"class":488},"\"display: none;\"",[478,63013,51687],{"class":714},[478,63015,63016,63018,63020,63022,63024,63026,63028,63030],{"class":480,"line":33121},[478,63017,55614],{"class":714},[478,63019,1141],{"class":51680},[478,63021,53866],{"class":484},[478,63023,759],{"class":714},[478,63025,62866],{"class":488},[478,63027,55694],{"class":714},[478,63029,1141],{"class":51680},[478,63031,51687],{"class":714},[478,63033,63034,63036,63038,63040,63042,63045],{"class":480,"line":33127},[478,63035,55614],{"class":714},[478,63037,51991],{"class":51680},[478,63039,53866],{"class":484},[478,63041,759],{"class":714},[478,63043,63044],{"class":488},"\"info\"",[478,63046,51687],{"class":714},[478,63048,63049,63051,63053,63055,63057,63060,63063,63065],{"class":480,"line":33133},[478,63050,55682],{"class":714},[478,63052,19],{"class":51680},[478,63054,53866],{"class":484},[478,63056,759],{"class":714},[478,63058,63059],{"class":488},"\"name\"",[478,63061,63062],{"class":714},">清风徐来\u003C\u002F",[478,63064,19],{"class":51680},[478,63066,51687],{"class":714},[478,63068,63069,63071,63073,63075,63077,63080,63083,63085],{"class":480,"line":33153},[478,63070,55682],{"class":714},[478,63072,19],{"class":51680},[478,63074,53866],{"class":484},[478,63076,759],{"class":714},[478,63078,63079],{"class":488},"\"text\"",[478,63081,63082],{"class":714},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[478,63084,19],{"class":51680},[478,63086,51687],{"class":714},[478,63088,63089,63091,63093,63095,63097,63100,63103,63105],{"class":480,"line":33159},[478,63090,55682],{"class":714},[478,63092,19],{"class":51680},[478,63094,53866],{"class":484},[478,63096,759],{"class":714},[478,63098,63099],{"class":488},"\"time\"",[478,63101,63102],{"class":714},">2022-10-10 20:29:21\u003C\u002F",[478,63104,19],{"class":51680},[478,63106,51687],{"class":714},[478,63108,63109,63111,63113],{"class":480,"line":33175},[478,63110,55787],{"class":714},[478,63112,51991],{"class":51680},[478,63114,51687],{"class":714},[478,63116,63117,63119,63121],{"class":480,"line":33181},[478,63118,52156],{"class":714},[478,63120,51991],{"class":51680},[478,63122,51687],{"class":714},[478,63124,63125,63127,63129],{"class":480,"line":33195},[478,63126,52797],{"class":714},[478,63128,51991],{"class":51680},[478,63130,51687],{"class":714},[478,63132,63133,63135,63137],{"class":480,"line":33201},[478,63134,52524],{"class":714},[478,63136,52193],{"class":51680},[478,63138,51687],{"class":714},[478,63140,63141,63143,63146,63148,63150,63152,63154,63157],{"class":480,"line":33216},[478,63142,11787],{"class":710},[478,63144,63145],{"class":495}," tx",[478,63147,14130],{"class":710},[478,63149,54776],{"class":714},[478,63151,54779],{"class":484},[478,63153,263],{"class":714},[478,63155,63156],{"class":488},"'#tx'",[478,63158,720],{"class":714},[478,63160,63161,63163,63166,63168,63170,63172,63174,63177],{"class":480,"line":33222},[478,63162,11787],{"class":710},[478,63164,63165],{"class":495}," total",[478,63167,14130],{"class":710},[478,63169,54776],{"class":714},[478,63171,54779],{"class":484},[478,63173,263],{"class":714},[478,63175,63176],{"class":488},"'.total'",[478,63178,720],{"class":714},[478,63180,63181],{"class":480,"line":33231},[478,63182,63183],{"class":770},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[478,63185,63186,63189,63191,63193,63195,63197,63199],{"class":480,"line":33237},[478,63187,63188],{"class":714},"    tx.",[478,63190,58193],{"class":484},[478,63192,263],{"class":714},[478,63194,61707],{"class":488},[478,63196,13001],{"class":714},[478,63198,54829],{"class":710},[478,63200,54832],{"class":714},[478,63202,63203,63206,63208],{"class":480,"line":33246},[478,63204,63205],{"class":714},"      total.style.opacity ",[478,63207,759],{"class":710},[478,63209,56079],{"class":495},[478,63211,63212],{"class":480,"line":33252},[478,63213,33841],{"class":714},[478,63215,63216],{"class":480,"line":33258},[478,63217,63218],{"class":770},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[478,63220,63221,63223,63225,63227,63229,63231,63233],{"class":480,"line":33267},[478,63222,63188],{"class":714},[478,63224,58193],{"class":484},[478,63226,263],{"class":714},[478,63228,61768],{"class":488},[478,63230,13001],{"class":714},[478,63232,54829],{"class":710},[478,63234,54832],{"class":714},[478,63236,63237,63239,63241],{"class":480,"line":33273},[478,63238,63205],{"class":714},[478,63240,759],{"class":710},[478,63242,47713],{"class":495},[478,63244,63245],{"class":480,"line":33284},[478,63246,33841],{"class":714},[478,63248,63249],{"class":480,"line":33290},[478,63250,63251],{"class":770},"    \u002F\u002F 3. 检测用户输入\n",[478,63253,63254,63256,63258,63260,63263,63265,63267],{"class":480,"line":33309},[478,63255,63188],{"class":714},[478,63257,58193],{"class":484},[478,63259,263],{"class":714},[478,63261,63262],{"class":488},"'input'",[478,63264,13001],{"class":714},[478,63266,54829],{"class":710},[478,63268,54832],{"class":714},[478,63270,63271],{"class":480,"line":33315},[478,63272,63273],{"class":770},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[478,63275,63276,63279,63281,63284,63287,63289,63292,63294,63296],{"class":480,"line":33326},[478,63277,63278],{"class":714},"      total.innerHTML ",[478,63280,759],{"class":710},[478,63282,63283],{"class":488}," `${",[478,63285,63286],{"class":714},"tx",[478,63288,1258],{"class":488},[478,63290,63291],{"class":714},"value",[478,63293,1258],{"class":488},[478,63295,52348],{"class":495},[478,63297,63298],{"class":488},"}\u002F200字`\n",[478,63300,63301],{"class":480,"line":33332},[478,63302,33841],{"class":714},[478,63304,63305],{"class":480,"line":33352},[478,63306,2966],{"emptyLinePlaceholder":640},[478,63308,63309],{"class":480,"line":33368},[478,63310,63311],{"class":770},"    \u002F\u002F const str = 'andy'\n",[478,63313,63314],{"class":480,"line":33374},[478,63315,63316],{"class":770},"    \u002F\u002F console.log(str.length)\n",[478,63318,63319,63321,63323],{"class":480,"line":33388},[478,63320,52797],{"class":714},[478,63322,52193],{"class":51680},[478,63324,51687],{"class":714},[478,63326,63327,63329,63331],{"class":480,"line":33394},[478,63328,52165],{"class":714},[478,63330,52180],{"class":51680},[478,63332,51687],{"class":714},[478,63334,63335],{"class":480,"line":33400},[478,63336,2966],{"emptyLinePlaceholder":640},[478,63338,63339,63341,63343],{"class":480,"line":33411},[478,63340,52165],{"class":714},[478,63342,51015],{"class":51680},[478,63344,51687],{"class":714},[22563,63346,63348],{"id":63347},"_3254-change事件","3.2.5.4 change事件",[19,63350,63351],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63353,63354],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63356,63357],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[469,63359,63361],{"className":51013,"code":63360,"language":51015,"meta":54,"style":54},"\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",[475,63362,63363,63373,63387,63391,63399,63413,63433,63445,63453,63457,63465,63479,63487,63505,63523,63535,63539,63547,63555,63559],{"__ignoreMap":54},[478,63364,63365,63367,63369,63371],{"class":480,"line":481},[478,63366,51677],{"class":714},[478,63368,51681],{"class":51680},[478,63370,51684],{"class":484},[478,63372,51687],{"class":714},[478,63374,63375,63377,63379,63381,63383,63385],{"class":480,"line":565},[478,63376,1605],{"class":714},[478,63378,51015],{"class":51680},[478,63380,51696],{"class":484},[478,63382,759],{"class":714},[478,63384,51701],{"class":488},[478,63386,51687],{"class":714},[478,63388,63389],{"class":480,"line":579},[478,63390,2966],{"emptyLinePlaceholder":640},[478,63392,63393,63395,63397],{"class":480,"line":593},[478,63394,1605],{"class":714},[478,63396,51714],{"class":51680},[478,63398,51687],{"class":714},[478,63400,63401,63403,63405,63407,63409,63411],{"class":480,"line":1769},[478,63402,52524],{"class":714},[478,63404,51724],{"class":51680},[478,63406,51727],{"class":484},[478,63408,759],{"class":714},[478,63410,51732],{"class":488},[478,63412,51687],{"class":714},[478,63414,63415,63417,63419,63421,63423,63425,63427,63429,63431],{"class":480,"line":1783},[478,63416,52524],{"class":714},[478,63418,51724],{"class":51680},[478,63420,15485],{"class":484},[478,63422,759],{"class":714},[478,63424,51771],{"class":488},[478,63426,51751],{"class":484},[478,63428,759],{"class":714},[478,63430,51778],{"class":488},[478,63432,51687],{"class":714},[478,63434,63435,63437,63439,63441,63443],{"class":480,"line":1789},[478,63436,52524],{"class":714},[478,63438,51787],{"class":51680},[478,63440,51790],{"class":714},[478,63442,51787],{"class":51680},[478,63444,51687],{"class":714},[478,63446,63447,63449,63451],{"class":480,"line":1880},[478,63448,52165],{"class":714},[478,63450,51714],{"class":51680},[478,63452,51687],{"class":714},[478,63454,63455],{"class":480,"line":1886},[478,63456,2966],{"emptyLinePlaceholder":640},[478,63458,63459,63461,63463],{"class":480,"line":1898},[478,63460,1605],{"class":714},[478,63462,52180],{"class":51680},[478,63464,51687],{"class":714},[478,63466,63467,63469,63471,63473,63475,63477],{"class":480,"line":2180},[478,63468,52524],{"class":714},[478,63470,54201],{"class":51680},[478,63472,54204],{"class":484},[478,63474,759],{"class":714},[478,63476,63079],{"class":488},[478,63478,51687],{"class":714},[478,63480,63481,63483,63485],{"class":480,"line":2185},[478,63482,52524],{"class":714},[478,63484,52193],{"class":51680},[478,63486,51687],{"class":714},[478,63488,63489,63491,63493,63495,63497,63499,63501,63503],{"class":480,"line":2191},[478,63490,11787],{"class":710},[478,63492,60985],{"class":495},[478,63494,14130],{"class":710},[478,63496,54776],{"class":714},[478,63498,54779],{"class":484},[478,63500,263],{"class":714},[478,63502,63262],{"class":488},[478,63504,720],{"class":714},[478,63506,63507,63510,63512,63514,63517,63519,63521],{"class":480,"line":2196},[478,63508,63509],{"class":714},"    input.",[478,63511,58193],{"class":484},[478,63513,263],{"class":714},[478,63515,63516],{"class":488},"'change'",[478,63518,13001],{"class":714},[478,63520,54829],{"class":710},[478,63522,54832],{"class":714},[478,63524,63525,63527,63529,63531,63533],{"class":480,"line":2210},[478,63526,58624],{"class":714},[478,63528,58627],{"class":484},[478,63530,263],{"class":714},[478,63532,1292],{"class":495},[478,63534,720],{"class":714},[478,63536,63537],{"class":480,"line":2215},[478,63538,33841],{"class":714},[478,63540,63541,63543,63545],{"class":480,"line":2221},[478,63542,52797],{"class":714},[478,63544,52193],{"class":51680},[478,63546,51687],{"class":714},[478,63548,63549,63551,63553],{"class":480,"line":2241},[478,63550,52165],{"class":714},[478,63552,52180],{"class":51680},[478,63554,51687],{"class":714},[478,63556,63557],{"class":480,"line":2246},[478,63558,2966],{"emptyLinePlaceholder":640},[478,63560,63561,63563,63565],{"class":480,"line":2260},[478,63562,52165],{"class":714},[478,63564,51015],{"class":51680},[478,63566,51687],{"class":714},[19,63568,63569],{},"总结：内容发生改变才回去触发",[129,63571,63573],{"id":63572},"_326-事件对象","3.2.6 事件对象",[22563,63575,63577],{"id":63576},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63579,63580],{},[52,63581],{"alt":54,"src":63582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63584,63585],{},[52,63586],{"alt":54,"src":63587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63589,63590],{},"点击一次，就输出了事件对象，它是个对象",[19,63592,63593],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63595,63596],{},[52,63597],{"alt":54,"src":63598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22563,63600,63602],{"id":63601},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63604,63605],{},[52,63606],{"alt":54,"src":63607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63609,63610],{},"实现按特殊字符才是实现打印输出效果：",[469,63612,63614],{"className":53447,"code":63613,"language":53449,"meta":54,"style":54},"\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",[475,63615,63616,63624,63629,63643,63651,63656,63661,63666,63671,63676,63681,63686,63691,63696,63700,63704,63712],{"__ignoreMap":54},[478,63617,63618,63620,63622],{"class":480,"line":481},[478,63619,1605],{"class":714},[478,63621,52180],{"class":51680},[478,63623,51687],{"class":714},[478,63625,63626],{"class":480,"line":565},[478,63627,63628],{"class":770},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[478,63630,63631,63633,63635,63637,63639,63641],{"class":480,"line":579},[478,63632,52524],{"class":714},[478,63634,54201],{"class":51680},[478,63636,54204],{"class":484},[478,63638,759],{"class":714},[478,63640,63079],{"class":488},[478,63642,51687],{"class":714},[478,63644,63645,63647,63649],{"class":480,"line":593},[478,63646,52524],{"class":714},[478,63648,52193],{"class":51680},[478,63650,51687],{"class":714},[478,63652,63653],{"class":480,"line":1769},[478,63654,63655],{"class":714},"    \u002F\u002F const btn = document.querySelector('button')\n",[478,63657,63658],{"class":480,"line":1783},[478,63659,63660],{"class":714},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[478,63662,63663],{"class":480,"line":1789},[478,63664,63665],{"class":714},"    \u002F\u002F   console.log(e);\n",[478,63667,63668],{"class":480,"line":1880},[478,63669,63670],{"class":714},"    \u002F\u002F })\n",[478,63672,63673],{"class":480,"line":1886},[478,63674,63675],{"class":714},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[478,63677,63678],{"class":480,"line":1898},[478,63679,63680],{"class":714},"    const input = document.querySelector('input')\n",[478,63682,63683],{"class":480,"line":2180},[478,63684,63685],{"class":714},"    input.addEventListener('keyup', function (e) {\n",[478,63687,63688],{"class":480,"line":2185},[478,63689,63690],{"class":714},"      if (e.key === 'Enter') {\n",[478,63692,63693],{"class":480,"line":2191},[478,63694,63695],{"class":714},"        console.log('我按下了回车键')\n",[478,63697,63698],{"class":480,"line":2196},[478,63699,52778],{"class":714},[478,63701,63702],{"class":480,"line":2210},[478,63703,33841],{"class":714},[478,63705,63706,63708,63710],{"class":480,"line":2215},[478,63707,52797],{"class":714},[478,63709,52193],{"class":51680},[478,63711,51687],{"class":714},[478,63713,63714,63716,63718],{"class":480,"line":2221},[478,63715,52165],{"class":714},[478,63717,52180],{"class":51680},[478,63719,51687],{"class":714},[22563,63721,63723],{"id":63722},"_3263-trim方法","3.2.6.3 trim方法",[19,63725,63726],{},[52,63727],{"alt":54,"src":63728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63730,63731],{},[52,63732],{"alt":54,"src":63733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63735,63736],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63738,63739],{},"str.trim()",[129,63741,63743],{"id":63742},"_327-环境对象","3.2.7 环境对象",[19,63745,63746],{},[52,63747],{"alt":54,"src":63748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63750,63751],{},[52,63752],{"alt":54,"src":63753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63755,63756],{},[52,63757],{"alt":54,"src":63758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63760,63761],{},"实际函数调用是window.fn()",[19,63763,63764],{},"普通函数里面this指向的是window",[1702,63766,63767,63770,63773],{},[32,63768,63769],{},"在普通函数下，this指向的是window",[32,63771,63772],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[32,63774,63775],{},"箭头函数没有this",[19,63777,63778],{},"粗略记法就是：谁调用，this就指向谁",[19,63780,63781],{},[52,63782],{"alt":54,"src":63783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63785,63786],{},[52,63787],{"alt":54,"src":63788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63790,63791],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63793,63794],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[469,63796,63798],{"className":53447,"code":63797,"language":53449,"meta":54,"style":54},"\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",[475,63799,63800,63808,63820,63828,63833,63838,63843,63848,63852,63860],{"__ignoreMap":54},[478,63801,63802,63804,63806],{"class":480,"line":481},[478,63803,1605],{"class":714},[478,63805,52180],{"class":51680},[478,63807,51687],{"class":714},[478,63809,63810,63812,63814,63816,63818],{"class":480,"line":565},[478,63811,52524],{"class":714},[478,63813,54267],{"class":51680},[478,63815,54273],{"class":714},[478,63817,54267],{"class":51680},[478,63819,51687],{"class":714},[478,63821,63822,63824,63826],{"class":480,"line":579},[478,63823,52524],{"class":714},[478,63825,52193],{"class":51680},[478,63827,51687],{"class":714},[478,63829,63830],{"class":480,"line":593},[478,63831,63832],{"class":714},"    const button = document.querySelector('button')\n",[478,63834,63835],{"class":480,"line":1769},[478,63836,63837],{"class":714},"    button.addEventListener('click', function () {\n",[478,63839,63840],{"class":480,"line":1783},[478,63841,63842],{"class":714},"      \u002F\u002F console.log(this);\n",[478,63844,63845],{"class":480,"line":1789},[478,63846,63847],{"class":714},"      this.style.color = 'pink'\n",[478,63849,63850],{"class":480,"line":1880},[478,63851,33841],{"class":714},[478,63853,63854,63856,63858],{"class":480,"line":1886},[478,63855,52797],{"class":714},[478,63857,52193],{"class":51680},[478,63859,51687],{"class":714},[478,63861,63862,63864,63866],{"class":480,"line":1898},[478,63863,52165],{"class":714},[478,63865,52180],{"class":51680},[478,63867,51687],{"class":714},[129,63869,63871],{"id":63870},"_328-回调函数","3.2.8 回调函数",[19,63873,63874],{},[52,63875],{"alt":54,"src":63876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63878,63879],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63881,11898],{},[1702,63883,63884,63887,63890],{},[32,63885,63886],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[32,63888,63889],{},"回调函数本质还是函数，只不过把它当成参数使用",[32,63891,63892],{},"使用匿名函数做为回调函数比较常见",[129,63894,63896],{"id":63895},"_329-tab栏切换","3.2.9 tab栏切换",[19,63898,63899],{},[52,63900],{"alt":54,"src":63901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[469,63903,63905],{"className":51013,"code":63904,"language":51015,"meta":54,"style":54},"\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",[475,63906,63907,63917,63931,63935,63943,63957,63977,63997,64010,64018,64024,64034,64044,64048,64052,64059,64072,64085,64097,64113,64117,64121,64128,64140,64152,64164,64174,64184,64188,64192,64201,64213,64224,64236,64240,64244,64252,64262,64272,64282,64286,64290,64300,64314,64326,64330,64334,64346,64357,64374,64384,64388,64392,64407,64418,64428,64432,64436,64443,64458,64462,64466,64474,64484,64488,64492,64501,64511,64515,64523,64531,64535,64543,64558,64573,64586,64594,64628,64655,64682,64709,64736,64744,64752,64767,64804,64839,64874,64909,64944,64952,64960,64968,64973,64978,64998,65003,65032,65037,65042,65060,65065,65070,65075,65097,65102,65118,65122,65127,65132,65153,65158,65187,65191,65196,65200,65208,65216,65220],{"__ignoreMap":54},[478,63908,63909,63911,63913,63915],{"class":480,"line":481},[478,63910,51677],{"class":714},[478,63912,51681],{"class":51680},[478,63914,51684],{"class":484},[478,63916,51687],{"class":714},[478,63918,63919,63921,63923,63925,63927,63929],{"class":480,"line":565},[478,63920,1605],{"class":714},[478,63922,51015],{"class":51680},[478,63924,51696],{"class":484},[478,63926,759],{"class":714},[478,63928,51701],{"class":488},[478,63930,51687],{"class":714},[478,63932,63933],{"class":480,"line":579},[478,63934,2966],{"emptyLinePlaceholder":640},[478,63936,63937,63939,63941],{"class":480,"line":593},[478,63938,1605],{"class":714},[478,63940,51714],{"class":51680},[478,63942,51687],{"class":714},[478,63944,63945,63947,63949,63951,63953,63955],{"class":480,"line":1769},[478,63946,52524],{"class":714},[478,63948,51724],{"class":51680},[478,63950,51727],{"class":484},[478,63952,759],{"class":714},[478,63954,51732],{"class":488},[478,63956,59507],{"class":714},[478,63958,63959,63961,63963,63965,63967,63969,63971,63973,63975],{"class":480,"line":1783},[478,63960,52524],{"class":714},[478,63962,51724],{"class":51680},[478,63964,51743],{"class":484},[478,63966,759],{"class":714},[478,63968,51748],{"class":488},[478,63970,51751],{"class":484},[478,63972,759],{"class":714},[478,63974,51756],{"class":488},[478,63976,59507],{"class":714},[478,63978,63979,63981,63983,63985,63987,63989,63991,63993,63995],{"class":480,"line":1789},[478,63980,52524],{"class":714},[478,63982,51724],{"class":51680},[478,63984,15485],{"class":484},[478,63986,759],{"class":714},[478,63988,51771],{"class":488},[478,63990,51751],{"class":484},[478,63992,759],{"class":714},[478,63994,51778],{"class":488},[478,63996,59507],{"class":714},[478,63998,63999,64001,64003,64006,64008],{"class":480,"line":1880},[478,64000,52524],{"class":714},[478,64002,51787],{"class":51680},[478,64004,64005],{"class":714},">tab栏切换\u003C\u002F",[478,64007,51787],{"class":51680},[478,64009,51687],{"class":714},[478,64011,64012,64014,64016],{"class":480,"line":1886},[478,64013,52524],{"class":714},[478,64015,617],{"class":51680},[478,64017,51687],{"class":714},[478,64019,64020,64022],{"class":480,"line":1898},[478,64021,6969],{"class":51680},[478,64023,16137],{"class":714},[478,64025,64026,64028,64030,64032],{"class":480,"line":2180},[478,64027,55086],{"class":495},[478,64029,51817],{"class":714},[478,64031,895],{"class":495},[478,64033,1859],{"class":714},[478,64035,64036,64038,64040,64042],{"class":480,"line":2185},[478,64037,55075],{"class":495},[478,64039,51817],{"class":714},[478,64041,895],{"class":495},[478,64043,1859],{"class":714},[478,64045,64046],{"class":480,"line":2191},[478,64047,2753],{"class":714},[478,64049,64050],{"class":480,"line":2196},[478,64051,2966],{"emptyLinePlaceholder":640},[478,64053,64054,64057],{"class":480,"line":2210},[478,64055,64056],{"class":484},"    .tab",[478,64058,16137],{"class":714},[478,64060,64061,64063,64065,64068,64070],{"class":480,"line":2215},[478,64062,55151],{"class":495},[478,64064,51817],{"class":714},[478,64066,64067],{"class":495},"590",[478,64069,51872],{"class":710},[478,64071,1859],{"class":714},[478,64073,64074,64076,64078,64081,64083],{"class":480,"line":2221},[478,64075,55165],{"class":495},[478,64077,51817],{"class":714},[478,64079,64080],{"class":495},"340",[478,64082,51872],{"class":710},[478,64084,1859],{"class":714},[478,64086,64087,64089,64091,64093,64095],{"class":480,"line":2241},[478,64088,55086],{"class":495},[478,64090,51817],{"class":714},[478,64092,1396],{"class":495},[478,64094,51872],{"class":710},[478,64096,1859],{"class":714},[478,64098,64099,64101,64103,64105,64107,64109,64111],{"class":480,"line":2246},[478,64100,62357],{"class":495},[478,64102,51817],{"class":714},[478,64104,193],{"class":495},[478,64106,51872],{"class":710},[478,64108,51901],{"class":495},[478,64110,62624],{"class":495},[478,64112,1859],{"class":714},[478,64114,64115],{"class":480,"line":2260},[478,64116,2753],{"class":714},[478,64118,64119],{"class":480,"line":2265},[478,64120,2966],{"emptyLinePlaceholder":640},[478,64122,64123,64126],{"class":480,"line":2294},[478,64124,64125],{"class":484},"    .tab-nav",[478,64127,16137],{"class":714},[478,64129,64130,64132,64134,64136,64138],{"class":480,"line":2299},[478,64131,55151],{"class":495},[478,64133,51817],{"class":714},[478,64135,1012],{"class":495},[478,64137,1029],{"class":710},[478,64139,1859],{"class":714},[478,64141,64142,64144,64146,64148,64150],{"class":480,"line":2316},[478,64143,55165],{"class":495},[478,64145,51817],{"class":714},[478,64147,1602],{"class":495},[478,64149,51872],{"class":710},[478,64151,1859],{"class":714},[478,64153,64154,64156,64158,64160,64162],{"class":480,"line":2321},[478,64155,57739],{"class":495},[478,64157,51817],{"class":714},[478,64159,1602],{"class":495},[478,64161,51872],{"class":710},[478,64163,1859],{"class":714},[478,64165,64166,64168,64170,64172],{"class":480,"line":2326},[478,64167,55389],{"class":495},[478,64169,51817],{"class":714},[478,64171,51857],{"class":495},[478,64173,1859],{"class":714},[478,64175,64176,64178,64180,64182],{"class":480,"line":2331},[478,64177,55400],{"class":495},[478,64179,51817],{"class":714},[478,64181,52048],{"class":495},[478,64183,1859],{"class":714},[478,64185,64186],{"class":480,"line":2345},[478,64187,2753],{"class":714},[478,64189,64190],{"class":480,"line":2350},[478,64191,2966],{"emptyLinePlaceholder":640},[478,64193,64194,64196,64199],{"class":480,"line":3143},[478,64195,64125],{"class":484},[478,64197,64198],{"class":51680}," h3",[478,64200,16137],{"class":714},[478,64202,64203,64205,64207,64209,64211],{"class":480,"line":3157},[478,64204,55302],{"class":495},[478,64206,51817],{"class":714},[478,64208,1495],{"class":495},[478,64210,51872],{"class":710},[478,64212,1859],{"class":714},[478,64214,64215,64217,64219,64222],{"class":480,"line":3165},[478,64216,62714],{"class":495},[478,64218,51817],{"class":714},[478,64220,64221],{"class":495},"normal",[478,64223,1859],{"class":714},[478,64225,64226,64228,64230,64232,64234],{"class":480,"line":3170},[478,64227,62380],{"class":495},[478,64229,51817],{"class":714},[478,64231,1396],{"class":495},[478,64233,51872],{"class":710},[478,64235,1859],{"class":714},[478,64237,64238],{"class":480,"line":3176},[478,64239,2753],{"class":714},[478,64241,64242],{"class":480,"line":3182},[478,64243,2966],{"emptyLinePlaceholder":640},[478,64245,64246,64248,64250],{"class":480,"line":3187},[478,64247,64125],{"class":484},[478,64249,61672],{"class":51680},[478,64251,16137],{"class":714},[478,64253,64254,64256,64258,64260],{"class":480,"line":8514},[478,64255,55112],{"class":495},[478,64257,51817],{"class":714},[478,64259,55117],{"class":495},[478,64261,1859],{"class":714},[478,64263,64264,64266,64268,64270],{"class":480,"line":8538},[478,64265,55389],{"class":495},[478,64267,51817],{"class":714},[478,64269,51857],{"class":495},[478,64271,1859],{"class":714},[478,64273,64274,64276,64278,64280],{"class":480,"line":8543},[478,64275,55400],{"class":495},[478,64277,51817],{"class":714},[478,64279,51960],{"class":495},[478,64281,1859],{"class":714},[478,64283,64284],{"class":480,"line":8549},[478,64285,2753],{"class":714},[478,64287,64288],{"class":480,"line":8576},[478,64289,2966],{"emptyLinePlaceholder":640},[478,64291,64292,64294,64296,64298],{"class":480,"line":8581},[478,64293,64125],{"class":484},[478,64295,61672],{"class":51680},[478,64297,55455],{"class":51680},[478,64299,16137],{"class":714},[478,64301,64302,64304,64306,64308,64310,64312],{"class":480,"line":8587},[478,64303,55086],{"class":495},[478,64305,51817],{"class":714},[478,64307,895],{"class":495},[478,64309,9516],{"class":495},[478,64311,51872],{"class":710},[478,64313,1859],{"class":714},[478,64315,64316,64318,64320,64322,64324],{"class":480,"line":8599},[478,64317,55302],{"class":495},[478,64319,51817],{"class":714},[478,64321,1249],{"class":495},[478,64323,51872],{"class":710},[478,64325,1859],{"class":714},[478,64327,64328],{"class":480,"line":8611},[478,64329,2753],{"class":714},[478,64331,64332],{"class":480,"line":8623},[478,64333,2966],{"emptyLinePlaceholder":640},[478,64335,64336,64338,64340,64342,64344],{"class":480,"line":10282},[478,64337,64125],{"class":484},[478,64339,61672],{"class":51680},[478,64341,55455],{"class":51680},[478,64343,1967],{"class":51680},[478,64345,16137],{"class":714},[478,64347,64348,64351,64353,64355],{"class":480,"line":10307},[478,64349,64350],{"class":495},"      text-decoration",[478,64352,51817],{"class":714},[478,64354,55117],{"class":495},[478,64356,1859],{"class":714},[478,64358,64359,64361,64363,64365,64367,64369,64372],{"class":480,"line":10330},[478,64360,62612],{"class":495},[478,64362,51817],{"class":714},[478,64364,789],{"class":495},[478,64366,51872],{"class":710},[478,64368,51901],{"class":495},[478,64370,64371],{"class":495}," transparent",[478,64373,1859],{"class":714},[478,64375,64376,64378,64380,64382],{"class":480,"line":10354},[478,64377,57796],{"class":495},[478,64379,51817],{"class":714},[478,64381,62749],{"class":495},[478,64383,1859],{"class":714},[478,64385,64386],{"class":480,"line":10359},[478,64387,2753],{"class":714},[478,64389,64390],{"class":480,"line":10364},[478,64391,2966],{"emptyLinePlaceholder":640},[478,64393,64394,64396,64398,64400,64402,64405],{"class":480,"line":10369},[478,64395,64125],{"class":484},[478,64397,61672],{"class":51680},[478,64399,55455],{"class":51680},[478,64401,1967],{"class":51680},[478,64403,64404],{"class":484},".active",[478,64406,16137],{"class":714},[478,64408,64409,64411,64413,64416],{"class":480,"line":10378},[478,64410,62171],{"class":495},[478,64412,51817],{"class":714},[478,64414,64415],{"class":495},"#e1251b",[478,64417,1859],{"class":714},[478,64419,64420,64422,64424,64426],{"class":480,"line":10383},[478,64421,57796],{"class":495},[478,64423,51817],{"class":714},[478,64425,64415],{"class":495},[478,64427,1859],{"class":714},[478,64429,64430],{"class":480,"line":10389},[478,64431,2753],{"class":714},[478,64433,64434],{"class":480,"line":10410},[478,64435,2966],{"emptyLinePlaceholder":640},[478,64437,64438,64441],{"class":480,"line":10416},[478,64439,64440],{"class":484},"    .tab-content",[478,64442,16137],{"class":714},[478,64444,64445,64447,64449,64451,64454,64456],{"class":480,"line":10430},[478,64446,55075],{"class":495},[478,64448,51817],{"class":714},[478,64450,895],{"class":495},[478,64452,64453],{"class":495}," 16",[478,64455,51872],{"class":710},[478,64457,1859],{"class":714},[478,64459,64460],{"class":480,"line":10436},[478,64461,2753],{"class":714},[478,64463,64464],{"class":480,"line":10463},[478,64465,2966],{"emptyLinePlaceholder":640},[478,64467,64468,64470,64472],{"class":480,"line":10472},[478,64469,64440],{"class":484},[478,64471,62554],{"class":484},[478,64473,16137],{"class":714},[478,64475,64476,64478,64480,64482],{"class":480,"line":10478},[478,64477,55389],{"class":495},[478,64479,51817],{"class":714},[478,64481,55117],{"class":495},[478,64483,1859],{"class":714},[478,64485,64486],{"class":480,"line":10486},[478,64487,2753],{"class":714},[478,64489,64490],{"class":480,"line":10491},[478,64491,2966],{"emptyLinePlaceholder":640},[478,64493,64494,64496,64499],{"class":480,"line":17169},[478,64495,64440],{"class":484},[478,64497,64498],{"class":484}," .item.active",[478,64500,16137],{"class":714},[478,64502,64503,64505,64507,64509],{"class":480,"line":17175},[478,64504,55389],{"class":495},[478,64506,51817],{"class":714},[478,64508,61249],{"class":495},[478,64510,1859],{"class":714},[478,64512,64513],{"class":480,"line":17198},[478,64514,2753],{"class":714},[478,64516,64517,64519,64521],{"class":480,"line":17204},[478,64518,52797],{"class":714},[478,64520,617],{"class":51680},[478,64522,51687],{"class":714},[478,64524,64525,64527,64529],{"class":480,"line":17227},[478,64526,52165],{"class":714},[478,64528,51714],{"class":51680},[478,64530,51687],{"class":714},[478,64532,64533],{"class":480,"line":17241},[478,64534,2966],{"emptyLinePlaceholder":640},[478,64536,64537,64539,64541],{"class":480,"line":17261},[478,64538,1605],{"class":714},[478,64540,52180],{"class":51680},[478,64542,51687],{"class":714},[478,64544,64545,64547,64549,64551,64553,64556],{"class":480,"line":17267},[478,64546,52524],{"class":714},[478,64548,51991],{"class":51680},[478,64550,53866],{"class":484},[478,64552,759],{"class":714},[478,64554,64555],{"class":488},"\"tab\"",[478,64557,51687],{"class":714},[478,64559,64560,64562,64564,64566,64568,64571],{"class":480,"line":17278},[478,64561,51721],{"class":714},[478,64563,51991],{"class":51680},[478,64565,53866],{"class":484},[478,64567,759],{"class":714},[478,64569,64570],{"class":488},"\"tab-nav\"",[478,64572,51687],{"class":714},[478,64574,64575,64577,64579,64582,64584],{"class":480,"line":17301},[478,64576,55614],{"class":714},[478,64578,129],{"class":51680},[478,64580,64581],{"class":714},">每日特价\u003C\u002F",[478,64583,129],{"class":51680},[478,64585,51687],{"class":714},[478,64587,64588,64590,64592],{"class":480,"line":17323},[478,64589,55614],{"class":714},[478,64591,1702],{"class":51680},[478,64593,51687],{"class":714},[478,64595,64596,64598,64600,64602,64604,64606,64608,64610,64612,64614,64617,64620,64622,64624,64626],{"class":480,"line":17328},[478,64597,55682],{"class":714},[478,64599,32],{"class":51680},[478,64601,61432],{"class":714},[478,64603,518],{"class":51680},[478,64605,53866],{"class":484},[478,64607,759],{"class":714},[478,64609,60086],{"class":488},[478,64611,61437],{"class":484},[478,64613,759],{"class":714},[478,64615,64616],{"class":488},"\"javascript:;\"",[478,64618,64619],{"class":714},">精选\u003C\u002F",[478,64621,518],{"class":51680},[478,64623,55694],{"class":714},[478,64625,32],{"class":51680},[478,64627,51687],{"class":714},[478,64629,64630,64632,64634,64636,64638,64640,64642,64644,64647,64649,64651,64653],{"class":480,"line":17334},[478,64631,55682],{"class":714},[478,64633,32],{"class":51680},[478,64635,61432],{"class":714},[478,64637,518],{"class":51680},[478,64639,61437],{"class":484},[478,64641,759],{"class":714},[478,64643,64616],{"class":488},[478,64645,64646],{"class":714},">美食\u003C\u002F",[478,64648,518],{"class":51680},[478,64650,55694],{"class":714},[478,64652,32],{"class":51680},[478,64654,51687],{"class":714},[478,64656,64657,64659,64661,64663,64665,64667,64669,64671,64674,64676,64678,64680],{"class":480,"line":17348},[478,64658,55682],{"class":714},[478,64660,32],{"class":51680},[478,64662,61432],{"class":714},[478,64664,518],{"class":51680},[478,64666,61437],{"class":484},[478,64668,759],{"class":714},[478,64670,64616],{"class":488},[478,64672,64673],{"class":714},">百货\u003C\u002F",[478,64675,518],{"class":51680},[478,64677,55694],{"class":714},[478,64679,32],{"class":51680},[478,64681,51687],{"class":714},[478,64683,64684,64686,64688,64690,64692,64694,64696,64698,64701,64703,64705,64707],{"class":480,"line":17361},[478,64685,55682],{"class":714},[478,64687,32],{"class":51680},[478,64689,61432],{"class":714},[478,64691,518],{"class":51680},[478,64693,61437],{"class":484},[478,64695,759],{"class":714},[478,64697,64616],{"class":488},[478,64699,64700],{"class":714},">个护\u003C\u002F",[478,64702,518],{"class":51680},[478,64704,55694],{"class":714},[478,64706,32],{"class":51680},[478,64708,51687],{"class":714},[478,64710,64711,64713,64715,64717,64719,64721,64723,64725,64728,64730,64732,64734],{"class":480,"line":17366},[478,64712,55682],{"class":714},[478,64714,32],{"class":51680},[478,64716,61432],{"class":714},[478,64718,518],{"class":51680},[478,64720,61437],{"class":484},[478,64722,759],{"class":714},[478,64724,64616],{"class":488},[478,64726,64727],{"class":714},">预告\u003C\u002F",[478,64729,518],{"class":51680},[478,64731,55694],{"class":714},[478,64733,32],{"class":51680},[478,64735,51687],{"class":714},[478,64737,64738,64740,64742],{"class":480,"line":17380},[478,64739,55787],{"class":714},[478,64741,1702],{"class":51680},[478,64743,51687],{"class":714},[478,64745,64746,64748,64750],{"class":480,"line":17385},[478,64747,52156],{"class":714},[478,64749,51991],{"class":51680},[478,64751,51687],{"class":714},[478,64753,64754,64756,64758,64760,64762,64765],{"class":480,"line":17391},[478,64755,51721],{"class":714},[478,64757,51991],{"class":51680},[478,64759,53866],{"class":484},[478,64761,759],{"class":714},[478,64763,64764],{"class":488},"\"tab-content\"",[478,64766,51687],{"class":714},[478,64768,64769,64771,64773,64775,64777,64780,64782,64784,64786,64788,64791,64793,64795,64797,64800,64802],{"class":480,"line":17396},[478,64770,55614],{"class":714},[478,64772,51991],{"class":51680},[478,64774,53866],{"class":484},[478,64776,759],{"class":714},[478,64778,64779],{"class":488},"\"item active\"",[478,64781,61432],{"class":714},[478,64783,52],{"class":51680},[478,64785,55619],{"class":484},[478,64787,759],{"class":714},[478,64789,64790],{"class":488},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[478,64792,55627],{"class":484},[478,64794,759],{"class":714},[478,64796,8218],{"class":488},[478,64798,64799],{"class":714}," \u002F>\u003C\u002F",[478,64801,51991],{"class":51680},[478,64803,51687],{"class":714},[478,64805,64806,64808,64810,64812,64814,64816,64818,64820,64822,64824,64827,64829,64831,64833,64835,64837],{"class":480,"line":17410},[478,64807,55614],{"class":714},[478,64809,51991],{"class":51680},[478,64811,53866],{"class":484},[478,64813,759],{"class":714},[478,64815,63003],{"class":488},[478,64817,61432],{"class":714},[478,64819,52],{"class":51680},[478,64821,55619],{"class":484},[478,64823,759],{"class":714},[478,64825,64826],{"class":488},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[478,64828,55627],{"class":484},[478,64830,759],{"class":714},[478,64832,8218],{"class":488},[478,64834,64799],{"class":714},[478,64836,51991],{"class":51680},[478,64838,51687],{"class":714},[478,64840,64841,64843,64845,64847,64849,64851,64853,64855,64857,64859,64862,64864,64866,64868,64870,64872],{"class":480,"line":17415},[478,64842,55614],{"class":714},[478,64844,51991],{"class":51680},[478,64846,53866],{"class":484},[478,64848,759],{"class":714},[478,64850,63003],{"class":488},[478,64852,61432],{"class":714},[478,64854,52],{"class":51680},[478,64856,55619],{"class":484},[478,64858,759],{"class":714},[478,64860,64861],{"class":488},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[478,64863,55627],{"class":484},[478,64865,759],{"class":714},[478,64867,8218],{"class":488},[478,64869,64799],{"class":714},[478,64871,51991],{"class":51680},[478,64873,51687],{"class":714},[478,64875,64876,64878,64880,64882,64884,64886,64888,64890,64892,64894,64897,64899,64901,64903,64905,64907],{"class":480,"line":17420},[478,64877,55614],{"class":714},[478,64879,51991],{"class":51680},[478,64881,53866],{"class":484},[478,64883,759],{"class":714},[478,64885,63003],{"class":488},[478,64887,61432],{"class":714},[478,64889,52],{"class":51680},[478,64891,55619],{"class":484},[478,64893,759],{"class":714},[478,64895,64896],{"class":488},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[478,64898,55627],{"class":484},[478,64900,759],{"class":714},[478,64902,8218],{"class":488},[478,64904,64799],{"class":714},[478,64906,51991],{"class":51680},[478,64908,51687],{"class":714},[478,64910,64911,64913,64915,64917,64919,64921,64923,64925,64927,64929,64932,64934,64936,64938,64940,64942],{"class":480,"line":17434},[478,64912,55614],{"class":714},[478,64914,51991],{"class":51680},[478,64916,53866],{"class":484},[478,64918,759],{"class":714},[478,64920,63003],{"class":488},[478,64922,61432],{"class":714},[478,64924,52],{"class":51680},[478,64926,55619],{"class":484},[478,64928,759],{"class":714},[478,64930,64931],{"class":488},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[478,64933,55627],{"class":484},[478,64935,759],{"class":714},[478,64937,8218],{"class":488},[478,64939,64799],{"class":714},[478,64941,51991],{"class":51680},[478,64943,51687],{"class":714},[478,64945,64946,64948,64950],{"class":480,"line":17446},[478,64947,52156],{"class":714},[478,64949,51991],{"class":51680},[478,64951,51687],{"class":714},[478,64953,64954,64956,64958],{"class":480,"line":17451},[478,64955,52797],{"class":714},[478,64957,51991],{"class":51680},[478,64959,51687],{"class":714},[478,64961,64962,64964,64966],{"class":480,"line":17464},[478,64963,52524],{"class":714},[478,64965,52193],{"class":51680},[478,64967,51687],{"class":714},[478,64969,64970],{"class":480,"line":17469},[478,64971,64972],{"class":770},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[478,64974,64975],{"class":480,"line":17474},[478,64976,64977],{"class":770},"    \u002F\u002F 1.1 获取 a 元素 \n",[478,64979,64980,64982,64985,64987,64989,64991,64993,64996],{"class":480,"line":17479},[478,64981,11787],{"class":710},[478,64983,64984],{"class":495}," as",[478,64986,14130],{"class":710},[478,64988,54776],{"class":714},[478,64990,56061],{"class":484},[478,64992,263],{"class":714},[478,64994,64995],{"class":488},"'.tab-nav a'",[478,64997,720],{"class":714},[478,64999,65000],{"class":480,"line":17492},[478,65001,65002],{"class":770},"    \u002F\u002F console.log(as) \n",[478,65004,65005,65007,65009,65011,65013,65015,65017,65019,65021,65024,65026,65028,65030],{"class":480,"line":17497},[478,65006,3767],{"class":710},[478,65008,219],{"class":714},[478,65010,52227],{"class":710},[478,65012,10004],{"class":714},[478,65014,759],{"class":710},[478,65016,4659],{"class":495},[478,65018,10011],{"class":714},[478,65020,1605],{"class":710},[478,65022,65023],{"class":714}," as.",[478,65025,52348],{"class":495},[478,65027,3780],{"class":714},[478,65029,2858],{"class":710},[478,65031,13008],{"class":714},[478,65033,65034],{"class":480,"line":33013},[478,65035,65036],{"class":770},"      \u002F\u002F console.log(as[i])\n",[478,65038,65039],{"class":480,"line":33019},[478,65040,65041],{"class":770},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[478,65043,65044,65047,65049,65051,65054,65056,65058],{"class":480,"line":33025},[478,65045,65046],{"class":714},"      as[i].",[478,65048,58193],{"class":484},[478,65050,263],{"class":714},[478,65052,65053],{"class":488},"'mouseenter'",[478,65055,13001],{"class":714},[478,65057,54829],{"class":710},[478,65059,54832],{"class":714},[478,65061,65062],{"class":480,"line":33031},[478,65063,65064],{"class":770},"        \u002F\u002F console.log('鼠标经过')\n",[478,65066,65067],{"class":480,"line":33037},[478,65068,65069],{"class":770},"        \u002F\u002F 排他思想  \n",[478,65071,65072],{"class":480,"line":33048},[478,65073,65074],{"class":770},"        \u002F\u002F 干掉别人 移除类active\n",[478,65076,65077,65079,65081,65083,65086,65088,65090,65092,65095],{"class":480,"line":33054},[478,65078,52305],{"class":714},[478,65080,54779],{"class":484},[478,65082,263],{"class":714},[478,65084,65085],{"class":488},"'.tab-nav .active'",[478,65087,57383],{"class":714},[478,65089,57386],{"class":484},[478,65091,263],{"class":714},[478,65093,65094],{"class":488},"'active'",[478,65096,720],{"class":714},[478,65098,65099],{"class":480,"line":33074},[478,65100,65101],{"class":770},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[478,65103,65104,65107,65110,65112,65114,65116],{"class":480,"line":33080},[478,65105,65106],{"class":495},"        this",[478,65108,65109],{"class":714},".classList.",[478,65111,5900],{"class":484},[478,65113,263],{"class":714},[478,65115,65094],{"class":488},[478,65117,720],{"class":714},[478,65119,65120],{"class":480,"line":33091},[478,65121,2966],{"emptyLinePlaceholder":640},[478,65123,65124],{"class":480,"line":33097},[478,65125,65126],{"class":770},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[478,65128,65129],{"class":480,"line":33103},[478,65130,65131],{"class":770},"        \u002F\u002F 干掉别人\n",[478,65133,65134,65136,65138,65140,65143,65145,65147,65149,65151],{"class":480,"line":33109},[478,65135,52305],{"class":714},[478,65137,54779],{"class":484},[478,65139,263],{"class":714},[478,65141,65142],{"class":488},"'.tab-content .active'",[478,65144,57383],{"class":714},[478,65146,57386],{"class":484},[478,65148,263],{"class":714},[478,65150,65094],{"class":488},[478,65152,720],{"class":714},[478,65154,65155],{"class":480,"line":33115},[478,65156,65157],{"class":770},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[478,65159,65160,65162,65164,65166,65169,65171,65173,65175,65177,65179,65181,65183,65185],{"class":480,"line":33121},[478,65161,52305],{"class":714},[478,65163,54779],{"class":484},[478,65165,263],{"class":714},[478,65167,65168],{"class":488},"`.tab-content .item:nth-child(${",[478,65170,1141],{"class":714},[478,65172,45946],{"class":710},[478,65174,25498],{"class":495},[478,65176,57412],{"class":488},[478,65178,57383],{"class":714},[478,65180,5900],{"class":484},[478,65182,263],{"class":714},[478,65184,65094],{"class":488},[478,65186,720],{"class":714},[478,65188,65189],{"class":480,"line":33127},[478,65190,2966],{"emptyLinePlaceholder":640},[478,65192,65193],{"class":480,"line":33133},[478,65194,65195],{"class":714},"      })\n",[478,65197,65198],{"class":480,"line":33153},[478,65199,2753],{"class":714},[478,65201,65202,65204,65206],{"class":480,"line":33159},[478,65203,52797],{"class":714},[478,65205,52193],{"class":51680},[478,65207,51687],{"class":714},[478,65209,65210,65212,65214],{"class":480,"line":33175},[478,65211,52165],{"class":714},[478,65213,52180],{"class":51680},[478,65215,51687],{"class":714},[478,65217,65218],{"class":480,"line":33181},[478,65219,2966],{"emptyLinePlaceholder":640},[478,65221,65222,65224,65226],{"class":480,"line":33195},[478,65223,52165],{"class":714},[478,65225,51015],{"class":51680},[478,65227,51687],{"class":714},[19,65229,65230],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65232,65233],{},"在监听事件中，this指向的就是他的调用者",[19,65235,65236],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65238,54100],{},[19,65240,65241],{},"(function () {",[19,65243,65244],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65246,65247],{},"list.addEventListener('click', function (e) {",[19,65249,65250],{},"if (e.target.tagName === 'A') {",[19,65252,65253],{},"\u002F\u002F 排他思想",[19,65255,65256],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65258,65259],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65261,65262],{},"\u002F\u002F console.log(old);",[19,65264,65265],{},"\u002F\u002F 判断",[19,65267,65268],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65270,65271],{},"if (old) old.classList.remove('active')",[19,65273,65274],{},"e.target.classList.add('active')",[19,65276,1641],{},[19,65278,52844],{},[19,65280,65281],{},"})();",[129,65283,65285],{"id":65284},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[469,65287,65289],{"className":51013,"code":65288,"language":51015,"meta":54,"style":54},"\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",[475,65290,65291,65301,65305,65313,65317,65331,65345,65357,65365,65371,65381,65391,65395,65399,65406,65418,65429,65446,65459,65473,65483,65487,65491,65498,65509,65527,65537,65549,65553,65557,65564,65581,65592,65604,65608,65612,65619,65631,65635,65643,65651,65655,65663,65671,65679,65694,65738,65746,65759,65772,65785,65793,65801,65809,65837,65845,65857,65870,65883,65891,65899,65907,65933,65941,65954,65966,65979,65987,65995,66003,66029,66037,66050,66062,66075,66083,66091,66099,66104,66124,66129,66149,66154,66171,66176,66184,66189,66218,66231,66235,66239,66244,66248,66276,66281,66298,66303,66308,66313,66318,66344,66348,66352,66360,66368,66372],{"__ignoreMap":54},[478,65292,65293,65295,65297,65299],{"class":480,"line":481},[478,65294,51677],{"class":714},[478,65296,51681],{"class":51680},[478,65298,51684],{"class":484},[478,65300,51687],{"class":714},[478,65302,65303],{"class":480,"line":565},[478,65304,2966],{"emptyLinePlaceholder":640},[478,65306,65307,65309,65311],{"class":480,"line":579},[478,65308,1605],{"class":714},[478,65310,51015],{"class":51680},[478,65312,51687],{"class":714},[478,65314,65315],{"class":480,"line":593},[478,65316,2966],{"emptyLinePlaceholder":640},[478,65318,65319,65321,65323,65325,65327,65329],{"class":480,"line":1769},[478,65320,1605],{"class":714},[478,65322,51714],{"class":51680},[478,65324,51696],{"class":484},[478,65326,759],{"class":714},[478,65328,51701],{"class":488},[478,65330,51687],{"class":714},[478,65332,65333,65335,65337,65339,65341,65343],{"class":480,"line":1783},[478,65334,52524],{"class":714},[478,65336,51724],{"class":51680},[478,65338,51727],{"class":484},[478,65340,759],{"class":714},[478,65342,51732],{"class":488},[478,65344,51687],{"class":714},[478,65346,65347,65349,65351,65353,65355],{"class":480,"line":1789},[478,65348,52524],{"class":714},[478,65350,51787],{"class":51680},[478,65352,55694],{"class":714},[478,65354,51787],{"class":51680},[478,65356,51687],{"class":714},[478,65358,65359,65361,65363],{"class":480,"line":1880},[478,65360,52524],{"class":714},[478,65362,617],{"class":51680},[478,65364,51687],{"class":714},[478,65366,65367,65369],{"class":480,"line":1886},[478,65368,6969],{"class":51680},[478,65370,16137],{"class":714},[478,65372,65373,65375,65377,65379],{"class":480,"line":1898},[478,65374,55086],{"class":495},[478,65376,51817],{"class":714},[478,65378,895],{"class":495},[478,65380,1859],{"class":714},[478,65382,65383,65385,65387,65389],{"class":480,"line":2180},[478,65384,55075],{"class":495},[478,65386,51817],{"class":714},[478,65388,895],{"class":495},[478,65390,1859],{"class":714},[478,65392,65393],{"class":480,"line":2185},[478,65394,2753],{"class":714},[478,65396,65397],{"class":480,"line":2191},[478,65398,2966],{"emptyLinePlaceholder":640},[478,65400,65401,65404],{"class":480,"line":2196},[478,65402,65403],{"class":51680},"    table",[478,65405,16137],{"class":714},[478,65407,65408,65411,65413,65416],{"class":480,"line":2210},[478,65409,65410],{"class":495},"      border-collapse",[478,65412,51817],{"class":714},[478,65414,65415],{"class":495},"collapse",[478,65417,1859],{"class":714},[478,65419,65420,65423,65425,65427],{"class":480,"line":2215},[478,65421,65422],{"class":495},"      border-spacing",[478,65424,51817],{"class":714},[478,65426,895],{"class":495},[478,65428,1859],{"class":714},[478,65430,65431,65433,65435,65437,65439,65441,65444],{"class":480,"line":2221},[478,65432,62357],{"class":495},[478,65434,51817],{"class":714},[478,65436,193],{"class":495},[478,65438,51872],{"class":710},[478,65440,51901],{"class":495},[478,65442,65443],{"class":495}," #c0c0c0",[478,65445,1859],{"class":714},[478,65447,65448,65450,65452,65455,65457],{"class":480,"line":2241},[478,65449,55151],{"class":495},[478,65451,51817],{"class":714},[478,65453,65454],{"class":495},"500",[478,65456,51872],{"class":710},[478,65458,1859],{"class":714},[478,65460,65461,65463,65465,65467,65469,65471],{"class":480,"line":2246},[478,65462,55086],{"class":495},[478,65464,51817],{"class":714},[478,65466,1012],{"class":495},[478,65468,51872],{"class":710},[478,65470,51936],{"class":495},[478,65472,1859],{"class":714},[478,65474,65475,65477,65479,65481],{"class":480,"line":2260},[478,65476,57666],{"class":495},[478,65478,51817],{"class":714},[478,65480,51972],{"class":495},[478,65482,1859],{"class":714},[478,65484,65485],{"class":480,"line":2265},[478,65486,2753],{"class":714},[478,65488,65489],{"class":480,"line":2294},[478,65490,2966],{"emptyLinePlaceholder":640},[478,65492,65493,65496],{"class":480,"line":2299},[478,65494,65495],{"class":51680},"    th",[478,65497,16137],{"class":714},[478,65499,65500,65502,65504,65507],{"class":480,"line":2316},[478,65501,55264],{"class":495},[478,65503,51817],{"class":714},[478,65505,65506],{"class":495},"#09c",[478,65508,1859],{"class":714},[478,65510,65511,65514,65516,65518,65520,65522,65525],{"class":480,"line":2321},[478,65512,65513],{"class":495},"      font",[478,65515,51817],{"class":714},[478,65517,62719],{"class":495},[478,65519,64453],{"class":495},[478,65521,51872],{"class":710},[478,65523,65524],{"class":488}," \"微软雅黑\"",[478,65526,1859],{"class":714},[478,65528,65529,65531,65533,65535],{"class":480,"line":2326},[478,65530,57796],{"class":495},[478,65532,51817],{"class":714},[478,65534,61222],{"class":495},[478,65536,1859],{"class":714},[478,65538,65539,65541,65543,65545,65547],{"class":480,"line":2331},[478,65540,55165],{"class":495},[478,65542,51817],{"class":714},[478,65544,1495],{"class":495},[478,65546,51872],{"class":710},[478,65548,1859],{"class":714},[478,65550,65551],{"class":480,"line":2345},[478,65552,2753],{"class":714},[478,65554,65555],{"class":480,"line":2350},[478,65556,2966],{"emptyLinePlaceholder":640},[478,65558,65559,65562],{"class":480,"line":3143},[478,65560,65561],{"class":51680},"    td",[478,65563,16137],{"class":714},[478,65565,65566,65568,65570,65572,65574,65576,65579],{"class":480,"line":3157},[478,65567,62357],{"class":495},[478,65569,51817],{"class":714},[478,65571,193],{"class":495},[478,65573,51872],{"class":710},[478,65575,51901],{"class":495},[478,65577,65578],{"class":495}," #d0d0d0",[478,65580,1859],{"class":714},[478,65582,65583,65585,65587,65590],{"class":480,"line":3165},[478,65584,57796],{"class":495},[478,65586,51817],{"class":714},[478,65588,65589],{"class":495},"#404060",[478,65591,1859],{"class":714},[478,65593,65594,65596,65598,65600,65602],{"class":480,"line":3170},[478,65595,55075],{"class":495},[478,65597,51817],{"class":714},[478,65599,1146],{"class":495},[478,65601,51872],{"class":710},[478,65603,1859],{"class":714},[478,65605,65606],{"class":480,"line":3176},[478,65607,2753],{"class":714},[478,65609,65610],{"class":480,"line":3182},[478,65611,2966],{"emptyLinePlaceholder":640},[478,65613,65614,65617],{"class":480,"line":3187},[478,65615,65616],{"class":484},"    .allCheck",[478,65618,16137],{"class":714},[478,65620,65621,65623,65625,65627,65629],{"class":480,"line":8514},[478,65622,55151],{"class":495},[478,65624,51817],{"class":714},[478,65626,1310],{"class":495},[478,65628,51872],{"class":710},[478,65630,1859],{"class":714},[478,65632,65633],{"class":480,"line":8538},[478,65634,2753],{"class":714},[478,65636,65637,65639,65641],{"class":480,"line":8543},[478,65638,52797],{"class":714},[478,65640,617],{"class":51680},[478,65642,51687],{"class":714},[478,65644,65645,65647,65649],{"class":480,"line":8549},[478,65646,52165],{"class":714},[478,65648,51714],{"class":51680},[478,65650,51687],{"class":714},[478,65652,65653],{"class":480,"line":8576},[478,65654,2966],{"emptyLinePlaceholder":640},[478,65656,65657,65659,65661],{"class":480,"line":8581},[478,65658,1605],{"class":714},[478,65660,52180],{"class":51680},[478,65662,51687],{"class":714},[478,65664,65665,65667,65669],{"class":480,"line":8587},[478,65666,52524],{"class":714},[478,65668,371],{"class":51680},[478,65670,51687],{"class":714},[478,65672,65673,65675,65677],{"class":480,"line":8599},[478,65674,51721],{"class":714},[478,65676,377],{"class":51680},[478,65678,51687],{"class":714},[478,65680,65681,65683,65685,65687,65689,65692],{"class":480,"line":8611},[478,65682,55614],{"class":714},[478,65684,380],{"class":51680},[478,65686,53866],{"class":484},[478,65688,759],{"class":714},[478,65690,65691],{"class":488},"\"allCheck\"",[478,65693,51687],{"class":714},[478,65695,65696,65698,65700,65702,65704,65706,65708,65710,65712,65714,65716,65719,65722,65724,65726,65728,65731,65734,65736],{"class":480,"line":8623},[478,65697,55682],{"class":714},[478,65699,54201],{"class":51680},[478,65701,54204],{"class":484},[478,65703,759],{"class":714},[478,65705,54209],{"class":488},[478,65707,15485],{"class":484},[478,65709,759],{"class":714},[478,65711,8218],{"class":488},[478,65713,15524],{"class":484},[478,65715,759],{"class":714},[478,65717,65718],{"class":488},"\"checkAll\"",[478,65720,65721],{"class":714},"> \u003C",[478,65723,478],{"class":51680},[478,65725,53866],{"class":484},[478,65727,759],{"class":714},[478,65729,65730],{"class":488},"\"all\"",[478,65732,65733],{"class":714},">全选\u003C\u002F",[478,65735,478],{"class":51680},[478,65737,51687],{"class":714},[478,65739,65740,65742,65744],{"class":480,"line":10282},[478,65741,55787],{"class":714},[478,65743,380],{"class":51680},[478,65745,51687],{"class":714},[478,65747,65748,65750,65752,65755,65757],{"class":480,"line":10307},[478,65749,55614],{"class":714},[478,65751,380],{"class":51680},[478,65753,65754],{"class":714},">商品\u003C\u002F",[478,65756,380],{"class":51680},[478,65758,51687],{"class":714},[478,65760,65761,65763,65765,65768,65770],{"class":480,"line":10330},[478,65762,55614],{"class":714},[478,65764,380],{"class":51680},[478,65766,65767],{"class":714},">商家\u003C\u002F",[478,65769,380],{"class":51680},[478,65771,51687],{"class":714},[478,65773,65774,65776,65778,65781,65783],{"class":480,"line":10354},[478,65775,55614],{"class":714},[478,65777,380],{"class":51680},[478,65779,65780],{"class":714},">价格\u003C\u002F",[478,65782,380],{"class":51680},[478,65784,51687],{"class":714},[478,65786,65787,65789,65791],{"class":480,"line":10359},[478,65788,52156],{"class":714},[478,65790,377],{"class":51680},[478,65792,51687],{"class":714},[478,65794,65795,65797,65799],{"class":480,"line":10364},[478,65796,51721],{"class":714},[478,65798,377],{"class":51680},[478,65800,51687],{"class":714},[478,65802,65803,65805,65807],{"class":480,"line":10369},[478,65804,55614],{"class":714},[478,65806,393],{"class":51680},[478,65808,51687],{"class":714},[478,65810,65811,65813,65815,65817,65819,65821,65823,65825,65828,65830,65832,65835],{"class":480,"line":10378},[478,65812,55682],{"class":714},[478,65814,54201],{"class":51680},[478,65816,54204],{"class":484},[478,65818,759],{"class":714},[478,65820,54209],{"class":488},[478,65822,15485],{"class":484},[478,65824,759],{"class":714},[478,65826,65827],{"class":488},"\"check\"",[478,65829,53866],{"class":484},[478,65831,759],{"class":714},[478,65833,65834],{"class":488},"\"ck\"",[478,65836,51687],{"class":714},[478,65838,65839,65841,65843],{"class":480,"line":10383},[478,65840,55787],{"class":714},[478,65842,393],{"class":51680},[478,65844,51687],{"class":714},[478,65846,65847,65849,65851,65853,65855],{"class":480,"line":10389},[478,65848,55614],{"class":714},[478,65850,393],{"class":51680},[478,65852,61553],{"class":714},[478,65854,393],{"class":51680},[478,65856,51687],{"class":714},[478,65858,65859,65861,65863,65866,65868],{"class":480,"line":10410},[478,65860,55614],{"class":714},[478,65862,393],{"class":51680},[478,65864,65865],{"class":714},">小米\u003C\u002F",[478,65867,393],{"class":51680},[478,65869,51687],{"class":714},[478,65871,65872,65874,65876,65879,65881],{"class":480,"line":10416},[478,65873,55614],{"class":714},[478,65875,393],{"class":51680},[478,65877,65878],{"class":714},">￥1999\u003C\u002F",[478,65880,393],{"class":51680},[478,65882,51687],{"class":714},[478,65884,65885,65887,65889],{"class":480,"line":10430},[478,65886,52156],{"class":714},[478,65888,377],{"class":51680},[478,65890,51687],{"class":714},[478,65892,65893,65895,65897],{"class":480,"line":10436},[478,65894,51721],{"class":714},[478,65896,377],{"class":51680},[478,65898,51687],{"class":714},[478,65900,65901,65903,65905],{"class":480,"line":10463},[478,65902,55614],{"class":714},[478,65904,393],{"class":51680},[478,65906,51687],{"class":714},[478,65908,65909,65911,65913,65915,65917,65919,65921,65923,65925,65927,65929,65931],{"class":480,"line":10472},[478,65910,55682],{"class":714},[478,65912,54201],{"class":51680},[478,65914,54204],{"class":484},[478,65916,759],{"class":714},[478,65918,54209],{"class":488},[478,65920,15485],{"class":484},[478,65922,759],{"class":714},[478,65924,65827],{"class":488},[478,65926,53866],{"class":484},[478,65928,759],{"class":714},[478,65930,65834],{"class":488},[478,65932,51687],{"class":714},[478,65934,65935,65937,65939],{"class":480,"line":10478},[478,65936,55787],{"class":714},[478,65938,393],{"class":51680},[478,65940,51687],{"class":714},[478,65942,65943,65945,65947,65950,65952],{"class":480,"line":10486},[478,65944,55614],{"class":714},[478,65946,393],{"class":51680},[478,65948,65949],{"class":714},">小米净水器\u003C\u002F",[478,65951,393],{"class":51680},[478,65953,51687],{"class":714},[478,65955,65956,65958,65960,65962,65964],{"class":480,"line":10491},[478,65957,55614],{"class":714},[478,65959,393],{"class":51680},[478,65961,65865],{"class":714},[478,65963,393],{"class":51680},[478,65965,51687],{"class":714},[478,65967,65968,65970,65972,65975,65977],{"class":480,"line":17169},[478,65969,55614],{"class":714},[478,65971,393],{"class":51680},[478,65973,65974],{"class":714},">￥4999\u003C\u002F",[478,65976,393],{"class":51680},[478,65978,51687],{"class":714},[478,65980,65981,65983,65985],{"class":480,"line":17175},[478,65982,52156],{"class":714},[478,65984,377],{"class":51680},[478,65986,51687],{"class":714},[478,65988,65989,65991,65993],{"class":480,"line":17198},[478,65990,51721],{"class":714},[478,65992,377],{"class":51680},[478,65994,51687],{"class":714},[478,65996,65997,65999,66001],{"class":480,"line":17204},[478,65998,55614],{"class":714},[478,66000,393],{"class":51680},[478,66002,51687],{"class":714},[478,66004,66005,66007,66009,66011,66013,66015,66017,66019,66021,66023,66025,66027],{"class":480,"line":17227},[478,66006,55682],{"class":714},[478,66008,54201],{"class":51680},[478,66010,54204],{"class":484},[478,66012,759],{"class":714},[478,66014,54209],{"class":488},[478,66016,15485],{"class":484},[478,66018,759],{"class":714},[478,66020,65827],{"class":488},[478,66022,53866],{"class":484},[478,66024,759],{"class":714},[478,66026,65834],{"class":488},[478,66028,51687],{"class":714},[478,66030,66031,66033,66035],{"class":480,"line":17241},[478,66032,55787],{"class":714},[478,66034,393],{"class":51680},[478,66036,51687],{"class":714},[478,66038,66039,66041,66043,66046,66048],{"class":480,"line":17261},[478,66040,55614],{"class":714},[478,66042,393],{"class":51680},[478,66044,66045],{"class":714},">小米电视\u003C\u002F",[478,66047,393],{"class":51680},[478,66049,51687],{"class":714},[478,66051,66052,66054,66056,66058,66060],{"class":480,"line":17267},[478,66053,55614],{"class":714},[478,66055,393],{"class":51680},[478,66057,65865],{"class":714},[478,66059,393],{"class":51680},[478,66061,51687],{"class":714},[478,66063,66064,66066,66068,66071,66073],{"class":480,"line":17278},[478,66065,55614],{"class":714},[478,66067,393],{"class":51680},[478,66069,66070],{"class":714},">￥5999\u003C\u002F",[478,66072,393],{"class":51680},[478,66074,51687],{"class":714},[478,66076,66077,66079,66081],{"class":480,"line":17301},[478,66078,52156],{"class":714},[478,66080,377],{"class":51680},[478,66082,51687],{"class":714},[478,66084,66085,66087,66089],{"class":480,"line":17323},[478,66086,52797],{"class":714},[478,66088,371],{"class":51680},[478,66090,51687],{"class":714},[478,66092,66093,66095,66097],{"class":480,"line":17328},[478,66094,52524],{"class":714},[478,66096,52193],{"class":51680},[478,66098,51687],{"class":714},[478,66100,66101],{"class":480,"line":17334},[478,66102,66103],{"class":770},"    \u002F\u002F 1. 获取大复选框\n",[478,66105,66106,66108,66111,66113,66115,66117,66119,66122],{"class":480,"line":17348},[478,66107,11787],{"class":710},[478,66109,66110],{"class":495}," checkAll",[478,66112,14130],{"class":710},[478,66114,54776],{"class":714},[478,66116,54779],{"class":484},[478,66118,263],{"class":714},[478,66120,66121],{"class":488},"'#checkAll'",[478,66123,720],{"class":714},[478,66125,66126],{"class":480,"line":17361},[478,66127,66128],{"class":770},"    \u002F\u002F 2. 获取所有的小复选框\n",[478,66130,66131,66133,66136,66138,66140,66142,66144,66147],{"class":480,"line":17366},[478,66132,11787],{"class":710},[478,66134,66135],{"class":495}," cks",[478,66137,14130],{"class":710},[478,66139,54776],{"class":714},[478,66141,56061],{"class":484},[478,66143,263],{"class":714},[478,66145,66146],{"class":488},"'.ck'",[478,66148,720],{"class":714},[478,66150,66151],{"class":480,"line":17380},[478,66152,66153],{"class":770},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[478,66155,66156,66159,66161,66163,66165,66167,66169],{"class":480,"line":17385},[478,66157,66158],{"class":714},"    checkAll.",[478,66160,58193],{"class":484},[478,66162,263],{"class":714},[478,66164,58198],{"class":488},[478,66166,13001],{"class":714},[478,66168,54829],{"class":710},[478,66170,54832],{"class":714},[478,66172,66173],{"class":480,"line":17391},[478,66174,66175],{"class":770},"      \u002F\u002F 得到当前大复选框的选中状态\n",[478,66177,66178,66181],{"class":480,"line":17396},[478,66179,66180],{"class":770},"      \u002F\u002F console.log(checkAll.checked)",[478,66182,66183],{"class":770},"  \u002F\u002F 得到 是 true 或者是 false\n",[478,66185,66186],{"class":480,"line":17410},[478,66187,66188],{"class":770},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[478,66190,66191,66193,66195,66197,66199,66201,66203,66205,66207,66210,66212,66214,66216],{"class":480,"line":17415},[478,66192,52664],{"class":710},[478,66194,219],{"class":714},[478,66196,52227],{"class":710},[478,66198,10004],{"class":714},[478,66200,759],{"class":710},[478,66202,4659],{"class":495},[478,66204,10011],{"class":714},[478,66206,1605],{"class":710},[478,66208,66209],{"class":714}," cks.",[478,66211,52348],{"class":495},[478,66213,3780],{"class":714},[478,66215,2858],{"class":710},[478,66217,13008],{"class":714},[478,66219,66220,66223,66225,66228],{"class":480,"line":17420},[478,66221,66222],{"class":714},"        cks[i].checked ",[478,66224,759],{"class":710},[478,66226,66227],{"class":495}," this",[478,66229,66230],{"class":714},".checked\n",[478,66232,66233],{"class":480,"line":17434},[478,66234,52778],{"class":714},[478,66236,66237],{"class":480,"line":17446},[478,66238,33841],{"class":714},[478,66240,66241],{"class":480,"line":17451},[478,66242,66243],{"class":770},"    \u002F\u002F 5. 小复选框控制大复选框\n",[478,66245,66246],{"class":480,"line":17464},[478,66247,2966],{"emptyLinePlaceholder":640},[478,66249,66250,66252,66254,66256,66258,66260,66262,66264,66266,66268,66270,66272,66274],{"class":480,"line":17469},[478,66251,3767],{"class":710},[478,66253,219],{"class":714},[478,66255,52227],{"class":710},[478,66257,10004],{"class":714},[478,66259,759],{"class":710},[478,66261,4659],{"class":495},[478,66263,10011],{"class":714},[478,66265,1605],{"class":710},[478,66267,66209],{"class":714},[478,66269,52348],{"class":495},[478,66271,3780],{"class":714},[478,66273,2858],{"class":710},[478,66275,13008],{"class":714},[478,66277,66278],{"class":480,"line":17474},[478,66279,66280],{"class":770},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[478,66282,66283,66286,66288,66290,66292,66294,66296],{"class":480,"line":17479},[478,66284,66285],{"class":714},"      cks[i].",[478,66287,58193],{"class":484},[478,66289,263],{"class":714},[478,66291,58198],{"class":488},[478,66293,13001],{"class":714},[478,66295,54829],{"class":710},[478,66297,54832],{"class":714},[478,66299,66300],{"class":480,"line":17492},[478,66301,66302],{"class":770},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[478,66304,66305],{"class":480,"line":17497},[478,66306,66307],{"class":770},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[478,66309,66310],{"class":480,"line":33013},[478,66311,66312],{"class":770},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[478,66314,66315],{"class":480,"line":33019},[478,66316,66317],{"class":770},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[478,66319,66320,66323,66325,66327,66329,66331,66334,66336,66338,66340,66342],{"class":480,"line":33025},[478,66321,66322],{"class":714},"        checkAll.checked ",[478,66324,759],{"class":710},[478,66326,54776],{"class":714},[478,66328,56061],{"class":484},[478,66330,263],{"class":714},[478,66332,66333],{"class":488},"'.ck:checked'",[478,66335,31206],{"class":714},[478,66337,52348],{"class":495},[478,66339,58286],{"class":710},[478,66341,66209],{"class":714},[478,66343,56211],{"class":495},[478,66345,66346],{"class":480,"line":33031},[478,66347,65195],{"class":714},[478,66349,66350],{"class":480,"line":33037},[478,66351,2753],{"class":714},[478,66353,66354,66356,66358],{"class":480,"line":33048},[478,66355,52797],{"class":714},[478,66357,52193],{"class":51680},[478,66359,51687],{"class":714},[478,66361,66362,66364,66366],{"class":480,"line":33054},[478,66363,52165],{"class":714},[478,66365,52180],{"class":51680},[478,66367,51687],{"class":714},[478,66369,66370],{"class":480,"line":33074},[478,66371,2966],{"emptyLinePlaceholder":640},[478,66373,66374,66376,66378],{"class":480,"line":33080},[478,66375,52165],{"class":714},[478,66377,51015],{"class":51680},[478,66379,51687],{"class":714},[19,66381,66382],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66384,66385],{},"用好之间比较得到的布尔值！！！",[19,66387,66388,66389,66392,66393,219,66396,1284,66398,66401],{},"在 JS 里访问的时候，",[475,66390,66391],{},"checkbox.checked"," 是一个 ",[45,66394,66395],{},"布尔值",[475,66397,1931],{},[475,66399,66400],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66403,66404,66405,66408,66409],{},"HTML 的 ",[475,66406,66407],{},"checked=\"checked\""," 只是 ",[45,66410,66411,66412,66415],{},"初始值；JS 的 ",[475,66413,66414],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66417,66418],{},"：checked是一个伪类选择器",[19,66420,66421],{},[52,66422],{"alt":54,"src":66423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66425,66426,66429],{},[66427,66428],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66431,66432],{},[52,66433],{"alt":54,"src":66434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66436,66438],{"id":66437},"_33-dom事件进阶","3.3 DOM事件进阶",[129,66440,66442],{"id":66441},"_331-事件流","3.3.1 事件流",[19,66444,66445],{},[52,66446],{"alt":54,"src":66447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22563,66449,66451],{"id":66450},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66453,66454],{},[52,66455],{"alt":54,"src":66456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[469,66458,66460],{"className":51013,"code":66459,"language":51015,"meta":54,"style":54},"\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",[475,66461,66462,66472,66486,66490,66498,66512,66532,66544,66552,66559,66571,66583,66593,66597,66601,66608,66620,66632,66642,66646,66654,66662,66666,66674,66689,66708,66716,66724,66744,66764,66780,66791,66799,66816,66827,66835,66852,66863,66871,66879,66887,66891],{"__ignoreMap":54},[478,66463,66464,66466,66468,66470],{"class":480,"line":481},[478,66465,51677],{"class":714},[478,66467,51681],{"class":51680},[478,66469,51684],{"class":484},[478,66471,51687],{"class":714},[478,66473,66474,66476,66478,66480,66482,66484],{"class":480,"line":565},[478,66475,1605],{"class":714},[478,66477,51015],{"class":51680},[478,66479,51696],{"class":484},[478,66481,759],{"class":714},[478,66483,51701],{"class":488},[478,66485,51687],{"class":714},[478,66487,66488],{"class":480,"line":579},[478,66489,2966],{"emptyLinePlaceholder":640},[478,66491,66492,66494,66496],{"class":480,"line":593},[478,66493,1605],{"class":714},[478,66495,51714],{"class":51680},[478,66497,51687],{"class":714},[478,66499,66500,66502,66504,66506,66508,66510],{"class":480,"line":1769},[478,66501,52524],{"class":714},[478,66503,51724],{"class":51680},[478,66505,51727],{"class":484},[478,66507,759],{"class":714},[478,66509,51732],{"class":488},[478,66511,51687],{"class":714},[478,66513,66514,66516,66518,66520,66522,66524,66526,66528,66530],{"class":480,"line":1783},[478,66515,52524],{"class":714},[478,66517,51724],{"class":51680},[478,66519,15485],{"class":484},[478,66521,759],{"class":714},[478,66523,51771],{"class":488},[478,66525,51751],{"class":484},[478,66527,759],{"class":714},[478,66529,51778],{"class":488},[478,66531,51687],{"class":714},[478,66533,66534,66536,66538,66540,66542],{"class":480,"line":1789},[478,66535,52524],{"class":714},[478,66537,51787],{"class":51680},[478,66539,51790],{"class":714},[478,66541,51787],{"class":51680},[478,66543,51687],{"class":714},[478,66545,66546,66548,66550],{"class":480,"line":1880},[478,66547,52524],{"class":714},[478,66549,617],{"class":51680},[478,66551,51687],{"class":714},[478,66553,66554,66557],{"class":480,"line":1886},[478,66555,66556],{"class":484},"    .father",[478,66558,16137],{"class":714},[478,66560,66561,66563,66565,66567,66569],{"class":480,"line":1898},[478,66562,55151],{"class":495},[478,66564,51817],{"class":714},[478,66566,65454],{"class":495},[478,66568,51872],{"class":710},[478,66570,1859],{"class":714},[478,66572,66573,66575,66577,66579,66581],{"class":480,"line":2180},[478,66574,55165],{"class":495},[478,66576,51817],{"class":714},[478,66578,65454],{"class":495},[478,66580,51872],{"class":710},[478,66582,1859],{"class":714},[478,66584,66585,66587,66589,66591],{"class":480,"line":2185},[478,66586,55264],{"class":495},[478,66588,51817],{"class":714},[478,66590,52025],{"class":495},[478,66592,1859],{"class":714},[478,66594,66595],{"class":480,"line":2191},[478,66596,2753],{"class":714},[478,66598,66599],{"class":480,"line":2196},[478,66600,2966],{"emptyLinePlaceholder":640},[478,66602,66603,66606],{"class":480,"line":2210},[478,66604,66605],{"class":484},"    .son",[478,66607,16137],{"class":714},[478,66609,66610,66612,66614,66616,66618],{"class":480,"line":2215},[478,66611,55151],{"class":495},[478,66613,51817],{"class":714},[478,66615,2289],{"class":495},[478,66617,51872],{"class":710},[478,66619,1859],{"class":714},[478,66621,66622,66624,66626,66628,66630],{"class":480,"line":2221},[478,66623,55165],{"class":495},[478,66625,51817],{"class":714},[478,66627,2289],{"class":495},[478,66629,51872],{"class":710},[478,66631,1859],{"class":714},[478,66633,66634,66636,66638,66640],{"class":480,"line":2241},[478,66635,55264],{"class":495},[478,66637,51817],{"class":714},[478,66639,55269],{"class":495},[478,66641,1859],{"class":714},[478,66643,66644],{"class":480,"line":2246},[478,66645,2753],{"class":714},[478,66647,66648,66650,66652],{"class":480,"line":2260},[478,66649,52797],{"class":714},[478,66651,617],{"class":51680},[478,66653,51687],{"class":714},[478,66655,66656,66658,66660],{"class":480,"line":2265},[478,66657,52165],{"class":714},[478,66659,51714],{"class":51680},[478,66661,51687],{"class":714},[478,66663,66664],{"class":480,"line":2294},[478,66665,2966],{"emptyLinePlaceholder":640},[478,66667,66668,66670,66672],{"class":480,"line":2299},[478,66669,1605],{"class":714},[478,66671,52180],{"class":51680},[478,66673,51687],{"class":714},[478,66675,66676,66678,66680,66682,66684,66687],{"class":480,"line":2316},[478,66677,52524],{"class":714},[478,66679,51991],{"class":51680},[478,66681,53866],{"class":484},[478,66683,759],{"class":714},[478,66685,66686],{"class":488},"\"father\"",[478,66688,51687],{"class":714},[478,66690,66691,66693,66695,66697,66699,66702,66704,66706],{"class":480,"line":2321},[478,66692,51721],{"class":714},[478,66694,51991],{"class":51680},[478,66696,53866],{"class":484},[478,66698,759],{"class":714},[478,66700,66701],{"class":488},"\"son\"",[478,66703,55694],{"class":714},[478,66705,51991],{"class":51680},[478,66707,51687],{"class":714},[478,66709,66710,66712,66714],{"class":480,"line":2326},[478,66711,52797],{"class":714},[478,66713,51991],{"class":51680},[478,66715,51687],{"class":714},[478,66717,66718,66720,66722],{"class":480,"line":2331},[478,66719,52524],{"class":714},[478,66721,52193],{"class":51680},[478,66723,51687],{"class":714},[478,66725,66726,66728,66731,66733,66735,66737,66739,66742],{"class":480,"line":2345},[478,66727,11787],{"class":710},[478,66729,66730],{"class":495}," fa",[478,66732,14130],{"class":710},[478,66734,54776],{"class":714},[478,66736,54779],{"class":484},[478,66738,263],{"class":714},[478,66740,66741],{"class":488},"'.father'",[478,66743,720],{"class":714},[478,66745,66746,66748,66751,66753,66755,66757,66759,66762],{"class":480,"line":2350},[478,66747,11787],{"class":710},[478,66749,66750],{"class":495}," son",[478,66752,14130],{"class":710},[478,66754,54776],{"class":714},[478,66756,54779],{"class":484},[478,66758,263],{"class":714},[478,66760,66761],{"class":488},"'.son'",[478,66763,720],{"class":714},[478,66765,66766,66768,66770,66772,66774,66776,66778],{"class":480,"line":3143},[478,66767,52787],{"class":714},[478,66769,58193],{"class":484},[478,66771,263],{"class":714},[478,66773,58198],{"class":488},[478,66775,13001],{"class":714},[478,66777,54829],{"class":710},[478,66779,54832],{"class":714},[478,66781,66782,66784,66786,66789],{"class":480,"line":3157},[478,66783,59305],{"class":484},[478,66785,263],{"class":714},[478,66787,66788],{"class":488},"'woshiu1'",[478,66790,720],{"class":714},[478,66792,66793,66795,66797],{"class":480,"line":3165},[478,66794,54915],{"class":714},[478,66796,1931],{"class":495},[478,66798,720],{"class":714},[478,66800,66801,66804,66806,66808,66810,66812,66814],{"class":480,"line":3170},[478,66802,66803],{"class":714},"    fa.",[478,66805,58193],{"class":484},[478,66807,263],{"class":714},[478,66809,58198],{"class":488},[478,66811,13001],{"class":714},[478,66813,54829],{"class":710},[478,66815,54832],{"class":714},[478,66817,66818,66820,66822,66825],{"class":480,"line":3176},[478,66819,59305],{"class":484},[478,66821,263],{"class":714},[478,66823,66824],{"class":488},"'1'",[478,66826,720],{"class":714},[478,66828,66829,66831,66833],{"class":480,"line":3182},[478,66830,54915],{"class":714},[478,66832,1931],{"class":495},[478,66834,720],{"class":714},[478,66836,66837,66840,66842,66844,66846,66848,66850],{"class":480,"line":3187},[478,66838,66839],{"class":714},"    son.",[478,66841,58193],{"class":484},[478,66843,263],{"class":714},[478,66845,58198],{"class":488},[478,66847,13001],{"class":714},[478,66849,54829],{"class":710},[478,66851,54832],{"class":714},[478,66853,66854,66856,66858,66861],{"class":480,"line":8514},[478,66855,59305],{"class":484},[478,66857,263],{"class":714},[478,66859,66860],{"class":488},"'2'",[478,66862,720],{"class":714},[478,66864,66865,66867,66869],{"class":480,"line":8538},[478,66866,54915],{"class":714},[478,66868,1931],{"class":495},[478,66870,720],{"class":714},[478,66872,66873,66875,66877],{"class":480,"line":8543},[478,66874,52797],{"class":714},[478,66876,52193],{"class":51680},[478,66878,51687],{"class":714},[478,66880,66881,66883,66885],{"class":480,"line":8549},[478,66882,52165],{"class":714},[478,66884,52180],{"class":51680},[478,66886,51687],{"class":714},[478,66888,66889],{"class":480,"line":8576},[478,66890,2966],{"emptyLinePlaceholder":640},[478,66892,66893,66895,66897],{"class":480,"line":8581},[478,66894,52165],{"class":714},[478,66896,51015],{"class":51680},[478,66898,51687],{"class":714},[19,66900,66901],{},[52,66902],{"alt":54,"src":66903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66905,66906],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22563,66908,66910],{"id":66909},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66912,66913],{},[52,66914],{"alt":54,"src":66915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66917,66918],{},"反着来",[19,66920,66921],{},"注意是同名事件，比如都是‘click’",[22563,66923,66925],{"id":66924},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66927,66928],{},[52,66929],{"alt":54,"src":66930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22563,66932,66934],{"id":66933},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66936,66937],{},[52,66938],{"alt":54,"src":66939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66941,66942],{},[52,66943],{"alt":54,"src":66944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22563,66946,66948],{"id":66947},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[29,66950,66951],{},[32,66952,66953],{},"事件类型的区别",[19,66955,66956],{},[52,66957],{"alt":54,"src":66958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66960,66961],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[29,66963,66964],{"start":565},[32,66965,66966],{},"注册事件的区别",[19,66968,66969],{},[52,66970],{"alt":54,"src":66971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22563,66973,66975],{"id":66974},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66977,66978],{},[52,66979],{"alt":54,"src":66980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66982,66983],{},[52,66984],{"alt":54,"src":66985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[469,66987,66989],{"className":53447,"code":66988,"language":53449,"meta":54,"style":54},"\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",[475,66990,66991,66999,67016,67039,67047,67052,67057,67062,67066,67074,67082],{"__ignoreMap":54},[478,66992,66993,66995,66997],{"class":480,"line":481},[478,66994,1605],{"class":714},[478,66996,52180],{"class":51680},[478,66998,51687],{"class":714},[478,67000,67001,67003,67006,67009,67011,67014],{"class":480,"line":565},[478,67002,52524],{"class":714},[478,67004,67005],{"class":51680},"form",[478,67007,67008],{"class":484}," action",[478,67010,759],{"class":714},[478,67012,67013],{"class":488},"\"http:\u002F\u002Fwww.itcast.cn\"",[478,67015,51687],{"class":714},[478,67017,67018,67020,67022,67024,67026,67029,67032,67034,67037],{"class":480,"line":579},[478,67019,51721],{"class":714},[478,67021,54201],{"class":51680},[478,67023,54204],{"class":484},[478,67025,759],{"class":714},[478,67027,67028],{"class":488},"\"submit\"",[478,67030,67031],{"class":484}," value",[478,67033,759],{"class":714},[478,67035,67036],{"class":488},"\"免费注册\"",[478,67038,51687],{"class":714},[478,67040,67041,67043,67045],{"class":480,"line":593},[478,67042,51721],{"class":714},[478,67044,52193],{"class":51680},[478,67046,51687],{"class":714},[478,67048,67049],{"class":480,"line":1769},[478,67050,67051],{"class":714},"      const form = document.querySelector('form')\n",[478,67053,67054],{"class":480,"line":1783},[478,67055,67056],{"class":714},"      form.addEventListener('submit', function (e) {\n",[478,67058,67059],{"class":480,"line":1789},[478,67060,67061],{"class":714},"        e.preventDefault()\n",[478,67063,67064],{"class":480,"line":1880},[478,67065,65195],{"class":714},[478,67067,67068,67070,67072],{"class":480,"line":1886},[478,67069,52156],{"class":714},[478,67071,52193],{"class":51680},[478,67073,51687],{"class":714},[478,67075,67076,67078,67080],{"class":480,"line":1898},[478,67077,52797],{"class":714},[478,67079,67005],{"class":51680},[478,67081,51687],{"class":714},[478,67083,67084,67086,67088],{"class":480,"line":2180},[478,67085,52165],{"class":714},[478,67087,52180],{"class":51680},[478,67089,51687],{"class":714},[19,67091,67092],{},"点击不在跳转！！！",[129,67094,67096],{"id":67095},"_332-事件委托","3.3.2 事件委托",[19,67098,67099],{},[52,67100],{"alt":54,"src":67101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[469,67103,67105],{"className":51013,"code":67104,"language":51015,"meta":54,"style":54},"\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",[475,67106,67107,67117,67131,67135,67143,67157,67177,67189,67197,67201,67209,67217,67229,67241,67253,67265,67277,67290,67298,67306,67311,67330,67351,67356,67361,67366,67371,67380,67384,67394,67398,67403,67408,67422,67432,67436,67440,67448,67456,67460],{"__ignoreMap":54},[478,67108,67109,67111,67113,67115],{"class":480,"line":481},[478,67110,51677],{"class":714},[478,67112,51681],{"class":51680},[478,67114,51684],{"class":484},[478,67116,51687],{"class":714},[478,67118,67119,67121,67123,67125,67127,67129],{"class":480,"line":565},[478,67120,1605],{"class":714},[478,67122,51015],{"class":51680},[478,67124,51696],{"class":484},[478,67126,759],{"class":714},[478,67128,51701],{"class":488},[478,67130,51687],{"class":714},[478,67132,67133],{"class":480,"line":579},[478,67134,2966],{"emptyLinePlaceholder":640},[478,67136,67137,67139,67141],{"class":480,"line":593},[478,67138,1605],{"class":714},[478,67140,51714],{"class":51680},[478,67142,51687],{"class":714},[478,67144,67145,67147,67149,67151,67153,67155],{"class":480,"line":1769},[478,67146,52524],{"class":714},[478,67148,51724],{"class":51680},[478,67150,51727],{"class":484},[478,67152,759],{"class":714},[478,67154,51732],{"class":488},[478,67156,51687],{"class":714},[478,67158,67159,67161,67163,67165,67167,67169,67171,67173,67175],{"class":480,"line":1783},[478,67160,52524],{"class":714},[478,67162,51724],{"class":51680},[478,67164,15485],{"class":484},[478,67166,759],{"class":714},[478,67168,51771],{"class":488},[478,67170,51751],{"class":484},[478,67172,759],{"class":714},[478,67174,51778],{"class":488},[478,67176,51687],{"class":714},[478,67178,67179,67181,67183,67185,67187],{"class":480,"line":1789},[478,67180,52524],{"class":714},[478,67182,51787],{"class":51680},[478,67184,51790],{"class":714},[478,67186,51787],{"class":51680},[478,67188,51687],{"class":714},[478,67190,67191,67193,67195],{"class":480,"line":1880},[478,67192,52165],{"class":714},[478,67194,51714],{"class":51680},[478,67196,51687],{"class":714},[478,67198,67199],{"class":480,"line":1886},[478,67200,2966],{"emptyLinePlaceholder":640},[478,67202,67203,67205,67207],{"class":480,"line":1898},[478,67204,1605],{"class":714},[478,67206,52180],{"class":51680},[478,67208,51687],{"class":714},[478,67210,67211,67213,67215],{"class":480,"line":2180},[478,67212,52524],{"class":714},[478,67214,1702],{"class":51680},[478,67216,51687],{"class":714},[478,67218,67219,67221,67223,67225,67227],{"class":480,"line":2185},[478,67220,51721],{"class":714},[478,67222,32],{"class":51680},[478,67224,54346],{"class":714},[478,67226,32],{"class":51680},[478,67228,51687],{"class":714},[478,67230,67231,67233,67235,67237,67239],{"class":480,"line":2191},[478,67232,51721],{"class":714},[478,67234,32],{"class":51680},[478,67236,54365],{"class":714},[478,67238,32],{"class":51680},[478,67240,51687],{"class":714},[478,67242,67243,67245,67247,67249,67251],{"class":480,"line":2196},[478,67244,51721],{"class":714},[478,67246,32],{"class":51680},[478,67248,54384],{"class":714},[478,67250,32],{"class":51680},[478,67252,51687],{"class":714},[478,67254,67255,67257,67259,67261,67263],{"class":480,"line":2210},[478,67256,51721],{"class":714},[478,67258,32],{"class":51680},[478,67260,54403],{"class":714},[478,67262,32],{"class":51680},[478,67264,51687],{"class":714},[478,67266,67267,67269,67271,67273,67275],{"class":480,"line":2215},[478,67268,51721],{"class":714},[478,67270,32],{"class":51680},[478,67272,54422],{"class":714},[478,67274,32],{"class":51680},[478,67276,51687],{"class":714},[478,67278,67279,67281,67283,67286,67288],{"class":480,"line":2221},[478,67280,51721],{"class":714},[478,67282,19],{"class":51680},[478,67284,67285],{"class":714},">我不需要变色\u003C\u002F",[478,67287,19],{"class":51680},[478,67289,51687],{"class":714},[478,67291,67292,67294,67296],{"class":480,"line":2241},[478,67293,52797],{"class":714},[478,67295,1702],{"class":51680},[478,67297,51687],{"class":714},[478,67299,67300,67302,67304],{"class":480,"line":2246},[478,67301,52524],{"class":714},[478,67303,52193],{"class":51680},[478,67305,51687],{"class":714},[478,67307,67308],{"class":480,"line":2260},[478,67309,67310],{"class":770},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[478,67312,67313,67315,67317,67319,67321,67323,67325,67328],{"class":480,"line":2265},[478,67314,11787],{"class":710},[478,67316,61672],{"class":495},[478,67318,14130],{"class":710},[478,67320,54776],{"class":714},[478,67322,54779],{"class":484},[478,67324,263],{"class":714},[478,67326,67327],{"class":488},"'ul'",[478,67329,720],{"class":714},[478,67331,67332,67335,67337,67339,67341,67343,67345,67347,67349],{"class":480,"line":2294},[478,67333,67334],{"class":714},"    ul.",[478,67336,58193],{"class":484},[478,67338,263],{"class":714},[478,67340,58198],{"class":488},[478,67342,13001],{"class":714},[478,67344,54829],{"class":710},[478,67346,219],{"class":714},[478,67348,786],{"class":5782},[478,67350,13008],{"class":714},[478,67352,67353],{"class":480,"line":2299},[478,67354,67355],{"class":770},"      \u002F\u002F alert(1)\n",[478,67357,67358],{"class":480,"line":2316},[478,67359,67360],{"class":770},"      \u002F\u002F e.target就是我们点击的对象\n",[478,67362,67363],{"class":480,"line":2321},[478,67364,67365],{"class":770},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[478,67367,67368],{"class":480,"line":2326},[478,67369,67370],{"class":770},"      \u002F\u002F e.target.style.color = 'red'\n",[478,67372,67373,67375,67377],{"class":480,"line":2331},[478,67374,58624],{"class":714},[478,67376,58627],{"class":484},[478,67378,67379],{"class":714},"(e)\n",[478,67381,67382],{"class":480,"line":2345},[478,67383,2966],{"emptyLinePlaceholder":640},[478,67385,67386,67388,67391],{"class":480,"line":2350},[478,67387,58624],{"class":714},[478,67389,67390],{"class":484},"dir",[478,67392,67393],{"class":714},"(e.target)\n",[478,67395,67396],{"class":480,"line":3143},[478,67397,2966],{"emptyLinePlaceholder":640},[478,67399,67400],{"class":480,"line":3157},[478,67401,67402],{"class":770},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[478,67404,67405],{"class":480,"line":3165},[478,67406,67407],{"class":770},"      \u002F\u002F 通过tagName来进行判断\n",[478,67409,67410,67412,67415,67417,67420],{"class":480,"line":3170},[478,67411,54860],{"class":710},[478,67413,67414],{"class":714}," (e.target.tagName ",[478,67416,54866],{"class":710},[478,67418,67419],{"class":488}," 'LI'",[478,67421,13008],{"class":714},[478,67423,67424,67427,67429],{"class":480,"line":3176},[478,67425,67426],{"class":714},"        e.target.style.color ",[478,67428,759],{"class":710},[478,67430,67431],{"class":488}," 'red'\n",[478,67433,67434],{"class":480,"line":3182},[478,67435,52778],{"class":714},[478,67437,67438],{"class":480,"line":3187},[478,67439,33841],{"class":714},[478,67441,67442,67444,67446],{"class":480,"line":8514},[478,67443,52797],{"class":714},[478,67445,52193],{"class":51680},[478,67447,51687],{"class":714},[478,67449,67450,67452,67454],{"class":480,"line":8538},[478,67451,52165],{"class":714},[478,67453,52180],{"class":51680},[478,67455,51687],{"class":714},[478,67457,67458],{"class":480,"line":8543},[478,67459,2966],{"emptyLinePlaceholder":640},[478,67461,67462,67464,67466],{"class":480,"line":8549},[478,67463,52165],{"class":714},[478,67465,51015],{"class":51680},[478,67467,51687],{"class":714},[19,67469,67470],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67472,67473],{},"if(e.target.ragName==='P') {}",[19,67475,67476],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67478,67479],{},"通过事件委托的方式实现tab栏切换改造：",[19,67481,67482],{},"一定要记住自定义属性！！！！！！",[19,67484,67485],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67487,67488],{},"id是自定义的属性名",[19,67490,67491],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[469,67493,67495],{"className":51013,"code":67494,"language":51015,"meta":54,"style":54},"\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",[475,67496,67497,67507,67521,67525,67533,67547,67567,67587,67599,67607,67613,67623,67633,67637,67641,67647,67659,67671,67683,67699,67703,67707,67713,67725,67737,67749,67759,67769,67773,67777,67785,67797,67807,67819,67823,67827,67835,67845,67855,67865,67869,67873,67883,67897,67909,67913,67917,67929,67939,67955,67965,67969,67973,67987,67997,68007,68011,68015,68021,68035,68039,68043,68051,68061,68065,68069,68078,68088,68092,68100,68108,68112,68120,68134,68148,68160,68168,68207,68239,68271,68303,68335,68343,68351,68365,68399,68433,68467,68501,68535,68543,68551,68559,68564,68569,68588,68593,68613,68621,68626,68639,68660,68673,68677,68682,68687,68700,68720,68748,68752,68756,68760,68768,68776,68780],{"__ignoreMap":54},[478,67498,67499,67501,67503,67505],{"class":480,"line":481},[478,67500,51677],{"class":714},[478,67502,51681],{"class":51680},[478,67504,51684],{"class":484},[478,67506,51687],{"class":714},[478,67508,67509,67511,67513,67515,67517,67519],{"class":480,"line":565},[478,67510,1605],{"class":714},[478,67512,51015],{"class":51680},[478,67514,51696],{"class":484},[478,67516,759],{"class":714},[478,67518,51701],{"class":488},[478,67520,51687],{"class":714},[478,67522,67523],{"class":480,"line":579},[478,67524,2966],{"emptyLinePlaceholder":640},[478,67526,67527,67529,67531],{"class":480,"line":593},[478,67528,1605],{"class":714},[478,67530,51714],{"class":51680},[478,67532,51687],{"class":714},[478,67534,67535,67537,67539,67541,67543,67545],{"class":480,"line":1769},[478,67536,52524],{"class":714},[478,67538,51724],{"class":51680},[478,67540,51727],{"class":484},[478,67542,759],{"class":714},[478,67544,51732],{"class":488},[478,67546,59507],{"class":714},[478,67548,67549,67551,67553,67555,67557,67559,67561,67563,67565],{"class":480,"line":1783},[478,67550,52524],{"class":714},[478,67552,51724],{"class":51680},[478,67554,51743],{"class":484},[478,67556,759],{"class":714},[478,67558,51748],{"class":488},[478,67560,51751],{"class":484},[478,67562,759],{"class":714},[478,67564,51756],{"class":488},[478,67566,59507],{"class":714},[478,67568,67569,67571,67573,67575,67577,67579,67581,67583,67585],{"class":480,"line":1789},[478,67570,52524],{"class":714},[478,67572,51724],{"class":51680},[478,67574,15485],{"class":484},[478,67576,759],{"class":714},[478,67578,51771],{"class":488},[478,67580,51751],{"class":484},[478,67582,759],{"class":714},[478,67584,51778],{"class":488},[478,67586,59507],{"class":714},[478,67588,67589,67591,67593,67595,67597],{"class":480,"line":1880},[478,67590,52524],{"class":714},[478,67592,51787],{"class":51680},[478,67594,64005],{"class":714},[478,67596,51787],{"class":51680},[478,67598,51687],{"class":714},[478,67600,67601,67603,67605],{"class":480,"line":1886},[478,67602,52524],{"class":714},[478,67604,617],{"class":51680},[478,67606,51687],{"class":714},[478,67608,67609,67611],{"class":480,"line":1898},[478,67610,6969],{"class":51680},[478,67612,16137],{"class":714},[478,67614,67615,67617,67619,67621],{"class":480,"line":2180},[478,67616,55086],{"class":495},[478,67618,51817],{"class":714},[478,67620,895],{"class":495},[478,67622,1859],{"class":714},[478,67624,67625,67627,67629,67631],{"class":480,"line":2185},[478,67626,55075],{"class":495},[478,67628,51817],{"class":714},[478,67630,895],{"class":495},[478,67632,1859],{"class":714},[478,67634,67635],{"class":480,"line":2191},[478,67636,2753],{"class":714},[478,67638,67639],{"class":480,"line":2196},[478,67640,2966],{"emptyLinePlaceholder":640},[478,67642,67643,67645],{"class":480,"line":2210},[478,67644,64056],{"class":484},[478,67646,16137],{"class":714},[478,67648,67649,67651,67653,67655,67657],{"class":480,"line":2215},[478,67650,55151],{"class":495},[478,67652,51817],{"class":714},[478,67654,64067],{"class":495},[478,67656,51872],{"class":710},[478,67658,1859],{"class":714},[478,67660,67661,67663,67665,67667,67669],{"class":480,"line":2221},[478,67662,55165],{"class":495},[478,67664,51817],{"class":714},[478,67666,64080],{"class":495},[478,67668,51872],{"class":710},[478,67670,1859],{"class":714},[478,67672,67673,67675,67677,67679,67681],{"class":480,"line":2241},[478,67674,55086],{"class":495},[478,67676,51817],{"class":714},[478,67678,1396],{"class":495},[478,67680,51872],{"class":710},[478,67682,1859],{"class":714},[478,67684,67685,67687,67689,67691,67693,67695,67697],{"class":480,"line":2246},[478,67686,62357],{"class":495},[478,67688,51817],{"class":714},[478,67690,193],{"class":495},[478,67692,51872],{"class":710},[478,67694,51901],{"class":495},[478,67696,62624],{"class":495},[478,67698,1859],{"class":714},[478,67700,67701],{"class":480,"line":2260},[478,67702,2753],{"class":714},[478,67704,67705],{"class":480,"line":2265},[478,67706,2966],{"emptyLinePlaceholder":640},[478,67708,67709,67711],{"class":480,"line":2294},[478,67710,64125],{"class":484},[478,67712,16137],{"class":714},[478,67714,67715,67717,67719,67721,67723],{"class":480,"line":2299},[478,67716,55151],{"class":495},[478,67718,51817],{"class":714},[478,67720,1012],{"class":495},[478,67722,1029],{"class":710},[478,67724,1859],{"class":714},[478,67726,67727,67729,67731,67733,67735],{"class":480,"line":2316},[478,67728,55165],{"class":495},[478,67730,51817],{"class":714},[478,67732,1602],{"class":495},[478,67734,51872],{"class":710},[478,67736,1859],{"class":714},[478,67738,67739,67741,67743,67745,67747],{"class":480,"line":2321},[478,67740,57739],{"class":495},[478,67742,51817],{"class":714},[478,67744,1602],{"class":495},[478,67746,51872],{"class":710},[478,67748,1859],{"class":714},[478,67750,67751,67753,67755,67757],{"class":480,"line":2326},[478,67752,55389],{"class":495},[478,67754,51817],{"class":714},[478,67756,51857],{"class":495},[478,67758,1859],{"class":714},[478,67760,67761,67763,67765,67767],{"class":480,"line":2331},[478,67762,55400],{"class":495},[478,67764,51817],{"class":714},[478,67766,52048],{"class":495},[478,67768,1859],{"class":714},[478,67770,67771],{"class":480,"line":2345},[478,67772,2753],{"class":714},[478,67774,67775],{"class":480,"line":2350},[478,67776,2966],{"emptyLinePlaceholder":640},[478,67778,67779,67781,67783],{"class":480,"line":3143},[478,67780,64125],{"class":484},[478,67782,64198],{"class":51680},[478,67784,16137],{"class":714},[478,67786,67787,67789,67791,67793,67795],{"class":480,"line":3157},[478,67788,55302],{"class":495},[478,67790,51817],{"class":714},[478,67792,1495],{"class":495},[478,67794,51872],{"class":710},[478,67796,1859],{"class":714},[478,67798,67799,67801,67803,67805],{"class":480,"line":3165},[478,67800,62714],{"class":495},[478,67802,51817],{"class":714},[478,67804,64221],{"class":495},[478,67806,1859],{"class":714},[478,67808,67809,67811,67813,67815,67817],{"class":480,"line":3170},[478,67810,62380],{"class":495},[478,67812,51817],{"class":714},[478,67814,1396],{"class":495},[478,67816,51872],{"class":710},[478,67818,1859],{"class":714},[478,67820,67821],{"class":480,"line":3176},[478,67822,2753],{"class":714},[478,67824,67825],{"class":480,"line":3182},[478,67826,2966],{"emptyLinePlaceholder":640},[478,67828,67829,67831,67833],{"class":480,"line":3187},[478,67830,64125],{"class":484},[478,67832,61672],{"class":51680},[478,67834,16137],{"class":714},[478,67836,67837,67839,67841,67843],{"class":480,"line":8514},[478,67838,55112],{"class":495},[478,67840,51817],{"class":714},[478,67842,55117],{"class":495},[478,67844,1859],{"class":714},[478,67846,67847,67849,67851,67853],{"class":480,"line":8538},[478,67848,55389],{"class":495},[478,67850,51817],{"class":714},[478,67852,51857],{"class":495},[478,67854,1859],{"class":714},[478,67856,67857,67859,67861,67863],{"class":480,"line":8543},[478,67858,55400],{"class":495},[478,67860,51817],{"class":714},[478,67862,51960],{"class":495},[478,67864,1859],{"class":714},[478,67866,67867],{"class":480,"line":8549},[478,67868,2753],{"class":714},[478,67870,67871],{"class":480,"line":8576},[478,67872,2966],{"emptyLinePlaceholder":640},[478,67874,67875,67877,67879,67881],{"class":480,"line":8581},[478,67876,64125],{"class":484},[478,67878,61672],{"class":51680},[478,67880,55455],{"class":51680},[478,67882,16137],{"class":714},[478,67884,67885,67887,67889,67891,67893,67895],{"class":480,"line":8587},[478,67886,55086],{"class":495},[478,67888,51817],{"class":714},[478,67890,895],{"class":495},[478,67892,9516],{"class":495},[478,67894,51872],{"class":710},[478,67896,1859],{"class":714},[478,67898,67899,67901,67903,67905,67907],{"class":480,"line":8599},[478,67900,55302],{"class":495},[478,67902,51817],{"class":714},[478,67904,1249],{"class":495},[478,67906,51872],{"class":710},[478,67908,1859],{"class":714},[478,67910,67911],{"class":480,"line":8611},[478,67912,2753],{"class":714},[478,67914,67915],{"class":480,"line":8623},[478,67916,2966],{"emptyLinePlaceholder":640},[478,67918,67919,67921,67923,67925,67927],{"class":480,"line":10282},[478,67920,64125],{"class":484},[478,67922,61672],{"class":51680},[478,67924,55455],{"class":51680},[478,67926,1967],{"class":51680},[478,67928,16137],{"class":714},[478,67930,67931,67933,67935,67937],{"class":480,"line":10307},[478,67932,64350],{"class":495},[478,67934,51817],{"class":714},[478,67936,55117],{"class":495},[478,67938,1859],{"class":714},[478,67940,67941,67943,67945,67947,67949,67951,67953],{"class":480,"line":10330},[478,67942,62612],{"class":495},[478,67944,51817],{"class":714},[478,67946,789],{"class":495},[478,67948,51872],{"class":710},[478,67950,51901],{"class":495},[478,67952,64371],{"class":495},[478,67954,1859],{"class":714},[478,67956,67957,67959,67961,67963],{"class":480,"line":10354},[478,67958,57796],{"class":495},[478,67960,51817],{"class":714},[478,67962,62749],{"class":495},[478,67964,1859],{"class":714},[478,67966,67967],{"class":480,"line":10359},[478,67968,2753],{"class":714},[478,67970,67971],{"class":480,"line":10364},[478,67972,2966],{"emptyLinePlaceholder":640},[478,67974,67975,67977,67979,67981,67983,67985],{"class":480,"line":10369},[478,67976,64125],{"class":484},[478,67978,61672],{"class":51680},[478,67980,55455],{"class":51680},[478,67982,1967],{"class":51680},[478,67984,64404],{"class":484},[478,67986,16137],{"class":714},[478,67988,67989,67991,67993,67995],{"class":480,"line":10378},[478,67990,62171],{"class":495},[478,67992,51817],{"class":714},[478,67994,64415],{"class":495},[478,67996,1859],{"class":714},[478,67998,67999,68001,68003,68005],{"class":480,"line":10383},[478,68000,57796],{"class":495},[478,68002,51817],{"class":714},[478,68004,64415],{"class":495},[478,68006,1859],{"class":714},[478,68008,68009],{"class":480,"line":10389},[478,68010,2753],{"class":714},[478,68012,68013],{"class":480,"line":10410},[478,68014,2966],{"emptyLinePlaceholder":640},[478,68016,68017,68019],{"class":480,"line":10416},[478,68018,64440],{"class":484},[478,68020,16137],{"class":714},[478,68022,68023,68025,68027,68029,68031,68033],{"class":480,"line":10430},[478,68024,55075],{"class":495},[478,68026,51817],{"class":714},[478,68028,895],{"class":495},[478,68030,64453],{"class":495},[478,68032,51872],{"class":710},[478,68034,1859],{"class":714},[478,68036,68037],{"class":480,"line":10436},[478,68038,2753],{"class":714},[478,68040,68041],{"class":480,"line":10463},[478,68042,2966],{"emptyLinePlaceholder":640},[478,68044,68045,68047,68049],{"class":480,"line":10472},[478,68046,64440],{"class":484},[478,68048,62554],{"class":484},[478,68050,16137],{"class":714},[478,68052,68053,68055,68057,68059],{"class":480,"line":10478},[478,68054,55389],{"class":495},[478,68056,51817],{"class":714},[478,68058,55117],{"class":495},[478,68060,1859],{"class":714},[478,68062,68063],{"class":480,"line":10486},[478,68064,2753],{"class":714},[478,68066,68067],{"class":480,"line":10491},[478,68068,2966],{"emptyLinePlaceholder":640},[478,68070,68071,68073,68076],{"class":480,"line":17169},[478,68072,64440],{"class":484},[478,68074,68075],{"class":484}," .active",[478,68077,16137],{"class":714},[478,68079,68080,68082,68084,68086],{"class":480,"line":17175},[478,68081,55389],{"class":495},[478,68083,51817],{"class":714},[478,68085,61249],{"class":495},[478,68087,1859],{"class":714},[478,68089,68090],{"class":480,"line":17198},[478,68091,2753],{"class":714},[478,68093,68094,68096,68098],{"class":480,"line":17204},[478,68095,52797],{"class":714},[478,68097,617],{"class":51680},[478,68099,51687],{"class":714},[478,68101,68102,68104,68106],{"class":480,"line":17227},[478,68103,52165],{"class":714},[478,68105,51714],{"class":51680},[478,68107,51687],{"class":714},[478,68109,68110],{"class":480,"line":17241},[478,68111,2966],{"emptyLinePlaceholder":640},[478,68113,68114,68116,68118],{"class":480,"line":17261},[478,68115,1605],{"class":714},[478,68117,52180],{"class":51680},[478,68119,51687],{"class":714},[478,68121,68122,68124,68126,68128,68130,68132],{"class":480,"line":17267},[478,68123,52524],{"class":714},[478,68125,51991],{"class":51680},[478,68127,53866],{"class":484},[478,68129,759],{"class":714},[478,68131,64555],{"class":488},[478,68133,51687],{"class":714},[478,68135,68136,68138,68140,68142,68144,68146],{"class":480,"line":17278},[478,68137,51721],{"class":714},[478,68139,51991],{"class":51680},[478,68141,53866],{"class":484},[478,68143,759],{"class":714},[478,68145,64570],{"class":488},[478,68147,51687],{"class":714},[478,68149,68150,68152,68154,68156,68158],{"class":480,"line":17301},[478,68151,55614],{"class":714},[478,68153,129],{"class":51680},[478,68155,64581],{"class":714},[478,68157,129],{"class":51680},[478,68159,51687],{"class":714},[478,68161,68162,68164,68166],{"class":480,"line":17323},[478,68163,55614],{"class":714},[478,68165,1702],{"class":51680},[478,68167,51687],{"class":714},[478,68169,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192,68194,68197,68199,68201,68203,68205],{"class":480,"line":17328},[478,68171,55682],{"class":714},[478,68173,32],{"class":51680},[478,68175,61432],{"class":714},[478,68177,518],{"class":51680},[478,68179,53866],{"class":484},[478,68181,759],{"class":714},[478,68183,60086],{"class":488},[478,68185,61437],{"class":484},[478,68187,759],{"class":714},[478,68189,64616],{"class":488},[478,68191,54331],{"class":484},[478,68193,759],{"class":714},[478,68195,68196],{"class":488},"\"0\"",[478,68198,64619],{"class":714},[478,68200,518],{"class":51680},[478,68202,55694],{"class":714},[478,68204,32],{"class":51680},[478,68206,51687],{"class":714},[478,68208,68209,68211,68213,68215,68217,68219,68221,68223,68225,68227,68229,68231,68233,68235,68237],{"class":480,"line":17334},[478,68210,55682],{"class":714},[478,68212,32],{"class":51680},[478,68214,61432],{"class":714},[478,68216,518],{"class":51680},[478,68218,61437],{"class":484},[478,68220,759],{"class":714},[478,68222,64616],{"class":488},[478,68224,54331],{"class":484},[478,68226,759],{"class":714},[478,68228,4244],{"class":488},[478,68230,64646],{"class":714},[478,68232,518],{"class":51680},[478,68234,55694],{"class":714},[478,68236,32],{"class":51680},[478,68238,51687],{"class":714},[478,68240,68241,68243,68245,68247,68249,68251,68253,68255,68257,68259,68261,68263,68265,68267,68269],{"class":480,"line":17348},[478,68242,55682],{"class":714},[478,68244,32],{"class":51680},[478,68246,61432],{"class":714},[478,68248,518],{"class":51680},[478,68250,61437],{"class":484},[478,68252,759],{"class":714},[478,68254,64616],{"class":488},[478,68256,54331],{"class":484},[478,68258,759],{"class":714},[478,68260,4267],{"class":488},[478,68262,64673],{"class":714},[478,68264,518],{"class":51680},[478,68266,55694],{"class":714},[478,68268,32],{"class":51680},[478,68270,51687],{"class":714},[478,68272,68273,68275,68277,68279,68281,68283,68285,68287,68289,68291,68293,68295,68297,68299,68301],{"class":480,"line":17361},[478,68274,55682],{"class":714},[478,68276,32],{"class":51680},[478,68278,61432],{"class":714},[478,68280,518],{"class":51680},[478,68282,61437],{"class":484},[478,68284,759],{"class":714},[478,68286,64616],{"class":488},[478,68288,54331],{"class":484},[478,68290,759],{"class":714},[478,68292,4280],{"class":488},[478,68294,64700],{"class":714},[478,68296,518],{"class":51680},[478,68298,55694],{"class":714},[478,68300,32],{"class":51680},[478,68302,51687],{"class":714},[478,68304,68305,68307,68309,68311,68313,68315,68317,68319,68321,68323,68325,68327,68329,68331,68333],{"class":480,"line":17366},[478,68306,55682],{"class":714},[478,68308,32],{"class":51680},[478,68310,61432],{"class":714},[478,68312,518],{"class":51680},[478,68314,61437],{"class":484},[478,68316,759],{"class":714},[478,68318,64616],{"class":488},[478,68320,54331],{"class":484},[478,68322,759],{"class":714},[478,68324,4293],{"class":488},[478,68326,64727],{"class":714},[478,68328,518],{"class":51680},[478,68330,55694],{"class":714},[478,68332,32],{"class":51680},[478,68334,51687],{"class":714},[478,68336,68337,68339,68341],{"class":480,"line":17380},[478,68338,55787],{"class":714},[478,68340,1702],{"class":51680},[478,68342,51687],{"class":714},[478,68344,68345,68347,68349],{"class":480,"line":17385},[478,68346,52156],{"class":714},[478,68348,51991],{"class":51680},[478,68350,51687],{"class":714},[478,68352,68353,68355,68357,68359,68361,68363],{"class":480,"line":17391},[478,68354,51721],{"class":714},[478,68356,51991],{"class":51680},[478,68358,53866],{"class":484},[478,68360,759],{"class":714},[478,68362,64764],{"class":488},[478,68364,51687],{"class":714},[478,68366,68367,68369,68371,68373,68375,68377,68379,68381,68383,68385,68387,68389,68391,68393,68395,68397],{"class":480,"line":17396},[478,68368,55614],{"class":714},[478,68370,51991],{"class":51680},[478,68372,53866],{"class":484},[478,68374,759],{"class":714},[478,68376,64779],{"class":488},[478,68378,61432],{"class":714},[478,68380,52],{"class":51680},[478,68382,55619],{"class":484},[478,68384,759],{"class":714},[478,68386,64790],{"class":488},[478,68388,55627],{"class":484},[478,68390,759],{"class":714},[478,68392,8218],{"class":488},[478,68394,64799],{"class":714},[478,68396,51991],{"class":51680},[478,68398,51687],{"class":714},[478,68400,68401,68403,68405,68407,68409,68411,68413,68415,68417,68419,68421,68423,68425,68427,68429,68431],{"class":480,"line":17410},[478,68402,55614],{"class":714},[478,68404,51991],{"class":51680},[478,68406,53866],{"class":484},[478,68408,759],{"class":714},[478,68410,63003],{"class":488},[478,68412,61432],{"class":714},[478,68414,52],{"class":51680},[478,68416,55619],{"class":484},[478,68418,759],{"class":714},[478,68420,64826],{"class":488},[478,68422,55627],{"class":484},[478,68424,759],{"class":714},[478,68426,8218],{"class":488},[478,68428,64799],{"class":714},[478,68430,51991],{"class":51680},[478,68432,51687],{"class":714},[478,68434,68435,68437,68439,68441,68443,68445,68447,68449,68451,68453,68455,68457,68459,68461,68463,68465],{"class":480,"line":17415},[478,68436,55614],{"class":714},[478,68438,51991],{"class":51680},[478,68440,53866],{"class":484},[478,68442,759],{"class":714},[478,68444,63003],{"class":488},[478,68446,61432],{"class":714},[478,68448,52],{"class":51680},[478,68450,55619],{"class":484},[478,68452,759],{"class":714},[478,68454,64861],{"class":488},[478,68456,55627],{"class":484},[478,68458,759],{"class":714},[478,68460,8218],{"class":488},[478,68462,64799],{"class":714},[478,68464,51991],{"class":51680},[478,68466,51687],{"class":714},[478,68468,68469,68471,68473,68475,68477,68479,68481,68483,68485,68487,68489,68491,68493,68495,68497,68499],{"class":480,"line":17420},[478,68470,55614],{"class":714},[478,68472,51991],{"class":51680},[478,68474,53866],{"class":484},[478,68476,759],{"class":714},[478,68478,63003],{"class":488},[478,68480,61432],{"class":714},[478,68482,52],{"class":51680},[478,68484,55619],{"class":484},[478,68486,759],{"class":714},[478,68488,64896],{"class":488},[478,68490,55627],{"class":484},[478,68492,759],{"class":714},[478,68494,8218],{"class":488},[478,68496,64799],{"class":714},[478,68498,51991],{"class":51680},[478,68500,51687],{"class":714},[478,68502,68503,68505,68507,68509,68511,68513,68515,68517,68519,68521,68523,68525,68527,68529,68531,68533],{"class":480,"line":17434},[478,68504,55614],{"class":714},[478,68506,51991],{"class":51680},[478,68508,53866],{"class":484},[478,68510,759],{"class":714},[478,68512,63003],{"class":488},[478,68514,61432],{"class":714},[478,68516,52],{"class":51680},[478,68518,55619],{"class":484},[478,68520,759],{"class":714},[478,68522,64931],{"class":488},[478,68524,55627],{"class":484},[478,68526,759],{"class":714},[478,68528,8218],{"class":488},[478,68530,64799],{"class":714},[478,68532,51991],{"class":51680},[478,68534,51687],{"class":714},[478,68536,68537,68539,68541],{"class":480,"line":17446},[478,68538,52156],{"class":714},[478,68540,51991],{"class":51680},[478,68542,51687],{"class":714},[478,68544,68545,68547,68549],{"class":480,"line":17451},[478,68546,52797],{"class":714},[478,68548,51991],{"class":51680},[478,68550,51687],{"class":714},[478,68552,68553,68555,68557],{"class":480,"line":17464},[478,68554,52524],{"class":714},[478,68556,52193],{"class":51680},[478,68558,51687],{"class":714},[478,68560,68561],{"class":480,"line":17469},[478,68562,68563],{"class":770},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[478,68565,68566],{"class":480,"line":17474},[478,68567,68568],{"class":770},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[478,68570,68571,68573,68575,68577,68579,68581,68583,68586],{"class":480,"line":17479},[478,68572,11787],{"class":710},[478,68574,61672],{"class":495},[478,68576,14130],{"class":710},[478,68578,54776],{"class":714},[478,68580,54779],{"class":484},[478,68582,263],{"class":714},[478,68584,68585],{"class":488},"'.tab-nav ul'",[478,68587,720],{"class":714},[478,68589,68590],{"class":480,"line":17492},[478,68591,68592],{"class":770},"    \u002F\u002F 2.添加事件\n",[478,68594,68595,68597,68599,68601,68603,68605,68607,68609,68611],{"class":480,"line":17497},[478,68596,67334],{"class":714},[478,68598,58193],{"class":484},[478,68600,263],{"class":714},[478,68602,58198],{"class":488},[478,68604,13001],{"class":714},[478,68606,54829],{"class":710},[478,68608,219],{"class":714},[478,68610,786],{"class":5782},[478,68612,13008],{"class":714},[478,68614,68615,68617,68619],{"class":480,"line":33013},[478,68616,58624],{"class":714},[478,68618,67390],{"class":484},[478,68620,67393],{"class":714},[478,68622,68623],{"class":480,"line":33019},[478,68624,68625],{"class":770},"      \u002F\u002Fe.targer是我们点击的对象\n",[478,68627,68628,68630,68632,68634,68637],{"class":480,"line":33025},[478,68629,54860],{"class":710},[478,68631,67414],{"class":714},[478,68633,54866],{"class":710},[478,68635,68636],{"class":488}," 'A'",[478,68638,13008],{"class":714},[478,68640,68641,68643,68645,68647,68650,68652,68654,68656,68658],{"class":480,"line":33031},[478,68642,52305],{"class":714},[478,68644,54779],{"class":484},[478,68646,263],{"class":714},[478,68648,68649],{"class":488},"'.active'",[478,68651,57383],{"class":714},[478,68653,57386],{"class":484},[478,68655,263],{"class":714},[478,68657,65094],{"class":488},[478,68659,720],{"class":714},[478,68661,68662,68665,68667,68669,68671],{"class":480,"line":33037},[478,68663,68664],{"class":714},"        e.target.classList.",[478,68666,5900],{"class":484},[478,68668,263],{"class":714},[478,68670,65094],{"class":488},[478,68672,720],{"class":714},[478,68674,68675],{"class":480,"line":33048},[478,68676,2966],{"emptyLinePlaceholder":640},[478,68678,68679],{"class":480,"line":33054},[478,68680,68681],{"class":770},"        \u002F\u002F 下面大盒子模块\n",[478,68683,68684],{"class":480,"line":33074},[478,68685,68686],{"class":770},"        \u002F\u002F console.log(e.target.dataset.id)\n",[478,68688,68689,68691,68693,68695,68697],{"class":480,"line":33080},[478,68690,61650],{"class":710},[478,68692,3598],{"class":495},[478,68694,14130],{"class":710},[478,68696,45946],{"class":710},[478,68698,68699],{"class":714},"e.target.dataset.id\n",[478,68701,68702,68704,68706,68708,68710,68712,68714,68716,68718],{"class":480,"line":33091},[478,68703,52305],{"class":714},[478,68705,54779],{"class":484},[478,68707,263],{"class":714},[478,68709,65142],{"class":488},[478,68711,57383],{"class":714},[478,68713,57386],{"class":484},[478,68715,263],{"class":714},[478,68717,65094],{"class":488},[478,68719,720],{"class":714},[478,68721,68722,68724,68726,68728,68730,68732,68734,68736,68738,68740,68742,68744,68746],{"class":480,"line":33097},[478,68723,52305],{"class":714},[478,68725,54779],{"class":484},[478,68727,263],{"class":714},[478,68729,65168],{"class":488},[478,68731,1141],{"class":714},[478,68733,45946],{"class":710},[478,68735,25498],{"class":495},[478,68737,57412],{"class":488},[478,68739,57383],{"class":714},[478,68741,5900],{"class":484},[478,68743,263],{"class":714},[478,68745,65094],{"class":488},[478,68747,720],{"class":714},[478,68749,68750],{"class":480,"line":33103},[478,68751,2966],{"emptyLinePlaceholder":640},[478,68753,68754],{"class":480,"line":33109},[478,68755,52778],{"class":714},[478,68757,68758],{"class":480,"line":33115},[478,68759,33841],{"class":714},[478,68761,68762,68764,68766],{"class":480,"line":33121},[478,68763,52797],{"class":714},[478,68765,52193],{"class":51680},[478,68767,51687],{"class":714},[478,68769,68770,68772,68774],{"class":480,"line":33127},[478,68771,52165],{"class":714},[478,68773,52180],{"class":51680},[478,68775,51687],{"class":714},[478,68777,68778],{"class":480,"line":33133},[478,68779,2966],{"emptyLinePlaceholder":640},[478,68781,68782,68784,68786],{"class":480,"line":33153},[478,68783,52165],{"class":714},[478,68785,51015],{"class":51680},[478,68787,51687],{"class":714},[129,68789,68791],{"id":68790},"_333-页面加载事件","3.3.3 页面加载事件",[29,68793,68794],{},[32,68795,68796],{},"load",[19,68798,68799],{},[52,68800],{"alt":54,"src":68801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68803,68804],{},"window代表整个窗口，比document还要大",[19,68806,68807],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68809,68810],{},"img.addEventListener('load', function () {",[19,68812,68813],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68815,52844],{},[29,68817,68818],{"start":565},[32,68819,68820],{},"DOMContentLoaded",[19,68822,68823],{},[52,68824],{"alt":54,"src":68825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68827,68828],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[129,68830,68832],{"id":68831},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68834,68835],{},[52,68836],{"alt":54,"src":68837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68839,68840],{},[52,68841],{"alt":54,"src":68842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68844,68845],{},[52,68846],{"alt":54,"src":68847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68849,68850],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68852,68853],{},"获得的是数字型数据，不带单位",[19,68855,68856],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68858,68859],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68861,68862],{},"它是通过document.documentElement来获取",[19,68864,68865],{},[52,68866],{"alt":54,"src":68867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68869,68870],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[129,68872,68874],{"id":68873},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68876,68877],{},[52,68878],{"alt":54,"src":68879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68881,68882],{},[52,68883],{"alt":54,"src":68884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[129,68886,68888],{"id":68887},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68890,68891],{},[52,68892],{"alt":54,"src":68893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68895,68896],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68898,68899],{},[52,68900],{"alt":54,"src":68901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68903,68904],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68906,68907],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68909,68910],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68912,68913],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68915,68916],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68918,68919],{},[52,68920],{"alt":54,"src":68921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68923,68924],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68926,68927],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68929,68930],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68932,68933],{},"e.pageX-box.getBoundingClientRect()",[129,68935,68937],{"id":68936},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68939,68940],{},[52,68941],{"alt":54,"src":68942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68944,68945],{},"这个是相对于视口来说的，它是个方法，不是属性值",[129,68947,68949],{"id":68948},"_338-总结","3.3.8 总结",[19,68951,68952],{},[52,68953],{"alt":54,"src":68954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68956,68957],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68959,68960],{},"修改盒子的宽高只能通过width和height来实现",[129,68962,68964],{"id":68963},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[469,68966,68968],{"className":51013,"code":68967,"language":51015,"meta":54,"style":54},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[475,68969,68970,68975,68980,68985,68990],{"__ignoreMap":54},[478,68971,68972],{"class":480,"line":481},[478,68973,68974],{"class":714},"\u002F* 页面滑动 *\u002F\n",[478,68976,68977],{"class":480,"line":565},[478,68978,68979],{"class":714},"html {\n",[478,68981,68982],{"class":480,"line":579},[478,68983,68984],{"class":714},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[478,68986,68987],{"class":480,"line":593},[478,68988,68989],{"class":714},"  scroll-behavior: smooth;\n",[478,68991,68992],{"class":480,"line":1769},[478,68993,2133],{"class":714},[19,68995,68996],{},"默认是auto",[129,68998,69000],{"id":68999},"_3310-日期对象","3.3.10 日期对象",[22563,69002,69004],{"id":69003},"_33101-实例化","3.3.10.1 实例化",[19,69006,69007],{},[52,69008],{"alt":54,"src":69009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22563,69011,69013],{"id":69012},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69015,69016],{},[52,69017],{"alt":54,"src":69018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69020,69021],{},"月份+1",[19,69023,69024],{},"老外认为第一天为0，星期天",[19,69026,69027],{},"方法使用的时候必须要跟括号",[19,69029,69030],{},"快速获得日期",[19,69032,69033],{},"\u002F\u002F 得到年月日",[19,69035,69036],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69038,69039],{},"\u002F\u002F 得到当地日期",[19,69041,69042],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69044,69045],{},"\u002F\u002F 得到当地时间",[19,69047,69048],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69050,69051],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69053,69054],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52193,69056,69057],{},"\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,69059,69060],{},"学会去封装函数！",[22563,69062,69064],{"id":69063},"_33103-时间戳","3.3.10.3 时间戳",[19,69066,69067],{},[52,69068],{"alt":54,"src":69069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69071,69072],{},[52,69073],{"alt":54,"src":69074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69076,69077],{},"三种方法记住一个就可以",[129,69079,69081],{"id":69080},"_3311-节点操作","3.3.11 节点操作",[22563,69083,69085],{"id":69084},"_33111-dom节点","3.3.11.1 DOM节点",[19,69087,69088],{},[52,69089],{"alt":54,"src":69090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69092,69093],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22563,69095,69097],{"id":69096},"_33112-查找节点","3.3.11.2 查找节点",[19,69099,69100],{},"前边的document.querySelector()是获取的元素",[19,69102,69103],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69105,69106],{},[52,69107],{"alt":54,"src":69108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[29,69110,69111],{},[32,69112,69113],{},"父节点",[19,69115,69116],{},[52,69117],{"alt":54,"src":69118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[29,69120,69121],{"start":565},[32,69122,69123],{},"子节点",[19,69125,69126],{},[52,69127],{"alt":54,"src":69128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69130,69131],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69133,69134],{},"children获得的是伪数组，是亲儿子",[29,69136,69137],{"start":579},[32,69138,69139],{},"兄弟节点",[19,69141,69142],{},[52,69143],{"alt":54,"src":69144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22563,69146,69148],{"id":69147},"_33113-增加节点","3.3.11.3 增加节点",[19,69150,69151],{},[52,69152],{"alt":54,"src":69153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69155,69156],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69158,69159],{},[52,69160],{"alt":54,"src":69161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69163,69164],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69166,69167],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69169,69170],{},"例：",[52193,69172,69173],{},"\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,69175,69176],{},[52,69177],{"alt":54,"src":69178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69180,69181],{},"false只克隆标签，里边的内容不会克隆过来",[469,69183,69185],{"className":51013,"code":69184,"language":51015,"meta":54,"style":54},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[475,69186,69187],{"__ignoreMap":54},[478,69188,69189],{"class":480,"line":481},[478,69190,69184],{"class":714},[22563,69192,69194],{"id":69193},"_33114-删除节点","3.3.11.4 删除节点",[19,69196,69197],{},[52,69198],{"alt":54,"src":69199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69201,69202],{},"父亲删儿子",[19,69204,69205],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[129,69207,69209],{"id":69208},"_3312-m端事件","3.3.12 M端事件",[19,69211,69212],{},"M端就是移动端",[19,69214,69215],{},[52,69216],{"alt":54,"src":69217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[129,69219,69221],{"id":69220},"_3313-插件","3.3.13 插件",[19,69223,69224],{},"要熟悉官网！！！",[19,69226,69227],{},[518,69228,69229],{"href":69229,"rel":69230},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[522],[19,69232,69233],{},[518,69234,69235],{"href":69235,"rel":69236},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[522],[129,69238,69240],{"id":69239},"_3314-学生信息表","3.3.14 学生信息表",[29,69242,69243,69246,69249,69252,69255,69258,69261,69264],{},[32,69244,69245],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[32,69247,69248],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[32,69250,69251],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[32,69253,69254],{},"用好表单元素自带的属性，value,name等",[32,69256,69257],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[32,69259,69260],{},"不要忘记事件对象",[32,69262,69263],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[32,69265,69266],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69268,69269],{},"结构：",[469,69271,69273],{"className":51013,"code":69272,"language":51015,"meta":54,"style":54},"\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",[475,69274,69275,69285,69299,69303,69311,69325,69345,69366,69379,69403,69411,69415,69423,69436,69457,69485,69513,69518,69540,69560,69579,69587,69615,69637,69657,69677,69697,69717,69737,69745,69765,69773,69777,69790,69798,69806,69814,69827,69840,69853,69866,69879,69892,69905,69913,69921,69929,69934,69939,69944,69949,69954,69959,69964,69969,69974,69979,69984,69989,69994,70002,70010,70018,70022,70042,70061,70081,70101,70121,70141,70145,70150,70170,70175,70185,70190,70195,70215,70237,70242,70252,70256,70260,70265,70270,70299,70313,70328,70332,70336,70340,70345,70356,70369,70374,70379,70384,70389,70394,70398,70403,70408,70417,70422,70427,70439,70444,70451,70455,70460,70470,70475,70485,70490,70518,70539,70549,70569,70587,70604,70621,70638,70655,70659,70669,70674,70679,70684,70695,70699,70703,70707,70712,70717,70738,70750,70755,70760,70765,70779,70784,70791,70795,70799,70807,70811,70819,70823],{"__ignoreMap":54},[478,69276,69277,69279,69281,69283],{"class":480,"line":481},[478,69278,51677],{"class":714},[478,69280,51681],{"class":51680},[478,69282,51684],{"class":484},[478,69284,51687],{"class":714},[478,69286,69287,69289,69291,69293,69295,69297],{"class":480,"line":565},[478,69288,1605],{"class":714},[478,69290,51015],{"class":51680},[478,69292,51696],{"class":484},[478,69294,759],{"class":714},[478,69296,51701],{"class":488},[478,69298,51687],{"class":714},[478,69300,69301],{"class":480,"line":579},[478,69302,2966],{"emptyLinePlaceholder":640},[478,69304,69305,69307,69309],{"class":480,"line":593},[478,69306,1605],{"class":714},[478,69308,51714],{"class":51680},[478,69310,51687],{"class":714},[478,69312,69313,69315,69317,69319,69321,69323],{"class":480,"line":1769},[478,69314,52524],{"class":714},[478,69316,51724],{"class":51680},[478,69318,51727],{"class":484},[478,69320,759],{"class":714},[478,69322,51732],{"class":488},[478,69324,59507],{"class":714},[478,69326,69327,69329,69331,69333,69335,69337,69339,69341,69343],{"class":480,"line":1783},[478,69328,52524],{"class":714},[478,69330,51724],{"class":51680},[478,69332,15485],{"class":484},[478,69334,759],{"class":714},[478,69336,51771],{"class":488},[478,69338,51751],{"class":484},[478,69340,759],{"class":714},[478,69342,51778],{"class":488},[478,69344,59507],{"class":714},[478,69346,69347,69349,69351,69353,69355,69357,69359,69361,69364],{"class":480,"line":1789},[478,69348,52524],{"class":714},[478,69350,51724],{"class":51680},[478,69352,51743],{"class":484},[478,69354,759],{"class":714},[478,69356,51748],{"class":488},[478,69358,51751],{"class":484},[478,69360,759],{"class":714},[478,69362,69363],{"class":488},"\"ie=edge\"",[478,69365,59507],{"class":714},[478,69367,69368,69370,69372,69375,69377],{"class":480,"line":1880},[478,69369,52524],{"class":714},[478,69371,51787],{"class":51680},[478,69373,69374],{"class":714},">学生信息管理\u003C\u002F",[478,69376,51787],{"class":51680},[478,69378,51687],{"class":714},[478,69380,69381,69383,69386,69389,69391,69394,69396,69398,69401],{"class":480,"line":1886},[478,69382,52524],{"class":714},[478,69384,69385],{"class":51680},"link",[478,69387,69388],{"class":484}," rel",[478,69390,759],{"class":714},[478,69392,69393],{"class":488},"\"stylesheet\"",[478,69395,61437],{"class":484},[478,69397,759],{"class":714},[478,69399,69400],{"class":488},"\"css\u002Findex.css\"",[478,69402,59507],{"class":714},[478,69404,69405,69407,69409],{"class":480,"line":1898},[478,69406,52165],{"class":714},[478,69408,51714],{"class":51680},[478,69410,51687],{"class":714},[478,69412,69413],{"class":480,"line":2180},[478,69414,2966],{"emptyLinePlaceholder":640},[478,69416,69417,69419,69421],{"class":480,"line":2185},[478,69418,1605],{"class":714},[478,69420,52180],{"class":51680},[478,69422,51687],{"class":714},[478,69424,69425,69427,69429,69432,69434],{"class":480,"line":2191},[478,69426,52524],{"class":714},[478,69428,10],{"class":51680},[478,69430,69431],{"class":714},">新增学员\u003C\u002F",[478,69433,10],{"class":51680},[478,69435,51687],{"class":714},[478,69437,69438,69440,69442,69444,69446,69448,69451,69453,69455],{"class":480,"line":2196},[478,69439,52524],{"class":714},[478,69441,67005],{"class":51680},[478,69443,53866],{"class":484},[478,69445,759],{"class":714},[478,69447,63044],{"class":488},[478,69449,69450],{"class":484}," autocomplete",[478,69452,759],{"class":714},[478,69454,32156],{"class":488},[478,69456,51687],{"class":714},[478,69458,69459,69462,69464,69466,69468,69470,69472,69474,69477,69479,69481,69483],{"class":480,"line":2210},[478,69460,69461],{"class":714},"    姓名：\u003C",[478,69463,54201],{"class":51680},[478,69465,54204],{"class":484},[478,69467,759],{"class":714},[478,69469,63079],{"class":488},[478,69471,53866],{"class":484},[478,69473,759],{"class":714},[478,69475,69476],{"class":488},"\"uname\"",[478,69478,15485],{"class":484},[478,69480,759],{"class":714},[478,69482,69476],{"class":488},[478,69484,59507],{"class":714},[478,69486,69487,69490,69492,69494,69496,69498,69500,69502,69505,69507,69509,69511],{"class":480,"line":2215},[478,69488,69489],{"class":714},"    年龄：\u003C",[478,69491,54201],{"class":51680},[478,69493,54204],{"class":484},[478,69495,759],{"class":714},[478,69497,63079],{"class":488},[478,69499,53866],{"class":484},[478,69501,759],{"class":714},[478,69503,69504],{"class":488},"\"age\"",[478,69506,15485],{"class":484},[478,69508,759],{"class":714},[478,69510,69504],{"class":488},[478,69512,59507],{"class":714},[478,69514,69515],{"class":480,"line":2221},[478,69516,69517],{"class":714},"    性别:\n",[478,69519,69520,69522,69525,69527,69529,69532,69534,69536,69538],{"class":480,"line":2241},[478,69521,51721],{"class":714},[478,69523,69524],{"class":51680},"select",[478,69526,15485],{"class":484},[478,69528,759],{"class":714},[478,69530,69531],{"class":488},"\"gender\"",[478,69533,53866],{"class":484},[478,69535,759],{"class":714},[478,69537,69531],{"class":488},[478,69539,51687],{"class":714},[478,69541,69542,69544,69547,69549,69551,69553,69556,69558],{"class":480,"line":2246},[478,69543,55614],{"class":714},[478,69545,69546],{"class":51680},"option",[478,69548,67031],{"class":484},[478,69550,759],{"class":714},[478,69552,10527],{"class":488},[478,69554,69555],{"class":714},">男\u003C\u002F",[478,69557,69546],{"class":51680},[478,69559,51687],{"class":714},[478,69561,69562,69564,69566,69568,69570,69572,69575,69577],{"class":480,"line":2260},[478,69563,55614],{"class":714},[478,69565,69546],{"class":51680},[478,69567,67031],{"class":484},[478,69569,759],{"class":714},[478,69571,10596],{"class":488},[478,69573,69574],{"class":714},">女\u003C\u002F",[478,69576,69546],{"class":51680},[478,69578,51687],{"class":714},[478,69580,69581,69583,69585],{"class":480,"line":2265},[478,69582,52156],{"class":714},[478,69584,69524],{"class":51680},[478,69586,51687],{"class":714},[478,69588,69589,69592,69594,69596,69598,69600,69602,69604,69607,69609,69611,69613],{"class":480,"line":2294},[478,69590,69591],{"class":714},"    薪资：\u003C",[478,69593,54201],{"class":51680},[478,69595,54204],{"class":484},[478,69597,759],{"class":714},[478,69599,63079],{"class":488},[478,69601,53866],{"class":484},[478,69603,759],{"class":714},[478,69605,69606],{"class":488},"\"salary\"",[478,69608,15485],{"class":484},[478,69610,759],{"class":714},[478,69612,69606],{"class":488},[478,69614,59507],{"class":714},[478,69616,69617,69620,69622,69624,69626,69629,69631,69633,69635],{"class":480,"line":2299},[478,69618,69619],{"class":714},"    就业城市：\u003C",[478,69621,69524],{"class":51680},[478,69623,15485],{"class":484},[478,69625,759],{"class":714},[478,69627,69628],{"class":488},"\"city\"",[478,69630,53866],{"class":484},[478,69632,759],{"class":714},[478,69634,69628],{"class":488},[478,69636,51687],{"class":714},[478,69638,69639,69641,69643,69645,69647,69650,69653,69655],{"class":480,"line":2316},[478,69640,55614],{"class":714},[478,69642,69546],{"class":51680},[478,69644,67031],{"class":484},[478,69646,759],{"class":714},[478,69648,69649],{"class":488},"\"北京\"",[478,69651,69652],{"class":714},">北京\u003C\u002F",[478,69654,69546],{"class":51680},[478,69656,51687],{"class":714},[478,69658,69659,69661,69663,69665,69667,69670,69673,69675],{"class":480,"line":2321},[478,69660,55614],{"class":714},[478,69662,69546],{"class":51680},[478,69664,67031],{"class":484},[478,69666,759],{"class":714},[478,69668,69669],{"class":488},"\"上海\"",[478,69671,69672],{"class":714},">上海\u003C\u002F",[478,69674,69546],{"class":51680},[478,69676,51687],{"class":714},[478,69678,69679,69681,69683,69685,69687,69690,69693,69695],{"class":480,"line":2326},[478,69680,55614],{"class":714},[478,69682,69546],{"class":51680},[478,69684,67031],{"class":484},[478,69686,759],{"class":714},[478,69688,69689],{"class":488},"\"广州\"",[478,69691,69692],{"class":714},">广州\u003C\u002F",[478,69694,69546],{"class":51680},[478,69696,51687],{"class":714},[478,69698,69699,69701,69703,69705,69707,69710,69713,69715],{"class":480,"line":2331},[478,69700,55614],{"class":714},[478,69702,69546],{"class":51680},[478,69704,67031],{"class":484},[478,69706,759],{"class":714},[478,69708,69709],{"class":488},"\"深圳\"",[478,69711,69712],{"class":714},">深圳\u003C\u002F",[478,69714,69546],{"class":51680},[478,69716,51687],{"class":714},[478,69718,69719,69721,69723,69725,69727,69730,69733,69735],{"class":480,"line":2345},[478,69720,55614],{"class":714},[478,69722,69546],{"class":51680},[478,69724,67031],{"class":484},[478,69726,759],{"class":714},[478,69728,69729],{"class":488},"\"曹县\"",[478,69731,69732],{"class":714},">曹县\u003C\u002F",[478,69734,69546],{"class":51680},[478,69736,51687],{"class":714},[478,69738,69739,69741,69743],{"class":480,"line":2350},[478,69740,52156],{"class":714},[478,69742,69524],{"class":51680},[478,69744,51687],{"class":714},[478,69746,69747,69749,69751,69753,69755,69758,69761,69763],{"class":480,"line":3143},[478,69748,51721],{"class":714},[478,69750,54267],{"class":51680},[478,69752,53866],{"class":484},[478,69754,759],{"class":714},[478,69756,69757],{"class":488},"\"add\"",[478,69759,69760],{"class":714},">录入\u003C\u002F",[478,69762,54267],{"class":51680},[478,69764,51687],{"class":714},[478,69766,69767,69769,69771],{"class":480,"line":3157},[478,69768,52797],{"class":714},[478,69770,67005],{"class":51680},[478,69772,51687],{"class":714},[478,69774,69775],{"class":480,"line":3165},[478,69776,2966],{"emptyLinePlaceholder":640},[478,69778,69779,69781,69783,69786,69788],{"class":480,"line":3170},[478,69780,52524],{"class":714},[478,69782,10],{"class":51680},[478,69784,69785],{"class":714},">就业榜\u003C\u002F",[478,69787,10],{"class":51680},[478,69789,51687],{"class":714},[478,69791,69792,69794,69796],{"class":480,"line":3176},[478,69793,52524],{"class":714},[478,69795,371],{"class":51680},[478,69797,51687],{"class":714},[478,69799,69800,69802,69804],{"class":480,"line":3182},[478,69801,51721],{"class":714},[478,69803,374],{"class":51680},[478,69805,51687],{"class":714},[478,69807,69808,69810,69812],{"class":480,"line":3187},[478,69809,55614],{"class":714},[478,69811,377],{"class":51680},[478,69813,51687],{"class":714},[478,69815,69816,69818,69820,69823,69825],{"class":480,"line":8514},[478,69817,55682],{"class":714},[478,69819,380],{"class":51680},[478,69821,69822],{"class":714},">序号\u003C\u002F",[478,69824,380],{"class":51680},[478,69826,51687],{"class":714},[478,69828,69829,69831,69833,69836,69838],{"class":480,"line":8538},[478,69830,55682],{"class":714},[478,69832,380],{"class":51680},[478,69834,69835],{"class":714},">姓名\u003C\u002F",[478,69837,380],{"class":51680},[478,69839,51687],{"class":714},[478,69841,69842,69844,69846,69849,69851],{"class":480,"line":8543},[478,69843,55682],{"class":714},[478,69845,380],{"class":51680},[478,69847,69848],{"class":714},">年龄\u003C\u002F",[478,69850,380],{"class":51680},[478,69852,51687],{"class":714},[478,69854,69855,69857,69859,69862,69864],{"class":480,"line":8549},[478,69856,55682],{"class":714},[478,69858,380],{"class":51680},[478,69860,69861],{"class":714},">性别\u003C\u002F",[478,69863,380],{"class":51680},[478,69865,51687],{"class":714},[478,69867,69868,69870,69872,69875,69877],{"class":480,"line":8576},[478,69869,55682],{"class":714},[478,69871,380],{"class":51680},[478,69873,69874],{"class":714},">薪资\u003C\u002F",[478,69876,380],{"class":51680},[478,69878,51687],{"class":714},[478,69880,69881,69883,69885,69888,69890],{"class":480,"line":8581},[478,69882,55682],{"class":714},[478,69884,380],{"class":51680},[478,69886,69887],{"class":714},">就业城市\u003C\u002F",[478,69889,380],{"class":51680},[478,69891,51687],{"class":714},[478,69893,69894,69896,69898,69901,69903],{"class":480,"line":8587},[478,69895,55682],{"class":714},[478,69897,380],{"class":51680},[478,69899,69900],{"class":714},">操作\u003C\u002F",[478,69902,380],{"class":51680},[478,69904,51687],{"class":714},[478,69906,69907,69909,69911],{"class":480,"line":8599},[478,69908,55787],{"class":714},[478,69910,377],{"class":51680},[478,69912,51687],{"class":714},[478,69914,69915,69917,69919],{"class":480,"line":8611},[478,69916,52156],{"class":714},[478,69918,374],{"class":51680},[478,69920,51687],{"class":714},[478,69922,69923,69925,69927],{"class":480,"line":8623},[478,69924,51721],{"class":714},[478,69926,388],{"class":51680},[478,69928,51687],{"class":714},[478,69930,69931],{"class":480,"line":10282},[478,69932,69933],{"class":770},"      \u003C!-- \n",[478,69935,69936],{"class":480,"line":10307},[478,69937,69938],{"class":770},"        \u003Ctr>\n",[478,69940,69941],{"class":480,"line":10330},[478,69942,69943],{"class":770},"          \u003Ctd>1001\u003C\u002Ftd>\n",[478,69945,69946],{"class":480,"line":10354},[478,69947,69948],{"class":770},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[478,69950,69951],{"class":480,"line":10359},[478,69952,69953],{"class":770},"          \u003Ctd>19\u003C\u002Ftd>\n",[478,69955,69956],{"class":480,"line":10364},[478,69957,69958],{"class":770},"          \u003Ctd>男\u003C\u002Ftd>\n",[478,69960,69961],{"class":480,"line":10369},[478,69962,69963],{"class":770},"          \u003Ctd>15000\u003C\u002Ftd>\n",[478,69965,69966],{"class":480,"line":10378},[478,69967,69968],{"class":770},"          \u003Ctd>上海\u003C\u002Ftd>\n",[478,69970,69971],{"class":480,"line":10383},[478,69972,69973],{"class":770},"          \u003Ctd>\n",[478,69975,69976],{"class":480,"line":10389},[478,69977,69978],{"class":770},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[478,69980,69981],{"class":480,"line":10410},[478,69982,69983],{"class":770},"          \u003C\u002Ftd>\n",[478,69985,69986],{"class":480,"line":10416},[478,69987,69988],{"class":770},"        \u003C\u002Ftr> \n",[478,69990,69991],{"class":480,"line":10430},[478,69992,69993],{"class":770},"        -->\n",[478,69995,69996,69998,70000],{"class":480,"line":10436},[478,69997,52156],{"class":714},[478,69999,388],{"class":51680},[478,70001,51687],{"class":714},[478,70003,70004,70006,70008],{"class":480,"line":10463},[478,70005,52797],{"class":714},[478,70007,371],{"class":51680},[478,70009,51687],{"class":714},[478,70011,70012,70014,70016],{"class":480,"line":10472},[478,70013,52524],{"class":714},[478,70015,52193],{"class":51680},[478,70017,51687],{"class":714},[478,70019,70020],{"class":480,"line":10478},[478,70021,60338],{"class":770},[478,70023,70024,70026,70029,70031,70033,70035,70037,70040],{"class":480,"line":10486},[478,70025,11787],{"class":710},[478,70027,70028],{"class":495}," uname",[478,70030,14130],{"class":710},[478,70032,54776],{"class":714},[478,70034,54779],{"class":484},[478,70036,263],{"class":714},[478,70038,70039],{"class":488},"'.uname'",[478,70041,720],{"class":714},[478,70043,70044,70046,70048,70050,70052,70054,70056,70059],{"class":480,"line":10491},[478,70045,11787],{"class":710},[478,70047,16254],{"class":495},[478,70049,14130],{"class":710},[478,70051,54776],{"class":714},[478,70053,54779],{"class":484},[478,70055,263],{"class":714},[478,70057,70058],{"class":488},"'.age'",[478,70060,720],{"class":714},[478,70062,70063,70065,70068,70070,70072,70074,70076,70079],{"class":480,"line":17169},[478,70064,11787],{"class":710},[478,70066,70067],{"class":495}," gender",[478,70069,14130],{"class":710},[478,70071,54776],{"class":714},[478,70073,54779],{"class":484},[478,70075,263],{"class":714},[478,70077,70078],{"class":488},"'.gender'",[478,70080,720],{"class":714},[478,70082,70083,70085,70088,70090,70092,70094,70096,70099],{"class":480,"line":17175},[478,70084,11787],{"class":710},[478,70086,70087],{"class":495}," salary",[478,70089,14130],{"class":710},[478,70091,54776],{"class":714},[478,70093,54779],{"class":484},[478,70095,263],{"class":714},[478,70097,70098],{"class":488},"'.salary'",[478,70100,720],{"class":714},[478,70102,70103,70105,70108,70110,70112,70114,70116,70119],{"class":480,"line":17198},[478,70104,11787],{"class":710},[478,70106,70107],{"class":495}," city",[478,70109,14130],{"class":710},[478,70111,54776],{"class":714},[478,70113,54779],{"class":484},[478,70115,263],{"class":714},[478,70117,70118],{"class":488},"'.city'",[478,70120,720],{"class":714},[478,70122,70123,70125,70128,70130,70132,70134,70136,70139],{"class":480,"line":17204},[478,70124,11787],{"class":710},[478,70126,70127],{"class":495}," tbody",[478,70129,14130],{"class":710},[478,70131,54776],{"class":714},[478,70133,54779],{"class":484},[478,70135,263],{"class":714},[478,70137,70138],{"class":488},"'tbody'",[478,70140,720],{"class":714},[478,70142,70143],{"class":480,"line":17227},[478,70144,2966],{"emptyLinePlaceholder":640},[478,70146,70147],{"class":480,"line":17241},[478,70148,70149],{"class":770},"    \u002F\u002F 获取所有带有name属性的元素\n",[478,70151,70152,70154,70157,70159,70161,70163,70165,70168],{"class":480,"line":17261},[478,70153,11787],{"class":710},[478,70155,70156],{"class":495}," items",[478,70158,14130],{"class":710},[478,70160,54776],{"class":714},[478,70162,56061],{"class":484},[478,70164,263],{"class":714},[478,70166,70167],{"class":488},"'[name]'",[478,70169,720],{"class":714},[478,70171,70172],{"class":480,"line":17267},[478,70173,70174],{"class":770},"    \u002F\u002F 声明一个空的数组\n",[478,70176,70177,70179,70181,70183],{"class":480,"line":17278},[478,70178,11787],{"class":710},[478,70180,58075],{"class":495},[478,70182,14130],{"class":710},[478,70184,52218],{"class":714},[478,70186,70187],{"class":480,"line":17301},[478,70188,70189],{"class":770},"    \u002F\u002F 1.录入模块\n",[478,70191,70192],{"class":480,"line":17323},[478,70193,70194],{"class":770},"    \u002F\u002F 1.1这是一个表单提交事件\n",[478,70196,70197,70199,70202,70204,70206,70208,70210,70213],{"class":480,"line":17328},[478,70198,11787],{"class":710},[478,70200,70201],{"class":495}," info",[478,70203,14130],{"class":710},[478,70205,54776],{"class":714},[478,70207,54779],{"class":484},[478,70209,263],{"class":714},[478,70211,70212],{"class":488},"'.info'",[478,70214,720],{"class":714},[478,70216,70217,70220,70222,70224,70227,70229,70231,70233,70235],{"class":480,"line":17334},[478,70218,70219],{"class":714},"    info.",[478,70221,58193],{"class":484},[478,70223,263],{"class":714},[478,70225,70226],{"class":488},"'submit'",[478,70228,13001],{"class":714},[478,70230,54829],{"class":710},[478,70232,219],{"class":714},[478,70234,786],{"class":5782},[478,70236,13008],{"class":714},[478,70238,70239],{"class":480,"line":17348},[478,70240,70241],{"class":770},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[478,70243,70244,70247,70250],{"class":480,"line":17361},[478,70245,70246],{"class":714},"      e.",[478,70248,70249],{"class":484},"preventDefault",[478,70251,2542],{"class":714},[478,70253,70254],{"class":480,"line":17366},[478,70255,60392],{"class":770},[478,70257,70258],{"class":480,"line":17380},[478,70259,2966],{"emptyLinePlaceholder":640},[478,70261,70262],{"class":480,"line":17385},[478,70263,70264],{"class":770},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[478,70266,70267],{"class":480,"line":17391},[478,70268,70269],{"class":770},"      \u002F\u002F 先遍历循环\n",[478,70271,70272,70274,70276,70278,70280,70282,70284,70286,70288,70291,70293,70295,70297],{"class":480,"line":17396},[478,70273,52664],{"class":710},[478,70275,219],{"class":714},[478,70277,52227],{"class":710},[478,70279,10004],{"class":714},[478,70281,759],{"class":710},[478,70283,4659],{"class":495},[478,70285,10011],{"class":714},[478,70287,1605],{"class":710},[478,70289,70290],{"class":714}," items.",[478,70292,52348],{"class":495},[478,70294,3780],{"class":714},[478,70296,2858],{"class":710},[478,70298,13008],{"class":714},[478,70300,70301,70303,70306,70308,70311],{"class":480,"line":17410},[478,70302,3063],{"class":710},[478,70304,70305],{"class":714}," (items[i].value ",[478,70307,54866],{"class":710},[478,70309,70310],{"class":488}," ''",[478,70312,13008],{"class":714},[478,70314,70315,70318,70321,70323,70326],{"class":480,"line":17415},[478,70316,70317],{"class":710},"          return",[478,70319,70320],{"class":484}," alert",[478,70322,263],{"class":714},[478,70324,70325],{"class":488},"'输入内容不能为空'",[478,70327,720],{"class":714},[478,70329,70330],{"class":480,"line":17420},[478,70331,3095],{"class":714},[478,70333,70334],{"class":480,"line":17434},[478,70335,52778],{"class":714},[478,70337,70338],{"class":480,"line":17446},[478,70339,2966],{"emptyLinePlaceholder":640},[478,70341,70342],{"class":480,"line":17451},[478,70343,70344],{"class":770},"      \u002F\u002F 创建新的对象\n",[478,70346,70347,70349,70352,70354],{"class":480,"line":17464},[478,70348,58608],{"class":710},[478,70350,70351],{"class":495}," obj",[478,70353,14130],{"class":710},[478,70355,16137],{"class":714},[478,70357,70358,70361,70363,70365,70367],{"class":480,"line":17469},[478,70359,70360],{"class":714},"        stuID: arr.",[478,70362,52348],{"class":495},[478,70364,45946],{"class":710},[478,70366,25498],{"class":495},[478,70368,31846],{"class":714},[478,70370,70371],{"class":480,"line":17474},[478,70372,70373],{"class":714},"        uname: uname.value,\n",[478,70375,70376],{"class":480,"line":17479},[478,70377,70378],{"class":714},"        age: age.value,\n",[478,70380,70381],{"class":480,"line":17492},[478,70382,70383],{"class":714},"        gender: gender.value,\n",[478,70385,70386],{"class":480,"line":17497},[478,70387,70388],{"class":714},"        salary: salary.value,\n",[478,70390,70391],{"class":480,"line":33013},[478,70392,70393],{"class":714},"        city: city.value\n",[478,70395,70396],{"class":480,"line":33019},[478,70397,52778],{"class":714},[478,70399,70400],{"class":480,"line":33025},[478,70401,70402],{"class":770},"      \u002F\u002F console.log(obj);\n",[478,70404,70405],{"class":480,"line":33031},[478,70406,70407],{"class":770},"      \u002F\u002F 追加到数组里面\n",[478,70409,70410,70412,70414],{"class":480,"line":33037},[478,70411,58387],{"class":714},[478,70413,52264],{"class":484},[478,70415,70416],{"class":714},"(obj)\n",[478,70418,70419],{"class":480,"line":33048},[478,70420,70421],{"class":770},"      \u002F\u002F console.log(arr);\n",[478,70423,70424],{"class":480,"line":33054},[478,70425,70426],{"class":770},"      \u002F\u002F 清空表单  reset重置表单\n",[478,70428,70429,70432,70434,70437],{"class":480,"line":33074},[478,70430,70431],{"class":495},"      this",[478,70433,1258],{"class":714},[478,70435,70436],{"class":484},"reset",[478,70438,2542],{"class":714},[478,70440,70441],{"class":480,"line":33080},[478,70442,70443],{"class":770},"      \u002F\u002F 调用渲染函数\n",[478,70445,70446,70449],{"class":480,"line":33091},[478,70447,70448],{"class":484},"      render",[478,70450,2542],{"class":714},[478,70452,70453],{"class":480,"line":33097},[478,70454,33841],{"class":714},[478,70456,70457],{"class":480,"line":33103},[478,70458,70459],{"class":770},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[478,70461,70462,70465,70468],{"class":480,"line":33109},[478,70463,70464],{"class":710},"    function",[478,70466,70467],{"class":484}," render",[478,70469,11419],{"class":714},[478,70471,70472],{"class":480,"line":33115},[478,70473,70474],{"class":770},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[478,70476,70477,70480,70482],{"class":480,"line":33121},[478,70478,70479],{"class":714},"      tbody.innerHTML ",[478,70481,759],{"class":710},[478,70483,70484],{"class":488}," ''\n",[478,70486,70487],{"class":480,"line":33127},[478,70488,70489],{"class":770},"      \u002F\u002F 遍历数组\n",[478,70491,70492,70494,70496,70498,70500,70502,70504,70506,70508,70510,70512,70514,70516],{"class":480,"line":33133},[478,70493,52664],{"class":710},[478,70495,219],{"class":714},[478,70497,52227],{"class":710},[478,70499,10004],{"class":714},[478,70501,759],{"class":710},[478,70503,4659],{"class":495},[478,70505,10011],{"class":714},[478,70507,1605],{"class":710},[478,70509,52345],{"class":714},[478,70511,52348],{"class":495},[478,70513,3780],{"class":714},[478,70515,2858],{"class":710},[478,70517,13008],{"class":714},[478,70519,70520,70522,70525,70527,70529,70532,70534,70537],{"class":480,"line":33153},[478,70521,61650],{"class":710},[478,70523,70524],{"class":495}," tr",[478,70526,14130],{"class":710},[478,70528,54776],{"class":714},[478,70530,70531],{"class":484},"createElement",[478,70533,263],{"class":714},[478,70535,70536],{"class":488},"'tr'",[478,70538,720],{"class":714},[478,70540,70541,70544,70546],{"class":480,"line":33159},[478,70542,70543],{"class":714},"        tr.innerHTML ",[478,70545,759],{"class":710},[478,70547,70548],{"class":488}," `\n",[478,70550,70551,70554,70556,70558,70560,70563,70566],{"class":480,"line":33175},[478,70552,70553],{"class":488},"        \u003Ctd>${",[478,70555,4446],{"class":714},[478,70557,1585],{"class":488},[478,70559,1141],{"class":714},[478,70561,70562],{"class":488},"].",[478,70564,70565],{"class":714},"stuID",[478,70567,70568],{"class":488},"}\u003C\u002Ftd>\n",[478,70570,70571,70574,70576,70578,70580,70582,70585],{"class":480,"line":33181},[478,70572,70573],{"class":488},"          \u003Ctd>${",[478,70575,4446],{"class":714},[478,70577,1585],{"class":488},[478,70579,1141],{"class":714},[478,70581,70562],{"class":488},[478,70583,70584],{"class":714},"uname",[478,70586,70568],{"class":488},[478,70588,70589,70591,70593,70595,70597,70599,70602],{"class":480,"line":33195},[478,70590,70573],{"class":488},[478,70592,4446],{"class":714},[478,70594,1585],{"class":488},[478,70596,1141],{"class":714},[478,70598,70562],{"class":488},[478,70600,70601],{"class":714},"age",[478,70603,70568],{"class":488},[478,70605,70606,70608,70610,70612,70614,70616,70619],{"class":480,"line":33201},[478,70607,70573],{"class":488},[478,70609,4446],{"class":714},[478,70611,1585],{"class":488},[478,70613,1141],{"class":714},[478,70615,70562],{"class":488},[478,70617,70618],{"class":714},"gender",[478,70620,70568],{"class":488},[478,70622,70623,70625,70627,70629,70631,70633,70636],{"class":480,"line":33216},[478,70624,70573],{"class":488},[478,70626,4446],{"class":714},[478,70628,1585],{"class":488},[478,70630,1141],{"class":714},[478,70632,70562],{"class":488},[478,70634,70635],{"class":714},"salary",[478,70637,70568],{"class":488},[478,70639,70640,70642,70644,70646,70648,70650,70653],{"class":480,"line":33222},[478,70641,70573],{"class":488},[478,70643,4446],{"class":714},[478,70645,1585],{"class":488},[478,70647,1141],{"class":714},[478,70649,70562],{"class":488},[478,70651,70652],{"class":714},"city",[478,70654,70568],{"class":488},[478,70656,70657],{"class":480,"line":33231},[478,70658,69973],{"class":488},[478,70660,70661,70664,70666],{"class":480,"line":33237},[478,70662,70663],{"class":488},"            \u003Ca href=\"javascript:\" data-id=${",[478,70665,1141],{"class":714},[478,70667,70668],{"class":488},"}>删除\u003C\u002Fa>\n",[478,70670,70671],{"class":480,"line":33246},[478,70672,70673],{"class":488},"          \u003C\u002Ftd> \n",[478,70675,70676],{"class":480,"line":33252},[478,70677,70678],{"class":488},"          `\n",[478,70680,70681],{"class":480,"line":33258},[478,70682,70683],{"class":770},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[478,70685,70686,70689,70692],{"class":480,"line":33267},[478,70687,70688],{"class":714},"        tbody.",[478,70690,70691],{"class":484},"appendChild",[478,70693,70694],{"class":714},"(tr)\n",[478,70696,70697],{"class":480,"line":33273},[478,70698,52778],{"class":714},[478,70700,70701],{"class":480,"line":33284},[478,70702,2753],{"class":714},[478,70704,70705],{"class":480,"line":33290},[478,70706,2966],{"emptyLinePlaceholder":640},[478,70708,70709],{"class":480,"line":33309},[478,70710,70711],{"class":770},"    \u002F\u002F 3.删除委托\n",[478,70713,70714],{"class":480,"line":33315},[478,70715,70716],{"class":770},"    \u002F\u002F 3.1 事件委托 tbody\n",[478,70718,70719,70722,70724,70726,70728,70730,70732,70734,70736],{"class":480,"line":33326},[478,70720,70721],{"class":714},"    tbody.",[478,70723,58193],{"class":484},[478,70725,263],{"class":714},[478,70727,58198],{"class":488},[478,70729,13001],{"class":714},[478,70731,54829],{"class":710},[478,70733,219],{"class":714},[478,70735,786],{"class":5782},[478,70737,13008],{"class":714},[478,70739,70740,70742,70744,70746,70748],{"class":480,"line":33332},[478,70741,54860],{"class":710},[478,70743,67414],{"class":714},[478,70745,54866],{"class":710},[478,70747,68636],{"class":488},[478,70749,13008],{"class":714},[478,70751,70752],{"class":480,"line":33352},[478,70753,70754],{"class":770},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[478,70756,70757],{"class":480,"line":33368},[478,70758,70759],{"class":770},"        \u002F\u002F console.log(e.target.dataset.id);\n",[478,70761,70762],{"class":480,"line":33374},[478,70763,70764],{"class":770},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[478,70766,70767,70770,70772,70775,70777],{"class":480,"line":33388},[478,70768,70769],{"class":714},"        arr.",[478,70771,58390],{"class":484},[478,70773,70774],{"class":714},"(e.target.dataset.id, ",[478,70776,193],{"class":495},[478,70778,720],{"class":714},[478,70780,70781],{"class":480,"line":33394},[478,70782,70783],{"class":770},"        \u002F\u002F 重新渲染一次\n",[478,70785,70786,70789],{"class":480,"line":33400},[478,70787,70788],{"class":484},"        render",[478,70790,2542],{"class":714},[478,70792,70793],{"class":480,"line":33411},[478,70794,52778],{"class":714},[478,70796,70797],{"class":480,"line":33417},[478,70798,33841],{"class":714},[478,70800,70801,70803,70805],{"class":480,"line":33423},[478,70802,52797],{"class":714},[478,70804,52193],{"class":51680},[478,70806,51687],{"class":714},[478,70808,70809],{"class":480,"line":33433},[478,70810,2966],{"emptyLinePlaceholder":640},[478,70812,70813,70815,70817],{"class":480,"line":33439},[478,70814,52165],{"class":714},[478,70816,52180],{"class":51680},[478,70818,51687],{"class":714},[478,70820,70821],{"class":480,"line":33450},[478,70822,2966],{"emptyLinePlaceholder":640},[478,70824,70825,70827,70829],{"class":480,"line":33456},[478,70826,52165],{"class":714},[478,70828,51015],{"class":51680},[478,70830,51687],{"class":714},[19,70832,70833],{},"样式：",[469,70835,70839],{"className":70836,"code":70837,"language":70838,"meta":54,"style":54},"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",[475,70840,70841,70846,70856,70865,70869,70873,70878,70888,70893,70897,70902,70912,70917,70926,70930,70934,70939,70944,70954,70964,70969,70973,70978,70987,70997,71002,71012,71022,71026,71031,71039,71043,71048,71053,71058,71066,71075,71079,71084,71093,71097,71102,71111,71115,71120,71129,71138,71146,71150,71155,71164,71174,71183,71193,71199,71208,71218,71228,71232,71237,71246,71254,71264,71272,71281,71290,71300,71308,71312,71317,71326],{"__ignoreMap":54},[478,70842,70843],{"class":480,"line":481},[478,70844,70845],{"class":714},"* {\n",[478,70847,70848,70851,70853],{"class":480,"line":565},[478,70849,70850],{"class":51680},"  margin",[478,70852,51817],{"class":714},[478,70854,70855],{"class":488},"0;\n",[478,70857,70858,70861,70863],{"class":480,"line":579},[478,70859,70860],{"class":488},"  padding",[478,70862,51817],{"class":714},[478,70864,70855],{"class":488},[478,70866,70867],{"class":480,"line":593},[478,70868,2133],{"class":714},[478,70870,70871],{"class":480,"line":1769},[478,70872,2966],{"emptyLinePlaceholder":640},[478,70874,70875],{"class":480,"line":1783},[478,70876,70877],{"class":488},"a {\n",[478,70879,70880,70883,70885],{"class":480,"line":1789},[478,70881,70882],{"class":51680},"  text-decoration",[478,70884,51817],{"class":714},[478,70886,70887],{"class":488},"none;\n",[478,70889,70890],{"class":480,"line":1880},[478,70891,70892],{"class":488},"  color:#721c24;\n",[478,70894,70895],{"class":480,"line":1886},[478,70896,2133],{"class":714},[478,70898,70899],{"class":480,"line":1898},[478,70900,70901],{"class":488},"h1 {\n",[478,70903,70904,70907,70909],{"class":480,"line":2180},[478,70905,70906],{"class":51680},"  text-align",[478,70908,51817],{"class":714},[478,70910,70911],{"class":488},"center;\n",[478,70913,70914],{"class":480,"line":2185},[478,70915,70916],{"class":488},"  color:#333;\n",[478,70918,70919,70921,70923],{"class":480,"line":2191},[478,70920,70850],{"class":51680},[478,70922,51817],{"class":714},[478,70924,70925],{"class":488},"20px 0;\n",[478,70927,70928],{"class":480,"line":2196},[478,70929,3240],{"class":714},[478,70931,70932],{"class":480,"line":2210},[478,70933,2133],{"class":714},[478,70935,70936],{"class":480,"line":2215},[478,70937,70938],{"class":488},"table {\n",[478,70940,70941],{"class":480,"line":2221},[478,70942,70943],{"class":488},"  margin:0 auto;\n",[478,70945,70946,70949,70951],{"class":480,"line":2241},[478,70947,70948],{"class":51680},"  width",[478,70950,51817],{"class":714},[478,70952,70953],{"class":488},"800px;\n",[478,70955,70956,70959,70961],{"class":480,"line":2246},[478,70957,70958],{"class":51680},"  border-collapse",[478,70960,51817],{"class":714},[478,70962,70963],{"class":488},"collapse;\n",[478,70965,70966],{"class":480,"line":2260},[478,70967,70968],{"class":488},"  color:#004085;\n",[478,70970,70971],{"class":480,"line":2265},[478,70972,2133],{"class":714},[478,70974,70975],{"class":480,"line":2294},[478,70976,70977],{"class":488},"th {\n",[478,70979,70980,70982,70984],{"class":480,"line":2299},[478,70981,70860],{"class":51680},[478,70983,51817],{"class":714},[478,70985,70986],{"class":488},"10px;\n",[478,70988,70989,70992,70994],{"class":480,"line":2316},[478,70990,70991],{"class":51680},"  background",[478,70993,51817],{"class":714},[478,70995,70996],{"class":770},"#cfe5ff;\n",[478,70998,70999],{"class":480,"line":2321},[478,71000,71001],{"class":714},"  \n",[478,71003,71004,71007,71009],{"class":480,"line":2326},[478,71005,71006],{"class":51680},"  font-size",[478,71008,51817],{"class":714},[478,71010,71011],{"class":488},"20px;\n",[478,71013,71014,71017,71019],{"class":480,"line":2331},[478,71015,71016],{"class":51680},"  font-weight",[478,71018,51817],{"class":714},[478,71020,71021],{"class":488},"400;\n",[478,71023,71024],{"class":480,"line":2345},[478,71025,2133],{"class":714},[478,71027,71028],{"class":480,"line":2350},[478,71029,71030],{"class":488},"td,th {\n",[478,71032,71033,71036],{"class":480,"line":3143},[478,71034,71035],{"class":488},"  border:1px solid",[478,71037,71038],{"class":770}," #b8daff;\n",[478,71040,71041],{"class":480,"line":3157},[478,71042,2133],{"class":714},[478,71044,71045],{"class":480,"line":3165},[478,71046,71047],{"class":488},"td {\n",[478,71049,71050],{"class":480,"line":3170},[478,71051,71052],{"class":488},"  padding:10px;\n",[478,71054,71055],{"class":480,"line":3176},[478,71056,71057],{"class":488},"  color:#666;\n",[478,71059,71060,71062,71064],{"class":480,"line":3182},[478,71061,70906],{"class":51680},[478,71063,51817],{"class":714},[478,71065,70911],{"class":488},[478,71067,71068,71070,71072],{"class":480,"line":3187},[478,71069,71006],{"class":51680},[478,71071,51817],{"class":714},[478,71073,71074],{"class":488},"16px;\n",[478,71076,71077],{"class":480,"line":8514},[478,71078,2133],{"class":714},[478,71080,71081],{"class":480,"line":8538},[478,71082,71083],{"class":488},"tbody tr {\n",[478,71085,71086,71088,71090],{"class":480,"line":8543},[478,71087,70991],{"class":51680},[478,71089,51817],{"class":714},[478,71091,71092],{"class":770},"#fff;\n",[478,71094,71095],{"class":480,"line":8549},[478,71096,2133],{"class":714},[478,71098,71099],{"class":480,"line":8576},[478,71100,71101],{"class":488},"tbody tr:hover {\n",[478,71103,71104,71106,71108],{"class":480,"line":8581},[478,71105,70991],{"class":51680},[478,71107,51817],{"class":714},[478,71109,71110],{"class":770},"#e1ecf8;\n",[478,71112,71113],{"class":480,"line":8587},[478,71114,2133],{"class":714},[478,71116,71117],{"class":480,"line":8599},[478,71118,71119],{"class":488},".info {\n",[478,71121,71122,71124,71126],{"class":480,"line":8611},[478,71123,70948],{"class":51680},[478,71125,51817],{"class":714},[478,71127,71128],{"class":488},"900px;\n",[478,71130,71131,71133,71135],{"class":480,"line":8623},[478,71132,70850],{"class":51680},[478,71134,51817],{"class":714},[478,71136,71137],{"class":488},"50px auto;\n",[478,71139,71140,71142,71144],{"class":480,"line":10282},[478,71141,70906],{"class":51680},[478,71143,51817],{"class":714},[478,71145,70911],{"class":488},[478,71147,71148],{"class":480,"line":10307},[478,71149,2133],{"class":714},[478,71151,71152],{"class":480,"line":10330},[478,71153,71154],{"class":488},".info  input, .info select {\n",[478,71156,71157,71159,71161],{"class":480,"line":10354},[478,71158,70948],{"class":51680},[478,71160,51817],{"class":714},[478,71162,71163],{"class":488},"80px;\n",[478,71165,71166,71169,71171],{"class":480,"line":10359},[478,71167,71168],{"class":51680},"  height",[478,71170,51817],{"class":714},[478,71172,71173],{"class":488},"27px;\n",[478,71175,71176,71179,71181],{"class":480,"line":10364},[478,71177,71178],{"class":51680},"  outline",[478,71180,51817],{"class":714},[478,71182,70887],{"class":488},[478,71184,71185,71188,71190],{"class":480,"line":10369},[478,71186,71187],{"class":51680},"  border-radius",[478,71189,51817],{"class":714},[478,71191,71192],{"class":488},"5px;\n",[478,71194,71195,71197],{"class":480,"line":10378},[478,71196,71035],{"class":488},[478,71198,71038],{"class":770},[478,71200,71201,71204,71206],{"class":480,"line":10383},[478,71202,71203],{"class":51680},"  padding-left",[478,71205,51817],{"class":714},[478,71207,71192],{"class":488},[478,71209,71210,71213,71215],{"class":480,"line":10389},[478,71211,71212],{"class":51680},"  box-sizing",[478,71214,51817],{"class":714},[478,71216,71217],{"class":488},"border-box;\n",[478,71219,71220,71223,71225],{"class":480,"line":10410},[478,71221,71222],{"class":51680},"  margin-right",[478,71224,51817],{"class":714},[478,71226,71227],{"class":488},"15px;\n",[478,71229,71230],{"class":480,"line":10416},[478,71231,2133],{"class":714},[478,71233,71234],{"class":480,"line":10430},[478,71235,71236],{"class":488},".info button {\n",[478,71238,71239,71241,71243],{"class":480,"line":10436},[478,71240,70948],{"class":51680},[478,71242,51817],{"class":714},[478,71244,71245],{"class":488},"60px;\n",[478,71247,71248,71250,71252],{"class":480,"line":10463},[478,71249,71168],{"class":51680},[478,71251,51817],{"class":714},[478,71253,71173],{"class":488},[478,71255,71256,71259,71261],{"class":480,"line":10472},[478,71257,71258],{"class":51680},"  background-color",[478,71260,51817],{"class":714},[478,71262,71263],{"class":770},"#004085;\n",[478,71265,71266,71268,71270],{"class":480,"line":10478},[478,71267,71178],{"class":51680},[478,71269,51817],{"class":714},[478,71271,70887],{"class":488},[478,71273,71274,71277,71279],{"class":480,"line":10486},[478,71275,71276],{"class":51680},"  border",[478,71278,51817],{"class":714},[478,71280,70855],{"class":488},[478,71282,71283,71286,71288],{"class":480,"line":10491},[478,71284,71285],{"class":51680},"  color",[478,71287,51817],{"class":714},[478,71289,71092],{"class":770},[478,71291,71292,71295,71297],{"class":480,"line":17169},[478,71293,71294],{"class":51680},"  cursor",[478,71296,51817],{"class":714},[478,71298,71299],{"class":488},"pointer;\n",[478,71301,71302,71304,71306],{"class":480,"line":17175},[478,71303,71187],{"class":51680},[478,71305,51817],{"class":714},[478,71307,71192],{"class":488},[478,71309,71310],{"class":480,"line":17198},[478,71311,2133],{"class":714},[478,71313,71314],{"class":480,"line":17204},[478,71315,71316],{"class":488},".info .age {\n",[478,71318,71319,71321,71323],{"class":480,"line":17227},[478,71320,70948],{"class":51680},[478,71322,51817],{"class":714},[478,71324,71325],{"class":488},"50px;\n",[478,71327,71328],{"class":480,"line":17241},[478,71329,2133],{"class":714},[19,71331,71332],{},"思路：",[19,71334,71335],{},[52,71336],{"alt":54,"src":71337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71339,71340],{},[52,71341],{"alt":54,"src":71342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71344,71345],{},[52,71346],{"alt":54,"src":71347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[129,71349,71351],{"id":71350},"_3315-重绘回流","3.3.15 重绘回流",[19,71353,71354],{},[52,71355],{"alt":54,"src":71356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71358,71359],{},[52,71360],{"alt":54,"src":71361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71363,71364],{},[52,71365],{"alt":54,"src":71366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71368,71370],{"id":71369},"_34-bom","3.4 BOM",[19,71372,71373],{},[52,71374],{"alt":54,"src":71375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71377,71378],{},"平时写的document省略了window而已，实际上是window.document",[19,71380,71381],{},"函数也是这样，调用的时候实际为window.fn()",[19,71383,71384],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71386,71387],{},"window大部分情况下可以省略",[129,71389,71391],{"id":71390},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71393,71394],{},"只执行一次",[19,71396,71397],{},[52,71398],{"alt":54,"src":71399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71401,71402],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71404,71405],{},[52,71406],{"alt":54,"src":71407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[129,71409,71411],{"id":71410},"_342-js执行机制","3.4.2 JS执行机制",[19,71413,71414],{},[52,71415],{"alt":54,"src":71416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71418,71419],{},"两个的结果都是1111 3333 2222",[19,71421,71422],{},[52,71423],{"alt":54,"src":71424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71426,71427],{},[52,71428],{"alt":54,"src":71429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71431,71432],{},[52,71433],{"alt":54,"src":71434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71436,71437],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71439,71440],{},"工作流程：",[19,71442,71443],{},[52,71444],{"alt":54,"src":71445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71447,71448],{},[52,71449],{"alt":54,"src":71450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71452,71453],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71455,71456],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[129,71458,71460],{"id":71459},"_343-location对象","3.4.3 location对象",[19,71462,71463],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71465,71466],{},[52,71467],{"alt":54,"src":71468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71470,71471],{},"href可以跳转页面",[29,71473,71474],{},[32,71475,71476],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71478,71479],{},"search得到提交信息之后网站后边的地址",[19,71481,71482],{},[52,71483],{"alt":54,"src":71484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71486,71487],{},[52,71488],{"alt":54,"src":71489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[29,71491,71492],{"start":565},[32,71493,71494],{},"hash:这个获取单页面应用#后边的地址",[19,71496,71497],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71499,71500],{},[52,71501],{"alt":54,"src":71502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[469,71504,71506],{"className":53447,"code":71505,"language":53449,"meta":54,"style":54},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[475,71507,71508,71528,71548],{"__ignoreMap":54},[478,71509,71510,71512,71514,71516,71518,71521,71524,71526],{"class":480,"line":481},[478,71511,52524],{"class":714},[478,71513,518],{"class":51680},[478,71515,61437],{"class":484},[478,71517,759],{"class":714},[478,71519,71520],{"class":488},"\"#\u002Fmy\"",[478,71522,71523],{"class":714},">我的\u003C\u002F",[478,71525,518],{"class":51680},[478,71527,51687],{"class":714},[478,71529,71530,71532,71534,71536,71538,71541,71544,71546],{"class":480,"line":565},[478,71531,52524],{"class":714},[478,71533,518],{"class":51680},[478,71535,61437],{"class":484},[478,71537,759],{"class":714},[478,71539,71540],{"class":488},"\"#\u002Ffriend\"",[478,71542,71543],{"class":714},">关注\u003C\u002F",[478,71545,518],{"class":51680},[478,71547,51687],{"class":714},[478,71549,71550,71552,71554,71556,71558,71561,71564,71566],{"class":480,"line":579},[478,71551,52524],{"class":714},[478,71553,518],{"class":51680},[478,71555,61437],{"class":484},[478,71557,759],{"class":714},[478,71559,71560],{"class":488},"\"#\u002Fdownload\"",[478,71562,71563],{"class":714},">下载\u003C\u002F",[478,71565,518],{"class":51680},[478,71567,51687],{"class":714},[19,71569,71570],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[29,71572,71573],{"start":579},[32,71574,71575,71576,71578,71579,71581],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54096,71577],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54096,71580],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[129,71583,71585],{"id":71584},"_345-navigator对象","3.4.5 navigator对象",[19,71587,71588],{},[52,71589],{"alt":54,"src":71590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[469,71592,71596],{"className":71593,"code":71594,"language":71595,"meta":54,"style":54},"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",[475,71597,71598,71603,71614,71626,71631,71682,71723,71728,71741,71753,71758],{"__ignoreMap":54},[478,71599,71600],{"class":480,"line":481},[478,71601,71602],{"class":770},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[478,71604,71605,71607,71609,71611],{"class":480,"line":565},[478,71606,929],{"class":710},[478,71608,263],{"class":714},[478,71610,54829],{"class":710},[478,71612,71613],{"class":714}," () { \n",[478,71615,71616,71618,71621,71623],{"class":480,"line":579},[478,71617,7358],{"class":710},[478,71619,71620],{"class":495}," userAgent",[478,71622,14130],{"class":710},[478,71624,71625],{"class":714}," navigator.userAgent \n",[478,71627,71628],{"class":480,"line":593},[478,71629,71630],{"class":770},"\u002F\u002F 验证是否为Android或iPhone \n",[478,71632,71633,71635,71638,71640,71643,71646,71648,71650,71653,71655,71658,71662,71664,71666,71668,71671,71673,71675,71677,71679],{"class":480,"line":1769},[478,71634,7358],{"class":710},[478,71636,71637],{"class":495}," android",[478,71639,14130],{"class":710},[478,71641,71642],{"class":714}," userAgent.",[478,71644,71645],{"class":484},"match",[478,71647,263],{"class":714},[478,71649,1284],{"class":488},[478,71651,71652],{"class":48357},"(Android);",[478,71654,1681],{"class":710},[478,71656,71657],{"class":495},"[\\s",[478,71659,71661],{"class":71660},"snhLl","\\\u002F",[478,71663,1635],{"class":495},[478,71665,1181],{"class":710},[478,71667,263],{"class":48357},[478,71669,71670],{"class":495},"[\\d.]",[478,71672,1181],{"class":710},[478,71674,222],{"class":48357},[478,71676,1681],{"class":710},[478,71678,1284],{"class":488},[478,71680,71681],{"class":714},") \n",[478,71683,71684,71686,71689,71691,71693,71695,71697,71699,71702,71705,71708,71710,71712,71715,71717,71719,71721],{"class":480,"line":1783},[478,71685,7358],{"class":710},[478,71687,71688],{"class":495}," iphone",[478,71690,14130],{"class":710},[478,71692,71642],{"class":714},[478,71694,71645],{"class":484},[478,71696,263],{"class":714},[478,71698,1284],{"class":488},[478,71700,71701],{"class":48357},"(iPhone",[478,71703,71704],{"class":495},"\\s",[478,71706,71707],{"class":48357},"OS)",[478,71709,71704],{"class":495},[478,71711,263],{"class":48357},[478,71713,71714],{"class":495},"[\\d_]",[478,71716,1181],{"class":710},[478,71718,222],{"class":48357},[478,71720,1284],{"class":488},[478,71722,71681],{"class":714},[478,71724,71725],{"class":480,"line":1789},[478,71726,71727],{"class":770},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[478,71729,71730,71732,71735,71738],{"class":480,"line":1880},[478,71731,2099],{"class":710},[478,71733,71734],{"class":714}," (android ",[478,71736,71737],{"class":710},"||",[478,71739,71740],{"class":714}," iphone) { \n",[478,71742,71743,71746,71748,71751],{"class":480,"line":1886},[478,71744,71745],{"class":714},"location.href ",[478,71747,759],{"class":710},[478,71749,71750],{"class":488}," 'http:\u002F\u002Fm.itcast.cn'",[478,71752,3240],{"class":714},[478,71754,71755],{"class":480,"line":1898},[478,71756,71757],{"class":714},"} \n",[478,71759,71760],{"class":480,"line":2180},[478,71761,71762],{"class":714},"})()\n",[129,71764,71766],{"id":71765},"_346-histroy对象","3.4.6 histroy对象",[19,71768,71769],{},[52,71770],{"alt":54,"src":71771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71773,71774],{},"浏览器地址的前进与后退!!!",[19,71776,71777],{},"history.back() 等效于 history.go(-1)",[19,71779,71780],{},"history.forward() 等效于 history.go(1)",[14,71782,71784],{"id":71783},"_35-本地存储","3.5 本地存储",[29,71786,71787,71790,71793],{},[32,71788,71789],{},"数据存储在用户浏览器中",[32,71791,71792],{},"设置、读取方便、甚至页面刷新不丢失数据",[32,71794,71795],{},"容量较大，sessionStorage和localStorage约 5M 左右",[129,71797,71799],{"id":71798},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71801,71802],{},"只能存储字符串",[19,71804,71805],{},[52,71806],{"alt":54,"src":71807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71809,71810],{},[52,71811],{"alt":54,"src":71812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71814,71815],{},"键值对要加引号,不然就会当变量来看了",[19,71817,71818],{},"localStorage.setItem('uname', 'pink')",[19,71820,71821],{},"刷新之后信息不再丢失",[19,71823,71824],{},"操作key,value会跟着变",[19,71826,71827],{},"删除只删除键就可以,即名字",[19,71829,71818],{},[19,71831,71832],{},"改:",[19,71834,71835],{},"localStorage.setItem('uname','red')",[19,71837,71838],{},"有这个键就是改,没有这个键就是改",[19,71840,71841],{},[52,71842],{"alt":54,"src":71843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71845,71846],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71848,71849],{},[52,71850],{"alt":54,"src":71851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71853,71854],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[129,71856,71858],{"id":71857},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71860,71861],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71863,71864],{},"特性:",[29,71866,71867,71870,71873,71876],{},[32,71868,71869],{},"生命周期为关闭浏览器窗口",[32,71871,71872],{},"在同一个窗口(页面)下数据可以共享",[32,71874,71875],{},"以键值对的形式存储使用",[32,71877,71878],{},"用法跟localStorage 基本相同",[129,71880,71882],{"id":71881},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71884,71885],{},"本地只能存储字符串,无法直接存储复杂数据类型",[469,71887,71889],{"className":53447,"code":71888,"language":53449,"meta":54,"style":54},"\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",[475,71890,71891,71899,71904,71909,71914,71919,71923,71928,71933],{"__ignoreMap":54},[478,71892,71893,71895,71897],{"class":480,"line":481},[478,71894,1605],{"class":714},[478,71896,52193],{"class":51680},[478,71898,51687],{"class":714},[478,71900,71901],{"class":480,"line":565},[478,71902,71903],{"class":714},"    const obj = {\n",[478,71905,71906],{"class":480,"line":579},[478,71907,71908],{"class":714},"      uname: 'pink老师',\n",[478,71910,71911],{"class":480,"line":593},[478,71912,71913],{"class":714},"      age: 18,\n",[478,71915,71916],{"class":480,"line":1769},[478,71917,71918],{"class":714},"      gender: '女'\n",[478,71920,71921],{"class":480,"line":1783},[478,71922,2753],{"class":714},[478,71924,71925],{"class":480,"line":1789},[478,71926,71927],{"class":714},"    \u002F\u002F 存储复杂数据类型\n",[478,71929,71930],{"class":480,"line":1880},[478,71931,71932],{"class":714},"    localStorage.setItem('obj', obj)\n",[478,71934,71935,71937,71939],{"class":480,"line":1886},[478,71936,52797],{"class":714},[478,71938,52193],{"class":51680},[478,71940,51687],{"class":714},[19,71942,71943],{},[52,71944],{"alt":54,"src":71945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71947,71948],{},"如果获取一下数据:",[19,71950,71951],{},"log(localStorage.getItem('obj'))",[19,71953,71954],{},[52,71955],{"alt":54,"src":71956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71958,71959],{},"发现直接存对象是使用不了的!!!",[22563,71961,71963],{"id":71962},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71965,71966],{},[52,71967],{"alt":54,"src":71968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[469,71970,71972],{"className":51013,"code":71971,"language":51015,"meta":54,"style":54},"\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",[475,71973,71974,71982,71992,72002,72011,72019,72023,72027,72053,72072,72080,72084,72089,72094],{"__ignoreMap":54},[478,71975,71976,71978,71980],{"class":480,"line":481},[478,71977,1605],{"class":714},[478,71979,52193],{"class":51680},[478,71981,51687],{"class":714},[478,71983,71984,71986,71988,71990],{"class":480,"line":565},[478,71985,11787],{"class":710},[478,71987,70351],{"class":495},[478,71989,14130],{"class":710},[478,71991,16137],{"class":714},[478,71993,71994,71997,72000],{"class":480,"line":579},[478,71995,71996],{"class":714},"      uname: ",[478,71998,71999],{"class":488},"'pink老师'",[478,72001,31846],{"class":714},[478,72003,72004,72007,72009],{"class":480,"line":593},[478,72005,72006],{"class":714},"      age: ",[478,72008,1348],{"class":495},[478,72010,31846],{"class":714},[478,72012,72013,72016],{"class":480,"line":1769},[478,72014,72015],{"class":714},"      gender: ",[478,72017,72018],{"class":488},"'女'\n",[478,72020,72021],{"class":480,"line":1783},[478,72022,2753],{"class":714},[478,72024,72025],{"class":480,"line":1789},[478,72026,71927],{"class":770},[478,72028,72029,72032,72035,72037,72040,72042,72045,72047,72050],{"class":480,"line":1880},[478,72030,72031],{"class":714},"  localStorage.",[478,72033,72034],{"class":484},"setItem",[478,72036,263],{"class":714},[478,72038,72039],{"class":488},"'obj'",[478,72041,13001],{"class":714},[478,72043,72044],{"class":495},"JSON",[478,72046,1258],{"class":714},[478,72048,72049],{"class":484},"stringify",[478,72051,72052],{"class":714},"(obj))\n",[478,72054,72055,72058,72060,72063,72066,72068,72070],{"class":480,"line":1886},[478,72056,72057],{"class":714},"  console.",[478,72059,58627],{"class":484},[478,72061,72062],{"class":714},"(localStorage.",[478,72064,72065],{"class":484},"getItem",[478,72067,263],{"class":714},[478,72069,72039],{"class":488},[478,72071,30877],{"class":714},[478,72073,72074,72076,72078],{"class":480,"line":1898},[478,72075,52797],{"class":714},[478,72077,52193],{"class":51680},[478,72079,51687],{"class":714},[478,72081,72082],{"class":480,"line":2180},[478,72083,71001],{"class":714},[478,72085,72086],{"class":480,"line":2185},[478,72087,72088],{"class":714},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[478,72090,72091],{"class":480,"line":2191},[478,72092,72093],{"class":714},"  类型是字符串的\n",[478,72095,72096],{"class":480,"line":2196},[478,72097,72098],{"class":714},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22563,72100,72102],{"id":72101},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72104,72105],{},[52,72106],{"alt":54,"src":72107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72109,72110],{},[52,72111],{"alt":54,"src":72112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[469,72114,72116],{"className":53447,"code":72115,"language":53449,"meta":54,"style":54},"  \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",[475,72117,72118,72126,72130,72134,72138,72142,72146,72151,72156,72161,72166,72171,72176,72181,72186],{"__ignoreMap":54},[478,72119,72120,72122,72124],{"class":480,"line":481},[478,72121,52524],{"class":714},[478,72123,52193],{"class":51680},[478,72125,51687],{"class":714},[478,72127,72128],{"class":480,"line":565},[478,72129,71903],{"class":714},[478,72131,72132],{"class":480,"line":579},[478,72133,71908],{"class":714},[478,72135,72136],{"class":480,"line":593},[478,72137,71913],{"class":714},[478,72139,72140],{"class":480,"line":1769},[478,72141,71918],{"class":714},[478,72143,72144],{"class":480,"line":1783},[478,72145,2753],{"class":714},[478,72147,72148],{"class":480,"line":1789},[478,72149,72150],{"class":714},"    \u002F\u002F 1.存储复杂数据类型\n",[478,72152,72153],{"class":480,"line":1880},[478,72154,72155],{"class":714},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[478,72157,72158],{"class":480,"line":1886},[478,72159,72160],{"class":714},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[478,72162,72163],{"class":480,"line":1898},[478,72164,72165],{"class":714},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[478,72167,72168],{"class":480,"line":2180},[478,72169,72170],{"class":714},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[478,72172,72173],{"class":480,"line":2185},[478,72174,72175],{"class":714},"    \u002F\u002F 取\n",[478,72177,72178],{"class":480,"line":2191},[478,72179,72180],{"class":714},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[478,72182,72183],{"class":480,"line":2196},[478,72184,72185],{"class":714},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[478,72187,72188,72190,72192],{"class":480,"line":2210},[478,72189,52797],{"class":714},[478,72191,52193],{"class":51680},[478,72193,51687],{"class":714},[19,72195,72196],{},[52,72197],{"alt":54,"src":72198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[129,72200,72202],{"id":72201},"_356-数组map方法","3.5.6 数组map方法",[19,72204,72205],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72207,72208],{},[52,72209],{"alt":54,"src":72210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72212,72213],{},[52,72214],{"alt":54,"src":72215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72217,72218,72221],{},[45,72219,72220],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72223,72224],{},"map有返回值，但是forEach没有返回值",[19,72226,72227],{},"map是个方法。用的时候要加 ()",[19,72229,72230],{},"map返回的是一个数组",[129,72232,72234],{"id":72233},"_357-数组中join方法","3.5.7 数组中join方法",[19,72236,72237],{},[52,72238],{"alt":54,"src":72239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72241,72242],{},"类似于python中拼接字符串一样！",[29,72244,72245,72248,72251],{},[32,72246,72247],{},"小括号为空则逗号分开",[32,72249,72250],{},"小括号为空字符串 ''，则元素之间没有分隔符",[32,72252,72253],{},"小括号用啥符号就用进行分割",[129,72255,72257],{"id":72256},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[29,72259,72260,72263,72266,72269,72272],{},[32,72261,72262],{},"记住本地时间获取快速方式：new Date().toDateString()",[32,72264,72265],{},"尽量减少DOM操作，用好map+join的渲染方式",[32,72267,72268],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[32,72270,72271],{},"return可以实现函数的结束",[32,72273,72274],{},"禁止跳转是 preventDefault() 不要忘记",[469,72276,72278],{"className":51013,"code":72277,"language":51015,"meta":54,"style":54},"\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",[475,72279,72280,72290,72304,72308,72316,72330,72350,72362,72370,72376,72386,72396,72400,72404,72410,72420,72432,72436,72440,72447,72459,72473,72483,72487,72491,72498,72505,72512,72524,72536,72546,72558,72562,72566,72573,72580,72592,72604,72614,72626,72656,72660,72664,72671,72683,72695,72719,72729,72739,72743,72747,72755,72766,72778,72790,72802,72819,72831,72843,72847,72851,72858,72870,72882,72894,72905,72923,72936,72948,72972,72983,72987,72991,72999,73009,73013,73017,73023,73035,73046,73056,73060,73064,73070,73092,73096,73100,73106,73112,73124,73134,73146,73176,73189,73206,73210,73214,73225,73247,73257,73261,73265,73278,73288,73300,73312,73324,73336,73346,73356,73366,73377,73390,73394,73402,73410,73414,73422,73435,73455,73488,73521,73554,73580,73598,73616,73624,73650,73668,73686,73704,73722,73740,73748,73756,73774,73782,73811,73819,73827,73835,73848,73860,73872,73884,73896,73908,73921,73933,73941,73949,73957,73962,73967,73971,73975,73979,73983,73987,73991,73996,74001,74006,74011,74019,74027,74035,74040,74045,74050,74055,74060,74065,74070,74075,74080,74085,74090,74095,74100,74105,74109,74114,74119,74129,74138,74142,74147,74156,74172,74214,74254,74293,74358,74366,74370,74375,74393,74401,74406,74411,74441,74447,74452,74465,74477,74489,74501,74513,74525,74537,74541,74551,74555,74560,74565,74569,74578,74582,74587,74592,74611,74616,74636,74640,74645,74649,74654,74672,74690,74708,74727,74746,74765,74770,74776,74797,74803,74812,74818,74824,74830,74857,74870,74875,74885,74891,74897,74903,74909,74914,74920,74926,74932,74938,74971,74976,74981,74986,74991,74997,75003,75009,75020,75025,75031,75038,75052,75058,75082,75087,75092,75098,75104,75125,75131,75144,75150,75156,75162,75168,75173,75179,75185,75191,75209,75223,75229,75237,75243,75265,75270,75275,75280,75285,75290,75299,75308,75313],{"__ignoreMap":54},[478,72281,72282,72284,72286,72288],{"class":480,"line":481},[478,72283,51677],{"class":714},[478,72285,51681],{"class":51680},[478,72287,51684],{"class":484},[478,72289,51687],{"class":714},[478,72291,72292,72294,72296,72298,72300,72302],{"class":480,"line":565},[478,72293,1605],{"class":714},[478,72295,51015],{"class":51680},[478,72297,51696],{"class":484},[478,72299,759],{"class":714},[478,72301,51701],{"class":488},[478,72303,51687],{"class":714},[478,72305,72306],{"class":480,"line":579},[478,72307,2966],{"emptyLinePlaceholder":640},[478,72309,72310,72312,72314],{"class":480,"line":593},[478,72311,1605],{"class":714},[478,72313,51714],{"class":51680},[478,72315,51687],{"class":714},[478,72317,72318,72320,72322,72324,72326,72328],{"class":480,"line":1769},[478,72319,52524],{"class":714},[478,72321,51724],{"class":51680},[478,72323,51727],{"class":484},[478,72325,759],{"class":714},[478,72327,51732],{"class":488},[478,72329,51687],{"class":714},[478,72331,72332,72334,72336,72338,72340,72342,72344,72346,72348],{"class":480,"line":1783},[478,72333,52524],{"class":714},[478,72335,51724],{"class":51680},[478,72337,15485],{"class":484},[478,72339,759],{"class":714},[478,72341,51771],{"class":488},[478,72343,51751],{"class":484},[478,72345,759],{"class":714},[478,72347,51778],{"class":488},[478,72349,51687],{"class":714},[478,72351,72352,72354,72356,72358,72360],{"class":480,"line":1789},[478,72353,52524],{"class":714},[478,72355,51787],{"class":51680},[478,72357,51790],{"class":714},[478,72359,51787],{"class":51680},[478,72361,51687],{"class":714},[478,72363,72364,72366,72368],{"class":480,"line":1880},[478,72365,52524],{"class":714},[478,72367,617],{"class":51680},[478,72369,51687],{"class":714},[478,72371,72372,72374],{"class":480,"line":1886},[478,72373,6969],{"class":51680},[478,72375,16137],{"class":714},[478,72377,72378,72380,72382,72384],{"class":480,"line":1898},[478,72379,55075],{"class":495},[478,72381,51817],{"class":714},[478,72383,895],{"class":495},[478,72385,1859],{"class":714},[478,72387,72388,72390,72392,72394],{"class":480,"line":2180},[478,72389,55086],{"class":495},[478,72391,51817],{"class":714},[478,72393,895],{"class":495},[478,72395,1859],{"class":714},[478,72397,72398],{"class":480,"line":2185},[478,72399,2753],{"class":714},[478,72401,72402],{"class":480,"line":2191},[478,72403,2966],{"emptyLinePlaceholder":640},[478,72405,72406,72408],{"class":480,"line":2196},[478,72407,57659],{"class":51680},[478,72409,16137],{"class":714},[478,72411,72412,72414,72416,72418],{"class":480,"line":2210},[478,72413,57666],{"class":495},[478,72415,51817],{"class":714},[478,72417,51972],{"class":495},[478,72419,1859],{"class":714},[478,72421,72422,72424,72426,72428,72430],{"class":480,"line":2215},[478,72423,62457],{"class":495},[478,72425,51817],{"class":714},[478,72427,1396],{"class":495},[478,72429,51872],{"class":710},[478,72431,1859],{"class":714},[478,72433,72434],{"class":480,"line":2221},[478,72435,2753],{"class":714},[478,72437,72438],{"class":480,"line":2241},[478,72439,2966],{"emptyLinePlaceholder":640},[478,72441,72442,72445],{"class":480,"line":2246},[478,72443,72444],{"class":484},"    .info",[478,72446,16137],{"class":714},[478,72448,72449,72451,72453,72455,72457],{"class":480,"line":2260},[478,72450,55151],{"class":495},[478,72452,51817],{"class":714},[478,72454,51869],{"class":495},[478,72456,51872],{"class":710},[478,72458,1859],{"class":714},[478,72460,72461,72463,72465,72467,72469,72471],{"class":480,"line":2265},[478,72462,55086],{"class":495},[478,72464,51817],{"class":714},[478,72466,1146],{"class":495},[478,72468,51872],{"class":710},[478,72470,51936],{"class":495},[478,72472,1859],{"class":714},[478,72474,72475,72477,72479,72481],{"class":480,"line":2294},[478,72476,57666],{"class":495},[478,72478,51817],{"class":714},[478,72480,51972],{"class":495},[478,72482,1859],{"class":714},[478,72484,72485],{"class":480,"line":2299},[478,72486,2753],{"class":714},[478,72488,72489],{"class":480,"line":2316},[478,72490,2966],{"emptyLinePlaceholder":640},[478,72492,72493,72496],{"class":480,"line":2321},[478,72494,72495],{"class":484},"    .uname",[478,72497,31846],{"class":714},[478,72499,72500,72503],{"class":480,"line":2326},[478,72501,72502],{"class":484},"    .age",[478,72504,31846],{"class":714},[478,72506,72507,72510],{"class":480,"line":2331},[478,72508,72509],{"class":484},"    .salary",[478,72511,16137],{"class":714},[478,72513,72514,72516,72518,72520,72522],{"class":480,"line":2345},[478,72515,55151],{"class":495},[478,72517,51817],{"class":714},[478,72519,1012],{"class":495},[478,72521,51872],{"class":710},[478,72523,1859],{"class":714},[478,72525,72526,72528,72530,72532,72534],{"class":480,"line":2350},[478,72527,55165],{"class":495},[478,72529,51817],{"class":714},[478,72531,1396],{"class":495},[478,72533,51872],{"class":710},[478,72535,1859],{"class":714},[478,72537,72538,72540,72542,72544],{"class":480,"line":3143},[478,72539,62160],{"class":495},[478,72541,51817],{"class":714},[478,72543,55117],{"class":495},[478,72545,1859],{"class":714},[478,72547,72548,72550,72552,72554,72556],{"class":480,"line":3157},[478,72549,62130],{"class":495},[478,72551,51817],{"class":714},[478,72553,1275],{"class":495},[478,72555,51872],{"class":710},[478,72557,1859],{"class":714},[478,72559,72560],{"class":480,"line":3165},[478,72561,2753],{"class":714},[478,72563,72564],{"class":480,"line":3170},[478,72565,2966],{"emptyLinePlaceholder":640},[478,72567,72568,72571],{"class":480,"line":3176},[478,72569,72570],{"class":484},"    .gender",[478,72572,31846],{"class":714},[478,72574,72575,72578],{"class":480,"line":3182},[478,72576,72577],{"class":484},"    .city",[478,72579,16137],{"class":714},[478,72581,72582,72584,72586,72588,72590],{"class":480,"line":3187},[478,72583,55151],{"class":495},[478,72585,51817],{"class":714},[478,72587,1012],{"class":495},[478,72589,51872],{"class":710},[478,72591,1859],{"class":714},[478,72593,72594,72596,72598,72600,72602],{"class":480,"line":8514},[478,72595,55165],{"class":495},[478,72597,51817],{"class":714},[478,72599,1520],{"class":495},[478,72601,51872],{"class":710},[478,72603,1859],{"class":714},[478,72605,72606,72608,72610,72612],{"class":480,"line":8538},[478,72607,62160],{"class":495},[478,72609,51817],{"class":714},[478,72611,55117],{"class":495},[478,72613,1859],{"class":714},[478,72615,72616,72618,72620,72622,72624],{"class":480,"line":8543},[478,72617,62130],{"class":495},[478,72619,51817],{"class":714},[478,72621,1275],{"class":495},[478,72623,51872],{"class":710},[478,72625,1859],{"class":714},[478,72627,72628,72630,72632,72634,72636,72638,72641,72643,72645,72647,72650,72652,72654],{"class":480,"line":8549},[478,72629,62357],{"class":495},[478,72631,51817],{"class":714},[478,72633,193],{"class":495},[478,72635,51872],{"class":710},[478,72637,51901],{"class":495},[478,72639,72640],{"class":495}," rgb",[478,72642,263],{"class":714},[478,72644,2289],{"class":495},[478,72646,13001],{"class":714},[478,72648,72649],{"class":495},"197",[478,72651,13001],{"class":714},[478,72653,72649],{"class":495},[478,72655,3285],{"class":714},[478,72657,72658],{"class":480,"line":8576},[478,72659,2753],{"class":714},[478,72661,72662],{"class":480,"line":8581},[478,72663,2966],{"emptyLinePlaceholder":640},[478,72665,72666,72669],{"class":480,"line":8587},[478,72667,72668],{"class":51680},"    button",[478,72670,16137],{"class":714},[478,72672,72673,72675,72677,72679,72681],{"class":480,"line":8599},[478,72674,55165],{"class":495},[478,72676,51817],{"class":714},[478,72678,1520],{"class":495},[478,72680,51872],{"class":710},[478,72682,1859],{"class":714},[478,72684,72685,72687,72689,72691,72693],{"class":480,"line":8611},[478,72686,55151],{"class":495},[478,72688,51817],{"class":714},[478,72690,1184],{"class":495},[478,72692,51872],{"class":710},[478,72694,1859],{"class":714},[478,72696,72697,72699,72701,72704,72706,72708,72710,72713,72715,72717],{"class":480,"line":8623},[478,72698,55264],{"class":495},[478,72700,51817],{"class":714},[478,72702,72703],{"class":495},"rgb",[478,72705,263],{"class":714},[478,72707,1664],{"class":495},[478,72709,13001],{"class":714},[478,72711,72712],{"class":495},"187",[478,72714,13001],{"class":714},[478,72716,1000],{"class":495},[478,72718,3285],{"class":714},[478,72720,72721,72723,72725,72727],{"class":480,"line":10282},[478,72722,57796],{"class":495},[478,72724,51817],{"class":714},[478,72726,61222],{"class":495},[478,72728,1859],{"class":714},[478,72730,72731,72733,72735,72737],{"class":480,"line":10307},[478,72732,62357],{"class":495},[478,72734,51817],{"class":714},[478,72736,895],{"class":495},[478,72738,1859],{"class":714},[478,72740,72741],{"class":480,"line":10330},[478,72742,2753],{"class":714},[478,72744,72745],{"class":480,"line":10354},[478,72746,2966],{"emptyLinePlaceholder":640},[478,72748,72749,72751,72753],{"class":480,"line":10359},[478,72750,72668],{"class":51680},[478,72752,52068],{"class":51680},[478,72754,16137],{"class":714},[478,72756,72757,72759,72761,72764],{"class":480,"line":10364},[478,72758,55389],{"class":495},[478,72760,51817],{"class":714},[478,72762,72763],{"class":495},"inline-block",[478,72765,1859],{"class":714},[478,72767,72768,72770,72772,72774,72776],{"class":480,"line":10369},[478,72769,55151],{"class":495},[478,72771,51817],{"class":714},[478,72773,1146],{"class":495},[478,72775,51872],{"class":710},[478,72777,1859],{"class":714},[478,72779,72780,72782,72784,72786,72788],{"class":480,"line":10378},[478,72781,55165],{"class":495},[478,72783,51817],{"class":714},[478,72785,1146],{"class":495},[478,72787,51872],{"class":710},[478,72789,1859],{"class":714},[478,72791,72792,72794,72796,72798,72800],{"class":480,"line":10383},[478,72793,57739],{"class":495},[478,72795,51817],{"class":714},[478,72797,1172],{"class":495},[478,72799,51872],{"class":710},[478,72801,1859],{"class":714},[478,72803,72804,72806,72808,72810,72812,72814,72817],{"class":480,"line":10389},[478,72805,62357],{"class":495},[478,72807,51817],{"class":714},[478,72809,193],{"class":495},[478,72811,51872],{"class":710},[478,72813,51901],{"class":495},[478,72815,72816],{"class":495}," #fff",[478,72818,1859],{"class":714},[478,72820,72821,72823,72825,72827,72829],{"class":480,"line":10410},[478,72822,55514],{"class":495},[478,72824,51817],{"class":714},[478,72826,1020],{"class":495},[478,72828,51872],{"class":710},[478,72830,1859],{"class":714},[478,72832,72833,72835,72837,72839,72841],{"class":480,"line":10416},[478,72834,62130],{"class":495},[478,72836,51817],{"class":714},[478,72838,193],{"class":495},[478,72840,51872],{"class":710},[478,72842,1859],{"class":714},[478,72844,72845],{"class":480,"line":10430},[478,72846,2753],{"class":714},[478,72848,72849],{"class":480,"line":10436},[478,72850,2966],{"emptyLinePlaceholder":640},[478,72852,72853,72856],{"class":480,"line":10463},[478,72854,72855],{"class":484},"    .total",[478,72857,16137],{"class":714},[478,72859,72860,72862,72864,72866,72868],{"class":480,"line":10472},[478,72861,55151],{"class":495},[478,72863,51817],{"class":714},[478,72865,62009],{"class":495},[478,72867,51872],{"class":710},[478,72869,1859],{"class":714},[478,72871,72872,72874,72876,72878,72880],{"class":480,"line":10478},[478,72873,55165],{"class":495},[478,72875,51817],{"class":714},[478,72877,1102],{"class":495},[478,72879,51872],{"class":710},[478,72881,1859],{"class":714},[478,72883,72884,72886,72888,72890,72892],{"class":480,"line":10486},[478,72885,57739],{"class":495},[478,72887,51817],{"class":714},[478,72889,1102],{"class":495},[478,72891,51872],{"class":710},[478,72893,1859],{"class":714},[478,72895,72896,72898,72900,72903],{"class":480,"line":10491},[478,72897,57666],{"class":495},[478,72899,51817],{"class":714},[478,72901,72902],{"class":495},"right",[478,72904,1859],{"class":714},[478,72906,72907,72909,72911,72913,72915,72917,72919,72921],{"class":480,"line":17169},[478,72908,55086],{"class":495},[478,72910,51817],{"class":714},[478,72912,1102],{"class":495},[478,72914,51872],{"class":710},[478,72916,51936],{"class":495},[478,72918,2604],{"class":495},[478,72920,51872],{"class":710},[478,72922,1859],{"class":714},[478,72924,72925,72928,72930,72932,72934],{"class":480,"line":17175},[478,72926,72927],{"class":495},"      padding-right",[478,72929,51817],{"class":714},[478,72931,1146],{"class":495},[478,72933,51872],{"class":710},[478,72935,1859],{"class":714},[478,72937,72938,72940,72942,72944,72946],{"class":480,"line":17198},[478,72939,55302],{"class":495},[478,72941,51817],{"class":714},[478,72943,1223],{"class":495},[478,72945,51872],{"class":710},[478,72947,1859],{"class":714},[478,72949,72950,72952,72954,72956,72958,72961,72963,72966,72968,72970],{"class":480,"line":17204},[478,72951,55264],{"class":495},[478,72953,51817],{"class":714},[478,72955,72703],{"class":495},[478,72957,263],{"class":714},[478,72959,72960],{"class":495},"237",[478,72962,13001],{"class":714},[478,72964,72965],{"class":495},"235",[478,72967,13001],{"class":714},[478,72969,72965],{"class":495},[478,72971,3285],{"class":714},[478,72973,72974,72977,72979,72981],{"class":480,"line":17227},[478,72975,72976],{"class":495},"      box-sizing",[478,72978,51817],{"class":714},[478,72980,60885],{"class":495},[478,72982,1859],{"class":714},[478,72984,72985],{"class":480,"line":17241},[478,72986,2753],{"class":714},[478,72988,72989],{"class":480,"line":17261},[478,72990,2966],{"emptyLinePlaceholder":640},[478,72992,72993,72995,72997],{"class":480,"line":17267},[478,72994,72855],{"class":484},[478,72996,52068],{"class":51680},[478,72998,16137],{"class":714},[478,73000,73001,73003,73005,73007],{"class":480,"line":17278},[478,73002,57796],{"class":495},[478,73004,51817],{"class":714},[478,73006,57801],{"class":495},[478,73008,1859],{"class":714},[478,73010,73011],{"class":480,"line":17301},[478,73012,2753],{"class":714},[478,73014,73015],{"class":480,"line":17323},[478,73016,2966],{"emptyLinePlaceholder":640},[478,73018,73019,73021],{"class":480,"line":17328},[478,73020,65403],{"class":51680},[478,73022,16137],{"class":714},[478,73024,73025,73027,73029,73031,73033],{"class":480,"line":17334},[478,73026,55151],{"class":495},[478,73028,51817],{"class":714},[478,73030,62009],{"class":495},[478,73032,51872],{"class":710},[478,73034,1859],{"class":714},[478,73036,73037,73039,73041,73044],{"class":480,"line":17348},[478,73038,55086],{"class":495},[478,73040,51817],{"class":714},[478,73042,73043],{"class":495},"auto",[478,73045,1859],{"class":714},[478,73047,73048,73050,73052,73054],{"class":480,"line":17361},[478,73049,65410],{"class":495},[478,73051,51817],{"class":714},[478,73053,65415],{"class":495},[478,73055,1859],{"class":714},[478,73057,73058],{"class":480,"line":17366},[478,73059,2753],{"class":714},[478,73061,73062],{"class":480,"line":17380},[478,73063,2966],{"emptyLinePlaceholder":640},[478,73065,73066,73068],{"class":480,"line":17385},[478,73067,65495],{"class":51680},[478,73069,16137],{"class":714},[478,73071,73072,73074,73076,73078,73080,73082,73084,73086,73088,73090],{"class":480,"line":17391},[478,73073,55264],{"class":495},[478,73075,51817],{"class":714},[478,73077,72703],{"class":495},[478,73079,263],{"class":714},[478,73081,72960],{"class":495},[478,73083,13001],{"class":714},[478,73085,72965],{"class":495},[478,73087,13001],{"class":714},[478,73089,72965],{"class":495},[478,73091,3285],{"class":714},[478,73093,73094],{"class":480,"line":17396},[478,73095,2753],{"class":714},[478,73097,73098],{"class":480,"line":17410},[478,73099,2966],{"emptyLinePlaceholder":640},[478,73101,73102,73104],{"class":480,"line":17415},[478,73103,65495],{"class":51680},[478,73105,31846],{"class":714},[478,73107,73108,73110],{"class":480,"line":17420},[478,73109,65561],{"class":51680},[478,73111,16137],{"class":714},[478,73113,73114,73116,73118,73120,73122],{"class":480,"line":17434},[478,73115,55165],{"class":495},[478,73117,51817],{"class":714},[478,73119,974],{"class":495},[478,73121,51872],{"class":710},[478,73123,1859],{"class":714},[478,73125,73126,73128,73130,73132],{"class":480,"line":17446},[478,73127,57666],{"class":495},[478,73129,51817],{"class":714},[478,73131,382],{"class":495},[478,73133,1859],{"class":714},[478,73135,73136,73138,73140,73142,73144],{"class":480,"line":17451},[478,73137,55302],{"class":495},[478,73139,51817],{"class":714},[478,73141,1249],{"class":495},[478,73143,51872],{"class":710},[478,73145,1859],{"class":714},[478,73147,73148,73150,73152,73154,73156,73158,73160,73162,73165,73167,73170,73172,73174],{"class":480,"line":17464},[478,73149,62357],{"class":495},[478,73151,51817],{"class":714},[478,73153,193],{"class":495},[478,73155,51872],{"class":710},[478,73157,51901],{"class":495},[478,73159,72640],{"class":495},[478,73161,263],{"class":714},[478,73163,73164],{"class":495},"228",[478,73166,13001],{"class":714},[478,73168,73169],{"class":495},"225",[478,73171,13001],{"class":714},[478,73173,73169],{"class":495},[478,73175,3285],{"class":714},[478,73177,73178,73181,73183,73185,73187],{"class":480,"line":17469},[478,73179,73180],{"class":495},"      padding-left",[478,73182,51817],{"class":714},[478,73184,1020],{"class":495},[478,73186,51872],{"class":710},[478,73188,1859],{"class":714},[478,73190,73191,73193,73195,73197,73200,73202,73204],{"class":480,"line":17474},[478,73192,62240],{"class":495},[478,73194,51817],{"class":714},[478,73196,28501],{"class":495},[478,73198,73199],{"class":495}," linear",[478,73201,62247],{"class":495},[478,73203,1391],{"class":710},[478,73205,1859],{"class":714},[478,73207,73208],{"class":480,"line":17479},[478,73209,2753],{"class":714},[478,73211,73212],{"class":480,"line":17492},[478,73213,2966],{"emptyLinePlaceholder":640},[478,73215,73216,73219,73221,73223],{"class":480,"line":17497},[478,73217,73218],{"class":51680},"    tbody",[478,73220,70524],{"class":51680},[478,73222,61320],{"class":484},[478,73224,16137],{"class":714},[478,73226,73227,73229,73231,73233,73235,73237,73239,73241,73243,73245],{"class":480,"line":33013},[478,73228,55264],{"class":495},[478,73230,51817],{"class":714},[478,73232,72703],{"class":495},[478,73234,263],{"class":714},[478,73236,72960],{"class":495},[478,73238,13001],{"class":714},[478,73240,72965],{"class":495},[478,73242,13001],{"class":714},[478,73244,72965],{"class":495},[478,73246,3285],{"class":714},[478,73248,73249,73251,73253,73255],{"class":480,"line":33019},[478,73250,62405],{"class":495},[478,73252,51817],{"class":714},[478,73254,62410],{"class":495},[478,73256,1859],{"class":714},[478,73258,73259],{"class":480,"line":33025},[478,73260,2753],{"class":714},[478,73262,73263],{"class":480,"line":33031},[478,73264,2966],{"emptyLinePlaceholder":640},[478,73266,73267,73269,73271,73274,73276],{"class":480,"line":33037},[478,73268,73218],{"class":51680},[478,73270,70524],{"class":51680},[478,73272,73273],{"class":51680}," td",[478,73275,1967],{"class":51680},[478,73277,16137],{"class":714},[478,73279,73280,73282,73284,73286],{"class":480,"line":33048},[478,73281,55389],{"class":495},[478,73283,51817],{"class":714},[478,73285,61249],{"class":495},[478,73287,1859],{"class":714},[478,73289,73290,73292,73294,73296,73298],{"class":480,"line":33054},[478,73291,55151],{"class":495},[478,73293,51817],{"class":714},[478,73295,1602],{"class":495},[478,73297,51872],{"class":710},[478,73299,1859],{"class":714},[478,73301,73302,73304,73306,73308,73310],{"class":480,"line":33074},[478,73303,55165],{"class":495},[478,73305,51817],{"class":714},[478,73307,1520],{"class":495},[478,73309,51872],{"class":710},[478,73311,1859],{"class":714},[478,73313,73314,73316,73318,73320,73322],{"class":480,"line":33080},[478,73315,57739],{"class":495},[478,73317,51817],{"class":714},[478,73319,1520],{"class":495},[478,73321,51872],{"class":710},[478,73323,1859],{"class":714},[478,73325,73326,73328,73330,73332,73334],{"class":480,"line":33091},[478,73327,62457],{"class":495},[478,73329,51817],{"class":714},[478,73331,789],{"class":495},[478,73333,51872],{"class":710},[478,73335,1859],{"class":714},[478,73337,73338,73340,73342,73344],{"class":480,"line":33097},[478,73339,57796],{"class":495},[478,73341,51817],{"class":714},[478,73343,61222],{"class":495},[478,73345,1859],{"class":714},[478,73347,73348,73350,73352,73354],{"class":480,"line":33103},[478,73349,57666],{"class":495},[478,73351,51817],{"class":714},[478,73353,51972],{"class":495},[478,73355,1859],{"class":714},[478,73357,73358,73360,73362,73364],{"class":480,"line":33109},[478,73359,64350],{"class":495},[478,73361,51817],{"class":714},[478,73363,55117],{"class":495},[478,73365,1859],{"class":714},[478,73367,73368,73370,73372,73375],{"class":480,"line":33115},[478,73369,55264],{"class":495},[478,73371,51817],{"class":714},[478,73373,73374],{"class":495},"orange",[478,73376,1859],{"class":714},[478,73378,73379,73381,73383,73386,73388],{"class":480,"line":33121},[478,73380,55514],{"class":495},[478,73382,51817],{"class":714},[478,73384,73385],{"class":495},"12.5",[478,73387,51872],{"class":710},[478,73389,1859],{"class":714},[478,73391,73392],{"class":480,"line":33127},[478,73393,2753],{"class":714},[478,73395,73396,73398,73400],{"class":480,"line":33133},[478,73397,52797],{"class":714},[478,73399,617],{"class":51680},[478,73401,51687],{"class":714},[478,73403,73404,73406,73408],{"class":480,"line":33153},[478,73405,52165],{"class":714},[478,73407,51714],{"class":51680},[478,73409,51687],{"class":714},[478,73411,73412],{"class":480,"line":33159},[478,73413,2966],{"emptyLinePlaceholder":640},[478,73415,73416,73418,73420],{"class":480,"line":33175},[478,73417,1605],{"class":714},[478,73419,52180],{"class":51680},[478,73421,51687],{"class":714},[478,73423,73424,73426,73428,73431,73433],{"class":480,"line":33181},[478,73425,52524],{"class":714},[478,73427,14],{"class":51680},[478,73429,73430],{"class":714},">学生就业统计表\u003C\u002F",[478,73432,14],{"class":51680},[478,73434,51687],{"class":714},[478,73436,73437,73439,73441,73443,73445,73447,73449,73451,73453],{"class":480,"line":33195},[478,73438,52524],{"class":714},[478,73440,67005],{"class":51680},[478,73442,53866],{"class":484},[478,73444,759],{"class":714},[478,73446,63044],{"class":488},[478,73448,69450],{"class":484},[478,73450,759],{"class":714},[478,73452,32156],{"class":488},[478,73454,51687],{"class":714},[478,73456,73457,73459,73461,73463,73465,73467,73469,73471,73473,73475,73477,73480,73482,73484,73486],{"class":480,"line":33201},[478,73458,51721],{"class":714},[478,73460,54201],{"class":51680},[478,73462,54204],{"class":484},[478,73464,759],{"class":714},[478,73466,63079],{"class":488},[478,73468,15485],{"class":484},[478,73470,759],{"class":714},[478,73472,69476],{"class":488},[478,73474,61400],{"class":484},[478,73476,759],{"class":714},[478,73478,73479],{"class":488},"\"姓名\"",[478,73481,53866],{"class":484},[478,73483,759],{"class":714},[478,73485,69476],{"class":488},[478,73487,51687],{"class":714},[478,73489,73490,73492,73494,73496,73498,73500,73502,73504,73506,73508,73510,73513,73515,73517,73519],{"class":480,"line":33216},[478,73491,51721],{"class":714},[478,73493,54201],{"class":51680},[478,73495,54204],{"class":484},[478,73497,759],{"class":714},[478,73499,63079],{"class":488},[478,73501,15485],{"class":484},[478,73503,759],{"class":714},[478,73505,69504],{"class":488},[478,73507,61400],{"class":484},[478,73509,759],{"class":714},[478,73511,73512],{"class":488},"\"年龄\"",[478,73514,53866],{"class":484},[478,73516,759],{"class":714},[478,73518,69504],{"class":488},[478,73520,51687],{"class":714},[478,73522,73523,73525,73527,73529,73531,73533,73535,73537,73539,73541,73543,73546,73548,73550,73552],{"class":480,"line":33222},[478,73524,51721],{"class":714},[478,73526,54201],{"class":51680},[478,73528,54204],{"class":484},[478,73530,759],{"class":714},[478,73532,63079],{"class":488},[478,73534,15485],{"class":484},[478,73536,759],{"class":714},[478,73538,69606],{"class":488},[478,73540,61400],{"class":484},[478,73542,759],{"class":714},[478,73544,73545],{"class":488},"\"薪资\"",[478,73547,53866],{"class":484},[478,73549,759],{"class":714},[478,73551,69606],{"class":488},[478,73553,51687],{"class":714},[478,73555,73556,73558,73560,73562,73564,73566,73568,73570,73572,73574,73576,73578],{"class":480,"line":33231},[478,73557,51721],{"class":714},[478,73559,69524],{"class":51680},[478,73561,15485],{"class":484},[478,73563,759],{"class":714},[478,73565,69531],{"class":488},[478,73567,15524],{"class":484},[478,73569,759],{"class":714},[478,73571,8218],{"class":488},[478,73573,53866],{"class":484},[478,73575,759],{"class":714},[478,73577,69531],{"class":488},[478,73579,51687],{"class":714},[478,73581,73582,73584,73586,73588,73590,73592,73594,73596],{"class":480,"line":33237},[478,73583,55614],{"class":714},[478,73585,69546],{"class":51680},[478,73587,67031],{"class":484},[478,73589,759],{"class":714},[478,73591,10527],{"class":488},[478,73593,69555],{"class":714},[478,73595,69546],{"class":51680},[478,73597,51687],{"class":714},[478,73599,73600,73602,73604,73606,73608,73610,73612,73614],{"class":480,"line":33246},[478,73601,55614],{"class":714},[478,73603,69546],{"class":51680},[478,73605,67031],{"class":484},[478,73607,759],{"class":714},[478,73609,10596],{"class":488},[478,73611,69574],{"class":714},[478,73613,69546],{"class":51680},[478,73615,51687],{"class":714},[478,73617,73618,73620,73622],{"class":480,"line":33252},[478,73619,52156],{"class":714},[478,73621,69524],{"class":51680},[478,73623,51687],{"class":714},[478,73625,73626,73628,73630,73632,73634,73636,73638,73640,73642,73644,73646,73648],{"class":480,"line":33258},[478,73627,51721],{"class":714},[478,73629,69524],{"class":51680},[478,73631,15485],{"class":484},[478,73633,759],{"class":714},[478,73635,69628],{"class":488},[478,73637,15524],{"class":484},[478,73639,759],{"class":714},[478,73641,8218],{"class":488},[478,73643,53866],{"class":484},[478,73645,759],{"class":714},[478,73647,69628],{"class":488},[478,73649,51687],{"class":714},[478,73651,73652,73654,73656,73658,73660,73662,73664,73666],{"class":480,"line":33267},[478,73653,55614],{"class":714},[478,73655,69546],{"class":51680},[478,73657,67031],{"class":484},[478,73659,759],{"class":714},[478,73661,69649],{"class":488},[478,73663,69652],{"class":714},[478,73665,69546],{"class":51680},[478,73667,51687],{"class":714},[478,73669,73670,73672,73674,73676,73678,73680,73682,73684],{"class":480,"line":33273},[478,73671,55614],{"class":714},[478,73673,69546],{"class":51680},[478,73675,67031],{"class":484},[478,73677,759],{"class":714},[478,73679,69669],{"class":488},[478,73681,69672],{"class":714},[478,73683,69546],{"class":51680},[478,73685,51687],{"class":714},[478,73687,73688,73690,73692,73694,73696,73698,73700,73702],{"class":480,"line":33284},[478,73689,55614],{"class":714},[478,73691,69546],{"class":51680},[478,73693,67031],{"class":484},[478,73695,759],{"class":714},[478,73697,69689],{"class":488},[478,73699,69692],{"class":714},[478,73701,69546],{"class":51680},[478,73703,51687],{"class":714},[478,73705,73706,73708,73710,73712,73714,73716,73718,73720],{"class":480,"line":33290},[478,73707,55614],{"class":714},[478,73709,69546],{"class":51680},[478,73711,67031],{"class":484},[478,73713,759],{"class":714},[478,73715,69709],{"class":488},[478,73717,69712],{"class":714},[478,73719,69546],{"class":51680},[478,73721,51687],{"class":714},[478,73723,73724,73726,73728,73730,73732,73734,73736,73738],{"class":480,"line":33309},[478,73725,55614],{"class":714},[478,73727,69546],{"class":51680},[478,73729,67031],{"class":484},[478,73731,759],{"class":714},[478,73733,69729],{"class":488},[478,73735,69732],{"class":714},[478,73737,69546],{"class":51680},[478,73739,51687],{"class":714},[478,73741,73742,73744,73746],{"class":480,"line":33315},[478,73743,52156],{"class":714},[478,73745,69524],{"class":51680},[478,73747,51687],{"class":714},[478,73749,73750,73752,73754],{"class":480,"line":33326},[478,73751,51721],{"class":714},[478,73753,54267],{"class":51680},[478,73755,51687],{"class":714},[478,73757,73758,73760,73762,73765,73767,73770,73772],{"class":480,"line":33332},[478,73759,55614],{"class":714},[478,73761,478],{"class":51680},[478,73763,73764],{"class":714},">+\u003C\u002F",[478,73766,478],{"class":51680},[478,73768,73769],{"class":714},">添加\u003C\u002F",[478,73771,54267],{"class":51680},[478,73773,51687],{"class":714},[478,73775,73776,73778,73780],{"class":480,"line":33352},[478,73777,52797],{"class":714},[478,73779,67005],{"class":51680},[478,73781,51687],{"class":714},[478,73783,73784,73786,73788,73790,73792,73794,73797,73799,73802,73804,73807,73809],{"class":480,"line":33368},[478,73785,52524],{"class":714},[478,73787,51991],{"class":51680},[478,73789,53866],{"class":484},[478,73791,759],{"class":714},[478,73793,62960],{"class":488},[478,73795,73796],{"class":714},">共有数据 \u003C",[478,73798,478],{"class":51680},[478,73800,73801],{"class":714},">0\u003C\u002F",[478,73803,478],{"class":51680},[478,73805,73806],{"class":714},"> 条\u003C\u002F",[478,73808,51991],{"class":51680},[478,73810,51687],{"class":714},[478,73812,73813,73815,73817],{"class":480,"line":33374},[478,73814,52524],{"class":714},[478,73816,371],{"class":51680},[478,73818,51687],{"class":714},[478,73820,73821,73823,73825],{"class":480,"line":33388},[478,73822,51721],{"class":714},[478,73824,374],{"class":51680},[478,73826,51687],{"class":714},[478,73828,73829,73831,73833],{"class":480,"line":33394},[478,73830,55614],{"class":714},[478,73832,377],{"class":51680},[478,73834,51687],{"class":714},[478,73836,73837,73839,73841,73844,73846],{"class":480,"line":33400},[478,73838,55682],{"class":714},[478,73840,380],{"class":51680},[478,73842,73843],{"class":714},">ID\u003C\u002F",[478,73845,380],{"class":51680},[478,73847,51687],{"class":714},[478,73849,73850,73852,73854,73856,73858],{"class":480,"line":33411},[478,73851,55682],{"class":714},[478,73853,380],{"class":51680},[478,73855,69835],{"class":714},[478,73857,380],{"class":51680},[478,73859,51687],{"class":714},[478,73861,73862,73864,73866,73868,73870],{"class":480,"line":33417},[478,73863,55682],{"class":714},[478,73865,380],{"class":51680},[478,73867,69848],{"class":714},[478,73869,380],{"class":51680},[478,73871,51687],{"class":714},[478,73873,73874,73876,73878,73880,73882],{"class":480,"line":33423},[478,73875,55682],{"class":714},[478,73877,380],{"class":51680},[478,73879,69861],{"class":714},[478,73881,380],{"class":51680},[478,73883,51687],{"class":714},[478,73885,73886,73888,73890,73892,73894],{"class":480,"line":33433},[478,73887,55682],{"class":714},[478,73889,380],{"class":51680},[478,73891,69874],{"class":714},[478,73893,380],{"class":51680},[478,73895,51687],{"class":714},[478,73897,73898,73900,73902,73904,73906],{"class":480,"line":33439},[478,73899,55682],{"class":714},[478,73901,380],{"class":51680},[478,73903,69887],{"class":714},[478,73905,380],{"class":51680},[478,73907,51687],{"class":714},[478,73909,73910,73912,73914,73917,73919],{"class":480,"line":33450},[478,73911,55682],{"class":714},[478,73913,380],{"class":51680},[478,73915,73916],{"class":714},">录入时间\u003C\u002F",[478,73918,380],{"class":51680},[478,73920,51687],{"class":714},[478,73922,73923,73925,73927,73929,73931],{"class":480,"line":33456},[478,73924,55682],{"class":714},[478,73926,380],{"class":51680},[478,73928,69900],{"class":714},[478,73930,380],{"class":51680},[478,73932,51687],{"class":714},[478,73934,73935,73937,73939],{"class":480,"line":33466},[478,73936,55787],{"class":714},[478,73938,377],{"class":51680},[478,73940,51687],{"class":714},[478,73942,73943,73945,73947],{"class":480,"line":33471},[478,73944,52156],{"class":714},[478,73946,374],{"class":51680},[478,73948,51687],{"class":714},[478,73950,73951,73953,73955],{"class":480,"line":33477},[478,73952,51721],{"class":714},[478,73954,388],{"class":51680},[478,73956,51687],{"class":714},[478,73958,73959],{"class":480,"line":33526},[478,73960,73961],{"class":770},"      \u003C!-- \u003Ctr>\n",[478,73963,73964],{"class":480,"line":33573},[478,73965,73966],{"class":770},"        \u003Ctd>1\u003C\u002Ftd>\n",[478,73968,73969],{"class":480,"line":33578},[478,73970,73966],{"class":770},[478,73972,73973],{"class":480,"line":33584},[478,73974,73966],{"class":770},[478,73976,73977],{"class":480,"line":33603},[478,73978,73966],{"class":770},[478,73980,73981],{"class":480,"line":33609},[478,73982,73966],{"class":770},[478,73984,73985],{"class":480,"line":33629},[478,73986,73966],{"class":770},[478,73988,73989],{"class":480,"line":33635},[478,73990,73966],{"class":770},[478,73992,73993],{"class":480,"line":33641},[478,73994,73995],{"class":770},"        \u003Ctd>\n",[478,73997,73998],{"class":480,"line":33651},[478,73999,74000],{"class":770},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[478,74002,74003],{"class":480,"line":33656},[478,74004,74005],{"class":770},"        \u003C\u002Ftd>\n",[478,74007,74008],{"class":480,"line":33662},[478,74009,74010],{"class":770},"      \u003C\u002Ftr> -->\n",[478,74012,74013,74015,74017],{"class":480,"line":33678},[478,74014,52156],{"class":714},[478,74016,388],{"class":51680},[478,74018,51687],{"class":714},[478,74020,74021,74023,74025],{"class":480,"line":33723},[478,74022,52797],{"class":714},[478,74024,371],{"class":51680},[478,74026,51687],{"class":714},[478,74028,74029,74031,74033],{"class":480,"line":33729},[478,74030,52524],{"class":714},[478,74032,52193],{"class":51680},[478,74034,51687],{"class":714},[478,74036,74037],{"class":480,"line":33735},[478,74038,74039],{"class":770},"    \u002F\u002F const initData = [{\n",[478,74041,74042],{"class":480,"line":33741},[478,74043,74044],{"class":770},"    \u002F\u002F   unameId: 1,\n",[478,74046,74047],{"class":480,"line":33752},[478,74048,74049],{"class":770},"    \u002F\u002F   uname: '华晨宇',\n",[478,74051,74052],{"class":480,"line":33758},[478,74053,74054],{"class":770},"    \u002F\u002F   age: 22,\n",[478,74056,74057],{"class":480,"line":33764},[478,74058,74059],{"class":770},"    \u002F\u002F   salary: 12000,\n",[478,74061,74062],{"class":480,"line":33770},[478,74063,74064],{"class":770},"    \u002F\u002F   gender: '男',\n",[478,74066,74067],{"class":480,"line":33788},[478,74068,74069],{"class":770},"    \u002F\u002F   city: '北京',\n",[478,74071,74072],{"class":480,"line":33802},[478,74073,74074],{"class":770},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[478,74076,74077],{"class":480,"line":33811},[478,74078,74079],{"class":770},"    \u002F\u002F }]\n",[478,74081,74082],{"class":480,"line":33820},[478,74083,74084],{"class":770},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[478,74086,74087],{"class":480,"line":33829},[478,74088,74089],{"class":770},"    \u002F\u002F 1.渲染业务\n",[478,74091,74092],{"class":480,"line":33838},[478,74093,74094],{"class":770},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[478,74096,74097],{"class":480,"line":33844},[478,74098,74099],{"class":770},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[478,74101,74102],{"class":480,"line":33850},[478,74103,74104],{"class":770},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[478,74106,74107],{"class":480,"line":33858},[478,74108,2966],{"emptyLinePlaceholder":640},[478,74110,74111],{"class":480,"line":33863},[478,74112,74113],{"class":770},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[478,74115,74116],{"class":480,"line":33869},[478,74117,74118],{"class":770},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[478,74120,74121,74123,74125,74127],{"class":480,"line":33880},[478,74122,11787],{"class":710},[478,74124,58075],{"class":495},[478,74126,14130],{"class":710},[478,74128,52218],{"class":714},[478,74130,74131,74134,74136],{"class":480,"line":33886},[478,74132,74133],{"class":714},"    console.",[478,74135,58627],{"class":484},[478,74137,52792],{"class":714},[478,74139,74140],{"class":480,"line":33906},[478,74141,2966],{"emptyLinePlaceholder":640},[478,74143,74144],{"class":480,"line":33912},[478,74145,74146],{"class":770},"    \u002F\u002F 时间函数\n",[478,74148,74149,74151,74154],{"class":480,"line":33918},[478,74150,70464],{"class":710},[478,74152,74153],{"class":484}," getTime",[478,74155,11419],{"class":714},[478,74157,74158,74160,74163,74165,74167,74170],{"class":480,"line":33924},[478,74159,58608],{"class":710},[478,74161,74162],{"class":495}," date",[478,74164,14130],{"class":710},[478,74166,12144],{"class":710},[478,74168,74169],{"class":484}," Date",[478,74171,2542],{"class":714},[478,74173,74174,74176,74178,74180,74183,74186,74188,74190,74192,74195,74198,74200,74202,74204,74206,74208,74210,74212],{"class":480,"line":33941},[478,74175,58608],{"class":710},[478,74177,16656],{"class":495},[478,74179,14130],{"class":710},[478,74181,74182],{"class":714}," date.",[478,74184,74185],{"class":484},"getHours",[478,74187,13616],{"class":714},[478,74189,1605],{"class":710},[478,74191,2604],{"class":495},[478,74193,74194],{"class":710}," ?",[478,74196,74197],{"class":488}," '0'",[478,74199,45946],{"class":710},[478,74201,74182],{"class":714},[478,74203,74185],{"class":484},[478,74205,13616],{"class":714},[478,74207,1554],{"class":710},[478,74209,74182],{"class":714},[478,74211,74185],{"class":484},[478,74213,2542],{"class":714},[478,74215,74216,74218,74221,74223,74225,74228,74230,74232,74234,74236,74238,74240,74242,74244,74246,74248,74250,74252],{"class":480,"line":33947},[478,74217,58608],{"class":710},[478,74219,74220],{"class":495}," m",[478,74222,14130],{"class":710},[478,74224,74182],{"class":714},[478,74226,74227],{"class":484},"getMinutes",[478,74229,13616],{"class":714},[478,74231,1605],{"class":710},[478,74233,2604],{"class":495},[478,74235,74194],{"class":710},[478,74237,74197],{"class":488},[478,74239,45946],{"class":710},[478,74241,74182],{"class":714},[478,74243,74227],{"class":484},[478,74245,13616],{"class":714},[478,74247,1554],{"class":710},[478,74249,74182],{"class":714},[478,74251,74227],{"class":484},[478,74253,2542],{"class":714},[478,74255,74256,74258,74260,74262,74264,74267,74269,74271,74273,74275,74277,74279,74281,74283,74285,74287,74289,74291],{"class":480,"line":33953},[478,74257,58608],{"class":710},[478,74259,8994],{"class":495},[478,74261,14130],{"class":710},[478,74263,74182],{"class":714},[478,74265,74266],{"class":484},"getSeconds",[478,74268,13616],{"class":714},[478,74270,1605],{"class":710},[478,74272,2604],{"class":495},[478,74274,74194],{"class":710},[478,74276,74197],{"class":488},[478,74278,45946],{"class":710},[478,74280,74182],{"class":714},[478,74282,74266],{"class":484},[478,74284,13616],{"class":714},[478,74286,1554],{"class":710},[478,74288,74182],{"class":714},[478,74290,74266],{"class":484},[478,74292,2542],{"class":714},[478,74294,74295,74297,74300,74302,74304,74307,74309,74312,74314,74317,74319,74321,74324,74326,74328,74330,74332,74334,74336,74339,74341,74344,74346,74349,74351,74353,74355],{"class":480,"line":33959},[478,74296,58608],{"class":710},[478,74298,74299],{"class":495}," str",[478,74301,14130],{"class":710},[478,74303,63283],{"class":488},[478,74305,74306],{"class":714},"date",[478,74308,1258],{"class":488},[478,74310,74311],{"class":484},"getFullYear",[478,74313,2993],{"class":488},[478,74315,74316],{"class":488},"}\u002F${",[478,74318,74306],{"class":714},[478,74320,1258],{"class":488},[478,74322,74323],{"class":484},"getMonth",[478,74325,13616],{"class":488},[478,74327,1181],{"class":710},[478,74329,25498],{"class":495},[478,74331,74316],{"class":488},[478,74333,74306],{"class":714},[478,74335,1258],{"class":488},[478,74337,74338],{"class":484},"getDate",[478,74340,2993],{"class":488},[478,74342,74343],{"class":488},"} ${",[478,74345,1116],{"class":714},[478,74347,74348],{"class":488},"}:${",[478,74350,1244],{"class":714},[478,74352,74348],{"class":488},[478,74354,1391],{"class":714},[478,74356,74357],{"class":488},"}`\n",[478,74359,74360,74363],{"class":480,"line":33965},[478,74361,74362],{"class":710},"      return",[478,74364,74365],{"class":714}," str\n",[478,74367,74368],{"class":480,"line":33971},[478,74369,2753],{"class":714},[478,74371,74372],{"class":480,"line":33998},[478,74373,74374],{"class":770},"    \u002F\u002F 渲染函数\n",[478,74376,74377,74379,74381,74383,74385,74387,74389,74391],{"class":480,"line":34022},[478,74378,11787],{"class":710},[478,74380,70127],{"class":495},[478,74382,14130],{"class":710},[478,74384,54776],{"class":714},[478,74386,54779],{"class":484},[478,74388,263],{"class":714},[478,74390,70138],{"class":488},[478,74392,720],{"class":714},[478,74394,74395,74397,74399],{"class":480,"line":34028},[478,74396,70464],{"class":710},[478,74398,70467],{"class":484},[478,74400,11419],{"class":714},[478,74402,74403],{"class":480,"line":34034},[478,74404,74405],{"class":770},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[478,74407,74408],{"class":480,"line":34040},[478,74409,74410],{"class":770},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[478,74412,74413,74415,74418,74420,74422,74425,74427,74429,74431,74434,74436,74439],{"class":480,"line":34051},[478,74414,58608],{"class":710},[478,74416,74417],{"class":495}," trArr",[478,74419,14130],{"class":710},[478,74421,52345],{"class":714},[478,74423,74424],{"class":484},"map",[478,74426,263],{"class":714},[478,74428,54829],{"class":710},[478,74430,219],{"class":714},[478,74432,74433],{"class":5782},"ele",[478,74435,13001],{"class":714},[478,74437,74438],{"class":5782},"index",[478,74440,13008],{"class":714},[478,74442,74443,74445],{"class":480,"line":34062},[478,74444,15317],{"class":710},[478,74446,70548],{"class":488},[478,74448,74449],{"class":480,"line":34068},[478,74450,74451],{"class":488},"      \u003Ctr>\n",[478,74453,74454,74456,74458,74460,74463],{"class":480,"line":34085},[478,74455,70553],{"class":488},[478,74457,74433],{"class":714},[478,74459,1258],{"class":488},[478,74461,74462],{"class":714},"unameId",[478,74464,70568],{"class":488},[478,74466,74467,74469,74471,74473,74475],{"class":480,"line":34108},[478,74468,70553],{"class":488},[478,74470,74433],{"class":714},[478,74472,1258],{"class":488},[478,74474,70584],{"class":714},[478,74476,70568],{"class":488},[478,74478,74479,74481,74483,74485,74487],{"class":480,"line":34131},[478,74480,70553],{"class":488},[478,74482,74433],{"class":714},[478,74484,1258],{"class":488},[478,74486,70601],{"class":714},[478,74488,70568],{"class":488},[478,74490,74491,74493,74495,74497,74499],{"class":480,"line":34137},[478,74492,70553],{"class":488},[478,74494,74433],{"class":714},[478,74496,1258],{"class":488},[478,74498,70618],{"class":714},[478,74500,70568],{"class":488},[478,74502,74503,74505,74507,74509,74511],{"class":480,"line":34142},[478,74504,70553],{"class":488},[478,74506,74433],{"class":714},[478,74508,1258],{"class":488},[478,74510,70635],{"class":714},[478,74512,70568],{"class":488},[478,74514,74515,74517,74519,74521,74523],{"class":480,"line":34151},[478,74516,70553],{"class":488},[478,74518,74433],{"class":714},[478,74520,1258],{"class":488},[478,74522,70652],{"class":714},[478,74524,70568],{"class":488},[478,74526,74527,74529,74531,74533,74535],{"class":480,"line":34161},[478,74528,70553],{"class":488},[478,74530,74433],{"class":714},[478,74532,1258],{"class":488},[478,74534,2953],{"class":714},[478,74536,70568],{"class":488},[478,74538,74539],{"class":480,"line":34167},[478,74540,73995],{"class":488},[478,74542,74543,74546,74548],{"class":480,"line":34172},[478,74544,74545],{"class":488},"          \u003Ca href=\"#\" data-id=\"${",[478,74547,74438],{"class":714},[478,74549,74550],{"class":488},"}\">删除\u003C\u002Fa>\n",[478,74552,74553],{"class":480,"line":34178},[478,74554,74005],{"class":488},[478,74556,74557],{"class":480,"line":34191},[478,74558,74559],{"class":488},"      \u003C\u002Ftr>\n",[478,74561,74562],{"class":480,"line":34197},[478,74563,74564],{"class":488},"  `\n",[478,74566,74567],{"class":480,"line":34208},[478,74568,65195],{"class":714},[478,74570,74571,74573,74575],{"class":480,"line":34219},[478,74572,58624],{"class":714},[478,74574,58627],{"class":484},[478,74576,74577],{"class":714},"(trArr)\n",[478,74579,74580],{"class":480,"line":34238},[478,74581,2966],{"emptyLinePlaceholder":640},[478,74583,74584],{"class":480,"line":49898},[478,74585,74586],{"class":770},"      \u002F\u002F (2) 把数组转换为字符串join\n",[478,74588,74589],{"class":480,"line":49903},[478,74590,74591],{"class":770},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[478,74593,74594,74596,74598,74601,74604,74606,74609],{"class":480,"line":49912},[478,74595,70479],{"class":714},[478,74597,759],{"class":710},[478,74599,74600],{"class":714}," trArr.",[478,74602,74603],{"class":484},"join",[478,74605,263],{"class":714},[478,74607,74608],{"class":488},"''",[478,74610,720],{"class":714},[478,74612,74613],{"class":480,"line":49921},[478,74614,74615],{"class":770},"      \u002F\u002F 显示共有几条\n",[478,74617,74618,74620,74622,74624,74627,74630,74632,74634],{"class":480,"line":49926},[478,74619,56151],{"class":714},[478,74621,54779],{"class":484},[478,74623,263],{"class":714},[478,74625,74626],{"class":488},"'.total span'",[478,74628,74629],{"class":714},").innerHTML ",[478,74631,759],{"class":710},[478,74633,52345],{"class":714},[478,74635,56211],{"class":495},[478,74637,74638],{"class":480,"line":49931},[478,74639,2753],{"class":714},[478,74641,74642],{"class":480,"line":49936},[478,74643,74644],{"class":770},"    \u002F\u002F render()\n",[478,74646,74647],{"class":480,"line":49949},[478,74648,2966],{"emptyLinePlaceholder":640},[478,74650,74651],{"class":480,"line":49954},[478,74652,74653],{"class":770},"    \u002F\u002F 获取DOM对象\n",[478,74655,74656,74658,74660,74662,74664,74666,74668,74670],{"class":480,"line":49963},[478,74657,11787],{"class":710},[478,74659,70201],{"class":495},[478,74661,14130],{"class":710},[478,74663,54776],{"class":714},[478,74665,54779],{"class":484},[478,74667,263],{"class":714},[478,74669,70212],{"class":488},[478,74671,720],{"class":714},[478,74673,74674,74676,74678,74680,74682,74684,74686,74688],{"class":480,"line":49972},[478,74675,11787],{"class":710},[478,74677,70028],{"class":495},[478,74679,14130],{"class":710},[478,74681,54776],{"class":714},[478,74683,54779],{"class":484},[478,74685,263],{"class":714},[478,74687,70039],{"class":488},[478,74689,720],{"class":714},[478,74691,74692,74694,74696,74698,74700,74702,74704,74706],{"class":480,"line":49989},[478,74693,11787],{"class":710},[478,74695,16254],{"class":495},[478,74697,14130],{"class":710},[478,74699,54776],{"class":714},[478,74701,54779],{"class":484},[478,74703,263],{"class":714},[478,74705,70058],{"class":488},[478,74707,720],{"class":714},[478,74709,74711,74713,74715,74717,74719,74721,74723,74725],{"class":480,"line":74710},231,[478,74712,11787],{"class":710},[478,74714,70087],{"class":495},[478,74716,14130],{"class":710},[478,74718,54776],{"class":714},[478,74720,54779],{"class":484},[478,74722,263],{"class":714},[478,74724,70098],{"class":488},[478,74726,720],{"class":714},[478,74728,74730,74732,74734,74736,74738,74740,74742,74744],{"class":480,"line":74729},232,[478,74731,11787],{"class":710},[478,74733,70067],{"class":495},[478,74735,14130],{"class":710},[478,74737,54776],{"class":714},[478,74739,54779],{"class":484},[478,74741,263],{"class":714},[478,74743,70078],{"class":488},[478,74745,720],{"class":714},[478,74747,74749,74751,74753,74755,74757,74759,74761,74763],{"class":480,"line":74748},233,[478,74750,11787],{"class":710},[478,74752,70107],{"class":495},[478,74754,14130],{"class":710},[478,74756,54776],{"class":714},[478,74758,54779],{"class":484},[478,74760,263],{"class":714},[478,74762,70118],{"class":488},[478,74764,720],{"class":714},[478,74766,74768],{"class":480,"line":74767},234,[478,74769,2966],{"emptyLinePlaceholder":640},[478,74771,74773],{"class":480,"line":74772},235,[478,74774,74775],{"class":770},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[478,74777,74779,74781,74783,74785,74787,74789,74791,74793,74795],{"class":480,"line":74778},236,[478,74780,70219],{"class":714},[478,74782,58193],{"class":484},[478,74784,263],{"class":714},[478,74786,70226],{"class":488},[478,74788,13001],{"class":714},[478,74790,54829],{"class":710},[478,74792,219],{"class":714},[478,74794,786],{"class":5782},[478,74796,13008],{"class":714},[478,74798,74800],{"class":480,"line":74799},237,[478,74801,74802],{"class":770},"      \u002F\u002F 禁止浏览器跳转\n",[478,74804,74806,74808,74810],{"class":480,"line":74805},238,[478,74807,70246],{"class":714},[478,74809,70249],{"class":484},[478,74811,2542],{"class":714},[478,74813,74815],{"class":480,"line":74814},239,[478,74816,74817],{"class":770},"      \u002F\u002F 非空判断\n",[478,74819,74821],{"class":480,"line":74820},240,[478,74822,74823],{"class":770},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[478,74825,74827],{"class":480,"line":74826},241,[478,74828,74829],{"class":770},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[478,74831,74833,74835,74837,74839,74842,74844,74847,74850,74852,74854],{"class":480,"line":74832},242,[478,74834,54860],{"class":710},[478,74836,219],{"class":714},[478,74838,929],{"class":710},[478,74840,74841],{"class":714},"uname.value ",[478,74843,71737],{"class":710},[478,74845,74846],{"class":710}," !",[478,74848,74849],{"class":714},"age.value ",[478,74851,71737],{"class":710},[478,74853,74846],{"class":710},[478,74855,74856],{"class":714},"salary.value) {\n",[478,74858,74860,74862,74864,74866,74868],{"class":480,"line":74859},243,[478,74861,15317],{"class":710},[478,74863,70320],{"class":484},[478,74865,263],{"class":714},[478,74867,70325],{"class":488},[478,74869,720],{"class":714},[478,74871,74873],{"class":480,"line":74872},244,[478,74874,52778],{"class":714},[478,74876,74878,74880,74882],{"class":480,"line":74877},245,[478,74879,58387],{"class":714},[478,74881,52264],{"class":484},[478,74883,74884],{"class":714},"({\n",[478,74886,74888],{"class":480,"line":74887},246,[478,74889,74890],{"class":770},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[478,74892,74894],{"class":480,"line":74893},247,[478,74895,74896],{"class":770},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[478,74898,74900],{"class":480,"line":74899},248,[478,74901,74902],{"class":770},"        \u002F\u002F 对象的序号应为数组长度+1\n",[478,74904,74906],{"class":480,"line":74905},249,[478,74907,74908],{"class":770},"        \u002F\u002F unameId: arr.length + 1,\n",[478,74910,74912],{"class":480,"line":74911},250,[478,74913,2966],{"emptyLinePlaceholder":640},[478,74915,74917],{"class":480,"line":74916},251,[478,74918,74919],{"class":770},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[478,74921,74923],{"class":480,"line":74922},252,[478,74924,74925],{"class":770},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[478,74927,74929],{"class":480,"line":74928},253,[478,74930,74931],{"class":770},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[478,74933,74935],{"class":480,"line":74934},254,[478,74936,74937],{"class":770},"        \u002F\u002F 0当假看\n",[478,74939,74941,74944,74946,74948,74951,74953,74955,74957,74960,74962,74964,74967,74969],{"class":480,"line":74940},255,[478,74942,74943],{"class":714},"        unameId: arr.",[478,74945,52348],{"class":495},[478,74947,74194],{"class":710},[478,74949,74950],{"class":714}," arr[arr.",[478,74952,52348],{"class":495},[478,74954,52651],{"class":710},[478,74956,25498],{"class":495},[478,74958,74959],{"class":714},"].unameId ",[478,74961,1181],{"class":710},[478,74963,25498],{"class":495},[478,74965,74966],{"class":710}," :",[478,74968,25498],{"class":495},[478,74970,31846],{"class":714},[478,74972,74974],{"class":480,"line":74973},256,[478,74975,70373],{"class":714},[478,74977,74979],{"class":480,"line":74978},257,[478,74980,70378],{"class":714},[478,74982,74984],{"class":480,"line":74983},258,[478,74985,70388],{"class":714},[478,74987,74989],{"class":480,"line":74988},259,[478,74990,70383],{"class":714},[478,74992,74994],{"class":480,"line":74993},260,[478,74995,74996],{"class":714},"        city: city.value,\n",[478,74998,75000],{"class":480,"line":74999},261,[478,75001,75002],{"class":770},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[478,75004,75006],{"class":480,"line":75005},262,[478,75007,75008],{"class":770},"        \u002F\u002F time: new Date().toDateString()\n",[478,75010,75012,75015,75018],{"class":480,"line":75011},263,[478,75013,75014],{"class":714},"        time: ",[478,75016,75017],{"class":484},"getTime",[478,75019,2542],{"class":714},[478,75021,75023],{"class":480,"line":75022},264,[478,75024,65195],{"class":714},[478,75026,75028],{"class":480,"line":75027},265,[478,75029,75030],{"class":770},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[478,75032,75034,75036],{"class":480,"line":75033},266,[478,75035,70448],{"class":484},[478,75037,2542],{"class":714},[478,75039,75041,75043,75045,75047,75049],{"class":480,"line":75040},267,[478,75042,70431],{"class":495},[478,75044,1258],{"class":714},[478,75046,70436],{"class":484},[478,75048,13616],{"class":714},[478,75050,75051],{"class":770},"\u002F\u002F重置表单\n",[478,75053,75055],{"class":480,"line":75054},268,[478,75056,75057],{"class":770},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[478,75059,75061,75064,75066,75068,75071,75073,75075,75077,75079],{"class":480,"line":75060},269,[478,75062,75063],{"class":714},"      localStorage.",[478,75065,72034],{"class":484},[478,75067,263],{"class":714},[478,75069,75070],{"class":488},"'data'",[478,75072,13001],{"class":714},[478,75074,72044],{"class":495},[478,75076,1258],{"class":714},[478,75078,72049],{"class":484},[478,75080,75081],{"class":714},"(arr))\n",[478,75083,75085],{"class":480,"line":75084},270,[478,75086,33841],{"class":714},[478,75088,75090],{"class":480,"line":75089},271,[478,75091,2966],{"emptyLinePlaceholder":640},[478,75093,75095],{"class":480,"line":75094},272,[478,75096,75097],{"class":770},"    \u002F\u002F 3.删除业务\n",[478,75099,75101],{"class":480,"line":75100},273,[478,75102,75103],{"class":770},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[478,75105,75107,75109,75111,75113,75115,75117,75119,75121,75123],{"class":480,"line":75106},274,[478,75108,70721],{"class":714},[478,75110,58193],{"class":484},[478,75112,263],{"class":714},[478,75114,58198],{"class":488},[478,75116,13001],{"class":714},[478,75118,54829],{"class":710},[478,75120,219],{"class":714},[478,75122,786],{"class":5782},[478,75124,13008],{"class":714},[478,75126,75128],{"class":480,"line":75127},275,[478,75129,75130],{"class":770},"      \u002F\u002F 判断是否点击的是删除按钮\n",[478,75132,75134,75136,75138,75140,75142],{"class":480,"line":75133},276,[478,75135,54860],{"class":710},[478,75137,67414],{"class":714},[478,75139,54866],{"class":710},[478,75141,68636],{"class":488},[478,75143,13008],{"class":714},[478,75145,75147],{"class":480,"line":75146},277,[478,75148,75149],{"class":770},"        \u002F\u002F alert(1)\n",[478,75151,75153],{"class":480,"line":75152},278,[478,75154,75155],{"class":770},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[478,75157,75159],{"class":480,"line":75158},279,[478,75160,75161],{"class":770},"        \u002F\u002F console.log(e.target)\n",[478,75163,75165],{"class":480,"line":75164},280,[478,75166,75167],{"class":770},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[478,75169,75171],{"class":480,"line":75170},281,[478,75172,2966],{"emptyLinePlaceholder":640},[478,75174,75176],{"class":480,"line":75175},282,[478,75177,75178],{"class":770},"        \u002F\u002F 确认框，确然是否真的要删除\n",[478,75180,75182],{"class":480,"line":75181},283,[478,75183,75184],{"class":770},"        \u002F\u002F confirm()为确认框\n",[478,75186,75188],{"class":480,"line":75187},284,[478,75189,75190],{"class":770},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[478,75192,75194,75196,75198,75201,75203,75206],{"class":480,"line":75193},285,[478,75195,3063],{"class":710},[478,75197,219],{"class":714},[478,75199,75200],{"class":484},"confirm",[478,75202,263],{"class":714},[478,75204,75205],{"class":488},"'您确定要删除这条数据吗？'",[478,75207,75208],{"class":714},")) {\n",[478,75210,75212,75215,75217,75219,75221],{"class":480,"line":75211},286,[478,75213,75214],{"class":714},"          arr.",[478,75216,58390],{"class":484},[478,75218,70774],{"class":714},[478,75220,193],{"class":495},[478,75222,720],{"class":714},[478,75224,75226],{"class":480,"line":75225},287,[478,75227,75228],{"class":770},"          \u002F\u002F 3.4 重新渲染页面\n",[478,75230,75232,75235],{"class":480,"line":75231},288,[478,75233,75234],{"class":484},"          render",[478,75236,2542],{"class":714},[478,75238,75240],{"class":480,"line":75239},289,[478,75241,75242],{"class":770},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[478,75244,75246,75249,75251,75253,75255,75257,75259,75261,75263],{"class":480,"line":75245},290,[478,75247,75248],{"class":714},"          localStorage.",[478,75250,72034],{"class":484},[478,75252,263],{"class":714},[478,75254,75070],{"class":488},[478,75256,13001],{"class":714},[478,75258,72044],{"class":495},[478,75260,1258],{"class":714},[478,75262,72049],{"class":484},[478,75264,75081],{"class":714},[478,75266,75268],{"class":480,"line":75267},291,[478,75269,3095],{"class":714},[478,75271,75273],{"class":480,"line":75272},292,[478,75274,52778],{"class":714},[478,75276,75278],{"class":480,"line":75277},293,[478,75279,2966],{"emptyLinePlaceholder":640},[478,75281,75283],{"class":480,"line":75282},294,[478,75284,33841],{"class":714},[478,75286,75288],{"class":480,"line":75287},295,[478,75289,2966],{"emptyLinePlaceholder":640},[478,75291,75293,75295,75297],{"class":480,"line":75292},296,[478,75294,52797],{"class":714},[478,75296,52193],{"class":51680},[478,75298,51687],{"class":714},[478,75300,75302,75304,75306],{"class":480,"line":75301},297,[478,75303,52165],{"class":714},[478,75305,52180],{"class":51680},[478,75307,51687],{"class":714},[478,75309,75311],{"class":480,"line":75310},298,[478,75312,2966],{"emptyLinePlaceholder":640},[478,75314,75316,75318,75320],{"class":480,"line":75315},299,[478,75317,52165],{"class":714},[478,75319,51015],{"class":51680},[478,75321,51687],{"class":714},[14,75323,75325],{"id":75324},"_36-正则表达式","3.6 正则表达式",[19,75327,75328],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75330,75331],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75333,75334],{},"正则表达式的作用：",[1702,75336,75337,75344,75350],{},[32,75338,75339,75340,75343],{},"表单验证（ ",[45,75341,75342],{},"匹配"," ）",[32,75345,75346,75347,75343],{},"过滤敏感词（ ",[45,75348,75349],{},"替换",[32,75351,75352,75353,75343],{},"字符串中提取我们想要的部分（ ",[45,75354,75355],{},"提取",[129,75357,75359],{"id":75358},"_361-语法","3.6.1 语法",[19,75361,75362],{},"正则表达式使用步骤：",[29,75364,75365,75368],{},[32,75366,75367],{},"定义规则",[32,75369,75370],{},"查找是否匹配",[19,75372,75373],{},"正则表达式里边不需要写引号",[19,75375,75376],{},[52,75377],{"alt":54,"src":75378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75380,75381],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75383,75384],{},"reg.test(str)",[19,75386,75387],{},[52,75388],{"alt":54,"src":75389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75391,75392],{},[52,75393],{"alt":54,"src":75394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[129,75396,75398],{"id":75397},"_362-元字符","3.6.2 元字符",[29,75400,75401,75404,75407,75410,75417],{},[32,75402,75403],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[32,75405,75406],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[32,75408,75409],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[32,75411,75412,75413],{},"正则验证工具：",[518,75414,75415],{"href":75415,"rel":75416},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[522],[32,75418,75419],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22563,75421,75423],{"id":75422},"_3621-边界符","3.6.2.1 边界符",[19,75425,75426],{},[52,75427],{"alt":54,"src":75428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75430,75431],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75433,75434],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75436,75437],{},"只匹配一次",[19,75439,75440],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22563,75442,75444],{"id":75443},"_3622-量词","3.6.2.2 量词",[19,75446,75447],{},[52,75448],{"alt":54,"src":75449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75451,75452],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22563,75454,75456],{"id":75455},"_3623-元字符","3.6.2.3 元字符",[19,75458,75459],{},[52,75460],{"alt":54,"src":75461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75463,75464],{},"匹配的是a或b或c []只选一个",[19,75466,75467],{},[52,75468],{"alt":54,"src":75469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75471,75472],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75474,75475],{},[52,75476],{"alt":54,"src":75477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75479,75480],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75482,75483],{},[52,75484],{"alt":54,"src":75485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[469,75487,75489],{"className":51013,"code":75488,"language":51015,"meta":54,"style":54},"\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",[475,75490,75491,75501,75515,75519,75527,75541,75561,75573,75581,75585,75593,75601,75606,75637,75664,75692,75696,75701,75729,75760,75765,75770,75801,75833,75865,75869,75874,75905,75935,75965,75969,75974,76005,76036,76066,76096,76100,76105,76138,76142,76147,76178,76209,76213,76218,76249,76279,76310,76314,76319,76351,76382,76413,76440,76471,76503,76536,76567,76598,76630,76661,76669,76677,76681],{"__ignoreMap":54},[478,75492,75493,75495,75497,75499],{"class":480,"line":481},[478,75494,51677],{"class":714},[478,75496,51681],{"class":51680},[478,75498,51684],{"class":484},[478,75500,51687],{"class":714},[478,75502,75503,75505,75507,75509,75511,75513],{"class":480,"line":565},[478,75504,1605],{"class":714},[478,75506,51015],{"class":51680},[478,75508,51696],{"class":484},[478,75510,759],{"class":714},[478,75512,51701],{"class":488},[478,75514,51687],{"class":714},[478,75516,75517],{"class":480,"line":579},[478,75518,2966],{"emptyLinePlaceholder":640},[478,75520,75521,75523,75525],{"class":480,"line":593},[478,75522,1605],{"class":714},[478,75524,51714],{"class":51680},[478,75526,51687],{"class":714},[478,75528,75529,75531,75533,75535,75537,75539],{"class":480,"line":1769},[478,75530,52524],{"class":714},[478,75532,51724],{"class":51680},[478,75534,51727],{"class":484},[478,75536,759],{"class":714},[478,75538,51732],{"class":488},[478,75540,51687],{"class":714},[478,75542,75543,75545,75547,75549,75551,75553,75555,75557,75559],{"class":480,"line":1783},[478,75544,52524],{"class":714},[478,75546,51724],{"class":51680},[478,75548,15485],{"class":484},[478,75550,759],{"class":714},[478,75552,51771],{"class":488},[478,75554,51751],{"class":484},[478,75556,759],{"class":714},[478,75558,51778],{"class":488},[478,75560,51687],{"class":714},[478,75562,75563,75565,75567,75569,75571],{"class":480,"line":1789},[478,75564,52524],{"class":714},[478,75566,51787],{"class":51680},[478,75568,51790],{"class":714},[478,75570,51787],{"class":51680},[478,75572,51687],{"class":714},[478,75574,75575,75577,75579],{"class":480,"line":1880},[478,75576,52165],{"class":714},[478,75578,51714],{"class":51680},[478,75580,51687],{"class":714},[478,75582,75583],{"class":480,"line":1886},[478,75584,2966],{"emptyLinePlaceholder":640},[478,75586,75587,75589,75591],{"class":480,"line":1898},[478,75588,1605],{"class":714},[478,75590,52180],{"class":51680},[478,75592,51687],{"class":714},[478,75594,75595,75597,75599],{"class":480,"line":2180},[478,75596,52524],{"class":714},[478,75598,52193],{"class":51680},[478,75600,51687],{"class":714},[478,75602,75603],{"class":480,"line":2185},[478,75604,75605],{"class":770},"    \u002F\u002F 元字符中\n",[478,75607,75608,75610,75612,75614,75616,75619,75621,75623,75626,75628,75631,75634],{"class":480,"line":2191},[478,75609,74133],{"class":714},[478,75611,58627],{"class":484},[478,75613,263],{"class":714},[478,75615,1284],{"class":488},[478,75617,75618],{"class":48357},"哈",[478,75620,1284],{"class":488},[478,75622,1258],{"class":714},[478,75624,75625],{"class":484},"test",[478,75627,263],{"class":714},[478,75629,75630],{"class":488},"'哈'",[478,75632,75633],{"class":714},"))  ",[478,75635,75636],{"class":770},"\u002F\u002Ftrue\n",[478,75638,75639,75641,75643,75645,75647,75649,75651,75653,75655,75657,75660,75662],{"class":480,"line":2196},[478,75640,74133],{"class":714},[478,75642,58627],{"class":484},[478,75644,263],{"class":714},[478,75646,1284],{"class":488},[478,75648,75618],{"class":48357},[478,75650,1284],{"class":488},[478,75652,1258],{"class":714},[478,75654,75625],{"class":484},[478,75656,263],{"class":714},[478,75658,75659],{"class":488},"'哈哈'",[478,75661,75633],{"class":714},[478,75663,75636],{"class":770},[478,75665,75666,75668,75670,75672,75674,75676,75678,75680,75682,75684,75687,75690],{"class":480,"line":2210},[478,75667,74133],{"class":714},[478,75669,58627],{"class":484},[478,75671,263],{"class":714},[478,75673,1284],{"class":488},[478,75675,75618],{"class":48357},[478,75677,1284],{"class":488},[478,75679,1258],{"class":714},[478,75681,75625],{"class":484},[478,75683,263],{"class":714},[478,75685,75686],{"class":488},"'二哈'",[478,75688,75689],{"class":714},"))   ",[478,75691,75636],{"class":770},[478,75693,75694],{"class":480,"line":2215},[478,75695,2966],{"emptyLinePlaceholder":640},[478,75697,75698],{"class":480,"line":2221},[478,75699,75700],{"class":770},"    \u002F\u002F 1.边界符\n",[478,75702,75703,75705,75707,75709,75711,75713,75715,75717,75719,75721,75723,75725,75727],{"class":480,"line":2241},[478,75704,74133],{"class":714},[478,75706,58627],{"class":484},[478,75708,263],{"class":714},[478,75710,1284],{"class":488},[478,75712,1661],{"class":710},[478,75714,75618],{"class":48357},[478,75716,1284],{"class":488},[478,75718,1258],{"class":714},[478,75720,75625],{"class":484},[478,75722,263],{"class":714},[478,75724,75630],{"class":488},[478,75726,75633],{"class":714},[478,75728,75636],{"class":770},[478,75730,75731,75733,75735,75737,75739,75741,75743,75745,75747,75749,75751,75753,75755,75757],{"class":480,"line":2246},[478,75732,74133],{"class":714},[478,75734,58627],{"class":484},[478,75736,263],{"class":714},[478,75738,1284],{"class":488},[478,75740,1661],{"class":710},[478,75742,75618],{"class":48357},[478,75744,1003],{"class":710},[478,75746,1284],{"class":488},[478,75748,1258],{"class":714},[478,75750,75625],{"class":484},[478,75752,263],{"class":714},[478,75754,75659],{"class":488},[478,75756,75633],{"class":714},[478,75758,75759],{"class":770},"\u002F\u002Ffalse\n",[478,75761,75762],{"class":480,"line":2260},[478,75763,75764],{"class":770},"    \u002F\u002F 2.量词\n",[478,75766,75767],{"class":480,"line":2265},[478,75768,75769],{"class":770},"    \u002F\u002F 量词 * 类似于 >= 0\n",[478,75771,75772,75774,75776,75778,75780,75782,75784,75787,75789,75791,75793,75795,75797,75799],{"class":480,"line":2294},[478,75773,74133],{"class":714},[478,75775,58627],{"class":484},[478,75777,263],{"class":714},[478,75779,1284],{"class":488},[478,75781,1661],{"class":710},[478,75783,75618],{"class":48357},[478,75785,75786],{"class":710},"*$",[478,75788,1284],{"class":488},[478,75790,1258],{"class":714},[478,75792,75625],{"class":484},[478,75794,263],{"class":714},[478,75796,75659],{"class":488},[478,75798,75633],{"class":714},[478,75800,75636],{"class":770},[478,75802,75803,75805,75807,75809,75811,75813,75815,75817,75819,75821,75823,75825,75828,75830],{"class":480,"line":2299},[478,75804,74133],{"class":714},[478,75806,58627],{"class":484},[478,75808,263],{"class":714},[478,75810,1284],{"class":488},[478,75812,1661],{"class":710},[478,75814,75618],{"class":48357},[478,75816,75786],{"class":710},[478,75818,1284],{"class":488},[478,75820,1258],{"class":714},[478,75822,75625],{"class":484},[478,75824,263],{"class":714},[478,75826,75827],{"class":488},"'二哈好傻'",[478,75829,75633],{"class":714},[478,75831,75832],{"class":770},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[478,75834,75835,75837,75839,75841,75843,75845,75847,75849,75851,75853,75855,75857,75860,75862],{"class":480,"line":2316},[478,75836,74133],{"class":714},[478,75838,58627],{"class":484},[478,75840,263],{"class":714},[478,75842,1284],{"class":488},[478,75844,1661],{"class":710},[478,75846,75618],{"class":48357},[478,75848,75786],{"class":710},[478,75850,1284],{"class":488},[478,75852,1258],{"class":714},[478,75854,75625],{"class":484},[478,75856,263],{"class":714},[478,75858,75859],{"class":488},"'哈好哈'",[478,75861,75689],{"class":714},[478,75863,75864],{"class":770},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[478,75866,75867],{"class":480,"line":2321},[478,75868,2966],{"emptyLinePlaceholder":640},[478,75870,75871],{"class":480,"line":2326},[478,75872,75873],{"class":770},"    \u002F\u002F +类似于>=1\n",[478,75875,75876,75878,75880,75882,75884,75886,75888,75891,75893,75895,75897,75899,75901,75903],{"class":480,"line":2331},[478,75877,74133],{"class":714},[478,75879,58627],{"class":484},[478,75881,263],{"class":714},[478,75883,1284],{"class":488},[478,75885,1661],{"class":710},[478,75887,75618],{"class":48357},[478,75889,75890],{"class":710},"+$",[478,75892,1284],{"class":488},[478,75894,1258],{"class":714},[478,75896,75625],{"class":484},[478,75898,263],{"class":714},[478,75900,75659],{"class":488},[478,75902,75633],{"class":714},[478,75904,75636],{"class":770},[478,75906,75907,75909,75911,75913,75915,75917,75919,75921,75923,75925,75927,75929,75931,75933],{"class":480,"line":2345},[478,75908,74133],{"class":714},[478,75910,58627],{"class":484},[478,75912,263],{"class":714},[478,75914,1284],{"class":488},[478,75916,1661],{"class":710},[478,75918,75618],{"class":48357},[478,75920,75890],{"class":710},[478,75922,1284],{"class":488},[478,75924,1258],{"class":714},[478,75926,75625],{"class":484},[478,75928,263],{"class":714},[478,75930,75827],{"class":488},[478,75932,75633],{"class":714},[478,75934,75832],{"class":770},[478,75936,75937,75939,75941,75943,75945,75947,75949,75951,75953,75955,75957,75959,75961,75963],{"class":480,"line":2350},[478,75938,74133],{"class":714},[478,75940,58627],{"class":484},[478,75942,263],{"class":714},[478,75944,1284],{"class":488},[478,75946,1661],{"class":710},[478,75948,75618],{"class":48357},[478,75950,75890],{"class":710},[478,75952,1284],{"class":488},[478,75954,1258],{"class":714},[478,75956,75625],{"class":484},[478,75958,263],{"class":714},[478,75960,75859],{"class":488},[478,75962,75689],{"class":714},[478,75964,75759],{"class":770},[478,75966,75967],{"class":480,"line":3143},[478,75968,2966],{"emptyLinePlaceholder":640},[478,75970,75971],{"class":480,"line":3157},[478,75972,75973],{"class":770},"    \u002F\u002F ?类似于0次或一次\n",[478,75975,75976,75978,75980,75982,75984,75986,75989,75991,75993,75995,75997,75999,76001,76003],{"class":480,"line":3165},[478,75977,74133],{"class":714},[478,75979,58627],{"class":484},[478,75981,263],{"class":714},[478,75983,1284],{"class":488},[478,75985,1661],{"class":710},[478,75987,75988],{"class":48357},"哈？",[478,75990,1003],{"class":710},[478,75992,1284],{"class":488},[478,75994,1258],{"class":714},[478,75996,75625],{"class":484},[478,75998,263],{"class":714},[478,76000,74608],{"class":488},[478,76002,75689],{"class":714},[478,76004,75636],{"class":770},[478,76006,76007,76009,76011,76013,76015,76017,76019,76022,76024,76026,76028,76030,76032,76034],{"class":480,"line":3170},[478,76008,74133],{"class":714},[478,76010,58627],{"class":484},[478,76012,263],{"class":714},[478,76014,1284],{"class":488},[478,76016,1661],{"class":710},[478,76018,75618],{"class":48357},[478,76020,76021],{"class":710},"?$",[478,76023,1284],{"class":488},[478,76025,1258],{"class":714},[478,76027,75625],{"class":484},[478,76029,263],{"class":714},[478,76031,75659],{"class":488},[478,76033,75633],{"class":714},[478,76035,75759],{"class":770},[478,76037,76038,76040,76042,76044,76046,76048,76050,76052,76054,76056,76058,76060,76062,76064],{"class":480,"line":3176},[478,76039,74133],{"class":714},[478,76041,58627],{"class":484},[478,76043,263],{"class":714},[478,76045,1284],{"class":488},[478,76047,1661],{"class":710},[478,76049,75618],{"class":48357},[478,76051,76021],{"class":710},[478,76053,1284],{"class":488},[478,76055,1258],{"class":714},[478,76057,75625],{"class":484},[478,76059,263],{"class":714},[478,76061,75827],{"class":488},[478,76063,75633],{"class":714},[478,76065,75832],{"class":770},[478,76067,76068,76070,76072,76074,76076,76078,76080,76082,76084,76086,76088,76090,76092,76094],{"class":480,"line":3182},[478,76069,74133],{"class":714},[478,76071,58627],{"class":484},[478,76073,263],{"class":714},[478,76075,1284],{"class":488},[478,76077,1661],{"class":710},[478,76079,75618],{"class":48357},[478,76081,76021],{"class":710},[478,76083,1284],{"class":488},[478,76085,1258],{"class":714},[478,76087,75625],{"class":484},[478,76089,263],{"class":714},[478,76091,75859],{"class":488},[478,76093,75633],{"class":714},[478,76095,75759],{"class":770},[478,76097,76098],{"class":480,"line":3187},[478,76099,2966],{"emptyLinePlaceholder":640},[478,76101,76102],{"class":480,"line":8514},[478,76103,76104],{"class":770},"    \u002F\u002F {n}写几，就必须出现几次\n",[478,76106,76107,76109,76111,76113,76115,76117,76119,76122,76124,76126,76128,76130,76133,76136],{"class":480,"line":8538},[478,76108,74133],{"class":714},[478,76110,58627],{"class":484},[478,76112,263],{"class":714},[478,76114,1284],{"class":488},[478,76116,1661],{"class":710},[478,76118,75618],{"class":48357},[478,76120,76121],{"class":710},"{4}$",[478,76123,1284],{"class":488},[478,76125,1258],{"class":714},[478,76127,75625],{"class":484},[478,76129,263],{"class":714},[478,76131,76132],{"class":488},"'哈哈哈哈'",[478,76134,76135],{"class":714},")) ",[478,76137,75636],{"class":770},[478,76139,76140],{"class":480,"line":8543},[478,76141,2966],{"emptyLinePlaceholder":640},[478,76143,76144],{"class":480,"line":8549},[478,76145,76146],{"class":770},"    \u002F\u002F {n,}大于等于n次\n",[478,76148,76149,76151,76153,76155,76157,76159,76161,76164,76166,76168,76170,76172,76174,76176],{"class":480,"line":8576},[478,76150,74133],{"class":714},[478,76152,58627],{"class":484},[478,76154,263],{"class":714},[478,76156,1284],{"class":488},[478,76158,1661],{"class":710},[478,76160,75618],{"class":48357},[478,76162,76163],{"class":710},"{4,}$",[478,76165,1284],{"class":488},[478,76167,1258],{"class":714},[478,76169,75625],{"class":484},[478,76171,263],{"class":714},[478,76173,76132],{"class":488},[478,76175,76135],{"class":714},[478,76177,75636],{"class":770},[478,76179,76180,76182,76184,76186,76188,76190,76192,76194,76196,76198,76200,76202,76205,76207],{"class":480,"line":8581},[478,76181,74133],{"class":714},[478,76183,58627],{"class":484},[478,76185,263],{"class":714},[478,76187,1284],{"class":488},[478,76189,1661],{"class":710},[478,76191,75618],{"class":48357},[478,76193,76163],{"class":710},[478,76195,1284],{"class":488},[478,76197,1258],{"class":714},[478,76199,75625],{"class":484},[478,76201,263],{"class":714},[478,76203,76204],{"class":488},"'哈哈哈哈哈'",[478,76206,76135],{"class":714},[478,76208,75636],{"class":770},[478,76210,76211],{"class":480,"line":8587},[478,76212,2966],{"emptyLinePlaceholder":640},[478,76214,76215],{"class":480,"line":8599},[478,76216,76217],{"class":770},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[478,76219,76220,76222,76224,76226,76228,76230,76232,76235,76237,76239,76241,76243,76245,76247],{"class":480,"line":8611},[478,76221,74133],{"class":714},[478,76223,58627],{"class":484},[478,76225,263],{"class":714},[478,76227,1284],{"class":488},[478,76229,1661],{"class":710},[478,76231,75618],{"class":48357},[478,76233,76234],{"class":710},"{4,6}$",[478,76236,1284],{"class":488},[478,76238,1258],{"class":714},[478,76240,75625],{"class":484},[478,76242,263],{"class":714},[478,76244,76132],{"class":488},[478,76246,76135],{"class":714},[478,76248,75636],{"class":770},[478,76250,76251,76253,76255,76257,76259,76261,76263,76265,76267,76269,76271,76273,76275,76277],{"class":480,"line":8623},[478,76252,74133],{"class":714},[478,76254,58627],{"class":484},[478,76256,263],{"class":714},[478,76258,1284],{"class":488},[478,76260,1661],{"class":710},[478,76262,75618],{"class":48357},[478,76264,76234],{"class":710},[478,76266,1284],{"class":488},[478,76268,1258],{"class":714},[478,76270,75625],{"class":484},[478,76272,263],{"class":714},[478,76274,76204],{"class":488},[478,76276,76135],{"class":714},[478,76278,75636],{"class":770},[478,76280,76281,76283,76285,76287,76289,76291,76293,76295,76297,76299,76301,76303,76306,76308],{"class":480,"line":10282},[478,76282,74133],{"class":714},[478,76284,58627],{"class":484},[478,76286,263],{"class":714},[478,76288,1284],{"class":488},[478,76290,1661],{"class":710},[478,76292,75618],{"class":48357},[478,76294,76234],{"class":710},[478,76296,1284],{"class":488},[478,76298,1258],{"class":714},[478,76300,75625],{"class":484},[478,76302,263],{"class":714},[478,76304,76305],{"class":488},"'哈哈哈哈哈哈哈'",[478,76307,76135],{"class":714},[478,76309,75759],{"class":770},[478,76311,76312],{"class":480,"line":10307},[478,76313,2966],{"emptyLinePlaceholder":640},[478,76315,76316],{"class":480,"line":10330},[478,76317,76318],{"class":770},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[478,76320,76321,76323,76325,76327,76329,76331,76334,76336,76338,76340,76342,76344,76347,76349],{"class":480,"line":10354},[478,76322,74133],{"class":714},[478,76324,58627],{"class":484},[478,76326,263],{"class":714},[478,76328,1284],{"class":488},[478,76330,1661],{"class":710},[478,76332,76333],{"class":495},"[abc]",[478,76335,1003],{"class":710},[478,76337,1284],{"class":488},[478,76339,1258],{"class":714},[478,76341,75625],{"class":484},[478,76343,263],{"class":714},[478,76345,76346],{"class":488},"'a'",[478,76348,75633],{"class":714},[478,76350,75636],{"class":770},[478,76352,76353,76355,76357,76359,76361,76363,76365,76367,76369,76371,76373,76375,76378,76380],{"class":480,"line":10359},[478,76354,74133],{"class":714},[478,76356,58627],{"class":484},[478,76358,263],{"class":714},[478,76360,1284],{"class":488},[478,76362,1661],{"class":710},[478,76364,76333],{"class":495},[478,76366,1003],{"class":710},[478,76368,1284],{"class":488},[478,76370,1258],{"class":714},[478,76372,75625],{"class":484},[478,76374,263],{"class":714},[478,76376,76377],{"class":488},"'b'",[478,76379,75633],{"class":714},[478,76381,75636],{"class":770},[478,76383,76384,76386,76388,76390,76392,76394,76396,76398,76400,76402,76404,76406,76409,76411],{"class":480,"line":10364},[478,76385,74133],{"class":714},[478,76387,58627],{"class":484},[478,76389,263],{"class":714},[478,76391,1284],{"class":488},[478,76393,1661],{"class":710},[478,76395,76333],{"class":495},[478,76397,1003],{"class":710},[478,76399,1284],{"class":488},[478,76401,1258],{"class":714},[478,76403,75625],{"class":484},[478,76405,263],{"class":714},[478,76407,76408],{"class":488},"'c'",[478,76410,75633],{"class":714},[478,76412,75636],{"class":770},[478,76414,76415,76417,76419,76421,76423,76425,76427,76429,76431,76433,76436,76438],{"class":480,"line":10369},[478,76416,74133],{"class":714},[478,76418,58627],{"class":484},[478,76420,263],{"class":714},[478,76422,1284],{"class":488},[478,76424,76333],{"class":495},[478,76426,1284],{"class":488},[478,76428,1258],{"class":714},[478,76430,75625],{"class":484},[478,76432,263],{"class":714},[478,76434,76435],{"class":488},"'ab'",[478,76437,75633],{"class":714},[478,76439,75636],{"class":770},[478,76441,76442,76444,76446,76448,76450,76452,76454,76456,76458,76460,76462,76464,76466,76468],{"class":480,"line":10378},[478,76443,74133],{"class":714},[478,76445,58627],{"class":484},[478,76447,263],{"class":714},[478,76449,1284],{"class":488},[478,76451,1661],{"class":710},[478,76453,76333],{"class":495},[478,76455,1003],{"class":710},[478,76457,1284],{"class":488},[478,76459,1258],{"class":714},[478,76461,75625],{"class":484},[478,76463,263],{"class":714},[478,76465,76435],{"class":488},[478,76467,75633],{"class":714},[478,76469,76470],{"class":770},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[478,76472,76473,76475,76477,76479,76481,76483,76485,76488,76490,76492,76494,76496,76498,76500],{"class":480,"line":10383},[478,76474,74133],{"class":714},[478,76476,58627],{"class":484},[478,76478,263],{"class":714},[478,76480,1284],{"class":488},[478,76482,1661],{"class":710},[478,76484,76333],{"class":495},[478,76486,76487],{"class":710},"{2}$",[478,76489,1284],{"class":488},[478,76491,1258],{"class":714},[478,76493,75625],{"class":484},[478,76495,263],{"class":714},[478,76497,76435],{"class":488},[478,76499,75633],{"class":714},[478,76501,76502],{"class":770},"\u002F\u002Ftrue   可以选两个\n",[478,76504,76505,76507,76509,76511,76513,76515,76518,76520,76522,76524,76526,76528,76531,76533],{"class":480,"line":10389},[478,76506,74133],{"class":714},[478,76508,58627],{"class":484},[478,76510,263],{"class":714},[478,76512,1284],{"class":488},[478,76514,1661],{"class":710},[478,76516,76517],{"class":495},"[a-z]",[478,76519,1003],{"class":710},[478,76521,1284],{"class":488},[478,76523,1258],{"class":714},[478,76525,75625],{"class":484},[478,76527,263],{"class":714},[478,76529,76530],{"class":488},"'p'",[478,76532,75689],{"class":714},[478,76534,76535],{"class":770},"\u002F\u002Ftrue   依然只能选一个\n",[478,76537,76538,76540,76542,76544,76546,76548,76551,76553,76555,76557,76559,76561,76563,76565],{"class":480,"line":10410},[478,76539,74133],{"class":714},[478,76541,58627],{"class":484},[478,76543,263],{"class":714},[478,76545,1284],{"class":488},[478,76547,1661],{"class":710},[478,76549,76550],{"class":495},"[A-Z]",[478,76552,1003],{"class":710},[478,76554,1284],{"class":488},[478,76556,1258],{"class":714},[478,76558,75625],{"class":484},[478,76560,263],{"class":714},[478,76562,76530],{"class":488},[478,76564,75689],{"class":714},[478,76566,75759],{"class":770},[478,76568,76569,76571,76573,76575,76577,76579,76581,76583,76585,76587,76589,76591,76594,76596],{"class":480,"line":10416},[478,76570,74133],{"class":714},[478,76572,58627],{"class":484},[478,76574,263],{"class":714},[478,76576,1284],{"class":488},[478,76578,1661],{"class":710},[478,76580,76550],{"class":495},[478,76582,1003],{"class":710},[478,76584,1284],{"class":488},[478,76586,1258],{"class":714},[478,76588,75625],{"class":484},[478,76590,263],{"class":714},[478,76592,76593],{"class":488},"'P'",[478,76595,75689],{"class":714},[478,76597,75636],{"class":770},[478,76599,76600,76602,76604,76606,76608,76610,76613,76615,76617,76619,76621,76623,76626,76628],{"class":480,"line":10430},[478,76601,74133],{"class":714},[478,76603,58627],{"class":484},[478,76605,263],{"class":714},[478,76607,1284],{"class":488},[478,76609,1661],{"class":710},[478,76611,76612],{"class":495},"[0-9]",[478,76614,1003],{"class":710},[478,76616,1284],{"class":488},[478,76618,1258],{"class":714},[478,76620,75625],{"class":484},[478,76622,263],{"class":714},[478,76624,76625],{"class":488},"'0'",[478,76627,75689],{"class":714},[478,76629,75636],{"class":770},[478,76631,76632,76634,76636,76638,76640,76642,76645,76647,76649,76651,76653,76655,76657,76659],{"class":480,"line":10436},[478,76633,74133],{"class":714},[478,76635,58627],{"class":484},[478,76637,263],{"class":714},[478,76639,1284],{"class":488},[478,76641,1661],{"class":710},[478,76643,76644],{"class":495},"[a-zA-Z0-9]",[478,76646,1003],{"class":710},[478,76648,1284],{"class":488},[478,76650,1258],{"class":714},[478,76652,75625],{"class":484},[478,76654,263],{"class":714},[478,76656,76530],{"class":488},[478,76658,75633],{"class":714},[478,76660,75636],{"class":770},[478,76662,76663,76665,76667],{"class":480,"line":10463},[478,76664,52797],{"class":714},[478,76666,52193],{"class":51680},[478,76668,51687],{"class":714},[478,76670,76671,76673,76675],{"class":480,"line":10472},[478,76672,52165],{"class":714},[478,76674,52180],{"class":51680},[478,76676,51687],{"class":714},[478,76678,76679],{"class":480,"line":10478},[478,76680,2966],{"emptyLinePlaceholder":640},[478,76682,76683,76685,76687],{"class":480,"line":10486},[478,76684,52165],{"class":714},[478,76686,51015],{"class":51680},[478,76688,51687],{"class":714},[22563,76690,76692],{"id":76691},"_3624-修饰符","3.6.2.4 修饰符",[19,76694,76695],{},[52,76696],{"alt":54,"src":76697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76699,76700],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76702,76703],{},[52,76704],{"alt":54,"src":76705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[469,76707,76709],{"className":51013,"code":76708,"language":51015,"meta":54,"style":54},"\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",[475,76710,76711,76721,76735,76743,76757,76777,76789,76797,76805,76813,76845,76876,76881,76913,76924,76957,76966,76974,76982],{"__ignoreMap":54},[478,76712,76713,76715,76717,76719],{"class":480,"line":481},[478,76714,51677],{"class":714},[478,76716,51681],{"class":51680},[478,76718,51684],{"class":484},[478,76720,51687],{"class":714},[478,76722,76723,76725,76727,76729,76731,76733],{"class":480,"line":565},[478,76724,1605],{"class":714},[478,76726,51015],{"class":51680},[478,76728,51696],{"class":484},[478,76730,759],{"class":714},[478,76732,51701],{"class":488},[478,76734,51687],{"class":714},[478,76736,76737,76739,76741],{"class":480,"line":579},[478,76738,1605],{"class":714},[478,76740,51714],{"class":51680},[478,76742,51687],{"class":714},[478,76744,76745,76747,76749,76751,76753,76755],{"class":480,"line":593},[478,76746,52524],{"class":714},[478,76748,51724],{"class":51680},[478,76750,51727],{"class":484},[478,76752,759],{"class":714},[478,76754,51732],{"class":488},[478,76756,51687],{"class":714},[478,76758,76759,76761,76763,76765,76767,76769,76771,76773,76775],{"class":480,"line":1769},[478,76760,52524],{"class":714},[478,76762,51724],{"class":51680},[478,76764,15485],{"class":484},[478,76766,759],{"class":714},[478,76768,51771],{"class":488},[478,76770,51751],{"class":484},[478,76772,759],{"class":714},[478,76774,51778],{"class":488},[478,76776,51687],{"class":714},[478,76778,76779,76781,76783,76785,76787],{"class":480,"line":1783},[478,76780,52524],{"class":714},[478,76782,51787],{"class":51680},[478,76784,51790],{"class":714},[478,76786,51787],{"class":51680},[478,76788,51687],{"class":714},[478,76790,76791,76793,76795],{"class":480,"line":1789},[478,76792,52165],{"class":714},[478,76794,51714],{"class":51680},[478,76796,51687],{"class":714},[478,76798,76799,76801,76803],{"class":480,"line":1880},[478,76800,1605],{"class":714},[478,76802,52180],{"class":51680},[478,76804,51687],{"class":714},[478,76806,76807,76809,76811],{"class":480,"line":1886},[478,76808,52524],{"class":714},[478,76810,52193],{"class":51680},[478,76812,51687],{"class":714},[478,76814,76815,76817,76819,76821,76823,76825,76828,76830,76832,76834,76836,76838,76841,76843],{"class":480,"line":1898},[478,76816,74133],{"class":714},[478,76818,58627],{"class":484},[478,76820,263],{"class":714},[478,76822,1284],{"class":488},[478,76824,1661],{"class":710},[478,76826,76827],{"class":48357},"java",[478,76829,1003],{"class":710},[478,76831,1284],{"class":488},[478,76833,1258],{"class":714},[478,76835,75625],{"class":484},[478,76837,263],{"class":714},[478,76839,76840],{"class":488},"'java'",[478,76842,76135],{"class":714},[478,76844,75636],{"class":770},[478,76846,76847,76849,76851,76853,76855,76857,76859,76861,76863,76865,76867,76869,76872,76874],{"class":480,"line":2180},[478,76848,74133],{"class":714},[478,76850,58627],{"class":484},[478,76852,263],{"class":714},[478,76854,1284],{"class":488},[478,76856,1661],{"class":710},[478,76858,76827],{"class":48357},[478,76860,1003],{"class":710},[478,76862,1284],{"class":488},[478,76864,1258],{"class":714},[478,76866,75625],{"class":484},[478,76868,263],{"class":714},[478,76870,76871],{"class":488},"'Java'",[478,76873,76135],{"class":714},[478,76875,75759],{"class":770},[478,76877,76878],{"class":480,"line":2185},[478,76879,76880],{"class":770},"    \u002F\u002F 不区分大小写、\n",[478,76882,76883,76885,76887,76889,76891,76893,76895,76897,76899,76901,76903,76905,76907,76909,76911],{"class":480,"line":2191},[478,76884,74133],{"class":714},[478,76886,58627],{"class":484},[478,76888,263],{"class":714},[478,76890,1284],{"class":488},[478,76892,1661],{"class":710},[478,76894,76827],{"class":48357},[478,76896,1003],{"class":710},[478,76898,1284],{"class":488},[478,76900,1141],{"class":710},[478,76902,1258],{"class":714},[478,76904,75625],{"class":484},[478,76906,263],{"class":714},[478,76908,76871],{"class":488},[478,76910,76135],{"class":714},[478,76912,75636],{"class":770},[478,76914,76915,76917,76919,76921],{"class":480,"line":2196},[478,76916,11787],{"class":710},[478,76918,74299],{"class":495},[478,76920,14130],{"class":710},[478,76922,76923],{"class":488}," 'java是一门编程语言，学完java工资很高'\n",[478,76925,76926,76928,76931,76933,76936,76939,76941,76943,76945,76947,76950,76952,76955],{"class":480,"line":2210},[478,76927,11787],{"class":710},[478,76929,76930],{"class":495}," result",[478,76932,14130],{"class":710},[478,76934,76935],{"class":714}," str.",[478,76937,76938],{"class":484},"replace",[478,76940,263],{"class":714},[478,76942,1284],{"class":488},[478,76944,76827],{"class":48357},[478,76946,1284],{"class":488},[478,76948,76949],{"class":710},"ig",[478,76951,13001],{"class":714},[478,76953,76954],{"class":488},"'前端'",[478,76956,720],{"class":714},[478,76958,76959,76961,76963],{"class":480,"line":2215},[478,76960,74133],{"class":714},[478,76962,58627],{"class":484},[478,76964,76965],{"class":714},"(result)\n",[478,76967,76968,76970,76972],{"class":480,"line":2221},[478,76969,52797],{"class":714},[478,76971,52193],{"class":51680},[478,76973,51687],{"class":714},[478,76975,76976,76978,76980],{"class":480,"line":2241},[478,76977,52165],{"class":714},[478,76979,52180],{"class":51680},[478,76981,51687],{"class":714},[478,76983,76984,76986,76988],{"class":480,"line":2246},[478,76985,52165],{"class":714},[478,76987,51015],{"class":51680},[478,76989,51687],{"class":714},[617,76991,76992],{},"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":54,"searchDepth":565,"depth":565,"links":76994},[76995,77005,77017,77034,77041,77049],{"id":53740,"depth":565,"text":53741,"children":76996},[76997,76998,76999,77000,77001,77002,77003,77004],{"id":53744,"depth":579,"text":53745},{"id":53777,"depth":579,"text":53778},{"id":53816,"depth":579,"text":53817},{"id":53974,"depth":579,"text":53975},{"id":54022,"depth":579,"text":54023},{"id":54159,"depth":579,"text":54160},{"id":54481,"depth":579,"text":54482},{"id":57469,"depth":579,"text":57470},{"id":57497,"depth":565,"text":57498,"children":77006},[77007,77008,77009,77010,77011,77012,77013,77014,77015,77016],{"id":57501,"depth":579,"text":57502},{"id":57524,"depth":579,"text":57525},{"id":58439,"depth":579,"text":58440},{"id":59129,"depth":579,"text":59130},{"id":59411,"depth":579,"text":59412},{"id":63572,"depth":579,"text":63573},{"id":63742,"depth":579,"text":63743},{"id":63870,"depth":579,"text":63871},{"id":63895,"depth":579,"text":63896},{"id":65284,"depth":579,"text":65285},{"id":66437,"depth":565,"text":66438,"children":77018},[77019,77020,77021,77022,77023,77024,77025,77026,77027,77028,77029,77030,77031,77032,77033],{"id":66441,"depth":579,"text":66442},{"id":67095,"depth":579,"text":67096},{"id":68790,"depth":579,"text":68791},{"id":68831,"depth":579,"text":68832},{"id":68873,"depth":579,"text":68874},{"id":68887,"depth":579,"text":68888},{"id":68936,"depth":579,"text":68937},{"id":68948,"depth":579,"text":68949},{"id":68963,"depth":579,"text":68964},{"id":68999,"depth":579,"text":69000},{"id":69080,"depth":579,"text":69081},{"id":69208,"depth":579,"text":69209},{"id":69220,"depth":579,"text":69221},{"id":69239,"depth":579,"text":69240},{"id":71350,"depth":579,"text":71351},{"id":71369,"depth":565,"text":71370,"children":77035},[77036,77037,77038,77039,77040],{"id":71390,"depth":579,"text":71391},{"id":71410,"depth":579,"text":71411},{"id":71459,"depth":579,"text":71460},{"id":71584,"depth":579,"text":71585},{"id":71765,"depth":579,"text":71766},{"id":71783,"depth":565,"text":71784,"children":77042},[77043,77044,77045,77046,77047,77048],{"id":71798,"depth":579,"text":71799},{"id":71857,"depth":579,"text":71858},{"id":71881,"depth":579,"text":71882},{"id":72201,"depth":579,"text":72202},{"id":72233,"depth":579,"text":72234},{"id":72256,"depth":579,"text":72257},{"id":75324,"depth":565,"text":75325,"children":77050},[77051,77052],{"id":75358,"depth":579,"text":75359},{"id":75397,"depth":579,"text":75398},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53712,"description":23942},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77059,"title":77060,"body":77061,"description":23942,"extension":638,"meta":93198,"navigation":640,"path":93199,"seo":93200,"stem":93201,"__hash__":93202},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77062,"toc":93134},[77063,77066,77069,77073,77077,77082,77087,77098,77102,77107,77110,77114,77117,77122,77126,77130,77133,77138,77141,77145,77148,77156,77159,77163,77168,77173,77176,77180,77185,77190,77193,77197,77202,77205,77210,77213,77218,77221,77226,77231,77234,77237,77241,77246,77251,77254,77258,77262,77265,77268,77271,77275,77279,77284,77289,77292,77296,77301,77306,77309,77312,77315,77318,77321,77324,77327,77330,77333,77338,77342,77347,77352,77355,77358,77361,77364,77367,77370,77373,77376,77380,77384,77387,77390,77393,77398,77400,77403,77406,77409,77412,77415,77418,77421,77424,77427,77430,77433,77436,77439,77444,77449,77454,77457,77461,77464,77469,77473,77475,77486,77491,77592,77595,77598,77601,77604,77607,77610,77613,77616,77618,77621,77624,77627,77630,77633,77635,77638,77641,77644,77647,77650,77653,77655,77658,77660,77662,77665,77669,77673,77676,77679,77682,77685,77688,77691,77694,77697,77700,77705,77825,77828,77831,77836,77839,77842,77845,77848,77853,77856,77859,77862,77865,77870,77873,77973,78038,78112,78116,78119,78122,78126,78129,78143,78172,78175,78178,78181,78184,78187,78190,78193,78195,78198,78201,78204,78207,78211,78216,78220,78225,78300,78303,78486,78489,78492,78495,78498,78501,78503,78506,78509,78512,78515,78518,78521,78523,78527,78530,78535,78538,78541,78544,78547,78549,78554,78557,78560,78563,78566,78568,78573,78576,78579,78581,78583,78586,78590,78593,78596,78601,78604,78607,78610,78660,78665,78669,78674,78677,78746,78749,78758,78762,78767,78770,78773,78781,78784,78801,80603,80607,80611,80616,80619,80623,80629,80635,80787,80792,80797,80800,80803,80806,80809,80812,80815,80818,80821,80824,80827,80830,80833,80838,80842,80845,80856,80860,80865,80868,80871,80874,80877,80880,80882,80885,80888,80891,80894,80896,80913,80916,80920,80923,80928,80933,80936,80939,80943,80946,80949,80958,80961,80965,80968,80973,80978,81045,81049,81052,81055,81060,81065,81151,81156,81160,81163,81166,81181,81184,81189,81193,81198,81307,81310,81321,81471,81475,81480,81589,81593,81598,81603,81608,81611,81618,81638,81674,81838,81843,81846,81851,81858,81861,81864,81867,81926,81982,82038,82042,82047,82362,82365,82369,82372,82377,82486,82491,82495,82500,82504,82575,82579,82581,82584,82587,82625,82901,82905,82922,82988,83022,83026,83029,83034,83063,83070,83079,83084,83099,83104,83113,83116,83253,83257,83319,83323,83328,83573,83577,83582,83585,83588,83591,83594,83598,83603,85184,85188,85192,85198,85201,85206,85210,85213,85218,85221,85232,85236,85241,85245,85250,85255,85258,85263,85267,85271,85274,85279,85284,85287,85290,85293,85415,85420,85522,85525,85528,85532,85537,85709,85714,85718,85721,85726,85792,85797,85800,85931,85934,85939,85942,85945,86036,86041,86044,86047,86050,86053,86058,86063,86066,86071,86076,86081,86085,86088,86091,86096,86101,86106,86111,86165,86168,86171,86176,86179,86182,86187,86192,86197,86201,86206,86220,86225,86228,86233,86237,86242,86247,86252,86257,86262,86267,86272,86277,86280,86284,86289,86292,86295,86298,86303,86308,86311,86314,86318,86321,86324,86329,86334,86339,86344,86347,86352,86357,86418,86423,86426,86431,87672,87677,87681,87685,87690,87693,87698,87703,87706,87711,87713,87718,87722,87725,87728,87739,87743,87748,87753,87808,87813,87818,87823,88034,88039,88043,88048,88051,88053,88056,88059,88506,88511,88518,88524,88527,88530,88794,88799,88803,89068,89073,89077,89082,89087,89092,89097,89428,89431,89436,89441,89444,89448,89452,89457,89462,89467,89472,89477,89482,89486,89489,89494,89499,89502,89576,89581,89586,89591,89593,89596,89966,89971,89976,89981,89984,89987,90089,90094,90099,90202,90206,90211,90215,90219,90224,90229,90232,90237,90240,90243,90636,90641,90644,90647,90650,90653,91173,91177,91182,91187,91192,91195,91200,91203,91206,91588,91593,91595,91597,91600,91603,92115,92119,92180,92183,92186,92189,92193,92196,92201,92206,93131],[10,77064,77060],{"id":77065},"_4js进阶",[19,77067,77068],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77070,77072],{"id":77071},"_41-作用域","4.1 作用域",[129,77074,77076],{"id":77075},"_411-局部作用域","4.1.1 局部作用域",[19,77078,77079],{},[52,77080],{"alt":54,"src":77081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77083,77084],{},[52,77085],{"alt":54,"src":77086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1702,77088,77089,77092,77095],{},[32,77090,77091],{},"函数作用域在函数内部",[32,77093,77094],{},"块级作用域在{}",[32,77096,77097],{},"对象的那个{}不是作用域，不是块作用域",[129,77099,77101],{"id":77100},"_412-全局作用域","4.1.2 全局作用域",[19,77103,77104],{},[52,77105],{"alt":54,"src":77106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77108,77109],{},"window.a=10不要这样写",[129,77111,77113],{"id":77112},"_413-作用域链","4.1.3 作用域链",[19,77115,77116],{},"变量查找机制",[19,77118,77119],{},[52,77120],{"alt":54,"src":77121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77123,77125],{"id":77124},"_42-垃圾回收机制","4.2 垃圾回收机制",[129,77127,77129],{"id":77128},"_421-大体介绍","4.2.1 大体介绍",[19,77131,77132],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77134,77135],{},[52,77136],{"alt":54,"src":77137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77139,77140],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[129,77142,77144],{"id":77143},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77146,77147],{},"堆栈空间分配区别：",[29,77149,77150,77153],{},[32,77151,77152],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[32,77154,77155],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77157,77158],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22563,77160,77162],{"id":77161},"_4221-引用计数","4.2.2.1 引用计数",[19,77164,77165],{},[52,77166],{"alt":54,"src":77167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77169,77170],{},[52,77171],{"alt":54,"src":77172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77174,77175],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22563,77177,77179],{"id":77178},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77181,77182],{},[52,77183],{"alt":54,"src":77184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77186,77187],{},[52,77188],{"alt":54,"src":77189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77191,77192],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77194,77196],{"id":77195},"_43-闭包","4.3 闭包",[19,77198,77199],{},[52,77200],{"alt":54,"src":77201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77203,77204],{},"闭包：内层函数+外层函数的变量",[19,77206,77207],{},[52,77208],{"alt":54,"src":77209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77211,77212],{},"closure就是闭包",[19,77214,77215],{},[52,77216],{"alt":54,"src":77217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77219,77220],{},"内层函数必须包含外层函数的变量才是闭包",[19,77222,77223],{},[52,77224],{"alt":54,"src":77225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77227,77228],{},[52,77229],{"alt":54,"src":77230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77232,77233],{},"闭包可能会引起内存泄漏",[19,77235,77236],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77238,77240],{"id":77239},"_44-变量提升","4.4 变量提升",[19,77242,77243],{},[52,77244],{"alt":54,"src":77245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77247,77248],{},[52,77249],{"alt":54,"src":77250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77252,77253],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77255,77257],{"id":77256},"_45-函数进阶","4.5 函数进阶",[129,77259,77261],{"id":77260},"_451-函数提升","4.5.1 函数提升",[19,77263,77264],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77266,77267],{},"只提升函数声明，不提升函数调用",[52193,77269,77270],{},"\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",[129,77272,77274],{"id":77273},"_452-函数参数","4.5.2 函数参数",[22563,77276,77278],{"id":77277},"_4521-动态参数","4.5.2.1 动态参数",[19,77280,77281],{},[52,77282],{"alt":54,"src":77283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77285,77286],{},[52,77287],{"alt":54,"src":77288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77290,77291],{},"箭头函数里边没有arguments",[22563,77293,77295],{"id":77294},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77297,77298],{},[52,77299],{"alt":54,"src":77300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77302,77303],{},[52,77304],{"alt":54,"src":77305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77307,77308],{},"剩余参数使用的时候不需要写...",[19,77310,77311],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77313,77314],{},"  function getSum(a,b,...arr) {",[19,77316,77317],{},"  console.log(11)",[19,77319,77320],{},"  }",[19,77322,77323],{},"  getSum(1,2,3,4)",[19,77325,77326],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77328,77329],{},"  getSum(1,2)",[19,77331,77332],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77334,77335],{},[52,77336],{"alt":54,"src":77337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22563,77339,77341],{"id":77340},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77343,77344],{},[52,77345],{"alt":54,"src":77346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77348,77349],{},[52,77350],{"alt":54,"src":77351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77353,77354],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77356,77357],{},"展开运算符可以用于数组之间的合并：",[19,77359,77360],{},"const arr1 = [1, 2, 3]",[19,77362,77363],{},"const arr2 = [3, 4, 5]",[19,77365,77366],{},"const arr = [...arr1, ...arr2]",[19,77368,77369],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77371,77372],{},"剩余参数：函数参数使用，得到真数组",[19,77374,77375],{},"展开运算符：数组中使用，数组展开",[129,77377,77379],{"id":77378},"_453-箭头函数","4.5.3 箭头函数",[22563,77381,77383],{"id":77382},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77385,77386],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77388,77389],{},"它不是万能的！！！",[19,77391,77392],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77394,77395],{},[52,77396],{"alt":54,"src":77397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77399,743],{},[19,77401,77402],{},"① 只有一个形参的时候，可以省略小括号：",[19,77404,77405],{},"const fn=x=>{console.log(x)}",[19,77407,77408],{},"② 只有一行代码时可以省略大括号：",[19,77410,77411],{},"const fn=x=>console.log(11)",[19,77413,77414],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77416,77417],{},"const fn=x=>x+x",[19,77419,77420],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77422,77423],{},"⑤ 阻止表单默认提交：",[19,77425,77426],{},"const form = document.querySelector('form')",[19,77428,77429],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77431,77432],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77434,77435],{},"const fn=uname=>({uname:uname})",[19,77437,77438],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77440,77441],{},[52,77442],{"alt":54,"src":77443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77445,77446],{},[52,77447],{"alt":54,"src":77448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77450,77451],{},[52,77452],{"alt":54,"src":77453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77455,77456],{},"一定不要忘记用()，有()就理解为自带return",[22563,77458,77460],{"id":77459},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77462,77463],{},"箭头函数是没有动态参数的arguments",[19,77465,77466],{},[52,77467],{"alt":54,"src":77468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22563,77470,77472],{"id":77471},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77474,11898],{},[29,77476,77477,77480,77483],{},[32,77478,77479],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[32,77481,77482],{},"事件回调函数使用箭头函数时，this 为全局的 window",[32,77484,77485],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77487,77488],{},[52,77489],{"alt":54,"src":77490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[469,77492,77494],{"className":53447,"code":77493,"language":53449,"meta":54,"style":54},"  \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",[475,77495,77496,77504,77509,77514,77519,77524,77529,77533,77538,77542,77546,77551,77556,77561,77565,77569,77574,77579,77584],{"__ignoreMap":54},[478,77497,77498,77500,77502],{"class":480,"line":481},[478,77499,52524],{"class":714},[478,77501,52193],{"class":51680},[478,77503,51687],{"class":714},[478,77505,77506],{"class":480,"line":565},[478,77507,77508],{"class":714},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[478,77510,77511],{"class":480,"line":579},[478,77512,77513],{"class":714},"    console.log(this) \u002F\u002F指向window\n",[478,77515,77516],{"class":480,"line":593},[478,77517,77518],{"class":714},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[478,77520,77521],{"class":480,"line":1769},[478,77522,77523],{"class":714},"    function fn() {\n",[478,77525,77526],{"class":480,"line":1783},[478,77527,77528],{"class":714},"      console.log(this)  \u002F\u002F指向window\n",[478,77530,77531],{"class":480,"line":1789},[478,77532,2753],{"class":714},[478,77534,77535],{"class":480,"line":1880},[478,77536,77537],{"class":714},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[478,77539,77540],{"class":480,"line":1886},[478,77541,2966],{"emptyLinePlaceholder":640},[478,77543,77544],{"class":480,"line":1898},[478,77545,71903],{"class":714},[478,77547,77548],{"class":480,"line":2180},[478,77549,77550],{"class":714},"      name: 'andy',\n",[478,77552,77553],{"class":480,"line":2185},[478,77554,77555],{"class":714},"      sayHai: function () {\n",[478,77557,77558],{"class":480,"line":2191},[478,77559,77560],{"class":714},"        console.log(this)\n",[478,77562,77563],{"class":480,"line":2196},[478,77564,52778],{"class":714},[478,77566,77567],{"class":480,"line":2210},[478,77568,2753],{"class":714},[478,77570,77571],{"class":480,"line":2215},[478,77572,77573],{"class":714},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[478,77575,77576],{"class":480,"line":2221},[478,77577,77578],{"class":714},"    \u002F\u002F 2.箭头函数的this\n",[478,77580,77581],{"class":480,"line":2241},[478,77582,77583],{"class":714},"    const fn = () => console.log(this)\n",[478,77585,77586,77588,77590],{"class":480,"line":2246},[478,77587,52797],{"class":714},[478,77589,52193],{"class":51680},[478,77591,51687],{"class":714},[19,77593,77594],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77596,77597],{},"const fn = () => console.log(this)",[19,77599,77600],{},"fn() \u002F\u002F指向window",[19,77602,77603],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77605,77606],{},"①",[19,77608,77609],{},"const obj = {",[19,77611,77612],{},"uname: 'pink老师',",[19,77614,77615],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77617,1641],{},[19,77619,77620],{},"调用对象里边的函数",[19,77622,77623],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77625,77626],{},"obj.sayHai()",[19,77628,77629],{},"②",[19,77631,77632],{},"const obj1 = {",[19,77634,77612],{},[19,77636,77637],{},"sayHai: function () {",[19,77639,77640],{},"let i = 10",[19,77642,77643],{},"const count = () => {",[19,77645,77646],{},"console.log(this)",[19,77648,77649],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77651,77652],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77654,1641],{},[19,77656,77657],{},"count()",[19,77659,1641],{},[19,77661,1641],{},[19,77663,77664],{},"obj1.sayHai()",[14,77666,77668],{"id":77667},"_46-解构赋值","4.6 解构赋值",[129,77670,77672],{"id":77671},"_461-数组解构","4.6.1 数组解构",[19,77674,77675],{},"以前要是使用数组中的值的话：",[19,77677,77678],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77680,77681],{},"const arr=[100,60,80]",[19,77683,77684],{},"const max=arr[0]",[19,77686,77687],{},"const min=arr[1]",[19,77689,77690],{},"const avg=arr[2]",[19,77692,77693],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77695,77696],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77698,77699],{},"这个写法就类似于上边的那种用很多const的方法",[19,77701,77702],{},[52,77703],{"alt":54,"src":77704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[469,77706,77708],{"className":51013,"code":77707,"language":51015,"meta":54,"style":54},"①变量之间交换值:\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",[475,77709,77710,77715,77720,77725,77730,77735,77739,77743,77748,77752,77757,77762,77766,77771,77776,77787,77797,77802,77807,77812,77816,77820],{"__ignoreMap":54},[478,77711,77712],{"class":480,"line":481},[478,77713,77714],{"class":714},"①变量之间交换值:\n",[478,77716,77717],{"class":480,"line":565},[478,77718,77719],{"class":714},"let a=1\n",[478,77721,77722],{"class":480,"line":579},[478,77723,77724],{"class":714},"let b=2;\n",[478,77726,77727],{"class":480,"line":593},[478,77728,77729],{"class":714},"必须加这行代码，不然就会报错\n",[478,77731,77732],{"class":480,"line":1769},[478,77733,77734],{"class":714},"[b,a]=[a,b]\n",[478,77736,77737],{"class":480,"line":1783},[478,77738,2966],{"emptyLinePlaceholder":640},[478,77740,77741],{"class":480,"line":1789},[478,77742,2966],{"emptyLinePlaceholder":640},[478,77744,77745],{"class":480,"line":1880},[478,77746,77747],{"class":714},"可以写成下面的方式：\n",[478,77749,77750],{"class":480,"line":1886},[478,77751,77719],{"class":714},[478,77753,77754],{"class":480,"line":1898},[478,77755,77756],{"class":714},"let b=2\n",[478,77758,77759],{"class":480,"line":2180},[478,77760,77761],{"class":714},";[b,a]=[a,b]\n",[478,77763,77764],{"class":480,"line":2185},[478,77765,2966],{"emptyLinePlaceholder":640},[478,77767,77768],{"class":480,"line":2191},[478,77769,77770],{"class":714},"②排序\n",[478,77772,77773],{"class":480,"line":2196},[478,77774,77775],{"class":714},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[478,77777,77778,77781,77784],{"class":480,"line":2210},[478,77779,77780],{"class":714},"for (let i = 0; i ",[478,77782,1605],{"class":77783},"s7hpK",[478,77785,77786],{"class":714}," arr1.length; i++) {\n",[478,77788,77789,77792,77794],{"class":480,"line":2215},[478,77790,77791],{"class":714},"   for (let j = 0; j ",[478,77793,1605],{"class":77783},[478,77795,77796],{"class":714}," arr1.length - 1; j++) {\n",[478,77798,77799],{"class":480,"line":2221},[478,77800,77801],{"class":714},"      if (arr1[j] > arr1[j + 1]) {\n",[478,77803,77804],{"class":480,"line":2241},[478,77805,77806],{"class":714},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[478,77808,77809],{"class":480,"line":2246},[478,77810,77811],{"class":714},"       }\n",[478,77813,77814],{"class":480,"line":2260},[478,77815,4875],{"class":714},[478,77817,77818],{"class":480,"line":2265},[478,77819,2133],{"class":714},[478,77821,77822],{"class":480,"line":2294},[478,77823,77824],{"class":714},"console.log(arr1)\n",[19,77826,77827],{},"数组解构的细节：",[19,77829,77830],{},"①变量多，单元值少",[19,77832,77833],{},[52,77834],{"alt":54,"src":77835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77837,77838],{},"防止出现undefined的方法：",[19,77840,77841],{},"const [a=0,b=0] =[1]",[19,77843,77844],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77846,77847],{},"②变量少，单元值多",[19,77849,77850],{},[52,77851],{"alt":54,"src":77852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77854,77855],{},"此时可以使用剩余参数来接收多余的值",[19,77857,77858],{},"const [a,b,...c]=[1,2,3,4]",[19,77860,77861],{},"console.log(c) 输出[3,4]",[19,77863,77864],{},"③可以按需导入，忽略某些返回值",[19,77866,77867],{},[52,77868],{"alt":54,"src":77869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77871,77872],{},"④支持多维数组的结构",[469,77874,77878],{"className":77875,"code":77876,"language":77877,"meta":54,"style":54},"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",[475,77879,77880,77908,77924,77939,77954],{"__ignoreMap":54},[478,77881,77882,77884,77886,77888,77890,77892,77894,77896,77899,77901,77903,77905],{"class":480,"line":481},[478,77883,7358],{"class":710},[478,77885,52213],{"class":714},[478,77887,759],{"class":710},[478,77889,52606],{"class":714},[478,77891,193],{"class":495},[478,77893,13001],{"class":714},[478,77895,789],{"class":495},[478,77897,77898],{"class":714},", [",[478,77900,783],{"class":495},[478,77902,13001],{"class":714},[478,77904,994],{"class":495},[478,77906,77907],{"class":714},"]]\n",[478,77909,77910,77913,77915,77917,77919,77921],{"class":480,"line":565},[478,77911,77912],{"class":714},"console.",[478,77914,58627],{"class":484},[478,77916,4417],{"class":714},[478,77918,895],{"class":495},[478,77920,4782],{"class":714},[478,77922,77923],{"class":770},"  \u002F\u002F1\n",[478,77925,77926,77928,77930,77932,77934,77936],{"class":480,"line":579},[478,77927,77912],{"class":714},[478,77929,58627],{"class":484},[478,77931,4417],{"class":714},[478,77933,193],{"class":495},[478,77935,4782],{"class":714},[478,77937,77938],{"class":770},"  \u002F\u002F2\n",[478,77940,77941,77943,77945,77947,77949,77951],{"class":480,"line":593},[478,77942,77912],{"class":714},[478,77944,58627],{"class":484},[478,77946,4417],{"class":714},[478,77948,789],{"class":495},[478,77950,4782],{"class":714},[478,77952,77953],{"class":770},"  \u002F\u002F[3,4]\n",[478,77955,77956,77958,77960,77962,77964,77966,77968,77970],{"class":480,"line":1769},[478,77957,77912],{"class":714},[478,77959,58627],{"class":484},[478,77961,4417],{"class":714},[478,77963,789],{"class":495},[478,77965,5467],{"class":714},[478,77967,895],{"class":495},[478,77969,4782],{"class":714},[478,77971,77972],{"class":770},"  \u002F\u002F3\n",[469,77974,77976],{"className":77875,"code":77975,"language":77877,"meta":54,"style":54},"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",[475,77977,77978,78005,78016,78027],{"__ignoreMap":54},[478,77979,77980,77982,77985,77987,77989,77991,77993,77995,77997,77999,78001,78003],{"class":480,"line":481},[478,77981,7358],{"class":710},[478,77983,77984],{"class":714}," [a, b, c] ",[478,77986,759],{"class":710},[478,77988,52606],{"class":714},[478,77990,193],{"class":495},[478,77992,13001],{"class":714},[478,77994,789],{"class":495},[478,77996,77898],{"class":714},[478,77998,783],{"class":495},[478,78000,13001],{"class":714},[478,78002,994],{"class":495},[478,78004,77907],{"class":714},[478,78006,78007,78009,78011,78014],{"class":480,"line":565},[478,78008,77912],{"class":714},[478,78010,58627],{"class":484},[478,78012,78013],{"class":714},"(a)",[478,78015,77923],{"class":770},[478,78017,78018,78020,78022,78025],{"class":480,"line":579},[478,78019,77912],{"class":714},[478,78021,58627],{"class":484},[478,78023,78024],{"class":714},"(b)",[478,78026,77938],{"class":770},[478,78028,78029,78031,78033,78036],{"class":480,"line":593},[478,78030,77912],{"class":714},[478,78032,58627],{"class":484},[478,78034,78035],{"class":714},"(c)",[478,78037,77953],{"class":770},[469,78039,78041],{"className":77875,"code":78040,"language":77877,"meta":54,"style":54},"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",[475,78042,78043,78070,78080,78090,78100],{"__ignoreMap":54},[478,78044,78045,78047,78050,78052,78054,78056,78058,78060,78062,78064,78066,78068],{"class":480,"line":481},[478,78046,7358],{"class":710},[478,78048,78049],{"class":714}," [a, b, [c, d]] ",[478,78051,759],{"class":710},[478,78053,52606],{"class":714},[478,78055,193],{"class":495},[478,78057,13001],{"class":714},[478,78059,789],{"class":495},[478,78061,77898],{"class":714},[478,78063,783],{"class":495},[478,78065,13001],{"class":714},[478,78067,994],{"class":495},[478,78069,77907],{"class":714},[478,78071,78072,78074,78076,78078],{"class":480,"line":565},[478,78073,77912],{"class":714},[478,78075,58627],{"class":484},[478,78077,78013],{"class":714},[478,78079,77923],{"class":770},[478,78081,78082,78084,78086,78088],{"class":480,"line":579},[478,78083,77912],{"class":714},[478,78085,58627],{"class":484},[478,78087,78024],{"class":714},[478,78089,77938],{"class":770},[478,78091,78092,78094,78096,78098],{"class":480,"line":593},[478,78093,77912],{"class":714},[478,78095,58627],{"class":484},[478,78097,78035],{"class":714},[478,78099,77972],{"class":770},[478,78101,78102,78104,78106,78109],{"class":480,"line":1769},[478,78103,77912],{"class":714},[478,78105,58627],{"class":484},[478,78107,78108],{"class":714},"(d)",[478,78110,78111],{"class":770},"  \u002F\u002F4\n",[129,78113,78115],{"id":78114},"_462-对象解构","4.6.2 对象解构",[19,78117,78118],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78120,78121],{},"用的非常非常多！！！！！！",[22563,78123,78125],{"id":78124},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78127,78128],{},"基本语法：",[29,78130,78131,78134,78137,78140],{},[32,78132,78133],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[32,78135,78136],{},"对象属性的值将被赋值给与属性名相同的变量",[32,78138,78139],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[32,78141,78142],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[469,78144,78146],{"className":51013,"code":78145,"language":51015,"meta":54,"style":54},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[475,78147,78148,78153,78158,78163,78167],{"__ignoreMap":54},[478,78149,78150],{"class":480,"line":481},[478,78151,78152],{"class":714},"const obj = {\n",[478,78154,78155],{"class":480,"line":565},[478,78156,78157],{"class":714},"   uname: 'pink老师',\n",[478,78159,78160],{"class":480,"line":579},[478,78161,78162],{"class":714},"   age: 18,\n",[478,78164,78165],{"class":480,"line":593},[478,78166,2133],{"class":714},[478,78168,78169],{"class":480,"line":1769},[478,78170,78171],{"class":714},"const { uname, age } = obj\n",[19,78173,78174],{},"上方代码这样写等价于：",[19,78176,78177],{},"const uname等价于obj.uname",[19,78179,78180],{},"变量名可以重新改名：",[19,78182,78183],{},"const uname='red老师'",[19,78185,78186],{},"const user={",[19,78188,78189],{},"  uname:'pink老师',",[19,78191,78192],{},"  age:18",[19,78194,1641],{},[19,78196,78197],{},"const {uname,age}=user",[19,78199,78200],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78202,78203],{},"const {旧变量名：新变量名}=对象",[19,78205,78206],{},"const {uname:username,age}=user",[22563,78208,78210],{"id":78209},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78212,78213],{},[52,78214],{"alt":54,"src":78215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22563,78217,78219],{"id":78218},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78221,78222],{},[52,78223],{"alt":54,"src":78224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[469,78226,78228],{"className":53447,"code":78227,"language":53449,"meta":54,"style":54},"  \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",[475,78229,78230,78238,78243,78248,78253,78258,78263,78268,78273,78278,78282,78287,78292],{"__ignoreMap":54},[478,78231,78232,78234,78236],{"class":480,"line":481},[478,78233,52524],{"class":714},[478,78235,52193],{"class":51680},[478,78237,51687],{"class":714},[478,78239,78240],{"class":480,"line":565},[478,78241,78242],{"class":714},"    const pig = {\n",[478,78244,78245],{"class":480,"line":579},[478,78246,78247],{"class":714},"      name: '佩奇',\n",[478,78249,78250],{"class":480,"line":593},[478,78251,78252],{"class":714},"      family: {\n",[478,78254,78255],{"class":480,"line":1769},[478,78256,78257],{"class":714},"        mother: '猪妈妈',\n",[478,78259,78260],{"class":480,"line":1783},[478,78261,78262],{"class":714},"        father: '猪爸爸',\n",[478,78264,78265],{"class":480,"line":1789},[478,78266,78267],{"class":714},"        sister: '乔治'\n",[478,78269,78270],{"class":480,"line":1880},[478,78271,78272],{"class":714},"      },\n",[478,78274,78275],{"class":480,"line":1886},[478,78276,78277],{"class":714},"      age: 6\n",[478,78279,78280],{"class":480,"line":1898},[478,78281,2753],{"class":714},[478,78283,78284],{"class":480,"line":2180},[478,78285,78286],{"class":714},"    \u002F\u002F 多级对象解构\n",[478,78288,78289],{"class":480,"line":2185},[478,78290,78291],{"class":714},"    const { name, family: { mother, father, sister }, age } = pig\n",[478,78293,78294,78296,78298],{"class":480,"line":2191},[478,78295,52797],{"class":714},[478,78297,52193],{"class":51680},[478,78299,51687],{"class":714},[19,78301,78302],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[469,78304,78307],{"className":78305,"code":78306,"language":76827,"meta":54,"style":54},"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",[475,78308,78309,78314,78325,78337,78349,78358,78362,78373,78385,78395,78400,78404,78414,78425,78434,78438,78442,78453,78464,78473,78477,78482],{"__ignoreMap":54},[478,78310,78311],{"class":480,"line":481},[478,78312,78313],{"class":770},"    \u002F\u002F 这是后台传递过来的数据\n",[478,78315,78316,78318,78321,78323],{"class":480,"line":565},[478,78317,11787],{"class":710},[478,78319,78320],{"class":714}," msg ",[478,78322,759],{"class":710},[478,78324,16137],{"class":714},[478,78326,78327,78330,78332,78335],{"class":480,"line":579},[478,78328,78329],{"class":488},"      \"code\"",[478,78331,1554],{"class":710},[478,78333,78334],{"class":495}," 200",[478,78336,31846],{"class":714},[478,78338,78339,78342,78344,78347],{"class":480,"line":593},[478,78340,78341],{"class":488},"      \"msg\"",[478,78343,1554],{"class":710},[478,78345,78346],{"class":488}," \"获取新闻列表成功\"",[478,78348,31846],{"class":714},[478,78350,78351,78354,78356],{"class":480,"line":1769},[478,78352,78353],{"class":488},"      \"data\"",[478,78355,1554],{"class":710},[478,78357,55827],{"class":714},[478,78359,78360],{"class":480,"line":1783},[478,78361,3076],{"class":714},[478,78363,78364,78367,78369,78371],{"class":480,"line":1789},[478,78365,78366],{"class":488},"          \"id\"",[478,78368,1554],{"class":710},[478,78370,25498],{"class":495},[478,78372,31846],{"class":714},[478,78374,78375,78378,78380,78383],{"class":480,"line":1880},[478,78376,78377],{"class":488},"          \"title\"",[478,78379,1554],{"class":710},[478,78381,78382],{"class":488}," \"5G商用自己，三大运用商收入下降\"",[478,78384,31846],{"class":714},[478,78386,78387,78390,78392],{"class":480,"line":1886},[478,78388,78389],{"class":488},"          \"count\"",[478,78391,1554],{"class":710},[478,78393,78394],{"class":495}," 58\n",[478,78396,78397],{"class":480,"line":1898},[478,78398,78399],{"class":714},"        },\n",[478,78401,78402],{"class":480,"line":2180},[478,78403,3076],{"class":714},[478,78405,78406,78408,78410,78412],{"class":480,"line":2185},[478,78407,78366],{"class":488},[478,78409,1554],{"class":710},[478,78411,15320],{"class":495},[478,78413,31846],{"class":714},[478,78415,78416,78418,78420,78423],{"class":480,"line":2191},[478,78417,78377],{"class":488},[478,78419,1554],{"class":710},[478,78421,78422],{"class":488}," \"国际媒体头条速览\"",[478,78424,31846],{"class":714},[478,78426,78427,78429,78431],{"class":480,"line":2196},[478,78428,78389],{"class":488},[478,78430,1554],{"class":710},[478,78432,78433],{"class":495}," 56\n",[478,78435,78436],{"class":480,"line":2210},[478,78437,78399],{"class":714},[478,78439,78440],{"class":480,"line":2215},[478,78441,3076],{"class":714},[478,78443,78444,78446,78448,78451],{"class":480,"line":2221},[478,78445,78366],{"class":488},[478,78447,1554],{"class":710},[478,78449,78450],{"class":495}," 3",[478,78452,31846],{"class":714},[478,78454,78455,78457,78459,78462],{"class":480,"line":2241},[478,78456,78377],{"class":488},[478,78458,1554],{"class":710},[478,78460,78461],{"class":488}," \"乌克兰和俄罗斯持续冲突\"",[478,78463,31846],{"class":714},[478,78465,78466,78468,78470],{"class":480,"line":2246},[478,78467,78389],{"class":488},[478,78469,1554],{"class":710},[478,78471,78472],{"class":495}," 1669\n",[478,78474,78475],{"class":480,"line":2260},[478,78476,78399],{"class":714},[478,78478,78479],{"class":480,"line":2265},[478,78480,78481],{"class":714},"      ]\n",[478,78483,78484],{"class":480,"line":2294},[478,78485,2753],{"class":714},[19,78487,78488],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78490,78491],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78493,78494],{},"\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,78496,78497],{},"function({data}) {",[19,78499,78500],{},"console.log(data)",[19,78502,1641],{},[19,78504,78505],{},"render(msg)",[19,78507,78508],{},"实参传递给形参的时候解构了",[19,78510,78511],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78513,78514],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78516,78517],{},"function render({data:mydata}) {",[19,78519,78520],{},"  console.log(data)",[19,78522,1641],{},[129,78524,78526],{"id":78525},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78528,78529],{},"有两种情况：一个是数组结构，一个是立即执行函数",[29,78531,78532],{},[32,78533,78534],{},"如果对一个数组进行遍历，有两种方式：",[19,78536,78537],{},"①法1",[19,78539,78540],{},"const arr=[1,2,3]",[19,78542,78543],{},"arr.map(function(item,index) {",[19,78545,78546],{},"  console.log(item)",[19,78548,52844],{},[19,78550,78551],{},[52,78552],{"alt":54,"src":78553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78555,78556],{},"②法2",[19,78558,78559],{},"const str='pink'",[19,78561,78562],{},"[1,2,3].map(function(item,index) {",[19,78564,78565],{},"console.log(item)",[19,78567,52844],{},[19,78569,78570],{},[52,78571],{"alt":54,"src":78572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78574,78575],{},"此时会报错",[19,78577,78578],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78580,78565],{},[19,78582,52844],{},[19,78584,78585],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78587,78589],{"id":78588},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78591,78592],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78594,78595],{},"可以理解为加强版的for循环",[19,78597,78598],{},[52,78599],{"alt":54,"src":78600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78602,78603],{},"里边不写return，不返回数组，只遍历不返回",[19,78605,78606],{},"map是返回数组",[19,78608,78609],{},"forEach主要用于遍历数组对象",[469,78611,78613],{"className":53447,"code":78612,"language":53449,"meta":54,"style":54},"  \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",[475,78614,78615,78623,78628,78633,78638,78643,78647,78652],{"__ignoreMap":54},[478,78616,78617,78619,78621],{"class":480,"line":481},[478,78618,52524],{"class":714},[478,78620,52193],{"class":51680},[478,78622,51687],{"class":714},[478,78624,78625],{"class":480,"line":565},[478,78626,78627],{"class":714},"    const arr = ['red', 'green', 'pink']\n",[478,78629,78630],{"class":480,"line":579},[478,78631,78632],{"class":714},"    const result = arr.forEach(function (item, index) {\n",[478,78634,78635],{"class":480,"line":593},[478,78636,78637],{"class":714},"      console.log(item)\n",[478,78639,78640],{"class":480,"line":1769},[478,78641,78642],{"class":714},"      console.log(index)\n",[478,78644,78645],{"class":480,"line":1783},[478,78646,33841],{"class":714},[478,78648,78649],{"class":480,"line":1789},[478,78650,78651],{"class":714},"    console.log(result)\n",[478,78653,78654,78656,78658],{"class":480,"line":1880},[478,78655,52797],{"class":714},[478,78657,52193],{"class":51680},[478,78659,51687],{"class":714},[19,78661,78662],{},[52,78663],{"alt":54,"src":78664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78666,78668],{"id":78667},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78670,78671],{},[52,78672],{"alt":54,"src":78673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78675,78676],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[469,78678,78680],{"className":53447,"code":78679,"language":53449,"meta":54,"style":54},"\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",[475,78681,78682,78690,78698,78703,78708,78712,78716,78721,78725,78730,78738],{"__ignoreMap":54},[478,78683,78684,78686,78688],{"class":480,"line":481},[478,78685,1605],{"class":714},[478,78687,52180],{"class":51680},[478,78689,51687],{"class":714},[478,78691,78692,78694,78696],{"class":480,"line":565},[478,78693,52524],{"class":714},[478,78695,52193],{"class":51680},[478,78697,51687],{"class":714},[478,78699,78700],{"class":480,"line":579},[478,78701,78702],{"class":714},"    const arr = [10, 20, 30]\n",[478,78704,78705],{"class":480,"line":593},[478,78706,78707],{"class":714},"    const newArr = arr.filter(function (item, index) {\n",[478,78709,78710],{"class":480,"line":1769},[478,78711,78637],{"class":714},[478,78713,78714],{"class":480,"line":1783},[478,78715,78642],{"class":714},[478,78717,78718],{"class":480,"line":1789},[478,78719,78720],{"class":714},"      return item >= 20\n",[478,78722,78723],{"class":480,"line":1880},[478,78724,33841],{"class":714},[478,78726,78727],{"class":480,"line":1886},[478,78728,78729],{"class":714},"    console.log(newArr)\n",[478,78731,78732,78734,78736],{"class":480,"line":1898},[478,78733,52797],{"class":714},[478,78735,52193],{"class":51680},[478,78737,51687],{"class":714},[478,78739,78740,78742,78744],{"class":480,"line":2180},[478,78741,52165],{"class":714},[478,78743,52180],{"class":51680},[478,78745,51687],{"class":714},[19,78747,78748],{},"这个也可以写成箭头函数：",[469,78750,78752],{"className":51013,"code":78751,"language":51015,"meta":54,"style":54},"const newArr = arr.filter(item => item >= 20)\n",[475,78753,78754],{"__ignoreMap":54},[478,78755,78756],{"class":480,"line":481},[478,78757,78751],{"class":714},[14,78759,78761],{"id":78760},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78763,78764],{},[52,78765],{"alt":54,"src":78766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78768,78769],{},"步骤：",[19,78771,78772],{},"①：渲染页面模块",[1702,78774,78775,78778],{},[32,78776,78777],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[32,78779,78780],{},"用forEach+字符串的形式",[19,78782,78783],{},"②：点击不同需求，显示不同页面内容",[1702,78785,78786,78789,78792,78795,78798],{},[32,78787,78788],{},"点击采取事件委托方式 .filter",[32,78790,78791],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[32,78793,78794],{},"筛选条件是根据点击的 data-index 来判断",[32,78796,78797],{},"可以使用对象解构，把事件对象解构",[32,78799,78800],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[469,78802,78804],{"className":51013,"code":78803,"language":51015,"meta":54,"style":54},"\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",[475,78805,78806,78816,78830,78834,78842,78856,78876,78888,78896,78902,78912,78922,78932,78936,78940,78946,78959,78971,78981,78993,78997,79001,79008,79021,79033,79050,79068,79081,79085,79089,79101,79111,79115,79119,79126,79167,79194,79204,79208,79212,79220,79232,79236,79240,79248,79260,79272,79283,79287,79291,79300,79312,79323,79327,79331,79340,79352,79364,79368,79372,79379,79389,79401,79413,79428,79432,79436,79444,79460,79470,79480,79490,79502,79506,79510,79520,79531,79541,79545,79553,79561,79565,79573,79588,79614,79639,79664,79683,79691,79705,79710,79715,79720,79725,79730,79738,79746,79751,79762,79767,79777,79787,79797,79807,79811,79815,79824,79833,79842,79851,79855,79859,79868,79877,79886,79895,79899,79903,79912,79921,79930,79939,79943,79947,79956,79965,79974,79983,79987,79991,80000,80009,80018,80027,80031,80035,80044,80053,80062,80071,80075,80079,80088,80097,80105,80114,80118,80122,80126,80131,80143,80148,80160,80164,80181,80209,80218,80223,80233,80243,80252,80257,80262,80266,80271,80288,80292,80297,80305,80310,80337,80342,80362,80367,80379,80384,80389,80394,80405,80419,80456,80474,80507,80524,80548,80552,80557,80563,80567,80571,80575,80583,80591,80595],{"__ignoreMap":54},[478,78807,78808,78810,78812,78814],{"class":480,"line":481},[478,78809,51677],{"class":714},[478,78811,51681],{"class":51680},[478,78813,51684],{"class":484},[478,78815,51687],{"class":714},[478,78817,78818,78820,78822,78824,78826,78828],{"class":480,"line":565},[478,78819,1605],{"class":714},[478,78821,51015],{"class":51680},[478,78823,51696],{"class":484},[478,78825,759],{"class":714},[478,78827,51701],{"class":488},[478,78829,51687],{"class":714},[478,78831,78832],{"class":480,"line":579},[478,78833,2966],{"emptyLinePlaceholder":640},[478,78835,78836,78838,78840],{"class":480,"line":593},[478,78837,1605],{"class":714},[478,78839,51714],{"class":51680},[478,78841,51687],{"class":714},[478,78843,78844,78846,78848,78850,78852,78854],{"class":480,"line":1769},[478,78845,52524],{"class":714},[478,78847,51724],{"class":51680},[478,78849,51727],{"class":484},[478,78851,759],{"class":714},[478,78853,51732],{"class":488},[478,78855,51687],{"class":714},[478,78857,78858,78860,78862,78864,78866,78868,78870,78872,78874],{"class":480,"line":1783},[478,78859,52524],{"class":714},[478,78861,51724],{"class":51680},[478,78863,15485],{"class":484},[478,78865,759],{"class":714},[478,78867,51771],{"class":488},[478,78869,51751],{"class":484},[478,78871,759],{"class":714},[478,78873,51778],{"class":488},[478,78875,51687],{"class":714},[478,78877,78878,78880,78882,78884,78886],{"class":480,"line":1789},[478,78879,52524],{"class":714},[478,78881,51787],{"class":51680},[478,78883,51790],{"class":714},[478,78885,51787],{"class":51680},[478,78887,51687],{"class":714},[478,78889,78890,78892,78894],{"class":480,"line":1880},[478,78891,52524],{"class":714},[478,78893,617],{"class":51680},[478,78895,51687],{"class":714},[478,78897,78898,78900],{"class":480,"line":1886},[478,78899,6969],{"class":51680},[478,78901,16137],{"class":714},[478,78903,78904,78906,78908,78910],{"class":480,"line":1898},[478,78905,55075],{"class":495},[478,78907,51817],{"class":714},[478,78909,895],{"class":495},[478,78911,1859],{"class":714},[478,78913,78914,78916,78918,78920],{"class":480,"line":2180},[478,78915,55086],{"class":495},[478,78917,51817],{"class":714},[478,78919,895],{"class":495},[478,78921,1859],{"class":714},[478,78923,78924,78926,78928,78930],{"class":480,"line":2185},[478,78925,72976],{"class":495},[478,78927,51817],{"class":714},[478,78929,60885],{"class":495},[478,78931,1859],{"class":714},[478,78933,78934],{"class":480,"line":2191},[478,78935,2753],{"class":714},[478,78937,78938],{"class":480,"line":2196},[478,78939,2966],{"emptyLinePlaceholder":640},[478,78941,78942,78944],{"class":480,"line":2210},[478,78943,62503],{"class":484},[478,78945,16137],{"class":714},[478,78947,78948,78950,78952,78955,78957],{"class":480,"line":2215},[478,78949,55151],{"class":495},[478,78951,51817],{"class":714},[478,78953,78954],{"class":495},"990",[478,78956,51872],{"class":710},[478,78958,1859],{"class":714},[478,78960,78961,78963,78965,78967,78969],{"class":480,"line":2221},[478,78962,55086],{"class":495},[478,78964,51817],{"class":714},[478,78966,895],{"class":495},[478,78968,51936],{"class":495},[478,78970,1859],{"class":714},[478,78972,78973,78975,78977,78979],{"class":480,"line":2241},[478,78974,55389],{"class":495},[478,78976,51817],{"class":714},[478,78978,51857],{"class":495},[478,78980,1859],{"class":714},[478,78982,78983,78986,78988,78991],{"class":480,"line":2246},[478,78984,78985],{"class":495},"      flex-wrap",[478,78987,51817],{"class":714},[478,78989,78990],{"class":495},"wrap",[478,78992,1859],{"class":714},[478,78994,78995],{"class":480,"line":2260},[478,78996,2753],{"class":714},[478,78998,78999],{"class":480,"line":2265},[478,79000,2966],{"emptyLinePlaceholder":640},[478,79002,79003,79006],{"class":480,"line":2294},[478,79004,79005],{"class":484},"    .item",[478,79007,16137],{"class":714},[478,79009,79010,79012,79014,79017,79019],{"class":480,"line":2299},[478,79011,55151],{"class":495},[478,79013,51817],{"class":714},[478,79015,79016],{"class":495},"240",[478,79018,51872],{"class":710},[478,79020,1859],{"class":714},[478,79022,79023,79025,79027,79029,79031],{"class":480,"line":2316},[478,79024,62380],{"class":495},[478,79026,51817],{"class":714},[478,79028,1146],{"class":495},[478,79030,51872],{"class":710},[478,79032,1859],{"class":714},[478,79034,79035,79037,79039,79041,79043,79046,79048],{"class":480,"line":2321},[478,79036,55075],{"class":495},[478,79038,51817],{"class":714},[478,79040,1396],{"class":495},[478,79042,51872],{"class":710},[478,79044,79045],{"class":495}," 30",[478,79047,51872],{"class":710},[478,79049,1859],{"class":714},[478,79051,79052,79054,79056,79058,79061,79064,79066],{"class":480,"line":2326},[478,79053,62240],{"class":495},[478,79055,51817],{"class":714},[478,79057,28501],{"class":495},[478,79059,79060],{"class":495}," ease",[478,79062,79063],{"class":495}," .5",[478,79065,1391],{"class":710},[478,79067,1859],{"class":714},[478,79069,79070,79073,79075,79077,79079],{"class":480,"line":2331},[478,79071,79072],{"class":495},"      margin-bottom",[478,79074,51817],{"class":714},[478,79076,1396],{"class":495},[478,79078,51872],{"class":710},[478,79080,1859],{"class":714},[478,79082,79083],{"class":480,"line":2345},[478,79084,2753],{"class":714},[478,79086,79087],{"class":480,"line":2350},[478,79088,2966],{"emptyLinePlaceholder":640},[478,79090,79091,79094,79096,79099],{"class":480,"line":3143},[478,79092,79093],{"class":484},"    .item:nth-child",[478,79095,263],{"class":714},[478,79097,79098],{"class":495},"4n",[478,79100,13008],{"class":714},[478,79102,79103,79105,79107,79109],{"class":480,"line":3157},[478,79104,62380],{"class":495},[478,79106,51817],{"class":714},[478,79108,895],{"class":495},[478,79110,1859],{"class":714},[478,79112,79113],{"class":480,"line":3165},[478,79114,2753],{"class":714},[478,79116,79117],{"class":480,"line":3170},[478,79118,2966],{"emptyLinePlaceholder":640},[478,79120,79121,79124],{"class":480,"line":3176},[478,79122,79123],{"class":484},"    .item:hover",[478,79125,16137],{"class":714},[478,79127,79128,79131,79133,79135,79137,79139,79141,79143,79145,79148,79150,79152,79154,79156,79158,79160,79162,79165],{"class":480,"line":3182},[478,79129,79130],{"class":495},"      box-shadow",[478,79132,51817],{"class":714},[478,79134,895],{"class":495},[478,79136,51872],{"class":710},[478,79138,4659],{"class":495},[478,79140,51872],{"class":710},[478,79142,2714],{"class":495},[478,79144,51872],{"class":710},[478,79146,79147],{"class":495}," rgba",[478,79149,263],{"class":714},[478,79151,895],{"class":495},[478,79153,13001],{"class":714},[478,79155,895],{"class":495},[478,79157,13001],{"class":714},[478,79159,895],{"class":495},[478,79161,13001],{"class":714},[478,79163,79164],{"class":495},".2",[478,79166,3285],{"class":714},[478,79168,79169,79172,79174,79177,79179,79181,79183,79186,79188,79190,79192],{"class":480,"line":3187},[478,79170,79171],{"class":495},"      transform",[478,79173,51817],{"class":714},[478,79175,79176],{"class":495},"translate3d",[478,79178,263],{"class":714},[478,79180,895],{"class":495},[478,79182,13001],{"class":714},[478,79184,79185],{"class":495},"-4",[478,79187,51872],{"class":710},[478,79189,13001],{"class":714},[478,79191,895],{"class":495},[478,79193,3285],{"class":714},[478,79195,79196,79198,79200,79202],{"class":480,"line":8514},[478,79197,62405],{"class":495},[478,79199,51817],{"class":714},[478,79201,62410],{"class":495},[478,79203,1859],{"class":714},[478,79205,79206],{"class":480,"line":8538},[478,79207,2753],{"class":714},[478,79209,79210],{"class":480,"line":8543},[478,79211,2966],{"emptyLinePlaceholder":640},[478,79213,79214,79216,79218],{"class":480,"line":8549},[478,79215,79005],{"class":484},[478,79217,55995],{"class":51680},[478,79219,16137],{"class":714},[478,79221,79222,79224,79226,79228,79230],{"class":480,"line":8576},[478,79223,55151],{"class":495},[478,79225,51817],{"class":714},[478,79227,1012],{"class":495},[478,79229,1029],{"class":710},[478,79231,1859],{"class":714},[478,79233,79234],{"class":480,"line":8581},[478,79235,2753],{"class":714},[478,79237,79238],{"class":480,"line":8587},[478,79239,2966],{"emptyLinePlaceholder":640},[478,79241,79242,79244,79246],{"class":480,"line":8599},[478,79243,79005],{"class":484},[478,79245,62684],{"class":484},[478,79247,16137],{"class":714},[478,79249,79250,79252,79254,79256,79258],{"class":480,"line":8611},[478,79251,55302],{"class":495},[478,79253,51817],{"class":714},[478,79255,1348],{"class":495},[478,79257,51872],{"class":710},[478,79259,1859],{"class":714},[478,79261,79262,79264,79266,79268,79270],{"class":480,"line":8623},[478,79263,79072],{"class":495},[478,79265,51817],{"class":714},[478,79267,1146],{"class":495},[478,79269,51872],{"class":710},[478,79271,1859],{"class":714},[478,79273,79274,79276,79278,79281],{"class":480,"line":10282},[478,79275,57796],{"class":495},[478,79277,51817],{"class":714},[478,79279,79280],{"class":495},"#666",[478,79282,1859],{"class":714},[478,79284,79285],{"class":480,"line":10307},[478,79286,2753],{"class":714},[478,79288,79289],{"class":480,"line":10330},[478,79290,2966],{"emptyLinePlaceholder":640},[478,79292,79293,79295,79298],{"class":480,"line":10354},[478,79294,79005],{"class":484},[478,79296,79297],{"class":484}," .price",[478,79299,16137],{"class":714},[478,79301,79302,79304,79306,79308,79310],{"class":480,"line":10359},[478,79303,55302],{"class":495},[478,79305,51817],{"class":714},[478,79307,1445],{"class":495},[478,79309,51872],{"class":710},[478,79311,1859],{"class":714},[478,79313,79314,79316,79318,79321],{"class":480,"line":10364},[478,79315,57796],{"class":495},[478,79317,51817],{"class":714},[478,79319,79320],{"class":495},"firebrick",[478,79322,1859],{"class":714},[478,79324,79325],{"class":480,"line":10369},[478,79326,2753],{"class":714},[478,79328,79329],{"class":480,"line":10378},[478,79330,2966],{"emptyLinePlaceholder":640},[478,79332,79333,79335,79338],{"class":480,"line":10383},[478,79334,79005],{"class":484},[478,79336,79337],{"class":484}," .price::before",[478,79339,16137],{"class":714},[478,79341,79342,79345,79347,79350],{"class":480,"line":10389},[478,79343,79344],{"class":495},"      content",[478,79346,51817],{"class":714},[478,79348,79349],{"class":488},"'￥'",[478,79351,1859],{"class":714},[478,79353,79354,79356,79358,79360,79362],{"class":480,"line":10410},[478,79355,55302],{"class":495},[478,79357,51817],{"class":714},[478,79359,1249],{"class":495},[478,79361,51872],{"class":710},[478,79363,1859],{"class":714},[478,79365,79366],{"class":480,"line":10416},[478,79367,2753],{"class":714},[478,79369,79370],{"class":480,"line":10430},[478,79371,2966],{"emptyLinePlaceholder":640},[478,79373,79374,79377],{"class":480,"line":10436},[478,79375,79376],{"class":484},"    .filter",[478,79378,16137],{"class":714},[478,79380,79381,79383,79385,79387],{"class":480,"line":10463},[478,79382,55389],{"class":495},[478,79384,51817],{"class":714},[478,79386,51857],{"class":495},[478,79388,1859],{"class":714},[478,79390,79391,79393,79395,79397,79399],{"class":480,"line":10472},[478,79392,55151],{"class":495},[478,79394,51817],{"class":714},[478,79396,78954],{"class":495},[478,79398,51872],{"class":710},[478,79400,1859],{"class":714},[478,79402,79403,79405,79407,79409,79411],{"class":480,"line":10478},[478,79404,55086],{"class":495},[478,79406,51817],{"class":714},[478,79408,895],{"class":495},[478,79410,51936],{"class":495},[478,79412,1859],{"class":714},[478,79414,79415,79417,79419,79421,79423,79425],{"class":480,"line":10486},[478,79416,55075],{"class":495},[478,79418,51817],{"class":714},[478,79420,1354],{"class":495},[478,79422,51872],{"class":710},[478,79424,79045],{"class":495},[478,79426,79427],{"class":710},"px\n",[478,79429,79430],{"class":480,"line":10491},[478,79431,2753],{"class":714},[478,79433,79434],{"class":480,"line":17169},[478,79435,2966],{"emptyLinePlaceholder":640},[478,79437,79438,79440,79442],{"class":480,"line":17175},[478,79439,79376],{"class":484},[478,79441,1967],{"class":51680},[478,79443,16137],{"class":714},[478,79445,79446,79448,79450,79452,79454,79456,79458],{"class":480,"line":17198},[478,79447,55075],{"class":495},[478,79449,51817],{"class":714},[478,79451,1146],{"class":495},[478,79453,51872],{"class":710},[478,79455,9516],{"class":495},[478,79457,51872],{"class":710},[478,79459,1859],{"class":714},[478,79461,79462,79464,79466,79468],{"class":480,"line":17204},[478,79463,62101],{"class":495},[478,79465,51817],{"class":714},[478,79467,62198],{"class":495},[478,79469,1859],{"class":714},[478,79471,79472,79474,79476,79478],{"class":480,"line":17227},[478,79473,57796],{"class":495},[478,79475,51817],{"class":714},[478,79477,79280],{"class":495},[478,79479,1859],{"class":714},[478,79481,79482,79484,79486,79488],{"class":480,"line":17241},[478,79483,64350],{"class":495},[478,79485,51817],{"class":714},[478,79487,55117],{"class":495},[478,79489,1859],{"class":714},[478,79491,79492,79494,79496,79498,79500],{"class":480,"line":17261},[478,79493,62130],{"class":495},[478,79495,51817],{"class":714},[478,79497,1396],{"class":495},[478,79499,51872],{"class":710},[478,79501,1859],{"class":714},[478,79503,79504],{"class":480,"line":17267},[478,79505,2753],{"class":714},[478,79507,79508],{"class":480,"line":17278},[478,79509,2966],{"emptyLinePlaceholder":640},[478,79511,79512,79514,79516,79518],{"class":480,"line":17301},[478,79513,79376],{"class":484},[478,79515,1967],{"class":51680},[478,79517,62280],{"class":484},[478,79519,16137],{"class":714},[478,79521,79522,79524,79526,79529],{"class":480,"line":17323},[478,79523,55264],{"class":495},[478,79525,51817],{"class":714},[478,79527,79528],{"class":495},"#05943c",[478,79530,1859],{"class":714},[478,79532,79533,79535,79537,79539],{"class":480,"line":17328},[478,79534,57796],{"class":495},[478,79536,51817],{"class":714},[478,79538,61222],{"class":495},[478,79540,1859],{"class":714},[478,79542,79543],{"class":480,"line":17334},[478,79544,2753],{"class":714},[478,79546,79547,79549,79551],{"class":480,"line":17348},[478,79548,52797],{"class":714},[478,79550,617],{"class":51680},[478,79552,51687],{"class":714},[478,79554,79555,79557,79559],{"class":480,"line":17361},[478,79556,52165],{"class":714},[478,79558,51714],{"class":51680},[478,79560,51687],{"class":714},[478,79562,79563],{"class":480,"line":17366},[478,79564,2966],{"emptyLinePlaceholder":640},[478,79566,79567,79569,79571],{"class":480,"line":17380},[478,79568,1605],{"class":714},[478,79570,52180],{"class":51680},[478,79572,51687],{"class":714},[478,79574,79575,79577,79579,79581,79583,79586],{"class":480,"line":17385},[478,79576,52524],{"class":714},[478,79578,51991],{"class":51680},[478,79580,53866],{"class":484},[478,79582,759],{"class":714},[478,79584,79585],{"class":488},"\"filter\"",[478,79587,51687],{"class":714},[478,79589,79590,79592,79594,79596,79598,79600,79603,79605,79607,79610,79612],{"class":480,"line":17391},[478,79591,51721],{"class":714},[478,79593,518],{"class":51680},[478,79595,61437],{"class":484},[478,79597,759],{"class":714},[478,79599,61442],{"class":488},[478,79601,79602],{"class":484}," data-index",[478,79604,759],{"class":714},[478,79606,4244],{"class":488},[478,79608,79609],{"class":714},">0-100元\u003C\u002F",[478,79611,518],{"class":51680},[478,79613,51687],{"class":714},[478,79615,79616,79618,79620,79622,79624,79626,79628,79630,79632,79635,79637],{"class":480,"line":17396},[478,79617,51721],{"class":714},[478,79619,518],{"class":51680},[478,79621,61437],{"class":484},[478,79623,759],{"class":714},[478,79625,61442],{"class":488},[478,79627,79602],{"class":484},[478,79629,759],{"class":714},[478,79631,4267],{"class":488},[478,79633,79634],{"class":714},">100-300元\u003C\u002F",[478,79636,518],{"class":51680},[478,79638,51687],{"class":714},[478,79640,79641,79643,79645,79647,79649,79651,79653,79655,79657,79660,79662],{"class":480,"line":17410},[478,79642,51721],{"class":714},[478,79644,518],{"class":51680},[478,79646,61437],{"class":484},[478,79648,759],{"class":714},[478,79650,61442],{"class":488},[478,79652,79602],{"class":484},[478,79654,759],{"class":714},[478,79656,4280],{"class":488},[478,79658,79659],{"class":714},">300元以上\u003C\u002F",[478,79661,518],{"class":51680},[478,79663,51687],{"class":714},[478,79665,79666,79668,79670,79672,79674,79676,79679,79681],{"class":480,"line":17415},[478,79667,51721],{"class":714},[478,79669,518],{"class":51680},[478,79671,61437],{"class":484},[478,79673,759],{"class":714},[478,79675,61442],{"class":488},[478,79677,79678],{"class":714},">全部区间\u003C\u002F",[478,79680,518],{"class":51680},[478,79682,51687],{"class":714},[478,79684,79685,79687,79689],{"class":480,"line":17420},[478,79686,52797],{"class":714},[478,79688,51991],{"class":51680},[478,79690,51687],{"class":714},[478,79692,79693,79695,79697,79699,79701,79703],{"class":480,"line":17434},[478,79694,52524],{"class":714},[478,79696,51991],{"class":51680},[478,79698,53866],{"class":484},[478,79700,759],{"class":714},[478,79702,62988],{"class":488},[478,79704,51687],{"class":714},[478,79706,79707],{"class":480,"line":17446},[478,79708,79709],{"class":770},"    \u003C!-- \u003Cdiv class=\"item\">\n",[478,79711,79712],{"class":480,"line":17451},[478,79713,79714],{"class":770},"      \u003Cimg src=\"\" alt=\"\">\n",[478,79716,79717],{"class":480,"line":17464},[478,79718,79719],{"class":770},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[478,79721,79722],{"class":480,"line":17469},[478,79723,79724],{"class":770},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[478,79726,79727],{"class":480,"line":17474},[478,79728,79729],{"class":770},"    \u003C\u002Fdiv> -->\n",[478,79731,79732,79734,79736],{"class":480,"line":17479},[478,79733,52797],{"class":714},[478,79735,51991],{"class":51680},[478,79737,51687],{"class":714},[478,79739,79740,79742,79744],{"class":480,"line":17492},[478,79741,52524],{"class":714},[478,79743,52193],{"class":51680},[478,79745,51687],{"class":714},[478,79747,79748],{"class":480,"line":17497},[478,79749,79750],{"class":770},"    \u002F\u002F 2. 初始化数据\n",[478,79752,79753,79755,79758,79760],{"class":480,"line":33013},[478,79754,11787],{"class":710},[478,79756,79757],{"class":495}," goodsList",[478,79759,14130],{"class":710},[478,79761,55827],{"class":714},[478,79763,79764],{"class":480,"line":33019},[478,79765,79766],{"class":714},"      {\n",[478,79768,79769,79772,79775],{"class":480,"line":33025},[478,79770,79771],{"class":714},"        id: ",[478,79773,79774],{"class":488},"'4001172'",[478,79776,31846],{"class":714},[478,79778,79779,79782,79785],{"class":480,"line":33031},[478,79780,79781],{"class":714},"        name: ",[478,79783,79784],{"class":488},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[478,79786,31846],{"class":714},[478,79788,79789,79792,79795],{"class":480,"line":33037},[478,79790,79791],{"class":714},"        price: ",[478,79793,79794],{"class":488},"'289.00'",[478,79796,31846],{"class":714},[478,79798,79799,79802,79805],{"class":480,"line":33048},[478,79800,79801],{"class":714},"        picture: ",[478,79803,79804],{"class":488},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[478,79806,31846],{"class":714},[478,79808,79809],{"class":480,"line":33054},[478,79810,78272],{"class":714},[478,79812,79813],{"class":480,"line":33074},[478,79814,79766],{"class":714},[478,79816,79817,79819,79822],{"class":480,"line":33080},[478,79818,79771],{"class":714},[478,79820,79821],{"class":488},"'4001594'",[478,79823,31846],{"class":714},[478,79825,79826,79828,79831],{"class":480,"line":33091},[478,79827,79781],{"class":714},[478,79829,79830],{"class":488},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[478,79832,31846],{"class":714},[478,79834,79835,79837,79840],{"class":480,"line":33097},[478,79836,79791],{"class":714},[478,79838,79839],{"class":488},"'288.00'",[478,79841,31846],{"class":714},[478,79843,79844,79846,79849],{"class":480,"line":33103},[478,79845,79801],{"class":714},[478,79847,79848],{"class":488},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[478,79850,31846],{"class":714},[478,79852,79853],{"class":480,"line":33109},[478,79854,78272],{"class":714},[478,79856,79857],{"class":480,"line":33115},[478,79858,79766],{"class":714},[478,79860,79861,79863,79866],{"class":480,"line":33121},[478,79862,79771],{"class":714},[478,79864,79865],{"class":488},"'4001009'",[478,79867,31846],{"class":714},[478,79869,79870,79872,79875],{"class":480,"line":33127},[478,79871,79781],{"class":714},[478,79873,79874],{"class":488},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[478,79876,31846],{"class":714},[478,79878,79879,79881,79884],{"class":480,"line":33133},[478,79880,79791],{"class":714},[478,79882,79883],{"class":488},"'109.00'",[478,79885,31846],{"class":714},[478,79887,79888,79890,79893],{"class":480,"line":33153},[478,79889,79801],{"class":714},[478,79891,79892],{"class":488},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[478,79894,31846],{"class":714},[478,79896,79897],{"class":480,"line":33159},[478,79898,78272],{"class":714},[478,79900,79901],{"class":480,"line":33175},[478,79902,79766],{"class":714},[478,79904,79905,79907,79910],{"class":480,"line":33181},[478,79906,79771],{"class":714},[478,79908,79909],{"class":488},"'4001874'",[478,79911,31846],{"class":714},[478,79913,79914,79916,79919],{"class":480,"line":33195},[478,79915,79781],{"class":714},[478,79917,79918],{"class":488},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[478,79920,31846],{"class":714},[478,79922,79923,79925,79928],{"class":480,"line":33201},[478,79924,79791],{"class":714},[478,79926,79927],{"class":488},"'488.00'",[478,79929,31846],{"class":714},[478,79931,79932,79934,79937],{"class":480,"line":33216},[478,79933,79801],{"class":714},[478,79935,79936],{"class":488},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[478,79938,31846],{"class":714},[478,79940,79941],{"class":480,"line":33222},[478,79942,78272],{"class":714},[478,79944,79945],{"class":480,"line":33231},[478,79946,79766],{"class":714},[478,79948,79949,79951,79954],{"class":480,"line":33237},[478,79950,79771],{"class":714},[478,79952,79953],{"class":488},"'4001649'",[478,79955,31846],{"class":714},[478,79957,79958,79960,79963],{"class":480,"line":33246},[478,79959,79781],{"class":714},[478,79961,79962],{"class":488},"'大师监制龙泉青瓷茶叶罐'",[478,79964,31846],{"class":714},[478,79966,79967,79969,79972],{"class":480,"line":33252},[478,79968,79791],{"class":714},[478,79970,79971],{"class":488},"'139.00'",[478,79973,31846],{"class":714},[478,79975,79976,79978,79981],{"class":480,"line":33258},[478,79977,79801],{"class":714},[478,79979,79980],{"class":488},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[478,79982,31846],{"class":714},[478,79984,79985],{"class":480,"line":33267},[478,79986,78272],{"class":714},[478,79988,79989],{"class":480,"line":33273},[478,79990,79766],{"class":714},[478,79992,79993,79995,79998],{"class":480,"line":33284},[478,79994,79771],{"class":714},[478,79996,79997],{"class":488},"'3997185'",[478,79999,31846],{"class":714},[478,80001,80002,80004,80007],{"class":480,"line":33290},[478,80003,79781],{"class":714},[478,80005,80006],{"class":488},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[478,80008,31846],{"class":714},[478,80010,80011,80013,80016],{"class":480,"line":33309},[478,80012,79791],{"class":714},[478,80014,80015],{"class":488},"'108.00'",[478,80017,31846],{"class":714},[478,80019,80020,80022,80025],{"class":480,"line":33315},[478,80021,79801],{"class":714},[478,80023,80024],{"class":488},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[478,80026,31846],{"class":714},[478,80028,80029],{"class":480,"line":33326},[478,80030,78272],{"class":714},[478,80032,80033],{"class":480,"line":33332},[478,80034,79766],{"class":714},[478,80036,80037,80039,80042],{"class":480,"line":33352},[478,80038,79771],{"class":714},[478,80040,80041],{"class":488},"'3997403'",[478,80043,31846],{"class":714},[478,80045,80046,80048,80051],{"class":480,"line":33368},[478,80047,79781],{"class":714},[478,80049,80050],{"class":488},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[478,80052,31846],{"class":714},[478,80054,80055,80057,80060],{"class":480,"line":33374},[478,80056,79791],{"class":714},[478,80058,80059],{"class":488},"'100.00'",[478,80061,31846],{"class":714},[478,80063,80064,80066,80069],{"class":480,"line":33388},[478,80065,79801],{"class":714},[478,80067,80068],{"class":488},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[478,80070,31846],{"class":714},[478,80072,80073],{"class":480,"line":33394},[478,80074,78272],{"class":714},[478,80076,80077],{"class":480,"line":33400},[478,80078,79766],{"class":714},[478,80080,80081,80083,80086],{"class":480,"line":33411},[478,80082,79771],{"class":714},[478,80084,80085],{"class":488},"'3998274'",[478,80087,31846],{"class":714},[478,80089,80090,80092,80095],{"class":480,"line":33417},[478,80091,79781],{"class":714},[478,80093,80094],{"class":488},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[478,80096,31846],{"class":714},[478,80098,80099,80101,80103],{"class":480,"line":33423},[478,80100,79791],{"class":714},[478,80102,79971],{"class":488},[478,80104,31846],{"class":714},[478,80106,80107,80109,80112],{"class":480,"line":33433},[478,80108,79801],{"class":714},[478,80110,80111],{"class":488},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[478,80113,31846],{"class":714},[478,80115,80116],{"class":480,"line":33439},[478,80117,78272],{"class":714},[478,80119,80120],{"class":480,"line":33450},[478,80121,53489],{"class":714},[478,80123,80124],{"class":480,"line":33456},[478,80125,2966],{"emptyLinePlaceholder":640},[478,80127,80128],{"class":480,"line":33466},[478,80129,80130],{"class":770},"    \u002F\u002F 1.渲染函数\n",[478,80132,80133,80135,80137,80139,80141],{"class":480,"line":33471},[478,80134,70464],{"class":710},[478,80136,70467],{"class":484},[478,80138,263],{"class":714},[478,80140,4446],{"class":5782},[478,80142,13008],{"class":714},[478,80144,80145],{"class":480,"line":33477},[478,80146,80147],{"class":770},"      \u002F\u002F 声明空字符串\n",[478,80149,80150,80153,80156,80158],{"class":480,"line":33526},[478,80151,80152],{"class":710},"      let",[478,80154,80155],{"class":714}," str ",[478,80157,759],{"class":710},[478,80159,70484],{"class":488},[478,80161,80162],{"class":480,"line":33573},[478,80163,70489],{"class":770},[478,80165,80166,80168,80171,80173,80176,80179],{"class":480,"line":33578},[478,80167,58387],{"class":714},[478,80169,80170],{"class":484},"forEach",[478,80172,263],{"class":714},[478,80174,80175],{"class":5782},"item",[478,80177,80178],{"class":710}," =>",[478,80180,16137],{"class":714},[478,80182,80183,80185,80188,80191,80193,80196,80198,80201,80204,80206],{"class":480,"line":33584},[478,80184,61650],{"class":710},[478,80186,80187],{"class":714}," { ",[478,80189,80190],{"class":495},"name",[478,80192,13001],{"class":714},[478,80194,80195],{"class":495},"price",[478,80197,13001],{"class":714},[478,80199,80200],{"class":495},"picture",[478,80202,80203],{"class":714}," } ",[478,80205,759],{"class":710},[478,80207,80208],{"class":714}," item\n",[478,80210,80211,80214,80216],{"class":480,"line":33603},[478,80212,80213],{"class":714},"        str ",[478,80215,10043],{"class":710},[478,80217,70548],{"class":488},[478,80219,80220],{"class":480,"line":33609},[478,80221,80222],{"class":488},"          \u003Cdiv class=\"item\">\n",[478,80224,80225,80228,80230],{"class":480,"line":33629},[478,80226,80227],{"class":488},"            \u003Cimg src=\"${",[478,80229,80200],{"class":714},[478,80231,80232],{"class":488},"}\" alt=\"\">\n",[478,80234,80235,80238,80240],{"class":480,"line":33635},[478,80236,80237],{"class":488},"            \u003Cp class=\"name\">${",[478,80239,80190],{"class":714},[478,80241,80242],{"class":488},"}\u003C\u002Fp>\n",[478,80244,80245,80248,80250],{"class":480,"line":33641},[478,80246,80247],{"class":488},"            \u003Cp class=\"price\">${",[478,80249,80195],{"class":714},[478,80251,80242],{"class":488},[478,80253,80254],{"class":480,"line":33651},[478,80255,80256],{"class":488},"          \u003C\u002Fdiv>\n",[478,80258,80259],{"class":480,"line":33656},[478,80260,80261],{"class":488},"        `\n",[478,80263,80264],{"class":480,"line":33662},[478,80265,65195],{"class":714},[478,80267,80268],{"class":480,"line":33678},[478,80269,80270],{"class":770},"      \u002F\u002F 追加给List\n",[478,80272,80273,80275,80277,80279,80282,80284,80286],{"class":480,"line":33723},[478,80274,56151],{"class":714},[478,80276,54779],{"class":484},[478,80278,263],{"class":714},[478,80280,80281],{"class":488},"'.list'",[478,80283,74629],{"class":714},[478,80285,759],{"class":710},[478,80287,74365],{"class":714},[478,80289,80290],{"class":480,"line":33729},[478,80291,2753],{"class":714},[478,80293,80294],{"class":480,"line":33735},[478,80295,80296],{"class":770},"    \u002F\u002F 页面一打开就需要渲染\n",[478,80298,80299,80302],{"class":480,"line":33741},[478,80300,80301],{"class":484},"    render",[478,80303,80304],{"class":714},"(goodsList)\n",[478,80306,80307],{"class":480,"line":33752},[478,80308,80309],{"class":770},"    \u002F\u002F 2.过滤筛选\n",[478,80311,80312,80314,80316,80318,80321,80323,80325,80327,80329,80331,80333,80335],{"class":480,"line":33758},[478,80313,52787],{"class":714},[478,80315,54779],{"class":484},[478,80317,263],{"class":714},[478,80319,80320],{"class":488},"'.filter'",[478,80322,31206],{"class":714},[478,80324,58193],{"class":484},[478,80326,263],{"class":714},[478,80328,58198],{"class":488},[478,80330,13001],{"class":714},[478,80332,786],{"class":5782},[478,80334,80178],{"class":710},[478,80336,16137],{"class":714},[478,80338,80339],{"class":480,"line":33764},[478,80340,80341],{"class":770},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[478,80343,80344,80346,80348,80351,80353,80355,80357,80359],{"class":480,"line":33770},[478,80345,58608],{"class":710},[478,80347,80187],{"class":714},[478,80349,80350],{"class":495},"tagName",[478,80352,13001],{"class":714},[478,80354,31917],{"class":495},[478,80356,80203],{"class":714},[478,80358,759],{"class":710},[478,80360,80361],{"class":714}," e.target\n",[478,80363,80364],{"class":480,"line":33788},[478,80365,80366],{"class":770},"      \u002F\u002F 判断\n",[478,80368,80369,80371,80373,80375,80377],{"class":480,"line":33802},[478,80370,54860],{"class":710},[478,80372,67414],{"class":714},[478,80374,54866],{"class":710},[478,80376,68636],{"class":488},[478,80378,13008],{"class":714},[478,80380,80381],{"class":480,"line":33811},[478,80382,80383],{"class":770},"        \u002F\u002F console.log(11)\n",[478,80385,80386],{"class":480,"line":33820},[478,80387,80388],{"class":770},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[478,80390,80391],{"class":480,"line":33829},[478,80392,80393],{"class":770},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[478,80395,80396,80398,80400,80402],{"class":480,"line":33838},[478,80397,52210],{"class":710},[478,80399,52213],{"class":714},[478,80401,759],{"class":710},[478,80403,80404],{"class":714}," goodsList\n",[478,80406,80407,80409,80412,80414,80417],{"class":480,"line":33844},[478,80408,3063],{"class":710},[478,80410,80411],{"class":714}," (dataset.index ",[478,80413,54866],{"class":710},[478,80415,80416],{"class":488}," '1'",[478,80418,13008],{"class":714},[478,80420,80421,80424,80426,80429,80432,80434,80436,80438,80441,80443,80445,80448,80450,80452,80454],{"class":480,"line":33850},[478,80422,80423],{"class":714},"          arr ",[478,80425,759],{"class":710},[478,80427,80428],{"class":714}," goodsList.",[478,80430,80431],{"class":484},"filter",[478,80433,263],{"class":714},[478,80435,80175],{"class":5782},[478,80437,80178],{"class":710},[478,80439,80440],{"class":714}," item.price ",[478,80442,2277],{"class":710},[478,80444,4659],{"class":495},[478,80446,80447],{"class":710}," &&",[478,80449,80440],{"class":714},[478,80451,2156],{"class":710},[478,80453,6320],{"class":495},[478,80455,720],{"class":714},[478,80457,80458,80461,80463,80465,80467,80469,80472],{"class":480,"line":33858},[478,80459,80460],{"class":714},"        } ",[478,80462,2268],{"class":710},[478,80464,2271],{"class":710},[478,80466,80411],{"class":714},[478,80468,54866],{"class":710},[478,80470,80471],{"class":488}," '2'",[478,80473,13008],{"class":714},[478,80475,80476,80478,80480,80482,80484,80486,80488,80490,80492,80494,80496,80498,80500,80502,80505],{"class":480,"line":33863},[478,80477,80423],{"class":714},[478,80479,759],{"class":710},[478,80481,80428],{"class":714},[478,80483,80431],{"class":484},[478,80485,263],{"class":714},[478,80487,80175],{"class":5782},[478,80489,80178],{"class":710},[478,80491,80440],{"class":714},[478,80493,2277],{"class":710},[478,80495,6320],{"class":495},[478,80497,80447],{"class":710},[478,80499,80440],{"class":714},[478,80501,2156],{"class":710},[478,80503,80504],{"class":495}," 300",[478,80506,720],{"class":714},[478,80508,80509,80511,80513,80515,80517,80519,80522],{"class":480,"line":33869},[478,80510,80460],{"class":714},[478,80512,2268],{"class":710},[478,80514,2271],{"class":710},[478,80516,80411],{"class":714},[478,80518,54866],{"class":710},[478,80520,80521],{"class":488}," '3'",[478,80523,13008],{"class":714},[478,80525,80526,80528,80530,80532,80534,80536,80538,80540,80542,80544,80546],{"class":480,"line":33880},[478,80527,80423],{"class":714},[478,80529,759],{"class":710},[478,80531,80428],{"class":714},[478,80533,80431],{"class":484},[478,80535,263],{"class":714},[478,80537,80175],{"class":5782},[478,80539,80178],{"class":710},[478,80541,80440],{"class":714},[478,80543,2277],{"class":710},[478,80545,80504],{"class":495},[478,80547,720],{"class":714},[478,80549,80550],{"class":480,"line":33886},[478,80551,3095],{"class":714},[478,80553,80554],{"class":480,"line":33906},[478,80555,80556],{"class":770},"        \u002F\u002F 渲染函数\n",[478,80558,80559,80561],{"class":480,"line":33912},[478,80560,70788],{"class":484},[478,80562,52792],{"class":714},[478,80564,80565],{"class":480,"line":33918},[478,80566,52778],{"class":714},[478,80568,80569],{"class":480,"line":33924},[478,80570,2966],{"emptyLinePlaceholder":640},[478,80572,80573],{"class":480,"line":33941},[478,80574,33841],{"class":714},[478,80576,80577,80579,80581],{"class":480,"line":33947},[478,80578,52797],{"class":714},[478,80580,52193],{"class":51680},[478,80582,51687],{"class":714},[478,80584,80585,80587,80589],{"class":480,"line":33953},[478,80586,52165],{"class":714},[478,80588,52180],{"class":51680},[478,80590,51687],{"class":714},[478,80592,80593],{"class":480,"line":33959},[478,80594,2966],{"emptyLinePlaceholder":640},[478,80596,80597,80599,80601],{"class":480,"line":33965},[478,80598,52165],{"class":714},[478,80600,51015],{"class":51680},[478,80602,51687],{"class":714},[14,80604,80606],{"id":80605},"_410-深入了解对象","4.10 深入了解对象",[129,80608,80610],{"id":80609},"_4101-创建对象","4.10.1 创建对象",[19,80612,80613],{},[52,80614],{"alt":54,"src":80615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80617,80618],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[129,80620,80622],{"id":80621},"_4102-构造函数","4.10.2 构造函数",[19,80624,80625,80628],{},[45,80626,80627],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80630,80631,80634],{},[45,80632,80633],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[469,80636,80638],{"className":51013,"code":80637,"language":51015,"meta":54,"style":54},"\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",[475,80639,80640,80648,80653,80674,80687,80699,80711,80715,80720,80747,80752,80779],{"__ignoreMap":54},[478,80641,80642,80644,80646],{"class":480,"line":481},[478,80643,1605],{"class":714},[478,80645,52193],{"class":51680},[478,80647,51687],{"class":714},[478,80649,80650],{"class":480,"line":565},[478,80651,80652],{"class":770},"\u002F\u002F例：\n",[478,80654,80655,80657,80660,80662,80664,80666,80668,80670,80672],{"class":480,"line":579},[478,80656,54829],{"class":710},[478,80658,80659],{"class":484}," Pig",[478,80661,263],{"class":714},[478,80663,80190],{"class":5782},[478,80665,1079],{"class":714},[478,80667,70601],{"class":5782},[478,80669,1079],{"class":714},[478,80671,70618],{"class":5782},[478,80673,13008],{"class":714},[478,80675,80676,80679,80682,80684],{"class":480,"line":593},[478,80677,80678],{"class":495},"    this",[478,80680,80681],{"class":714},".name",[478,80683,759],{"class":710},[478,80685,80686],{"class":714},"name\n",[478,80688,80689,80691,80694,80696],{"class":480,"line":1769},[478,80690,80678],{"class":495},[478,80692,80693],{"class":714},".age",[478,80695,759],{"class":710},[478,80697,80698],{"class":714},"age\n",[478,80700,80701,80703,80706,80708],{"class":480,"line":1783},[478,80702,80678],{"class":495},[478,80704,80705],{"class":714},".gender",[478,80707,759],{"class":710},[478,80709,80710],{"class":714},"gender    \n",[478,80712,80713],{"class":480,"line":1789},[478,80714,2133],{"class":714},[478,80716,80717],{"class":480,"line":1880},[478,80718,80719],{"class":770},"\u002F\u002F创建佩奇对象\n",[478,80721,80722,80724,80727,80729,80731,80733,80736,80738,80740,80742,80745],{"class":480,"line":1886},[478,80723,7358],{"class":710},[478,80725,80726],{"class":495}," Peppa",[478,80728,12283],{"class":710},[478,80730,80659],{"class":484},[478,80732,263],{"class":714},[478,80734,80735],{"class":488},"'佩奇'",[478,80737,1079],{"class":714},[478,80739,1045],{"class":495},[478,80741,1079],{"class":714},[478,80743,80744],{"class":488},"'女'",[478,80746,720],{"class":714},[478,80748,80749],{"class":480,"line":1898},[478,80750,80751],{"class":770},"\u002F\u002F创建乔治对象\n",[478,80753,80754,80756,80759,80761,80763,80765,80768,80770,80772,80774,80777],{"class":480,"line":2180},[478,80755,7358],{"class":710},[478,80757,80758],{"class":495}," George",[478,80760,12283],{"class":710},[478,80762,80659],{"class":484},[478,80764,263],{"class":714},[478,80766,80767],{"class":488},"'乔治'",[478,80769,1079],{"class":714},[478,80771,783],{"class":495},[478,80773,1079],{"class":714},[478,80775,80776],{"class":488},"'男'",[478,80778,720],{"class":714},[478,80780,80781,80783,80785],{"class":480,"line":2185},[478,80782,52165],{"class":714},[478,80784,52193],{"class":51680},[478,80786,51687],{"class":714},[19,80788,80789],{},[52,80790],{"alt":54,"src":80791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80793,80794],{},[52,80795],{"alt":54,"src":80796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80798,80799],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80801,80802],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80804,80805],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80807,80808],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80810,80811],{},"这里用等号是因为：对象.属性=值",[19,80813,80814],{},"①利用对象字面量创建对象",[19,80816,80817],{},"const o={",[19,80819,80820],{},"name:'pink'",[19,80822,80823],{},"} ②利用new Object创建对象",[19,80825,80826],{},"const o=new Object({name:'pink'})",[19,80828,80829],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80831,80832],{},"构造函数创建对象的执行过程：",[19,80834,80835],{},[52,80836],{"alt":54,"src":80837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[129,80839,80841],{"id":80840},"_4103-实例成员","4.10.3 实例成员",[19,80843,80844],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[29,80846,80847,80850,80853],{},[32,80848,80849],{},"实例对象的属性和方法即为实例成员",[32,80851,80852],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[32,80854,80855],{},"构造函数创建的实例对象彼此独立互不影响",[129,80857,80859],{"id":80858},"_4104-静态成员","4.10.4 静态成员",[19,80861,80862],{},[52,80863],{"alt":54,"src":80864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80866,80867],{},"静态成员有Date.now() Math.PI Math.random()",[19,80869,80870],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80872,80873],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80875,80876],{},"function Pig(name) n {",[19,80878,80879],{},"this.name=name",[19,80881,1641],{},[19,80883,80884],{},"Pig.eyes=2",[19,80886,80887],{},"Pig.sayHai=function () { console.log(this) }",[19,80889,80890],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80892,80893],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80895,11898],{},[29,80897,80898,80901,80904,80907,80910],{},[32,80899,80900],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[32,80902,80903],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[32,80905,80906],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[32,80908,80909],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[32,80911,80912],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80914,80915],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[129,80917,80919],{"id":80918},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80921,80922],{},"内置构造函数包含：",[19,80924,80925],{},[52,80926],{"alt":54,"src":80927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80929,80930],{},[52,80931],{"alt":54,"src":80932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80934,80935],{},"这些基本数据类型，js对他们进行了包装",[52193,80937,80938],{},"\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",[22563,80940,80942],{"id":80941},"_41051-object","4.10.5.1 Object",[19,80944,80945],{},"Object 是内置的构造函数，用于创建普通对象",[19,80947,80948],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[469,80950,80952],{"className":51013,"code":80951,"language":51015,"meta":54,"style":54},"const user=new Object({name:'小明',age:15})\n",[475,80953,80954],{"__ignoreMap":54},[478,80955,80956],{"class":480,"line":481},[478,80957,80951],{"class":714},[19,80959,80960],{},"三个常用的静态方法：",[23475,80962,80964],{"id":80963},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80966,80967],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80969,80970],{},[52,80971],{"alt":54,"src":80972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80974,80975],{},[52,80976],{"alt":54,"src":80977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[469,80979,80981],{"className":53447,"code":80980,"language":53449,"meta":54,"style":54},"\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",[475,80982,80983,80991,80999,81004,81009,81014,81019,81024,81029,81037],{"__ignoreMap":54},[478,80984,80985,80987,80989],{"class":480,"line":481},[478,80986,1605],{"class":714},[478,80988,52180],{"class":51680},[478,80990,51687],{"class":714},[478,80992,80993,80995,80997],{"class":480,"line":565},[478,80994,52524],{"class":714},[478,80996,52193],{"class":51680},[478,80998,51687],{"class":714},[478,81000,81001],{"class":480,"line":579},[478,81002,81003],{"class":714},"    const o = { name: 'pink', age: 6 }\n",[478,81005,81006],{"class":480,"line":593},[478,81007,81008],{"class":714},"    \u002F\u002F 获得所有属性名\n",[478,81010,81011],{"class":480,"line":1769},[478,81012,81013],{"class":714},"    const arr = Object.keys(o)\n",[478,81015,81016],{"class":480,"line":1783},[478,81017,81018],{"class":714},"    console.log(arr)\n",[478,81020,81021],{"class":480,"line":1789},[478,81022,81023],{"class":714},"    \u002F\u002F 获得所有属性值\n",[478,81025,81026],{"class":480,"line":1880},[478,81027,81028],{"class":714},"    console.log(Object.values(o))\n",[478,81030,81031,81033,81035],{"class":480,"line":1886},[478,81032,52797],{"class":714},[478,81034,52193],{"class":51680},[478,81036,51687],{"class":714},[478,81038,81039,81041,81043],{"class":480,"line":1898},[478,81040,52165],{"class":714},[478,81042,52180],{"class":51680},[478,81044,51687],{"class":714},[23475,81046,81048],{"id":81047},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81050,81051],{},"Object.assign(oo,o)",[19,81053,81054],{},"后的东西添加给前 是追加",[19,81056,81057],{},[52,81058],{"alt":54,"src":81059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81061,81062],{},[52,81063],{"alt":54,"src":81064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[469,81066,81068],{"className":53447,"code":81067,"language":53449,"meta":54,"style":54},"\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",[475,81069,81070,81078,81086,81090,81094,81098,81102,81106,81110,81115,81120,81125,81130,81135,81143],{"__ignoreMap":54},[478,81071,81072,81074,81076],{"class":480,"line":481},[478,81073,1605],{"class":714},[478,81075,52180],{"class":51680},[478,81077,51687],{"class":714},[478,81079,81080,81082,81084],{"class":480,"line":565},[478,81081,52524],{"class":714},[478,81083,52193],{"class":51680},[478,81085,51687],{"class":714},[478,81087,81088],{"class":480,"line":579},[478,81089,81003],{"class":714},[478,81091,81092],{"class":480,"line":593},[478,81093,81008],{"class":714},[478,81095,81096],{"class":480,"line":1769},[478,81097,81013],{"class":714},[478,81099,81100],{"class":480,"line":1783},[478,81101,81018],{"class":714},[478,81103,81104],{"class":480,"line":1789},[478,81105,81023],{"class":714},[478,81107,81108],{"class":480,"line":1880},[478,81109,81028],{"class":714},[478,81111,81112],{"class":480,"line":1886},[478,81113,81114],{"class":714},"    const oo = {}\n",[478,81116,81117],{"class":480,"line":1898},[478,81118,81119],{"class":714},"    Object.assign(oo, o)\n",[478,81121,81122],{"class":480,"line":2180},[478,81123,81124],{"class":714},"    console.log(oo)\n",[478,81126,81127],{"class":480,"line":2185},[478,81128,81129],{"class":714},"    Object.assign(o, { gender: '女' })\n",[478,81131,81132],{"class":480,"line":2191},[478,81133,81134],{"class":714},"    console.log(o)\n",[478,81136,81137,81139,81141],{"class":480,"line":2196},[478,81138,52797],{"class":714},[478,81140,52193],{"class":51680},[478,81142,51687],{"class":714},[478,81144,81145,81147,81149],{"class":480,"line":2210},[478,81146,52165],{"class":714},[478,81148,52180],{"class":51680},[478,81150,51687],{"class":714},[19,81152,81153],{},[52,81154],{"alt":54,"src":81155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22563,81157,81159],{"id":81158},"_41052-array","4.10.5.2 Array",[19,81161,81162],{},"Array 是内置的构造函数，用于创建数组",[19,81164,81165],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[469,81167,81169],{"className":51013,"code":81168,"language":51015,"meta":54,"style":54},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[475,81170,81171,81176],{"__ignoreMap":54},[478,81172,81173],{"class":480,"line":481},[478,81174,81175],{"class":714},"const arr=new Array(3,5)\n",[478,81177,81178],{"class":480,"line":565},[478,81179,81180],{"class":714},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81182,81183],{},"Array的实例方法，这个方法是实例成员",[19,81185,81186],{},[52,81187],{"alt":54,"src":81188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23475,81190,81192],{"id":81191},"_410521-reduce","4.10.5.2.1 reduce",[19,81194,81195],{},[52,81196],{"alt":54,"src":81197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[469,81199,81201],{"className":53447,"code":81200,"language":53449,"meta":54,"style":54},"\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",[475,81202,81203,81211,81219,81224,81229,81234,81239,81243,81248,81253,81258,81262,81267,81272,81276,81281,81286,81291,81299],{"__ignoreMap":54},[478,81204,81205,81207,81209],{"class":480,"line":481},[478,81206,1605],{"class":714},[478,81208,52180],{"class":51680},[478,81210,51687],{"class":714},[478,81212,81213,81215,81217],{"class":480,"line":565},[478,81214,52524],{"class":714},[478,81216,52193],{"class":51680},[478,81218,51687],{"class":714},[478,81220,81221],{"class":480,"line":579},[478,81222,81223],{"class":714},"    const arr = [1, 5, 8]\n",[478,81225,81226],{"class":480,"line":593},[478,81227,81228],{"class":714},"    \u002F\u002F 1.没有初始值\n",[478,81230,81231],{"class":480,"line":1769},[478,81232,81233],{"class":714},"    const total = arr.reduce(function (prev, current) {\n",[478,81235,81236],{"class":480,"line":1783},[478,81237,81238],{"class":714},"      return prev + current\n",[478,81240,81241],{"class":480,"line":1789},[478,81242,33841],{"class":714},[478,81244,81245],{"class":480,"line":1880},[478,81246,81247],{"class":714},"    console.log(total)   \u002F\u002F14\n",[478,81249,81250],{"class":480,"line":1886},[478,81251,81252],{"class":714},"    \u002F\u002F 2.有初始值\n",[478,81254,81255],{"class":480,"line":1898},[478,81256,81257],{"class":714},"    const total1 = arr.reduce(function (prev, current) {\n",[478,81259,81260],{"class":480,"line":2180},[478,81261,81238],{"class":714},[478,81263,81264],{"class":480,"line":2185},[478,81265,81266],{"class":714},"    }, 10)\n",[478,81268,81269],{"class":480,"line":2191},[478,81270,81271],{"class":714},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[478,81273,81274],{"class":480,"line":2196},[478,81275,2966],{"emptyLinePlaceholder":640},[478,81277,81278],{"class":480,"line":2210},[478,81279,81280],{"class":714},"    \u002F\u002F 3.箭头函数写法\n",[478,81282,81283],{"class":480,"line":2215},[478,81284,81285],{"class":714},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[478,81287,81288],{"class":480,"line":2221},[478,81289,81290],{"class":714},"    console.log(total2)   \u002F\u002F24\n",[478,81292,81293,81295,81297],{"class":480,"line":2241},[478,81294,52797],{"class":714},[478,81296,52193],{"class":51680},[478,81298,51687],{"class":714},[478,81300,81301,81303,81305],{"class":480,"line":2246},[478,81302,52165],{"class":714},[478,81304,52180],{"class":51680},[478,81306,51687],{"class":714},[19,81308,81309],{},"执行过程：",[29,81311,81312,81315,81318],{},[32,81313,81314],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[32,81316,81317],{},"每一次循环，把返回值给作为下一次循环的上一次值",[32,81319,81320],{},"如果有起始值，则起始值作为上一次值",[469,81322,81324],{"className":53447,"code":81323,"language":53449,"meta":54,"style":54},"\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",[475,81325,81326,81334,81342,81346,81350,81354,81358,81362,81366,81371,81376,81381,81386,81391,81395,81399,81403,81407,81411,81415,81420,81424,81429,81433,81438,81443,81447,81451,81455,81463],{"__ignoreMap":54},[478,81327,81328,81330,81332],{"class":480,"line":481},[478,81329,1605],{"class":714},[478,81331,52180],{"class":51680},[478,81333,51687],{"class":714},[478,81335,81336,81338,81340],{"class":480,"line":565},[478,81337,52524],{"class":714},[478,81339,52193],{"class":51680},[478,81341,51687],{"class":714},[478,81343,81344],{"class":480,"line":579},[478,81345,81223],{"class":714},[478,81347,81348],{"class":480,"line":593},[478,81349,81228],{"class":714},[478,81351,81352],{"class":480,"line":1769},[478,81353,81233],{"class":714},[478,81355,81356],{"class":480,"line":1783},[478,81357,81238],{"class":714},[478,81359,81360],{"class":480,"line":1789},[478,81361,33841],{"class":714},[478,81363,81364],{"class":480,"line":1880},[478,81365,81247],{"class":714},[478,81367,81368],{"class":480,"line":1886},[478,81369,81370],{"class":714},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[478,81372,81373],{"class":480,"line":1898},[478,81374,81375],{"class":714},"    \u002F\u002F     1              5                    6\n",[478,81377,81378],{"class":480,"line":2180},[478,81379,81380],{"class":714},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[478,81382,81383],{"class":480,"line":2185},[478,81384,81385],{"class":714},"    \u002F\u002F     6              8                    14\n",[478,81387,81388],{"class":480,"line":2191},[478,81389,81390],{"class":714},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[478,81392,81393],{"class":480,"line":2196},[478,81394,81252],{"class":714},[478,81396,81397],{"class":480,"line":2210},[478,81398,81257],{"class":714},[478,81400,81401],{"class":480,"line":2215},[478,81402,81238],{"class":714},[478,81404,81405],{"class":480,"line":2221},[478,81406,81266],{"class":714},[478,81408,81409],{"class":480,"line":2241},[478,81410,81271],{"class":714},[478,81412,81413],{"class":480,"line":2246},[478,81414,81370],{"class":714},[478,81416,81417],{"class":480,"line":2260},[478,81418,81419],{"class":714},"    \u002F\u002F     10             1                     11\n",[478,81421,81422],{"class":480,"line":2265},[478,81423,81380],{"class":714},[478,81425,81426],{"class":480,"line":2294},[478,81427,81428],{"class":714},"    \u002F\u002F     11             5                    16\n",[478,81430,81431],{"class":480,"line":2299},[478,81432,81380],{"class":714},[478,81434,81435],{"class":480,"line":2316},[478,81436,81437],{"class":714},"    \u002F\u002F     16             8                    24\n",[478,81439,81440],{"class":480,"line":2321},[478,81441,81442],{"class":714},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[478,81444,81445],{"class":480,"line":2326},[478,81446,81280],{"class":714},[478,81448,81449],{"class":480,"line":2331},[478,81450,81285],{"class":714},[478,81452,81453],{"class":480,"line":2345},[478,81454,81290],{"class":714},[478,81456,81457,81459,81461],{"class":480,"line":2350},[478,81458,52797],{"class":714},[478,81460,52193],{"class":51680},[478,81462,51687],{"class":714},[478,81464,81465,81467,81469],{"class":480,"line":3143},[478,81466,52165],{"class":714},[478,81468,52180],{"class":51680},[478,81470,51687],{"class":714},[23475,81472,81474],{"id":81473},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81476,81477],{},[52,81478],{"alt":54,"src":81479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[469,81481,81483],{"className":53447,"code":81482,"language":53449,"meta":54,"style":54},"\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",[475,81484,81485,81493,81501,81506,81511,81516,81521,81525,81530,81535,81540,81545,81550,81555,81559,81564,81568,81573,81581],{"__ignoreMap":54},[478,81486,81487,81489,81491],{"class":480,"line":481},[478,81488,1605],{"class":714},[478,81490,52180],{"class":51680},[478,81492,51687],{"class":714},[478,81494,81495,81497,81499],{"class":480,"line":565},[478,81496,52524],{"class":714},[478,81498,52193],{"class":51680},[478,81500,51687],{"class":714},[478,81502,81503],{"class":480,"line":579},[478,81504,81505],{"class":714},"    const arr = [\n",[478,81507,81508],{"class":480,"line":593},[478,81509,81510],{"class":714},"      { name: '张三', salary: 10000 },\n",[478,81512,81513],{"class":480,"line":1769},[478,81514,81515],{"class":714},"      { name: '李四', salary: 10000 },\n",[478,81517,81518],{"class":480,"line":1783},[478,81519,81520],{"class":714},"      { name: '王五', salary: 10000 }\n",[478,81522,81523],{"class":480,"line":1789},[478,81524,53489],{"class":714},[478,81526,81527],{"class":480,"line":1880},[478,81528,81529],{"class":714},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[478,81531,81532],{"class":480,"line":1886},[478,81533,81534],{"class":714},"    \u002F\u002F prev是累计值\n",[478,81536,81537],{"class":480,"line":1898},[478,81538,81539],{"class":714},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[478,81541,81542],{"class":480,"line":2180},[478,81543,81544],{"class":714},"    console.log(total)\n",[478,81546,81547],{"class":480,"line":2185},[478,81548,81549],{"class":714},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[478,81551,81552],{"class":480,"line":2191},[478,81553,81554],{"class":714},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[478,81556,81557],{"class":480,"line":2196},[478,81558,81549],{"class":714},[478,81560,81561],{"class":480,"line":2210},[478,81562,81563],{"class":714},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[478,81565,81566],{"class":480,"line":2215},[478,81567,81549],{"class":714},[478,81569,81570],{"class":480,"line":2221},[478,81571,81572],{"class":714},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[478,81574,81575,81577,81579],{"class":480,"line":2241},[478,81576,52797],{"class":714},[478,81578,52193],{"class":51680},[478,81580,51687],{"class":714},[478,81582,81583,81585,81587],{"class":480,"line":2246},[478,81584,52165],{"class":714},[478,81586,52180],{"class":51680},[478,81588,51687],{"class":714},[23475,81590,81592],{"id":81591},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81594,81595],{},[52,81596],{"alt":54,"src":81597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81599,81600],{},[52,81601],{"alt":54,"src":81602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[29,81604,81605],{},[32,81606,81607],{},"find()",[19,81609,81610],{},"循环查找，找到第一个就ok",[19,81612,81613],{},[518,81614,81617],{"href":81615,"rel":81616},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[522],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[469,81619,81621],{"className":51013,"code":81620,"language":51015,"meta":54,"style":54},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[475,81622,81623,81628,81633],{"__ignoreMap":54},[478,81624,81625],{"class":480,"line":481},[478,81626,81627],{"class":714},"const array1 = [5, 12, 8, 130, 44]\n",[478,81629,81630],{"class":480,"line":565},[478,81631,81632],{"class":714},"const found = array1.find((element) => element > 10)\n",[478,81634,81635],{"class":480,"line":579},[478,81636,81637],{"class":714},"console.log(found)  \u002F\u002F12\n",[19,81639,81640,81642,81643,81648,81649,81652,81653,81655,81656,81661,81662,81664,81665,81667,81668,81670,81671],{},[475,81641,81607],{}," 方法是一个",[518,81644,81647],{"href":81645,"rel":81646},"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",[522],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[475,81650,81651],{},"callbackFn"," 函数，直到 ",[475,81654,81651],{}," 返回一个",[518,81657,81660],{"href":81658,"rel":81659},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[522],"真值","。然后 ",[475,81663,81607],{}," 返回该元素并停止迭代数组。如果 ",[475,81666,81651],{}," 从未返回真值，则 ",[475,81669,81607],{}," 返回 ",[475,81672,81673],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[469,81675,81677],{"className":53447,"code":81676,"language":53449,"meta":54,"style":54},"\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",[475,81678,81679,81687,81695,81700,81705,81710,81714,81719,81724,81728,81733,81738,81742,81746,81751,81756,81760,81764,81769,81774,81779,81784,81789,81793,81798,81803,81808,81813,81817,81822,81830],{"__ignoreMap":54},[478,81680,81681,81683,81685],{"class":480,"line":481},[478,81682,1605],{"class":714},[478,81684,52180],{"class":51680},[478,81686,51687],{"class":714},[478,81688,81689,81691,81693],{"class":480,"line":565},[478,81690,52524],{"class":714},[478,81692,52193],{"class":51680},[478,81694,51687],{"class":714},[478,81696,81697],{"class":480,"line":579},[478,81698,81699],{"class":714},"    const arr = ['red', 'blue', 'green']\n",[478,81701,81702],{"class":480,"line":593},[478,81703,81704],{"class":714},"    const found = arr.find(item => item === 'pink')\n",[478,81706,81707],{"class":480,"line":1769},[478,81708,81709],{"class":714},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[478,81711,81712],{"class":480,"line":1783},[478,81713,2966],{"emptyLinePlaceholder":640},[478,81715,81716],{"class":480,"line":1789},[478,81717,81718],{"class":714},"    \u002F\u002F 使用场景，用于查找数据\n",[478,81720,81721],{"class":480,"line":1880},[478,81722,81723],{"class":714},"    const arr1 = [\n",[478,81725,81726],{"class":480,"line":1886},[478,81727,79766],{"class":714},[478,81729,81730],{"class":480,"line":1898},[478,81731,81732],{"class":714},"        name: '小米',\n",[478,81734,81735],{"class":480,"line":2180},[478,81736,81737],{"class":714},"        price: 1999\n",[478,81739,81740],{"class":480,"line":2185},[478,81741,78272],{"class":714},[478,81743,81744],{"class":480,"line":2191},[478,81745,79766],{"class":714},[478,81747,81748],{"class":480,"line":2196},[478,81749,81750],{"class":714},"        name: '华为',\n",[478,81752,81753],{"class":480,"line":2210},[478,81754,81755],{"class":714},"        price: 3999\n",[478,81757,81758],{"class":480,"line":2215},[478,81759,52778],{"class":714},[478,81761,81762],{"class":480,"line":2221},[478,81763,53489],{"class":714},[478,81765,81766],{"class":480,"line":2241},[478,81767,81768],{"class":714},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[478,81770,81771],{"class":480,"line":2246},[478,81772,81773],{"class":714},"    \u002F\u002F const found1 = arr1.find(item => {\n",[478,81775,81776],{"class":480,"line":2260},[478,81777,81778],{"class":714},"    \u002F\u002F   if (item.name === '小米') {\n",[478,81780,81781],{"class":480,"line":2265},[478,81782,81783],{"class":714},"    \u002F\u002F     return item\n",[478,81785,81786],{"class":480,"line":2294},[478,81787,81788],{"class":714},"    \u002F\u002F   }\n",[478,81790,81791],{"class":480,"line":2299},[478,81792,63670],{"class":714},[478,81794,81795],{"class":480,"line":2316},[478,81796,81797],{"class":714},"    \u002F\u002F 另一种写法\n",[478,81799,81800],{"class":480,"line":2321},[478,81801,81802],{"class":714},"    const found1 = arr1.find(item => {\n",[478,81804,81805],{"class":480,"line":2326},[478,81806,81807],{"class":714},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[478,81809,81810],{"class":480,"line":2331},[478,81811,81812],{"class":714},"      return item.name = '小米'\n",[478,81814,81815],{"class":480,"line":2345},[478,81816,33841],{"class":714},[478,81818,81819],{"class":480,"line":2350},[478,81820,81821],{"class":714},"    console.log(found1)\n",[478,81823,81824,81826,81828],{"class":480,"line":3143},[478,81825,52797],{"class":714},[478,81827,52193],{"class":51680},[478,81829,51687],{"class":714},[478,81831,81832,81834,81836],{"class":480,"line":3157},[478,81833,52165],{"class":714},[478,81835,52180],{"class":51680},[478,81837,51687],{"class":714},[19,81839,81840],{},[52,81841],{"alt":54,"src":81842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81844,81845],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[29,81847,81848],{"start":565},[32,81849,81850],{},"every()返回的是布尔值",[19,81852,81853],{},[518,81854,81857],{"href":81855,"rel":81856},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[522],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81859,81860],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81862,81863],{},"some是只有有一个就没问题",[19,81865,81866],{},"every是必须全是才行",[469,81868,81872],{"className":81869,"code":81870,"language":81871,"meta":54,"style":54},"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",[475,81873,81874,81890,81904,81908,81917],{"__ignoreMap":54},[478,81875,81876,81878,81881,81883,81885,81888],{"class":480,"line":481},[478,81877,54829],{"class":710},[478,81879,81880],{"class":714}," isBigEnough(element, ",[478,81882,74438],{"class":710},[478,81884,13001],{"class":714},[478,81886,81887],{"class":710},"array",[478,81889,13008],{"class":714},[478,81891,81892,81895,81898,81900,81902],{"class":480,"line":565},[478,81893,81894],{"class":710},"  return",[478,81896,81897],{"class":714}," element ",[478,81899,2277],{"class":710},[478,81901,2604],{"class":495},[478,81903,1859],{"class":714},[478,81905,81906],{"class":480,"line":579},[478,81907,2133],{"class":714},[478,81909,81910,81913,81915],{"class":480,"line":593},[478,81911,81912],{"class":714},"[12, 5, 8, 130, 44].every(isBigEnough); ",[478,81914,33709],{"class":710},[478,81916,54896],{"class":714},[478,81918,81919,81922,81924],{"class":480,"line":1769},[478,81920,81921],{"class":714},"[12, 54, 18, 130, 44].every(isBigEnough); ",[478,81923,33709],{"class":710},[478,81925,58320],{"class":714},[469,81927,81929],{"className":53447,"code":81928,"language":53449,"meta":54,"style":54},"\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",[475,81930,81931,81939,81947,81952,81956,81961,81966,81974],{"__ignoreMap":54},[478,81932,81933,81935,81937],{"class":480,"line":481},[478,81934,1605],{"class":714},[478,81936,52180],{"class":51680},[478,81938,51687],{"class":714},[478,81940,81941,81943,81945],{"class":480,"line":565},[478,81942,52524],{"class":714},[478,81944,52193],{"class":51680},[478,81946,51687],{"class":714},[478,81948,81949],{"class":480,"line":579},[478,81950,81951],{"class":714},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[478,81953,81954],{"class":480,"line":593},[478,81955,78702],{"class":714},[478,81957,81958],{"class":480,"line":1769},[478,81959,81960],{"class":714},"    const flag = arr.every(item => item >= 10)\n",[478,81962,81963],{"class":480,"line":1783},[478,81964,81965],{"class":714},"    console.log(flag)    \u002F\u002Ftrue\n",[478,81967,81968,81970,81972],{"class":480,"line":1789},[478,81969,52797],{"class":714},[478,81971,52193],{"class":51680},[478,81973,51687],{"class":714},[478,81975,81976,81978,81980],{"class":480,"line":1880},[478,81977,52165],{"class":714},[478,81979,52180],{"class":51680},[478,81981,51687],{"class":714},[469,81983,81985],{"className":53447,"code":81984,"language":53449,"meta":54,"style":54},"\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",[475,81986,81987,81995,82003,82007,82012,82017,82022,82030],{"__ignoreMap":54},[478,81988,81989,81991,81993],{"class":480,"line":481},[478,81990,1605],{"class":714},[478,81992,52180],{"class":51680},[478,81994,51687],{"class":714},[478,81996,81997,81999,82001],{"class":480,"line":565},[478,81998,52524],{"class":714},[478,82000,52193],{"class":51680},[478,82002,51687],{"class":714},[478,82004,82005],{"class":480,"line":579},[478,82006,81951],{"class":714},[478,82008,82009],{"class":480,"line":593},[478,82010,82011],{"class":714},"    const arr = [10, 0, 5]\n",[478,82013,82014],{"class":480,"line":1769},[478,82015,82016],{"class":714},"    const flag = arr.some(item => item >= 10)\n",[478,82018,82019],{"class":480,"line":1783},[478,82020,82021],{"class":714},"    console.log(flag)   \u002F\u002Ftrue\n",[478,82023,82024,82026,82028],{"class":480,"line":1789},[478,82025,52797],{"class":714},[478,82027,52193],{"class":51680},[478,82029,51687],{"class":714},[478,82031,82032,82034,82036],{"class":480,"line":1880},[478,82033,52165],{"class":714},[478,82035,52180],{"class":51680},[478,82037,51687],{"class":714},[23475,82039,82041],{"id":82040},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82043,82044],{},[52,82045],{"alt":54,"src":82046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[469,82048,82050],{"className":51013,"code":82049,"language":51015,"meta":54,"style":54},"\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",[475,82051,82052,82062,82076,82080,82088,82102,82122,82134,82142,82149,82161,82173,82185,82197,82207,82217,82221,82229,82237,82241,82249,82261,82269,82291,82296,82301,82334,82342,82350,82354],{"__ignoreMap":54},[478,82053,82054,82056,82058,82060],{"class":480,"line":481},[478,82055,51677],{"class":714},[478,82057,51681],{"class":51680},[478,82059,51684],{"class":484},[478,82061,51687],{"class":714},[478,82063,82064,82066,82068,82070,82072,82074],{"class":480,"line":565},[478,82065,1605],{"class":714},[478,82067,51015],{"class":51680},[478,82069,51696],{"class":484},[478,82071,759],{"class":714},[478,82073,51701],{"class":488},[478,82075,51687],{"class":714},[478,82077,82078],{"class":480,"line":579},[478,82079,2966],{"emptyLinePlaceholder":640},[478,82081,82082,82084,82086],{"class":480,"line":593},[478,82083,1605],{"class":714},[478,82085,51714],{"class":51680},[478,82087,51687],{"class":714},[478,82089,82090,82092,82094,82096,82098,82100],{"class":480,"line":1769},[478,82091,52524],{"class":714},[478,82093,51724],{"class":51680},[478,82095,51727],{"class":484},[478,82097,759],{"class":714},[478,82099,51732],{"class":488},[478,82101,51687],{"class":714},[478,82103,82104,82106,82108,82110,82112,82114,82116,82118,82120],{"class":480,"line":1783},[478,82105,52524],{"class":714},[478,82107,51724],{"class":51680},[478,82109,15485],{"class":484},[478,82111,759],{"class":714},[478,82113,51771],{"class":488},[478,82115,51751],{"class":484},[478,82117,759],{"class":714},[478,82119,51778],{"class":488},[478,82121,51687],{"class":714},[478,82123,82124,82126,82128,82130,82132],{"class":480,"line":1789},[478,82125,52524],{"class":714},[478,82127,51787],{"class":51680},[478,82129,51790],{"class":714},[478,82131,51787],{"class":51680},[478,82133,51687],{"class":714},[478,82135,82136,82138,82140],{"class":480,"line":1880},[478,82137,52524],{"class":714},[478,82139,617],{"class":51680},[478,82141,51687],{"class":714},[478,82143,82144,82147],{"class":480,"line":1886},[478,82145,82146],{"class":51680},"    div",[478,82148,16137],{"class":714},[478,82150,82151,82153,82155,82157,82159],{"class":480,"line":1898},[478,82152,55151],{"class":495},[478,82154,51817],{"class":714},[478,82156,2289],{"class":495},[478,82158,51872],{"class":710},[478,82160,1859],{"class":714},[478,82162,82163,82165,82167,82169,82171],{"class":480,"line":2180},[478,82164,55165],{"class":495},[478,82166,51817],{"class":714},[478,82168,1102],{"class":495},[478,82170,51872],{"class":710},[478,82172,1859],{"class":714},[478,82174,82175,82177,82179,82181,82183],{"class":480,"line":2185},[478,82176,57739],{"class":495},[478,82178,51817],{"class":714},[478,82180,1102],{"class":495},[478,82182,51872],{"class":710},[478,82184,1859],{"class":714},[478,82186,82187,82189,82191,82193,82195],{"class":480,"line":2191},[478,82188,65513],{"class":495},[478,82190,51817],{"class":714},[478,82192,1198],{"class":495},[478,82194,51872],{"class":710},[478,82196,1859],{"class":714},[478,82198,82199,82201,82203,82205],{"class":480,"line":2196},[478,82200,57666],{"class":495},[478,82202,51817],{"class":714},[478,82204,51972],{"class":495},[478,82206,1859],{"class":714},[478,82208,82209,82211,82213,82215],{"class":480,"line":2210},[478,82210,55264],{"class":495},[478,82212,51817],{"class":714},[478,82214,52025],{"class":495},[478,82216,1859],{"class":714},[478,82218,82219],{"class":480,"line":2215},[478,82220,2753],{"class":714},[478,82222,82223,82225,82227],{"class":480,"line":2221},[478,82224,52797],{"class":714},[478,82226,617],{"class":51680},[478,82228,51687],{"class":714},[478,82230,82231,82233,82235],{"class":480,"line":2241},[478,82232,52165],{"class":714},[478,82234,51714],{"class":51680},[478,82236,51687],{"class":714},[478,82238,82239],{"class":480,"line":2246},[478,82240,2966],{"emptyLinePlaceholder":640},[478,82242,82243,82245,82247],{"class":480,"line":2260},[478,82244,1605],{"class":714},[478,82246,52180],{"class":51680},[478,82248,51687],{"class":714},[478,82250,82251,82253,82255,82257,82259],{"class":480,"line":2265},[478,82252,52524],{"class":714},[478,82254,51991],{"class":51680},[478,82256,55694],{"class":714},[478,82258,51991],{"class":51680},[478,82260,51687],{"class":714},[478,82262,82263,82265,82267],{"class":480,"line":2294},[478,82264,52524],{"class":714},[478,82266,52193],{"class":51680},[478,82268,51687],{"class":714},[478,82270,82271,82273,82276,82278,82281,82284,82286,82289],{"class":480,"line":2299},[478,82272,11787],{"class":710},[478,82274,82275],{"class":495}," spec",[478,82277,14130],{"class":710},[478,82279,82280],{"class":714}," { size: ",[478,82282,82283],{"class":488},"'40cm*40cm'",[478,82285,55844],{"class":714},[478,82287,82288],{"class":488},"'黑色'",[478,82290,55984],{"class":714},[478,82292,82293],{"class":480,"line":2316},[478,82294,82295],{"class":770},"    \u002F\u002F const arr = Object.values(spec)\n",[478,82297,82298],{"class":480,"line":2321},[478,82299,82300],{"class":770},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[478,82302,82303,82305,82307,82309,82312,82314,82316,82319,82322,82325,82327,82329,82332],{"class":480,"line":2326},[478,82304,52787],{"class":714},[478,82306,54779],{"class":484},[478,82308,263],{"class":714},[478,82310,82311],{"class":488},"'div'",[478,82313,74629],{"class":714},[478,82315,759],{"class":710},[478,82317,82318],{"class":714}," Object.",[478,82320,82321],{"class":484},"values",[478,82323,82324],{"class":714},"(spec).",[478,82326,74603],{"class":484},[478,82328,263],{"class":714},[478,82330,82331],{"class":488},"'\u002F'",[478,82333,720],{"class":714},[478,82335,82336,82338,82340],{"class":480,"line":2331},[478,82337,52797],{"class":714},[478,82339,52193],{"class":51680},[478,82341,51687],{"class":714},[478,82343,82344,82346,82348],{"class":480,"line":2345},[478,82345,52165],{"class":714},[478,82347,52180],{"class":51680},[478,82349,51687],{"class":714},[478,82351,82352],{"class":480,"line":2350},[478,82353,2966],{"emptyLinePlaceholder":640},[478,82355,82356,82358,82360],{"class":480,"line":3143},[478,82357,52165],{"class":714},[478,82359,51015],{"class":51680},[478,82361,51687],{"class":714},[19,82363,82364],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23475,82366,82368],{"id":82367},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82370,82371],{},"静态方法，将伪数组转换为真数组",[19,82373,82374],{},[52,82375],{"alt":54,"src":82376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[469,82378,82380],{"className":53447,"code":82379,"language":53449,"meta":54,"style":54},"\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",[475,82381,82382,82390,82398,82410,82422,82434,82442,82450,82455,82460,82465,82470,82478],{"__ignoreMap":54},[478,82383,82384,82386,82388],{"class":480,"line":481},[478,82385,1605],{"class":714},[478,82387,52180],{"class":51680},[478,82389,51687],{"class":714},[478,82391,82392,82394,82396],{"class":480,"line":565},[478,82393,52524],{"class":714},[478,82395,1702],{"class":51680},[478,82397,51687],{"class":714},[478,82399,82400,82402,82404,82406,82408],{"class":480,"line":579},[478,82401,51721],{"class":714},[478,82403,32],{"class":51680},[478,82405,55694],{"class":714},[478,82407,32],{"class":51680},[478,82409,51687],{"class":714},[478,82411,82412,82414,82416,82418,82420],{"class":480,"line":593},[478,82413,51721],{"class":714},[478,82415,32],{"class":51680},[478,82417,55694],{"class":714},[478,82419,32],{"class":51680},[478,82421,51687],{"class":714},[478,82423,82424,82426,82428,82430,82432],{"class":480,"line":1769},[478,82425,51721],{"class":714},[478,82427,32],{"class":51680},[478,82429,55694],{"class":714},[478,82431,32],{"class":51680},[478,82433,51687],{"class":714},[478,82435,82436,82438,82440],{"class":480,"line":1783},[478,82437,52797],{"class":714},[478,82439,1702],{"class":51680},[478,82441,51687],{"class":714},[478,82443,82444,82446,82448],{"class":480,"line":1789},[478,82445,52524],{"class":714},[478,82447,52193],{"class":51680},[478,82449,51687],{"class":714},[478,82451,82452],{"class":480,"line":1880},[478,82453,82454],{"class":714},"    const lis = document.querySelectorAll('li')\n",[478,82456,82457],{"class":480,"line":1886},[478,82458,82459],{"class":714},"    const liss = Array.from(lis)\n",[478,82461,82462],{"class":480,"line":1898},[478,82463,82464],{"class":714},"    liss.pop()\n",[478,82466,82467],{"class":480,"line":2180},[478,82468,82469],{"class":714},"    console.log(liss)\n",[478,82471,82472,82474,82476],{"class":480,"line":2185},[478,82473,52797],{"class":714},[478,82475,52193],{"class":51680},[478,82477,51687],{"class":714},[478,82479,82480,82482,82484],{"class":480,"line":2191},[478,82481,52165],{"class":714},[478,82483,52180],{"class":51680},[478,82485,51687],{"class":714},[19,82487,82488],{},[52,82489],{"alt":54,"src":82490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22563,82492,82494],{"id":82493},"_41053-string","4.10.5.3 String",[19,82496,82497],{},[52,82498],{"alt":54,"src":82499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23475,82501,82503],{"id":82502},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[469,82505,82507],{"className":53447,"code":82506,"language":53449,"meta":54,"style":54},"\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",[475,82508,82509,82517,82525,82530,82535,82540,82544,82549,82554,82559,82567],{"__ignoreMap":54},[478,82510,82511,82513,82515],{"class":480,"line":481},[478,82512,1605],{"class":714},[478,82514,52180],{"class":51680},[478,82516,51687],{"class":714},[478,82518,82519,82521,82523],{"class":480,"line":565},[478,82520,52524],{"class":714},[478,82522,52193],{"class":51680},[478,82524,51687],{"class":714},[478,82526,82527],{"class":480,"line":579},[478,82528,82529],{"class":714},"    \u002F\u002F 把字符串转化为数组\n",[478,82531,82532],{"class":480,"line":593},[478,82533,82534],{"class":714},"    const str = 'pink,red'\n",[478,82536,82537],{"class":480,"line":1769},[478,82538,82539],{"class":714},"    const arr = str.split(',')\n",[478,82541,82542],{"class":480,"line":1783},[478,82543,81018],{"class":714},[478,82545,82546],{"class":480,"line":1789},[478,82547,82548],{"class":714},"    const str1 = '2025-8-25'\n",[478,82550,82551],{"class":480,"line":1880},[478,82552,82553],{"class":714},"    const arr1 = str1.split('-')\n",[478,82555,82556],{"class":480,"line":1886},[478,82557,82558],{"class":714},"    console.log(arr1)\n",[478,82560,82561,82563,82565],{"class":480,"line":1898},[478,82562,52797],{"class":714},[478,82564,52193],{"class":51680},[478,82566,51687],{"class":714},[478,82568,82569,82571,82573],{"class":480,"line":2180},[478,82570,52165],{"class":714},[478,82572,52180],{"class":51680},[478,82574,51687],{"class":714},[23475,82576,82578],{"id":82577},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82580,5747],{},[19,82582,82583],{},"substring(indexStart)",[19,82585,82586],{},"substring(indexStart, indexEnd)",[1702,82588,82589,82600,82612,82622],{},[32,82590,82591,82592,82595,82596,82599],{},"如果省略了 ",[475,82593,82594],{},"indexEnd","，则 ",[475,82597,82598],{},"substring()"," 提取字符直到字符串的末尾",[32,82601,82602,82603,82606,82607,82595,82609,82611],{},"如果 ",[475,82604,82605],{},"indexStart"," 等于 ",[475,82608,82594],{},[475,82610,82598],{}," 返回一个空字符串",[32,82613,82602,82614,82616,82617,82595,82619,82621],{},[475,82615,82605],{}," 大于 ",[475,82618,82594],{},[475,82620,82598],{}," 的效果就像交换了这两个参数一样",[32,82623,82624],{},"结束的索引号不包含想要截取的部分",[469,82626,82628],{"className":81869,"code":82627,"language":81871,"meta":54,"style":54},"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",[475,82629,82630,82642,82646,82680,82710,82714,82745,82749,82776,82806,82836,82840,82871],{"__ignoreMap":54},[478,82631,82632,82635,82637,82640],{"class":480,"line":481},[478,82633,82634],{"class":714},"const anyString ",[478,82636,759],{"class":710},[478,82638,82639],{"class":488}," \"Mozilla\"",[478,82641,1859],{"class":714},[478,82643,82644],{"class":480,"line":565},[478,82645,2966],{"emptyLinePlaceholder":640},[478,82647,82648,82651,82653,82655,82657,82660,82662,82665,82667,82669,82671,82673,82675,82677],{"class":480,"line":579},[478,82649,82650],{"class":495},"console",[478,82652,1258],{"class":714},[478,82654,58627],{"class":495},[478,82656,263],{"class":714},[478,82658,82659],{"class":495},"anyString",[478,82661,1258],{"class":714},[478,82663,82664],{"class":495},"substring",[478,82666,263],{"class":714},[478,82668,895],{"class":495},[478,82670,13001],{"class":714},[478,82672,193],{"class":495},[478,82674,75633],{"class":714},[478,82676,33709],{"class":710},[478,82678,82679],{"class":488}," 'M'\n",[478,82681,82682,82684,82686,82688,82690,82692,82694,82696,82698,82700,82702,82704,82706,82708],{"class":480,"line":593},[478,82683,82650],{"class":495},[478,82685,1258],{"class":714},[478,82687,58627],{"class":495},[478,82689,263],{"class":714},[478,82691,82659],{"class":495},[478,82693,1258],{"class":714},[478,82695,82664],{"class":495},[478,82697,263],{"class":714},[478,82699,193],{"class":495},[478,82701,13001],{"class":714},[478,82703,895],{"class":495},[478,82705,75633],{"class":714},[478,82707,33709],{"class":710},[478,82709,82679],{"class":488},[478,82711,82712],{"class":480,"line":1769},[478,82713,2966],{"emptyLinePlaceholder":640},[478,82715,82716,82718,82720,82722,82724,82726,82728,82730,82732,82734,82736,82738,82740,82742],{"class":480,"line":1783},[478,82717,82650],{"class":495},[478,82719,1258],{"class":714},[478,82721,58627],{"class":495},[478,82723,263],{"class":714},[478,82725,82659],{"class":495},[478,82727,1258],{"class":714},[478,82729,82664],{"class":495},[478,82731,263],{"class":714},[478,82733,895],{"class":495},[478,82735,13001],{"class":714},[478,82737,1045],{"class":495},[478,82739,75633],{"class":714},[478,82741,33709],{"class":710},[478,82743,82744],{"class":488}," 'Mozill'\n",[478,82746,82747],{"class":480,"line":1789},[478,82748,2966],{"emptyLinePlaceholder":640},[478,82750,82751,82753,82755,82757,82759,82761,82763,82765,82767,82769,82771,82773],{"class":480,"line":1880},[478,82752,82650],{"class":495},[478,82754,1258],{"class":714},[478,82756,58627],{"class":495},[478,82758,263],{"class":714},[478,82760,82659],{"class":495},[478,82762,1258],{"class":714},[478,82764,82664],{"class":495},[478,82766,263],{"class":714},[478,82768,994],{"class":495},[478,82770,75633],{"class":714},[478,82772,33709],{"class":710},[478,82774,82775],{"class":488}," 'lla'\n",[478,82777,82778,82780,82782,82784,82786,82788,82790,82792,82794,82796,82798,82800,82802,82804],{"class":480,"line":1886},[478,82779,82650],{"class":495},[478,82781,1258],{"class":714},[478,82783,58627],{"class":495},[478,82785,263],{"class":714},[478,82787,82659],{"class":495},[478,82789,1258],{"class":714},[478,82791,82664],{"class":495},[478,82793,263],{"class":714},[478,82795,994],{"class":495},[478,82797,13001],{"class":714},[478,82799,1070],{"class":495},[478,82801,75689],{"class":714},[478,82803,33709],{"class":710},[478,82805,82775],{"class":488},[478,82807,82808,82810,82812,82814,82816,82818,82820,82822,82824,82826,82828,82830,82832,82834],{"class":480,"line":1898},[478,82809,82650],{"class":495},[478,82811,1258],{"class":714},[478,82813,58627],{"class":495},[478,82815,263],{"class":714},[478,82817,82659],{"class":495},[478,82819,1258],{"class":714},[478,82821,82664],{"class":495},[478,82823,263],{"class":714},[478,82825,1070],{"class":495},[478,82827,13001],{"class":714},[478,82829,994],{"class":495},[478,82831,75633],{"class":714},[478,82833,33709],{"class":710},[478,82835,82775],{"class":488},[478,82837,82838],{"class":480,"line":2180},[478,82839,2966],{"emptyLinePlaceholder":640},[478,82841,82842,82844,82846,82848,82850,82852,82854,82856,82858,82860,82862,82864,82866,82868],{"class":480,"line":2185},[478,82843,82650],{"class":495},[478,82845,1258],{"class":714},[478,82847,58627],{"class":495},[478,82849,263],{"class":714},[478,82851,82659],{"class":495},[478,82853,1258],{"class":714},[478,82855,82664],{"class":495},[478,82857,263],{"class":714},[478,82859,895],{"class":495},[478,82861,13001],{"class":714},[478,82863,1070],{"class":495},[478,82865,75633],{"class":714},[478,82867,33709],{"class":710},[478,82869,82870],{"class":488}," 'Mozilla'\n",[478,82872,82873,82875,82877,82879,82881,82883,82885,82887,82889,82891,82893,82895,82897,82899],{"class":480,"line":2191},[478,82874,82650],{"class":495},[478,82876,1258],{"class":714},[478,82878,58627],{"class":495},[478,82880,263],{"class":714},[478,82882,82659],{"class":495},[478,82884,1258],{"class":714},[478,82886,82664],{"class":495},[478,82888,263],{"class":714},[478,82890,895],{"class":495},[478,82892,13001],{"class":714},[478,82894,1146],{"class":495},[478,82896,75633],{"class":714},[478,82898,33709],{"class":710},[478,82900,82870],{"class":488},[23475,82902,82904],{"id":82903},"_410533-startswith","4.10.5.3.3 startsWith",[19,82906,82907,82910,82911,82916,82917,82919,82920],{},[475,82908,82909],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[45,82912,82913],{},[475,82914,82915],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[475,82918,1931],{}," 或 ",[475,82921,66400],{},[469,82923,82925],{"className":77875,"code":82924,"language":77877,"meta":54,"style":54},"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",[475,82926,82927,82939,82958,82963,82983],{"__ignoreMap":54},[478,82928,82929,82931,82934,82936],{"class":480,"line":481},[478,82930,7358],{"class":710},[478,82932,82933],{"class":714}," str1 ",[478,82935,759],{"class":710},[478,82937,82938],{"class":488}," \"Saturday night plans\"\n",[478,82940,82941,82943,82945,82948,82951,82953,82956],{"class":480,"line":565},[478,82942,77912],{"class":714},[478,82944,58627],{"class":484},[478,82946,82947],{"class":714},"(str1.",[478,82949,82950],{"class":484},"startsWith",[478,82952,263],{"class":714},[478,82954,82955],{"class":488},"\"Sat\"",[478,82957,30877],{"class":714},[478,82959,82960],{"class":480,"line":579},[478,82961,82962],{"class":770},"\u002F\u002F Expected output: true\n",[478,82964,82965,82967,82969,82971,82973,82975,82977,82979,82981],{"class":480,"line":593},[478,82966,77912],{"class":714},[478,82968,58627],{"class":484},[478,82970,82947],{"class":714},[478,82972,82950],{"class":484},[478,82974,263],{"class":714},[478,82976,82955],{"class":488},[478,82978,13001],{"class":714},[478,82980,783],{"class":495},[478,82982,30877],{"class":714},[478,82984,82985],{"class":480,"line":1769},[478,82986,82987],{"class":770},"\u002F\u002F Expected output: false\n",[469,82989,82991],{"className":51013,"code":82990,"language":51015,"meta":54,"style":54},"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",[475,82992,82993,82998,83003,83007,83012,83017],{"__ignoreMap":54},[478,82994,82995],{"class":480,"line":481},[478,82996,82997],{"class":714},"startsWith(searchString)\n",[478,82999,83000],{"class":480,"line":565},[478,83001,83002],{"class":714},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[478,83004,83005],{"class":480,"line":579},[478,83006,2966],{"emptyLinePlaceholder":640},[478,83008,83009],{"class":480,"line":593},[478,83010,83011],{"class":714},"const str3 = 'pink老师上课中'\n",[478,83013,83014],{"class":480,"line":1769},[478,83015,83016],{"class":714},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[478,83018,83019],{"class":480,"line":1783},[478,83020,83021],{"class":714},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23475,83023,83025],{"id":83024},"_410534-includes","4.10.5.3.4 includes",[19,83027,83028],{},"includes(searchString) includes(searchString, position)",[29,83030,83031],{},[32,83032,83033],{},"searchString:",[19,83035,83036,83037,83039,83040,83045,83046,83051,83052,22065,83055,83058,83059,83062],{},"一个要在 ",[475,83038,1868],{}," 中查找的字符串。",[518,83041,83044],{"href":83042,"rel":83043},"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",[522],"不能是正则表达式","。所有非正则表达式的值都会被",[518,83047,83050],{"href":83048,"rel":83049},"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",[522],"强制转换为字符串","，因此如果该参数被省略或传入 ",[475,83053,83054],{},"undefined",[475,83056,83057],{},"includes()"," 方法会在字符串中搜索 ",[475,83060,83061],{},"\"undefined\"","，这通常不是你想要的",[29,83064,83065],{"start":565},[32,83066,83067,1554],{},[475,83068,83069],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83071,83072,83073,83076,83077],{},"在字符串中开始搜索 ",[475,83074,83075],{},"searchString"," 的位置。默认值为 ",[475,83078,895],{},[29,83080,83081],{"start":579},[32,83082,83083],{},"返回值：",[19,83085,83086,83087,83089,83090,83094,83095],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[475,83088,83075],{}," 为空字符串的情况），则返回 ",[45,83091,83092],{},[475,83093,1931],{}," ，否则返回 ",[45,83096,83097],{},[475,83098,66400],{},[29,83100,83101],{"start":593},[32,83102,83103],{},"异常：",[19,83105,82602,83106,201,83108,83112],{},[475,83107,83075],{},[518,83109,83111],{"href":83042,"rel":83110},[522],"是一个正则表达式","，则会抛出",[19,83114,83115],{},"只要是有就是true，不需要非得以谁开头结尾",[469,83117,83119],{"className":77875,"code":83118,"language":77877,"meta":54,"style":54},"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",[475,83120,83121,83132,83155,83174,83194,83216,83235],{"__ignoreMap":54},[478,83122,83123,83125,83127,83129],{"class":480,"line":481},[478,83124,7358],{"class":710},[478,83126,80155],{"class":714},[478,83128,759],{"class":710},[478,83130,83131],{"class":488}," \"To be, or not to be, that is the question.\"\n",[478,83133,83134,83136,83138,83141,83144,83146,83149,83152],{"class":480,"line":565},[478,83135,77912],{"class":714},[478,83137,58627],{"class":484},[478,83139,83140],{"class":714},"(str.",[478,83142,83143],{"class":484},"includes",[478,83145,263],{"class":714},[478,83147,83148],{"class":488},"\"To be\"",[478,83150,83151],{"class":714},"))",[478,83153,83154],{"class":770},"  \u002F\u002F true\n",[478,83156,83157,83159,83161,83163,83165,83167,83170,83172],{"class":480,"line":579},[478,83158,77912],{"class":714},[478,83160,58627],{"class":484},[478,83162,83140],{"class":714},[478,83164,83143],{"class":484},[478,83166,263],{"class":714},[478,83168,83169],{"class":488},"\"question\"",[478,83171,83151],{"class":714},[478,83173,83154],{"class":770},[478,83175,83176,83178,83180,83182,83184,83186,83189,83191],{"class":480,"line":593},[478,83177,77912],{"class":714},[478,83179,58627],{"class":484},[478,83181,83140],{"class":714},[478,83183,83143],{"class":484},[478,83185,263],{"class":714},[478,83187,83188],{"class":488},"\"nonexistent\"",[478,83190,83151],{"class":714},[478,83192,83193],{"class":770},"  \u002F\u002F false\n",[478,83195,83196,83198,83200,83202,83204,83206,83208,83210,83212,83214],{"class":480,"line":1769},[478,83197,77912],{"class":714},[478,83199,58627],{"class":484},[478,83201,83140],{"class":714},[478,83203,83143],{"class":484},[478,83205,263],{"class":714},[478,83207,83148],{"class":488},[478,83209,13001],{"class":714},[478,83211,193],{"class":495},[478,83213,83151],{"class":714},[478,83215,83193],{"class":770},[478,83217,83218,83220,83222,83224,83226,83228,83231,83233],{"class":480,"line":1783},[478,83219,77912],{"class":714},[478,83221,58627],{"class":484},[478,83223,83140],{"class":714},[478,83225,83143],{"class":484},[478,83227,263],{"class":714},[478,83229,83230],{"class":488},"\"TO BE\"",[478,83232,83151],{"class":714},[478,83234,83193],{"class":770},[478,83236,83237,83239,83241,83243,83245,83247,83249,83251],{"class":480,"line":1789},[478,83238,77912],{"class":714},[478,83240,58627],{"class":484},[478,83242,83140],{"class":714},[478,83244,83143],{"class":484},[478,83246,263],{"class":714},[478,83248,8218],{"class":488},[478,83250,83151],{"class":714},[478,83252,83154],{"class":770},[23475,83254,83256],{"id":83255},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[469,83258,83260],{"className":53447,"code":83259,"language":53449,"meta":54,"style":54},"\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",[475,83261,83262,83270,83278,83283,83288,83293,83298,83303,83311],{"__ignoreMap":54},[478,83263,83264,83266,83268],{"class":480,"line":481},[478,83265,1605],{"class":714},[478,83267,52180],{"class":51680},[478,83269,51687],{"class":714},[478,83271,83272,83274,83276],{"class":480,"line":565},[478,83273,52524],{"class":714},[478,83275,52193],{"class":51680},[478,83277,51687],{"class":714},[478,83279,83280],{"class":480,"line":579},[478,83281,83282],{"class":714},"    const num = 10\n",[478,83284,83285],{"class":480,"line":593},[478,83286,83287],{"class":714},"    \u002F\u002F 强制转换\n",[478,83289,83290],{"class":480,"line":1769},[478,83291,83292],{"class":714},"    console.log(String(num))\n",[478,83294,83295],{"class":480,"line":1783},[478,83296,83297],{"class":714},"    \u002F\u002F toString()方法转换\n",[478,83299,83300],{"class":480,"line":1789},[478,83301,83302],{"class":714},"    console.log(num.toString())\n",[478,83304,83305,83307,83309],{"class":480,"line":1880},[478,83306,52797],{"class":714},[478,83308,52193],{"class":51680},[478,83310,51687],{"class":714},[478,83312,83313,83315,83317],{"class":480,"line":1886},[478,83314,52165],{"class":714},[478,83316,52180],{"class":51680},[478,83318,51687],{"class":714},[23475,83320,83322],{"id":83321},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83324,83325],{},[52,83326],{"alt":54,"src":83327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[469,83329,83331],{"className":51013,"code":83330,"language":51015,"meta":54,"style":54},"\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",[475,83332,83333,83343,83357,83361,83369,83383,83403,83415,83423,83427,83435,83447,83455,83467,83472,83477,83482,83529,83545,83553,83561,83565],{"__ignoreMap":54},[478,83334,83335,83337,83339,83341],{"class":480,"line":481},[478,83336,51677],{"class":714},[478,83338,51681],{"class":51680},[478,83340,51684],{"class":484},[478,83342,51687],{"class":714},[478,83344,83345,83347,83349,83351,83353,83355],{"class":480,"line":565},[478,83346,1605],{"class":714},[478,83348,51015],{"class":51680},[478,83350,51696],{"class":484},[478,83352,759],{"class":714},[478,83354,51701],{"class":488},[478,83356,51687],{"class":714},[478,83358,83359],{"class":480,"line":579},[478,83360,2966],{"emptyLinePlaceholder":640},[478,83362,83363,83365,83367],{"class":480,"line":593},[478,83364,1605],{"class":714},[478,83366,51714],{"class":51680},[478,83368,51687],{"class":714},[478,83370,83371,83373,83375,83377,83379,83381],{"class":480,"line":1769},[478,83372,52524],{"class":714},[478,83374,51724],{"class":51680},[478,83376,51727],{"class":484},[478,83378,759],{"class":714},[478,83380,51732],{"class":488},[478,83382,51687],{"class":714},[478,83384,83385,83387,83389,83391,83393,83395,83397,83399,83401],{"class":480,"line":1783},[478,83386,52524],{"class":714},[478,83388,51724],{"class":51680},[478,83390,15485],{"class":484},[478,83392,759],{"class":714},[478,83394,51771],{"class":488},[478,83396,51751],{"class":484},[478,83398,759],{"class":714},[478,83400,51778],{"class":488},[478,83402,51687],{"class":714},[478,83404,83405,83407,83409,83411,83413],{"class":480,"line":1789},[478,83406,52524],{"class":714},[478,83408,51787],{"class":51680},[478,83410,51790],{"class":714},[478,83412,51787],{"class":51680},[478,83414,51687],{"class":714},[478,83416,83417,83419,83421],{"class":480,"line":1880},[478,83418,52165],{"class":714},[478,83420,51714],{"class":51680},[478,83422,51687],{"class":714},[478,83424,83425],{"class":480,"line":1886},[478,83426,2966],{"emptyLinePlaceholder":640},[478,83428,83429,83431,83433],{"class":480,"line":1898},[478,83430,1605],{"class":714},[478,83432,52180],{"class":51680},[478,83434,51687],{"class":714},[478,83436,83437,83439,83441,83443,83445],{"class":480,"line":2180},[478,83438,52524],{"class":714},[478,83440,51991],{"class":51680},[478,83442,55694],{"class":714},[478,83444,51991],{"class":51680},[478,83446,51687],{"class":714},[478,83448,83449,83451,83453],{"class":480,"line":2185},[478,83450,52524],{"class":714},[478,83452,52193],{"class":51680},[478,83454,51687],{"class":714},[478,83456,83457,83459,83462,83464],{"class":480,"line":2191},[478,83458,11787],{"class":710},[478,83460,83461],{"class":495}," gift",[478,83463,14130],{"class":710},[478,83465,83466],{"class":488}," '50g的茶叶，清洗球'\n",[478,83468,83469],{"class":480,"line":2196},[478,83470,83471],{"class":770},"    \u002F\u002F 1.把字符串拆分为数组\n",[478,83473,83474],{"class":480,"line":2210},[478,83475,83476],{"class":770},"    \u002F\u002F console.log(gift.split(','))\n",[478,83478,83479],{"class":480,"line":2215},[478,83480,83481],{"class":770},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[478,83483,83484,83486,83488,83490,83493,83496,83498,83501,83503,83505,83507,83509,83511,83514,83516,83519,83521,83523,83525,83527],{"class":480,"line":2221},[478,83485,11787],{"class":710},[478,83487,74299],{"class":495},[478,83489,14130],{"class":710},[478,83491,83492],{"class":714}," gift.",[478,83494,83495],{"class":484},"split",[478,83497,263],{"class":714},[478,83499,83500],{"class":488},"'，'",[478,83502,31206],{"class":714},[478,83504,74424],{"class":484},[478,83506,263],{"class":714},[478,83508,80175],{"class":5782},[478,83510,80178],{"class":710},[478,83512,83513],{"class":488}," `\u003Cspan>【赠品】${",[478,83515,80175],{"class":714},[478,83517,83518],{"class":488},"}\u003C\u002Fspan>\u003Cbr>`",[478,83520,31206],{"class":714},[478,83522,74603],{"class":484},[478,83524,263],{"class":714},[478,83526,74608],{"class":488},[478,83528,720],{"class":714},[478,83530,83531,83533,83535,83537,83539,83541,83543],{"class":480,"line":2241},[478,83532,52787],{"class":714},[478,83534,54779],{"class":484},[478,83536,263],{"class":714},[478,83538,82311],{"class":488},[478,83540,74629],{"class":714},[478,83542,759],{"class":710},[478,83544,74365],{"class":714},[478,83546,83547,83549,83551],{"class":480,"line":2246},[478,83548,52797],{"class":714},[478,83550,52193],{"class":51680},[478,83552,51687],{"class":714},[478,83554,83555,83557,83559],{"class":480,"line":2260},[478,83556,52165],{"class":714},[478,83558,52180],{"class":51680},[478,83560,51687],{"class":714},[478,83562,83563],{"class":480,"line":2265},[478,83564,2966],{"emptyLinePlaceholder":640},[478,83566,83567,83569,83571],{"class":480,"line":2294},[478,83568,52165],{"class":714},[478,83570,51015],{"class":51680},[478,83572,51687],{"class":714},[22563,83574,83576],{"id":83575},"_41054-number","4.10.5.4 Number",[19,83578,83579],{},[52,83580],{"alt":54,"src":83581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83583,83584],{},"整数也可以进行toFixed来保留小数",[19,83586,83587],{},"比如：",[19,83589,83590],{},"const price=10",[19,83592,83593],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22563,83595,83597],{"id":83596},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83599,83600],{},[52,83601],{"alt":54,"src":83602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[469,83604,83606],{"className":51013,"code":83605,"language":51015,"meta":54,"style":54},"\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",[475,83607,83608,83618,83632,83636,83644,83658,83678,83690,83698,83704,83714,83724,83734,83738,83742,83748,83760,83774,83778,83782,83788,83800,83816,83826,83842,83846,83850,83856,83866,83876,83880,83884,83892,83904,83916,83928,83932,83936,83944,83956,83960,83964,83975,83985,83997,84009,84019,84023,84027,84035,84044,84056,84066,84076,84080,84084,84092,84101,84108,84118,84130,84134,84138,84147,84157,84168,84180,84192,84196,84200,84209,84219,84230,84234,84238,84244,84256,84268,84278,84288,84306,84318,84322,84326,84335,84347,84357,84367,84379,84383,84391,84399,84403,84411,84425,84433,84447,84475,84483,84491,84501,84505,84513,84521,84530,84538,84547,84557,84561,84565,84573,84581,84590,84598,84606,84619,84623,84627,84635,84643,84652,84660,84668,84683,84687,84691,84699,84707,84716,84724,84732,84746,84754,84758,84762,84767,84793,84798,84835,84840,84863,84868,84922,84927,84963,84967,84973,84978,84987,85001,85010,85029,85038,85048,85053,85058,85071,85076,85130,85156,85164,85172,85176],{"__ignoreMap":54},[478,83609,83610,83612,83614,83616],{"class":480,"line":481},[478,83611,51677],{"class":714},[478,83613,51681],{"class":51680},[478,83615,51684],{"class":484},[478,83617,51687],{"class":714},[478,83619,83620,83622,83624,83626,83628,83630],{"class":480,"line":565},[478,83621,1605],{"class":714},[478,83623,51015],{"class":51680},[478,83625,51696],{"class":484},[478,83627,759],{"class":714},[478,83629,51701],{"class":488},[478,83631,51687],{"class":714},[478,83633,83634],{"class":480,"line":579},[478,83635,2966],{"emptyLinePlaceholder":640},[478,83637,83638,83640,83642],{"class":480,"line":593},[478,83639,1605],{"class":714},[478,83641,51714],{"class":51680},[478,83643,51687],{"class":714},[478,83645,83646,83648,83650,83652,83654,83656],{"class":480,"line":1769},[478,83647,52524],{"class":714},[478,83649,51724],{"class":51680},[478,83651,51727],{"class":484},[478,83653,759],{"class":714},[478,83655,51732],{"class":488},[478,83657,51687],{"class":714},[478,83659,83660,83662,83664,83666,83668,83670,83672,83674,83676],{"class":480,"line":1783},[478,83661,52524],{"class":714},[478,83663,51724],{"class":51680},[478,83665,15485],{"class":484},[478,83667,759],{"class":714},[478,83669,51771],{"class":488},[478,83671,51751],{"class":484},[478,83673,759],{"class":714},[478,83675,51778],{"class":488},[478,83677,51687],{"class":714},[478,83679,83680,83682,83684,83686,83688],{"class":480,"line":1789},[478,83681,52524],{"class":714},[478,83683,51787],{"class":51680},[478,83685,51790],{"class":714},[478,83687,51787],{"class":51680},[478,83689,51687],{"class":714},[478,83691,83692,83694,83696],{"class":480,"line":1880},[478,83693,52524],{"class":714},[478,83695,617],{"class":51680},[478,83697,51687],{"class":714},[478,83699,83700,83702],{"class":480,"line":1886},[478,83701,6969],{"class":51680},[478,83703,16137],{"class":714},[478,83705,83706,83708,83710,83712],{"class":480,"line":1898},[478,83707,55075],{"class":495},[478,83709,51817],{"class":714},[478,83711,895],{"class":495},[478,83713,1859],{"class":714},[478,83715,83716,83718,83720,83722],{"class":480,"line":2180},[478,83717,55086],{"class":495},[478,83719,51817],{"class":714},[478,83721,895],{"class":495},[478,83723,1859],{"class":714},[478,83725,83726,83728,83730,83732],{"class":480,"line":2185},[478,83727,72976],{"class":495},[478,83729,51817],{"class":714},[478,83731,60885],{"class":495},[478,83733,1859],{"class":714},[478,83735,83736],{"class":480,"line":2191},[478,83737,2753],{"class":714},[478,83739,83740],{"class":480,"line":2196},[478,83741,2966],{"emptyLinePlaceholder":640},[478,83743,83744,83746],{"class":480,"line":2210},[478,83745,62503],{"class":484},[478,83747,16137],{"class":714},[478,83749,83750,83752,83754,83756,83758],{"class":480,"line":2215},[478,83751,55151],{"class":495},[478,83753,51817],{"class":714},[478,83755,78954],{"class":495},[478,83757,51872],{"class":710},[478,83759,1859],{"class":714},[478,83761,83762,83764,83766,83768,83770,83772],{"class":480,"line":2221},[478,83763,55086],{"class":495},[478,83765,51817],{"class":714},[478,83767,1012],{"class":495},[478,83769,51872],{"class":710},[478,83771,51936],{"class":495},[478,83773,1859],{"class":714},[478,83775,83776],{"class":480,"line":2241},[478,83777,2753],{"class":714},[478,83779,83780],{"class":480,"line":2246},[478,83781,2966],{"emptyLinePlaceholder":640},[478,83783,83784,83786],{"class":480,"line":2260},[478,83785,79005],{"class":484},[478,83787,16137],{"class":714},[478,83789,83790,83792,83794,83796,83798],{"class":480,"line":2265},[478,83791,55075],{"class":495},[478,83793,51817],{"class":714},[478,83795,1275],{"class":495},[478,83797,51872],{"class":710},[478,83799,1859],{"class":714},[478,83801,83802,83804,83806,83808,83810,83812,83814],{"class":480,"line":2294},[478,83803,62240],{"class":495},[478,83805,51817],{"class":714},[478,83807,28501],{"class":495},[478,83809,79060],{"class":495},[478,83811,79063],{"class":495},[478,83813,1391],{"class":710},[478,83815,1859],{"class":714},[478,83817,83818,83820,83822,83824],{"class":480,"line":2299},[478,83819,55389],{"class":495},[478,83821,51817],{"class":714},[478,83823,51857],{"class":495},[478,83825,1859],{"class":714},[478,83827,83828,83830,83832,83834,83836,83838,83840],{"class":480,"line":2316},[478,83829,62357],{"class":495},[478,83831,51817],{"class":714},[478,83833,193],{"class":495},[478,83835,51872],{"class":710},[478,83837,51901],{"class":495},[478,83839,62624],{"class":495},[478,83841,1859],{"class":714},[478,83843,83844],{"class":480,"line":2321},[478,83845,2753],{"class":714},[478,83847,83848],{"class":480,"line":2326},[478,83849,2966],{"emptyLinePlaceholder":640},[478,83851,83852,83854],{"class":480,"line":2331},[478,83853,79123],{"class":484},[478,83855,16137],{"class":714},[478,83857,83858,83860,83862,83864],{"class":480,"line":2345},[478,83859,62405],{"class":495},[478,83861,51817],{"class":714},[478,83863,62410],{"class":495},[478,83865,1859],{"class":714},[478,83867,83868,83870,83872,83874],{"class":480,"line":2350},[478,83869,55264],{"class":495},[478,83871,51817],{"class":714},[478,83873,62198],{"class":495},[478,83875,1859],{"class":714},[478,83877,83878],{"class":480,"line":3143},[478,83879,2753],{"class":714},[478,83881,83882],{"class":480,"line":3157},[478,83883,2966],{"emptyLinePlaceholder":640},[478,83885,83886,83888,83890],{"class":480,"line":3165},[478,83887,79005],{"class":484},[478,83889,55995],{"class":51680},[478,83891,16137],{"class":714},[478,83893,83894,83896,83898,83900,83902],{"class":480,"line":3170},[478,83895,55151],{"class":495},[478,83897,51817],{"class":714},[478,83899,1310],{"class":495},[478,83901,51872],{"class":710},[478,83903,1859],{"class":714},[478,83905,83906,83908,83910,83912,83914],{"class":480,"line":3176},[478,83907,55165],{"class":495},[478,83909,51817],{"class":714},[478,83911,1310],{"class":495},[478,83913,51872],{"class":710},[478,83915,1859],{"class":714},[478,83917,83918,83920,83922,83924,83926],{"class":480,"line":3182},[478,83919,62130],{"class":495},[478,83921,51817],{"class":714},[478,83923,1020],{"class":495},[478,83925,51872],{"class":710},[478,83927,1859],{"class":714},[478,83929,83930],{"class":480,"line":3187},[478,83931,2753],{"class":714},[478,83933,83934],{"class":480,"line":8514},[478,83935,2966],{"emptyLinePlaceholder":640},[478,83937,83938,83940,83942],{"class":480,"line":8538},[478,83939,79005],{"class":484},[478,83941,62684],{"class":484},[478,83943,16137],{"class":714},[478,83945,83946,83948,83950,83952,83954],{"class":480,"line":8543},[478,83947,55151],{"class":495},[478,83949,51817],{"class":714},[478,83951,2289],{"class":495},[478,83953,51872],{"class":710},[478,83955,1859],{"class":714},[478,83957,83958],{"class":480,"line":8549},[478,83959,2753],{"class":714},[478,83961,83962],{"class":480,"line":8576},[478,83963,2966],{"emptyLinePlaceholder":640},[478,83965,83966,83968,83970,83973],{"class":480,"line":8581},[478,83967,79005],{"class":484},[478,83969,62684],{"class":484},[478,83971,83972],{"class":484}," .tag",[478,83974,16137],{"class":714},[478,83976,83977,83979,83981,83983],{"class":480,"line":8587},[478,83978,55389],{"class":495},[478,83980,51817],{"class":714},[478,83982,61249],{"class":495},[478,83984,1859],{"class":714},[478,83986,83987,83989,83991,83993,83995],{"class":480,"line":8599},[478,83988,55075],{"class":495},[478,83990,51817],{"class":714},[478,83992,789],{"class":495},[478,83994,51872],{"class":710},[478,83996,1859],{"class":714},[478,83998,83999,84001,84003,84005,84007],{"class":480,"line":8611},[478,84000,55302],{"class":495},[478,84002,51817],{"class":714},[478,84004,1198],{"class":495},[478,84006,51872],{"class":710},[478,84008,1859],{"class":714},[478,84010,84011,84013,84015,84017],{"class":480,"line":8623},[478,84012,57796],{"class":495},[478,84014,51817],{"class":714},[478,84016,62450],{"class":495},[478,84018,1859],{"class":714},[478,84020,84021],{"class":480,"line":10282},[478,84022,2753],{"class":714},[478,84024,84025],{"class":480,"line":10307},[478,84026,2966],{"emptyLinePlaceholder":640},[478,84028,84029,84031,84033],{"class":480,"line":10330},[478,84030,79005],{"class":484},[478,84032,79297],{"class":484},[478,84034,31846],{"class":714},[478,84036,84037,84039,84042],{"class":480,"line":10354},[478,84038,79005],{"class":484},[478,84040,84041],{"class":484}," .sub-total",[478,84043,16137],{"class":714},[478,84045,84046,84048,84050,84052,84054],{"class":480,"line":10359},[478,84047,55302],{"class":495},[478,84049,51817],{"class":714},[478,84051,1348],{"class":495},[478,84053,51872],{"class":710},[478,84055,1859],{"class":714},[478,84057,84058,84060,84062,84064],{"class":480,"line":10364},[478,84059,57796],{"class":495},[478,84061,51817],{"class":714},[478,84063,79320],{"class":495},[478,84065,1859],{"class":714},[478,84067,84068,84070,84072,84074],{"class":480,"line":10369},[478,84069,62217],{"class":495},[478,84071,51817],{"class":714},[478,84073,193],{"class":495},[478,84075,1859],{"class":714},[478,84077,84078],{"class":480,"line":10378},[478,84079,2753],{"class":714},[478,84081,84082],{"class":480,"line":10383},[478,84083,2966],{"emptyLinePlaceholder":640},[478,84085,84086,84088,84090],{"class":480,"line":10389},[478,84087,79005],{"class":484},[478,84089,79337],{"class":484},[478,84091,31846],{"class":714},[478,84093,84094,84096,84099],{"class":480,"line":10410},[478,84095,79005],{"class":484},[478,84097,84098],{"class":484}," .sub-total::before",[478,84100,31846],{"class":714},[478,84102,84103,84106],{"class":480,"line":10416},[478,84104,84105],{"class":484},"    .amount::before",[478,84107,16137],{"class":714},[478,84109,84110,84112,84114,84116],{"class":480,"line":10430},[478,84111,79344],{"class":495},[478,84113,51817],{"class":714},[478,84115,79349],{"class":488},[478,84117,1859],{"class":714},[478,84119,84120,84122,84124,84126,84128],{"class":480,"line":10436},[478,84121,55302],{"class":495},[478,84123,51817],{"class":714},[478,84125,1198],{"class":495},[478,84127,51872],{"class":710},[478,84129,1859],{"class":714},[478,84131,84132],{"class":480,"line":10463},[478,84133,2753],{"class":714},[478,84135,84136],{"class":480,"line":10472},[478,84137,2966],{"emptyLinePlaceholder":640},[478,84139,84140,84142,84145],{"class":480,"line":10478},[478,84141,79005],{"class":484},[478,84143,84144],{"class":484}," .spec",[478,84146,16137],{"class":714},[478,84148,84149,84151,84153,84155],{"class":480,"line":10486},[478,84150,62217],{"class":495},[478,84152,51817],{"class":714},[478,84154,789],{"class":495},[478,84156,1859],{"class":714},[478,84158,84159,84161,84163,84166],{"class":480,"line":10491},[478,84160,57796],{"class":495},[478,84162,51817],{"class":714},[478,84164,84165],{"class":495},"#888",[478,84167,1859],{"class":714},[478,84169,84170,84172,84174,84176,84178],{"class":480,"line":17169},[478,84171,55302],{"class":495},[478,84173,51817],{"class":714},[478,84175,1249],{"class":495},[478,84177,51872],{"class":710},[478,84179,1859],{"class":714},[478,84181,84182,84184,84186,84188,84190],{"class":480,"line":17175},[478,84183,62380],{"class":495},[478,84185,51817],{"class":714},[478,84187,1396],{"class":495},[478,84189,51872],{"class":710},[478,84191,1859],{"class":714},[478,84193,84194],{"class":480,"line":17198},[478,84195,2753],{"class":714},[478,84197,84198],{"class":480,"line":17204},[478,84199,2966],{"emptyLinePlaceholder":640},[478,84201,84202,84204,84207],{"class":480,"line":17227},[478,84203,79005],{"class":484},[478,84205,84206],{"class":484}," .count",[478,84208,16137],{"class":714},[478,84210,84211,84213,84215,84217],{"class":480,"line":17241},[478,84212,62217],{"class":495},[478,84214,51817],{"class":714},[478,84216,193],{"class":495},[478,84218,1859],{"class":714},[478,84220,84221,84223,84225,84228],{"class":480,"line":17261},[478,84222,57796],{"class":495},[478,84224,51817],{"class":714},[478,84226,84227],{"class":495},"#aaa",[478,84229,1859],{"class":714},[478,84231,84232],{"class":480,"line":17267},[478,84233,2753],{"class":714},[478,84235,84236],{"class":480,"line":17278},[478,84237,2966],{"emptyLinePlaceholder":640},[478,84239,84240,84242],{"class":480,"line":17301},[478,84241,72855],{"class":484},[478,84243,16137],{"class":714},[478,84245,84246,84248,84250,84252,84254],{"class":480,"line":17323},[478,84247,55151],{"class":495},[478,84249,51817],{"class":714},[478,84251,78954],{"class":495},[478,84253,51872],{"class":710},[478,84255,1859],{"class":714},[478,84257,84258,84260,84262,84264,84266],{"class":480,"line":17328},[478,84259,55086],{"class":495},[478,84261,51817],{"class":714},[478,84263,895],{"class":495},[478,84265,51936],{"class":495},[478,84267,1859],{"class":714},[478,84269,84270,84272,84274,84276],{"class":480,"line":17334},[478,84271,55389],{"class":495},[478,84273,51817],{"class":714},[478,84275,51857],{"class":495},[478,84277,1859],{"class":714},[478,84279,84280,84282,84284,84286],{"class":480,"line":17348},[478,84281,55400],{"class":495},[478,84283,51817],{"class":714},[478,84285,51960],{"class":495},[478,84287,1859],{"class":714},[478,84289,84290,84293,84295,84297,84299,84301,84304],{"class":480,"line":17361},[478,84291,84292],{"class":495},"      border-top",[478,84294,51817],{"class":714},[478,84296,193],{"class":495},[478,84298,51872],{"class":710},[478,84300,51901],{"class":495},[478,84302,84303],{"class":495}," #4e4e4e",[478,84305,1859],{"class":714},[478,84307,84308,84310,84312,84314,84316],{"class":480,"line":17366},[478,84309,55075],{"class":495},[478,84311,51817],{"class":714},[478,84313,1396],{"class":495},[478,84315,51872],{"class":710},[478,84317,1859],{"class":714},[478,84319,84320],{"class":480,"line":17380},[478,84321,2753],{"class":714},[478,84323,84324],{"class":480,"line":17385},[478,84325,2966],{"emptyLinePlaceholder":640},[478,84327,84328,84330,84333],{"class":480,"line":17391},[478,84329,72855],{"class":484},[478,84331,84332],{"class":484}," .amount",[478,84334,16137],{"class":714},[478,84336,84337,84339,84341,84343,84345],{"class":480,"line":17396},[478,84338,55302],{"class":495},[478,84340,51817],{"class":714},[478,84342,1348],{"class":495},[478,84344,51872],{"class":710},[478,84346,1859],{"class":714},[478,84348,84349,84351,84353,84355],{"class":480,"line":17410},[478,84350,57796],{"class":495},[478,84352,51817],{"class":714},[478,84354,79320],{"class":495},[478,84356,1859],{"class":714},[478,84358,84359,84361,84363,84365],{"class":480,"line":17415},[478,84360,62714],{"class":495},[478,84362,51817],{"class":714},[478,84364,51869],{"class":495},[478,84366,1859],{"class":714},[478,84368,84369,84371,84373,84375,84377],{"class":480,"line":17420},[478,84370,62130],{"class":495},[478,84372,51817],{"class":714},[478,84374,1354],{"class":495},[478,84376,51872],{"class":710},[478,84378,1859],{"class":714},[478,84380,84381],{"class":480,"line":17434},[478,84382,2753],{"class":714},[478,84384,84385,84387,84389],{"class":480,"line":17446},[478,84386,52797],{"class":714},[478,84388,617],{"class":51680},[478,84390,51687],{"class":714},[478,84392,84393,84395,84397],{"class":480,"line":17451},[478,84394,52165],{"class":714},[478,84396,51714],{"class":51680},[478,84398,51687],{"class":714},[478,84400,84401],{"class":480,"line":17464},[478,84402,2966],{"emptyLinePlaceholder":640},[478,84404,84405,84407,84409],{"class":480,"line":17469},[478,84406,1605],{"class":714},[478,84408,52180],{"class":51680},[478,84410,51687],{"class":714},[478,84412,84413,84415,84417,84419,84421,84423],{"class":480,"line":17474},[478,84414,52524],{"class":714},[478,84416,51991],{"class":51680},[478,84418,53866],{"class":484},[478,84420,759],{"class":714},[478,84422,62988],{"class":488},[478,84424,51687],{"class":714},[478,84426,84427,84429,84431],{"class":480,"line":17479},[478,84428,52797],{"class":714},[478,84430,51991],{"class":51680},[478,84432,51687],{"class":714},[478,84434,84435,84437,84439,84441,84443,84445],{"class":480,"line":17492},[478,84436,52524],{"class":714},[478,84438,51991],{"class":51680},[478,84440,53866],{"class":484},[478,84442,759],{"class":714},[478,84444,62960],{"class":488},[478,84446,51687],{"class":714},[478,84448,84449,84451,84453,84456,84458,84460,84462,84465,84467,84469,84471,84473],{"class":480,"line":17497},[478,84450,51721],{"class":714},[478,84452,51991],{"class":51680},[478,84454,84455],{"class":714},">合计：\u003C",[478,84457,478],{"class":51680},[478,84459,53866],{"class":484},[478,84461,759],{"class":714},[478,84463,84464],{"class":488},"\"amount\"",[478,84466,55694],{"class":714},[478,84468,478],{"class":51680},[478,84470,55694],{"class":714},[478,84472,51991],{"class":51680},[478,84474,51687],{"class":714},[478,84476,84477,84479,84481],{"class":480,"line":33013},[478,84478,52797],{"class":714},[478,84480,51991],{"class":51680},[478,84482,51687],{"class":714},[478,84484,84485,84487,84489],{"class":480,"line":33019},[478,84486,52524],{"class":714},[478,84488,52193],{"class":51680},[478,84490,51687],{"class":714},[478,84492,84493,84495,84497,84499],{"class":480,"line":33025},[478,84494,11787],{"class":710},[478,84496,79757],{"class":495},[478,84498,14130],{"class":710},[478,84500,55827],{"class":714},[478,84502,84503],{"class":480,"line":33031},[478,84504,79766],{"class":714},[478,84506,84507,84509,84511],{"class":480,"line":33037},[478,84508,79771],{"class":714},[478,84510,79774],{"class":488},[478,84512,31846],{"class":714},[478,84514,84515,84517,84519],{"class":480,"line":33048},[478,84516,79781],{"class":714},[478,84518,79784],{"class":488},[478,84520,31846],{"class":714},[478,84522,84523,84525,84528],{"class":480,"line":33054},[478,84524,79791],{"class":714},[478,84526,84527],{"class":495},"289.9",[478,84529,31846],{"class":714},[478,84531,84532,84534,84536],{"class":480,"line":33074},[478,84533,79801],{"class":714},[478,84535,79804],{"class":488},[478,84537,31846],{"class":714},[478,84539,84540,84543,84545],{"class":480,"line":33080},[478,84541,84542],{"class":714},"        count: ",[478,84544,789],{"class":495},[478,84546,31846],{"class":714},[478,84548,84549,84552,84555],{"class":480,"line":33091},[478,84550,84551],{"class":714},"        spec: { color: ",[478,84553,84554],{"class":488},"'白色'",[478,84556,55984],{"class":714},[478,84558,84559],{"class":480,"line":33097},[478,84560,78272],{"class":714},[478,84562,84563],{"class":480,"line":33103},[478,84564,79766],{"class":714},[478,84566,84567,84569,84571],{"class":480,"line":33109},[478,84568,79771],{"class":714},[478,84570,79865],{"class":488},[478,84572,31846],{"class":714},[478,84574,84575,84577,84579],{"class":480,"line":33115},[478,84576,79781],{"class":714},[478,84578,79874],{"class":488},[478,84580,31846],{"class":714},[478,84582,84583,84585,84588],{"class":480,"line":33121},[478,84584,79791],{"class":714},[478,84586,84587],{"class":495},"109.8",[478,84589,31846],{"class":714},[478,84591,84592,84594,84596],{"class":480,"line":33127},[478,84593,79801],{"class":714},[478,84595,79892],{"class":488},[478,84597,31846],{"class":714},[478,84599,84600,84602,84604],{"class":480,"line":33133},[478,84601,84542],{"class":714},[478,84603,783],{"class":495},[478,84605,31846],{"class":714},[478,84607,84608,84611,84613,84615,84617],{"class":480,"line":33153},[478,84609,84610],{"class":714},"        spec: { size: ",[478,84612,82283],{"class":488},[478,84614,55844],{"class":714},[478,84616,82288],{"class":488},[478,84618,55984],{"class":714},[478,84620,84621],{"class":480,"line":33159},[478,84622,78272],{"class":714},[478,84624,84625],{"class":480,"line":33175},[478,84626,79766],{"class":714},[478,84628,84629,84631,84633],{"class":480,"line":33181},[478,84630,79771],{"class":714},[478,84632,79909],{"class":488},[478,84634,31846],{"class":714},[478,84636,84637,84639,84641],{"class":480,"line":33195},[478,84638,79781],{"class":714},[478,84640,79918],{"class":488},[478,84642,31846],{"class":714},[478,84644,84645,84647,84650],{"class":480,"line":33201},[478,84646,79791],{"class":714},[478,84648,84649],{"class":495},"488",[478,84651,31846],{"class":714},[478,84653,84654,84656,84658],{"class":480,"line":33216},[478,84655,79801],{"class":714},[478,84657,79936],{"class":488},[478,84659,31846],{"class":714},[478,84661,84662,84664,84666],{"class":480,"line":33222},[478,84663,84542],{"class":714},[478,84665,193],{"class":495},[478,84667,31846],{"class":714},[478,84669,84670,84672,84675,84678,84681],{"class":480,"line":33231},[478,84671,84551],{"class":714},[478,84673,84674],{"class":488},"'青色'",[478,84676,84677],{"class":714},", sum: ",[478,84679,84680],{"class":488},"'一大四小'",[478,84682,55984],{"class":714},[478,84684,84685],{"class":480,"line":33237},[478,84686,78272],{"class":714},[478,84688,84689],{"class":480,"line":33246},[478,84690,79766],{"class":714},[478,84692,84693,84695,84697],{"class":480,"line":33252},[478,84694,79771],{"class":714},[478,84696,79953],{"class":488},[478,84698,31846],{"class":714},[478,84700,84701,84703,84705],{"class":480,"line":33258},[478,84702,79781],{"class":714},[478,84704,79962],{"class":488},[478,84706,31846],{"class":714},[478,84708,84709,84711,84714],{"class":480,"line":33267},[478,84710,79791],{"class":714},[478,84712,84713],{"class":495},"139",[478,84715,31846],{"class":714},[478,84717,84718,84720,84722],{"class":480,"line":33273},[478,84719,79801],{"class":714},[478,84721,79980],{"class":488},[478,84723,31846],{"class":714},[478,84725,84726,84728,84730],{"class":480,"line":33284},[478,84727,84542],{"class":714},[478,84729,193],{"class":495},[478,84731,31846],{"class":714},[478,84733,84734,84736,84739,84741,84744],{"class":480,"line":33290},[478,84735,84610],{"class":714},[478,84737,84738],{"class":488},"'小号'",[478,84740,55844],{"class":714},[478,84742,84743],{"class":488},"'紫色'",[478,84745,55850],{"class":714},[478,84747,84748,84751],{"class":480,"line":33309},[478,84749,84750],{"class":714},"        gift: ",[478,84752,84753],{"class":488},"'50g茶叶,清洗球'\n",[478,84755,84756],{"class":480,"line":33315},[478,84757,52778],{"class":714},[478,84759,84760],{"class":480,"line":33326},[478,84761,53489],{"class":714},[478,84763,84764],{"class":480,"line":33332},[478,84765,84766],{"class":770},"    \u002F\u002F  1.根据数据渲染页面\n",[478,84768,84769,84771,84773,84775,84777,84779,84781,84783,84785,84787,84789,84791],{"class":480,"line":33352},[478,84770,52787],{"class":714},[478,84772,54779],{"class":484},[478,84774,263],{"class":714},[478,84776,80281],{"class":488},[478,84778,74629],{"class":714},[478,84780,759],{"class":710},[478,84782,80428],{"class":714},[478,84784,74424],{"class":484},[478,84786,263],{"class":714},[478,84788,80175],{"class":5782},[478,84790,80178],{"class":710},[478,84792,16137],{"class":714},[478,84794,84795],{"class":480,"line":33368},[478,84796,84797],{"class":770},"      \u002F\u002F 对象解构\n",[478,84799,84800,84802,84804,84806,84808,84810,84812,84815,84817,84819,84821,84824,84826,84829,84831,84833],{"class":480,"line":33374},[478,84801,58608],{"class":710},[478,84803,80187],{"class":714},[478,84805,80200],{"class":495},[478,84807,13001],{"class":714},[478,84809,80190],{"class":495},[478,84811,13001],{"class":714},[478,84813,84814],{"class":495},"count",[478,84816,13001],{"class":714},[478,84818,80195],{"class":495},[478,84820,13001],{"class":714},[478,84822,84823],{"class":495},"spec",[478,84825,13001],{"class":714},[478,84827,84828],{"class":495},"gift",[478,84830,80203],{"class":714},[478,84832,759],{"class":710},[478,84834,80208],{"class":714},[478,84836,84837],{"class":480,"line":33388},[478,84838,84839],{"class":770},"      \u002F\u002F 规格文字模块处理\n",[478,84841,84842,84844,84847,84849,84851,84853,84855,84857,84859,84861],{"class":480,"line":33394},[478,84843,58608],{"class":710},[478,84845,84846],{"class":495}," text",[478,84848,14130],{"class":710},[478,84850,82318],{"class":714},[478,84852,82321],{"class":484},[478,84854,82324],{"class":714},[478,84856,74603],{"class":484},[478,84858,263],{"class":714},[478,84860,82331],{"class":488},[478,84862,720],{"class":714},[478,84864,84865],{"class":480,"line":33400},[478,84866,84867],{"class":770},"      \u002F\u002F 处理赠品模块\n",[478,84869,84870,84872,84874,84876,84879,84881,84883,84885,84887,84890,84892,84894,84896,84898,84900,84903,84905,84908,84910,84912,84914,84916,84918,84920],{"class":480,"line":33411},[478,84871,58608],{"class":710},[478,84873,74299],{"class":495},[478,84875,14130],{"class":710},[478,84877,84878],{"class":714}," gift ",[478,84880,1681],{"class":710},[478,84882,83492],{"class":714},[478,84884,83495],{"class":484},[478,84886,263],{"class":714},[478,84888,84889],{"class":488},"','",[478,84891,31206],{"class":714},[478,84893,74424],{"class":484},[478,84895,263],{"class":714},[478,84897,80175],{"class":5782},[478,84899,80178],{"class":710},[478,84901,84902],{"class":488}," `\u003Cspan class=\"tag\">【赠品】${",[478,84904,80175],{"class":714},[478,84906,84907],{"class":488},"}\u003C\u002Fspan>`",[478,84909,31206],{"class":714},[478,84911,74603],{"class":484},[478,84913,263],{"class":714},[478,84915,74608],{"class":488},[478,84917,14280],{"class":714},[478,84919,1554],{"class":710},[478,84921,70484],{"class":488},[478,84923,84924],{"class":480,"line":33417},[478,84925,84926],{"class":770},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[478,84928,84929,84931,84934,84936,84939,84941,84943,84945,84948,84950,84952,84954,84957,84959,84961],{"class":480,"line":33423},[478,84930,58608],{"class":710},[478,84932,84933],{"class":495}," subtotal",[478,84935,14130],{"class":710},[478,84937,84938],{"class":714}," ((price ",[478,84940,1155],{"class":710},[478,84942,6320],{"class":495},[478,84944,7084],{"class":710},[478,84946,84947],{"class":714}," count) ",[478,84949,1284],{"class":710},[478,84951,6320],{"class":495},[478,84953,31206],{"class":714},[478,84955,84956],{"class":484},"toFixed",[478,84958,263],{"class":714},[478,84960,789],{"class":495},[478,84962,720],{"class":714},[478,84964,84965],{"class":480,"line":33433},[478,84966,2966],{"emptyLinePlaceholder":640},[478,84968,84969,84971],{"class":480,"line":33439},[478,84970,74362],{"class":710},[478,84972,70548],{"class":488},[478,84974,84975],{"class":480,"line":33450},[478,84976,84977],{"class":488},"        \u003Cdiv class=\"item\">\n",[478,84979,84980,84983,84985],{"class":480,"line":33456},[478,84981,84982],{"class":488},"          \u003Cimg src=\"${",[478,84984,80200],{"class":714},[478,84986,80232],{"class":488},[478,84988,84989,84992,84994,84997,84999],{"class":480,"line":33466},[478,84990,84991],{"class":488},"          \u003Cp class=\"name\">${",[478,84993,80190],{"class":714},[478,84995,84996],{"class":488},"}${",[478,84998,1868],{"class":714},[478,85000,80242],{"class":488},[478,85002,85003,85006,85008],{"class":480,"line":33471},[478,85004,85005],{"class":488},"          \u003Cp class=\"spec\">${",[478,85007,5753],{"class":714},[478,85009,80242],{"class":488},[478,85011,85012,85015,85017,85019,85021,85023,85025,85027],{"class":480,"line":33477},[478,85013,85014],{"class":488},"          \u003Cp class=\"price\">${",[478,85016,80195],{"class":714},[478,85018,1258],{"class":488},[478,85020,84956],{"class":484},[478,85022,263],{"class":488},[478,85024,789],{"class":495},[478,85026,222],{"class":488},[478,85028,80242],{"class":488},[478,85030,85031,85034,85036],{"class":480,"line":33526},[478,85032,85033],{"class":488},"          \u003Cp class=\"count\">x${",[478,85035,84814],{"class":714},[478,85037,80242],{"class":488},[478,85039,85040,85043,85046],{"class":480,"line":33573},[478,85041,85042],{"class":488},"          \u003Cp class=\"sub-total\">${",[478,85044,85045],{"class":714},"subtotal",[478,85047,80242],{"class":488},[478,85049,85050],{"class":480,"line":33578},[478,85051,85052],{"class":488},"        \u003C\u002Fdiv> \n",[478,85054,85055],{"class":480,"line":33584},[478,85056,85057],{"class":488},"             `\n",[478,85059,85060,85063,85065,85067,85069],{"class":480,"line":33603},[478,85061,85062],{"class":714},"    }).",[478,85064,74603],{"class":484},[478,85066,263],{"class":714},[478,85068,74608],{"class":488},[478,85070,720],{"class":714},[478,85072,85073],{"class":480,"line":33609},[478,85074,85075],{"class":770},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[478,85077,85078,85080,85082,85084,85086,85089,85091,85094,85096,85098,85100,85103,85106,85108,85111,85113,85115,85117,85120,85122,85124,85126,85128],{"class":480,"line":33629},[478,85079,11787],{"class":710},[478,85081,63165],{"class":495},[478,85083,14130],{"class":710},[478,85085,80428],{"class":714},[478,85087,85088],{"class":484},"reduce",[478,85090,2942],{"class":714},[478,85092,85093],{"class":5782},"prev",[478,85095,13001],{"class":714},[478,85097,80175],{"class":5782},[478,85099,14280],{"class":714},[478,85101,85102],{"class":710},"=>",[478,85104,85105],{"class":714}," prev ",[478,85107,1181],{"class":710},[478,85109,85110],{"class":714}," (item.price ",[478,85112,1155],{"class":710},[478,85114,6320],{"class":495},[478,85116,7084],{"class":710},[478,85118,85119],{"class":714}," item.count) ",[478,85121,1284],{"class":710},[478,85123,6320],{"class":495},[478,85125,13001],{"class":714},[478,85127,895],{"class":495},[478,85129,720],{"class":714},[478,85131,85132,85134,85136,85138,85141,85143,85145,85148,85150,85152,85154],{"class":480,"line":33635},[478,85133,52787],{"class":714},[478,85135,54779],{"class":484},[478,85137,263],{"class":714},[478,85139,85140],{"class":488},"'.amount'",[478,85142,74629],{"class":714},[478,85144,759],{"class":710},[478,85146,85147],{"class":714}," total.",[478,85149,84956],{"class":484},[478,85151,263],{"class":714},[478,85153,789],{"class":495},[478,85155,720],{"class":714},[478,85157,85158,85160,85162],{"class":480,"line":33641},[478,85159,52797],{"class":714},[478,85161,52193],{"class":51680},[478,85163,51687],{"class":714},[478,85165,85166,85168,85170],{"class":480,"line":33651},[478,85167,52165],{"class":714},[478,85169,52180],{"class":51680},[478,85171,51687],{"class":714},[478,85173,85174],{"class":480,"line":33656},[478,85175,2966],{"emptyLinePlaceholder":640},[478,85177,85178,85180,85182],{"class":480,"line":33662},[478,85179,52165],{"class":714},[478,85181,51015],{"class":51680},[478,85183,51687],{"class":714},[14,85185,85187],{"id":85186},"_411-编程思想","4.11 编程思想",[129,85189,85191],{"id":85190},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85193,85194,85197],{},[45,85195,85196],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85199,85200],{},"调用就可以了",[19,85202,85203],{},[52,85204],{"alt":54,"src":85205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[129,85207,85209],{"id":85208},"_4112-面向对象","4.11.2 面向对象",[19,85211,85212],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85214,85215],{},[52,85216],{"alt":54,"src":85217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85219,85220],{},"面向对象的特性：",[1702,85222,85223,85226,85229],{},[32,85224,85225],{},"封装性",[32,85227,85228],{},"继承性",[32,85230,85231],{},"多态性",[129,85233,85235],{"id":85234},"_4113-两者比较","4.11.3 两者比较",[19,85237,85238],{},[52,85239],{"alt":54,"src":85240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85242,85244],{"id":85243},"_412-构造函数回顾","4.12 构造函数回顾",[19,85246,85247],{},[52,85248],{"alt":54,"src":85249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85251,85252],{},[52,85253],{"alt":54,"src":85254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85256,85257],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85259,85260],{},[52,85261],{"alt":54,"src":85262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85264,85266],{"id":85265},"_413-原型","4.13 原型",[129,85268,85270],{"id":85269},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85272,85273],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85275,85276],{},[52,85277],{"alt":54,"src":85278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85280,85281],{},[52,85282],{"alt":54,"src":85283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85285,85286],{},"原型是构造函数的属性，它也是一个对象",[19,85288,85289],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85291,85292],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[469,85294,85296],{"className":53447,"code":85295,"language":53449,"meta":54,"style":54},"\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",[475,85297,85298,85306,85311,85319,85324,85329,85334,85339,85344,85348,85352,85356,85361,85366,85370,85375,85380,85385,85390,85395,85399,85407],{"__ignoreMap":54},[478,85299,85300,85302,85304],{"class":480,"line":481},[478,85301,1605],{"class":714},[478,85303,52180],{"class":51680},[478,85305,51687],{"class":714},[478,85307,85308],{"class":480,"line":565},[478,85309,85310],{"class":770},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[478,85312,85313,85315,85317],{"class":480,"line":579},[478,85314,52524],{"class":714},[478,85316,52193],{"class":51680},[478,85318,51687],{"class":714},[478,85320,85321],{"class":480,"line":593},[478,85322,85323],{"class":714},"    function Star(uname, age) {\n",[478,85325,85326],{"class":480,"line":1769},[478,85327,85328],{"class":714},"      this.uname = uname,\n",[478,85330,85331],{"class":480,"line":1783},[478,85332,85333],{"class":714},"        this.age = age\n",[478,85335,85336],{"class":480,"line":1789},[478,85337,85338],{"class":714},"      \u002F\u002F this.sing = function () {\n",[478,85340,85341],{"class":480,"line":1880},[478,85342,85343],{"class":714},"      \u002F\u002F   console.log('唱歌')\n",[478,85345,85346],{"class":480,"line":1886},[478,85347,2966],{"emptyLinePlaceholder":640},[478,85349,85350],{"class":480,"line":1898},[478,85351,60417],{"class":714},[478,85353,85354],{"class":480,"line":2180},[478,85355,2753],{"class":714},[478,85357,85358],{"class":480,"line":2185},[478,85359,85360],{"class":714},"    Star.prototype.sing = function () {\n",[478,85362,85363],{"class":480,"line":2191},[478,85364,85365],{"class":714},"      console.log('唱歌')\n",[478,85367,85368],{"class":480,"line":2196},[478,85369,2753],{"class":714},[478,85371,85372],{"class":480,"line":2210},[478,85373,85374],{"class":714},"    \u002F\u002F console.dir(Star.prototype)\n",[478,85376,85377],{"class":480,"line":2215},[478,85378,85379],{"class":714},"    const pink = new Star('pink', 18)\n",[478,85381,85382],{"class":480,"line":2221},[478,85383,85384],{"class":714},"    const red = new Star('red', 20)\n",[478,85386,85387],{"class":480,"line":2241},[478,85388,85389],{"class":714},"    pink.sing()\n",[478,85391,85392],{"class":480,"line":2246},[478,85393,85394],{"class":714},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[478,85396,85397],{"class":480,"line":2260},[478,85398,2966],{"emptyLinePlaceholder":640},[478,85400,85401,85403,85405],{"class":480,"line":2265},[478,85402,52797],{"class":714},[478,85404,52193],{"class":51680},[478,85406,51687],{"class":714},[478,85408,85409,85411,85413],{"class":480,"line":2294},[478,85410,52165],{"class":714},[478,85412,52180],{"class":51680},[478,85414,51687],{"class":714},[19,85416,85417],{},[52,85418],{"alt":54,"src":85419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[469,85421,85423],{"className":53447,"code":85422,"language":53449,"meta":54,"style":54},"\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",[475,85424,85425,85433,85441,85446,85451,85456,85461,85465,85470,85475,85480,85484,85489,85493,85497,85502,85506,85514],{"__ignoreMap":54},[478,85426,85427,85429,85431],{"class":480,"line":481},[478,85428,1605],{"class":714},[478,85430,52180],{"class":51680},[478,85432,51687],{"class":714},[478,85434,85435,85437,85439],{"class":480,"line":565},[478,85436,52524],{"class":714},[478,85438,52193],{"class":51680},[478,85440,51687],{"class":714},[478,85442,85443],{"class":480,"line":579},[478,85444,85445],{"class":714},"    let that\n",[478,85447,85448],{"class":480,"line":593},[478,85449,85450],{"class":714},"    function Star(uname) {\n",[478,85452,85453],{"class":480,"line":1769},[478,85454,85455],{"class":714},"      this.uname = uname\n",[478,85457,85458],{"class":480,"line":1783},[478,85459,85460],{"class":714},"      that = this\n",[478,85462,85463],{"class":480,"line":1789},[478,85464,2753],{"class":714},[478,85466,85467],{"class":480,"line":1880},[478,85468,85469],{"class":714},"    \u002F\u002F 实例对象是 ldh\n",[478,85471,85472],{"class":480,"line":1886},[478,85473,85474],{"class":714},"    const ldh = new Star('刘德华')\n",[478,85476,85477],{"class":480,"line":1898},[478,85478,85479],{"class":714},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[478,85481,85482],{"class":480,"line":2180},[478,85483,2966],{"emptyLinePlaceholder":640},[478,85485,85486],{"class":480,"line":2185},[478,85487,85488],{"class":714},"    Star.sing = function () {\n",[478,85490,85491],{"class":480,"line":2191},[478,85492,85365],{"class":714},[478,85494,85495],{"class":480,"line":2196},[478,85496,2753],{"class":714},[478,85498,85499],{"class":480,"line":2210},[478,85500,85501],{"class":714},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[478,85503,85504],{"class":480,"line":2215},[478,85505,2966],{"emptyLinePlaceholder":640},[478,85507,85508,85510,85512],{"class":480,"line":2221},[478,85509,52797],{"class":714},[478,85511,52193],{"class":51680},[478,85513,51687],{"class":714},[478,85515,85516,85518,85520],{"class":480,"line":2241},[478,85517,52165],{"class":714},[478,85519,52180],{"class":51680},[478,85521,51687],{"class":714},[19,85523,85524],{},"构造函数的this指向的是实例对象；",[19,85526,85527],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[129,85529,85531],{"id":85530},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85533,85534],{},[52,85535],{"alt":54,"src":85536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[469,85538,85540],{"className":53447,"code":85539,"language":53449,"meta":54,"style":54},"\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",[475,85541,85542,85550,85558,85563,85568,85573,85578,85583,85588,85593,85598,85603,85608,85612,85617,85622,85627,85632,85636,85641,85646,85651,85656,85660,85665,85670,85675,85680,85684,85689,85693,85701],{"__ignoreMap":54},[478,85543,85544,85546,85548],{"class":480,"line":481},[478,85545,1605],{"class":714},[478,85547,52180],{"class":51680},[478,85549,51687],{"class":714},[478,85551,85552,85554,85556],{"class":480,"line":565},[478,85553,52524],{"class":714},[478,85555,52193],{"class":51680},[478,85557,51687],{"class":714},[478,85559,85560],{"class":480,"line":579},[478,85561,85562],{"class":714},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[478,85564,85565],{"class":480,"line":593},[478,85566,85567],{"class":714},"    const arr = [1, 2, 3]\n",[478,85569,85570],{"class":480,"line":1769},[478,85571,85572],{"class":714},"    \u002F\u002F 自己定义数组的扩展方法\n",[478,85574,85575],{"class":480,"line":1783},[478,85576,85577],{"class":714},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[478,85579,85580],{"class":480,"line":1789},[478,85581,85582],{"class":714},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[478,85584,85585],{"class":480,"line":1880},[478,85586,85587],{"class":714},"    \u002F\u002F ①.最大值\n",[478,85589,85590],{"class":480,"line":1886},[478,85591,85592],{"class":714},"    Array.prototype.max = function () {\n",[478,85594,85595],{"class":480,"line":1898},[478,85596,85597],{"class":714},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[478,85599,85600],{"class":480,"line":2180},[478,85601,85602],{"class":714},"      return Math.max(...this)\n",[478,85604,85605],{"class":480,"line":2185},[478,85606,85607],{"class":714},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[478,85609,85610],{"class":480,"line":2191},[478,85611,2753],{"class":714},[478,85613,85614],{"class":480,"line":2196},[478,85615,85616],{"class":714},"    console.log(arr.max())\n",[478,85618,85619],{"class":480,"line":2210},[478,85620,85621],{"class":714},"    \u002F\u002F ②最小值\n",[478,85623,85624],{"class":480,"line":2215},[478,85625,85626],{"class":714},"    Array.prototype.min = function () {\n",[478,85628,85629],{"class":480,"line":2221},[478,85630,85631],{"class":714},"      return Math.min(...this)\n",[478,85633,85634],{"class":480,"line":2241},[478,85635,2753],{"class":714},[478,85637,85638],{"class":480,"line":2246},[478,85639,85640],{"class":714},"    console.log(arr.min())\n",[478,85642,85643],{"class":480,"line":2260},[478,85644,85645],{"class":714},"    \u002F\u002F③求和\n",[478,85647,85648],{"class":480,"line":2265},[478,85649,85650],{"class":714},"    Array.prototype.sum = function () {\n",[478,85652,85653],{"class":480,"line":2294},[478,85654,85655],{"class":714},"      return this.reduce((prev, current) => prev + current, 0)\n",[478,85657,85658],{"class":480,"line":2299},[478,85659,2753],{"class":714},[478,85661,85662],{"class":480,"line":2316},[478,85663,85664],{"class":714},"    console.log(arr.sum())\n",[478,85666,85667],{"class":480,"line":2321},[478,85668,85669],{"class":714},"    \u002F\u002F ③排序\n",[478,85671,85672],{"class":480,"line":2326},[478,85673,85674],{"class":714},"    Array.prototype.rever = function () {\n",[478,85676,85677],{"class":480,"line":2331},[478,85678,85679],{"class":714},"      return this.reverse()\n",[478,85681,85682],{"class":480,"line":2345},[478,85683,2753],{"class":714},[478,85685,85686],{"class":480,"line":2350},[478,85687,85688],{"class":714},"    console.log(arr.rever())\n",[478,85690,85691],{"class":480,"line":3143},[478,85692,2966],{"emptyLinePlaceholder":640},[478,85694,85695,85697,85699],{"class":480,"line":3157},[478,85696,52797],{"class":714},[478,85698,52193],{"class":51680},[478,85700,51687],{"class":714},[478,85702,85703,85705,85707],{"class":480,"line":3165},[478,85704,52165],{"class":714},[478,85706,52180],{"class":51680},[478,85708,51687],{"class":714},[19,85710,85711],{},[52,85712],{"alt":54,"src":85713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[129,85715,85717],{"id":85716},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85719,85720],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85722,85723],{},[52,85724],{"alt":54,"src":85725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[469,85727,85729],{"className":53447,"code":85728,"language":53449,"meta":54,"style":54},"\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",[475,85730,85731,85739,85747,85752,85757,85761,85766,85771,85776,85784],{"__ignoreMap":54},[478,85732,85733,85735,85737],{"class":480,"line":481},[478,85734,1605],{"class":714},[478,85736,52180],{"class":51680},[478,85738,51687],{"class":714},[478,85740,85741,85743,85745],{"class":480,"line":565},[478,85742,52524],{"class":714},[478,85744,52193],{"class":51680},[478,85746,51687],{"class":714},[478,85748,85749],{"class":480,"line":579},[478,85750,85751],{"class":714},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[478,85753,85754],{"class":480,"line":593},[478,85755,85756],{"class":714},"    function Star() {\n",[478,85758,85759],{"class":480,"line":1769},[478,85760,2753],{"class":714},[478,85762,85763],{"class":480,"line":1783},[478,85764,85765],{"class":714},"    const ldh = new Star()\n",[478,85767,85768],{"class":480,"line":1789},[478,85769,85770],{"class":714},"    console.log(Star.prototype)\n",[478,85772,85773],{"class":480,"line":1880},[478,85774,85775],{"class":714},"    console.log(Star.prototype.constructor === Star)\n",[478,85777,85778,85780,85782],{"class":480,"line":1886},[478,85779,52797],{"class":714},[478,85781,52193],{"class":51680},[478,85783,51687],{"class":714},[478,85785,85786,85788,85790],{"class":480,"line":1898},[478,85787,52165],{"class":714},[478,85789,52180],{"class":51680},[478,85791,51687],{"class":714},[19,85793,85794],{},[52,85795],{"alt":54,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85798,85799],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[469,85801,85803],{"className":53447,"code":85802,"language":53449,"meta":54,"style":54},"  \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",[475,85804,85805,85813,85817,85821,85825,85830,85835,85840,85844,85849,85854,85859,85864,85869,85874,85878,85882,85887,85892,85897,85901,85906,85911,85915,85919,85923],{"__ignoreMap":54},[478,85806,85807,85809,85811],{"class":480,"line":481},[478,85808,52524],{"class":714},[478,85810,52193],{"class":51680},[478,85812,51687],{"class":714},[478,85814,85815],{"class":480,"line":565},[478,85816,85751],{"class":714},[478,85818,85819],{"class":480,"line":579},[478,85820,85756],{"class":714},[478,85822,85823],{"class":480,"line":593},[478,85824,2753],{"class":714},[478,85826,85827],{"class":480,"line":1769},[478,85828,85829],{"class":714},"    \u002F\u002F const ldh = new Star()\n",[478,85831,85832],{"class":480,"line":1783},[478,85833,85834],{"class":714},"    \u002F\u002F console.log(Star.prototype)\n",[478,85836,85837],{"class":480,"line":1789},[478,85838,85839],{"class":714},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[478,85841,85842],{"class":480,"line":1880},[478,85843,2966],{"emptyLinePlaceholder":640},[478,85845,85846],{"class":480,"line":1886},[478,85847,85848],{"class":714},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[478,85850,85851],{"class":480,"line":1898},[478,85852,85853],{"class":714},"    \u002F\u002F Star.prototype.sing = function () {\n",[478,85855,85856],{"class":480,"line":2180},[478,85857,85858],{"class":714},"    \u002F\u002F   console.log('唱歌')\n",[478,85860,85861],{"class":480,"line":2185},[478,85862,85863],{"class":714},"    \u002F\u002F }\n",[478,85865,85866],{"class":480,"line":2191},[478,85867,85868],{"class":714},"    \u002F\u002F Star.prototype.dance = function () {\n",[478,85870,85871],{"class":480,"line":2196},[478,85872,85873],{"class":714},"    \u002F\u002F   console.log('跳舞')\n",[478,85875,85876],{"class":480,"line":2210},[478,85877,85863],{"class":714},[478,85879,85880],{"class":480,"line":2215},[478,85881,85770],{"class":714},[478,85883,85884],{"class":480,"line":2221},[478,85885,85886],{"class":714},"    Star.prototype = {\n",[478,85888,85889],{"class":480,"line":2241},[478,85890,85891],{"class":714},"      sing: function () {\n",[478,85893,85894],{"class":480,"line":2246},[478,85895,85896],{"class":714},"        console.log('唱歌')\n",[478,85898,85899],{"class":480,"line":2260},[478,85900,78272],{"class":714},[478,85902,85903],{"class":480,"line":2265},[478,85904,85905],{"class":714},"      dance: function () {\n",[478,85907,85908],{"class":480,"line":2294},[478,85909,85910],{"class":714},"        console.log('跳舞')\n",[478,85912,85913],{"class":480,"line":2299},[478,85914,52778],{"class":714},[478,85916,85917],{"class":480,"line":2316},[478,85918,2753],{"class":714},[478,85920,85921],{"class":480,"line":2321},[478,85922,85770],{"class":714},[478,85924,85925,85927,85929],{"class":480,"line":2326},[478,85926,52797],{"class":714},[478,85928,52193],{"class":51680},[478,85930,51687],{"class":714},[19,85932,85933],{},"进行输出结果后会发现：",[19,85935,85936],{},[52,85937],{"alt":54,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85940,85941],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85943,85944],{},"所以，要重新指回创造这个原型对象的构造函数",[469,85946,85948],{"className":71593,"code":85947,"language":71595,"meta":54,"style":54},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[475,85949,85950,85964,85969,85974,85985,85998,86003,86014,86028,86032],{"__ignoreMap":54},[478,85951,85952,85955,85957,85960,85962],{"class":480,"line":481},[478,85953,85954],{"class":495},"Star",[478,85956,1258],{"class":714},[478,85958,85959],{"class":495},"prototype",[478,85961,14130],{"class":710},[478,85963,16137],{"class":714},[478,85965,85966],{"class":480,"line":565},[478,85967,85968],{"class":770},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[478,85970,85971],{"class":480,"line":579},[478,85972,85973],{"class":714},"  constructor: Star,\n",[478,85975,85976,85979,85981,85983],{"class":480,"line":593},[478,85977,85978],{"class":484},"  sing",[478,85980,51817],{"class":714},[478,85982,54829],{"class":710},[478,85984,54832],{"class":714},[478,85986,85987,85989,85991,85993,85996],{"class":480,"line":1769},[478,85988,74133],{"class":714},[478,85990,58627],{"class":484},[478,85992,263],{"class":714},[478,85994,85995],{"class":488},"'唱歌'",[478,85997,720],{"class":714},[478,85999,86000],{"class":480,"line":1783},[478,86001,86002],{"class":714},"   },\n",[478,86004,86005,86008,86010,86012],{"class":480,"line":1789},[478,86006,86007],{"class":484},"   dance",[478,86009,51817],{"class":714},[478,86011,54829],{"class":710},[478,86013,54832],{"class":714},[478,86015,86016,86019,86021,86023,86026],{"class":480,"line":1880},[478,86017,86018],{"class":714},"     console.",[478,86020,58627],{"class":484},[478,86022,263],{"class":714},[478,86024,86025],{"class":488},"'跳舞'",[478,86027,720],{"class":714},[478,86029,86030],{"class":480,"line":1886},[478,86031,4875],{"class":714},[478,86033,86034],{"class":480,"line":1898},[478,86035,2133],{"class":714},[19,86037,86038],{},[52,86039],{"alt":54,"src":86040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86042,86043],{},"总结1：",[19,86045,86046],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86048,86049],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86051,86052],{},"constructor指的是他的来源",[19,86054,86055],{},[52,86056],{"alt":54,"src":86057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86059,86060],{},[52,86061],{"alt":54,"src":86062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86064,86065],{},"总结2：",[19,86067,86068],{},[52,86069],{"alt":54,"src":86070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86072,86073],{},[52,86074],{"alt":54,"src":86075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86077,86078],{},[52,86079],{"alt":54,"src":86080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[129,86082,86084],{"id":86083},"_4134-对象原型","4.13.4 对象原型",[19,86086,86087],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86089,86090],{},"对象原型就是__proto__这个属性",[19,86092,86093],{},[52,86094],{"alt":54,"src":86095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86097,86098],{},[52,86099],{"alt":54,"src":86100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86102,86103],{},[52,86104],{"alt":54,"src":86105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86107,86108],{},[52,86109],{"alt":54,"src":86110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[469,86112,86114],{"className":53447,"code":86113,"language":53449,"meta":54,"style":54},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[475,86115,86116,86124,86132,86136,86140,86144,86149,86157],{"__ignoreMap":54},[478,86117,86118,86120,86122],{"class":480,"line":481},[478,86119,1605],{"class":714},[478,86121,52180],{"class":51680},[478,86123,51687],{"class":714},[478,86125,86126,86128,86130],{"class":480,"line":565},[478,86127,52524],{"class":714},[478,86129,52193],{"class":51680},[478,86131,51687],{"class":714},[478,86133,86134],{"class":480,"line":579},[478,86135,85756],{"class":714},[478,86137,86138],{"class":480,"line":593},[478,86139,2753],{"class":714},[478,86141,86142],{"class":480,"line":1769},[478,86143,85765],{"class":714},[478,86145,86146],{"class":480,"line":1783},[478,86147,86148],{"class":714},"    console.log(ldh)\n",[478,86150,86151,86153,86155],{"class":480,"line":1789},[478,86152,52797],{"class":714},[478,86154,52193],{"class":51680},[478,86156,51687],{"class":714},[478,86158,86159,86161,86163],{"class":480,"line":1880},[478,86160,52165],{"class":714},[478,86162,52180],{"class":51680},[478,86164,51687],{"class":714},[19,86166,86167],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86169,86170],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86172,86173],{},[52,86174],{"alt":54,"src":86175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86177,86178],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86180,86181],{},"对象原型指向原型对象",[19,86183,86184],{},[52,86185],{"alt":54,"src":86186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86188,86189],{},[52,86190],{"alt":54,"src":86191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86193,86194],{},[52,86195],{"alt":54,"src":86196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[129,86198,86200],{"id":86199},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86202,86203],{},[52,86204],{"alt":54,"src":86205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[29,86207,86208,86211,86214,86217],{},[32,86209,86210],{},"构造函数通过new的形式实例化得到实例对象",[32,86212,86213],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[32,86215,86216],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[32,86218,86219],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86221,86222],{},[52,86223],{"alt":54,"src":86224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86226,86227],{},"题目梳理：",[19,86229,86230],{},[52,86231],{"alt":54,"src":86232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[129,86234,86236],{"id":86235},"_4136-原型继承","4.13.6 原型继承",[19,86238,86239],{},[52,86240],{"alt":54,"src":86241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86243,86244],{},[52,86245],{"alt":54,"src":86246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86248,86249],{},[52,86250],{"alt":54,"src":86251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86253,86254],{},[52,86255],{"alt":54,"src":86256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86258,86259],{},[52,86260],{"alt":54,"src":86261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86263,86264],{},[52,86265],{"alt":54,"src":86266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86268,86269],{},[52,86270],{"alt":54,"src":86271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86273,86274],{},[52,86275],{"alt":54,"src":86276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86278,86279],{},"回顾：构造函数每次new得到对象都是不同的",[129,86281,86283],{"id":86282},"_4137-原型链","4.13.7 原型链",[19,86285,86286],{},[52,86287],{"alt":54,"src":86288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86290,86291],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86293,86294],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86296,86297],{},"大哥是Object",[19,86299,86300],{},[52,86301],{"alt":54,"src":86302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86304,86305],{},[52,86306],{"alt":54,"src":86307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86309,86310],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86312,86313],{},"万物皆对象",[129,86315,86317],{"id":86316},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86319,86320],{},"模态框",[19,86322,86323],{},"以后遇见这个效果直接使用这个就行",[19,86325,86326],{},[52,86327],{"alt":54,"src":86328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86330,86331],{},[52,86332],{"alt":54,"src":86333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86335,86336],{},[52,86337],{"alt":54,"src":86338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86340,86341],{},[52,86342],{"alt":54,"src":86343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86345,86346],{},"补充知识点：",[29,86348,86349],{},[32,86350,86351],{},"append()",[19,86353,86354],{},[52,86355],{"alt":54,"src":86356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[469,86358,86360],{"className":51013,"code":86359,"language":51015,"meta":54,"style":54},"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",[475,86361,86362,86367,86372,86377,86381,86385,86389,86394,86399,86404,86408],{"__ignoreMap":54},[478,86363,86364],{"class":480,"line":481},[478,86365,86366],{"class":714},"append(param1)\n",[478,86368,86369],{"class":480,"line":565},[478,86370,86371],{"class":714},"append(param1, param2)\n",[478,86373,86374],{"class":480,"line":579},[478,86375,86376],{"class":714},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[478,86378,86379],{"class":480,"line":593},[478,86380,2966],{"emptyLinePlaceholder":640},[478,86382,86383],{"class":480,"line":1769},[478,86384,2966],{"emptyLinePlaceholder":640},[478,86386,86387],{"class":480,"line":1783},[478,86388,2966],{"emptyLinePlaceholder":640},[478,86390,86391],{"class":480,"line":1789},[478,86392,86393],{"class":714},"let div = document.createElement(\"div\");\n",[478,86395,86396],{"class":480,"line":1880},[478,86397,86398],{"class":714},"let p = document.createElement(\"p\");\n",[478,86400,86401],{"class":480,"line":1886},[478,86402,86403],{"class":714},"div.append(p);\n",[478,86405,86406],{"class":480,"line":1898},[478,86407,2966],{"emptyLinePlaceholder":640},[478,86409,86410,86413,86415],{"class":480,"line":2180},[478,86411,86412],{"class":714},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[478,86414,19],{"class":51680},[478,86416,86417],{"class":714},"> ]\n",[29,86419,86420],{"start":565},[32,86421,86422],{},"remove()",[19,86424,86425],{},"自己删自己",[19,86427,86428],{},[52,86429],{"alt":54,"src":86430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[469,86432,86434],{"className":51013,"code":86433,"language":51015,"meta":54,"style":54},"\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",[475,86435,86436,86446,86460,86464,86472,86486,86506,86518,86526,86533,86545,86558,86593,86605,86616,86628,86640,86652,86679,86689,86693,86697,86706,86718,86732,86742,86754,86758,86762,86772,86783,86793,86803,86816,86829,86839,86843,86847,86856,86866,86878,86882,86886,86895,86905,86915,86927,86931,86935,86945,86961,86972,86982,86992,87004,87016,87028,87032,87036,87049,87060,87064,87072,87080,87084,87092,87112,87132,87140,87145,87171,87176,87181,87200,87205,87217,87222,87233,87243,87253,87258,87263,87267,87272,87277,87282,87302,87307,87327,87332,87346,87351,87356,87361,87377,87381,87386,87415,87420,87425,87430,87441,87445,87449,87453,87458,87483,87488,87513,87518,87527,87531,87536,87561,87565,87590,87594,87603,87607,87612,87630,87640,87644,87652,87660,87664],{"__ignoreMap":54},[478,86437,86438,86440,86442,86444],{"class":480,"line":481},[478,86439,51677],{"class":714},[478,86441,51681],{"class":51680},[478,86443,51684],{"class":484},[478,86445,51687],{"class":714},[478,86447,86448,86450,86452,86454,86456,86458],{"class":480,"line":565},[478,86449,1605],{"class":714},[478,86451,51015],{"class":51680},[478,86453,51696],{"class":484},[478,86455,759],{"class":714},[478,86457,51701],{"class":488},[478,86459,51687],{"class":714},[478,86461,86462],{"class":480,"line":579},[478,86463,2966],{"emptyLinePlaceholder":640},[478,86465,86466,86468,86470],{"class":480,"line":593},[478,86467,1605],{"class":714},[478,86469,51714],{"class":51680},[478,86471,51687],{"class":714},[478,86473,86474,86476,86478,86480,86482,86484],{"class":480,"line":1769},[478,86475,52524],{"class":714},[478,86477,51724],{"class":51680},[478,86479,51727],{"class":484},[478,86481,759],{"class":714},[478,86483,51732],{"class":488},[478,86485,51687],{"class":714},[478,86487,86488,86490,86492,86494,86496,86498,86500,86502,86504],{"class":480,"line":1783},[478,86489,52524],{"class":714},[478,86491,51724],{"class":51680},[478,86493,15485],{"class":484},[478,86495,759],{"class":714},[478,86497,51771],{"class":488},[478,86499,51751],{"class":484},[478,86501,759],{"class":714},[478,86503,51778],{"class":488},[478,86505,51687],{"class":714},[478,86507,86508,86510,86512,86514,86516],{"class":480,"line":1789},[478,86509,52524],{"class":714},[478,86511,51787],{"class":51680},[478,86513,51790],{"class":714},[478,86515,51787],{"class":51680},[478,86517,51687],{"class":714},[478,86519,86520,86522,86524],{"class":480,"line":1880},[478,86521,52524],{"class":714},[478,86523,617],{"class":51680},[478,86525,51687],{"class":714},[478,86527,86528,86531],{"class":480,"line":1886},[478,86529,86530],{"class":484},"    .modal",[478,86532,16137],{"class":714},[478,86534,86535,86537,86539,86541,86543],{"class":480,"line":1898},[478,86536,55151],{"class":495},[478,86538,51817],{"class":714},[478,86540,4539],{"class":495},[478,86542,51872],{"class":710},[478,86544,1859],{"class":714},[478,86546,86547,86550,86552,86554,86556],{"class":480,"line":2180},[478,86548,86549],{"class":495},"      min-height",[478,86551,51817],{"class":714},[478,86553,1012],{"class":495},[478,86555,51872],{"class":710},[478,86557,1859],{"class":714},[478,86559,86560,86562,86564,86566,86568,86570,86572,86574,86576,86578,86580,86582,86584,86586,86588,86591],{"class":480,"line":2185},[478,86561,79130],{"class":495},[478,86563,51817],{"class":714},[478,86565,895],{"class":495},[478,86567,4659],{"class":495},[478,86569,2604],{"class":495},[478,86571,51872],{"class":710},[478,86573,79147],{"class":495},[478,86575,263],{"class":714},[478,86577,895],{"class":495},[478,86579,13001],{"class":714},[478,86581,895],{"class":495},[478,86583,13001],{"class":714},[478,86585,895],{"class":495},[478,86587,13001],{"class":714},[478,86589,86590],{"class":495},"0.1",[478,86592,3285],{"class":714},[478,86594,86595,86597,86599,86601,86603],{"class":480,"line":2191},[478,86596,55514],{"class":495},[478,86598,51817],{"class":714},[478,86600,994],{"class":495},[478,86602,51872],{"class":710},[478,86604,1859],{"class":714},[478,86606,86607,86609,86611,86614],{"class":480,"line":2196},[478,86608,55139],{"class":495},[478,86610,51817],{"class":714},[478,86612,86613],{"class":495},"fixed",[478,86615,1859],{"class":714},[478,86617,86618,86621,86623,86626],{"class":480,"line":2210},[478,86619,86620],{"class":495},"      z-index",[478,86622,51817],{"class":714},[478,86624,86625],{"class":495},"999",[478,86627,1859],{"class":714},[478,86629,86630,86632,86634,86636,86638],{"class":480,"line":2215},[478,86631,55218],{"class":495},[478,86633,51817],{"class":714},[478,86635,1354],{"class":495},[478,86637,1029],{"class":710},[478,86639,1859],{"class":714},[478,86641,86642,86644,86646,86648,86650],{"class":480,"line":2221},[478,86643,55327],{"class":495},[478,86645,51817],{"class":714},[478,86647,1354],{"class":495},[478,86649,1029],{"class":710},[478,86651,1859],{"class":714},[478,86653,86654,86656,86658,86660,86662,86665,86667,86669,86671,86673,86675,86677],{"class":480,"line":2241},[478,86655,79171],{"class":495},[478,86657,51817],{"class":714},[478,86659,79176],{"class":495},[478,86661,263],{"class":714},[478,86663,86664],{"class":495},"-50",[478,86666,1029],{"class":710},[478,86668,13001],{"class":714},[478,86670,86664],{"class":495},[478,86672,1029],{"class":710},[478,86674,13001],{"class":714},[478,86676,895],{"class":495},[478,86678,3285],{"class":714},[478,86680,86681,86683,86685,86687],{"class":480,"line":2246},[478,86682,55264],{"class":495},[478,86684,51817],{"class":714},[478,86686,61222],{"class":495},[478,86688,1859],{"class":714},[478,86690,86691],{"class":480,"line":2260},[478,86692,2753],{"class":714},[478,86694,86695],{"class":480,"line":2265},[478,86696,2966],{"emptyLinePlaceholder":640},[478,86698,86699,86701,86704],{"class":480,"line":2294},[478,86700,86530],{"class":484},[478,86702,86703],{"class":484}," .header",[478,86705,16137],{"class":714},[478,86707,86708,86710,86712,86714,86716],{"class":480,"line":2299},[478,86709,57739],{"class":495},[478,86711,51817],{"class":714},[478,86713,1102],{"class":495},[478,86715,51872],{"class":710},[478,86717,1859],{"class":714},[478,86719,86720,86722,86724,86726,86728,86730],{"class":480,"line":2316},[478,86721,55075],{"class":495},[478,86723,51817],{"class":714},[478,86725,895],{"class":495},[478,86727,2604],{"class":495},[478,86729,51872],{"class":710},[478,86731,1859],{"class":714},[478,86733,86734,86736,86738,86740],{"class":480,"line":2321},[478,86735,55139],{"class":495},[478,86737,51817],{"class":714},[478,86739,55144],{"class":495},[478,86741,1859],{"class":714},[478,86743,86744,86746,86748,86750,86752],{"class":480,"line":2326},[478,86745,55302],{"class":495},[478,86747,51817],{"class":714},[478,86749,1396],{"class":495},[478,86751,51872],{"class":710},[478,86753,1859],{"class":714},[478,86755,86756],{"class":480,"line":2331},[478,86757,2753],{"class":714},[478,86759,86760],{"class":480,"line":2345},[478,86761,2966],{"emptyLinePlaceholder":640},[478,86763,86764,86766,86768,86770],{"class":480,"line":2350},[478,86765,86530],{"class":484},[478,86767,86703],{"class":484},[478,86769,3598],{"class":51680},[478,86771,16137],{"class":714},[478,86773,86774,86777,86779,86781],{"class":480,"line":3143},[478,86775,86776],{"class":495},"      font-style",[478,86778,51817],{"class":714},[478,86780,64221],{"class":495},[478,86782,1859],{"class":714},[478,86784,86785,86787,86789,86791],{"class":480,"line":3157},[478,86786,57796],{"class":495},[478,86788,51817],{"class":714},[478,86790,62450],{"class":495},[478,86792,1859],{"class":714},[478,86794,86795,86797,86799,86801],{"class":480,"line":3165},[478,86796,55139],{"class":495},[478,86798,51817],{"class":714},[478,86800,55211],{"class":495},[478,86802,1859],{"class":714},[478,86804,86805,86808,86810,86812,86814],{"class":480,"line":3170},[478,86806,86807],{"class":495},"      right",[478,86809,51817],{"class":714},[478,86811,1275],{"class":495},[478,86813,51872],{"class":710},[478,86815,1859],{"class":714},[478,86817,86818,86820,86822,86825,86827],{"class":480,"line":3176},[478,86819,55327],{"class":495},[478,86821,51817],{"class":714},[478,86823,86824],{"class":495},"-2",[478,86826,51872],{"class":710},[478,86828,1859],{"class":714},[478,86830,86831,86833,86835,86837],{"class":480,"line":3182},[478,86832,62405],{"class":495},[478,86834,51817],{"class":714},[478,86836,62410],{"class":495},[478,86838,1859],{"class":714},[478,86840,86841],{"class":480,"line":3187},[478,86842,2753],{"class":714},[478,86844,86845],{"class":480,"line":8514},[478,86846,2966],{"emptyLinePlaceholder":640},[478,86848,86849,86851,86854],{"class":480,"line":8538},[478,86850,86530],{"class":484},[478,86852,86853],{"class":484}," .body",[478,86855,16137],{"class":714},[478,86857,86858,86860,86862,86864],{"class":480,"line":8543},[478,86859,57666],{"class":495},[478,86861,51817],{"class":714},[478,86863,51972],{"class":495},[478,86865,1859],{"class":714},[478,86867,86868,86870,86872,86874,86876],{"class":480,"line":8549},[478,86869,55075],{"class":495},[478,86871,51817],{"class":714},[478,86873,1146],{"class":495},[478,86875,51872],{"class":710},[478,86877,1859],{"class":714},[478,86879,86880],{"class":480,"line":8576},[478,86881,2753],{"class":714},[478,86883,86884],{"class":480,"line":8581},[478,86885,2966],{"emptyLinePlaceholder":640},[478,86887,86888,86890,86893],{"class":480,"line":8587},[478,86889,86530],{"class":484},[478,86891,86892],{"class":484}," .footer",[478,86894,16137],{"class":714},[478,86896,86897,86899,86901,86903],{"class":480,"line":8599},[478,86898,55389],{"class":495},[478,86900,51817],{"class":714},[478,86902,51857],{"class":495},[478,86904,1859],{"class":714},[478,86906,86907,86909,86911,86913],{"class":480,"line":8611},[478,86908,55400],{"class":495},[478,86910,51817],{"class":714},[478,86912,51960],{"class":495},[478,86914,1859],{"class":714},[478,86916,86917,86919,86921,86923,86925],{"class":480,"line":8623},[478,86918,55075],{"class":495},[478,86920,51817],{"class":714},[478,86922,1146],{"class":495},[478,86924,51872],{"class":710},[478,86926,1859],{"class":714},[478,86928,86929],{"class":480,"line":10282},[478,86930,2753],{"class":714},[478,86932,86933],{"class":480,"line":10307},[478,86934,2966],{"emptyLinePlaceholder":640},[478,86936,86937,86939,86941,86943],{"class":480,"line":10330},[478,86938,86530],{"class":484},[478,86940,86892],{"class":484},[478,86942,1967],{"class":51680},[478,86944,16137],{"class":714},[478,86946,86947,86949,86951,86953,86955,86957,86959],{"class":480,"line":10354},[478,86948,55075],{"class":495},[478,86950,51817],{"class":714},[478,86952,783],{"class":495},[478,86954,51872],{"class":710},[478,86956,2649],{"class":495},[478,86958,51872],{"class":710},[478,86960,1859],{"class":714},[478,86962,86963,86965,86967,86970],{"class":480,"line":10359},[478,86964,62101],{"class":495},[478,86966,51817],{"class":714},[478,86968,86969],{"class":495},"#ccc",[478,86971,1859],{"class":714},[478,86973,86974,86976,86978,86980],{"class":480,"line":10364},[478,86975,64350],{"class":495},[478,86977,51817],{"class":714},[478,86979,55117],{"class":495},[478,86981,1859],{"class":714},[478,86983,86984,86986,86988,86990],{"class":480,"line":10369},[478,86985,57796],{"class":495},[478,86987,51817],{"class":714},[478,86989,61222],{"class":495},[478,86991,1859],{"class":714},[478,86993,86994,86996,86998,87000,87002],{"class":480,"line":10378},[478,86995,55514],{"class":495},[478,86997,51817],{"class":714},[478,86999,789],{"class":495},[478,87001,51872],{"class":710},[478,87003,1859],{"class":714},[478,87005,87006,87008,87010,87012,87014],{"class":480,"line":10383},[478,87007,62130],{"class":495},[478,87009,51817],{"class":714},[478,87011,1146],{"class":495},[478,87013,51872],{"class":710},[478,87015,1859],{"class":714},[478,87017,87018,87020,87022,87024,87026],{"class":480,"line":10389},[478,87019,55302],{"class":495},[478,87021,51817],{"class":714},[478,87023,1249],{"class":495},[478,87025,51872],{"class":710},[478,87027,1859],{"class":714},[478,87029,87030],{"class":480,"line":10410},[478,87031,2753],{"class":714},[478,87033,87034],{"class":480,"line":10416},[478,87035,2966],{"emptyLinePlaceholder":640},[478,87037,87038,87040,87042,87044,87047],{"class":480,"line":10430},[478,87039,86530],{"class":484},[478,87041,86892],{"class":484},[478,87043,1967],{"class":51680},[478,87045,87046],{"class":484},".submit",[478,87048,16137],{"class":714},[478,87050,87051,87053,87055,87058],{"class":480,"line":10436},[478,87052,55264],{"class":495},[478,87054,51817],{"class":714},[478,87056,87057],{"class":495},"#369",[478,87059,1859],{"class":714},[478,87061,87062],{"class":480,"line":10463},[478,87063,2753],{"class":714},[478,87065,87066,87068,87070],{"class":480,"line":10472},[478,87067,52797],{"class":714},[478,87069,617],{"class":51680},[478,87071,51687],{"class":714},[478,87073,87074,87076,87078],{"class":480,"line":10478},[478,87075,52165],{"class":714},[478,87077,51714],{"class":51680},[478,87079,51687],{"class":714},[478,87081,87082],{"class":480,"line":10486},[478,87083,2966],{"emptyLinePlaceholder":640},[478,87085,87086,87088,87090],{"class":480,"line":10491},[478,87087,1605],{"class":714},[478,87089,52180],{"class":51680},[478,87091,51687],{"class":714},[478,87093,87094,87096,87098,87100,87102,87105,87108,87110],{"class":480,"line":17169},[478,87095,52524],{"class":714},[478,87097,54267],{"class":51680},[478,87099,15524],{"class":484},[478,87101,759],{"class":714},[478,87103,87104],{"class":488},"\"delete\"",[478,87106,87107],{"class":714},">删除\u003C\u002F",[478,87109,54267],{"class":51680},[478,87111,51687],{"class":714},[478,87113,87114,87116,87118,87120,87122,87125,87128,87130],{"class":480,"line":17175},[478,87115,52524],{"class":714},[478,87117,54267],{"class":51680},[478,87119,15524],{"class":484},[478,87121,759],{"class":714},[478,87123,87124],{"class":488},"\"login\"",[478,87126,87127],{"class":714},">登录\u003C\u002F",[478,87129,54267],{"class":51680},[478,87131,51687],{"class":714},[478,87133,87134,87136,87138],{"class":480,"line":17198},[478,87135,52524],{"class":714},[478,87137,52193],{"class":51680},[478,87139,51687],{"class":714},[478,87141,87142],{"class":480,"line":17204},[478,87143,87144],{"class":770},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[478,87146,87147,87149,87152,87154,87156,87158,87160,87162,87165,87167,87169],{"class":480,"line":17227},[478,87148,70464],{"class":710},[478,87150,87151],{"class":484}," Modal",[478,87153,263],{"class":714},[478,87155,51787],{"class":5782},[478,87157,14130],{"class":710},[478,87159,70310],{"class":488},[478,87161,13001],{"class":714},[478,87163,87164],{"class":5782},"message",[478,87166,14130],{"class":710},[478,87168,70310],{"class":488},[478,87170,13008],{"class":714},[478,87172,87173],{"class":480,"line":17241},[478,87174,87175],{"class":770},"      \u002F\u002F 创建Model 模态框盒子\n",[478,87177,87178],{"class":480,"line":17261},[478,87179,87180],{"class":770},"      \u002F\u002F 1.1 创建div标签\n",[478,87182,87183,87185,87188,87190,87192,87194,87196,87198],{"class":480,"line":17267},[478,87184,70431],{"class":495},[478,87186,87187],{"class":714},".modalBox ",[478,87189,759],{"class":710},[478,87191,54776],{"class":714},[478,87193,70531],{"class":484},[478,87195,263],{"class":714},[478,87197,82311],{"class":488},[478,87199,720],{"class":714},[478,87201,87202],{"class":480,"line":17278},[478,87203,87204],{"class":770},"      \u002F\u002F 1.2 给div 添加类名为model\n",[478,87206,87207,87209,87212,87214],{"class":480,"line":17301},[478,87208,70431],{"class":495},[478,87210,87211],{"class":714},".modalBox.className ",[478,87213,759],{"class":710},[478,87215,87216],{"class":488}," 'modal'\n",[478,87218,87219],{"class":480,"line":17323},[478,87220,87221],{"class":770},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[478,87223,87224,87226,87229,87231],{"class":480,"line":17328},[478,87225,70431],{"class":495},[478,87227,87228],{"class":714},".modalBox.innerHTML ",[478,87230,759],{"class":710},[478,87232,70548],{"class":488},[478,87234,87235,87238,87240],{"class":480,"line":17334},[478,87236,87237],{"class":488},"        \u003Cdiv class=\"header\">${",[478,87239,51787],{"class":714},[478,87241,87242],{"class":488},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[478,87244,87245,87248,87250],{"class":480,"line":17348},[478,87246,87247],{"class":488},"        \u003Cdiv class=\"body\">${",[478,87249,87164],{"class":714},[478,87251,87252],{"class":488},"}\u003C\u002Fdiv>\n",[478,87254,87255],{"class":480,"line":17361},[478,87256,87257],{"class":488},"      `\n",[478,87259,87260],{"class":480,"line":17366},[478,87261,87262],{"class":770},"      \u002F\u002F console.log(this.modalBox)\n",[478,87264,87265],{"class":480,"line":17380},[478,87266,2753],{"class":714},[478,87268,87269],{"class":480,"line":17385},[478,87270,87271],{"class":770},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[478,87273,87274],{"class":480,"line":17391},[478,87275,87276],{"class":770},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[478,87278,87279],{"class":480,"line":17396},[478,87280,87281],{"class":770},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[478,87283,87284,87287,87289,87291,87293,87296,87298,87300],{"class":480,"line":17410},[478,87285,87286],{"class":495},"    Modal",[478,87288,1258],{"class":714},[478,87290,85959],{"class":495},[478,87292,1258],{"class":714},[478,87294,87295],{"class":484},"open",[478,87297,14130],{"class":710},[478,87299,59298],{"class":710},[478,87301,54832],{"class":714},[478,87303,87304],{"class":480,"line":17415},[478,87305,87306],{"class":770},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[478,87308,87309,87311,87314,87316,87318,87320,87322,87325],{"class":480,"line":17420},[478,87310,58608],{"class":710},[478,87312,87313],{"class":495}," box",[478,87315,14130],{"class":710},[478,87317,54776],{"class":714},[478,87319,54779],{"class":484},[478,87321,263],{"class":714},[478,87323,87324],{"class":488},"'.modal'",[478,87326,720],{"class":714},[478,87328,87329],{"class":480,"line":17434},[478,87330,87331],{"class":770},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[478,87333,87334,87337,87339,87342,87344],{"class":480,"line":17446},[478,87335,87336],{"class":714},"      box ",[478,87338,2282],{"class":710},[478,87340,87341],{"class":714}," box.",[478,87343,57386],{"class":484},[478,87345,2542],{"class":714},[478,87347,87348],{"class":480,"line":17451},[478,87349,87350],{"class":770},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[478,87352,87353],{"class":480,"line":17464},[478,87354,87355],{"class":770},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[478,87357,87358],{"class":480,"line":17469},[478,87359,87360],{"class":770},"      \u002F\u002F append可以增加对象\n",[478,87362,87363,87366,87369,87371,87374],{"class":480,"line":17474},[478,87364,87365],{"class":714},"      document.body.",[478,87367,87368],{"class":484},"append",[478,87370,263],{"class":714},[478,87372,87373],{"class":495},"this",[478,87375,87376],{"class":714},".modalBox)\n",[478,87378,87379],{"class":480,"line":17479},[478,87380,2966],{"emptyLinePlaceholder":640},[478,87382,87383],{"class":480,"line":17492},[478,87384,87385],{"class":770},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[478,87387,87388,87390,87393,87395,87397,87400,87402,87404,87406,87408,87411,87413],{"class":480,"line":17497},[478,87389,70431],{"class":495},[478,87391,87392],{"class":714},".modalBox.",[478,87394,54779],{"class":484},[478,87396,263],{"class":714},[478,87398,87399],{"class":488},"'i'",[478,87401,31206],{"class":714},[478,87403,58193],{"class":484},[478,87405,263],{"class":714},[478,87407,58198],{"class":488},[478,87409,87410],{"class":714},", () ",[478,87412,85102],{"class":710},[478,87414,16137],{"class":714},[478,87416,87417],{"class":480,"line":33013},[478,87418,87419],{"class":770},"        \u002F\u002F 这个地方需要用到箭头函数\n",[478,87421,87422],{"class":480,"line":33019},[478,87423,87424],{"class":770},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[478,87426,87427],{"class":480,"line":33025},[478,87428,87429],{"class":770},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[478,87431,87432,87434,87436,87439],{"class":480,"line":33031},[478,87433,65106],{"class":495},[478,87435,1258],{"class":714},[478,87437,87438],{"class":484},"close",[478,87440,2542],{"class":714},[478,87442,87443],{"class":480,"line":33037},[478,87444,65195],{"class":714},[478,87446,87447],{"class":480,"line":33048},[478,87448,2753],{"class":714},[478,87450,87451],{"class":480,"line":33054},[478,87452,2966],{"emptyLinePlaceholder":640},[478,87454,87455],{"class":480,"line":33074},[478,87456,87457],{"class":770},"    \u002F\u002F 测试一下 点击 删除按钮\n",[478,87459,87460,87462,87464,87466,87469,87471,87473,87475,87477,87479,87481],{"class":480,"line":33080},[478,87461,52787],{"class":714},[478,87463,54779],{"class":484},[478,87465,263],{"class":714},[478,87467,87468],{"class":488},"'#delete'",[478,87470,31206],{"class":714},[478,87472,58193],{"class":484},[478,87474,263],{"class":714},[478,87476,58198],{"class":488},[478,87478,87410],{"class":714},[478,87480,85102],{"class":710},[478,87482,16137],{"class":714},[478,87484,87485],{"class":480,"line":33091},[478,87486,87487],{"class":770},"      \u002F\u002F 先调用Model构造函数\n",[478,87489,87490,87492,87495,87497,87499,87501,87503,87506,87508,87511],{"class":480,"line":33097},[478,87491,58608],{"class":710},[478,87493,87494],{"class":495}," del",[478,87496,14130],{"class":710},[478,87498,12144],{"class":710},[478,87500,87151],{"class":484},[478,87502,263],{"class":714},[478,87504,87505],{"class":488},"'温馨的提示'",[478,87507,13001],{"class":714},[478,87509,87510],{"class":488},"'您没有删除权限操作'",[478,87512,720],{"class":714},[478,87514,87515],{"class":480,"line":33103},[478,87516,87517],{"class":770},"      \u002F\u002F 实例对象调用open方法\n",[478,87519,87520,87523,87525],{"class":480,"line":33109},[478,87521,87522],{"class":714},"      del.",[478,87524,87295],{"class":484},[478,87526,2542],{"class":714},[478,87528,87529],{"class":480,"line":33115},[478,87530,33841],{"class":714},[478,87532,87533],{"class":480,"line":33121},[478,87534,87535],{"class":770},"    \u002F\u002F 测试一下 点击 登录按钮\n",[478,87537,87538,87540,87542,87544,87547,87549,87551,87553,87555,87557,87559],{"class":480,"line":33127},[478,87539,52787],{"class":714},[478,87541,54779],{"class":484},[478,87543,263],{"class":714},[478,87545,87546],{"class":488},"'#login'",[478,87548,31206],{"class":714},[478,87550,58193],{"class":484},[478,87552,263],{"class":714},[478,87554,58198],{"class":488},[478,87556,87410],{"class":714},[478,87558,85102],{"class":710},[478,87560,16137],{"class":714},[478,87562,87563],{"class":480,"line":33133},[478,87564,87487],{"class":770},[478,87566,87567,87569,87572,87574,87576,87578,87580,87583,87585,87588],{"class":480,"line":33153},[478,87568,58608],{"class":710},[478,87570,87571],{"class":495}," log",[478,87573,14130],{"class":710},[478,87575,12144],{"class":710},[478,87577,87151],{"class":484},[478,87579,263],{"class":714},[478,87581,87582],{"class":488},"'友情提示'",[478,87584,13001],{"class":714},[478,87586,87587],{"class":488},"'您还没有登录呢'",[478,87589,720],{"class":714},[478,87591,87592],{"class":480,"line":33159},[478,87593,87517],{"class":770},[478,87595,87596,87599,87601],{"class":480,"line":33175},[478,87597,87598],{"class":714},"      log.",[478,87600,87295],{"class":484},[478,87602,2542],{"class":714},[478,87604,87605],{"class":480,"line":33181},[478,87606,33841],{"class":714},[478,87608,87609],{"class":480,"line":33195},[478,87610,87611],{"class":770},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[478,87613,87614,87616,87618,87620,87622,87624,87626,87628],{"class":480,"line":33201},[478,87615,87286],{"class":495},[478,87617,1258],{"class":714},[478,87619,85959],{"class":495},[478,87621,1258],{"class":714},[478,87623,87438],{"class":484},[478,87625,14130],{"class":710},[478,87627,59298],{"class":710},[478,87629,54832],{"class":714},[478,87631,87632,87634,87636,87638],{"class":480,"line":33216},[478,87633,70431],{"class":495},[478,87635,87392],{"class":714},[478,87637,57386],{"class":484},[478,87639,2542],{"class":714},[478,87641,87642],{"class":480,"line":33222},[478,87643,2753],{"class":714},[478,87645,87646,87648,87650],{"class":480,"line":33231},[478,87647,52797],{"class":714},[478,87649,52193],{"class":51680},[478,87651,51687],{"class":714},[478,87653,87654,87656,87658],{"class":480,"line":33237},[478,87655,52165],{"class":714},[478,87657,52180],{"class":51680},[478,87659,51687],{"class":714},[478,87661,87662],{"class":480,"line":33246},[478,87663,2966],{"emptyLinePlaceholder":640},[478,87665,87666,87668,87670],{"class":480,"line":33252},[478,87667,52165],{"class":714},[478,87669,51015],{"class":51680},[478,87671,51687],{"class":714},[19,87673,87674],{},[52,87675],{"alt":54,"src":87676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87678,87680],{"id":87679},"_414-深浅拷贝","4.14 深浅拷贝",[129,87682,87684],{"id":87683},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87686,87687],{},[52,87688],{"alt":54,"src":87689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87691,87692],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87694,87695],{},[52,87696],{"alt":54,"src":87697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87699,87700],{},[52,87701],{"alt":54,"src":87702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87704,87705],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87707,87708],{},[52,87709],{"alt":54,"src":87710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87712,11898],{},[19,87714,87715],{},[52,87716],{"alt":54,"src":87717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[129,87719,87721],{"id":87720},"_4142-深拷贝","4.14.2 深拷贝",[19,87723,87724],{},"深拷贝：拷贝的是对象，不是地址",[19,87726,87727],{},"常用的三种方法：",[29,87729,87730,87733,87736],{},[32,87731,87732],{},"通过递归实现深拷贝",[32,87734,87735],{},"lodash\u002FcloneDeep",[32,87737,87738],{},"通过JSON.stringify()实现",[22563,87740,87742],{"id":87741},"_41421-递归函数","4.14.2.1 递归函数",[19,87744,87745],{},[52,87746],{"alt":54,"src":87747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[29,87749,87750],{},[32,87751,87752],{},"死递归占溢出：",[469,87754,87756],{"className":53447,"code":87755,"language":53449,"meta":54,"style":54},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[475,87757,87758,87766,87774,87778,87783,87787,87792,87800],{"__ignoreMap":54},[478,87759,87760,87762,87764],{"class":480,"line":481},[478,87761,1605],{"class":714},[478,87763,52180],{"class":51680},[478,87765,51687],{"class":714},[478,87767,87768,87770,87772],{"class":480,"line":565},[478,87769,52524],{"class":714},[478,87771,52193],{"class":51680},[478,87773,51687],{"class":714},[478,87775,87776],{"class":480,"line":579},[478,87777,77523],{"class":714},[478,87779,87780],{"class":480,"line":593},[478,87781,87782],{"class":714},"      fn()\n",[478,87784,87785],{"class":480,"line":1769},[478,87786,2753],{"class":714},[478,87788,87789],{"class":480,"line":1783},[478,87790,87791],{"class":714},"    fn()\n",[478,87793,87794,87796,87798],{"class":480,"line":1789},[478,87795,52797],{"class":714},[478,87797,52193],{"class":51680},[478,87799,51687],{"class":714},[478,87801,87802,87804,87806],{"class":480,"line":1880},[478,87803,52165],{"class":714},[478,87805,52180],{"class":51680},[478,87807,51687],{"class":714},[29,87809,87810],{"start":565},[32,87811,87812],{},"递归函数要加判断条件：",[19,87814,87815],{},[52,87816],{"alt":54,"src":87817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[29,87819,87820],{"start":579},[32,87821,87822],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[469,87824,87826],{"className":51013,"code":87825,"language":51015,"meta":54,"style":54},"\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",[475,87827,87828,87838,87852,87856,87864,87878,87898,87910,87918,87922,87930,87942,87950,87958,87983,87995,87999,88006,88014,88022,88026],{"__ignoreMap":54},[478,87829,87830,87832,87834,87836],{"class":480,"line":481},[478,87831,51677],{"class":714},[478,87833,51681],{"class":51680},[478,87835,51684],{"class":484},[478,87837,51687],{"class":714},[478,87839,87840,87842,87844,87846,87848,87850],{"class":480,"line":565},[478,87841,1605],{"class":714},[478,87843,51015],{"class":51680},[478,87845,51696],{"class":484},[478,87847,759],{"class":714},[478,87849,51701],{"class":488},[478,87851,51687],{"class":714},[478,87853,87854],{"class":480,"line":579},[478,87855,2966],{"emptyLinePlaceholder":640},[478,87857,87858,87860,87862],{"class":480,"line":593},[478,87859,1605],{"class":714},[478,87861,51714],{"class":51680},[478,87863,51687],{"class":714},[478,87865,87866,87868,87870,87872,87874,87876],{"class":480,"line":1769},[478,87867,52524],{"class":714},[478,87869,51724],{"class":51680},[478,87871,51727],{"class":484},[478,87873,759],{"class":714},[478,87875,51732],{"class":488},[478,87877,51687],{"class":714},[478,87879,87880,87882,87884,87886,87888,87890,87892,87894,87896],{"class":480,"line":1783},[478,87881,52524],{"class":714},[478,87883,51724],{"class":51680},[478,87885,15485],{"class":484},[478,87887,759],{"class":714},[478,87889,51771],{"class":488},[478,87891,51751],{"class":484},[478,87893,759],{"class":714},[478,87895,51778],{"class":488},[478,87897,51687],{"class":714},[478,87899,87900,87902,87904,87906,87908],{"class":480,"line":1789},[478,87901,52524],{"class":714},[478,87903,51787],{"class":51680},[478,87905,51790],{"class":714},[478,87907,51787],{"class":51680},[478,87909,51687],{"class":714},[478,87911,87912,87914,87916],{"class":480,"line":1880},[478,87913,52165],{"class":714},[478,87915,51714],{"class":51680},[478,87917,51687],{"class":714},[478,87919,87920],{"class":480,"line":1886},[478,87921,2966],{"emptyLinePlaceholder":640},[478,87923,87924,87926,87928],{"class":480,"line":1898},[478,87925,1605],{"class":714},[478,87927,52180],{"class":51680},[478,87929,51687],{"class":714},[478,87931,87932,87934,87936,87938,87940],{"class":480,"line":2180},[478,87933,52524],{"class":714},[478,87935,51991],{"class":51680},[478,87937,55694],{"class":714},[478,87939,51991],{"class":51680},[478,87941,51687],{"class":714},[478,87943,87944,87946,87948],{"class":480,"line":2185},[478,87945,52524],{"class":714},[478,87947,52193],{"class":51680},[478,87949,51687],{"class":714},[478,87951,87952,87954,87956],{"class":480,"line":2191},[478,87953,70464],{"class":710},[478,87955,74153],{"class":484},[478,87957,11419],{"class":714},[478,87959,87960,87962,87964,87966,87968,87970,87972,87974,87976,87978,87981],{"class":480,"line":2196},[478,87961,56151],{"class":714},[478,87963,54779],{"class":484},[478,87965,263],{"class":714},[478,87967,82311],{"class":488},[478,87969,74629],{"class":714},[478,87971,759],{"class":710},[478,87973,12144],{"class":710},[478,87975,74169],{"class":484},[478,87977,17826],{"class":714},[478,87979,87980],{"class":484},"toLocaleString",[478,87982,2542],{"class":714},[478,87984,87985,87988,87991,87993],{"class":480,"line":2210},[478,87986,87987],{"class":484},"      setTimeout",[478,87989,87990],{"class":714},"(getTime, ",[478,87992,6976],{"class":495},[478,87994,720],{"class":714},[478,87996,87997],{"class":480,"line":2215},[478,87998,2753],{"class":714},[478,88000,88001,88004],{"class":480,"line":2221},[478,88002,88003],{"class":484},"    getTime",[478,88005,2542],{"class":714},[478,88007,88008,88010,88012],{"class":480,"line":2241},[478,88009,52797],{"class":714},[478,88011,52193],{"class":51680},[478,88013,51687],{"class":714},[478,88015,88016,88018,88020],{"class":480,"line":2246},[478,88017,52165],{"class":714},[478,88019,52180],{"class":51680},[478,88021,51687],{"class":714},[478,88023,88024],{"class":480,"line":2260},[478,88025,2966],{"emptyLinePlaceholder":640},[478,88027,88028,88030,88032],{"class":480,"line":2265},[478,88029,52165],{"class":714},[478,88031,51015],{"class":51680},[478,88033,51687],{"class":714},[19,88035,88036],{},[52,88037],{"alt":54,"src":88038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[29,88040,88041],{"start":593},[32,88042,87732],{},[19,88044,88045],{},[52,88046],{"alt":54,"src":88047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88049,88050],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88052,39569],{},[19,88054,88055],{},"这个是简易版的递归函数深拷贝",[19,88057,88058],{},"一定要注意先数组再对象，因为万物皆可对象",[469,88060,88062],{"className":51013,"code":88061,"language":51015,"meta":54,"style":54},"\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",[475,88063,88064,88074,88088,88092,88100,88114,88134,88146,88154,88158,88166,88174,88184,88193,88201,88217,88221,88229,88233,88237,88249,88254,88273,88289,88294,88299,88304,88319,88324,88329,88338,88346,88363,88371,88377,88385,88390,88395,88404,88408,88412,88416,88427,88436,88446,88460,88470,88478,88486,88494,88498],{"__ignoreMap":54},[478,88065,88066,88068,88070,88072],{"class":480,"line":481},[478,88067,51677],{"class":714},[478,88069,51681],{"class":51680},[478,88071,51684],{"class":484},[478,88073,51687],{"class":714},[478,88075,88076,88078,88080,88082,88084,88086],{"class":480,"line":565},[478,88077,1605],{"class":714},[478,88079,51015],{"class":51680},[478,88081,51696],{"class":484},[478,88083,759],{"class":714},[478,88085,51701],{"class":488},[478,88087,51687],{"class":714},[478,88089,88090],{"class":480,"line":579},[478,88091,2966],{"emptyLinePlaceholder":640},[478,88093,88094,88096,88098],{"class":480,"line":593},[478,88095,1605],{"class":714},[478,88097,51714],{"class":51680},[478,88099,51687],{"class":714},[478,88101,88102,88104,88106,88108,88110,88112],{"class":480,"line":1769},[478,88103,52524],{"class":714},[478,88105,51724],{"class":51680},[478,88107,51727],{"class":484},[478,88109,759],{"class":714},[478,88111,51732],{"class":488},[478,88113,51687],{"class":714},[478,88115,88116,88118,88120,88122,88124,88126,88128,88130,88132],{"class":480,"line":1783},[478,88117,52524],{"class":714},[478,88119,51724],{"class":51680},[478,88121,15485],{"class":484},[478,88123,759],{"class":714},[478,88125,51771],{"class":488},[478,88127,51751],{"class":484},[478,88129,759],{"class":714},[478,88131,51778],{"class":488},[478,88133,51687],{"class":714},[478,88135,88136,88138,88140,88142,88144],{"class":480,"line":1789},[478,88137,52524],{"class":714},[478,88139,51787],{"class":51680},[478,88141,51790],{"class":714},[478,88143,51787],{"class":51680},[478,88145,51687],{"class":714},[478,88147,88148,88150,88152],{"class":480,"line":1880},[478,88149,52165],{"class":714},[478,88151,51714],{"class":51680},[478,88153,51687],{"class":714},[478,88155,88156],{"class":480,"line":1886},[478,88157,2966],{"emptyLinePlaceholder":640},[478,88159,88160,88162,88164],{"class":480,"line":1898},[478,88161,1605],{"class":714},[478,88163,52180],{"class":51680},[478,88165,51687],{"class":714},[478,88167,88168,88170,88172],{"class":480,"line":2180},[478,88169,52524],{"class":714},[478,88171,52193],{"class":51680},[478,88173,51687],{"class":714},[478,88175,88176,88178,88180,88182],{"class":480,"line":2185},[478,88177,11787],{"class":710},[478,88179,70351],{"class":495},[478,88181,14130],{"class":710},[478,88183,16137],{"class":714},[478,88185,88186,88188,88191],{"class":480,"line":2191},[478,88187,71996],{"class":714},[478,88189,88190],{"class":488},"'pink'",[478,88192,31846],{"class":714},[478,88194,88195,88197,88199],{"class":480,"line":2196},[478,88196,72006],{"class":714},[478,88198,1348],{"class":495},[478,88200,31846],{"class":714},[478,88202,88203,88206,88209,88211,88214],{"class":480,"line":2210},[478,88204,88205],{"class":714},"      hobby: [",[478,88207,88208],{"class":488},"'乒乓球'",[478,88210,13001],{"class":714},[478,88212,88213],{"class":488},"'足球'",[478,88215,88216],{"class":714},"],\n",[478,88218,88219],{"class":480,"line":2215},[478,88220,78252],{"class":714},[478,88222,88223,88226],{"class":480,"line":2221},[478,88224,88225],{"class":714},"        baby: ",[478,88227,88228],{"class":488},"'小pink'\n",[478,88230,88231],{"class":480,"line":2241},[478,88232,52778],{"class":714},[478,88234,88235],{"class":480,"line":2246},[478,88236,2753],{"class":714},[478,88238,88239,88241,88244,88246],{"class":480,"line":2260},[478,88240,11787],{"class":710},[478,88242,88243],{"class":495}," o",[478,88245,14130],{"class":710},[478,88247,88248],{"class":714}," {}\n",[478,88250,88251],{"class":480,"line":2265},[478,88252,88253],{"class":770},"    \u002F\u002F 拷贝函数\n",[478,88255,88256,88258,88261,88263,88266,88268,88271],{"class":480,"line":2294},[478,88257,70464],{"class":710},[478,88259,88260],{"class":484}," deepCopy",[478,88262,263],{"class":714},[478,88264,88265],{"class":5782},"newObj",[478,88267,13001],{"class":714},[478,88269,88270],{"class":5782},"oldObj",[478,88272,13008],{"class":714},[478,88274,88275,88277,88279,88281,88284,88286],{"class":480,"line":2299},[478,88276,52664],{"class":710},[478,88278,219],{"class":714},[478,88280,52227],{"class":710},[478,88282,88283],{"class":714}," k ",[478,88285,26423],{"class":710},[478,88287,88288],{"class":714}," oldObj) {\n",[478,88290,88291],{"class":480,"line":2316},[478,88292,88293],{"class":770},"        \u002F\u002F 处理数组的问题\n",[478,88295,88296],{"class":480,"line":2321},[478,88297,88298],{"class":770},"        \u002F\u002F 判断是否属于数组\n",[478,88300,88301],{"class":480,"line":2326},[478,88302,88303],{"class":770},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[478,88305,88306,88308,88311,88314,88317],{"class":480,"line":2331},[478,88307,3063],{"class":710},[478,88309,88310],{"class":714}," (oldObj[k] ",[478,88312,88313],{"class":710},"instanceof",[478,88315,88316],{"class":484}," Array",[478,88318,13008],{"class":714},[478,88320,88321],{"class":480,"line":2345},[478,88322,88323],{"class":770},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[478,88325,88326],{"class":480,"line":2350},[478,88327,88328],{"class":770},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[478,88330,88331,88334,88336],{"class":480,"line":3143},[478,88332,88333],{"class":714},"          newObj[k] ",[478,88335,759],{"class":710},[478,88337,52218],{"class":714},[478,88339,88340,88343],{"class":480,"line":3157},[478,88341,88342],{"class":484},"          deepCopy",[478,88344,88345],{"class":714},"(newObj[k], oldObj[k])\n",[478,88347,88348,88350,88352,88354,88356,88358,88361],{"class":480,"line":3165},[478,88349,80460],{"class":714},[478,88351,2268],{"class":710},[478,88353,2271],{"class":710},[478,88355,88310],{"class":714},[478,88357,88313],{"class":710},[478,88359,88360],{"class":484}," Object",[478,88362,13008],{"class":714},[478,88364,88365,88367,88369],{"class":480,"line":3170},[478,88366,88333],{"class":714},[478,88368,759],{"class":710},[478,88370,88248],{"class":714},[478,88372,88373,88375],{"class":480,"line":3176},[478,88374,88342],{"class":484},[478,88376,88345],{"class":714},[478,88378,88379,88381,88383],{"class":480,"line":3182},[478,88380,80460],{"class":714},[478,88382,2268],{"class":710},[478,88384,16137],{"class":714},[478,88386,88387],{"class":480,"line":3187},[478,88388,88389],{"class":770},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[478,88391,88392],{"class":480,"line":8514},[478,88393,88394],{"class":770},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[478,88396,88397,88399,88401],{"class":480,"line":8538},[478,88398,88333],{"class":714},[478,88400,759],{"class":710},[478,88402,88403],{"class":714}," oldObj[k]\n",[478,88405,88406],{"class":480,"line":8543},[478,88407,3095],{"class":714},[478,88409,88410],{"class":480,"line":8549},[478,88411,52778],{"class":714},[478,88413,88414],{"class":480,"line":8576},[478,88415,2753],{"class":714},[478,88417,88418,88421,88424],{"class":480,"line":8581},[478,88419,88420],{"class":484},"    deepCopy",[478,88422,88423],{"class":714},"(o, obj) ",[478,88425,88426],{"class":770},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[478,88428,88429,88431,88433],{"class":480,"line":8587},[478,88430,74133],{"class":714},[478,88432,58627],{"class":484},[478,88434,88435],{"class":714},"(o)\n",[478,88437,88438,88441,88443],{"class":480,"line":8599},[478,88439,88440],{"class":714},"    o.age ",[478,88442,759],{"class":710},[478,88444,88445],{"class":495}," 20\n",[478,88447,88448,88451,88453,88455,88457],{"class":480,"line":8611},[478,88449,88450],{"class":714},"    o.hobby[",[478,88452,895],{"class":495},[478,88454,5009],{"class":714},[478,88456,759],{"class":710},[478,88458,88459],{"class":488}," '篮球'\n",[478,88461,88462,88465,88467],{"class":480,"line":8623},[478,88463,88464],{"class":714},"    o.family ",[478,88466,759],{"class":710},[478,88468,88469],{"class":488}," '老pink'\n",[478,88471,88472,88474,88476],{"class":480,"line":10282},[478,88473,74133],{"class":714},[478,88475,58627],{"class":484},[478,88477,70416],{"class":714},[478,88479,88480,88482,88484],{"class":480,"line":10307},[478,88481,52797],{"class":714},[478,88483,52193],{"class":51680},[478,88485,51687],{"class":714},[478,88487,88488,88490,88492],{"class":480,"line":10330},[478,88489,52165],{"class":714},[478,88491,52180],{"class":51680},[478,88493,51687],{"class":714},[478,88495,88496],{"class":480,"line":10354},[478,88497,2966],{"emptyLinePlaceholder":640},[478,88499,88500,88502,88504],{"class":480,"line":10359},[478,88501,52165],{"class":714},[478,88503,51015],{"class":51680},[478,88505,51687],{"class":714},[19,88507,88508],{},[52,88509],{"alt":54,"src":88510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22563,88512,88514,88515],{"id":88513},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[45,88516,88517],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88519,88520],{},[518,88521,88522],{"href":88522,"rel":88523},"https:\u002F\u002Fwww.lodashjs.com\u002F",[522],[19,88525,88526],{},"lodash里边的方法都要加上一个下划线_",[19,88528,88529],{},"_.cloneDeep()",[469,88531,88533],{"className":51013,"code":88532,"language":51015,"meta":54,"style":54},"\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",[475,88534,88535,88545,88559,88563,88571,88585,88605,88617,88625,88629,88637,88642,88661,88669,88679,88687,88695,88707,88711,88717,88721,88725,88741,88749,88758,88766,88774,88782,88786],{"__ignoreMap":54},[478,88536,88537,88539,88541,88543],{"class":480,"line":481},[478,88538,51677],{"class":714},[478,88540,51681],{"class":51680},[478,88542,51684],{"class":484},[478,88544,51687],{"class":714},[478,88546,88547,88549,88551,88553,88555,88557],{"class":480,"line":565},[478,88548,1605],{"class":714},[478,88550,51015],{"class":51680},[478,88552,51696],{"class":484},[478,88554,759],{"class":714},[478,88556,51701],{"class":488},[478,88558,51687],{"class":714},[478,88560,88561],{"class":480,"line":579},[478,88562,2966],{"emptyLinePlaceholder":640},[478,88564,88565,88567,88569],{"class":480,"line":593},[478,88566,1605],{"class":714},[478,88568,51714],{"class":51680},[478,88570,51687],{"class":714},[478,88572,88573,88575,88577,88579,88581,88583],{"class":480,"line":1769},[478,88574,52524],{"class":714},[478,88576,51724],{"class":51680},[478,88578,51727],{"class":484},[478,88580,759],{"class":714},[478,88582,51732],{"class":488},[478,88584,51687],{"class":714},[478,88586,88587,88589,88591,88593,88595,88597,88599,88601,88603],{"class":480,"line":1783},[478,88588,52524],{"class":714},[478,88590,51724],{"class":51680},[478,88592,15485],{"class":484},[478,88594,759],{"class":714},[478,88596,51771],{"class":488},[478,88598,51751],{"class":484},[478,88600,759],{"class":714},[478,88602,51778],{"class":488},[478,88604,51687],{"class":714},[478,88606,88607,88609,88611,88613,88615],{"class":480,"line":1789},[478,88608,52524],{"class":714},[478,88610,51787],{"class":51680},[478,88612,51790],{"class":714},[478,88614,51787],{"class":51680},[478,88616,51687],{"class":714},[478,88618,88619,88621,88623],{"class":480,"line":1880},[478,88620,52165],{"class":714},[478,88622,51714],{"class":51680},[478,88624,51687],{"class":714},[478,88626,88627],{"class":480,"line":1886},[478,88628,2966],{"emptyLinePlaceholder":640},[478,88630,88631,88633,88635],{"class":480,"line":1898},[478,88632,1605],{"class":714},[478,88634,52180],{"class":51680},[478,88636,51687],{"class":714},[478,88638,88639],{"class":480,"line":2180},[478,88640,88641],{"class":770},"  \u003C!-- 先引用这个库 -->\n",[478,88643,88644,88646,88648,88650,88652,88655,88657,88659],{"class":480,"line":2185},[478,88645,52524],{"class":714},[478,88647,52193],{"class":51680},[478,88649,55619],{"class":484},[478,88651,759],{"class":714},[478,88653,88654],{"class":488},"\"lodash.min.js\"",[478,88656,55694],{"class":714},[478,88658,52193],{"class":51680},[478,88660,51687],{"class":714},[478,88662,88663,88665,88667],{"class":480,"line":2191},[478,88664,52524],{"class":714},[478,88666,52193],{"class":51680},[478,88668,51687],{"class":714},[478,88670,88671,88673,88675,88677],{"class":480,"line":2196},[478,88672,11787],{"class":710},[478,88674,70351],{"class":495},[478,88676,14130],{"class":710},[478,88678,16137],{"class":714},[478,88680,88681,88683,88685],{"class":480,"line":2210},[478,88682,71996],{"class":714},[478,88684,88190],{"class":488},[478,88686,31846],{"class":714},[478,88688,88689,88691,88693],{"class":480,"line":2215},[478,88690,72006],{"class":714},[478,88692,1348],{"class":495},[478,88694,31846],{"class":714},[478,88696,88697,88699,88701,88703,88705],{"class":480,"line":2221},[478,88698,88205],{"class":714},[478,88700,88208],{"class":488},[478,88702,13001],{"class":714},[478,88704,88213],{"class":488},[478,88706,88216],{"class":714},[478,88708,88709],{"class":480,"line":2241},[478,88710,78252],{"class":714},[478,88712,88713,88715],{"class":480,"line":2246},[478,88714,88225],{"class":714},[478,88716,88228],{"class":488},[478,88718,88719],{"class":480,"line":2260},[478,88720,52778],{"class":714},[478,88722,88723],{"class":480,"line":2265},[478,88724,2753],{"class":714},[478,88726,88727,88729,88731,88733,88736,88739],{"class":480,"line":2294},[478,88728,11787],{"class":710},[478,88730,88243],{"class":495},[478,88732,14130],{"class":710},[478,88734,88735],{"class":714}," _.",[478,88737,88738],{"class":484},"cloneDeep",[478,88740,70416],{"class":714},[478,88742,88743,88745,88747],{"class":480,"line":2299},[478,88744,74133],{"class":714},[478,88746,58627],{"class":484},[478,88748,88435],{"class":714},[478,88750,88751,88754,88756],{"class":480,"line":2316},[478,88752,88753],{"class":714},"    o.family.baby ",[478,88755,759],{"class":710},[478,88757,88469],{"class":488},[478,88759,88760,88762,88764],{"class":480,"line":2321},[478,88761,74133],{"class":714},[478,88763,58627],{"class":484},[478,88765,70416],{"class":714},[478,88767,88768,88770,88772],{"class":480,"line":2326},[478,88769,52797],{"class":714},[478,88771,52193],{"class":51680},[478,88773,51687],{"class":714},[478,88775,88776,88778,88780],{"class":480,"line":2331},[478,88777,52165],{"class":714},[478,88779,52180],{"class":51680},[478,88781,51687],{"class":714},[478,88783,88784],{"class":480,"line":2345},[478,88785,2966],{"emptyLinePlaceholder":640},[478,88787,88788,88790,88792],{"class":480,"line":2350},[478,88789,52165],{"class":714},[478,88791,51015],{"class":51680},[478,88793,51687],{"class":714},[19,88795,88796],{},[52,88797],{"alt":54,"src":88798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22563,88800,88802],{"id":88801},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[469,88804,88806],{"className":51013,"code":88805,"language":51015,"meta":54,"style":54},"\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",[475,88807,88808,88818,88832,88836,88844,88858,88878,88890,88898,88902,88910,88918,88928,88936,88944,88956,88960,88966,88970,88974,88979,88984,88989,89015,89023,89032,89040,89048,89056,89060],{"__ignoreMap":54},[478,88809,88810,88812,88814,88816],{"class":480,"line":481},[478,88811,51677],{"class":714},[478,88813,51681],{"class":51680},[478,88815,51684],{"class":484},[478,88817,51687],{"class":714},[478,88819,88820,88822,88824,88826,88828,88830],{"class":480,"line":565},[478,88821,1605],{"class":714},[478,88823,51015],{"class":51680},[478,88825,51696],{"class":484},[478,88827,759],{"class":714},[478,88829,51701],{"class":488},[478,88831,51687],{"class":714},[478,88833,88834],{"class":480,"line":579},[478,88835,2966],{"emptyLinePlaceholder":640},[478,88837,88838,88840,88842],{"class":480,"line":593},[478,88839,1605],{"class":714},[478,88841,51714],{"class":51680},[478,88843,51687],{"class":714},[478,88845,88846,88848,88850,88852,88854,88856],{"class":480,"line":1769},[478,88847,52524],{"class":714},[478,88849,51724],{"class":51680},[478,88851,51727],{"class":484},[478,88853,759],{"class":714},[478,88855,51732],{"class":488},[478,88857,51687],{"class":714},[478,88859,88860,88862,88864,88866,88868,88870,88872,88874,88876],{"class":480,"line":1783},[478,88861,52524],{"class":714},[478,88863,51724],{"class":51680},[478,88865,15485],{"class":484},[478,88867,759],{"class":714},[478,88869,51771],{"class":488},[478,88871,51751],{"class":484},[478,88873,759],{"class":714},[478,88875,51778],{"class":488},[478,88877,51687],{"class":714},[478,88879,88880,88882,88884,88886,88888],{"class":480,"line":1789},[478,88881,52524],{"class":714},[478,88883,51787],{"class":51680},[478,88885,51790],{"class":714},[478,88887,51787],{"class":51680},[478,88889,51687],{"class":714},[478,88891,88892,88894,88896],{"class":480,"line":1880},[478,88893,52165],{"class":714},[478,88895,51714],{"class":51680},[478,88897,51687],{"class":714},[478,88899,88900],{"class":480,"line":1886},[478,88901,2966],{"emptyLinePlaceholder":640},[478,88903,88904,88906,88908],{"class":480,"line":1898},[478,88905,1605],{"class":714},[478,88907,52180],{"class":51680},[478,88909,51687],{"class":714},[478,88911,88912,88914,88916],{"class":480,"line":2180},[478,88913,52524],{"class":714},[478,88915,52193],{"class":51680},[478,88917,51687],{"class":714},[478,88919,88920,88922,88924,88926],{"class":480,"line":2185},[478,88921,11787],{"class":710},[478,88923,70351],{"class":495},[478,88925,14130],{"class":710},[478,88927,16137],{"class":714},[478,88929,88930,88932,88934],{"class":480,"line":2191},[478,88931,71996],{"class":714},[478,88933,88190],{"class":488},[478,88935,31846],{"class":714},[478,88937,88938,88940,88942],{"class":480,"line":2196},[478,88939,72006],{"class":714},[478,88941,1348],{"class":495},[478,88943,31846],{"class":714},[478,88945,88946,88948,88950,88952,88954],{"class":480,"line":2210},[478,88947,88205],{"class":714},[478,88949,88208],{"class":488},[478,88951,13001],{"class":714},[478,88953,88213],{"class":488},[478,88955,88216],{"class":714},[478,88957,88958],{"class":480,"line":2215},[478,88959,78252],{"class":714},[478,88961,88962,88964],{"class":480,"line":2221},[478,88963,88225],{"class":714},[478,88965,88228],{"class":488},[478,88967,88968],{"class":480,"line":2241},[478,88969,52778],{"class":714},[478,88971,88972],{"class":480,"line":2246},[478,88973,2753],{"class":714},[478,88975,88976],{"class":480,"line":2260},[478,88977,88978],{"class":770},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[478,88980,88981],{"class":480,"line":2265},[478,88982,88983],{"class":770},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[478,88985,88986],{"class":480,"line":2294},[478,88987,88988],{"class":770},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[478,88990,88991,88993,88995,88997,89000,89002,89005,89007,89009,89011,89013],{"class":480,"line":2299},[478,88992,11787],{"class":710},[478,88994,88243],{"class":495},[478,88996,14130],{"class":710},[478,88998,88999],{"class":495}," JSON",[478,89001,1258],{"class":714},[478,89003,89004],{"class":484},"parse",[478,89006,263],{"class":714},[478,89008,72044],{"class":495},[478,89010,1258],{"class":714},[478,89012,72049],{"class":484},[478,89014,72052],{"class":714},[478,89016,89017,89019,89021],{"class":480,"line":2316},[478,89018,74133],{"class":714},[478,89020,58627],{"class":484},[478,89022,88435],{"class":714},[478,89024,89025,89027,89029],{"class":480,"line":2321},[478,89026,88753],{"class":714},[478,89028,759],{"class":710},[478,89030,89031],{"class":488}," '123'\n",[478,89033,89034,89036,89038],{"class":480,"line":2326},[478,89035,74133],{"class":714},[478,89037,58627],{"class":484},[478,89039,70416],{"class":714},[478,89041,89042,89044,89046],{"class":480,"line":2331},[478,89043,52797],{"class":714},[478,89045,52193],{"class":51680},[478,89047,51687],{"class":714},[478,89049,89050,89052,89054],{"class":480,"line":2345},[478,89051,52165],{"class":714},[478,89053,52180],{"class":51680},[478,89055,51687],{"class":714},[478,89057,89058],{"class":480,"line":2350},[478,89059,2966],{"emptyLinePlaceholder":640},[478,89061,89062,89064,89066],{"class":480,"line":3143},[478,89063,52165],{"class":714},[478,89065,51015],{"class":51680},[478,89067,51687],{"class":714},[19,89069,89070],{},[52,89071],{"alt":54,"src":89072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89074,89076],{"id":89075},"_415-异常处理","4.15 异常处理",[29,89078,89079],{},[32,89080,89081],{},"throw抛异常",[19,89083,89084],{},[52,89085],{"alt":54,"src":89086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[29,89088,89089],{"start":565},[32,89090,89091],{},"try\u002Fcatch 捕获错误信息",[19,89093,89094],{},[52,89095],{"alt":54,"src":89096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[469,89098,89100],{"className":51013,"code":89099,"language":51015,"meta":54,"style":54},"\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",[475,89101,89102,89112,89126,89130,89138,89152,89172,89184,89192,89196,89204,89216,89224,89233,89240,89245,89264,89273,89284,89289,89299,89304,89309,89314,89331,89335,89340,89347,89359,89363,89375,89379,89383,89388,89393,89400,89408,89416,89420],{"__ignoreMap":54},[478,89103,89104,89106,89108,89110],{"class":480,"line":481},[478,89105,51677],{"class":714},[478,89107,51681],{"class":51680},[478,89109,51684],{"class":484},[478,89111,51687],{"class":714},[478,89113,89114,89116,89118,89120,89122,89124],{"class":480,"line":565},[478,89115,1605],{"class":714},[478,89117,51015],{"class":51680},[478,89119,51696],{"class":484},[478,89121,759],{"class":714},[478,89123,51701],{"class":488},[478,89125,51687],{"class":714},[478,89127,89128],{"class":480,"line":579},[478,89129,2966],{"emptyLinePlaceholder":640},[478,89131,89132,89134,89136],{"class":480,"line":593},[478,89133,1605],{"class":714},[478,89135,51714],{"class":51680},[478,89137,51687],{"class":714},[478,89139,89140,89142,89144,89146,89148,89150],{"class":480,"line":1769},[478,89141,52524],{"class":714},[478,89143,51724],{"class":51680},[478,89145,51727],{"class":484},[478,89147,759],{"class":714},[478,89149,51732],{"class":488},[478,89151,51687],{"class":714},[478,89153,89154,89156,89158,89160,89162,89164,89166,89168,89170],{"class":480,"line":1783},[478,89155,52524],{"class":714},[478,89157,51724],{"class":51680},[478,89159,15485],{"class":484},[478,89161,759],{"class":714},[478,89163,51771],{"class":488},[478,89165,51751],{"class":484},[478,89167,759],{"class":714},[478,89169,51778],{"class":488},[478,89171,51687],{"class":714},[478,89173,89174,89176,89178,89180,89182],{"class":480,"line":1789},[478,89175,52524],{"class":714},[478,89177,51787],{"class":51680},[478,89179,51790],{"class":714},[478,89181,51787],{"class":51680},[478,89183,51687],{"class":714},[478,89185,89186,89188,89190],{"class":480,"line":1880},[478,89187,52165],{"class":714},[478,89189,51714],{"class":51680},[478,89191,51687],{"class":714},[478,89193,89194],{"class":480,"line":1886},[478,89195,2966],{"emptyLinePlaceholder":640},[478,89197,89198,89200,89202],{"class":480,"line":1898},[478,89199,1605],{"class":714},[478,89201,52180],{"class":51680},[478,89203,51687],{"class":714},[478,89205,89206,89208,89210,89212,89214],{"class":480,"line":2180},[478,89207,52524],{"class":714},[478,89209,19],{"class":51680},[478,89211,53874],{"class":714},[478,89213,19],{"class":51680},[478,89215,51687],{"class":714},[478,89217,89218,89220,89222],{"class":480,"line":2185},[478,89219,52524],{"class":714},[478,89221,52193],{"class":51680},[478,89223,51687],{"class":714},[478,89225,89226,89228,89231],{"class":480,"line":2191},[478,89227,70464],{"class":710},[478,89229,89230],{"class":484}," fn",[478,89232,11419],{"class":714},[478,89234,89235,89238],{"class":480,"line":2196},[478,89236,89237],{"class":710},"      try",[478,89239,16137],{"class":714},[478,89241,89242],{"class":480,"line":2210},[478,89243,89244],{"class":770},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[478,89246,89247,89249,89251,89253,89255,89257,89259,89262],{"class":480,"line":2215},[478,89248,61650],{"class":710},[478,89250,7391],{"class":495},[478,89252,14130],{"class":710},[478,89254,54776],{"class":714},[478,89256,54779],{"class":484},[478,89258,263],{"class":714},[478,89260,89261],{"class":488},"'.p'",[478,89263,720],{"class":714},[478,89265,89266,89269,89271],{"class":480,"line":2221},[478,89267,89268],{"class":714},"        p.style.color ",[478,89270,759],{"class":710},[478,89272,67431],{"class":488},[478,89274,89275,89278,89281],{"class":480,"line":2241},[478,89276,89277],{"class":714},"      } ",[478,89279,89280],{"class":710},"catch",[478,89282,89283],{"class":714}," (err) {\n",[478,89285,89286],{"class":480,"line":2246},[478,89287,89288],{"class":770},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[478,89290,89291,89294,89296],{"class":480,"line":2260},[478,89292,89293],{"class":714},"        console.",[478,89295,58627],{"class":484},[478,89297,89298],{"class":714},"(err.message)\n",[478,89300,89301],{"class":480,"line":2265},[478,89302,89303],{"class":770},"        \u002F\u002F 想要中断程序，需要加return\n",[478,89305,89306],{"class":480,"line":2294},[478,89307,89308],{"class":770},"        \u002F\u002F return\n",[478,89310,89311],{"class":480,"line":2299},[478,89312,89313],{"class":770},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[478,89315,89316,89319,89321,89324,89326,89329],{"class":480,"line":2316},[478,89317,89318],{"class":710},"        throw",[478,89320,12144],{"class":710},[478,89322,89323],{"class":484}," Error",[478,89325,263],{"class":714},[478,89327,89328],{"class":488},"'你看看，选择器错误了吧'",[478,89330,720],{"class":714},[478,89332,89333],{"class":480,"line":2321},[478,89334,52778],{"class":714},[478,89336,89337],{"class":480,"line":2326},[478,89338,89339],{"class":770},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[478,89341,89342,89345],{"class":480,"line":2331},[478,89343,89344],{"class":710},"      finally",[478,89346,16137],{"class":714},[478,89348,89349,89352,89354,89357],{"class":480,"line":2345},[478,89350,89351],{"class":484},"        alert",[478,89353,263],{"class":714},[478,89355,89356],{"class":488},"'弹出对话框'",[478,89358,720],{"class":714},[478,89360,89361],{"class":480,"line":2350},[478,89362,52778],{"class":714},[478,89364,89365,89367,89369,89371,89373],{"class":480,"line":3143},[478,89366,58624],{"class":714},[478,89368,58627],{"class":484},[478,89370,263],{"class":714},[478,89372,1172],{"class":495},[478,89374,720],{"class":714},[478,89376,89377],{"class":480,"line":3157},[478,89378,2966],{"emptyLinePlaceholder":640},[478,89380,89381],{"class":480,"line":3165},[478,89382,2753],{"class":714},[478,89384,89385],{"class":480,"line":3170},[478,89386,89387],{"class":770},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[478,89389,89390],{"class":480,"line":3176},[478,89391,89392],{"class":770},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[478,89394,89395,89398],{"class":480,"line":3182},[478,89396,89397],{"class":484},"    fn",[478,89399,2542],{"class":714},[478,89401,89402,89404,89406],{"class":480,"line":3187},[478,89403,52797],{"class":714},[478,89405,52193],{"class":51680},[478,89407,51687],{"class":714},[478,89409,89410,89412,89414],{"class":480,"line":8514},[478,89411,52165],{"class":714},[478,89413,52180],{"class":51680},[478,89415,51687],{"class":714},[478,89417,89418],{"class":480,"line":8538},[478,89419,2966],{"emptyLinePlaceholder":640},[478,89421,89422,89424,89426],{"class":480,"line":8543},[478,89423,52165],{"class":714},[478,89425,51015],{"class":51680},[478,89427,51687],{"class":714},[19,89429,89430],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[29,89432,89433],{"start":579},[32,89434,89435],{},"debugger",[19,89437,89438],{},[52,89439],{"alt":54,"src":89440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89442,89443],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89445,89447],{"id":89446},"_416-处理this","4.16 处理this",[129,89449,89451],{"id":89450},"_4161-this的指向","4.16.1 this的指向",[29,89453,89454],{},[32,89455,89456],{},"普通函数的this",[19,89458,89459],{},[52,89460],{"alt":54,"src":89461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[29,89463,89464],{"start":565},[32,89465,89466],{},"箭头函数的this",[19,89468,89469],{},[52,89470],{"alt":54,"src":89471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89473,89474],{},[52,89475],{"alt":54,"src":89476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89478,89479],{},[52,89480],{"alt":54,"src":89481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[129,89483,89485],{"id":89484},"_4162-this的改变","4.16.2 this的改变",[19,89487,89488],{},"call() apply() bind()",[29,89490,89491],{},[32,89492,89493],{},"call()",[19,89495,89496],{},[52,89497],{"alt":54,"src":89498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89500,89501],{},"两个作用：①调用函数；②改变this指向",[469,89503,89505],{"className":53447,"code":89504,"language":53449,"meta":54,"style":54},"\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",[475,89506,89507,89515,89523,89527,89532,89536,89541,89546,89551,89555,89560,89568],{"__ignoreMap":54},[478,89508,89509,89511,89513],{"class":480,"line":481},[478,89510,1605],{"class":714},[478,89512,52180],{"class":51680},[478,89514,51687],{"class":714},[478,89516,89517,89519,89521],{"class":480,"line":565},[478,89518,52524],{"class":714},[478,89520,52193],{"class":51680},[478,89522,51687],{"class":714},[478,89524,89525],{"class":480,"line":579},[478,89526,71903],{"class":714},[478,89528,89529],{"class":480,"line":593},[478,89530,89531],{"class":714},"      uname: 'pink'\n",[478,89533,89534],{"class":480,"line":1769},[478,89535,2753],{"class":714},[478,89537,89538],{"class":480,"line":1783},[478,89539,89540],{"class":714},"    function fn(x, y) {\n",[478,89542,89543],{"class":480,"line":1789},[478,89544,89545],{"class":714},"      console.log(this)  \u002F\u002Fwindow\n",[478,89547,89548],{"class":480,"line":1880},[478,89549,89550],{"class":714},"      console.log(x + y)\n",[478,89552,89553],{"class":480,"line":1886},[478,89554,2753],{"class":714},[478,89556,89557],{"class":480,"line":1898},[478,89558,89559],{"class":714},"    fn.call(obj, 1, 2)\n",[478,89561,89562,89564,89566],{"class":480,"line":2180},[478,89563,52797],{"class":714},[478,89565,52193],{"class":51680},[478,89567,51687],{"class":714},[478,89569,89570,89572,89574],{"class":480,"line":2185},[478,89571,52165],{"class":714},[478,89573,52180],{"class":51680},[478,89575,51687],{"class":714},[19,89577,89578],{},[52,89579],{"alt":54,"src":89580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[29,89582,89583],{"start":565},[32,89584,89585],{},"apply()",[19,89587,89588],{},[52,89589],{"alt":54,"src":89590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89592,89501],{},[19,89594,89595],{},"call传递的是普通参数，而apply必须传递的是数组",[469,89597,89599],{"className":51013,"code":89598,"language":51015,"meta":54,"style":54},"\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",[475,89600,89601,89611,89625,89629,89637,89651,89671,89683,89691,89695,89703,89711,89721,89728,89732,89737,89753,89765,89779,89783,89788,89807,89812,89816,89821,89826,89834,89839,89861,89866,89882,89898,89910,89914,89919,89938,89946,89954,89958],{"__ignoreMap":54},[478,89602,89603,89605,89607,89609],{"class":480,"line":481},[478,89604,51677],{"class":714},[478,89606,51681],{"class":51680},[478,89608,51684],{"class":484},[478,89610,51687],{"class":714},[478,89612,89613,89615,89617,89619,89621,89623],{"class":480,"line":565},[478,89614,1605],{"class":714},[478,89616,51015],{"class":51680},[478,89618,51696],{"class":484},[478,89620,759],{"class":714},[478,89622,51701],{"class":488},[478,89624,51687],{"class":714},[478,89626,89627],{"class":480,"line":579},[478,89628,2966],{"emptyLinePlaceholder":640},[478,89630,89631,89633,89635],{"class":480,"line":593},[478,89632,1605],{"class":714},[478,89634,51714],{"class":51680},[478,89636,51687],{"class":714},[478,89638,89639,89641,89643,89645,89647,89649],{"class":480,"line":1769},[478,89640,52524],{"class":714},[478,89642,51724],{"class":51680},[478,89644,51727],{"class":484},[478,89646,759],{"class":714},[478,89648,51732],{"class":488},[478,89650,51687],{"class":714},[478,89652,89653,89655,89657,89659,89661,89663,89665,89667,89669],{"class":480,"line":1783},[478,89654,52524],{"class":714},[478,89656,51724],{"class":51680},[478,89658,15485],{"class":484},[478,89660,759],{"class":714},[478,89662,51771],{"class":488},[478,89664,51751],{"class":484},[478,89666,759],{"class":714},[478,89668,51778],{"class":488},[478,89670,51687],{"class":714},[478,89672,89673,89675,89677,89679,89681],{"class":480,"line":1789},[478,89674,52524],{"class":714},[478,89676,51787],{"class":51680},[478,89678,51790],{"class":714},[478,89680,51787],{"class":51680},[478,89682,51687],{"class":714},[478,89684,89685,89687,89689],{"class":480,"line":1880},[478,89686,52165],{"class":714},[478,89688,51714],{"class":51680},[478,89690,51687],{"class":714},[478,89692,89693],{"class":480,"line":1886},[478,89694,2966],{"emptyLinePlaceholder":640},[478,89696,89697,89699,89701],{"class":480,"line":1898},[478,89698,1605],{"class":714},[478,89700,52180],{"class":51680},[478,89702,51687],{"class":714},[478,89704,89705,89707,89709],{"class":480,"line":2180},[478,89706,52524],{"class":714},[478,89708,52193],{"class":51680},[478,89710,51687],{"class":714},[478,89712,89713,89715,89717,89719],{"class":480,"line":2185},[478,89714,11787],{"class":710},[478,89716,70351],{"class":495},[478,89718,14130],{"class":710},[478,89720,16137],{"class":714},[478,89722,89723,89725],{"class":480,"line":2191},[478,89724,72006],{"class":714},[478,89726,89727],{"class":495},"18\n",[478,89729,89730],{"class":480,"line":2196},[478,89731,2753],{"class":714},[478,89733,89734],{"class":480,"line":2210},[478,89735,89736],{"class":770},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[478,89738,89739,89741,89743,89745,89747,89749,89751],{"class":480,"line":2215},[478,89740,70464],{"class":710},[478,89742,89230],{"class":484},[478,89744,263],{"class":714},[478,89746,1515],{"class":5782},[478,89748,13001],{"class":714},[478,89750,1540],{"class":5782},[478,89752,13008],{"class":714},[478,89754,89755,89757,89759,89761,89763],{"class":480,"line":2221},[478,89756,58624],{"class":714},[478,89758,58627],{"class":484},[478,89760,263],{"class":714},[478,89762,87373],{"class":495},[478,89764,720],{"class":714},[478,89766,89767,89769,89771,89774,89776],{"class":480,"line":2241},[478,89768,58624],{"class":714},[478,89770,58627],{"class":484},[478,89772,89773],{"class":714},"(x ",[478,89775,1181],{"class":710},[478,89777,89778],{"class":714}," y)\n",[478,89780,89781],{"class":480,"line":2246},[478,89782,2753],{"class":714},[478,89784,89785],{"class":480,"line":2260},[478,89786,89787],{"class":770},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[478,89789,89790,89793,89796,89799,89801,89803,89805],{"class":480,"line":2265},[478,89791,89792],{"class":714},"    fn.",[478,89794,89795],{"class":484},"apply",[478,89797,89798],{"class":714},"(obj, [",[478,89800,193],{"class":495},[478,89802,13001],{"class":714},[478,89804,789],{"class":495},[478,89806,5223],{"class":714},[478,89808,89809],{"class":480,"line":2294},[478,89810,89811],{"class":770},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[478,89813,89814],{"class":480,"line":2299},[478,89815,2966],{"emptyLinePlaceholder":640},[478,89817,89818],{"class":480,"line":2316},[478,89819,89820],{"class":770},"    \u002F\u002F 使用场景：求数组最大值\n",[478,89822,89823],{"class":480,"line":2321},[478,89824,89825],{"class":770},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[478,89827,89828,89831],{"class":480,"line":2326},[478,89829,89830],{"class":770},"    \u002F\u002F console.log(max)",[478,89832,89833],{"class":770},"   \u002F\u002F3\n",[478,89835,89836],{"class":480,"line":2331},[478,89837,89838],{"class":770},"    \u002F\u002F 指向空或者Math都是可以的\n",[478,89840,89841,89843,89845,89847,89849,89851,89853,89855,89857,89859],{"class":480,"line":2345},[478,89842,11787],{"class":710},[478,89844,58075],{"class":495},[478,89846,14130],{"class":710},[478,89848,52606],{"class":714},[478,89850,1012],{"class":495},[478,89852,13001],{"class":714},[478,89854,1204],{"class":495},[478,89856,13001],{"class":714},[478,89858,1235],{"class":495},[478,89860,33626],{"class":714},[478,89862,89863],{"class":480,"line":2350},[478,89864,89865],{"class":770},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[478,89867,89868,89870,89872,89874,89877,89879],{"class":480,"line":3143},[478,89869,11787],{"class":710},[478,89871,6517],{"class":495},[478,89873,14130],{"class":710},[478,89875,89876],{"class":714}," Math.max.",[478,89878,89795],{"class":484},[478,89880,89881],{"class":714},"(Math, arr)\n",[478,89883,89884,89886,89889,89891,89894,89896],{"class":480,"line":3157},[478,89885,11787],{"class":710},[478,89887,89888],{"class":495}," min",[478,89890,14130],{"class":710},[478,89892,89893],{"class":714}," Math.min.",[478,89895,89795],{"class":484},[478,89897,89881],{"class":714},[478,89899,89900,89902,89904,89907],{"class":480,"line":3165},[478,89901,74133],{"class":714},[478,89903,58627],{"class":484},[478,89905,89906],{"class":714},"(max, min)     ",[478,89908,89909],{"class":770},"\u002F\u002F100,4\n",[478,89911,89912],{"class":480,"line":3170},[478,89913,2966],{"emptyLinePlaceholder":640},[478,89915,89916],{"class":480,"line":3176},[478,89917,89918],{"class":770},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[478,89920,89921,89923,89925,89928,89930,89932,89935],{"class":480,"line":3182},[478,89922,74133],{"class":714},[478,89924,58627],{"class":484},[478,89926,89927],{"class":714},"(Max.",[478,89929,6581],{"class":484},[478,89931,263],{"class":714},[478,89933,89934],{"class":710},"...",[478,89936,89937],{"class":714},"arr))\n",[478,89939,89940,89942,89944],{"class":480,"line":3187},[478,89941,52797],{"class":714},[478,89943,52193],{"class":51680},[478,89945,51687],{"class":714},[478,89947,89948,89950,89952],{"class":480,"line":8514},[478,89949,52165],{"class":714},[478,89951,52180],{"class":51680},[478,89953,51687],{"class":714},[478,89955,89956],{"class":480,"line":8538},[478,89957,2966],{"emptyLinePlaceholder":640},[478,89959,89960,89962,89964],{"class":480,"line":8543},[478,89961,52165],{"class":714},[478,89963,51015],{"class":51680},[478,89965,51687],{"class":714},[19,89967,89968],{},[52,89969],{"alt":54,"src":89970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[29,89972,89973],{"start":579},[32,89974,89975],{},"bind()",[19,89977,89978],{},[52,89979],{"alt":54,"src":89980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89982,89983],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89985,89986],{},"bind的语法跟call很相似",[469,89988,89990],{"className":53447,"code":89989,"language":53449,"meta":54,"style":54},"\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",[475,89991,89992,90000,90008,90012,90017,90021,90025,90030,90034,90039,90044,90049,90054,90059,90064,90069,90073,90081],{"__ignoreMap":54},[478,89993,89994,89996,89998],{"class":480,"line":481},[478,89995,1605],{"class":714},[478,89997,52180],{"class":51680},[478,89999,51687],{"class":714},[478,90001,90002,90004,90006],{"class":480,"line":565},[478,90003,52524],{"class":714},[478,90005,52193],{"class":51680},[478,90007,51687],{"class":714},[478,90009,90010],{"class":480,"line":579},[478,90011,71903],{"class":714},[478,90013,90014],{"class":480,"line":593},[478,90015,90016],{"class":714},"      age: 18\n",[478,90018,90019],{"class":480,"line":1769},[478,90020,2753],{"class":714},[478,90022,90023],{"class":480,"line":1783},[478,90024,77523],{"class":714},[478,90026,90027],{"class":480,"line":1789},[478,90028,90029],{"class":714},"      console.log(this)\n",[478,90031,90032],{"class":480,"line":1880},[478,90033,2753],{"class":714},[478,90035,90036],{"class":480,"line":1886},[478,90037,90038],{"class":714},"    \u002F\u002F 1.bind 不会调用函数\n",[478,90040,90041],{"class":480,"line":1898},[478,90042,90043],{"class":714},"    \u002F\u002F 2.bind能改变this的指向\n",[478,90045,90046],{"class":480,"line":2180},[478,90047,90048],{"class":714},"    fn.bind()\n",[478,90050,90051],{"class":480,"line":2185},[478,90052,90053],{"class":714},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[478,90055,90056],{"class":480,"line":2191},[478,90057,90058],{"class":714},"    const fun = fn.bind(obj)\n",[478,90060,90061],{"class":480,"line":2196},[478,90062,90063],{"class":714},"    \u002F\u002F console.log(fun)\n",[478,90065,90066],{"class":480,"line":2210},[478,90067,90068],{"class":714},"    \u002F\u002F 调用,查看this的指向\n",[478,90070,90071],{"class":480,"line":2215},[478,90072,53031],{"class":714},[478,90074,90075,90077,90079],{"class":480,"line":2221},[478,90076,52797],{"class":714},[478,90078,52193],{"class":51680},[478,90080,51687],{"class":714},[478,90082,90083,90085,90087],{"class":480,"line":2241},[478,90084,52165],{"class":714},[478,90086,52180],{"class":51680},[478,90088,51687],{"class":714},[19,90090,90091],{},[52,90092],{"alt":54,"src":90093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[29,90095,90096],{"start":593},[32,90097,90098],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[469,90100,90102],{"className":53447,"code":90101,"language":53449,"meta":54,"style":54},"\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",[475,90103,90104,90112,90125,90133,90138,90142,90147,90152,90157,90162,90167,90172,90177,90182,90186,90194],{"__ignoreMap":54},[478,90105,90106,90108,90110],{"class":480,"line":481},[478,90107,1605],{"class":714},[478,90109,52180],{"class":51680},[478,90111,51687],{"class":714},[478,90113,90114,90116,90118,90121,90123],{"class":480,"line":565},[478,90115,52524],{"class":714},[478,90117,54267],{"class":51680},[478,90119,90120],{"class":714},">禁用\u003C\u002F",[478,90122,54267],{"class":51680},[478,90124,51687],{"class":714},[478,90126,90127,90129,90131],{"class":480,"line":579},[478,90128,52524],{"class":714},[478,90130,52193],{"class":51680},[478,90132,51687],{"class":714},[478,90134,90135],{"class":480,"line":593},[478,90136,90137],{"class":714},"    const btn = document.querySelector('button')\n",[478,90139,90140],{"class":480,"line":1769},[478,90141,59396],{"class":714},[478,90143,90144],{"class":480,"line":1783},[478,90145,90146],{"class":714},"      this.disabled = true\n",[478,90148,90149],{"class":480,"line":1789},[478,90150,90151],{"class":714},"      \u002F\u002F 定时器是window进行调用的\n",[478,90153,90154],{"class":480,"line":1880},[478,90155,90156],{"class":714},"      setTimeout(function () {\n",[478,90158,90159],{"class":480,"line":1886},[478,90160,90161],{"class":714},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[478,90163,90164],{"class":480,"line":1898},[478,90165,90166],{"class":714},"        this.disabled = false\n",[478,90168,90169],{"class":480,"line":2180},[478,90170,90171],{"class":714},"      }.bind(this), 2000)\n",[478,90173,90174],{"class":480,"line":2185},[478,90175,90176],{"class":714},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[478,90178,90179],{"class":480,"line":2191},[478,90180,90181],{"class":714},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[478,90183,90184],{"class":480,"line":2196},[478,90185,33841],{"class":714},[478,90187,90188,90190,90192],{"class":480,"line":2210},[478,90189,52797],{"class":714},[478,90191,52193],{"class":51680},[478,90193,51687],{"class":714},[478,90195,90196,90198,90200],{"class":480,"line":2215},[478,90197,52165],{"class":714},[478,90199,52180],{"class":51680},[478,90201,51687],{"class":714},[29,90203,90204],{"start":1769},[32,90205,22518],{},[19,90207,90208],{},[52,90209],{"alt":54,"src":90210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90212,90214],{"id":90213},"_417-性能优化","4.17 性能优化",[129,90216,90218],{"id":90217},"_4171-防抖","4.17.1 防抖",[19,90220,90221],{},[52,90222],{"alt":54,"src":90223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90225,90226],{},[45,90227,90228],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90230,90231],{},"防抖实现方式：",[1702,90233,90234],{},[32,90235,90236],{},"lodash 提供了防抖处理",[19,90238,90239],{},"_.debounce(func,[wait=0],[options={}])",[19,90241,90242],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[469,90244,90246],{"className":51013,"code":90245,"language":51015,"meta":54,"style":54},"\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",[475,90247,90248,90258,90272,90276,90284,90298,90318,90330,90338,90344,90354,90366,90378,90389,90401,90411,90421,90434,90438,90446,90454,90458,90466,90484,90502,90510,90529,90539,90548,90559,90564,90568,90573,90578,90583,90608,90616,90624,90628],{"__ignoreMap":54},[478,90249,90250,90252,90254,90256],{"class":480,"line":481},[478,90251,51677],{"class":714},[478,90253,51681],{"class":51680},[478,90255,51684],{"class":484},[478,90257,51687],{"class":714},[478,90259,90260,90262,90264,90266,90268,90270],{"class":480,"line":565},[478,90261,1605],{"class":714},[478,90263,51015],{"class":51680},[478,90265,51696],{"class":484},[478,90267,759],{"class":714},[478,90269,51701],{"class":488},[478,90271,51687],{"class":714},[478,90273,90274],{"class":480,"line":579},[478,90275,2966],{"emptyLinePlaceholder":640},[478,90277,90278,90280,90282],{"class":480,"line":593},[478,90279,1605],{"class":714},[478,90281,51714],{"class":51680},[478,90283,51687],{"class":714},[478,90285,90286,90288,90290,90292,90294,90296],{"class":480,"line":1769},[478,90287,52524],{"class":714},[478,90289,51724],{"class":51680},[478,90291,51727],{"class":484},[478,90293,759],{"class":714},[478,90295,51732],{"class":488},[478,90297,51687],{"class":714},[478,90299,90300,90302,90304,90306,90308,90310,90312,90314,90316],{"class":480,"line":1783},[478,90301,52524],{"class":714},[478,90303,51724],{"class":51680},[478,90305,15485],{"class":484},[478,90307,759],{"class":714},[478,90309,51771],{"class":488},[478,90311,51751],{"class":484},[478,90313,759],{"class":714},[478,90315,51778],{"class":488},[478,90317,51687],{"class":714},[478,90319,90320,90322,90324,90326,90328],{"class":480,"line":1789},[478,90321,52524],{"class":714},[478,90323,51787],{"class":51680},[478,90325,51790],{"class":714},[478,90327,51787],{"class":51680},[478,90329,51687],{"class":714},[478,90331,90332,90334,90336],{"class":480,"line":1880},[478,90333,52524],{"class":714},[478,90335,617],{"class":51680},[478,90337,51687],{"class":714},[478,90339,90340,90342],{"class":480,"line":1886},[478,90341,55132],{"class":484},[478,90343,16137],{"class":714},[478,90345,90346,90348,90350,90352],{"class":480,"line":1898},[478,90347,72976],{"class":495},[478,90349,51817],{"class":714},[478,90351,60885],{"class":495},[478,90353,1859],{"class":714},[478,90355,90356,90358,90360,90362,90364],{"class":480,"line":2180},[478,90357,55151],{"class":495},[478,90359,51817],{"class":714},[478,90361,2289],{"class":495},[478,90363,51872],{"class":710},[478,90365,1859],{"class":714},[478,90367,90368,90370,90372,90374,90376],{"class":480,"line":2185},[478,90369,55165],{"class":495},[478,90371,51817],{"class":714},[478,90373,2289],{"class":495},[478,90375,51872],{"class":710},[478,90377,1859],{"class":714},[478,90379,90380,90382,90384,90387],{"class":480,"line":2191},[478,90381,55264],{"class":495},[478,90383,51817],{"class":714},[478,90385,90386],{"class":495},"gray",[478,90388,1859],{"class":714},[478,90390,90391,90393,90395,90397,90399],{"class":480,"line":2196},[478,90392,55302],{"class":495},[478,90394,51817],{"class":714},[478,90396,1520],{"class":495},[478,90398,51872],{"class":710},[478,90400,1859],{"class":714},[478,90402,90403,90405,90407,90409],{"class":480,"line":2210},[478,90404,57796],{"class":495},[478,90406,51817],{"class":714},[478,90408,61222],{"class":495},[478,90410,1859],{"class":714},[478,90412,90413,90415,90417,90419],{"class":480,"line":2215},[478,90414,57666],{"class":495},[478,90416,51817],{"class":714},[478,90418,51972],{"class":495},[478,90420,1859],{"class":714},[478,90422,90423,90426,90428,90430,90432],{"class":480,"line":2221},[478,90424,90425],{"class":495},"      padding-top",[478,90427,51817],{"class":714},[478,90429,1020],{"class":495},[478,90431,51872],{"class":710},[478,90433,1859],{"class":714},[478,90435,90436],{"class":480,"line":2241},[478,90437,2753],{"class":714},[478,90439,90440,90442,90444],{"class":480,"line":2246},[478,90441,52797],{"class":714},[478,90443,617],{"class":51680},[478,90445,51687],{"class":714},[478,90447,90448,90450,90452],{"class":480,"line":2260},[478,90449,52165],{"class":714},[478,90451,51714],{"class":51680},[478,90453,51687],{"class":714},[478,90455,90456],{"class":480,"line":2265},[478,90457,2966],{"emptyLinePlaceholder":640},[478,90459,90460,90462,90464],{"class":480,"line":2294},[478,90461,1605],{"class":714},[478,90463,52180],{"class":51680},[478,90465,51687],{"class":714},[478,90467,90468,90470,90472,90474,90476,90478,90480,90482],{"class":480,"line":2299},[478,90469,52524],{"class":714},[478,90471,51991],{"class":51680},[478,90473,53866],{"class":484},[478,90475,759],{"class":714},[478,90477,53871],{"class":488},[478,90479,55694],{"class":714},[478,90481,51991],{"class":51680},[478,90483,51687],{"class":714},[478,90485,90486,90488,90490,90492,90494,90496,90498,90500],{"class":480,"line":2316},[478,90487,52524],{"class":714},[478,90489,52193],{"class":51680},[478,90491,55619],{"class":484},[478,90493,759],{"class":714},[478,90495,88654],{"class":488},[478,90497,55694],{"class":714},[478,90499,52193],{"class":51680},[478,90501,51687],{"class":714},[478,90503,90504,90506,90508],{"class":480,"line":2321},[478,90505,52524],{"class":714},[478,90507,52193],{"class":51680},[478,90509,51687],{"class":714},[478,90511,90512,90514,90516,90518,90520,90522,90524,90527],{"class":480,"line":2326},[478,90513,11787],{"class":710},[478,90515,87313],{"class":495},[478,90517,14130],{"class":710},[478,90519,54776],{"class":714},[478,90521,54779],{"class":484},[478,90523,263],{"class":714},[478,90525,90526],{"class":488},"'.box'",[478,90528,720],{"class":714},[478,90530,90531,90533,90535,90537],{"class":480,"line":2331},[478,90532,52599],{"class":710},[478,90534,10004],{"class":714},[478,90536,759],{"class":710},[478,90538,47713],{"class":495},[478,90540,90541,90543,90546],{"class":480,"line":2345},[478,90542,70464],{"class":710},[478,90544,90545],{"class":484}," mouseMove",[478,90547,11419],{"class":714},[478,90549,90550,90553,90555,90557],{"class":480,"line":2350},[478,90551,90552],{"class":714},"      box.innerHTML ",[478,90554,759],{"class":710},[478,90556,3598],{"class":714},[478,90558,3268],{"class":710},[478,90560,90561],{"class":480,"line":3143},[478,90562,90563],{"class":770},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[478,90565,90566],{"class":480,"line":3157},[478,90567,2753],{"class":714},[478,90569,90570],{"class":480,"line":3165},[478,90571,90572],{"class":770},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[478,90574,90575],{"class":480,"line":3170},[478,90576,90577],{"class":770},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[478,90579,90580],{"class":480,"line":3176},[478,90581,90582],{"class":770},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[478,90584,90585,90588,90590,90592,90595,90598,90601,90604,90606],{"class":480,"line":3182},[478,90586,90587],{"class":714},"    box.",[478,90589,58193],{"class":484},[478,90591,263],{"class":714},[478,90593,90594],{"class":488},"'mousemove'",[478,90596,90597],{"class":714},", _.",[478,90599,90600],{"class":484},"debounce",[478,90602,90603],{"class":714},"(mouseMove, ",[478,90605,65454],{"class":495},[478,90607,30877],{"class":714},[478,90609,90610,90612,90614],{"class":480,"line":3187},[478,90611,52797],{"class":714},[478,90613,52193],{"class":51680},[478,90615,51687],{"class":714},[478,90617,90618,90620,90622],{"class":480,"line":8514},[478,90619,52165],{"class":714},[478,90621,52180],{"class":51680},[478,90623,51687],{"class":714},[478,90625,90626],{"class":480,"line":8538},[478,90627,2966],{"emptyLinePlaceholder":640},[478,90629,90630,90632,90634],{"class":480,"line":8543},[478,90631,52165],{"class":714},[478,90633,51015],{"class":51680},[478,90635,51687],{"class":714},[1702,90637,90638],{},[32,90639,90640],{},"手写一个防抖函数来处理",[19,90642,90643],{},"防抖的核心就是利用定时器来实现的：",[19,90645,90646],{},"①声明一个定时器变量",[19,90648,90649],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90651,90652],{},"③如果没有定时器则开启定时器，记得存到变量里面",[469,90654,90656],{"className":51013,"code":90655,"language":51015,"meta":54,"style":54},"\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",[475,90657,90658,90668,90682,90686,90694,90708,90728,90740,90748,90754,90764,90776,90788,90798,90810,90820,90830,90842,90846,90854,90862,90866,90874,90892,90910,90918,90936,90946,90954,90964,90968,90972,90976,90981,90986,90991,90996,91001,91006,91024,91031,91036,91044,91049,91062,91078,91088,91093,91097,91101,91121,91125,91130,91135,91140,91145,91153,91161,91165],{"__ignoreMap":54},[478,90659,90660,90662,90664,90666],{"class":480,"line":481},[478,90661,51677],{"class":714},[478,90663,51681],{"class":51680},[478,90665,51684],{"class":484},[478,90667,51687],{"class":714},[478,90669,90670,90672,90674,90676,90678,90680],{"class":480,"line":565},[478,90671,1605],{"class":714},[478,90673,51015],{"class":51680},[478,90675,51696],{"class":484},[478,90677,759],{"class":714},[478,90679,51701],{"class":488},[478,90681,51687],{"class":714},[478,90683,90684],{"class":480,"line":579},[478,90685,2966],{"emptyLinePlaceholder":640},[478,90687,90688,90690,90692],{"class":480,"line":593},[478,90689,1605],{"class":714},[478,90691,51714],{"class":51680},[478,90693,51687],{"class":714},[478,90695,90696,90698,90700,90702,90704,90706],{"class":480,"line":1769},[478,90697,52524],{"class":714},[478,90699,51724],{"class":51680},[478,90701,51727],{"class":484},[478,90703,759],{"class":714},[478,90705,51732],{"class":488},[478,90707,51687],{"class":714},[478,90709,90710,90712,90714,90716,90718,90720,90722,90724,90726],{"class":480,"line":1783},[478,90711,52524],{"class":714},[478,90713,51724],{"class":51680},[478,90715,15485],{"class":484},[478,90717,759],{"class":714},[478,90719,51771],{"class":488},[478,90721,51751],{"class":484},[478,90723,759],{"class":714},[478,90725,51778],{"class":488},[478,90727,51687],{"class":714},[478,90729,90730,90732,90734,90736,90738],{"class":480,"line":1789},[478,90731,52524],{"class":714},[478,90733,51787],{"class":51680},[478,90735,51790],{"class":714},[478,90737,51787],{"class":51680},[478,90739,51687],{"class":714},[478,90741,90742,90744,90746],{"class":480,"line":1880},[478,90743,52524],{"class":714},[478,90745,617],{"class":51680},[478,90747,51687],{"class":714},[478,90749,90750,90752],{"class":480,"line":1886},[478,90751,55132],{"class":484},[478,90753,16137],{"class":714},[478,90755,90756,90758,90760,90762],{"class":480,"line":1898},[478,90757,72976],{"class":495},[478,90759,51817],{"class":714},[478,90761,60885],{"class":495},[478,90763,1859],{"class":714},[478,90765,90766,90768,90770,90772,90774],{"class":480,"line":2180},[478,90767,55151],{"class":495},[478,90769,51817],{"class":714},[478,90771,2289],{"class":495},[478,90773,51872],{"class":710},[478,90775,1859],{"class":714},[478,90777,90778,90780,90782,90784,90786],{"class":480,"line":2185},[478,90779,55165],{"class":495},[478,90781,51817],{"class":714},[478,90783,2289],{"class":495},[478,90785,51872],{"class":710},[478,90787,1859],{"class":714},[478,90789,90790,90792,90794,90796],{"class":480,"line":2191},[478,90791,55264],{"class":495},[478,90793,51817],{"class":714},[478,90795,90386],{"class":495},[478,90797,1859],{"class":714},[478,90799,90800,90802,90804,90806,90808],{"class":480,"line":2196},[478,90801,55302],{"class":495},[478,90803,51817],{"class":714},[478,90805,1520],{"class":495},[478,90807,51872],{"class":710},[478,90809,1859],{"class":714},[478,90811,90812,90814,90816,90818],{"class":480,"line":2210},[478,90813,57796],{"class":495},[478,90815,51817],{"class":714},[478,90817,61222],{"class":495},[478,90819,1859],{"class":714},[478,90821,90822,90824,90826,90828],{"class":480,"line":2215},[478,90823,57666],{"class":495},[478,90825,51817],{"class":714},[478,90827,51972],{"class":495},[478,90829,1859],{"class":714},[478,90831,90832,90834,90836,90838,90840],{"class":480,"line":2221},[478,90833,90425],{"class":495},[478,90835,51817],{"class":714},[478,90837,1020],{"class":495},[478,90839,51872],{"class":710},[478,90841,1859],{"class":714},[478,90843,90844],{"class":480,"line":2241},[478,90845,2753],{"class":714},[478,90847,90848,90850,90852],{"class":480,"line":2246},[478,90849,52797],{"class":714},[478,90851,617],{"class":51680},[478,90853,51687],{"class":714},[478,90855,90856,90858,90860],{"class":480,"line":2260},[478,90857,52165],{"class":714},[478,90859,51714],{"class":51680},[478,90861,51687],{"class":714},[478,90863,90864],{"class":480,"line":2265},[478,90865,2966],{"emptyLinePlaceholder":640},[478,90867,90868,90870,90872],{"class":480,"line":2294},[478,90869,1605],{"class":714},[478,90871,52180],{"class":51680},[478,90873,51687],{"class":714},[478,90875,90876,90878,90880,90882,90884,90886,90888,90890],{"class":480,"line":2299},[478,90877,52524],{"class":714},[478,90879,51991],{"class":51680},[478,90881,53866],{"class":484},[478,90883,759],{"class":714},[478,90885,53871],{"class":488},[478,90887,55694],{"class":714},[478,90889,51991],{"class":51680},[478,90891,51687],{"class":714},[478,90893,90894,90896,90898,90900,90902,90904,90906,90908],{"class":480,"line":2316},[478,90895,52524],{"class":714},[478,90897,52193],{"class":51680},[478,90899,55619],{"class":484},[478,90901,759],{"class":714},[478,90903,88654],{"class":488},[478,90905,55694],{"class":714},[478,90907,52193],{"class":51680},[478,90909,51687],{"class":714},[478,90911,90912,90914,90916],{"class":480,"line":2321},[478,90913,52524],{"class":714},[478,90915,52193],{"class":51680},[478,90917,51687],{"class":714},[478,90919,90920,90922,90924,90926,90928,90930,90932,90934],{"class":480,"line":2326},[478,90921,11787],{"class":710},[478,90923,87313],{"class":495},[478,90925,14130],{"class":710},[478,90927,54776],{"class":714},[478,90929,54779],{"class":484},[478,90931,263],{"class":714},[478,90933,90526],{"class":488},[478,90935,720],{"class":714},[478,90937,90938,90940,90942,90944],{"class":480,"line":2331},[478,90939,52599],{"class":710},[478,90941,10004],{"class":714},[478,90943,759],{"class":710},[478,90945,47713],{"class":495},[478,90947,90948,90950,90952],{"class":480,"line":2345},[478,90949,70464],{"class":710},[478,90951,90545],{"class":484},[478,90953,11419],{"class":714},[478,90955,90956,90958,90960,90962],{"class":480,"line":2350},[478,90957,90552],{"class":714},[478,90959,759],{"class":710},[478,90961,3598],{"class":714},[478,90963,3268],{"class":710},[478,90965,90966],{"class":480,"line":3143},[478,90967,90563],{"class":770},[478,90969,90970],{"class":480,"line":3157},[478,90971,2753],{"class":714},[478,90973,90974],{"class":480,"line":3165},[478,90975,90572],{"class":770},[478,90977,90978],{"class":480,"line":3170},[478,90979,90980],{"class":770},"    \u002F\u002F 手写防抖函数\n",[478,90982,90983],{"class":480,"line":3176},[478,90984,90985],{"class":770},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[478,90987,90988],{"class":480,"line":3182},[478,90989,90990],{"class":770},"    \u002F\u002F 1.声明定时器变量\n",[478,90992,90993],{"class":480,"line":3187},[478,90994,90995],{"class":770},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[478,90997,90998],{"class":480,"line":8514},[478,90999,91000],{"class":770},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[478,91002,91003],{"class":480,"line":8538},[478,91004,91005],{"class":770},"    \u002F\u002F 4.定时器里面写函数调用\n",[478,91007,91008,91010,91013,91015,91018,91020,91022],{"class":480,"line":8543},[478,91009,70464],{"class":710},[478,91011,91012],{"class":484}," debounce",[478,91014,263],{"class":714},[478,91016,91017],{"class":5782},"fn",[478,91019,13001],{"class":714},[478,91021,1415],{"class":5782},[478,91023,13008],{"class":714},[478,91025,91026,91028],{"class":480,"line":8549},[478,91027,80152],{"class":710},[478,91029,91030],{"class":714}," timer\n",[478,91032,91033],{"class":480,"line":8576},[478,91034,91035],{"class":770},"      \u002F\u002F return 返回一个匿名函数\n",[478,91037,91038,91040,91042],{"class":480,"line":8581},[478,91039,74362],{"class":710},[478,91041,59298],{"class":710},[478,91043,54832],{"class":714},[478,91045,91046],{"class":480,"line":8587},[478,91047,91048],{"class":770},"        \u002F\u002F 这里边写第二三四步\n",[478,91050,91051,91053,91056,91059],{"class":480,"line":8599},[478,91052,3063],{"class":710},[478,91054,91055],{"class":714}," (timer) ",[478,91057,91058],{"class":484},"clearTimeout",[478,91060,91061],{"class":714},"(timer)\n",[478,91063,91064,91067,91069,91072,91074,91076],{"class":480,"line":8611},[478,91065,91066],{"class":714},"        timer ",[478,91068,759],{"class":710},[478,91070,91071],{"class":484}," setTimeout",[478,91073,263],{"class":714},[478,91075,54829],{"class":710},[478,91077,54832],{"class":714},[478,91079,91080,91083,91085],{"class":480,"line":8623},[478,91081,91082],{"class":484},"          fn",[478,91084,13616],{"class":714},[478,91086,91087],{"class":770},"\u002F\u002F加小括号调用fn }, t)\n",[478,91089,91090],{"class":480,"line":10282},[478,91091,91092],{"class":714},"        }, t)\n",[478,91094,91095],{"class":480,"line":10307},[478,91096,52778],{"class":714},[478,91098,91099],{"class":480,"line":10330},[478,91100,2753],{"class":714},[478,91102,91103,91105,91107,91109,91111,91113,91115,91117,91119],{"class":480,"line":10354},[478,91104,90587],{"class":714},[478,91106,58193],{"class":484},[478,91108,263],{"class":714},[478,91110,90594],{"class":488},[478,91112,13001],{"class":714},[478,91114,90600],{"class":484},[478,91116,90603],{"class":714},[478,91118,65454],{"class":495},[478,91120,30877],{"class":714},[478,91122,91123],{"class":480,"line":10359},[478,91124,2966],{"emptyLinePlaceholder":640},[478,91126,91127],{"class":480,"line":10364},[478,91128,91129],{"class":770},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[478,91131,91132],{"class":480,"line":10369},[478,91133,91134],{"class":770},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[478,91136,91137],{"class":480,"line":10378},[478,91138,91139],{"class":770},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[478,91141,91142],{"class":480,"line":10383},[478,91143,91144],{"class":770},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[478,91146,91147,91149,91151],{"class":480,"line":10389},[478,91148,52797],{"class":714},[478,91150,52193],{"class":51680},[478,91152,51687],{"class":714},[478,91154,91155,91157,91159],{"class":480,"line":10410},[478,91156,52165],{"class":714},[478,91158,52180],{"class":51680},[478,91160,51687],{"class":714},[478,91162,91163],{"class":480,"line":10416},[478,91164,2966],{"emptyLinePlaceholder":640},[478,91166,91167,91169,91171],{"class":480,"line":10430},[478,91168,52165],{"class":714},[478,91170,51015],{"class":51680},[478,91172,51687],{"class":714},[129,91174,91176],{"id":91175},"_4172-节流","4.17.2 节流",[19,91178,91179],{},[52,91180],{"alt":54,"src":91181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91183,91184],{},[52,91185],{"alt":54,"src":91186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91188,91189],{},[45,91190,91191],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91193,91194],{},"实现方式：",[1702,91196,91197],{},[32,91198,91199],{},"lodash 提供的节流函数来处理",[19,91201,91202],{},"_.throttle(func,[wait=0],[options=])",[19,91204,91205],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[469,91207,91209],{"className":51013,"code":91208,"language":51015,"meta":54,"style":54},"\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",[475,91210,91211,91221,91235,91239,91247,91261,91281,91293,91301,91307,91317,91329,91341,91351,91363,91373,91383,91395,91399,91407,91415,91419,91427,91445,91463,91471,91489,91499,91507,91517,91521,91525,91529,91534,91539,91560,91568,91576,91580],{"__ignoreMap":54},[478,91212,91213,91215,91217,91219],{"class":480,"line":481},[478,91214,51677],{"class":714},[478,91216,51681],{"class":51680},[478,91218,51684],{"class":484},[478,91220,51687],{"class":714},[478,91222,91223,91225,91227,91229,91231,91233],{"class":480,"line":565},[478,91224,1605],{"class":714},[478,91226,51015],{"class":51680},[478,91228,51696],{"class":484},[478,91230,759],{"class":714},[478,91232,51701],{"class":488},[478,91234,51687],{"class":714},[478,91236,91237],{"class":480,"line":579},[478,91238,2966],{"emptyLinePlaceholder":640},[478,91240,91241,91243,91245],{"class":480,"line":593},[478,91242,1605],{"class":714},[478,91244,51714],{"class":51680},[478,91246,51687],{"class":714},[478,91248,91249,91251,91253,91255,91257,91259],{"class":480,"line":1769},[478,91250,52524],{"class":714},[478,91252,51724],{"class":51680},[478,91254,51727],{"class":484},[478,91256,759],{"class":714},[478,91258,51732],{"class":488},[478,91260,51687],{"class":714},[478,91262,91263,91265,91267,91269,91271,91273,91275,91277,91279],{"class":480,"line":1783},[478,91264,52524],{"class":714},[478,91266,51724],{"class":51680},[478,91268,15485],{"class":484},[478,91270,759],{"class":714},[478,91272,51771],{"class":488},[478,91274,51751],{"class":484},[478,91276,759],{"class":714},[478,91278,51778],{"class":488},[478,91280,51687],{"class":714},[478,91282,91283,91285,91287,91289,91291],{"class":480,"line":1789},[478,91284,52524],{"class":714},[478,91286,51787],{"class":51680},[478,91288,51790],{"class":714},[478,91290,51787],{"class":51680},[478,91292,51687],{"class":714},[478,91294,91295,91297,91299],{"class":480,"line":1880},[478,91296,52524],{"class":714},[478,91298,617],{"class":51680},[478,91300,51687],{"class":714},[478,91302,91303,91305],{"class":480,"line":1886},[478,91304,55132],{"class":484},[478,91306,16137],{"class":714},[478,91308,91309,91311,91313,91315],{"class":480,"line":1898},[478,91310,72976],{"class":495},[478,91312,51817],{"class":714},[478,91314,60885],{"class":495},[478,91316,1859],{"class":714},[478,91318,91319,91321,91323,91325,91327],{"class":480,"line":2180},[478,91320,55151],{"class":495},[478,91322,51817],{"class":714},[478,91324,2289],{"class":495},[478,91326,51872],{"class":710},[478,91328,1859],{"class":714},[478,91330,91331,91333,91335,91337,91339],{"class":480,"line":2185},[478,91332,55165],{"class":495},[478,91334,51817],{"class":714},[478,91336,2289],{"class":495},[478,91338,51872],{"class":710},[478,91340,1859],{"class":714},[478,91342,91343,91345,91347,91349],{"class":480,"line":2191},[478,91344,55264],{"class":495},[478,91346,51817],{"class":714},[478,91348,90386],{"class":495},[478,91350,1859],{"class":714},[478,91352,91353,91355,91357,91359,91361],{"class":480,"line":2196},[478,91354,55302],{"class":495},[478,91356,51817],{"class":714},[478,91358,1520],{"class":495},[478,91360,51872],{"class":710},[478,91362,1859],{"class":714},[478,91364,91365,91367,91369,91371],{"class":480,"line":2210},[478,91366,57796],{"class":495},[478,91368,51817],{"class":714},[478,91370,61222],{"class":495},[478,91372,1859],{"class":714},[478,91374,91375,91377,91379,91381],{"class":480,"line":2215},[478,91376,57666],{"class":495},[478,91378,51817],{"class":714},[478,91380,51972],{"class":495},[478,91382,1859],{"class":714},[478,91384,91385,91387,91389,91391,91393],{"class":480,"line":2221},[478,91386,90425],{"class":495},[478,91388,51817],{"class":714},[478,91390,1020],{"class":495},[478,91392,51872],{"class":710},[478,91394,1859],{"class":714},[478,91396,91397],{"class":480,"line":2241},[478,91398,2753],{"class":714},[478,91400,91401,91403,91405],{"class":480,"line":2246},[478,91402,52797],{"class":714},[478,91404,617],{"class":51680},[478,91406,51687],{"class":714},[478,91408,91409,91411,91413],{"class":480,"line":2260},[478,91410,52165],{"class":714},[478,91412,51714],{"class":51680},[478,91414,51687],{"class":714},[478,91416,91417],{"class":480,"line":2265},[478,91418,2966],{"emptyLinePlaceholder":640},[478,91420,91421,91423,91425],{"class":480,"line":2294},[478,91422,1605],{"class":714},[478,91424,52180],{"class":51680},[478,91426,51687],{"class":714},[478,91428,91429,91431,91433,91435,91437,91439,91441,91443],{"class":480,"line":2299},[478,91430,52524],{"class":714},[478,91432,51991],{"class":51680},[478,91434,53866],{"class":484},[478,91436,759],{"class":714},[478,91438,53871],{"class":488},[478,91440,55694],{"class":714},[478,91442,51991],{"class":51680},[478,91444,51687],{"class":714},[478,91446,91447,91449,91451,91453,91455,91457,91459,91461],{"class":480,"line":2316},[478,91448,52524],{"class":714},[478,91450,52193],{"class":51680},[478,91452,55619],{"class":484},[478,91454,759],{"class":714},[478,91456,88654],{"class":488},[478,91458,55694],{"class":714},[478,91460,52193],{"class":51680},[478,91462,51687],{"class":714},[478,91464,91465,91467,91469],{"class":480,"line":2321},[478,91466,52524],{"class":714},[478,91468,52193],{"class":51680},[478,91470,51687],{"class":714},[478,91472,91473,91475,91477,91479,91481,91483,91485,91487],{"class":480,"line":2326},[478,91474,11787],{"class":710},[478,91476,87313],{"class":495},[478,91478,14130],{"class":710},[478,91480,54776],{"class":714},[478,91482,54779],{"class":484},[478,91484,263],{"class":714},[478,91486,90526],{"class":488},[478,91488,720],{"class":714},[478,91490,91491,91493,91495,91497],{"class":480,"line":2331},[478,91492,52599],{"class":710},[478,91494,10004],{"class":714},[478,91496,759],{"class":710},[478,91498,47713],{"class":495},[478,91500,91501,91503,91505],{"class":480,"line":2345},[478,91502,70464],{"class":710},[478,91504,90545],{"class":484},[478,91506,11419],{"class":714},[478,91508,91509,91511,91513,91515],{"class":480,"line":2350},[478,91510,90552],{"class":714},[478,91512,759],{"class":710},[478,91514,3598],{"class":714},[478,91516,3268],{"class":710},[478,91518,91519],{"class":480,"line":3143},[478,91520,90563],{"class":770},[478,91522,91523],{"class":480,"line":3157},[478,91524,2753],{"class":714},[478,91526,91527],{"class":480,"line":3165},[478,91528,90572],{"class":770},[478,91530,91531],{"class":480,"line":3170},[478,91532,91533],{"class":770},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[478,91535,91536],{"class":480,"line":3176},[478,91537,91538],{"class":770},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[478,91540,91541,91543,91545,91547,91549,91551,91554,91556,91558],{"class":480,"line":3182},[478,91542,90587],{"class":714},[478,91544,58193],{"class":484},[478,91546,263],{"class":714},[478,91548,90594],{"class":488},[478,91550,90597],{"class":714},[478,91552,91553],{"class":484},"throttle",[478,91555,90603],{"class":714},[478,91557,65454],{"class":495},[478,91559,30877],{"class":714},[478,91561,91562,91564,91566],{"class":480,"line":3187},[478,91563,52797],{"class":714},[478,91565,52193],{"class":51680},[478,91567,51687],{"class":714},[478,91569,91570,91572,91574],{"class":480,"line":8514},[478,91571,52165],{"class":714},[478,91573,52180],{"class":51680},[478,91575,51687],{"class":714},[478,91577,91578],{"class":480,"line":8538},[478,91579,2966],{"emptyLinePlaceholder":640},[478,91581,91582,91584,91586],{"class":480,"line":8543},[478,91583,52165],{"class":714},[478,91585,51015],{"class":51680},[478,91587,51687],{"class":714},[1702,91589,91590],{},[32,91591,91592],{},"手写一个节流函数来处理",[19,91594,71332],{},[19,91596,90646],{},[19,91598,91599],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91601,91602],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[469,91604,91606],{"className":51013,"code":91605,"language":51015,"meta":54,"style":54},"\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",[475,91607,91608,91618,91632,91636,91644,91658,91678,91690,91698,91704,91714,91726,91738,91748,91760,91770,91780,91792,91796,91804,91812,91816,91824,91842,91860,91868,91886,91896,91904,91914,91918,91922,91926,91931,91936,91941,91946,91951,91956,91973,91979,91987,91998,92013,92020,92025,92030,92040,92045,92050,92055,92059,92063,92067,92087,92095,92103,92107],{"__ignoreMap":54},[478,91609,91610,91612,91614,91616],{"class":480,"line":481},[478,91611,51677],{"class":714},[478,91613,51681],{"class":51680},[478,91615,51684],{"class":484},[478,91617,51687],{"class":714},[478,91619,91620,91622,91624,91626,91628,91630],{"class":480,"line":565},[478,91621,1605],{"class":714},[478,91623,51015],{"class":51680},[478,91625,51696],{"class":484},[478,91627,759],{"class":714},[478,91629,51701],{"class":488},[478,91631,51687],{"class":714},[478,91633,91634],{"class":480,"line":579},[478,91635,2966],{"emptyLinePlaceholder":640},[478,91637,91638,91640,91642],{"class":480,"line":593},[478,91639,1605],{"class":714},[478,91641,51714],{"class":51680},[478,91643,51687],{"class":714},[478,91645,91646,91648,91650,91652,91654,91656],{"class":480,"line":1769},[478,91647,52524],{"class":714},[478,91649,51724],{"class":51680},[478,91651,51727],{"class":484},[478,91653,759],{"class":714},[478,91655,51732],{"class":488},[478,91657,51687],{"class":714},[478,91659,91660,91662,91664,91666,91668,91670,91672,91674,91676],{"class":480,"line":1783},[478,91661,52524],{"class":714},[478,91663,51724],{"class":51680},[478,91665,15485],{"class":484},[478,91667,759],{"class":714},[478,91669,51771],{"class":488},[478,91671,51751],{"class":484},[478,91673,759],{"class":714},[478,91675,51778],{"class":488},[478,91677,51687],{"class":714},[478,91679,91680,91682,91684,91686,91688],{"class":480,"line":1789},[478,91681,52524],{"class":714},[478,91683,51787],{"class":51680},[478,91685,51790],{"class":714},[478,91687,51787],{"class":51680},[478,91689,51687],{"class":714},[478,91691,91692,91694,91696],{"class":480,"line":1880},[478,91693,52524],{"class":714},[478,91695,617],{"class":51680},[478,91697,51687],{"class":714},[478,91699,91700,91702],{"class":480,"line":1886},[478,91701,55132],{"class":484},[478,91703,16137],{"class":714},[478,91705,91706,91708,91710,91712],{"class":480,"line":1898},[478,91707,72976],{"class":495},[478,91709,51817],{"class":714},[478,91711,60885],{"class":495},[478,91713,1859],{"class":714},[478,91715,91716,91718,91720,91722,91724],{"class":480,"line":2180},[478,91717,55151],{"class":495},[478,91719,51817],{"class":714},[478,91721,2289],{"class":495},[478,91723,51872],{"class":710},[478,91725,1859],{"class":714},[478,91727,91728,91730,91732,91734,91736],{"class":480,"line":2185},[478,91729,55165],{"class":495},[478,91731,51817],{"class":714},[478,91733,2289],{"class":495},[478,91735,51872],{"class":710},[478,91737,1859],{"class":714},[478,91739,91740,91742,91744,91746],{"class":480,"line":2191},[478,91741,55264],{"class":495},[478,91743,51817],{"class":714},[478,91745,90386],{"class":495},[478,91747,1859],{"class":714},[478,91749,91750,91752,91754,91756,91758],{"class":480,"line":2196},[478,91751,55302],{"class":495},[478,91753,51817],{"class":714},[478,91755,1520],{"class":495},[478,91757,51872],{"class":710},[478,91759,1859],{"class":714},[478,91761,91762,91764,91766,91768],{"class":480,"line":2210},[478,91763,57796],{"class":495},[478,91765,51817],{"class":714},[478,91767,61222],{"class":495},[478,91769,1859],{"class":714},[478,91771,91772,91774,91776,91778],{"class":480,"line":2215},[478,91773,57666],{"class":495},[478,91775,51817],{"class":714},[478,91777,51972],{"class":495},[478,91779,1859],{"class":714},[478,91781,91782,91784,91786,91788,91790],{"class":480,"line":2221},[478,91783,90425],{"class":495},[478,91785,51817],{"class":714},[478,91787,1020],{"class":495},[478,91789,51872],{"class":710},[478,91791,1859],{"class":714},[478,91793,91794],{"class":480,"line":2241},[478,91795,2753],{"class":714},[478,91797,91798,91800,91802],{"class":480,"line":2246},[478,91799,52797],{"class":714},[478,91801,617],{"class":51680},[478,91803,51687],{"class":714},[478,91805,91806,91808,91810],{"class":480,"line":2260},[478,91807,52165],{"class":714},[478,91809,51714],{"class":51680},[478,91811,51687],{"class":714},[478,91813,91814],{"class":480,"line":2265},[478,91815,2966],{"emptyLinePlaceholder":640},[478,91817,91818,91820,91822],{"class":480,"line":2294},[478,91819,1605],{"class":714},[478,91821,52180],{"class":51680},[478,91823,51687],{"class":714},[478,91825,91826,91828,91830,91832,91834,91836,91838,91840],{"class":480,"line":2299},[478,91827,52524],{"class":714},[478,91829,51991],{"class":51680},[478,91831,53866],{"class":484},[478,91833,759],{"class":714},[478,91835,53871],{"class":488},[478,91837,55694],{"class":714},[478,91839,51991],{"class":51680},[478,91841,51687],{"class":714},[478,91843,91844,91846,91848,91850,91852,91854,91856,91858],{"class":480,"line":2316},[478,91845,52524],{"class":714},[478,91847,52193],{"class":51680},[478,91849,55619],{"class":484},[478,91851,759],{"class":714},[478,91853,88654],{"class":488},[478,91855,55694],{"class":714},[478,91857,52193],{"class":51680},[478,91859,51687],{"class":714},[478,91861,91862,91864,91866],{"class":480,"line":2321},[478,91863,52524],{"class":714},[478,91865,52193],{"class":51680},[478,91867,51687],{"class":714},[478,91869,91870,91872,91874,91876,91878,91880,91882,91884],{"class":480,"line":2326},[478,91871,11787],{"class":710},[478,91873,87313],{"class":495},[478,91875,14130],{"class":710},[478,91877,54776],{"class":714},[478,91879,54779],{"class":484},[478,91881,263],{"class":714},[478,91883,90526],{"class":488},[478,91885,720],{"class":714},[478,91887,91888,91890,91892,91894],{"class":480,"line":2331},[478,91889,52599],{"class":710},[478,91891,10004],{"class":714},[478,91893,759],{"class":710},[478,91895,47713],{"class":495},[478,91897,91898,91900,91902],{"class":480,"line":2345},[478,91899,70464],{"class":710},[478,91901,90545],{"class":484},[478,91903,11419],{"class":714},[478,91905,91906,91908,91910,91912],{"class":480,"line":2350},[478,91907,90552],{"class":714},[478,91909,759],{"class":710},[478,91911,3598],{"class":714},[478,91913,3268],{"class":710},[478,91915,91916],{"class":480,"line":3143},[478,91917,90563],{"class":770},[478,91919,91920],{"class":480,"line":3157},[478,91921,2753],{"class":714},[478,91923,91924],{"class":480,"line":3165},[478,91925,90572],{"class":770},[478,91927,91928],{"class":480,"line":3170},[478,91929,91930],{"class":770},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[478,91932,91933],{"class":480,"line":3176},[478,91934,91935],{"class":770},"    \u002F\u002F 1.声明一个定时器变量\n",[478,91937,91938],{"class":480,"line":3182},[478,91939,91940],{"class":770},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[478,91942,91943],{"class":480,"line":3187},[478,91944,91945],{"class":770},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[478,91947,91948],{"class":480,"line":8514},[478,91949,91950],{"class":770},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[478,91952,91953],{"class":480,"line":8538},[478,91954,91955],{"class":770},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[478,91957,91958,91960,91963,91965,91967,91969,91971],{"class":480,"line":8543},[478,91959,70464],{"class":710},[478,91961,91962],{"class":484}," throttle",[478,91964,263],{"class":714},[478,91966,91017],{"class":5782},[478,91968,13001],{"class":714},[478,91970,1415],{"class":5782},[478,91972,13008],{"class":714},[478,91974,91975,91977],{"class":480,"line":8549},[478,91976,80152],{"class":710},[478,91978,91030],{"class":714},[478,91980,91981,91983,91985],{"class":480,"line":8576},[478,91982,74362],{"class":710},[478,91984,59298],{"class":710},[478,91986,54832],{"class":714},[478,91988,91989,91991,91993,91995],{"class":480,"line":8581},[478,91990,3063],{"class":710},[478,91992,219],{"class":714},[478,91994,929],{"class":710},[478,91996,91997],{"class":714},"timer) {\n",[478,91999,92000,92003,92005,92007,92009,92011],{"class":480,"line":8587},[478,92001,92002],{"class":714},"          timer ",[478,92004,759],{"class":710},[478,92006,91071],{"class":484},[478,92008,263],{"class":714},[478,92010,54829],{"class":710},[478,92012,54832],{"class":714},[478,92014,92015,92018],{"class":480,"line":8599},[478,92016,92017],{"class":484},"            fn",[478,92019,2542],{"class":714},[478,92021,92022],{"class":480,"line":8611},[478,92023,92024],{"class":770},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[478,92026,92027],{"class":480,"line":8623},[478,92028,92029],{"class":770},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[478,92031,92032,92035,92037],{"class":480,"line":10282},[478,92033,92034],{"class":714},"            timer ",[478,92036,759],{"class":710},[478,92038,92039],{"class":495}," null\n",[478,92041,92042],{"class":480,"line":10307},[478,92043,92044],{"class":770},"            \u002F\u002F 不能用clearTimeout(timer)\n",[478,92046,92047],{"class":480,"line":10330},[478,92048,92049],{"class":770},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[478,92051,92052],{"class":480,"line":10354},[478,92053,92054],{"class":714},"          }, t)\n",[478,92056,92057],{"class":480,"line":10359},[478,92058,3095],{"class":714},[478,92060,92061],{"class":480,"line":10364},[478,92062,52778],{"class":714},[478,92064,92065],{"class":480,"line":10369},[478,92066,2753],{"class":714},[478,92068,92069,92071,92073,92075,92077,92079,92081,92083,92085],{"class":480,"line":10378},[478,92070,90587],{"class":714},[478,92072,58193],{"class":484},[478,92074,263],{"class":714},[478,92076,90594],{"class":488},[478,92078,13001],{"class":714},[478,92080,91553],{"class":484},[478,92082,90603],{"class":714},[478,92084,65454],{"class":495},[478,92086,30877],{"class":714},[478,92088,92089,92091,92093],{"class":480,"line":10383},[478,92090,52797],{"class":714},[478,92092,52193],{"class":51680},[478,92094,51687],{"class":714},[478,92096,92097,92099,92101],{"class":480,"line":10389},[478,92098,52165],{"class":714},[478,92100,52180],{"class":51680},[478,92102,51687],{"class":714},[478,92104,92105],{"class":480,"line":10410},[478,92106,2966],{"emptyLinePlaceholder":640},[478,92108,92109,92111,92113],{"class":480,"line":10416},[478,92110,52165],{"class":714},[478,92112,51015],{"class":51680},[478,92114,51687],{"class":714},[129,92116,92118],{"id":92117},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[469,92120,92122],{"className":53447,"code":92121,"language":53449,"meta":54,"style":54},"\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",[475,92123,92124,92132,92140,92145,92150,92155,92160,92164,92172],{"__ignoreMap":54},[478,92125,92126,92128,92130],{"class":480,"line":481},[478,92127,1605],{"class":714},[478,92129,52180],{"class":51680},[478,92131,51687],{"class":714},[478,92133,92134,92136,92138],{"class":480,"line":565},[478,92135,52524],{"class":714},[478,92137,52193],{"class":51680},[478,92139,51687],{"class":714},[478,92141,92142],{"class":480,"line":579},[478,92143,92144],{"class":714},"    let timer = null\n",[478,92146,92147],{"class":480,"line":593},[478,92148,92149],{"class":714},"    timer = setTimeout(() => {\n",[478,92151,92152],{"class":480,"line":1769},[478,92153,92154],{"class":714},"      clearTimeout(timer)\n",[478,92156,92157],{"class":480,"line":1783},[478,92158,92159],{"class":714},"      console.log(timer)\n",[478,92161,92162],{"class":480,"line":1789},[478,92163,60605],{"class":714},[478,92165,92166,92168,92170],{"class":480,"line":1880},[478,92167,52797],{"class":714},[478,92169,52193],{"class":51680},[478,92171,51687],{"class":714},[478,92173,92174,92176,92178],{"class":480,"line":1886},[478,92175,52165],{"class":714},[478,92177,52180],{"class":51680},[478,92179,51687],{"class":714},[19,92181,92182],{},"输出为1",[19,92184,92185],{},"在开启的定时器里边写清除定时器",[19,92187,92188],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[129,92190,92192],{"id":92191},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92194,92195],{},"页面打开，可以记录上一次的视频播放位置",[19,92197,92198],{},[52,92199],{"alt":54,"src":92200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92202,92203],{},[52,92204],{"alt":54,"src":92205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[469,92207,92209],{"className":51013,"code":92208,"language":51015,"meta":54,"style":54},"\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",[475,92210,92211,92221,92235,92239,92247,92261,92281,92301,92323,92336,92344,92350,92360,92370,92380,92384,92388,92395,92408,92420,92424,92428,92438,92450,92464,92468,92472,92479,92489,92502,92514,92524,92534,92550,92562,92566,92570,92578,92588,92600,92610,92620,92630,92634,92638,92648,92659,92663,92671,92679,92683,92691,92706,92721,92736,92757,92765,92773,92788,92810,92818,92833,92859,92885,92911,92919,92927,92946,92954,92959,92978,92983,93001,93006,93011,93019,93024,93038,93046,93051,93068,93072,93077,93099,93103,93111,93119,93123],{"__ignoreMap":54},[478,92212,92213,92215,92217,92219],{"class":480,"line":481},[478,92214,51677],{"class":714},[478,92216,51681],{"class":51680},[478,92218,51684],{"class":484},[478,92220,51687],{"class":714},[478,92222,92223,92225,92227,92229,92231,92233],{"class":480,"line":565},[478,92224,1605],{"class":714},[478,92226,51015],{"class":51680},[478,92228,51696],{"class":484},[478,92230,759],{"class":714},[478,92232,51701],{"class":488},[478,92234,51687],{"class":714},[478,92236,92237],{"class":480,"line":579},[478,92238,2966],{"emptyLinePlaceholder":640},[478,92240,92241,92243,92245],{"class":480,"line":593},[478,92242,1605],{"class":714},[478,92244,51714],{"class":51680},[478,92246,51687],{"class":714},[478,92248,92249,92251,92253,92255,92257,92259],{"class":480,"line":1769},[478,92250,52524],{"class":714},[478,92252,51724],{"class":51680},[478,92254,51727],{"class":484},[478,92256,759],{"class":714},[478,92258,51732],{"class":488},[478,92260,59507],{"class":714},[478,92262,92263,92265,92267,92269,92271,92273,92275,92277,92279],{"class":480,"line":1783},[478,92264,52524],{"class":714},[478,92266,51724],{"class":51680},[478,92268,51743],{"class":484},[478,92270,759],{"class":714},[478,92272,51748],{"class":488},[478,92274,51751],{"class":484},[478,92276,759],{"class":714},[478,92278,51756],{"class":488},[478,92280,59507],{"class":714},[478,92282,92283,92285,92287,92289,92291,92293,92295,92297,92299],{"class":480,"line":1789},[478,92284,52524],{"class":714},[478,92286,51724],{"class":51680},[478,92288,15485],{"class":484},[478,92290,759],{"class":714},[478,92292,51771],{"class":488},[478,92294,51751],{"class":484},[478,92296,759],{"class":714},[478,92298,51778],{"class":488},[478,92300,59507],{"class":714},[478,92302,92303,92305,92307,92309,92311,92314,92316,92318,92321],{"class":480,"line":1880},[478,92304,52524],{"class":714},[478,92306,51724],{"class":51680},[478,92308,15485],{"class":484},[478,92310,759],{"class":714},[478,92312,92313],{"class":488},"\"referrer\"",[478,92315,51751],{"class":484},[478,92317,759],{"class":714},[478,92319,92320],{"class":488},"\"never\"",[478,92322,59507],{"class":714},[478,92324,92325,92327,92329,92332,92334],{"class":480,"line":1886},[478,92326,52524],{"class":714},[478,92328,51787],{"class":51680},[478,92330,92331],{"class":714},">综合案例\u003C\u002F",[478,92333,51787],{"class":51680},[478,92335,51687],{"class":714},[478,92337,92338,92340,92342],{"class":480,"line":1898},[478,92339,52524],{"class":714},[478,92341,617],{"class":51680},[478,92343,51687],{"class":714},[478,92345,92346,92348],{"class":480,"line":2180},[478,92347,6969],{"class":51680},[478,92349,16137],{"class":714},[478,92351,92352,92354,92356,92358],{"class":480,"line":2185},[478,92353,55075],{"class":495},[478,92355,51817],{"class":714},[478,92357,895],{"class":495},[478,92359,1859],{"class":714},[478,92361,92362,92364,92366,92368],{"class":480,"line":2191},[478,92363,55086],{"class":495},[478,92365,51817],{"class":714},[478,92367,895],{"class":495},[478,92369,1859],{"class":714},[478,92371,92372,92374,92376,92378],{"class":480,"line":2196},[478,92373,72976],{"class":495},[478,92375,51817],{"class":714},[478,92377,60885],{"class":495},[478,92379,1859],{"class":714},[478,92381,92382],{"class":480,"line":2210},[478,92383,2753],{"class":714},[478,92385,92386],{"class":480,"line":2215},[478,92387,2966],{"emptyLinePlaceholder":640},[478,92389,92390,92393],{"class":480,"line":2221},[478,92391,92392],{"class":484},"    .container",[478,92394,16137],{"class":714},[478,92396,92397,92399,92401,92404,92406],{"class":480,"line":2241},[478,92398,55151],{"class":495},[478,92400,51817],{"class":714},[478,92402,92403],{"class":495},"1200",[478,92405,51872],{"class":710},[478,92407,1859],{"class":714},[478,92409,92410,92412,92414,92416,92418],{"class":480,"line":2246},[478,92411,55086],{"class":495},[478,92413,51817],{"class":714},[478,92415,895],{"class":495},[478,92417,51936],{"class":495},[478,92419,1859],{"class":714},[478,92421,92422],{"class":480,"line":2260},[478,92423,2753],{"class":714},[478,92425,92426],{"class":480,"line":2265},[478,92427,2966],{"emptyLinePlaceholder":640},[478,92429,92430,92433,92436],{"class":480,"line":2294},[478,92431,92432],{"class":484},"    .video",[478,92434,92435],{"class":51680}," video",[478,92437,16137],{"class":714},[478,92439,92440,92442,92444,92446,92448],{"class":480,"line":2299},[478,92441,55151],{"class":495},[478,92443,51817],{"class":714},[478,92445,1012],{"class":495},[478,92447,1029],{"class":710},[478,92449,1859],{"class":714},[478,92451,92452,92454,92456,92458,92460,92462],{"class":480,"line":2316},[478,92453,55075],{"class":495},[478,92455,51817],{"class":714},[478,92457,1396],{"class":495},[478,92459,51872],{"class":710},[478,92461,4659],{"class":495},[478,92463,1859],{"class":714},[478,92465,92466],{"class":480,"line":2321},[478,92467,2753],{"class":714},[478,92469,92470],{"class":480,"line":2326},[478,92471,2966],{"emptyLinePlaceholder":640},[478,92473,92474,92477],{"class":480,"line":2331},[478,92475,92476],{"class":484},"    .elevator",[478,92478,16137],{"class":714},[478,92480,92481,92483,92485,92487],{"class":480,"line":2345},[478,92482,55139],{"class":495},[478,92484,51817],{"class":714},[478,92486,86613],{"class":495},[478,92488,1859],{"class":714},[478,92490,92491,92493,92495,92498,92500],{"class":480,"line":2350},[478,92492,55327],{"class":495},[478,92494,51817],{"class":714},[478,92496,92497],{"class":495},"280",[478,92499,51872],{"class":710},[478,92501,1859],{"class":714},[478,92503,92504,92506,92508,92510,92512],{"class":480,"line":3143},[478,92505,86807],{"class":495},[478,92507,51817],{"class":714},[478,92509,1396],{"class":495},[478,92511,51872],{"class":710},[478,92513,1859],{"class":714},[478,92515,92516,92518,92520,92522],{"class":480,"line":3157},[478,92517,86620],{"class":495},[478,92519,51817],{"class":714},[478,92521,86625],{"class":495},[478,92523,1859],{"class":714},[478,92525,92526,92528,92530,92532],{"class":480,"line":3165},[478,92527,62101],{"class":495},[478,92529,51817],{"class":714},[478,92531,61222],{"class":495},[478,92533,1859],{"class":714},[478,92535,92536,92538,92540,92542,92544,92546,92548],{"class":480,"line":3170},[478,92537,62357],{"class":495},[478,92539,51817],{"class":714},[478,92541,193],{"class":495},[478,92543,51872],{"class":710},[478,92545,51901],{"class":495},[478,92547,62624],{"class":495},[478,92549,1859],{"class":714},[478,92551,92552,92554,92556,92558,92560],{"class":480,"line":3176},[478,92553,55151],{"class":495},[478,92555,51817],{"class":714},[478,92557,1602],{"class":495},[478,92559,51872],{"class":710},[478,92561,1859],{"class":714},[478,92563,92564],{"class":480,"line":3182},[478,92565,2753],{"class":714},[478,92567,92568],{"class":480,"line":3187},[478,92569,2966],{"emptyLinePlaceholder":640},[478,92571,92572,92574,92576],{"class":480,"line":8514},[478,92573,92476],{"class":484},[478,92575,1967],{"class":51680},[478,92577,16137],{"class":714},[478,92579,92580,92582,92584,92586],{"class":480,"line":8538},[478,92581,55389],{"class":495},[478,92583,51817],{"class":714},[478,92585,61249],{"class":495},[478,92587,1859],{"class":714},[478,92589,92590,92592,92594,92596,92598],{"class":480,"line":8543},[478,92591,55075],{"class":495},[478,92593,51817],{"class":714},[478,92595,1146],{"class":495},[478,92597,51872],{"class":710},[478,92599,1859],{"class":714},[478,92601,92602,92604,92606,92608],{"class":480,"line":8549},[478,92603,64350],{"class":495},[478,92605,51817],{"class":714},[478,92607,55117],{"class":495},[478,92609,1859],{"class":714},[478,92611,92612,92614,92616,92618],{"class":480,"line":8576},[478,92613,57666],{"class":495},[478,92615,51817],{"class":714},[478,92617,51972],{"class":495},[478,92619,1859],{"class":714},[478,92621,92622,92624,92626,92628],{"class":480,"line":8581},[478,92623,57796],{"class":495},[478,92625,51817],{"class":714},[478,92627,62450],{"class":495},[478,92629,1859],{"class":714},[478,92631,92632],{"class":480,"line":8587},[478,92633,2753],{"class":714},[478,92635,92636],{"class":480,"line":8599},[478,92637,2966],{"emptyLinePlaceholder":640},[478,92639,92640,92642,92644,92646],{"class":480,"line":8611},[478,92641,92476],{"class":484},[478,92643,1967],{"class":51680},[478,92645,64404],{"class":484},[478,92647,16137],{"class":714},[478,92649,92650,92652,92654,92657],{"class":480,"line":8623},[478,92651,57796],{"class":495},[478,92653,51817],{"class":714},[478,92655,92656],{"class":495},"#1286ff",[478,92658,1859],{"class":714},[478,92660,92661],{"class":480,"line":10282},[478,92662,2753],{"class":714},[478,92664,92665,92667,92669],{"class":480,"line":10307},[478,92666,52797],{"class":714},[478,92668,617],{"class":51680},[478,92670,51687],{"class":714},[478,92672,92673,92675,92677],{"class":480,"line":10330},[478,92674,52165],{"class":714},[478,92676,51714],{"class":51680},[478,92678,51687],{"class":714},[478,92680,92681],{"class":480,"line":10354},[478,92682,2966],{"emptyLinePlaceholder":640},[478,92684,92685,92687,92689],{"class":480,"line":10359},[478,92686,1605],{"class":714},[478,92688,52180],{"class":51680},[478,92690,51687],{"class":714},[478,92692,92693,92695,92697,92699,92701,92704],{"class":480,"line":10364},[478,92694,52524],{"class":714},[478,92696,51991],{"class":51680},[478,92698,53866],{"class":484},[478,92700,759],{"class":714},[478,92702,92703],{"class":488},"\"container\"",[478,92705,51687],{"class":714},[478,92707,92708,92710,92712,92714,92716,92719],{"class":480,"line":10369},[478,92709,51721],{"class":714},[478,92711,51991],{"class":51680},[478,92713,53866],{"class":484},[478,92715,759],{"class":714},[478,92717,92718],{"class":488},"\"header\"",[478,92720,51687],{"class":714},[478,92722,92723,92725,92727,92729,92731,92734],{"class":480,"line":10378},[478,92724,55614],{"class":714},[478,92726,518],{"class":51680},[478,92728,61437],{"class":484},[478,92730,759],{"class":714},[478,92732,92733],{"class":488},"\"http:\u002F\u002Fpip.itcast.cn\"",[478,92735,51687],{"class":714},[478,92737,92738,92740,92742,92744,92746,92749,92751,92753,92755],{"class":480,"line":10383},[478,92739,55682],{"class":714},[478,92741,52],{"class":51680},[478,92743,55619],{"class":484},[478,92745,759],{"class":714},[478,92747,92748],{"class":488},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[478,92750,55627],{"class":484},[478,92752,759],{"class":714},[478,92754,8218],{"class":488},[478,92756,59507],{"class":714},[478,92758,92759,92761,92763],{"class":480,"line":10389},[478,92760,55787],{"class":714},[478,92762,518],{"class":51680},[478,92764,51687],{"class":714},[478,92766,92767,92769,92771],{"class":480,"line":10410},[478,92768,52156],{"class":714},[478,92770,51991],{"class":51680},[478,92772,51687],{"class":714},[478,92774,92775,92777,92779,92781,92783,92786],{"class":480,"line":10416},[478,92776,51721],{"class":714},[478,92778,51991],{"class":51680},[478,92780,53866],{"class":484},[478,92782,759],{"class":714},[478,92784,92785],{"class":488},"\"video\"",[478,92787,51687],{"class":714},[478,92789,92790,92792,92794,92796,92798,92801,92804,92806,92808],{"class":480,"line":10430},[478,92791,55614],{"class":714},[478,92793,28563],{"class":51680},[478,92795,55619],{"class":484},[478,92797,759],{"class":714},[478,92799,92800],{"class":488},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[478,92802,92803],{"class":484}," controls",[478,92805,55694],{"class":714},[478,92807,28563],{"class":51680},[478,92809,51687],{"class":714},[478,92811,92812,92814,92816],{"class":480,"line":10436},[478,92813,52156],{"class":714},[478,92815,51991],{"class":51680},[478,92817,51687],{"class":714},[478,92819,92820,92822,92824,92826,92828,92831],{"class":480,"line":10463},[478,92821,51721],{"class":714},[478,92823,51991],{"class":51680},[478,92825,53866],{"class":484},[478,92827,759],{"class":714},[478,92829,92830],{"class":488},"\"elevator\"",[478,92832,51687],{"class":714},[478,92834,92835,92837,92839,92841,92843,92845,92848,92850,92852,92855,92857],{"class":480,"line":10472},[478,92836,55614],{"class":714},[478,92838,518],{"class":51680},[478,92840,61437],{"class":484},[478,92842,759],{"class":714},[478,92844,64616],{"class":488},[478,92846,92847],{"class":484}," data-ref",[478,92849,759],{"class":714},[478,92851,92785],{"class":488},[478,92853,92854],{"class":714},">视频介绍\u003C\u002F",[478,92856,518],{"class":51680},[478,92858,51687],{"class":714},[478,92860,92861,92863,92865,92867,92869,92871,92873,92875,92878,92881,92883],{"class":480,"line":10478},[478,92862,55614],{"class":714},[478,92864,518],{"class":51680},[478,92866,61437],{"class":484},[478,92868,759],{"class":714},[478,92870,64616],{"class":488},[478,92872,92847],{"class":484},[478,92874,759],{"class":714},[478,92876,92877],{"class":488},"\"intro\"",[478,92879,92880],{"class":714},">课程简介\u003C\u002F",[478,92882,518],{"class":51680},[478,92884,51687],{"class":714},[478,92886,92887,92889,92891,92893,92895,92897,92899,92901,92904,92907,92909],{"class":480,"line":10486},[478,92888,55614],{"class":714},[478,92890,518],{"class":51680},[478,92892,61437],{"class":484},[478,92894,759],{"class":714},[478,92896,64616],{"class":488},[478,92898,92847],{"class":484},[478,92900,759],{"class":714},[478,92902,92903],{"class":488},"\"outline\"",[478,92905,92906],{"class":714},">评论列表\u003C\u002F",[478,92908,518],{"class":51680},[478,92910,51687],{"class":714},[478,92912,92913,92915,92917],{"class":480,"line":10491},[478,92914,52156],{"class":714},[478,92916,51991],{"class":51680},[478,92918,51687],{"class":714},[478,92920,92921,92923,92925],{"class":480,"line":17169},[478,92922,52797],{"class":714},[478,92924,51991],{"class":51680},[478,92926,51687],{"class":714},[478,92928,92929,92931,92933,92935,92937,92940,92942,92944],{"class":480,"line":17175},[478,92930,52524],{"class":714},[478,92932,52193],{"class":51680},[478,92934,55619],{"class":484},[478,92936,759],{"class":714},[478,92938,92939],{"class":488},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[478,92941,55694],{"class":714},[478,92943,52193],{"class":51680},[478,92945,51687],{"class":714},[478,92947,92948,92950,92952],{"class":480,"line":17198},[478,92949,52524],{"class":714},[478,92951,52193],{"class":51680},[478,92953,51687],{"class":714},[478,92955,92956],{"class":480,"line":17204},[478,92957,92958],{"class":770},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[478,92960,92961,92963,92965,92967,92969,92971,92973,92976],{"class":480,"line":17227},[478,92962,11787],{"class":710},[478,92964,92435],{"class":495},[478,92966,14130],{"class":710},[478,92968,54776],{"class":714},[478,92970,54779],{"class":484},[478,92972,263],{"class":714},[478,92974,92975],{"class":488},"'video'",[478,92977,720],{"class":714},[478,92979,92980],{"class":480,"line":17241},[478,92981,92982],{"class":770},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[478,92984,92985,92988,92990,92992,92994,92997,92999],{"class":480,"line":17261},[478,92986,92987],{"class":714},"    video.ontimeupdate ",[478,92989,759],{"class":710},[478,92991,88735],{"class":714},[478,92993,91553],{"class":484},[478,92995,92996],{"class":714},"(() ",[478,92998,85102],{"class":710},[478,93000,16137],{"class":714},[478,93002,93003],{"class":480,"line":17267},[478,93004,93005],{"class":770},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[478,93007,93008],{"class":480,"line":17278},[478,93009,93010],{"class":770},"      \u002F\u002F 控制台输出当前的时间\n",[478,93012,93013,93016],{"class":480,"line":17301},[478,93014,93015],{"class":770},"      \u002F\u002F console.log(video.currentTime)",[478,93017,93018],{"class":770},"  \u002F\u002F获得当前的视频时间\n",[478,93020,93021],{"class":480,"line":17323},[478,93022,93023],{"class":770},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[478,93025,93026,93028,93030,93032,93035],{"class":480,"line":17328},[478,93027,75063],{"class":714},[478,93029,72034],{"class":484},[478,93031,263],{"class":714},[478,93033,93034],{"class":488},"'currentTime'",[478,93036,93037],{"class":714},", video.currentTime)\n",[478,93039,93040,93042,93044],{"class":480,"line":17334},[478,93041,54915],{"class":714},[478,93043,6976],{"class":495},[478,93045,720],{"class":714},[478,93047,93048],{"class":480,"line":17348},[478,93049,93050],{"class":770},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[478,93052,93053,93056,93059,93061,93064,93066],{"class":480,"line":17361},[478,93054,93055],{"class":714},"    video.",[478,93057,93058],{"class":484},"onloadeddata",[478,93060,14130],{"class":710},[478,93062,93063],{"class":714}," () ",[478,93065,85102],{"class":710},[478,93067,16137],{"class":714},[478,93069,93070],{"class":480,"line":17366},[478,93071,60392],{"class":770},[478,93073,93074],{"class":480,"line":17380},[478,93075,93076],{"class":770},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[478,93078,93079,93082,93084,93087,93089,93091,93093,93095,93097],{"class":480,"line":17385},[478,93080,93081],{"class":714},"      video.currentTime ",[478,93083,759],{"class":710},[478,93085,93086],{"class":714}," localStorage.",[478,93088,72065],{"class":484},[478,93090,263],{"class":714},[478,93092,93034],{"class":488},[478,93094,14280],{"class":714},[478,93096,71737],{"class":710},[478,93098,47713],{"class":495},[478,93100,93101],{"class":480,"line":17391},[478,93102,2753],{"class":714},[478,93104,93105,93107,93109],{"class":480,"line":17396},[478,93106,52797],{"class":714},[478,93108,52193],{"class":51680},[478,93110,51687],{"class":714},[478,93112,93113,93115,93117],{"class":480,"line":17410},[478,93114,52165],{"class":714},[478,93116,52180],{"class":51680},[478,93118,51687],{"class":714},[478,93120,93121],{"class":480,"line":17415},[478,93122,2966],{"emptyLinePlaceholder":640},[478,93124,93125,93127,93129],{"class":480,"line":17420},[478,93126,52165],{"class":714},[478,93128,51015],{"class":51680},[478,93130,51687],{"class":714},[617,93132,93133],{},"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":54,"searchDepth":565,"depth":565,"links":93135},[93136,93141,93145,93146,93147,93152,93157,93158,93159,93160,93167,93172,93173,93183,93187,93188,93192],{"id":77071,"depth":565,"text":77072,"children":93137},[93138,93139,93140],{"id":77075,"depth":579,"text":77076},{"id":77100,"depth":579,"text":77101},{"id":77112,"depth":579,"text":77113},{"id":77124,"depth":565,"text":77125,"children":93142},[93143,93144],{"id":77128,"depth":579,"text":77129},{"id":77143,"depth":579,"text":77144},{"id":77195,"depth":565,"text":77196},{"id":77239,"depth":565,"text":77240},{"id":77256,"depth":565,"text":77257,"children":93148},[93149,93150,93151],{"id":77260,"depth":579,"text":77261},{"id":77273,"depth":579,"text":77274},{"id":77378,"depth":579,"text":77379},{"id":77667,"depth":565,"text":77668,"children":93153},[93154,93155,93156],{"id":77671,"depth":579,"text":77672},{"id":78114,"depth":579,"text":78115},{"id":78525,"depth":579,"text":78526},{"id":78588,"depth":565,"text":78589},{"id":78667,"depth":565,"text":78668},{"id":78760,"depth":565,"text":78761},{"id":80605,"depth":565,"text":80606,"children":93161},[93162,93163,93164,93165,93166],{"id":80609,"depth":579,"text":80610},{"id":80621,"depth":579,"text":80622},{"id":80840,"depth":579,"text":80841},{"id":80858,"depth":579,"text":80859},{"id":80918,"depth":579,"text":80919},{"id":85186,"depth":565,"text":85187,"children":93168},[93169,93170,93171],{"id":85190,"depth":579,"text":85191},{"id":85208,"depth":579,"text":85209},{"id":85234,"depth":579,"text":85235},{"id":85243,"depth":565,"text":85244},{"id":85265,"depth":565,"text":85266,"children":93174},[93175,93176,93177,93178,93179,93180,93181,93182],{"id":85269,"depth":579,"text":85270},{"id":85530,"depth":579,"text":85531},{"id":85716,"depth":579,"text":85717},{"id":86083,"depth":579,"text":86084},{"id":86199,"depth":579,"text":86200},{"id":86235,"depth":579,"text":86236},{"id":86282,"depth":579,"text":86283},{"id":86316,"depth":579,"text":86317},{"id":87679,"depth":565,"text":87680,"children":93184},[93185,93186],{"id":87683,"depth":579,"text":87684},{"id":87720,"depth":579,"text":87721},{"id":89075,"depth":565,"text":89076},{"id":89446,"depth":565,"text":89447,"children":93189},[93190,93191],{"id":89450,"depth":579,"text":89451},{"id":89484,"depth":579,"text":89485},{"id":90213,"depth":565,"text":90214,"children":93193},[93194,93195,93196,93197],{"id":90217,"depth":579,"text":90218},{"id":91175,"depth":579,"text":91176},{"id":92117,"depth":579,"text":92118},{"id":92191,"depth":579,"text":92192},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77060,"description":23942},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93204,"title":93205,"body":93206,"description":93217,"extension":638,"meta":93218,"navigation":640,"path":93220,"seo":93221,"stem":93222,"__hash__":93223},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93207,"toc":93215},[93208],[19,93209,93210,93211],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[518,93212,93213],{"href":93213,"rel":93214},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[522],{"title":54,"searchDepth":565,"depth":565,"links":93216},[],"三件套第三套学习",{"category":93219},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93205,"description":93217},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93225,"title":93226,"body":93227,"description":23942,"extension":638,"meta":93332,"navigation":640,"path":93333,"seo":93334,"stem":93335,"__hash__":93336},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93228,"toc":93327},[93229,93236,93239,93242,93245,93249,93258,93261,93264,93268,93277,93280,93284,93287,93307,93310,93324],[19,93230,93231],{},[518,93232,93235],{"href":93233,"rel":93234},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[522],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93237,93226],{"id":93238},"_1安装",[19,93240,93241],{},"numpy是科学计算基础库,底层是C语言",[19,93243,93244],{},"三种方式：",[14,93246,93248],{"id":93247},"_11-通过pip安装","1.1 通过pip安装",[469,93250,93252],{"className":30758,"code":93251,"language":30760,"meta":54,"style":54},"pip install numpy\n",[475,93253,93254],{"__ignoreMap":54},[478,93255,93256],{"class":480,"line":481},[478,93257,93251],{"class":714},[19,93259,93260],{},"首选方式，自动处理依赖项",[19,93262,93263],{},"在提示系统命令符中使用cmd",[14,93265,93267],{"id":93266},"_12-通过anaconda安装","1.2 通过Anaconda安装",[469,93269,93271],{"className":30758,"code":93270,"language":30760,"meta":54,"style":54},"conda install numpy\n",[475,93272,93273],{"__ignoreMap":54},[478,93274,93275],{"class":480,"line":481},[478,93276,93270],{"class":714},[19,93278,93279],{},"自动解决环境依赖",[14,93281,93283],{"id":93282},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93285,93286],{},"对于Debian\u002FUbuntu",[469,93288,93290],{"className":30758,"code":93289,"language":30760,"meta":54,"style":54},"sudo apt-get install python3-numpy\n",[475,93291,93292],{"__ignoreMap":54},[478,93293,93294,93297,93299,93302,93304],{"class":480,"line":481},[478,93295,93296],{"class":714},"sudo apt",[478,93298,1232],{"class":710},[478,93300,93301],{"class":714},"get install python3",[478,93303,1232],{"class":710},[478,93305,93306],{"class":714},"numpy\n",[19,93308,93309],{},"对于Fedora:",[469,93311,93313],{"className":30758,"code":93312,"language":30760,"meta":54,"style":54},"sudo dnf install python3-numpy\n",[475,93314,93315],{"__ignoreMap":54},[478,93316,93317,93320,93322],{"class":480,"line":481},[478,93318,93319],{"class":714},"sudo dnf install python3",[478,93321,1232],{"class":710},[478,93323,93306],{"class":714},[617,93325,93326],{},"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":54,"searchDepth":565,"depth":565,"links":93328},[93329,93330,93331],{"id":93247,"depth":565,"text":93248},{"id":93266,"depth":565,"text":93267},{"id":93282,"depth":565,"text":93283},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93226,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93338,"title":93339,"body":93340,"description":23942,"extension":638,"meta":93453,"navigation":640,"path":93454,"seo":93455,"stem":93456,"__hash__":93457},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93341,"toc":93451},[93342,93345,93348,93351,93354,93357,93360,93363,93366,93369,93445,93448],[10,93343,93339],{"id":93344},"_10算数函数",[19,93346,93347],{},"加减乘除运算跟python基础语法没区别",[19,93349,93350],{},"除了python那种方法外还可以使用函数",[19,93352,93353],{},"加：np.add(a,b)",[19,93355,93356],{},"减：np.subtract(a,b)",[19,93358,93359],{},"乘：np.multiply(a,b)",[19,93361,93362],{},"除：np.divide(a,b) == a\u002Fb",[19,93364,93365],{},"取余：np.mod(a,b) == a%b",[19,93367,93368],{},"必须会的用法：",[469,93370,93372],{"className":30758,"code":93371,"language":30760,"meta":54,"style":54},"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",[475,93373,93374,93396,93417,93427,93440],{"__ignoreMap":54},[478,93375,93376,93378,93380,93383,93385,93388,93390,93392,93394],{"class":480,"line":481},[478,93377,518],{"class":714},[478,93379,759],{"class":710},[478,93381,93382],{"class":714},"np.arange(",[478,93384,1121],{"class":495},[478,93386,93387],{"class":714},").reshape(",[478,93389,783],{"class":495},[478,93391,1079],{"class":714},[478,93393,783],{"class":495},[478,93395,720],{"class":714},[478,93397,93398,93400,93402,93405,93407,93409,93411,93413,93415],{"class":480,"line":565},[478,93399,964],{"class":714},[478,93401,759],{"class":710},[478,93403,93404],{"class":714},"np.array([",[478,93406,1146],{"class":495},[478,93408,1079],{"class":714},[478,93410,1146],{"class":495},[478,93412,1079],{"class":714},[478,93414,1146],{"class":495},[478,93416,5223],{"class":714},[478,93418,93419,93422,93424],{"class":480,"line":579},[478,93420,93421],{"class":714},"result",[478,93423,759],{"class":710},[478,93425,93426],{"class":714},"np.empty_like(a)\n",[478,93428,93429,93432,93435,93437],{"class":480,"line":593},[478,93430,93431],{"class":714},"np.add(a,b,",[478,93433,93434],{"class":5782},"out",[478,93436,759],{"class":710},[478,93438,93439],{"class":714},"result)\n",[478,93441,93442],{"class":480,"line":1769},[478,93443,93444],{"class":714},"result\n",[19,93446,93447],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[617,93449,93450],{},"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":54,"searchDepth":565,"depth":565,"links":93452},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93339,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93459,"title":93460,"body":93461,"description":23942,"extension":638,"meta":94223,"navigation":640,"path":94224,"seo":94225,"stem":94226,"__hash__":94227},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93462,"toc":94210},[93463,93466,93469,93472,93476,93515,93519,93563,93623,93627,93630,93669,93672,93717,93721,93757,93761,93830,93834,93898,93902,93905,93908,93911,93914,93950,93954,93994,93998,94070,94073,94077,94140,94144,94207],[10,93464,93460],{"id":93465},"_11统计函数",[19,93467,93468],{},"sum max min mean",[19,93470,93471],{},"这些有axis参数，可以指定方向",[14,93473,93475],{"id":93474},"_111-sum求和函数","11.1 sum()求和函数",[469,93477,93479],{"className":30758,"code":93478,"language":30760,"meta":54,"style":54},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[475,93480,93481,93486,93507],{"__ignoreMap":54},[478,93482,93483],{"class":480,"line":481},[478,93484,93485],{"class":770},"#创建一维数组\n",[478,93487,93488,93490,93492,93495,93497,93499,93501,93503,93505],{"class":480,"line":565},[478,93489,518],{"class":714},[478,93491,759],{"class":710},[478,93493,93494],{"class":714},"np.random.randint(",[478,93496,193],{"class":495},[478,93498,1079],{"class":714},[478,93500,1012],{"class":495},[478,93502,1079],{"class":714},[478,93504,1396],{"class":495},[478,93506,720],{"class":714},[478,93508,93509,93512],{"class":480,"line":579},[478,93510,93511],{"class":714},"np.sum(a)",[478,93513,93514],{"class":770},"#求和\n",[14,93516,93518],{"id":93517},"_112-max求最大值函数","11.2 max()求最大值函数",[469,93520,93522],{"className":30758,"code":93521,"language":30760,"meta":54,"style":54},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[475,93523,93524,93528,93548,93553,93558],{"__ignoreMap":54},[478,93525,93526],{"class":480,"line":481},[478,93527,93485],{"class":770},[478,93529,93530,93532,93534,93536,93538,93540,93542,93544,93546],{"class":480,"line":565},[478,93531,518],{"class":714},[478,93533,759],{"class":710},[478,93535,93494],{"class":714},[478,93537,193],{"class":495},[478,93539,1079],{"class":714},[478,93541,1012],{"class":495},[478,93543,1079],{"class":714},[478,93545,1396],{"class":495},[478,93547,720],{"class":714},[478,93549,93550],{"class":480,"line":579},[478,93551,93552],{"class":714},"np.max(a)\n",[478,93554,93555],{"class":480,"line":593},[478,93556,93557],{"class":770},"#最大索引(求最大元素的索引)arg\n",[478,93559,93560],{"class":480,"line":1769},[478,93561,93562],{"class":714},"np.argmax(a)\n",[469,93564,93566],{"className":30758,"code":93565,"language":30760,"meta":54,"style":54},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[475,93567,93568,93589,93609,93613],{"__ignoreMap":54},[478,93569,93570,93572,93574,93577,93579,93581,93583,93585,93587],{"class":480,"line":481},[478,93571,11485],{"class":714},[478,93573,759],{"class":710},[478,93575,93576],{"class":714}," np.array([",[478,93578,193],{"class":495},[478,93580,13001],{"class":714},[478,93582,1020],{"class":495},[478,93584,13001],{"class":714},[478,93586,783],{"class":495},[478,93588,5223],{"class":714},[478,93590,93591,93593,93595,93597,93599,93601,93603,93605,93607],{"class":480,"line":565},[478,93592,11511],{"class":714},[478,93594,759],{"class":710},[478,93596,93576],{"class":714},[478,93598,783],{"class":495},[478,93600,13001],{"class":714},[478,93602,789],{"class":495},[478,93604,13001],{"class":714},[478,93606,994],{"class":495},[478,93608,5223],{"class":714},[478,93610,93611],{"class":480,"line":579},[478,93612,2966],{"emptyLinePlaceholder":640},[478,93614,93615,93617,93620],{"class":480,"line":593},[478,93616,30795],{"class":495},[478,93618,93619],{"class":714},"(np.maximum(a, b))   ",[478,93621,93622],{"class":770},"# [3 5 4]，每个位置上取较大值\n",[14,93624,93626],{"id":93625},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93628,93629],{},"①一维数组：",[469,93631,93633],{"className":30758,"code":93632,"language":30760,"meta":54,"style":54},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[475,93634,93635,93639,93659,93664],{"__ignoreMap":54},[478,93636,93637],{"class":480,"line":481},[478,93638,93485],{"class":770},[478,93640,93641,93643,93645,93647,93649,93651,93653,93655,93657],{"class":480,"line":565},[478,93642,518],{"class":714},[478,93644,759],{"class":710},[478,93646,93494],{"class":714},[478,93648,193],{"class":495},[478,93650,1079],{"class":714},[478,93652,1012],{"class":495},[478,93654,1079],{"class":714},[478,93656,1396],{"class":495},[478,93658,720],{"class":714},[478,93660,93661],{"class":480,"line":579},[478,93662,93663],{"class":770},"#求平均值\n",[478,93665,93666],{"class":480,"line":593},[478,93667,93668],{"class":714},"np.mean(a)\n",[19,93670,93671],{},"②二维数组",[469,93673,93675],{"className":30758,"code":93674,"language":30760,"meta":54,"style":54},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[475,93676,93677,93682,93707,93712],{"__ignoreMap":54},[478,93678,93679],{"class":480,"line":481},[478,93680,93681],{"class":770},"#二维数组\n",[478,93683,93684,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705],{"class":480,"line":565},[478,93685,93686],{"class":714},"aa",[478,93688,759],{"class":710},[478,93690,93382],{"class":714},[478,93692,193],{"class":495},[478,93694,1079],{"class":714},[478,93696,1223],{"class":495},[478,93698,93387],{"class":714},[478,93700,783],{"class":495},[478,93702,1079],{"class":714},[478,93704,994],{"class":495},[478,93706,720],{"class":714},[478,93708,93709],{"class":480,"line":579},[478,93710,93711],{"class":770},"#对数组中的所有数求平均\n",[478,93713,93714],{"class":480,"line":593},[478,93715,93716],{"class":714},"np.mean(aa)\n",[14,93718,93720],{"id":93719},"_114-median求中位数函数","11.4 median()求中位数函数",[469,93722,93724],{"className":30758,"code":93723,"language":30760,"meta":54,"style":54},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[475,93725,93726,93731,93747,93752],{"__ignoreMap":54},[478,93727,93728],{"class":480,"line":481},[478,93729,93730],{"class":770},"#求中位数\n",[478,93732,93733,93735,93737,93739,93741,93743,93745],{"class":480,"line":565},[478,93734,964],{"class":714},[478,93736,759],{"class":710},[478,93738,93382],{"class":714},[478,93740,193],{"class":495},[478,93742,1079],{"class":714},[478,93744,1146],{"class":495},[478,93746,720],{"class":714},[478,93748,93749],{"class":480,"line":579},[478,93750,93751],{"class":714},"np.median(b)\n",[478,93753,93754],{"class":480,"line":593},[478,93755,93756],{"class":770},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93758,93760],{"id":93759},"_115-power求幂运算函数","11.5 power()求幂运算函数",[469,93762,93764],{"className":30758,"code":93763,"language":30760,"meta":54,"style":54},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[475,93765,93766,93782,93787,93792,93801,93806,93815],{"__ignoreMap":54},[478,93767,93768,93770,93772,93774,93776,93778,93780],{"class":480,"line":481},[478,93769,964],{"class":714},[478,93771,759],{"class":710},[478,93773,93382],{"class":714},[478,93775,193],{"class":495},[478,93777,1079],{"class":714},[478,93779,1146],{"class":495},[478,93781,720],{"class":714},[478,93783,93784],{"class":480,"line":565},[478,93785,93786],{"class":770},"#幂运算\n",[478,93788,93789],{"class":480,"line":579},[478,93790,93791],{"class":770},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[478,93793,93794,93797,93799],{"class":480,"line":593},[478,93795,93796],{"class":714},"np.power(b,",[478,93798,789],{"class":495},[478,93800,720],{"class":714},[478,93802,93803],{"class":480,"line":1769},[478,93804,93805],{"class":770},"#或者以下代码，将数据存储起来\n",[478,93807,93808,93810,93812],{"class":480,"line":1783},[478,93809,1540],{"class":714},[478,93811,759],{"class":710},[478,93813,93814],{"class":714},"np.empty_like(b)\n",[478,93816,93817,93819,93821,93823,93825,93827],{"class":480,"line":1789},[478,93818,93796],{"class":714},[478,93820,789],{"class":495},[478,93822,1079],{"class":714},[478,93824,93434],{"class":5782},[478,93826,759],{"class":710},[478,93828,93829],{"class":714},"y)\n",[14,93831,93833],{"id":93832},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[469,93835,93837],{"className":30758,"code":93836,"language":30760,"meta":54,"style":54},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[475,93838,93839,93855,93860,93865,93869,93887],{"__ignoreMap":54},[478,93840,93841,93843,93845,93847,93849,93851,93853],{"class":480,"line":481},[478,93842,964],{"class":714},[478,93844,759],{"class":710},[478,93846,93382],{"class":714},[478,93848,193],{"class":495},[478,93850,1079],{"class":714},[478,93852,1146],{"class":495},[478,93854,720],{"class":714},[478,93856,93857],{"class":480,"line":565},[478,93858,93859],{"class":770},"#开方\n",[478,93861,93862],{"class":480,"line":579},[478,93863,93864],{"class":714},"np.sqrt(b)\n",[478,93866,93867],{"class":480,"line":593},[478,93868,93805],{"class":770},[478,93870,93871,93873,93875,93878,93881,93883,93885],{"class":480,"line":1769},[478,93872,1540],{"class":714},[478,93874,759],{"class":710},[478,93876,93877],{"class":714},"np.empty_like(b,",[478,93879,93880],{"class":5782},"dtype",[478,93882,759],{"class":710},[478,93884,753],{"class":495},[478,93886,720],{"class":714},[478,93888,93889,93892,93894,93896],{"class":480,"line":1783},[478,93890,93891],{"class":714},"np.sqrt(b,",[478,93893,93434],{"class":5782},[478,93895,759],{"class":710},[478,93897,93829],{"class":714},[14,93899,93901],{"id":93900},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93903,93904],{},"对数组中的元素累计求和，可指定轴",[19,93906,93907],{},"#累计求和的意思是：",[19,93909,93910],{},"a = np.array([1, 2, 3, 4])",[19,93912,93913],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[469,93915,93917],{"className":30758,"code":93916,"language":30760,"meta":54,"style":54},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[475,93918,93919,93935,93940,93945],{"__ignoreMap":54},[478,93920,93921,93923,93925,93927,93929,93931,93933],{"class":480,"line":481},[478,93922,964],{"class":714},[478,93924,759],{"class":710},[478,93926,93382],{"class":714},[478,93928,193],{"class":495},[478,93930,1079],{"class":714},[478,93932,1146],{"class":495},[478,93934,720],{"class":714},[478,93936,93937],{"class":480,"line":565},[478,93938,93939],{"class":714},"np.cumsum(b)\n",[478,93941,93942],{"class":480,"line":579},[478,93943,93944],{"class":770},"#结果：\n",[478,93946,93947],{"class":480,"line":593},[478,93948,93949],{"class":770},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93951,93953],{"id":93952},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[469,93955,93957],{"className":30758,"code":93956,"language":30760,"meta":54,"style":54},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[475,93958,93959,93975,93980,93985,93989],{"__ignoreMap":54},[478,93960,93961,93963,93965,93967,93969,93971,93973],{"class":480,"line":481},[478,93962,964],{"class":714},[478,93964,759],{"class":710},[478,93966,93382],{"class":714},[478,93968,193],{"class":495},[478,93970,1079],{"class":714},[478,93972,1146],{"class":495},[478,93974,720],{"class":714},[478,93976,93977],{"class":480,"line":565},[478,93978,93979],{"class":770},"#对数组中的元素累计求积，可指定轴\n",[478,93981,93982],{"class":480,"line":579},[478,93983,93984],{"class":714},"np.cumprod(b)\n",[478,93986,93987],{"class":480,"line":593},[478,93988,93944],{"class":770},[478,93990,93991],{"class":480,"line":1769},[478,93992,93993],{"class":770},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93995,93997],{"id":93996},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[469,93999,94001],{"className":30758,"code":94000,"language":30760,"meta":54,"style":54},"#删除数组中的重复数据，并对数据进行排序\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",[475,94002,94003,94008,94056,94061,94065],{"__ignoreMap":54},[478,94004,94005],{"class":480,"line":481},[478,94006,94007],{"class":770},"#删除数组中的重复数据，并对数据进行排序\n",[478,94009,94010,94012,94014,94016,94018,94020,94022,94024,94026,94028,94030,94032,94034,94036,94038,94040,94042,94044,94046,94048,94050,94052,94054],{"class":480,"line":565},[478,94011,518],{"class":714},[478,94013,759],{"class":710},[478,94015,93404],{"class":714},[478,94017,193],{"class":495},[478,94019,1079],{"class":714},[478,94021,789],{"class":495},[478,94023,1079],{"class":714},[478,94025,783],{"class":495},[478,94027,1079],{"class":714},[478,94029,1198],{"class":495},[478,94031,1079],{"class":714},[478,94033,783],{"class":495},[478,94035,1079],{"class":714},[478,94037,1146],{"class":495},[478,94039,1079],{"class":714},[478,94041,901],{"class":495},[478,94043,1079],{"class":714},[478,94045,895],{"class":495},[478,94047,1079],{"class":714},[478,94049,1470],{"class":495},[478,94051,1079],{"class":714},[478,94053,994],{"class":495},[478,94055,5223],{"class":714},[478,94057,94058],{"class":480,"line":579},[478,94059,94060],{"class":714},"np.unique(a)\n",[478,94062,94063],{"class":480,"line":593},[478,94064,93944],{"class":770},[478,94066,94067],{"class":480,"line":1769},[478,94068,94069],{"class":770},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94071,94072],{},"升序形式排序",[14,94074,94076],{"id":94075},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[469,94078,94080],{"className":30758,"code":94079,"language":30760,"meta":54,"style":54},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[475,94081,94082,94130,94135],{"__ignoreMap":54},[478,94083,94084,94086,94088,94090,94092,94094,94096,94098,94100,94102,94104,94106,94108,94110,94112,94114,94116,94118,94120,94122,94124,94126,94128],{"class":480,"line":481},[478,94085,518],{"class":714},[478,94087,759],{"class":710},[478,94089,93404],{"class":714},[478,94091,193],{"class":495},[478,94093,1079],{"class":714},[478,94095,789],{"class":495},[478,94097,1079],{"class":714},[478,94099,783],{"class":495},[478,94101,1079],{"class":714},[478,94103,1198],{"class":495},[478,94105,1079],{"class":714},[478,94107,783],{"class":495},[478,94109,1079],{"class":714},[478,94111,1146],{"class":495},[478,94113,1079],{"class":714},[478,94115,901],{"class":495},[478,94117,1079],{"class":714},[478,94119,895],{"class":495},[478,94121,1079],{"class":714},[478,94123,1470],{"class":495},[478,94125,1079],{"class":714},[478,94127,994],{"class":495},[478,94129,5223],{"class":714},[478,94131,94132],{"class":480,"line":565},[478,94133,94134],{"class":770},"#返回数组中非零元素的索引\n",[478,94136,94137],{"class":480,"line":579},[478,94138,94139],{"class":714},"np.nonzero(a)\n",[14,94141,94143],{"id":94142},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[469,94145,94147],{"className":30758,"code":94146,"language":30760,"meta":54,"style":54},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[475,94148,94149,94197,94202],{"__ignoreMap":54},[478,94150,94151,94153,94155,94157,94159,94161,94163,94165,94167,94169,94171,94173,94175,94177,94179,94181,94183,94185,94187,94189,94191,94193,94195],{"class":480,"line":481},[478,94152,518],{"class":714},[478,94154,759],{"class":710},[478,94156,93404],{"class":714},[478,94158,193],{"class":495},[478,94160,1079],{"class":714},[478,94162,789],{"class":495},[478,94164,1079],{"class":714},[478,94166,783],{"class":495},[478,94168,1079],{"class":714},[478,94170,1198],{"class":495},[478,94172,1079],{"class":714},[478,94174,783],{"class":495},[478,94176,1079],{"class":714},[478,94178,1146],{"class":495},[478,94180,1079],{"class":714},[478,94182,901],{"class":495},[478,94184,1079],{"class":714},[478,94186,895],{"class":495},[478,94188,1079],{"class":714},[478,94190,1470],{"class":495},[478,94192,1079],{"class":714},[478,94194,994],{"class":495},[478,94196,5223],{"class":714},[478,94198,94199],{"class":480,"line":565},[478,94200,94201],{"class":770},"#计算一组数中最大值与最小值的差，可指定轴\n",[478,94203,94204],{"class":480,"line":579},[478,94205,94206],{"class":714},"np.ptp(a)\n",[617,94208,94209],{},"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":54,"searchDepth":565,"depth":565,"links":94211},[94212,94213,94214,94215,94216,94217,94218,94219,94220,94221,94222],{"id":93474,"depth":565,"text":93475},{"id":93517,"depth":565,"text":93518},{"id":93625,"depth":565,"text":93626},{"id":93719,"depth":565,"text":93720},{"id":93759,"depth":565,"text":93760},{"id":93832,"depth":565,"text":93833},{"id":93900,"depth":565,"text":93901},{"id":93952,"depth":565,"text":93953},{"id":93996,"depth":565,"text":93997},{"id":94075,"depth":565,"text":94076},{"id":94142,"depth":565,"text":94143},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93460,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94229,"title":94230,"body":94231,"description":23942,"extension":638,"meta":94886,"navigation":640,"path":94887,"seo":94888,"stem":94889,"__hash__":94890},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94232,"toc":94874},[94233,94236,94240,94243,94459,94463,94466,94675,94679,94745,94750,94754,94757,94760,94798,94802,94805,94810,94814,94817,94820,94825,94829,94832,94836,94839,94842,94847,94851,94854,94857,94862,94866,94871],[10,94234,94230],{"id":94235},"_12其他常用函数",[14,94237,94239],{"id":94238},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94241,94242],{},"将数组的数据按照行列复制扩展",[469,94244,94246],{"className":30758,"code":94245,"language":30760,"meta":54,"style":54},"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",[475,94247,94248,94264,94273,94277,94282,94287,94300,94304,94309,94314,94319,94323,94328,94352,94364,94368,94372,94377,94382,94387,94392,94396,94409,94413,94417,94422,94427,94432,94437,94442,94446,94450,94455],{"__ignoreMap":54},[478,94249,94250,94252,94254,94256,94258,94260,94262],{"class":480,"line":481},[478,94251,518],{"class":714},[478,94253,759],{"class":710},[478,94255,93382],{"class":714},[478,94257,193],{"class":495},[478,94259,1079],{"class":714},[478,94261,1020],{"class":495},[478,94263,720],{"class":714},[478,94265,94266,94269,94271],{"class":480,"line":565},[478,94267,94268],{"class":714},"np.tile(a,",[478,94270,789],{"class":495},[478,94272,720],{"class":714},[478,94274,94275],{"class":480,"line":579},[478,94276,93944],{"class":770},[478,94278,94279],{"class":480,"line":593},[478,94280,94281],{"class":770},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[478,94283,94284],{"class":480,"line":1769},[478,94285,94286],{"class":770},"#行复制两次，列复制三次\n",[478,94288,94289,94292,94294,94296,94298],{"class":480,"line":1783},[478,94290,94291],{"class":714},"np.tile(a,(",[478,94293,789],{"class":495},[478,94295,1079],{"class":714},[478,94297,783],{"class":495},[478,94299,30877],{"class":714},[478,94301,94302],{"class":480,"line":1789},[478,94303,93944],{"class":770},[478,94305,94306],{"class":480,"line":1880},[478,94307,94308],{"class":488},"'''\n",[478,94310,94311],{"class":480,"line":1886},[478,94312,94313],{"class":488},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[478,94315,94316],{"class":480,"line":1898},[478,94317,94318],{"class":488},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[478,94320,94321],{"class":480,"line":2180},[478,94322,94308],{"class":488},[478,94324,94325],{"class":480,"line":2185},[478,94326,94327],{"class":770},"#创建二维数组\n",[478,94329,94330,94332,94334,94336,94338,94340,94342,94344,94346,94348,94350],{"class":480,"line":2191},[478,94331,93686],{"class":714},[478,94333,759],{"class":710},[478,94335,93382],{"class":714},[478,94337,193],{"class":495},[478,94339,1079],{"class":714},[478,94341,1223],{"class":495},[478,94343,93387],{"class":714},[478,94345,994],{"class":495},[478,94347,1079],{"class":714},[478,94349,783],{"class":495},[478,94351,720],{"class":714},[478,94353,94354,94357,94359,94361],{"class":480,"line":2196},[478,94355,94356],{"class":714},"np.tile(aa,",[478,94358,789],{"class":495},[478,94360,222],{"class":714},[478,94362,94363],{"class":770},"#一个数的时候就是行\n",[478,94365,94366],{"class":480,"line":2210},[478,94367,93944],{"class":770},[478,94369,94370],{"class":480,"line":2215},[478,94371,94308],{"class":488},[478,94373,94374],{"class":480,"line":2221},[478,94375,94376],{"class":488},"array([[ 1,  2,  3,  1,  2,  3],\n",[478,94378,94379],{"class":480,"line":2241},[478,94380,94381],{"class":488},"       [ 4,  5,  6,  4,  5,  6],\n",[478,94383,94384],{"class":480,"line":2246},[478,94385,94386],{"class":488},"       [ 7,  8,  9,  7,  8,  9],\n",[478,94388,94389],{"class":480,"line":2260},[478,94390,94391],{"class":488},"       [10, 11, 12, 10, 11, 12]])\n",[478,94393,94394],{"class":480,"line":2265},[478,94395,94308],{"class":488},[478,94397,94398,94401,94403,94405,94407],{"class":480,"line":2294},[478,94399,94400],{"class":714},"np.tile(aa,(",[478,94402,789],{"class":495},[478,94404,1079],{"class":714},[478,94406,783],{"class":495},[478,94408,30877],{"class":714},[478,94410,94411],{"class":480,"line":2299},[478,94412,93944],{"class":770},[478,94414,94415],{"class":480,"line":2316},[478,94416,94308],{"class":488},[478,94418,94419],{"class":480,"line":2321},[478,94420,94421],{"class":488},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[478,94423,94424],{"class":480,"line":2326},[478,94425,94426],{"class":488},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[478,94428,94429],{"class":480,"line":2331},[478,94430,94431],{"class":488},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[478,94433,94434],{"class":480,"line":2345},[478,94435,94436],{"class":488},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[478,94438,94439],{"class":480,"line":2350},[478,94440,94441],{"class":488},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[478,94443,94444],{"class":480,"line":3143},[478,94445,94426],{"class":488},[478,94447,94448],{"class":480,"line":3157},[478,94449,94431],{"class":488},[478,94451,94452],{"class":480,"line":3165},[478,94453,94454],{"class":488},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[478,94456,94457],{"class":480,"line":3170},[478,94458,94308],{"class":488},[14,94460,94462],{"id":94461},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94464,94465],{},"repeat()将数组中的每个元素重复若干次",[469,94467,94469],{"className":30758,"code":94468,"language":30760,"meta":54,"style":54},"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",[475,94470,94471,94487,94496,94500,94505,94529,94534,94543,94547,94552,94556,94561,94577,94581,94585,94590,94595,94600,94604,94609,94613,94618,94623,94627,94643,94647,94651,94656,94661,94666,94671],{"__ignoreMap":54},[478,94472,94473,94475,94477,94479,94481,94483,94485],{"class":480,"line":481},[478,94474,518],{"class":714},[478,94476,759],{"class":710},[478,94478,93382],{"class":714},[478,94480,193],{"class":495},[478,94482,1079],{"class":714},[478,94484,1020],{"class":495},[478,94486,720],{"class":714},[478,94488,94489,94492,94494],{"class":480,"line":565},[478,94490,94491],{"class":714},"np.repeat(a,",[478,94493,783],{"class":495},[478,94495,720],{"class":714},[478,94497,94498],{"class":480,"line":579},[478,94499,93944],{"class":770},[478,94501,94502],{"class":480,"line":593},[478,94503,94504],{"class":770},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[478,94506,94507,94509,94511,94513,94515,94517,94519,94521,94523,94525,94527],{"class":480,"line":1769},[478,94508,93686],{"class":714},[478,94510,759],{"class":710},[478,94512,93382],{"class":714},[478,94514,193],{"class":495},[478,94516,1079],{"class":714},[478,94518,1223],{"class":495},[478,94520,93387],{"class":714},[478,94522,994],{"class":495},[478,94524,1079],{"class":714},[478,94526,783],{"class":495},[478,94528,720],{"class":714},[478,94530,94531],{"class":480,"line":1783},[478,94532,94533],{"class":770},"#这个重复之后二维变成一维\n",[478,94535,94536,94539,94541],{"class":480,"line":1789},[478,94537,94538],{"class":714},"np.repeat(aa,",[478,94540,789],{"class":495},[478,94542,720],{"class":714},[478,94544,94545],{"class":480,"line":1880},[478,94546,94308],{"class":488},[478,94548,94549],{"class":480,"line":1886},[478,94550,94551],{"class":488},"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",[478,94553,94554],{"class":480,"line":1898},[478,94555,94308],{"class":488},[478,94557,94558],{"class":480,"line":2180},[478,94559,94560],{"class":770},"#指定axis\n",[478,94562,94563,94565,94567,94569,94571,94573,94575],{"class":480,"line":2185},[478,94564,94538],{"class":714},[478,94566,789],{"class":495},[478,94568,1079],{"class":714},[478,94570,47894],{"class":5782},[478,94572,759],{"class":710},[478,94574,895],{"class":495},[478,94576,720],{"class":714},[478,94578,94579],{"class":480,"line":2191},[478,94580,93944],{"class":770},[478,94582,94583],{"class":480,"line":2196},[478,94584,94308],{"class":488},[478,94586,94587],{"class":480,"line":2210},[478,94588,94589],{"class":488},"array([[ 1,  2,  3],\n",[478,94591,94592],{"class":480,"line":2215},[478,94593,94594],{"class":488},"       [ 1,  2,  3],\n",[478,94596,94597],{"class":480,"line":2221},[478,94598,94599],{"class":488},"       [ 4,  5,  6],\n",[478,94601,94602],{"class":480,"line":2241},[478,94603,94599],{"class":488},[478,94605,94606],{"class":480,"line":2246},[478,94607,94608],{"class":488},"       [ 7,  8,  9],\n",[478,94610,94611],{"class":480,"line":2260},[478,94612,94608],{"class":488},[478,94614,94615],{"class":480,"line":2265},[478,94616,94617],{"class":488},"       [10, 11, 12],\n",[478,94619,94620],{"class":480,"line":2294},[478,94621,94622],{"class":488},"       [10, 11, 12]])\n",[478,94624,94625],{"class":480,"line":2299},[478,94626,94308],{"class":488},[478,94628,94629,94631,94633,94635,94637,94639,94641],{"class":480,"line":2316},[478,94630,94538],{"class":714},[478,94632,789],{"class":495},[478,94634,1079],{"class":714},[478,94636,47894],{"class":5782},[478,94638,759],{"class":710},[478,94640,193],{"class":495},[478,94642,720],{"class":714},[478,94644,94645],{"class":480,"line":2321},[478,94646,93944],{"class":770},[478,94648,94649],{"class":480,"line":2326},[478,94650,94308],{"class":488},[478,94652,94653],{"class":480,"line":2331},[478,94654,94655],{"class":488},"array([[ 1,  1,  2,  2,  3,  3],\n",[478,94657,94658],{"class":480,"line":2345},[478,94659,94660],{"class":488},"       [ 4,  4,  5,  5,  6,  6],\n",[478,94662,94663],{"class":480,"line":2350},[478,94664,94665],{"class":488},"       [ 7,  7,  8,  8,  9,  9],\n",[478,94667,94668],{"class":480,"line":3143},[478,94669,94670],{"class":488},"       [10, 10, 11, 11, 12, 12]])\n",[478,94672,94673],{"class":480,"line":3157},[478,94674,94308],{"class":488},[14,94676,94678],{"id":94677},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[469,94680,94682],{"className":30758,"code":94681,"language":30760,"meta":54,"style":54},"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",[475,94683,94684,94700,94705,94717,94721,94726,94736,94740],{"__ignoreMap":54},[478,94685,94686,94688,94690,94692,94694,94696,94698],{"class":480,"line":481},[478,94687,518],{"class":714},[478,94689,759],{"class":710},[478,94691,93382],{"class":714},[478,94693,193],{"class":495},[478,94695,1079],{"class":714},[478,94697,1020],{"class":495},[478,94699,720],{"class":714},[478,94701,94702],{"class":480,"line":565},[478,94703,94704],{"class":770},"#array([，2，3，4])\n",[478,94706,94707,94710,94712,94714],{"class":480,"line":579},[478,94708,94709],{"class":714},"np.roll(a,",[478,94711,789],{"class":495},[478,94713,222],{"class":714},[478,94715,94716],{"class":770},"#传正数向后调多少位，传负数向前调多少位\n",[478,94718,94719],{"class":480,"line":593},[478,94720,93944],{"class":770},[478,94722,94723],{"class":480,"line":1769},[478,94724,94725],{"class":770},"#array([3, 4, 1, 2])\n",[478,94727,94728,94730,94732,94734],{"class":480,"line":1783},[478,94729,94709],{"class":714},[478,94731,1232],{"class":710},[478,94733,193],{"class":495},[478,94735,720],{"class":714},[478,94737,94738],{"class":480,"line":1789},[478,94739,93944],{"class":770},[478,94741,94742],{"class":480,"line":1880},[478,94743,94744],{"class":770},"#array([2, 3, 4, 1])\n",[19,94746,94747],{},[52,94748],{"alt":54,"src":94749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94751,94753],{"id":94752},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94755,94756],{},"resize()重新调整数组的大小",[19,94758,94759],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[469,94761,94763],{"className":30758,"code":94762,"language":30760,"meta":54,"style":54},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[475,94764,94765,94770,94783],{"__ignoreMap":54},[478,94766,94767],{"class":480,"line":481},[478,94768,94769],{"class":770},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[478,94771,94772,94775,94777,94779,94781],{"class":480,"line":565},[478,94773,94774],{"class":714},"np.resize(aa,(",[478,94776,789],{"class":495},[478,94778,1079],{"class":714},[478,94780,1045],{"class":495},[478,94782,30877],{"class":714},[478,94784,94785,94787,94789,94791,94793,94795],{"class":480,"line":579},[478,94786,94774],{"class":714},[478,94788,789],{"class":495},[478,94790,1079],{"class":714},[478,94792,1121],{"class":495},[478,94794,83151],{"class":714},[478,94796,94797],{"class":770},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94799,94801],{"id":94800},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94803,94804],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94806,94807],{},[52,94808],{"alt":54,"src":94809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94811,94813],{"id":94812},"_126-保存加载文件","12.6 保存加载文件",[19,94815,94816],{},"savetxt():将数据保存到txt文件中",[19,94818,94819],{},"loadtxt():从文件加载数据",[19,94821,94822],{},[52,94823],{"alt":54,"src":94824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94826,94828],{"id":94827},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94830,94831],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94833,94835],{"id":94834},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94837,94838],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94840,94841],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94843,94844],{},[52,94845],{"alt":54,"src":94846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94848,94850],{"id":94849},"_129-where语句","12.9 where语句",[19,94852,94853],{},"np.where(条件,x,y)",[19,94855,94856],{},"如果条件为True,对应值为x,否则对应值为y",[19,94858,94859],{},[52,94860],{"alt":54,"src":94861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94863,94865],{"id":94864},"_1210-dot矩阵","12.10 dot()矩阵",[19,94867,94868],{},[52,94869],{"alt":54,"src":94870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[617,94872,94873],{},"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":54,"searchDepth":565,"depth":565,"links":94875},[94876,94877,94878,94879,94880,94881,94882,94883,94884,94885],{"id":94238,"depth":565,"text":94239},{"id":94461,"depth":565,"text":94462},{"id":94677,"depth":565,"text":94678},{"id":94752,"depth":565,"text":94753},{"id":94800,"depth":565,"text":94801},{"id":94812,"depth":565,"text":94813},{"id":94827,"depth":565,"text":94828},{"id":94834,"depth":565,"text":94835},{"id":94849,"depth":565,"text":94850},{"id":94864,"depth":565,"text":94865},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94230,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94892,"title":94893,"body":94894,"description":23942,"extension":638,"meta":95247,"navigation":640,"path":95248,"seo":95249,"stem":95250,"__hash__":95251},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94895,"toc":95245},[94896,94899,94902,94905,94908,94911,94976,94978,95242],[10,94897,94893],{"id":94898},"_13数组排序",[19,94900,94901],{},"排序主要用到的方法是np.sort和np.argsort",[19,94903,94904],{},"其中np.sort()对数组直接排序",[19,94906,94907],{},"而np.argsort()是返回排序后的原始索引",[19,94909,94910],{},"①一维数组",[469,94912,94914],{"className":30758,"code":94913,"language":30760,"meta":54,"style":54},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[475,94915,94916,94920,94960,94968],{"__ignoreMap":54},[478,94917,94918],{"class":480,"line":481},[478,94919,93485],{"class":770},[478,94921,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946,94948,94950,94952,94954,94956,94958],{"class":480,"line":565},[478,94923,518],{"class":714},[478,94925,759],{"class":710},[478,94927,93404],{"class":714},[478,94929,783],{"class":495},[478,94931,1079],{"class":714},[478,94933,1198],{"class":495},[478,94935,1079],{"class":714},[478,94937,1096],{"class":495},[478,94939,1079],{"class":714},[478,94941,1470],{"class":495},[478,94943,1079],{"class":714},[478,94945,980],{"class":495},[478,94947,1079],{"class":714},[478,94949,1588],{"class":495},[478,94951,1079],{"class":714},[478,94953,1045],{"class":495},[478,94955,1079],{"class":714},[478,94957,1146],{"class":495},[478,94959,5223],{"class":714},[478,94961,94962,94965],{"class":480,"line":579},[478,94963,94964],{"class":714},"np.sort(a)",[478,94966,94967],{"class":770},"#升序排序\n",[478,94969,94970,94973],{"class":480,"line":593},[478,94971,94972],{"class":714},"np.argsort(a)",[478,94974,94975],{"class":770},"#按照元素大小来索引排序\n",[19,94977,93671],{},[469,94979,94981],{"className":30758,"code":94980,"language":30760,"meta":54,"style":54},"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",[475,94982,94983,94995,95021,95026,95030,95035,95040,95045,95050,95054,95062,95066,95071,95076,95081,95086,95090,95095,95108,95112,95117,95122,95127,95132,95136,95141,95153,95157,95161,95165,95169,95173,95177,95182,95197,95202,95211,95216,95220,95224,95229,95233,95238],{"__ignoreMap":54},[478,94984,94985,94988,94990,94992],{"class":480,"line":481},[478,94986,94987],{"class":714},"np.random.seed(",[478,94989,895],{"class":495},[478,94991,222],{"class":714},[478,94993,94994],{"class":770},"#保证每次值一样\n",[478,94996,94997,94999,95001,95003,95005,95007,95009,95011,95013,95015,95017,95019],{"class":480,"line":565},[478,94998,93686],{"class":714},[478,95000,759],{"class":710},[478,95002,93494],{"class":714},[478,95004,1012],{"class":495},[478,95006,1079],{"class":714},[478,95008,31876],{"class":5782},[478,95010,759],{"class":710},[478,95012,263],{"class":714},[478,95014,994],{"class":495},[478,95016,1079],{"class":714},[478,95018,1045],{"class":495},[478,95020,30877],{"class":714},[478,95022,95023],{"class":480,"line":579},[478,95024,95025],{"class":770},"#原数组：\n",[478,95027,95028],{"class":480,"line":593},[478,95029,94308],{"class":488},[478,95031,95032],{"class":480,"line":1769},[478,95033,95034],{"class":488},"array([[44, 47, 64, 67, 67,  9],\n",[478,95036,95037],{"class":480,"line":1783},[478,95038,95039],{"class":488},"       [83, 21, 36, 87, 70, 88],\n",[478,95041,95042],{"class":480,"line":1789},[478,95043,95044],{"class":488},"       [88, 12, 58, 65, 39, 87],\n",[478,95046,95047],{"class":480,"line":1880},[478,95048,95049],{"class":488},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[478,95051,95052],{"class":480,"line":1886},[478,95053,94308],{"class":488},[478,95055,95056,95059],{"class":480,"line":1898},[478,95057,95058],{"class":714},"np.sort(aa)",[478,95060,95061],{"class":770},"#每行进行了排序\n",[478,95063,95064],{"class":480,"line":2180},[478,95065,94308],{"class":488},[478,95067,95068],{"class":480,"line":2185},[478,95069,95070],{"class":488},"array([[ 9, 44, 47, 64, 67, 67],\n",[478,95072,95073],{"class":480,"line":2191},[478,95074,95075],{"class":488},"       [21, 36, 70, 83, 87, 88],\n",[478,95077,95078],{"class":480,"line":2196},[478,95079,95080],{"class":488},"       [12, 39, 58, 65, 87, 88],\n",[478,95082,95083],{"class":480,"line":2210},[478,95084,95085],{"class":488},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[478,95087,95088],{"class":480,"line":2215},[478,95089,94308],{"class":488},[478,95091,95092],{"class":480,"line":2221},[478,95093,95094],{"class":770},"#axis=0时\n",[478,95096,95097,95100,95102,95104,95106],{"class":480,"line":2241},[478,95098,95099],{"class":714},"np.sort(aa,",[478,95101,47894],{"class":5782},[478,95103,759],{"class":710},[478,95105,895],{"class":495},[478,95107,720],{"class":714},[478,95109,95110],{"class":480,"line":2246},[478,95111,94308],{"class":488},[478,95113,95114],{"class":480,"line":2260},[478,95115,95116],{"class":488},"array([[44, 12, 36, 37, 25,  9],\n",[478,95118,95119],{"class":480,"line":2265},[478,95120,95121],{"class":488},"       [46, 21, 58, 65, 39, 77],\n",[478,95123,95124],{"class":480,"line":2294},[478,95125,95126],{"class":488},"       [83, 47, 64, 67, 67, 87],\n",[478,95128,95129],{"class":480,"line":2299},[478,95130,95131],{"class":488},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[478,95133,95134],{"class":480,"line":2316},[478,95135,94308],{"class":488},[478,95137,95138],{"class":480,"line":2321},[478,95139,95140],{"class":770},"#axis=1时,为默认值\n",[478,95142,95143,95145,95147,95149,95151],{"class":480,"line":2326},[478,95144,95099],{"class":714},[478,95146,47894],{"class":5782},[478,95148,759],{"class":710},[478,95150,193],{"class":495},[478,95152,720],{"class":714},[478,95154,95155],{"class":480,"line":2331},[478,95156,94308],{"class":488},[478,95158,95159],{"class":480,"line":2345},[478,95160,95070],{"class":488},[478,95162,95163],{"class":480,"line":2350},[478,95164,95075],{"class":488},[478,95166,95167],{"class":480,"line":3143},[478,95168,95080],{"class":488},[478,95170,95171],{"class":480,"line":3157},[478,95172,95085],{"class":488},[478,95174,95175],{"class":480,"line":3165},[478,95176,94308],{"class":488},[478,95178,95179],{"class":480,"line":3170},[478,95180,95181],{"class":770},"#按最后一列排序\n",[478,95183,95184,95186,95188,95191,95193,95195],{"class":480,"line":3176},[478,95185,964],{"class":714},[478,95187,759],{"class":710},[478,95189,95190],{"class":714},"aa[:,",[478,95192,1232],{"class":710},[478,95194,193],{"class":495},[478,95196,33626],{"class":714},[478,95198,95199],{"class":480,"line":3182},[478,95200,95201],{"class":770},"#获取最后一列排好序的索引\n",[478,95203,95204,95206,95208],{"class":480,"line":3187},[478,95205,74438],{"class":714},[478,95207,759],{"class":710},[478,95209,95210],{"class":714},"np.argsort(b)\n",[478,95212,95213],{"class":480,"line":8514},[478,95214,95215],{"class":714},"aa[index]\n",[478,95217,95218],{"class":480,"line":8538},[478,95219,94308],{"class":488},[478,95221,95222],{"class":480,"line":8543},[478,95223,95034],{"class":488},[478,95225,95226],{"class":480,"line":8549},[478,95227,95228],{"class":488},"       [46, 88, 81, 37, 25, 77],\n",[478,95230,95231],{"class":480,"line":8576},[478,95232,95044],{"class":488},[478,95234,95235],{"class":480,"line":8581},[478,95236,95237],{"class":488},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[478,95239,95240],{"class":480,"line":8587},[478,95241,94308],{"class":488},[617,95243,95244],{},"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":54,"searchDepth":565,"depth":565,"links":95246},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94893,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95253,"title":95254,"body":95255,"description":23942,"extension":638,"meta":95285,"navigation":640,"path":95286,"seo":95287,"stem":95288,"__hash__":95289},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95256,"toc":95283},[95257,95260,95263,95266,95269,95272,95275,95278],[10,95258,95254],{"id":95259},"_14广播机制",[19,95261,95262],{},"广播的规则：",[19,95264,95265],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95267,95268],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95270,95271],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95273,95274],{},"3.如果没有维度形状为1，则会引发异常",[19,95276,95277],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95279,95280],{},[52,95281],{"alt":54,"src":95282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":54,"searchDepth":565,"depth":565,"links":95284},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95254,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95291,"title":95292,"body":95293,"description":23942,"extension":638,"meta":95391,"navigation":640,"path":95392,"seo":95393,"stem":95394,"__hash__":95395},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95294,"toc":95389},[95295,95298,95301,95386],[10,95296,95292],{"id":95297},"_15比较掩码",[19,95299,95300],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[469,95302,95304],{"className":30758,"code":95303,"language":30760,"meta":54,"style":54},"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",[475,95305,95306,95352,95363,95377,95381],{"__ignoreMap":54},[478,95307,95308,95310,95312,95315,95317,95319,95321,95323,95325,95327,95329,95331,95333,95335,95337,95339,95341,95343,95345,95347,95349],{"class":480,"line":481},[478,95309,518],{"class":714},[478,95311,759],{"class":710},[478,95313,95314],{"class":714},"np.array([[",[478,95316,193],{"class":495},[478,95318,1079],{"class":714},[478,95320,789],{"class":495},[478,95322,1079],{"class":714},[478,95324,783],{"class":495},[478,95326,48410],{"class":714},[478,95328,1172],{"class":495},[478,95330,1079],{"class":714},[478,95332,1198],{"class":495},[478,95334,1079],{"class":714},[478,95336,1223],{"class":495},[478,95338,48410],{"class":714},[478,95340,1420],{"class":495},[478,95342,1079],{"class":714},[478,95344,1445],{"class":495},[478,95346,1079],{"class":714},[478,95348,1470],{"class":495},[478,95350,95351],{"class":714},"]])\n",[478,95353,95354,95356,95358,95360],{"class":480,"line":565},[478,95355,518],{"class":714},[478,95357,1605],{"class":710},[478,95359,1396],{"class":495},[478,95361,95362],{"class":770},"#结果是一个由True,False组成的数组\n",[478,95364,95365,95368,95370,95372,95374],{"class":480,"line":579},[478,95366,95367],{"class":714},"a[a",[478,95369,1605],{"class":710},[478,95371,1396],{"class":495},[478,95373,1635],{"class":714},[478,95375,95376],{"class":770},"#小于20的元素会存到这个数组中\n",[478,95378,95379],{"class":480,"line":593},[478,95380,93944],{"class":770},[478,95382,95383],{"class":480,"line":1769},[478,95384,95385],{"class":770},"#array([ 1,  2,  3, 11, 12, 13])\n",[617,95387,95388],{},"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":54,"searchDepth":565,"depth":565,"links":95390},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95292,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95397,"title":95398,"body":95399,"description":23942,"extension":638,"meta":95491,"navigation":640,"path":95492,"seo":95493,"stem":95494,"__hash__":95495},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95400,"toc":95489},[95401,95404,95407,95410,95413,95416,95481,95486],[10,95402,95398],{"id":95403},"_16魔法命令time",[19,95405,95406],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95408,95409],{},"%:行模式",[19,95411,95412],{},"%%:单元格模式",[19,95414,95415],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[469,95417,95419],{"className":30758,"code":95418,"language":30760,"meta":54,"style":54},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[475,95420,95421,95426,95433,95438,95447,95460,95464,95472],{"__ignoreMap":54},[478,95422,95423],{"class":480,"line":481},[478,95424,95425],{"class":770},"#程序执行时间\n",[478,95427,95428,95430],{"class":480,"line":565},[478,95429,30772],{"class":710},[478,95431,95432],{"class":714}," time \n",[478,95434,95435],{"class":480,"line":579},[478,95436,95437],{"class":770},"#获取时间\n",[478,95439,95440,95443,95445],{"class":480,"line":593},[478,95441,95442],{"class":714},"start",[478,95444,759],{"class":710},[478,95446,32798],{"class":714},[478,95448,95449,95452,95455,95457],{"class":480,"line":1769},[478,95450,95451],{"class":714},"time.sleep(",[478,95453,95454],{"class":495},"0.4",[478,95456,222],{"class":714},[478,95458,95459],{"class":770},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[478,95461,95462],{"class":480,"line":1783},[478,95463,95437],{"class":770},[478,95465,95466,95468,95470],{"class":480,"line":1789},[478,95467,46181],{"class":714},[478,95469,759],{"class":710},[478,95471,32798],{"class":714},[478,95473,95474,95476,95478],{"class":480,"line":1880},[478,95475,46181],{"class":714},[478,95477,1232],{"class":710},[478,95479,95480],{"class":714},"start\n",[19,95482,95483],{},[52,95484],{"alt":54,"src":95485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[617,95487,95488],{},"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":54,"searchDepth":565,"depth":565,"links":95490},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95398,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95497,"title":95498,"body":95499,"description":23942,"extension":638,"meta":95534,"navigation":640,"path":95535,"seo":95536,"stem":95537,"__hash__":95538},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95500,"toc":95532},[95501,95504,95507,95510,95513,95516,95519,95522,95527],[10,95502,95498],{"id":95503},"_17魔法命令timeit",[19,95505,95506],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95508,95509],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95511,95512],{},"单元格模式：",[19,95514,95515],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95517,95518],{},"初始化语句执行次数由轮数来决定",[19,95520,95521],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95523,95524],{},[52,95525],{"alt":54,"src":95526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95528,95529],{},[52,95530],{"alt":54,"src":95531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":54,"searchDepth":565,"depth":565,"links":95533},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95498,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95540,"title":95541,"body":95542,"description":23942,"extension":638,"meta":95560,"navigation":640,"path":95561,"seo":95562,"stem":95563,"__hash__":95564},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95543,"toc":95558},[95544,95547,95550,95553],[10,95545,95541],{"id":95546},"_18魔法命令writefile和run",[19,95548,95549],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95551,95552],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95554,95555],{},[52,95556],{"alt":54,"src":95557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":54,"searchDepth":565,"depth":565,"links":95559},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95541,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95566,"title":95567,"body":95568,"description":23942,"extension":638,"meta":95621,"navigation":640,"path":95622,"seo":95623,"stem":95624,"__hash__":95625},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95569,"toc":95619},[95570,95573,95576,95578,95581,95584,95589,95592,95595,95598,95601,95604,95607,95610,95613,95616],[10,95571,95567],{"id":95572},"_19魔法命令memit",[19,95574,95575],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95577,24979],{},[19,95579,95580],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95582,95583],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95585,95586],{},[52,95587],{"alt":54,"src":95588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95590,95591],{},"补充：",[19,95593,95594],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95596,95597],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95599,95600],{},"解决方法：",[19,95602,95603],{},"1.cmd",[19,95605,95606],{},"2.依次输入以下代码：",[19,95608,95609],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95611,95612],{},"pip install --upgrade ipython",[19,95614,95615],{},"#升级 memory_profiler 和 setuptools",[19,95617,95618],{},"pip install --upgrade memory_profiler setuptools",{"title":54,"searchDepth":565,"depth":565,"links":95620},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95567,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95627,"title":95628,"body":95629,"description":23942,"extension":638,"meta":97275,"navigation":640,"path":97276,"seo":97277,"stem":97278,"__hash__":97279},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95630,"toc":97245},[95631,95634,95638,95642,95703,95706,95711,95715,95720,95725,95730,95735,95738,95743,95747,95751,95784,95787,95790,95793,95845,95848,95884,95887,95929,95933,95954,95956,95993,95995,96000,96002,96007,96011,96014,96042,96046,96050,96103,96107,96199,96203,96207,96210,96215,96219,96244,96249,96253,96256,96259,96262,96265,96268,96271,96274,96286,96290,96294,96297,96329,96332,96355,96358,96384,96387,96413,96416,96450,96453,96515,96519,96522,96526,96529,96555,96558,96561,96566,96569,96638,96640,96645,96706,96709,96720,96726,96731,96735,96738,96751,96755,96770,96772,96795,96797,96823,96826,96829,96832,96880,96882,96887,96891,96895,96922,96926,96953,96956,96961,96966,97056,97060,97118,97123,97126,97129,97171,97175,97231,97236,97239,97242],[10,95632,95628],{"id":95633},"_2创建数组",[14,95635,95637],{"id":95636},"_21-array函数创建数组","2.1 array()函数创建数组",[129,95639,95641],{"id":95640},"_221-函数语句","2.2.1 函数语句",[469,95643,95645],{"className":30758,"code":95644,"language":30760,"meta":54,"style":54},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[475,95646,95647],{"__ignoreMap":54},[478,95648,95649,95652,95655,95657,95659,95661,95663,95665,95668,95670,95673,95675,95678,95680,95682,95684,95687,95689,95692,95694,95697,95699,95701],{"class":480,"line":481},[478,95650,95651],{"class":714},"numpy.array(",[478,95653,95654],{"class":495},"object",[478,95656,13001],{"class":714},[478,95658,93880],{"class":5782},[478,95660,14130],{"class":710},[478,95662,39313],{"class":495},[478,95664,13001],{"class":714},[478,95666,95667],{"class":5782},"copy",[478,95669,14130],{"class":710},[478,95671,95672],{"class":495}," True",[478,95674,13001],{"class":714},[478,95676,95677],{"class":5782},"order",[478,95679,14130],{"class":710},[478,95681,39313],{"class":495},[478,95683,13001],{"class":714},[478,95685,95686],{"class":5782},"subok",[478,95688,14130],{"class":710},[478,95690,95691],{"class":495}," False",[478,95693,13001],{"class":714},[478,95695,95696],{"class":5782},"ndmin",[478,95698,14130],{"class":710},[478,95700,4659],{"class":495},[478,95702,720],{"class":714},[19,95704,95705],{},"参数：",[19,95707,95708],{},[52,95709],{"alt":54,"src":95710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[129,95712,95714],{"id":95713},"_222-实例","2.2.2 实例",[19,95716,95717],{},[52,95718],{"alt":54,"src":95719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95721,95722],{},[52,95723],{"alt":54,"src":95724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95726,95727],{},[52,95728],{"alt":54,"src":95729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95731,95732],{},[52,95733],{"alt":54,"src":95734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95736,95737],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95739,95740],{},[52,95741],{"alt":54,"src":95742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95744,95746],{"id":95745},"_22-随机数创建数组","2.2 随机数创建数组",[129,95748,95750],{"id":95749},"_221-random语句","2.2.1 random语句",[469,95752,95754],{"className":30758,"code":95753,"language":30760,"meta":54,"style":54},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[475,95755,95756,95761,95766,95774,95779],{"__ignoreMap":54},[478,95757,95758],{"class":480,"line":481},[478,95759,95760],{"class":770},"#random.random()\n",[478,95762,95763],{"class":480,"line":565},[478,95764,95765],{"class":770},"#确定随机种子,就是每次运行结果是相同的\n",[478,95767,95768,95770,95772],{"class":480,"line":579},[478,95769,94987],{"class":714},[478,95771,895],{"class":495},[478,95773,720],{"class":714},[478,95775,95776],{"class":480,"line":593},[478,95777,95778],{"class":714},"np.random.random()\n",[478,95780,95781],{"class":480,"line":1769},[478,95782,95783],{"class":770},"#生成一个随机的数目\n",[19,95785,95786],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95788,95789],{},"可以指定数组形状 size",[19,95791,95792],{},"①生成一维数组",[469,95794,95796],{"className":30758,"code":95795,"language":30760,"meta":54,"style":54},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[475,95797,95798,95803,95816,95821,95837],{"__ignoreMap":54},[478,95799,95800],{"class":480,"line":481},[478,95801,95802],{"class":770},"#random.random(size())\n",[478,95804,95805,95808,95810,95812,95814],{"class":480,"line":565},[478,95806,95807],{"class":714},"np.random.random(",[478,95809,31876],{"class":5782},[478,95811,759],{"class":710},[478,95813,1020],{"class":495},[478,95815,720],{"class":714},[478,95817,95818],{"class":480,"line":579},[478,95819,95820],{"class":770},"#生成一位的五个元素\n",[478,95822,95823,95825,95827,95829,95831,95833,95835],{"class":480,"line":593},[478,95824,518],{"class":714},[478,95826,759],{"class":710},[478,95828,95807],{"class":714},[478,95830,31876],{"class":5782},[478,95832,759],{"class":710},[478,95834,994],{"class":495},[478,95836,720],{"class":714},[478,95838,95839,95842],{"class":480,"line":1769},[478,95840,95841],{"class":714},"a.shape ",[478,95843,95844],{"class":770},"#输出数组形状\n",[19,95846,95847],{},"②生成二维数组",[469,95849,95851],{"className":30758,"code":95850,"language":30760,"meta":54,"style":54},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[475,95852,95853,95857,95879],{"__ignoreMap":54},[478,95854,95855],{"class":480,"line":481},[478,95856,93681],{"class":770},[478,95858,95859,95861,95863,95865,95867,95869,95871,95873,95875,95877],{"class":480,"line":565},[478,95860,93686],{"class":714},[478,95862,759],{"class":710},[478,95864,95807],{"class":714},[478,95866,31876],{"class":5782},[478,95868,759],{"class":710},[478,95870,263],{"class":714},[478,95872,994],{"class":495},[478,95874,1079],{"class":714},[478,95876,1020],{"class":495},[478,95878,30877],{"class":714},[478,95880,95881],{"class":480,"line":579},[478,95882,95883],{"class":770},"#生成四行五列的数组\n",[19,95885,95886],{},"③生成三维数组",[469,95888,95890],{"className":30758,"code":95889,"language":30760,"meta":54,"style":54},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[475,95891,95892,95897,95924],{"__ignoreMap":54},[478,95893,95894],{"class":480,"line":481},[478,95895,95896],{"class":770},"#三维数组\n",[478,95898,95899,95902,95904,95906,95908,95910,95912,95914,95916,95918,95920,95922],{"class":480,"line":565},[478,95900,95901],{"class":714},"aaa",[478,95903,759],{"class":710},[478,95905,95807],{"class":714},[478,95907,31876],{"class":5782},[478,95909,759],{"class":710},[478,95911,263],{"class":714},[478,95913,789],{"class":495},[478,95915,1079],{"class":714},[478,95917,783],{"class":495},[478,95919,1079],{"class":714},[478,95921,994],{"class":495},[478,95923,30877],{"class":714},[478,95925,95926],{"class":480,"line":579},[478,95927,95928],{"class":714},"aaa.shape\n",[129,95930,95932],{"id":95931},"_222-randint语句","2.2.2 randint语句",[469,95934,95936],{"className":30758,"code":95935,"language":30760,"meta":54,"style":54},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[475,95937,95938,95943],{"__ignoreMap":54},[478,95939,95940],{"class":480,"line":481},[478,95941,95942],{"class":770},"#生成随机的整数 random.randint(low,high,size)\n",[478,95944,95945,95947,95949,95951],{"class":480,"line":565},[478,95946,93494],{"class":714},[478,95948,1020],{"class":495},[478,95950,14280],{"class":714},[478,95952,95953],{"class":770},"#0~5中的随机一个数\n",[19,95955,95792],{},[469,95957,95959],{"className":30758,"code":95958,"language":30760,"meta":54,"style":54},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[475,95960,95961,95966,95988],{"__ignoreMap":54},[478,95962,95963],{"class":480,"line":481},[478,95964,95965],{"class":770},"#一维\n",[478,95967,95968,95970,95972,95974,95976,95978,95980,95982,95984,95986],{"class":480,"line":565},[478,95969,93494],{"class":714},[478,95971,193],{"class":495},[478,95973,1079],{"class":714},[478,95975,1172],{"class":495},[478,95977,1079],{"class":714},[478,95979,31876],{"class":5782},[478,95981,759],{"class":710},[478,95983,263],{"class":714},[478,95985,1146],{"class":495},[478,95987,30877],{"class":714},[478,95989,95990],{"class":480,"line":579},[478,95991,95992],{"class":770},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95994,95847],{},[19,95996,95997],{},[52,95998],{"alt":54,"src":95999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96001,95886],{},[19,96003,96004],{},[52,96005],{"alt":54,"src":96006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[129,96008,96010],{"id":96009},"_222-rand语句","2.2.2 rand语句",[19,96012,96013],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[469,96015,96017],{"className":30758,"code":96016,"language":30760,"meta":54,"style":54},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[475,96018,96019,96032,96037],{"__ignoreMap":54},[478,96020,96021,96024,96026,96028,96030],{"class":480,"line":481},[478,96022,96023],{"class":714},"np.random.rand(",[478,96025,1012],{"class":495},[478,96027,1079],{"class":714},[478,96029,1146],{"class":495},[478,96031,720],{"class":714},[478,96033,96034],{"class":480,"line":565},[478,96035,96036],{"class":770},"#第一个参数100：行数，表示有100个样本\n",[478,96038,96039],{"class":480,"line":579},[478,96040,96041],{"class":770},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96043,96045],{"id":96044},"_23-arange创建数组","2.3 arange()创建数组",[129,96047,96049],{"id":96048},"_231-函数语句","2.3.1 函数语句",[469,96051,96053],{"className":30758,"code":96052,"language":30760,"meta":54,"style":54},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[475,96054,96055,96069,96074,96079,96084,96089,96094,96099],{"__ignoreMap":54},[478,96056,96057,96060,96062,96064,96067],{"class":480,"line":481},[478,96058,96059],{"class":714},"numpy.arange([start,] stop[, step], ",[478,96061,93880],{"class":5782},[478,96063,759],{"class":710},[478,96065,96066],{"class":495},"None",[478,96068,720],{"class":714},[478,96070,96071],{"class":480,"line":565},[478,96072,96073],{"class":770},"#参数\n",[478,96075,96076],{"class":480,"line":579},[478,96077,96078],{"class":488},"\"\"\"\n",[478,96080,96081],{"class":480,"line":593},[478,96082,96083],{"class":488},"start:起始值，可选，默认从 0 开始。\n",[478,96085,96086],{"class":480,"line":1769},[478,96087,96088],{"class":488},"stop:结束值（不包含该值）。\n",[478,96090,96091],{"class":480,"line":1783},[478,96092,96093],{"class":488},"step:步长，可选，默认是 1。可以为浮点数。\n",[478,96095,96096],{"class":480,"line":1789},[478,96097,96098],{"class":488},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[478,96100,96101],{"class":480,"line":1880},[478,96102,96078],{"class":488},[129,96104,96106],{"id":96105},"_232-实例","2.3.2 实例",[469,96108,96110],{"className":30758,"code":96109,"language":30760,"meta":54,"style":54},"#创建一维数组\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",[475,96111,96112,96116,96140,96145,96150,96154,96177,96181,96185,96190,96195],{"__ignoreMap":54},[478,96113,96114],{"class":480,"line":481},[478,96115,93485],{"class":770},[478,96117,96118,96120,96122,96124,96126,96128,96130,96132,96134,96136,96138],{"class":480,"line":565},[478,96119,93382],{"class":714},[478,96121,193],{"class":495},[478,96123,1079],{"class":714},[478,96125,1420],{"class":495},[478,96127,1079],{"class":714},[478,96129,193],{"class":495},[478,96131,1079],{"class":714},[478,96133,93880],{"class":5782},[478,96135,759],{"class":710},[478,96137,717],{"class":495},[478,96139,720],{"class":714},[478,96141,96142],{"class":480,"line":579},[478,96143,96144],{"class":770},"#输出结果：\n",[478,96146,96147],{"class":480,"line":593},[478,96148,96149],{"class":770},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[478,96151,96152],{"class":480,"line":1769},[478,96153,94327],{"class":770},[478,96155,96156,96159,96161,96163,96165,96168,96170,96172,96174],{"class":480,"line":1783},[478,96157,96158],{"class":714},"np.array([np.arange(",[478,96160,193],{"class":495},[478,96162,1079],{"class":714},[478,96164,994],{"class":495},[478,96166,96167],{"class":714},"),np.arange(",[478,96169,994],{"class":495},[478,96171,1079],{"class":714},[478,96173,1070],{"class":495},[478,96175,96176],{"class":714},")])\n",[478,96178,96179],{"class":480,"line":1789},[478,96180,93944],{"class":770},[478,96182,96183],{"class":480,"line":1880},[478,96184,96078],{"class":488},[478,96186,96187],{"class":480,"line":1886},[478,96188,96189],{"class":488},"array([[1, 2, 3],\n",[478,96191,96192],{"class":480,"line":1898},[478,96193,96194],{"class":488},"       [4, 5, 6]])\n",[478,96196,96197],{"class":480,"line":2180},[478,96198,96078],{"class":488},[14,96200,96202],{"id":96201},"_24-生态分布","2.4 生态分布",[129,96204,96206],{"id":96205},"_241-标准正态分布","2.4.1 标准正态分布",[19,96208,96209],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96211,96212],{},[52,96213],{"alt":54,"src":96214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[129,96216,96218],{"id":96217},"_242-常规正态分布","2.4.2 常规正态分布",[469,96220,96222],{"className":30758,"code":96221,"language":30760,"meta":54,"style":54},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[475,96223,96224,96229,96234,96239],{"__ignoreMap":54},[478,96225,96226],{"class":480,"line":481},[478,96227,96228],{"class":714},"random.normal(loc,scale,size)也可以生成正态分布\n",[478,96230,96231],{"class":480,"line":565},[478,96232,96233],{"class":770},"#loc:期望\n",[478,96235,96236],{"class":480,"line":579},[478,96237,96238],{"class":770},"#scale:方差\n",[478,96240,96241],{"class":480,"line":593},[478,96242,96243],{"class":770},"#size:用于确定是几维的数列\n",[19,96245,96246],{},[52,96247],{"alt":54,"src":96248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96250,96252],{"id":96251},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96254,96255],{},"ndim:秩，维度个数",[19,96257,96258],{},"size:数组元素的个数",[19,96260,96261],{},"shape:数组的形状",[19,96263,96264],{},"dtype:数组元素的类型",[19,96266,96267],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96269,96270],{},"他们都是属性，通过数组.属性的形式来确定",[19,96272,96273],{},"如果需要输出多个可以通过以下方式：",[469,96275,96277],{"className":30758,"code":96276,"language":30760,"meta":54,"style":54},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[475,96278,96279],{"__ignoreMap":54},[478,96280,96281,96283],{"class":480,"line":481},[478,96282,30795],{"class":495},[478,96284,96285],{"class":714},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96287,96289],{"id":96288},"_26-其他方式创建数组","2.6 其他方式创建数组",[129,96291,96293],{"id":96292},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96295,96296],{},"①创建一维数组",[469,96298,96300],{"className":30758,"code":96299,"language":30760,"meta":54,"style":54},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[475,96301,96302,96311,96315,96320,96325],{"__ignoreMap":54},[478,96303,96304,96307,96309],{"class":480,"line":481},[478,96305,96306],{"class":714},"np.zeros(",[478,96308,1146],{"class":495},[478,96310,720],{"class":714},[478,96312,96313],{"class":480,"line":565},[478,96314,96078],{"class":488},[478,96316,96317],{"class":480,"line":579},[478,96318,96319],{"class":488},"输出结果：\n",[478,96321,96322],{"class":480,"line":593},[478,96323,96324],{"class":488},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[478,96326,96327],{"class":480,"line":1769},[478,96328,96078],{"class":488},[19,96330,96331],{},"上方代码等价于：",[469,96333,96335],{"className":30758,"code":96334,"language":30760,"meta":54,"style":54},"np.zeros(shape=(10))#创建10个元素的0数组\n",[475,96336,96337],{"__ignoreMap":54},[478,96338,96339,96341,96344,96346,96348,96350,96352],{"class":480,"line":481},[478,96340,96306],{"class":714},[478,96342,96343],{"class":5782},"shape",[478,96345,759],{"class":710},[478,96347,263],{"class":714},[478,96349,1146],{"class":495},[478,96351,83151],{"class":714},[478,96353,96354],{"class":770},"#创建10个元素的0数组\n",[19,96356,96357],{},"也可以指定类型",[469,96359,96361],{"className":30758,"code":96360,"language":30760,"meta":54,"style":54},"#指定类型\nnp.zeros(5,dtype=int)\n",[475,96362,96363,96368],{"__ignoreMap":54},[478,96364,96365],{"class":480,"line":481},[478,96366,96367],{"class":770},"#指定类型\n",[478,96369,96370,96372,96374,96376,96378,96380,96382],{"class":480,"line":565},[478,96371,96306],{"class":714},[478,96373,1020],{"class":495},[478,96375,1079],{"class":714},[478,96377,93880],{"class":5782},[478,96379,759],{"class":710},[478,96381,717],{"class":495},[478,96383,720],{"class":714},[19,96385,96386],{},"②创建二维数组",[469,96388,96390],{"className":30758,"code":96389,"language":30760,"meta":54,"style":54},"np.zeros((3,4),dtype=int)\n",[475,96391,96392],{"__ignoreMap":54},[478,96393,96394,96397,96399,96401,96403,96405,96407,96409,96411],{"class":480,"line":481},[478,96395,96396],{"class":714},"np.zeros((",[478,96398,783],{"class":495},[478,96400,1079],{"class":714},[478,96402,994],{"class":495},[478,96404,42636],{"class":714},[478,96406,93880],{"class":5782},[478,96408,759],{"class":710},[478,96410,717],{"class":495},[478,96412,720],{"class":714},[19,96414,96415],{},"③创建三维数组",[469,96417,96419],{"className":30758,"code":96418,"language":30760,"meta":54,"style":54},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[475,96420,96421,96426],{"__ignoreMap":54},[478,96422,96423],{"class":480,"line":481},[478,96424,96425],{"class":770},"#创建三维数组\n",[478,96427,96428,96430,96432,96434,96436,96438,96440,96442,96444,96446,96448],{"class":480,"line":565},[478,96429,96396],{"class":714},[478,96431,783],{"class":495},[478,96433,1079],{"class":714},[478,96435,994],{"class":495},[478,96437,1079],{"class":714},[478,96439,1020],{"class":495},[478,96441,42636],{"class":714},[478,96443,93880],{"class":5782},[478,96445,759],{"class":710},[478,96447,717],{"class":495},[478,96449,720],{"class":714},[19,96451,96452],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[469,96454,96456],{"className":30758,"code":96455,"language":30760,"meta":54,"style":54},"#使用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",[475,96457,96458,96463,96478,96483,96488,96510],{"__ignoreMap":54},[478,96459,96460],{"class":480,"line":481},[478,96461,96462],{"class":770},"#使用zeros_like将创建的一维数组变成全0的数组\n",[478,96464,96465,96467,96469,96471,96473,96475],{"class":480,"line":565},[478,96466,518],{"class":714},[478,96468,759],{"class":710},[478,96470,93382],{"class":714},[478,96472,994],{"class":495},[478,96474,222],{"class":714},[478,96476,96477],{"class":770},"#这个得到的结果：一维数组0，1，2，3\n",[478,96479,96480],{"class":480,"line":579},[478,96481,96482],{"class":714},"np.zeros_like(a)\n",[478,96484,96485],{"class":480,"line":593},[478,96486,96487],{"class":770},"#使用zeros_like将创建的二维数组变成全0的数组\n",[478,96489,96490,96492,96494,96496,96498,96500,96502,96504,96506,96508],{"class":480,"line":1769},[478,96491,93686],{"class":714},[478,96493,759],{"class":710},[478,96495,95807],{"class":714},[478,96497,31876],{"class":5782},[478,96499,759],{"class":710},[478,96501,263],{"class":714},[478,96503,994],{"class":495},[478,96505,1079],{"class":714},[478,96507,1020],{"class":495},[478,96509,30877],{"class":714},[478,96511,96512],{"class":480,"line":1783},[478,96513,96514],{"class":714},"np.zeros_like(aa)\n",[129,96516,96518],{"id":96517},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96520,96521],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[129,96523,96525],{"id":96524},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96527,96528],{},"①empty()用法",[469,96530,96532],{"className":30758,"code":96531,"language":30760,"meta":54,"style":54},"numpy.empty(shape,dtype=float,order='c')\n",[475,96533,96534],{"__ignoreMap":54},[478,96535,96536,96539,96541,96543,96545,96547,96549,96551,96553],{"class":480,"line":481},[478,96537,96538],{"class":714},"numpy.empty(shape,",[478,96540,93880],{"class":5782},[478,96542,759],{"class":710},[478,96544,753],{"class":495},[478,96546,1079],{"class":714},[478,96548,95677],{"class":5782},[478,96550,759],{"class":710},[478,96552,76408],{"class":488},[478,96554,720],{"class":714},[19,96556,96557],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96559,96560],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96562,96563],{},[52,96564],{"alt":54,"src":96565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96567,96568],{},"②empty()用法",[469,96570,96572],{"className":30758,"code":96571,"language":30760,"meta":54,"style":54},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[475,96573,96574,96595,96607,96628,96633],{"__ignoreMap":54},[478,96575,96576,96578,96580,96583,96585,96587,96589,96591,96593],{"class":480,"line":481},[478,96577,1540],{"class":714},[478,96579,759],{"class":710},[478,96581,96582],{"class":714},"np.empty(",[478,96584,1146],{"class":495},[478,96586,1079],{"class":714},[478,96588,93880],{"class":5782},[478,96590,759],{"class":710},[478,96592,717],{"class":495},[478,96594,720],{"class":714},[478,96596,96597,96599,96601,96603,96605],{"class":480,"line":565},[478,96598,1515],{"class":714},[478,96600,759],{"class":710},[478,96602,93382],{"class":714},[478,96604,1020],{"class":495},[478,96606,720],{"class":714},[478,96608,96609,96612,96614,96617,96619,96621,96624,96626],{"class":480,"line":579},[478,96610,96611],{"class":714},"np.add(",[478,96613,789],{"class":495},[478,96615,96616],{"class":714},",x,",[478,96618,93434],{"class":5782},[478,96620,759],{"class":710},[478,96622,96623],{"class":714},"y[:",[478,96625,1020],{"class":495},[478,96627,5223],{"class":714},[478,96629,96630],{"class":480,"line":593},[478,96631,96632],{"class":770},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[478,96634,96635],{"class":480,"line":1769},[478,96636,96637],{"class":714},"y\n",[19,96639,12080],{},[19,96641,96642],{},[52,96643],{"alt":54,"src":96644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[469,96646,96648],{"className":30758,"code":96647,"language":30760,"meta":54,"style":54},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[475,96649,96650,96666,96686,96701],{"__ignoreMap":54},[478,96651,96652,96654,96656,96658,96660,96662,96664],{"class":480,"line":481},[478,96653,1515],{"class":714},[478,96655,759],{"class":710},[478,96657,93382],{"class":714},[478,96659,193],{"class":495},[478,96661,1079],{"class":714},[478,96663,1045],{"class":495},[478,96665,720],{"class":714},[478,96667,96668,96670,96672,96674,96676,96678,96680,96682,96684],{"class":480,"line":565},[478,96669,1540],{"class":714},[478,96671,759],{"class":710},[478,96673,96582],{"class":714},[478,96675,1020],{"class":495},[478,96677,1079],{"class":714},[478,96679,93880],{"class":5782},[478,96681,759],{"class":710},[478,96683,717],{"class":495},[478,96685,720],{"class":714},[478,96687,96688,96691,96693,96695,96697,96699],{"class":480,"line":579},[478,96689,96690],{"class":714},"np.add(x,",[478,96692,789],{"class":495},[478,96694,1079],{"class":714},[478,96696,93434],{"class":5782},[478,96698,759],{"class":710},[478,96700,93829],{"class":714},[478,96702,96703],{"class":480,"line":593},[478,96704,96705],{"class":770},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96707,96708],{},"③empty_like()",[19,96710,96711],{},[45,96712,96713,96714,96719],{},"创建一个",[45,96715,96716],{},[45,96717,96718],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96721,96722,96725],{},[475,96723,96724],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96727,96728],{},[52,96729],{"alt":54,"src":96730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[129,96732,96734],{"id":96733},"_264-用法","2.6.4 ？？用法",[19,96736,96737],{},"当想查看一个函数的参数时，可以通过？？来实现",[469,96739,96741],{"className":30758,"code":96740,"language":30760,"meta":54,"style":54},"np.full??\n",[475,96742,96743],{"__ignoreMap":54},[478,96744,96745,96748],{"class":480,"line":481},[478,96746,96747],{"class":714},"np.full",[478,96749,96750],{"class":77783},"??\n",[129,96752,96754],{"id":96753},"_265-full创建数组","2.6.5 full()创建数组",[469,96756,96758],{"className":30758,"code":96757,"language":30760,"meta":54,"style":54},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[475,96759,96760,96765],{"__ignoreMap":54},[478,96761,96762],{"class":480,"line":481},[478,96763,96764],{"class":714},"full(shape,fill_value)\n",[478,96766,96767],{"class":480,"line":565},[478,96768,96769],{"class":714},"创建全为某个指定值的数组\n",[19,96771,94910],{},[469,96773,96775],{"className":30758,"code":96774,"language":30760,"meta":54,"style":54},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[475,96776,96777,96782],{"__ignoreMap":54},[478,96778,96779],{"class":480,"line":481},[478,96780,96781],{"class":770},"#创建一个一维数组,以20进行填充\n",[478,96783,96784,96787,96789,96791,96793],{"class":480,"line":565},[478,96785,96786],{"class":714},"np.full(",[478,96788,1146],{"class":495},[478,96790,1079],{"class":714},[478,96792,1396],{"class":495},[478,96794,720],{"class":714},[19,96796,93671],{},[469,96798,96800],{"className":30758,"code":96799,"language":30760,"meta":54,"style":54},"#创建二维数组\nnp.full((3,5),11)\n",[475,96801,96802,96806],{"__ignoreMap":54},[478,96803,96804],{"class":480,"line":481},[478,96805,94327],{"class":770},[478,96807,96808,96811,96813,96815,96817,96819,96821],{"class":480,"line":565},[478,96809,96810],{"class":714},"np.full((",[478,96812,783],{"class":495},[478,96814,1079],{"class":714},[478,96816,1020],{"class":495},[478,96818,42636],{"class":714},[478,96820,1172],{"class":495},[478,96822,720],{"class":714},[19,96824,96825],{},"③full_like用法",[19,96827,96828],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96830,96831],{},"这里是指定填充而已",[469,96833,96835],{"className":30758,"code":96834,"language":30760,"meta":54,"style":54},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[475,96836,96837,96842,96866,96871],{"__ignoreMap":54},[478,96838,96839],{"class":480,"line":481},[478,96840,96841],{"class":770},"#创建一个指定形状数组\n",[478,96843,96844,96846,96848,96850,96852,96854,96856,96858,96860,96862,96864],{"class":480,"line":565},[478,96845,518],{"class":714},[478,96847,759],{"class":710},[478,96849,93382],{"class":714},[478,96851,193],{"class":495},[478,96853,1079],{"class":714},[478,96855,1026],{"class":495},[478,96857,93387],{"class":714},[478,96859,994],{"class":495},[478,96861,1079],{"class":714},[478,96863,1121],{"class":495},[478,96865,720],{"class":714},[478,96867,96868],{"class":480,"line":579},[478,96869,96870],{"class":770},"#进行指定填充\n",[478,96872,96873,96876,96878],{"class":480,"line":593},[478,96874,96875],{"class":714},"np.full_like(a,",[478,96877,1146],{"class":495},[478,96879,720],{"class":714},[19,96881,12080],{},[19,96883,96884],{},[52,96885],{"alt":54,"src":96886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[129,96888,96890],{"id":96889},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22563,96892,96894],{"id":96893},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[469,96896,96898],{"className":30758,"code":96897,"language":30760,"meta":54,"style":54},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[475,96899,96900,96917],{"__ignoreMap":54},[478,96901,96902,96905,96907,96909,96911,96913,96915],{"class":480,"line":481},[478,96903,96904],{"class":714},"np.eye(",[478,96906,994],{"class":495},[478,96908,1079],{"class":714},[478,96910,93880],{"class":5782},[478,96912,759],{"class":710},[478,96914,717],{"class":495},[478,96916,720],{"class":714},[478,96918,96919],{"class":480,"line":565},[478,96920,96921],{"class":770},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22563,96923,96925],{"id":96924},"_2662-法2identity","2.6.6.2 法2：identity()",[469,96927,96929],{"className":30758,"code":96928,"language":30760,"meta":54,"style":54},"#identity()\nnp.identity(5,dtype=int)\n",[475,96930,96931,96936],{"__ignoreMap":54},[478,96932,96933],{"class":480,"line":481},[478,96934,96935],{"class":770},"#identity()\n",[478,96937,96938,96941,96943,96945,96947,96949,96951],{"class":480,"line":565},[478,96939,96940],{"class":714},"np.identity(",[478,96942,1020],{"class":495},[478,96944,1079],{"class":714},[478,96946,93880],{"class":5782},[478,96948,759],{"class":710},[478,96950,717],{"class":495},[478,96952,720],{"class":714},[19,96954,96955],{},"两个函数是有区别的",[19,96957,96958],{},[52,96959],{"alt":54,"src":96960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96962,96963],{},[52,96964],{"alt":54,"src":96965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[469,96967,96969],{"className":30758,"code":96968,"language":30760,"meta":54,"style":54},"# 创建一个 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",[475,96970,96971,96976,96988,96993,96998,97003,97008,97012,97017,97037,97041,97046,97051],{"__ignoreMap":54},[478,96972,96973],{"class":480,"line":481},[478,96974,96975],{"class":770},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[478,96977,96978,96980,96982,96984,96986],{"class":480,"line":565},[478,96979,96904],{"class":714},[478,96981,783],{"class":495},[478,96983,13001],{"class":714},[478,96985,994],{"class":495},[478,96987,720],{"class":714},[478,96989,96990],{"class":480,"line":579},[478,96991,96992],{"class":770},"# 输出:\n",[478,96994,96995],{"class":480,"line":593},[478,96996,96997],{"class":770},"# [[1. 0. 0. 0.]\n",[478,96999,97000],{"class":480,"line":1769},[478,97001,97002],{"class":770},"#  [0. 1. 0. 0.]\n",[478,97004,97005],{"class":480,"line":1783},[478,97006,97007],{"class":770},"#  [0. 0. 1. 0.]]\n",[478,97009,97010],{"class":480,"line":1789},[478,97011,2966],{"emptyLinePlaceholder":640},[478,97013,97014],{"class":480,"line":1880},[478,97015,97016],{"class":770},"# 对角线向上偏移1\n",[478,97018,97019,97021,97023,97025,97027,97029,97031,97033,97035],{"class":480,"line":1886},[478,97020,96904],{"class":714},[478,97022,783],{"class":495},[478,97024,13001],{"class":714},[478,97026,994],{"class":495},[478,97028,13001],{"class":714},[478,97030,1193],{"class":5782},[478,97032,759],{"class":710},[478,97034,193],{"class":495},[478,97036,720],{"class":714},[478,97038,97039],{"class":480,"line":1898},[478,97040,96992],{"class":770},[478,97042,97043],{"class":480,"line":2180},[478,97044,97045],{"class":770},"# [[0. 1. 0. 0.]\n",[478,97047,97048],{"class":480,"line":2185},[478,97049,97050],{"class":770},"#  [0. 0. 1. 0.]\n",[478,97052,97053],{"class":480,"line":2191},[478,97054,97055],{"class":770},"#  [0. 0. 0. 1.]]\n",[129,97057,97059],{"id":97058},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[469,97061,97063],{"className":30758,"code":97062,"language":30760,"meta":54,"style":54},"#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",[475,97064,97065,97070,97074,97079,97084,97089,97094,97099,97104,97109,97114],{"__ignoreMap":54},[478,97066,97067],{"class":480,"line":481},[478,97068,97069],{"class":770},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[478,97071,97072],{"class":480,"line":565},[478,97073,96078],{"class":488},[478,97075,97076],{"class":480,"line":579},[478,97077,97078],{"class":488},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[478,97080,97081],{"class":480,"line":593},[478,97082,97083],{"class":488},"参数介绍：\n",[478,97085,97086],{"class":480,"line":1769},[478,97087,97088],{"class":488},"start：序列的起始值\n",[478,97090,97091],{"class":480,"line":1783},[478,97092,97093],{"class":488},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[478,97095,97096],{"class":480,"line":1789},[478,97097,97098],{"class":488},"num：要生长的等步长的样本数量，默认为50\n",[478,97100,97101],{"class":480,"line":1880},[478,97102,97103],{"class":488},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[478,97105,97106],{"class":480,"line":1886},[478,97107,97108],{"class":488},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[478,97110,97111],{"class":480,"line":1898},[478,97112,97113],{"class":488},"dtype：ndarry的数据类型\n",[478,97115,97116],{"class":480,"line":2180},[478,97117,96078],{"class":488},[19,97119,97120],{},[52,97121],{"alt":54,"src":97122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97124,97125],{},"这里num=是可以省略的",[19,97127,97128],{},"也就是下方两行代码结果是一模一样的",[469,97130,97132],{"className":30758,"code":97131,"language":30760,"meta":54,"style":54},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[475,97133,97134,97151],{"__ignoreMap":54},[478,97135,97136,97139,97141,97143,97145,97147,97149],{"class":480,"line":481},[478,97137,97138],{"class":714},"np.linspace(",[478,97140,193],{"class":495},[478,97142,1079],{"class":714},[478,97144,1020],{"class":495},[478,97146,1079],{"class":714},[478,97148,1020],{"class":495},[478,97150,720],{"class":714},[478,97152,97153,97155,97157,97159,97161,97163,97165,97167,97169],{"class":480,"line":565},[478,97154,97138],{"class":714},[478,97156,193],{"class":495},[478,97158,1079],{"class":714},[478,97160,1020],{"class":495},[478,97162,1079],{"class":714},[478,97164,2232],{"class":5782},[478,97166,759],{"class":710},[478,97168,1020],{"class":495},[478,97170,720],{"class":714},[129,97172,97174],{"id":97173},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[469,97176,97178],{"className":30758,"code":97177,"language":30760,"meta":54,"style":54},"#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",[475,97179,97180,97185,97189,97194,97199,97204,97209,97213,97218,97223,97227],{"__ignoreMap":54},[478,97181,97182],{"class":480,"line":481},[478,97183,97184],{"class":770},"#logspace函数用于创建一个等比数列，格式如下：\n",[478,97186,97187],{"class":480,"line":565},[478,97188,96078],{"class":488},[478,97190,97191],{"class":480,"line":579},[478,97192,97193],{"class":488},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[478,97195,97196],{"class":480,"line":593},[478,97197,97198],{"class":488},"参数为：\n",[478,97200,97201],{"class":480,"line":1769},[478,97202,97203],{"class":488},"start:序列的起始位置为：base**start\n",[478,97205,97206],{"class":480,"line":1783},[478,97207,97208],{"class":488},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[478,97210,97211],{"class":480,"line":1789},[478,97212,97098],{"class":488},[478,97214,97215],{"class":480,"line":1880},[478,97216,97217],{"class":488},"endpoint：是否包含 stop 这个值，默认是 True\n",[478,97219,97220],{"class":480,"line":1886},[478,97221,97222],{"class":488},"base：对数的底数，默认是 10（常见对数）\n",[478,97224,97225],{"class":480,"line":1898},[478,97226,97113],{"class":488},[478,97228,97229],{"class":480,"line":2180},[478,97230,96078],{"class":488},[19,97232,97233],{},[52,97234],{"alt":54,"src":97235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97237,97238],{},"logspace()函数中的num参数也是可以不写num=的",[19,97240,97241],{},"endpoint是不可以省略的",[617,97243,97244],{},"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":54,"searchDepth":565,"depth":565,"links":97246},[97247,97251,97256,97260,97264,97265],{"id":95636,"depth":565,"text":95637,"children":97248},[97249,97250],{"id":95640,"depth":579,"text":95641},{"id":95713,"depth":579,"text":95714},{"id":95745,"depth":565,"text":95746,"children":97252},[97253,97254,97255],{"id":95749,"depth":579,"text":95750},{"id":95931,"depth":579,"text":95932},{"id":96009,"depth":579,"text":96010},{"id":96044,"depth":565,"text":96045,"children":97257},[97258,97259],{"id":96048,"depth":579,"text":96049},{"id":96105,"depth":579,"text":96106},{"id":96201,"depth":565,"text":96202,"children":97261},[97262,97263],{"id":96205,"depth":579,"text":96206},{"id":96217,"depth":579,"text":96218},{"id":96251,"depth":565,"text":96252},{"id":96288,"depth":565,"text":96289,"children":97266},[97267,97268,97269,97270,97271,97272,97273,97274],{"id":96292,"depth":579,"text":96293},{"id":96517,"depth":579,"text":96518},{"id":96524,"depth":579,"text":96525},{"id":96733,"depth":579,"text":96734},{"id":96753,"depth":579,"text":96754},{"id":96889,"depth":579,"text":96890},{"id":97058,"depth":579,"text":97059},{"id":97173,"depth":579,"text":97174},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95628,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97281,"title":97282,"body":97283,"description":23942,"extension":638,"meta":97376,"navigation":640,"path":97377,"seo":97378,"stem":97379,"__hash__":97380},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97284,"toc":97374},[97285,97288,97291,97294,97297,97300,97303,97306,97309,97312,97315,97318,97320,97323,97326,97331,97334,97337,97371],[10,97286,97282],{"id":97287},"_20魔法命令mprun",[19,97289,97290],{},"逐行分析数据内存的使用情况",[19,97292,97293],{},"语法格式：",[19,97295,97296],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97298,97299],{},"分析结果列如下：",[19,97301,97302],{},"Line行号",[19,97304,97305],{},"Mem usage内存使用大小",[19,97307,97308],{},"increment内存增量",[19,97310,97311],{},"Line content代码内容",[19,97313,97314],{},"补充说明：",[19,97316,97317],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97319,95583],{},[19,97321,97322],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97324,97325],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97327,97328],{},[52,97329],{"alt":54,"src":97330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97332,97333],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97335,97336],{},"这时候需要重新加载模块",[469,97338,97340],{"className":30758,"code":97339,"language":30760,"meta":54,"style":54},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[475,97341,97342,97347,97354,97359],{"__ignoreMap":54},[478,97343,97344],{"class":480,"line":481},[478,97345,97346],{"class":770},"#重新加载模块\n",[478,97348,97349,97351],{"class":480,"line":565},[478,97350,30772],{"class":710},[478,97352,97353],{"class":714}," importlib\n",[478,97355,97356],{"class":480,"line":579},[478,97357,97358],{"class":714},"importlib.reload(mprun_test)\n",[478,97360,97361,97363,97366,97368],{"class":480,"line":593},[478,97362,1029],{"class":710},[478,97364,97365],{"class":714},"mprun ",[478,97367,1232],{"class":710},[478,97369,97370],{"class":714},"f mprun_test.fun_test mprun_test.fun_test()\n",[617,97372,97373],{},"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":54,"searchDepth":565,"depth":565,"links":97375},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97282,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97382,"title":97383,"body":97384,"description":23942,"extension":638,"meta":97401,"navigation":640,"path":97402,"seo":97403,"stem":97404,"__hash__":97405},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97385,"toc":97399},[97386,97389,97394],[10,97387,97383],{"id":97388},"_3一维数组的索引和切片",[19,97390,97391],{},[52,97392],{"alt":54,"src":97393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97395,97396],{},[52,97397],{"alt":54,"src":97398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":54,"searchDepth":565,"depth":565,"links":97400},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97383,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97407,"title":97408,"body":97409,"description":23942,"extension":638,"meta":97892,"navigation":640,"path":97893,"seo":97894,"stem":97895,"__hash__":97896},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97410,"toc":97890},[97411,97414,97417,97422,97455,97458,97496,97499,97533,97536,97641,97644,97681,97684,97785,97788,97839,97842,97884,97887],[10,97412,97408],{"id":97413},"_4二维数组的索引与切片",[19,97415,97416],{},"①获取指定单个元素",[19,97418,97419],{},[52,97420],{"alt":54,"src":97421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[469,97423,97425],{"className":30758,"code":97424,"language":30760,"meta":54,"style":54},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[475,97426,97427,97432,97437,97442],{"__ignoreMap":54},[478,97428,97429],{"class":480,"line":481},[478,97430,97431],{"class":770},"#获取元素9\n",[478,97433,97434],{"class":480,"line":565},[478,97435,97436],{"class":770},"#先获取所在行，再获取所在列\n",[478,97438,97439],{"class":480,"line":579},[478,97440,97441],{"class":770},"#数组[行索引号，列索引号]\n",[478,97443,97444,97447,97449,97451,97453],{"class":480,"line":593},[478,97445,97446],{"class":714},"a[",[478,97448,193],{"class":495},[478,97450,1079],{"class":714},[478,97452,789],{"class":495},[478,97454,33626],{"class":714},[19,97456,97457],{},"②获取整行元素",[469,97459,97461],{"className":30758,"code":97460,"language":30760,"meta":54,"style":54},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[475,97462,97463,97468,97473,97481,97486],{"__ignoreMap":54},[478,97464,97465],{"class":480,"line":481},[478,97466,97467],{"class":770},"#获取整行 数组[行索引号]\n",[478,97469,97470],{"class":480,"line":565},[478,97471,97472],{"class":770},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[478,97474,97475,97477,97479],{"class":480,"line":579},[478,97476,97446],{"class":714},[478,97478,789],{"class":495},[478,97480,33626],{"class":714},[478,97482,97483],{"class":480,"line":593},[478,97484,97485],{"class":770},"#也可以负索引获取一行\n",[478,97487,97488,97490,97492,97494],{"class":480,"line":1769},[478,97489,97446],{"class":714},[478,97491,1232],{"class":710},[478,97493,193],{"class":495},[478,97495,33626],{"class":714},[19,97497,97498],{},"③获取整列元素",[469,97500,97502],{"className":30758,"code":97501,"language":30760,"meta":54,"style":54},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[475,97503,97504,97509,97518,97523],{"__ignoreMap":54},[478,97505,97506],{"class":480,"line":481},[478,97507,97508],{"class":770},"#获取整列 数组名[:,列索引]\n",[478,97510,97511,97514,97516],{"class":480,"line":565},[478,97512,97513],{"class":714},"a[:,",[478,97515,789],{"class":495},[478,97517,33626],{"class":714},[478,97519,97520],{"class":480,"line":579},[478,97521,97522],{"class":770},"#也可以负索引获取一列\n",[478,97524,97525,97527,97529,97531],{"class":480,"line":593},[478,97526,97513],{"class":714},[478,97528,1232],{"class":710},[478,97530,193],{"class":495},[478,97532,33626],{"class":714},[19,97534,97535],{},"④部分行部分列的元素",[469,97537,97539],{"className":30758,"code":97538,"language":30760,"meta":54,"style":54},"#部分行部分列 数组名[行切片，列切片]\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",[475,97540,97541,97546,97556,97560,97564,97569,97574,97578,97590,97594,97598,97603,97608,97613,97618,97622,97627],{"__ignoreMap":54},[478,97542,97543],{"class":480,"line":481},[478,97544,97545],{"class":770},"#部分行部分列 数组名[行切片，列切片]\n",[478,97547,97548,97551,97553],{"class":480,"line":565},[478,97549,97550],{"class":714},"a[:",[478,97552,789],{"class":495},[478,97554,97555],{"class":714},",:]\n",[478,97557,97558],{"class":480,"line":579},[478,97559,93944],{"class":770},[478,97561,97562],{"class":480,"line":593},[478,97563,94308],{"class":488},[478,97565,97566],{"class":480,"line":1769},[478,97567,97568],{"class":488},"array([[ 1,  2,  3,  4,  5,  6],\n",[478,97570,97571],{"class":480,"line":1783},[478,97572,97573],{"class":488},"       [ 7,  8,  9, 10, 11, 12]])\n",[478,97575,97576],{"class":480,"line":1789},[478,97577,94308],{"class":488},[478,97579,97580,97582,97584,97586,97588],{"class":480,"line":1880},[478,97581,97513],{"class":714},[478,97583,193],{"class":495},[478,97585,1554],{"class":714},[478,97587,994],{"class":495},[478,97589,33626],{"class":714},[478,97591,97592],{"class":480,"line":1886},[478,97593,93944],{"class":770},[478,97595,97596],{"class":480,"line":1898},[478,97597,94308],{"class":488},[478,97599,97600],{"class":480,"line":2180},[478,97601,97602],{"class":488},"array([[ 2,  3,  4],\n",[478,97604,97605],{"class":480,"line":2185},[478,97606,97607],{"class":488},"       [ 8,  9, 10],\n",[478,97609,97610],{"class":480,"line":2191},[478,97611,97612],{"class":488},"       [14, 15, 16],\n",[478,97614,97615],{"class":480,"line":2196},[478,97616,97617],{"class":488},"       [20, 21, 22]])\n",[478,97619,97620],{"class":480,"line":2210},[478,97621,94308],{"class":488},[478,97623,97624],{"class":480,"line":2215},[478,97625,97626],{"class":770},"#对列行同时进行切片，使用了step参数\n",[478,97628,97629,97632,97634,97637,97639],{"class":480,"line":2221},[478,97630,97631],{"class":714},"a[::",[478,97633,789],{"class":495},[478,97635,97636],{"class":714},",::",[478,97638,789],{"class":495},[478,97640,33626],{"class":714},[19,97642,97643],{},"⑤同时获取两个元素",[469,97645,97647],{"className":30758,"code":97646,"language":30760,"meta":54,"style":54},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[475,97648,97649,97654,97659],{"__ignoreMap":54},[478,97650,97651],{"class":480,"line":481},[478,97652,97653],{"class":770},"#同时获取第三行第二列，第四行第一列\n",[478,97655,97656],{"class":480,"line":565},[478,97657,97658],{"class":770},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[478,97660,97661,97664,97666,97668,97670,97672,97674,97676,97678],{"class":480,"line":579},[478,97662,97663],{"class":714},"a[(",[478,97665,789],{"class":495},[478,97667,1079],{"class":714},[478,97669,783],{"class":495},[478,97671,42627],{"class":714},[478,97673,193],{"class":495},[478,97675,1079],{"class":714},[478,97677,895],{"class":495},[478,97679,97680],{"class":714},")]\n",[19,97682,97683],{},"⑥切片，对行进行反向获取",[469,97685,97687],{"className":30758,"code":97686,"language":30760,"meta":54,"style":54},"#切片 对所有行进行反向获取\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",[475,97688,97689,97694,97704,97708,97712,97717,97722,97727,97732,97736,97741,97757,97761,97766,97771,97776,97781],{"__ignoreMap":54},[478,97690,97691],{"class":480,"line":481},[478,97692,97693],{"class":770},"#切片 对所有行进行反向获取\n",[478,97695,97696,97698,97700,97702],{"class":480,"line":565},[478,97697,97631],{"class":714},[478,97699,1232],{"class":710},[478,97701,193],{"class":495},[478,97703,33626],{"class":714},[478,97705,97706],{"class":480,"line":579},[478,97707,93944],{"class":770},[478,97709,97710],{"class":480,"line":593},[478,97711,94308],{"class":488},[478,97713,97714],{"class":480,"line":1769},[478,97715,97716],{"class":488},"array([[19, 20, 21, 22, 23, 24],\n",[478,97718,97719],{"class":480,"line":1783},[478,97720,97721],{"class":488},"       [13, 14, 15, 16, 17, 18],\n",[478,97723,97724],{"class":480,"line":1789},[478,97725,97726],{"class":488},"       [ 7,  8,  9, 10, 11, 12],\n",[478,97728,97729],{"class":480,"line":1880},[478,97730,97731],{"class":488},"       [ 1,  2,  3,  4,  5,  6]])\n",[478,97733,97734],{"class":480,"line":1886},[478,97735,94308],{"class":488},[478,97737,97738],{"class":480,"line":1898},[478,97739,97740],{"class":770},"#对行列都进行反向切片获取\n",[478,97742,97743,97745,97747,97749,97751,97753,97755],{"class":480,"line":2180},[478,97744,97631],{"class":714},[478,97746,1232],{"class":710},[478,97748,193],{"class":495},[478,97750,97636],{"class":714},[478,97752,1232],{"class":710},[478,97754,193],{"class":495},[478,97756,33626],{"class":714},[478,97758,97759],{"class":480,"line":2185},[478,97760,94308],{"class":488},[478,97762,97763],{"class":480,"line":2191},[478,97764,97765],{"class":488},"array([[24, 23, 22, 21, 20, 19],\n",[478,97767,97768],{"class":480,"line":2196},[478,97769,97770],{"class":488},"       [18, 17, 16, 15, 14, 13],\n",[478,97772,97773],{"class":480,"line":2210},[478,97774,97775],{"class":488},"       [12, 11, 10,  9,  8,  7],\n",[478,97777,97778],{"class":480,"line":2215},[478,97779,97780],{"class":488},"       [ 6,  5,  4,  3,  2,  1]])\n",[478,97782,97783],{"class":480,"line":2221},[478,97784,94308],{"class":488},[19,97786,97787],{},"⑦修改元素",[469,97789,97791],{"className":30758,"code":97790,"language":30760,"meta":54,"style":54},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[475,97792,97793,97798,97816,97821],{"__ignoreMap":54},[478,97794,97795],{"class":480,"line":481},[478,97796,97797],{"class":770},"#获取前两行和前两列\n",[478,97799,97800,97803,97805,97807,97809,97812,97814],{"class":480,"line":565},[478,97801,97802],{"class":714},"sub_a",[478,97804,759],{"class":710},[478,97806,97550],{"class":714},[478,97808,789],{"class":495},[478,97810,97811],{"class":714},",:",[478,97813,789],{"class":495},[478,97815,33626],{"class":714},[478,97817,97818],{"class":480,"line":579},[478,97819,97820],{"class":770},"#修改sub_a第一个元素的值\n",[478,97822,97823,97826,97828,97830,97832,97834,97836],{"class":480,"line":593},[478,97824,97825],{"class":714},"sub_a[",[478,97827,895],{"class":495},[478,97829,1079],{"class":714},[478,97831,895],{"class":495},[478,97833,1635],{"class":714},[478,97835,759],{"class":710},[478,97837,97838],{"class":495},"100\n",[19,97840,97841],{},"⑧数组复制copy()",[469,97843,97845],{"className":30758,"code":97844,"language":30760,"meta":54,"style":54},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[475,97846,97847,97852,97862,97867],{"__ignoreMap":54},[478,97848,97849],{"class":480,"line":481},[478,97850,97851],{"class":770},"#数组复制\n",[478,97853,97854,97857,97859],{"class":480,"line":565},[478,97855,97856],{"class":714},"copy_a",[478,97858,759],{"class":710},[478,97860,97861],{"class":714},"np.copy(sub_a)\n",[478,97863,97864],{"class":480,"line":579},[478,97865,97866],{"class":770},"#修改copy_a后不影响原数组\n",[478,97868,97869,97872,97874,97876,97878,97880,97882],{"class":480,"line":593},[478,97870,97871],{"class":714},"copy_a[",[478,97873,895],{"class":495},[478,97875,1079],{"class":714},[478,97877,895],{"class":495},[478,97879,1635],{"class":714},[478,97881,759],{"class":710},[478,97883,97838],{"class":495},[19,97885,97886],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[617,97888,97889],{},"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":54,"searchDepth":565,"depth":565,"links":97891},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97408,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97898,"title":97899,"body":97900,"description":23942,"extension":638,"meta":98392,"navigation":640,"path":98393,"seo":98394,"stem":98395,"__hash__":98396},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97901,"toc":98384},[97902,97905,97909,97912,97915,97968,97971,97996,97999,98018,98038,98041,98057,98061,98107,98111,98153,98157,98160,98163,98166,98169,98172,98234,98294,98298,98301,98358,98362,98367,98376,98381],[10,97903,97899],{"id":97904},"_5改变数组的维度",[14,97906,97908],{"id":97907},"_51-使用reshape","5.1 使用reshape()",[19,97910,97911],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97913,97914],{},"①一维数组转换为二维数组",[469,97916,97918],{"className":30758,"code":97917,"language":30760,"meta":54,"style":54},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[475,97919,97920,97936,97941,97946,97951],{"__ignoreMap":54},[478,97921,97922,97924,97926,97928,97930,97932,97934],{"class":480,"line":481},[478,97923,518],{"class":714},[478,97925,759],{"class":710},[478,97927,93382],{"class":714},[478,97929,193],{"class":495},[478,97931,1079],{"class":714},[478,97933,1223],{"class":495},[478,97935,720],{"class":714},[478,97937,97938],{"class":480,"line":565},[478,97939,97940],{"class":770},"#将一维数组进行转换\n",[478,97942,97943],{"class":480,"line":579},[478,97944,97945],{"class":770},"#注意点：元素个数不可以变\n",[478,97947,97948],{"class":480,"line":593},[478,97949,97950],{"class":770},"#转换维度要保持一致，不一致就异常！！！\n",[478,97952,97953,97955,97957,97960,97962,97964,97966],{"class":480,"line":1769},[478,97954,93686],{"class":714},[478,97956,759],{"class":710},[478,97958,97959],{"class":714},"a.reshape(",[478,97961,789],{"class":495},[478,97963,1079],{"class":714},[478,97965,1045],{"class":495},[478,97967,720],{"class":714},[19,97969,97970],{},"②一维数组转换为三维数组",[469,97972,97974],{"className":30758,"code":97973,"language":30760,"meta":54,"style":54},"aaa=a.reshape(2,3,2)\n",[475,97975,97976],{"__ignoreMap":54},[478,97977,97978,97980,97982,97984,97986,97988,97990,97992,97994],{"class":480,"line":481},[478,97979,95901],{"class":714},[478,97981,759],{"class":710},[478,97983,97959],{"class":714},[478,97985,789],{"class":495},[478,97987,1079],{"class":714},[478,97989,783],{"class":495},[478,97991,1079],{"class":714},[478,97993,789],{"class":495},[478,97995,720],{"class":714},[19,97997,97998],{},"③二维数组转化为一维数组",[469,98000,98002],{"className":30758,"code":98001,"language":30760,"meta":54,"style":54},"#知道元素个数：\naa.reshape(12)\n",[475,98003,98004,98009],{"__ignoreMap":54},[478,98005,98006],{"class":480,"line":481},[478,98007,98008],{"class":770},"#知道元素个数：\n",[478,98010,98011,98014,98016],{"class":480,"line":565},[478,98012,98013],{"class":714},"aa.reshape(",[478,98015,1198],{"class":495},[478,98017,720],{"class":714},[469,98019,98021],{"className":30758,"code":98020,"language":30760,"meta":54,"style":54},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[475,98022,98023,98028],{"__ignoreMap":54},[478,98024,98025],{"class":480,"line":481},[478,98026,98027],{"class":770},"#不知道元素个数，参数传递-1\n",[478,98029,98030,98032,98034,98036],{"class":480,"line":565},[478,98031,98013],{"class":714},[478,98033,1232],{"class":710},[478,98035,193],{"class":495},[478,98037,720],{"class":714},[19,98039,98040],{},"④三维数组转换为一维数组",[469,98042,98044],{"className":30758,"code":98043,"language":30760,"meta":54,"style":54},"aaa.reshape(-1)\n",[475,98045,98046],{"__ignoreMap":54},[478,98047,98048,98051,98053,98055],{"class":480,"line":481},[478,98049,98050],{"class":714},"aaa.reshape(",[478,98052,1232],{"class":710},[478,98054,193],{"class":495},[478,98056,720],{"class":714},[14,98058,98060],{"id":98059},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[469,98062,98064],{"className":30758,"code":98063,"language":30760,"meta":54,"style":54},"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",[475,98065,98066,98093,98098,98102],{"__ignoreMap":54},[478,98067,98068,98070,98072,98074,98076,98078,98080,98082,98084,98086,98088,98090],{"class":480,"line":481},[478,98069,93686],{"class":714},[478,98071,759],{"class":710},[478,98073,93382],{"class":714},[478,98075,193],{"class":495},[478,98077,1079],{"class":714},[478,98079,1223],{"class":495},[478,98081,93387],{"class":714},[478,98083,789],{"class":495},[478,98085,1079],{"class":714},[478,98087,1045],{"class":495},[478,98089,222],{"class":714},[478,98091,98092],{"class":770},"#转换为2行6列的数组\n",[478,98094,98095],{"class":480,"line":565},[478,98096,98097],{"class":714},"aa.revel()\n",[478,98099,98100],{"class":480,"line":579},[478,98101,93944],{"class":770},[478,98103,98104],{"class":480,"line":593},[478,98105,98106],{"class":770},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98108,98110],{"id":98109},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[469,98112,98114],{"className":30758,"code":98113,"language":30760,"meta":54,"style":54},"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",[475,98115,98116,98140,98145,98149],{"__ignoreMap":54},[478,98117,98118,98120,98122,98124,98126,98128,98130,98132,98134,98136,98138],{"class":480,"line":481},[478,98119,93686],{"class":714},[478,98121,759],{"class":710},[478,98123,93382],{"class":714},[478,98125,193],{"class":495},[478,98127,1079],{"class":714},[478,98129,1223],{"class":495},[478,98131,93387],{"class":714},[478,98133,789],{"class":495},[478,98135,1079],{"class":714},[478,98137,1045],{"class":495},[478,98139,720],{"class":714},[478,98141,98142],{"class":480,"line":565},[478,98143,98144],{"class":714},"aa.flatten()\n",[478,98146,98147],{"class":480,"line":579},[478,98148,93944],{"class":770},[478,98150,98151],{"class":480,"line":593},[478,98152,98106],{"class":770},[14,98154,98156],{"id":98155},"_54-使用resize","5.4 使用resize()",[19,98158,98159],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98161,98162],{},"通过resize方法可以改变数组的维度",[19,98164,98165],{},"#resize修改数组维度",[19,98167,98168],{},"#以元组的形式指定形状",[19,98170,98171],{},"#改变的是原数组",[469,98173,98175],{"className":30758,"code":98174,"language":30760,"meta":54,"style":54},"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",[475,98176,98177,98193,98213,98226,98230],{"__ignoreMap":54},[478,98178,98179,98181,98183,98185,98187,98189,98191],{"class":480,"line":481},[478,98180,518],{"class":714},[478,98182,759],{"class":710},[478,98184,93382],{"class":714},[478,98186,193],{"class":495},[478,98188,1079],{"class":714},[478,98190,1223],{"class":495},[478,98192,720],{"class":714},[478,98194,98195,98198,98200,98202,98204,98206,98208,98210],{"class":480,"line":565},[478,98196,98197],{"class":714},"a.shape",[478,98199,759],{"class":710},[478,98201,263],{"class":714},[478,98203,789],{"class":495},[478,98205,1079],{"class":714},[478,98207,1045],{"class":495},[478,98209,222],{"class":714},[478,98211,98212],{"class":770},"#改变了原数组\n",[478,98214,98215,98217,98219,98222,98224],{"class":480,"line":579},[478,98216,518],{"class":714},[478,98218,759],{"class":710},[478,98220,98221],{"class":714},"resize((",[478,98223,1198],{"class":495},[478,98225,30877],{"class":714},[478,98227,98228],{"class":480,"line":593},[478,98229,93944],{"class":770},[478,98231,98232],{"class":480,"line":1769},[478,98233,98106],{"class":770},[469,98235,98237],{"className":30758,"code":98236,"language":30760,"meta":54,"style":54},"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",[475,98238,98239,98252,98256,98260,98265,98270,98275,98280,98285,98290],{"__ignoreMap":54},[478,98240,98241,98244,98246,98248,98250],{"class":480,"line":481},[478,98242,98243],{"class":714},"a.resize((",[478,98245,1045],{"class":495},[478,98247,1079],{"class":714},[478,98249,789],{"class":495},[478,98251,30877],{"class":714},[478,98253,98254],{"class":480,"line":565},[478,98255,93944],{"class":770},[478,98257,98258],{"class":480,"line":579},[478,98259,94308],{"class":488},[478,98261,98262],{"class":480,"line":593},[478,98263,98264],{"class":488},"array([[ 1,  2],\n",[478,98266,98267],{"class":480,"line":1769},[478,98268,98269],{"class":488},"       [ 3,  4],\n",[478,98271,98272],{"class":480,"line":1783},[478,98273,98274],{"class":488},"       [ 5,  6],\n",[478,98276,98277],{"class":480,"line":1789},[478,98278,98279],{"class":488},"       [ 7,  8],\n",[478,98281,98282],{"class":480,"line":1880},[478,98283,98284],{"class":488},"       [ 9, 10],\n",[478,98286,98287],{"class":480,"line":1886},[478,98288,98289],{"class":488},"       [11, 12]])\n",[478,98291,98292],{"class":480,"line":1898},[478,98293,94308],{"class":488},[14,98295,98297],{"id":98296},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98299,98300],{},"改变了原数组",[469,98302,98304],{"className":30758,"code":98303,"language":30760,"meta":54,"style":54},"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",[475,98305,98306,98322,98338,98342,98346,98350,98354],{"__ignoreMap":54},[478,98307,98308,98310,98312,98314,98316,98318,98320],{"class":480,"line":481},[478,98309,518],{"class":714},[478,98311,759],{"class":710},[478,98313,93382],{"class":714},[478,98315,193],{"class":495},[478,98317,1079],{"class":714},[478,98319,1223],{"class":495},[478,98321,720],{"class":714},[478,98323,98324,98326,98328,98330,98332,98334,98336],{"class":480,"line":565},[478,98325,98197],{"class":714},[478,98327,759],{"class":710},[478,98329,263],{"class":714},[478,98331,789],{"class":495},[478,98333,1079],{"class":714},[478,98335,1045],{"class":495},[478,98337,720],{"class":714},[478,98339,98340],{"class":480,"line":579},[478,98341,93944],{"class":770},[478,98343,98344],{"class":480,"line":593},[478,98345,94308],{"class":488},[478,98347,98348],{"class":480,"line":1769},[478,98349,97568],{"class":488},[478,98351,98352],{"class":480,"line":1783},[478,98353,97573],{"class":488},[478,98355,98356],{"class":480,"line":1789},[478,98357,94308],{"class":488},[14,98359,98361],{"id":98360},"_56-重要比较","5.6 重要比较：",[19,98363,98364],{},[52,98365],{"alt":54,"src":98366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98368,98369,98370,98372,98373,98375],{},"口诀：NumPy 函数要么用 ",[475,98371,96343],{},"，要么用 ",[475,98374,31876],{},"，创建结构用 shape，造数据用 size",[19,98377,98378],{},[52,98379],{"alt":54,"src":98380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[617,98382,98383],{},"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":54,"searchDepth":565,"depth":565,"links":98385},[98386,98387,98388,98389,98390,98391],{"id":97907,"depth":565,"text":97908},{"id":98059,"depth":565,"text":98060},{"id":98109,"depth":565,"text":98110},{"id":98155,"depth":565,"text":98156},{"id":98296,"depth":565,"text":98297},{"id":98360,"depth":565,"text":98361},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97899,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98398,"title":98399,"body":98400,"description":23942,"extension":638,"meta":99472,"navigation":640,"path":99473,"seo":99474,"stem":99475,"__hash__":99476},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98401,"toc":99466},[98402,98405,98409,98412,98415,98418,98483,98486,98526,98529,98611,98614,98619,98641,98643,98648,98653,98656,98659,98814,98817,99019,99023,99026,99029,99097,99099,99104,99107,99110,99190,99194,99197,99199,99272,99274,99279,99281,99361,99365,99368,99371,99374,99377,99380,99383,99463],[10,98403,98399],{"id":98404},"_6数组的拼接",[14,98406,98408],{"id":98407},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98410,98411],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98413,98414],{},"函数内部传两个数列构成的数列或者元组",[19,98416,98417],{},"①一维数组的拼接",[469,98419,98421],{"className":30758,"code":98420,"language":30760,"meta":54,"style":54},"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",[475,98422,98423,98443,98463,98468,98473,98478],{"__ignoreMap":54},[478,98424,98425,98427,98429,98431,98433,98435,98437,98439,98441],{"class":480,"line":481},[478,98426,518],{"class":714},[478,98428,759],{"class":710},[478,98430,93404],{"class":714},[478,98432,193],{"class":495},[478,98434,1079],{"class":714},[478,98436,789],{"class":495},[478,98438,1079],{"class":714},[478,98440,783],{"class":495},[478,98442,5223],{"class":714},[478,98444,98445,98447,98449,98451,98453,98455,98457,98459,98461],{"class":480,"line":565},[478,98446,964],{"class":714},[478,98448,759],{"class":710},[478,98450,93404],{"class":714},[478,98452,994],{"class":495},[478,98454,1079],{"class":714},[478,98456,1020],{"class":495},[478,98458,1079],{"class":714},[478,98460,1045],{"class":495},[478,98462,5223],{"class":714},[478,98464,98465],{"class":480,"line":579},[478,98466,98467],{"class":770},"#调用concatenate进行数组拼接\n",[478,98469,98470],{"class":480,"line":593},[478,98471,98472],{"class":714},"np.concatenate((a,b))\n",[478,98474,98475],{"class":480,"line":1769},[478,98476,98477],{"class":770},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[478,98479,98480],{"class":480,"line":1783},[478,98481,98482],{"class":770},"#np.concatenate([a,b])\n",[19,98484,98485],{},"②一维多个数组拼接",[469,98487,98489],{"className":30758,"code":98488,"language":30760,"meta":54,"style":54},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[475,98490,98491,98496,98516,98521],{"__ignoreMap":54},[478,98492,98493],{"class":480,"line":481},[478,98494,98495],{"class":770},"#也可以多个数组进行拼接\n",[478,98497,98498,98500,98502,98504,98506,98508,98510,98512,98514],{"class":480,"line":565},[478,98499,989],{"class":714},[478,98501,759],{"class":710},[478,98503,93404],{"class":714},[478,98505,1146],{"class":495},[478,98507,1079],{"class":714},[478,98509,1172],{"class":495},[478,98511,1079],{"class":714},[478,98513,1223],{"class":495},[478,98515,5223],{"class":714},[478,98517,98518],{"class":480,"line":579},[478,98519,98520],{"class":714},"c\n",[478,98522,98523],{"class":480,"line":593},[478,98524,98525],{"class":714},"np.concatenate((a,b,c))\n",[19,98527,98528],{},"③二维数组拼接",[469,98530,98532],{"className":30758,"code":98531,"language":30760,"meta":54,"style":54},"#二维数组使用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",[475,98533,98534,98539,98563,98588,98593,98598],{"__ignoreMap":54},[478,98535,98536],{"class":480,"line":481},[478,98537,98538],{"class":770},"#二维数组使用concatenate进行拼接\n",[478,98540,98541,98543,98545,98547,98549,98551,98553,98555,98557,98559,98561],{"class":480,"line":565},[478,98542,93686],{"class":714},[478,98544,759],{"class":710},[478,98546,93382],{"class":714},[478,98548,193],{"class":495},[478,98550,1079],{"class":714},[478,98552,1223],{"class":495},[478,98554,93387],{"class":714},[478,98556,783],{"class":495},[478,98558,1079],{"class":714},[478,98560,994],{"class":495},[478,98562,720],{"class":714},[478,98564,98565,98568,98570,98572,98574,98576,98578,98580,98582,98584,98586],{"class":480,"line":579},[478,98566,98567],{"class":714},"bb",[478,98569,759],{"class":710},[478,98571,93382],{"class":714},[478,98573,1038],{"class":495},[478,98575,1079],{"class":714},[478,98577,1340],{"class":495},[478,98579,93387],{"class":714},[478,98581,783],{"class":495},[478,98583,1079],{"class":714},[478,98585,994],{"class":495},[478,98587,720],{"class":714},[478,98589,98590],{"class":480,"line":593},[478,98591,98592],{"class":770},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[478,98594,98595],{"class":480,"line":1769},[478,98596,98597],{"class":770},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[478,98599,98600,98603,98605,98607,98609],{"class":480,"line":1783},[478,98601,98602],{"class":714},"np.concatenate((aa,bb),",[478,98604,47894],{"class":5782},[478,98606,759],{"class":710},[478,98608,895],{"class":495},[478,98610,720],{"class":714},[19,98612,98613],{},"结果：",[19,98615,98616],{},[52,98617],{"alt":54,"src":98618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[469,98620,98622],{"className":30758,"code":98621,"language":30760,"meta":54,"style":54},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[475,98623,98624,98629],{"__ignoreMap":54},[478,98625,98626],{"class":480,"line":481},[478,98627,98628],{"class":770},"#指定axis为1进行拼接\n",[478,98630,98631,98633,98635,98637,98639],{"class":480,"line":565},[478,98632,98602],{"class":714},[478,98634,47894],{"class":5782},[478,98636,759],{"class":710},[478,98638,193],{"class":495},[478,98640,720],{"class":714},[19,98642,98613],{},[19,98644,98645],{},[52,98646],{"alt":54,"src":98647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98649,98650],{},[45,98651,98652],{},"二维数组总结：0竖着方向，1横着方向",[19,98654,98655],{},"④三维数组拼接",[19,98657,98658],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[469,98660,98662],{"className":30758,"code":98661,"language":30760,"meta":54,"style":54},"#两个三行六列\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",[475,98663,98664,98669,98697,98727,98732,98749,98754,98759,98764,98781,98786,98791,98796,98809],{"__ignoreMap":54},[478,98665,98666],{"class":480,"line":481},[478,98667,98668],{"class":770},"#两个三行六列\n",[478,98670,98671,98673,98675,98677,98679,98681,98683,98685,98687,98689,98691,98693,98695],{"class":480,"line":565},[478,98672,95901],{"class":714},[478,98674,759],{"class":710},[478,98676,93382],{"class":714},[478,98678,193],{"class":495},[478,98680,1079],{"class":714},[478,98682,1026],{"class":495},[478,98684,93387],{"class":714},[478,98686,789],{"class":495},[478,98688,1079],{"class":714},[478,98690,783],{"class":495},[478,98692,1079],{"class":714},[478,98694,1045],{"class":495},[478,98696,720],{"class":714},[478,98698,98699,98702,98704,98706,98708,98710,98713,98715,98717,98719,98721,98723,98725],{"class":480,"line":579},[478,98700,98701],{"class":714},"bbb",[478,98703,759],{"class":710},[478,98705,93382],{"class":714},[478,98707,1038],{"class":495},[478,98709,1079],{"class":714},[478,98711,98712],{"class":495},"137",[478,98714,93387],{"class":714},[478,98716,789],{"class":495},[478,98718,1079],{"class":714},[478,98720,783],{"class":495},[478,98722,1079],{"class":714},[478,98724,1045],{"class":495},[478,98726,720],{"class":714},[478,98728,98729],{"class":480,"line":593},[478,98730,98731],{"class":770},"#axis=0\n",[478,98733,98734,98736,98738,98741,98743,98745,98747],{"class":480,"line":1769},[478,98735,1391],{"class":714},[478,98737,759],{"class":710},[478,98739,98740],{"class":714},"np.concatenate((aaa,bbb),",[478,98742,47894],{"class":5782},[478,98744,759],{"class":710},[478,98746,895],{"class":495},[478,98748,720],{"class":714},[478,98750,98751],{"class":480,"line":1783},[478,98752,98753],{"class":714},"s.shape\n",[478,98755,98756],{"class":480,"line":1789},[478,98757,98758],{"class":770},"#输出：(4,3,6)\n",[478,98760,98761],{"class":480,"line":1880},[478,98762,98763],{"class":770},"#axis=1\n",[478,98765,98766,98769,98771,98773,98775,98777,98779],{"class":480,"line":1886},[478,98767,98768],{"class":714},"ss",[478,98770,759],{"class":710},[478,98772,98740],{"class":714},[478,98774,47894],{"class":5782},[478,98776,759],{"class":710},[478,98778,193],{"class":495},[478,98780,720],{"class":714},[478,98782,98783],{"class":480,"line":1898},[478,98784,98785],{"class":714},"ss.shape\n",[478,98787,98788],{"class":480,"line":2180},[478,98789,98790],{"class":770},"#输出：(2,6,6)\n",[478,98792,98793],{"class":480,"line":2185},[478,98794,98795],{"class":770},"#axis=2\n",[478,98797,98798,98800,98802,98804,98806],{"class":480,"line":2191},[478,98799,98740],{"class":714},[478,98801,47894],{"class":5782},[478,98803,759],{"class":710},[478,98805,789],{"class":495},[478,98807,98808],{"class":714},").shape\n",[478,98810,98811],{"class":480,"line":2196},[478,98812,98813],{"class":770},"#输出：（2，3，12）\n",[19,98815,98816],{},"⑤四维数组拼接",[469,98818,98820],{"className":30758,"code":98819,"language":30760,"meta":54,"style":54},"#两个三行六列\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",[475,98821,98822,98826,98854,98882,98907,98933,98937,98950,98955,98959,98971,98976,98980,98992,98997,99002,99014],{"__ignoreMap":54},[478,98823,98824],{"class":480,"line":481},[478,98825,98668],{"class":770},[478,98827,98828,98830,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850,98852],{"class":480,"line":565},[478,98829,95901],{"class":714},[478,98831,759],{"class":710},[478,98833,93382],{"class":714},[478,98835,193],{"class":495},[478,98837,1079],{"class":714},[478,98839,1026],{"class":495},[478,98841,93387],{"class":714},[478,98843,789],{"class":495},[478,98845,1079],{"class":714},[478,98847,783],{"class":495},[478,98849,1079],{"class":714},[478,98851,1045],{"class":495},[478,98853,720],{"class":714},[478,98855,98856,98858,98860,98862,98864,98866,98868,98870,98872,98874,98876,98878,98880],{"class":480,"line":579},[478,98857,98701],{"class":714},[478,98859,759],{"class":710},[478,98861,93382],{"class":714},[478,98863,1038],{"class":495},[478,98865,1079],{"class":714},[478,98867,98712],{"class":495},[478,98869,93387],{"class":714},[478,98871,789],{"class":495},[478,98873,1079],{"class":714},[478,98875,783],{"class":495},[478,98877,1079],{"class":714},[478,98879,1045],{"class":495},[478,98881,720],{"class":714},[478,98883,98884,98887,98889,98891,98893,98895,98897,98899,98901,98903,98905],{"class":480,"line":593},[478,98885,98886],{"class":714},"aaaa",[478,98888,759],{"class":710},[478,98890,98050],{"class":714},[478,98892,789],{"class":495},[478,98894,1079],{"class":714},[478,98896,783],{"class":495},[478,98898,1079],{"class":714},[478,98900,783],{"class":495},[478,98902,1079],{"class":714},[478,98904,789],{"class":495},[478,98906,720],{"class":714},[478,98908,98909,98912,98914,98917,98919,98921,98923,98925,98927,98929,98931],{"class":480,"line":1769},[478,98910,98911],{"class":714},"bbbb",[478,98913,759],{"class":710},[478,98915,98916],{"class":714},"bbb.reshape(",[478,98918,789],{"class":495},[478,98920,1079],{"class":714},[478,98922,783],{"class":495},[478,98924,1079],{"class":714},[478,98926,783],{"class":495},[478,98928,1079],{"class":714},[478,98930,789],{"class":495},[478,98932,720],{"class":714},[478,98934,98935],{"class":480,"line":1783},[478,98936,98731],{"class":770},[478,98938,98939,98942,98944,98946,98948],{"class":480,"line":1789},[478,98940,98941],{"class":714},"np.concatenate((aaaa,bbbb),",[478,98943,47894],{"class":5782},[478,98945,759],{"class":710},[478,98947,895],{"class":495},[478,98949,98808],{"class":714},[478,98951,98952],{"class":480,"line":1880},[478,98953,98954],{"class":770},"#结果：（4，3，3，2）\n",[478,98956,98957],{"class":480,"line":1886},[478,98958,98763],{"class":770},[478,98960,98961,98963,98965,98967,98969],{"class":480,"line":1898},[478,98962,98941],{"class":714},[478,98964,47894],{"class":5782},[478,98966,759],{"class":710},[478,98968,193],{"class":495},[478,98970,98808],{"class":714},[478,98972,98973],{"class":480,"line":2180},[478,98974,98975],{"class":770},"#结果：（2，6，3，2）\n",[478,98977,98978],{"class":480,"line":2185},[478,98979,98795],{"class":770},[478,98981,98982,98984,98986,98988,98990],{"class":480,"line":2191},[478,98983,98941],{"class":714},[478,98985,47894],{"class":5782},[478,98987,759],{"class":710},[478,98989,789],{"class":495},[478,98991,98808],{"class":714},[478,98993,98994],{"class":480,"line":2196},[478,98995,98996],{"class":770},"#结果：（2，3，6，2）\n",[478,98998,98999],{"class":480,"line":2210},[478,99000,99001],{"class":770},"#axis=3\n",[478,99003,99004,99006,99008,99010,99012],{"class":480,"line":2215},[478,99005,98941],{"class":714},[478,99007,47894],{"class":5782},[478,99009,759],{"class":710},[478,99011,783],{"class":495},[478,99013,98808],{"class":714},[478,99015,99016],{"class":480,"line":2221},[478,99017,99018],{"class":770},"#结果：（2，3，3，4）\n",[14,99020,99022],{"id":99021},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99024,99025],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99027,99028],{},"①二维数组",[469,99030,99032],{"className":30758,"code":99031,"language":30760,"meta":54,"style":54},"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",[475,99033,99034,99058,99082,99087,99092],{"__ignoreMap":54},[478,99035,99036,99038,99040,99042,99044,99046,99048,99050,99052,99054,99056],{"class":480,"line":481},[478,99037,93686],{"class":714},[478,99039,759],{"class":710},[478,99041,93382],{"class":714},[478,99043,193],{"class":495},[478,99045,1079],{"class":714},[478,99047,1223],{"class":495},[478,99049,93387],{"class":714},[478,99051,783],{"class":495},[478,99053,1079],{"class":714},[478,99055,994],{"class":495},[478,99057,720],{"class":714},[478,99059,99060,99062,99064,99066,99068,99070,99072,99074,99076,99078,99080],{"class":480,"line":565},[478,99061,98567],{"class":714},[478,99063,759],{"class":710},[478,99065,93382],{"class":714},[478,99067,1038],{"class":495},[478,99069,1079],{"class":714},[478,99071,1340],{"class":495},[478,99073,93387],{"class":714},[478,99075,783],{"class":495},[478,99077,1079],{"class":714},[478,99079,994],{"class":495},[478,99081,720],{"class":714},[478,99083,99084],{"class":480,"line":579},[478,99085,99086],{"class":714},"np.hstack((aa,bb))\n",[478,99088,99089],{"class":480,"line":593},[478,99090,99091],{"class":770},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[478,99093,99094],{"class":480,"line":1769},[478,99095,99096],{"class":770},"#np.hstack([aa,bb])\n",[19,99098,98613],{},[19,99100,99101],{},[52,99102],{"alt":54,"src":99103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99105,99106],{},"等效于concatenate()函数中axis=1时的情况",[19,99108,99109],{},"②三维数组",[469,99111,99113],{"className":30758,"code":99112,"language":30760,"meta":54,"style":54},"#两个三行六列\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",[475,99114,99115,99119,99147,99175,99180,99185],{"__ignoreMap":54},[478,99116,99117],{"class":480,"line":481},[478,99118,98668],{"class":770},[478,99120,99121,99123,99125,99127,99129,99131,99133,99135,99137,99139,99141,99143,99145],{"class":480,"line":565},[478,99122,95901],{"class":714},[478,99124,759],{"class":710},[478,99126,93382],{"class":714},[478,99128,193],{"class":495},[478,99130,1079],{"class":714},[478,99132,1026],{"class":495},[478,99134,93387],{"class":714},[478,99136,789],{"class":495},[478,99138,1079],{"class":714},[478,99140,783],{"class":495},[478,99142,1079],{"class":714},[478,99144,1045],{"class":495},[478,99146,720],{"class":714},[478,99148,99149,99151,99153,99155,99157,99159,99161,99163,99165,99167,99169,99171,99173],{"class":480,"line":579},[478,99150,98701],{"class":714},[478,99152,759],{"class":710},[478,99154,93382],{"class":714},[478,99156,1038],{"class":495},[478,99158,1079],{"class":714},[478,99160,98712],{"class":495},[478,99162,93387],{"class":714},[478,99164,789],{"class":495},[478,99166,1079],{"class":714},[478,99168,783],{"class":495},[478,99170,1079],{"class":714},[478,99172,1045],{"class":495},[478,99174,720],{"class":714},[478,99176,99177],{"class":480,"line":593},[478,99178,99179],{"class":770},"#使用hstack\n",[478,99181,99182],{"class":480,"line":1769},[478,99183,99184],{"class":714},"np.hstack((aaa,bbb)).shape\n",[478,99186,99187],{"class":480,"line":1783},[478,99188,99189],{"class":770},"#输出：（2，6，6）\n",[14,99191,99193],{"id":99192},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99195,99196],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99198,99028],{},[469,99200,99202],{"className":30758,"code":99201,"language":30760,"meta":54,"style":54},"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",[475,99203,99204,99228,99252,99257,99262,99267],{"__ignoreMap":54},[478,99205,99206,99208,99210,99212,99214,99216,99218,99220,99222,99224,99226],{"class":480,"line":481},[478,99207,93686],{"class":714},[478,99209,759],{"class":710},[478,99211,93382],{"class":714},[478,99213,193],{"class":495},[478,99215,1079],{"class":714},[478,99217,1223],{"class":495},[478,99219,93387],{"class":714},[478,99221,783],{"class":495},[478,99223,1079],{"class":714},[478,99225,994],{"class":495},[478,99227,720],{"class":714},[478,99229,99230,99232,99234,99236,99238,99240,99242,99244,99246,99248,99250],{"class":480,"line":565},[478,99231,98567],{"class":714},[478,99233,759],{"class":710},[478,99235,93382],{"class":714},[478,99237,1038],{"class":495},[478,99239,1079],{"class":714},[478,99241,1340],{"class":495},[478,99243,93387],{"class":714},[478,99245,783],{"class":495},[478,99247,1079],{"class":714},[478,99249,994],{"class":495},[478,99251,720],{"class":714},[478,99253,99254],{"class":480,"line":579},[478,99255,99256],{"class":770},"#vstack 垂直方向进行堆叠\n",[478,99258,99259],{"class":480,"line":593},[478,99260,99261],{"class":714},"np.vstack((aa,bb))\n",[478,99263,99264],{"class":480,"line":1769},[478,99265,99266],{"class":770},"#与hstack传的参数类似，等价于：\n",[478,99268,99269],{"class":480,"line":1783},[478,99270,99271],{"class":714},"np.vstack([aa,bb])\n",[19,99273,98613],{},[19,99275,99276],{},[52,99277],{"alt":54,"src":99278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99280,99109],{},[469,99282,99284],{"className":30758,"code":99283,"language":30760,"meta":54,"style":54},"#两个三行六列\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",[475,99285,99286,99290,99318,99346,99351,99356],{"__ignoreMap":54},[478,99287,99288],{"class":480,"line":481},[478,99289,98668],{"class":770},[478,99291,99292,99294,99296,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316],{"class":480,"line":565},[478,99293,95901],{"class":714},[478,99295,759],{"class":710},[478,99297,93382],{"class":714},[478,99299,193],{"class":495},[478,99301,1079],{"class":714},[478,99303,1026],{"class":495},[478,99305,93387],{"class":714},[478,99307,789],{"class":495},[478,99309,1079],{"class":714},[478,99311,783],{"class":495},[478,99313,1079],{"class":714},[478,99315,1045],{"class":495},[478,99317,720],{"class":714},[478,99319,99320,99322,99324,99326,99328,99330,99332,99334,99336,99338,99340,99342,99344],{"class":480,"line":579},[478,99321,98701],{"class":714},[478,99323,759],{"class":710},[478,99325,93382],{"class":714},[478,99327,1038],{"class":495},[478,99329,1079],{"class":714},[478,99331,98712],{"class":495},[478,99333,93387],{"class":714},[478,99335,789],{"class":495},[478,99337,1079],{"class":714},[478,99339,783],{"class":495},[478,99341,1079],{"class":714},[478,99343,1045],{"class":495},[478,99345,720],{"class":714},[478,99347,99348],{"class":480,"line":593},[478,99349,99350],{"class":770},"#使用vstack\n",[478,99352,99353],{"class":480,"line":1769},[478,99354,99355],{"class":714},"np.vstack((aaa,bbb)).shape\n",[478,99357,99358],{"class":480,"line":1783},[478,99359,99360],{"class":770},"#输出：（4，3，6）\n",[14,99362,99364],{"id":99363},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99366,99367],{},"该方法是三维数组特有的方法",[19,99369,99370],{},"也就是说",[19,99372,99373],{},"一维数组拼接方法用：concatenate()",[19,99375,99376],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99378,99379],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99381,99382],{},"四维数组及多维数组只能用concatenate进行拼接",[469,99384,99386],{"className":30758,"code":99385,"language":30760,"meta":54,"style":54},"#两个三行六列\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",[475,99387,99388,99392,99420,99448,99453,99458],{"__ignoreMap":54},[478,99389,99390],{"class":480,"line":481},[478,99391,98668],{"class":770},[478,99393,99394,99396,99398,99400,99402,99404,99406,99408,99410,99412,99414,99416,99418],{"class":480,"line":565},[478,99395,95901],{"class":714},[478,99397,759],{"class":710},[478,99399,93382],{"class":714},[478,99401,193],{"class":495},[478,99403,1079],{"class":714},[478,99405,1026],{"class":495},[478,99407,93387],{"class":714},[478,99409,789],{"class":495},[478,99411,1079],{"class":714},[478,99413,783],{"class":495},[478,99415,1079],{"class":714},[478,99417,1045],{"class":495},[478,99419,720],{"class":714},[478,99421,99422,99424,99426,99428,99430,99432,99434,99436,99438,99440,99442,99444,99446],{"class":480,"line":579},[478,99423,98701],{"class":714},[478,99425,759],{"class":710},[478,99427,93382],{"class":714},[478,99429,1038],{"class":495},[478,99431,1079],{"class":714},[478,99433,98712],{"class":495},[478,99435,93387],{"class":714},[478,99437,789],{"class":495},[478,99439,1079],{"class":714},[478,99441,783],{"class":495},[478,99443,1079],{"class":714},[478,99445,1045],{"class":495},[478,99447,720],{"class":714},[478,99449,99450],{"class":480,"line":593},[478,99451,99452],{"class":770},"#使用dstack\n",[478,99454,99455],{"class":480,"line":1769},[478,99456,99457],{"class":714},"np.dstack((aaa,bbb)).shape\n",[478,99459,99460],{"class":480,"line":1783},[478,99461,99462],{"class":770},"#结果：（2，3，12）\n",[617,99464,99465],{},"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":54,"searchDepth":565,"depth":565,"links":99467},[99468,99469,99470,99471],{"id":98407,"depth":565,"text":98408},{"id":99021,"depth":565,"text":99022},{"id":99192,"depth":565,"text":99193},{"id":99363,"depth":565,"text":99364},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98399,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99478,"title":99479,"body":99480,"description":23942,"extension":638,"meta":99755,"navigation":640,"path":99756,"seo":99757,"stem":99758,"__hash__":99759},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99481,"toc":99753},[99482,99485,99488,99582,99585,99588,99591,99594,99597,99600,99603,99606,99750],[10,99483,99479],{"id":99484},"_7数组转置",[19,99486,99487],{},"使用transpose()函数",[469,99489,99491],{"className":30758,"code":99490,"language":30760,"meta":54,"style":54},"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",[475,99492,99493,99503,99527,99532,99537,99542,99547,99555,99559,99563,99568,99573,99578],{"__ignoreMap":54},[478,99494,99495,99497,99499,99501],{"class":480,"line":481},[478,99496,30772],{"class":710},[478,99498,31760],{"class":714},[478,99500,31763],{"class":710},[478,99502,31766],{"class":714},[478,99504,99505,99507,99509,99511,99513,99515,99517,99519,99521,99523,99525],{"class":480,"line":565},[478,99506,518],{"class":714},[478,99508,759],{"class":710},[478,99510,32097],{"class":714},[478,99512,193],{"class":495},[478,99514,1079],{"class":714},[478,99516,1223],{"class":495},[478,99518,93387],{"class":714},[478,99520,994],{"class":495},[478,99522,1079],{"class":714},[478,99524,783],{"class":495},[478,99526,720],{"class":714},[478,99528,99529],{"class":480,"line":579},[478,99530,99531],{"class":770},"#二维数组转置\n",[478,99533,99534],{"class":480,"line":593},[478,99535,99536],{"class":770},"#调用transpose()函数\n",[478,99538,99539],{"class":480,"line":1769},[478,99540,99541],{"class":714},"a.transpose()\n",[478,99543,99544],{"class":480,"line":1783},[478,99545,99546],{"class":770},"#对于二维数组也可以采用.T来实现\n",[478,99548,99549,99552],{"class":480,"line":1789},[478,99550,99551],{"class":714},"a.T",[478,99553,99554],{"class":770},"#与上述代码一样\n",[478,99556,99557],{"class":480,"line":1880},[478,99558,93944],{"class":770},[478,99560,99561],{"class":480,"line":1886},[478,99562,94308],{"class":488},[478,99564,99565],{"class":480,"line":1898},[478,99566,99567],{"class":488},"array([[ 1,  4,  7, 10],\n",[478,99569,99570],{"class":480,"line":2180},[478,99571,99572],{"class":488},"       [ 2,  5,  8, 11],\n",[478,99574,99575],{"class":480,"line":2185},[478,99576,99577],{"class":488},"       [ 3,  6,  9, 12]])\n",[478,99579,99580],{"class":480,"line":2191},[478,99581,94308],{"class":488},[19,99583,99584],{},"也可以使用np.transpose()的形式",[19,99586,99587],{},"#多维数组进行转置 np.transpose()",[19,99589,99590],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99592,99593],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99595,99596],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99598,99599],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99601,99602],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99604,99605],{},"四维及以上的数组也是一样的道理",[469,99607,99609],{"className":30758,"code":99608,"language":30760,"meta":54,"style":54},"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",[475,99610,99611,99639,99644,99649,99654,99672,99677,99709,99714,99719,99724,99745],{"__ignoreMap":54},[478,99612,99613,99615,99617,99619,99621,99623,99625,99627,99629,99631,99633,99635,99637],{"class":480,"line":481},[478,99614,1515],{"class":714},[478,99616,759],{"class":710},[478,99618,93382],{"class":714},[478,99620,193],{"class":495},[478,99622,1079],{"class":714},[478,99624,1026],{"class":495},[478,99626,93387],{"class":714},[478,99628,783],{"class":495},[478,99630,1079],{"class":714},[478,99632,1045],{"class":495},[478,99634,1079],{"class":714},[478,99636,789],{"class":495},[478,99638,720],{"class":714},[478,99640,99641],{"class":480,"line":565},[478,99642,99643],{"class":714},"x.shape\n",[478,99645,99646],{"class":480,"line":579},[478,99647,99648],{"class":770},"#结果：（3,6,2）\n",[478,99650,99651],{"class":480,"line":593},[478,99652,99653],{"class":770},"#使用np.transpose()进行转置 变为(2,6,3)\n",[478,99655,99656,99659,99661,99663,99665,99667,99669],{"class":480,"line":1769},[478,99657,99658],{"class":714},"np.transpose(x,(",[478,99660,789],{"class":495},[478,99662,1079],{"class":714},[478,99664,193],{"class":495},[478,99666,1079],{"class":714},[478,99668,895],{"class":495},[478,99670,99671],{"class":714},")).shape\n",[478,99673,99674],{"class":480,"line":1783},[478,99675,99676],{"class":770},"#结果：(2,6,3)\n",[478,99678,99679,99681,99683,99685,99687,99689,99691,99693,99695,99697,99699,99701,99703,99705,99707],{"class":480,"line":1789},[478,99680,98886],{"class":714},[478,99682,759],{"class":710},[478,99684,93382],{"class":714},[478,99686,193],{"class":495},[478,99688,1079],{"class":714},[478,99690,1026],{"class":495},[478,99692,93387],{"class":714},[478,99694,783],{"class":495},[478,99696,1079],{"class":714},[478,99698,789],{"class":495},[478,99700,1079],{"class":714},[478,99702,193],{"class":495},[478,99704,1079],{"class":714},[478,99706,1045],{"class":495},[478,99708,720],{"class":714},[478,99710,99711],{"class":480,"line":1880},[478,99712,99713],{"class":714},"aaaa.shape\n",[478,99715,99716],{"class":480,"line":1886},[478,99717,99718],{"class":770},"#结果：（3，2，1，6）\n",[478,99720,99721],{"class":480,"line":1898},[478,99722,99723],{"class":770},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[478,99725,99726,99729,99731,99733,99735,99737,99739,99741,99743],{"class":480,"line":2180},[478,99727,99728],{"class":714},"np.transpose(aaaa,(",[478,99730,193],{"class":495},[478,99732,1079],{"class":714},[478,99734,789],{"class":495},[478,99736,1079],{"class":714},[478,99738,895],{"class":495},[478,99740,1079],{"class":714},[478,99742,783],{"class":495},[478,99744,99671],{"class":714},[478,99746,99747],{"class":480,"line":2185},[478,99748,99749],{"class":770},"#结果：(2,1,3,6)\n",[617,99751,99752],{},"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":54,"searchDepth":565,"depth":565,"links":99754},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99479,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99761,"title":99762,"body":99763,"description":23942,"extension":638,"meta":100497,"navigation":640,"path":100498,"seo":100499,"stem":100500,"__hash__":100501},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99764,"toc":100495},[99765,99768,99771,99774,99777,99780,99783,99786,99789,99898,99901,99904,100492],[10,99766,99762],{"id":99767},"_8数组分割",[19,99769,99770],{},"split分割",[19,99772,99773],{},"numpy.split(ary,indics_or_sections,axis)",[19,99775,99776],{},"解释：",[19,99778,99779],{},"ary:被分割的数组",[19,99781,99782],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99784,99785],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99787,99788],{},"①一维数组的分割",[469,99790,99792],{"className":30758,"code":99791,"language":30760,"meta":54,"style":54},"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",[475,99793,99794,99810,99815,99824,99828,99833,99841,99845,99850,99855,99868,99872,99877,99889,99893],{"__ignoreMap":54},[478,99795,99796,99798,99800,99802,99804,99806,99808],{"class":480,"line":481},[478,99797,518],{"class":714},[478,99799,759],{"class":710},[478,99801,93382],{"class":714},[478,99803,193],{"class":495},[478,99805,1079],{"class":714},[478,99807,1121],{"class":495},[478,99809,720],{"class":714},[478,99811,99812],{"class":480,"line":565},[478,99813,99814],{"class":770},"#如果传入整数，必须能够平分，否则会报错\n",[478,99816,99817,99820,99822],{"class":480,"line":579},[478,99818,99819],{"class":714},"np.split(a,",[478,99821,789],{"class":495},[478,99823,720],{"class":714},[478,99825,99826],{"class":480,"line":593},[478,99827,93944],{"class":770},[478,99829,99830],{"class":480,"line":1769},[478,99831,99832],{"class":770},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[478,99834,99835,99837,99839],{"class":480,"line":1783},[478,99836,99819],{"class":714},[478,99838,994],{"class":495},[478,99840,720],{"class":714},[478,99842,99843],{"class":480,"line":1789},[478,99844,93944],{"class":770},[478,99846,99847],{"class":480,"line":1880},[478,99848,99849],{"class":770},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[478,99851,99852],{"class":480,"line":1886},[478,99853,99854],{"class":770},"#传入数组\n",[478,99856,99857,99860,99862,99864,99866],{"class":480,"line":1898},[478,99858,99859],{"class":714},"np.split(a,[",[478,99861,783],{"class":495},[478,99863,1079],{"class":714},[478,99865,1020],{"class":495},[478,99867,5223],{"class":714},[478,99869,99870],{"class":480,"line":2180},[478,99871,93944],{"class":770},[478,99873,99874],{"class":480,"line":2185},[478,99875,99876],{"class":770},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[478,99878,99879,99881,99883,99885,99887],{"class":480,"line":2191},[478,99880,99859],{"class":714},[478,99882,1020],{"class":495},[478,99884,1079],{"class":714},[478,99886,1070],{"class":495},[478,99888,5223],{"class":714},[478,99890,99891],{"class":480,"line":2196},[478,99892,93944],{"class":770},[478,99894,99895],{"class":480,"line":2210},[478,99896,99897],{"class":770},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99899,99900],{},"②二维数组的分割",[19,99902,99903],{},"使用split()",[469,99905,99907],{"className":30758,"code":99906,"language":30760,"meta":54,"style":54},"#二维数组分割\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",[475,99908,99909,99914,99938,99943,99952,99956,99960,99965,99970,99975,99980,99985,99990,99995,99999,100012,100016,100020,100024,100028,100032,100037,100042,100047,100051,100056,100072,100076,100080,100085,100090,100095,100100,100105,100110,100115,100120,100125,100130,100135,100140,100145,100150,100155,100160,100165,100170,100174,100178,100198,100202,100206,100211,100216,100221,100226,100231,100236,100241,100246,100251,100256,100261,100266,100271,100276,100281,100286,100291,100296,100300,100305,100314,100318,100322,100326,100330,100334,100338,100342,100346,100350,100359,100363,100367,100371,100375,100379,100383,100387,100391,100395,100399,100403,100407,100411,100415,100419,100423,100427,100431,100435,100439,100443,100456,100460,100464,100468,100472,100476,100480,100484,100488],{"__ignoreMap":54},[478,99910,99911],{"class":480,"line":481},[478,99912,99913],{"class":770},"#二维数组分割\n",[478,99915,99916,99918,99920,99922,99924,99926,99928,99930,99932,99934,99936],{"class":480,"line":565},[478,99917,93686],{"class":714},[478,99919,759],{"class":710},[478,99921,93382],{"class":714},[478,99923,193],{"class":495},[478,99925,1079],{"class":714},[478,99927,1026],{"class":495},[478,99929,93387],{"class":714},[478,99931,1045],{"class":495},[478,99933,1079],{"class":714},[478,99935,1045],{"class":495},[478,99937,720],{"class":714},[478,99939,99940],{"class":480,"line":579},[478,99941,99942],{"class":770},"#默认axis=0  传入整数平均分,按行来的\n",[478,99944,99945,99948,99950],{"class":480,"line":593},[478,99946,99947],{"class":714},"np.split(aa,",[478,99949,783],{"class":495},[478,99951,720],{"class":714},[478,99953,99954],{"class":480,"line":1769},[478,99955,96144],{"class":770},[478,99957,99958],{"class":480,"line":1783},[478,99959,94308],{"class":488},[478,99961,99962],{"class":480,"line":1789},[478,99963,99964],{"class":488},"[array([[ 1,  2,  3,  4,  5,  6],\n",[478,99966,99967],{"class":480,"line":1880},[478,99968,99969],{"class":488},"        [ 7,  8,  9, 10, 11, 12]]),\n",[478,99971,99972],{"class":480,"line":1886},[478,99973,99974],{"class":488}," array([[13, 14, 15, 16, 17, 18],\n",[478,99976,99977],{"class":480,"line":1898},[478,99978,99979],{"class":488},"        [19, 20, 21, 22, 23, 24]]),\n",[478,99981,99982],{"class":480,"line":2180},[478,99983,99984],{"class":488}," array([[25, 26, 27, 28, 29, 30],\n",[478,99986,99987],{"class":480,"line":2185},[478,99988,99989],{"class":488},"        [31, 32, 33, 34, 35, 36]])]\n",[478,99991,99992],{"class":480,"line":2191},[478,99993,99994],{"class":488}," '''\n",[478,99996,99997],{"class":480,"line":2196},[478,99998,99854],{"class":770},[478,100000,100001,100004,100006,100008,100010],{"class":480,"line":2210},[478,100002,100003],{"class":714},"np.split(aa,[",[478,100005,789],{"class":495},[478,100007,1079],{"class":714},[478,100009,1020],{"class":495},[478,100011,5223],{"class":714},[478,100013,100014],{"class":480,"line":2215},[478,100015,96144],{"class":770},[478,100017,100018],{"class":480,"line":2221},[478,100019,94308],{"class":488},[478,100021,100022],{"class":480,"line":2241},[478,100023,99964],{"class":488},[478,100025,100026],{"class":480,"line":2246},[478,100027,99969],{"class":488},[478,100029,100030],{"class":480,"line":2260},[478,100031,99974],{"class":488},[478,100033,100034],{"class":480,"line":2265},[478,100035,100036],{"class":488},"        [19, 20, 21, 22, 23, 24],\n",[478,100038,100039],{"class":480,"line":2294},[478,100040,100041],{"class":488},"        [25, 26, 27, 28, 29, 30]]),\n",[478,100043,100044],{"class":480,"line":2299},[478,100045,100046],{"class":488}," array([[31, 32, 33, 34, 35, 36]])]\n",[478,100048,100049],{"class":480,"line":2316},[478,100050,94308],{"class":488},[478,100052,100053],{"class":480,"line":2321},[478,100054,100055],{"class":770},"#axis=1 按照列来分\n",[478,100057,100058,100060,100062,100064,100066,100068,100070],{"class":480,"line":2326},[478,100059,99947],{"class":714},[478,100061,783],{"class":495},[478,100063,1079],{"class":714},[478,100065,47894],{"class":5782},[478,100067,759],{"class":710},[478,100069,193],{"class":495},[478,100071,720],{"class":714},[478,100073,100074],{"class":480,"line":2331},[478,100075,96144],{"class":770},[478,100077,100078],{"class":480,"line":2345},[478,100079,94308],{"class":488},[478,100081,100082],{"class":480,"line":2350},[478,100083,100084],{"class":488},"[array([[ 1,  2],\n",[478,100086,100087],{"class":480,"line":3143},[478,100088,100089],{"class":488},"        [ 7,  8],\n",[478,100091,100092],{"class":480,"line":3157},[478,100093,100094],{"class":488},"        [13, 14],\n",[478,100096,100097],{"class":480,"line":3165},[478,100098,100099],{"class":488},"        [19, 20],\n",[478,100101,100102],{"class":480,"line":3170},[478,100103,100104],{"class":488},"        [25, 26],\n",[478,100106,100107],{"class":480,"line":3176},[478,100108,100109],{"class":488},"        [31, 32]]),\n",[478,100111,100112],{"class":480,"line":3182},[478,100113,100114],{"class":488}," array([[ 3,  4],\n",[478,100116,100117],{"class":480,"line":3187},[478,100118,100119],{"class":488},"        [ 9, 10],\n",[478,100121,100122],{"class":480,"line":8514},[478,100123,100124],{"class":488},"        [15, 16],\n",[478,100126,100127],{"class":480,"line":8538},[478,100128,100129],{"class":488},"        [21, 22],\n",[478,100131,100132],{"class":480,"line":8543},[478,100133,100134],{"class":488},"        [27, 28],\n",[478,100136,100137],{"class":480,"line":8549},[478,100138,100139],{"class":488},"        [33, 34]]),\n",[478,100141,100142],{"class":480,"line":8576},[478,100143,100144],{"class":488}," array([[ 5,  6],\n",[478,100146,100147],{"class":480,"line":8581},[478,100148,100149],{"class":488},"        [11, 12],\n",[478,100151,100152],{"class":480,"line":8587},[478,100153,100154],{"class":488},"        [17, 18],\n",[478,100156,100157],{"class":480,"line":8599},[478,100158,100159],{"class":488},"        [23, 24],\n",[478,100161,100162],{"class":480,"line":8611},[478,100163,100164],{"class":488},"        [29, 30],\n",[478,100166,100167],{"class":480,"line":8623},[478,100168,100169],{"class":488},"        [35, 36]])]\n",[478,100171,100172],{"class":480,"line":10282},[478,100173,99994],{"class":488},[478,100175,100176],{"class":480,"line":10307},[478,100177,99854],{"class":770},[478,100179,100180,100182,100184,100186,100188,100190,100192,100194,100196],{"class":480,"line":10330},[478,100181,100003],{"class":714},[478,100183,193],{"class":495},[478,100185,1079],{"class":714},[478,100187,789],{"class":495},[478,100189,41989],{"class":714},[478,100191,47894],{"class":5782},[478,100193,759],{"class":710},[478,100195,193],{"class":495},[478,100197,720],{"class":714},[478,100199,100200],{"class":480,"line":10354},[478,100201,93944],{"class":770},[478,100203,100204],{"class":480,"line":10359},[478,100205,94308],{"class":488},[478,100207,100208],{"class":480,"line":10364},[478,100209,100210],{"class":488},"[array([[ 1],\n",[478,100212,100213],{"class":480,"line":10369},[478,100214,100215],{"class":488},"        [ 7],\n",[478,100217,100218],{"class":480,"line":10378},[478,100219,100220],{"class":488},"        [13],\n",[478,100222,100223],{"class":480,"line":10383},[478,100224,100225],{"class":488},"        [19],\n",[478,100227,100228],{"class":480,"line":10389},[478,100229,100230],{"class":488},"        [25],\n",[478,100232,100233],{"class":480,"line":10410},[478,100234,100235],{"class":488},"        [31]]),\n",[478,100237,100238],{"class":480,"line":10416},[478,100239,100240],{"class":488}," array([[ 2],\n",[478,100242,100243],{"class":480,"line":10430},[478,100244,100245],{"class":488},"        [ 8],\n",[478,100247,100248],{"class":480,"line":10436},[478,100249,100250],{"class":488},"        [14],\n",[478,100252,100253],{"class":480,"line":10463},[478,100254,100255],{"class":488},"        [20],\n",[478,100257,100258],{"class":480,"line":10472},[478,100259,100260],{"class":488},"        [26],\n",[478,100262,100263],{"class":480,"line":10478},[478,100264,100265],{"class":488},"        [32]]),\n",[478,100267,100268],{"class":480,"line":10486},[478,100269,100270],{"class":488}," array([[ 3,  4,  5,  6],\n",[478,100272,100273],{"class":480,"line":10491},[478,100274,100275],{"class":488},"        [ 9, 10, 11, 12],\n",[478,100277,100278],{"class":480,"line":17169},[478,100279,100280],{"class":488},"        [15, 16, 17, 18],\n",[478,100282,100283],{"class":480,"line":17175},[478,100284,100285],{"class":488},"        [21, 22, 23, 24],\n",[478,100287,100288],{"class":480,"line":17198},[478,100289,100290],{"class":488},"        [27, 28, 29, 30],\n",[478,100292,100293],{"class":480,"line":17204},[478,100294,100295],{"class":488},"        [33, 34, 35, 36]])]\n",[478,100297,100298],{"class":480,"line":17227},[478,100299,94308],{"class":488},[478,100301,100302],{"class":480,"line":17241},[478,100303,100304],{"class":770},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[478,100306,100307,100310,100312],{"class":480,"line":17261},[478,100308,100309],{"class":714},"np.vsplit(aa,",[478,100311,783],{"class":495},[478,100313,720],{"class":714},[478,100315,100316],{"class":480,"line":17267},[478,100317,93944],{"class":770},[478,100319,100320],{"class":480,"line":17278},[478,100321,94308],{"class":488},[478,100323,100324],{"class":480,"line":17301},[478,100325,99964],{"class":488},[478,100327,100328],{"class":480,"line":17323},[478,100329,99969],{"class":488},[478,100331,100332],{"class":480,"line":17328},[478,100333,99974],{"class":488},[478,100335,100336],{"class":480,"line":17334},[478,100337,99979],{"class":488},[478,100339,100340],{"class":480,"line":17348},[478,100341,99984],{"class":488},[478,100343,100344],{"class":480,"line":17361},[478,100345,99989],{"class":488},[478,100347,100348],{"class":480,"line":17366},[478,100349,94308],{"class":488},[478,100351,100352,100355,100357],{"class":480,"line":17380},[478,100353,100354],{"class":714},"np.hsplit(aa,",[478,100356,783],{"class":495},[478,100358,720],{"class":714},[478,100360,100361],{"class":480,"line":17385},[478,100362,93944],{"class":770},[478,100364,100365],{"class":480,"line":17391},[478,100366,94308],{"class":488},[478,100368,100369],{"class":480,"line":17396},[478,100370,100084],{"class":488},[478,100372,100373],{"class":480,"line":17410},[478,100374,100089],{"class":488},[478,100376,100377],{"class":480,"line":17415},[478,100378,100094],{"class":488},[478,100380,100381],{"class":480,"line":17420},[478,100382,100099],{"class":488},[478,100384,100385],{"class":480,"line":17434},[478,100386,100104],{"class":488},[478,100388,100389],{"class":480,"line":17446},[478,100390,100109],{"class":488},[478,100392,100393],{"class":480,"line":17451},[478,100394,100114],{"class":488},[478,100396,100397],{"class":480,"line":17464},[478,100398,100119],{"class":488},[478,100400,100401],{"class":480,"line":17469},[478,100402,100124],{"class":488},[478,100404,100405],{"class":480,"line":17474},[478,100406,100129],{"class":488},[478,100408,100409],{"class":480,"line":17479},[478,100410,100134],{"class":488},[478,100412,100413],{"class":480,"line":17492},[478,100414,100139],{"class":488},[478,100416,100417],{"class":480,"line":17497},[478,100418,100144],{"class":488},[478,100420,100421],{"class":480,"line":33013},[478,100422,100149],{"class":488},[478,100424,100425],{"class":480,"line":33019},[478,100426,100154],{"class":488},[478,100428,100429],{"class":480,"line":33025},[478,100430,100159],{"class":488},[478,100432,100433],{"class":480,"line":33031},[478,100434,100164],{"class":488},[478,100436,100437],{"class":480,"line":33037},[478,100438,100169],{"class":488},[478,100440,100441],{"class":480,"line":33048},[478,100442,94308],{"class":488},[478,100444,100445,100448,100450,100452,100454],{"class":480,"line":33054},[478,100446,100447],{"class":714},"np.vsplit(aa,[",[478,100449,789],{"class":495},[478,100451,1079],{"class":714},[478,100453,1020],{"class":495},[478,100455,5223],{"class":714},[478,100457,100458],{"class":480,"line":33074},[478,100459,93944],{"class":770},[478,100461,100462],{"class":480,"line":33080},[478,100463,94308],{"class":488},[478,100465,100466],{"class":480,"line":33091},[478,100467,99964],{"class":488},[478,100469,100470],{"class":480,"line":33097},[478,100471,99969],{"class":488},[478,100473,100474],{"class":480,"line":33103},[478,100475,99974],{"class":488},[478,100477,100478],{"class":480,"line":33109},[478,100479,100036],{"class":488},[478,100481,100482],{"class":480,"line":33115},[478,100483,100041],{"class":488},[478,100485,100486],{"class":480,"line":33121},[478,100487,100046],{"class":488},[478,100489,100490],{"class":480,"line":33127},[478,100491,99994],{"class":488},[617,100493,100494],{},"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":54,"searchDepth":565,"depth":565,"links":100496},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99762,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100503,"title":100504,"body":100505,"description":23942,"extension":638,"meta":100999,"navigation":640,"path":101000,"seo":101001,"stem":101002,"__hash__":101003},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100506,"toc":100990},[100507,100510,100513,100538,100542,100601,100653,100657,100659,100695,100749,100751,100789,100860,100864,100869,100873,100876,100909,100912,100916,100919,100922,100925,100928,100933,100937,100940,100943,100946,100949,100954,100958,100963,100966,100987],[10,100508,100504],{"id":100509},"_9数学函数",[19,100511,100512],{},"补充回顾：python的列表推导式",[469,100514,100516],{"className":30758,"code":100515,"language":30760,"meta":54,"style":54},"[1\u002Fi for i in a]\n",[475,100517,100518],{"__ignoreMap":54},[478,100519,100520,100522,100524,100526,100529,100531,100533,100535],{"class":480,"line":481},[478,100521,1585],{"class":714},[478,100523,193],{"class":495},[478,100525,1284],{"class":710},[478,100527,100528],{"class":714},"i ",[478,100530,3591],{"class":710},[478,100532,10004],{"class":714},[478,100534,26423],{"class":710},[478,100536,100537],{"class":714}," a]\n",[14,100539,100541],{"id":100540},"_91-求倒数","9.1 求倒数",[469,100543,100545],{"className":30758,"code":100544,"language":30760,"meta":54,"style":54},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[475,100546,100547,100552,100580,100592],{"__ignoreMap":54},[478,100548,100549],{"class":480,"line":481},[478,100550,100551],{"class":770},"#数组求倒数\n",[478,100553,100554,100556,100558,100560,100562,100564,100566,100568,100570,100572,100574,100576,100578],{"class":480,"line":565},[478,100555,518],{"class":714},[478,100557,759],{"class":710},[478,100559,1585],{"class":714},[478,100561,193],{"class":495},[478,100563,1079],{"class":714},[478,100565,789],{"class":495},[478,100567,1079],{"class":714},[478,100569,783],{"class":495},[478,100571,1079],{"class":714},[478,100573,994],{"class":495},[478,100575,1079],{"class":714},[478,100577,1020],{"class":495},[478,100579,33626],{"class":714},[478,100581,100582,100584,100586,100589],{"class":480,"line":579},[478,100583,964],{"class":714},[478,100585,759],{"class":710},[478,100587,100588],{"class":714},"np.array(a)",[478,100590,100591],{"class":770},"#将列表转换为数组\n",[478,100593,100594,100596,100598],{"class":480,"line":593},[478,100595,193],{"class":495},[478,100597,1284],{"class":710},[478,100599,100600],{"class":714},"b\n",[469,100602,100604],{"className":30758,"code":100603,"language":30760,"meta":54,"style":54},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[475,100605,100606,100634,100643,100648],{"__ignoreMap":54},[478,100607,100608,100610,100612,100614,100616,100618,100620,100622,100624,100626,100628,100630,100632],{"class":480,"line":481},[478,100609,518],{"class":714},[478,100611,759],{"class":710},[478,100613,1585],{"class":714},[478,100615,193],{"class":495},[478,100617,1079],{"class":714},[478,100619,789],{"class":495},[478,100621,1079],{"class":714},[478,100623,783],{"class":495},[478,100625,1079],{"class":714},[478,100627,994],{"class":495},[478,100629,1079],{"class":714},[478,100631,1020],{"class":495},[478,100633,33626],{"class":714},[478,100635,100636,100638,100640],{"class":480,"line":565},[478,100637,964],{"class":714},[478,100639,759],{"class":710},[478,100641,100642],{"class":714},"np.array(a)\n",[478,100644,100645],{"class":480,"line":579},[478,100646,100647],{"class":770},"#调用numpy中的函数reciprocal()\n",[478,100649,100650],{"class":480,"line":593},[478,100651,100652],{"class":714},"np.reciprocal(b)\n",[14,100654,100656],{"id":100655},"_92-求平方","9.2 求平方",[19,100658,94910],{},[469,100660,100662],{"className":30758,"code":100661,"language":30760,"meta":54,"style":54},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[475,100663,100664,100669,100674,100690],{"__ignoreMap":54},[478,100665,100666],{"class":480,"line":481},[478,100667,100668],{"class":770},"#square()，求平方\n",[478,100670,100671],{"class":480,"line":565},[478,100672,100673],{"class":770},"#一维数组\n",[478,100675,100676,100678,100680,100682,100684,100686,100688],{"class":480,"line":579},[478,100677,518],{"class":714},[478,100679,759],{"class":710},[478,100681,93382],{"class":714},[478,100683,193],{"class":495},[478,100685,1079],{"class":714},[478,100687,1146],{"class":495},[478,100689,720],{"class":714},[478,100691,100692],{"class":480,"line":593},[478,100693,100694],{"class":714},"np.square(a)\n",[469,100696,100698],{"className":30758,"code":100697,"language":30760,"meta":54,"style":54},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[475,100699,100700,100705,100710,100731],{"__ignoreMap":54},[478,100701,100702],{"class":480,"line":481},[478,100703,100704],{"class":770},"#或者通过循环遍历的形式来计算\n",[478,100706,100707],{"class":480,"line":565},[478,100708,100709],{"class":770},"#这是一个列表\n",[478,100711,100712,100715,100717,100719,100721,100723,100725,100728],{"class":480,"line":579},[478,100713,100714],{"class":714},"[i",[478,100716,1155],{"class":710},[478,100718,100528],{"class":714},[478,100720,3591],{"class":710},[478,100722,10004],{"class":714},[478,100724,26423],{"class":710},[478,100726,100727],{"class":714}," a]",[478,100729,100730],{"class":770},"#这个求完之后在数列当中\n",[478,100732,100733,100736,100738,100740,100742,100744,100746],{"class":480,"line":593},[478,100734,100735],{"class":714},"np.array([i",[478,100737,1155],{"class":710},[478,100739,100528],{"class":714},[478,100741,3591],{"class":710},[478,100743,10004],{"class":714},[478,100745,26423],{"class":710},[478,100747,100748],{"class":714}," a])\n",[19,100750,93671],{},[469,100752,100754],{"className":30758,"code":100753,"language":30760,"meta":54,"style":54},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[475,100755,100756,100760,100784],{"__ignoreMap":54},[478,100757,100758],{"class":480,"line":481},[478,100759,93681],{"class":770},[478,100761,100762,100764,100766,100768,100770,100772,100774,100776,100778,100780,100782],{"class":480,"line":565},[478,100763,93686],{"class":714},[478,100765,759],{"class":710},[478,100767,93382],{"class":714},[478,100769,193],{"class":495},[478,100771,1079],{"class":714},[478,100773,1223],{"class":495},[478,100775,93387],{"class":714},[478,100777,994],{"class":495},[478,100779,1079],{"class":714},[478,100781,783],{"class":495},[478,100783,720],{"class":714},[478,100785,100786],{"class":480,"line":579},[478,100787,100788],{"class":714},"np.square(aa)\n",[469,100790,100792],{"className":30758,"code":100791,"language":30760,"meta":54,"style":54},"#传统的方式\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",[475,100793,100794,100799,100808,100824,100840,100855],{"__ignoreMap":54},[478,100795,100796],{"class":480,"line":481},[478,100797,100798],{"class":770},"#传统的方式\n",[478,100800,100801,100803,100805],{"class":480,"line":565},[478,100802,98567],{"class":714},[478,100804,759],{"class":710},[478,100806,100807],{"class":714},"np.empty_like(aa)\n",[478,100809,100810,100812,100814,100816,100818,100820,100822],{"class":480,"line":579},[478,100811,3591],{"class":710},[478,100813,10004],{"class":714},[478,100815,26423],{"class":710},[478,100817,32823],{"class":495},[478,100819,263],{"class":714},[478,100821,994],{"class":495},[478,100823,31166],{"class":714},[478,100825,100826,100828,100830,100832,100834,100836,100838],{"class":480,"line":593},[478,100827,3767],{"class":710},[478,100829,10066],{"class":714},[478,100831,26423],{"class":710},[478,100833,32823],{"class":495},[478,100835,263],{"class":714},[478,100837,783],{"class":495},[478,100839,31166],{"class":714},[478,100841,100842,100845,100847,100850,100852],{"class":480,"line":1769},[478,100843,100844],{"class":714},"        bb[i,j]",[478,100846,759],{"class":710},[478,100848,100849],{"class":714},"aa[i,j]",[478,100851,1155],{"class":710},[478,100853,100854],{"class":714},"aa[i,j]\n",[478,100856,100857],{"class":480,"line":1783},[478,100858,100859],{"class":714},"bb\n",[14,100861,100863],{"id":100862},"_93-求各元素的符号","9.3 求各元素的符号",[19,100865,100866],{},[52,100867],{"alt":54,"src":100868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100870,100872],{"id":100871},"_94-modf函数","9.4 modf函数",[19,100874,100875],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[469,100877,100879],{"className":30758,"code":100878,"language":30760,"meta":54,"style":54},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[475,100880,100881,100904],{"__ignoreMap":54},[478,100882,100883,100885,100887,100889,100891,100893,100895,100897,100899,100902],{"class":480,"line":481},[478,100884,518],{"class":714},[478,100886,759],{"class":710},[478,100888,93382],{"class":714},[478,100890,1232],{"class":710},[478,100892,1146],{"class":495},[478,100894,1079],{"class":714},[478,100896,1146],{"class":495},[478,100898,1079],{"class":714},[478,100900,100901],{"class":495},"0.3",[478,100903,720],{"class":714},[478,100905,100906],{"class":480,"line":565},[478,100907,100908],{"class":714},"np.modf(a)\n",[19,100910,100911],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100913,100915],{"id":100914},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100917,100918],{},"np.cell()",[19,100920,100921],{},"np.floor()",[19,100923,100924],{},"np.rint()",[19,100926,100927],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100929,100930],{},[52,100931],{"alt":54,"src":100932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100934,100936],{"id":100935},"_96-around函数","9.6 around()函数",[19,100938,100939],{},"around()函数也可以实现对数的小数位数进行操作",[19,100941,100942],{},"其中的参数：",[19,100944,100945],{},"1.要传的数组",[19,100947,100948],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100950,100951],{},[52,100952],{"alt":54,"src":100953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100955,100957],{"id":100956},"_97-三角函数","9.7 三角函数",[19,100959,100960],{},[52,100961],{"alt":54,"src":100962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100964,100965],{},"引入图像模块非常重要",[469,100967,100969],{"className":30758,"code":100968,"language":30760,"meta":54,"style":54},"from matplotlib import pyplot as plt\n",[475,100970,100971],{"__ignoreMap":54},[478,100972,100973,100975,100978,100980,100983,100985],{"class":480,"line":481},[478,100974,31117],{"class":710},[478,100976,100977],{"class":714}," matplotlib ",[478,100979,30772],{"class":710},[478,100981,100982],{"class":714}," pyplot ",[478,100984,31763],{"class":710},[478,100986,31817],{"class":714},[617,100988,100989],{},"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":54,"searchDepth":565,"depth":565,"links":100991},[100992,100993,100994,100995,100996,100997,100998],{"id":100540,"depth":565,"text":100541},{"id":100655,"depth":565,"text":100656},{"id":100862,"depth":565,"text":100863},{"id":100871,"depth":565,"text":100872},{"id":100914,"depth":565,"text":100915},{"id":100935,"depth":565,"text":100936},{"id":100956,"depth":565,"text":100957},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100504,"description":23942},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101005,"title":101006,"body":101007,"description":23942,"extension":638,"meta":101011,"navigation":640,"path":101012,"seo":101013,"stem":101014,"__hash__":101015},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101008,"toc":101009},[],{"title":54,"searchDepth":565,"depth":565,"links":101010},[],{"category":50800},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101006,"description":23942},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101017,"title":101018,"body":101019,"description":54,"extension":638,"meta":103027,"navigation":640,"path":103028,"seo":103029,"stem":103030,"__hash__":103031},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101020,"toc":103003},[101021,101024,101028,101031,101034,101040,101043,101066,101069,101103,101106,101147,101151,101154,101247,101250,101294,101297,101314,101317,101331,101334,101337,101382,101385,101422,101426,101429,101435,101440,101460,101464,101467,101533,101536,101554,101558,101561,101590,101600,101606,101610,101613,101619,101630,101634,101637,101667,101670,101950,101953,101956,101967,101970,101973,101995,102002,102005,102023,102026,102029,102043,102051,102054,102080,102086,102089,102092,102102,102114,102134,102143,102163,102173,102197,102210,102224,102229,102270,102287,102312,102324,102344,102350,102395,102414,102431,102444,102460,102467,102479,102488,102523,102544,102569,102582,102606,102621,102646,102649,102670,102679,102682,102693,102697,102700,102706,102718,102725,102729,102732,102744,102747,102761,102764,102774,102784,102787,102827,102830,102834,102840,102843,102857,102861,102864,102897,102901,102904,102927,102935,102938,102944,102950,102953,102956,102984,102988,102991,102997,103000],[10,101022,101018],{"id":101023},"_1环境安装与第一个-mujoco-程序",[14,101025,101027],{"id":101026},"_1目标说明","1.目标说明",[19,101029,101030],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101032,101033],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[469,101035,101038],{"className":101036,"code":101037,"language":5753,"meta":54},[5751],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[475,101039,101037],{"__ignoreMap":54},[19,101041,101042],{},"需要掌握:",[29,101044,101045,101048,101051,101056,101061],{},[32,101046,101047],{},"Fedora 44 下 MuJoCo 的系统依赖",[32,101049,101050],{},"Python 虚拟环境创建",[32,101052,101053],{},[475,101054,101055],{},"mujoco.MjModel",[32,101057,101058],{},[475,101059,101060],{},"mujoco.MjData",[32,101062,101063],{},[475,101064,101065],{},"mujoco.mj_step(model, data)",[19,101067,101068],{},"MuJoCo 中最重要的两个对象:",[371,101070,101071,101081],{},[374,101072,101073],{},[377,101074,101075,101078],{},[380,101076,101077],{"align":382},"对象",[380,101079,101080],{"align":382},"含义",[388,101082,101083,101093],{},[377,101084,101085,101090],{},[393,101086,101087],{"align":382},[475,101088,101089],{},"MjModel",[393,101091,101092],{"align":382},"模型结构，来自 XML，基本不随时间变化",[377,101094,101095,101100],{},[393,101096,101097],{"align":382},[475,101098,101099],{},"MjData",[393,101101,101102],{"align":382},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101104,101105],{},"可以先用一个类比理解：",[371,101107,101108,101118],{},[374,101109,101110],{},[377,101111,101112,101115],{},[380,101113,101114],{"align":382},"类比",[380,101116,101117],{"align":382},"MuJoCo 对象",[388,101119,101120,101129,101138],{},[377,101121,101122,101125],{},[393,101123,101124],{"align":382},"游戏地图和角色配置",[393,101126,101127],{"align":382},[475,101128,101089],{},[377,101130,101131,101134],{},[393,101132,101133],{"align":382},"游戏运行到当前帧的状态",[393,101135,101136],{"align":382},[475,101137,101099],{},[377,101139,101140,101143],{},[393,101141,101142],{"align":382},"前进一帧",[393,101144,101145],{"align":382},[475,101146,101065],{},[14,101148,101150],{"id":101149},"_2环境与依赖安装","2.环境与依赖安装",[19,101152,101153],{},"Fedora 44 系统依赖:",[469,101155,101157],{"className":471,"code":101156,"language":473,"meta":54,"style":54},"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",[475,101158,101159,101171,101184,101197,101207,101217,101236],{"__ignoreMap":54},[478,101160,101161,101163,101165,101167,101169],{"class":480,"line":481},[478,101162,24956],{"class":484},[478,101164,26695],{"class":488},[478,101166,489],{"class":488},[478,101168,26780],{"class":495},[478,101170,25058],{"class":495},[478,101172,101173,101176,101179,101182],{"class":480,"line":565},[478,101174,101175],{"class":488},"  python3",[478,101177,101178],{"class":488}," python3-pip",[478,101180,101181],{"class":488}," python3-virtualenv",[478,101183,25058],{"class":495},[478,101185,101186,101189,101192,101195],{"class":480,"line":579},[478,101187,101188],{"class":488},"  mesa-libGL",[478,101190,101191],{"class":488}," mesa-libGLU",[478,101193,101194],{"class":488}," mesa-dri-drivers",[478,101196,25058],{"class":495},[478,101198,101199,101202,101205],{"class":480,"line":593},[478,101200,101201],{"class":488},"  libglvnd-glx",[478,101203,101204],{"class":488}," libglvnd-opengl",[478,101206,25058],{"class":495},[478,101208,101209,101212,101215],{"class":480,"line":1769},[478,101210,101211],{"class":488},"  glfw",[478,101213,101214],{"class":488}," glfw-devel",[478,101216,25058],{"class":495},[478,101218,101219,101222,101225,101228,101231,101234],{"class":480,"line":1783},[478,101220,101221],{"class":488},"  libX11",[478,101223,101224],{"class":488}," libXcursor",[478,101226,101227],{"class":488}," libXi",[478,101229,101230],{"class":488}," libXinerama",[478,101232,101233],{"class":488}," libXrandr",[478,101235,25058],{"class":495},[478,101237,101238,101241,101244],{"class":480,"line":1789},[478,101239,101240],{"class":488},"  gcc",[478,101242,101243],{"class":488}," gcc-c++",[478,101245,101246],{"class":488}," make\n",[19,101248,101249],{},"创建 Python 环境:",[469,101251,101253],{"className":471,"code":101252,"language":473,"meta":54,"style":54},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[475,101254,101255,101269,101277],{"__ignoreMap":54},[478,101256,101257,101260,101263,101266],{"class":480,"line":481},[478,101258,101259],{"class":484},"python3",[478,101261,101262],{"class":495}," -m",[478,101264,101265],{"class":488}," venv",[478,101267,101268],{"class":488}," .venv\n",[478,101270,101271,101274],{"class":480,"line":565},[478,101272,101273],{"class":495},"source",[478,101275,101276],{"class":488}," .venv\u002Fbin\u002Factivate\n",[478,101278,101279,101281,101283,101286,101288,101291],{"class":480,"line":579},[478,101280,30760],{"class":484},[478,101282,101262],{"class":495},[478,101284,101285],{"class":488}," pip",[478,101287,489],{"class":488},[478,101289,101290],{"class":495}," --upgrade",[478,101292,101293],{"class":488}," pip\n",[19,101295,101296],{},"pip 安装:",[469,101298,101300],{"className":471,"code":101299,"language":473,"meta":54,"style":54},"pip install \"mujoco>=2.3\" numpy\n",[475,101301,101302],{"__ignoreMap":54},[478,101303,101304,101306,101308,101311],{"class":480,"line":481},[478,101305,485],{"class":484},[478,101307,489],{"class":488},[478,101309,101310],{"class":488}," \"mujoco>=2.3\"",[478,101312,101313],{"class":488}," numpy\n",[19,101315,101316],{},"安装完成后，先做最小检查：",[469,101318,101320],{"className":471,"code":101319,"language":473,"meta":54,"style":54},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[475,101321,101322],{"__ignoreMap":54},[478,101323,101324,101326,101328],{"class":480,"line":481},[478,101325,30760],{"class":484},[478,101327,30738],{"class":495},[478,101329,101330],{"class":488}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101332,101333],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101335,101336],{},"conda 安装:",[469,101338,101340],{"className":471,"code":101339,"language":473,"meta":54,"style":54},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[475,101341,101342,101362,101372],{"__ignoreMap":54},[478,101343,101344,101346,101348,101350,101353,101356,101359],{"class":480,"line":481},[478,101345,30710],{"class":484},[478,101347,29556],{"class":488},[478,101349,25495],{"class":495},[478,101351,101352],{"class":488}," mujoco-study",[478,101354,101355],{"class":488}," python=",[478,101357,101358],{"class":495},"3.10",[478,101360,101361],{"class":495}," -y\n",[478,101363,101364,101366,101369],{"class":480,"line":565},[478,101365,30710],{"class":484},[478,101367,101368],{"class":488}," activate",[478,101370,101371],{"class":488}," mujoco-study\n",[478,101373,101374,101376,101378,101380],{"class":480,"line":579},[478,101375,485],{"class":484},[478,101377,489],{"class":488},[478,101379,101310],{"class":488},[478,101381,101313],{"class":488},[19,101383,101384],{},"版本冲突说明:",[29,101386,101387,101393,101403,101412],{},[32,101388,101389,101390,28765],{},"不要安装 ",[475,101391,101392],{},"mujoco-py",[32,101394,101395,101396,101398,101399,101402],{},"如果旧项目里同时安装了 ",[475,101397,101392],{}," 和 ",[475,101400,101401],{},"mujoco","，建议新建干净虚拟环境。",[32,101404,101405,101408,101409,28765],{},[475,101406,101407],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[475,101410,101411],{},"~\u002F.mujoco\u002Fmujoco210",[32,101413,101414,101415,82919,101418,101421],{},"离屏渲染可能涉及 OpenGL 后端，",[475,101416,101417],{},"MUJOCO_GL=egl",[475,101419,101420],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101423,101425],{"id":101424},"_3核心概念解释","3.核心概念解释",[19,101427,101428],{},"MuJoCo 的基本执行流程:",[469,101430,101433],{"className":101431,"code":101432,"language":5753,"meta":54},[5751],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[475,101434,101432],{"__ignoreMap":54},[19,101436,101437,101439],{},[475,101438,101089],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101441,101442,101444,101445,916,101448,916,101451,916,101454,916,101457,28765],{},[475,101443,101099],{}," 存放仿真运行时状态，例如 ",[475,101446,101447],{},"data.time",[475,101449,101450],{},"data.qpos",[475,101452,101453],{},"data.qvel",[475,101455,101456],{},"data.ctrl",[475,101458,101459],{},"data.xpos",[129,101461,101463],{"id":101462},"xml-是什么","XML 是什么",[19,101465,101466],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[469,101468,101470],{"className":53447,"code":101469,"language":53449,"meta":54,"style":54},"\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",[475,101471,101472,101494,101525],{"__ignoreMap":54},[478,101473,101474,101476,101478,101480,101482,101484,101487,101489,101492],{"class":480,"line":481},[478,101475,1605],{"class":714},[478,101477,52180],{"class":51680},[478,101479,15485],{"class":484},[478,101481,759],{"class":714},[478,101483,53871],{"class":488},[478,101485,101486],{"class":484}," pos",[478,101488,759],{"class":714},[478,101490,101491],{"class":488},"\"0 0 1\"",[478,101493,51687],{"class":714},[478,101495,101496,101498,101501,101503,101505,101508,101510,101512,101514,101517,101519,101522],{"class":480,"line":565},[478,101497,52524],{"class":714},[478,101499,101500],{"class":51680},"geom",[478,101502,15485],{"class":484},[478,101504,759],{"class":714},[478,101506,101507],{"class":488},"\"box_geom\"",[478,101509,54204],{"class":484},[478,101511,759],{"class":714},[478,101513,53871],{"class":488},[478,101515,101516],{"class":484}," size",[478,101518,759],{"class":714},[478,101520,101521],{"class":488},"\"0.1 0.1 0.1\"",[478,101523,101524],{"class":714},"\u002F>\n",[478,101526,101527,101529,101531],{"class":480,"line":579},[478,101528,52165],{"class":714},[478,101530,52180],{"class":51680},[478,101532,51687],{"class":714},[19,101534,101535],{},"这段意思是：",[29,101537,101538,101544,101551],{},[32,101539,101540,101541,101543],{},"创建一个叫 ",[475,101542,54094],{}," 的刚体。",[32,101545,101546,101547,101550],{},"它初始放在 ",[475,101548,101549],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[32,101552,101553],{},"它里面有一个盒子形状的几何体。",[129,101555,101557],{"id":101556},"timestep-是什么","timestep 是什么",[19,101559,101560],{},"XML 里的：",[469,101562,101564],{"className":53447,"code":101563,"language":53449,"meta":54,"style":54},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[475,101565,101566],{"__ignoreMap":54},[478,101567,101568,101570,101572,101575,101577,101580,101583,101585,101588],{"class":480,"line":481},[478,101569,1605],{"class":714},[478,101571,69546],{"class":51680},[478,101573,101574],{"class":484}," timestep",[478,101576,759],{"class":714},[478,101578,101579],{"class":488},"\"0.01\"",[478,101581,101582],{"class":484}," gravity",[478,101584,759],{"class":714},[478,101586,101587],{"class":488},"\"0 0 -9.81\"",[478,101589,101524],{"class":714},[19,101591,101592,101593,101596,101597,101599],{},"表示每调用一次 ",[475,101594,101595],{},"mj_step","，仿真时间前进 ",[475,101598,39366],{}," 秒。循环 100 次，大约就是 1 秒：",[469,101601,101604],{"className":101602,"code":101603,"language":5753,"meta":54},[5751],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[475,101605,101603],{"__ignoreMap":54},[129,101607,101609],{"id":101608},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101611,101612],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[469,101614,101617],{"className":101615,"code":101616,"language":5753,"meta":54},[5751],"x y z qw qx qy qz\n",[475,101618,101616],{"__ignoreMap":54},[19,101620,101621,101622,101625,101626,101629],{},"表示一个自由刚体的位置和姿态。其中 ",[475,101623,101624],{},"x y z"," 是位置，",[475,101627,101628],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101631,101633],{"id":101632},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101635,101636],{},"新建文件:",[469,101638,101640],{"className":471,"code":101639,"language":473,"meta":54,"style":54},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[475,101641,101642,101652,101659],{"__ignoreMap":54},[478,101643,101644,101647,101649],{"class":480,"line":481},[478,101645,101646],{"class":484},"mkdir",[478,101648,29596],{"class":495},[478,101650,101651],{"class":488}," mujoco_tutorial\n",[478,101653,101654,101657],{"class":480,"line":565},[478,101655,101656],{"class":495},"cd",[478,101658,101651],{"class":488},[478,101660,101661,101664],{"class":480,"line":579},[478,101662,101663],{"class":484},"touch",[478,101665,101666],{"class":488}," ch1_first_sim.py\n",[19,101668,101669],{},"写入:",[469,101671,101673],{"className":30758,"code":101672,"language":30760,"meta":54,"style":54},"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",[475,101674,101675,101682,101686,101690,101700,101705,101710,101714,101719,101724,101728,101733,101738,101743,101748,101753,101758,101762,101766,101770,101783,101797,101807,101811,101823,101835,101847,101859,101871,101875,101892,101897,101901,101912,101923,101927,101931,101945],{"__ignoreMap":54},[478,101676,101677,101679],{"class":480,"line":481},[478,101678,30772],{"class":710},[478,101680,101681],{"class":714}," mujoco\n",[478,101683,101684],{"class":480,"line":565},[478,101685,2966],{"emptyLinePlaceholder":640},[478,101687,101688],{"class":480,"line":579},[478,101689,2966],{"emptyLinePlaceholder":640},[478,101691,101692,101695,101697],{"class":480,"line":593},[478,101693,101694],{"class":495},"XML",[478,101696,14130],{"class":710},[478,101698,101699],{"class":488}," \"\"\"\n",[478,101701,101702],{"class":480,"line":1769},[478,101703,101704],{"class":488},"\u003Cmujoco model=\"first_sim\">\n",[478,101706,101707],{"class":480,"line":1783},[478,101708,101709],{"class":488},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[478,101711,101712],{"class":480,"line":1789},[478,101713,2966],{"emptyLinePlaceholder":640},[478,101715,101716],{"class":480,"line":1880},[478,101717,101718],{"class":488},"  \u003Cworldbody>\n",[478,101720,101721],{"class":480,"line":1886},[478,101722,101723],{"class":488},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[478,101725,101726],{"class":480,"line":1898},[478,101727,2966],{"emptyLinePlaceholder":640},[478,101729,101730],{"class":480,"line":2180},[478,101731,101732],{"class":488},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[478,101734,101735],{"class":480,"line":2185},[478,101736,101737],{"class":488},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[478,101739,101740],{"class":480,"line":2191},[478,101741,101742],{"class":488},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[478,101744,101745],{"class":480,"line":2196},[478,101746,101747],{"class":488},"    \u003C\u002Fbody>\n",[478,101749,101750],{"class":480,"line":2210},[478,101751,101752],{"class":488},"  \u003C\u002Fworldbody>\n",[478,101754,101755],{"class":480,"line":2215},[478,101756,101757],{"class":488},"\u003C\u002Fmujoco>\n",[478,101759,101760],{"class":480,"line":2221},[478,101761,96078],{"class":488},[478,101763,101764],{"class":480,"line":2241},[478,101765,2966],{"emptyLinePlaceholder":640},[478,101767,101768],{"class":480,"line":2246},[478,101769,2966],{"emptyLinePlaceholder":640},[478,101771,101772,101774,101776,101779,101781],{"class":480,"line":2260},[478,101773,32327],{"class":710},[478,101775,2539],{"class":484},[478,101777,101778],{"class":714},"() -> ",[478,101780,96066],{"class":495},[478,101782,4305],{"class":714},[478,101784,101785,101788,101790,101793,101795],{"class":480,"line":2265},[478,101786,101787],{"class":714},"    model ",[478,101789,759],{"class":710},[478,101791,101792],{"class":714}," mujoco.MjModel.from_xml_string(",[478,101794,101694],{"class":495},[478,101796,720],{"class":714},[478,101798,101799,101802,101804],{"class":480,"line":2294},[478,101800,101801],{"class":714},"    data ",[478,101803,759],{"class":710},[478,101805,101806],{"class":714}," mujoco.MjData(model)\n",[478,101808,101809],{"class":480,"line":2299},[478,101810,2966],{"emptyLinePlaceholder":640},[478,101812,101813,101815,101817,101820],{"class":480,"line":2316},[478,101814,31679],{"class":495},[478,101816,263],{"class":714},[478,101818,101819],{"class":488},"\"nq:\"",[478,101821,101822],{"class":714},", model.nq)\n",[478,101824,101825,101827,101829,101832],{"class":480,"line":2321},[478,101826,31679],{"class":495},[478,101828,263],{"class":714},[478,101830,101831],{"class":488},"\"nv:\"",[478,101833,101834],{"class":714},", model.nv)\n",[478,101836,101837,101839,101841,101844],{"class":480,"line":2326},[478,101838,31679],{"class":495},[478,101840,263],{"class":714},[478,101842,101843],{"class":488},"\"nu:\"",[478,101845,101846],{"class":714},", model.nu)\n",[478,101848,101849,101851,101853,101856],{"class":480,"line":2331},[478,101850,31679],{"class":495},[478,101852,263],{"class":714},[478,101854,101855],{"class":488},"\"initial time:\"",[478,101857,101858],{"class":714},", data.time)\n",[478,101860,101861,101863,101865,101868],{"class":480,"line":2345},[478,101862,31679],{"class":495},[478,101864,263],{"class":714},[478,101866,101867],{"class":488},"\"initial qpos:\"",[478,101869,101870],{"class":714},", data.qpos.copy())\n",[478,101872,101873],{"class":480,"line":2350},[478,101874,2966],{"emptyLinePlaceholder":640},[478,101876,101877,101879,101882,101884,101886,101888,101890],{"class":480,"line":3143},[478,101878,3767],{"class":710},[478,101880,101881],{"class":714}," _ ",[478,101883,26423],{"class":710},[478,101885,32823],{"class":495},[478,101887,263],{"class":714},[478,101889,1012],{"class":495},[478,101891,31166],{"class":714},[478,101893,101894],{"class":480,"line":3157},[478,101895,101896],{"class":714},"        mujoco.mj_step(model, data)\n",[478,101898,101899],{"class":480,"line":3165},[478,101900,2966],{"emptyLinePlaceholder":640},[478,101902,101903,101905,101907,101910],{"class":480,"line":3170},[478,101904,31679],{"class":495},[478,101906,263],{"class":714},[478,101908,101909],{"class":488},"\"final time:\"",[478,101911,101858],{"class":714},[478,101913,101914,101916,101918,101921],{"class":480,"line":3176},[478,101915,31679],{"class":495},[478,101917,263],{"class":714},[478,101919,101920],{"class":488},"\"final qpos:\"",[478,101922,101870],{"class":714},[478,101924,101925],{"class":480,"line":3182},[478,101926,2966],{"emptyLinePlaceholder":640},[478,101928,101929],{"class":480,"line":3187},[478,101930,2966],{"emptyLinePlaceholder":640},[478,101932,101933,101935,101937,101940,101943],{"class":480,"line":8514},[478,101934,2099],{"class":710},[478,101936,31600],{"class":495},[478,101938,101939],{"class":710}," ==",[478,101941,101942],{"class":488}," \"__main__\"",[478,101944,4305],{"class":714},[478,101946,101947],{"class":480,"line":8538},[478,101948,101949],{"class":714},"    main()\n",[129,101951,101952],{"id":101952},"代码逐段解释",[19,101954,101955],{},"导入库：",[469,101957,101959],{"className":30758,"code":101958,"language":30760,"meta":54,"style":54},"import mujoco\n",[475,101960,101961],{"__ignoreMap":54},[478,101962,101963,101965],{"class":480,"line":481},[478,101964,30772],{"class":710},[478,101966,101681],{"class":714},[19,101968,101969],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101971,101972],{},"定义 XML：",[469,101974,101976],{"className":30758,"code":101975,"language":30760,"meta":54,"style":54},"XML = \"\"\"\n...\n\"\"\"\n",[475,101977,101978,101986,101991],{"__ignoreMap":54},[478,101979,101980,101982,101984],{"class":480,"line":481},[478,101981,101694],{"class":495},[478,101983,14130],{"class":710},[478,101985,101699],{"class":488},[478,101987,101988],{"class":480,"line":565},[478,101989,101990],{"class":488},"...\n",[478,101992,101993],{"class":480,"line":579},[478,101994,96078],{"class":488},[19,101996,101997,101998,102001],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[475,101999,102000],{},"freejoint"," 的方块。",[19,102003,102004],{},"编译模型：",[469,102006,102008],{"className":30758,"code":102007,"language":30760,"meta":54,"style":54},"model = mujoco.MjModel.from_xml_string(XML)\n",[475,102009,102010],{"__ignoreMap":54},[478,102011,102012,102015,102017,102019,102021],{"class":480,"line":481},[478,102013,102014],{"class":714},"model ",[478,102016,759],{"class":710},[478,102018,101792],{"class":714},[478,102020,101694],{"class":495},[478,102022,720],{"class":714},[19,102024,102025],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102027,102028],{},"创建数据：",[469,102030,102032],{"className":30758,"code":102031,"language":30760,"meta":54,"style":54},"data = mujoco.MjData(model)\n",[475,102033,102034],{"__ignoreMap":54},[478,102035,102036,102039,102041],{"class":480,"line":481},[478,102037,102038],{"class":714},"data ",[478,102040,759],{"class":710},[478,102042,101806],{"class":714},[19,102044,102045,102047,102048,102050],{},[475,102046,33781],{}," 会保存仿真当前状态。刚创建时，时间是 ",[475,102049,895],{},"，方块还在初始位置。",[19,102052,102053],{},"推进仿真：",[469,102055,102057],{"className":30758,"code":102056,"language":30760,"meta":54,"style":54},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[475,102058,102059,102075],{"__ignoreMap":54},[478,102060,102061,102063,102065,102067,102069,102071,102073],{"class":480,"line":481},[478,102062,3591],{"class":710},[478,102064,101881],{"class":714},[478,102066,26423],{"class":710},[478,102068,32823],{"class":495},[478,102070,263],{"class":714},[478,102072,1012],{"class":495},[478,102074,31166],{"class":714},[478,102076,102077],{"class":480,"line":565},[478,102078,102079],{"class":714},"    mujoco.mj_step(model, data)\n",[19,102081,102082,102083,102085],{},"每次 ",[475,102084,101595],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[129,102087,102088],{"id":102088},"代码逐行细讲",[19,102090,102091],{},"下面把完整代码按新手视角拆开讲。",[469,102093,102094],{"className":30758,"code":101958,"language":30760,"meta":54,"style":54},[475,102095,102096],{"__ignoreMap":54},[478,102097,102098,102100],{"class":480,"line":481},[478,102099,30772],{"class":710},[478,102101,101681],{"class":714},[19,102103,102104,102106,102107,916,102109,916,102111,28765],{},[475,102105,30772],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[475,102108,101055],{},[475,102110,101060],{},[475,102112,102113],{},"mujoco.mj_step",[469,102115,102116],{"className":30758,"code":101975,"language":30760,"meta":54,"style":54},[475,102117,102118,102126,102130],{"__ignoreMap":54},[478,102119,102120,102122,102124],{"class":480,"line":481},[478,102121,101694],{"class":495},[478,102123,14130],{"class":710},[478,102125,101699],{"class":488},[478,102127,102128],{"class":480,"line":565},[478,102129,101990],{"class":488},[478,102131,102132],{"class":480,"line":579},[478,102133,96078],{"class":488},[19,102135,102136,102138,102139,102142],{},[475,102137,101694],{}," 是一个变量名。右边的三引号 ",[475,102140,102141],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[469,102144,102145],{"className":53447,"code":101704,"language":53449,"meta":54,"style":54},[475,102146,102147],{"__ignoreMap":54},[478,102148,102149,102151,102153,102156,102158,102161],{"class":480,"line":481},[478,102150,1605],{"class":714},[478,102152,101401],{"class":51680},[478,102154,102155],{"class":484}," model",[478,102157,759],{"class":714},[478,102159,102160],{"class":488},"\"first_sim\"",[478,102162,51687],{"class":714},[19,102164,102165,102166,102169,102170,28765],{},"这是 XML 的根标签。",[475,102167,102168],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[475,102171,102172],{},"first_sim",[469,102174,102175],{"className":53447,"code":101563,"language":53449,"meta":54,"style":54},[475,102176,102177],{"__ignoreMap":54},[478,102178,102179,102181,102183,102185,102187,102189,102191,102193,102195],{"class":480,"line":481},[478,102180,1605],{"class":714},[478,102182,69546],{"class":51680},[478,102184,101574],{"class":484},[478,102186,759],{"class":714},[478,102188,101579],{"class":488},[478,102190,101582],{"class":484},[478,102192,759],{"class":714},[478,102194,101587],{"class":488},[478,102196,101524],{"class":714},[19,102198,102199,102201,102202,102205,102206,102209],{},[475,102200,69546],{}," 用来设置仿真参数。",[475,102203,102204],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[475,102207,102208],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[469,102211,102213],{"className":53447,"code":102212,"language":53449,"meta":54,"style":54},"\u003Cworldbody>\n",[475,102214,102215],{"__ignoreMap":54},[478,102216,102217,102219,102222],{"class":480,"line":481},[478,102218,1605],{"class":714},[478,102220,102221],{"class":51680},"worldbody",[478,102223,51687],{"class":714},[19,102225,102226,102228],{},[475,102227,102221],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[469,102230,102232],{"className":53447,"code":102231,"language":53449,"meta":54,"style":54},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[475,102233,102234],{"__ignoreMap":54},[478,102235,102236,102238,102240,102242,102244,102247,102249,102251,102254,102256,102258,102261,102263,102265,102268],{"class":480,"line":481},[478,102237,1605],{"class":714},[478,102239,101500],{"class":51680},[478,102241,15485],{"class":484},[478,102243,759],{"class":714},[478,102245,102246],{"class":488},"\"floor\"",[478,102248,54204],{"class":484},[478,102250,759],{"class":714},[478,102252,102253],{"class":488},"\"plane\"",[478,102255,101516],{"class":484},[478,102257,759],{"class":714},[478,102259,102260],{"class":488},"\"2 2 0.1\"",[478,102262,79147],{"class":484},[478,102264,759],{"class":714},[478,102266,102267],{"class":488},"\"0.8 0.8 0.8 1\"",[478,102269,101524],{"class":714},[19,102271,102272,102273,102275,102276,102279,102280,102283,102284,102286],{},"这行创建地面。",[475,102274,101500],{}," 是几何体。",[475,102277,102278],{},"name=\"floor\""," 是名字。",[475,102281,102282],{},"type=\"plane\""," 表示平面。",[475,102285,55490],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[469,102288,102290],{"className":53447,"code":102289,"language":53449,"meta":54,"style":54},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[475,102291,102292],{"__ignoreMap":54},[478,102293,102294,102296,102298,102300,102302,102304,102306,102308,102310],{"class":480,"line":481},[478,102295,1605],{"class":714},[478,102297,52180],{"class":51680},[478,102299,15485],{"class":484},[478,102301,759],{"class":714},[478,102303,53871],{"class":488},[478,102305,101486],{"class":484},[478,102307,759],{"class":714},[478,102309,101491],{"class":488},[478,102311,51687],{"class":714},[19,102313,102314,102315,28765,102317,102320,102321,102323],{},"这行创建一个刚体，名字叫 ",[475,102316,54094],{},[475,102318,102319],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[475,102322,101549],{},"，也就是离地面 1 米高。",[469,102325,102327],{"className":53447,"code":102326,"language":53449,"meta":54,"style":54},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[475,102328,102329],{"__ignoreMap":54},[478,102330,102331,102333,102335,102337,102339,102342],{"class":480,"line":481},[478,102332,1605],{"class":714},[478,102334,102000],{"class":51680},[478,102336,15485],{"class":484},[478,102338,759],{"class":714},[478,102340,102341],{"class":488},"\"box_free\"",[478,102343,101524],{"class":714},[19,102345,102346,102347,102349],{},"这行很重要。",[475,102348,102000],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[469,102351,102353],{"className":53447,"code":102352,"language":53449,"meta":54,"style":54},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[475,102354,102355],{"__ignoreMap":54},[478,102356,102357,102359,102361,102363,102365,102367,102369,102371,102373,102375,102377,102379,102382,102384,102386,102388,102390,102393],{"class":480,"line":481},[478,102358,1605],{"class":714},[478,102360,101500],{"class":51680},[478,102362,15485],{"class":484},[478,102364,759],{"class":714},[478,102366,101507],{"class":488},[478,102368,54204],{"class":484},[478,102370,759],{"class":714},[478,102372,53871],{"class":488},[478,102374,101516],{"class":484},[478,102376,759],{"class":714},[478,102378,101521],{"class":488},[478,102380,102381],{"class":484}," mass",[478,102383,759],{"class":714},[478,102385,4244],{"class":488},[478,102387,79147],{"class":484},[478,102389,759],{"class":714},[478,102391,102392],{"class":488},"\"1 0 0 1\"",[478,102394,101524],{"class":714},[19,102396,102397,102398,102401,102402,102405,102406,102409,102410,102413],{},"这行给 box body 添加一个盒子形状。",[475,102399,102400],{},"type=\"box\""," 表示形状是盒子。",[475,102403,102404],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[475,102407,102408],{},"mass=\"1\""," 表示质量是 1。",[475,102411,102412],{},"rgba=\"1 0 0 1\""," 表示红色。",[469,102415,102417],{"className":30758,"code":102416,"language":30760,"meta":54,"style":54},"def main() -> None:\n",[475,102418,102419],{"__ignoreMap":54},[478,102420,102421,102423,102425,102427,102429],{"class":480,"line":481},[478,102422,32327],{"class":710},[478,102424,2539],{"class":484},[478,102426,101778],{"class":714},[478,102428,96066],{"class":495},[478,102430,4305],{"class":714},[19,102432,102433,102435,102436,102439,102440,102443],{},[475,102434,32327],{}," 用来定义函数。这里定义了一个叫 ",[475,102437,102438],{},"main"," 的函数。",[475,102441,102442],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[469,102445,102446],{"className":30758,"code":102007,"language":30760,"meta":54,"style":54},[475,102447,102448],{"__ignoreMap":54},[478,102449,102450,102452,102454,102456,102458],{"class":480,"line":481},[478,102451,102014],{"class":714},[478,102453,759],{"class":710},[478,102455,101792],{"class":714},[478,102457,101694],{"class":495},[478,102459,720],{"class":714},[19,102461,102462,102463,102466],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[475,102464,102465],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[469,102468,102469],{"className":30758,"code":102031,"language":30760,"meta":54,"style":54},[475,102470,102471],{"__ignoreMap":54},[478,102472,102473,102475,102477],{"class":480,"line":481},[478,102474,102038],{"class":714},[478,102476,759],{"class":710},[478,102478,101806],{"class":714},[19,102480,102481,102482,102484,102485,102487],{},"这行创建仿真数据。",[475,102483,33781],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[475,102486,33781],{}," 都会变化。",[469,102489,102491],{"className":30758,"code":102490,"language":30760,"meta":54,"style":54},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[475,102492,102493,102503,102513],{"__ignoreMap":54},[478,102494,102495,102497,102499,102501],{"class":480,"line":481},[478,102496,30795],{"class":495},[478,102498,263],{"class":714},[478,102500,101819],{"class":488},[478,102502,101822],{"class":714},[478,102504,102505,102507,102509,102511],{"class":480,"line":565},[478,102506,30795],{"class":495},[478,102508,263],{"class":714},[478,102510,101831],{"class":488},[478,102512,101834],{"class":714},[478,102514,102515,102517,102519,102521],{"class":480,"line":579},[478,102516,30795],{"class":495},[478,102518,263],{"class":714},[478,102520,101843],{"class":488},[478,102522,101846],{"class":714},[19,102524,102525,102527,102528,102531,102532,102535,102536,102539,102540,102543],{},[475,102526,30795],{}," 用来输出信息。",[475,102529,102530],{},"model.nq"," 是位置变量数量，",[475,102533,102534],{},"model.nv"," 是速度变量数量，",[475,102537,102538],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[475,102541,102542],{},"nu"," 是 0。",[469,102545,102547],{"className":30758,"code":102546,"language":30760,"meta":54,"style":54},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[475,102548,102549,102559],{"__ignoreMap":54},[478,102550,102551,102553,102555,102557],{"class":480,"line":481},[478,102552,30795],{"class":495},[478,102554,263],{"class":714},[478,102556,101855],{"class":488},[478,102558,101858],{"class":714},[478,102560,102561,102563,102565,102567],{"class":480,"line":565},[478,102562,30795],{"class":495},[478,102564,263],{"class":714},[478,102566,101867],{"class":488},[478,102568,101870],{"class":714},[19,102570,102571,102572,102574,102575,102577,102578,102581],{},"这里打印初始时间和初始位置。",[475,102573,101447],{}," 一开始是 0。",[475,102576,101450],{}," 是位置数组。",[475,102579,102580],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[469,102583,102584],{"className":30758,"code":102056,"language":30760,"meta":54,"style":54},[475,102585,102586,102602],{"__ignoreMap":54},[478,102587,102588,102590,102592,102594,102596,102598,102600],{"class":480,"line":481},[478,102589,3591],{"class":710},[478,102591,101881],{"class":714},[478,102593,26423],{"class":710},[478,102595,32823],{"class":495},[478,102597,263],{"class":714},[478,102599,1012],{"class":495},[478,102601,31166],{"class":714},[478,102603,102604],{"class":480,"line":565},[478,102605,102079],{"class":714},[19,102607,102608,102610,102611,102614,102615,102617,102618,102620],{},[475,102609,3591],{}," 是循环。",[475,102612,102613],{},"range(100)"," 表示循环 100 次。",[475,102616,1687],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[475,102619,101595],{},"，仿真就前进一步。",[469,102622,102624],{"className":30758,"code":102623,"language":30760,"meta":54,"style":54},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[475,102625,102626,102636],{"__ignoreMap":54},[478,102627,102628,102630,102632,102634],{"class":480,"line":481},[478,102629,30795],{"class":495},[478,102631,263],{"class":714},[478,102633,101909],{"class":488},[478,102635,101858],{"class":714},[478,102637,102638,102640,102642,102644],{"class":480,"line":565},[478,102639,30795],{"class":495},[478,102641,263],{"class":714},[478,102643,101920],{"class":488},[478,102645,101870],{"class":714},[19,102647,102648],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[469,102650,102652],{"className":30758,"code":102651,"language":30760,"meta":54,"style":54},"if __name__ == \"__main__\":\n    main()\n",[475,102653,102654,102666],{"__ignoreMap":54},[478,102655,102656,102658,102660,102662,102664],{"class":480,"line":481},[478,102657,2099],{"class":710},[478,102659,31600],{"class":495},[478,102661,101939],{"class":710},[478,102663,101942],{"class":488},[478,102665,4305],{"class":714},[478,102667,102668],{"class":480,"line":565},[478,102669,101949],{"class":714},[19,102671,102672,102673,102676,102677,28765],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[475,102674,102675],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[475,102678,102675],{},[19,102680,102681],{},"运行:",[469,102683,102685],{"className":471,"code":102684,"language":473,"meta":54,"style":54},"python ch1_first_sim.py\n",[475,102686,102687],{"__ignoreMap":54},[478,102688,102689,102691],{"class":480,"line":481},[478,102690,30760],{"class":484},[478,102692,101666],{"class":488},[14,102694,102696],{"id":102695},"_5运行结果说明","5.运行结果说明",[19,102698,102699],{},"你应该看到类似输出:",[469,102701,102704],{"className":102702,"code":102703,"language":5753,"meta":54},[5751],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[475,102705,102703],{"__ignoreMap":54},[19,102707,102708,102710,102711,102714,102715,28765],{},[475,102709,102000],{}," 有 7 个位置变量: ",[475,102712,102713],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[475,102716,102717],{},"vx vy vz wx wy wz",[19,102719,102720,102721,102724],{},"你还会看到 ",[475,102722,102723],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102726,102728],{"id":102727},"_6验证步骤","6.验证步骤",[19,102730,102731],{},"确认版本:",[469,102733,102734],{"className":471,"code":101319,"language":473,"meta":54,"style":54},[475,102735,102736],{"__ignoreMap":54},[478,102737,102738,102740,102742],{"class":480,"line":481},[478,102739,30760],{"class":484},[478,102741,30738],{"class":495},[478,102743,101330],{"class":488},[19,102745,102746],{},"确认导入的是官方 bindings:",[469,102748,102750],{"className":471,"code":102749,"language":473,"meta":54,"style":54},"python -c \"import mujoco; print(mujoco)\"\n",[475,102751,102752],{"__ignoreMap":54},[478,102753,102754,102756,102758],{"class":480,"line":481},[478,102755,30760],{"class":484},[478,102757,30738],{"class":495},[478,102759,102760],{"class":488}," \"import mujoco; print(mujoco)\"\n",[19,102762,102763],{},"运行程序:",[469,102765,102766],{"className":471,"code":102684,"language":473,"meta":54,"style":54},[475,102767,102768],{"__ignoreMap":54},[478,102769,102770,102772],{"class":480,"line":481},[478,102771,30760],{"class":484},[478,102773,101666],{"class":488},[19,102775,102776,102777,102780,102781,28765],{},"检查 ",[475,102778,102779],{},"final time"," 是否约等于 ",[475,102782,102783],{},"1.0",[19,102785,102786],{},"再做几个小实验：",[29,102788,102789,102799,102807,102820],{},[32,102790,102791,102792,102794,102795,102798],{},"把 ",[475,102793,102319],{}," 改成 ",[475,102796,102797],{},"pos=\"0 0 2\"","，观察初始高度变化。",[32,102800,102791,102801,102794,102803,102806],{},[475,102802,102208],{},[475,102804,102805],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[32,102808,102791,102809,102794,102811,102814,102815,102817,102818,28765],{},[475,102810,102204],{},[475,102812,102813],{},"timestep=\"0.005\"","，观察 100 步后的 ",[475,102816,102779],{}," 是否变成约 ",[475,102819,35709],{},[32,102821,102822,102823,102826],{},"删除 ",[475,102824,102825],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102828,102829],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102831,102833],{"id":102832},"_7常见错误与解决方案","7.常见错误与解决方案",[129,102835,102837],{"id":102836},"modulenotfounderror-no-module-named-mujoco",[475,102838,102839],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102841,102842],{},"解决:",[469,102844,102846],{"className":471,"code":102845,"language":473,"meta":54,"style":54},"pip install \"mujoco>=2.3\"\n",[475,102847,102848],{"__ignoreMap":54},[478,102849,102850,102852,102854],{"class":480,"line":481},[478,102851,485],{"class":484},[478,102853,489],{"class":488},[478,102855,102856],{"class":488}," \"mujoco>=2.3\"\n",[129,102858,102860],{"id":102859},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102862,102863],{},"先安装系统依赖:",[469,102865,102867],{"className":471,"code":102866,"language":473,"meta":54,"style":54},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[475,102868,102869],{"__ignoreMap":54},[478,102870,102871,102873,102875,102877,102879,102882,102884,102887,102889,102892,102894],{"class":480,"line":481},[478,102872,24956],{"class":484},[478,102874,26695],{"class":488},[478,102876,489],{"class":488},[478,102878,26780],{"class":495},[478,102880,102881],{"class":488}," mesa-libGL",[478,102883,101194],{"class":488},[478,102885,102886],{"class":488}," glfw",[478,102888,101214],{"class":488},[478,102890,102891],{"class":488}," libX11",[478,102893,101227],{"class":488},[478,102895,102896],{"class":488}," libXrandr\n",[129,102898,102900],{"id":102899},"xml-解析失败","XML 解析失败",[19,102902,102903],{},"检查:",[29,102905,102906,102909,102912,102918],{},[32,102907,102908],{},"标签是否闭合",[32,102910,102911],{},"属性是否带引号",[32,102913,102914,102915],{},"根节点是否是 ",[475,102916,102917],{},"\u003Cmujoco>",[32,102919,102920,102922,102923,102926],{},[475,102921,52180],{}," 是否放在 ",[475,102924,102925],{},"\u003Cworldbody>"," 内部",[129,102928,102930,102932,102933],{"id":102929},"final-time-不是严格等于-10",[475,102931,102779],{}," 不是严格等于 ",[475,102934,102783],{},[19,102936,102937],{},"这通常不是错误。浮点数计算可能得到：",[469,102939,102942],{"className":102940,"code":102941,"language":5753,"meta":54},[5751],"1.0000000000000007\n",[475,102943,102941],{"__ignoreMap":54},[19,102945,102946,102947,102949],{},"只要接近 ",[475,102948,102783],{}," 就正常。",[129,102951,102952],{"id":102952},"方块没有掉下来",[19,102954,102955],{},"检查：",[29,102957,102958,102964,102970,102975],{},[32,102959,102960,102961],{},"方块 body 里是否有 ",[475,102962,102963],{},"\u003Cfreejoint\u002F>",[32,102965,102966,102967],{},"重力是否是 ",[475,102968,102969],{},"0 0 -9.81",[32,102971,102972,102973],{},"是否真的调用了 ",[475,102974,101065],{},[32,102976,102977,102978,102980,102981],{},"你看的是否是 ",[475,102979,102723],{},"，不是 ",[475,102982,102983],{},"initial qpos",[14,102985,102987],{"id":102986},"_8本章小结","8.本章小结",[19,102989,102990],{},"本章你已经完成了 MuJoCo 的最小闭环：",[469,102992,102995],{"className":102993,"code":102994,"language":5753,"meta":54},[5751],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[475,102996,102994],{"__ignoreMap":54},[19,102998,102999],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[617,103001,103002],{},"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":54,"searchDepth":565,"depth":565,"links":103004},[103005,103006,103007,103012,103016,103017,103018,103026],{"id":101026,"depth":565,"text":101027},{"id":101149,"depth":565,"text":101150},{"id":101424,"depth":565,"text":101425,"children":103008},[103009,103010,103011],{"id":101462,"depth":579,"text":101463},{"id":101556,"depth":579,"text":101557},{"id":101608,"depth":579,"text":101609},{"id":101632,"depth":565,"text":101633,"children":103013},[103014,103015],{"id":101952,"depth":579,"text":101952},{"id":102088,"depth":579,"text":102088},{"id":102695,"depth":565,"text":102696},{"id":102727,"depth":565,"text":102728},{"id":102832,"depth":565,"text":102833,"children":103019},[103020,103021,103022,103023,103025],{"id":102836,"depth":579,"text":102839},{"id":102859,"depth":579,"text":102860},{"id":102899,"depth":579,"text":102900},{"id":102929,"depth":579,"text":103024},"final time 不是严格等于 1.0",{"id":102952,"depth":579,"text":102952},{"id":102986,"depth":565,"text":102987},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101018,"description":54},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103033,"title":103034,"body":103035,"description":54,"extension":638,"meta":104691,"navigation":640,"path":104692,"seo":104693,"stem":104694,"__hash__":104695},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103036,"toc":104667},[103037,103040,103042,103045,103048,103065,103160,103163,103169,103171,103173,103197,103200,103214,103217,103258,103260,103273,103275,103278,103326,103338,103341,103344,103350,103363,103430,103433,103452,103455,103458,103464,103466,103475,103478,103482,103491,103573,103582,103586,103592,103606,103616,103618,103948,103951,103963,103965,103976,103978,103981,103999,104002,104005,104023,104034,104037,104052,104062,104064,104085,104102,104122,104128,104168,104184,104200,104206,104209,104233,104249,104254,104284,104301,104326,104329,104344,104353,104368,104377,104392,104399,104401,104411,104424,104431,104434,104473,104480,104482,104534,104536,104542,104545,104552,104559,104562,104564,104582,104585,104588,104622,104634,104636,104639,104661,104664],[10,103038,103034],{"id":103039},"_2xml-与-mjcf-物理建模基础",[14,103041,101027],{"id":101026},[19,103043,103044],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103046,103047],{},"本章结束后，你应该能看懂一个简单模型里：",[29,103049,103050,103053,103056,103059,103062],{},[32,103051,103052],{},"地面在哪里。",[32,103054,103055],{},"物体初始位置在哪里。",[32,103057,103058],{},"几何体是什么形状。",[32,103060,103061],{},"哪些 body 可以自由运动。",[32,103063,103064],{},"如何用名字在 Python 里找到 XML 中的对象。",[371,103066,103067,103077],{},[374,103068,103069],{},[377,103070,103071,103074],{},[380,103072,103073],{"align":382},"标签",[380,103075,103076],{"align":382},"作用",[388,103078,103079,103088,103098,103107,103117,103127,103140,103150],{},[377,103080,103081,103085],{},[393,103082,103083],{"align":382},[475,103084,102917],{},[393,103086,103087],{"align":382},"根节点",[377,103089,103090,103095],{},[393,103091,103092],{"align":382},[475,103093,103094],{},"\u003Coption>",[393,103096,103097],{"align":382},"仿真参数",[377,103099,103100,103104],{},[393,103101,103102],{"align":382},[475,103103,102925],{},[393,103105,103106],{"align":382},"世界中的物体",[377,103108,103109,103114],{},[393,103110,103111],{"align":382},[475,103112,103113],{},"\u003Cbody>",[393,103115,103116],{"align":382},"刚体",[377,103118,103119,103124],{},[393,103120,103121],{"align":382},[475,103122,103123],{},"\u003Cgeom>",[393,103125,103126],{"align":382},"几何体、碰撞体、可视体",[377,103128,103129,103137],{},[393,103130,103131,25358,103134],{"align":382},[475,103132,103133],{},"\u003Cjoint>",[475,103135,103136],{},"\u003Cfreejoint>",[393,103138,103139],{"align":382},"关节",[377,103141,103142,103147],{},[393,103143,103144],{"align":382},[475,103145,103146],{},"\u003Csite>",[393,103148,103149],{"align":382},"标记点",[377,103151,103152,103157],{},[393,103153,103154],{"align":382},[475,103155,103156],{},"\u003Cactuator>",[393,103158,103159],{"align":382},"控制器",[19,103161,103162],{},"初学时可以先记住：",[469,103164,103167],{"className":103165,"code":103166,"language":5753,"meta":54},[5751],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[475,103168,103166],{"__ignoreMap":54},[14,103170,101150],{"id":101149},[19,103172,101153],{},[469,103174,103176],{"className":471,"code":103175,"language":473,"meta":54,"style":54},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[475,103177,103178],{"__ignoreMap":54},[478,103179,103180,103182,103184,103186,103188,103190,103192,103194],{"class":480,"line":481},[478,103181,24956],{"class":484},[478,103183,26695],{"class":488},[478,103185,489],{"class":488},[478,103187,26780],{"class":495},[478,103189,102881],{"class":488},[478,103191,101194],{"class":488},[478,103193,102886],{"class":488},[478,103195,103196],{"class":488}," glfw-devel\n",[19,103198,103199],{},"pip:",[469,103201,103202],{"className":471,"code":101299,"language":473,"meta":54,"style":54},[475,103203,103204],{"__ignoreMap":54},[478,103205,103206,103208,103210,103212],{"class":480,"line":481},[478,103207,485],{"class":484},[478,103209,489],{"class":488},[478,103211,101310],{"class":488},[478,103213,101313],{"class":488},[19,103215,103216],{},"conda:",[469,103218,103220],{"className":471,"code":103219,"language":473,"meta":54,"style":54},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[475,103221,103222,103239,103248],{"__ignoreMap":54},[478,103223,103224,103226,103228,103230,103233,103235,103237],{"class":480,"line":481},[478,103225,30710],{"class":484},[478,103227,29556],{"class":488},[478,103229,25495],{"class":495},[478,103231,103232],{"class":488}," mujoco-xml",[478,103234,101355],{"class":488},[478,103236,101358],{"class":495},[478,103238,101361],{"class":495},[478,103240,103241,103243,103245],{"class":480,"line":565},[478,103242,30710],{"class":484},[478,103244,101368],{"class":488},[478,103246,103247],{"class":488}," mujoco-xml\n",[478,103249,103250,103252,103254,103256],{"class":480,"line":579},[478,103251,485],{"class":484},[478,103253,489],{"class":488},[478,103255,101310],{"class":488},[478,103257,101313],{"class":488},[19,103259,101384],{},[29,103261,103262,103265,103270],{},[32,103263,103264],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[32,103266,103267,103268,28765],{},"本章使用基础标签，适用于 ",[475,103269,101407],{},[32,103271,103272],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103274,101425],{"id":101424},[19,103276,103277],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[469,103279,103281],{"className":53447,"code":103280,"language":53449,"meta":54,"style":54},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[475,103282,103283,103297,103305,103310,103318],{"__ignoreMap":54},[478,103284,103285,103287,103289,103291,103293,103295],{"class":480,"line":481},[478,103286,1605],{"class":714},[478,103288,101401],{"class":51680},[478,103290,102155],{"class":484},[478,103292,759],{"class":714},[478,103294,63059],{"class":488},[478,103296,51687],{"class":714},[478,103298,103299,103301,103303],{"class":480,"line":565},[478,103300,52524],{"class":714},[478,103302,102221],{"class":51680},[478,103304,51687],{"class":714},[478,103306,103307],{"class":480,"line":579},[478,103308,103309],{"class":714},"    ...\n",[478,103311,103312,103314,103316],{"class":480,"line":593},[478,103313,52797],{"class":714},[478,103315,102221],{"class":51680},[478,103317,51687],{"class":714},[478,103319,103320,103322,103324],{"class":480,"line":1769},[478,103321,52165],{"class":714},[478,103323,101401],{"class":51680},[478,103325,51687],{"class":714},[19,103327,103328,103330,103331,103333,103334,103337],{},[475,103329,52180],{}," 表示刚体。",[475,103332,101500],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[475,103335,103336],{},"joint"," 表示刚体相对父刚体如何运动。",[129,103339,103340],{"id":103340},"层级结构非常重要",[19,103342,103343],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[469,103345,103348],{"className":103346,"code":103347,"language":5753,"meta":54},[5751],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[475,103349,103347],{"__ignoreMap":54},[19,103351,103352,101398,103355,103358,103359,103362],{},[475,103353,103354],{},"red_box_geom",[475,103356,103357],{},"box_center"," 都属于 ",[475,103360,103361],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[469,103364,103366],{"className":53447,"code":103365,"language":53449,"meta":54,"style":54},"\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",[475,103367,103368,103388,103402,103422],{"__ignoreMap":54},[478,103369,103370,103372,103374,103376,103378,103380,103382,103384,103386],{"class":480,"line":481},[478,103371,1605],{"class":714},[478,103373,52180],{"class":51680},[478,103375,15485],{"class":484},[478,103377,759],{"class":714},[478,103379,53871],{"class":488},[478,103381,101486],{"class":484},[478,103383,759],{"class":714},[478,103385,101491],{"class":488},[478,103387,51687],{"class":714},[478,103389,103390,103392,103394,103396,103398,103400],{"class":480,"line":565},[478,103391,52524],{"class":714},[478,103393,102000],{"class":51680},[478,103395,15485],{"class":484},[478,103397,759],{"class":714},[478,103399,102341],{"class":488},[478,103401,101524],{"class":714},[478,103403,103404,103406,103408,103410,103412,103414,103416,103418,103420],{"class":480,"line":579},[478,103405,52524],{"class":714},[478,103407,101500],{"class":51680},[478,103409,54204],{"class":484},[478,103411,759],{"class":714},[478,103413,53871],{"class":488},[478,103415,101516],{"class":484},[478,103417,759],{"class":714},[478,103419,101521],{"class":488},[478,103421,101524],{"class":714},[478,103423,103424,103426,103428],{"class":480,"line":593},[478,103425,52165],{"class":714},[478,103427,52180],{"class":51680},[478,103429,51687],{"class":714},[19,103431,103432],{},"含义:",[29,103434,103435,103441,103446,103449],{},[32,103436,103437,103438,103440],{},"创建名为 ",[475,103439,54094],{}," 的刚体",[32,103442,103443,103444],{},"初始位置在世界坐标 ",[475,103445,101549],{},[32,103447,103448],{},"它有一个自由关节",[32,103450,103451],{},"它有一个盒子几何体",[129,103453,103454],{"id":103454},"坐标怎么理解",[19,103456,103457],{},"MuJoCo 默认使用三维坐标：",[469,103459,103462],{"className":103460,"code":103461,"language":5753,"meta":54},[5751],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[475,103463,103461],{"__ignoreMap":54},[19,103465,15198],{},[469,103467,103469],{"className":53447,"code":103468,"language":53449,"meta":54,"style":54},"pos=\"0 0 1\"\n",[475,103470,103471],{"__ignoreMap":54},[478,103472,103473],{"class":480,"line":481},[478,103474,103468],{"class":714},[19,103476,103477],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[129,103479,103481],{"id":103480},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103483,103484,103485,82910,103488,103490],{},"不同 ",[475,103486,103487],{},"type",[475,103489,31876],{}," 含义不同：",[371,103492,103493,103508],{},[374,103494,103495],{},[377,103496,103497,103501,103506],{},[380,103498,103499],{"align":382},[475,103500,103487],{},[380,103502,103503,103505],{"align":382},[475,103504,31876],{}," 示例",[380,103507,101080],{"align":382},[388,103509,103510,103524,103539,103558],{},[377,103511,103512,103516,103521],{},[393,103513,103514],{"align":382},[475,103515,54094],{},[393,103517,103518],{"align":382},[475,103519,103520],{},"size=\"0.1 0.2 0.3\"",[393,103522,103523],{"align":382},"x\u002Fy\u002Fz 半边长，不是完整长度",[377,103525,103526,103531,103536],{},[393,103527,103528],{"align":382},[475,103529,103530],{},"sphere",[393,103532,103533],{"align":382},[475,103534,103535],{},"size=\"0.1\"",[393,103537,103538],{"align":382},"球半径",[377,103540,103541,103546,103551],{},[393,103542,103543],{"align":382},[475,103544,103545],{},"capsule",[393,103547,103548],{"align":382},[475,103549,103550],{},"size=\"0.03\"",[393,103552,103553,103554,103557],{"align":382},"胶囊半径，长度常用 ",[475,103555,103556],{},"fromto"," 指定",[377,103559,103560,103565,103570],{},[393,103561,103562],{"align":382},[475,103563,103564],{},"plane",[393,103566,103567],{"align":382},[475,103568,103569],{},"size=\"3 3 0.1\"",[393,103571,103572],{"align":382},"可视平面大小，通常当地面",[19,103574,103575,103576,103578,103579,103581],{},"最容易踩坑的是 box：",[475,103577,102404],{}," 表示边长大约是 ",[475,103580,32417],{},"，因为 MuJoCo 用的是半边长。",[129,103583,103585],{"id":103584},"site-是什么","site 是什么",[19,103587,103588,103591],{},[475,103589,103590],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[29,103593,103594,103597,103600,103603],{},[32,103595,103596],{},"标记机械臂末端。",[32,103598,103599],{},"标记目标位置。",[32,103601,103602],{},"放传感器或相机参考点。",[32,103604,103605],{},"在 Python 中读取某个关键点的世界坐标。",[19,103607,103608,103609,101398,103612,103615],{},"在后面的 Reacher 任务中，",[475,103610,103611],{},"tip",[475,103613,103614],{},"target"," 就会用 site 表示。",[14,103617,101633],{"id":101632},[469,103619,103621],{"className":30758,"code":103620,"language":30760,"meta":54,"style":54},"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",[475,103622,103623,103629,103639,103643,103647,103655,103660,103664,103668,103672,103677,103681,103686,103691,103696,103701,103705,103709,103713,103717,103721,103725,103737,103749,103757,103761,103776,103791,103795,103808,103823,103836,103849,103853,103869,103873,103877,103888,103900,103912,103924,103928,103932,103944],{"__ignoreMap":54},[478,103624,103625,103627],{"class":480,"line":481},[478,103626,30772],{"class":710},[478,103628,101681],{"class":714},[478,103630,103631,103633,103635,103637],{"class":480,"line":565},[478,103632,30772],{"class":710},[478,103634,31760],{"class":714},[478,103636,31763],{"class":710},[478,103638,31766],{"class":714},[478,103640,103641],{"class":480,"line":579},[478,103642,2966],{"emptyLinePlaceholder":640},[478,103644,103645],{"class":480,"line":593},[478,103646,2966],{"emptyLinePlaceholder":640},[478,103648,103649,103651,103653],{"class":480,"line":1769},[478,103650,101694],{"class":495},[478,103652,14130],{"class":710},[478,103654,101699],{"class":488},[478,103656,103657],{"class":480,"line":1783},[478,103658,103659],{"class":488},"\u003Cmujoco model=\"xml_basic\">\n",[478,103661,103662],{"class":480,"line":1789},[478,103663,101709],{"class":488},[478,103665,103666],{"class":480,"line":1880},[478,103667,2966],{"emptyLinePlaceholder":640},[478,103669,103670],{"class":480,"line":1886},[478,103671,101718],{"class":488},[478,103673,103674],{"class":480,"line":1898},[478,103675,103676],{"class":488},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[478,103678,103679],{"class":480,"line":2180},[478,103680,2966],{"emptyLinePlaceholder":640},[478,103682,103683],{"class":480,"line":2185},[478,103684,103685],{"class":488},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[478,103687,103688],{"class":480,"line":2191},[478,103689,103690],{"class":488},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[478,103692,103693],{"class":480,"line":2196},[478,103694,103695],{"class":488},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[478,103697,103698],{"class":480,"line":2210},[478,103699,103700],{"class":488},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[478,103702,103703],{"class":480,"line":2215},[478,103704,101747],{"class":488},[478,103706,103707],{"class":480,"line":2221},[478,103708,101752],{"class":488},[478,103710,103711],{"class":480,"line":2241},[478,103712,101757],{"class":488},[478,103714,103715],{"class":480,"line":2246},[478,103716,96078],{"class":488},[478,103718,103719],{"class":480,"line":2260},[478,103720,2966],{"emptyLinePlaceholder":640},[478,103722,103723],{"class":480,"line":2265},[478,103724,2966],{"emptyLinePlaceholder":640},[478,103726,103727,103729,103731,103733,103735],{"class":480,"line":2294},[478,103728,32327],{"class":710},[478,103730,2539],{"class":484},[478,103732,101778],{"class":714},[478,103734,96066],{"class":495},[478,103736,4305],{"class":714},[478,103738,103739,103741,103743,103745,103747],{"class":480,"line":2299},[478,103740,101787],{"class":714},[478,103742,759],{"class":710},[478,103744,101792],{"class":714},[478,103746,101694],{"class":495},[478,103748,720],{"class":714},[478,103750,103751,103753,103755],{"class":480,"line":2316},[478,103752,101801],{"class":714},[478,103754,759],{"class":710},[478,103756,101806],{"class":714},[478,103758,103759],{"class":480,"line":2321},[478,103760,2966],{"emptyLinePlaceholder":640},[478,103762,103763,103766,103768,103771,103774],{"class":480,"line":2326},[478,103764,103765],{"class":714},"    box_body_id ",[478,103767,759],{"class":710},[478,103769,103770],{"class":714}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[478,103772,103773],{"class":488},"\"red_box\"",[478,103775,720],{"class":714},[478,103777,103778,103781,103783,103786,103789],{"class":480,"line":2331},[478,103779,103780],{"class":714},"    site_id ",[478,103782,759],{"class":710},[478,103784,103785],{"class":714}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[478,103787,103788],{"class":488},"\"box_center\"",[478,103790,720],{"class":714},[478,103792,103793],{"class":480,"line":2345},[478,103794,2966],{"emptyLinePlaceholder":640},[478,103796,103797,103799,103802,103804,103806],{"class":480,"line":2350},[478,103798,3667],{"class":710},[478,103800,103801],{"class":714}," box_body_id ",[478,103803,1605],{"class":710},[478,103805,4659],{"class":495},[478,103807,4305],{"class":714},[478,103809,103810,103813,103816,103818,103821],{"class":480,"line":3143},[478,103811,103812],{"class":710},"        raise",[478,103814,103815],{"class":495}," RuntimeError",[478,103817,263],{"class":714},[478,103819,103820],{"class":488},"\"body red_box not found\"",[478,103822,720],{"class":714},[478,103824,103825,103827,103830,103832,103834],{"class":480,"line":3157},[478,103826,3667],{"class":710},[478,103828,103829],{"class":714}," site_id ",[478,103831,1605],{"class":710},[478,103833,4659],{"class":495},[478,103835,4305],{"class":714},[478,103837,103838,103840,103842,103844,103847],{"class":480,"line":3165},[478,103839,103812],{"class":710},[478,103841,103815],{"class":495},[478,103843,263],{"class":714},[478,103845,103846],{"class":488},"\"site box_center not found\"",[478,103848,720],{"class":714},[478,103850,103851],{"class":480,"line":3170},[478,103852,2966],{"emptyLinePlaceholder":640},[478,103854,103855,103857,103859,103861,103863,103865,103867],{"class":480,"line":3176},[478,103856,3767],{"class":710},[478,103858,101881],{"class":714},[478,103860,26423],{"class":710},[478,103862,32823],{"class":495},[478,103864,263],{"class":714},[478,103866,2289],{"class":495},[478,103868,31166],{"class":714},[478,103870,103871],{"class":480,"line":3182},[478,103872,101896],{"class":714},[478,103874,103875],{"class":480,"line":3187},[478,103876,2966],{"emptyLinePlaceholder":640},[478,103878,103879,103881,103883,103886],{"class":480,"line":8514},[478,103880,31679],{"class":495},[478,103882,263],{"class":714},[478,103884,103885],{"class":488},"\"simulation time:\"",[478,103887,101858],{"class":714},[478,103889,103890,103892,103894,103897],{"class":480,"line":8538},[478,103891,31679],{"class":495},[478,103893,263],{"class":714},[478,103895,103896],{"class":488},"\"box body position:\"",[478,103898,103899],{"class":714},", data.xpos[box_body_id].copy())\n",[478,103901,103902,103904,103906,103909],{"class":480,"line":8543},[478,103903,31679],{"class":495},[478,103905,263],{"class":714},[478,103907,103908],{"class":488},"\"site position:\"",[478,103910,103911],{"class":714},", data.site_xpos[site_id].copy())\n",[478,103913,103914,103916,103918,103921],{"class":480,"line":8549},[478,103915,31679],{"class":495},[478,103917,263],{"class":714},[478,103919,103920],{"class":488},"\"box qpos:\"",[478,103922,103923],{"class":714},", np.array(data.qpos))\n",[478,103925,103926],{"class":480,"line":8576},[478,103927,2966],{"emptyLinePlaceholder":640},[478,103929,103930],{"class":480,"line":8581},[478,103931,2966],{"emptyLinePlaceholder":640},[478,103933,103934,103936,103938,103940,103942],{"class":480,"line":8587},[478,103935,2099],{"class":710},[478,103937,31600],{"class":495},[478,103939,101939],{"class":710},[478,103941,101942],{"class":488},[478,103943,4305],{"class":714},[478,103945,103946],{"class":480,"line":8599},[478,103947,101949],{"class":714},[19,103949,103950],{},"保存为：",[469,103952,103954],{"className":471,"code":103953,"language":473,"meta":54,"style":54},"touch ch2_xml_basic.py\n",[475,103955,103956],{"__ignoreMap":54},[478,103957,103958,103960],{"class":480,"line":481},[478,103959,101663],{"class":484},[478,103961,103962],{"class":488}," ch2_xml_basic.py\n",[19,103964,102681],{},[469,103966,103968],{"className":471,"code":103967,"language":473,"meta":54,"style":54},"python ch2_xml_basic.py\n",[475,103969,103970],{"__ignoreMap":54},[478,103971,103972,103974],{"class":480,"line":481},[478,103973,30760],{"class":484},[478,103975,103962],{"class":488},[129,103977,101952],{"id":101952},[19,103979,103980],{},"用名字查找 body：",[469,103982,103984],{"className":30758,"code":103983,"language":30760,"meta":54,"style":54},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[475,103985,103986],{"__ignoreMap":54},[478,103987,103988,103991,103993,103995,103997],{"class":480,"line":481},[478,103989,103990],{"class":714},"box_body_id ",[478,103992,759],{"class":710},[478,103994,103770],{"class":714},[478,103996,103773],{"class":488},[478,103998,720],{"class":714},[19,104000,104001],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104003,104004],{},"用名字查找 site：",[469,104006,104008],{"className":30758,"code":104007,"language":30760,"meta":54,"style":54},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[475,104009,104010],{"__ignoreMap":54},[478,104011,104012,104015,104017,104019,104021],{"class":480,"line":481},[478,104013,104014],{"class":714},"site_id ",[478,104016,759],{"class":710},[478,104018,103785],{"class":714},[478,104020,103788],{"class":488},[478,104022,720],{"class":714},[19,104024,104025,104026,104029,104030,104033],{},"注意第二个参数是对象类型。查 body 就用 ",[475,104027,104028],{},"mjOBJ_BODY","，查 site 就用 ",[475,104031,104032],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104035,104036],{},"读取世界坐标：",[469,104038,104040],{"className":30758,"code":104039,"language":30760,"meta":54,"style":54},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[475,104041,104042,104047],{"__ignoreMap":54},[478,104043,104044],{"class":480,"line":481},[478,104045,104046],{"class":714},"data.xpos[box_body_id]\n",[478,104048,104049],{"class":480,"line":565},[478,104050,104051],{"class":714},"data.site_xpos[site_id]\n",[19,104053,104054,104057,104058,104061],{},[475,104055,104056],{},"xpos"," 是 body 的世界坐标，",[475,104059,104060],{},"site_xpos"," 是 site 的世界坐标。",[129,104063,102088],{"id":102088},[469,104065,104067],{"className":30758,"code":104066,"language":30760,"meta":54,"style":54},"import mujoco\nimport numpy as np\n",[475,104068,104069,104075],{"__ignoreMap":54},[478,104070,104071,104073],{"class":480,"line":481},[478,104072,30772],{"class":710},[478,104074,101681],{"class":714},[478,104076,104077,104079,104081,104083],{"class":480,"line":565},[478,104078,30772],{"class":710},[478,104080,31760],{"class":714},[478,104082,31763],{"class":710},[478,104084,31766],{"class":714},[19,104086,104087,104088,104091,104092,104095,104096,916,104099,28765],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[475,104089,104090],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[475,104093,104094],{},"as np"," 是习惯写法，后面就可以写 ",[475,104097,104098],{},"np.array(...)",[475,104100,104101],{},"np.round(...)",[469,104103,104104],{"className":30758,"code":101975,"language":30760,"meta":54,"style":54},[475,104105,104106,104114,104118],{"__ignoreMap":54},[478,104107,104108,104110,104112],{"class":480,"line":481},[478,104109,101694],{"class":495},[478,104111,14130],{"class":710},[478,104113,101699],{"class":488},[478,104115,104116],{"class":480,"line":565},[478,104117,101990],{"class":488},[478,104119,104120],{"class":480,"line":579},[478,104121,96078],{"class":488},[19,104123,104124,104125,28765],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[475,104126,104127],{},"mujoco.MjModel.from_xml_string(XML)",[469,104129,104131],{"className":53447,"code":104130,"language":53449,"meta":54,"style":54},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[475,104132,104133],{"__ignoreMap":54},[478,104134,104135,104137,104139,104141,104143,104145,104147,104149,104152,104154,104156,104159,104161,104163,104166],{"class":480,"line":481},[478,104136,1605],{"class":714},[478,104138,103590],{"class":51680},[478,104140,15485],{"class":484},[478,104142,759],{"class":714},[478,104144,103788],{"class":488},[478,104146,101486],{"class":484},[478,104148,759],{"class":714},[478,104150,104151],{"class":488},"\"0 0 0\"",[478,104153,101516],{"class":484},[478,104155,759],{"class":714},[478,104157,104158],{"class":488},"\"0.03\"",[478,104160,79147],{"class":484},[478,104162,759],{"class":714},[478,104164,104165],{"class":488},"\"0 1 0 1\"",[478,104167,101524],{"class":714},[19,104169,104170,104172,104173,104176,104177,104179,104180,104183],{},[475,104171,103590],{}," 是标记点。",[475,104174,104175],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[475,104178,103550],{}," 表示显示出来的小球大小。",[475,104181,104182],{},"rgba=\"0 1 0 1\""," 表示绿色。",[469,104185,104186],{"className":30758,"code":103983,"language":30760,"meta":54,"style":54},[475,104187,104188],{"__ignoreMap":54},[478,104189,104190,104192,104194,104196,104198],{"class":480,"line":481},[478,104191,103990],{"class":714},[478,104193,759],{"class":710},[478,104195,103770],{"class":714},[478,104197,103773],{"class":488},[478,104199,720],{"class":714},[19,104201,104202,104203,104205],{},"这行的作用是：根据名字 ",[475,104204,103773],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104207,104208],{},"拆开看：",[29,104210,104211,104217,104222,104228],{},[32,104212,104213,104216],{},[475,104214,104215],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[32,104218,104219,104221],{},[475,104220,102465],{}," 是被查询的模型。",[32,104223,104224,104227],{},[475,104225,104226],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[32,104229,104230,104232],{},[475,104231,103773],{}," 是 XML 里写的名字。",[469,104234,104235],{"className":30758,"code":104007,"language":30760,"meta":54,"style":54},[475,104236,104237],{"__ignoreMap":54},[478,104238,104239,104241,104243,104245,104247],{"class":480,"line":481},[478,104240,104014],{"class":714},[478,104242,759],{"class":710},[478,104244,103785],{"class":714},[478,104246,103788],{"class":488},[478,104248,720],{"class":714},[19,104250,104251,104252,28765],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[475,104253,103788],{},[469,104255,104257],{"className":30758,"code":104256,"language":30760,"meta":54,"style":54},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[475,104258,104259,104271],{"__ignoreMap":54},[478,104260,104261,104263,104265,104267,104269],{"class":480,"line":481},[478,104262,2099],{"class":710},[478,104264,103801],{"class":714},[478,104266,1605],{"class":710},[478,104268,4659],{"class":495},[478,104270,4305],{"class":714},[478,104272,104273,104276,104278,104280,104282],{"class":480,"line":565},[478,104274,104275],{"class":710},"    raise",[478,104277,103815],{"class":495},[478,104279,263],{"class":714},[478,104281,103820],{"class":488},[478,104283,720],{"class":714},[19,104285,104286,104288,104289,104292,104293,104296,104297,104300],{},[475,104287,2099],{}," 是条件判断。",[475,104290,104291],{},"mj_name2id"," 找不到对象时会返回 ",[475,104294,104295],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[475,104298,104299],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[469,104302,104304],{"className":30758,"code":104303,"language":30760,"meta":54,"style":54},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[475,104305,104306,104322],{"__ignoreMap":54},[478,104307,104308,104310,104312,104314,104316,104318,104320],{"class":480,"line":481},[478,104309,3591],{"class":710},[478,104311,101881],{"class":714},[478,104313,26423],{"class":710},[478,104315,32823],{"class":495},[478,104317,263],{"class":714},[478,104319,2289],{"class":495},[478,104321,31166],{"class":714},[478,104323,104324],{"class":480,"line":565},[478,104325,102079],{"class":714},[19,104327,104328],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[469,104330,104332],{"className":30758,"code":104331,"language":30760,"meta":54,"style":54},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[475,104333,104334],{"__ignoreMap":54},[478,104335,104336,104338,104340,104342],{"class":480,"line":481},[478,104337,30795],{"class":495},[478,104339,263],{"class":714},[478,104341,103896],{"class":488},[478,104343,103899],{"class":714},[19,104345,104346,104348,104349,104352],{},[475,104347,101459],{}," 保存所有 body 的世界坐标。",[475,104350,104351],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[469,104354,104356],{"className":30758,"code":104355,"language":30760,"meta":54,"style":54},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[475,104357,104358],{"__ignoreMap":54},[478,104359,104360,104362,104364,104366],{"class":480,"line":481},[478,104361,30795],{"class":495},[478,104363,263],{"class":714},[478,104365,103908],{"class":488},[478,104367,103911],{"class":714},[19,104369,104370,104373,104374,104376],{},[475,104371,104372],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[475,104375,103357],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[469,104378,104380],{"className":30758,"code":104379,"language":30760,"meta":54,"style":54},"print(\"box qpos:\", np.array(data.qpos))\n",[475,104381,104382],{"__ignoreMap":54},[478,104383,104384,104386,104388,104390],{"class":480,"line":481},[478,104385,30795],{"class":495},[478,104387,263],{"class":714},[478,104389,103920],{"class":488},[478,104391,103923],{"class":714},[19,104393,104394,104395,104398],{},"这里打印广义位置数组。",[475,104396,104397],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104400,102696],{"id":102695},[19,104402,104403,104404,104407,104408,28765],{},"程序会输出 ",[475,104405,104406],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[475,104409,104410],{},"qpos",[19,104412,104413,104415,104416,104419,104420,104423],{},[475,104414,104351],{}," 是 body 的世界坐标位置。",[475,104417,104418],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[475,104421,104422],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104425,82602,104426,82910,104428,104430],{},[475,104427,103357],{},[475,104429,104175],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104432,104433],{},"如果你把 site 改成：",[469,104435,104437],{"className":53447,"code":104436,"language":53449,"meta":54,"style":54},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[475,104438,104439],{"__ignoreMap":54},[478,104440,104441,104443,104445,104447,104449,104452,104454,104456,104459,104461,104463,104465,104467,104469,104471],{"class":480,"line":481},[478,104442,1605],{"class":714},[478,104444,103590],{"class":51680},[478,104446,15485],{"class":484},[478,104448,759],{"class":714},[478,104450,104451],{"class":488},"\"box_top\"",[478,104453,101486],{"class":484},[478,104455,759],{"class":714},[478,104457,104458],{"class":488},"\"0 0 0.15\"",[478,104460,101516],{"class":484},[478,104462,759],{"class":714},[478,104464,104158],{"class":488},[478,104466,79147],{"class":484},[478,104468,759],{"class":714},[478,104470,104165],{"class":488},[478,104472,101524],{"class":714},[19,104474,104475,104476,104479],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[475,104477,104478],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104481,102728],{"id":102727},[29,104483,104484,104493,104496,104503,104509,104520],{},[32,104485,102791,104486,104488,104489,102794,104491,28765],{},[475,104487,103361],{}," 的初始高度从 ",[475,104490,193],{},[475,104492,789],{},[32,104494,104495],{},"重新运行程序。",[32,104497,104498,104499,104502],{},"观察 ",[475,104500,104501],{},"box qpos"," 和最终位置是否变化。",[32,104504,104505,104506,104508],{},"故意把 ",[475,104507,103590],{}," 名称改错，确认程序能报错。",[32,104510,102791,104511,104513,104514,102794,104516,104519],{},[475,104512,101500],{}," 的颜色 ",[475,104515,102412],{},[475,104517,104518],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[32,104521,102791,104522,82910,104524,102794,104527,104530,104531,104533],{},[475,104523,103357],{},[475,104525,104526],{},"pos",[475,104528,104529],{},"0 0 0.2","，观察 ",[475,104532,104478],{}," 如何变化。",[14,104535,102833],{"id":102832},[129,104537,104539],{"id":104538},"xml-error-schema-violation",[475,104540,104541],{},"XML Error: Schema violation",[19,104543,104544],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[129,104546,104548,81670,104550],{"id":104547},"mj_name2id-返回-1",[475,104549,104291],{},[475,104551,104295],{},[19,104553,104554,104555,104558],{},"说明名字没有找到。检查 XML 中 ",[475,104556,104557],{},"name=\"...\"","，并确认对象类型正确。",[129,104560,104561],{"id":104561},"物体不下落",[19,104563,102903],{},[29,104565,104566,104571,104576],{},[32,104567,104568,104569],{},"body 是否有 ",[475,104570,102000],{},[32,104572,104573,104574],{},"gravity 是否为 ",[475,104575,102969],{},[32,104577,104578,104579,104581],{},"body 是否被固定在 ",[475,104580,102221],{}," 中",[129,104583,104584],{"id":104584},"坐标看起来不符合预期",[19,104586,104587],{},"先区分两种坐标：",[371,104589,104590,104599],{},[374,104591,104592],{},[377,104593,104594,104597],{},[380,104595,104596],{"align":382},"坐标",[380,104598,101080],{"align":382},[388,104600,104601,104611],{},[377,104602,104603,104608],{},[393,104604,104605,104606],{"align":382},"XML 里的 ",[475,104607,104526],{},[393,104609,104610],{"align":382},"相对父 body 的局部坐标",[377,104612,104613,104619],{},[393,104614,104615,25358,104617],{"align":382},[475,104616,101459],{},[475,104618,104372],{},[393,104620,104621],{"align":382},"仿真更新后的世界坐标",[19,104623,104624,104625,104627,104628,82919,104631,104633],{},"如果你修改了 ",[475,104626,101450],{},"，但还没调用 ",[475,104629,104630],{},"mj_forward",[475,104632,101595],{},"，世界坐标可能还没有更新。",[14,104635,102987],{"id":102986},[19,104637,104638],{},"MJCF 建模先掌握四件事：",[29,104640,104641,104646,104651,104656],{},[32,104642,104643,104645],{},[475,104644,52180],{}," 表示刚体层级。",[32,104647,104648,104650],{},[475,104649,101500],{}," 表示形状、碰撞和质量。",[32,104652,104653,104655],{},[475,104654,103336],{}," 决定 body 能不能动、怎么动。",[32,104657,104658,104660],{},[475,104659,103590],{}," 用来标记关键点，方便 Python 读取位置。",[19,104662,104663],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[617,104665,104666],{},"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":54,"searchDepth":565,"depth":565,"links":104668},[104669,104670,104671,104677,104681,104682,104683,104690],{"id":101026,"depth":565,"text":101027},{"id":101149,"depth":565,"text":101150},{"id":101424,"depth":565,"text":101425,"children":104672},[104673,104674,104675,104676],{"id":103340,"depth":579,"text":103340},{"id":103454,"depth":579,"text":103454},{"id":103480,"depth":579,"text":103481},{"id":103584,"depth":579,"text":103585},{"id":101632,"depth":565,"text":101633,"children":104678},[104679,104680],{"id":101952,"depth":579,"text":101952},{"id":102088,"depth":579,"text":102088},{"id":102695,"depth":565,"text":102696},{"id":102727,"depth":565,"text":102728},{"id":102832,"depth":565,"text":102833,"children":104684},[104685,104686,104688,104689],{"id":104538,"depth":579,"text":104541},{"id":104547,"depth":579,"text":104687},"mj_name2id 返回 -1",{"id":104561,"depth":579,"text":104561},{"id":104584,"depth":579,"text":104584},{"id":102986,"depth":565,"text":102987},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103034,"description":54},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104697,"title":104698,"body":104699,"description":54,"extension":638,"meta":106194,"navigation":640,"path":106195,"seo":106196,"stem":106197,"__hash__":106198},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104700,"toc":106166},[104701,104704,104706,104709,104712,104750,104753,104759,104762,104764,104766,104793,104795,104809,104811,104852,104854,104878,104880,104883,104892,104901,104904,104913,104921,104930,104933,104943,104946,104998,105005,105011,105019,105067,105070,105089,105092,105100,105104,105113,105146,105148,105496,105498,105510,105512,105523,105525,105528,105549,105555,105558,105583,105593,105596,105604,105607,105610,105631,105642,105644,105664,105667,105688,105697,105716,105722,105747,105750,105764,105771,105795,105798,105806,105815,105831,105843,105851,105860,105862,105865,105889,105894,105897,105919,105921,105960,105962,105969,105971,105979,105982,105985,105997,106038,106045,106056,106063,106066,106115,106118,106121,106127,106129,106134,106160,106163],[10,104702,104698],{"id":104703},"_3python-控制接口读取状态与推进仿真",[14,104705,101027],{"id":101026},[19,104707,104708],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104710,104711],{},"你将学习:",[29,104713,104714,104719,104724,104728,104733,104744],{},[32,104715,104716],{},[475,104717,104718],{},"MjModel.from_xml_string",[32,104720,104721],{},[475,104722,104723],{},"MjData(model)",[32,104725,104726],{},[475,104727,101595],{},[32,104729,104730],{},[475,104731,104732],{},"mj_resetData",[32,104734,104735,104736,916,104738,916,104741],{},"读取 ",[475,104737,104410],{},[475,104739,104740],{},"qvel",[475,104742,104743],{},"ctrl",[32,104745,104746,104747],{},"使用 ",[475,104748,104749],{},"model.opt.timestep",[19,104751,104752],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[469,104754,104757],{"className":104755,"code":104756,"language":5753,"meta":54},[5751],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[475,104758,104756],{"__ignoreMap":54},[19,104760,104761],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104763,101150],{"id":101149},[19,104765,101153],{},[469,104767,104769],{"className":471,"code":104768,"language":473,"meta":54,"style":54},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[475,104770,104771],{"__ignoreMap":54},[478,104772,104773,104775,104777,104779,104781,104784,104786,104788,104790],{"class":480,"line":481},[478,104774,24956],{"class":484},[478,104776,26695],{"class":488},[478,104778,489],{"class":488},[478,104780,26780],{"class":495},[478,104782,104783],{"class":488}," python3",[478,104785,101178],{"class":488},[478,104787,102881],{"class":488},[478,104789,101194],{"class":488},[478,104791,104792],{"class":488}," glfw\n",[19,104794,103199],{},[469,104796,104797],{"className":471,"code":101299,"language":473,"meta":54,"style":54},[475,104798,104799],{"__ignoreMap":54},[478,104800,104801,104803,104805,104807],{"class":480,"line":481},[478,104802,485],{"class":484},[478,104804,489],{"class":488},[478,104806,101310],{"class":488},[478,104808,101313],{"class":488},[19,104810,103216],{},[469,104812,104814],{"className":471,"code":104813,"language":473,"meta":54,"style":54},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[475,104815,104816,104833,104842],{"__ignoreMap":54},[478,104817,104818,104820,104822,104824,104827,104829,104831],{"class":480,"line":481},[478,104819,30710],{"class":484},[478,104821,29556],{"class":488},[478,104823,25495],{"class":495},[478,104825,104826],{"class":488}," mujoco-python-api",[478,104828,101355],{"class":488},[478,104830,101358],{"class":495},[478,104832,101361],{"class":495},[478,104834,104835,104837,104839],{"class":480,"line":565},[478,104836,30710],{"class":484},[478,104838,101368],{"class":488},[478,104840,104841],{"class":488}," mujoco-python-api\n",[478,104843,104844,104846,104848,104850],{"class":480,"line":579},[478,104845,485],{"class":484},[478,104847,489],{"class":488},[478,104849,101310],{"class":488},[478,104851,101313],{"class":488},[19,104853,101384],{},[29,104855,104856,104863,104872],{},[32,104857,104858,101398,104860,104862],{},[475,104859,101055],{},[475,104861,101060],{}," 是官方 Python bindings 的类名。",[32,104864,104865,104866,104869,104870,28765],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[475,104867,104868],{},"mjModel"," 在 Python 中是 ",[475,104871,101089],{},[32,104873,104874,104875,28765],{},"不要使用 ",[475,104876,104877],{},"sim = mujoco_py.MjSim(...)",[14,104879,101425],{"id":101424},[19,104881,104882],{},"仿真推进核心代码:",[469,104884,104886],{"className":30758,"code":104885,"language":30760,"meta":54,"style":54},"mujoco.mj_step(model, data)\n",[475,104887,104888],{"__ignoreMap":54},[478,104889,104890],{"class":480,"line":481},[478,104891,104885],{"class":714},[19,104893,104894,104895,916,104897,916,104899,28765],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[475,104896,101450],{},[475,104898,101453],{},[475,104900,101447],{},[19,104902,104903],{},"重置仿真:",[469,104905,104907],{"className":30758,"code":104906,"language":30760,"meta":54,"style":54},"mujoco.mj_resetData(model, data)\n",[475,104908,104909],{"__ignoreMap":54},[478,104910,104911],{"class":480,"line":481},[478,104912,104906],{"class":714},[19,104914,104915,104916,82919,104918,104920],{},"如果手动修改了 ",[475,104917,101450],{},[475,104919,101453],{},"，通常应调用:",[469,104922,104924],{"className":30758,"code":104923,"language":30760,"meta":54,"style":54},"mujoco.mj_forward(model, data)\n",[475,104925,104926],{"__ignoreMap":54},[478,104927,104928],{"class":480,"line":481},[478,104929,104923],{"class":714},[19,104931,104932],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[129,104934,104936,916,104938,916,104940,104942],{"id":104935},"qposqvelctrl-是什么",[475,104937,104410],{},[475,104939,104740],{},[475,104941,104743],{}," 是什么",[19,104944,104945],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[371,104947,104948,104960],{},[374,104949,104950],{},[377,104951,104952,104955,104957],{},[380,104953,104954],{"align":382},"字段",[380,104956,101080],{"align":382},[380,104958,104959],{"align":382},"谁来修改",[388,104961,104962,104974,104986],{},[377,104963,104964,104968,104971],{},[393,104965,104966],{"align":382},[475,104967,101450],{},[393,104969,104970],{"align":382},"广义位置，例如小车位置、关节角、自由物体位置姿态",[393,104972,104973],{"align":382},"MuJoCo 更新，也可以手动设置初始状态",[377,104975,104976,104980,104983],{},[393,104977,104978],{"align":382},[475,104979,101453],{},[393,104981,104982],{"align":382},"广义速度，例如小车速度、关节角速度",[393,104984,104985],{"align":382},"MuJoCo 更新，也可以手动清零",[377,104987,104988,104992,104995],{},[393,104989,104990],{"align":382},[475,104991,101456],{},[393,104993,104994],{"align":382},"actuator 的控制输入",[393,104996,104997],{"align":382},"主要由你的控制代码写入",[19,104999,9591,105000,101398,105002,105004],{},[475,105001,104410],{},[475,105003,104740],{}," 不一定同维。自由刚体就是典型例子：",[469,105006,105009],{"className":105007,"code":105008,"language":5753,"meta":54},[5751],"freejoint: qpos 7 维，qvel 6 维\n",[475,105010,105008],{"__ignoreMap":54},[129,105012,105014,101398,105016,105018],{"id":105013},"mj_step-和-mj_forward-的区别",[475,105015,101595],{},[475,105017,104630],{}," 的区别",[371,105020,105021,105034],{},[374,105022,105023],{},[377,105024,105025,105028,105031],{},[380,105026,105027],{"align":382},"函数",[380,105029,105030],{"align":382},"是否推进时间",[380,105032,105033],{"align":382},"什么时候用",[388,105035,105036,105049],{},[377,105037,105038,105043,105046],{},[393,105039,105040],{"align":382},[475,105041,105042],{},"mj_step(model, data)",[393,105044,105045],{"align":382},"是",[393,105047,105048],{"align":382},"正常仿真循环，每调用一次前进一步",[377,105050,105051,105056,105059],{},[393,105052,105053],{"align":382},[475,105054,105055],{},"mj_forward(model, data)",[393,105057,105058],{"align":382},"否",[393,105060,105061,105062,916,105064,105066],{"align":382},"手动改了 ",[475,105063,104410],{},[475,105065,104740],{}," 后，刷新派生量",[19,105068,105069],{},"例如你写：",[469,105071,105073],{"className":30758,"code":105072,"language":30760,"meta":54,"style":54},"data.qpos[2] = 2.0\n",[475,105074,105075],{"__ignoreMap":54},[478,105076,105077,105080,105082,105084,105086],{"class":480,"line":481},[478,105078,105079],{"class":714},"data.qpos[",[478,105081,789],{"class":495},[478,105083,5009],{"class":714},[478,105085,759],{"class":710},[478,105087,105088],{"class":495}," 2.0\n",[19,105090,105091],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[469,105093,105094],{"className":30758,"code":104923,"language":30760,"meta":54,"style":54},[475,105095,105096],{"__ignoreMap":54},[478,105097,105098],{"class":480,"line":481},[478,105099,104923],{"class":714},[129,105101,105103],{"id":105102},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105105,105106,105109,105110,105112],{},[475,105107,105108],{},"mujoco.mj_resetData(model, data)"," 会把 ",[475,105111,33781],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[469,105114,105116],{"className":30758,"code":105115,"language":30760,"meta":54,"style":54},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[475,105117,105118,105122,105132,105142],{"__ignoreMap":54},[478,105119,105120],{"class":480,"line":481},[478,105121,104906],{"class":714},[478,105123,105124,105127,105129],{"class":480,"line":565},[478,105125,105126],{"class":714},"data.qpos[:] ",[478,105128,759],{"class":710},[478,105130,105131],{"class":714}," random_qpos\n",[478,105133,105134,105137,105139],{"class":480,"line":579},[478,105135,105136],{"class":714},"data.qvel[:] ",[478,105138,759],{"class":710},[478,105140,105141],{"class":495}," 0.0\n",[478,105143,105144],{"class":480,"line":593},[478,105145,104923],{"class":714},[14,105147,101633],{"id":101632},[469,105149,105151],{"className":30758,"code":105150,"language":30760,"meta":54,"style":54},"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",[475,105152,105153,105159,105169,105173,105177,105185,105190,105194,105198,105202,105207,105211,105216,105221,105226,105230,105234,105238,105242,105246,105250,105269,105276,105288,105299,105315,105331,105335,105339,105351,105363,105371,105375,105386,105390,105406,105410,105414,105423,105427,105432,105441,105445,105458,105463,105472,105476,105480,105492],{"__ignoreMap":54},[478,105154,105155,105157],{"class":480,"line":481},[478,105156,30772],{"class":710},[478,105158,101681],{"class":714},[478,105160,105161,105163,105165,105167],{"class":480,"line":565},[478,105162,30772],{"class":710},[478,105164,31760],{"class":714},[478,105166,31763],{"class":710},[478,105168,31766],{"class":714},[478,105170,105171],{"class":480,"line":579},[478,105172,2966],{"emptyLinePlaceholder":640},[478,105174,105175],{"class":480,"line":593},[478,105176,2966],{"emptyLinePlaceholder":640},[478,105178,105179,105181,105183],{"class":480,"line":1769},[478,105180,101694],{"class":495},[478,105182,14130],{"class":710},[478,105184,101699],{"class":488},[478,105186,105187],{"class":480,"line":1783},[478,105188,105189],{"class":488},"\u003Cmujoco model=\"state_api\">\n",[478,105191,105192],{"class":480,"line":1789},[478,105193,101709],{"class":488},[478,105195,105196],{"class":480,"line":1880},[478,105197,2966],{"emptyLinePlaceholder":640},[478,105199,105200],{"class":480,"line":1886},[478,105201,101718],{"class":488},[478,105203,105204],{"class":480,"line":1898},[478,105205,105206],{"class":488},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[478,105208,105209],{"class":480,"line":2180},[478,105210,2966],{"emptyLinePlaceholder":640},[478,105212,105213],{"class":480,"line":2185},[478,105214,105215],{"class":488},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[478,105217,105218],{"class":480,"line":2191},[478,105219,105220],{"class":488},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[478,105222,105223],{"class":480,"line":2196},[478,105224,105225],{"class":488},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[478,105227,105228],{"class":480,"line":2210},[478,105229,101747],{"class":488},[478,105231,105232],{"class":480,"line":2215},[478,105233,101752],{"class":488},[478,105235,105236],{"class":480,"line":2221},[478,105237,101757],{"class":488},[478,105239,105240],{"class":480,"line":2241},[478,105241,96078],{"class":488},[478,105243,105244],{"class":480,"line":2246},[478,105245,2966],{"emptyLinePlaceholder":640},[478,105247,105248],{"class":480,"line":2260},[478,105249,2966],{"emptyLinePlaceholder":640},[478,105251,105252,105254,105257,105260,105262,105265,105267],{"class":480,"line":2265},[478,105253,32327],{"class":710},[478,105255,105256],{"class":484}," print_state",[478,105258,105259],{"class":714},"(prefix: ",[478,105261,1868],{"class":495},[478,105263,105264],{"class":714},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[478,105266,96066],{"class":495},[478,105268,4305],{"class":714},[478,105270,105271,105273],{"class":480,"line":2294},[478,105272,31679],{"class":495},[478,105274,105275],{"class":714},"(prefix)\n",[478,105277,105278,105280,105282,105285],{"class":480,"line":2299},[478,105279,31679],{"class":495},[478,105281,263],{"class":714},[478,105283,105284],{"class":488},"\"  timestep:\"",[478,105286,105287],{"class":714},", model.opt.timestep)\n",[478,105289,105290,105292,105294,105297],{"class":480,"line":2316},[478,105291,31679],{"class":495},[478,105293,263],{"class":714},[478,105295,105296],{"class":488},"\"  time:\"",[478,105298,101858],{"class":714},[478,105300,105301,105303,105305,105308,105311,105313],{"class":480,"line":2321},[478,105302,31679],{"class":495},[478,105304,263],{"class":714},[478,105306,105307],{"class":488},"\"  qpos:\"",[478,105309,105310],{"class":714},", np.round(data.qpos.copy(), ",[478,105312,994],{"class":495},[478,105314,30877],{"class":714},[478,105316,105317,105319,105321,105324,105327,105329],{"class":480,"line":2326},[478,105318,31679],{"class":495},[478,105320,263],{"class":714},[478,105322,105323],{"class":488},"\"  qvel:\"",[478,105325,105326],{"class":714},", np.round(data.qvel.copy(), ",[478,105328,994],{"class":495},[478,105330,30877],{"class":714},[478,105332,105333],{"class":480,"line":2331},[478,105334,2966],{"emptyLinePlaceholder":640},[478,105336,105337],{"class":480,"line":2345},[478,105338,2966],{"emptyLinePlaceholder":640},[478,105340,105341,105343,105345,105347,105349],{"class":480,"line":2350},[478,105342,32327],{"class":710},[478,105344,2539],{"class":484},[478,105346,101778],{"class":714},[478,105348,96066],{"class":495},[478,105350,4305],{"class":714},[478,105352,105353,105355,105357,105359,105361],{"class":480,"line":3143},[478,105354,101787],{"class":714},[478,105356,759],{"class":710},[478,105358,101792],{"class":714},[478,105360,101694],{"class":495},[478,105362,720],{"class":714},[478,105364,105365,105367,105369],{"class":480,"line":3157},[478,105366,101801],{"class":714},[478,105368,759],{"class":710},[478,105370,101806],{"class":714},[478,105372,105373],{"class":480,"line":3165},[478,105374,2966],{"emptyLinePlaceholder":640},[478,105376,105377,105380,105383],{"class":480,"line":3170},[478,105378,105379],{"class":714},"    print_state(",[478,105381,105382],{"class":488},"\"initial\"",[478,105384,105385],{"class":714},", model, data)\n",[478,105387,105388],{"class":480,"line":3176},[478,105389,2966],{"emptyLinePlaceholder":640},[478,105391,105392,105394,105396,105398,105400,105402,105404],{"class":480,"line":3182},[478,105393,3767],{"class":710},[478,105395,101881],{"class":714},[478,105397,26423],{"class":710},[478,105399,32823],{"class":495},[478,105401,263],{"class":714},[478,105403,1354],{"class":495},[478,105405,31166],{"class":714},[478,105407,105408],{"class":480,"line":3187},[478,105409,101896],{"class":714},[478,105411,105412],{"class":480,"line":8514},[478,105413,2966],{"emptyLinePlaceholder":640},[478,105415,105416,105418,105421],{"class":480,"line":8538},[478,105417,105379],{"class":714},[478,105419,105420],{"class":488},"\"after 50 steps\"",[478,105422,105385],{"class":714},[478,105424,105425],{"class":480,"line":8543},[478,105426,2966],{"emptyLinePlaceholder":640},[478,105428,105429],{"class":480,"line":8549},[478,105430,105431],{"class":714},"    mujoco.mj_resetData(model, data)\n",[478,105433,105434,105436,105439],{"class":480,"line":8576},[478,105435,105379],{"class":714},[478,105437,105438],{"class":488},"\"after reset\"",[478,105440,105385],{"class":714},[478,105442,105443],{"class":480,"line":8581},[478,105444,2966],{"emptyLinePlaceholder":640},[478,105446,105447,105450,105452,105454,105456],{"class":480,"line":8587},[478,105448,105449],{"class":714},"    data.qpos[",[478,105451,789],{"class":495},[478,105453,5009],{"class":714},[478,105455,759],{"class":710},[478,105457,105088],{"class":495},[478,105459,105460],{"class":480,"line":8599},[478,105461,105462],{"class":714},"    mujoco.mj_forward(model, data)\n",[478,105464,105465,105467,105470],{"class":480,"line":8611},[478,105466,105379],{"class":714},[478,105468,105469],{"class":488},"\"after manual qpos edit\"",[478,105471,105385],{"class":714},[478,105473,105474],{"class":480,"line":8623},[478,105475,2966],{"emptyLinePlaceholder":640},[478,105477,105478],{"class":480,"line":10282},[478,105479,2966],{"emptyLinePlaceholder":640},[478,105481,105482,105484,105486,105488,105490],{"class":480,"line":10307},[478,105483,2099],{"class":710},[478,105485,31600],{"class":495},[478,105487,101939],{"class":710},[478,105489,101942],{"class":488},[478,105491,4305],{"class":714},[478,105493,105494],{"class":480,"line":10330},[478,105495,101949],{"class":714},[19,105497,103950],{},[469,105499,105501],{"className":471,"code":105500,"language":473,"meta":54,"style":54},"touch ch3_python_state.py\n",[475,105502,105503],{"__ignoreMap":54},[478,105504,105505,105507],{"class":480,"line":481},[478,105506,101663],{"class":484},[478,105508,105509],{"class":488}," ch3_python_state.py\n",[19,105511,102681],{},[469,105513,105515],{"className":471,"code":105514,"language":473,"meta":54,"style":54},"python ch3_python_state.py\n",[475,105516,105517],{"__ignoreMap":54},[478,105518,105519,105521],{"class":480,"line":481},[478,105520,30760],{"class":484},[478,105522,105509],{"class":488},[129,105524,101952],{"id":101952},[19,105526,105527],{},"打印状态的函数：",[469,105529,105531],{"className":30758,"code":105530,"language":30760,"meta":54,"style":54},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[475,105532,105533],{"__ignoreMap":54},[478,105534,105535,105537,105539,105541,105543,105545,105547],{"class":480,"line":481},[478,105536,32327],{"class":710},[478,105538,105256],{"class":484},[478,105540,105259],{"class":714},[478,105542,1868],{"class":495},[478,105544,105264],{"class":714},[478,105546,96066],{"class":495},[478,105548,4305],{"class":714},[19,105550,105551,105552,105554],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[475,105553,33781],{}," 里发生了什么。",[19,105556,105557],{},"推进 50 步：",[469,105559,105561],{"className":30758,"code":105560,"language":30760,"meta":54,"style":54},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[475,105562,105563,105579],{"__ignoreMap":54},[478,105564,105565,105567,105569,105571,105573,105575,105577],{"class":480,"line":481},[478,105566,3591],{"class":710},[478,105568,101881],{"class":714},[478,105570,26423],{"class":710},[478,105572,32823],{"class":495},[478,105574,263],{"class":714},[478,105576,1354],{"class":495},[478,105578,31166],{"class":714},[478,105580,105581],{"class":480,"line":565},[478,105582,102079],{"class":714},[19,105584,105585,105586,105589,105590,105592],{},"由于 ",[475,105587,105588],{},"timestep=0.01","，所以 50 步后时间约为 ",[475,105591,35709],{}," 秒。",[19,105594,105595],{},"重置：",[469,105597,105598],{"className":30758,"code":104906,"language":30760,"meta":54,"style":54},[475,105599,105600],{"__ignoreMap":54},[478,105601,105602],{"class":480,"line":481},[478,105603,104906],{"class":714},[19,105605,105606],{},"这会把时间、位置、速度恢复到初始状态。",[19,105608,105609],{},"手动改高度：",[469,105611,105613],{"className":30758,"code":105612,"language":30760,"meta":54,"style":54},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[475,105614,105615,105627],{"__ignoreMap":54},[478,105616,105617,105619,105621,105623,105625],{"class":480,"line":481},[478,105618,105079],{"class":714},[478,105620,789],{"class":495},[478,105622,5009],{"class":714},[478,105624,759],{"class":710},[478,105626,105088],{"class":495},[478,105628,105629],{"class":480,"line":565},[478,105630,104923],{"class":714},[19,105632,105633,105634,105637,105638,105641],{},"这个例子里 ",[475,105635,105636],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[475,105639,105640],{},"2.0"," 表示把小球放到更高的位置。",[129,105643,102088],{"id":102088},[469,105645,105646],{"className":30758,"code":105530,"language":30760,"meta":54,"style":54},[475,105647,105648],{"__ignoreMap":54},[478,105649,105650,105652,105654,105656,105658,105660,105662],{"class":480,"line":481},[478,105651,32327],{"class":710},[478,105653,105256],{"class":484},[478,105655,105259],{"class":714},[478,105657,1868],{"class":495},[478,105659,105264],{"class":714},[478,105661,96066],{"class":495},[478,105663,4305],{"class":714},[19,105665,105666],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[29,105668,105669,105678,105683],{},[32,105670,105671,105674,105675,105677],{},[475,105672,105673],{},"prefix","：一段文字，比如 ",[475,105676,105382],{},"，用来说明现在打印的是哪个阶段。",[32,105679,105680,105682],{},[475,105681,102465],{},"：MuJoCo 模型。",[32,105684,105685,105687],{},[475,105686,33781],{},"：MuJoCo 当前状态。",[19,105689,105690,916,105693,105696],{},[475,105691,105692],{},"prefix: str",[475,105694,105695],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[469,105698,105700],{"className":30758,"code":105699,"language":30760,"meta":54,"style":54},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[475,105701,105702],{"__ignoreMap":54},[478,105703,105704,105706,105708,105710,105712,105714],{"class":480,"line":481},[478,105705,30795],{"class":495},[478,105707,263],{"class":714},[478,105709,105307],{"class":488},[478,105711,105310],{"class":714},[478,105713,994],{"class":495},[478,105715,30877],{"class":714},[19,105717,105718,105721],{},[475,105719,105720],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[469,105723,105725],{"className":30758,"code":105724,"language":30760,"meta":54,"style":54},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[475,105726,105727,105739],{"__ignoreMap":54},[478,105728,105729,105731,105733,105735,105737],{"class":480,"line":481},[478,105730,102014],{"class":714},[478,105732,759],{"class":710},[478,105734,101792],{"class":714},[478,105736,101694],{"class":495},[478,105738,720],{"class":714},[478,105740,105741,105743,105745],{"class":480,"line":565},[478,105742,102038],{"class":714},[478,105744,759],{"class":710},[478,105746,101806],{"class":714},[19,105748,105749],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[469,105751,105753],{"className":30758,"code":105752,"language":30760,"meta":54,"style":54},"print_state(\"initial\", model, data)\n",[475,105754,105755],{"__ignoreMap":54},[478,105756,105757,105760,105762],{"class":480,"line":481},[478,105758,105759],{"class":714},"print_state(",[478,105761,105382],{"class":488},[478,105763,105385],{"class":714},[19,105765,105766,105767,105770],{},"调用刚才定义的 ",[475,105768,105769],{},"print_state"," 函数，打印初始状态。",[469,105772,105773],{"className":30758,"code":105560,"language":30760,"meta":54,"style":54},[475,105774,105775,105791],{"__ignoreMap":54},[478,105776,105777,105779,105781,105783,105785,105787,105789],{"class":480,"line":481},[478,105778,3591],{"class":710},[478,105780,101881],{"class":714},[478,105782,26423],{"class":710},[478,105784,32823],{"class":495},[478,105786,263],{"class":714},[478,105788,1354],{"class":495},[478,105790,31166],{"class":714},[478,105792,105793],{"class":480,"line":565},[478,105794,102079],{"class":714},[19,105796,105797],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[469,105799,105800],{"className":30758,"code":104906,"language":30760,"meta":54,"style":54},[475,105801,105802],{"__ignoreMap":54},[478,105803,105804],{"class":480,"line":481},[478,105805,104906],{"class":714},[19,105807,105808,105809,105811,105812,105814],{},"重置 ",[475,105810,33781],{},"。注意它不会重新创建 ",[475,105813,102465],{},"，因为模型结构没有变，只是状态回到初始值。",[469,105816,105817],{"className":30758,"code":105072,"language":30760,"meta":54,"style":54},[475,105818,105819],{"__ignoreMap":54},[478,105820,105821,105823,105825,105827,105829],{"class":480,"line":481},[478,105822,105079],{"class":714},[478,105824,789],{"class":495},[478,105826,5009],{"class":714},[478,105828,759],{"class":710},[478,105830,105088],{"class":495},[19,105832,105833,105834,916,105837,916,105840,105842],{},"这行是“手动改状态”。在 freejoint 中，",[475,105835,105836],{},"qpos[0]",[475,105838,105839],{},"qpos[1]",[475,105841,105636],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[469,105844,105845],{"className":30758,"code":104923,"language":30760,"meta":54,"style":54},[475,105846,105847],{"__ignoreMap":54},[478,105848,105849],{"class":480,"line":481},[478,105850,104923],{"class":714},[19,105852,105853,105854,105856,105857,105859],{},"手动改完 ",[475,105855,104410],{}," 后，调用 ",[475,105858,104630],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105861,102696],{"id":102695},[19,105863,105864],{},"你会看到:",[29,105866,105867,105872,105877,105880],{},[32,105868,105869,105870],{},"初始时间为 ",[475,105871,895],{},[32,105873,105874,105875],{},"50 步后时间约为 ",[475,105876,35709],{},[32,105878,105879],{},"reset 后状态恢复",[32,105881,105882,105883,105886,105887],{},"手动修改 ",[475,105884,105885],{},"data.qpos[2]"," 后，小球高度变为 ",[475,105888,105640],{},[19,105890,105891,105893],{},[475,105892,105636],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105895,105896],{},"输出里可以重点看三件事：",[29,105898,105899,105907,105912],{},[32,105900,105901,105903,105904,105906],{},[475,105902,2953],{}," 是否随着 ",[475,105905,101595],{}," 增加。",[32,105908,105909,105911],{},[475,105910,104410],{}," 的 z 坐标是否因为下落而变化。",[32,105913,105914,105916,105917,28765],{},[475,105915,104732],{}," 后时间是否回到 ",[475,105918,895],{},[14,105920,102728],{"id":102727},[29,105922,105923,105929,105935,105941,105944,105953],{},[32,105924,105925,105926,28765],{},"修改 timestep 为 ",[475,105927,105928],{},"0.005",[32,105930,105931,105932,28765],{},"重新运行，检查 50 步后时间是否约为 ",[475,105933,105934],{},"0.25",[32,105936,105937,105938,28765],{},"修改重力为 ",[475,105939,105940],{},"0 0 -1.0",[32,105942,105943],{},"观察小球下降速度是否变慢。",[32,105945,102791,105946,102794,105949,105952],{},[475,105947,105948],{},"data.qpos[2] = 2.0",[475,105950,105951],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[32,105954,105955,105956,105959],{},"注释掉 ",[475,105957,105958],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105961,102833],{"id":102832},[129,105963,105965,105966,105968],{"id":105964},"修改-dataqpos-后位置没有更新","修改 ",[475,105967,101450],{}," 后位置没有更新",[19,105970,102842],{},[469,105972,105973],{"className":30758,"code":104923,"language":30760,"meta":54,"style":54},[475,105974,105975],{"__ignoreMap":54},[478,105976,105977],{"class":480,"line":481},[478,105978,104923],{"class":714},[129,105980,105981],{"id":105981},"数组维度看不懂",[19,105983,105984],{},"打印模型维度:",[469,105986,105988],{"className":30758,"code":105987,"language":30760,"meta":54,"style":54},"print(model.nq, model.nv, model.nu)\n",[475,105989,105990],{"__ignoreMap":54},[478,105991,105992,105994],{"class":480,"line":481},[478,105993,30795],{"class":495},[478,105995,105996],{"class":714},"(model.nq, model.nv, model.nu)\n",[371,105998,105999,106007],{},[374,106000,106001],{},[377,106002,106003,106005],{},[380,106004,104954],{"align":382},[380,106006,101080],{"align":382},[388,106008,106009,106019,106029],{},[377,106010,106011,106016],{},[393,106012,106013],{"align":382},[475,106014,106015],{},"nq",[393,106017,106018],{"align":382},"位置变量数量",[377,106020,106021,106026],{},[393,106022,106023],{"align":382},[475,106024,106025],{},"nv",[393,106027,106028],{"align":382},"速度变量数量",[377,106030,106031,106035],{},[393,106032,106033],{"align":382},[475,106034,102542],{},[393,106036,106037],{"align":382},"控制输入数量",[129,106039,106041,106042,106044],{"id":106040},"误以为-qpos-一定等于关节数","误以为 ",[475,106043,104410],{}," 一定等于关节数",[19,106046,106047,106048,82910,106050,106052,106053,106055],{},"不是。例如 ",[475,106049,102000],{},[475,106051,104410],{}," 是 7 维，但 ",[475,106054,104740],{}," 是 6 维。",[129,106057,106059,106060,106062],{"id":106058},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[475,106061,104410],{}," 的第几位",[19,106064,106065],{},"初学时可以先打印：",[469,106067,106069],{"className":30758,"code":106068,"language":30760,"meta":54,"style":54},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[475,106070,106071,106081,106091,106103],{"__ignoreMap":54},[478,106072,106073,106075,106077,106079],{"class":480,"line":481},[478,106074,30795],{"class":495},[478,106076,263],{"class":714},[478,106078,101819],{"class":488},[478,106080,101822],{"class":714},[478,106082,106083,106085,106087,106089],{"class":480,"line":565},[478,106084,30795],{"class":495},[478,106086,263],{"class":714},[478,106088,101831],{"class":488},[478,106090,101834],{"class":714},[478,106092,106093,106095,106097,106100],{"class":480,"line":579},[478,106094,30795],{"class":495},[478,106096,263],{"class":714},[478,106098,106099],{"class":488},"\"qpos:\"",[478,106101,106102],{"class":714},", data.qpos)\n",[478,106104,106105,106107,106109,106112],{"class":480,"line":593},[478,106106,30795],{"class":495},[478,106108,263],{"class":714},[478,106110,106111],{"class":488},"\"qvel:\"",[478,106113,106114],{"class":714},", data.qvel)\n",[19,106116,106117],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[129,106119,106120],{"id":106120},"仿真结果每次都一样",[19,106122,106123,106124,106126],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[475,106125,104410],{},"、目标点或控制输入。",[14,106128,102987],{"id":102986},[19,106130,106131,106132,24998],{},"Python 控制 MuJoCo 的核心就是读写 ",[475,106133,33781],{},[29,106135,106136,106144,106149,106154],{},[32,106137,106138,106139,101398,106141,106143],{},"用 ",[475,106140,101450],{},[475,106142,101453],{}," 读取状态。",[32,106145,106138,106146,106148],{},[475,106147,101456],{}," 写入控制。",[32,106150,106138,106151,106153],{},[475,106152,101595],{}," 推进时间。",[32,106155,106156,106157,106159],{},"手动改状态后用 ",[475,106158,104630],{}," 刷新派生量。",[19,106161,106162],{},"理解这一章后，就可以进入关节和 actuator 控制。",[617,106164,106165],{},"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":54,"searchDepth":565,"depth":565,"links":106167},[106168,106169,106170,106177,106181,106182,106183,106193],{"id":101026,"depth":565,"text":101027},{"id":101149,"depth":565,"text":101150},{"id":101424,"depth":565,"text":101425,"children":106171},[106172,106174,106176],{"id":104935,"depth":579,"text":106173},"qpos、qvel、ctrl 是什么",{"id":105013,"depth":579,"text":106175},"mj_step 和 mj_forward 的区别",{"id":105102,"depth":579,"text":105103},{"id":101632,"depth":565,"text":101633,"children":106178},[106179,106180],{"id":101952,"depth":579,"text":101952},{"id":102088,"depth":579,"text":102088},{"id":102695,"depth":565,"text":102696},{"id":102727,"depth":565,"text":102728},{"id":102832,"depth":565,"text":102833,"children":106184},[106185,106187,106188,106190,106192],{"id":105964,"depth":579,"text":106186},"修改 data.qpos 后位置没有更新",{"id":105981,"depth":579,"text":105981},{"id":106040,"depth":579,"text":106189},"误以为 qpos 一定等于关节数",{"id":106058,"depth":579,"text":106191},"不知道某个元素在 qpos 的第几位",{"id":106120,"depth":579,"text":106120},{"id":102986,"depth":565,"text":102987},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104698,"description":54},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106200,"title":106201,"body":106202,"description":54,"extension":638,"meta":107892,"navigation":640,"path":107893,"seo":107894,"stem":107895,"__hash__":107896},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106203,"toc":107868},[106204,106207,106209,106212,106214,106239,106242,106261,106264,106266,106268,106292,106294,106308,106310,106351,106353,106377,106379,106382,106416,106418,106431,106434,106502,106511,106515,106518,106552,106558,106561,106565,106604,106607,106627,106631,106674,106676,106705,106708,106714,106717,106719,107113,107115,107127,107129,107140,107142,107145,107174,107182,107185,107220,107223,107225,107233,107236,107238,107249,107259,107279,107282,107318,107330,107378,107397,107439,107452,107480,107485,107506,107516,107534,107537,107571,107574,107594,107597,107616,107622,107624,107627,107633,107639,107649,107652,107658,107667,107669,107715,107717,107723,107729,107732,107735,107755,107758,107764,107770,107772,107795,107798,107801,107810,107813,107851,107853,107856,107862,107865],[10,106205,106201],{"id":106206},"_4关节actuator-与力控制",[14,106208,101027],{"id":101026},[19,106210,106211],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106213,104711],{},[29,106215,106216,106222,106227,106231,106236],{},[32,106217,106218,106221],{},[475,106219,106220],{},"hinge"," 关节",[32,106223,106224],{},[475,106225,106226],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[32,106228,106229],{},[475,106230,101456],{},[32,106232,106233],{},[475,106234,106235],{},"ctrlrange",[32,106237,106238],{},"读取关节角和角速度",[19,106240,106241],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[469,106243,106245],{"className":30758,"code":106244,"language":30760,"meta":54,"style":54},"data.ctrl[0] = ...\n",[475,106246,106247],{"__ignoreMap":54},[478,106248,106249,106252,106254,106256,106258],{"class":480,"line":481},[478,106250,106251],{"class":714},"data.ctrl[",[478,106253,895],{"class":495},[478,106255,5009],{"class":714},[478,106257,759],{"class":710},[478,106259,106260],{"class":495}," ...\n",[19,106262,106263],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106265,101150],{"id":101149},[19,106267,101153],{},[469,106269,106270],{"className":471,"code":104768,"language":473,"meta":54,"style":54},[475,106271,106272],{"__ignoreMap":54},[478,106273,106274,106276,106278,106280,106282,106284,106286,106288,106290],{"class":480,"line":481},[478,106275,24956],{"class":484},[478,106277,26695],{"class":488},[478,106279,489],{"class":488},[478,106281,26780],{"class":495},[478,106283,104783],{"class":488},[478,106285,101178],{"class":488},[478,106287,102881],{"class":488},[478,106289,101194],{"class":488},[478,106291,104792],{"class":488},[19,106293,103199],{},[469,106295,106296],{"className":471,"code":101299,"language":473,"meta":54,"style":54},[475,106297,106298],{"__ignoreMap":54},[478,106299,106300,106302,106304,106306],{"class":480,"line":481},[478,106301,485],{"class":484},[478,106303,489],{"class":488},[478,106305,101310],{"class":488},[478,106307,101313],{"class":488},[19,106309,103216],{},[469,106311,106313],{"className":471,"code":106312,"language":473,"meta":54,"style":54},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[475,106314,106315,106332,106341],{"__ignoreMap":54},[478,106316,106317,106319,106321,106323,106326,106328,106330],{"class":480,"line":481},[478,106318,30710],{"class":484},[478,106320,29556],{"class":488},[478,106322,25495],{"class":495},[478,106324,106325],{"class":488}," mujoco-control",[478,106327,101355],{"class":488},[478,106329,101358],{"class":495},[478,106331,101361],{"class":495},[478,106333,106334,106336,106338],{"class":480,"line":565},[478,106335,30710],{"class":484},[478,106337,101368],{"class":488},[478,106339,106340],{"class":488}," mujoco-control\n",[478,106342,106343,106345,106347,106349],{"class":480,"line":579},[478,106344,485],{"class":484},[478,106346,489],{"class":488},[478,106348,101310],{"class":488},[478,106350,101313],{"class":488},[19,106352,101384],{},[29,106354,106355,106361,106368,106374],{},[32,106356,106357,106360],{},[475,106358,106359],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[32,106362,106363,106365,106366,28765],{},[475,106364,101456],{}," 长度等于 ",[475,106367,102538],{},[32,106369,82602,106370,106373],{},[475,106371,106372],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[32,106375,106376],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106378,101425],{"id":101424},[19,106380,106381],{},"关节决定 body 如何运动:",[469,106383,106385],{"className":53447,"code":106384,"language":53449,"meta":54,"style":54},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[475,106386,106387],{"__ignoreMap":54},[478,106388,106389,106391,106393,106395,106397,106400,106402,106404,106406,106409,106411,106414],{"class":480,"line":481},[478,106390,1605],{"class":714},[478,106392,103336],{"class":51680},[478,106394,15485],{"class":484},[478,106396,759],{"class":714},[478,106398,106399],{"class":488},"\"hinge\"",[478,106401,54204],{"class":484},[478,106403,759],{"class":714},[478,106405,106399],{"class":488},[478,106407,106408],{"class":484}," axis",[478,106410,759],{"class":714},[478,106412,106413],{"class":488},"\"0 1 0\"",[478,106415,101524],{"class":714},[19,106417,103432],{},[29,106419,106420,106425,106428],{},[32,106421,106422,106423],{},"名字是 ",[475,106424,106220],{},[32,106426,106427],{},"类型是旋转关节",[32,106429,106430],{},"绕 y 轴旋转",[19,106432,106433],{},"actuator 决定如何施加控制:",[469,106435,106437],{"className":53447,"code":106436,"language":53449,"meta":54,"style":54},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[475,106438,106439,106448,106494],{"__ignoreMap":54},[478,106440,106441,106443,106446],{"class":480,"line":481},[478,106442,1605],{"class":714},[478,106444,106445],{"class":51680},"actuator",[478,106447,51687],{"class":714},[478,106449,106450,106452,106455,106457,106459,106462,106465,106467,106469,106472,106474,106476,106479,106481,106484,106487,106489,106492],{"class":480,"line":565},[478,106451,52524],{"class":714},[478,106453,106454],{"class":51680},"motor",[478,106456,15485],{"class":484},[478,106458,759],{"class":714},[478,106460,106461],{"class":488},"\"hinge_motor\"",[478,106463,106464],{"class":484}," joint",[478,106466,759],{"class":714},[478,106468,106399],{"class":488},[478,106470,106471],{"class":484}," gear",[478,106473,759],{"class":714},[478,106475,4244],{"class":488},[478,106477,106478],{"class":484}," ctrlrange",[478,106480,759],{"class":714},[478,106482,106483],{"class":488},"\"-2 2\"",[478,106485,106486],{"class":484}," ctrllimited",[478,106488,759],{"class":714},[478,106490,106491],{"class":488},"\"true\"",[478,106493,101524],{"class":714},[478,106495,106496,106498,106500],{"class":480,"line":579},[478,106497,52165],{"class":714},[478,106499,106445],{"class":51680},[478,106501,51687],{"class":714},[19,106503,106504,106507,106508,28765],{},[475,106505,106506],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[475,106509,106510],{},"[-2, 2]",[129,106512,106514],{"id":106513},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106516,106517],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[371,106519,106520,106530],{},[374,106521,106522],{},[377,106523,106524,106526,106528],{},[380,106525,26133],{"align":382},[380,106527,103076],{"align":382},[380,106529,101114],{"align":382},[388,106531,106532,106542],{},[377,106533,106534,106536,106539],{},[393,106535,103336],{"align":382},[393,106537,106538],{"align":382},"定义能怎么动",[393,106540,106541],{"align":382},"门轴允许门旋转",[377,106543,106544,106546,106549],{},[393,106545,106445],{"align":382},[393,106547,106548],{"align":382},"定义怎么施力或控制",[393,106550,106551],{"align":382},"人推门、马达带动门",[19,106553,106554,106555,106557],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[475,106556,101456],{}," 主动控制它。",[19,106559,106560],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[129,106562,106564],{"id":106563},"hinge-joint","hinge joint",[469,106566,106568],{"className":53447,"code":106567,"language":53449,"meta":54,"style":54},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[475,106569,106570],{"__ignoreMap":54},[478,106571,106572,106574,106576,106578,106580,106582,106584,106586,106588,106590,106592,106594,106597,106599,106602],{"class":480,"line":481},[478,106573,1605],{"class":714},[478,106575,103336],{"class":51680},[478,106577,15485],{"class":484},[478,106579,759],{"class":714},[478,106581,106399],{"class":488},[478,106583,54204],{"class":484},[478,106585,759],{"class":714},[478,106587,106399],{"class":488},[478,106589,106408],{"class":484},[478,106591,759],{"class":714},[478,106593,106413],{"class":488},[478,106595,106596],{"class":484}," damping",[478,106598,759],{"class":714},[478,106600,106601],{"class":488},"\"0.1\"",[478,106603,101524],{"class":714},[19,106605,106606],{},"含义：",[29,106608,106609,106615,106621],{},[32,106610,106611,106614],{},[475,106612,106613],{},"type=\"hinge\"","：只能绕一个轴旋转。",[32,106616,106617,106620],{},[475,106618,106619],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[32,106622,106623,106626],{},[475,106624,106625],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[129,106628,106630],{"id":106629},"motor-actuator","motor actuator",[469,106632,106634],{"className":53447,"code":106633,"language":53449,"meta":54,"style":54},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[475,106635,106636],{"__ignoreMap":54},[478,106637,106638,106640,106642,106644,106646,106648,106650,106652,106654,106656,106658,106660,106662,106664,106666,106668,106670,106672],{"class":480,"line":481},[478,106639,1605],{"class":714},[478,106641,106454],{"class":51680},[478,106643,15485],{"class":484},[478,106645,759],{"class":714},[478,106647,106461],{"class":488},[478,106649,106464],{"class":484},[478,106651,759],{"class":714},[478,106653,106399],{"class":488},[478,106655,106471],{"class":484},[478,106657,759],{"class":714},[478,106659,4244],{"class":488},[478,106661,106478],{"class":484},[478,106663,759],{"class":714},[478,106665,106483],{"class":488},[478,106667,106486],{"class":484},[478,106669,759],{"class":714},[478,106671,106491],{"class":488},[478,106673,101524],{"class":714},[19,106675,106606],{},[29,106677,106678,106687,106693,106699],{},[32,106679,106680,106683,106684,106686],{},[475,106681,106682],{},"joint=\"hinge\"","：这个电机作用在名为 ",[475,106685,106220],{}," 的关节上。",[32,106688,106689,106692],{},[475,106690,106691],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[32,106694,106695,106698],{},[475,106696,106697],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[32,106700,106701,106704],{},[475,106702,106703],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106706,106707],{},"简单理解：",[469,106709,106712],{"className":106710,"code":106711,"language":5753,"meta":54},[5751],"实际施加效果 ≈ data.ctrl[0] * gear\n",[475,106713,106711],{"__ignoreMap":54},[19,106715,106716],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106718,101633],{"id":101632},[469,106720,106722],{"className":30758,"code":106721,"language":30760,"meta":54,"style":54},"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",[475,106723,106724,106731,106735,106741,106751,106755,106759,106767,106772,106777,106781,106785,106790,106795,106799,106804,106809,106814,106819,106823,106827,106831,106836,106841,106846,106850,106854,106858,106862,106874,106886,106894,106898,106908,106918,106928,106932,106945,106958,106962,106979,106993,107028,107032,107036,107047,107062,107077,107089,107093,107097,107109],{"__ignoreMap":54},[478,106725,106726,106728],{"class":480,"line":481},[478,106727,30772],{"class":710},[478,106729,106730],{"class":714}," math\n",[478,106732,106733],{"class":480,"line":565},[478,106734,2966],{"emptyLinePlaceholder":640},[478,106736,106737,106739],{"class":480,"line":579},[478,106738,30772],{"class":710},[478,106740,101681],{"class":714},[478,106742,106743,106745,106747,106749],{"class":480,"line":593},[478,106744,30772],{"class":710},[478,106746,31760],{"class":714},[478,106748,31763],{"class":710},[478,106750,31766],{"class":714},[478,106752,106753],{"class":480,"line":1769},[478,106754,2966],{"emptyLinePlaceholder":640},[478,106756,106757],{"class":480,"line":1783},[478,106758,2966],{"emptyLinePlaceholder":640},[478,106760,106761,106763,106765],{"class":480,"line":1789},[478,106762,101694],{"class":495},[478,106764,14130],{"class":710},[478,106766,101699],{"class":488},[478,106768,106769],{"class":480,"line":1880},[478,106770,106771],{"class":488},"\u003Cmujoco model=\"one_link_motor\">\n",[478,106773,106774],{"class":480,"line":1886},[478,106775,106776],{"class":488},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[478,106778,106779],{"class":480,"line":1898},[478,106780,2966],{"emptyLinePlaceholder":640},[478,106782,106783],{"class":480,"line":2180},[478,106784,101718],{"class":488},[478,106786,106787],{"class":480,"line":2185},[478,106788,106789],{"class":488},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[478,106791,106792],{"class":480,"line":2191},[478,106793,106794],{"class":488},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[478,106796,106797],{"class":480,"line":2196},[478,106798,2966],{"emptyLinePlaceholder":640},[478,106800,106801],{"class":480,"line":2210},[478,106802,106803],{"class":488},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[478,106805,106806],{"class":480,"line":2215},[478,106807,106808],{"class":488},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[478,106810,106811],{"class":480,"line":2221},[478,106812,106813],{"class":488},"        \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",[478,106815,106816],{"class":480,"line":2241},[478,106817,106818],{"class":488},"      \u003C\u002Fbody>\n",[478,106820,106821],{"class":480,"line":2246},[478,106822,101747],{"class":488},[478,106824,106825],{"class":480,"line":2260},[478,106826,101752],{"class":488},[478,106828,106829],{"class":480,"line":2265},[478,106830,2966],{"emptyLinePlaceholder":640},[478,106832,106833],{"class":480,"line":2294},[478,106834,106835],{"class":488},"  \u003Cactuator>\n",[478,106837,106838],{"class":480,"line":2299},[478,106839,106840],{"class":488},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[478,106842,106843],{"class":480,"line":2316},[478,106844,106845],{"class":488},"  \u003C\u002Factuator>\n",[478,106847,106848],{"class":480,"line":2321},[478,106849,101757],{"class":488},[478,106851,106852],{"class":480,"line":2326},[478,106853,96078],{"class":488},[478,106855,106856],{"class":480,"line":2331},[478,106857,2966],{"emptyLinePlaceholder":640},[478,106859,106860],{"class":480,"line":2345},[478,106861,2966],{"emptyLinePlaceholder":640},[478,106863,106864,106866,106868,106870,106872],{"class":480,"line":2350},[478,106865,32327],{"class":710},[478,106867,2539],{"class":484},[478,106869,101778],{"class":714},[478,106871,96066],{"class":495},[478,106873,4305],{"class":714},[478,106875,106876,106878,106880,106882,106884],{"class":480,"line":3143},[478,106877,101787],{"class":714},[478,106879,759],{"class":710},[478,106881,101792],{"class":714},[478,106883,101694],{"class":495},[478,106885,720],{"class":714},[478,106887,106888,106890,106892],{"class":480,"line":3157},[478,106889,101801],{"class":714},[478,106891,759],{"class":710},[478,106893,101806],{"class":714},[478,106895,106896],{"class":480,"line":3165},[478,106897,2966],{"emptyLinePlaceholder":640},[478,106899,106900,106902,106904,106906],{"class":480,"line":3170},[478,106901,31679],{"class":495},[478,106903,263],{"class":714},[478,106905,101819],{"class":488},[478,106907,101822],{"class":714},[478,106909,106910,106912,106914,106916],{"class":480,"line":3176},[478,106911,31679],{"class":495},[478,106913,263],{"class":714},[478,106915,101831],{"class":488},[478,106917,101834],{"class":714},[478,106919,106920,106922,106924,106926],{"class":480,"line":3182},[478,106921,31679],{"class":495},[478,106923,263],{"class":714},[478,106925,101843],{"class":488},[478,106927,101846],{"class":714},[478,106929,106930],{"class":480,"line":3187},[478,106931,2966],{"emptyLinePlaceholder":640},[478,106933,106934,106936,106939,106941,106943],{"class":480,"line":8514},[478,106935,3667],{"class":710},[478,106937,106938],{"class":714}," model.nu ",[478,106940,21513],{"class":710},[478,106942,25498],{"class":495},[478,106944,4305],{"class":714},[478,106946,106947,106949,106951,106953,106956],{"class":480,"line":8538},[478,106948,103812],{"class":710},[478,106950,103815],{"class":495},[478,106952,263],{"class":714},[478,106954,106955],{"class":488},"\"expected exactly one actuator\"",[478,106957,720],{"class":714},[478,106959,106960],{"class":480,"line":8543},[478,106961,2966],{"emptyLinePlaceholder":640},[478,106963,106964,106966,106968,106970,106972,106974,106977],{"class":480,"line":8549},[478,106965,3767],{"class":710},[478,106967,31996],{"class":714},[478,106969,26423],{"class":710},[478,106971,32823],{"class":495},[478,106973,263],{"class":714},[478,106975,106976],{"class":495},"2000",[478,106978,31166],{"class":714},[478,106980,106981,106984,106986,106988,106990],{"class":480,"line":8576},[478,106982,106983],{"class":714},"        t ",[478,106985,759],{"class":710},[478,106987,31996],{"class":714},[478,106989,1155],{"class":710},[478,106991,106992],{"class":714}," model.opt.timestep\n",[478,106994,106995,106998,107000,107002,107004,107007,107009,107012,107014,107016,107019,107021,107023,107025],{"class":480,"line":8581},[478,106996,106997],{"class":714},"        data.ctrl[",[478,106999,895],{"class":495},[478,107001,5009],{"class":714},[478,107003,759],{"class":710},[478,107005,107006],{"class":495}," 1.5",[478,107008,7084],{"class":710},[478,107010,107011],{"class":714}," math.sin(",[478,107013,105640],{"class":495},[478,107015,7084],{"class":710},[478,107017,107018],{"class":714}," math.pi ",[478,107020,1155],{"class":710},[478,107022,62247],{"class":495},[478,107024,7084],{"class":710},[478,107026,107027],{"class":714}," t)\n",[478,107029,107030],{"class":480,"line":8587},[478,107031,101896],{"class":714},[478,107033,107034],{"class":480,"line":8599},[478,107035,2966],{"emptyLinePlaceholder":640},[478,107037,107038,107040,107042,107045],{"class":480,"line":8611},[478,107039,31679],{"class":495},[478,107041,263],{"class":714},[478,107043,107044],{"class":488},"\"time:\"",[478,107046,101858],{"class":714},[478,107048,107049,107051,107053,107056,107058,107060],{"class":480,"line":8623},[478,107050,31679],{"class":495},[478,107052,263],{"class":714},[478,107054,107055],{"class":488},"\"joint qpos:\"",[478,107057,105310],{"class":714},[478,107059,994],{"class":495},[478,107061,30877],{"class":714},[478,107063,107064,107066,107068,107071,107073,107075],{"class":480,"line":10282},[478,107065,31679],{"class":495},[478,107067,263],{"class":714},[478,107069,107070],{"class":488},"\"joint qvel:\"",[478,107072,105326],{"class":714},[478,107074,994],{"class":495},[478,107076,30877],{"class":714},[478,107078,107079,107081,107083,107086],{"class":480,"line":10307},[478,107080,31679],{"class":495},[478,107082,263],{"class":714},[478,107084,107085],{"class":488},"\"last ctrl:\"",[478,107087,107088],{"class":714},", data.ctrl.copy())\n",[478,107090,107091],{"class":480,"line":10330},[478,107092,2966],{"emptyLinePlaceholder":640},[478,107094,107095],{"class":480,"line":10354},[478,107096,2966],{"emptyLinePlaceholder":640},[478,107098,107099,107101,107103,107105,107107],{"class":480,"line":10359},[478,107100,2099],{"class":710},[478,107102,31600],{"class":495},[478,107104,101939],{"class":710},[478,107106,101942],{"class":488},[478,107108,4305],{"class":714},[478,107110,107111],{"class":480,"line":10364},[478,107112,101949],{"class":714},[19,107114,103950],{},[469,107116,107118],{"className":471,"code":107117,"language":473,"meta":54,"style":54},"touch ch4_joint_motor.py\n",[475,107119,107120],{"__ignoreMap":54},[478,107121,107122,107124],{"class":480,"line":481},[478,107123,101663],{"class":484},[478,107125,107126],{"class":488}," ch4_joint_motor.py\n",[19,107128,102681],{},[469,107130,107132],{"className":471,"code":107131,"language":473,"meta":54,"style":54},"python ch4_joint_motor.py\n",[475,107133,107134],{"__ignoreMap":54},[478,107135,107136,107138],{"class":480,"line":481},[478,107137,30760],{"class":484},[478,107139,107126],{"class":488},[129,107141,101952],{"id":101952},[19,107143,107144],{},"检查 actuator 数量：",[469,107146,107148],{"className":30758,"code":107147,"language":30760,"meta":54,"style":54},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[475,107149,107150,107162],{"__ignoreMap":54},[478,107151,107152,107154,107156,107158,107160],{"class":480,"line":481},[478,107153,2099],{"class":710},[478,107155,106938],{"class":714},[478,107157,21513],{"class":710},[478,107159,25498],{"class":495},[478,107161,4305],{"class":714},[478,107163,107164,107166,107168,107170,107172],{"class":480,"line":565},[478,107165,104275],{"class":710},[478,107167,103815],{"class":495},[478,107169,263],{"class":714},[478,107171,106955],{"class":488},[478,107173,720],{"class":714},[19,107175,107176,107178,107179,107181],{},[475,107177,102538],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[475,107180,101456],{}," 长度应该是 1。",[19,107183,107184],{},"产生正弦控制信号：",[469,107186,107188],{"className":30758,"code":107187,"language":30760,"meta":54,"style":54},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[475,107189,107190],{"__ignoreMap":54},[478,107191,107192,107194,107196,107198,107200,107202,107204,107206,107208,107210,107212,107214,107216,107218],{"class":480,"line":481},[478,107193,106251],{"class":714},[478,107195,895],{"class":495},[478,107197,5009],{"class":714},[478,107199,759],{"class":710},[478,107201,107006],{"class":495},[478,107203,7084],{"class":710},[478,107205,107011],{"class":714},[478,107207,105640],{"class":495},[478,107209,7084],{"class":710},[478,107211,107018],{"class":714},[478,107213,1155],{"class":710},[478,107215,62247],{"class":495},[478,107217,7084],{"class":710},[478,107219,107027],{"class":714},[19,107221,107222],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107224,102053],{},[469,107226,107227],{"className":30758,"code":104885,"language":30760,"meta":54,"style":54},[475,107228,107229],{"__ignoreMap":54},[478,107230,107231],{"class":480,"line":481},[478,107232,104885],{"class":714},[19,107234,107235],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[129,107237,102088],{"id":102088},[469,107239,107241],{"className":30758,"code":107240,"language":30760,"meta":54,"style":54},"import math\n",[475,107242,107243],{"__ignoreMap":54},[478,107244,107245,107247],{"class":480,"line":481},[478,107246,30772],{"class":710},[478,107248,106730],{"class":714},[19,107250,107251,107252,101398,107255,107258],{},"导入 Python 标准库里的数学模块。后面要用 ",[475,107253,107254],{},"math.sin",[475,107256,107257],{},"math.pi"," 生成周期变化的控制信号。",[469,107260,107261],{"className":30758,"code":104066,"language":30760,"meta":54,"style":54},[475,107262,107263,107269],{"__ignoreMap":54},[478,107264,107265,107267],{"class":480,"line":481},[478,107266,30772],{"class":710},[478,107268,101681],{"class":714},[478,107270,107271,107273,107275,107277],{"class":480,"line":565},[478,107272,30772],{"class":710},[478,107274,31760],{"class":714},[478,107276,31763],{"class":710},[478,107278,31766],{"class":714},[19,107280,107281],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[469,107283,107284],{"className":53447,"code":106567,"language":53449,"meta":54,"style":54},[475,107285,107286],{"__ignoreMap":54},[478,107287,107288,107290,107292,107294,107296,107298,107300,107302,107304,107306,107308,107310,107312,107314,107316],{"class":480,"line":481},[478,107289,1605],{"class":714},[478,107291,103336],{"class":51680},[478,107293,15485],{"class":484},[478,107295,759],{"class":714},[478,107297,106399],{"class":488},[478,107299,54204],{"class":484},[478,107301,759],{"class":714},[478,107303,106399],{"class":488},[478,107305,106408],{"class":484},[478,107307,759],{"class":714},[478,107309,106413],{"class":488},[478,107311,106596],{"class":484},[478,107313,759],{"class":714},[478,107315,106601],{"class":488},[478,107317,101524],{"class":714},[19,107319,107320,107321,107323,107324,107326,107327,107329],{},"这行定义关节。",[475,107322,106220],{}," 表示旋转关节。",[475,107325,106619],{}," 表示绕 y 轴旋转。",[475,107328,106625],{}," 表示有一点阻尼，运动不会完全无损耗。",[469,107331,107333],{"className":53447,"code":107332,"language":53449,"meta":54,"style":54},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[475,107334,107335],{"__ignoreMap":54},[478,107336,107337,107339,107341,107343,107345,107348,107350,107352,107355,107358,107360,107363,107365,107367,107369,107371,107373,107376],{"class":480,"line":481},[478,107338,1605],{"class":714},[478,107340,101500],{"class":51680},[478,107342,15485],{"class":484},[478,107344,759],{"class":714},[478,107346,107347],{"class":488},"\"link_geom\"",[478,107349,54204],{"class":484},[478,107351,759],{"class":714},[478,107353,107354],{"class":488},"\"capsule\"",[478,107356,107357],{"class":484}," fromto",[478,107359,759],{"class":714},[478,107361,107362],{"class":488},"\"0 0 0 0 0 0.5\"",[478,107364,101516],{"class":484},[478,107366,759],{"class":714},[478,107368,104158],{"class":488},[478,107370,102381],{"class":484},[478,107372,759],{"class":714},[478,107374,107375],{"class":488},"\"0.5\"",[478,107377,101524],{"class":714},[19,107379,107380,107381,107383,107384,107386,107387,107390,107391,28765,107394,107396],{},"这行定义摆杆的形状。",[475,107382,103545],{}," 是胶囊体，适合表示杆子。",[475,107385,103556],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[475,107388,107389],{},"(0,0,0)"," 延伸到 ",[475,107392,107393],{},"(0,0,0.5)",[475,107395,103550],{}," 是半径。",[469,107398,107399],{"className":53447,"code":106633,"language":53449,"meta":54,"style":54},[475,107400,107401],{"__ignoreMap":54},[478,107402,107403,107405,107407,107409,107411,107413,107415,107417,107419,107421,107423,107425,107427,107429,107431,107433,107435,107437],{"class":480,"line":481},[478,107404,1605],{"class":714},[478,107406,106454],{"class":51680},[478,107408,15485],{"class":484},[478,107410,759],{"class":714},[478,107412,106461],{"class":488},[478,107414,106464],{"class":484},[478,107416,759],{"class":714},[478,107418,106399],{"class":488},[478,107420,106471],{"class":484},[478,107422,759],{"class":714},[478,107424,4244],{"class":488},[478,107426,106478],{"class":484},[478,107428,759],{"class":714},[478,107430,106483],{"class":488},[478,107432,106486],{"class":484},[478,107434,759],{"class":714},[478,107436,106491],{"class":488},[478,107438,101524],{"class":714},[19,107440,107441,107442,107444,107445,107448,107449,107451],{},"这行定义电机。它作用在 ",[475,107443,106220],{}," 关节上。",[475,107446,107447],{},"gear"," 可以理解成放大倍数。",[475,107450,106235],{}," 限制控制输入范围。",[469,107453,107454],{"className":30758,"code":107147,"language":30760,"meta":54,"style":54},[475,107455,107456,107468],{"__ignoreMap":54},[478,107457,107458,107460,107462,107464,107466],{"class":480,"line":481},[478,107459,2099],{"class":710},[478,107461,106938],{"class":714},[478,107463,21513],{"class":710},[478,107465,25498],{"class":495},[478,107467,4305],{"class":714},[478,107469,107470,107472,107474,107476,107478],{"class":480,"line":565},[478,107471,104275],{"class":710},[478,107473,103815],{"class":495},[478,107475,263],{"class":714},[478,107477,106955],{"class":488},[478,107479,720],{"class":714},[19,107481,107482,107484],{},[475,107483,102538],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[469,107486,107488],{"className":30758,"code":107487,"language":30760,"meta":54,"style":54},"for step in range(2000):\n",[475,107489,107490],{"__ignoreMap":54},[478,107491,107492,107494,107496,107498,107500,107502,107504],{"class":480,"line":481},[478,107493,3591],{"class":710},[478,107495,31996],{"class":714},[478,107497,26423],{"class":710},[478,107499,32823],{"class":495},[478,107501,263],{"class":714},[478,107503,106976],{"class":495},[478,107505,31166],{"class":714},[19,107507,107508,107509,107511,107512,107515],{},"循环 2000 步。这里没有用 ",[475,107510,1687],{},"，而是用 ",[475,107513,107514],{},"step","，因为后面要用当前步数计算时间。",[469,107517,107519],{"className":30758,"code":107518,"language":30760,"meta":54,"style":54},"t = step * model.opt.timestep\n",[475,107520,107521],{"__ignoreMap":54},[478,107522,107523,107526,107528,107530,107532],{"class":480,"line":481},[478,107524,107525],{"class":714},"t ",[478,107527,759],{"class":710},[478,107529,31996],{"class":714},[478,107531,1155],{"class":710},[478,107533,106992],{"class":714},[19,107535,107536],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[469,107538,107539],{"className":30758,"code":107187,"language":30760,"meta":54,"style":54},[475,107540,107541],{"__ignoreMap":54},[478,107542,107543,107545,107547,107549,107551,107553,107555,107557,107559,107561,107563,107565,107567,107569],{"class":480,"line":481},[478,107544,106251],{"class":714},[478,107546,895],{"class":495},[478,107548,5009],{"class":714},[478,107550,759],{"class":710},[478,107552,107006],{"class":495},[478,107554,7084],{"class":710},[478,107556,107011],{"class":714},[478,107558,105640],{"class":495},[478,107560,7084],{"class":710},[478,107562,107018],{"class":714},[478,107564,1155],{"class":710},[478,107566,62247],{"class":495},[478,107568,7084],{"class":710},[478,107570,107027],{"class":714},[19,107572,107573],{},"这行给电机输入一个正弦波。拆开看：",[29,107575,107576,107582,107588],{},[32,107577,107578,107581],{},[475,107579,107580],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[32,107583,107584,107587],{},[475,107585,107586],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[32,107589,107590,107593],{},[475,107591,107592],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107595,107596],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[469,107598,107600],{"className":30758,"code":107599,"language":30760,"meta":54,"style":54},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[475,107601,107602],{"__ignoreMap":54},[478,107603,107604,107606,107608,107610,107612,107614],{"class":480,"line":481},[478,107605,30795],{"class":495},[478,107607,263],{"class":714},[478,107609,107055],{"class":488},[478,107611,105310],{"class":714},[478,107613,994],{"class":495},[478,107615,30877],{"class":714},[19,107617,107618,107619,107621],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[475,107620,101450],{}," 只有一个数。",[14,107623,102696],{"id":102695},[19,107625,107626],{},"输出类似:",[469,107628,107631],{"className":107629,"code":107630,"language":5753,"meta":54},[5751],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[475,107632,107630],{"__ignoreMap":54},[19,107634,107635,107636,107638],{},"这里 ",[475,107637,106506],{}," 是电机输入。",[19,107640,107641,107644,107645,107648],{},[475,107642,107643],{},"joint qpos"," 是关节角度，单位通常是弧度。",[475,107646,107647],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107650,107651],{},"角度单位提示：",[469,107653,107656],{"className":107654,"code":107655,"language":5753,"meta":54},[5751],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[475,107657,107655],{"__ignoreMap":54},[19,107659,107660,107661,107663,107664,107666],{},"如果你看到 ",[475,107662,104410],{}," 是 ",[475,107665,35709],{},"，大约就是 28.6 度。",[14,107668,102728],{"id":102727},[29,107670,107671,107678,107681,107688,107691,107699,107707],{},[32,107672,102791,107673,102794,107675,28765],{},[475,107674,106691],{},[475,107676,107677],{},"gear=\"5\"",[32,107679,107680],{},"重新运行，观察关节运动是否更剧烈。",[32,107682,102791,107683,102794,107685,28765],{},[475,107684,106235],{},[475,107686,107687],{},"-0.2 0.2",[32,107689,107690],{},"重新运行，观察控制能力是否变弱。",[32,107692,107693,107694,107696,107697,28765],{},"去掉 actuator，确认 ",[475,107695,102538],{}," 变成 ",[475,107698,895],{},[32,107700,102791,107701,102794,107703,107706],{},[475,107702,106625],{},[475,107704,107705],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[32,107708,102791,107709,102794,107711,107714],{},[475,107710,106619],{},[475,107712,107713],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107716,102833],{"id":102832},[129,107718,107720],{"id":107719},"indexerror-index-0-is-out-of-bounds",[475,107721,107722],{},"IndexError: index 0 is out of bounds",[19,107724,107725,107726,107728],{},"原因是 ",[475,107727,106372],{},"，没有 actuator。",[129,107730,107731],{"id":107731},"关节几乎不动",[19,107733,107734],{},"可能原因:",[29,107736,107737,107742,107746,107752],{},[32,107738,107739,107741],{},[475,107740,107447],{}," 太小",[32,107743,107744,107741],{},[475,107745,106235],{},[32,107747,107748,107751],{},[475,107749,107750],{},"damping"," 太大",[32,107753,107754],{},"重力方向导致运动不明显",[129,107756,107757],{"id":107757},"模型编译失败",[19,107759,107760,107761,107763],{},"检查 actuator 引用的 ",[475,107762,106682],{}," 是否存在，joint 名称是否拼写一致。",[129,107765,107767,107769],{"id":107766},"datactrl0-写了但没有效果",[475,107768,106506],{}," 写了但没有效果",[19,107771,102955],{},[29,107773,107774,107779,107782,107787,107792],{},[32,107775,107776,107778],{},[475,107777,102538],{}," 是否大于 0。",[32,107780,107781],{},"motor 是否引用了正确 joint。",[32,107783,107784,107786],{},[475,107785,107447],{}," 是否太小。",[32,107788,107789,107791],{},[475,107790,106235],{}," 是否把输入限制得太小。",[32,107793,107794],{},"body 是否真的有可动 joint。",[129,107796,107797],{"id":107797},"控制输入超过范围会怎样",[19,107799,107800],{},"如果设置了：",[469,107802,107804],{"className":53447,"code":107803,"language":53449,"meta":54,"style":54},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[475,107805,107806],{"__ignoreMap":54},[478,107807,107808],{"class":480,"line":481},[478,107809,107803],{"class":714},[19,107811,107812],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[469,107814,107816],{"className":30758,"code":107815,"language":30760,"meta":54,"style":54},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[475,107817,107818,107838],{"__ignoreMap":54},[478,107819,107820,107823,107825,107828,107830,107832,107834,107836],{"class":480,"line":481},[478,107821,107822],{"class":714},"action ",[478,107824,759],{"class":710},[478,107826,107827],{"class":714}," np.clip(action, ",[478,107829,1232],{"class":710},[478,107831,105640],{"class":495},[478,107833,13001],{"class":714},[478,107835,105640],{"class":495},[478,107837,720],{"class":714},[478,107839,107840,107842,107844,107846,107848],{"class":480,"line":565},[478,107841,106251],{"class":714},[478,107843,895],{"class":495},[478,107845,5009],{"class":714},[478,107847,759],{"class":710},[478,107849,107850],{"class":714}," action\n",[14,107852,102987],{"id":102986},[19,107854,107855],{},"这一章建立了控制任务的基本形式：",[469,107857,107860],{"className":107858,"code":107859,"language":5753,"meta":54},[5751],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[475,107861,107859],{"__ignoreMap":54},[19,107863,107864],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[617,107866,107867],{},"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":54,"searchDepth":565,"depth":565,"links":107869},[107870,107871,107872,107877,107881,107882,107883,107891],{"id":101026,"depth":565,"text":101027},{"id":101149,"depth":565,"text":101150},{"id":101424,"depth":565,"text":101425,"children":107873},[107874,107875,107876],{"id":106513,"depth":579,"text":106514},{"id":106563,"depth":579,"text":106564},{"id":106629,"depth":579,"text":106630},{"id":101632,"depth":565,"text":101633,"children":107878},[107879,107880],{"id":101952,"depth":579,"text":101952},{"id":102088,"depth":579,"text":102088},{"id":102695,"depth":565,"text":102696},{"id":102727,"depth":565,"text":102728},{"id":102832,"depth":565,"text":102833,"children":107884},[107885,107886,107887,107888,107890],{"id":107719,"depth":579,"text":107722},{"id":107731,"depth":579,"text":107731},{"id":107757,"depth":579,"text":107757},{"id":107766,"depth":579,"text":107889},"data.ctrl[0] 写了但没有效果",{"id":107797,"depth":579,"text":107797},{"id":102986,"depth":565,"text":102987},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106201,"description":54},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107898,"title":107899,"body":107900,"description":54,"extension":638,"meta":109809,"navigation":640,"path":109810,"seo":109811,"stem":109812,"__hash__":109813},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107901,"toc":109785},[107902,107905,107907,107910,107918,107921,107938,107941,107966,107969,108015,108017,108019,108074,108076,108095,108097,108140,108143,108160,108163,108179,108189,108196,108198,108201,108204,108238,108241,108289,108293,108296,108310,108319,108323,108326,108351,108354,108358,108371,108374,108380,108383,108398,108400,108403,108663,108665,108677,108680,108992,108994,109006,109008,109011,109026,109031,109034,109056,109059,109062,109096,109099,109103,109114,109117,109134,109137,109151,109158,109178,109185,109199,109202,109214,109229,109249,109252,109274,109277,109281,109296,109307,109322,109325,109355,109371,109400,109408,109432,109435,109453,109463,109475,109482,109491,109497,109506,109509,109511,109520,109523,109538,109540,109543,109554,109557,109568,109571,109589,109591,109608,109611,109639,109641,109645,109648,109678,109684,109687,109691,109699,109702,109704,109725,109728,109731,109747,109750,109766,109768,109771,109782],[10,107903,107899],{"id":107904},"_5viewer-可视化与-renderer-离屏渲染",[14,107906,101027],{"id":101026},[19,107908,107909],{},"本章掌握两类可视化方式:",[29,107911,107912,107915],{},[32,107913,107914],{},"交互式 viewer: 适合人工观察仿真",[32,107916,107917],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107919,107920],{},"使用官方接口:",[469,107922,107924],{"className":30758,"code":107923,"language":30760,"meta":54,"style":54},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[475,107925,107926,107933],{"__ignoreMap":54},[478,107927,107928,107930],{"class":480,"line":481},[478,107929,30772],{"class":710},[478,107931,107932],{"class":714}," mujoco.viewer\n",[478,107934,107935],{"class":480,"line":565},[478,107936,107937],{"class":714},"mujoco.viewer.launch_passive(model, data)\n",[19,107939,107940],{},"以及:",[469,107942,107944],{"className":30758,"code":107943,"language":30760,"meta":54,"style":54},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[475,107945,107946,107956],{"__ignoreMap":54},[478,107947,107948,107951,107953],{"class":480,"line":481},[478,107949,107950],{"class":714},"renderer ",[478,107952,759],{"class":710},[478,107954,107955],{"class":714}," mujoco.Renderer(model)\n",[478,107957,107958,107961,107963],{"class":480,"line":565},[478,107959,107960],{"class":714},"image ",[478,107962,759],{"class":710},[478,107964,107965],{"class":714}," renderer.render()\n",[19,107967,107968],{},"新手建议先理解二者区别：",[371,107970,107971,107987],{},[374,107972,107973],{},[377,107974,107975,107978,107981,107984],{},[380,107976,107977],{"align":382},"工具",[380,107979,107980],{"align":382},"用途",[380,107982,107983],{"align":382},"是否打开窗口",[380,107985,107986],{"align":382},"常见场景",[388,107988,107989,108002],{},[377,107990,107991,107994,107997,107999],{},[393,107992,107993],{"align":382},"Viewer",[393,107995,107996],{"align":382},"人眼实时观察仿真",[393,107998,105045],{"align":382},[393,108000,108001],{"align":382},"调试模型、看控制效果",[377,108003,108004,108007,108010,108012],{},[393,108005,108006],{"align":382},"Renderer",[393,108008,108009],{"align":382},"生成图像数组",[393,108011,105058],{"align":382},[393,108013,108014],{"align":382},"保存图片、训练视觉策略、服务器批量采集",[14,108016,101150],{"id":101149},[19,108018,101153],{},[469,108020,108022],{"className":471,"code":108021,"language":473,"meta":54,"style":54},"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",[475,108023,108024,108036,108046,108054,108062],{"__ignoreMap":54},[478,108025,108026,108028,108030,108032,108034],{"class":480,"line":481},[478,108027,24956],{"class":484},[478,108029,26695],{"class":488},[478,108031,489],{"class":488},[478,108033,26780],{"class":495},[478,108035,25058],{"class":495},[478,108037,108038,108040,108042,108044],{"class":480,"line":565},[478,108039,101188],{"class":488},[478,108041,101191],{"class":488},[478,108043,101194],{"class":488},[478,108045,25058],{"class":495},[478,108047,108048,108050,108052],{"class":480,"line":579},[478,108049,101201],{"class":488},[478,108051,101204],{"class":488},[478,108053,25058],{"class":495},[478,108055,108056,108058,108060],{"class":480,"line":593},[478,108057,101211],{"class":488},[478,108059,101214],{"class":488},[478,108061,25058],{"class":495},[478,108063,108064,108066,108068,108070,108072],{"class":480,"line":1769},[478,108065,101221],{"class":488},[478,108067,101224],{"class":488},[478,108069,101227],{"class":488},[478,108071,101230],{"class":488},[478,108073,102896],{"class":488},[19,108075,103199],{},[469,108077,108079],{"className":471,"code":108078,"language":473,"meta":54,"style":54},"pip install \"mujoco>=2.3\" numpy pillow\n",[475,108080,108081],{"__ignoreMap":54},[478,108082,108083,108085,108087,108089,108092],{"class":480,"line":481},[478,108084,485],{"class":484},[478,108086,489],{"class":488},[478,108088,101310],{"class":488},[478,108090,108091],{"class":488}," numpy",[478,108093,108094],{"class":488}," pillow\n",[19,108096,103216],{},[469,108098,108100],{"className":471,"code":108099,"language":473,"meta":54,"style":54},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[475,108101,108102,108119,108128],{"__ignoreMap":54},[478,108103,108104,108106,108108,108110,108113,108115,108117],{"class":480,"line":481},[478,108105,30710],{"class":484},[478,108107,29556],{"class":488},[478,108109,25495],{"class":495},[478,108111,108112],{"class":488}," mujoco-render",[478,108114,101355],{"class":488},[478,108116,101358],{"class":495},[478,108118,101361],{"class":495},[478,108120,108121,108123,108125],{"class":480,"line":565},[478,108122,30710],{"class":484},[478,108124,101368],{"class":488},[478,108126,108127],{"class":488}," mujoco-render\n",[478,108129,108130,108132,108134,108136,108138],{"class":480,"line":579},[478,108131,485],{"class":484},[478,108133,489],{"class":488},[478,108135,101310],{"class":488},[478,108137,108091],{"class":488},[478,108139,108094],{"class":488},[19,108141,108142],{},"离屏渲染后端:",[469,108144,108146],{"className":471,"code":108145,"language":473,"meta":54,"style":54},"export MUJOCO_GL=egl\n",[475,108147,108148],{"__ignoreMap":54},[478,108149,108150,108152,108155,108157],{"class":480,"line":481},[478,108151,25422],{"class":710},[478,108153,108154],{"class":714}," MUJOCO_GL",[478,108156,759],{"class":710},[478,108158,108159],{"class":714},"egl\n",[19,108161,108162],{},"或:",[469,108164,108166],{"className":471,"code":108165,"language":473,"meta":54,"style":54},"export MUJOCO_GL=osmesa\n",[475,108167,108168],{"__ignoreMap":54},[478,108169,108170,108172,108174,108176],{"class":480,"line":481},[478,108171,25422],{"class":710},[478,108173,108154],{"class":714},[478,108175,759],{"class":710},[478,108177,108178],{"class":714},"osmesa\n",[19,108180,108181,108182,108185,108186,28765],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[475,108183,108184],{},"egl"," 失败，再尝试 ",[475,108187,108188],{},"osmesa",[19,108190,108191,108192,108195],{},"如果你在本机桌面环境运行，通常先不要设置 ",[475,108193,108194],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108197,101425],{"id":101424},[19,108199,108200],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108202,108203],{},"典型 viewer 流程:",[469,108205,108207],{"className":30758,"code":108206,"language":30760,"meta":54,"style":54},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[475,108208,108209,108222,108229,108233],{"__ignoreMap":54},[478,108210,108211,108214,108217,108219],{"class":480,"line":481},[478,108212,108213],{"class":710},"with",[478,108215,108216],{"class":714}," mujoco.viewer.launch_passive(model, data) ",[478,108218,31763],{"class":710},[478,108220,108221],{"class":714}," viewer:\n",[478,108223,108224,108226],{"class":480,"line":565},[478,108225,2817],{"class":710},[478,108227,108228],{"class":714}," viewer.is_running():\n",[478,108230,108231],{"class":480,"line":579},[478,108232,101896],{"class":714},[478,108234,108235],{"class":480,"line":593},[478,108236,108237],{"class":714},"        viewer.sync()\n",[19,108239,108240],{},"典型 renderer 流程:",[469,108242,108244],{"className":30758,"code":108243,"language":30760,"meta":54,"style":54},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[475,108245,108246,108272,108276,108281],{"__ignoreMap":54},[478,108247,108248,108250,108252,108255,108257,108259,108261,108263,108265,108267,108270],{"class":480,"line":481},[478,108249,107950],{"class":714},[478,108251,759],{"class":710},[478,108253,108254],{"class":714}," mujoco.Renderer(model, ",[478,108256,25361],{"class":5782},[478,108258,759],{"class":710},[478,108260,42722],{"class":495},[478,108262,13001],{"class":714},[478,108264,25357],{"class":5782},[478,108266,759],{"class":710},[478,108268,108269],{"class":495},"640",[478,108271,720],{"class":714},[478,108273,108274],{"class":480,"line":565},[478,108275,104885],{"class":714},[478,108277,108278],{"class":480,"line":579},[478,108279,108280],{"class":714},"renderer.update_scene(data)\n",[478,108282,108283,108285,108287],{"class":480,"line":593},[478,108284,107960],{"class":714},[478,108286,759],{"class":710},[478,108288,107965],{"class":714},[129,108290,108292],{"id":108291},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108294,108295],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[469,108297,108299],{"className":30758,"code":108298,"language":30760,"meta":54,"style":54},"mujoco.mj_step(model, data)\nviewer.sync()\n",[475,108300,108301,108305],{"__ignoreMap":54},[478,108302,108303],{"class":480,"line":481},[478,108304,104885],{"class":714},[478,108306,108307],{"class":480,"line":565},[478,108308,108309],{"class":714},"viewer.sync()\n",[19,108311,108312,108314,108315,108318],{},[475,108313,101595],{}," 负责算物理，",[475,108316,108317],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[129,108320,108322],{"id":108321},"为什么要-sleep","为什么要 sleep",[19,108324,108325],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[469,108327,108329],{"className":30758,"code":108328,"language":30760,"meta":54,"style":54},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[475,108330,108331],{"__ignoreMap":54},[478,108332,108333,108336,108338,108341,108343,108346,108348],{"class":480,"line":481},[478,108334,108335],{"class":714},"sleep_time ",[478,108337,759],{"class":710},[478,108339,108340],{"class":714}," model.opt.timestep ",[478,108342,1232],{"class":710},[478,108344,108345],{"class":714}," (time.time() ",[478,108347,1232],{"class":710},[478,108349,108350],{"class":714}," step_start)\n",[19,108352,108353],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[129,108355,108357],{"id":108356},"renderer-输出是什么","renderer 输出是什么",[469,108359,108361],{"className":30758,"code":108360,"language":30760,"meta":54,"style":54},"image = renderer.render()\n",[475,108362,108363],{"__ignoreMap":54},[478,108364,108365,108367,108369],{"class":480,"line":481},[478,108366,107960],{"class":714},[478,108368,759],{"class":710},[478,108370,107965],{"class":714},[19,108372,108373],{},"得到的是 NumPy 数组，形状通常是：",[469,108375,108378],{"className":108376,"code":108377,"language":5753,"meta":54},[5751],"(height, width, 3)\n",[475,108379,108377],{"__ignoreMap":54},[19,108381,108382],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[469,108384,108386],{"className":30758,"code":108385,"language":30760,"meta":54,"style":54},"Image.fromarray(image).save(\"render_output.png\")\n",[475,108387,108388],{"__ignoreMap":54},[478,108389,108390,108393,108396],{"class":480,"line":481},[478,108391,108392],{"class":714},"Image.fromarray(image).save(",[478,108394,108395],{"class":488},"\"render_output.png\"",[478,108397,720],{"class":714},[14,108399,101633],{"id":101632},[19,108401,108402],{},"交互式 Viewer:",[469,108404,108406],{"className":30758,"code":108405,"language":30760,"meta":54,"style":54},"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",[475,108407,108408,108414,108418,108424,108430,108434,108438,108446,108451,108455,108459,108463,108468,108473,108477,108481,108485,108490,108494,108498,108502,108506,108510,108514,108526,108538,108546,108550,108560,108580,108590,108595,108600,108604,108621,108634,108639,108643,108647,108659],{"__ignoreMap":54},[478,108409,108410,108412],{"class":480,"line":481},[478,108411,30772],{"class":710},[478,108413,32209],{"class":714},[478,108415,108416],{"class":480,"line":565},[478,108417,2966],{"emptyLinePlaceholder":640},[478,108419,108420,108422],{"class":480,"line":579},[478,108421,30772],{"class":710},[478,108423,101681],{"class":714},[478,108425,108426,108428],{"class":480,"line":593},[478,108427,30772],{"class":710},[478,108429,107932],{"class":714},[478,108431,108432],{"class":480,"line":1769},[478,108433,2966],{"emptyLinePlaceholder":640},[478,108435,108436],{"class":480,"line":1783},[478,108437,2966],{"emptyLinePlaceholder":640},[478,108439,108440,108442,108444],{"class":480,"line":1789},[478,108441,101694],{"class":495},[478,108443,14130],{"class":710},[478,108445,101699],{"class":488},[478,108447,108448],{"class":480,"line":1880},[478,108449,108450],{"class":488},"\u003Cmujoco model=\"viewer_demo\">\n",[478,108452,108453],{"class":480,"line":1886},[478,108454,101709],{"class":488},[478,108456,108457],{"class":480,"line":1898},[478,108458,2966],{"emptyLinePlaceholder":640},[478,108460,108461],{"class":480,"line":2180},[478,108462,101718],{"class":488},[478,108464,108465],{"class":480,"line":2185},[478,108466,108467],{"class":488},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[478,108469,108470],{"class":480,"line":2191},[478,108471,108472],{"class":488},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[478,108474,108475],{"class":480,"line":2196},[478,108476,2966],{"emptyLinePlaceholder":640},[478,108478,108479],{"class":480,"line":2210},[478,108480,101732],{"class":488},[478,108482,108483],{"class":480,"line":2215},[478,108484,101737],{"class":488},[478,108486,108487],{"class":480,"line":2221},[478,108488,108489],{"class":488},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[478,108491,108492],{"class":480,"line":2241},[478,108493,101747],{"class":488},[478,108495,108496],{"class":480,"line":2246},[478,108497,101752],{"class":488},[478,108499,108500],{"class":480,"line":2260},[478,108501,101757],{"class":488},[478,108503,108504],{"class":480,"line":2265},[478,108505,96078],{"class":488},[478,108507,108508],{"class":480,"line":2294},[478,108509,2966],{"emptyLinePlaceholder":640},[478,108511,108512],{"class":480,"line":2299},[478,108513,2966],{"emptyLinePlaceholder":640},[478,108515,108516,108518,108520,108522,108524],{"class":480,"line":2316},[478,108517,32327],{"class":710},[478,108519,2539],{"class":484},[478,108521,101778],{"class":714},[478,108523,96066],{"class":495},[478,108525,4305],{"class":714},[478,108527,108528,108530,108532,108534,108536],{"class":480,"line":2321},[478,108529,101787],{"class":714},[478,108531,759],{"class":710},[478,108533,101792],{"class":714},[478,108535,101694],{"class":495},[478,108537,720],{"class":714},[478,108539,108540,108542,108544],{"class":480,"line":2326},[478,108541,101801],{"class":714},[478,108543,759],{"class":710},[478,108545,101806],{"class":714},[478,108547,108548],{"class":480,"line":2331},[478,108549,2966],{"emptyLinePlaceholder":640},[478,108551,108552,108554,108556,108558],{"class":480,"line":2345},[478,108553,34558],{"class":710},[478,108555,108216],{"class":714},[478,108557,31763],{"class":710},[478,108559,108221],{"class":714},[478,108561,108562,108565,108568,108570,108573,108575,108578],{"class":480,"line":2350},[478,108563,108564],{"class":710},"        while",[478,108566,108567],{"class":714}," viewer.is_running() ",[478,108569,30842],{"class":710},[478,108571,108572],{"class":714}," data.time ",[478,108574,1605],{"class":710},[478,108576,108577],{"class":495}," 5.0",[478,108579,4305],{"class":714},[478,108581,108582,108585,108587],{"class":480,"line":3143},[478,108583,108584],{"class":714},"            step_start ",[478,108586,759],{"class":710},[478,108588,108589],{"class":714}," time.time()\n",[478,108591,108592],{"class":480,"line":3157},[478,108593,108594],{"class":714},"            mujoco.mj_step(model, data)\n",[478,108596,108597],{"class":480,"line":3165},[478,108598,108599],{"class":714},"            viewer.sync()\n",[478,108601,108602],{"class":480,"line":3170},[478,108603,2966],{"emptyLinePlaceholder":640},[478,108605,108606,108609,108611,108613,108615,108617,108619],{"class":480,"line":3176},[478,108607,108608],{"class":714},"            sleep_time ",[478,108610,759],{"class":710},[478,108612,108340],{"class":714},[478,108614,1232],{"class":710},[478,108616,108345],{"class":714},[478,108618,1232],{"class":710},[478,108620,108350],{"class":714},[478,108622,108623,108625,108628,108630,108632],{"class":480,"line":3182},[478,108624,5208],{"class":710},[478,108626,108627],{"class":714}," sleep_time ",[478,108629,1655],{"class":710},[478,108631,4659],{"class":495},[478,108633,4305],{"class":714},[478,108635,108636],{"class":480,"line":3187},[478,108637,108638],{"class":714},"                time.sleep(sleep_time)\n",[478,108640,108641],{"class":480,"line":8514},[478,108642,2966],{"emptyLinePlaceholder":640},[478,108644,108645],{"class":480,"line":8538},[478,108646,2966],{"emptyLinePlaceholder":640},[478,108648,108649,108651,108653,108655,108657],{"class":480,"line":8543},[478,108650,2099],{"class":710},[478,108652,31600],{"class":495},[478,108654,101939],{"class":710},[478,108656,101942],{"class":488},[478,108658,4305],{"class":714},[478,108660,108661],{"class":480,"line":8549},[478,108662,101949],{"class":714},[19,108664,103950],{},[469,108666,108668],{"className":471,"code":108667,"language":473,"meta":54,"style":54},"touch ch5_viewer.py\n",[475,108669,108670],{"__ignoreMap":54},[478,108671,108672,108674],{"class":480,"line":481},[478,108673,101663],{"class":484},[478,108675,108676],{"class":488}," ch5_viewer.py\n",[19,108678,108679],{},"离屏 Renderer 保存图片:",[469,108681,108683],{"className":30758,"code":108682,"language":30760,"meta":54,"style":54},"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",[475,108684,108685,108697,108701,108707,108717,108721,108725,108733,108738,108742,108746,108750,108754,108759,108763,108767,108771,108775,108779,108783,108787,108791,108795,108799,108803,108815,108827,108835,108860,108864,108880,108884,108888,108903,108912,108916,108930,108935,108940,108944,108956,108968,108972,108976,108988],{"__ignoreMap":54},[478,108686,108687,108689,108692,108694],{"class":480,"line":481},[478,108688,31117],{"class":710},[478,108690,108691],{"class":714}," pathlib ",[478,108693,30772],{"class":710},[478,108695,108696],{"class":714}," Path\n",[478,108698,108699],{"class":480,"line":565},[478,108700,2966],{"emptyLinePlaceholder":640},[478,108702,108703,108705],{"class":480,"line":579},[478,108704,30772],{"class":710},[478,108706,101681],{"class":714},[478,108708,108709,108711,108713,108715],{"class":480,"line":593},[478,108710,31117],{"class":710},[478,108712,47643],{"class":495},[478,108714,47646],{"class":710},[478,108716,47649],{"class":714},[478,108718,108719],{"class":480,"line":1769},[478,108720,2966],{"emptyLinePlaceholder":640},[478,108722,108723],{"class":480,"line":1783},[478,108724,2966],{"emptyLinePlaceholder":640},[478,108726,108727,108729,108731],{"class":480,"line":1789},[478,108728,101694],{"class":495},[478,108730,14130],{"class":710},[478,108732,101699],{"class":488},[478,108734,108735],{"class":480,"line":1880},[478,108736,108737],{"class":488},"\u003Cmujoco model=\"renderer_demo\">\n",[478,108739,108740],{"class":480,"line":1886},[478,108741,101709],{"class":488},[478,108743,108744],{"class":480,"line":1898},[478,108745,2966],{"emptyLinePlaceholder":640},[478,108747,108748],{"class":480,"line":2180},[478,108749,101718],{"class":488},[478,108751,108752],{"class":480,"line":2185},[478,108753,108467],{"class":488},[478,108755,108756],{"class":480,"line":2191},[478,108757,108758],{"class":488},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[478,108760,108761],{"class":480,"line":2196},[478,108762,108472],{"class":488},[478,108764,108765],{"class":480,"line":2210},[478,108766,2966],{"emptyLinePlaceholder":640},[478,108768,108769],{"class":480,"line":2215},[478,108770,101732],{"class":488},[478,108772,108773],{"class":480,"line":2221},[478,108774,101737],{"class":488},[478,108776,108777],{"class":480,"line":2241},[478,108778,108489],{"class":488},[478,108780,108781],{"class":480,"line":2246},[478,108782,101747],{"class":488},[478,108784,108785],{"class":480,"line":2260},[478,108786,101752],{"class":488},[478,108788,108789],{"class":480,"line":2265},[478,108790,101757],{"class":488},[478,108792,108793],{"class":480,"line":2294},[478,108794,96078],{"class":488},[478,108796,108797],{"class":480,"line":2299},[478,108798,2966],{"emptyLinePlaceholder":640},[478,108800,108801],{"class":480,"line":2316},[478,108802,2966],{"emptyLinePlaceholder":640},[478,108804,108805,108807,108809,108811,108813],{"class":480,"line":2321},[478,108806,32327],{"class":710},[478,108808,2539],{"class":484},[478,108810,101778],{"class":714},[478,108812,96066],{"class":495},[478,108814,4305],{"class":714},[478,108816,108817,108819,108821,108823,108825],{"class":480,"line":2326},[478,108818,101787],{"class":714},[478,108820,759],{"class":710},[478,108822,101792],{"class":714},[478,108824,101694],{"class":495},[478,108826,720],{"class":714},[478,108828,108829,108831,108833],{"class":480,"line":2331},[478,108830,101801],{"class":714},[478,108832,759],{"class":710},[478,108834,101806],{"class":714},[478,108836,108837,108840,108842,108844,108846,108848,108850,108852,108854,108856,108858],{"class":480,"line":2345},[478,108838,108839],{"class":714},"    renderer ",[478,108841,759],{"class":710},[478,108843,108254],{"class":714},[478,108845,25361],{"class":5782},[478,108847,759],{"class":710},[478,108849,42722],{"class":495},[478,108851,13001],{"class":714},[478,108853,25357],{"class":5782},[478,108855,759],{"class":710},[478,108857,108269],{"class":495},[478,108859,720],{"class":714},[478,108861,108862],{"class":480,"line":2350},[478,108863,2966],{"emptyLinePlaceholder":640},[478,108865,108866,108868,108870,108872,108874,108876,108878],{"class":480,"line":3143},[478,108867,3767],{"class":710},[478,108869,101881],{"class":714},[478,108871,26423],{"class":710},[478,108873,32823],{"class":495},[478,108875,263],{"class":714},[478,108877,1012],{"class":495},[478,108879,31166],{"class":714},[478,108881,108882],{"class":480,"line":3157},[478,108883,101896],{"class":714},[478,108885,108886],{"class":480,"line":3165},[478,108887,2966],{"emptyLinePlaceholder":640},[478,108889,108890,108893,108896,108898,108901],{"class":480,"line":3170},[478,108891,108892],{"class":714},"    renderer.update_scene(data, ",[478,108894,108895],{"class":5782},"camera",[478,108897,759],{"class":710},[478,108899,108900],{"class":488},"\"fixed_camera\"",[478,108902,720],{"class":714},[478,108904,108905,108908,108910],{"class":480,"line":3176},[478,108906,108907],{"class":714},"    image ",[478,108909,759],{"class":710},[478,108911,107965],{"class":714},[478,108913,108914],{"class":480,"line":3182},[478,108915,2966],{"emptyLinePlaceholder":640},[478,108917,108918,108921,108923,108926,108928],{"class":480,"line":3187},[478,108919,108920],{"class":714},"    output_path ",[478,108922,759],{"class":710},[478,108924,108925],{"class":714}," Path(",[478,108927,108395],{"class":488},[478,108929,720],{"class":714},[478,108931,108932],{"class":480,"line":8514},[478,108933,108934],{"class":714},"    Image.fromarray(image).save(output_path)\n",[478,108936,108937],{"class":480,"line":8538},[478,108938,108939],{"class":714},"    renderer.close()\n",[478,108941,108942],{"class":480,"line":8543},[478,108943,2966],{"emptyLinePlaceholder":640},[478,108945,108946,108948,108950,108953],{"class":480,"line":8549},[478,108947,31679],{"class":495},[478,108949,263],{"class":714},[478,108951,108952],{"class":488},"\"saved:\"",[478,108954,108955],{"class":714},", output_path.resolve())\n",[478,108957,108958,108960,108962,108965],{"class":480,"line":8576},[478,108959,31679],{"class":495},[478,108961,263],{"class":714},[478,108963,108964],{"class":488},"\"image shape:\"",[478,108966,108967],{"class":714},", image.shape)\n",[478,108969,108970],{"class":480,"line":8581},[478,108971,2966],{"emptyLinePlaceholder":640},[478,108973,108974],{"class":480,"line":8587},[478,108975,2966],{"emptyLinePlaceholder":640},[478,108977,108978,108980,108982,108984,108986],{"class":480,"line":8599},[478,108979,2099],{"class":710},[478,108981,31600],{"class":495},[478,108983,101939],{"class":710},[478,108985,101942],{"class":488},[478,108987,4305],{"class":714},[478,108989,108990],{"class":480,"line":8611},[478,108991,101949],{"class":714},[19,108993,103950],{},[469,108995,108997],{"className":471,"code":108996,"language":473,"meta":54,"style":54},"touch ch5_renderer.py\n",[475,108998,108999],{"__ignoreMap":54},[478,109000,109001,109003],{"class":480,"line":481},[478,109002,101663],{"class":484},[478,109004,109005],{"class":488}," ch5_renderer.py\n",[129,109007,101952],{"id":101952},[19,109009,109010],{},"viewer 上下文：",[469,109012,109014],{"className":30758,"code":109013,"language":30760,"meta":54,"style":54},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[475,109015,109016],{"__ignoreMap":54},[478,109017,109018,109020,109022,109024],{"class":480,"line":481},[478,109019,108213],{"class":710},[478,109021,108216],{"class":714},[478,109023,31763],{"class":710},[478,109025,108221],{"class":714},[19,109027,109028,109030],{},[475,109029,108213],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109032,109033],{},"窗口循环：",[469,109035,109037],{"className":30758,"code":109036,"language":30760,"meta":54,"style":54},"while viewer.is_running() and data.time \u003C 5.0:\n",[475,109038,109039],{"__ignoreMap":54},[478,109040,109041,109044,109046,109048,109050,109052,109054],{"class":480,"line":481},[478,109042,109043],{"class":710},"while",[478,109045,108567],{"class":714},[478,109047,30842],{"class":710},[478,109049,108572],{"class":714},[478,109051,1605],{"class":710},[478,109053,108577],{"class":495},[478,109055,4305],{"class":714},[19,109057,109058],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109060,109061],{},"固定相机：",[469,109063,109065],{"className":53447,"code":109064,"language":53449,"meta":54,"style":54},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[475,109066,109067],{"__ignoreMap":54},[478,109068,109069,109071,109073,109075,109077,109079,109081,109083,109086,109089,109091,109094],{"class":480,"line":481},[478,109070,1605],{"class":714},[478,109072,108895],{"class":51680},[478,109074,15485],{"class":484},[478,109076,759],{"class":714},[478,109078,108900],{"class":488},[478,109080,101486],{"class":484},[478,109082,759],{"class":714},[478,109084,109085],{"class":488},"\"1.5 -2.0 1.2\"",[478,109087,109088],{"class":484}," xyaxes",[478,109090,759],{"class":714},[478,109092,109093],{"class":488},"\"1 0.75 0 0 0 1\"",[478,109095,101524],{"class":714},[19,109097,109098],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[129,109100,109102],{"id":109101},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[469,109104,109106],{"className":30758,"code":109105,"language":30760,"meta":54,"style":54},"import time\n",[475,109107,109108],{"__ignoreMap":54},[478,109109,109110,109112],{"class":480,"line":481},[478,109111,30772],{"class":710},[478,109113,32209],{"class":714},[19,109115,109116],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[469,109118,109120],{"className":30758,"code":109119,"language":30760,"meta":54,"style":54},"import mujoco\nimport mujoco.viewer\n",[475,109121,109122,109128],{"__ignoreMap":54},[478,109123,109124,109126],{"class":480,"line":481},[478,109125,30772],{"class":710},[478,109127,101681],{"class":714},[478,109129,109130,109132],{"class":480,"line":565},[478,109131,30772],{"class":710},[478,109133,107932],{"class":714},[19,109135,109136],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[469,109138,109139],{"className":30758,"code":109013,"language":30760,"meta":54,"style":54},[475,109140,109141],{"__ignoreMap":54},[478,109142,109143,109145,109147,109149],{"class":480,"line":481},[478,109144,108213],{"class":710},[478,109146,108216],{"class":714},[478,109148,31763],{"class":710},[478,109150,108221],{"class":714},[19,109152,109153,109154,109157],{},"打开一个 viewer 窗口。",[475,109155,109156],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[469,109159,109160],{"className":30758,"code":109036,"language":30760,"meta":54,"style":54},[475,109161,109162],{"__ignoreMap":54},[478,109163,109164,109166,109168,109170,109172,109174,109176],{"class":480,"line":481},[478,109165,109043],{"class":710},[478,109167,108567],{"class":714},[478,109169,30842],{"class":710},[478,109171,108572],{"class":714},[478,109173,1605],{"class":710},[478,109175,108577],{"class":495},[478,109177,4305],{"class":714},[19,109179,109180,109181,109184],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[475,109182,109183],{},"viewer.is_running()"," 会变成 false，循环结束。",[469,109186,109188],{"className":30758,"code":109187,"language":30760,"meta":54,"style":54},"step_start = time.time()\n",[475,109189,109190],{"__ignoreMap":54},[478,109191,109192,109195,109197],{"class":480,"line":481},[478,109193,109194],{"class":714},"step_start ",[478,109196,759],{"class":710},[478,109198,108589],{"class":714},[19,109200,109201],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[469,109203,109204],{"className":30758,"code":108298,"language":30760,"meta":54,"style":54},[475,109205,109206,109210],{"__ignoreMap":54},[478,109207,109208],{"class":480,"line":481},[478,109209,104885],{"class":714},[478,109211,109212],{"class":480,"line":565},[478,109213,108309],{"class":714},[19,109215,109216,109218,109219,109221,109222,109224,109225,109228],{},[475,109217,101595],{}," 推进物理仿真。",[475,109220,108317],{}," 把最新的 ",[475,109223,33781],{}," 同步到窗口里显示。没有 ",[475,109226,109227],{},"sync()","，窗口可能看不到最新状态。",[469,109230,109231],{"className":30758,"code":108328,"language":30760,"meta":54,"style":54},[475,109232,109233],{"__ignoreMap":54},[478,109234,109235,109237,109239,109241,109243,109245,109247],{"class":480,"line":481},[478,109236,108335],{"class":714},[478,109238,759],{"class":710},[478,109240,108340],{"class":714},[478,109242,1232],{"class":710},[478,109244,108345],{"class":714},[478,109246,1232],{"class":710},[478,109248,108350],{"class":714},[19,109250,109251],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[469,109253,109255],{"className":30758,"code":109254,"language":30760,"meta":54,"style":54},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[475,109256,109257,109269],{"__ignoreMap":54},[478,109258,109259,109261,109263,109265,109267],{"class":480,"line":481},[478,109260,2099],{"class":710},[478,109262,108627],{"class":714},[478,109264,1655],{"class":710},[478,109266,4659],{"class":495},[478,109268,4305],{"class":714},[478,109270,109271],{"class":480,"line":565},[478,109272,109273],{"class":714},"    time.sleep(sleep_time)\n",[19,109275,109276],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[129,109278,109280],{"id":109279},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[469,109282,109284],{"className":30758,"code":109283,"language":30760,"meta":54,"style":54},"from pathlib import Path\n",[475,109285,109286],{"__ignoreMap":54},[478,109287,109288,109290,109292,109294],{"class":480,"line":481},[478,109289,31117],{"class":710},[478,109291,108691],{"class":714},[478,109293,30772],{"class":710},[478,109295,108696],{"class":714},[19,109297,109298,109299,109302,109303,109306],{},"导入 ",[475,109300,109301],{},"Path","，用来处理文件路径。相比直接写字符串，",[475,109304,109305],{},"Path(\"render_output.png\")"," 更清晰。",[469,109308,109310],{"className":30758,"code":109309,"language":30760,"meta":54,"style":54},"from PIL import Image\n",[475,109311,109312],{"__ignoreMap":54},[478,109313,109314,109316,109318,109320],{"class":480,"line":481},[478,109315,31117],{"class":710},[478,109317,47643],{"class":495},[478,109319,47646],{"class":710},[478,109321,47649],{"class":714},[19,109323,109324],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[469,109326,109327],{"className":53447,"code":109064,"language":53449,"meta":54,"style":54},[475,109328,109329],{"__ignoreMap":54},[478,109330,109331,109333,109335,109337,109339,109341,109343,109345,109347,109349,109351,109353],{"class":480,"line":481},[478,109332,1605],{"class":714},[478,109334,108895],{"class":51680},[478,109336,15485],{"class":484},[478,109338,759],{"class":714},[478,109340,108900],{"class":488},[478,109342,101486],{"class":484},[478,109344,759],{"class":714},[478,109346,109085],{"class":488},[478,109348,109088],{"class":484},[478,109350,759],{"class":714},[478,109352,109093],{"class":488},[478,109354,101524],{"class":714},[19,109356,109357,109358,109360,109361,109363,109364,109367,109368,109370],{},"定义一个相机。",[475,109359,80190],{}," 是相机名字。",[475,109362,104526],{}," 是相机在世界里的位置。",[475,109365,109366],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[475,109369,104526],{}," 来调视角。",[469,109372,109374],{"className":30758,"code":109373,"language":30760,"meta":54,"style":54},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[475,109375,109376],{"__ignoreMap":54},[478,109377,109378,109380,109382,109384,109386,109388,109390,109392,109394,109396,109398],{"class":480,"line":481},[478,109379,107950],{"class":714},[478,109381,759],{"class":710},[478,109383,108254],{"class":714},[478,109385,25361],{"class":5782},[478,109387,759],{"class":710},[478,109389,42722],{"class":495},[478,109391,13001],{"class":714},[478,109393,25357],{"class":5782},[478,109395,759],{"class":710},[478,109397,108269],{"class":495},[478,109399,720],{"class":714},[19,109401,109402,109403,101398,109405,109407],{},"创建离屏渲染器。",[475,109404,25361],{},[475,109406,25357],{}," 决定输出图片大小。",[469,109409,109410],{"className":30758,"code":102056,"language":30760,"meta":54,"style":54},[475,109411,109412,109428],{"__ignoreMap":54},[478,109413,109414,109416,109418,109420,109422,109424,109426],{"class":480,"line":481},[478,109415,3591],{"class":710},[478,109417,101881],{"class":714},[478,109419,26423],{"class":710},[478,109421,32823],{"class":495},[478,109423,263],{"class":714},[478,109425,1012],{"class":495},[478,109427,31166],{"class":714},[478,109429,109430],{"class":480,"line":565},[478,109431,102079],{"class":714},[19,109433,109434],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[469,109436,109438],{"className":30758,"code":109437,"language":30760,"meta":54,"style":54},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[475,109439,109440],{"__ignoreMap":54},[478,109441,109442,109445,109447,109449,109451],{"class":480,"line":481},[478,109443,109444],{"class":714},"renderer.update_scene(data, ",[478,109446,108895],{"class":5782},[478,109448,759],{"class":710},[478,109450,108900],{"class":488},[478,109452,720],{"class":714},[19,109454,109455,109456,109458,109459,109462],{},"告诉 renderer：用当前 ",[475,109457,33781],{}," 的状态更新画面，并使用名为 ",[475,109460,109461],{},"fixed_camera"," 的相机视角。",[469,109464,109465],{"className":30758,"code":108360,"language":30760,"meta":54,"style":54},[475,109466,109467],{"__ignoreMap":54},[478,109468,109469,109471,109473],{"class":480,"line":481},[478,109470,107960],{"class":714},[478,109472,759],{"class":710},[478,109474,107965],{"class":714},[19,109476,109477,109478,109481],{},"真正渲染出图像。",[475,109479,109480],{},"image"," 是一个 NumPy 数组，不是文件。",[469,109483,109485],{"className":30758,"code":109484,"language":30760,"meta":54,"style":54},"Image.fromarray(image).save(output_path)\n",[475,109486,109487],{"__ignoreMap":54},[478,109488,109489],{"class":480,"line":481},[478,109490,109484],{"class":714},[19,109492,109493,109494,28765],{},"把数组转换成图片，并保存到 ",[475,109495,109496],{},"render_output.png",[469,109498,109500],{"className":30758,"code":109499,"language":30760,"meta":54,"style":54},"renderer.close()\n",[475,109501,109502],{"__ignoreMap":54},[478,109503,109504],{"class":480,"line":481},[478,109505,109499],{"class":714},[19,109507,109508],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109510,102696],{"id":102695},[19,109512,109513,109514,109516,109517,28765],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[475,109515,109496],{},"，并输出图像数组形状，例如 ",[475,109518,109519],{},"(480, 640, 3)",[19,109521,109522],{},"如果图片里看不到方块，先检查：",[29,109524,109525,109528,109531],{},[32,109526,109527],{},"方块是否掉到相机视野外。",[32,109529,109530],{},"camera 位置是否合理。",[32,109532,109533,109534,109537],{},"是否在 ",[475,109535,109536],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109539,102728],{"id":102727},[19,109541,109542],{},"运行 viewer:",[469,109544,109546],{"className":471,"code":109545,"language":473,"meta":54,"style":54},"python ch5_viewer.py\n",[475,109547,109548],{"__ignoreMap":54},[478,109549,109550,109552],{"class":480,"line":481},[478,109551,30760],{"class":484},[478,109553,108676],{"class":488},[19,109555,109556],{},"运行 renderer:",[469,109558,109560],{"className":471,"code":109559,"language":473,"meta":54,"style":54},"python ch5_renderer.py\n",[475,109561,109562],{"__ignoreMap":54},[478,109563,109564,109566],{"class":480,"line":481},[478,109565,30760],{"class":484},[478,109567,109005],{"class":488},[19,109569,109570],{},"如果在服务器上运行:",[469,109572,109574],{"className":471,"code":109573,"language":473,"meta":54,"style":54},"MUJOCO_GL=egl python ch5_renderer.py\n",[475,109575,109576],{"__ignoreMap":54},[478,109577,109578,109580,109582,109584,109587],{"class":480,"line":481},[478,109579,108194],{"class":714},[478,109581,759],{"class":710},[478,109583,108184],{"class":488},[478,109585,109586],{"class":484}," python",[478,109588,109005],{"class":488},[19,109590,108162],{},[469,109592,109594],{"className":471,"code":109593,"language":473,"meta":54,"style":54},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[475,109595,109596],{"__ignoreMap":54},[478,109597,109598,109600,109602,109604,109606],{"class":480,"line":481},[478,109599,108194],{"class":714},[478,109601,759],{"class":710},[478,109603,108188],{"class":488},[478,109605,109586],{"class":484},[478,109607,109005],{"class":488},[19,109609,109610],{},"再做几个练习：",[29,109612,109613,109620,109623,109629],{},[32,109614,109615,109616,109619],{},"把 renderer 分辨率改成 ",[475,109617,109618],{},"height=240, width=320","，观察输出 shape。",[32,109621,109622],{},"把方块颜色改成蓝色，重新保存图片。",[32,109624,109625,109626,109628],{},"把相机 ",[475,109627,104526],{}," 改远一点，观察画面中物体是否变小。",[32,109630,109631,109632,102794,109635,109638],{},"把 viewer 示例中的 ",[475,109633,109634],{},"data.time \u003C 5.0",[475,109636,109637],{},"data.time \u003C 20.0","，观察更长时间。",[14,109640,102833],{"id":102832},[129,109642,109644],{"id":109643},"viewer-窗口打不开","viewer 窗口打不开",[19,109646,109647],{},"安装:",[469,109649,109651],{"className":471,"code":109650,"language":473,"meta":54,"style":54},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[475,109652,109653],{"__ignoreMap":54},[478,109654,109655,109657,109659,109661,109663,109665,109667,109669,109671,109673,109675],{"class":480,"line":481},[478,109656,24956],{"class":484},[478,109658,26695],{"class":488},[478,109660,489],{"class":488},[478,109662,26780],{"class":495},[478,109664,102886],{"class":488},[478,109666,101214],{"class":488},[478,109668,102891],{"class":488},[478,109670,101227],{"class":488},[478,109672,101233],{"class":488},[478,109674,101224],{"class":488},[478,109676,109677],{"class":488}," libXinerama\n",[129,109679,109681],{"id":109680},"glfwerror",[475,109682,109683],{},"GLFWError",[19,109685,109686],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[129,109688,109690],{"id":109689},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109692,109693,109694,82919,109696,109698],{},"尝试 ",[475,109695,101417],{},[475,109697,101420],{},"。可能存在版本差异。",[129,109700,109701],{"id":109701},"保存图片是黑的",[19,109703,102955],{},[29,109705,109706,109709,109712,109722],{},[32,109707,109708],{},"XML 里是否有 light。",[32,109710,109711],{},"相机是否对着模型。",[32,109713,109714,109715,109718,109719,28765],{},"是否先 ",[475,109716,109717],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[475,109720,109721],{},"renderer.render()",[32,109723,109724],{},"物体是否已经掉出视野。",[129,109726,109727],{"id":109727},"远程服务器没有显示器",[19,109729,109730],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[469,109732,109733],{"className":471,"code":109573,"language":473,"meta":54,"style":54},[475,109734,109735],{"__ignoreMap":54},[478,109736,109737,109739,109741,109743,109745],{"class":480,"line":481},[478,109738,108194],{"class":714},[478,109740,759],{"class":710},[478,109742,108184],{"class":488},[478,109744,109586],{"class":484},[478,109746,109005],{"class":488},[19,109748,109749],{},"如果 EGL 不可用，再尝试：",[469,109751,109752],{"className":471,"code":109593,"language":473,"meta":54,"style":54},[475,109753,109754],{"__ignoreMap":54},[478,109755,109756,109758,109760,109762,109764],{"class":480,"line":481},[478,109757,108194],{"class":714},[478,109759,759],{"class":710},[478,109761,108188],{"class":488},[478,109763,109586],{"class":484},[478,109765,109005],{"class":488},[14,109767,102987],{"id":102986},[19,109769,109770],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[29,109772,109773,109776,109779],{},[32,109774,109775],{},"先用 viewer 看模型和控制是否正常。",[32,109777,109778],{},"再用 renderer 保存图片或构造视觉观测。",[32,109780,109781],{},"最后把状态、动作、图像、奖励组织成训练数据。",[617,109783,109784],{},"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":54,"searchDepth":565,"depth":565,"links":109786},[109787,109788,109789,109794,109799,109800,109801,109808],{"id":101026,"depth":565,"text":101027},{"id":101149,"depth":565,"text":101150},{"id":101424,"depth":565,"text":101425,"children":109790},[109791,109792,109793],{"id":108291,"depth":579,"text":108292},{"id":108321,"depth":579,"text":108322},{"id":108356,"depth":579,"text":108357},{"id":101632,"depth":565,"text":101633,"children":109795},[109796,109797,109798],{"id":101952,"depth":579,"text":101952},{"id":109101,"depth":579,"text":109102},{"id":109279,"depth":579,"text":109280},{"id":102695,"depth":565,"text":102696},{"id":102727,"depth":565,"text":102728},{"id":102832,"depth":565,"text":102833,"children":109802},[109803,109804,109805,109806,109807],{"id":109643,"depth":579,"text":109644},{"id":109680,"depth":579,"text":109683},{"id":109689,"depth":579,"text":109690},{"id":109701,"depth":579,"text":109701},{"id":109727,"depth":579,"text":109727},{"id":102986,"depth":565,"text":102987},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107899,"description":54},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109815,"title":109816,"body":109817,"description":54,"extension":638,"meta":111728,"navigation":640,"path":111729,"seo":111730,"stem":111731,"__hash__":111732},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109818,"toc":111704},[109819,109822,109824,109827,109829,109848,109851,109857,109860,109862,109864,109888,109890,109904,109906,109947,109949,109960,109962,109965,109971,109974,110008,110011,110043,110046,110078,110082,110085,110125,110128,110134,110137,110143,110147,110150,110156,110159,110163,110166,110206,110208,110221,110224,110226,110808,110810,110822,110825,110836,110838,110841,110860,110872,110875,110896,110899,110902,110945,110948,110951,110971,110978,110980,110998,111013,111016,111022,111025,111031,111048,111055,111086,111097,111131,111142,111159,111168,111176,111181,111195,111198,111219,111225,111239,111244,111274,111284,111309,111317,111340,111343,111359,111362,111370,111376,111398,111411,111432,111441,111480,111491,111493,111496,111502,111505,111508,111514,111517,111537,111540,111542,111581,111583,111586,111594,111597,111600,111627,111630,111640,111646,111649,111655,111657,111663,111667,111670,111672,111675,111699,111702],[10,109820,109816],{"id":109821},"_6控制任务cartpole",[14,109823,101027],{"id":101026},[19,109825,109826],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109828,104711],{},[29,109830,109831,109834,109836,109839,109842,109845],{},[32,109832,109833],{},"slide joint",[32,109835,106564],{},[32,109837,109838],{},"cart force actuator",[32,109840,109841],{},"状态观测",[32,109843,109844],{},"简单控制循环",[32,109846,109847],{},"reward 设计雏形",[19,109849,109850],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[469,109852,109855],{"className":109853,"code":109854,"language":5753,"meta":54},[5751],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[475,109856,109854],{"__ignoreMap":54},[19,109858,109859],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109861,101150],{"id":101149},[19,109863,101153],{},[469,109865,109866],{"className":471,"code":104768,"language":473,"meta":54,"style":54},[475,109867,109868],{"__ignoreMap":54},[478,109869,109870,109872,109874,109876,109878,109880,109882,109884,109886],{"class":480,"line":481},[478,109871,24956],{"class":484},[478,109873,26695],{"class":488},[478,109875,489],{"class":488},[478,109877,26780],{"class":495},[478,109879,104783],{"class":488},[478,109881,101178],{"class":488},[478,109883,102881],{"class":488},[478,109885,101194],{"class":488},[478,109887,104792],{"class":488},[19,109889,103199],{},[469,109891,109892],{"className":471,"code":101299,"language":473,"meta":54,"style":54},[475,109893,109894],{"__ignoreMap":54},[478,109895,109896,109898,109900,109902],{"class":480,"line":481},[478,109897,485],{"class":484},[478,109899,489],{"class":488},[478,109901,101310],{"class":488},[478,109903,101313],{"class":488},[19,109905,103216],{},[469,109907,109909],{"className":471,"code":109908,"language":473,"meta":54,"style":54},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[475,109910,109911,109928,109937],{"__ignoreMap":54},[478,109912,109913,109915,109917,109919,109922,109924,109926],{"class":480,"line":481},[478,109914,30710],{"class":484},[478,109916,29556],{"class":488},[478,109918,25495],{"class":495},[478,109920,109921],{"class":488}," mujoco-cartpole",[478,109923,101355],{"class":488},[478,109925,101358],{"class":495},[478,109927,101361],{"class":495},[478,109929,109930,109932,109934],{"class":480,"line":565},[478,109931,30710],{"class":484},[478,109933,101368],{"class":488},[478,109935,109936],{"class":488}," mujoco-cartpole\n",[478,109938,109939,109941,109943,109945],{"class":480,"line":579},[478,109940,485],{"class":484},[478,109942,489],{"class":488},[478,109944,101310],{"class":488},[478,109946,101313],{"class":488},[19,109948,101384],{},[29,109950,109951,109954,109957],{},[32,109952,109953],{},"本章不依赖 Gymnasium。",[32,109955,109956],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[32,109958,109959],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109961,101425],{"id":101424},[19,109963,109964],{},"Cartpole 的模型结构:",[469,109966,109969],{"className":109967,"code":109968,"language":5753,"meta":54},[5751],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[475,109970,109968],{"__ignoreMap":54},[19,109972,109973],{},"小车通过 slide joint 左右移动:",[469,109975,109977],{"className":53447,"code":109976,"language":53449,"meta":54,"style":54},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[475,109978,109979],{"__ignoreMap":54},[478,109980,109981,109983,109985,109987,109989,109992,109994,109996,109999,110001,110003,110006],{"class":480,"line":481},[478,109982,1605],{"class":714},[478,109984,103336],{"class":51680},[478,109986,15485],{"class":484},[478,109988,759],{"class":714},[478,109990,109991],{"class":488},"\"cart_x\"",[478,109993,54204],{"class":484},[478,109995,759],{"class":714},[478,109997,109998],{"class":488},"\"slide\"",[478,110000,106408],{"class":484},[478,110002,759],{"class":714},[478,110004,110005],{"class":488},"\"1 0 0\"",[478,110007,101524],{"class":714},[19,110009,110010],{},"杆子通过 hinge joint 旋转:",[469,110012,110014],{"className":53447,"code":110013,"language":53449,"meta":54,"style":54},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[475,110015,110016],{"__ignoreMap":54},[478,110017,110018,110020,110022,110024,110026,110029,110031,110033,110035,110037,110039,110041],{"class":480,"line":481},[478,110019,1605],{"class":714},[478,110021,103336],{"class":51680},[478,110023,15485],{"class":484},[478,110025,759],{"class":714},[478,110027,110028],{"class":488},"\"pole_hinge\"",[478,110030,54204],{"class":484},[478,110032,759],{"class":714},[478,110034,106399],{"class":488},[478,110036,106408],{"class":484},[478,110038,759],{"class":714},[478,110040,106413],{"class":488},[478,110042,101524],{"class":714},[19,110044,110045],{},"控制力作用在小车 slide joint 上:",[469,110047,110049],{"className":53447,"code":110048,"language":53449,"meta":54,"style":54},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[475,110050,110051],{"__ignoreMap":54},[478,110052,110053,110055,110057,110059,110061,110064,110066,110068,110070,110072,110074,110076],{"class":480,"line":481},[478,110054,1605],{"class":714},[478,110056,106454],{"class":51680},[478,110058,15485],{"class":484},[478,110060,759],{"class":714},[478,110062,110063],{"class":488},"\"cart_motor\"",[478,110065,106464],{"class":484},[478,110067,759],{"class":714},[478,110069,109991],{"class":488},[478,110071,106471],{"class":484},[478,110073,759],{"class":714},[478,110075,54696],{"class":488},[478,110077,101524],{"class":714},[129,110079,110081],{"id":110080},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110083,110084],{},"这个简化模型有两个关节：",[371,110086,110087,110098],{},[374,110088,110089],{},[377,110090,110091,110093,110095],{},[380,110092,103139],{"align":382},[380,110094,383],{"align":382},[380,110096,110097],{"align":382},"对应状态",[388,110099,110100,110113],{},[377,110101,110102,110107,110110],{},[393,110103,110104],{"align":382},[475,110105,110106],{},"cart_x",[393,110108,110109],{"align":382},"slide",[393,110111,110112],{"align":382},"小车 x 位置",[377,110114,110115,110120,110122],{},[393,110116,110117],{"align":382},[475,110118,110119],{},"pole_hinge",[393,110121,106220],{"align":382},[393,110123,110124],{"align":382},"杆子角度",[19,110126,110127],{},"所以：",[469,110129,110132],{"className":110130,"code":110131,"language":5753,"meta":54},[5751],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[475,110133,110131],{"__ignoreMap":54},[19,110135,110136],{},"把它们拼起来就是观测：",[469,110138,110141],{"className":110139,"code":110140,"language":5753,"meta":54},[5751],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[475,110142,110140],{"__ignoreMap":54},[129,110144,110146],{"id":110145},"action-是什么","action 是什么",[19,110148,110149],{},"本章只有一个 actuator：",[469,110151,110154],{"className":110152,"code":110153,"language":5753,"meta":54},[5751],"data.ctrl[0] = action\n",[475,110155,110153],{"__ignoreMap":54},[19,110157,110158],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[129,110160,110162],{"id":110161},"reward-是什么","reward 是什么",[19,110164,110165],{},"奖励函数：",[469,110167,110169],{"className":30758,"code":110168,"language":30760,"meta":54,"style":54},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[475,110170,110171],{"__ignoreMap":54},[478,110172,110173,110175,110178,110180,110182,110184,110187,110189,110192,110194,110196,110198,110201,110203],{"class":480,"line":481},[478,110174,17611],{"class":710},[478,110176,110177],{"class":495}," float",[478,110179,263],{"class":714},[478,110181,102783],{"class":495},[478,110183,52651],{"class":710},[478,110185,110186],{"class":495}," 0.1",[478,110188,7084],{"class":710},[478,110190,110191],{"class":714}," cart_x ",[478,110193,1155],{"class":710},[478,110195,110191],{"class":714},[478,110197,1232],{"class":710},[478,110199,110200],{"class":714}," pole_angle ",[478,110202,1155],{"class":710},[478,110204,110205],{"class":714}," pole_angle)\n",[19,110207,106606],{},[29,110209,110210,110215,110218],{},[32,110211,110212,110213,28765],{},"基础奖励是 ",[475,110214,102783],{},[32,110216,110217],{},"小车离中心越远，扣分越多。",[32,110219,110220],{},"杆子角度越大，扣分越多。",[19,110222,110223],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110225,101633],{"id":101632},[469,110227,110229],{"className":30758,"code":110228,"language":30760,"meta":54,"style":54},"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",[475,110230,110231,110237,110247,110251,110255,110263,110268,110272,110276,110280,110285,110289,110294,110299,110304,110308,110313,110318,110323,110327,110331,110335,110339,110343,110348,110352,110356,110360,110364,110368,110378,110385,110389,110393,110407,110421,110434,110464,110468,110472,110484,110496,110504,110508,110521,110525,110529,110538,110542,110558,110568,110581,110594,110598,110621,110639,110643,110655,110659,110663,110673,110683,110687,110703,110744,110748,110768,110784,110788,110792,110804],{"__ignoreMap":54},[478,110232,110233,110235],{"class":480,"line":481},[478,110234,30772],{"class":710},[478,110236,101681],{"class":714},[478,110238,110239,110241,110243,110245],{"class":480,"line":565},[478,110240,30772],{"class":710},[478,110242,31760],{"class":714},[478,110244,31763],{"class":710},[478,110246,31766],{"class":714},[478,110248,110249],{"class":480,"line":579},[478,110250,2966],{"emptyLinePlaceholder":640},[478,110252,110253],{"class":480,"line":593},[478,110254,2966],{"emptyLinePlaceholder":640},[478,110256,110257,110259,110261],{"class":480,"line":1769},[478,110258,101694],{"class":495},[478,110260,14130],{"class":710},[478,110262,101699],{"class":488},[478,110264,110265],{"class":480,"line":1783},[478,110266,110267],{"class":488},"\u003Cmujoco model=\"cartpole\">\n",[478,110269,110270],{"class":480,"line":1789},[478,110271,101709],{"class":488},[478,110273,110274],{"class":480,"line":1880},[478,110275,2966],{"emptyLinePlaceholder":640},[478,110277,110278],{"class":480,"line":1886},[478,110279,101718],{"class":488},[478,110281,110282],{"class":480,"line":1898},[478,110283,110284],{"class":488},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[478,110286,110287],{"class":480,"line":2180},[478,110288,2966],{"emptyLinePlaceholder":640},[478,110290,110291],{"class":480,"line":2185},[478,110292,110293],{"class":488},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[478,110295,110296],{"class":480,"line":2191},[478,110297,110298],{"class":488},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[478,110300,110301],{"class":480,"line":2196},[478,110302,110303],{"class":488},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[478,110305,110306],{"class":480,"line":2210},[478,110307,2966],{"emptyLinePlaceholder":640},[478,110309,110310],{"class":480,"line":2215},[478,110311,110312],{"class":488},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[478,110314,110315],{"class":480,"line":2221},[478,110316,110317],{"class":488},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[478,110319,110320],{"class":480,"line":2241},[478,110321,110322],{"class":488},"        \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",[478,110324,110325],{"class":480,"line":2246},[478,110326,106818],{"class":488},[478,110328,110329],{"class":480,"line":2260},[478,110330,101747],{"class":488},[478,110332,110333],{"class":480,"line":2265},[478,110334,101752],{"class":488},[478,110336,110337],{"class":480,"line":2294},[478,110338,2966],{"emptyLinePlaceholder":640},[478,110340,110341],{"class":480,"line":2299},[478,110342,106835],{"class":488},[478,110344,110345],{"class":480,"line":2316},[478,110346,110347],{"class":488},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[478,110349,110350],{"class":480,"line":2321},[478,110351,106845],{"class":488},[478,110353,110354],{"class":480,"line":2326},[478,110355,101757],{"class":488},[478,110357,110358],{"class":480,"line":2331},[478,110359,96078],{"class":488},[478,110361,110362],{"class":480,"line":2345},[478,110363,2966],{"emptyLinePlaceholder":640},[478,110365,110366],{"class":480,"line":2350},[478,110367,2966],{"emptyLinePlaceholder":640},[478,110369,110370,110372,110375],{"class":480,"line":3143},[478,110371,32327],{"class":710},[478,110373,110374],{"class":484}," get_observation",[478,110376,110377],{"class":714},"(data: mujoco.MjData) -> np.ndarray:\n",[478,110379,110380,110382],{"class":480,"line":3157},[478,110381,4656],{"class":710},[478,110383,110384],{"class":714}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[478,110386,110387],{"class":480,"line":3165},[478,110388,2966],{"emptyLinePlaceholder":640},[478,110390,110391],{"class":480,"line":3170},[478,110392,2966],{"emptyLinePlaceholder":640},[478,110394,110395,110397,110400,110403,110405],{"class":480,"line":3176},[478,110396,32327],{"class":710},[478,110398,110399],{"class":484}," compute_reward",[478,110401,110402],{"class":714},"(obs: np.ndarray) -> ",[478,110404,753],{"class":495},[478,110406,4305],{"class":714},[478,110408,110409,110412,110414,110417,110419],{"class":480,"line":3182},[478,110410,110411],{"class":714},"    cart_x ",[478,110413,759],{"class":710},[478,110415,110416],{"class":714}," obs[",[478,110418,895],{"class":495},[478,110420,33626],{"class":714},[478,110422,110423,110426,110428,110430,110432],{"class":480,"line":3187},[478,110424,110425],{"class":714},"    pole_angle ",[478,110427,759],{"class":710},[478,110429,110416],{"class":714},[478,110431,193],{"class":495},[478,110433,33626],{"class":714},[478,110435,110436,110438,110440,110442,110444,110446,110448,110450,110452,110454,110456,110458,110460,110462],{"class":480,"line":8514},[478,110437,4656],{"class":710},[478,110439,110177],{"class":495},[478,110441,263],{"class":714},[478,110443,102783],{"class":495},[478,110445,52651],{"class":710},[478,110447,110186],{"class":495},[478,110449,7084],{"class":710},[478,110451,110191],{"class":714},[478,110453,1155],{"class":710},[478,110455,110191],{"class":714},[478,110457,1232],{"class":710},[478,110459,110200],{"class":714},[478,110461,1155],{"class":710},[478,110463,110205],{"class":714},[478,110465,110466],{"class":480,"line":8538},[478,110467,2966],{"emptyLinePlaceholder":640},[478,110469,110470],{"class":480,"line":8543},[478,110471,2966],{"emptyLinePlaceholder":640},[478,110473,110474,110476,110478,110480,110482],{"class":480,"line":8549},[478,110475,32327],{"class":710},[478,110477,2539],{"class":484},[478,110479,101778],{"class":714},[478,110481,96066],{"class":495},[478,110483,4305],{"class":714},[478,110485,110486,110488,110490,110492,110494],{"class":480,"line":8576},[478,110487,101787],{"class":714},[478,110489,759],{"class":710},[478,110491,101792],{"class":714},[478,110493,101694],{"class":495},[478,110495,720],{"class":714},[478,110497,110498,110500,110502],{"class":480,"line":8581},[478,110499,101801],{"class":714},[478,110501,759],{"class":710},[478,110503,101806],{"class":714},[478,110505,110506],{"class":480,"line":8587},[478,110507,2966],{"emptyLinePlaceholder":640},[478,110509,110510,110512,110514,110516,110518],{"class":480,"line":8599},[478,110511,105449],{"class":714},[478,110513,193],{"class":495},[478,110515,5009],{"class":714},[478,110517,759],{"class":710},[478,110519,110520],{"class":495}," 0.1\n",[478,110522,110523],{"class":480,"line":8611},[478,110524,105462],{"class":714},[478,110526,110527],{"class":480,"line":8623},[478,110528,2966],{"emptyLinePlaceholder":640},[478,110530,110531,110534,110536],{"class":480,"line":10282},[478,110532,110533],{"class":714},"    total_reward ",[478,110535,759],{"class":710},[478,110537,105141],{"class":495},[478,110539,110540],{"class":480,"line":10307},[478,110541,2966],{"emptyLinePlaceholder":640},[478,110543,110544,110546,110548,110550,110552,110554,110556],{"class":480,"line":10330},[478,110545,3767],{"class":710},[478,110547,31996],{"class":714},[478,110549,26423],{"class":710},[478,110551,32823],{"class":495},[478,110553,263],{"class":714},[478,110555,6976],{"class":495},[478,110557,31166],{"class":714},[478,110559,110560,110563,110565],{"class":480,"line":10354},[478,110561,110562],{"class":714},"        obs ",[478,110564,759],{"class":710},[478,110566,110567],{"class":714}," get_observation(data)\n",[478,110569,110570,110573,110575,110577,110579],{"class":480,"line":10359},[478,110571,110572],{"class":714},"        pole_angle ",[478,110574,759],{"class":710},[478,110576,110416],{"class":714},[478,110578,193],{"class":495},[478,110580,33626],{"class":714},[478,110582,110583,110586,110588,110590,110592],{"class":480,"line":10364},[478,110584,110585],{"class":714},"        pole_angular_velocity ",[478,110587,759],{"class":710},[478,110589,110416],{"class":714},[478,110591,783],{"class":495},[478,110593,33626],{"class":714},[478,110595,110596],{"class":480,"line":10369},[478,110597,2966],{"emptyLinePlaceholder":640},[478,110599,110600,110603,110605,110608,110610,110612,110614,110616,110618],{"class":480,"line":10378},[478,110601,110602],{"class":714},"        action ",[478,110604,759],{"class":710},[478,110606,110607],{"class":495}," 2.0",[478,110609,7084],{"class":710},[478,110611,110200],{"class":714},[478,110613,1181],{"class":710},[478,110615,62247],{"class":495},[478,110617,7084],{"class":710},[478,110619,110620],{"class":714}," pole_angular_velocity\n",[478,110622,110623,110625,110627,110629,110631,110633,110635,110637],{"class":480,"line":10383},[478,110624,110602],{"class":714},[478,110626,759],{"class":710},[478,110628,107827],{"class":714},[478,110630,1232],{"class":710},[478,110632,102783],{"class":495},[478,110634,13001],{"class":714},[478,110636,102783],{"class":495},[478,110638,720],{"class":714},[478,110640,110641],{"class":480,"line":10389},[478,110642,2966],{"emptyLinePlaceholder":640},[478,110644,110645,110647,110649,110651,110653],{"class":480,"line":10410},[478,110646,106997],{"class":714},[478,110648,895],{"class":495},[478,110650,5009],{"class":714},[478,110652,759],{"class":710},[478,110654,107850],{"class":714},[478,110656,110657],{"class":480,"line":10416},[478,110658,101896],{"class":714},[478,110660,110661],{"class":480,"line":10430},[478,110662,2966],{"emptyLinePlaceholder":640},[478,110664,110665,110668,110670],{"class":480,"line":10436},[478,110666,110667],{"class":714},"        reward ",[478,110669,759],{"class":710},[478,110671,110672],{"class":714}," compute_reward(get_observation(data))\n",[478,110674,110675,110678,110680],{"class":480,"line":10463},[478,110676,110677],{"class":714},"        total_reward ",[478,110679,10043],{"class":710},[478,110681,110682],{"class":714}," reward\n",[478,110684,110685],{"class":480,"line":10472},[478,110686,2966],{"emptyLinePlaceholder":640},[478,110688,110689,110691,110693,110695,110697,110699,110701],{"class":480,"line":10478},[478,110690,3063],{"class":710},[478,110692,31996],{"class":714},[478,110694,1029],{"class":710},[478,110696,6320],{"class":495},[478,110698,101939],{"class":710},[478,110700,4659],{"class":495},[478,110702,4305],{"class":714},[478,110704,110705,110707,110709,110712,110715,110718,110721,110723,110726,110729,110731,110733,110735,110737,110740,110742],{"class":480,"line":10486},[478,110706,35030],{"class":495},[478,110708,263],{"class":714},[478,110710,110711],{"class":488},"\"step:\"",[478,110713,110714],{"class":714},", step, ",[478,110716,110717],{"class":488},"\"obs:\"",[478,110719,110720],{"class":714},", np.round(obs, ",[478,110722,783],{"class":495},[478,110724,110725],{"class":714},"), ",[478,110727,110728],{"class":488},"\"action:\"",[478,110730,13001],{"class":714},[478,110732,32398],{"class":495},[478,110734,263],{"class":714},[478,110736,753],{"class":495},[478,110738,110739],{"class":714},"(action), ",[478,110741,783],{"class":495},[478,110743,30877],{"class":714},[478,110745,110746],{"class":480,"line":10491},[478,110747,2966],{"emptyLinePlaceholder":640},[478,110749,110750,110752,110754,110757,110759,110761,110764,110766],{"class":480,"line":17169},[478,110751,31679],{"class":495},[478,110753,263],{"class":714},[478,110755,110756],{"class":488},"\"total_reward:\"",[478,110758,13001],{"class":714},[478,110760,32398],{"class":495},[478,110762,110763],{"class":714},"(total_reward, ",[478,110765,783],{"class":495},[478,110767,30877],{"class":714},[478,110769,110770,110772,110774,110777,110780,110782],{"class":480,"line":17175},[478,110771,31679],{"class":495},[478,110773,263],{"class":714},[478,110775,110776],{"class":488},"\"final obs:\"",[478,110778,110779],{"class":714},", np.round(get_observation(data), ",[478,110781,783],{"class":495},[478,110783,30877],{"class":714},[478,110785,110786],{"class":480,"line":17198},[478,110787,2966],{"emptyLinePlaceholder":640},[478,110789,110790],{"class":480,"line":17204},[478,110791,2966],{"emptyLinePlaceholder":640},[478,110793,110794,110796,110798,110800,110802],{"class":480,"line":17227},[478,110795,2099],{"class":710},[478,110797,31600],{"class":495},[478,110799,101939],{"class":710},[478,110801,101942],{"class":488},[478,110803,4305],{"class":714},[478,110805,110806],{"class":480,"line":17241},[478,110807,101949],{"class":714},[19,110809,103950],{},[469,110811,110813],{"className":471,"code":110812,"language":473,"meta":54,"style":54},"touch ch6_cartpole.py\n",[475,110814,110815],{"__ignoreMap":54},[478,110816,110817,110819],{"class":480,"line":481},[478,110818,101663],{"class":484},[478,110820,110821],{"class":488}," ch6_cartpole.py\n",[19,110823,110824],{},"运行：",[469,110826,110828],{"className":471,"code":110827,"language":473,"meta":54,"style":54},"python ch6_cartpole.py\n",[475,110829,110830],{"__ignoreMap":54},[478,110831,110832,110834],{"class":480,"line":481},[478,110833,30760],{"class":484},[478,110835,110821],{"class":488},[129,110837,101952],{"id":101952},[19,110839,110840],{},"构造观测：",[469,110842,110844],{"className":30758,"code":110843,"language":30760,"meta":54,"style":54},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[475,110845,110846,110854],{"__ignoreMap":54},[478,110847,110848,110850,110852],{"class":480,"line":481},[478,110849,32327],{"class":710},[478,110851,110374],{"class":484},[478,110853,110377],{"class":714},[478,110855,110856,110858],{"class":480,"line":565},[478,110857,4656],{"class":710},[478,110859,110384],{"class":714},[19,110861,110862,110865,110866,110868,110869,110871],{},[475,110863,110864],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[475,110867,104410],{}," 2 维，",[475,110870,104740],{}," 2 维，所以 obs 是 4 维。",[19,110873,110874],{},"设置初始角度：",[469,110876,110878],{"className":30758,"code":110877,"language":30760,"meta":54,"style":54},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[475,110879,110880,110892],{"__ignoreMap":54},[478,110881,110882,110884,110886,110888,110890],{"class":480,"line":481},[478,110883,105079],{"class":714},[478,110885,193],{"class":495},[478,110887,5009],{"class":714},[478,110889,759],{"class":710},[478,110891,110520],{"class":495},[478,110893,110894],{"class":480,"line":565},[478,110895,104923],{"class":714},[19,110897,110898],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110900,110901],{},"简单反馈控制：",[469,110903,110905],{"className":30758,"code":110904,"language":30760,"meta":54,"style":54},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[475,110906,110907,110927],{"__ignoreMap":54},[478,110908,110909,110911,110913,110915,110917,110919,110921,110923,110925],{"class":480,"line":481},[478,110910,107822],{"class":714},[478,110912,759],{"class":710},[478,110914,110607],{"class":495},[478,110916,7084],{"class":710},[478,110918,110200],{"class":714},[478,110920,1181],{"class":710},[478,110922,62247],{"class":495},[478,110924,7084],{"class":710},[478,110926,110620],{"class":714},[478,110928,110929,110931,110933,110935,110937,110939,110941,110943],{"class":480,"line":565},[478,110930,107822],{"class":714},[478,110932,759],{"class":710},[478,110934,107827],{"class":714},[478,110936,1232],{"class":710},[478,110938,102783],{"class":495},[478,110940,13001],{"class":714},[478,110942,102783],{"class":495},[478,110944,720],{"class":714},[19,110946,110947],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110949,110950],{},"限制动作：",[469,110952,110954],{"className":30758,"code":110953,"language":30760,"meta":54,"style":54},"np.clip(action, -1.0, 1.0)\n",[475,110955,110956],{"__ignoreMap":54},[478,110957,110958,110961,110963,110965,110967,110969],{"class":480,"line":481},[478,110959,110960],{"class":714},"np.clip(action, ",[478,110962,1232],{"class":710},[478,110964,102783],{"class":495},[478,110966,13001],{"class":714},[478,110968,102783],{"class":495},[478,110970,720],{"class":714},[19,110972,110973,110974,110977],{},"因为 XML 里 ",[475,110975,110976],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[129,110979,102088],{"id":102088},[469,110981,110982],{"className":30758,"code":110843,"language":30760,"meta":54,"style":54},[475,110983,110984,110992],{"__ignoreMap":54},[478,110985,110986,110988,110990],{"class":480,"line":481},[478,110987,32327],{"class":710},[478,110989,110374],{"class":484},[478,110991,110377],{"class":714},[478,110993,110994,110996],{"class":480,"line":565},[478,110995,4656],{"class":710},[478,110997,110384],{"class":714},[19,110999,111000,111001,111004,111005,111008,111009,111012],{},"这段定义了一个函数，用来获取当前观测。",[475,111002,111003],{},"data.qpos.copy()"," 是位置数组副本，",[475,111006,111007],{},"data.qvel.copy()"," 是速度数组副本。",[475,111010,111011],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111014,111015],{},"在本章模型里：",[469,111017,111020],{"className":111018,"code":111019,"language":5753,"meta":54},[5751],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[475,111021,111019],{"__ignoreMap":54},[19,111023,111024],{},"所以返回的 obs 是：",[469,111026,111029],{"className":111027,"code":111028,"language":5753,"meta":54},[5751],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[475,111030,111028],{"__ignoreMap":54},[469,111032,111034],{"className":30758,"code":111033,"language":30760,"meta":54,"style":54},"def compute_reward(obs: np.ndarray) -> float:\n",[475,111035,111036],{"__ignoreMap":54},[478,111037,111038,111040,111042,111044,111046],{"class":480,"line":481},[478,111039,32327],{"class":710},[478,111041,110399],{"class":484},[478,111043,110402],{"class":714},[478,111045,753],{"class":495},[478,111047,4305],{"class":714},[19,111049,111050,111051,111054],{},"这行定义奖励函数。输入是观测 ",[475,111052,111053],{},"obs","，输出是一个浮点数奖励。",[469,111056,111058],{"className":30758,"code":111057,"language":30760,"meta":54,"style":54},"cart_x = obs[0]\npole_angle = obs[1]\n",[475,111059,111060,111073],{"__ignoreMap":54},[478,111061,111062,111065,111067,111069,111071],{"class":480,"line":481},[478,111063,111064],{"class":714},"cart_x ",[478,111066,759],{"class":710},[478,111068,110416],{"class":714},[478,111070,895],{"class":495},[478,111072,33626],{"class":714},[478,111074,111075,111078,111080,111082,111084],{"class":480,"line":565},[478,111076,111077],{"class":714},"pole_angle ",[478,111079,759],{"class":710},[478,111081,110416],{"class":714},[478,111083,193],{"class":495},[478,111085,33626],{"class":714},[19,111087,111088,111089,111092,111093,111096],{},"数组索引从 0 开始。",[475,111090,111091],{},"obs[0]"," 是第一个元素，也就是小车位置。",[475,111094,111095],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[469,111098,111099],{"className":30758,"code":110168,"language":30760,"meta":54,"style":54},[475,111100,111101],{"__ignoreMap":54},[478,111102,111103,111105,111107,111109,111111,111113,111115,111117,111119,111121,111123,111125,111127,111129],{"class":480,"line":481},[478,111104,17611],{"class":710},[478,111106,110177],{"class":495},[478,111108,263],{"class":714},[478,111110,102783],{"class":495},[478,111112,52651],{"class":710},[478,111114,110186],{"class":495},[478,111116,7084],{"class":710},[478,111118,110191],{"class":714},[478,111120,1155],{"class":710},[478,111122,110191],{"class":714},[478,111124,1232],{"class":710},[478,111126,110200],{"class":714},[478,111128,1155],{"class":710},[478,111130,110205],{"class":714},[19,111132,111133,111134,111137,111138,111141],{},"这行计算奖励。",[475,111135,111136],{},"cart_x * cart_x"," 是小车位置的平方，",[475,111139,111140],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[469,111143,111145],{"className":30758,"code":111144,"language":30760,"meta":54,"style":54},"data.qpos[1] = 0.1\n",[475,111146,111147],{"__ignoreMap":54},[478,111148,111149,111151,111153,111155,111157],{"class":480,"line":481},[478,111150,105079],{"class":714},[478,111152,193],{"class":495},[478,111154,5009],{"class":714},[478,111156,759],{"class":710},[478,111158,110520],{"class":495},[19,111160,111161,111162,111164,111165,111167],{},"手动设置杆子的初始角度。因为 ",[475,111163,105836],{}," 是小车位置，",[475,111166,105839],{}," 是杆子角度，所以这里改的是杆子。",[469,111169,111170],{"className":30758,"code":104923,"language":30760,"meta":54,"style":54},[475,111171,111172],{"__ignoreMap":54},[478,111173,111174],{"class":480,"line":481},[478,111175,104923],{"class":714},[19,111177,105882,111178,111180],{},[475,111179,104410],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[469,111182,111184],{"className":30758,"code":111183,"language":30760,"meta":54,"style":54},"total_reward = 0.0\n",[475,111185,111186],{"__ignoreMap":54},[478,111187,111188,111191,111193],{"class":480,"line":481},[478,111189,111190],{"class":714},"total_reward ",[478,111192,759],{"class":710},[478,111194,105141],{"class":495},[19,111196,111197],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[469,111199,111201],{"className":30758,"code":111200,"language":30760,"meta":54,"style":54},"for step in range(1000):\n",[475,111202,111203],{"__ignoreMap":54},[478,111204,111205,111207,111209,111211,111213,111215,111217],{"class":480,"line":481},[478,111206,3591],{"class":710},[478,111208,31996],{"class":714},[478,111210,26423],{"class":710},[478,111212,32823],{"class":495},[478,111214,263],{"class":714},[478,111216,6976],{"class":495},[478,111218,31166],{"class":714},[19,111220,111221,111222,111224],{},"循环 1000 步。",[475,111223,107514],{}," 是当前步数，从 0 到 999。",[469,111226,111228],{"className":30758,"code":111227,"language":30760,"meta":54,"style":54},"obs = get_observation(data)\n",[475,111229,111230],{"__ignoreMap":54},[478,111231,111232,111235,111237],{"class":480,"line":481},[478,111233,111234],{"class":714},"obs ",[478,111236,759],{"class":710},[478,111238,110567],{"class":714},[19,111240,111241,111242,28765],{},"读取当前状态，保存到 ",[475,111243,111053],{},[469,111245,111247],{"className":30758,"code":111246,"language":30760,"meta":54,"style":54},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[475,111248,111249,111261],{"__ignoreMap":54},[478,111250,111251,111253,111255,111257,111259],{"class":480,"line":481},[478,111252,111077],{"class":714},[478,111254,759],{"class":710},[478,111256,110416],{"class":714},[478,111258,193],{"class":495},[478,111260,33626],{"class":714},[478,111262,111263,111266,111268,111270,111272],{"class":480,"line":565},[478,111264,111265],{"class":714},"pole_angular_velocity ",[478,111267,759],{"class":710},[478,111269,110416],{"class":714},[478,111271,783],{"class":495},[478,111273,33626],{"class":714},[19,111275,111276,111277,111280,111281,28765],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[475,111278,111279],{},"obs[3]","？因为 obs 的顺序是 ",[475,111282,111283],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[469,111285,111287],{"className":30758,"code":111286,"language":30760,"meta":54,"style":54},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[475,111288,111289],{"__ignoreMap":54},[478,111290,111291,111293,111295,111297,111299,111301,111303,111305,111307],{"class":480,"line":481},[478,111292,107822],{"class":714},[478,111294,759],{"class":710},[478,111296,110607],{"class":495},[478,111298,7084],{"class":710},[478,111300,110200],{"class":714},[478,111302,1181],{"class":710},[478,111304,62247],{"class":495},[478,111306,7084],{"class":710},[478,111308,110620],{"class":714},[19,111310,111311,111312,101398,111314,111316],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[475,111313,105640],{},[475,111315,35709],{}," 是人为设置的系数，不是固定公式。",[469,111318,111320],{"className":30758,"code":111319,"language":30760,"meta":54,"style":54},"action = np.clip(action, -1.0, 1.0)\n",[475,111321,111322],{"__ignoreMap":54},[478,111323,111324,111326,111328,111330,111332,111334,111336,111338],{"class":480,"line":481},[478,111325,107822],{"class":714},[478,111327,759],{"class":710},[478,111329,107827],{"class":714},[478,111331,1232],{"class":710},[478,111333,102783],{"class":495},[478,111335,13001],{"class":714},[478,111337,102783],{"class":495},[478,111339,720],{"class":714},[19,111341,111342],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[469,111344,111345],{"className":30758,"code":110153,"language":30760,"meta":54,"style":54},[475,111346,111347],{"__ignoreMap":54},[478,111348,111349,111351,111353,111355,111357],{"class":480,"line":481},[478,111350,106251],{"class":714},[478,111352,895],{"class":495},[478,111354,5009],{"class":714},[478,111356,759],{"class":710},[478,111358,107850],{"class":714},[19,111360,111361],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[469,111363,111364],{"className":30758,"code":104885,"language":30760,"meta":54,"style":54},[475,111365,111366],{"__ignoreMap":54},[478,111367,111368],{"class":480,"line":481},[478,111369,104885],{"class":714},[19,111371,111372,111373,111375],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[475,111374,106506],{}," 计算小车和杆子的下一刻状态。",[469,111377,111379],{"className":30758,"code":111378,"language":30760,"meta":54,"style":54},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[475,111380,111381,111390],{"__ignoreMap":54},[478,111382,111383,111386,111388],{"class":480,"line":481},[478,111384,111385],{"class":714},"reward ",[478,111387,759],{"class":710},[478,111389,110672],{"class":714},[478,111391,111392,111394,111396],{"class":480,"line":565},[478,111393,111190],{"class":714},[478,111395,10043],{"class":710},[478,111397,110682],{"class":714},[19,111399,111400,111401,111403,111404,111407,111408,28765],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[475,111402,10043],{}," 是简写，",[475,111405,111406],{},"total_reward += reward"," 等价于 ",[475,111409,111410],{},"total_reward = total_reward + reward",[469,111412,111414],{"className":30758,"code":111413,"language":30760,"meta":54,"style":54},"if step % 100 == 0:\n",[475,111415,111416],{"__ignoreMap":54},[478,111417,111418,111420,111422,111424,111426,111428,111430],{"class":480,"line":481},[478,111419,2099],{"class":710},[478,111421,31996],{"class":714},[478,111423,1029],{"class":710},[478,111425,6320],{"class":495},[478,111427,101939],{"class":710},[478,111429,4659],{"class":495},[478,111431,4305],{"class":714},[19,111433,111434,111436,111437,111440],{},[475,111435,1029],{}," 是取余数。",[475,111438,111439],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[469,111442,111444],{"className":30758,"code":111443,"language":30760,"meta":54,"style":54},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[475,111445,111446],{"__ignoreMap":54},[478,111447,111448,111450,111452,111454,111456,111458,111460,111462,111464,111466,111468,111470,111472,111474,111476,111478],{"class":480,"line":481},[478,111449,30795],{"class":495},[478,111451,263],{"class":714},[478,111453,110711],{"class":488},[478,111455,110714],{"class":714},[478,111457,110717],{"class":488},[478,111459,110720],{"class":714},[478,111461,783],{"class":495},[478,111463,110725],{"class":714},[478,111465,110728],{"class":488},[478,111467,13001],{"class":714},[478,111469,32398],{"class":495},[478,111471,263],{"class":714},[478,111473,753],{"class":495},[478,111475,110739],{"class":714},[478,111477,783],{"class":495},[478,111479,30877],{"class":714},[19,111481,111482,111483,111486,111487,111490],{},"打印当前步数、观测和动作。",[475,111484,111485],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[475,111488,111489],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111492,102696],{"id":102695},[19,111494,111495],{},"观测向量:",[469,111497,111500],{"className":111498,"code":111499,"language":5753,"meta":54},[5751],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[475,111501,111499],{"__ignoreMap":54},[19,111503,111504],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111506,111507],{},"每隔 100 步会打印一次：",[469,111509,111512],{"className":111510,"code":111511,"language":5753,"meta":54},[5751],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[475,111513,111511],{"__ignoreMap":54},[19,111515,111516],{},"重点观察：",[29,111518,111519,111525,111530],{},[32,111520,111521,111524],{},[475,111522,111523],{},"pole_angle"," 是否越来越大。",[32,111526,111527,111529],{},[475,111528,110106],{}," 是否跑得太远。",[32,111531,111532,111533,82919,111535,28765],{},"action 是否经常被 clip 到 ",[475,111534,104295],{},[475,111536,193],{},[19,111538,111539],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111541,102728],{"id":102727},[29,111543,111544,111550,111553,111559,111569,111575,111578],{},[32,111545,111546,111547,28765],{},"把初始角度改为 ",[475,111548,111549],{},"data.qpos[1] = 0.3",[32,111551,111552],{},"重新运行，观察控制是否变差。",[32,111554,111555,111556,111558],{},"把 actuator ",[475,111557,107447],{}," 改小。",[32,111560,111561,111562,111565,111566,28765],{},"打印 ",[475,111563,111564],{},"model.nq, model.nv, model.nu","，应为 ",[475,111567,111568],{},"2 2 1",[32,111570,111571,111572,111574],{},"把 reward 里的 ",[475,111573,111140],{}," 系数改大，观察总奖励变化。",[32,111576,111577],{},"把控制器改成反号，观察杆子是否更容易倒。",[32,111579,111580],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111582,102833],{"id":102832},[129,111584,111585],{"id":111585},"杆子方向和预期不一致",[19,111587,102776,111588,111590,111591,111593],{},[475,111589,106619],{}," 和 capsule 的 ",[475,111592,103556],{},"，必要时用 viewer 可视化确认。",[129,111595,111596],{"id":111596},"控制器越控越倒",[19,111598,111599],{},"说明反馈符号可能反了，尝试:",[469,111601,111603],{"className":30758,"code":111602,"language":30760,"meta":54,"style":54},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[475,111604,111605],{"__ignoreMap":54},[478,111606,111607,111609,111611,111613,111615,111617,111619,111621,111623,111625],{"class":480,"line":481},[478,111608,107822],{"class":714},[478,111610,759],{"class":710},[478,111612,52651],{"class":710},[478,111614,105640],{"class":495},[478,111616,7084],{"class":710},[478,111618,110200],{"class":714},[478,111620,1232],{"class":710},[478,111622,62247],{"class":495},[478,111624,7084],{"class":710},[478,111626,110620],{"class":714},[129,111628,111629],{"id":111629},"小车飞走",[19,111631,111632,111633,111635,111636,111639],{},"降低 ",[475,111634,107447],{}," 或缩小 ",[475,111637,111638],{},"action"," 的 clip 范围。",[129,111641,111643,111645],{"id":111642},"obs3-为什么是杆子角速度",[475,111644,111279],{}," 为什么是杆子角速度",[19,111647,111648],{},"因为这个模型里：",[469,111650,111653],{"className":111651,"code":111652,"language":5753,"meta":54},[5751],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[475,111654,111652],{"__ignoreMap":54},[19,111656,110127],{},[469,111658,111661],{"className":111659,"code":111660,"language":5753,"meta":54},[5751],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[475,111662,111660],{"__ignoreMap":54},[129,111664,111666],{"id":111665},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111668,111669],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111671,102987],{"id":102986},[19,111673,111674],{},"一个控制任务通常包含：",[29,111676,111677,111680,111688,111693,111696],{},[32,111678,111679],{},"模型：Cartpole 的 body、joint、actuator。",[32,111681,111682,111683,916,111685,111687],{},"观测：从 ",[475,111684,104410],{},[475,111686,104740],{}," 里取状态。",[32,111689,111690,111691,28765],{},"动作：写入 ",[475,111692,101456],{},[32,111694,111695],{},"奖励：根据任务目标打分。",[32,111697,111698],{},"循环：obs -> action -> step -> reward。",[19,111700,111701],{},"这就是后面 Gymnasium 环境的基本骨架。",[617,111703,104666],{},{"title":54,"searchDepth":565,"depth":565,"links":111705},[111706,111707,111708,111713,111717,111718,111719,111727],{"id":101026,"depth":565,"text":101027},{"id":101149,"depth":565,"text":101150},{"id":101424,"depth":565,"text":101425,"children":111709},[111710,111711,111712],{"id":110080,"depth":579,"text":110081},{"id":110145,"depth":579,"text":110146},{"id":110161,"depth":579,"text":110162},{"id":101632,"depth":565,"text":101633,"children":111714},[111715,111716],{"id":101952,"depth":579,"text":101952},{"id":102088,"depth":579,"text":102088},{"id":102695,"depth":565,"text":102696},{"id":102727,"depth":565,"text":102728},{"id":102832,"depth":565,"text":102833,"children":111720},[111721,111722,111723,111724,111726],{"id":111585,"depth":579,"text":111585},{"id":111596,"depth":579,"text":111596},{"id":111629,"depth":579,"text":111629},{"id":111642,"depth":579,"text":111725},"obs[3] 为什么是杆子角速度",{"id":111665,"depth":579,"text":111666},{"id":102986,"depth":565,"text":102987},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109816,"description":54},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111734,"title":111735,"body":111736,"description":54,"extension":638,"meta":113750,"navigation":640,"path":113751,"seo":113752,"stem":113753,"__hash__":113754},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111737,"toc":113726},[111738,111741,111743,111746,111748,111765,111768,111771,111777,111780,111782,111784,111808,111810,111824,111826,111867,111869,111887,111889,111892,111898,111901,111929,111933,111939,111964,111967,111998,112005,112008,112011,112017,112020,112026,112029,112035,112039,112042,112067,112070,112072,112832,112834,112846,112848,112859,112861,112864,112881,112884,112886,112897,112900,112902,112948,112951,112964,112967,113049,113052,113054,113070,113080,113093,113096,113135,113145,113156,113166,113179,113182,113211,113214,113224,113227,113233,113250,113261,113263,113269,113286,113297,113318,113321,113333,113336,113357,113360,113368,113376,113393,113396,113465,113472,113480,113483,113496,113503,113505,113508,113514,113517,113520,113526,113532,113534,113574,113576,113582,113591,113594,113596,113616,113619,113622,113628,113632,113634,113661,113664,113667,113694,113700,113703,113706,113708,113711,113714,113720,113723],[10,111739,111735],{"id":111740},"_7控制任务reacher-机械臂到达目标",[14,111742,101027],{"id":101026},[19,111744,111745],{},"本章搭建一个二维两关节 reacher 任务。",[19,111747,104711],{},[29,111749,111750,111753,111756,111759,111762],{},[32,111751,111752],{},"两个 hinge joint",[32,111754,111755],{},"两个 motor actuator",[32,111757,111758],{},"site 作为末端点和目标点",[32,111760,111761],{},"根据末端和目标距离设计 reward",[32,111763,111764],{},"构造机械臂任务的基本形式",[19,111766,111767],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111769,111770],{},"Reacher 任务可以理解为：",[469,111772,111775],{"className":111773,"code":111774,"language":5753,"meta":54},[5751],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[475,111776,111774],{"__ignoreMap":54},[19,111778,111779],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111781,101150],{"id":101149},[19,111783,101153],{},[469,111785,111786],{"className":471,"code":104768,"language":473,"meta":54,"style":54},[475,111787,111788],{"__ignoreMap":54},[478,111789,111790,111792,111794,111796,111798,111800,111802,111804,111806],{"class":480,"line":481},[478,111791,24956],{"class":484},[478,111793,26695],{"class":488},[478,111795,489],{"class":488},[478,111797,26780],{"class":495},[478,111799,104783],{"class":488},[478,111801,101178],{"class":488},[478,111803,102881],{"class":488},[478,111805,101194],{"class":488},[478,111807,104792],{"class":488},[19,111809,103199],{},[469,111811,111812],{"className":471,"code":101299,"language":473,"meta":54,"style":54},[475,111813,111814],{"__ignoreMap":54},[478,111815,111816,111818,111820,111822],{"class":480,"line":481},[478,111817,485],{"class":484},[478,111819,489],{"class":488},[478,111821,101310],{"class":488},[478,111823,101313],{"class":488},[19,111825,103216],{},[469,111827,111829],{"className":471,"code":111828,"language":473,"meta":54,"style":54},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[475,111830,111831,111848,111857],{"__ignoreMap":54},[478,111832,111833,111835,111837,111839,111842,111844,111846],{"class":480,"line":481},[478,111834,30710],{"class":484},[478,111836,29556],{"class":488},[478,111838,25495],{"class":495},[478,111840,111841],{"class":488}," mujoco-reacher",[478,111843,101355],{"class":488},[478,111845,101358],{"class":495},[478,111847,101361],{"class":495},[478,111849,111850,111852,111854],{"class":480,"line":565},[478,111851,30710],{"class":484},[478,111853,101368],{"class":488},[478,111855,111856],{"class":488}," mujoco-reacher\n",[478,111858,111859,111861,111863,111865],{"class":480,"line":579},[478,111860,485],{"class":484},[478,111862,489],{"class":488},[478,111864,101310],{"class":488},[478,111866,101313],{"class":488},[19,111868,101384],{},[29,111870,111871,111874,111877],{},[32,111872,111873],{},"本章使用低维状态，不使用图像输入。",[32,111875,111876],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[32,111878,111879,111880,916,111882,916,111884,111886],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[475,111881,104410],{},[475,111883,104740],{},[475,111885,104060],{}," 的方法一致。",[14,111888,101425],{"id":101424},[19,111890,111891],{},"Reacher 任务核心:",[469,111893,111896],{"className":111894,"code":111895,"language":5753,"meta":54},[5751],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[475,111897,111895],{"__ignoreMap":54},[19,111899,111900],{},"读取 site 世界坐标:",[469,111902,111904],{"className":30758,"code":111903,"language":30760,"meta":54,"style":54},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[475,111905,111906,111919],{"__ignoreMap":54},[478,111907,111908,111910,111912,111914,111917],{"class":480,"line":481},[478,111909,104014],{"class":714},[478,111911,759],{"class":710},[478,111913,103785],{"class":714},[478,111915,111916],{"class":488},"\"tip\"",[478,111918,720],{"class":714},[478,111920,111921,111924,111926],{"class":480,"line":565},[478,111922,111923],{"class":714},"tip_pos ",[478,111925,759],{"class":710},[478,111927,111928],{"class":714}," data.site_xpos[site_id]\n",[129,111930,111932],{"id":111931},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111934,111935,111936,111938],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[475,111937,104410],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[469,111940,111942],{"className":30758,"code":111941,"language":30760,"meta":54,"style":54},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[475,111943,111944,111954],{"__ignoreMap":54},[478,111945,111946,111949,111951],{"class":480,"line":481},[478,111947,111948],{"class":714},"tip ",[478,111950,759],{"class":710},[478,111952,111953],{"class":714}," data.site_xpos[tip_site_id]\n",[478,111955,111956,111959,111961],{"class":480,"line":565},[478,111957,111958],{"class":714},"target ",[478,111960,759],{"class":710},[478,111962,111963],{"class":714}," data.site_xpos[target_site_id]\n",[19,111965,111966],{},"这样 reward 就很容易写：",[469,111968,111970],{"className":30758,"code":111969,"language":30760,"meta":54,"style":54},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[475,111971,111972,111987],{"__ignoreMap":54},[478,111973,111974,111977,111979,111982,111984],{"class":480,"line":481},[478,111975,111976],{"class":714},"dist ",[478,111978,759],{"class":710},[478,111980,111981],{"class":714}," np.linalg.norm(tip ",[478,111983,1232],{"class":710},[478,111985,111986],{"class":714}," target)\n",[478,111988,111989,111991,111993,111995],{"class":480,"line":565},[478,111990,111385],{"class":714},[478,111992,759],{"class":710},[478,111994,52651],{"class":710},[478,111996,111997],{"class":714},"dist\n",[19,111999,112000,112001,112004],{},"距离越小，",[475,112002,112003],{},"-dist"," 越接近 0，奖励越高。",[129,112006,112007],{"id":112007},"两关节机械臂的状态",[19,112009,112010],{},"这个模型有两个 hinge joint：",[469,112012,112015],{"className":112013,"code":112014,"language":5753,"meta":54},[5751],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[475,112016,112014],{"__ignoreMap":54},[19,112018,112019],{},"再加上末端和目标位置：",[469,112021,112024],{"className":112022,"code":112023,"language":5753,"meta":54},[5751],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[475,112025,112023],{"__ignoreMap":54},[19,112027,112028],{},"总维度：",[469,112030,112033],{"className":112031,"code":112032,"language":5753,"meta":54},[5751],"2 + 2 + 3 + 3 = 10\n",[475,112034,112032],{"__ignoreMap":54},[129,112036,112038],{"id":112037},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112040,112041],{},"本章把重力设为：",[469,112043,112045],{"className":53447,"code":112044,"language":53449,"meta":54,"style":54},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[475,112046,112047],{"__ignoreMap":54},[478,112048,112049,112051,112053,112055,112057,112059,112061,112063,112065],{"class":480,"line":481},[478,112050,1605],{"class":714},[478,112052,69546],{"class":51680},[478,112054,101574],{"class":484},[478,112056,759],{"class":714},[478,112058,101579],{"class":488},[478,112060,101582],{"class":484},[478,112062,759],{"class":714},[478,112064,104151],{"class":488},[478,112066,101524],{"class":714},[19,112068,112069],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112071,101633],{"id":101632},[469,112073,112075],{"className":30758,"code":112074,"language":30760,"meta":54,"style":54},"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",[475,112076,112077,112083,112093,112097,112101,112109,112114,112119,112123,112127,112132,112137,112141,112146,112151,112156,112160,112165,112170,112175,112180,112184,112188,112192,112196,112200,112205,112210,112214,112218,112222,112226,112230,112245,112254,112266,112289,112296,112300,112304,112314,112328,112342,112349,112353,112357,112371,112383,112395,112408,112423,112440,112444,112448,112460,112472,112480,112488,112492,112508,112513,112526,112539,112554,112558,112593,112625,112629,112633,112642,112646,112662,112672,112683,112699,112715,112731,112747,112751,112769,112789,112808,112812,112816,112828],{"__ignoreMap":54},[478,112078,112079,112081],{"class":480,"line":481},[478,112080,30772],{"class":710},[478,112082,101681],{"class":714},[478,112084,112085,112087,112089,112091],{"class":480,"line":565},[478,112086,30772],{"class":710},[478,112088,31760],{"class":714},[478,112090,31763],{"class":710},[478,112092,31766],{"class":714},[478,112094,112095],{"class":480,"line":579},[478,112096,2966],{"emptyLinePlaceholder":640},[478,112098,112099],{"class":480,"line":593},[478,112100,2966],{"emptyLinePlaceholder":640},[478,112102,112103,112105,112107],{"class":480,"line":1769},[478,112104,101694],{"class":495},[478,112106,14130],{"class":710},[478,112108,101699],{"class":488},[478,112110,112111],{"class":480,"line":1783},[478,112112,112113],{"class":488},"\u003Cmujoco model=\"two_link_reacher\">\n",[478,112115,112116],{"class":480,"line":1789},[478,112117,112118],{"class":488},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[478,112120,112121],{"class":480,"line":1880},[478,112122,2966],{"emptyLinePlaceholder":640},[478,112124,112125],{"class":480,"line":1886},[478,112126,101718],{"class":488},[478,112128,112129],{"class":480,"line":1898},[478,112130,112131],{"class":488},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[478,112133,112134],{"class":480,"line":2180},[478,112135,112136],{"class":488},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[478,112138,112139],{"class":480,"line":2185},[478,112140,2966],{"emptyLinePlaceholder":640},[478,112142,112143],{"class":480,"line":2191},[478,112144,112145],{"class":488},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[478,112147,112148],{"class":480,"line":2196},[478,112149,112150],{"class":488},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[478,112152,112153],{"class":480,"line":2210},[478,112154,112155],{"class":488},"      \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",[478,112157,112158],{"class":480,"line":2215},[478,112159,2966],{"emptyLinePlaceholder":640},[478,112161,112162],{"class":480,"line":2221},[478,112163,112164],{"class":488},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[478,112166,112167],{"class":480,"line":2241},[478,112168,112169],{"class":488},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[478,112171,112172],{"class":480,"line":2246},[478,112173,112174],{"class":488},"        \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",[478,112176,112177],{"class":480,"line":2260},[478,112178,112179],{"class":488},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[478,112181,112182],{"class":480,"line":2265},[478,112183,106818],{"class":488},[478,112185,112186],{"class":480,"line":2294},[478,112187,101747],{"class":488},[478,112189,112190],{"class":480,"line":2299},[478,112191,101752],{"class":488},[478,112193,112194],{"class":480,"line":2316},[478,112195,2966],{"emptyLinePlaceholder":640},[478,112197,112198],{"class":480,"line":2321},[478,112199,106835],{"class":488},[478,112201,112202],{"class":480,"line":2326},[478,112203,112204],{"class":488},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[478,112206,112207],{"class":480,"line":2331},[478,112208,112209],{"class":488},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[478,112211,112212],{"class":480,"line":2345},[478,112213,106845],{"class":488},[478,112215,112216],{"class":480,"line":2350},[478,112217,101757],{"class":488},[478,112219,112220],{"class":480,"line":3143},[478,112221,96078],{"class":488},[478,112223,112224],{"class":480,"line":3157},[478,112225,2966],{"emptyLinePlaceholder":640},[478,112227,112228],{"class":480,"line":3165},[478,112229,2966],{"emptyLinePlaceholder":640},[478,112231,112232,112234,112237,112240,112242],{"class":480,"line":3170},[478,112233,32327],{"class":710},[478,112235,112236],{"class":484}," site_position",[478,112238,112239],{"class":714},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[478,112241,1868],{"class":495},[478,112243,112244],{"class":714},") -> np.ndarray:\n",[478,112246,112247,112249,112251],{"class":480,"line":3176},[478,112248,103780],{"class":714},[478,112250,759],{"class":710},[478,112252,112253],{"class":714}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[478,112255,112256,112258,112260,112262,112264],{"class":480,"line":3182},[478,112257,3667],{"class":710},[478,112259,103829],{"class":714},[478,112261,1605],{"class":710},[478,112263,4659],{"class":495},[478,112265,4305],{"class":714},[478,112267,112268,112270,112272,112274,112276,112279,112281,112283,112285,112287],{"class":480,"line":3187},[478,112269,103812],{"class":710},[478,112271,103815],{"class":495},[478,112273,263],{"class":714},[478,112275,218],{"class":710},[478,112277,112278],{"class":488},"\"site not found: ",[478,112280,1591],{"class":495},[478,112282,80190],{"class":714},[478,112284,1641],{"class":495},[478,112286,952],{"class":488},[478,112288,720],{"class":714},[478,112290,112291,112293],{"class":480,"line":8514},[478,112292,4656],{"class":710},[478,112294,112295],{"class":714}," data.site_xpos[site_id].copy()\n",[478,112297,112298],{"class":480,"line":8538},[478,112299,2966],{"emptyLinePlaceholder":640},[478,112301,112302],{"class":480,"line":8543},[478,112303,2966],{"emptyLinePlaceholder":640},[478,112305,112306,112308,112311],{"class":480,"line":8549},[478,112307,32327],{"class":710},[478,112309,112310],{"class":484}," get_obs",[478,112312,112313],{"class":714},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[478,112315,112316,112319,112321,112324,112326],{"class":480,"line":8576},[478,112317,112318],{"class":714},"    tip ",[478,112320,759],{"class":710},[478,112322,112323],{"class":714}," site_position(model, data, ",[478,112325,111916],{"class":488},[478,112327,720],{"class":714},[478,112329,112330,112333,112335,112337,112340],{"class":480,"line":8581},[478,112331,112332],{"class":714},"    target ",[478,112334,759],{"class":710},[478,112336,112323],{"class":714},[478,112338,112339],{"class":488},"\"target\"",[478,112341,720],{"class":714},[478,112343,112344,112346],{"class":480,"line":8587},[478,112345,4656],{"class":710},[478,112347,112348],{"class":714}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[478,112350,112351],{"class":480,"line":8599},[478,112352,2966],{"emptyLinePlaceholder":640},[478,112354,112355],{"class":480,"line":8611},[478,112356,2966],{"emptyLinePlaceholder":640},[478,112358,112359,112361,112364,112367,112369],{"class":480,"line":8623},[478,112360,32327],{"class":710},[478,112362,112363],{"class":484}," reward",[478,112365,112366],{"class":714},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[478,112368,753],{"class":495},[478,112370,4305],{"class":714},[478,112372,112373,112375,112377,112379,112381],{"class":480,"line":10282},[478,112374,112318],{"class":714},[478,112376,759],{"class":710},[478,112378,112323],{"class":714},[478,112380,111916],{"class":488},[478,112382,720],{"class":714},[478,112384,112385,112387,112389,112391,112393],{"class":480,"line":10307},[478,112386,112332],{"class":714},[478,112388,759],{"class":710},[478,112390,112323],{"class":714},[478,112392,112339],{"class":488},[478,112394,720],{"class":714},[478,112396,112397,112400,112402,112404,112406],{"class":480,"line":10330},[478,112398,112399],{"class":714},"    dist ",[478,112401,759],{"class":710},[478,112403,111981],{"class":714},[478,112405,1232],{"class":710},[478,112407,111986],{"class":714},[478,112409,112410,112413,112415,112418,112420],{"class":480,"line":10354},[478,112411,112412],{"class":714},"    control_cost ",[478,112414,759],{"class":710},[478,112416,112417],{"class":495}," 0.01",[478,112419,7084],{"class":710},[478,112421,112422],{"class":714}," np.sum(np.square(data.ctrl))\n",[478,112424,112425,112427,112429,112431,112433,112435,112437],{"class":480,"line":10359},[478,112426,4656],{"class":710},[478,112428,110177],{"class":495},[478,112430,263],{"class":714},[478,112432,1232],{"class":710},[478,112434,111976],{"class":714},[478,112436,1232],{"class":710},[478,112438,112439],{"class":714}," control_cost)\n",[478,112441,112442],{"class":480,"line":10364},[478,112443,2966],{"emptyLinePlaceholder":640},[478,112445,112446],{"class":480,"line":10369},[478,112447,2966],{"emptyLinePlaceholder":640},[478,112449,112450,112452,112454,112456,112458],{"class":480,"line":10378},[478,112451,32327],{"class":710},[478,112453,2539],{"class":484},[478,112455,101778],{"class":714},[478,112457,96066],{"class":495},[478,112459,4305],{"class":714},[478,112461,112462,112464,112466,112468,112470],{"class":480,"line":10383},[478,112463,101787],{"class":714},[478,112465,759],{"class":710},[478,112467,101792],{"class":714},[478,112469,101694],{"class":495},[478,112471,720],{"class":714},[478,112473,112474,112476,112478],{"class":480,"line":10389},[478,112475,101801],{"class":714},[478,112477,759],{"class":710},[478,112479,101806],{"class":714},[478,112481,112482,112484,112486],{"class":480,"line":10410},[478,112483,110533],{"class":714},[478,112485,759],{"class":710},[478,112487,105141],{"class":495},[478,112489,112490],{"class":480,"line":10416},[478,112491,2966],{"emptyLinePlaceholder":640},[478,112493,112494,112496,112498,112500,112502,112504,112506],{"class":480,"line":10430},[478,112495,3767],{"class":710},[478,112497,31996],{"class":714},[478,112499,26423],{"class":710},[478,112501,32823],{"class":495},[478,112503,263],{"class":714},[478,112505,65454],{"class":495},[478,112507,31166],{"class":714},[478,112509,112510],{"class":480,"line":10436},[478,112511,112512],{"class":714},"        mujoco.mj_forward(model, data)\n",[478,112514,112515,112518,112520,112522,112524],{"class":480,"line":10463},[478,112516,112517],{"class":714},"        tip ",[478,112519,759],{"class":710},[478,112521,112323],{"class":714},[478,112523,111916],{"class":488},[478,112525,720],{"class":714},[478,112527,112528,112531,112533,112535,112537],{"class":480,"line":10472},[478,112529,112530],{"class":714},"        target ",[478,112532,759],{"class":710},[478,112534,112323],{"class":714},[478,112536,112339],{"class":488},[478,112538,720],{"class":714},[478,112540,112541,112544,112546,112549,112551],{"class":480,"line":10478},[478,112542,112543],{"class":714},"        error ",[478,112545,759],{"class":710},[478,112547,112548],{"class":714}," target ",[478,112550,1232],{"class":710},[478,112552,112553],{"class":714}," tip\n",[478,112555,112556],{"class":480,"line":10486},[478,112557,2966],{"emptyLinePlaceholder":640},[478,112559,112560,112562,112564,112566,112568,112571,112573,112575,112578,112580,112583,112585,112587,112589,112591],{"class":480,"line":10491},[478,112561,106997],{"class":714},[478,112563,895],{"class":495},[478,112565,5009],{"class":714},[478,112567,759],{"class":710},[478,112569,112570],{"class":714}," np.clip(",[478,112572,105640],{"class":495},[478,112574,7084],{"class":710},[478,112576,112577],{"class":714}," error[",[478,112579,789],{"class":495},[478,112581,112582],{"class":714},"], ",[478,112584,1232],{"class":710},[478,112586,102783],{"class":495},[478,112588,13001],{"class":714},[478,112590,102783],{"class":495},[478,112592,720],{"class":714},[478,112594,112595,112597,112599,112601,112603,112605,112607,112609,112611,112613,112615,112617,112619,112621,112623],{"class":480,"line":17169},[478,112596,106997],{"class":714},[478,112598,193],{"class":495},[478,112600,5009],{"class":714},[478,112602,759],{"class":710},[478,112604,112570],{"class":714},[478,112606,105640],{"class":495},[478,112608,7084],{"class":710},[478,112610,112577],{"class":714},[478,112612,895],{"class":495},[478,112614,112582],{"class":714},[478,112616,1232],{"class":710},[478,112618,102783],{"class":495},[478,112620,13001],{"class":714},[478,112622,102783],{"class":495},[478,112624,720],{"class":714},[478,112626,112627],{"class":480,"line":17175},[478,112628,2966],{"emptyLinePlaceholder":640},[478,112630,112631],{"class":480,"line":17198},[478,112632,101896],{"class":714},[478,112634,112635,112637,112639],{"class":480,"line":17204},[478,112636,110677],{"class":714},[478,112638,10043],{"class":710},[478,112640,112641],{"class":714}," reward(model, data)\n",[478,112643,112644],{"class":480,"line":17227},[478,112645,2966],{"emptyLinePlaceholder":640},[478,112647,112648,112650,112652,112654,112656,112658,112660],{"class":480,"line":17241},[478,112649,3063],{"class":710},[478,112651,31996],{"class":714},[478,112653,1029],{"class":710},[478,112655,6320],{"class":495},[478,112657,101939],{"class":710},[478,112659,4659],{"class":495},[478,112661,4305],{"class":714},[478,112663,112664,112667,112669],{"class":480,"line":17261},[478,112665,112666],{"class":714},"            obs ",[478,112668,759],{"class":710},[478,112670,112671],{"class":714}," get_obs(model, data)\n",[478,112673,112674,112676,112678,112680],{"class":480,"line":17267},[478,112675,35030],{"class":495},[478,112677,263],{"class":714},[478,112679,110711],{"class":488},[478,112681,112682],{"class":714},", step)\n",[478,112684,112685,112687,112689,112692,112695,112697],{"class":480,"line":17278},[478,112686,35030],{"class":495},[478,112688,263],{"class":714},[478,112690,112691],{"class":488},"\"  tip:\"",[478,112693,112694],{"class":714},", np.round(tip, ",[478,112696,783],{"class":495},[478,112698,30877],{"class":714},[478,112700,112701,112703,112705,112708,112711,112713],{"class":480,"line":17301},[478,112702,35030],{"class":495},[478,112704,263],{"class":714},[478,112706,112707],{"class":488},"\"  target:\"",[478,112709,112710],{"class":714},", np.round(target, ",[478,112712,783],{"class":495},[478,112714,30877],{"class":714},[478,112716,112717,112719,112721,112724,112727,112729],{"class":480,"line":17323},[478,112718,35030],{"class":495},[478,112720,263],{"class":714},[478,112722,112723],{"class":488},"\"  ctrl:\"",[478,112725,112726],{"class":714},", np.round(data.ctrl.copy(), ",[478,112728,783],{"class":495},[478,112730,30877],{"class":714},[478,112732,112733,112735,112737,112740,112743,112745],{"class":480,"line":17328},[478,112734,35030],{"class":495},[478,112736,263],{"class":714},[478,112738,112739],{"class":488},"\"  obs_dim:\"",[478,112741,112742],{"class":714},", obs.shape[",[478,112744,895],{"class":495},[478,112746,5223],{"class":714},[478,112748,112749],{"class":480,"line":17334},[478,112750,2966],{"emptyLinePlaceholder":640},[478,112752,112753,112755,112757,112759,112761,112763,112765,112767],{"class":480,"line":17348},[478,112754,31679],{"class":495},[478,112756,263],{"class":714},[478,112758,110756],{"class":488},[478,112760,13001],{"class":714},[478,112762,32398],{"class":495},[478,112764,110763],{"class":714},[478,112766,783],{"class":495},[478,112768,30877],{"class":714},[478,112770,112771,112773,112775,112778,112781,112783,112785,112787],{"class":480,"line":17361},[478,112772,31679],{"class":495},[478,112774,263],{"class":714},[478,112776,112777],{"class":488},"\"final tip:\"",[478,112779,112780],{"class":714},", np.round(site_position(model, data, ",[478,112782,111916],{"class":488},[478,112784,110725],{"class":714},[478,112786,783],{"class":495},[478,112788,30877],{"class":714},[478,112790,112791,112793,112795,112798,112800,112802,112804,112806],{"class":480,"line":17366},[478,112792,31679],{"class":495},[478,112794,263],{"class":714},[478,112796,112797],{"class":488},"\"target:\"",[478,112799,112780],{"class":714},[478,112801,112339],{"class":488},[478,112803,110725],{"class":714},[478,112805,783],{"class":495},[478,112807,30877],{"class":714},[478,112809,112810],{"class":480,"line":17380},[478,112811,2966],{"emptyLinePlaceholder":640},[478,112813,112814],{"class":480,"line":17385},[478,112815,2966],{"emptyLinePlaceholder":640},[478,112817,112818,112820,112822,112824,112826],{"class":480,"line":17391},[478,112819,2099],{"class":710},[478,112821,31600],{"class":495},[478,112823,101939],{"class":710},[478,112825,101942],{"class":488},[478,112827,4305],{"class":714},[478,112829,112830],{"class":480,"line":17396},[478,112831,101949],{"class":714},[19,112833,103950],{},[469,112835,112837],{"className":471,"code":112836,"language":473,"meta":54,"style":54},"touch ch7_reacher.py\n",[475,112838,112839],{"__ignoreMap":54},[478,112840,112841,112843],{"class":480,"line":481},[478,112842,101663],{"class":484},[478,112844,112845],{"class":488}," ch7_reacher.py\n",[19,112847,110824],{},[469,112849,112851],{"className":471,"code":112850,"language":473,"meta":54,"style":54},"python ch7_reacher.py\n",[475,112852,112853],{"__ignoreMap":54},[478,112854,112855,112857],{"class":480,"line":481},[478,112856,30760],{"class":484},[478,112858,112845],{"class":488},[129,112860,101952],{"id":101952},[19,112862,112863],{},"读取 site 坐标：",[469,112865,112867],{"className":30758,"code":112866,"language":30760,"meta":54,"style":54},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[475,112868,112869],{"__ignoreMap":54},[478,112870,112871,112873,112875,112877,112879],{"class":480,"line":481},[478,112872,32327],{"class":710},[478,112874,112236],{"class":484},[478,112876,112239],{"class":714},[478,112878,1868],{"class":495},[478,112880,112244],{"class":714},[19,112882,112883],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112885,110840],{},[469,112887,112889],{"className":30758,"code":112888,"language":30760,"meta":54,"style":54},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[475,112890,112891],{"__ignoreMap":54},[478,112892,112893,112895],{"class":480,"line":481},[478,112894,17611],{"class":710},[478,112896,112348],{"class":714},[19,112898,112899],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112901,110165],{},[469,112903,112905],{"className":30758,"code":112904,"language":30760,"meta":54,"style":54},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[475,112906,112907,112919,112932],{"__ignoreMap":54},[478,112908,112909,112911,112913,112915,112917],{"class":480,"line":481},[478,112910,111976],{"class":714},[478,112912,759],{"class":710},[478,112914,111981],{"class":714},[478,112916,1232],{"class":710},[478,112918,111986],{"class":714},[478,112920,112921,112924,112926,112928,112930],{"class":480,"line":565},[478,112922,112923],{"class":714},"control_cost ",[478,112925,759],{"class":710},[478,112927,112417],{"class":495},[478,112929,7084],{"class":710},[478,112931,112422],{"class":714},[478,112933,112934,112936,112938,112940,112942,112944,112946],{"class":480,"line":579},[478,112935,17611],{"class":710},[478,112937,110177],{"class":495},[478,112939,263],{"class":714},[478,112941,1232],{"class":710},[478,112943,111976],{"class":714},[478,112945,1232],{"class":710},[478,112947,112439],{"class":714},[19,112949,112950],{},"奖励由两部分组成：",[29,112952,112953,112958],{},[32,112954,112955,112957],{},[475,112956,112003],{},"：末端离目标越远，奖励越低。",[32,112959,112960,112963],{},[475,112961,112962],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112965,112966],{},"简单控制器：",[469,112968,112970],{"className":30758,"code":112969,"language":30760,"meta":54,"style":54},"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",[475,112971,112972,112985,113017],{"__ignoreMap":54},[478,112973,112974,112977,112979,112981,112983],{"class":480,"line":481},[478,112975,112976],{"class":714},"error ",[478,112978,759],{"class":710},[478,112980,112548],{"class":714},[478,112982,1232],{"class":710},[478,112984,112553],{"class":714},[478,112986,112987,112989,112991,112993,112995,112997,112999,113001,113003,113005,113007,113009,113011,113013,113015],{"class":480,"line":565},[478,112988,106251],{"class":714},[478,112990,895],{"class":495},[478,112992,5009],{"class":714},[478,112994,759],{"class":710},[478,112996,112570],{"class":714},[478,112998,105640],{"class":495},[478,113000,7084],{"class":710},[478,113002,112577],{"class":714},[478,113004,789],{"class":495},[478,113006,112582],{"class":714},[478,113008,1232],{"class":710},[478,113010,102783],{"class":495},[478,113012,13001],{"class":714},[478,113014,102783],{"class":495},[478,113016,720],{"class":714},[478,113018,113019,113021,113023,113025,113027,113029,113031,113033,113035,113037,113039,113041,113043,113045,113047],{"class":480,"line":579},[478,113020,106251],{"class":714},[478,113022,193],{"class":495},[478,113024,5009],{"class":714},[478,113026,759],{"class":710},[478,113028,112570],{"class":714},[478,113030,105640],{"class":495},[478,113032,7084],{"class":710},[478,113034,112577],{"class":714},[478,113036,895],{"class":495},[478,113038,112582],{"class":714},[478,113040,1232],{"class":710},[478,113042,102783],{"class":495},[478,113044,13001],{"class":714},[478,113046,102783],{"class":495},[478,113048,720],{"class":714},[19,113050,113051],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[129,113053,102088],{"id":102088},[469,113055,113056],{"className":30758,"code":112866,"language":30760,"meta":54,"style":54},[475,113057,113058],{"__ignoreMap":54},[478,113059,113060,113062,113064,113066,113068],{"class":480,"line":481},[478,113061,32327],{"class":710},[478,113063,112236],{"class":484},[478,113065,112239],{"class":714},[478,113067,1868],{"class":495},[478,113069,112244],{"class":714},[19,113071,113072,113073,113075,113076,82919,113078,28765],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[475,113074,80190],{}," 是 site 的名字，比如 ",[475,113077,111916],{},[475,113079,112339],{},[469,113081,113083],{"className":30758,"code":113082,"language":30760,"meta":54,"style":54},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[475,113084,113085],{"__ignoreMap":54},[478,113086,113087,113089,113091],{"class":480,"line":481},[478,113088,104014],{"class":714},[478,113090,759],{"class":710},[478,113092,112253],{"class":714},[19,113094,113095],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[469,113097,113099],{"className":30758,"code":113098,"language":30760,"meta":54,"style":54},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[475,113100,113101,113113],{"__ignoreMap":54},[478,113102,113103,113105,113107,113109,113111],{"class":480,"line":481},[478,113104,2099],{"class":710},[478,113106,103829],{"class":714},[478,113108,1605],{"class":710},[478,113110,4659],{"class":495},[478,113112,4305],{"class":714},[478,113114,113115,113117,113119,113121,113123,113125,113127,113129,113131,113133],{"class":480,"line":565},[478,113116,104275],{"class":710},[478,113118,103815],{"class":495},[478,113120,263],{"class":714},[478,113122,218],{"class":710},[478,113124,112278],{"class":488},[478,113126,1591],{"class":495},[478,113128,80190],{"class":714},[478,113130,1641],{"class":495},[478,113132,952],{"class":488},[478,113134,720],{"class":714},[19,113136,113137,113138,113141,113142,113144],{},"如果 site 没找到，就主动报错。",[475,113139,113140],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[475,113143,80190],{}," 的值放进字符串里。",[469,113146,113148],{"className":30758,"code":113147,"language":30760,"meta":54,"style":54},"return data.site_xpos[site_id].copy()\n",[475,113149,113150],{"__ignoreMap":54},[478,113151,113152,113154],{"class":480,"line":481},[478,113153,17611],{"class":710},[478,113155,112295],{"class":714},[19,113157,113158,113159,113161,113162,113165],{},"返回这个 site 的世界坐标。",[475,113160,104060],{}," 里的每一行都是一个 site 的 ",[475,113163,113164],{},"(x, y, z)"," 坐标。",[469,113167,113169],{"className":30758,"code":113168,"language":30760,"meta":54,"style":54},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[475,113170,113171],{"__ignoreMap":54},[478,113172,113173,113175,113177],{"class":480,"line":481},[478,113174,32327],{"class":710},[478,113176,112310],{"class":484},[478,113178,112313],{"class":714},[19,113180,113181],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[469,113183,113185],{"className":30758,"code":113184,"language":30760,"meta":54,"style":54},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[475,113186,113187,113199],{"__ignoreMap":54},[478,113188,113189,113191,113193,113195,113197],{"class":480,"line":481},[478,113190,111948],{"class":714},[478,113192,759],{"class":710},[478,113194,112323],{"class":714},[478,113196,111916],{"class":488},[478,113198,720],{"class":714},[478,113200,113201,113203,113205,113207,113209],{"class":480,"line":565},[478,113202,111958],{"class":714},[478,113204,759],{"class":710},[478,113206,112323],{"class":714},[478,113208,112339],{"class":488},[478,113210,720],{"class":714},[19,113212,113213],{},"分别读取末端点和目标点的世界坐标。",[469,113215,113216],{"className":30758,"code":112888,"language":30760,"meta":54,"style":54},[475,113217,113218],{"__ignoreMap":54},[478,113219,113220,113222],{"class":480,"line":481},[478,113221,17611],{"class":710},[478,113223,112348],{"class":714},[19,113225,113226],{},"把四部分拼成一个观测数组：",[469,113228,113231],{"className":113229,"code":113230,"language":5753,"meta":54},[5751],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[475,113232,113230],{"__ignoreMap":54},[469,113234,113236],{"className":30758,"code":113235,"language":30760,"meta":54,"style":54},"dist = np.linalg.norm(tip - target)\n",[475,113237,113238],{"__ignoreMap":54},[478,113239,113240,113242,113244,113246,113248],{"class":480,"line":481},[478,113241,111976],{"class":714},[478,113243,759],{"class":710},[478,113245,111981],{"class":714},[478,113247,1232],{"class":710},[478,113249,111986],{"class":714},[19,113251,113252,113253,113256,113257,113260],{},"计算 tip 到 target 的距离。",[475,113254,113255],{},"tip - target"," 得到一个三维向量，",[475,113258,113259],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113262,15198],{},[469,113264,113267],{"className":113265,"code":113266,"language":5753,"meta":54},[5751],"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",[475,113268,113266],{"__ignoreMap":54},[469,113270,113272],{"className":30758,"code":113271,"language":30760,"meta":54,"style":54},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[475,113273,113274],{"__ignoreMap":54},[478,113275,113276,113278,113280,113282,113284],{"class":480,"line":481},[478,113277,112923],{"class":714},[478,113279,759],{"class":710},[478,113281,112417],{"class":495},[478,113283,7084],{"class":710},[478,113285,112422],{"class":714},[19,113287,113288,113289,113292,113293,113296],{},"计算动作惩罚。",[475,113290,113291],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[475,113294,113295],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[469,113298,113300],{"className":30758,"code":113299,"language":30760,"meta":54,"style":54},"return float(-dist - control_cost)\n",[475,113301,113302],{"__ignoreMap":54},[478,113303,113304,113306,113308,113310,113312,113314,113316],{"class":480,"line":481},[478,113305,17611],{"class":710},[478,113307,110177],{"class":495},[478,113309,263],{"class":714},[478,113311,1232],{"class":710},[478,113313,111976],{"class":714},[478,113315,1232],{"class":710},[478,113317,112439],{"class":714},[19,113319,113320],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[469,113322,113323],{"className":30758,"code":111183,"language":30760,"meta":54,"style":54},[475,113324,113325],{"__ignoreMap":54},[478,113326,113327,113329,113331],{"class":480,"line":481},[478,113328,111190],{"class":714},[478,113330,759],{"class":710},[478,113332,105141],{"class":495},[19,113334,113335],{},"累计奖励变量，记录整个运行过程的总分。",[469,113337,113339],{"className":30758,"code":113338,"language":30760,"meta":54,"style":54},"for step in range(500):\n",[475,113340,113341],{"__ignoreMap":54},[478,113342,113343,113345,113347,113349,113351,113353,113355],{"class":480,"line":481},[478,113344,3591],{"class":710},[478,113346,31996],{"class":714},[478,113348,26423],{"class":710},[478,113350,32823],{"class":495},[478,113352,263],{"class":714},[478,113354,65454],{"class":495},[478,113356,31166],{"class":714},[19,113358,113359],{},"运行 500 个控制步。",[469,113361,113362],{"className":30758,"code":104923,"language":30760,"meta":54,"style":54},[475,113363,113364],{"__ignoreMap":54},[478,113365,113366],{"class":480,"line":481},[478,113367,104923],{"class":714},[19,113369,113370,113371,101398,113373,113375],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[475,113372,103611],{},[475,113374,103614],{}," 是当前状态下的坐标。",[469,113377,113379],{"className":30758,"code":113378,"language":30760,"meta":54,"style":54},"error = target - tip\n",[475,113380,113381],{"__ignoreMap":54},[478,113382,113383,113385,113387,113389,113391],{"class":480,"line":481},[478,113384,112976],{"class":714},[478,113386,759],{"class":710},[478,113388,112548],{"class":714},[478,113390,1232],{"class":710},[478,113392,112553],{"class":714},[19,113394,113395],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[469,113397,113399],{"className":30758,"code":113398,"language":30760,"meta":54,"style":54},"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",[475,113400,113401,113433],{"__ignoreMap":54},[478,113402,113403,113405,113407,113409,113411,113413,113415,113417,113419,113421,113423,113425,113427,113429,113431],{"class":480,"line":481},[478,113404,106251],{"class":714},[478,113406,895],{"class":495},[478,113408,5009],{"class":714},[478,113410,759],{"class":710},[478,113412,112570],{"class":714},[478,113414,105640],{"class":495},[478,113416,7084],{"class":710},[478,113418,112577],{"class":714},[478,113420,789],{"class":495},[478,113422,112582],{"class":714},[478,113424,1232],{"class":710},[478,113426,102783],{"class":495},[478,113428,13001],{"class":714},[478,113430,102783],{"class":495},[478,113432,720],{"class":714},[478,113434,113435,113437,113439,113441,113443,113445,113447,113449,113451,113453,113455,113457,113459,113461,113463],{"class":480,"line":565},[478,113436,106251],{"class":714},[478,113438,193],{"class":495},[478,113440,5009],{"class":714},[478,113442,759],{"class":710},[478,113444,112570],{"class":714},[478,113446,105640],{"class":495},[478,113448,7084],{"class":710},[478,113450,112577],{"class":714},[478,113452,895],{"class":495},[478,113454,112582],{"class":714},[478,113456,1232],{"class":710},[478,113458,102783],{"class":495},[478,113460,13001],{"class":714},[478,113462,102783],{"class":495},[478,113464,720],{"class":714},[19,113466,113467,113468,113471],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[475,113469,113470],{},"error -> ctrl -> step"," 的流程。",[469,113473,113474],{"className":30758,"code":104885,"language":30760,"meta":54,"style":54},[475,113475,113476],{"__ignoreMap":54},[478,113477,113478],{"class":480,"line":481},[478,113479,104885],{"class":714},[19,113481,113482],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[469,113484,113486],{"className":30758,"code":113485,"language":30760,"meta":54,"style":54},"obs = get_obs(model, data)\n",[475,113487,113488],{"__ignoreMap":54},[478,113489,113490,113492,113494],{"class":480,"line":481},[478,113491,111234],{"class":714},[478,113493,759],{"class":710},[478,113495,112671],{"class":714},[19,113497,113498,113499,113502],{},"读取最新观测。后面打印 ",[475,113500,113501],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113504,102696],{"id":102695},[19,113506,113507],{},"观测维度为:",[469,113509,113512],{"className":113510,"code":113511,"language":5753,"meta":54},[5751],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[475,113513,113511],{"__ignoreMap":54},[19,113515,113516],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113518,113519],{},"程序每 100 步打印：",[469,113521,113524],{"className":113522,"code":113523,"language":5753,"meta":54},[5751],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[475,113525,113523],{"__ignoreMap":54},[19,113527,113528,113529,113531],{},"如果控制有效，你应该看到最终 ",[475,113530,103611],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113533,102728],{"id":102727},[29,113535,113536,113539,113542,113548,113554,113561,113571],{},[32,113537,113538],{},"修改目标点位置。",[32,113540,113541],{},"重新运行，观察最终 tip 是否变化。",[32,113543,113544,113545,113547],{},"把 gravity 改成 ",[475,113546,102969],{},"，观察控制是否变差。",[32,113549,111561,113550,111565,113552,28765],{},[475,113551,102538],{},[475,113553,789],{},[32,113555,102791,113556,102794,113558,113560],{},[475,113557,110976],{},[475,113559,107687],{},"，观察机械臂是否更难移动。",[32,113562,102791,113563,82910,113565,102794,113567,113570],{},[475,113564,103614],{},[475,113566,104526],{},[475,113568,113569],{},"0.2 0 0.6","，观察 reward 和 final tip。",[32,113572,113573],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113575,102833],{"id":102832},[129,113577,113579],{"id":113578},"site-not-found",[475,113580,113581],{},"site not found",[19,113583,113584,113585,101398,113588,28765],{},"检查 XML 中是否有 ",[475,113586,113587],{},"site name=\"tip\"",[475,113589,113590],{},"site name=\"target\"",[129,113592,113593],{"id":113593},"机械臂完全不动",[19,113595,102903],{},[29,113597,113598,113603,113606,113611],{},[32,113599,113600,113602],{},[475,113601,102538],{}," 是否为 2",[32,113604,113605],{},"actuator 是否引用正确 joint",[32,113607,113608,113610],{},[475,113609,101456],{}," 是否被赋值",[32,113612,113613,113614],{},"是否执行了 ",[475,113615,101065],{},[129,113617,113618],{"id":113618},"控制效果不好",[19,113620,113621],{},"正常。本章重点不是控制器最优，而是任务结构:",[469,113623,113626],{"className":113624,"code":113625,"language":5753,"meta":54},[5751],"obs → action → mj_step → reward → next_obs\n",[475,113627,113625],{"__ignoreMap":54},[129,113629,113631],{"id":113630},"tip-坐标不变化","tip 坐标不变化",[19,113633,102955],{},[29,113635,113636,113641,113649,113658],{},[32,113637,113638,113639,28765],{},"是否每步调用了 ",[475,113640,101065],{},[32,113642,113643,113644,101398,113646,28765],{},"是否写入了 ",[475,113645,106506],{},[475,113647,113648],{},"data.ctrl[1]",[32,113650,113651,113652,916,113655,28765],{},"actuator 是否正确引用 ",[475,113653,113654],{},"joint1",[475,113656,113657],{},"joint2",[32,113659,113660],{},"控制输入是否太小。",[129,113662,113663],{"id":113663},"目标点不会动",[19,113665,113666],{},"本章的 target 是固定 site：",[469,113668,113670],{"className":53447,"code":113669,"language":53449,"meta":54,"style":54},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[475,113671,113672],{"__ignoreMap":54},[478,113673,113674,113676,113678,113680,113682,113684,113686,113688,113691],{"class":480,"line":481},[478,113675,1605],{"class":714},[478,113677,103590],{"class":51680},[478,113679,15485],{"class":484},[478,113681,759],{"class":714},[478,113683,112339],{"class":488},[478,113685,101486],{"class":484},[478,113687,759],{"class":714},[478,113689,113690],{"class":488},"\"0.5 0 0.4\"",[478,113692,113693],{"class":714}," ...\u002F>\n",[19,113695,113696,113697,113699],{},"它直接挂在 ",[475,113698,102221],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[129,113701,113702],{"id":113702},"机械臂不像真实机械臂",[19,113704,113705],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113707,102987],{"id":102986},[19,113709,113710],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113712,113713],{},"核心公式：",[469,113715,113718],{"className":113716,"code":113717,"language":5753,"meta":54},[5751],"distance = ||tip - target||\nreward = -distance - action_cost\n",[475,113719,113717],{"__ignoreMap":54},[19,113721,113722],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[617,113724,113725],{},"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":54,"searchDepth":565,"depth":565,"links":113727},[113728,113729,113730,113735,113739,113740,113741,113749],{"id":101026,"depth":565,"text":101027},{"id":101149,"depth":565,"text":101150},{"id":101424,"depth":565,"text":101425,"children":113731},[113732,113733,113734],{"id":111931,"depth":579,"text":111932},{"id":112007,"depth":579,"text":112007},{"id":112037,"depth":579,"text":112038},{"id":101632,"depth":565,"text":101633,"children":113736},[113737,113738],{"id":101952,"depth":579,"text":101952},{"id":102088,"depth":579,"text":102088},{"id":102695,"depth":565,"text":102696},{"id":102727,"depth":565,"text":102728},{"id":102832,"depth":565,"text":102833,"children":113742},[113743,113744,113745,113746,113747,113748],{"id":113578,"depth":579,"text":113581},{"id":113593,"depth":579,"text":113593},{"id":113618,"depth":579,"text":113618},{"id":113630,"depth":579,"text":113631},{"id":113663,"depth":579,"text":113663},{"id":113702,"depth":579,"text":113702},{"id":102986,"depth":565,"text":102987},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111735,"description":54},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113756,"title":113757,"body":113758,"description":54,"extension":638,"meta":117220,"navigation":640,"path":117221,"seo":117222,"stem":117223,"__hash__":117224},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113759,"toc":117191},[113760,113763,113765,113768,113771,113796,113799,113805,113808,113814,113816,113818,113842,113844,113862,113864,113907,113909,113936,113938,113941,113993,113996,114002,114011,114014,114052,114055,114094,114097,114105,114112,114115,114121,114123,114177,114184,114229,114232,114236,114252,114262,114264,115525,115527,115539,115541,115552,115554,115557,115578,115581,115584,115617,115623,115626,115659,115662,115665,115706,115711,115725,115728,115741,115746,115769,115771,115786,115796,115811,115818,115838,115853,115871,115874,115891,115899,115915,115921,115953,115966,115998,116008,116043,116057,116103,116117,116159,116170,116183,116189,116222,116225,116252,116262,116302,116312,116329,116336,116354,116357,116398,116411,116426,116429,116452,116455,116467,116470,116489,116494,116515,116518,116533,116536,116570,116582,116597,116600,116625,116628,116647,116650,116682,116685,116709,116715,116745,116752,116765,116768,116770,116772,116778,116781,116784,116796,116799,116801,116855,116857,116861,116867,116876,116879,116886,116888,116911,116914,116918,116920,116938,116944,116946,116979,116982,116988,116992,116995,117015,117020,117024,117031,117051,117056,117060,117063,117083,117086,117172,117176,117179,117185,117188],[10,113761,113757],{"id":113762},"_8gymnasium-风格强化学习接口基础",[14,113764,101027],{"id":101026},[19,113766,113767],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113769,113770],{},"你将实现:",[469,113772,113774],{"className":30758,"code":113773,"language":30760,"meta":54,"style":54},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[475,113775,113776,113786],{"__ignoreMap":54},[478,113777,113778,113781,113783],{"class":480,"line":481},[478,113779,113780],{"class":714},"obs, info ",[478,113782,759],{"class":710},[478,113784,113785],{"class":714}," env.reset()\n",[478,113787,113788,113791,113793],{"class":480,"line":565},[478,113789,113790],{"class":714},"obs, reward, terminated, truncated, info ",[478,113792,759],{"class":710},[478,113794,113795],{"class":714}," env.step(action)\n",[19,113797,113798],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113800,113801,113802,113804],{},"前面章节的代码都是“脚本式”的：在 ",[475,113803,102675],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113806,113807],{},"可以先记住 Gymnasium 环境的核心交互：",[469,113809,113812],{"className":113810,"code":113811,"language":5753,"meta":54},[5751],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[475,113813,113811],{"__ignoreMap":54},[14,113815,101150],{"id":101149},[19,113817,101153],{},[469,113819,113820],{"className":471,"code":104768,"language":473,"meta":54,"style":54},[475,113821,113822],{"__ignoreMap":54},[478,113823,113824,113826,113828,113830,113832,113834,113836,113838,113840],{"class":480,"line":481},[478,113825,24956],{"class":484},[478,113827,26695],{"class":488},[478,113829,489],{"class":488},[478,113831,26780],{"class":495},[478,113833,104783],{"class":488},[478,113835,101178],{"class":488},[478,113837,102881],{"class":488},[478,113839,101194],{"class":488},[478,113841,104792],{"class":488},[19,113843,103199],{},[469,113845,113847],{"className":471,"code":113846,"language":473,"meta":54,"style":54},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[475,113848,113849],{"__ignoreMap":54},[478,113850,113851,113853,113855,113857,113859],{"class":480,"line":481},[478,113852,485],{"class":484},[478,113854,489],{"class":488},[478,113856,101310],{"class":488},[478,113858,108091],{"class":488},[478,113860,113861],{"class":488}," gymnasium\n",[19,113863,103216],{},[469,113865,113867],{"className":471,"code":113866,"language":473,"meta":54,"style":54},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[475,113868,113869,113886,113895],{"__ignoreMap":54},[478,113870,113871,113873,113875,113877,113880,113882,113884],{"class":480,"line":481},[478,113872,30710],{"class":484},[478,113874,29556],{"class":488},[478,113876,25495],{"class":495},[478,113878,113879],{"class":488}," mujoco-gym-api",[478,113881,101355],{"class":488},[478,113883,101358],{"class":495},[478,113885,101361],{"class":495},[478,113887,113888,113890,113892],{"class":480,"line":565},[478,113889,30710],{"class":484},[478,113891,101368],{"class":488},[478,113893,113894],{"class":488}," mujoco-gym-api\n",[478,113896,113897,113899,113901,113903,113905],{"class":480,"line":579},[478,113898,485],{"class":484},[478,113900,489],{"class":488},[478,113902,101310],{"class":488},[478,113904,108091],{"class":488},[478,113906,113861],{"class":488},[19,113908,101384],{},[29,113910,113911,113921,113924,113930],{},[32,113912,113913,113914,113917,113918,28765],{},"本章使用 ",[475,113915,113916],{},"gymnasium","，不是旧版 ",[475,113919,113920],{},"gym",[32,113922,113923],{},"Gymnasium API 与旧 Gym API 有差异。",[32,113925,113926,113927,28765],{},"旧 Gym 常见返回值是 4 个: ",[475,113928,113929],{},"obs, reward, done, info",[32,113931,113932,113933,28765],{},"Gymnasium 返回值是 5 个: ",[475,113934,113935],{},"obs, reward, terminated, truncated, info",[14,113937,101425],{"id":101424},[19,113939,113940],{},"强化学习环境接口包含:",[371,113942,113943,113952],{},[374,113944,113945],{},[377,113946,113947,113950],{},[380,113948,113949],{"align":382},"方法",[380,113951,103076],{"align":382},[388,113953,113954,113964,113974,113984],{},[377,113955,113956,113961],{},[393,113957,113958],{"align":382},[475,113959,113960],{},"reset()",[393,113962,113963],{"align":382},"重置环境",[377,113965,113966,113971],{},[393,113967,113968],{"align":382},[475,113969,113970],{},"step(action)",[393,113972,113973],{"align":382},"执行动作",[377,113975,113976,113981],{},[393,113977,113978],{"align":382},[475,113979,113980],{},"observation_space",[393,113982,113983],{"align":382},"观测空间",[377,113985,113986,113991],{},[393,113987,113988],{"align":382},[475,113989,113990],{},"action_space",[393,113992,296],{"align":382},[19,113994,113995],{},"一个最小环境需要完成:",[469,113997,114000],{"className":113998,"code":113999,"language":5753,"meta":54},[5751],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[475,114001,113999],{"__ignoreMap":54},[129,114003,114005,101398,114008,105018],{"id":114004},"terminated-和-truncated-的区别",[475,114006,114007],{},"terminated",[475,114009,114010],{},"truncated",[19,114012,114013],{},"Gymnasium 把“结束”拆成两个概念：",[371,114015,114016,114026],{},[374,114017,114018],{},[377,114019,114020,114022,114024],{},[380,114021,104954],{"align":382},[380,114023,101080],{"align":382},[380,114025,21752],{"align":382},[388,114027,114028,114040],{},[377,114029,114030,114034,114037],{},[393,114031,114032],{"align":382},[475,114033,114007],{},[393,114035,114036],{"align":382},"任务自然结束",[393,114038,114039],{"align":382},"机械臂到达目标、机器人摔倒",[377,114041,114042,114046,114049],{},[393,114043,114044],{"align":382},[475,114045,114010],{},[393,114047,114048],{"align":382},"因外部限制截断",[393,114050,114051],{"align":382},"达到最大步数、时间限制",[19,114053,114054],{},"本章中：",[469,114056,114058],{"className":30758,"code":114057,"language":30760,"meta":54,"style":54},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[475,114059,114060,114075],{"__ignoreMap":54},[478,114061,114062,114065,114067,114070,114072],{"class":480,"line":481},[478,114063,114064],{"class":714},"terminated ",[478,114066,759],{"class":710},[478,114068,114069],{"class":714}," dist ",[478,114071,1605],{"class":710},[478,114073,114074],{"class":495}," 0.05\n",[478,114076,114077,114080,114082,114084,114087,114089,114091],{"class":480,"line":565},[478,114078,114079],{"class":714},"truncated ",[478,114081,759],{"class":710},[478,114083,39253],{"class":495},[478,114085,114086],{"class":714},".steps ",[478,114088,2277],{"class":710},[478,114090,39253],{"class":495},[478,114092,114093],{"class":714},".max_steps\n",[19,114095,114096],{},"也就是：",[29,114098,114099,114102],{},[32,114100,114101],{},"末端距离目标小于 0.05，任务成功结束。",[32,114103,114104],{},"步数超过上限，episode 被截断。",[129,114106,114108,101398,114110],{"id":114107},"observation_space-和-action_space",[475,114109,113980],{},[475,114111,113990],{},[19,114113,114114],{},"这两个对象告诉算法：",[469,114116,114119],{"className":114117,"code":114118,"language":5753,"meta":54},[5751],"观测长什么样\n动作允许多大\n",[475,114120,114118],{"__ignoreMap":54},[19,114122,15198],{},[469,114124,114126],{"className":30758,"code":114125,"language":30760,"meta":54,"style":54},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[475,114127,114128],{"__ignoreMap":54},[478,114129,114130,114132,114135,114137,114140,114143,114146,114148,114150,114153,114155,114157,114159,114161,114163,114165,114167,114170,114172,114174],{"class":480,"line":481},[478,114131,31203],{"class":495},[478,114133,114134],{"class":714},".action_space ",[478,114136,759],{"class":710},[478,114138,114139],{"class":714}," spaces.Box(",[478,114141,114142],{"class":5782},"low",[478,114144,114145],{"class":710},"=-",[478,114147,102783],{"class":495},[478,114149,13001],{"class":714},[478,114151,114152],{"class":5782},"high",[478,114154,759],{"class":710},[478,114156,102783],{"class":495},[478,114158,13001],{"class":714},[478,114160,96343],{"class":5782},[478,114162,759],{"class":710},[478,114164,263],{"class":714},[478,114166,789],{"class":495},[478,114168,114169],{"class":714},",), ",[478,114171,93880],{"class":5782},[478,114173,759],{"class":710},[478,114175,114176],{"class":714},"np.float32)\n",[19,114178,114179,114180,114183],{},"表示动作是 2 维数组，每个值都在 ",[475,114181,114182],{},"[-1, 1]"," 范围内。",[469,114185,114187],{"className":30758,"code":114186,"language":30760,"meta":54,"style":54},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[475,114188,114189],{"__ignoreMap":54},[478,114190,114191,114193,114196,114198,114200,114202,114204,114207,114209,114211,114213,114215,114217,114219,114221,114223,114225,114227],{"class":480,"line":481},[478,114192,31203],{"class":495},[478,114194,114195],{"class":714},".observation_space ",[478,114197,759],{"class":710},[478,114199,114139],{"class":714},[478,114201,114142],{"class":5782},[478,114203,114145],{"class":710},[478,114205,114206],{"class":714},"np.inf, ",[478,114208,114152],{"class":5782},[478,114210,759],{"class":710},[478,114212,114206],{"class":714},[478,114214,96343],{"class":5782},[478,114216,759],{"class":710},[478,114218,263],{"class":714},[478,114220,1146],{"class":495},[478,114222,114169],{"class":714},[478,114224,93880],{"class":5782},[478,114226,759],{"class":710},[478,114228,114176],{"class":714},[19,114230,114231],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[129,114233,114235],{"id":114234},"frame_skip-是什么","frame_skip 是什么",[469,114237,114239],{"className":30758,"code":114238,"language":30760,"meta":54,"style":54},"self.frame_skip = 5\n",[475,114240,114241],{"__ignoreMap":54},[478,114242,114243,114245,114248,114250],{"class":480,"line":481},[478,114244,31203],{"class":495},[478,114246,114247],{"class":714},".frame_skip ",[478,114249,759],{"class":710},[478,114251,54807],{"class":495},[19,114253,114254,114255,114258,114259,114261],{},"表示外部调用一次 ",[475,114256,114257],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[475,114260,101595],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114263,101633],{"id":101632},[469,114265,114267],{"className":30758,"code":114266,"language":30760,"meta":54,"style":54},"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",[475,114268,114269,114281,114287,114297,114308,114312,114316,114324,114329,114333,114337,114341,114345,114349,114353,114357,114362,114366,114370,114374,114379,114383,114387,114391,114395,114399,114403,114407,114411,114415,114419,114423,114427,114431,114449,114464,114468,114481,114491,114506,114523,114527,114548,114567,114592,114606,114610,114620,114632,114642,114646,114688,114726,114730,114740,114756,114771,114790,114797,114801,114814,114829,114844,114857,114876,114892,114896,114937,114952,114967,114971,115010,115021,115034,115038,115048,115057,115061,115071,115086,115104,115108,115119,115136,115149,115153,115163,115167,115178,115189,115193,115207,115221,115237,115241,115254,115271,115286,115293,115297,115301,115313,115323,115341,115353,115365,115369,115377,115393,115402,115411,115419,115461,115474,115479,115483,115501,115505,115509,115521],{"__ignoreMap":54},[478,114270,114271,114273,114276,114278],{"class":480,"line":481},[478,114272,30772],{"class":710},[478,114274,114275],{"class":714}," gymnasium ",[478,114277,31763],{"class":710},[478,114279,114280],{"class":714}," gym\n",[478,114282,114283,114285],{"class":480,"line":565},[478,114284,30772],{"class":710},[478,114286,101681],{"class":714},[478,114288,114289,114291,114293,114295],{"class":480,"line":579},[478,114290,30772],{"class":710},[478,114292,31760],{"class":714},[478,114294,31763],{"class":710},[478,114296,31766],{"class":714},[478,114298,114299,114301,114303,114305],{"class":480,"line":593},[478,114300,31117],{"class":710},[478,114302,114275],{"class":714},[478,114304,30772],{"class":710},[478,114306,114307],{"class":714}," spaces\n",[478,114309,114310],{"class":480,"line":1769},[478,114311,2966],{"emptyLinePlaceholder":640},[478,114313,114314],{"class":480,"line":1783},[478,114315,2966],{"emptyLinePlaceholder":640},[478,114317,114318,114320,114322],{"class":480,"line":1789},[478,114319,101694],{"class":495},[478,114321,14130],{"class":710},[478,114323,101699],{"class":488},[478,114325,114326],{"class":480,"line":1880},[478,114327,114328],{"class":488},"\u003Cmujoco model=\"gym_reacher\">\n",[478,114330,114331],{"class":480,"line":1886},[478,114332,112118],{"class":488},[478,114334,114335],{"class":480,"line":1898},[478,114336,2966],{"emptyLinePlaceholder":640},[478,114338,114339],{"class":480,"line":2180},[478,114340,101718],{"class":488},[478,114342,114343],{"class":480,"line":2185},[478,114344,112136],{"class":488},[478,114346,114347],{"class":480,"line":2191},[478,114348,2966],{"emptyLinePlaceholder":640},[478,114350,114351],{"class":480,"line":2196},[478,114352,112145],{"class":488},[478,114354,114355],{"class":480,"line":2210},[478,114356,112150],{"class":488},[478,114358,114359],{"class":480,"line":2215},[478,114360,114361],{"class":488},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[478,114363,114364],{"class":480,"line":2221},[478,114365,2966],{"emptyLinePlaceholder":640},[478,114367,114368],{"class":480,"line":2241},[478,114369,112164],{"class":488},[478,114371,114372],{"class":480,"line":2246},[478,114373,112169],{"class":488},[478,114375,114376],{"class":480,"line":2260},[478,114377,114378],{"class":488},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[478,114380,114381],{"class":480,"line":2265},[478,114382,112179],{"class":488},[478,114384,114385],{"class":480,"line":2294},[478,114386,106818],{"class":488},[478,114388,114389],{"class":480,"line":2299},[478,114390,101747],{"class":488},[478,114392,114393],{"class":480,"line":2316},[478,114394,101752],{"class":488},[478,114396,114397],{"class":480,"line":2321},[478,114398,2966],{"emptyLinePlaceholder":640},[478,114400,114401],{"class":480,"line":2326},[478,114402,106835],{"class":488},[478,114404,114405],{"class":480,"line":2331},[478,114406,112204],{"class":488},[478,114408,114409],{"class":480,"line":2345},[478,114410,112209],{"class":488},[478,114412,114413],{"class":480,"line":2350},[478,114414,106845],{"class":488},[478,114416,114417],{"class":480,"line":3143},[478,114418,101757],{"class":488},[478,114420,114421],{"class":480,"line":3157},[478,114422,96078],{"class":488},[478,114424,114425],{"class":480,"line":3165},[478,114426,2966],{"emptyLinePlaceholder":640},[478,114428,114429],{"class":480,"line":3170},[478,114430,2966],{"emptyLinePlaceholder":640},[478,114432,114433,114435,114438,114440,114442,114444,114447],{"class":480,"line":3176},[478,114434,15259],{"class":710},[478,114436,114437],{"class":484}," ReacherEnv",[478,114439,263],{"class":714},[478,114441,113920],{"class":484},[478,114443,1258],{"class":714},[478,114445,114446],{"class":484},"Env",[478,114448,31166],{"class":714},[478,114450,114451,114454,114456,114458,114461],{"class":480,"line":3182},[478,114452,114453],{"class":714},"    metadata ",[478,114455,759],{"class":710},[478,114457,5014],{"class":714},[478,114459,114460],{"class":488},"\"render_modes\"",[478,114462,114463],{"class":714},": []}\n",[478,114465,114466],{"class":480,"line":3187},[478,114467,2966],{"emptyLinePlaceholder":640},[478,114469,114470,114472,114474,114477,114479],{"class":480,"line":8514},[478,114471,31181],{"class":710},[478,114473,31184],{"class":495},[478,114475,114476],{"class":714},"(self) -> ",[478,114478,96066],{"class":495},[478,114480,4305],{"class":714},[478,114482,114483,114485,114487,114489],{"class":480,"line":8538},[478,114484,31197],{"class":495},[478,114486,17826],{"class":714},[478,114488,31209],{"class":495},[478,114490,2542],{"class":714},[478,114492,114493,114495,114498,114500,114502,114504],{"class":480,"line":8543},[478,114494,31225],{"class":495},[478,114496,114497],{"class":714},".model ",[478,114499,759],{"class":710},[478,114501,101792],{"class":714},[478,114503,101694],{"class":495},[478,114505,720],{"class":714},[478,114507,114508,114510,114513,114515,114518,114520],{"class":480,"line":8549},[478,114509,31225],{"class":495},[478,114511,114512],{"class":714},".data ",[478,114514,759],{"class":710},[478,114516,114517],{"class":714}," mujoco.MjData(",[478,114519,31203],{"class":495},[478,114521,114522],{"class":714},".model)\n",[478,114524,114525],{"class":480,"line":8576},[478,114526,2966],{"emptyLinePlaceholder":640},[478,114528,114529,114531,114534,114536,114539,114541,114544,114546],{"class":480,"line":8581},[478,114530,31225],{"class":495},[478,114532,114533],{"class":714},".tip_site_id ",[478,114535,759],{"class":710},[478,114537,114538],{"class":714}," mujoco.mj_name2id(",[478,114540,31203],{"class":495},[478,114542,114543],{"class":714},".model, mujoco.mjtObj.mjOBJ_SITE, ",[478,114545,111916],{"class":488},[478,114547,720],{"class":714},[478,114549,114550,114552,114555,114557,114559,114561,114563,114565],{"class":480,"line":8587},[478,114551,31225],{"class":495},[478,114553,114554],{"class":714},".target_site_id ",[478,114556,759],{"class":710},[478,114558,114538],{"class":714},[478,114560,31203],{"class":495},[478,114562,114543],{"class":714},[478,114564,112339],{"class":488},[478,114566,720],{"class":714},[478,114568,114569,114571,114573,114575,114577,114579,114582,114584,114586,114588,114590],{"class":480,"line":8599},[478,114570,3063],{"class":710},[478,114572,39253],{"class":495},[478,114574,114533],{"class":714},[478,114576,1605],{"class":710},[478,114578,4659],{"class":495},[478,114580,114581],{"class":710}," or",[478,114583,39253],{"class":495},[478,114585,114554],{"class":714},[478,114587,1605],{"class":710},[478,114589,4659],{"class":495},[478,114591,4305],{"class":714},[478,114593,114594,114597,114599,114601,114604],{"class":480,"line":8611},[478,114595,114596],{"class":710},"            raise",[478,114598,103815],{"class":495},[478,114600,263],{"class":714},[478,114602,114603],{"class":488},"\"required sites not found\"",[478,114605,720],{"class":714},[478,114607,114608],{"class":480,"line":8623},[478,114609,2966],{"emptyLinePlaceholder":640},[478,114611,114612,114614,114616,114618],{"class":480,"line":10282},[478,114613,31225],{"class":495},[478,114615,114247],{"class":714},[478,114617,759],{"class":710},[478,114619,54807],{"class":495},[478,114621,114622,114624,114627,114629],{"class":480,"line":10307},[478,114623,31225],{"class":495},[478,114625,114626],{"class":714},".max_steps ",[478,114628,759],{"class":710},[478,114630,114631],{"class":495}," 200\n",[478,114633,114634,114636,114638,114640],{"class":480,"line":10330},[478,114635,31225],{"class":495},[478,114637,114086],{"class":714},[478,114639,759],{"class":710},[478,114641,47713],{"class":495},[478,114643,114644],{"class":480,"line":10354},[478,114645,2966],{"emptyLinePlaceholder":640},[478,114647,114648,114650,114652,114654,114656,114658,114660,114662,114664,114666,114668,114670,114672,114674,114676,114678,114680,114682,114684,114686],{"class":480,"line":10359},[478,114649,31225],{"class":495},[478,114651,114134],{"class":714},[478,114653,759],{"class":710},[478,114655,114139],{"class":714},[478,114657,114142],{"class":5782},[478,114659,114145],{"class":710},[478,114661,102783],{"class":495},[478,114663,13001],{"class":714},[478,114665,114152],{"class":5782},[478,114667,759],{"class":710},[478,114669,102783],{"class":495},[478,114671,13001],{"class":714},[478,114673,96343],{"class":5782},[478,114675,759],{"class":710},[478,114677,263],{"class":714},[478,114679,789],{"class":495},[478,114681,114169],{"class":714},[478,114683,93880],{"class":5782},[478,114685,759],{"class":710},[478,114687,114176],{"class":714},[478,114689,114690,114692,114694,114696,114698,114700,114702,114704,114706,114708,114710,114712,114714,114716,114718,114720,114722,114724],{"class":480,"line":10364},[478,114691,31225],{"class":495},[478,114693,114195],{"class":714},[478,114695,759],{"class":710},[478,114697,114139],{"class":714},[478,114699,114142],{"class":5782},[478,114701,114145],{"class":710},[478,114703,114206],{"class":714},[478,114705,114152],{"class":5782},[478,114707,759],{"class":710},[478,114709,114206],{"class":714},[478,114711,96343],{"class":5782},[478,114713,759],{"class":710},[478,114715,263],{"class":714},[478,114717,1146],{"class":495},[478,114719,114169],{"class":714},[478,114721,93880],{"class":5782},[478,114723,759],{"class":710},[478,114725,114176],{"class":714},[478,114727,114728],{"class":480,"line":10369},[478,114729,2966],{"emptyLinePlaceholder":640},[478,114731,114732,114734,114737],{"class":480,"line":10378},[478,114733,31181],{"class":710},[478,114735,114736],{"class":484}," _get_obs",[478,114738,114739],{"class":714},"(self) -> np.ndarray:\n",[478,114741,114742,114744,114746,114748,114751,114753],{"class":480,"line":10383},[478,114743,112517],{"class":714},[478,114745,759],{"class":710},[478,114747,39253],{"class":495},[478,114749,114750],{"class":714},".data.site_xpos[",[478,114752,31203],{"class":495},[478,114754,114755],{"class":714},".tip_site_id].copy()\n",[478,114757,114758,114760,114762,114764,114766,114768],{"class":480,"line":10389},[478,114759,112530],{"class":714},[478,114761,759],{"class":710},[478,114763,39253],{"class":495},[478,114765,114750],{"class":714},[478,114767,31203],{"class":495},[478,114769,114770],{"class":714},".target_site_id].copy()\n",[478,114772,114773,114775,114777,114780,114782,114785,114787],{"class":480,"line":10410},[478,114774,110562],{"class":714},[478,114776,759],{"class":710},[478,114778,114779],{"class":714}," np.concatenate([",[478,114781,31203],{"class":495},[478,114783,114784],{"class":714},".data.qpos.copy(), ",[478,114786,31203],{"class":495},[478,114788,114789],{"class":714},".data.qvel.copy(), tip, target])\n",[478,114791,114792,114794],{"class":480,"line":10416},[478,114793,15317],{"class":710},[478,114795,114796],{"class":714}," obs.astype(np.float32)\n",[478,114798,114799],{"class":480,"line":10430},[478,114800,2966],{"emptyLinePlaceholder":640},[478,114802,114803,114805,114808,114810,114812],{"class":480,"line":10436},[478,114804,31181],{"class":710},[478,114806,114807],{"class":484}," _get_reward",[478,114809,114476],{"class":714},[478,114811,753],{"class":495},[478,114813,4305],{"class":714},[478,114815,114816,114818,114820,114822,114824,114826],{"class":480,"line":10463},[478,114817,112517],{"class":714},[478,114819,759],{"class":710},[478,114821,39253],{"class":495},[478,114823,114750],{"class":714},[478,114825,31203],{"class":495},[478,114827,114828],{"class":714},".tip_site_id]\n",[478,114830,114831,114833,114835,114837,114839,114841],{"class":480,"line":10472},[478,114832,112530],{"class":714},[478,114834,759],{"class":710},[478,114836,39253],{"class":495},[478,114838,114750],{"class":714},[478,114840,31203],{"class":495},[478,114842,114843],{"class":714},".target_site_id]\n",[478,114845,114846,114849,114851,114853,114855],{"class":480,"line":10478},[478,114847,114848],{"class":714},"        dist ",[478,114850,759],{"class":710},[478,114852,111981],{"class":714},[478,114854,1232],{"class":710},[478,114856,111986],{"class":714},[478,114858,114859,114862,114864,114866,114868,114871,114873],{"class":480,"line":10486},[478,114860,114861],{"class":714},"        control_cost ",[478,114863,759],{"class":710},[478,114865,112417],{"class":495},[478,114867,7084],{"class":710},[478,114869,114870],{"class":714}," np.sum(np.square(",[478,114872,31203],{"class":495},[478,114874,114875],{"class":714},".data.ctrl))\n",[478,114877,114878,114880,114882,114884,114886,114888,114890],{"class":480,"line":10491},[478,114879,15317],{"class":710},[478,114881,110177],{"class":495},[478,114883,263],{"class":714},[478,114885,1232],{"class":710},[478,114887,111976],{"class":714},[478,114889,1232],{"class":710},[478,114891,112439],{"class":714},[478,114893,114894],{"class":480,"line":17169},[478,114895,2966],{"emptyLinePlaceholder":640},[478,114897,114898,114900,114903,114906,114908,114911,114913,114915,114917,114919,114921,114924,114927,114929,114931,114933,114935],{"class":480,"line":17175},[478,114899,31181],{"class":710},[478,114901,114902],{"class":484}," reset",[478,114904,114905],{"class":714},"(self, ",[478,114907,1155],{"class":710},[478,114909,114910],{"class":714},", seed: ",[478,114912,717],{"class":495},[478,114914,25489],{"class":710},[478,114916,39313],{"class":495},[478,114918,14130],{"class":710},[478,114920,39313],{"class":495},[478,114922,114923],{"class":714},", options: ",[478,114925,114926],{"class":495},"dict",[478,114928,25489],{"class":710},[478,114930,39313],{"class":495},[478,114932,14130],{"class":710},[478,114934,39313],{"class":495},[478,114936,31166],{"class":714},[478,114938,114939,114941,114944,114947,114949],{"class":480,"line":17198},[478,114940,31197],{"class":495},[478,114942,114943],{"class":714},"().reset(",[478,114945,114946],{"class":5782},"seed",[478,114948,759],{"class":710},[478,114950,114951],{"class":714},"seed)\n",[478,114953,114954,114957,114959,114962,114964],{"class":480,"line":17204},[478,114955,114956],{"class":714},"        mujoco.mj_resetData(",[478,114958,31203],{"class":495},[478,114960,114961],{"class":714},".model, ",[478,114963,31203],{"class":495},[478,114965,114966],{"class":714},".data)\n",[478,114968,114969],{"class":480,"line":17227},[478,114970,2966],{"emptyLinePlaceholder":640},[478,114972,114973,114975,114978,114980,114982,114985,114987,114989,114991,114993,114995,114997,114999,115001,115003,115005,115007],{"class":480,"line":17241},[478,114974,31225],{"class":495},[478,114976,114977],{"class":714},".data.qpos[:] ",[478,114979,759],{"class":710},[478,114981,39253],{"class":495},[478,114983,114984],{"class":714},".np_random.uniform(",[478,114986,114142],{"class":5782},[478,114988,114145],{"class":710},[478,114990,86590],{"class":495},[478,114992,13001],{"class":714},[478,114994,114152],{"class":5782},[478,114996,759],{"class":710},[478,114998,86590],{"class":495},[478,115000,13001],{"class":714},[478,115002,31876],{"class":5782},[478,115004,759],{"class":710},[478,115006,31203],{"class":495},[478,115008,115009],{"class":714},".model.nq)\n",[478,115011,115012,115014,115017,115019],{"class":480,"line":17261},[478,115013,31225],{"class":495},[478,115015,115016],{"class":714},".data.qvel[:] ",[478,115018,759],{"class":710},[478,115020,105141],{"class":495},[478,115022,115023,115026,115028,115030,115032],{"class":480,"line":17267},[478,115024,115025],{"class":714},"        mujoco.mj_forward(",[478,115027,31203],{"class":495},[478,115029,114961],{"class":714},[478,115031,31203],{"class":495},[478,115033,114966],{"class":714},[478,115035,115036],{"class":480,"line":17278},[478,115037,2966],{"emptyLinePlaceholder":640},[478,115039,115040,115042,115044,115046],{"class":480,"line":17301},[478,115041,31225],{"class":495},[478,115043,114086],{"class":714},[478,115045,759],{"class":710},[478,115047,47713],{"class":495},[478,115049,115050,115052,115054],{"class":480,"line":17323},[478,115051,15317],{"class":710},[478,115053,39253],{"class":495},[478,115055,115056],{"class":714},"._get_obs(), {}\n",[478,115058,115059],{"class":480,"line":17328},[478,115060,2966],{"emptyLinePlaceholder":640},[478,115062,115063,115065,115068],{"class":480,"line":17334},[478,115064,31181],{"class":710},[478,115066,115067],{"class":484}," step",[478,115069,115070],{"class":714},"(self, action):\n",[478,115072,115073,115075,115077,115080,115082,115084],{"class":480,"line":17348},[478,115074,110602],{"class":714},[478,115076,759],{"class":710},[478,115078,115079],{"class":714}," np.asarray(action, ",[478,115081,93880],{"class":5782},[478,115083,759],{"class":710},[478,115085,114176],{"class":714},[478,115087,115088,115090,115092,115094,115096,115099,115101],{"class":480,"line":17361},[478,115089,110602],{"class":714},[478,115091,759],{"class":710},[478,115093,107827],{"class":714},[478,115095,31203],{"class":495},[478,115097,115098],{"class":714},".action_space.low, ",[478,115100,31203],{"class":495},[478,115102,115103],{"class":714},".action_space.high)\n",[478,115105,115106],{"class":480,"line":17366},[478,115107,2966],{"emptyLinePlaceholder":640},[478,115109,115110,115112,115115,115117],{"class":480,"line":17380},[478,115111,31225],{"class":495},[478,115113,115114],{"class":714},".data.ctrl[:] ",[478,115116,759],{"class":710},[478,115118,107850],{"class":714},[478,115120,115121,115123,115125,115127,115129,115131,115133],{"class":480,"line":17385},[478,115122,3969],{"class":710},[478,115124,101881],{"class":714},[478,115126,26423],{"class":710},[478,115128,32823],{"class":495},[478,115130,263],{"class":714},[478,115132,31203],{"class":495},[478,115134,115135],{"class":714},".frame_skip):\n",[478,115137,115138,115141,115143,115145,115147],{"class":480,"line":17391},[478,115139,115140],{"class":714},"            mujoco.mj_step(",[478,115142,31203],{"class":495},[478,115144,114961],{"class":714},[478,115146,31203],{"class":495},[478,115148,114966],{"class":714},[478,115150,115151],{"class":480,"line":17396},[478,115152,2966],{"emptyLinePlaceholder":640},[478,115154,115155,115157,115159,115161],{"class":480,"line":17410},[478,115156,31225],{"class":495},[478,115158,114086],{"class":714},[478,115160,10043],{"class":710},[478,115162,56079],{"class":495},[478,115164,115165],{"class":480,"line":17415},[478,115166,2966],{"emptyLinePlaceholder":640},[478,115168,115169,115171,115173,115175],{"class":480,"line":17420},[478,115170,110562],{"class":714},[478,115172,759],{"class":710},[478,115174,39253],{"class":495},[478,115176,115177],{"class":714},"._get_obs()\n",[478,115179,115180,115182,115184,115186],{"class":480,"line":17434},[478,115181,110667],{"class":714},[478,115183,759],{"class":710},[478,115185,39253],{"class":495},[478,115187,115188],{"class":714},"._get_reward()\n",[478,115190,115191],{"class":480,"line":17446},[478,115192,2966],{"emptyLinePlaceholder":640},[478,115194,115195,115197,115199,115201,115203,115205],{"class":480,"line":17451},[478,115196,112517],{"class":714},[478,115198,759],{"class":710},[478,115200,39253],{"class":495},[478,115202,114750],{"class":714},[478,115204,31203],{"class":495},[478,115206,114828],{"class":714},[478,115208,115209,115211,115213,115215,115217,115219],{"class":480,"line":17464},[478,115210,112530],{"class":714},[478,115212,759],{"class":710},[478,115214,39253],{"class":495},[478,115216,114750],{"class":714},[478,115218,31203],{"class":495},[478,115220,114843],{"class":714},[478,115222,115223,115225,115227,115229,115232,115234],{"class":480,"line":17469},[478,115224,114848],{"class":714},[478,115226,759],{"class":710},[478,115228,110177],{"class":495},[478,115230,115231],{"class":714},"(np.linalg.norm(tip ",[478,115233,1232],{"class":710},[478,115235,115236],{"class":714}," target))\n",[478,115238,115239],{"class":480,"line":17474},[478,115240,2966],{"emptyLinePlaceholder":640},[478,115242,115243,115246,115248,115250,115252],{"class":480,"line":17479},[478,115244,115245],{"class":714},"        terminated ",[478,115247,759],{"class":710},[478,115249,114069],{"class":714},[478,115251,1605],{"class":710},[478,115253,114074],{"class":495},[478,115255,115256,115259,115261,115263,115265,115267,115269],{"class":480,"line":17492},[478,115257,115258],{"class":714},"        truncated ",[478,115260,759],{"class":710},[478,115262,39253],{"class":495},[478,115264,114086],{"class":714},[478,115266,2277],{"class":710},[478,115268,39253],{"class":495},[478,115270,114093],{"class":714},[478,115272,115273,115276,115278,115280,115283],{"class":480,"line":17497},[478,115274,115275],{"class":714},"        info ",[478,115277,759],{"class":710},[478,115279,5014],{"class":714},[478,115281,115282],{"class":488},"\"distance\"",[478,115284,115285],{"class":714},": dist}\n",[478,115287,115288,115290],{"class":480,"line":33013},[478,115289,15317],{"class":710},[478,115291,115292],{"class":714}," obs, reward, terminated, truncated, info\n",[478,115294,115295],{"class":480,"line":33019},[478,115296,2966],{"emptyLinePlaceholder":640},[478,115298,115299],{"class":480,"line":33025},[478,115300,2966],{"emptyLinePlaceholder":640},[478,115302,115303,115305,115307,115309,115311],{"class":480,"line":33031},[478,115304,32327],{"class":710},[478,115306,2539],{"class":484},[478,115308,101778],{"class":714},[478,115310,96066],{"class":495},[478,115312,4305],{"class":714},[478,115314,115315,115318,115320],{"class":480,"line":33037},[478,115316,115317],{"class":714},"    env ",[478,115319,759],{"class":710},[478,115321,115322],{"class":714}," ReacherEnv()\n",[478,115324,115325,115328,115330,115333,115335,115337,115339],{"class":480,"line":33048},[478,115326,115327],{"class":714},"    obs, info ",[478,115329,759],{"class":710},[478,115331,115332],{"class":714}," env.reset(",[478,115334,114946],{"class":5782},[478,115336,759],{"class":710},[478,115338,895],{"class":495},[478,115340,720],{"class":714},[478,115342,115343,115345,115347,115350],{"class":480,"line":33054},[478,115344,31679],{"class":495},[478,115346,263],{"class":714},[478,115348,115349],{"class":488},"\"initial obs shape:\"",[478,115351,115352],{"class":714},", obs.shape)\n",[478,115354,115355,115357,115359,115362],{"class":480,"line":33074},[478,115356,31679],{"class":495},[478,115358,263],{"class":714},[478,115360,115361],{"class":488},"\"initial info:\"",[478,115363,115364],{"class":714},", info)\n",[478,115366,115367],{"class":480,"line":33080},[478,115368,2966],{"emptyLinePlaceholder":640},[478,115370,115371,115373,115375],{"class":480,"line":33091},[478,115372,110533],{"class":714},[478,115374,759],{"class":710},[478,115376,105141],{"class":495},[478,115378,115379,115381,115383,115385,115387,115389,115391],{"class":480,"line":33097},[478,115380,3767],{"class":710},[478,115382,31996],{"class":714},[478,115384,26423],{"class":710},[478,115386,32823],{"class":495},[478,115388,263],{"class":714},[478,115390,1396],{"class":495},[478,115392,31166],{"class":714},[478,115394,115395,115397,115399],{"class":480,"line":33103},[478,115396,110602],{"class":714},[478,115398,759],{"class":710},[478,115400,115401],{"class":714}," env.action_space.sample()\n",[478,115403,115404,115407,115409],{"class":480,"line":33109},[478,115405,115406],{"class":714},"        obs, reward, terminated, truncated, info ",[478,115408,759],{"class":710},[478,115410,113795],{"class":714},[478,115412,115413,115415,115417],{"class":480,"line":33115},[478,115414,110677],{"class":714},[478,115416,10043],{"class":710},[478,115418,110682],{"class":714},[478,115420,115421,115423,115425,115427,115429,115432,115434,115436,115439,115441,115443,115446,115448,115450,115453,115455,115457,115459],{"class":480,"line":33121},[478,115422,32831],{"class":495},[478,115424,263],{"class":714},[478,115426,110711],{"class":488},[478,115428,110714],{"class":714},[478,115430,115431],{"class":488},"\"reward:\"",[478,115433,13001],{"class":714},[478,115435,32398],{"class":495},[478,115437,115438],{"class":714},"(reward, ",[478,115440,783],{"class":495},[478,115442,110725],{"class":714},[478,115444,115445],{"class":488},"\"distance:\"",[478,115447,13001],{"class":714},[478,115449,32398],{"class":495},[478,115451,115452],{"class":714},"(info[",[478,115454,115282],{"class":488},[478,115456,112582],{"class":714},[478,115458,783],{"class":495},[478,115460,30877],{"class":714},[478,115462,115463,115465,115468,115471],{"class":480,"line":33127},[478,115464,3063],{"class":710},[478,115466,115467],{"class":714}," terminated ",[478,115469,115470],{"class":710},"or",[478,115472,115473],{"class":714}," truncated:\n",[478,115475,115476],{"class":480,"line":33133},[478,115477,115478],{"class":710},"            break\n",[478,115480,115481],{"class":480,"line":33153},[478,115482,2966],{"emptyLinePlaceholder":640},[478,115484,115485,115487,115489,115491,115493,115495,115497,115499],{"class":480,"line":33159},[478,115486,31679],{"class":495},[478,115488,263],{"class":714},[478,115490,110756],{"class":488},[478,115492,13001],{"class":714},[478,115494,32398],{"class":495},[478,115496,110763],{"class":714},[478,115498,783],{"class":495},[478,115500,30877],{"class":714},[478,115502,115503],{"class":480,"line":33175},[478,115504,2966],{"emptyLinePlaceholder":640},[478,115506,115507],{"class":480,"line":33181},[478,115508,2966],{"emptyLinePlaceholder":640},[478,115510,115511,115513,115515,115517,115519],{"class":480,"line":33195},[478,115512,2099],{"class":710},[478,115514,31600],{"class":495},[478,115516,101939],{"class":710},[478,115518,101942],{"class":488},[478,115520,4305],{"class":714},[478,115522,115523],{"class":480,"line":33201},[478,115524,101949],{"class":714},[19,115526,103950],{},[469,115528,115530],{"className":471,"code":115529,"language":473,"meta":54,"style":54},"touch ch8_gym_env.py\n",[475,115531,115532],{"__ignoreMap":54},[478,115533,115534,115536],{"class":480,"line":481},[478,115535,101663],{"class":484},[478,115537,115538],{"class":488}," ch8_gym_env.py\n",[19,115540,110824],{},[469,115542,115544],{"className":471,"code":115543,"language":473,"meta":54,"style":54},"python ch8_gym_env.py\n",[475,115545,115546],{"__ignoreMap":54},[478,115547,115548,115550],{"class":480,"line":481},[478,115549,30760],{"class":484},[478,115551,115538],{"class":488},[129,115553,101952],{"id":101952},[19,115555,115556],{},"继承 Gymnasium 环境：",[469,115558,115560],{"className":30758,"code":115559,"language":30760,"meta":54,"style":54},"class ReacherEnv(gym.Env):\n",[475,115561,115562],{"__ignoreMap":54},[478,115563,115564,115566,115568,115570,115572,115574,115576],{"class":480,"line":481},[478,115565,15259],{"class":710},[478,115567,114437],{"class":484},[478,115569,263],{"class":714},[478,115571,113920],{"class":484},[478,115573,1258],{"class":714},[478,115575,114446],{"class":484},[478,115577,31166],{"class":714},[19,115579,115580],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115582,115583],{},"初始化模型：",[469,115585,115587],{"className":30758,"code":115586,"language":30760,"meta":54,"style":54},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[475,115588,115589,115603],{"__ignoreMap":54},[478,115590,115591,115593,115595,115597,115599,115601],{"class":480,"line":481},[478,115592,31203],{"class":495},[478,115594,114497],{"class":714},[478,115596,759],{"class":710},[478,115598,101792],{"class":714},[478,115600,101694],{"class":495},[478,115602,720],{"class":714},[478,115604,115605,115607,115609,115611,115613,115615],{"class":480,"line":565},[478,115606,31203],{"class":495},[478,115608,114512],{"class":714},[478,115610,759],{"class":710},[478,115612,114517],{"class":714},[478,115614,31203],{"class":495},[478,115616,114522],{"class":714},[19,115618,115619,115620,115622],{},"这和前面章节一样，只是现在放到了类的 ",[475,115621,31209],{}," 里。",[19,115624,115625],{},"缓存 site ID：",[469,115627,115629],{"className":30758,"code":115628,"language":30760,"meta":54,"style":54},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[475,115630,115631,115645],{"__ignoreMap":54},[478,115632,115633,115635,115637,115639,115641,115643],{"class":480,"line":481},[478,115634,31203],{"class":495},[478,115636,114533],{"class":714},[478,115638,759],{"class":710},[478,115640,114538],{"class":714},[478,115642,89934],{"class":495},[478,115644,720],{"class":714},[478,115646,115647,115649,115651,115653,115655,115657],{"class":480,"line":565},[478,115648,31203],{"class":495},[478,115650,114554],{"class":714},[478,115652,759],{"class":710},[478,115654,114538],{"class":714},[478,115656,89934],{"class":495},[478,115658,720],{"class":714},[19,115660,115661],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115663,115664],{},"reset：",[469,115666,115668],{"className":30758,"code":115667,"language":30760,"meta":54,"style":54},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[475,115669,115670],{"__ignoreMap":54},[478,115671,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702,115704],{"class":480,"line":481},[478,115673,32327],{"class":710},[478,115675,114902],{"class":484},[478,115677,114905],{"class":714},[478,115679,1155],{"class":710},[478,115681,114910],{"class":714},[478,115683,717],{"class":495},[478,115685,25489],{"class":710},[478,115687,39313],{"class":495},[478,115689,14130],{"class":710},[478,115691,39313],{"class":495},[478,115693,114923],{"class":714},[478,115695,114926],{"class":495},[478,115697,25489],{"class":710},[478,115699,39313],{"class":495},[478,115701,14130],{"class":710},[478,115703,39313],{"class":495},[478,115705,31166],{"class":714},[19,115707,115708,115710],{},[475,115709,70436],{}," 做四件事：",[29,115712,115713,115716,115719,115722],{},[32,115714,115715],{},"设置随机种子。",[32,115717,115718],{},"重置 MuJoCo data。",[32,115720,115721],{},"随机初始化关节角。",[32,115723,115724],{},"返回初始观测和 info。",[19,115726,115727],{},"step：",[469,115729,115731],{"className":30758,"code":115730,"language":30760,"meta":54,"style":54},"def step(self, action):\n",[475,115732,115733],{"__ignoreMap":54},[478,115734,115735,115737,115739],{"class":480,"line":481},[478,115736,32327],{"class":710},[478,115738,115067],{"class":484},[478,115740,115070],{"class":714},[19,115742,115743,115745],{},[475,115744,107514],{}," 做六件事：",[29,115747,115748,115751,115757,115760,115763,115766],{},[32,115749,115750],{},"检查并裁剪 action。",[32,115752,115753,115754,28765],{},"写入 ",[475,115755,115756],{},"self.data.ctrl",[32,115758,115759],{},"连续推进若干个 MuJoCo 物理步。",[32,115761,115762],{},"计算新观测。",[32,115764,115765],{},"计算奖励和结束条件。",[32,115767,115768],{},"返回 Gymnasium 标准五元组。",[129,115770,102088],{"id":102088},[469,115772,115774],{"className":30758,"code":115773,"language":30760,"meta":54,"style":54},"import gymnasium as gym\n",[475,115775,115776],{"__ignoreMap":54},[478,115777,115778,115780,115782,115784],{"class":480,"line":481},[478,115779,30772],{"class":710},[478,115781,114275],{"class":714},[478,115783,31763],{"class":710},[478,115785,114280],{"class":714},[19,115787,115788,115789,115791,115792,115795],{},"导入 Gymnasium，并起别名 ",[475,115790,113920],{},"。后面写 ",[475,115793,115794],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[469,115797,115799],{"className":30758,"code":115798,"language":30760,"meta":54,"style":54},"from gymnasium import spaces\n",[475,115800,115801],{"__ignoreMap":54},[478,115802,115803,115805,115807,115809],{"class":480,"line":481},[478,115804,31117],{"class":710},[478,115806,114275],{"class":714},[478,115808,30772],{"class":710},[478,115810,114307],{"class":714},[19,115812,115813,115814,115817],{},"导入空间定义工具。",[475,115815,115816],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[469,115819,115820],{"className":30758,"code":115559,"language":30760,"meta":54,"style":54},[475,115821,115822],{"__ignoreMap":54},[478,115823,115824,115826,115828,115830,115832,115834,115836],{"class":480,"line":481},[478,115825,15259],{"class":710},[478,115827,114437],{"class":484},[478,115829,263],{"class":714},[478,115831,113920],{"class":484},[478,115833,1258],{"class":714},[478,115835,114446],{"class":484},[478,115837,31166],{"class":714},[19,115839,115840,115841,115844,115845,115847,115848,101398,115850,115852],{},"定义一个类，名字叫 ",[475,115842,115843],{},"ReacherEnv","。括号里的 ",[475,115846,115794],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[475,115849,70436],{},[475,115851,107514],{}," 这两个核心方法。",[469,115854,115856],{"className":30758,"code":115855,"language":30760,"meta":54,"style":54},"metadata = {\"render_modes\": []}\n",[475,115857,115858],{"__ignoreMap":54},[478,115859,115860,115863,115865,115867,115869],{"class":480,"line":481},[478,115861,115862],{"class":714},"metadata ",[478,115864,759],{"class":710},[478,115866,5014],{"class":714},[478,115868,114460],{"class":488},[478,115870,114463],{"class":714},[19,115872,115873],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[469,115875,115877],{"className":30758,"code":115876,"language":30760,"meta":54,"style":54},"def __init__(self) -> None:\n",[475,115878,115879],{"__ignoreMap":54},[478,115880,115881,115883,115885,115887,115889],{"class":480,"line":481},[478,115882,32327],{"class":710},[478,115884,31184],{"class":495},[478,115886,114476],{"class":714},[478,115888,96066],{"class":495},[478,115890,4305],{"class":714},[19,115892,115893,115895,115896,28765],{},[475,115894,31209],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[475,115897,115898],{},"env = ReacherEnv()",[469,115900,115902],{"className":30758,"code":115901,"language":30760,"meta":54,"style":54},"super().__init__()\n",[475,115903,115904],{"__ignoreMap":54},[478,115905,115906,115909,115911,115913],{"class":480,"line":481},[478,115907,115908],{"class":495},"super",[478,115910,17826],{"class":714},[478,115912,31209],{"class":495},[478,115914,2542],{"class":714},[19,115916,115917,115918,115920],{},"调用父类 ",[475,115919,115794],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[469,115922,115923],{"className":30758,"code":115586,"language":30760,"meta":54,"style":54},[475,115924,115925,115939],{"__ignoreMap":54},[478,115926,115927,115929,115931,115933,115935,115937],{"class":480,"line":481},[478,115928,31203],{"class":495},[478,115930,114497],{"class":714},[478,115932,759],{"class":710},[478,115934,101792],{"class":714},[478,115936,101694],{"class":495},[478,115938,720],{"class":714},[478,115940,115941,115943,115945,115947,115949,115951],{"class":480,"line":565},[478,115942,31203],{"class":495},[478,115944,114512],{"class":714},[478,115946,759],{"class":710},[478,115948,114517],{"class":714},[478,115950,31203],{"class":495},[478,115952,114522],{"class":714},[19,115954,115955,115956,115958,115959,101398,115962,115965],{},"把 MuJoCo 模型和状态保存到 ",[475,115957,31203],{}," 上。",[475,115960,115961],{},"self.model",[475,115963,115964],{},"self.data"," 表示这个环境对象自己的模型和状态。",[469,115967,115968],{"className":30758,"code":115628,"language":30760,"meta":54,"style":54},[475,115969,115970,115984],{"__ignoreMap":54},[478,115971,115972,115974,115976,115978,115980,115982],{"class":480,"line":481},[478,115973,31203],{"class":495},[478,115975,114533],{"class":714},[478,115977,759],{"class":710},[478,115979,114538],{"class":714},[478,115981,89934],{"class":495},[478,115983,720],{"class":714},[478,115985,115986,115988,115990,115992,115994,115996],{"class":480,"line":565},[478,115987,31203],{"class":495},[478,115989,114554],{"class":714},[478,115991,759],{"class":710},[478,115993,114538],{"class":714},[478,115995,89934],{"class":495},[478,115997,720],{"class":714},[19,115999,116000,116001,101398,116004,116007],{},"提前查好 tip 和 target 的 site ID。这样 ",[475,116002,116003],{},"_get_obs",[475,116005,116006],{},"_get_reward"," 里就不用每次按名字查找。",[469,116009,116011],{"className":30758,"code":116010,"language":30760,"meta":54,"style":54},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[475,116012,116013,116023,116033],{"__ignoreMap":54},[478,116014,116015,116017,116019,116021],{"class":480,"line":481},[478,116016,31203],{"class":495},[478,116018,114247],{"class":714},[478,116020,759],{"class":710},[478,116022,54807],{"class":495},[478,116024,116025,116027,116029,116031],{"class":480,"line":565},[478,116026,31203],{"class":495},[478,116028,114626],{"class":714},[478,116030,759],{"class":710},[478,116032,114631],{"class":495},[478,116034,116035,116037,116039,116041],{"class":480,"line":579},[478,116036,31203],{"class":495},[478,116038,114086],{"class":714},[478,116040,759],{"class":710},[478,116042,47713],{"class":495},[19,116044,116045,116048,116049,116052,116053,116056],{},[475,116046,116047],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[475,116050,116051],{},"max_steps"," 是一个 episode 最多运行多少步。",[475,116054,116055],{},"steps"," 记录当前 episode 已经走了多少步。",[469,116058,116059],{"className":30758,"code":114125,"language":30760,"meta":54,"style":54},[475,116060,116061],{"__ignoreMap":54},[478,116062,116063,116065,116067,116069,116071,116073,116075,116077,116079,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101],{"class":480,"line":481},[478,116064,31203],{"class":495},[478,116066,114134],{"class":714},[478,116068,759],{"class":710},[478,116070,114139],{"class":714},[478,116072,114142],{"class":5782},[478,116074,114145],{"class":710},[478,116076,102783],{"class":495},[478,116078,13001],{"class":714},[478,116080,114152],{"class":5782},[478,116082,759],{"class":710},[478,116084,102783],{"class":495},[478,116086,13001],{"class":714},[478,116088,96343],{"class":5782},[478,116090,759],{"class":710},[478,116092,263],{"class":714},[478,116094,789],{"class":495},[478,116096,114169],{"class":714},[478,116098,93880],{"class":5782},[478,116100,759],{"class":710},[478,116102,114176],{"class":714},[19,116104,116105,116106,116109,116110,101398,116113,116116],{},"定义动作空间。",[475,116107,116108],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[475,116111,116112],{},"low=-1.0",[475,116114,116115],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[469,116118,116119],{"className":30758,"code":114186,"language":30760,"meta":54,"style":54},[475,116120,116121],{"__ignoreMap":54},[478,116122,116123,116125,116127,116129,116131,116133,116135,116137,116139,116141,116143,116145,116147,116149,116151,116153,116155,116157],{"class":480,"line":481},[478,116124,31203],{"class":495},[478,116126,114195],{"class":714},[478,116128,759],{"class":710},[478,116130,114139],{"class":714},[478,116132,114142],{"class":5782},[478,116134,114145],{"class":710},[478,116136,114206],{"class":714},[478,116138,114152],{"class":5782},[478,116140,759],{"class":710},[478,116142,114206],{"class":714},[478,116144,96343],{"class":5782},[478,116146,759],{"class":710},[478,116148,263],{"class":714},[478,116150,1146],{"class":495},[478,116152,114169],{"class":714},[478,116154,93880],{"class":5782},[478,116156,759],{"class":710},[478,116158,114176],{"class":714},[19,116160,116161,116162,116165,116166,116169],{},"定义观测空间。",[475,116163,116164],{},"shape=(10,)"," 表示观测是 10 个数。",[475,116167,116168],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[469,116171,116173],{"className":30758,"code":116172,"language":30760,"meta":54,"style":54},"def _get_obs(self) -> np.ndarray:\n",[475,116174,116175],{"__ignoreMap":54},[478,116176,116177,116179,116181],{"class":480,"line":481},[478,116178,32327],{"class":710},[478,116180,114736],{"class":484},[478,116182,114739],{"class":714},[19,116184,116185,116186,116188],{},"定义内部函数，用来生成观测。函数名前面的 ",[475,116187,1687],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[469,116190,116192],{"className":30758,"code":116191,"language":30760,"meta":54,"style":54},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[475,116193,116194,116208],{"__ignoreMap":54},[478,116195,116196,116198,116200,116202,116204,116206],{"class":480,"line":481},[478,116197,111948],{"class":714},[478,116199,759],{"class":710},[478,116201,39253],{"class":495},[478,116203,114750],{"class":714},[478,116205,31203],{"class":495},[478,116207,114755],{"class":714},[478,116209,116210,116212,116214,116216,116218,116220],{"class":480,"line":565},[478,116211,111958],{"class":714},[478,116213,759],{"class":710},[478,116215,39253],{"class":495},[478,116217,114750],{"class":714},[478,116219,31203],{"class":495},[478,116221,114770],{"class":714},[19,116223,116224],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[469,116226,116228],{"className":30758,"code":116227,"language":30760,"meta":54,"style":54},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[475,116229,116230,116246],{"__ignoreMap":54},[478,116231,116232,116234,116236,116238,116240,116242,116244],{"class":480,"line":481},[478,116233,111234],{"class":714},[478,116235,759],{"class":710},[478,116237,114779],{"class":714},[478,116239,31203],{"class":495},[478,116241,114784],{"class":714},[478,116243,31203],{"class":495},[478,116245,114789],{"class":714},[478,116247,116248,116250],{"class":480,"line":565},[478,116249,17611],{"class":710},[478,116251,114796],{"class":714},[19,116253,116254,116255,116258,116259,116261],{},"拼接观测，并转换成 ",[475,116256,116257],{},"float32","。很多强化学习库默认使用 ",[475,116260,116257],{},"，所以这里主动转换。",[469,116263,116264],{"className":30758,"code":115667,"language":30760,"meta":54,"style":54},[475,116265,116266],{"__ignoreMap":54},[478,116267,116268,116270,116272,116274,116276,116278,116280,116282,116284,116286,116288,116290,116292,116294,116296,116298,116300],{"class":480,"line":481},[478,116269,32327],{"class":710},[478,116271,114902],{"class":484},[478,116273,114905],{"class":714},[478,116275,1155],{"class":710},[478,116277,114910],{"class":714},[478,116279,717],{"class":495},[478,116281,25489],{"class":710},[478,116283,39313],{"class":495},[478,116285,14130],{"class":710},[478,116287,39313],{"class":495},[478,116289,114923],{"class":714},[478,116291,114926],{"class":495},[478,116293,25489],{"class":710},[478,116295,39313],{"class":495},[478,116297,14130],{"class":710},[478,116299,39313],{"class":495},[478,116301,31166],{"class":714},[19,116303,116304,116305,116307,116308,116311],{},"定义 reset。",[475,116306,114946],{}," 用来控制随机数，保证实验可以复现。",[475,116309,116310],{},"options"," 用来接收额外配置，本章暂时不用。",[469,116313,116315],{"className":30758,"code":116314,"language":30760,"meta":54,"style":54},"super().reset(seed=seed)\n",[475,116316,116317],{"__ignoreMap":54},[478,116318,116319,116321,116323,116325,116327],{"class":480,"line":481},[478,116320,115908],{"class":495},[478,116322,114943],{"class":714},[478,116324,114946],{"class":5782},[478,116326,759],{"class":710},[478,116328,114951],{"class":714},[19,116330,116331,116332,116335],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[475,116333,116334],{},"self.np_random"," 生成可复现的随机数。",[469,116337,116339],{"className":30758,"code":116338,"language":30760,"meta":54,"style":54},"mujoco.mj_resetData(self.model, self.data)\n",[475,116340,116341],{"__ignoreMap":54},[478,116342,116343,116346,116348,116350,116352],{"class":480,"line":481},[478,116344,116345],{"class":714},"mujoco.mj_resetData(",[478,116347,31203],{"class":495},[478,116349,114961],{"class":714},[478,116351,31203],{"class":495},[478,116353,114966],{"class":714},[19,116355,116356],{},"把 MuJoCo 状态重置到默认状态。",[469,116358,116360],{"className":30758,"code":116359,"language":30760,"meta":54,"style":54},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[475,116361,116362],{"__ignoreMap":54},[478,116363,116364,116366,116368,116370,116372,116374,116376,116378,116380,116382,116384,116386,116388,116390,116392,116394,116396],{"class":480,"line":481},[478,116365,31203],{"class":495},[478,116367,114977],{"class":714},[478,116369,759],{"class":710},[478,116371,39253],{"class":495},[478,116373,114984],{"class":714},[478,116375,114142],{"class":5782},[478,116377,114145],{"class":710},[478,116379,86590],{"class":495},[478,116381,13001],{"class":714},[478,116383,114152],{"class":5782},[478,116385,759],{"class":710},[478,116387,86590],{"class":495},[478,116389,13001],{"class":714},[478,116391,31876],{"class":5782},[478,116393,759],{"class":710},[478,116395,31203],{"class":495},[478,116397,115009],{"class":714},[19,116399,115721,116400,116403,116404,116407,116408,116410],{},[475,116401,116402],{},"[:]"," 表示修改整个数组。",[475,116405,116406],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[475,116409,102530],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[469,116412,116414],{"className":30758,"code":116413,"language":30760,"meta":54,"style":54},"self.data.qvel[:] = 0.0\n",[475,116415,116416],{"__ignoreMap":54},[478,116417,116418,116420,116422,116424],{"class":480,"line":481},[478,116419,31203],{"class":495},[478,116421,115016],{"class":714},[478,116423,759],{"class":710},[478,116425,105141],{"class":495},[19,116427,116428],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[469,116430,116432],{"className":30758,"code":116431,"language":30760,"meta":54,"style":54},"self.steps = 0\nreturn self._get_obs(), {}\n",[475,116433,116434,116444],{"__ignoreMap":54},[478,116435,116436,116438,116440,116442],{"class":480,"line":481},[478,116437,31203],{"class":495},[478,116439,114086],{"class":714},[478,116441,759],{"class":710},[478,116443,47713],{"class":495},[478,116445,116446,116448,116450],{"class":480,"line":565},[478,116447,17611],{"class":710},[478,116449,39253],{"class":495},[478,116451,115056],{"class":714},[19,116453,116454],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[469,116456,116457],{"className":30758,"code":115730,"language":30760,"meta":54,"style":54},[475,116458,116459],{"__ignoreMap":54},[478,116460,116461,116463,116465],{"class":480,"line":481},[478,116462,32327],{"class":710},[478,116464,115067],{"class":484},[478,116466,115070],{"class":714},[19,116468,116469],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[469,116471,116473],{"className":30758,"code":116472,"language":30760,"meta":54,"style":54},"action = np.asarray(action, dtype=np.float32)\n",[475,116474,116475],{"__ignoreMap":54},[478,116476,116477,116479,116481,116483,116485,116487],{"class":480,"line":481},[478,116478,107822],{"class":714},[478,116480,759],{"class":710},[478,116482,115079],{"class":714},[478,116484,93880],{"class":5782},[478,116486,759],{"class":710},[478,116488,114176],{"class":714},[19,116490,116491,116492,28765],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[475,116493,116257],{},[469,116495,116497],{"className":30758,"code":116496,"language":30760,"meta":54,"style":54},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[475,116498,116499],{"__ignoreMap":54},[478,116500,116501,116503,116505,116507,116509,116511,116513],{"class":480,"line":481},[478,116502,107822],{"class":714},[478,116504,759],{"class":710},[478,116506,107827],{"class":714},[478,116508,31203],{"class":495},[478,116510,115098],{"class":714},[478,116512,31203],{"class":495},[478,116514,115103],{"class":714},[19,116516,116517],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[469,116519,116521],{"className":30758,"code":116520,"language":30760,"meta":54,"style":54},"self.data.ctrl[:] = action\n",[475,116522,116523],{"__ignoreMap":54},[478,116524,116525,116527,116529,116531],{"class":480,"line":481},[478,116526,31203],{"class":495},[478,116528,115114],{"class":714},[478,116530,759],{"class":710},[478,116532,107850],{"class":714},[19,116534,116535],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[469,116537,116539],{"className":30758,"code":116538,"language":30760,"meta":54,"style":54},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[475,116540,116541,116557],{"__ignoreMap":54},[478,116542,116543,116545,116547,116549,116551,116553,116555],{"class":480,"line":481},[478,116544,3591],{"class":710},[478,116546,101881],{"class":714},[478,116548,26423],{"class":710},[478,116550,32823],{"class":495},[478,116552,263],{"class":714},[478,116554,31203],{"class":495},[478,116556,115135],{"class":714},[478,116558,116559,116562,116564,116566,116568],{"class":480,"line":565},[478,116560,116561],{"class":714},"    mujoco.mj_step(",[478,116563,31203],{"class":495},[478,116565,114961],{"class":714},[478,116567,31203],{"class":495},[478,116569,114966],{"class":714},[19,116571,116572,116573,116576,116577,116579,116580,28765],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[475,116574,116575],{},"frame_skip=5","，所以外部调用一次 ",[475,116578,114257],{},"，内部实际执行 5 次 ",[475,116581,101595],{},[469,116583,116585],{"className":30758,"code":116584,"language":30760,"meta":54,"style":54},"self.steps += 1\n",[475,116586,116587],{"__ignoreMap":54},[478,116588,116589,116591,116593,116595],{"class":480,"line":481},[478,116590,31203],{"class":495},[478,116592,114086],{"class":714},[478,116594,10043],{"class":710},[478,116596,56079],{"class":495},[19,116598,116599],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[469,116601,116603],{"className":30758,"code":116602,"language":30760,"meta":54,"style":54},"obs = self._get_obs()\nreward = self._get_reward()\n",[475,116604,116605,116615],{"__ignoreMap":54},[478,116606,116607,116609,116611,116613],{"class":480,"line":481},[478,116608,111234],{"class":714},[478,116610,759],{"class":710},[478,116612,39253],{"class":495},[478,116614,115177],{"class":714},[478,116616,116617,116619,116621,116623],{"class":480,"line":565},[478,116618,111385],{"class":714},[478,116620,759],{"class":710},[478,116622,39253],{"class":495},[478,116624,115188],{"class":714},[19,116626,116627],{},"计算新的观测和奖励。",[469,116629,116631],{"className":30758,"code":116630,"language":30760,"meta":54,"style":54},"dist = float(np.linalg.norm(tip - target))\n",[475,116632,116633],{"__ignoreMap":54},[478,116634,116635,116637,116639,116641,116643,116645],{"class":480,"line":481},[478,116636,111976],{"class":714},[478,116638,759],{"class":710},[478,116640,110177],{"class":495},[478,116642,115231],{"class":714},[478,116644,1232],{"class":710},[478,116646,115236],{"class":714},[19,116648,116649],{},"计算末端到目标的距离，并转换成 Python float。",[469,116651,116652],{"className":30758,"code":114057,"language":30760,"meta":54,"style":54},[475,116653,116654,116666],{"__ignoreMap":54},[478,116655,116656,116658,116660,116662,116664],{"class":480,"line":481},[478,116657,114064],{"class":714},[478,116659,759],{"class":710},[478,116661,114069],{"class":714},[478,116663,1605],{"class":710},[478,116665,114074],{"class":495},[478,116667,116668,116670,116672,116674,116676,116678,116680],{"class":480,"line":565},[478,116669,114079],{"class":714},[478,116671,759],{"class":710},[478,116673,39253],{"class":495},[478,116675,114086],{"class":714},[478,116677,2277],{"class":710},[478,116679,39253],{"class":495},[478,116681,114093],{"class":714},[19,116683,116684],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[469,116686,116688],{"className":30758,"code":116687,"language":30760,"meta":54,"style":54},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[475,116689,116690,116703],{"__ignoreMap":54},[478,116691,116692,116695,116697,116699,116701],{"class":480,"line":481},[478,116693,116694],{"class":714},"info ",[478,116696,759],{"class":710},[478,116698,5014],{"class":714},[478,116700,115282],{"class":488},[478,116702,115285],{"class":714},[478,116704,116705,116707],{"class":480,"line":565},[478,116706,17611],{"class":710},[478,116708,115292],{"class":714},[19,116710,116711,116714],{},[475,116712,116713],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[469,116716,116718],{"className":30758,"code":116717,"language":30760,"meta":54,"style":54},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[475,116719,116720,116729],{"__ignoreMap":54},[478,116721,116722,116725,116727],{"class":480,"line":481},[478,116723,116724],{"class":714},"env ",[478,116726,759],{"class":710},[478,116728,115322],{"class":714},[478,116730,116731,116733,116735,116737,116739,116741,116743],{"class":480,"line":565},[478,116732,113780],{"class":714},[478,116734,759],{"class":710},[478,116736,115332],{"class":714},[478,116738,114946],{"class":5782},[478,116740,759],{"class":710},[478,116742,895],{"class":495},[478,116744,720],{"class":714},[19,116746,116747,116748,116751],{},"创建环境并重置。",[475,116749,116750],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[469,116753,116755],{"className":30758,"code":116754,"language":30760,"meta":54,"style":54},"action = env.action_space.sample()\n",[475,116756,116757],{"__ignoreMap":54},[478,116758,116759,116761,116763],{"class":480,"line":481},[478,116760,107822],{"class":714},[478,116762,759],{"class":710},[478,116764,115401],{"class":714},[19,116766,116767],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116769,102696],{"id":102695},[19,116771,105864],{},[469,116773,116776],{"className":116774,"code":116775,"language":5753,"meta":54},[5751],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[475,116777,116775],{"__ignoreMap":54},[19,116779,116780],{},"这个环境已经具备强化学习环境的基本结构。",[19,116782,116783],{},"主函数里使用随机动作：",[469,116785,116786],{"className":30758,"code":116754,"language":30760,"meta":54,"style":54},[475,116787,116788],{"__ignoreMap":54},[478,116789,116790,116792,116794],{"class":480,"line":481},[478,116791,107822],{"class":714},[478,116793,759],{"class":710},[478,116795,115401],{"class":714},[19,116797,116798],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116800,102728],{"id":102727},[29,116802,116803,116806,116812,116821,116830,116839,116845],{},[32,116804,116805],{},"运行程序。",[32,116807,116808,116809,28765],{},"确认 ",[475,116810,116811],{},"obs.shape == (10,)",[32,116813,111561,116814,116817,116818,28765],{},[475,116815,116816],{},"env.action_space","，应类似 ",[475,116819,116820],{},"Box(-1.0, 1.0, (2,), float32)",[32,116822,105965,116823,116826,116827,28765],{},[475,116824,116825],{},"self.max_steps = 10","，确认环境会更快 ",[475,116828,116829],{},"truncated=True",[32,116831,102791,116832,102794,116835,116838],{},[475,116833,116834],{},"terminated = dist \u003C 0.05",[475,116836,116837],{},"dist \u003C 0.2","，观察是否更容易结束。",[32,116840,102791,116841,116844],{},[475,116842,116843],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[32,116846,116847,116848,116850,116851,116854],{},"在 ",[475,116849,116713],{}," 里加入 ",[475,116852,116853],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116856,102833],{"id":102832},[129,116858,116860],{"id":116859},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116862,116863,116864,116866],{},"Gymnasium 的 ",[475,116865,107514],{}," 返回 5 个值:",[469,116868,116870],{"className":30758,"code":116869,"language":30760,"meta":54,"style":54},"obs, reward, terminated, truncated, info\n",[475,116871,116872],{"__ignoreMap":54},[478,116873,116874],{"class":480,"line":481},[478,116875,116869],{"class":714},[19,116877,116878],{},"不是旧 Gym 的 4 个值。",[129,116880,116882,116885],{"id":116881},"datactrl-action-维度错误",[475,116883,116884],{},"data.ctrl[:] = action"," 维度错误",[19,116887,102903],{},[469,116889,116891],{"className":30758,"code":116890,"language":30760,"meta":54,"style":54},"print(self.model.nu)\nprint(action.shape)\n",[475,116892,116893,116904],{"__ignoreMap":54},[478,116894,116895,116897,116899,116901],{"class":480,"line":481},[478,116896,30795],{"class":495},[478,116898,263],{"class":714},[478,116900,31203],{"class":495},[478,116902,116903],{"class":714},".model.nu)\n",[478,116905,116906,116908],{"class":480,"line":565},[478,116907,30795],{"class":495},[478,116909,116910],{"class":714},"(action.shape)\n",[19,116912,116913],{},"两者必须匹配。",[129,116915,116917],{"id":116916},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116919,102842],{},[469,116921,116923],{"className":30758,"code":116922,"language":30760,"meta":54,"style":54},"mujoco.mj_forward(self.model, self.data)\n",[475,116924,116925],{"__ignoreMap":54},[478,116926,116927,116930,116932,116934,116936],{"class":480,"line":481},[478,116928,116929],{"class":714},"mujoco.mj_forward(",[478,116931,31203],{"class":495},[478,116933,114961],{"class":714},[478,116935,31203],{"class":495},[478,116937,114966],{"class":714},[129,116939,116941,116943],{"id":116940},"observation_space-维度和-obs-不一致",[475,116942,113980],{}," 维度和 obs 不一致",[19,116945,102955],{},[469,116947,116949],{"className":30758,"code":116948,"language":30760,"meta":54,"style":54},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[475,116950,116951,116961,116968],{"__ignoreMap":54},[478,116952,116953,116955,116957,116959],{"class":480,"line":481},[478,116954,111234],{"class":714},[478,116956,759],{"class":710},[478,116958,39253],{"class":495},[478,116960,115177],{"class":714},[478,116962,116963,116965],{"class":480,"line":565},[478,116964,30795],{"class":495},[478,116966,116967],{"class":714},"(obs.shape)\n",[478,116969,116970,116972,116974,116976],{"class":480,"line":579},[478,116971,30795],{"class":495},[478,116973,263],{"class":714},[478,116975,31203],{"class":495},[478,116977,116978],{"class":714},".observation_space.shape)\n",[19,116980,116981],{},"两者必须一致。本章观测是：",[469,116983,116986],{"className":116984,"code":116985,"language":5753,"meta":54},[5751],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[475,116987,116985],{"__ignoreMap":54},[129,116989,116991],{"id":116990},"action-超过范围","action 超过范围",[19,116993,116994],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[469,116996,116997],{"className":30758,"code":116496,"language":30760,"meta":54,"style":54},[475,116998,116999],{"__ignoreMap":54},[478,117000,117001,117003,117005,117007,117009,117011,117013],{"class":480,"line":481},[478,117002,107822],{"class":714},[478,117004,759],{"class":710},[478,117006,107827],{"class":714},[478,117008,31203],{"class":495},[478,117010,115098],{"class":714},[478,117012,31203],{"class":495},[478,117014,115103],{"class":714},[19,117016,117017,117018,28765],{},"这能避免无效动作直接写入 ",[475,117019,101456],{},[129,117021,117023],{"id":117022},"忘记返回-info","忘记返回 info",[19,117025,116863,117026,101398,117028,117030],{},[475,117027,70436],{},[475,117029,107514],{}," 都会返回 info：",[469,117032,117033],{"className":30758,"code":113773,"language":30760,"meta":54,"style":54},[475,117034,117035,117043],{"__ignoreMap":54},[478,117036,117037,117039,117041],{"class":480,"line":481},[478,117038,113780],{"class":714},[478,117040,759],{"class":710},[478,117042,113785],{"class":714},[478,117044,117045,117047,117049],{"class":480,"line":565},[478,117046,113790],{"class":714},[478,117048,759],{"class":710},[478,117050,113795],{"class":714},[19,117052,117053,117054,28765],{},"即使暂时没有额外信息，也返回 ",[475,117055,32839],{},[14,117057,117059],{"id":117058},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117061,117062],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[29,117064,117065,117068,117071,117074,117077,117080],{},[32,117066,117067],{},"更稳定的 reward。",[32,117069,117070],{},"合理的 episode 长度。",[32,117072,117073],{},"可重复的随机目标采样。",[32,117075,117076],{},"render 接口。",[32,117078,117079],{},"环境注册代码。",[32,117081,117082],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117084,117085],{},"如果只是自己写训练循环，最小形式是：",[469,117087,117089],{"className":30758,"code":117088,"language":30760,"meta":54,"style":54},"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",[475,117090,117091,117099,117115,117119,117135,117144,117153,117163],{"__ignoreMap":54},[478,117092,117093,117095,117097],{"class":480,"line":481},[478,117094,116724],{"class":714},[478,117096,759],{"class":710},[478,117098,115322],{"class":714},[478,117100,117101,117103,117105,117107,117109,117111,117113],{"class":480,"line":565},[478,117102,113780],{"class":714},[478,117104,759],{"class":710},[478,117106,115332],{"class":714},[478,117108,114946],{"class":5782},[478,117110,759],{"class":710},[478,117112,895],{"class":495},[478,117114,720],{"class":714},[478,117116,117117],{"class":480,"line":579},[478,117118,2966],{"emptyLinePlaceholder":640},[478,117120,117121,117123,117125,117127,117129,117131,117133],{"class":480,"line":593},[478,117122,3591],{"class":710},[478,117124,101881],{"class":714},[478,117126,26423],{"class":710},[478,117128,32823],{"class":495},[478,117130,263],{"class":714},[478,117132,6976],{"class":495},[478,117134,31166],{"class":714},[478,117136,117137,117140,117142],{"class":480,"line":1769},[478,117138,117139],{"class":714},"    action ",[478,117141,759],{"class":710},[478,117143,115401],{"class":714},[478,117145,117146,117149,117151],{"class":480,"line":1783},[478,117147,117148],{"class":714},"    obs, reward, terminated, truncated, info ",[478,117150,759],{"class":710},[478,117152,113795],{"class":714},[478,117154,117155,117157,117159,117161],{"class":480,"line":1789},[478,117156,3667],{"class":710},[478,117158,115467],{"class":714},[478,117160,115470],{"class":710},[478,117162,115473],{"class":714},[478,117164,117165,117168,117170],{"class":480,"line":1880},[478,117166,117167],{"class":714},"        obs, info ",[478,117169,759],{"class":710},[478,117171,113785],{"class":714},[14,117173,117175],{"id":117174},"_9本章小结","9.本章小结",[19,117177,117178],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[469,117180,117183],{"className":117181,"code":117182,"language":5753,"meta":54},[5751],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[475,117184,117182],{"__ignoreMap":54},[19,117186,117187],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[617,117189,117190],{},"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":54,"searchDepth":565,"depth":565,"links":117192},[117193,117194,117195,117202,117206,117207,117208,117218,117219],{"id":101026,"depth":565,"text":101027},{"id":101149,"depth":565,"text":101150},{"id":101424,"depth":565,"text":101425,"children":117196},[117197,117199,117201],{"id":114004,"depth":579,"text":117198},"terminated 和 truncated 的区别",{"id":114107,"depth":579,"text":117200},"observation_space 和 action_space",{"id":114234,"depth":579,"text":114235},{"id":101632,"depth":565,"text":101633,"children":117203},[117204,117205],{"id":101952,"depth":579,"text":101952},{"id":102088,"depth":579,"text":102088},{"id":102695,"depth":565,"text":102696},{"id":102727,"depth":565,"text":102728},{"id":102832,"depth":565,"text":102833,"children":117209},[117210,117211,117213,117214,117216,117217],{"id":116859,"depth":579,"text":116860},{"id":116881,"depth":579,"text":117212},"data.ctrl[:] = action 维度错误",{"id":116916,"depth":579,"text":116917},{"id":116940,"depth":579,"text":117215},"observation_space 维度和 obs 不一致",{"id":116990,"depth":579,"text":116991},{"id":117022,"depth":579,"text":117023},{"id":117058,"depth":565,"text":117059},{"id":117174,"depth":565,"text":117175},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113757,"description":54},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117226,"title":117227,"body":117228,"description":117651,"extension":638,"meta":117652,"navigation":640,"path":117653,"seo":117654,"stem":117655,"__hash__":117656},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117229,"toc":117641},[117230,117234,117237,117240,117260,117266,117272,117282,117285,117288,117308,117311,117315,117318,117324,117327,117341,117344,117347,117421,117424,117430,117433,117456,117459,117509,117512,117518,117521,117524,117527,117546,117549,117555,117558,117561,117564,117584,117587,117590,117593,117638],[10,117231,117233],{"id":117232},"mujoco-学习","MuJoCo 学习",[19,117235,117236],{},"初版",[19,117238,117239],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[29,117241,117242,117245,117248,117257],{},[32,117243,117244],{},"MuJoCo 模型文件在描述什么。",[32,117246,117247],{},"Python 代码怎样读取和推进仿真。",[32,117249,117250,916,117252,916,117254,117256],{},[475,117251,104410],{},[475,117253,104740],{},[475,117255,104743],{}," 这些数组为什么重要。",[32,117258,117259],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117261,117262,117263,117265],{},"默认环境为 Fedora 44、Python >= 3.10、",[475,117264,101407],{}," 官方 Python bindings。",[19,117267,117268,117269,117271],{},"注意：本文禁止使用 ",[475,117270,101392],{},"。所有示例均使用：",[469,117273,117274],{"className":30758,"code":101958,"language":30760,"meta":54,"style":54},[475,117275,117276],{"__ignoreMap":54},[478,117277,117278,117280],{"class":480,"line":481},[478,117279,30772],{"class":710},[478,117281,101681],{"class":714},[14,117283,117284],{"id":117284},"适合谁阅读",[19,117286,117287],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[29,117289,117290,117293,117296,117299],{},[32,117291,117292],{},"没学过 MuJoCo，只会一点 Python。",[32,117294,117295],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[32,117297,117298],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[32,117300,117301,117302,117304,117305,117307],{},"以前接触过 ",[475,117303,101392],{},"，现在想迁移到官方 ",[475,117306,101401],{}," Python bindings。",[19,117309,117310],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117312,117314],{"id":117313},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117316,117317],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[469,117319,117322],{"className":117320,"code":117321,"language":5753,"meta":54},[5751],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[475,117323,117321],{"__ignoreMap":54},[19,117325,117326],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[29,117328,117329,117332,117335,117338],{},[32,117330,117331],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[32,117333,117334],{},"快速测试控制算法，不必一开始就上真实机器人。",[32,117336,117337],{},"生成强化学习环境。",[32,117339,117340],{},"采集状态、动作、图像、奖励等训练数据。",[14,117342,117343],{"id":117343},"学习前的心智模型",[19,117345,117346],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[371,117348,117349,117361],{},[374,117350,117351],{},[377,117352,117353,117356,117359],{},[380,117354,117355],{"align":382},"部分",[380,117357,117358],{"align":382},"负责什么",[380,117360,21752],{"align":382},[388,117362,117363,117374,117386,117398,117410],{},[377,117364,117365,117368,117371],{},[393,117366,117367],{"align":382},"MJCF XML",[393,117369,117370],{"align":382},"定义世界和机器人结构",[393,117372,117373],{"align":382},"地面、盒子、关节、电机、摄像头",[377,117375,117376,117380,117383],{},[393,117377,117378],{"align":382},[475,117379,101089],{},[393,117381,117382],{"align":382},"编译后的静态模型",[393,117384,117385],{"align":382},"有几个关节、有几个电机、时间步长是多少",[377,117387,117388,117392,117395],{},[393,117389,117390],{"align":382},[475,117391,101099],{},[393,117393,117394],{"align":382},"运行中的动态状态",[393,117396,117397],{"align":382},"当前时间、位置、速度、电机输入",[377,117399,117400,117404,117407],{},[393,117401,117402],{"align":382},[475,117403,101595],{},[393,117405,117406],{"align":382},"推进一步物理仿真",[393,117408,117409],{"align":382},"根据重力、力、碰撞更新状态",[377,117411,117412,117415,117418],{},[393,117413,117414],{"align":382},"Viewer \u002F Renderer",[393,117416,117417],{"align":382},"把仿真显示出来",[393,117419,117420],{"align":382},"打开窗口或保存图片",[19,117422,117423],{},"一句话总结：",[469,117425,117428],{"className":117426,"code":117427,"language":5753,"meta":54},[5751],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[475,117429,117427],{"__ignoreMap":54},[19,117431,117432],{},"参考来源：",[1702,117434,117435,117442,117449],{},[32,117436,117437,117438],{},"MuJoCo Python 官方文档：",[518,117439,117440],{"href":117440,"rel":117441},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[522],[32,117443,117444,117445],{},"MuJoCo XML Reference：",[518,117446,117447],{"href":117447,"rel":117448},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[522],[32,117450,117451,117452],{},"MuJoCo Overview：",[518,117453,117454],{"href":117454,"rel":117455},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[522],[14,117457,117458],{"id":117458},"章节目录",[29,117460,117461,117467,117473,117479,117485,117491,117497,117503],{},[32,117462,117463],{},[518,117464,117466],{"href":117465},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[32,117468,117469],{},[518,117470,117472],{"href":117471},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[32,117474,117475],{},[518,117476,117478],{"href":117477},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[32,117480,117481],{},[518,117482,117484],{"href":117483},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[32,117486,117487],{},[518,117488,117490],{"href":117489},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[32,117492,117493],{},[518,117494,117496],{"href":117495},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[32,117498,117499],{},[518,117500,117502],{"href":117501},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[32,117504,117505],{},[518,117506,117508],{"href":117507},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117510,117511],{"id":117511},"推荐学习路线",[469,117513,117516],{"className":117514,"code":117515,"language":5753,"meta":54},[5751],"环境安装\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",[475,117517,117515],{"__ignoreMap":54},[19,117519,117520],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117522,117523],{"id":117523},"建议的目录结构",[19,117525,117526],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[469,117528,117530],{"className":471,"code":117529,"language":473,"meta":54,"style":54},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[475,117531,117532,117540],{"__ignoreMap":54},[478,117533,117534,117536,117538],{"class":480,"line":481},[478,117535,101646],{"class":484},[478,117537,29596],{"class":495},[478,117539,101651],{"class":488},[478,117541,117542,117544],{"class":480,"line":565},[478,117543,101656],{"class":495},[478,117545,101651],{"class":488},[19,117547,117548],{},"每一章的代码都单独保存：",[469,117550,117553],{"className":117551,"code":117552,"language":5753,"meta":54},[5751],"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",[475,117554,117552],{"__ignoreMap":54},[19,117556,117557],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117559,117560],{"id":117560},"学习方法",[19,117562,117563],{},"每章建议按这个顺序操作：",[29,117565,117566,117569,117572,117575,117578,117581],{},[32,117567,117568],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[32,117570,117571],{},"复制最小可运行代码，保存成指定文件。",[32,117573,117574],{},"运行代码，确认没有报错。",[32,117576,117577],{},"对照“运行结果说明”理解输出。",[32,117579,117580],{},"做“验证步骤”，主动改一两个参数。",[32,117582,117583],{},"遇到报错先看“常见错误与解决方案”。",[19,117585,117586],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117588,117589],{"id":117589},"全局排错顺序",[19,117591,117592],{},"遇到问题时，按下面顺序查：",[29,117594,117595,117601,117607,117612,117615,117618,117625,117635],{},[32,117596,117597,117598],{},"Python 环境是否激活：",[475,117599,117600],{},"which python",[32,117602,117603,117604],{},"MuJoCo 是否能导入：",[475,117605,117606],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[32,117608,117609,117610],{},"是否误装了 ",[475,117611,101392],{},[32,117613,117614],{},"XML 标签是否闭合、属性是否拼写正确",[32,117616,117617],{},"actuator 引用的 joint 名字是否存在",[32,117619,117620,117622,117623],{},[475,117621,101456],{}," 的长度是否等于 ",[475,117624,102538],{},[32,117626,105965,117627,82919,117629,117631,117632],{},[475,117628,104410],{},[475,117630,104740],{}," 后是否调用了 ",[475,117633,117634],{},"mujoco.mj_forward",[32,117636,117637],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[617,117639,117640],{},"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":54,"searchDepth":565,"depth":565,"links":117642},[117643,117644,117645,117646,117647,117648,117649,117650],{"id":117284,"depth":565,"text":117284},{"id":117313,"depth":565,"text":117314},{"id":117343,"depth":565,"text":117343},{"id":117458,"depth":565,"text":117458},{"id":117511,"depth":565,"text":117511},{"id":117523,"depth":565,"text":117523},{"id":117560,"depth":565,"text":117560},{"id":117589,"depth":565,"text":117589},"仿真搭建。",{"category":23944},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117227,"description":117651},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117658,"title":117659,"body":117660,"description":23942,"extension":638,"meta":118115,"navigation":640,"path":118116,"seo":118117,"stem":118118,"__hash__":118119},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117661,"toc":118113},[117662,117665,117668,117674,118110],[10,117663,117659],{"id":117664},"_1-最常用的基本操作更新",[19,117666,117667],{},"装linux系统教程：",[19,117669,117670],{},[518,117671,117672],{"href":117672,"rel":117673},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[522],[469,117675,117679],{"className":117676,"code":117677,"language":117678,"meta":54,"style":54},"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",[475,117680,117681,117686,117691,117700,117705,117714,117719,117739,117744,117755,117760,117769,117774,117802,117807,117826,117831,117850,117854,117859,117875,117879,117884,117914,117918,117923,117939,117943,117948,117963,117967,117972,117988,117992,117997,118009,118021,118025,118030,118047,118051,118056,118074,118078,118083,118092,118096,118101],{"__ignoreMap":54},[478,117682,117683],{"class":480,"line":481},[478,117684,117685],{"class":770},"#更新相关的知识\n",[478,117687,117688],{"class":480,"line":565},[478,117689,117690],{"class":770},"# 更新软件包列表（从服务器获取最新软件信息）\n",[478,117692,117693,117695,117698],{"class":480,"line":579},[478,117694,24956],{"class":484},[478,117696,117697],{"class":488}," apt",[478,117699,26622],{"class":488},[478,117701,117702],{"class":480,"line":593},[478,117703,117704],{"class":770},"# 升级所有可更新的软件包（不删除旧包）\n",[478,117706,117707,117709,117711],{"class":480,"line":1769},[478,117708,24956],{"class":484},[478,117710,117697],{"class":488},[478,117712,117713],{"class":488}," upgrade\n",[478,117715,117716],{"class":480,"line":1783},[478,117717,117718],{"class":770},"#更新和升级软件包\n",[478,117720,117721,117723,117725,117728,117730,117732,117734,117737],{"class":480,"line":1789},[478,117722,24956],{"class":484},[478,117724,117697],{"class":488},[478,117726,117727],{"class":488}," update",[478,117729,26570],{"class":714},[478,117731,24956],{"class":484},[478,117733,117697],{"class":488},[478,117735,117736],{"class":488}," upgrade",[478,117738,101361],{"class":495},[478,117740,117741],{"class":480,"line":1880},[478,117742,117743],{"class":770},"#列出可更新的软件包及版本信息\n",[478,117745,117746,117749,117752],{"class":480,"line":1886},[478,117747,117748],{"class":484},"apt",[478,117750,117751],{"class":488}," list",[478,117753,117754],{"class":495}," --upgradable\n",[478,117756,117757],{"class":480,"line":1898},[478,117758,117759],{"class":770},"#彻底升级（处理依赖关系，可能删除旧包）\n",[478,117761,117762,117764,117766],{"class":480,"line":2180},[478,117763,24956],{"class":484},[478,117765,117697],{"class":488},[478,117767,117768],{"class":488}," full-upgrade\n",[478,117770,117771],{"class":480,"line":2185},[478,117772,117773],{"class":770},"#设置指定版本\n",[478,117775,117776,117778,117780,117782,117784,117787,117789,117791,117793,117795,117798,117800],{"class":480,"line":2191},[478,117777,24956],{"class":484},[478,117779,117697],{"class":488},[478,117781,489],{"class":488},[478,117783,29282],{"class":710},[478,117785,117786],{"class":488},"package_nam",[478,117788,786],{"class":714},[478,117790,1655],{"class":710},[478,117792,759],{"class":488},[478,117794,1605],{"class":710},[478,117796,117797],{"class":488},"version_numbe",[478,117799,1367],{"class":714},[478,117801,51687],{"class":710},[478,117803,117804],{"class":480,"line":2196},[478,117805,117806],{"class":770},"#只安装软件包不升级\n",[478,117808,117809,117811,117813,117815,117817,117819,117821,117823],{"class":480,"line":2210},[478,117810,24956],{"class":484},[478,117812,117697],{"class":488},[478,117814,489],{"class":488},[478,117816,29282],{"class":710},[478,117818,117786],{"class":488},[478,117820,786],{"class":714},[478,117822,1655],{"class":710},[478,117824,117825],{"class":495}," --no-upgrade\n",[478,117827,117828],{"class":480,"line":2215},[478,117829,117830],{"class":770},"#只升级，不存在就不安装\n",[478,117832,117833,117835,117837,117839,117841,117843,117845,117847],{"class":480,"line":2221},[478,117834,24956],{"class":484},[478,117836,117697],{"class":488},[478,117838,489],{"class":488},[478,117840,29282],{"class":710},[478,117842,117786],{"class":488},[478,117844,786],{"class":714},[478,117846,1655],{"class":710},[478,117848,117849],{"class":495}," --only-upgrade\n",[478,117851,117852],{"class":480,"line":2241},[478,117853,2966],{"emptyLinePlaceholder":640},[478,117855,117856],{"class":480,"line":2246},[478,117857,117858],{"class":770},"#安装指定的软件命令\n",[478,117860,117861,117863,117865,117867,117869,117871,117873],{"class":480,"line":2260},[478,117862,24956],{"class":484},[478,117864,117697],{"class":488},[478,117866,489],{"class":488},[478,117868,29282],{"class":710},[478,117870,117786],{"class":488},[478,117872,786],{"class":714},[478,117874,51687],{"class":710},[478,117876,117877],{"class":480,"line":2265},[478,117878,2966],{"emptyLinePlaceholder":640},[478,117880,117881],{"class":480,"line":2294},[478,117882,117883],{"class":770},"#安装多个软件包\n",[478,117885,117886,117888,117890,117892,117894,117897,117900,117902,117904,117907,117909,117911],{"class":480,"line":2299},[478,117887,24956],{"class":484},[478,117889,117697],{"class":488},[478,117891,489],{"class":488},[478,117893,29282],{"class":710},[478,117895,117896],{"class":488},"package_",[478,117898,117899],{"class":710},"1>",[478,117901,29282],{"class":710},[478,117903,117896],{"class":488},[478,117905,117906],{"class":710},"2>",[478,117908,29282],{"class":710},[478,117910,117896],{"class":488},[478,117912,117913],{"class":710},"3>\n",[478,117915,117916],{"class":480,"line":2316},[478,117917,2966],{"emptyLinePlaceholder":640},[478,117919,117920],{"class":480,"line":2321},[478,117921,117922],{"class":770},"#更新指定的软件命令\n",[478,117924,117925,117927,117929,117931,117933,117935,117937],{"class":480,"line":2326},[478,117926,24956],{"class":484},[478,117928,117697],{"class":488},[478,117930,117727],{"class":488},[478,117932,29282],{"class":710},[478,117934,117786],{"class":488},[478,117936,786],{"class":714},[478,117938,51687],{"class":710},[478,117940,117941],{"class":480,"line":2331},[478,117942,2966],{"emptyLinePlaceholder":640},[478,117944,117945],{"class":480,"line":2345},[478,117946,117947],{"class":770},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[478,117949,117950,117952,117955,117957,117959,117961],{"class":480,"line":2350},[478,117951,117748],{"class":484},[478,117953,117954],{"class":488}," show",[478,117956,29282],{"class":710},[478,117958,117786],{"class":488},[478,117960,786],{"class":714},[478,117962,51687],{"class":710},[478,117964,117965],{"class":480,"line":3143},[478,117966,2966],{"emptyLinePlaceholder":640},[478,117968,117969],{"class":480,"line":3157},[478,117970,117971],{"class":770},"#删除软件包命令\n",[478,117973,117974,117976,117978,117980,117982,117984,117986],{"class":480,"line":3165},[478,117975,24956],{"class":484},[478,117977,117697],{"class":488},[478,117979,26459],{"class":488},[478,117981,29282],{"class":710},[478,117983,117786],{"class":488},[478,117985,786],{"class":714},[478,117987,51687],{"class":710},[478,117989,117990],{"class":480,"line":3170},[478,117991,2966],{"emptyLinePlaceholder":640},[478,117993,117994],{"class":480,"line":3176},[478,117995,117996],{"class":770},"# 清理旧版本和缓存（释放磁盘空间）\n",[478,117998,117999,118001,118003,118006],{"class":480,"line":3182},[478,118000,24956],{"class":484},[478,118002,117697],{"class":488},[478,118004,118005],{"class":488}," autoremove",[478,118007,118008],{"class":770},"  # 删除不再需要的依赖和库文件\n",[478,118010,118011,118013,118015,118018],{"class":480,"line":3187},[478,118012,24956],{"class":484},[478,118014,117697],{"class":488},[478,118016,118017],{"class":488}," clean",[478,118019,118020],{"class":770},"       # 清理下载的缓存包\n",[478,118022,118023],{"class":480,"line":8514},[478,118024,2966],{"emptyLinePlaceholder":640},[478,118026,118027],{"class":480,"line":8538},[478,118028,118029],{"class":770},"#移除软件包及配置文件\n",[478,118031,118032,118034,118036,118039,118041,118043,118045],{"class":480,"line":8543},[478,118033,24956],{"class":484},[478,118035,117697],{"class":488},[478,118037,118038],{"class":488}," purge",[478,118040,29282],{"class":710},[478,118042,117786],{"class":488},[478,118044,786],{"class":714},[478,118046,51687],{"class":710},[478,118048,118049],{"class":480,"line":8549},[478,118050,2966],{"emptyLinePlaceholder":640},[478,118052,118053],{"class":480,"line":8576},[478,118054,118055],{"class":770},"#查找软件包命令\n",[478,118057,118058,118060,118062,118065,118067,118070,118072],{"class":480,"line":8581},[478,118059,24956],{"class":484},[478,118061,117697],{"class":488},[478,118063,118064],{"class":488}," search",[478,118066,29282],{"class":710},[478,118068,118069],{"class":488},"keywor",[478,118071,1015],{"class":714},[478,118073,51687],{"class":710},[478,118075,118076],{"class":480,"line":8587},[478,118077,2966],{"emptyLinePlaceholder":640},[478,118079,118080],{"class":480,"line":8599},[478,118081,118082],{"class":770},"#列出所有已安装的包\n",[478,118084,118085,118087,118089],{"class":480,"line":8611},[478,118086,117748],{"class":484},[478,118088,117751],{"class":488},[478,118090,118091],{"class":495}," --installed\n",[478,118093,118094],{"class":480,"line":8623},[478,118095,2966],{"emptyLinePlaceholder":640},[478,118097,118098],{"class":480,"line":10282},[478,118099,118100],{"class":770},"#列出所有已安装的包的版本信息\n",[478,118102,118103,118105,118107],{"class":480,"line":10307},[478,118104,117748],{"class":484},[478,118106,117751],{"class":488},[478,118108,118109],{"class":495}," --all-versions\n",[617,118111,118112],{},"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":54,"searchDepth":565,"depth":565,"links":118114},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117659,"description":23942},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118121,"title":118122,"body":118123,"description":23942,"extension":638,"meta":118864,"navigation":640,"path":118865,"seo":118866,"stem":118867,"__hash__":118868},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118124,"toc":118851},[118125,118128,118132,118135,118141,118145,118149,118155,118160,118165,118170,118175,118180,118183,118186,118189,118192,118196,118199,118204,118207,118212,118215,118220,118227,118230,118233,118236,118239,118242,118253,118257,118261,118266,118271,118275,118280,118284,118289,118293,118297,118302,118305,118350,118355,118359,118363,118368,118374,118379,118389,118394,118404,118409,118414,118441,118445,118448,118453,118456,118481,118485,118490,118493,118498,118503,118523,118528,118531,118546,118550,118603,118606,118611,118615,118618,118633,118636,118639,118644,118648,118652,118655,118659,118663,118666,118671,118676,118680,118687,118695,118698,118705,118710,118715,118718,118723,118730,118735,118742,118746,118748,118753,118757,118760,118763,118768,118771,118776,118779,118784,118789,118794,118798,118803,118807,118848],[10,118126,118122],{"id":118127},"_2-linux装机教程",[14,118129,118131],{"id":118130},"_21-实体机","2.1 实体机",[19,118133,118134],{},"使用清华源：（Ubuntu24.04）",[19,118136,118137],{},[518,118138,118139],{"href":118139,"rel":118140},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[522],[14,118142,118144],{"id":118143},"_22-普通虚拟机","2.2 普通虚拟机",[129,118146,118148],{"id":118147},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118150,118151],{},[518,118152,118153],{"href":118153,"rel":118154},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[522],[19,118156,118157],{},[52,118158],{"alt":54,"src":118159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118161,118162],{},[52,118163],{"alt":54,"src":118164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118166,118167],{},[52,118168],{"alt":54,"src":118169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118171,118172],{},[52,118173],{"alt":54,"src":118174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118176,118177],{},[52,118178],{"alt":54,"src":118179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118181,118182],{},"内存4G（4096MB）；",[19,118184,118185],{},"CPU给4个核；",[19,118187,118188],{},"硬盘动态分配60G；",[19,118190,118191],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[129,118193,118195],{"id":118194},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118197,118198],{},"按照1.1的步骤下载Ubuntu",[19,118200,118201],{},[52,118202],{"alt":54,"src":118203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118205,118206],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118208,118209],{},[52,118210],{"alt":54,"src":118211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118213,118214],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118216,118217],{},[52,118218],{"alt":54,"src":118219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118221,118222,118223,118226],{},"选择“正常安装”(找不到都用Alt+F7)， ",[45,118224,118225],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118228,118229],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118231,118232],{},"将改动写入磁盘吗 继续",[19,118234,118235],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118237,118238],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118240,118241],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118243,118244,118245,118248,118249,118252],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[45,118246,118247],{},"除了"," 选不发送系统信息与不升级之外， ",[45,118250,118251],{},"其它"," 都跳过或前进）",[129,118254,118256],{"id":118255},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22563,118258,118260],{"id":118259},"_2231-全屏","2.2.3.1 全屏",[19,118262,118263],{},[52,118264],{"alt":54,"src":118265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118267,118268],{},[52,118269],{"alt":54,"src":118270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22563,118272,118274],{"id":118273},"_2232-文件交换","2.2.3.2 文件交换",[19,118276,118277],{},[52,118278],{"alt":54,"src":118279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22563,118281,118283],{"id":118282},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118285,118286],{},[52,118287],{"alt":54,"src":118288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118290,118292],{"id":118291},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[129,118294,118296],{"id":118295},"_231-简介与优缺点","2.3.1 简介与优缺点",[29,118298,118299],{},[32,118300,118301],{},"什么情况下推荐？",[19,118303,118304],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[29,118306,118307],{"start":565},[32,118308,118309,118310],{},"优缺点：",[29,118311,118312,118342],{},[32,118313,118314,118315],{},"优点：",[29,118316,118317,118320,118327,118330,118333,118336,118339],{},[32,118318,118319],{},"WSL2是最好的Linux发行版;(bushi)",[32,118321,118322,118323,118326],{},"性能损耗极低。且比在Windows上跑深度性能 ",[45,118324,118325],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[32,118328,118329],{},"非常方便调用USB设备，可以USB直通;",[32,118331,118332],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[32,118334,118335],{},"非常方便Win与WSL2互相传文件等协同操作;",[32,118337,118338],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[32,118340,118341],{},"非常方便使用Windows的VScode远程开发;",[32,118343,118344,118345],{},"缺点：",[29,118346,118347],{},[32,118348,118349],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118351,118352],{},[52,118353],{"alt":54,"src":118354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[129,118356,118358],{"id":118357},"_232-安装教程","2.3.2 安装教程",[22563,118360,118362],{"id":118361},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[29,118364,118365],{},[32,118366,118367],{},"方法一(图形界面)",[19,118369,118370,118371,24998],{},"用Win+R输入",[475,118372,118373],{},"appwiz.cpl",[19,118375,118376],{},[52,118377],{"alt":54,"src":118378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118380,118381,118382,118385,118386,26853],{},"点击OK进入 ",[45,118383,118384],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[45,118387,118388],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118390,118391],{},[52,118392],{"alt":54,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118395,118396,118397,101398,118400,118403],{},"选择 ",[45,118398,118399],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[45,118401,118402],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118405,118406],{},[52,118407],{"alt":54,"src":118408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[29,118410,118411],{"start":565},[32,118412,118413],{},"方法二(命令行)",[469,118415,118419],{"className":118416,"code":118417,"language":118418,"meta":54,"style":54},"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",[475,118420,118421,118426,118431,118436],{"__ignoreMap":54},[478,118422,118423],{"class":480,"line":481},[478,118424,118425],{},"# 开启 Linux 子系统\n",[478,118427,118428],{"class":480,"line":565},[478,118429,118430],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[478,118432,118433],{"class":480,"line":579},[478,118434,118435],{},"# 开启虚拟机平台\n",[478,118437,118438],{"class":480,"line":593},[478,118439,118440],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22563,118442,118444],{"id":118443},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118446,118447],{},"用管理员权限打开powershell",[19,118449,118450],{},[52,118451],{"alt":54,"src":118452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118454,118455],{},"升级WSL并设置默认版本为WSL2",[469,118457,118459],{"className":118416,"code":118458,"language":118418,"meta":54,"style":54},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[475,118460,118461,118466,118471,118476],{"__ignoreMap":54},[478,118462,118463],{"class":480,"line":481},[478,118464,118465],{},"# 更新 wsl\n",[478,118467,118468],{"class":480,"line":565},[478,118469,118470],{},"wsl --update\n",[478,118472,118473],{"class":480,"line":579},[478,118474,118475],{},"# 将 wsl 版本设置为 wsl2\n",[478,118477,118478],{"class":480,"line":593},[478,118479,118480],{},"wsl --set-default-version 2\n",[22563,118482,118484],{"id":118483},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[29,118486,118487],{},[32,118488,118489],{},"方式一(商店下载)",[19,118491,118492],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118494,118495],{},[52,118496],{"alt":54,"src":118497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[29,118499,118500],{"start":565},[32,118501,118502],{},"方式二(命令行安装)",[469,118504,118506],{"className":118416,"code":118505,"language":118418,"meta":54,"style":54},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[475,118507,118508,118513,118518],{"__ignoreMap":54},[478,118509,118510],{"class":480,"line":481},[478,118511,118512],{},"# 列出可安装的 Linux 版本\n",[478,118514,118515],{"class":480,"line":565},[478,118516,118517],{},"#（需要科学手段）\n",[478,118519,118520],{"class":480,"line":579},[478,118521,118522],{},"wsl --list --online\n",[19,118524,118525],{},[52,118526],{"alt":54,"src":118527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118529,118530],{},"选择对应发行版并安装",[469,118532,118534],{"className":118416,"code":118533,"language":118418,"meta":54,"style":54},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[475,118535,118536,118541],{"__ignoreMap":54},[478,118537,118538],{"class":480,"line":481},[478,118539,118540],{},"# Ubuntu安装完毕后需要重启系统\n",[478,118542,118543],{"class":480,"line":565},[478,118544,118545],{},"wsl --install -d Ubuntu-24.04\n",[22563,118547,118549],{"id":118548},"_2324-查看系统状态","2.3.2.4 查看系统状态",[469,118551,118553],{"className":118416,"code":118552,"language":118418,"meta":54,"style":54},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[475,118554,118555,118560,118565,118570,118575,118579,118583,118588,118593,118598],{"__ignoreMap":54},[478,118556,118557],{"class":480,"line":481},[478,118558,118559],{},"# 查看 wsl\n",[478,118561,118562],{"class":480,"line":565},[478,118563,118564],{},"wsl -l\n",[478,118566,118567],{"class":480,"line":579},[478,118568,118569],{},"# 查看 wsl 运行版本或模式\n",[478,118571,118572],{"class":480,"line":593},[478,118573,118574],{},"wsl -l -v\n",[478,118576,118577],{"class":480,"line":1769},[478,118578,2966],{"emptyLinePlaceholder":640},[478,118580,118581],{"class":480,"line":1783},[478,118582,2966],{"emptyLinePlaceholder":640},[478,118584,118585],{"class":480,"line":1789},[478,118586,118587],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[478,118589,118590],{"class":480,"line":1880},[478,118591,118592],{},"wsl --set-version \u003Cdistro> 2\n",[478,118594,118595],{"class":480,"line":1886},[478,118596,118597],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[478,118599,118600],{"class":480,"line":1898},[478,118601,118602],{},"wsl --unregister \u003Cdistro>\n",[19,118604,118605],{},"输出Version为2即正常",[19,118607,118608],{},[52,118609],{"alt":54,"src":118610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22563,118612,118614],{"id":118613},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118616,118617],{},"直接在Powershell里输入wsl命令进入子系统",[469,118619,118621],{"className":118416,"code":118620,"language":118418,"meta":54,"style":54},"# 进入子系统\nwsl\n",[475,118622,118623,118628],{"__ignoreMap":54},[478,118624,118625],{"class":480,"line":481},[478,118626,118627],{},"# 进入子系统\n",[478,118629,118630],{"class":480,"line":565},[478,118631,118632],{},"wsl\n",[19,118634,118635],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118637,118638],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118640,118641],{},[52,118642],{"alt":54,"src":118643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[129,118645,118647],{"id":118646},"_233-配置各种环境","2.3.3 配置各种环境",[22563,118649,118651],{"id":118650},"_2331-换源","2.3.3.1 换源",[19,118653,118654],{},"(同实体机LINUX，往下找教程)",[22563,118656,118658],{"id":118657},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23475,118660,118662],{"id":118661},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118664,118665],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118667,118668],{},[52,118669],{"alt":54,"src":118670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118672,118673],{},[52,118674],{"alt":54,"src":118675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23475,118677,118679],{"id":118678},"_23322-cuda","2.3.3.2.2 CUDA",[19,118681,118682,118683],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[518,118684,118685],{"href":118685,"rel":118686},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[522],[19,118688,118689,118692],{},[52,118690],{"alt":54,"src":118691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[52,118693],{"alt":54,"src":118694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118696,118697],{},"在下方的网站，选择合适的版本。",[19,118699,118700,118701],{},"WSL2 专属 CUDA 指南：",[518,118702,118703],{"href":118703,"rel":118704},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[522],[19,118706,118707],{},[45,118708,118709],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118711,118712],{},[52,118713],{"alt":54,"src":118714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118716,118717],{},"挨行敲一遍",[19,118719,118720],{},[52,118721],{"alt":54,"src":118722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118724,118725,118726,118729],{},"敲完后，输入",[475,118727,118728],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118731,118732],{},[52,118733],{"alt":54,"src":118734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118736,118737,118738,118741],{},"（请详看下方教程的",[45,118739,118740],{},"安装CUDA的配置环境来看","如何配置环境）",[23475,118743,118745],{"id":118744},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118747,118654],{},[19,118749,118750],{},[52,118751],{"alt":54,"src":118752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22563,118754,118756],{"id":118755},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118758,118759],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118761,118762],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118764,118765],{},[52,118766],{"alt":54,"src":118767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118769,118770],{},"连接WSL2",[19,118772,118773],{},[52,118774],{"alt":54,"src":118775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118777,118778],{},"远程开发成功。",[19,118780,118781],{},[52,118782],{"alt":54,"src":118783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118785,118786],{},[52,118787],{"alt":54,"src":118788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118790,118791],{},[52,118792],{"alt":54,"src":118793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22563,118795,118797],{"id":118796},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118799,118800],{},[52,118801],{"alt":54,"src":118802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22563,118804,118806],{"id":118805},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[469,118808,118810],{"className":117676,"code":118809,"language":117678,"meta":54,"style":54},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[475,118811,118812,118820,118828,118839,118843],{"__ignoreMap":54},[478,118813,118814,118816,118818],{"class":480,"line":481},[478,118815,24956],{"class":484},[478,118817,117697],{"class":488},[478,118819,26622],{"class":488},[478,118821,118822,118824,118826],{"class":480,"line":565},[478,118823,24956],{"class":484},[478,118825,117697],{"class":488},[478,118827,117713],{"class":488},[478,118829,118830,118832,118834,118836],{"class":480,"line":579},[478,118831,24956],{"class":484},[478,118833,117697],{"class":488},[478,118835,489],{"class":488},[478,118837,118838],{"class":488}," mesa-utils\n",[478,118840,118841],{"class":480,"line":593},[478,118842,2966],{"emptyLinePlaceholder":640},[478,118844,118845],{"class":480,"line":1769},[478,118846,118847],{"class":770},"#然后重启wsl2即可\n",[617,118849,118850],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":54,"searchDepth":565,"depth":565,"links":118852},[118853,118854,118859],{"id":118130,"depth":565,"text":118131},{"id":118143,"depth":565,"text":118144,"children":118855},[118856,118857,118858],{"id":118147,"depth":579,"text":118148},{"id":118194,"depth":579,"text":118195},{"id":118255,"depth":579,"text":118256},{"id":118291,"depth":565,"text":118292,"children":118860},[118861,118862,118863],{"id":118295,"depth":579,"text":118296},{"id":118357,"depth":579,"text":118358},{"id":118646,"depth":579,"text":118647},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118122,"description":23942},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118870,"title":118871,"body":118872,"description":23942,"extension":638,"meta":121808,"navigation":640,"path":121809,"seo":121810,"stem":121811,"__hash__":121812},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118873,"toc":121780},[118874,118877,118881,118887,118891,118897,118901,119089,119092,119097,119101,119105,119108,119111,119117,119122,119125,119128,119133,119166,119171,119175,119252,119255,119260,119264,119267,119306,119309,119318,119336,119341,119348,119465,119470,119473,119500,119505,119509,119518,119568,119575,119579,119582,119596,119603,119637,119642,119646,119669,119672,119677,119681,119684,119687,119690,119732,119736,119739,119742,119783,119787,119791,119794,119799,119804,119807,119830,119833,119841,119846,119849,119854,119859,119862,119867,119871,119876,119899,119904,119966,119974,119979,119984,119987,119992,119995,120000,120005,120023,120028,120034,120039,120053,120057,120060,120063,120066,120109,120112,120117,120218,120221,120226,120230,120234,120271,120275,120279,120283,120329,120333,120378,120382,120389,120397,120452,120455,120532,120535,120558,120562,120565,120570,120575,120583,120586,120591,120596,120601,120604,120609,120618,120621,120626,120629,120700,120705,120708,120713,120716,120721,120724,120729,120732,120737,120742,120745,120820,120823,120836,120841,120844,120858,120861,120890,120895,120924,120927,120932,120936,120941,120950,120953,120958,120961,120966,120969,120972,120977,120980,120985,120990,120993,120998,121001,121126,121131,121161,121164,121169,121174,121191,121194,121237,121240,121267,121272,121285,121428,121432,121437,121451,121454,121505,121508,121538,121541,121557,121562,121576,121579,121646,121651,121660,121665,121668,121680,121685,121692,121716,121719,121724,121727,121746,121751,121758,121770,121777],[10,118875,118871],{"id":118876},"_3-安装必备配置",[14,118878,118880],{"id":118879},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[469,118882,118885],{"className":118883,"code":118884,"language":5753},[5751],"  打开下方网站（注意，该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",[475,118886,118884],{"__ignoreMap":54},[129,118888,118890],{"id":118889},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[469,118892,118895],{"className":118893,"code":118894,"language":5753},[5751],"  输入以下命令\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",[475,118896,118894],{"__ignoreMap":54},[129,118898,118900],{"id":118899},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[469,118902,118906],{"className":118903,"code":118904,"language":118905,"meta":54,"style":54},"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",[475,118907,118908,118916,118927,118939,118953,118957,118967,118972,118976,118980,118985,118989,119001,119005,119010,119014,119025,119029,119045,119049,119060,119064,119069,119073,119081],{"__ignoreMap":54},[478,118909,118910,118912,118914],{"class":480,"line":481},[478,118911,24956],{"class":484},[478,118913,117697],{"class":488},[478,118915,26622],{"class":488},[478,118917,118918,118920,118922,118924],{"class":480,"line":565},[478,118919,24956],{"class":484},[478,118921,117697],{"class":488},[478,118923,489],{"class":488},[478,118925,118926],{"class":488}," vim\n",[478,118928,118929,118931,118934,118936],{"class":480,"line":579},[478,118930,24956],{"class":484},[478,118932,118933],{"class":488}," rm",[478,118935,25705],{"class":495},[478,118937,118938],{"class":488}," \u002Fetc\u002Fapt\u002Fsources.list\n",[478,118940,118941,118943,118945,118947,118950],{"class":480,"line":593},[478,118942,24956],{"class":484},[478,118944,118933],{"class":488},[478,118946,25705],{"class":495},[478,118948,118949],{"class":488}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[478,118951,118952],{"class":495},"**\n",[478,118954,118955],{"class":480,"line":1769},[478,118956,2966],{"emptyLinePlaceholder":640},[478,118958,118959,118961,118964],{"class":480,"line":1783},[478,118960,24956],{"class":484},[478,118962,118963],{"class":488}," vim",[478,118965,118966],{"class":488}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[478,118968,118969],{"class":480,"line":1789},[478,118970,118971],{"class":488},"```\n",[478,118973,118974],{"class":480,"line":1880},[478,118975,2966],{"emptyLinePlaceholder":640},[478,118977,118978],{"class":480,"line":1886},[478,118979,2966],{"emptyLinePlaceholder":640},[478,118981,118982],{"class":480,"line":1898},[478,118983,118984],{"class":484},"选择好Ubuntu版本后，复制下方的内容。\n",[478,118986,118987],{"class":480,"line":2180},[478,118988,2966],{"emptyLinePlaceholder":640},[478,118990,118991,118993,118996,118999],{"class":480,"line":2185},[478,118992,929],{"class":710},[478,118994,118995],{"class":488},"[](",[478,118997,118998],{"class":484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[478,119000,720],{"class":488},[478,119002,119003],{"class":480,"line":2191},[478,119004,2966],{"emptyLinePlaceholder":640},[478,119006,119007],{"class":480,"line":2196},[478,119008,119009],{"class":484},"粘贴进去\n",[478,119011,119012],{"class":480,"line":2210},[478,119013,2966],{"emptyLinePlaceholder":640},[478,119015,119016,119018,119020,119023],{"class":480,"line":2215},[478,119017,929],{"class":710},[478,119019,118995],{"class":488},[478,119021,119022],{"class":484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[478,119024,720],{"class":488},[478,119026,119027],{"class":480,"line":2221},[478,119028,2966],{"emptyLinePlaceholder":640},[478,119030,119031,119034,119037,119040,119042],{"class":480,"line":2241},[478,119032,119033],{"class":484},"按一下ESC，然后英文冒号，输入",[478,119035,119036],{"class":488}," `",[478,119038,119039],{"class":484},":wq!",[478,119041,1667],{"class":488},[478,119043,119044],{"class":484},"然后回车\n",[478,119046,119047],{"class":480,"line":2246},[478,119048,2966],{"emptyLinePlaceholder":640},[478,119050,119051,119053,119055,119058],{"class":480,"line":2260},[478,119052,929],{"class":710},[478,119054,118995],{"class":488},[478,119056,119057],{"class":484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[478,119059,720],{"class":488},[478,119061,119062],{"class":480,"line":2265},[478,119063,2966],{"emptyLinePlaceholder":640},[478,119065,119066],{"class":480,"line":2294},[478,119067,119068],{"class":484},"输入以下命令\n",[478,119070,119071],{"class":480,"line":2299},[478,119072,2966],{"emptyLinePlaceholder":640},[478,119074,119075,119078],{"class":480,"line":2316},[478,119076,119077],{"class":488},"```",[478,119079,119080],{"class":484},"Bash\n",[478,119082,119083,119085,119087],{"class":480,"line":2321},[478,119084,24956],{"class":484},[478,119086,117697],{"class":488},[478,119088,26622],{"class":488},[19,119090,119091],{},"这里被替换成对应学校则成功",[19,119093,119094],{},[52,119095],{"alt":54,"src":119096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119098,119100],{"id":119099},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[129,119102,119104],{"id":119103},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119106,119107],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119109,119110],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119112,119113],{},[518,119114,119115],{"href":119115,"rel":119116},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[522],[19,119118,119119],{},[52,119120],{"alt":54,"src":119121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119123,119124],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119126,119127],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119129,119130],{},[52,119131],{"alt":54,"src":119132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[469,119134,119136],{"className":117676,"code":119135,"language":117678,"meta":54,"style":54},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[475,119137,119138,119143,119150,119155],{"__ignoreMap":54},[478,119139,119140],{"class":480,"line":481},[478,119141,119142],{"class":770},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[478,119144,119145,119147],{"class":480,"line":565},[478,119146,101656],{"class":495},[478,119148,119149],{"class":488}," ~\u002FDownloads\n",[478,119151,119152],{"class":480,"line":579},[478,119153,119154],{"class":770},"#下方chrome安装包名不一定是这个，根据名字来看\n",[478,119156,119157,119159,119161,119163],{"class":480,"line":593},[478,119158,24956],{"class":484},[478,119160,117697],{"class":488},[478,119162,489],{"class":488},[478,119164,119165],{"class":488}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119167,119168],{},[52,119169],{"alt":54,"src":119170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[129,119172,119174],{"id":119173},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[469,119176,119178],{"className":117676,"code":119177,"language":117678,"meta":54,"style":54},"# 老版\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",[475,119179,119180,119185,119193,119204,119209,119213,119218,119228,119236,119247],{"__ignoreMap":54},[478,119181,119182],{"class":480,"line":481},[478,119183,119184],{"class":770},"# 老版\n",[478,119186,119187,119189,119191],{"class":480,"line":565},[478,119188,24956],{"class":484},[478,119190,117697],{"class":488},[478,119192,26622],{"class":488},[478,119194,119195,119197,119199,119201],{"class":480,"line":579},[478,119196,24956],{"class":484},[478,119198,117697],{"class":488},[478,119200,489],{"class":488},[478,119202,119203],{"class":488}," neofetch\n",[478,119205,119206],{"class":480,"line":593},[478,119207,119208],{"class":484},"neofetch\n",[478,119210,119211],{"class":480,"line":1769},[478,119212,2966],{"emptyLinePlaceholder":640},[478,119214,119215],{"class":480,"line":1783},[478,119216,119217],{"class":770},"# 新版\n",[478,119219,119220,119222,119225],{"class":480,"line":1789},[478,119221,24956],{"class":484},[478,119223,119224],{"class":488}," add-apt-repository",[478,119226,119227],{"class":488}," ppa:zhangsongcui3371\u002Ffastfetch\n",[478,119229,119230,119232,119234],{"class":480,"line":1880},[478,119231,24956],{"class":484},[478,119233,117697],{"class":488},[478,119235,26622],{"class":488},[478,119237,119238,119240,119242,119244],{"class":480,"line":1886},[478,119239,24956],{"class":484},[478,119241,117697],{"class":488},[478,119243,489],{"class":488},[478,119245,119246],{"class":488}," fastfetch\n",[478,119248,119249],{"class":480,"line":1898},[478,119250,119251],{"class":484},"fastfetch\n",[19,119253,119254],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119256,119257],{},[52,119258],{"alt":54,"src":119259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[129,119261,119263],{"id":119262},"_323-移除snap应用","3.2.3 移除snap应用",[19,119265,119266],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[469,119268,119270],{"className":117676,"code":119269,"language":117678,"meta":54,"style":54},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[475,119271,119272,119284,119295],{"__ignoreMap":54},[478,119273,119274,119276,119278,119281],{"class":480,"line":481},[478,119275,24956],{"class":484},[478,119277,26893],{"class":488},[478,119279,119280],{"class":488}," disable",[478,119282,119283],{"class":488}," snapd.service\n",[478,119285,119286,119288,119290,119292],{"class":480,"line":565},[478,119287,24956],{"class":484},[478,119289,26893],{"class":488},[478,119291,119280],{"class":488},[478,119293,119294],{"class":488}," snapd.socket\n",[478,119296,119297,119299,119301,119303],{"class":480,"line":579},[478,119298,24956],{"class":484},[478,119300,26893],{"class":488},[478,119302,119280],{"class":488},[478,119304,119305],{"class":488}," snapd.seeded.service\n",[19,119307,119308],{},"然后查看snap应用列表",[19,119310,119311,119312,119317],{},"根据你安装的选择不同（最小安装或普通安装），有",[518,119313,119316],{"href":119314,"rel":119315},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[522],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[469,119319,119321],{"className":117676,"code":119320,"language":117678,"meta":54,"style":54},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[475,119322,119323,119328],{"__ignoreMap":54},[478,119324,119325],{"class":480,"line":481},[478,119326,119327],{"class":770},"# 查询当前系统上snap安装了哪些app\n",[478,119329,119330,119333],{"class":480,"line":565},[478,119331,119332],{"class":484},"snap",[478,119334,119335],{"class":488}," list\n",[19,119337,119338],{},[52,119339],{"alt":54,"src":119340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119342,119343,119344,119347],{},"卸载掉图中所有应用，按照 ",[45,119345,119346],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[469,119349,119351],{"className":117676,"code":119350,"language":117678,"meta":54,"style":54},"#移除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",[475,119352,119353,119358,119370,119375,119386,119391,119402,119407,119418,119423,119427,119432,119443,119454],{"__ignoreMap":54},[478,119354,119355],{"class":480,"line":481},[478,119356,119357],{"class":770},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[478,119359,119360,119362,119365,119367],{"class":480,"line":565},[478,119361,24956],{"class":484},[478,119363,119364],{"class":488}," snap",[478,119366,26459],{"class":488},[478,119368,119369],{"class":488}," snap-store\n",[478,119371,119372],{"class":480,"line":579},[478,119373,119374],{"class":770},"#移除firefox浏览器\n",[478,119376,119377,119379,119381,119383],{"class":480,"line":593},[478,119378,24956],{"class":484},[478,119380,119364],{"class":488},[478,119382,26459],{"class":488},[478,119384,119385],{"class":488}," firefox\n",[478,119387,119388],{"class":480,"line":1769},[478,119389,119390],{"class":770},"#移除gnome-42-2204\n",[478,119392,119393,119395,119397,119399],{"class":480,"line":1783},[478,119394,24956],{"class":484},[478,119396,119364],{"class":488},[478,119398,26459],{"class":488},[478,119400,119401],{"class":488}," gnome-42-2204\n",[478,119403,119404],{"class":480,"line":1789},[478,119405,119406],{"class":770},"#移除gtk-common-themes\n",[478,119408,119409,119411,119413,119415],{"class":480,"line":1880},[478,119410,24956],{"class":484},[478,119412,119364],{"class":488},[478,119414,26459],{"class":488},[478,119416,119417],{"class":488}," gtk-common-themes\n",[478,119419,119420],{"class":480,"line":1886},[478,119421,119422],{"class":770},"#移除其它...\n",[478,119424,119425],{"class":480,"line":1898},[478,119426,3240],{"class":714},[478,119428,119429],{"class":480,"line":2180},[478,119430,119431],{"class":770},"#移除core22,bare以及snapd\n",[478,119433,119434,119436,119438,119440],{"class":480,"line":2185},[478,119435,24956],{"class":484},[478,119437,119364],{"class":488},[478,119439,26459],{"class":488},[478,119441,119442],{"class":488}," core22\n",[478,119444,119445,119447,119449,119451],{"class":480,"line":2191},[478,119446,24956],{"class":484},[478,119448,119364],{"class":488},[478,119450,26459],{"class":488},[478,119452,119453],{"class":488}," bare\n",[478,119455,119456,119458,119460,119462],{"class":480,"line":2196},[478,119457,24956],{"class":484},[478,119459,119364],{"class":488},[478,119461,26459],{"class":488},[478,119463,119464],{"class":488}," snapd\n",[19,119466,119467],{},[52,119468],{"alt":54,"src":119469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119471,119472],{},"输入以下命令查看是否还有snap包",[469,119474,119476],{"className":117676,"code":119475,"language":117678,"meta":54,"style":54},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[475,119477,119478,119484,119488,119492,119496],{"__ignoreMap":54},[478,119479,119480,119482],{"class":480,"line":481},[478,119481,119332],{"class":484},[478,119483,119335],{"class":488},[478,119485,119486],{"class":480,"line":565},[478,119487,119184],{"class":770},[478,119489,119490],{"class":480,"line":579},[478,119491,119208],{"class":484},[478,119493,119494],{"class":480,"line":593},[478,119495,119217],{"class":770},[478,119497,119498],{"class":480,"line":1769},[478,119499,119251],{"class":484},[19,119501,119502],{},[52,119503],{"alt":54,"src":119504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[129,119506,119508],{"id":119507},"_324-移除snap","3.2.4 移除snap",[19,119510,119511,119512,119517],{},"在删除掉",[518,119513,119516],{"href":119514,"rel":119515},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[522],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[469,119519,119521],{"className":117676,"code":119520,"language":117678,"meta":54,"style":54}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[475,119522,119523,119528,119541,119546,119557],{"__ignoreMap":54},[478,119524,119525],{"class":480,"line":481},[478,119526,119527],{"class":770}," #使用apt移除掉snap\n",[478,119529,119530,119532,119534,119536,119539],{"class":480,"line":565},[478,119531,24956],{"class":484},[478,119533,117697],{"class":488},[478,119535,118005],{"class":488},[478,119537,119538],{"class":495}," --purge",[478,119540,119464],{"class":488},[478,119542,119543],{"class":480,"line":579},[478,119544,119545],{"class":770},"#移除snapd的一些目录\n",[478,119547,119548,119550,119552,119554],{"class":480,"line":593},[478,119549,24956],{"class":484},[478,119551,118933],{"class":488},[478,119553,25705],{"class":495},[478,119555,119556],{"class":488}," \u002Fvar\u002Fcache\u002Fsnapd\n",[478,119558,119559,119561,119563,119565],{"class":480,"line":1769},[478,119560,24956],{"class":484},[478,119562,118933],{"class":488},[478,119564,25705],{"class":495},[478,119566,119567],{"class":488}," ~\u002Fsnap\n",[19,119569,119570,119571,119574],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[475,119572,119573],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[129,119576,119578],{"id":119577},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119580,119581],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[469,119583,119585],{"className":117676,"code":119584,"language":117678,"meta":54,"style":54},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[475,119586,119587],{"__ignoreMap":54},[478,119588,119589,119591,119593],{"class":480,"line":481},[478,119590,24956],{"class":484},[478,119592,118963],{"class":488},[478,119594,119595],{"class":488}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119597,119598,119599,119602],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[475,119600,119601],{},":wq"," 回车",[469,119604,119606],{"className":117676,"code":119605,"language":117678,"meta":54,"style":54},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[475,119607,119608,119615,119629],{"__ignoreMap":54},[478,119609,119610,119613],{"class":480,"line":481},[478,119611,119612],{"class":484},"Package:",[478,119614,119464],{"class":488},[478,119616,119617,119620,119623,119626],{"class":480,"line":565},[478,119618,119619],{"class":484},"Pin:",[478,119621,119622],{"class":488}," release",[478,119624,119625],{"class":488}," a=",[478,119627,119628],{"class":495},"*\n",[478,119630,119631,119634],{"class":480,"line":579},[478,119632,119633],{"class":484},"Pin-Priority:",[478,119635,119636],{"class":495}," -10\n",[19,119638,119639],{},[52,119640],{"alt":54,"src":119641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[129,119643,119645],{"id":119644},"_326-测试是否成功","3.2.6 测试是否成功",[469,119647,119649],{"className":117676,"code":119648,"language":117678,"meta":54,"style":54},"sudo apt update\nsudo apt install firefox\n",[475,119650,119651,119659],{"__ignoreMap":54},[478,119652,119653,119655,119657],{"class":480,"line":481},[478,119654,24956],{"class":484},[478,119656,117697],{"class":488},[478,119658,26622],{"class":488},[478,119660,119661,119663,119665,119667],{"class":480,"line":565},[478,119662,24956],{"class":484},[478,119664,117697],{"class":488},[478,119666,489],{"class":488},[478,119668,119385],{"class":488},[19,119670,119671],{},"这里提示snapd无法被安装，就证明成功了",[19,119673,119674],{},[52,119675],{"alt":54,"src":119676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[129,119678,119680],{"id":119679},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119682,119683],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119685,119686],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119688,119689],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[469,119691,119693],{"className":117676,"code":119692,"language":117678,"meta":54,"style":54},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[475,119694,119695,119700,119709,119714,119722],{"__ignoreMap":54},[478,119696,119697],{"class":480,"line":481},[478,119698,119699],{"class":770},"# 添加Mozilla提供的源\n",[478,119701,119702,119704,119706],{"class":480,"line":565},[478,119703,24956],{"class":484},[478,119705,119224],{"class":488},[478,119707,119708],{"class":488}," ppa:mozillateam\u002Fppa\n",[478,119710,119711],{"class":480,"line":579},[478,119712,119713],{"class":770},"# 安装Firefox\n",[478,119715,119716,119718,119720],{"class":480,"line":593},[478,119717,24956],{"class":484},[478,119719,117697],{"class":488},[478,119721,26622],{"class":488},[478,119723,119724,119726,119728,119730],{"class":480,"line":1769},[478,119725,24956],{"class":484},[478,119727,117697],{"class":488},[478,119729,489],{"class":488},[478,119731,119385],{"class":488},[129,119733,119735],{"id":119734},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119737,119738],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119740,119741],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[469,119743,119745],{"className":117676,"code":119744,"language":117678,"meta":54,"style":54},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[475,119746,119747,119752,119762,119770,119774],{"__ignoreMap":54},[478,119748,119749],{"class":480,"line":481},[478,119750,119751],{"class":770},"#删掉禁止安装snap的配置文件\n",[478,119753,119754,119756,119758,119760],{"class":480,"line":565},[478,119755,24956],{"class":484},[478,119757,118933],{"class":488},[478,119759,25705],{"class":495},[478,119761,119595],{"class":488},[478,119763,119764,119766,119768],{"class":480,"line":579},[478,119765,24956],{"class":484},[478,119767,117697],{"class":488},[478,119769,26622],{"class":488},[478,119771,119772],{"class":480,"line":593},[478,119773,2966],{"emptyLinePlaceholder":640},[478,119775,119776,119778,119780],{"class":480,"line":1769},[478,119777,24956],{"class":484},[478,119779,117697],{"class":488},[478,119781,119782],{"class":488}," dist-update\n",[14,119784,119786],{"id":119785},"_33-中文输入法","3.3 中文输入法",[129,119788,119790],{"id":119789},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119792,119793],{},"官网下载搜狗输入法",[19,119795,119796],{},[52,119797],{"alt":54,"src":119798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119800,119801],{},[52,119802],{"alt":54,"src":119803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119805,119806],{},"打开终端输入如下",[469,119808,119810],{"className":117676,"code":119809,"language":117678,"meta":54,"style":54},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[475,119811,119812,119819],{"__ignoreMap":54},[478,119813,119814,119816],{"class":480,"line":481},[478,119815,101656],{"class":495},[478,119817,119818],{"class":488}," ~\u002FDownloads\u002F\n",[478,119820,119821,119823,119825,119827],{"class":480,"line":565},[478,119822,24956],{"class":484},[478,119824,117697],{"class":488},[478,119826,489],{"class":488},[478,119828,119829],{"class":488}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119831,119832],{},"打开Fcitx",[19,119834,119835,119838],{},[52,119836],{"alt":54,"src":119837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[52,119839],{"alt":54,"src":119840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119842,119843],{},[52,119844],{"alt":54,"src":119845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119847,119848],{},"添加搜狗输入法",[19,119850,119851],{},[52,119852],{"alt":54,"src":119853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119855,119856],{},[52,119857],{"alt":54,"src":119858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119860,119861],{},"将搜狗输入法设置为唯一输入法",[19,119863,119864],{},[52,119865],{"alt":54,"src":119866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[129,119868,119870],{"id":119869},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[29,119872,119873],{},[32,119874,119875],{},"卸载旧输入法",[469,119877,119879],{"className":118903,"code":119878,"language":118905,"meta":54,"style":54},"sudo apt purge fcitx* ibus*\n",[475,119880,119881],{"__ignoreMap":54},[478,119882,119883,119885,119887,119889,119892,119894,119897],{"class":480,"line":481},[478,119884,24956],{"class":484},[478,119886,117697],{"class":488},[478,119888,118038],{"class":488},[478,119890,119891],{"class":488}," fcitx",[478,119893,1155],{"class":495},[478,119895,119896],{"class":488}," ibus",[478,119898,119628],{"class":495},[29,119900,119901],{"start":565},[32,119902,119903],{},"安装Fcitx5",[469,119905,119907],{"className":117676,"code":119906,"language":117678,"meta":54,"style":54},"# 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",[475,119908,119909,119914,119928,119932,119937,119946,119954],{"__ignoreMap":54},[478,119910,119911],{"class":480,"line":481},[478,119912,119913],{"class":770},"# Ubuntu22.04及以上、Debian12及以上\n",[478,119915,119916,119918,119920,119922,119925],{"class":480,"line":565},[478,119917,24956],{"class":484},[478,119919,117697],{"class":488},[478,119921,489],{"class":488},[478,119923,119924],{"class":488}," fcitx5",[478,119926,119927],{"class":488}," fcitx5-chinese-addons\n",[478,119929,119930],{"class":480,"line":579},[478,119931,2966],{"emptyLinePlaceholder":640},[478,119933,119934],{"class":480,"line":593},[478,119935,119936],{"class":770},"# Ubuntu20.04\n",[478,119938,119939,119941,119943],{"class":480,"line":1769},[478,119940,24956],{"class":484},[478,119942,119224],{"class":488},[478,119944,119945],{"class":488}," ppa:zhsj\u002Ffcitx5\n",[478,119947,119948,119950,119952],{"class":480,"line":1783},[478,119949,24956],{"class":484},[478,119951,117697],{"class":488},[478,119953,26622],{"class":488},[478,119955,119956,119958,119960,119962,119964],{"class":480,"line":1789},[478,119957,24956],{"class":484},[478,119959,117697],{"class":488},[478,119961,489],{"class":488},[478,119963,119924],{"class":488},[478,119965,119927],{"class":488},[29,119967,119968,119971],{"start":579},[32,119969,119970],{},"Reboot System",[32,119972,119973],{},"启动Fcitx5",[19,119975,119976],{},[52,119977],{"alt":54,"src":119978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[29,119980,119981],{"start":1769},[32,119982,119983],{},"修改一些设置",[19,119985,119986],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119988,119989],{},[52,119990],{"alt":54,"src":119991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119993,119994],{},"添加快捷键以便于更好切换中英文",[19,119996,119997],{},[52,119998],{"alt":54,"src":119999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[29,120001,120002],{"start":1783},[32,120003,120004],{},"重启",[469,120006,120008],{"className":118903,"code":120007,"language":118905,"meta":54,"style":54},"sudo shutdown -r now\n",[475,120009,120010],{"__ignoreMap":54},[478,120011,120012,120014,120017,120020],{"class":480,"line":481},[478,120013,24956],{"class":484},[478,120015,120016],{"class":488}," shutdown",[478,120018,120019],{"class":495}," -r",[478,120021,120022],{"class":488}," now\n",[29,120024,120025],{"start":1789},[32,120026,120027],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120029,120030],{},[518,120031,120032],{"href":120032,"rel":120033},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[522],[29,120035,120036],{"start":1880},[32,120037,120038],{},"再重启",[469,120040,120041],{"className":118903,"code":120007,"language":118905,"meta":54,"style":54},[475,120042,120043],{"__ignoreMap":54},[478,120044,120045,120047,120049,120051],{"class":480,"line":481},[478,120046,24956],{"class":484},[478,120048,120016],{"class":488},[478,120050,120019],{"class":495},[478,120052,120022],{"class":488},[14,120054,120056],{"id":120055},"_34-pip3源替换","3.4 pip3源替换",[19,120058,120059],{},"非Debian系发行版需要做。",[19,120061,120062],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120064,120065],{},"使用dnf的系统也可能不用做。",[469,120067,120069],{"className":117676,"code":120068,"language":117678,"meta":54,"style":54},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[475,120070,120071,120076,120083,120088,120093],{"__ignoreMap":54},[478,120072,120073],{"class":480,"line":481},[478,120074,120075],{"class":770},"# 检查是否已安装 pip\n",[478,120077,120078,120081],{"class":480,"line":565},[478,120079,120080],{"class":484},"pip3",[478,120082,26673],{"class":495},[478,120084,120085],{"class":480,"line":579},[478,120086,120087],{"class":770},"# 如果未安装，先安装 pip3（见下方）\n",[478,120089,120090],{"class":480,"line":593},[478,120091,120092],{"class":770},"# 配置 pip 使用清华源\n",[478,120094,120095,120097,120100,120103,120106],{"class":480,"line":1769},[478,120096,120080],{"class":484},[478,120098,120099],{"class":488}," config",[478,120101,120102],{"class":488}," set",[478,120104,120105],{"class":488}," global.index-url",[478,120107,120108],{"class":488}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120110,120111],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120113,120114],{},[52,120115],{"alt":54,"src":120116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[469,120118,120120],{"className":117676,"code":120119,"language":117678,"meta":54,"style":54},"#安装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",[475,120121,120122,120127,120135,120146,120150,120155,120174,120178,120183,120195,120199,120204],{"__ignoreMap":54},[478,120123,120124],{"class":480,"line":481},[478,120125,120126],{"class":770},"#安装pip3\n",[478,120128,120129,120131,120133],{"class":480,"line":565},[478,120130,24956],{"class":484},[478,120132,117697],{"class":488},[478,120134,26622],{"class":488},[478,120136,120137,120139,120141,120143],{"class":480,"line":579},[478,120138,24956],{"class":484},[478,120140,26456],{"class":488},[478,120142,489],{"class":488},[478,120144,120145],{"class":488}," python3-pip\n",[478,120147,120148],{"class":480,"line":593},[478,120149,2966],{"emptyLinePlaceholder":640},[478,120151,120152],{"class":480,"line":1769},[478,120153,120154],{"class":770},"#更新pip3\n",[478,120156,120157,120159,120161,120163,120165,120167,120170,120172],{"class":480,"line":1783},[478,120158,101259],{"class":484},[478,120160,101262],{"class":495},[478,120162,101285],{"class":488},[478,120164,489],{"class":488},[478,120166,26810],{"class":495},[478,120168,120169],{"class":488}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[478,120171,101290],{"class":495},[478,120173,101293],{"class":488},[478,120175,120176],{"class":480,"line":1789},[478,120177,2966],{"emptyLinePlaceholder":640},[478,120179,120180],{"class":480,"line":1880},[478,120181,120182],{"class":770},"#设置pip源为清华源\n",[478,120184,120185,120187,120189,120191,120193],{"class":480,"line":1886},[478,120186,120080],{"class":484},[478,120188,120099],{"class":488},[478,120190,120102],{"class":488},[478,120192,120105],{"class":488},[478,120194,120108],{"class":488},[478,120196,120197],{"class":480,"line":1898},[478,120198,2966],{"emptyLinePlaceholder":640},[478,120200,120201],{"class":480,"line":2180},[478,120202,120203],{"class":770},"#测试\n",[478,120205,120206,120208,120210,120212,120214,120216],{"class":480,"line":2185},[478,120207,101259],{"class":484},[478,120209,101262],{"class":495},[478,120211,101285],{"class":488},[478,120213,489],{"class":488},[478,120215,101290],{"class":495},[478,120217,101293],{"class":488},[19,120219,120220],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120222,120223],{},[52,120224],{"alt":54,"src":120225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120227,120229],{"id":120228},"_35-显卡驱动安装","3.5 显卡驱动安装",[129,120231,120233],{"id":120232},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[469,120235,120237],{"className":118903,"code":120236,"language":118905,"meta":54,"style":54},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[475,120238,120239,120244,120259,120264],{"__ignoreMap":54},[478,120240,120241],{"class":480,"line":481},[478,120242,120243],{"class":770},"# 如果是使用apt安装的驱动\n",[478,120245,120246,120248,120250,120252,120254,120257],{"class":480,"line":565},[478,120247,24956],{"class":484},[478,120249,26456],{"class":488},[478,120251,26459],{"class":488},[478,120253,119538],{"class":495},[478,120255,120256],{"class":488}," nvidia",[478,120258,119628],{"class":495},[478,120260,120261],{"class":480,"line":579},[478,120262,120263],{"class":770},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[478,120265,120266,120268],{"class":480,"line":593},[478,120267,24956],{"class":484},[478,120269,120270],{"class":488}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[129,120272,120274],{"id":120273},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22563,120276,120278],{"id":120277},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23475,120280,120282],{"id":120281},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[469,120284,120286],{"className":118903,"code":120285,"language":118905,"meta":54,"style":54},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[475,120287,120288,120293,120304,120309,120319,120324],{"__ignoreMap":54},[478,120289,120290],{"class":480,"line":481},[478,120291,120292],{"class":770},"# 安装英伟达驱动\n",[478,120294,120295,120297,120299,120301],{"class":480,"line":565},[478,120296,24956],{"class":484},[478,120298,117697],{"class":488},[478,120300,489],{"class":488},[478,120302,120303],{"class":488}," nvidia-driver-版本号\n",[478,120305,120306],{"class":480,"line":579},[478,120307,120308],{"class":770},"# 重启 \n",[478,120310,120311,120313,120315,120317],{"class":480,"line":593},[478,120312,24956],{"class":484},[478,120314,120016],{"class":488},[478,120316,120019],{"class":495},[478,120318,120022],{"class":488},[478,120320,120321],{"class":480,"line":1769},[478,120322,120323],{"class":770},"# 检查驱动是否安装成功\n",[478,120325,120326],{"class":480,"line":1783},[478,120327,120328],{"class":484},"nvidia-smi\n",[23475,120330,120332],{"id":120331},"_35212-debian","3.5.2.1.2 Debian",[469,120334,120336],{"className":118903,"code":120335,"language":118905,"meta":54,"style":54},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[475,120337,120338,120342,120356,120360,120370,120374],{"__ignoreMap":54},[478,120339,120340],{"class":480,"line":481},[478,120341,120292],{"class":770},[478,120343,120344,120346,120348,120350,120353],{"class":480,"line":565},[478,120345,24956],{"class":484},[478,120347,117697],{"class":488},[478,120349,489],{"class":488},[478,120351,120352],{"class":488}," nvidia-driver",[478,120354,120355],{"class":488}," nvidia-settings\n",[478,120357,120358],{"class":480,"line":579},[478,120359,120308],{"class":770},[478,120361,120362,120364,120366,120368],{"class":480,"line":593},[478,120363,24956],{"class":484},[478,120365,120016],{"class":488},[478,120367,120019],{"class":495},[478,120369,120022],{"class":488},[478,120371,120372],{"class":480,"line":1769},[478,120373,120323],{"class":770},[478,120375,120376],{"class":480,"line":1783},[478,120377,120328],{"class":484},[22563,120379,120381],{"id":120380},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120383,120384,120385,120388],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[45,120386,120387],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120390,120391,120392],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[183,120393,120394],{},[45,120395,120396],{},"（也可以不禁用桌面环境，直接进行下一步。）",[469,120398,120400],{"className":118903,"code":120399,"language":118905,"meta":54,"style":54},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[475,120401,120402,120407,120417,120422,120435,120440],{"__ignoreMap":54},[478,120403,120404],{"class":480,"line":481},[478,120405,120406],{"class":770},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[478,120408,120409,120411,120414],{"class":480,"line":565},[478,120410,24956],{"class":484},[478,120412,120413],{"class":488}," telinit",[478,120415,120416],{"class":495}," 3\n",[478,120418,120419],{"class":480,"line":579},[478,120420,120421],{"class":770},"# ubuntu 使用下方命令\n",[478,120423,120424,120426,120429,120432],{"class":480,"line":593},[478,120425,24956],{"class":484},[478,120427,120428],{"class":488}," service",[478,120430,120431],{"class":488}," lightdm",[478,120433,120434],{"class":488}," stop\n",[478,120436,120437],{"class":480,"line":1769},[478,120438,120439],{"class":770},"# Fedora 使用下方命令\n",[478,120441,120442,120444,120446,120449],{"class":480,"line":1783},[478,120443,24956],{"class":484},[478,120445,26893],{"class":488},[478,120447,120448],{"class":488}," isolate",[478,120450,120451],{"class":488}," multi-user.target\n",[19,120453,120454],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[469,120456,120458],{"className":118903,"code":120457,"language":118905,"meta":54,"style":54},"# 编译环境+准备工作\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",[475,120459,120460,120465,120476,120481,120488,120493,120505,120510,120517,120522],{"__ignoreMap":54},[478,120461,120462],{"class":480,"line":481},[478,120463,120464],{"class":770},"# 编译环境+准备工作\n",[478,120466,120467,120469,120471,120473],{"class":480,"line":565},[478,120468,24956],{"class":484},[478,120470,117697],{"class":488},[478,120472,489],{"class":488},[478,120474,120475],{"class":488}," build-essential\n",[478,120477,120478],{"class":480,"line":579},[478,120479,120480],{"class":770},"# 进入到.run目录中\n",[478,120482,120483,120485],{"class":480,"line":593},[478,120484,101656],{"class":495},[478,120486,120487],{"class":488}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[478,120489,120490],{"class":480,"line":1769},[478,120491,120492],{"class":770},"# 给驱动文件增加可执行权限：\n",[478,120494,120495,120497,120499,120502],{"class":480,"line":1783},[478,120496,24956],{"class":484},[478,120498,24959],{"class":488},[478,120500,120501],{"class":488}," a+x",[478,120503,120504],{"class":488}," NVIDIA-Linux-x86_64-550.107.02.run\n",[478,120506,120507],{"class":480,"line":1789},[478,120508,120509],{"class":770},"# 然后执行安装：\n",[478,120511,120512,120514],{"class":480,"line":1880},[478,120513,24956],{"class":484},[478,120515,120516],{"class":488}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[478,120518,120519],{"class":480,"line":1886},[478,120520,120521],{"class":770},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[478,120523,120524,120526,120529],{"class":480,"line":1898},[478,120525,24956],{"class":484},[478,120527,120528],{"class":488}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[478,120530,120531],{"class":495},"  --no-opengl-files\n",[19,120533,120534],{},"安装完毕重启即可",[469,120536,120538],{"className":118903,"code":120537,"language":118905,"meta":54,"style":54},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[475,120539,120540,120544,120550,120554],{"__ignoreMap":54},[478,120541,120542],{"class":480,"line":481},[478,120543,120308],{"class":770},[478,120545,120546,120548],{"class":480,"line":565},[478,120547,24956],{"class":484},[478,120549,27027],{"class":488},[478,120551,120552],{"class":480,"line":579},[478,120553,120323],{"class":770},[478,120555,120556],{"class":480,"line":593},[478,120557,120328],{"class":484},[129,120559,120561],{"id":120560},"_353-安装cuda","3.5.3 安装CUDA",[19,120563,120564],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120566,120567],{},[52,120568],{"alt":54,"src":120569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[29,120571,120572],{},[32,120573,120574],{},"先查看显卡驱动所支持的最高CUDA版本",[469,120576,120577],{"className":118903,"code":120328,"language":118905,"meta":54,"style":54},[475,120578,120579],{"__ignoreMap":54},[478,120580,120581],{"class":480,"line":481},[478,120582,120328],{"class":484},[19,120584,120585],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120587,120588],{},[52,120589],{"alt":54,"src":120590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[29,120592,120593],{"start":565},[32,120594,120595],{},"下载CUDA并安装CUDA",[19,120597,118682,120598],{},[518,120599,118685],{"href":118685,"rel":120600},[522],[19,120602,120603],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120605,120606],{},[52,120607],{"alt":54,"src":120608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120610,120611,120612,120617],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[518,120613,120616],{"href":120614,"rel":120615},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[522],"Vinci机器人队单片机教程","）",[19,120619,120620],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120622,120623],{},[52,120624],{"alt":54,"src":120625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120627,120628],{},"将最下方框框里的命令敲入终端",[469,120630,120632],{"className":118903,"code":120631,"language":118905,"meta":54,"style":54},"# 在当前文件夹下创建一个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",[475,120633,120634,120639,120648,120653,120660,120665,120673,120678,120689,120694],{"__ignoreMap":54},[478,120635,120636],{"class":480,"line":481},[478,120637,120638],{"class":770},"# 在当前文件夹下创建一个ttt的子文件夹\n",[478,120640,120641,120643,120645],{"class":480,"line":565},[478,120642,101646],{"class":484},[478,120644,29596],{"class":495},[478,120646,120647],{"class":488}," .\u002Fttt\n",[478,120649,120650],{"class":480,"line":579},[478,120651,120652],{"class":770},"# 进入ttt文件夹\n",[478,120654,120655,120657],{"class":480,"line":593},[478,120656,101656],{"class":495},[478,120658,120659],{"class":488}," ttt\n",[478,120661,120662],{"class":480,"line":1769},[478,120663,120664],{"class":770},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[478,120666,120667,120670],{"class":480,"line":1783},[478,120668,120669],{"class":484},"wget",[478,120671,120672],{"class":488}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[478,120674,120675],{"class":480,"line":1789},[478,120676,120677],{"class":770},"# 给予权限\n",[478,120679,120680,120682,120684,120686],{"class":480,"line":1880},[478,120681,24956],{"class":484},[478,120683,24959],{"class":488},[478,120685,120501],{"class":488},[478,120687,120688],{"class":488}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[478,120690,120691],{"class":480,"line":1886},[478,120692,120693],{"class":770},"# 运行脚本\n",[478,120695,120696,120698],{"class":480,"line":1898},[478,120697,24956],{"class":484},[478,120699,120688],{"class":488},[19,120701,120702],{},[52,120703],{"alt":54,"src":120704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120706,120707],{},"正在安装中：",[19,120709,120710],{},[52,120711],{"alt":54,"src":120712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120714,120715],{},"输入accept接受即可",[19,120717,120718],{},[52,120719],{"alt":54,"src":120720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120722,120723],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120725,120726],{},[52,120727],{"alt":54,"src":120728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120730,120731],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120733,120734],{},[52,120735],{"alt":54,"src":120736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[29,120738,120739],{"start":579},[32,120740,120741],{},"配置环境",[19,120743,120744],{},"根据上方确认一下路径，比如我上面红色框起来的为",[469,120746,120748],{"className":118903,"code":120747,"language":118905,"meta":54,"style":54},"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",[475,120749,120750,120766,120781],{"__ignoreMap":54},[478,120751,120752,120755,120758,120761,120764],{"class":480,"line":481},[478,120753,120754],{"class":484},"Please",[478,120756,120757],{"class":488}," make",[478,120759,120760],{"class":488}," sure",[478,120762,120763],{"class":488}," that",[478,120765,3240],{"class":714},[478,120767,120768,120770,120773,120776,120779],{"class":480,"line":565},[478,120769,52651],{"class":484},[478,120771,120772],{"class":488},"   PATH",[478,120774,120775],{"class":488}," includes",[478,120777,120778],{"class":488}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[478,120780,3240],{"class":714},[478,120782,120783,120785,120788,120790,120793,120796,120798,120801,120804,120807,120810,120812,120815,120817],{"class":480,"line":579},[478,120784,52651],{"class":484},[478,120786,120787],{"class":488},"   LD_LIBRARY_PATH",[478,120789,120775],{"class":488},[478,120791,120792],{"class":488}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[478,120794,120795],{"class":488}," or,",[478,120797,5775],{"class":488},[478,120799,120800],{"class":488}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[478,120802,120803],{"class":488}," to",[478,120805,120806],{"class":488}," \u002Fetc\u002Fld.so.conf",[478,120808,120809],{"class":488}," and",[478,120811,27610],{"class":488},[478,120813,120814],{"class":488}," ldconfig",[478,120816,64984],{"class":488},[478,120818,120819],{"class":488}," root\n",[19,120821,120822],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[469,120824,120826],{"className":118903,"code":120825,"language":118905,"meta":54,"style":54},"which nvcc\n",[475,120827,120828],{"__ignoreMap":54},[478,120829,120830,120833],{"class":480,"line":481},[478,120831,120832],{"class":495},"which",[478,120834,120835],{"class":488}," nvcc\n",[19,120837,120838],{},[52,120839],{"alt":54,"src":120840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120842,120843],{},"所以我进行以下操作：",[469,120845,120847],{"className":118903,"code":120846,"language":118905,"meta":54,"style":54},"sudo vim ~\u002F.bashrc\n",[475,120848,120849],{"__ignoreMap":54},[478,120850,120851,120853,120855],{"class":480,"line":481},[478,120852,24956],{"class":484},[478,120854,118963],{"class":488},[478,120856,120857],{"class":488}," ~\u002F.bashrc\n",[19,120859,120860],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[469,120862,120864],{"className":118903,"code":120863,"language":118905,"meta":54,"style":54},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[475,120865,120866,120878],{"__ignoreMap":54},[478,120867,120868,120870,120873,120875],{"class":480,"line":481},[478,120869,25422],{"class":710},[478,120871,120872],{"class":714}," PATH",[478,120874,759],{"class":710},[478,120876,120877],{"class":714},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[478,120879,120880,120882,120885,120887],{"class":480,"line":565},[478,120881,25422],{"class":710},[478,120883,120884],{"class":714}," LD_LIBRARY_PATH",[478,120886,759],{"class":710},[478,120888,120889],{"class":714},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120891,120892],{},[52,120893],{"alt":54,"src":120894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[469,120896,120898],{"className":118903,"code":120897,"language":118905,"meta":54,"style":54},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[475,120899,120900,120905,120911,120916],{"__ignoreMap":54},[478,120901,120902],{"class":480,"line":481},[478,120903,120904],{"class":770},"# 刷新当前终端的环境变量\n",[478,120906,120907,120909],{"class":480,"line":565},[478,120908,101273],{"class":495},[478,120910,120857],{"class":488},[478,120912,120913],{"class":480,"line":579},[478,120914,120915],{"class":770},"# 验证CUDA是否安装成功\n",[478,120917,120918,120921],{"class":480,"line":593},[478,120919,120920],{"class":484},"nvcc",[478,120922,120923],{"class":495}," -V\n",[19,120925,120926],{},"出现下图这种则安装成功。",[19,120928,120929],{},[52,120930],{"alt":54,"src":120931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[129,120933,120935],{"id":120934},"_354-安装cudnn","3.5.4 安装cuDNN",[29,120937,120938],{},[32,120939,120940],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120942,120943,120944,120949],{},"前往 NVIDIA cuDNN 下载页面：",[518,120945,120948],{"href":120946,"rel":120947},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[522],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120951,120952],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120954,120955],{},[52,120956],{"alt":54,"src":120957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120959,120960],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120962,120963],{},[52,120964],{"alt":54,"src":120965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120967,120968],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120970,120971],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120973,120974],{},[45,120975,120976],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120978,120979],{},"下载好的：",[19,120981,120982],{},[52,120983],{"alt":54,"src":120984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[29,120986,120987],{"start":565},[32,120988,120989],{},"安装cuDNN",[19,120991,120992],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120994,120995],{},[52,120996],{"alt":54,"src":120997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120999,121000],{},"解压文件，并复制到对应位置完成安装",[469,121002,121004],{"className":118903,"code":121003,"language":118905,"meta":54,"style":54},"# 解压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",[475,121005,121006,121011,121022,121027,121034,121039,121055,121069,121074,121085,121094,121098,121114],{"__ignoreMap":54},[478,121007,121008],{"class":480,"line":481},[478,121009,121010],{"class":770},"# 解压cuDNN文件\n",[478,121012,121013,121016,121019],{"class":480,"line":565},[478,121014,121015],{"class":484},"tar",[478,121017,121018],{"class":495}," -xvf",[478,121020,121021],{"class":488}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[478,121023,121024],{"class":480,"line":579},[478,121025,121026],{"class":770},"# cd进文件夹\n",[478,121028,121029,121031],{"class":480,"line":593},[478,121030,101656],{"class":495},[478,121032,121033],{"class":488}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[478,121035,121036],{"class":480,"line":1769},[478,121037,121038],{"class":770},"# 复制cuDNN文件到CUDA目录\n",[478,121040,121041,121043,121045,121048,121050,121053],{"class":480,"line":1783},[478,121042,24956],{"class":484},[478,121044,28241],{"class":488},[478,121046,121047],{"class":488}," include\u002Fcudnn",[478,121049,1155],{"class":495},[478,121051,121052],{"class":488},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[478,121054,3240],{"class":714},[478,121056,121057,121059,121061,121064,121066],{"class":480,"line":1789},[478,121058,24956],{"class":484},[478,121060,28241],{"class":488},[478,121062,121063],{"class":488}," lib\u002Flibcudnn",[478,121065,1155],{"class":495},[478,121067,121068],{"class":488},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[478,121070,121071],{"class":480,"line":1880},[478,121072,121073],{"class":770},"# 对比一下有没有缺文件\n",[478,121075,121076,121078,121081,121083],{"class":480,"line":1886},[478,121077,27141],{"class":484},[478,121079,121080],{"class":488}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[478,121082,1155],{"class":495},[478,121084,3240],{"class":714},[478,121086,121087,121089,121092],{"class":480,"line":1898},[478,121088,27141],{"class":484},[478,121090,121091],{"class":488}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[478,121093,119628],{"class":495},[478,121095,121096],{"class":480,"line":2180},[478,121097,120677],{"class":770},[478,121099,121100,121102,121104,121107,121109,121111],{"class":480,"line":2185},[478,121101,24956],{"class":484},[478,121103,24959],{"class":488},[478,121105,121106],{"class":488}," a+r",[478,121108,121080],{"class":488},[478,121110,1155],{"class":495},[478,121112,121113],{"class":714},"   \n",[478,121115,121116,121118,121120,121122,121124],{"class":480,"line":2191},[478,121117,24956],{"class":484},[478,121119,24959],{"class":488},[478,121121,121106],{"class":488},[478,121123,121091],{"class":488},[478,121125,119628],{"class":495},[29,121127,121128],{"start":579},[32,121129,121130],{},"检查是否安装成功",[469,121132,121134],{"className":118903,"code":121133,"language":118905,"meta":54,"style":54},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[475,121135,121136,121141],{"__ignoreMap":54},[478,121137,121138],{"class":480,"line":481},[478,121139,121140],{"class":770},"# 检查cuDNN版本命令\n",[478,121142,121143,121146,121149,121151,121153,121156,121159],{"class":480,"line":565},[478,121144,121145],{"class":484},"cat",[478,121147,121148],{"class":488}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[478,121150,25489],{"class":710},[478,121152,30616],{"class":484},[478,121154,121155],{"class":488}," CUDNN_MAJOR",[478,121157,121158],{"class":495}," -A",[478,121160,48103],{"class":495},[19,121162,121163],{},"出现下图这样的就是安装成功了",[19,121165,121166],{},[52,121167],{"alt":54,"src":121168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[29,121170,121171],{"start":593},[32,121172,121173],{},"软链接(一般不需要)",[469,121175,121177],{"className":118903,"code":121176,"language":118905,"meta":54,"style":54},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[475,121178,121179,121184],{"__ignoreMap":54},[478,121180,121181],{"class":480,"line":481},[478,121182,121183],{"class":770},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[478,121185,121186,121188],{"class":480,"line":565},[478,121187,24956],{"class":484},[478,121189,121190],{"class":488}," ldconfig\n",[19,121192,121193],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[469,121195,121200],{"className":121196,"code":121197,"language":121198,"meta":121199,"style":54},"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",[475,121201,121202,121207,121212,121217,121222,121227,121232],{"__ignoreMap":54},[478,121203,121204],{"class":480,"line":481},[478,121205,121206],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[478,121208,121209],{"class":480,"line":565},[478,121210,121211],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[478,121213,121214],{"class":480,"line":579},[478,121215,121216],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[478,121218,121219],{"class":480,"line":593},[478,121220,121221],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[478,121223,121224],{"class":480,"line":1769},[478,121225,121226],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[478,121228,121229],{"class":480,"line":1783},[478,121230,121231],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[478,121233,121234],{"class":480,"line":1789},[478,121235,121236],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121238,121239],{},"运行下方的命令",[469,121241,121243],{"className":118903,"code":121242,"language":118905,"meta":54,"style":54},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[475,121244,121245,121250,121257,121262],{"__ignoreMap":54},[478,121246,121247],{"class":480,"line":481},[478,121248,121249],{"class":770},"# cd进入CUDA路径\n",[478,121251,121252,121254],{"class":480,"line":565},[478,121253,101656],{"class":495},[478,121255,121256],{"class":488}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[478,121258,121259],{"class":480,"line":579},[478,121260,121261],{"class":770}," # 查看本路径下的需要软链接的文件名\n",[478,121263,121264],{"class":480,"line":593},[478,121265,121266],{"class":484}," ls\n",[19,121268,121269],{},[52,121270],{"alt":54,"src":121271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121273,121274,121275,18975,121278,18975,121281,121284],{},"如上图，我需要将",[475,121276,121277],{},"libcudnn_xxx_xxxxx.so.8.9.7",[475,121279,121280],{},"libcudnn_xxx_xxxxx.so.8",[475,121282,121283],{},"libcudnn_xxx_xxxxx.so","软链接",[469,121286,121288],{"className":118903,"code":121287,"language":118905,"meta":54,"style":54},"# 创建符号链接。对于每个 .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",[475,121289,121290,121295,121311,121325,121339,121353,121367,121381,121395,121400,121406,121411],{"__ignoreMap":54},[478,121291,121292],{"class":480,"line":481},[478,121293,121294],{"class":770},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[478,121296,121297,121299,121302,121305,121308],{"class":480,"line":565},[478,121298,24956],{"class":484},[478,121300,121301],{"class":488}," ln",[478,121303,121304],{"class":495}," -sf",[478,121306,121307],{"class":488}," libcudnn_cnn_train.so.8.9.7",[478,121309,121310],{"class":488}," libcudnn_cnn_train.so.8\n",[478,121312,121313,121315,121317,121319,121322],{"class":480,"line":579},[478,121314,24956],{"class":484},[478,121316,121301],{"class":488},[478,121318,121304],{"class":495},[478,121320,121321],{"class":488}," libcudnn_adv_infer.so.8.9.7",[478,121323,121324],{"class":488}," libcudnn_adv_infer.so.8\n",[478,121326,121327,121329,121331,121333,121336],{"class":480,"line":593},[478,121328,24956],{"class":484},[478,121330,121301],{"class":488},[478,121332,121304],{"class":495},[478,121334,121335],{"class":488}," libcudnn_adv_train.so.8.9.7",[478,121337,121338],{"class":488}," libcudnn_adv_train.so.8\n",[478,121340,121341,121343,121345,121347,121350],{"class":480,"line":1769},[478,121342,24956],{"class":484},[478,121344,121301],{"class":488},[478,121346,121304],{"class":495},[478,121348,121349],{"class":488}," libcudnn_cnn_infer.so.8.9.7",[478,121351,121352],{"class":488}," libcudnn_cnn_infer.so.8\n",[478,121354,121355,121357,121359,121361,121364],{"class":480,"line":1783},[478,121356,24956],{"class":484},[478,121358,121301],{"class":488},[478,121360,121304],{"class":495},[478,121362,121363],{"class":488}," libcudnn.so.8.9.7",[478,121365,121366],{"class":488}," libcudnn.so.8\n",[478,121368,121369,121371,121373,121375,121378],{"class":480,"line":1789},[478,121370,24956],{"class":484},[478,121372,121301],{"class":488},[478,121374,121304],{"class":495},[478,121376,121377],{"class":488}," libcudnn_ops_infer.so.8.9.7",[478,121379,121380],{"class":488}," libcudnn_ops_infer.so.8\n",[478,121382,121383,121385,121387,121389,121392],{"class":480,"line":1880},[478,121384,24956],{"class":484},[478,121386,121301],{"class":488},[478,121388,121304],{"class":495},[478,121390,121391],{"class":488}," libcudnn_ops_train.so.8.9.7",[478,121393,121394],{"class":488}," libcudnn_ops_train.so.8\n",[478,121396,121397],{"class":480,"line":1886},[478,121398,121399],{"class":770},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[478,121401,121402,121404],{"class":480,"line":1898},[478,121403,24956],{"class":484},[478,121405,121190],{"class":488},[478,121407,121408],{"class":480,"line":2180},[478,121409,121410],{"class":770},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[478,121412,121413,121415,121418,121421,121423,121426],{"class":480,"line":2185},[478,121414,27141],{"class":484},[478,121416,121417],{"class":495}," -l",[478,121419,121420],{"class":488}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[478,121422,1155],{"class":495},[478,121424,121425],{"class":488},".so",[478,121427,119628],{"class":495},[129,121429,121431],{"id":121430},"_355-常见问题","3.5.5 常见问题",[29,121433,121434],{},[32,121435,121436],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[469,121438,121440],{"className":118903,"code":121439,"language":118905,"meta":54,"style":54},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[475,121441,121442],{"__ignoreMap":54},[478,121443,121444,121446,121448],{"class":480,"line":481},[478,121445,24956],{"class":484},[478,121447,118963],{"class":488},[478,121449,121450],{"class":488}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121452,121453],{},"blacklist-nouveau.conf文件内容如下：",[469,121455,121457],{"className":118903,"code":121456,"language":118905,"meta":54,"style":54},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[475,121458,121459,121467,121474,121486,121496],{"__ignoreMap":54},[478,121460,121461,121464],{"class":480,"line":481},[478,121462,121463],{"class":484},"blacklist",[478,121465,121466],{"class":488}," nouveau\n",[478,121468,121469,121471],{"class":480,"line":565},[478,121470,121463],{"class":484},[478,121472,121473],{"class":488}," lbm-nouveau\n",[478,121475,121476,121478,121481,121484],{"class":480,"line":579},[478,121477,116310],{"class":484},[478,121479,121480],{"class":488}," nouveau",[478,121482,121483],{"class":488}," modeset=",[478,121485,3651],{"class":495},[478,121487,121488,121491,121493],{"class":480,"line":593},[478,121489,121490],{"class":495},"alias",[478,121492,121480],{"class":488},[478,121494,121495],{"class":488}," off\n",[478,121497,121498,121500,121503],{"class":480,"line":1769},[478,121499,121490],{"class":495},[478,121501,121502],{"class":488}," lbm-nouveau",[478,121504,121495],{"class":488},[19,121506,121507],{},"接着运行下方命令",[469,121509,121511],{"className":118903,"code":121510,"language":118905,"meta":54,"style":54},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[475,121512,121513,121523,121528],{"__ignoreMap":54},[478,121514,121515,121517,121520],{"class":480,"line":481},[478,121516,24956],{"class":484},[478,121518,121519],{"class":488}," update-initramfs",[478,121521,121522],{"class":495}," -u\n",[478,121524,121525],{"class":480,"line":565},[478,121526,121527],{"class":484},"或者\n",[478,121529,121530,121532,121535],{"class":480,"line":579},[478,121531,24956],{"class":484},[478,121533,121534],{"class":488}," dracut",[478,121536,121537],{"class":495}," --force\n",[19,121539,121540],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[469,121542,121544],{"className":118903,"code":121543,"language":118905,"meta":54,"style":54},"lsmod | grep nouveau\n",[475,121545,121546],{"__ignoreMap":54},[478,121547,121548,121551,121553,121555],{"class":480,"line":481},[478,121549,121550],{"class":484},"lsmod",[478,121552,25489],{"class":710},[478,121554,30616],{"class":484},[478,121556,121466],{"class":488},[29,121558,121559],{"start":565},[32,121560,121561],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[469,121563,121565],{"className":118903,"code":121564,"language":118905,"meta":54,"style":54},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[475,121566,121567],{"__ignoreMap":54},[478,121568,121569,121571,121573],{"class":480,"line":481},[478,121570,24956],{"class":484},[478,121572,118963],{"class":488},[478,121574,121575],{"class":488}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121577,121578],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[469,121580,121582],{"className":118903,"code":121581,"language":118905,"meta":54,"style":54},"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",[475,121583,121584,121592,121600,121608,121615,121623,121633,121641],{"__ignoreMap":54},[478,121585,121586,121589],{"class":480,"line":481},[478,121587,121588],{"class":484},"Section",[478,121590,121591],{"class":488}," \"OutputClass\"\n",[478,121593,121594,121597],{"class":480,"line":565},[478,121595,121596],{"class":484},"   Identifier",[478,121598,121599],{"class":488}," \"nvidia\"\n",[478,121601,121602,121605],{"class":480,"line":579},[478,121603,121604],{"class":484},"   MatchDriver",[478,121606,121607],{"class":488}," \"nvidia-drm\"\n",[478,121609,121610,121613],{"class":480,"line":593},[478,121611,121612],{"class":484},"   Driver",[478,121614,121599],{"class":488},[478,121616,121617,121620],{"class":480,"line":1769},[478,121618,121619],{"class":484},"   Option",[478,121621,121622],{"class":488}," \"AllowEmptyInitialConfiguration\"\n",[478,121624,121625,121627,121630],{"class":480,"line":1783},[478,121626,121619],{"class":484},[478,121628,121629],{"class":488}," \"PrimaryGPU\"",[478,121631,121632],{"class":488}," \"yes\"\n",[478,121634,121635,121638],{"class":480,"line":1789},[478,121636,121637],{"class":484},"   ModulePath",[478,121639,121640],{"class":488}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[478,121642,121643],{"class":480,"line":1880},[478,121644,121645],{"class":484},"EndSection\n",[29,121647,121648],{"start":579},[32,121649,121650],{},"安装N卡驱动提示错误",[469,121652,121654],{"className":121196,"code":121653,"language":121198,"meta":121199,"style":54},"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",[475,121655,121656],{"__ignoreMap":54},[478,121657,121658],{"class":480,"line":481},[478,121659,121653],{},[29,121661,121662],{},[32,121663,121664],{},"检查当前运行的内核版本：",[19,121666,121667],{},"运行以下命令以查看你当前正在使用的内核版本：",[469,121669,121671],{"className":117676,"code":121670,"language":117678,"meta":54,"style":54},"uname -r\n",[475,121672,121673],{"__ignoreMap":54},[478,121674,121675,121677],{"class":480,"line":481},[478,121676,70584],{"class":484},[478,121678,121679],{"class":495}," -r\n",[29,121681,121682],{"start":565},[32,121683,121684],{},"安装内核开发文件：",[19,121686,121687,121688,121691],{},"确保你已经安装了与当前内核版本相匹配的 ",[475,121689,121690],{},"kernel-devel"," 包。运行以下命令来安装：",[469,121693,121695],{"className":117676,"code":121694,"language":117678,"meta":54,"style":54},"sudo dnf install kernel-devel-$(uname -r)\n",[475,121696,121697],{"__ignoreMap":54},[478,121698,121699,121701,121703,121705,121708,121710,121712,121714],{"class":480,"line":481},[478,121700,24956],{"class":484},[478,121702,26695],{"class":488},[478,121704,489],{"class":488},[478,121706,121707],{"class":488}," kernel-devel-",[478,121709,25479],{"class":714},[478,121711,70584],{"class":484},[478,121713,120019],{"class":495},[478,121715,720],{"class":714},[19,121717,121718],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[29,121720,121721],{"start":579},[32,121722,121723],{},"安装内核源代码（如果需要）：",[19,121725,121726],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[469,121728,121730],{"className":117676,"code":121729,"language":117678,"meta":54,"style":54},"sudo dnf install kernel-headers kernel-source\n",[475,121731,121732],{"__ignoreMap":54},[478,121733,121734,121736,121738,121740,121743],{"class":480,"line":481},[478,121735,24956],{"class":484},[478,121737,26695],{"class":488},[478,121739,489],{"class":488},[478,121741,121742],{"class":488}," kernel-headers",[478,121744,121745],{"class":488}," kernel-source\n",[29,121747,121748],{"start":593},[32,121749,121750],{},"检查安装：",[19,121752,121753,121754,121757],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[475,121755,121756],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[469,121759,121761],{"className":117676,"code":121760,"language":117678,"meta":54,"style":54},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[475,121762,121763],{"__ignoreMap":54},[478,121764,121765,121767],{"class":480,"line":481},[478,121766,27141],{"class":484},[478,121768,121769],{"class":488}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121771,121772,121773,121776],{},"如果仍然遇到问题，可以通过 ",[475,121774,121775],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[617,121778,121779],{},"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":54,"searchDepth":565,"depth":565,"links":121781},[121782,121786,121796,121800,121801],{"id":118879,"depth":565,"text":118880,"children":121783},[121784,121785],{"id":118889,"depth":579,"text":118890},{"id":118899,"depth":579,"text":118900},{"id":119099,"depth":565,"text":119100,"children":121787},[121788,121789,121790,121791,121792,121793,121794,121795],{"id":119103,"depth":579,"text":119104},{"id":119173,"depth":579,"text":119174},{"id":119262,"depth":579,"text":119263},{"id":119507,"depth":579,"text":119508},{"id":119577,"depth":579,"text":119578},{"id":119644,"depth":579,"text":119645},{"id":119679,"depth":579,"text":119680},{"id":119734,"depth":579,"text":119735},{"id":119785,"depth":565,"text":119786,"children":121797},[121798,121799],{"id":119789,"depth":579,"text":119790},{"id":119869,"depth":579,"text":119870},{"id":120055,"depth":565,"text":120056},{"id":120228,"depth":565,"text":120229,"children":121802},[121803,121804,121805,121806,121807],{"id":120232,"depth":579,"text":120233},{"id":120273,"depth":579,"text":120274},{"id":120560,"depth":579,"text":120561},{"id":120934,"depth":579,"text":120935},{"id":121430,"depth":579,"text":121431},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118871,"description":23942},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121814,"title":121815,"body":121816,"description":23942,"extension":638,"meta":122156,"navigation":640,"path":122157,"seo":122158,"stem":122159,"__hash__":122160},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121817,"toc":122154},[121818,121821,121826,121829,122075,122080,122083,122119,122122,122151],[10,121819,121815],{"id":121820},"_4-命令教程长期积累",[29,121822,121823],{},[32,121824,121825],{},"大多数命令",[19,121827,121828],{},"常用 Linux 命令速查：",[469,121830,121832],{"className":117676,"code":121831,"language":117678,"meta":54,"style":54},"# 文件与目录\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",[475,121833,121834,121839,121846,121853,121861,121868,121875,121883,121891,121898,121905,121913,121917,121922,121929,121937,121944,121948,121953,121960,121968,121976,121984,121992,121996,122001,122009,122016,122023,122031,122039,122043,122048,122057,122066],{"__ignoreMap":54},[478,121835,121836],{"class":480,"line":481},[478,121837,121838],{"class":770},"# 文件与目录\n",[478,121840,121841,121843],{"class":480,"line":565},[478,121842,27141],{"class":484},[478,121844,121845],{"class":770},"        # 列出目录内容\n",[478,121847,121848,121850],{"class":480,"line":579},[478,121849,101656],{"class":495},[478,121851,121852],{"class":770},"        # 切换目录\n",[478,121854,121855,121858],{"class":480,"line":593},[478,121856,121857],{"class":495},"pwd",[478,121859,121860],{"class":770},"       # 显示当前路径\n",[478,121862,121863,121865],{"class":480,"line":1769},[478,121864,101646],{"class":484},[478,121866,121867],{"class":770},"     # 创建目录\n",[478,121869,121870,121872],{"class":480,"line":1783},[478,121871,25702],{"class":484},[478,121873,121874],{"class":770},"        # 删除文件或目录\n",[478,121876,121877,121880],{"class":480,"line":1789},[478,121878,121879],{"class":484},"cp",[478,121881,121882],{"class":770},"        # 复制文件或目录\n",[478,121884,121885,121888],{"class":480,"line":1880},[478,121886,121887],{"class":484},"mv",[478,121889,121890],{"class":770},"        # 移动\u002F重命名文件或目录\n",[478,121892,121893,121895],{"class":480,"line":1886},[478,121894,101663],{"class":484},[478,121896,121897],{"class":770},"     # 创建空文件\n",[478,121899,121900,121902],{"class":480,"line":1898},[478,121901,121145],{"class":484},[478,121903,121904],{"class":770},"       # 查看文件内容\n",[478,121906,121907,121910],{"class":480,"line":2180},[478,121908,121909],{"class":484},"head\u002Ftail",[478,121911,121912],{"class":770}," # 查看文件头部\u002F尾部\n",[478,121914,121915],{"class":480,"line":2185},[478,121916,2966],{"emptyLinePlaceholder":640},[478,121918,121919],{"class":480,"line":2191},[478,121920,121921],{"class":770},"# 权限管理\n",[478,121923,121924,121926],{"class":480,"line":2196},[478,121925,24991],{"class":484},[478,121927,121928],{"class":770},"     # 修改文件权限\n",[478,121930,121931,121934],{"class":480,"line":2210},[478,121932,121933],{"class":484},"chown",[478,121935,121936],{"class":770},"     # 修改文件所有者\n",[478,121938,121939,121941],{"class":480,"line":2215},[478,121940,24956],{"class":484},[478,121942,121943],{"class":770},"      # 以管理员身份执行\n",[478,121945,121946],{"class":480,"line":2221},[478,121947,2966],{"emptyLinePlaceholder":640},[478,121949,121950],{"class":480,"line":2241},[478,121951,121952],{"class":770},"# 系统信息\n",[478,121954,121955,121957],{"class":480,"line":2246},[478,121956,70584],{"class":484},[478,121958,121959],{"class":770},"     # 系统信息\n",[478,121961,121962,121965],{"class":480,"line":2260},[478,121963,121964],{"class":484},"df",[478,121966,121967],{"class":770},"        # 磁盘使用情况\n",[478,121969,121970,121973],{"class":480,"line":2265},[478,121971,121972],{"class":484},"free",[478,121974,121975],{"class":770},"      # 内存使用情况\n",[478,121977,121978,121981],{"class":480,"line":2294},[478,121979,121980],{"class":484},"top\u002Fhtop",[478,121982,121983],{"class":770},"  # 进程监控\n",[478,121985,121986,121989],{"class":480,"line":2299},[478,121987,121988],{"class":484},"ps",[478,121990,121991],{"class":770},"        # 查看进程\n",[478,121993,121994],{"class":480,"line":2316},[478,121995,2966],{"emptyLinePlaceholder":640},[478,121997,121998],{"class":480,"line":2321},[478,121999,122000],{"class":770},"# 网络\n",[478,122002,122003,122006],{"class":480,"line":2326},[478,122004,122005],{"class":484},"ping",[478,122007,122008],{"class":770},"      # 测试网络连通性\n",[478,122010,122011,122013],{"class":480,"line":2331},[478,122012,27229],{"class":484},[478,122014,122015],{"class":770},"      # 发送 HTTP 请求\n",[478,122017,122018,122020],{"class":480,"line":2345},[478,122019,120669],{"class":484},[478,122021,122022],{"class":770},"      # 下载文件\n",[478,122024,122025,122028],{"class":480,"line":2350},[478,122026,122027],{"class":484},"ssh",[478,122029,122030],{"class":770},"       # 远程登录\n",[478,122032,122033,122036],{"class":480,"line":3143},[478,122034,122035],{"class":484},"scp",[478,122037,122038],{"class":770},"       # 远程文件传输\n",[478,122040,122041],{"class":480,"line":3157},[478,122042,2966],{"emptyLinePlaceholder":640},[478,122044,122045],{"class":480,"line":3165},[478,122046,122047],{"class":770},"# 包管理（Debian\u002FUbuntu）\n",[478,122049,122050,122052,122054],{"class":480,"line":3170},[478,122051,117748],{"class":484},[478,122053,117727],{"class":488},[478,122055,122056],{"class":770},"   # 更新软件源\n",[478,122058,122059,122061,122063],{"class":480,"line":3176},[478,122060,117748],{"class":484},[478,122062,489],{"class":488},[478,122064,122065],{"class":770},"  # 安装软件包\n",[478,122067,122068,122070,122072],{"class":480,"line":3182},[478,122069,117748],{"class":484},[478,122071,26459],{"class":488},[478,122073,122074],{"class":770},"   # 卸载软件包\n",[29,122076,122077],{"start":565},[32,122078,122079],{},"KDE Dolphin 以root打开",[19,122081,122082],{},"kde5",[469,122084,122086],{"className":117676,"code":122085,"language":117678,"meta":54,"style":54},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[475,122087,122088],{"__ignoreMap":54},[478,122089,122090,122093,122096,122099,122101,122103,122106,122109,122111,122114,122116],{"class":480,"line":481},[478,122091,122092],{"class":484},"pkexec",[478,122094,122095],{"class":488}," env",[478,122097,122098],{"class":488}," DISPLAY=",[478,122100,28523],{"class":714},[478,122102,28581],{"class":488},[478,122104,122105],{"class":714},"$XAUTHORITY ",[478,122107,122108],{"class":488},"KDE_SESSION_VERSION=",[478,122110,1020],{"class":495},[478,122112,122113],{"class":488}," KDE_FULL_SESSION=",[478,122115,1931],{"class":495},[478,122117,122118],{"class":488}," dolphin\n",[19,122120,122121],{},"kde6",[469,122123,122125],{"className":117676,"code":122124,"language":117678,"meta":54,"style":54},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[475,122126,122127],{"__ignoreMap":54},[478,122128,122129,122131,122133,122135,122137,122139,122141,122143,122145,122147,122149],{"class":480,"line":481},[478,122130,122092],{"class":484},[478,122132,122095],{"class":488},[478,122134,122098],{"class":488},[478,122136,28523],{"class":714},[478,122138,28581],{"class":488},[478,122140,122105],{"class":714},[478,122142,122108],{"class":488},[478,122144,1045],{"class":495},[478,122146,122113],{"class":488},[478,122148,1931],{"class":495},[478,122150,122118],{"class":488},[617,122152,122153],{},"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":54,"searchDepth":565,"depth":565,"links":122155},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121815,"description":23942},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122162,"title":122163,"body":122164,"description":23942,"extension":638,"meta":122178,"navigation":640,"path":122179,"seo":122180,"stem":122181,"__hash__":122182},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122165,"toc":122176},[122166,122169],[10,122167,122163],{"id":122168},"_5-各种环境配置",[19,122170,122171],{},[518,122172,122175],{"href":122173,"rel":122174},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[522],"电控组环境搭建大全",{"title":54,"searchDepth":565,"depth":565,"links":122177},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122163,"description":23942},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122184,"title":122185,"body":122186,"description":23942,"extension":638,"meta":122534,"navigation":640,"path":122535,"seo":122536,"stem":122537,"__hash__":122538},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122187,"toc":122526},[122188,122191,122195,122199,122203,122208,122215,122219,122512,122516,122523],[10,122189,122185],{"id":122190},"_6-拓展功能",[14,122192,122194],{"id":122193},"_61-wine","6.1 Wine",[14,122196,122198],{"id":122197},"_62-android","6.2 Android",[129,122200,122202],{"id":122201},"_621-i卡a卡","6.2.1 I卡、A卡",[29,122204,122205],{},[32,122206,122207],{},"Wayland-Waydroid(体验超级好)",[19,122209,122210,122211],{},"Waydroid 官网与安装指南：",[518,122212,122213],{"href":122213,"rel":122214},"https:\u002F\u002Fwaydro.id\u002F",[522],[129,122216,122218],{"id":122217},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[29,122220,122221],{},[32,122222,122223,122224,122226,122227,122231,122233,122236,122241,122438],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54096,122225],{},"BlissOS 官网下载：",[518,122228,122229],{"href":122229,"rel":122230},"https:\u002F\u002Fblissos.org\u002F",[522],[54096,122232],{},[52,122234],{"alt":54,"src":122235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[29,122237,122238],{"start":579},[32,122239,122240],{},"比较推荐的配置",[469,122242,122244],{"className":117676,"code":122243,"language":117678,"meta":54,"style":54},"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",[475,122245,122246,122253,122263,122273,122283,122295,122305,122312,122322,122331,122340,122350,122360,122369,122379,122389,122401,122411,122420,122430],{"__ignoreMap":54},[478,122247,122248,122251],{"class":480,"line":481},[478,122249,122250],{"class":484},"qemu-system-x86_64",[478,122252,25058],{"class":495},[478,122254,122255,122258,122261],{"class":480,"line":565},[478,122256,122257],{"class":495},"        -M",[478,122259,122260],{"class":488}," q35,vmport=off",[478,122262,25058],{"class":495},[478,122264,122265,122268,122271],{"class":480,"line":579},[478,122266,122267],{"class":495},"        -accel",[478,122269,122270],{"class":488}," kvm",[478,122272,25058],{"class":495},[478,122274,122275,122278,122281],{"class":480,"line":593},[478,122276,122277],{"class":495},"        -cpu",[478,122279,122280],{"class":488}," qemu64,+sse3,+sse4.2",[478,122282,25058],{"class":495},[478,122284,122285,122288,122291,122293],{"class":480,"line":1769},[478,122286,122287],{"class":495},"        -smp",[478,122289,122290],{"class":488}," 8,cores=",[478,122292,994],{"class":495},[478,122294,25058],{"class":495},[478,122296,122297,122300,122303],{"class":480,"line":1783},[478,122298,122299],{"class":495},"        -m",[478,122301,122302],{"class":488}," 6G",[478,122304,25058],{"class":495},[478,122306,122307,122310],{"class":480,"line":1789},[478,122308,122309],{"class":495},"        -usb",[478,122311,25058],{"class":495},[478,122313,122314,122317,122320],{"class":480,"line":1880},[478,122315,122316],{"class":495},"        -device",[478,122318,122319],{"class":488}," virtio-tablet",[478,122321,25058],{"class":495},[478,122323,122324,122326,122329],{"class":480,"line":1886},[478,122325,122316],{"class":495},[478,122327,122328],{"class":488}," virtio-keyboard",[478,122330,25058],{"class":495},[478,122332,122333,122335,122338],{"class":480,"line":1898},[478,122334,122316],{"class":495},[478,122336,122337],{"class":488}," usb-tablet",[478,122339,25058],{"class":495},[478,122341,122342,122345,122348],{"class":480,"line":2180},[478,122343,122344],{"class":495},"        -bios",[478,122346,122347],{"class":488}," OVMF-pure-efi64.fd",[478,122349,25058],{"class":495},[478,122351,122352,122355,122358],{"class":480,"line":2185},[478,122353,122354],{"class":495},"        -net",[478,122356,122357],{"class":488}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[478,122359,25058],{"class":495},[478,122361,122362,122364,122367],{"class":480,"line":2191},[478,122363,122354],{"class":495},[478,122365,122366],{"class":488}," nic,model=virtio",[478,122368,25058],{"class":495},[478,122370,122371,122374,122377],{"class":480,"line":2196},[478,122372,122373],{"class":495},"        -audio",[478,122375,122376],{"class":488}," sdl,model=hda",[478,122378,25058],{"class":495},[478,122380,122381,122384,122387],{"class":480,"line":2210},[478,122382,122383],{"class":495},"        -display",[478,122385,122386],{"class":488}," sdl,gl=on,show-cursor=on",[478,122388,25058],{"class":495},[478,122390,122391,122393,122396,122399],{"class":480,"line":2215},[478,122392,122316],{"class":495},[478,122394,122395],{"class":488}," virtio-vga-gl,xres=1920,yres=",[478,122397,122398],{"class":495},"1080",[478,122400,25058],{"class":495},[478,122402,122403,122406,122409],{"class":480,"line":2221},[478,122404,122405],{"class":495},"        -drive",[478,122407,122408],{"class":488}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[478,122410,25058],{"class":495},[478,122412,122413,122415,122418],{"class":480,"line":2241},[478,122414,122405],{"class":495},[478,122416,122417],{"class":488}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[478,122419,25058],{"class":495},[478,122421,122422,122425,122428],{"class":480,"line":2246},[478,122423,122424],{"class":495},"        -monitor",[478,122426,122427],{"class":488}," stdio",[478,122429,25058],{"class":495},[478,122431,122432,122435],{"class":480,"line":2260},[478,122433,122434],{"class":495},"        -serial",[478,122436,122437],{"class":488}," none\n",[29,122439,122440],{"start":1769},[32,122441,122442,122443],{},"常用操作：",[29,122444,122445,122448,122504],{},[32,122446,122447],{},"全屏：Ctrl+Alt+F",[32,122449,122450,122451,122456],{},"adb调试",[29,122452,122453],{},[32,122454,122455],{},"使Linux与Android用ADB连接。",[469,122457,122459],{"className":117676,"code":122458,"language":117678,"meta":54,"style":54},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[475,122460,122461,122466,122477,122482,122494,122499],{"__ignoreMap":54},[478,122462,122463],{"class":480,"line":481},[478,122464,122465],{"class":770},"# 连接安卓\n",[478,122467,122468,122471,122474],{"class":480,"line":565},[478,122469,122470],{"class":484},"adb",[478,122472,122473],{"class":488}," connect",[478,122475,122476],{"class":495}," 127.0.0.1\n",[478,122478,122479],{"class":480,"line":579},[478,122480,122481],{"class":770},"# 打开shell\n",[478,122483,122484,122486,122488,122491],{"class":480,"line":593},[478,122485,122470],{"class":484},[478,122487,27263],{"class":495},[478,122489,122490],{"class":488}," 127.0.0.1:5555",[478,122492,122493],{"class":488}," shell\n",[478,122495,122496],{"class":480,"line":1769},[478,122497,122498],{"class":770},"# 使用root权限\n",[478,122500,122501],{"class":480,"line":1783},[478,122502,122503],{"class":484},"su\n",[32,122505,122506,122507],{},"中文输入法",[29,122508,122509],{},[32,122510,122511],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122513,122515],{"id":122514},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122517,122518,122519],{},"rEFInd 官网与文档：",[518,122520,122521],{"href":122521,"rel":122522},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[522],[617,122524,122525],{},"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":54,"searchDepth":565,"depth":565,"links":122527},[122528,122529,122533],{"id":122193,"depth":565,"text":122194},{"id":122197,"depth":565,"text":122198,"children":122530},[122531,122532],{"id":122201,"depth":579,"text":122202},{"id":122217,"depth":579,"text":122218},{"id":122514,"depth":565,"text":122515},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122185,"description":23942},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122540,"title":122541,"body":122542,"description":23942,"extension":638,"meta":125841,"navigation":640,"path":125842,"seo":125843,"stem":125844,"__hash__":125845},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122543,"toc":125815},[122544,122547,122551,122554,122561,122811,122814,122886,122889,122893,122897,122902,122905,122908,122911,122916,122919,122922,122925,122930,122933,122938,122941,122944,122949,122952,122957,122960,122964,122968,122971,122976,122979,122993,122996,122999,123008,123011,123020,123023,123026,123035,123038,123047,123050,123053,123062,123065,123068,123083,123086,123089,123098,123103,123106,123109,123118,123121,123130,123133,123142,123145,123154,123159,123162,123170,123175,123178,123187,123190,123198,123203,123206,123215,123218,123221,123225,123228,123233,123236,123241,123255,123260,123265,123276,123281,123287,123292,123307,123312,123315,123320,123325,123330,123338,123343,123350,123355,123366,123371,123374,123378,123381,123384,123389,123392,123411,123416,123419,123428,123433,123436,123458,123461,123491,123494,123499,123502,123516,123521,123540,123543,123546,123551,123563,123568,123573,123576,123581,123584,123599,123602,123607,123612,123616,123621,123661,123664,123668,123674,123680,123685,123688,123695,123700,123707,123710,123713,123720,123734,123737,123797,123800,123814,123826,123829,123832,123835,123899,123902,123905,123908,123928,123931,123936,123943,123947,123950,123954,123959,123964,123968,123971,123974,124016,124021,124024,124046,124061,124063,124068,124080,124140,124142,124144,124198,124200,124202,124208,124213,124216,124221,124225,124228,124290,124295,124298,124300,124304,124316,124398,124400,124402,124456,124462,124464,124468,124473,124475,124480,124484,124504,124539,124543,124546,124549,124552,124559,124562,124574,124577,124592,124595,124614,124662,124665,124682,124685,124699,124704,124707,124716,124731,124743,124781,124786,124795,124800,124805,124831,124840,124844,124848,124853,124856,124860,124864,124869,124872,124877,124880,124885,124888,124893,124896,124900,124905,124908,124913,124916,124920,124925,124928,124933,124936,124941,124944,124948,124953,124956,124961,124964,124969,124972,124976,124981,124984,124989,124992,124997,125000,125005,125008,125013,125016,125021,125024,125028,125033,125036,125041,125048,125052,125057,125060,125065,125068,125072,125077,125080,125083,125086,125089,125092,125096,125099,125109,125114,125119,125141,125146,125151,125158,125162,125167,125170,125173,125178,125181,125184,125187,125190,125193,125196,125199,125202,125205,125208,125211,125214,125219,125224,125229,125234,125239,125244,125249,125252,125256,125259,125263,125268,125273,125278,125283,125287,125293,125301,125306,125309,125314,125329,125332,125337,125371,125386,125389,125444,125470,125482,125485,125494,125497,125512,125517,125520,125526,125531,125534,125539,125542,125547,125552,125559,125562,125577,125580,125615,125620,125628,125666,125669,125672,125677,125680,125685,125696,125730,125735,125738,125747,125752,125758,125761,125766,125775,125780,125783,125786,125791,125799,125802,125807,125812],[10,122545,122541],{"id":122546},"_7-其他操作",[14,122548,122550],{"id":122549},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122552,122553],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122555,122556,122557,122560],{},"进入工控机的硬盘目录，进入",[475,122558,122559],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[469,122562,122566],{"className":122563,"code":122564,"language":122565,"meta":54,"style":54},"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",[475,122567,122568,122576,122587,122594,122601,122613,122620,122632,122643,122654,122661,122668,122675,122687,122699,122706,122718,122730,122737,122749,122761,122773,122784,122791,122802],{"__ignoreMap":54},[478,122569,122570,122573],{"class":480,"line":481},[478,122571,122572],{"class":51680},"network",[478,122574,122575],{"class":714},": \n",[478,122577,122578,122581,122583,122585],{"class":480,"line":565},[478,122579,122580],{"class":51680},"  version",[478,122582,51817],{"class":714},[478,122584,789],{"class":495},[478,122586,3240],{"class":714},[478,122588,122589,122592],{"class":480,"line":579},[478,122590,122591],{"class":51680},"  wifis",[478,122593,122575],{"class":714},[478,122595,122596,122599],{"class":480,"line":593},[478,122597,122598],{"class":51680},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[478,122600,122575],{"class":714},[478,122602,122603,122606,122608,122611],{"class":480,"line":1769},[478,122604,122605],{"class":51680},"      renderer",[478,122607,51817],{"class":714},[478,122609,122610],{"class":488},"NetworkManager",[478,122612,3240],{"class":714},[478,122614,122615,122618],{"class":480,"line":1783},[478,122616,122617],{"class":51680},"      match",[478,122619,122575],{"class":714},[478,122621,122622,122625,122627,122630],{"class":480,"line":1789},[478,122623,122624],{"class":51680},"        name",[478,122626,51817],{"class":714},[478,122628,122629],{"class":488},"\"wlan0\"",[478,122631,3240],{"class":714},[478,122633,122634,122637,122639,122641],{"class":480,"line":1880},[478,122635,122636],{"class":51680},"      dhcp4",[478,122638,51817],{"class":714},[478,122640,1931],{"class":495},[478,122642,3240],{"class":714},[478,122644,122645,122648,122650,122652],{"class":480,"line":1886},[478,122646,122647],{"class":51680},"      dhcp6",[478,122649,51817],{"class":714},[478,122651,1931],{"class":495},[478,122653,3240],{"class":714},[478,122655,122656,122659],{"class":480,"line":1898},[478,122657,122658],{"class":51680},"      access-points",[478,122660,122575],{"class":714},[478,122662,122663,122666],{"class":480,"line":2180},[478,122664,122665],{"class":488},"        \"EMIS_Vinci_Robocon_5G\"",[478,122667,122575],{"class":714},[478,122669,122670,122673],{"class":480,"line":2185},[478,122671,122672],{"class":51680},"          auth",[478,122674,122575],{"class":714},[478,122676,122677,122680,122682,122685],{"class":480,"line":2191},[478,122678,122679],{"class":51680},"            key-management",[478,122681,51817],{"class":714},[478,122683,122684],{"class":488},"\"psk\"",[478,122686,3240],{"class":714},[478,122688,122689,122692,122694,122697],{"class":480,"line":2196},[478,122690,122691],{"class":51680},"            password",[478,122693,51817],{"class":714},[478,122695,122696],{"class":488},"\"vinci666\"",[478,122698,3240],{"class":714},[478,122700,122701,122704],{"class":480,"line":2210},[478,122702,122703],{"class":51680},"          networkmanager",[478,122705,122575],{"class":714},[478,122707,122708,122711,122713,122716],{"class":480,"line":2215},[478,122709,122710],{"class":51680},"            uuid",[478,122712,51817],{"class":714},[478,122714,122715],{"class":488},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[478,122717,3240],{"class":714},[478,122719,122720,122723,122725,122728],{"class":480,"line":2221},[478,122721,122722],{"class":51680},"            name",[478,122724,51817],{"class":714},[478,122726,122727],{"class":488},"\"EMIS_Vinci_Robocon_5G\"",[478,122729,3240],{"class":714},[478,122731,122732,122735],{"class":480,"line":2241},[478,122733,122734],{"class":51680},"            passthrough",[478,122736,122575],{"class":714},[478,122738,122739,122742,122744,122747],{"class":480,"line":2246},[478,122740,122741],{"class":51680},"              wifi-security.auth-alg",[478,122743,51817],{"class":714},[478,122745,122746],{"class":488},"\"open\"",[478,122748,3240],{"class":714},[478,122750,122751,122754,122756,122759],{"class":480,"line":2260},[478,122752,122753],{"class":51680},"              ipv6.addr-gen-mode",[478,122755,51817],{"class":714},[478,122757,122758],{"class":488},"\"default\"",[478,122760,3240],{"class":714},[478,122762,122763,122766,122768,122771],{"class":480,"line":2265},[478,122764,122765],{"class":51680},"              ipv6.ip6-privacy",[478,122767,51817],{"class":714},[478,122769,122770],{"class":488},"\"-1\"",[478,122772,3240],{"class":714},[478,122774,122775,122778,122780,122782],{"class":480,"line":2294},[478,122776,122777],{"class":51680},"              proxy._",[478,122779,51817],{"class":714},[478,122781,8218],{"class":488},[478,122783,3240],{"class":714},[478,122785,122786,122789],{"class":480,"line":2299},[478,122787,122788],{"class":51680},"      networkmanager",[478,122790,122575],{"class":714},[478,122792,122793,122796,122798,122800],{"class":480,"line":2316},[478,122794,122795],{"class":51680},"        uuid",[478,122797,51817],{"class":714},[478,122799,122715],{"class":488},[478,122801,3240],{"class":714},[478,122803,122804,122806,122808],{"class":480,"line":2321},[478,122805,122624],{"class":51680},[478,122807,51817],{"class":714},[478,122809,122810],{"class":488},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122812,122813],{},"将其改为新wifi的名和密码：",[469,122815,122817],{"className":122563,"code":122816,"language":122565,"meta":54,"style":54},"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",[475,122818,122819,122825,122834,122840,122847,122856,122864,122870,122876],{"__ignoreMap":54},[478,122820,122821,122823],{"class":480,"line":481},[478,122822,122572],{"class":51680},[478,122824,4305],{"class":714},[478,122826,122827,122829,122831],{"class":480,"line":565},[478,122828,122580],{"class":51680},[478,122830,51817],{"class":714},[478,122832,122833],{"class":495},"2\n",[478,122835,122836,122838],{"class":480,"line":579},[478,122837,122591],{"class":51680},[478,122839,4305],{"class":714},[478,122841,122842,122845],{"class":480,"line":593},[478,122843,122844],{"class":51680},"    wlan0",[478,122846,4305],{"class":714},[478,122848,122849,122851,122853],{"class":480,"line":1769},[478,122850,122636],{"class":51680},[478,122852,51817],{"class":714},[478,122854,122855],{"class":495},"true\n",[478,122857,122858,122860,122862],{"class":480,"line":1783},[478,122859,122647],{"class":51680},[478,122861,51817],{"class":714},[478,122863,122855],{"class":495},[478,122865,122866,122868],{"class":480,"line":1789},[478,122867,122658],{"class":51680},[478,122869,4305],{"class":714},[478,122871,122872,122874],{"class":480,"line":1880},[478,122873,122665],{"class":488},[478,122875,4305],{"class":714},[478,122877,122878,122881,122883],{"class":480,"line":1886},[478,122879,122880],{"class":51680},"          password",[478,122882,51817],{"class":714},[478,122884,122885],{"class":488},"\"vinci666\"\n",[19,122887,122888],{},"工控机开机即可连上网。",[14,122890,122892],{"id":122891},"_72-ssh远程开发","7.2 SSH远程开发",[129,122894,122896],{"id":122895},"_721-环境准备","7.2.1 环境准备",[19,122898,122899],{},[45,122900,122901],{},"1.硬件准备",[19,122903,122904],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122906,122907],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122909,122910],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122912,122913],{},[45,122914,122915],{},"2.设置固定IP",[19,122917,122918],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122920,122921],{},"1.进入设置界面",[19,122923,122924],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122926,122927],{},[52,122928],{"alt":54,"src":122929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122931,122932],{},"2.配置所连接的网络",[19,122934,122935],{},[52,122936],{"alt":54,"src":122937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122939,122940],{},"3.设置固定IP",[19,122942,122943],{},"查看当前IP地址。",[19,122945,122946],{},[52,122947],{"alt":54,"src":122948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122950,122951],{},"设置固定IP。",[19,122953,122954],{},[52,122955],{"alt":54,"src":122956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122958,122959],{},"至此，IP配置完毕。",[129,122961,122963],{"id":122962},"_722-环境搭建","7.2.2 环境搭建",[19,122965,122966],{},[45,122967,26133],{},[19,122969,122970],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122972,122973],{},[45,122974,122975],{},"实现",[19,122977,122978],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[29,122980,122981,122984,122987,122990],{},[32,122982,122983],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[32,122985,122986],{},"远程主机启动SSH服务；",[32,122988,122989],{},"本地主机登陆远程主机；",[32,122991,122992],{},"实现数据传输。",[19,122994,122995],{},"1.安装SSH客户端与服务端",[19,122997,122998],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[469,123000,123002],{"className":121196,"code":123001,"language":121198,"meta":121199,"style":54}," sudo apt install openssh-server\n",[475,123003,123004],{"__ignoreMap":54},[478,123005,123006],{"class":480,"line":481},[478,123007,123001],{},[19,123009,123010],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[469,123012,123014],{"className":121196,"code":123013,"language":121198,"meta":121199,"style":54},"sudo apt install openssh-client\n",[475,123015,123016],{"__ignoreMap":54},[478,123017,123018],{"class":480,"line":481},[478,123019,123013],{},[19,123021,123022],{},"2.远程主机启动SSH服务",[19,123024,123025],{},"远程主机启动 ssh 服务命令如下：",[469,123027,123029],{"className":121196,"code":123028,"language":121198,"meta":121199,"style":54},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[475,123030,123031],{"__ignoreMap":54},[478,123032,123033],{"class":480,"line":481},[478,123034,123028],{},[19,123036,123037],{},"启动后可使用如下命令查看服务是否正常运行：",[469,123039,123041],{"className":121196,"code":123040,"language":121198,"meta":121199,"style":54},"ps -e | grep ssh\n",[475,123042,123043],{"__ignoreMap":54},[478,123044,123045],{"class":480,"line":481},[478,123046,123040],{},[19,123048,123049],{},"如果启动成功，会包含 sshd 程序。",[19,123051,123052],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[469,123054,123056],{"className":121196,"code":123055,"language":121198,"meta":121199,"style":54},"sudo systemctl enable ssh\n",[475,123057,123058],{"__ignoreMap":54},[478,123059,123060],{"class":480,"line":481},[478,123061,123055],{},[19,123063,123064],{},"3.本地远程登录",[19,123066,123067],{},"登录远程主机可以调用如下命令:",[469,123069,123071],{"className":117676,"code":123070,"language":117678,"meta":54,"style":54},"ssh -X 用户名@ip地址\n",[475,123072,123073],{"__ignoreMap":54},[478,123074,123075,123077,123080],{"class":480,"line":481},[478,123076,122027],{"class":484},[478,123078,123079],{"class":495}," -X",[478,123081,123082],{"class":488}," 用户名@ip地址\n",[19,123084,123085],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123087,123088],{},"如果退出，可以调用exit命令：",[469,123090,123092],{"className":121196,"code":123091,"language":121198,"meta":121199,"style":54},"exit\n",[475,123093,123094],{"__ignoreMap":54},[478,123095,123096],{"class":480,"line":481},[478,123097,123091],{},[19,123099,123100],{},[45,123101,123102],{},"4.实现数据传输",[19,123104,123105],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123107,123108],{},"上传文件指令格式如下：",[469,123110,123112],{"className":121196,"code":123111,"language":121198,"meta":121199,"style":54},"scp 本地文件路径 账号@ip:路径\n",[475,123113,123114],{"__ignoreMap":54},[478,123115,123116],{"class":480,"line":481},[478,123117,123111],{},[19,123119,123120],{},"上传文件夹指令格式如下：",[469,123122,123124],{"className":121196,"code":123123,"language":121198,"meta":121199,"style":54},"scp -r 本地文件夹路径 账号@ip:路径\n",[475,123125,123126],{"__ignoreMap":54},[478,123127,123128],{"class":480,"line":481},[478,123129,123123],{},[19,123131,123132],{},"下载文件指令格式如下：",[469,123134,123136],{"className":121196,"code":123135,"language":121198,"meta":121199,"style":54},"scp 账号@ip:路径 本地文件夹路径\n",[475,123137,123138],{"__ignoreMap":54},[478,123139,123140],{"class":480,"line":481},[478,123141,123135],{},[19,123143,123144],{},"下载文件夹指令格式如下：",[469,123146,123148],{"className":121196,"code":123147,"language":121198,"meta":121199,"style":54},"scp -r 账号@ip:路径 本地文件夹路径\n",[475,123149,123150],{"__ignoreMap":54},[478,123151,123152],{"class":480,"line":481},[478,123153,123147],{},[19,123155,123156],{},[45,123157,123158],{},"优化",[19,123160,123161],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[29,123163,123164,123167],{},[32,123165,123166],{},"本地生成密钥对；",[32,123168,123169],{},"将公钥上传至远程主机。",[19,123171,123172],{},[45,123173,123174],{},"1.生成密钥对",[19,123176,123177],{},"本地客户端生成公私钥：（一路回车默认即可）",[469,123179,123181],{"className":121196,"code":123180,"language":121198,"meta":121199,"style":54},"ssh-keygen\n",[475,123182,123183],{"__ignoreMap":54},[478,123184,123185],{"class":480,"line":481},[478,123186,123180],{},[19,123188,123189],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[29,123191,123192,123195],{},[32,123193,123194],{},"id_rsa （私钥）；",[32,123196,123197],{},"id_rsa.pub (公钥)。",[19,123199,123200],{},[45,123201,123202],{},"2.公钥上传",[19,123204,123205],{},"上传指令如下：",[469,123207,123209],{"className":121196,"code":123208,"language":121198,"meta":121199,"style":54},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[475,123210,123211],{"__ignoreMap":54},[478,123212,123213],{"class":480,"line":481},[478,123214,123208],{},[19,123216,123217],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123219,123220],{},"以后再远程登录就无需录入密码了。",[129,123222,123224],{"id":123223},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123226,123227],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123229,123230],{},[45,123231,123232],{},"1.准备工作",[19,123234,123235],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123237,123238],{},[45,123239,123240],{},"2.为VScode安装远程开发插件",[19,123242,123243,123244,123247,123248,123251,123252,28765],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[475,123245,123246],{},"扩展：商店","的搜索栏输入",[475,123249,123250],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[475,123253,123254],{},"安装",[19,123256,123257],{},[52,123258],{"alt":54,"src":123259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123261,123262],{},[45,123263,123264],{},"3.配置远程连接",[19,123266,123267,123268,123271,123272,123275],{},"步骤1：使用快捷键",[475,123269,123270],{},"ctrl + shift + p","打开命令输入窗口，并输入",[475,123273,123274],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123277,123278],{},[52,123279],{"alt":54,"src":123280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123282,123283,123284,28765],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[475,123285,123286],{},"Add New SSH Host",[19,123288,123289],{},[52,123290],{"alt":54,"src":123291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123293,123294,123295,123298,123299,123302,123303,123306],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[475,123296,123297],{},"ssh +X ubuntu@192.168.43.164","，其中，",[475,123300,123301],{},"ubuntu","需要替换为你的登录用户名，",[475,123304,123305],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123308,123309],{},[52,123310],{"alt":54,"src":123311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123313,123314],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123316,123317],{},[52,123318],{"alt":54,"src":123319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123321,123322],{},[52,123323],{"alt":54,"src":123324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123326,123327],{},[45,123328,123329],{},"4.使用",[19,123331,123332,123333,123271,123335,123337],{},"步骤1：继续使用快捷键",[475,123334,123270],{},[475,123336,123274],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123339,123340],{},[52,123341],{"alt":54,"src":123342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123344,123345,123346,123349],{},"或者，也可以点击侧边栏的",[475,123347,123348],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123351,123352],{},[52,123353],{"alt":54,"src":123354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123356,123357,123358,123361,123362,123365],{},"步骤2：选择菜单栏的",[475,123359,123360],{},"文件","下的",[475,123363,123364],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123367,123368],{},[52,123369],{"alt":54,"src":123370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123372,123373],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123375,123377],{"id":123376},"_73-远程桌面","7.3 远程桌面",[19,123379,123380],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123382,123383],{},"我们选择使用VNC来看。",[29,123385,123386],{},[32,123387,123388],{},"安装VNC服务器：",[19,123390,123391],{},"这里以TigerVNC为例进行安装：",[469,123393,123395],{"className":117676,"code":123394,"language":117678,"meta":54,"style":54},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[475,123396,123397],{"__ignoreMap":54},[478,123398,123399,123401,123403,123405,123408],{"class":480,"line":481},[478,123400,24956],{"class":484},[478,123402,117697],{"class":488},[478,123404,489],{"class":488},[478,123406,123407],{"class":488}," tigervnc-standalone-server",[478,123409,123410],{"class":488}," tigervnc-common\n",[29,123412,123413],{"start":565},[32,123414,123415],{},"设置VNC密码：",[19,123417,123418],{},"为VNC用户设置密码，运行以下命令：",[469,123420,123422],{"className":117676,"code":123421,"language":117678,"meta":54,"style":54},"vncpasswd\n",[475,123423,123424],{"__ignoreMap":54},[478,123425,123426],{"class":480,"line":481},[478,123427,123421],{"class":484},[29,123429,123430],{"start":579},[32,123431,123432],{},"配置VNC启动脚本:",[19,123434,123435],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[469,123437,123439],{"className":117676,"code":123438,"language":117678,"meta":54,"style":54},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[475,123440,123441,123450],{"__ignoreMap":54},[478,123442,123443,123445,123447],{"class":480,"line":481},[478,123444,101646],{"class":484},[478,123446,29596],{"class":495},[478,123448,123449],{"class":488}," ~\u002F.vnc\n",[478,123451,123452,123455],{"class":480,"line":565},[478,123453,123454],{"class":484},"nano",[478,123456,123457],{"class":488}," ~\u002F.vnc\u002Fxstartup\n",[19,123459,123460],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[469,123462,123464],{"className":117676,"code":123463,"language":117678,"meta":54,"style":54},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[475,123465,123466,123471,123479,123486],{"__ignoreMap":54},[478,123467,123468],{"class":480,"line":481},[478,123469,123470],{"class":770},"#!\u002Fbin\u002Fsh\n",[478,123472,123473,123476],{"class":480,"line":565},[478,123474,123475],{"class":495},"unset",[478,123477,123478],{"class":488}," SESSION_MANAGER\n",[478,123480,123481,123483],{"class":480,"line":579},[478,123482,123475],{"class":495},[478,123484,123485],{"class":488}," DBUS_SESSION_BUS_ADDRESS\n",[478,123487,123488],{"class":480,"line":593},[478,123489,123490],{"class":484},"gnome-session\n",[19,123492,123493],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[29,123495,123496],{"start":593},[32,123497,123498],{},"给予执行权限：",[19,123500,123501],{},"为xstartup文件设置执行权限：",[469,123503,123505],{"className":117676,"code":123504,"language":117678,"meta":54,"style":54},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[475,123506,123507],{"__ignoreMap":54},[478,123508,123509,123511,123514],{"class":480,"line":481},[478,123510,24991],{"class":484},[478,123512,123513],{"class":488}," +x",[478,123515,123457],{"class":488},[29,123517,123518],{"start":1769},[32,123519,123520],{},"启动VNC服务器：",[469,123522,123524],{"className":117676,"code":123523,"language":117678,"meta":54,"style":54},"vncserver -geometry 1920x1080 -localhost=0\n",[475,123525,123526],{"__ignoreMap":54},[478,123527,123528,123531,123534,123537],{"class":480,"line":481},[478,123529,123530],{"class":484},"vncserver",[478,123532,123533],{"class":495}," -geometry",[478,123535,123536],{"class":488}," 1920x1080",[478,123538,123539],{"class":495}," -localhost=0\n",[19,123541,123542],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123544,123545],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[29,123547,123548],{"start":1783},[32,123549,123550],{},"查看已开启的VNC服务器：",[469,123552,123554],{"className":117676,"code":123553,"language":117678,"meta":54,"style":54},"vncserver -list\n",[475,123555,123556],{"__ignoreMap":54},[478,123557,123558,123560],{"class":480,"line":481},[478,123559,123530],{"class":484},[478,123561,123562],{"class":495}," -list\n",[19,123564,123565],{},[52,123566],{"alt":54,"src":123567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[29,123569,123570],{"start":1789},[32,123571,123572],{},"连接到VNC服务器：",[19,123574,123575],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[29,123577,123578],{"start":1880},[32,123579,123580],{},"停止VNC服务器：",[19,123582,123583],{},"如果需要停止VNC服务器，可以使用以下命令：",[469,123585,123587],{"className":117676,"code":123586,"language":117678,"meta":54,"style":54},"vncserver -kill :1\n",[475,123588,123589],{"__ignoreMap":54},[478,123590,123591,123593,123596],{"class":480,"line":481},[478,123592,123530],{"class":484},[478,123594,123595],{"class":495}," -kill",[478,123597,123598],{"class":488}," :1\n",[19,123600,123601],{},"将:1替换为你实际使用的显示编号。",[19,123603,123604],{},[52,123605],{"alt":54,"src":123606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123608,123609],{},[52,123610],{"alt":54,"src":123611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123613,123615],{"id":123614},"_74-usb端口设置","7.4 USB端口设置",[19,123617,123618],{},[45,123619,123620],{},"首先先配置好权限",[469,123622,123624],{"className":117676,"code":123623,"language":117678,"meta":54,"style":54},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[475,123625,123626,123631,123644,123651,123656],{"__ignoreMap":54},[478,123627,123628],{"class":480,"line":481},[478,123629,123630],{"class":770},"# 将用户权限提高\n",[478,123632,123633,123635,123637,123639,123642],{"class":480,"line":565},[478,123634,24956],{"class":484},[478,123636,26954],{"class":488},[478,123638,26957],{"class":495},[478,123640,123641],{"class":488}," dialout",[478,123643,26962],{"class":714},[478,123645,123646,123648],{"class":480,"line":579},[478,123647,26981],{"class":484},[478,123649,123650],{"class":488}," dialout\n",[478,123652,123653],{"class":480,"line":593},[478,123654,123655],{"class":770},"# 查看下面命令是否输出dialout（若输出才正常）\n",[478,123657,123658],{"class":480,"line":1769},[478,123659,123660],{"class":484},"groups\n",[19,123662,123663],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[129,123665,123667],{"id":123666},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123669,123670,123673],{},[45,123671,123672],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123675,123676,123679],{},[45,123677,123678],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123681,123682],{},[45,123683,123684],{},"流程如下：",[19,123686,123687],{},"（1）.查找设备idVendor和idProduct",[19,123689,123690,123691,123694],{},"接入两个USB设备，在终端调用指令",[475,123692,123693],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123696,123697],{},[52,123698],{"alt":54,"src":123699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123701,123702,123703,123706],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[475,123704,123705],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123708,123709],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123711,123712],{},"（2）.编写映射规则",[19,123714,123715,123716,123719],{},"在",[475,123717,123718],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[469,123721,123723],{"className":117676,"code":123722,"language":117678,"meta":54,"style":54},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[475,123724,123725],{"__ignoreMap":54},[478,123726,123727,123729,123731],{"class":480,"line":481},[478,123728,24956],{"class":484},[478,123730,118963],{"class":488},[478,123732,123733],{"class":488}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123735,123736],{},"输入如下内容：",[469,123738,123740],{"className":117676,"code":123739,"language":117678,"meta":54,"style":54},"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",[475,123741,123742,123772],{"__ignoreMap":54},[478,123743,123744,123747,123749,123752,123755,123758,123761,123763,123766,123769],{"class":480,"line":481},[478,123745,123746],{"class":714},"KERNEL",[478,123748,759],{"class":710},[478,123750,123751],{"class":488},"=\"ttyUSB*\",",[478,123753,123754],{"class":484}," ATTRS",[478,123756,123757],{"class":488},"{idVendor}==",[478,123759,123760],{"class":484},"\"10c4\"",[478,123762,1079],{"class":484},[478,123764,123765],{"class":488}," ATTRS{idProduct}==\"ea60\",",[478,123767,123768],{"class":488}," MODE:=\"0777\",",[478,123770,123771],{"class":488}," SYMLINK+=\"mylidar\"\n",[478,123773,123774,123776,123778,123780,123782,123784,123787,123789,123792,123794],{"class":480,"line":565},[478,123775,123746],{"class":714},[478,123777,759],{"class":710},[478,123779,123751],{"class":488},[478,123781,123754],{"class":484},[478,123783,123757],{"class":488},[478,123785,123786],{"class":484},"\"1a86\"",[478,123788,1079],{"class":484},[478,123790,123791],{"class":488}," ATTRS{idProduct}==\"7523\",",[478,123793,123768],{"class":488},[478,123795,123796],{"class":488}," SYMLINK+=\"mycar\"\n",[19,123798,123799],{},"代码解释：",[1702,123801,123802,123805,123808,123811],{},[32,123803,123804],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[32,123806,123807],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[32,123809,123810],{},"SYMLINK是符号连接，即绑定的别名；",[32,123812,123813],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123815,123816,123817,123820,123823],{},"***小提示：***",[183,123818,123819],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[475,123821,123822],{},"\u002Fetc\u002Fudev\u002Frule.d",[183,123824,123825],{},"目录即可。",[19,123827,123828],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123830,123831],{},"（3）.使规则生效",[19,123833,123834],{},"在终端下输入如下指令：",[469,123836,123838],{"className":117676,"code":123837,"language":117678,"meta":54,"style":54},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[475,123839,123840,123845,123857,123868,123872,123877,123890],{"__ignoreMap":54},[478,123841,123842],{"class":480,"line":481},[478,123843,123844],{"class":770},"# Ubuntu用下方命令\n",[478,123846,123847,123849,123851,123854],{"class":480,"line":565},[478,123848,24956],{"class":484},[478,123850,120428],{"class":488},[478,123852,123853],{"class":488}," udev",[478,123855,123856],{"class":488}," reload\n",[478,123858,123859,123861,123863,123865],{"class":480,"line":579},[478,123860,24956],{"class":484},[478,123862,120428],{"class":488},[478,123864,123853],{"class":488},[478,123866,123867],{"class":488}," restart\n",[478,123869,123870],{"class":480,"line":593},[478,123871,2966],{"emptyLinePlaceholder":640},[478,123873,123874],{"class":480,"line":1769},[478,123875,123876],{"class":770},"#Fedora用下方命令\n",[478,123878,123879,123881,123884,123887],{"class":480,"line":1783},[478,123880,24956],{"class":484},[478,123882,123883],{"class":488}," udevadm",[478,123885,123886],{"class":488}," control",[478,123888,123889],{"class":495}," --reload\n",[478,123891,123892,123894,123896],{"class":480,"line":1789},[478,123893,24956],{"class":484},[478,123895,123883],{"class":488},[478,123897,123898],{"class":488}," trigger\n",[19,123900,123901],{},"再重新插拔设备即可。",[19,123903,123904],{},"（4）.测试",[19,123906,123907],{},"终端下输入如下指令",[469,123909,123911],{"className":117676,"code":123910,"language":117678,"meta":54,"style":54},"ll \u002Fdev | grep ttyUSB\n",[475,123912,123913],{"__ignoreMap":54},[478,123914,123915,123918,123921,123923,123925],{"class":480,"line":481},[478,123916,123917],{"class":484},"ll",[478,123919,123920],{"class":488}," \u002Fdev",[478,123922,25489],{"class":710},[478,123924,30616],{"class":484},[478,123926,123927],{"class":488}," ttyUSB\n",[19,123929,123930],{},"运行结果如下：",[19,123932,123933],{},[52,123934],{"alt":54,"src":123935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123937,123938,123939,123942],{},"也可以多次插拔USB设备，会发现设备端口",[475,123940,123941],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123944,123945],{},[45,123946,118344],{},[19,123948,123949],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[129,123951,123953],{"id":123952},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123955,123956,123958],{},[45,123957,123672],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123960,123961,123963],{},[45,123962,123678],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123965,123966],{},[45,123967,123684],{},[19,123969,123970],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123972,123973],{},"调用如下指令查看第一台雷达的USB信息：",[469,123975,123977],{"className":117676,"code":123976,"language":117678,"meta":54,"style":54},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[475,123978,123979,123999],{"__ignoreMap":54},[478,123980,123981,123984,123986,123989,123992,123994,123996],{"class":480,"line":481},[478,123982,123983],{"class":484},"udevadm",[478,123985,70201],{"class":488},[478,123987,123988],{"class":495}," --attribute-walk",[478,123990,123991],{"class":495}," --name=\u002Fdev\u002FttyUSB0",[478,123993,25489],{"class":710},[478,123995,30616],{"class":484},[478,123997,123998],{"class":488}," KERNELS\n",[478,124000,124001,124003,124005,124007,124010,124012,124014],{"class":480,"line":565},[478,124002,123983],{"class":484},[478,124004,70201],{"class":488},[478,124006,123988],{"class":495},[478,124008,124009],{"class":495}," --name=\u002Fdev\u002FttyACM0",[478,124011,25489],{"class":710},[478,124013,30616],{"class":484},[478,124015,123998],{"class":488},[19,124017,124018],{},[52,124019],{"alt":54,"src":124020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124022,124023],{},"调用如下指令查看第二台雷达的USB信息：",[469,124025,124027],{"className":117676,"code":124026,"language":117678,"meta":54,"style":54},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[475,124028,124029],{"__ignoreMap":54},[478,124030,124031,124033,124035,124037,124040,124042,124044],{"class":480,"line":481},[478,124032,123983],{"class":484},[478,124034,70201],{"class":488},[478,124036,123988],{"class":495},[478,124038,124039],{"class":495}," --name=\u002Fdev\u002FttyUSB1",[478,124041,25489],{"class":710},[478,124043,30616],{"class":484},[478,124045,123998],{"class":488},[19,124047,124048,124049,124052,124053,124056,124057,124060],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[475,124050,124051],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[475,124054,124055],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[45,124058,124059],{},"唯一性标识","”。",[19,124062,123712],{},[19,124064,123715,124065,124067],{},[475,124066,123718],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[469,124069,124070],{"className":117676,"code":123722,"language":117678,"meta":54,"style":54},[475,124071,124072],{"__ignoreMap":54},[478,124073,124074,124076,124078],{"class":480,"line":481},[478,124075,24956],{"class":484},[478,124077,118963],{"class":488},[478,124079,123733],{"class":488},[469,124081,124083],{"className":117676,"code":124082,"language":117678,"meta":54,"style":54},"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",[475,124084,124085,124114],{"__ignoreMap":54},[478,124086,124087,124089,124091,124093,124096,124098,124101,124104,124106,124109,124111],{"class":480,"line":481},[478,124088,123746],{"class":714},[478,124090,759],{"class":710},[478,124092,123751],{"class":488},[478,124094,124095],{"class":714}," KERNELS",[478,124097,759],{"class":710},[478,124099,124100],{"class":488},"=\"1-1.3:1.0\",",[478,124102,124103],{"class":484}," MODE:",[478,124105,759],{"class":488},[478,124107,124108],{"class":484},"\"0777\"",[478,124110,1079],{"class":484},[478,124112,124113],{"class":488}," SYMLINK+=\"rplidar_front\"\n",[478,124115,124116,124118,124120,124122,124124,124126,124129,124131,124133,124135,124137],{"class":480,"line":565},[478,124117,123746],{"class":714},[478,124119,759],{"class":710},[478,124121,123751],{"class":488},[478,124123,124095],{"class":714},[478,124125,759],{"class":710},[478,124127,124128],{"class":488},"=\"1-1.4:1.0\",",[478,124130,124103],{"class":484},[478,124132,759],{"class":488},[478,124134,124108],{"class":484},[478,124136,1079],{"class":484},[478,124138,124139],{"class":488}," SYMLINK+=\"rplidar_back\"\n",[19,124141,123831],{},[19,124143,123834],{},[469,124145,124146],{"className":117676,"code":123837,"language":117678,"meta":54,"style":54},[475,124147,124148,124152,124162,124172,124176,124180,124190],{"__ignoreMap":54},[478,124149,124150],{"class":480,"line":481},[478,124151,123844],{"class":770},[478,124153,124154,124156,124158,124160],{"class":480,"line":565},[478,124155,24956],{"class":484},[478,124157,120428],{"class":488},[478,124159,123853],{"class":488},[478,124161,123856],{"class":488},[478,124163,124164,124166,124168,124170],{"class":480,"line":579},[478,124165,24956],{"class":484},[478,124167,120428],{"class":488},[478,124169,123853],{"class":488},[478,124171,123867],{"class":488},[478,124173,124174],{"class":480,"line":593},[478,124175,2966],{"emptyLinePlaceholder":640},[478,124177,124178],{"class":480,"line":1769},[478,124179,123876],{"class":770},[478,124181,124182,124184,124186,124188],{"class":480,"line":1783},[478,124183,24956],{"class":484},[478,124185,123883],{"class":488},[478,124187,123886],{"class":488},[478,124189,123889],{"class":495},[478,124191,124192,124194,124196],{"class":480,"line":1789},[478,124193,24956],{"class":484},[478,124195,123883],{"class":488},[478,124197,123898],{"class":488},[19,124199,123901],{},[19,124201,123904],{},[19,124203,123907,124204,124207],{},[475,124205,124206],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124209,124210],{},[52,124211],{"alt":54,"src":124212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124214,124215],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124217,124218,124220],{},[45,124219,118344],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[129,124222,124224],{"id":124223},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124226,124227],{},"（1）.查看所连接的主机USB接口的信息",[469,124229,124231],{"className":117676,"code":124230,"language":117678,"meta":54,"style":54},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[475,124232,124233,124263],{"__ignoreMap":54},[478,124234,124235,124237,124239,124242,124244,124246,124248,124250,124253,124256,124258,124261],{"class":480,"line":481},[478,124236,123983],{"class":484},[478,124238,70201],{"class":488},[478,124240,124241],{"class":495}," -a",[478,124243,29596],{"class":495},[478,124245,28802],{"class":714},[478,124247,123983],{"class":484},[478,124249,70201],{"class":488},[478,124251,124252],{"class":495}," -q",[478,124254,124255],{"class":488}," path",[478,124257,25495],{"class":495},[478,124259,124260],{"class":488}," \u002Fdev\u002FttyACM0",[478,124262,720],{"class":714},[478,124264,124265,124267,124269,124271,124273,124275,124277,124279,124281,124283,124285,124288],{"class":480,"line":565},[478,124266,123983],{"class":484},[478,124268,70201],{"class":488},[478,124270,124241],{"class":495},[478,124272,29596],{"class":495},[478,124274,28802],{"class":714},[478,124276,123983],{"class":484},[478,124278,70201],{"class":488},[478,124280,124252],{"class":495},[478,124282,124255],{"class":488},[478,124284,25495],{"class":495},[478,124286,124287],{"class":488}," \u002Fdev\u002FttyUSB0",[478,124289,720],{"class":714},[19,124291,124292],{},[52,124293],{"alt":54,"src":124294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124296,124297],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124299,123712],{},[19,124301,123715,124302,124067],{},[475,124303,123718],{},[469,124305,124306],{"className":117676,"code":123722,"language":117678,"meta":54,"style":54},[475,124307,124308],{"__ignoreMap":54},[478,124309,124310,124312,124314],{"class":480,"line":481},[478,124311,24956],{"class":484},[478,124313,118963],{"class":488},[478,124315,123733],{"class":488},[469,124317,124319],{"className":117676,"code":124318,"language":117678,"meta":54,"style":54},"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",[475,124320,124321,124349,124375],{"__ignoreMap":54},[478,124322,124323,124325,124327,124330,124332,124334,124336,124338,124341,124344,124346],{"class":480,"line":481},[478,124324,123746],{"class":714},[478,124326,759],{"class":710},[478,124328,124329],{"class":488},"=\"ttyACM*\",",[478,124331,123754],{"class":484},[478,124333,123757],{"class":488},[478,124335,123786],{"class":484},[478,124337,1079],{"class":484},[478,124339,124340],{"class":488}," ATTRS{idProduct}==\"55d4\",",[478,124342,124343],{"class":488}," ATTRS{serial}==\"0001\",",[478,124345,123768],{"class":488},[478,124347,124348],{"class":488}," SYMLINK+=\"ttyACM_MCU\"\n",[478,124350,124351,124353,124355,124357,124359,124361,124363,124365,124367,124370,124372],{"class":480,"line":565},[478,124352,123746],{"class":714},[478,124354,759],{"class":710},[478,124356,124329],{"class":488},[478,124358,123754],{"class":484},[478,124360,123757],{"class":488},[478,124362,123786],{"class":484},[478,124364,1079],{"class":484},[478,124366,124340],{"class":488},[478,124368,124369],{"class":488}," ATTRS{serial}==\"0002\",",[478,124371,123768],{"class":488},[478,124373,124374],{"class":488}," SYMLINK+=\"ttyACM_Lidar\"\n",[478,124376,124377,124379,124381,124383,124385,124387,124389,124391,124393,124395],{"class":480,"line":579},[478,124378,123746],{"class":714},[478,124380,759],{"class":710},[478,124382,123751],{"class":488},[478,124384,123754],{"class":484},[478,124386,123757],{"class":488},[478,124388,123786],{"class":484},[478,124390,1079],{"class":484},[478,124392,123791],{"class":488},[478,124394,123768],{"class":488},[478,124396,124397],{"class":488}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124399,123831],{},[19,124401,123834],{},[469,124403,124404],{"className":117676,"code":123837,"language":117678,"meta":54,"style":54},[475,124405,124406,124410,124420,124430,124434,124438,124448],{"__ignoreMap":54},[478,124407,124408],{"class":480,"line":481},[478,124409,123844],{"class":770},[478,124411,124412,124414,124416,124418],{"class":480,"line":565},[478,124413,24956],{"class":484},[478,124415,120428],{"class":488},[478,124417,123853],{"class":488},[478,124419,123856],{"class":488},[478,124421,124422,124424,124426,124428],{"class":480,"line":579},[478,124423,24956],{"class":484},[478,124425,120428],{"class":488},[478,124427,123853],{"class":488},[478,124429,123867],{"class":488},[478,124431,124432],{"class":480,"line":593},[478,124433,2966],{"emptyLinePlaceholder":640},[478,124435,124436],{"class":480,"line":1769},[478,124437,123876],{"class":770},[478,124439,124440,124442,124444,124446],{"class":480,"line":1783},[478,124441,24956],{"class":484},[478,124443,123883],{"class":488},[478,124445,123886],{"class":488},[478,124447,123889],{"class":495},[478,124449,124450,124452,124454],{"class":480,"line":1789},[478,124451,24956],{"class":484},[478,124453,123883],{"class":488},[478,124455,123898],{"class":488},[19,124457,124458,124459],{},"再重新插拔设备即可，或者 ",[45,124460,124461],{},"直接重启系统。",[19,124463,123904],{},[19,124465,123907,124466,124207],{},[475,124467,124206],{},[19,124469,124470],{},[52,124471],{"alt":54,"src":124472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124474,124215],{},[19,124476,124477,124479],{},[45,124478,118344],{}," 一些设备可能没有串口号等。",[129,124481,124483],{"id":124482},"_744-其他注意事项","7.4.4 其他注意事项",[19,124485,124486,124487,124489,124490,124493,124494,18975,124497,124500,124501,124503],{},"并非所有的USB设备端口号都是",[475,124488,123941],{},"的格式，比如Arduino的端口号可能是",[475,124491,124492],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[475,124495,124496],{},"videon",[475,124498,124499],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[475,124502,124496],{},"端口，绑定时需要关联的也是该接口。",[19,124505,124506,124507,124510,124511,124514,124515,124517,124518,124521,124522,124525,124526,124529,124530,124529,124533,124529,124536,28765],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[475,124508,124509],{},"KERNEL==\"ttyUSB*\"","修改为",[475,124512,124513],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[475,124516,124509],{},"修改为类似于",[475,124519,124520],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[475,124523,124524],{},"video[0,2,4,6]","表示可以绑定的端口为",[475,124527,124528],{},"video0","或",[475,124531,124532],{},"video2",[475,124534,124535],{},"video4",[475,124537,124538],{},"video6",[14,124540,124542],{"id":124541},"_75-挂载内网网页","7.5 挂载内网网页",[19,124544,124545],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124547,124548],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124550,124551],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124553,124554,124555],{},"Termux 下载地址（F-Droid）：",[518,124556,124557],{"href":124557,"rel":124558},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[522],[19,124560,124561],{},"首先打开app后，先更新软件缓存：",[469,124563,124565],{"className":117676,"code":124564,"language":117678,"meta":54,"style":54},"pkg update\n",[475,124566,124567],{"__ignoreMap":54},[478,124568,124569,124572],{"class":480,"line":481},[478,124570,124571],{"class":484},"pkg",[478,124573,26622],{"class":488},[19,124575,124576],{},"然后换源",[469,124578,124580],{"className":117676,"code":124579,"language":117678,"meta":54,"style":54},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[475,124581,124582],{"__ignoreMap":54},[478,124583,124584,124586,124589],{"class":480,"line":481},[478,124585,123454],{"class":484},[478,124587,124588],{"class":714}," $PREFIX",[478,124590,124591],{"class":488},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124593,124594],{},"将该文件内容替换为下面：",[469,124596,124598],{"className":117676,"code":124597,"language":117678,"meta":54,"style":54},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[475,124599,124600],{"__ignoreMap":54},[478,124601,124602,124605,124608,124611],{"class":480,"line":481},[478,124603,124604],{"class":484},"deb",[478,124606,124607],{"class":488}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[478,124609,124610],{"class":488}," stable",[478,124612,124613],{"class":488}," main\n",[1702,124615,124616,124643],{},[32,124617,124618,124619,124621,124622],{},"如果你使用的是",[475,124620,123454],{},"编辑器：",[1702,124623,124624,124631,124637],{},[32,124625,124626,124627,124630],{},"按 ",[475,124628,124629],{},"Ctrl+O"," 保存文件。",[32,124632,124626,124633,124636],{},[475,124634,124635],{},"Enter"," 确认文件名。",[32,124638,124626,124639,124642],{},[475,124640,124641],{},"Ctrl+X"," 退出编辑器。",[32,124644,124618,124645,124621,124648],{},[475,124646,124647],{},"vim",[1702,124649,124650,124656],{},[32,124651,124626,124652,124655],{},[475,124653,124654],{},"Esc"," 退出编辑模式。",[32,124657,124658,124659,124661],{},"输入 ",[475,124660,119601],{}," 保存并退出。",[19,124663,124664],{},"接下来重新更新软件源：",[469,124666,124668],{"className":117676,"code":124667,"language":117678,"meta":54,"style":54},"pkg update && pkg upgrade\n",[475,124669,124670],{"__ignoreMap":54},[478,124671,124672,124674,124676,124678,124680],{"class":480,"line":481},[478,124673,124571],{"class":484},[478,124675,117727],{"class":488},[478,124677,26570],{"class":714},[478,124679,124571],{"class":484},[478,124681,117713],{"class":488},[19,124683,124684],{},"安装python：",[469,124686,124688],{"className":117676,"code":124687,"language":117678,"meta":54,"style":54},"pkg install python\n",[475,124689,124690],{"__ignoreMap":54},[478,124691,124692,124694,124696],{"class":480,"line":481},[478,124693,124571],{"class":484},[478,124695,489],{"class":488},[478,124697,124698],{"class":488}," python\n",[19,124700,124701,26853],{},[45,124702,124703],{},"通过Termux访问设备存储",[19,124705,124706],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[469,124708,124710],{"className":117676,"code":124709,"language":117678,"meta":54,"style":54},"termux-setup-storage\n",[475,124711,124712],{"__ignoreMap":54},[478,124713,124714],{"class":480,"line":481},[478,124715,124709],{"class":484},[29,124717,124718],{},[32,124719,124720,26853,124723],{},[45,124721,124722],{},"进入HTML文件所在的目录",[29,124724,124725],{},[32,124726,124727,124728,124730],{},"使用",[475,124729,101656],{},"命令进入HTML文件所在的目录：",[469,124732,124734],{"className":117676,"code":124733,"language":117678,"meta":54,"style":54},"cd ~\u002Fyour_html_folder\n",[475,124735,124736],{"__ignoreMap":54},[478,124737,124738,124740],{"class":480,"line":481},[478,124739,101656],{"class":495},[478,124741,124742],{"class":488}," ~\u002Fyour_html_folder\n",[29,124744,124745],{"start":565},[32,124746,124747,26853,124750,124755,124772],{},[45,124748,124749],{},"启动Python HTTP服务器",[29,124751,124752],{},[32,124753,124754],{},"运行以下命令启动一个简单的HTTP服务器：",[469,124756,124758],{"className":117676,"code":124757,"language":117678,"meta":54,"style":54},"python -m http.server 8000\n",[475,124759,124760],{"__ignoreMap":54},[478,124761,124762,124764,124766,124769],{"class":480,"line":481},[478,124763,30760],{"class":484},[478,124765,101262],{"class":495},[478,124767,124768],{"class":488}," http.server",[478,124770,124771],{"class":495}," 8000\n",[29,124773,124774],{"start":579},[32,124775,124776,124777,124780],{},"这会在端口",[475,124778,124779],{},"8000","上启动一个Web服务器。",[1702,124782,124783],{},[32,124784,124785],{},"启动服务器后，Termux会显示日志信息，例如：",[469,124787,124789],{"className":121196,"code":124788,"language":121198,"meta":121199,"style":54},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[475,124790,124791],{"__ignoreMap":54},[478,124792,124793],{"class":480,"line":481},[478,124794,124788],{},[1702,124796,124797],{},[32,124798,124799],{},"这表示服务器已成功启动。",[19,124801,124802],{},[45,124803,124804],{},"在浏览器中访问HTML文件",[29,124806,124807],{},[32,124808,124809,26853,124812,124817],{},[45,124810,124811],{},"在同一设备上访问",[29,124813,124814],{},[32,124815,124816],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[469,124818,124821],{"className":124819,"code":124820,"language":72044,"meta":54,"style":54},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[475,124822,124823],{"__ignoreMap":54},[478,124824,124825,124828],{"class":480,"line":481},[478,124826,124827],{"class":714},"http:",[478,124829,124830],{"class":770},"\u002F\u002Flocalhost:8000\n",[1702,124832,124833],{},[32,124834,124835,124836,124839],{},"如果HTML文件中有",[475,124837,124838],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124841,124843],{"id":124842},"_76-linux重点知识","7.6 Linux重点知识",[129,124845,124847],{"id":124846},"_761-关于点的说明","7.6.1 关于点的说明",[19,124849,124850],{},[52,124851],{"alt":54,"src":124852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124854,124855],{},"一点本目录，两点上目录",[129,124857,124859],{"id":124858},"_762-目录","7.6.2 目录",[22563,124861,124863],{"id":124862},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124865,124866],{},[45,124867,124868],{},"\u002Fboot:",[19,124870,124871],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124873,124874],{},[45,124875,124876],{},"\u002Fetc:",[19,124878,124879],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124881,124882],{},[45,124883,124884],{},"\u002Flib：",[19,124886,124887],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124889,124890],{},[45,124891,124892],{},"\u002Fsys:",[19,124894,124895],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22563,124897,124899],{"id":124898},"_7622-指令集合","7.6.2.2 指令集合",[19,124901,124902],{},[45,124903,124904],{},"\u002Fbin:",[19,124906,124907],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124909,124910],{},[45,124911,124912],{},"\u002Fsbin:",[19,124914,124915],{},"只有系统管理员才能使用的程序和指令",[22563,124917,124919],{"id":124918},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124921,124922],{},[45,124923,124924],{},"\u002Fdev:",[19,124926,124927],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124929,124930],{},[45,124931,124932],{},"\u002Fmedia:",[19,124934,124935],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124937,124938],{},[45,124939,124940],{},"\u002Fmnt:",[19,124942,124943],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22563,124945,124947],{"id":124946},"_7624-临时文件","7.6.2.4 临时文件",[19,124949,124950],{},[45,124951,124952],{},"\u002Frun:",[19,124954,124955],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124957,124958],{},[45,124959,124960],{},"\u002Flost+found:",[19,124962,124963],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124965,124966],{},[45,124967,124968],{},"\u002Ftmp:",[19,124970,124971],{},"这个目录是用来存放一些临时文件的",[22563,124973,124975],{"id":124974},"_7625-账户","7.6.2.5 账户",[19,124977,124978],{},[45,124979,124980],{},"\u002Froot：",[19,124982,124983],{},"系统管理员的用户主目录",[19,124985,124986,26853],{},[45,124987,124988],{},"\u002Fhome",[19,124990,124991],{},"用户的主目录，以用户的账号命名的",[19,124993,124994,26853],{},[45,124995,124996],{},"\u002Fusr",[19,124998,124999],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125001,125002],{},[45,125003,125004],{},"\u002Fusr\u002Fbin：",[19,125006,125007],{},"系统用户使用的应用程序与指令",[19,125009,125010],{},[45,125011,125012],{},"\u002Fusr\u002Fsbin：",[19,125014,125015],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125017,125018],{},[45,125019,125020],{},"\u002Fusr\u002Fsrc：",[19,125022,125023],{},"内核源代码默认的放置目录",[22563,125025,125027],{"id":125026},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125029,125030],{},[45,125031,125032],{},"\u002Fvar：",[19,125034,125035],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125037,125038],{},[45,125039,125040],{},"\u002Fproc:",[19,125042,125043,125044,125047],{},"管理 ",[45,125045,125046],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22563,125049,125051],{"id":125050},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125053,125054],{},[45,125055,125056],{},"\u002Fopt:",[19,125058,125059],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125061,125062],{},[45,125063,125064],{},"\u002Fsrv:",[19,125066,125067],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[129,125069,125071],{"id":125070},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125073,125074],{},[52,125075],{"alt":54,"src":125076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125078,125079],{},"windows-->linux:",[19,125081,125082],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125084,125085],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125087,125088],{},"linux传输文件到windows",[19,125090,125091],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[129,125093,125095],{"id":125094},"_764-易忘知识","7.6.4 易忘知识",[19,125097,125098],{},"操作系统内核查看",[469,125100,125101],{"className":117676,"code":121670,"language":117678,"meta":54,"style":54},[475,125102,125103],{"__ignoreMap":54},[478,125104,125105,125107],{"class":480,"line":481},[478,125106,70584],{"class":484},[478,125108,121679],{"class":495},[19,125110,125111],{},[52,125112],{"alt":54,"src":125113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125115,125116],{},[52,125117],{"alt":54,"src":125118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[469,125120,125122],{"className":117676,"code":125121,"language":117678,"meta":54,"style":54},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[475,125123,125124,125136],{"__ignoreMap":54},[478,125125,125126,125128,125131,125134],{"class":480,"line":481},[478,125127,121887],{"class":484},[478,125129,125130],{"class":488}," mvtest",[478,125132,125133],{"class":488}," mvtest2",[478,125135,3240],{"class":714},[478,125137,125138],{"class":480,"line":565},[478,125139,125140],{"class":484},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125142,125143],{},[52,125144],{"alt":54,"src":125145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125147,125148],{},[52,125149],{"alt":54,"src":125150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125152,125153,125154,125157],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[475,125155,125156],{},"du -a"," 可以快速查看磁盘使用细节。",[129,125159,125161],{"id":125160},"_765-vim","7.6.5 Vim",[19,125163,125164],{},[52,125165],{"alt":54,"src":125166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125168,125169],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125171,125172],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125174,125175],{},[45,125176,125177],{},"1.命令模式：",[19,125179,125180],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125182,125183],{},"x 删除当前光标所在处的字符",[19,125185,125186],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125188,125189],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125191,125192],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125194,125195],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125197,125198],{},"dd 剪切当前行",[19,125200,125201],{},"yy 复制当前行",[19,125203,125204],{},"p 粘贴剪贴板内容到光标下方",[19,125206,125207],{},"P 粘贴剪贴板内容到光标上方",[19,125209,125210],{},"u 撤销上一次操作",[19,125212,125213],{},"ctrl+r 重做上一次操作",[19,125215,125216,125218],{},[1490,125217],{}," 保存文件",[19,125220,125221,125223],{},[1343,125222],{}," 退出Vim编辑器",[19,125225,125226,125228],{},[1343,125227],{},"! 强制退出Vim编辑器，不保存修改",[19,125230,125231],{},[45,125232,125233],{},"2.输入模式：",[19,125235,125236],{},[52,125237],{"alt":54,"src":125238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125240,125241],{},[45,125242,125243],{},"3.底线命令模式：",[19,125245,125246],{},[52,125247],{"alt":54,"src":125248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125250,125251],{},"按下esc可以退出底线命令模式",[129,125253,125255],{"id":125254},"_766-apt","7.6.6 apt",[19,125257,125258],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[129,125260,125262],{"id":125261},"_767-home与root的区别","7.6.7 home与root的区别",[19,125264,125265],{},[52,125266],{"alt":54,"src":125267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125269,125270],{},[52,125271],{"alt":54,"src":125272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125274,125275],{},[52,125276],{"alt":54,"src":125277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125279,125280],{},[52,125281],{"alt":54,"src":125282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[129,125284,125286],{"id":125285},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125288,125289],{},[518,125290,125291],{"href":125291,"rel":125292},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[522],[29,125294,125295,125298],{},[32,125296,125297],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[32,125299,125300],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125302,125303],{},[52,125304],{"alt":54,"src":125305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125307,125308],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125310,125311],{},[52,125312],{"alt":54,"src":125313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[469,125315,125317],{"className":121196,"code":125316,"language":121198,"meta":121199,"style":54},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[475,125318,125319,125324],{"__ignoreMap":54},[478,125320,125321],{"class":480,"line":481},[478,125322,125323],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[478,125325,125326],{"class":480,"line":565},[478,125327,125328],{},".\u002Fpycharm.sh\n",[19,125330,125331],{},"3️⃣创建.desktop文件",[19,125333,125334],{},[45,125335,125336],{},"原理：",[1702,125338,125339,125349],{},[32,125340,125341,125342,125348],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[45,125343,125344,125347],{},[475,125345,125346],{},".desktop"," 文件"," 来识别应用。",[32,125350,125351,125353,125354],{},[475,125352,125346],{}," 文件相当于一个“应用注册表”，告诉系统：",[1702,125355,125356,125359,125362,125365,125368],{},[32,125357,125358],{},"应用名字（Name）",[32,125360,125361],{},"图标（Icon）",[32,125363,125364],{},"执行命令（Exec）",[32,125366,125367],{},"分类（Categories）",[32,125369,125370],{},"是否需要终端（Terminal）",[469,125372,125374],{"className":121196,"code":125373,"language":121198,"meta":121199,"style":54},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[475,125375,125376,125381],{"__ignoreMap":54},[478,125377,125378],{"class":480,"line":481},[478,125379,125380],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[478,125382,125383],{"class":480,"line":565},[478,125384,125385],{},"nano pycharm.desktop\n",[19,125387,125388],{},"nano是一个命令行下的编辑器，也可以使用vim",[469,125390,125392],{"className":121196,"code":125391,"language":121198,"meta":121199,"style":54},"[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",[475,125393,125394,125399,125404,125409,125414,125419,125424,125429,125434,125439],{"__ignoreMap":54},[478,125395,125396],{"class":480,"line":481},[478,125397,125398],{},"[Desktop Entry]\n",[478,125400,125401],{"class":480,"line":565},[478,125402,125403],{},"Version=1.0\n",[478,125405,125406],{"class":480,"line":579},[478,125407,125408],{},"Type=Application\n",[478,125410,125411],{"class":480,"line":593},[478,125412,125413],{},"Name=PyCharm\n",[478,125415,125416],{"class":480,"line":1769},[478,125417,125418],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[478,125420,125421],{"class":480,"line":1783},[478,125422,125423],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[478,125425,125426],{"class":480,"line":1789},[478,125427,125428],{},"Comment=JetBrains PyCharm IDE\n",[478,125430,125431],{"class":480,"line":1880},[478,125432,125433],{},"Categories=Development;IDE;\n",[478,125435,125436],{"class":480,"line":1886},[478,125437,125438],{},"Terminal=false\n",[478,125440,125441],{"class":480,"line":1898},[478,125442,125443],{},"StartupWMClass=jetbrains-pycharm\n",[1702,125445,125446,125452,125458,125464],{},[32,125447,125448,125451],{},[475,125449,125450],{},"Exec"," → 点击图标时执行的命令",[32,125453,125454,125457],{},[475,125455,125456],{},"Icon"," → 显示在菜单和桌面上的图标",[32,125459,125460,125463],{},[475,125461,125462],{},"Terminal=false"," → 不打开终端",[32,125465,125466,125469],{},[475,125467,125468],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125471,125472,125473],"blockquote",{},[19,125474,125475,125476,125478,125479],{},"可以理解成 ",[475,125477,125346],{}," 文件是 Linux 的 ",[45,125480,125481],{},"快捷方式配置文件",[19,125483,125484],{},"4️⃣设置可执行权限",[469,125486,125488],{"className":121196,"code":125487,"language":121198,"meta":121199,"style":54},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[475,125489,125490],{"__ignoreMap":54},[478,125491,125492],{"class":480,"line":481},[478,125493,125487],{},[19,125495,125496],{},"5️⃣桌面图标启动的话如下：",[469,125498,125500],{"className":121196,"code":125499,"language":121198,"meta":121199,"style":54},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[475,125501,125502,125507],{"__ignoreMap":54},[478,125503,125504],{"class":480,"line":481},[478,125505,125506],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[478,125508,125509],{"class":480,"line":565},[478,125510,125511],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[29,125513,125514],{"start":579},[32,125515,125516],{},"下载Appimage文件实现软件的安装",[19,125518,125519],{},"1️⃣先下载appimage",[19,125521,125522],{},[518,125523,125524],{"href":125524,"rel":125525},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[522],[19,125527,125528],{},[52,125529],{"alt":54,"src":125530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125532,125533],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125535,125536],{},[52,125537],{"alt":54,"src":125538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125540,125541],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125543,125544],{},[52,125545],{"alt":54,"src":125546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125548,125549],{},[52,125550],{"alt":54,"src":125551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125553,125554,125555,125558],{},"3️⃣给他们放在",[475,125556,125557],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125560,125561],{},"4️⃣给软件执行权限",[469,125563,125565],{"className":121196,"code":125564,"language":121198,"meta":121199,"style":54},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[475,125566,125567,125572],{"__ignoreMap":54},[478,125568,125569],{"class":480,"line":481},[478,125570,125571],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[478,125573,125574],{"class":480,"line":565},[478,125575,125576],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125578,125579],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[469,125581,125583],{"className":117676,"code":125582,"language":117678,"meta":54,"style":54},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[475,125584,125585,125592,125599,125605],{"__ignoreMap":54},[478,125586,125587,125589],{"class":480,"line":481},[478,125588,101656],{"class":495},[478,125590,125591],{"class":488}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[478,125593,125594,125596],{"class":480,"line":565},[478,125595,101663],{"class":484},[478,125597,125598],{"class":488}," .\u002Fqqmusic.desktop\n",[478,125600,125601,125603],{"class":480,"line":579},[478,125602,124647],{"class":484},[478,125604,125598],{"class":488},[478,125606,125607,125609,125611,125613],{"class":480,"line":593},[478,125608,24956],{"class":484},[478,125610,24959],{"class":488},[478,125612,123513],{"class":488},[478,125614,125598],{"class":488},[19,125616,125617,125619],{},[475,125618,101663],{},"：一个 Linux 命令，主要功能是：",[1702,125621,125622,125625],{},[32,125623,125624],{},"如果文件不存在，就创建一个新的空文件",[32,125626,125627],{},"如果文件已存在，就更新该文件的最后修改时间",[469,125629,125631],{"className":121196,"code":125630,"language":121198,"meta":121199,"style":54},"[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",[475,125632,125633,125637,125642,125647,125652,125656,125661],{"__ignoreMap":54},[478,125634,125635],{"class":480,"line":481},[478,125636,125398],{},[478,125638,125639],{"class":480,"line":565},[478,125640,125641],{},"Name=QQ音乐\n",[478,125643,125644],{"class":480,"line":579},[478,125645,125646],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[478,125648,125649],{"class":480,"line":593},[478,125650,125651],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[478,125653,125654],{"class":480,"line":1769},[478,125655,125408],{},[478,125657,125658],{"class":480,"line":1783},[478,125659,125660],{},"Categories=Audio;Music;Player;\n",[478,125662,125663],{"class":480,"line":1789},[478,125664,125665],{},"Comment=QQ Music Client for Linux\n",[19,125667,125668],{},"将文件复制进去",[19,125670,125671],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125673,125674],{},[52,125675],{"alt":54,"src":125676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125678,125679],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125681,125682],{},[52,125683],{"alt":54,"src":125684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125686,125687,125688,125691,125692,125695],{},"如果你用的不是KDE，那么也可以直接修改",[475,125689,125690],{},"qqmuic.desktop","：在exec的末尾加上",[475,125693,125694],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[469,125697,125699],{"className":121196,"code":125698,"language":121198,"meta":121199,"style":54},"[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",[475,125700,125701,125705,125709,125714,125718,125722,125726],{"__ignoreMap":54},[478,125702,125703],{"class":480,"line":481},[478,125704,125398],{},[478,125706,125707],{"class":480,"line":565},[478,125708,125641],{},[478,125710,125711],{"class":480,"line":579},[478,125712,125713],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[478,125715,125716],{"class":480,"line":593},[478,125717,125651],{},[478,125719,125720],{"class":480,"line":1769},[478,125721,125408],{},[478,125723,125724],{"class":480,"line":1783},[478,125725,125660],{},[478,125727,125728],{"class":480,"line":1789},[478,125729,125665],{},[19,125731,125732],{},[52,125733],{"alt":54,"src":125734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125736,125737],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[469,125739,125741],{"className":121196,"code":125740,"language":121198,"meta":121199,"style":54},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[475,125742,125743],{"__ignoreMap":54},[478,125744,125745],{"class":480,"line":481},[478,125746,125740],{},[29,125748,125749],{"start":593},[32,125750,125751],{},"去Flathub上安装软件",[19,125753,125754],{},[518,125755,125756],{"href":125756,"rel":125757},"https:\u002F\u002Fflathub.org\u002F",[522],[19,125759,125760],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125762,125763],{},[52,125764],{"alt":54,"src":125765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[469,125767,125769],{"className":121196,"code":125768,"language":121198,"meta":121199,"style":54},"flatpak install flathub com.obsproject.Studio\n",[475,125770,125771],{"__ignoreMap":54},[478,125772,125773],{"class":480,"line":481},[478,125774,125768],{},[19,125776,125777],{},[52,125778],{"alt":54,"src":125779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125781,125782],{},"2️⃣运行软件",[19,125784,125785],{},"a.官方方式：",[19,125787,125788],{},[52,125789],{"alt":54,"src":125790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[469,125792,125793],{"className":121196,"code":125768,"language":121198,"meta":121199,"style":54},[475,125794,125795],{"__ignoreMap":54},[478,125796,125797],{"class":480,"line":481},[478,125798,125768],{},[19,125800,125801],{},"b.当普通软件运行：",[19,125803,125804],{},[52,125805],{"alt":54,"src":125806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125808,125809],{},[52,125810],{"alt":54,"src":125811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[617,125813,125814],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":54,"searchDepth":565,"depth":565,"links":125816},[125817,125818,125823,125824,125830,125831],{"id":122549,"depth":565,"text":122550},{"id":122891,"depth":565,"text":122892,"children":125819},[125820,125821,125822],{"id":122895,"depth":579,"text":122896},{"id":122962,"depth":579,"text":122963},{"id":123223,"depth":579,"text":123224},{"id":123376,"depth":565,"text":123377},{"id":123614,"depth":565,"text":123615,"children":125825},[125826,125827,125828,125829],{"id":123666,"depth":579,"text":123667},{"id":123952,"depth":579,"text":123953},{"id":124223,"depth":579,"text":124224},{"id":124482,"depth":579,"text":124483},{"id":124541,"depth":565,"text":124542},{"id":124842,"depth":565,"text":124843,"children":125832},[125833,125834,125835,125836,125837,125838,125839,125840],{"id":124846,"depth":579,"text":124847},{"id":124858,"depth":579,"text":124859},{"id":125070,"depth":579,"text":125071},{"id":125094,"depth":579,"text":125095},{"id":125160,"depth":579,"text":125161},{"id":125254,"depth":579,"text":125255},{"id":125261,"depth":579,"text":125262},{"id":125285,"depth":579,"text":125286},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122541,"description":23942},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125847,"title":125848,"body":125849,"description":23942,"extension":638,"meta":125853,"navigation":640,"path":125854,"seo":125855,"stem":125856,"__hash__":125857},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125850,"toc":125851},[],{"title":54,"searchDepth":565,"depth":565,"links":125852},[],{"category":30643},"\u002Fwiki\u002F2025-01-27-linux",{"title":125848,"description":23942},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125859,"title":125860,"body":125861,"description":125865,"extension":638,"meta":126256,"navigation":640,"path":126257,"seo":126258,"stem":126259,"__hash__":126260},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125862,"toc":126254},[125863,125866,125870,125887,125890,125943,125947,125949,125989,125998,126002,126005,126246,126251],[19,125864,125865],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125867,125869],{"id":125868},"_1ubuntu环境配置","1.Ubuntu环境配置",[29,125871,125872,125875,125878,125881,125884],{},[32,125873,125874],{},"ubuntu环境换源",[32,125876,125877],{},"安装cuda",[32,125879,125880],{},"安装miniconda",[32,125882,125883],{},"安装pytorch",[32,125885,125886],{},"安装genesis",[19,125888,125889],{},"参考链接：",[469,125891,125893],{"className":471,"code":125892,"language":473,"meta":54,"style":54},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[475,125894,125895],{"__ignoreMap":54},[478,125896,125897,125900,125903,125906,125908,125911,125914,125916,125919,125922,125924,125927,125930,125932,125935,125938,125940],{"class":480,"line":481},[478,125898,125899],{"class":484},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[478,125901,125902],{"class":488},"=blogdetail",[478,125904,125905],{"class":714},"&sharetype",[478,125907,759],{"class":710},[478,125909,125910],{"class":488},"blogdetail",[478,125912,125913],{"class":714},"&sharerId",[478,125915,759],{"class":710},[478,125917,125918],{"class":488},"144728092",[478,125920,125921],{"class":714},"&sharerefer",[478,125923,759],{"class":710},[478,125925,125926],{"class":488},"PC",[478,125928,125929],{"class":714},"&sharesource",[478,125931,759],{"class":710},[478,125933,125934],{"class":488},"qq_69379513",[478,125936,125937],{"class":714},"&sharefrom",[478,125939,759],{"class":710},[478,125941,125942],{"class":488},"from_link\n",[10,125944,125946],{"id":125945},"_2genesis-报错issue","2.Genesis 报错issue",[19,125948,125889],{},[469,125950,125951],{"className":471,"code":125892,"language":473,"meta":54,"style":54},[475,125952,125953],{"__ignoreMap":54},[478,125954,125955,125957,125959,125961,125963,125965,125967,125969,125971,125973,125975,125977,125979,125981,125983,125985,125987],{"class":480,"line":481},[478,125956,125899],{"class":484},[478,125958,125902],{"class":488},[478,125960,125905],{"class":714},[478,125962,759],{"class":710},[478,125964,125910],{"class":488},[478,125966,125913],{"class":714},[478,125968,759],{"class":710},[478,125970,125918],{"class":488},[478,125972,125921],{"class":714},[478,125974,759],{"class":710},[478,125976,125926],{"class":488},[478,125978,125929],{"class":714},[478,125980,759],{"class":710},[478,125982,125934],{"class":488},[478,125984,125937],{"class":714},[478,125986,759],{"class":710},[478,125988,125942],{"class":488},[469,125990,125992],{"className":471,"code":125991,"language":473,"meta":54,"style":54},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[475,125993,125994],{"__ignoreMap":54},[478,125995,125996],{"class":480,"line":481},[478,125997,125991],{"class":484},[10,125999,126001],{"id":126000},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126003,126004],{},"hello_robot.py",[469,126006,126008],{"className":30758,"code":126007,"language":30760,"meta":54,"style":54},"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",[475,126009,126010,126016,126031,126035,126047,126059,126063,126076,126080,126099,126109,126119,126133,126137,126141,126146,126150,126160,126167,126181,126188,126198,126203,126207,126225,126230,126234,126241],{"__ignoreMap":54},[478,126011,126012,126014],{"class":480,"line":481},[478,126013,30772],{"class":710},[478,126015,45685],{"class":714},[478,126017,126018,126021,126024,126026,126028],{"class":480,"line":565},[478,126019,126020],{"class":714},"os.environ[",[478,126022,126023],{"class":488},"'PYOPENGL_PLATFORM'",[478,126025,5009],{"class":714},[478,126027,759],{"class":710},[478,126029,126030],{"class":488}," 'glx'\n",[478,126032,126033],{"class":480,"line":579},[478,126034,2966],{"emptyLinePlaceholder":640},[478,126036,126037,126039,126042,126044],{"class":480,"line":593},[478,126038,30772],{"class":710},[478,126040,126041],{"class":714}," genesis ",[478,126043,31763],{"class":710},[478,126045,126046],{"class":714}," gs\n",[478,126048,126049,126051,126054,126056],{"class":480,"line":1769},[478,126050,31117],{"class":710},[478,126052,126053],{"class":714}," pynput ",[478,126055,30772],{"class":710},[478,126057,126058],{"class":714}," keyboard\n",[478,126060,126061],{"class":480,"line":1783},[478,126062,2966],{"emptyLinePlaceholder":640},[478,126064,126065,126068,126071,126073],{"class":480,"line":1789},[478,126066,126067],{"class":714},"gs.init(",[478,126069,126070],{"class":5782},"backend",[478,126072,759],{"class":710},[478,126074,126075],{"class":714},"gs.gpu)\n",[478,126077,126078],{"class":480,"line":1880},[478,126079,2966],{"emptyLinePlaceholder":640},[478,126081,126082,126085,126087,126090,126093,126095,126097],{"class":480,"line":1886},[478,126083,126084],{"class":714},"scene ",[478,126086,759],{"class":710},[478,126088,126089],{"class":714}," gs.Scene(",[478,126091,126092],{"class":5782},"show_viewer",[478,126094,759],{"class":710},[478,126096,31856],{"class":495},[478,126098,720],{"class":714},[478,126100,126101,126104,126106],{"class":480,"line":1898},[478,126102,126103],{"class":714},"plane ",[478,126105,759],{"class":710},[478,126107,126108],{"class":714}," scene.add_entity(gs.morphs.Plane())\n",[478,126110,126111,126114,126116],{"class":480,"line":2180},[478,126112,126113],{"class":714},"franka ",[478,126115,759],{"class":710},[478,126117,126118],{"class":714}," scene.add_entity(\n",[478,126120,126121,126124,126126,126128,126131],{"class":480,"line":2185},[478,126122,126123],{"class":714},"    gs.morphs.MJCF(",[478,126125,45734],{"class":5782},[478,126127,759],{"class":710},[478,126129,126130],{"class":488},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[478,126132,38427],{"class":714},[478,126134,126135],{"class":480,"line":2191},[478,126136,720],{"class":714},[478,126138,126139],{"class":480,"line":2196},[478,126140,2966],{"emptyLinePlaceholder":640},[478,126142,126143],{"class":480,"line":2210},[478,126144,126145],{"class":714},"scene.build()\n",[478,126147,126148],{"class":480,"line":2215},[478,126149,2966],{"emptyLinePlaceholder":640},[478,126151,126152,126154,126157],{"class":480,"line":2221},[478,126153,32327],{"class":710},[478,126155,126156],{"class":484}," on_press",[478,126158,126159],{"class":714},"(key):\n",[478,126161,126162,126165],{"class":480,"line":2241},[478,126163,126164],{"class":710},"    try",[478,126166,4305],{"class":714},[478,126168,126169,126171,126174,126176,126179],{"class":480,"line":2246},[478,126170,3063],{"class":710},[478,126172,126173],{"class":714}," key.char ",[478,126175,3515],{"class":710},[478,126177,126178],{"class":488}," 'q'",[478,126180,4305],{"class":714},[478,126182,126183,126185],{"class":480,"line":2260},[478,126184,16297],{"class":710},[478,126186,126187],{"class":495}," False\n",[478,126189,126190,126193,126196],{"class":480,"line":2265},[478,126191,126192],{"class":710},"    except",[478,126194,126195],{"class":495}," AttributeError",[478,126197,4305],{"class":714},[478,126199,126200],{"class":480,"line":2294},[478,126201,126202],{"class":710},"        pass\n",[478,126204,126205],{"class":480,"line":2299},[478,126206,2966],{"emptyLinePlaceholder":640},[478,126208,126209,126212,126214,126217,126220,126222],{"class":480,"line":2316},[478,126210,126211],{"class":714},"listener ",[478,126213,759],{"class":710},[478,126215,126216],{"class":714}," keyboard.Listener(",[478,126218,126219],{"class":5782},"on_press",[478,126221,759],{"class":710},[478,126223,126224],{"class":714},"on_press)\n",[478,126226,126227],{"class":480,"line":2321},[478,126228,126229],{"class":714},"listener.start()\n",[478,126231,126232],{"class":480,"line":2326},[478,126233,2966],{"emptyLinePlaceholder":640},[478,126235,126236,126238],{"class":480,"line":2331},[478,126237,109043],{"class":710},[478,126239,126240],{"class":714}," listener.running:\n",[478,126242,126243],{"class":480,"line":2345},[478,126244,126245],{"class":714},"    scene.step()\n",[19,126247,126248],{},[52,126249],{"alt":54,"src":126250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[617,126252,126253],{},"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":54,"searchDepth":565,"depth":565,"links":126255},[],{"category":23944},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125860,"description":125865},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126262,"title":126263,"body":126264,"description":23942,"extension":638,"meta":126279,"navigation":640,"path":126280,"seo":126281,"stem":126282,"__hash__":126283},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126265,"toc":126276},[126266,126269,126273],[10,126267,126263],{"id":126268},"_1-基础知识",[14,126270,126272],{"id":126271},"_11-js的组成","1.1 js的组成",[19,126274,126275],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":54,"searchDepth":565,"depth":565,"links":126277},[126278],{"id":126271,"depth":565,"text":126272},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126263,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126285,"title":126286,"body":126287,"description":23942,"extension":638,"meta":126426,"navigation":640,"path":126427,"seo":126428,"stem":126429,"__hash__":126430},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126288,"toc":126414},[126289,126292,126296,126299,126303,126313,126317,126320,126323,126326,126330,126337,126343,126347,126353,126364,126368,126371,126375,126378,126382,126385,126389,126392,126396,126399,126402,126405,126408,126411],[10,126290,126286],{"id":126291},"_2-vscode必备内容",[14,126293,126295],{"id":126294},"_21-标签分类","2.1 标签分类",[19,126297,126298],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126300,126302],{"id":126301},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126304,126305,126306,126308,126309,126312],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[475,126307,929],{}," 然后按 ",[475,126310,126311],{},"Tab","，快速自动生成基本结构。",[14,126314,126316],{"id":126315},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126318,126319],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126321,126322],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126324,126325],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126327,126329],{"id":126328},"_24-视图缩放","2.4 视图缩放",[19,126331,126332,126333,126336],{},"缩放视图 ",[475,126334,126335],{},"ctrl+"," 可实现代码增大。",[19,126338,126339,126342],{},[475,126340,126341],{},"ctrl-"," 可实现代码减小。",[14,126344,126346],{"id":126345},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126348,126349,126350,28765],{},"VSCode 新建文件快捷键为 ",[475,126351,126352],{},"ctrl+N",[19,126354,126355,126356,126359,126360,126363],{},"保存快捷键为 ",[475,126357,126358],{},"ctrl+S","，将文本保存为 ",[475,126361,126362],{},".html"," 文件。",[14,126365,126367],{"id":126366},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126369,126370],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126372,126374],{"id":126373},"_27-vscode-icons","2.7 vscode-icons",[19,126376,126377],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126379,126381],{"id":126380},"_28-easy-less","2.8 Easy LESS",[19,126383,126384],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126386,126388],{"id":126387},"_29-会了吧插件","2.9 会了吧插件",[19,126390,126391],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126393,126395],{"id":126394},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126397,126398],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126400,126401],{},"②选定多个相同的单词:ctrl+D",[19,126403,126404],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126406,126407],{},"④全局替换某些单词:ctrl+h",[19,126409,126410],{},"⑤快速定位到某一行:ctrl+g",[19,126412,126413],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":54,"searchDepth":565,"depth":565,"links":126415},[126416,126417,126418,126419,126420,126421,126422,126423,126424,126425],{"id":126294,"depth":565,"text":126295},{"id":126301,"depth":565,"text":126302},{"id":126315,"depth":565,"text":126316},{"id":126328,"depth":565,"text":126329},{"id":126345,"depth":565,"text":126346},{"id":126366,"depth":565,"text":126367},{"id":126373,"depth":565,"text":126374},{"id":126380,"depth":565,"text":126381},{"id":126387,"depth":565,"text":126388},{"id":126394,"depth":565,"text":126395},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126286,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126432,"title":126433,"body":126434,"description":23942,"extension":638,"meta":126593,"navigation":640,"path":126594,"seo":126595,"stem":126596,"__hash__":126597},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126435,"toc":126585},[126436,126439,126443,126453,126459,126465,126469,126478,126482,126487,126490,126493,126497,126500,126510,126519,126528,126537,126547,126554,126559,126564,126577],[10,126437,126433],{"id":126438},"_3-html文本与容器标签",[14,126440,126442],{"id":126441},"_31-标题标签","3.1 标题标签",[19,126444,126445,126448,126449,126452],{},[475,126446,126447],{},"\u003Ch1>","我是一级标签",[475,126450,126451],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126454,126455,126448,126457],{},[475,126456,126447],{},[475,126458,126451],{},[19,126460,123715,126461,126464],{},[475,126462,126463],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126466,126468],{"id":126467},"_32-段落标签","3.2 段落标签",[19,126470,126471,126474,126475],{},[475,126472,126473],{},"\u003Cp>","....",[475,126476,126477],{},"\u003C\u002Fp>",[14,126479,126481],{"id":126480},"_33-换行标签","3.3 换行标签",[19,126483,126484],{},[475,126485,126486],{},"\u003Cbr \u002F>",[19,126488,126489],{},"具有强制换行的作用",[19,126491,126492],{},"单标签",[14,126494,126496],{"id":126495},"_34-文本格式化标签","3.4 文本格式化标签",[19,126498,126499],{},"提供粗体、斜体和下划线等效果",[19,126501,126502,126503,82919,126506,126509],{},"加粗：",[475,126504,126505],{},"\u003Cstrong>...\u003C\u002Fstrong>",[475,126507,126508],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126511,126512,126513,82919,126516,126509],{},"斜体：",[475,126514,126515],{},"\u003Cem>...\u003C\u002Fem>",[475,126517,126518],{},"\u003Ci>...\u003C\u002Fi>",[19,126520,126521,126522,82919,126525,126509],{},"删除线：",[475,126523,126524],{},"\u003Cdel>...\u003C\u002Fdel>",[475,126526,126527],{},"\u003Cs>...\u003C\u002Fs>",[19,126529,126530,126531,82919,126534,126509],{},"下划线：",[475,126532,126533],{},"\u003Cins>...\u003C\u002Fins>",[475,126535,126536],{},"\u003Cu>...\u003C\u002Fu>",[14,126538,126540,126541,18975,126544,103073],{"id":126539},"_35-div和span标签","3.5 ",[475,126542,126543],{},"\u003Cdiv>",[475,126545,126546],{},"\u003Cspan>",[19,126548,126549,101398,126551,126553],{},[475,126550,126543],{},[475,126552,126546],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126555,126556],{},[475,126557,126558],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126560,126561],{},[475,126562,126563],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126565,126566,126567,126569,126570,126572,126573,126576],{},"两者特点：①",[475,126568,126543],{}," 标签用来布局，但一行通常只放一个 ",[475,126571,126543],{},"。可以理解为一个大盒子，独占一行，在 ",[475,126574,126575],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126578,77629,126579,126581,126582,126584],{},[475,126580,126546],{}," 标签也可用于布局，一行可以放多个 ",[475,126583,126546],{},"，可理解为小盒子。",{"title":54,"searchDepth":565,"depth":565,"links":126586},[126587,126588,126589,126590,126591],{"id":126441,"depth":565,"text":126442},{"id":126467,"depth":565,"text":126468},{"id":126480,"depth":565,"text":126481},{"id":126495,"depth":565,"text":126496},{"id":126539,"depth":565,"text":126592},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126433,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126599,"title":126600,"body":126601,"description":23942,"extension":638,"meta":126798,"navigation":640,"path":126799,"seo":126800,"stem":126801,"__hash__":126802},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126602,"toc":126790},[126603,126606,126610,126613,126619,126626,126632,126638,126641,126644,126647,126650,126653,126656,126659,126663,126666,126669,126672,126678,126684,126690,126697,126701,126707,126713,126716,126719,126725,126731,126737,126740,126743,126747,126750,126760,126766,126770,126779,126783,126786],[10,126604,126600],{"id":126605},"_4-html图像与链接",[14,126607,126609],{"id":126608},"_41-图像标签","4.1 图像标签",[19,126611,126612],{},"（1）标签",[19,126614,126615,126618],{},[475,126616,126617],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126620,126621,126622,126625],{},"src是",[475,126623,126624],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126627,126628,126629],{},"alt:文本，替换文本。图像不能显示的文字 ",[475,126630,126631],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126633,126634,126635],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[475,126636,126637],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126639,126640],{},"width:像素，设置图像的宽度",[19,126642,126643],{},"height:像素，设置图像的高度",[19,126645,126646],{},"border：像素，设置图像的边框粗细",[19,126648,126649],{},"（2）图像标签属性的注意点：",[19,126651,126652],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126654,126655],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126657,126658],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126660,126662],{"id":126661},"_42-路径注意要点","4.2 路径注意要点：",[19,126664,126665],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126667,126668],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126670,126671],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126673,126674,126675],{},"①同一级路径：图像文件位于HTML文件同一级，如",[475,126676,126677],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126679,126680,126681],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[475,126682,126683],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126685,126686,126687],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[475,126688,126689],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126691,126692,126693,952],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[518,126694,126695],{"href":126695,"rel":126696},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[522],[14,126698,126700],{"id":126699},"_43-超链接标签","4.3 超链接标签",[19,126702,126703,126706],{},[475,126704,126705],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126708,126709,126710],{},"①语法格式：",[475,126711,126712],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126714,126715],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126717,126718],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126720,126721,126722],{},"③链接分类：外部链接：",[475,126723,126724],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126726,126727,126728],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[475,126729,126730],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126732,126733,126734],{},"空链接：如果当时没有确定链接目标时，",[475,126735,126736],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126738,126739],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126741,126742],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126744,126746],{"id":126745},"_44-锚点链接","4.4 锚点链接",[19,126748,126749],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126751,126752,126753,126756,126757],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[475,126754,126755],{},"\u003Ca href=\"#two\">","第二级",[475,126758,126759],{},"\u003C\u002Fa>",[19,126761,126762,126763],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[475,126764,126765],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126767,126769],{"id":126768},"_45-注释标签","4.5 注释标签",[19,126771,126772,126775,126776],{},[475,126773,126774],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[475,126777,126778],{},"ctrl+\u002F",[14,126780,126782],{"id":126781},"_46-特殊字符","4.6 特殊字符",[19,126784,126785],{},"可以实现添加多个空格",[52,126787],{"style":126788,"src":126789},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":54,"searchDepth":565,"depth":565,"links":126791},[126792,126793,126794,126795,126796,126797],{"id":126608,"depth":565,"text":126609},{"id":126661,"depth":565,"text":126662},{"id":126699,"depth":565,"text":126700},{"id":126745,"depth":565,"text":126746},{"id":126768,"depth":565,"text":126769},{"id":126781,"depth":565,"text":126782},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126600,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126804,"title":126805,"body":126806,"description":23942,"extension":638,"meta":127099,"navigation":640,"path":127100,"seo":127101,"stem":127102,"__hash__":127103},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126807,"toc":127090},[126808,126811,126815,126818,126821,126824,126827,126830,126833,126836,126839,126842,126862,126868,126872,126875,126878,126881,126884,126887,126890,126894,126897,126900,126903,126906,126919,126924,126927,126930,126945,126948,126951,126954,126957,126960,126964,126967,126974,126977,126980,126983,126986,126989,126995,126998,127001,127007,127010,127013,127016,127022,127025,127028,127042,127049,127052,127055,127062,127071,127074,127077,127080,127084,127087],[10,126809,126805],{"id":126810},"_5-html表格列表与表单",[14,126812,126814],{"id":126813},"_51-表格标签","5.1 表格标签",[19,126816,126817],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126819,126820],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126822,126823],{},"②表格基本语法：",[52,126825],{"style":126788,"src":126826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126828,126829],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[52,126831],{"style":126788,"src":126832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126834,126835],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[52,126837],{"style":126788,"src":126838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126840,126841],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126843,126844,126847,126848,126850,126851,126854,126855,126857,126858,126861],{},[475,126845,126846],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[475,126849,126846],{},"内部必须拥有",[475,126852,126853],{},"\u003Ctr>","标签，一般位于第一行，",[475,126856,126846],{},"比",[475,126859,126860],{},"\u003Cth>","范围广",[19,126863,126864,126867],{},[475,126865,126866],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126869,126871],{"id":126870},"_52-合并单元格","5.2 合并单元格",[19,126873,126874],{},"（1）合并单元格方式：",[19,126876,126877],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,126879,126880],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,126882,126883],{},"（2）目标单元格：",[19,126885,126886],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,126888,126889],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126891,126893],{"id":126892},"_53-列表标签","5.3 列表标签",[19,126895,126896],{},"（1）分类：无序列表、有序列表、自定义列表",[19,126898,126899],{},"①无序列表：",[52,126901],{"style":126788,"src":126902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,126904,126905],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,126907,126908,126911,126912,126915,126916,126918],{},[475,126909,126910],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[475,126913,126914],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[475,126917,126910],{},"中输入其他标签或文字是不对的",[19,126920,126921,126923],{},[475,126922,126914],{},"之间相当于一个容器，可以容纳所有元素",[19,126925,126926],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,126928,126929],{},"在css中去除前边的小圆点采用如下代码:",[469,126931,126935],{"className":126932,"code":126933,"language":126934,"meta":54,"style":54},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[475,126936,126937],{"__ignoreMap":54},[478,126938,126939,126942],{"class":480,"line":481},[478,126940,126941],{"class":51680},"list-style",[478,126943,126944],{"class":714},": none;\n",[19,126946,126947],{},"②有序列表：",[52,126949],{"style":126788,"src":126950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,126952,126953],{},"③自定义列表：",[52,126955],{"style":126788,"src":126956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[52,126958],{"style":126788,"src":126959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126961,126963],{"id":126962},"_54-表单标签","5.4 表单标签",[19,126965,126966],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,126968,126969,126970,126973],{},"（1）表单域：包含单元素的区域，",[475,126971,126972],{},"\u003Cform>","标签可以实现信息的收集和传递。",[52,126975],{"style":126788,"src":126976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,126978,126979],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,126981,126982],{},"表单元素提交必须有name属性",[19,126984,126985],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,126987,126988],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,126990,77606,126991,126994],{},[475,126992,126993],{},"\u003Cinput>","输入表单元素",[52,126996],{"style":126788,"src":126997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[52,126999],{"style":126788,"src":127000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127002,127003,127004],{},"单选按钮：",[475,127005,127006],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[52,127008],{"style":126788,"src":127009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127011,127012],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[52,127014],{"style":126788,"src":127015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127017,127018,127021],{},[45,127019,127020],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127023,127024],{},"②select下拉表单元素：可以节约页面控件",[52,127026],{"style":126788,"src":127027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127029,127030,201,127032,127035,127036,127038,127039,127041],{},[45,127031,743],{},[475,127033,127034],{},"\u003Cselect>","中至少包含一对",[475,127037,103094],{},"；在",[475,127040,103094],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127043,127044,127045,127048],{},"③",[475,127046,127047],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[52,127050],{"style":126788,"src":127051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127053,127054],{},"3行20列",[14,127056,127058,127059,103073],{"id":127057},"_55-lable标签","5.5 ",[475,127060,127061],{},"\u003Clable>",[19,127063,127064,127065,127067,127068,127070],{},"它不是表单标签，但常常与表单标签搭配使用，",[475,127066,127061],{},"标签用于绑定一个表单标签，当点击",[475,127069,127061],{},"标签内的文本",[19,127072,127073],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[52,127075],{"style":126788,"src":127076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[52,127078],{"style":126788,"src":127079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127081,127083],{"id":127082},"_56-实例","5.6 实例",[52,127085],{"style":126788,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[617,127088,127089],{},"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":54,"searchDepth":565,"depth":565,"links":127091},[127092,127093,127094,127095,127096,127098],{"id":126813,"depth":565,"text":126814},{"id":126870,"depth":565,"text":126871},{"id":126892,"depth":565,"text":126893},{"id":126962,"depth":565,"text":126963},{"id":127057,"depth":565,"text":127097},"5.5 \u003Clable>标签",{"id":127082,"depth":565,"text":127083},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126805,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127105,"title":127106,"body":127107,"description":23942,"extension":638,"meta":127656,"navigation":640,"path":127657,"seo":127658,"stem":127659,"__hash__":127660},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127108,"toc":127631},[127109,127112,127116,127119,127122,127126,127129,127132,127135,127138,127141,127144,127147,127151,127154,127158,127161,127164,127167,127171,127174,127177,127180,127186,127189,127192,127195,127198,127201,127204,127207,127240,127244,127247,127250,127253,127257,127260,127263,127266,127269,127272,127276,127279,127282,127285,127289,127292,127296,127299,127303,127306,127311,127315,127318,127322,127325,127328,127331,127334,127361,127364,127368,127371,127374,127379,127382,127385,127389,127392,127397,127400,127403,127406,127410,127413,127416,127419,127423,127426,127429,127432,127436,127440,127443,127483,127486,127490,127497,127500,127504,127507,127553,127557,127560,127563,127566,127594,127598,127601,127628],[10,127110,127106],{"id":127111},"_6-css语法与文本样式",[14,127113,127115],{"id":127114},"_61-css语法规范","6.1 css语法规范",[19,127117,127118],{},"由两部分组成，选择器及一条或多条声明",[52,127120],{"style":126788,"src":127121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127123,127124],{},[45,127125,743],{},[19,127127,127128],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127130,127131],{},"②属性与属性值以“键值对”的形式出现",[19,127133,127134],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127136,127137],{},"④属性和属性值之间用英文“;”分开",[52,127139],{"style":126788,"src":127140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[52,127142],{"style":126788,"src":127143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[52,127145],{"style":126788,"src":127146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127148,127150],{"id":127149},"_62-css选择器","6.2 css选择器",[19,127152,127153],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[129,127155,127157],{"id":127156},"_621-标签选择器","6.2.1 标签选择器",[19,127159,127160],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127162,127163],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[52,127165],{"style":126788,"src":127166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[129,127168,127170],{"id":127169},"_622-类选择器","6.2.2 类选择器",[19,127172,127173],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127175,127176],{},"②样例",[52,127178],{"style":126788,"src":127179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127181,127182,127183,127185],{},"③ ",[45,127184,127020],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127187,127188],{},"可以理解为给这个标签起了个名字，来表示；",[19,127190,127191],{},"长名称或词组可以使用横线来为选择器命名；",[19,127193,127194],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127196,127197],{},"命名要有意义；",[52,127199],{"style":126788,"src":127200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127202,127203],{},"类选择器也可以指定特殊的元素p.center{}",[19,127205,127206],{},"p.center和.center都对",[469,127208,127210],{"className":126932,"code":127209,"language":126934,"meta":54,"style":54},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[475,127211,127212,127217,127226,127236],{"__ignoreMap":54},[478,127213,127214],{"class":480,"line":481},[478,127215,127216],{"class":770},"\u002F* 类选择器指定特殊元素 *\u002F\n",[478,127218,127219,127221,127224],{"class":480,"line":565},[478,127220,19],{"class":51680},[478,127222,127223],{"class":484},".center",[478,127225,16137],{"class":714},[478,127227,127228,127230,127232,127234],{"class":480,"line":579},[478,127229,70906],{"class":495},[478,127231,51817],{"class":714},[478,127233,51972],{"class":495},[478,127235,1859],{"class":714},[478,127237,127238],{"class":480,"line":593},[478,127239,2133],{"class":714},[129,127241,127243],{"id":127242},"_623-多类名使用","6.2.3 多类名使用",[19,127245,127246],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[52,127248],{"style":126788,"src":127249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127251,127252],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[129,127254,127256],{"id":127255},"_624-id选择器","6.2.4 id选择器",[19,127258,127259],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127261,127262],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[52,127264],{"style":126788,"src":127265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127267,127268],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127270,127271],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[129,127273,127275],{"id":127274},"_625-通配符选择器","6.2.5 通配符选择器",[19,127277,127278],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127280,127281],{},"* {",[19,127283,127284],{},"color=\"red\"}",[129,127286,127288],{"id":127287},"_626-总结","6.2.6 总结",[52,127290],{"style":126788,"src":127291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127293,127295],{"id":127294},"_63-css字体属性","6.3 css字体属性",[19,127297,127298],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[129,127300,127302],{"id":127301},"_631-字体系列","6.3.1 字体系列",[19,127304,127305],{},"font-family: '宋体';",[19,127307,127308,127310],{},[45,127309,743],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[129,127312,127314],{"id":127313},"_632-字体大小","6.3.2 字体大小",[19,127316,127317],{},"font-size: 20px",[19,127319,127320,26853],{},[45,127321,127020],{},[19,127323,127324],{},"①px（像素）大小是网页的最常用单位",[19,127326,127327],{},"②谷歌浏览器默认为16px",[19,127329,127330],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127332,127333],{},"④可以给body指定整个页面的大小：会自动引用",[469,127335,127337],{"className":126932,"code":127336,"language":126934,"meta":54,"style":54},"body {\n  font-size: 16px;\n}\n",[475,127338,127339,127345,127357],{"__ignoreMap":54},[478,127340,127341,127343],{"class":480,"line":481},[478,127342,52180],{"class":51680},[478,127344,16137],{"class":714},[478,127346,127347,127349,127351,127353,127355],{"class":480,"line":565},[478,127348,71006],{"class":495},[478,127350,51817],{"class":714},[478,127352,1299],{"class":495},[478,127354,51872],{"class":710},[478,127356,1859],{"class":714},[478,127358,127359],{"class":480,"line":579},[478,127360,2133],{"class":714},[19,127362,127363],{},"⑤标题标签比较特殊，需要单独指定大小",[129,127365,127367],{"id":127366},"_633-字体粗细","6.3.3 字体粗细",[19,127369,127370],{},"font-weight: bold;",[19,127372,127373],{},"font-weight: 100；",[19,127375,127376,127378],{},[45,127377,743],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127380,127381],{},"font-weight= 400;",[19,127383,127384],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[129,127386,127388],{"id":127387},"_634-文字样式","6.3.4 文字样式",[19,127390,127391],{},"font-style: normal；",[19,127393,127394,26853],{},[45,127395,127396],{},"属性值",[19,127398,127399],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127401,127402],{},"②italic：浏览器会显示斜体的字体样式",[52,127404],{"style":126788,"src":127405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[129,127407,127409],{"id":127408},"_635-字体符合属性","6.3.5 字体符合属性",[52,127411],{"style":126788,"src":127412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[52,127414],{"style":126788,"src":127415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127417,127418],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127420,127421,26853],{},[45,127422,127020],{},[19,127424,127425],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127427,127428],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127430,127431],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127433,127435],{"id":127434},"_64-css-test文本属性","6.4 css test文本属性",[129,127437,127439],{"id":127438},"_641-文本颜色","6.4.1 文本颜色",[19,127441,127442],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[469,127444,127446],{"className":126932,"code":127445,"language":126934,"meta":54,"style":54},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[475,127447,127448,127453,127459,127469,127474,127479],{"__ignoreMap":54},[478,127449,127450],{"class":480,"line":481},[478,127451,127452],{"class":770},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[478,127454,127455,127457],{"class":480,"line":565},[478,127456,19],{"class":51680},[478,127458,16137],{"class":714},[478,127460,127461,127463,127465,127467],{"class":480,"line":579},[478,127462,71285],{"class":495},[478,127464,51817],{"class":714},[478,127466,57801],{"class":495},[478,127468,1859],{"class":714},[478,127470,127471],{"class":480,"line":593},[478,127472,127473],{"class":770},"  \u002F* color: #ff0000; *\u002F\n",[478,127475,127476],{"class":480,"line":1769},[478,127477,127478],{"class":770},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[478,127480,127481],{"class":480,"line":1783},[478,127482,2133],{"class":714},[52,127484],{"style":126788,"src":127485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[129,127487,127489],{"id":127488},"_642-对齐文本","6.4.2 对齐文本",[19,127491,127492,127493,127496],{},"text-align属于用于设置元素内文本内容的 ",[45,127494,127495],{},"水平对齐"," 方式",[19,127498,127499],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[129,127501,127503],{"id":127502},"_643-装饰文本","6.4.3 装饰文本",[19,127505,127506],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[469,127508,127510],{"className":126932,"code":127509,"language":126934,"meta":54,"style":54},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[475,127511,127512,127518,127528,127532,127538,127549],{"__ignoreMap":54},[478,127513,127514,127516],{"class":480,"line":481},[478,127515,518],{"class":51680},[478,127517,16137],{"class":714},[478,127519,127520,127522,127524,127526],{"class":480,"line":565},[478,127521,70882],{"class":495},[478,127523,51817],{"class":714},[478,127525,55117],{"class":495},[478,127527,1859],{"class":714},[478,127529,127530],{"class":480,"line":579},[478,127531,2133],{"class":714},[478,127533,127534,127536],{"class":480,"line":593},[478,127535,19],{"class":51680},[478,127537,16137],{"class":714},[478,127539,127540,127542,127544,127547],{"class":480,"line":1769},[478,127541,70882],{"class":495},[478,127543,51817],{"class":714},[478,127545,127546],{"class":495},"underline",[478,127548,1859],{"class":714},[478,127550,127551],{"class":480,"line":1783},[478,127552,2133],{"class":714},[129,127554,127556],{"id":127555},"_644-文本缩进","6.4.4 文本缩进",[19,127558,127559],{},"实现文本的第一行首行缩进自己指定的距离",[19,127561,127562],{},"20px往右边走；-20px往左边走",[19,127564,127565],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[469,127567,127569],{"className":126932,"code":127568,"language":126934,"meta":54,"style":54},"p {\n  text-indent: 2em;\n}\n",[475,127570,127571,127577,127590],{"__ignoreMap":54},[478,127572,127573,127575],{"class":480,"line":481},[478,127574,19],{"class":51680},[478,127576,16137],{"class":714},[478,127578,127579,127582,127584,127586,127588],{"class":480,"line":565},[478,127580,127581],{"class":495},"  text-indent",[478,127583,51817],{"class":714},[478,127585,789],{"class":495},[478,127587,183],{"class":710},[478,127589,1859],{"class":714},[478,127591,127592],{"class":480,"line":579},[478,127593,2133],{"class":714},[129,127595,127597],{"id":127596},"_645-行间距","6.4.5 行间距",[19,127599,127600],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[469,127602,127604],{"className":126932,"code":127603,"language":126934,"meta":54,"style":54},"p {\n  line-height: 1.6;\n}\n",[475,127605,127606,127612,127624],{"__ignoreMap":54},[478,127607,127608,127610],{"class":480,"line":481},[478,127609,19],{"class":51680},[478,127611,16137],{"class":714},[478,127613,127614,127617,127619,127622],{"class":480,"line":565},[478,127615,127616],{"class":495},"  line-height",[478,127618,51817],{"class":714},[478,127620,127621],{"class":495},"1.6",[478,127623,1859],{"class":714},[478,127625,127626],{"class":480,"line":579},[478,127627,2133],{"class":714},[617,127629,127630],{},"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":54,"searchDepth":565,"depth":565,"links":127632},[127633,127634,127642,127649],{"id":127114,"depth":565,"text":127115},{"id":127149,"depth":565,"text":127150,"children":127635},[127636,127637,127638,127639,127640,127641],{"id":127156,"depth":579,"text":127157},{"id":127169,"depth":579,"text":127170},{"id":127242,"depth":579,"text":127243},{"id":127255,"depth":579,"text":127256},{"id":127274,"depth":579,"text":127275},{"id":127287,"depth":579,"text":127288},{"id":127294,"depth":565,"text":127295,"children":127643},[127644,127645,127646,127647,127648],{"id":127301,"depth":579,"text":127302},{"id":127313,"depth":579,"text":127314},{"id":127366,"depth":579,"text":127367},{"id":127387,"depth":579,"text":127388},{"id":127408,"depth":579,"text":127409},{"id":127434,"depth":565,"text":127435,"children":127650},[127651,127652,127653,127654,127655],{"id":127438,"depth":579,"text":127439},{"id":127488,"depth":579,"text":127489},{"id":127502,"depth":579,"text":127503},{"id":127555,"depth":579,"text":127556},{"id":127596,"depth":579,"text":127597},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127106,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127662,"title":127663,"body":127664,"description":23942,"extension":638,"meta":128313,"navigation":640,"path":128314,"seo":128315,"stem":128316,"__hash__":128317},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127665,"toc":128294},[127666,127669,127673,127677,127737,127741,127751,127754,127757,127761,127786,127790,127793,127796,127799,127802,127805,127809,127812,127815,127857,127860,127886,127892,127895,127899,127903,127909,127912,127915,127918,127921,127924,127927,127972,127976,127979,127982,127986,127990,128019,128022,128027,128030,128033,128036,128039,128043,128047,128050,128052,128055,128059,128062,128066,128069,128072,128075,128079,128083,128089,128099,128102,128105,128108,128111,128114,128237,128245,128253,128291],[10,127667,127663],{"id":127668},"_7-css引入方式与选择器进阶",[14,127670,127672],{"id":127671},"_71-css引入方式","7.1 css引入方式",[129,127674,127676],{"id":127675},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[469,127678,127682],{"className":127679,"code":127680,"language":127681,"meta":54,"style":54},"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",[475,127683,127684,127692,127699,127711,127724,127729],{"__ignoreMap":54},[478,127685,127686,127688,127690],{"class":480,"line":481},[478,127687,1605],{"class":714},[478,127689,617],{"class":51680},[478,127691,51687],{"class":714},[478,127693,127694,127697],{"class":480,"line":565},[478,127695,127696],{"class":51680},"  h1",[478,127698,16137],{"class":714},[478,127700,127701,127704,127706,127709],{"class":480,"line":579},[478,127702,127703],{"class":495},"    color",[478,127705,51817],{"class":714},[478,127707,127708],{"class":495},"blue",[478,127710,1859],{"class":714},[478,127712,127713,127716,127718,127720,127722],{"class":480,"line":593},[478,127714,127715],{"class":495},"    font-size",[478,127717,51817],{"class":714},[478,127719,1495],{"class":495},[478,127721,51872],{"class":710},[478,127723,1859],{"class":714},[478,127725,127726],{"class":480,"line":1769},[478,127727,127728],{"class":714},"  }\n",[478,127730,127731,127733,127735],{"class":480,"line":1783},[478,127732,52165],{"class":714},[478,127734,617],{"class":51680},[478,127736,51687],{"class":714},[19,127738,127739,26853],{},[45,127740,127020],{},[19,127742,77606,127743,127746,127747,127750],{},[475,127744,127745],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[475,127748,127749],{},"\u003Chead>","标签中",[19,127752,127753],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127755,127756],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[129,127758,127760],{"id":127759},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[469,127762,127764],{"className":127679,"code":127763,"language":127681,"meta":54,"style":54},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[475,127765,127766],{"__ignoreMap":54},[478,127767,127768,127770,127772,127774,127776,127779,127782,127784],{"class":480,"line":481},[478,127769,1605],{"class":714},[478,127771,19],{"class":51680},[478,127773,63006],{"class":484},[478,127775,759],{"class":714},[478,127777,127778],{"class":488},"\"color: red; font-size: 16px;\"",[478,127780,127781],{"class":714},">这是一个段落\u003C\u002F",[478,127783,19],{"class":51680},[478,127785,51687],{"class":714},[19,127787,127788,26853],{},[45,127789,127020],{},[19,127791,127792],{},"①style其实就是标签的属性",[19,127794,127795],{},"②在双引号中间，写法要符合css规范",[19,127797,127798],{},"③可以控制当前的标签设置样式",[19,127800,127801],{},"④书写繁琐，简单时才用",[19,127803,127804],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[129,127806,127808],{"id":127807},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127810,127811],{},"使用最多，单独建一个css文件，然后html引用",[19,127813,127814],{},"①css文件部分： style.css",[469,127816,127818],{"className":126932,"code":127817,"language":126934,"meta":54,"style":54},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[475,127819,127820,127825,127831,127841,127853],{"__ignoreMap":54},[478,127821,127822],{"class":480,"line":481},[478,127823,127824],{"class":770},"\u002F* style.css *\u002F\n",[478,127826,127827,127829],{"class":480,"line":565},[478,127828,10],{"class":51680},[478,127830,16137],{"class":714},[478,127832,127833,127835,127837,127839],{"class":480,"line":579},[478,127834,71285],{"class":495},[478,127836,51817],{"class":714},[478,127838,127708],{"class":495},[478,127840,1859],{"class":714},[478,127842,127843,127845,127847,127849,127851],{"class":480,"line":593},[478,127844,71006],{"class":495},[478,127846,51817],{"class":714},[478,127848,1495],{"class":495},[478,127850,51872],{"class":710},[478,127852,1859],{"class":714},[478,127854,127855],{"class":480,"line":1769},[478,127856,2133],{"class":714},[19,127858,127859],{},"②html部分",[469,127861,127863],{"className":127679,"code":127862,"language":127681,"meta":54,"style":54},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[475,127864,127865],{"__ignoreMap":54},[478,127866,127867,127869,127871,127873,127875,127877,127879,127881,127884],{"class":480,"line":481},[478,127868,1605],{"class":714},[478,127870,69385],{"class":51680},[478,127872,69388],{"class":484},[478,127874,759],{"class":714},[478,127876,69393],{"class":488},[478,127878,61437],{"class":484},[478,127880,759],{"class":714},[478,127882,127883],{"class":488},"\"style.css\"",[478,127885,51687],{"class":714},[19,127887,127888,127891],{},[475,127889,127890],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127893,127894],{},"ctrl+0回到页面原来大小",[14,127896,127898],{"id":127897},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[129,127900,127902],{"id":127901},"_721-快速生成html","7.2.1 快速生成html",[19,127904,127905,127906],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[475,127907,127908],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127910,127911],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127913,127914],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127916,127917],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127919,127920],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127922,127923],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127925,127926],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[469,127928,127930],{"className":127679,"code":127929,"language":127681,"meta":54,"style":54},"\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",[475,127931,127932,127937,127942,127947,127952,127957,127962,127967],{"__ignoreMap":54},[478,127933,127934],{"class":480,"line":481},[478,127935,127936],{"class":770},"\u003C!-- Emmet 语法示例 -->\n",[478,127938,127939],{"class":480,"line":565},[478,127940,127941],{"class":770},"\u003C!-- div*3        → 生成3个div -->\n",[478,127943,127944],{"class":480,"line":579},[478,127945,127946],{"class":770},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[478,127948,127949],{"class":480,"line":593},[478,127950,127951],{"class":770},"\u003C!-- div+p        → 兄弟div和p -->\n",[478,127953,127954],{"class":480,"line":1769},[478,127955,127956],{"class":770},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[478,127958,127959],{"class":480,"line":1783},[478,127960,127961],{"class":770},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[478,127963,127964],{"class":480,"line":1789},[478,127965,127966],{"class":770},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[478,127968,127969],{"class":480,"line":1880},[478,127970,127971],{"class":770},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[129,127973,127975],{"id":127974},"_722-快速生成css","7.2.2 快速生成css",[19,127977,127978],{},"简写开头",[19,127980,127981],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127983,127985],{"id":127984},"_73-css复合选择器","7.3 css复合选择器",[129,127987,127989],{"id":127988},"_731-后代选择器","7.3.1 后代选择器",[469,127991,127993],{"className":126932,"code":127992,"language":126934,"meta":54,"style":54},".parent .child {\n  color: blue;\n}\n",[475,127994,127995,128005,128015],{"__ignoreMap":54},[478,127996,127997,128000,128003],{"class":480,"line":481},[478,127998,127999],{"class":484},".parent",[478,128001,128002],{"class":484}," .child",[478,128004,16137],{"class":714},[478,128006,128007,128009,128011,128013],{"class":480,"line":565},[478,128008,71285],{"class":495},[478,128010,51817],{"class":714},[478,128012,127708],{"class":495},[478,128014,1859],{"class":714},[478,128016,128017],{"class":480,"line":579},[478,128018,2133],{"class":714},[19,128020,128021],{},"元素1 元素2 {样式声明}",[19,128023,128024],{},[45,128025,128026],{},"注意点:",[19,128028,128029],{},"①元素1和元素2中间用空格隔开",[19,128031,128032],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128034,128035],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128037,128038],{},"④元素1和元素2可以是任意基础选择器",[129,128040,128042],{"id":128041},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128044,128045],{},[45,128046,128026],{},[19,128048,128049],{},"①元素1和元素2中间用大于号隔开",[19,128051,128032],{},[19,128053,128054],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[129,128056,128058],{"id":128057},"_733-并集选择器","7.3.3 并集选择器",[19,128060,128061],{},"元素1，元素2 {样式声明}",[19,128063,128064],{},[45,128065,128026],{},[19,128067,128068],{},"①元素1和元素2中间用逗号隔开",[19,128070,128071],{},"②逗号可以理解为和的意思",[19,128073,128074],{},"③并集选择器通常用于集体声明",[129,128076,128078],{"id":128077},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128080,128081],{},[45,128082,128026],{},[19,128084,128085,128086,128088],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69385,128087],{},"－:visited－:hover－:active。",[19,128090,128091,128092,128095,128096,26120],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128093,128094],"hover",{}," 、 ",[128097,128098],"first-child",{},[19,128100,128101],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128103,128104],{},"link对没访问的进行设置",[19,128106,128107],{},"vistied对已访问的进行改变",[19,128109,128110],{},"hover鼠标经过就会变",[19,128112,128113],{},"active常按(点)就会变",[469,128115,128117],{"className":126932,"code":128116,"language":126934,"meta":54,"style":54},"\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",[475,128118,128119,128124,128133,128143,128153,128157,128166,128177,128181,128189,128199,128209,128213,128222,128233],{"__ignoreMap":54},[478,128120,128121],{"class":480,"line":481},[478,128122,128123],{"class":770},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[478,128125,128126,128128,128131],{"class":480,"line":565},[478,128127,518],{"class":51680},[478,128129,128130],{"class":484},":link",[478,128132,16137],{"class":714},[478,128134,128135,128137,128139,128141],{"class":480,"line":579},[478,128136,71285],{"class":495},[478,128138,51817],{"class":714},[478,128140,62749],{"class":495},[478,128142,1859],{"class":714},[478,128144,128145,128147,128149,128151],{"class":480,"line":593},[478,128146,70882],{"class":495},[478,128148,51817],{"class":714},[478,128150,55117],{"class":495},[478,128152,1859],{"class":714},[478,128154,128155],{"class":480,"line":1769},[478,128156,2133],{"class":714},[478,128158,128159,128161,128164],{"class":480,"line":1783},[478,128160,518],{"class":51680},[478,128162,128163],{"class":484},":visited",[478,128165,16137],{"class":714},[478,128167,128168,128170,128172,128175],{"class":480,"line":1789},[478,128169,71285],{"class":495},[478,128171,51817],{"class":714},[478,128173,128174],{"class":495},"purple",[478,128176,1859],{"class":714},[478,128178,128179],{"class":480,"line":1880},[478,128180,2133],{"class":714},[478,128182,128183,128185,128187],{"class":480,"line":1886},[478,128184,518],{"class":51680},[478,128186,61320],{"class":484},[478,128188,16137],{"class":714},[478,128190,128191,128193,128195,128197],{"class":480,"line":1898},[478,128192,71285],{"class":495},[478,128194,51817],{"class":714},[478,128196,55269],{"class":495},[478,128198,1859],{"class":714},[478,128200,128201,128203,128205,128207],{"class":480,"line":2180},[478,128202,70882],{"class":495},[478,128204,51817],{"class":714},[478,128206,127546],{"class":495},[478,128208,1859],{"class":714},[478,128210,128211],{"class":480,"line":2185},[478,128212,2133],{"class":714},[478,128214,128215,128217,128220],{"class":480,"line":2191},[478,128216,518],{"class":51680},[478,128218,128219],{"class":484},":active",[478,128221,16137],{"class":714},[478,128223,128224,128226,128228,128231],{"class":480,"line":2196},[478,128225,71285],{"class":495},[478,128227,51817],{"class":714},[478,128229,128230],{"class":495},"green",[478,128232,1859],{"class":714},[478,128234,128235],{"class":480,"line":2210},[478,128236,2133],{"class":714},[129,128238,128240,128241,128244],{"id":128239},"_735-伪类选择器","7.3.5 ",[128242,128243],"focus",{},"伪类选择器",[19,128246,128247,128249,128250,128252],{},[128242,128248],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[475,128251,126993],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[469,128254,128256],{"className":126932,"code":128255,"language":126934,"meta":54,"style":54},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[475,128257,128258,128266,128277,128287],{"__ignoreMap":54},[478,128259,128260,128262,128264],{"class":480,"line":481},[478,128261,54201],{"class":51680},[478,128263,62280],{"class":484},[478,128265,16137],{"class":714},[478,128267,128268,128271,128273,128275],{"class":480,"line":565},[478,128269,128270],{"class":495},"  border-color",[478,128272,51817],{"class":714},[478,128274,55269],{"class":495},[478,128276,1859],{"class":714},[478,128278,128279,128281,128283,128285],{"class":480,"line":579},[478,128280,71178],{"class":495},[478,128282,51817],{"class":714},[478,128284,55117],{"class":495},[478,128286,1859],{"class":714},[478,128288,128289],{"class":480,"line":593},[478,128290,2133],{"class":714},[617,128292,128293],{},"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":54,"searchDepth":565,"depth":565,"links":128295},[128296,128301,128305],{"id":127671,"depth":565,"text":127672,"children":128297},[128298,128299,128300],{"id":127675,"depth":579,"text":127676},{"id":127759,"depth":579,"text":127760},{"id":127807,"depth":579,"text":127808},{"id":127897,"depth":565,"text":127898,"children":128302},[128303,128304],{"id":127901,"depth":579,"text":127902},{"id":127974,"depth":579,"text":127975},{"id":127984,"depth":565,"text":127985,"children":128306},[128307,128308,128309,128310,128311],{"id":127988,"depth":579,"text":127989},{"id":128041,"depth":579,"text":128042},{"id":128057,"depth":579,"text":128058},{"id":128077,"depth":579,"text":128078},{"id":128239,"depth":579,"text":128312},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127663,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128319,"title":128320,"body":128321,"description":23942,"extension":638,"meta":130244,"navigation":640,"path":130245,"seo":130246,"stem":130247,"__hash__":130248},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128322,"toc":130218},[128323,128326,128330,128339,128343,128369,128374,128377,128380,128383,128386,128390,128393,128403,128411,128415,128450,128455,128458,128461,128464,128467,128471,128474,128483,128487,128500,128505,128508,128511,128514,128518,128521,128525,128528,128583,128586,128617,128620,128674,128678,128681,128847,128970,128973,128976,128979,128982,128986,128989,128993,128996,128999,129003,129006,129037,129064,129092,129095,129099,129125,129168,129172,129266,129269,129296,129299,129302,129305,129308,129311,129314,129317,129320,129323,129327,129384,129411,129415,129463,129467,129508,129510,129513,129516,129519,129522,129526,129618,129621,129624,129627,129631,129754,129955,129959,129963,129966,129969,129972,129976,129979,129982,130007,130010,130013,130016,130019,130022,130026,130034,130096,130099,130157,130160,130163,130166,130169,130172,130175,130178,130215],[10,128324,128320],{"id":128325},"_8-css显示模式与背景特性",[14,128327,128329],{"id":128328},"_81-css元素显示模式","8.1 css元素显示模式",[19,128331,128332,128333,128335,128336,128338],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[475,128334,126543],{},"自己占一行，比如一行可以放多个",[475,128337,126546],{},"，HTML 元素一般分为块元素和行内元素两种类型",[129,128340,128342],{"id":128341},"_811-块元素","8.1.1 块元素",[19,128344,128345,128346,128348,128349,916,128352,916,128354,916,128356,916,128359,916,128362,128365,128366,128368],{},"常见的块元素有",[475,128347,126447],{},"~",[475,128350,128351],{},"\u003Ch6>",[475,128353,126473],{},[475,128355,126543],{},[475,128357,128358],{},"\u003Cul>",[475,128360,128361],{},"\u003Col>",[475,128363,128364],{},"\u003Cli>","等，其中 ",[475,128367,126543],{}," 标签是最典型的块元素",[19,128370,128371],{},[45,128372,128373],{},"块级元素的特点：",[19,128375,128376],{},"① 比较霸道，自己独占一行。",[19,128378,128379],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128381,128382],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128384,128385],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128387,128388],{},[45,128389,743],{},[19,128391,128392],{},"①文字类的元素内不能使用块级元素",[19,128394,77629,128395,128397,128398,128400,128401],{},[475,128396,126473],{}," 标签主要用于存放文字，因此 ",[475,128399,126473],{}," 里面不能放块级元素，特别是不能放",[475,128402,126543],{},[19,128404,128405,128406,128348,128408,128410],{},"⑥同理， ",[475,128407,126447],{},[475,128409,128351],{},"等都是文字类块级标签，里面也不能放其他块级元素",[129,128412,128414],{"id":128413},"_812-行内元素","8.1.2 行内元素",[19,128416,128417,128418,916,128420,916,128423,916,128426,916,128429,916,128432,916,128435,916,128438,916,128441,916,128444,128446,128447,128449],{},"常见的行内元素有 ",[475,128419,126705],{},[475,128421,128422],{},"\u003Cstrong>",[475,128424,128425],{},"\u003Cb>",[475,128427,128428],{},"\u003Cem>",[475,128430,128431],{},"\u003Ci>",[475,128433,128434],{},"\u003Cdel>",[475,128436,128437],{},"\u003Cs>",[475,128439,128440],{},"\u003Cins>",[475,128442,128443],{},"\u003Cu>",[475,128445,126546],{}," 等，其中 ",[475,128448,126546],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128451,128452],{},[45,128453,128454],{},"特点：",[19,128456,128457],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128459,128460],{},"② 高、宽直接设置是无效的。",[19,128462,128463],{},"③ 默认宽度就是它本身内容的宽度。",[19,128465,128466],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128468,128469],{},[45,128470,743],{},[19,128472,128473],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128475,128476,128477,128479,128480,128482],{},"②特殊情况链接 ",[475,128478,126705],{}," 里面可以放块级元素，但是给 ",[475,128481,126705],{}," 转换一下块级模式最安全",[129,128484,128486],{"id":128485},"_813-行内块元素","8.1.3 行内块元素",[19,128488,128489,128490,916,128493,916,128496,128499],{},"在行内元素中有几个特殊的标签 —— ",[475,128491,128492],{},"\u003Cimg \u002F>",[475,128494,128495],{},"\u003Cinput \u002F>",[475,128497,128498],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128501,128502],{},[45,128503,128504],{},"行内块元素的特点：",[19,128506,128507],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128509,128510],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128512,128513],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[129,128515,128517],{"id":128516},"_814-总结","8.1.4 总结",[52,128519],{"style":126788,"src":128520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[129,128522,128524],{"id":128523},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128526,128527],{},"①转换为块元素：display:block;",[469,128529,128531],{"className":126932,"code":128530,"language":126934,"meta":54,"style":54},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[475,128532,128533,128538,128544,128555,128567,128579],{"__ignoreMap":54},[478,128534,128535],{"class":480,"line":481},[478,128536,128537],{"class":770},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[478,128539,128540,128542],{"class":480,"line":565},[478,128541,518],{"class":51680},[478,128543,16137],{"class":714},[478,128545,128546,128549,128551,128553],{"class":480,"line":579},[478,128547,128548],{"class":495},"  display",[478,128550,51817],{"class":714},[478,128552,61249],{"class":495},[478,128554,1859],{"class":714},[478,128556,128557,128559,128561,128563,128565],{"class":480,"line":593},[478,128558,70948],{"class":495},[478,128560,51817],{"class":714},[478,128562,1012],{"class":495},[478,128564,51872],{"class":710},[478,128566,1859],{"class":714},[478,128568,128569,128571,128573,128575,128577],{"class":480,"line":1769},[478,128570,71168],{"class":495},[478,128572,51817],{"class":714},[478,128574,1102],{"class":495},[478,128576,51872],{"class":710},[478,128578,1859],{"class":714},[478,128580,128581],{"class":480,"line":1783},[478,128582,2133],{"class":714},[19,128584,128585],{},"②转换为行内元素：display:inline;",[469,128587,128589],{"className":126932,"code":128588,"language":126934,"meta":54,"style":54},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[475,128590,128591,128596,128602,128613],{"__ignoreMap":54},[478,128592,128593],{"class":480,"line":481},[478,128594,128595],{"class":770},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[478,128597,128598,128600],{"class":480,"line":565},[478,128599,51991],{"class":51680},[478,128601,16137],{"class":714},[478,128603,128604,128606,128608,128611],{"class":480,"line":579},[478,128605,128548],{"class":495},[478,128607,51817],{"class":714},[478,128609,128610],{"class":495},"inline",[478,128612,1859],{"class":714},[478,128614,128615],{"class":480,"line":593},[478,128616,2133],{"class":714},[19,128618,128619],{},"③转换为行内块：display:inline-block;",[469,128621,128623],{"className":126932,"code":128622,"language":126934,"meta":54,"style":54},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[475,128624,128625,128630,128636,128646,128658,128670],{"__ignoreMap":54},[478,128626,128627],{"class":480,"line":481},[478,128628,128629],{"class":770},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[478,128631,128632,128634],{"class":480,"line":565},[478,128633,478],{"class":51680},[478,128635,16137],{"class":714},[478,128637,128638,128640,128642,128644],{"class":480,"line":579},[478,128639,128548],{"class":495},[478,128641,51817],{"class":714},[478,128643,72763],{"class":495},[478,128645,1859],{"class":714},[478,128647,128648,128650,128652,128654,128656],{"class":480,"line":593},[478,128649,70948],{"class":495},[478,128651,51817],{"class":714},[478,128653,1310],{"class":495},[478,128655,51872],{"class":710},[478,128657,1859],{"class":714},[478,128659,128660,128662,128664,128666,128668],{"class":480,"line":1769},[478,128661,71168],{"class":495},[478,128663,51817],{"class":714},[478,128665,1646],{"class":495},[478,128667,51872],{"class":710},[478,128669,1859],{"class":714},[478,128671,128672],{"class":480,"line":1783},[478,128673,2133],{"class":714},[129,128675,128677],{"id":128676},"_816-小米侧边栏","8.1.6 小米侧边栏",[52,128679],{"style":126788,"src":128680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[469,128682,128684],{"className":127679,"code":128683,"language":127681,"meta":54,"style":54},"\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",[475,128685,128686,128691,128706,128725,128744,128763,128782,128801,128820,128839],{"__ignoreMap":54},[478,128687,128688],{"class":480,"line":481},[478,128689,128690],{"class":770},"\u003C!-- 小米侧边栏案例 -->\n",[478,128692,128693,128695,128697,128699,128701,128704],{"class":480,"line":565},[478,128694,1605],{"class":714},[478,128696,51991],{"class":51680},[478,128698,53866],{"class":484},[478,128700,759],{"class":714},[478,128702,128703],{"class":488},"\"sidebar\"",[478,128705,51687],{"class":714},[478,128707,128708,128710,128712,128714,128716,128718,128721,128723],{"class":480,"line":579},[478,128709,52524],{"class":714},[478,128711,518],{"class":51680},[478,128713,61437],{"class":484},[478,128715,759],{"class":714},[478,128717,61442],{"class":488},[478,128719,128720],{"class":714},">手机 电话卡\u003C\u002F",[478,128722,518],{"class":51680},[478,128724,51687],{"class":714},[478,128726,128727,128729,128731,128733,128735,128737,128740,128742],{"class":480,"line":593},[478,128728,52524],{"class":714},[478,128730,518],{"class":51680},[478,128732,61437],{"class":484},[478,128734,759],{"class":714},[478,128736,61442],{"class":488},[478,128738,128739],{"class":714},">电视 盒子\u003C\u002F",[478,128741,518],{"class":51680},[478,128743,51687],{"class":714},[478,128745,128746,128748,128750,128752,128754,128756,128759,128761],{"class":480,"line":1769},[478,128747,52524],{"class":714},[478,128749,518],{"class":51680},[478,128751,61437],{"class":484},[478,128753,759],{"class":714},[478,128755,61442],{"class":488},[478,128757,128758],{"class":714},">笔记本 平板\u003C\u002F",[478,128760,518],{"class":51680},[478,128762,51687],{"class":714},[478,128764,128765,128767,128769,128771,128773,128775,128778,128780],{"class":480,"line":1783},[478,128766,52524],{"class":714},[478,128768,518],{"class":51680},[478,128770,61437],{"class":484},[478,128772,759],{"class":714},[478,128774,61442],{"class":488},[478,128776,128777],{"class":714},">出行 穿戴\u003C\u002F",[478,128779,518],{"class":51680},[478,128781,51687],{"class":714},[478,128783,128784,128786,128788,128790,128792,128794,128797,128799],{"class":480,"line":1789},[478,128785,52524],{"class":714},[478,128787,518],{"class":51680},[478,128789,61437],{"class":484},[478,128791,759],{"class":714},[478,128793,61442],{"class":488},[478,128795,128796],{"class":714},">智能 路由器\u003C\u002F",[478,128798,518],{"class":51680},[478,128800,51687],{"class":714},[478,128802,128803,128805,128807,128809,128811,128813,128816,128818],{"class":480,"line":1880},[478,128804,52524],{"class":714},[478,128806,518],{"class":51680},[478,128808,61437],{"class":484},[478,128810,759],{"class":714},[478,128812,61442],{"class":488},[478,128814,128815],{"class":714},">健康 儿童\u003C\u002F",[478,128817,518],{"class":51680},[478,128819,51687],{"class":714},[478,128821,128822,128824,128826,128828,128830,128832,128835,128837],{"class":480,"line":1886},[478,128823,52524],{"class":714},[478,128825,518],{"class":51680},[478,128827,61437],{"class":484},[478,128829,759],{"class":714},[478,128831,61442],{"class":488},[478,128833,128834],{"class":714},">耳机 音响\u003C\u002F",[478,128836,518],{"class":51680},[478,128838,51687],{"class":714},[478,128840,128841,128843,128845],{"class":480,"line":1898},[478,128842,52165],{"class":714},[478,128844,51991],{"class":51680},[478,128846,51687],{"class":714},[469,128848,128850],{"className":126932,"code":128849,"language":126934,"meta":54,"style":54},".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",[475,128851,128852,128861,128871,128884,128896,128908,128920,128930,128941,128945,128955,128966],{"__ignoreMap":54},[478,128853,128854,128857,128859],{"class":480,"line":481},[478,128855,128856],{"class":484},".sidebar",[478,128858,1967],{"class":51680},[478,128860,16137],{"class":714},[478,128862,128863,128865,128867,128869],{"class":480,"line":565},[478,128864,128548],{"class":495},[478,128866,51817],{"class":714},[478,128868,61249],{"class":495},[478,128870,1859],{"class":714},[478,128872,128873,128875,128877,128880,128882],{"class":480,"line":579},[478,128874,70948],{"class":495},[478,128876,51817],{"class":714},[478,128878,128879],{"class":495},"234",[478,128881,51872],{"class":710},[478,128883,1859],{"class":714},[478,128885,128886,128888,128890,128892,128894],{"class":480,"line":593},[478,128887,71168],{"class":495},[478,128889,51817],{"class":714},[478,128891,1152],{"class":495},[478,128893,51872],{"class":710},[478,128895,1859],{"class":714},[478,128897,128898,128900,128902,128904,128906],{"class":480,"line":1769},[478,128899,127616],{"class":495},[478,128901,51817],{"class":714},[478,128903,1152],{"class":495},[478,128905,51872],{"class":710},[478,128907,1859],{"class":714},[478,128909,128910,128912,128914,128916,128918],{"class":480,"line":1783},[478,128911,71203],{"class":495},[478,128913,51817],{"class":714},[478,128915,1646],{"class":495},[478,128917,51872],{"class":710},[478,128919,1859],{"class":714},[478,128921,128922,128924,128926,128928],{"class":480,"line":1789},[478,128923,71285],{"class":495},[478,128925,51817],{"class":714},[478,128927,61222],{"class":495},[478,128929,1859],{"class":714},[478,128931,128932,128934,128936,128939],{"class":480,"line":1880},[478,128933,71258],{"class":495},[478,128935,51817],{"class":714},[478,128937,128938],{"class":495},"#55585a",[478,128940,1859],{"class":714},[478,128942,128943],{"class":480,"line":1886},[478,128944,2133],{"class":714},[478,128946,128947,128949,128951,128953],{"class":480,"line":1898},[478,128948,128856],{"class":484},[478,128950,1967],{"class":51680},[478,128952,61320],{"class":484},[478,128954,16137],{"class":714},[478,128956,128957,128959,128961,128964],{"class":480,"line":2180},[478,128958,71258],{"class":495},[478,128960,51817],{"class":714},[478,128962,128963],{"class":495},"#ff6700",[478,128965,1859],{"class":714},[478,128967,128968],{"class":480,"line":2185},[478,128969,2133],{"class":714},[52,128971],{"style":126788,"src":128972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128974,128975],{},"行高=盒子高度：实现文字的垂直居中",[19,128977,128978],{},"原理讲解：",[52,128980],{"style":126788,"src":128981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128983,128985],{"id":128984},"_82-css背景","8.2 css背景",[19,128987,128988],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[129,128990,128992],{"id":128991},"_821-背景颜色","8.2.1 背景颜色",[19,128994,128995],{},"background-color:颜色值;",[19,128997,128998],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[129,129000,129002],{"id":129001},"_822-背景图片","8.2.2 背景图片",[19,129004,129005],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[469,129007,129009],{"className":126932,"code":129008,"language":126934,"meta":54,"style":54},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[475,129010,129011,129017,129033],{"__ignoreMap":54},[478,129012,129013,129015],{"class":480,"line":481},[478,129014,51991],{"class":51680},[478,129016,16137],{"class":714},[478,129018,129019,129022,129024,129026,129028,129031],{"class":480,"line":565},[478,129020,129021],{"class":495},"  background-image",[478,129023,51817],{"class":714},[478,129025,62106],{"class":495},[478,129027,263],{"class":714},[478,129029,129030],{"class":5782},"images\u002Fbg.png",[478,129032,3285],{"class":714},[478,129034,129035],{"class":480,"line":579},[478,129036,2133],{"class":714},[371,129038,129039,129048],{},[374,129040,129041],{},[377,129042,129043,129046],{},[380,129044,129045],{"align":382},"参数值",[380,129047,103076],{"align":382},[388,129049,129050,129057],{},[377,129051,129052,129054],{},[393,129053,55117],{"align":382},[393,129055,129056],{"align":382},"无背景图（默认的）",[377,129058,129059,129061],{},[393,129060,62106],{"align":382},[393,129062,129063],{"align":382},"使用绝对或相对地址指定背景图像",[469,129065,129066],{"className":126932,"code":129008,"language":126934,"meta":54,"style":54},[475,129067,129068,129074,129088],{"__ignoreMap":54},[478,129069,129070,129072],{"class":480,"line":481},[478,129071,51991],{"class":51680},[478,129073,16137],{"class":714},[478,129075,129076,129078,129080,129082,129084,129086],{"class":480,"line":565},[478,129077,129021],{"class":495},[478,129079,51817],{"class":714},[478,129081,62106],{"class":495},[478,129083,263],{"class":714},[478,129085,129030],{"class":5782},[478,129087,3285],{"class":714},[478,129089,129090],{"class":480,"line":579},[478,129091,2133],{"class":714},[19,129093,129094],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[129,129096,129098],{"id":129097},"_823-背景平铺","8.2.3 背景平铺",[469,129100,129102],{"className":126932,"code":129101,"language":126934,"meta":54,"style":54},"div {\n  background-repeat: no-repeat;\n}\n",[475,129103,129104,129110,129121],{"__ignoreMap":54},[478,129105,129106,129108],{"class":480,"line":481},[478,129107,51991],{"class":51680},[478,129109,16137],{"class":714},[478,129111,129112,129115,129117,129119],{"class":480,"line":565},[478,129113,129114],{"class":495},"  background-repeat",[478,129116,51817],{"class":714},[478,129118,62116],{"class":495},[478,129120,1859],{"class":714},[478,129122,129123],{"class":480,"line":579},[478,129124,2133],{"class":714},[371,129126,129127,129135],{},[374,129128,129129],{},[377,129130,129131,129133],{},[380,129132,129045],{"align":382},[380,129134,103076],{"align":382},[388,129136,129137,129145,129152,129160],{},[377,129138,129139,129142],{},[393,129140,129141],{"align":382},"repeat",[393,129143,129144],{"align":382},"背景图像在纵向和横向上平铺（默认的）",[377,129146,129147,129149],{},[393,129148,62116],{"align":382},[393,129150,129151],{"align":382},"背景图像不平铺",[377,129153,129154,129157],{},[393,129155,129156],{"align":382},"repeat-x",[393,129158,129159],{"align":382},"背景图像在横向上平铺",[377,129161,129162,129165],{},[393,129163,129164],{"align":382},"repeat-y",[393,129166,129167],{"align":382},"背景图像在纵向平铺",[129,129169,129171],{"id":129170},"_824-背景图片位置","8.2.4 背景图片位置",[469,129173,129175],{"className":126932,"code":129174,"language":126934,"meta":54,"style":54},"\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",[475,129176,129177,129182,129188,129202,129206,129211,129217,129233,129237,129242,129248,129262],{"__ignoreMap":54},[478,129178,129179],{"class":480,"line":481},[478,129180,129181],{"class":770},"\u002F* 方位名词 *\u002F\n",[478,129183,129184,129186],{"class":480,"line":565},[478,129185,51991],{"class":51680},[478,129187,16137],{"class":714},[478,129189,129190,129193,129195,129197,129200],{"class":480,"line":579},[478,129191,129192],{"class":495},"  background-position",[478,129194,51817],{"class":714},[478,129196,51972],{"class":495},[478,129198,129199],{"class":495}," top",[478,129201,1859],{"class":714},[478,129203,129204],{"class":480,"line":593},[478,129205,2133],{"class":714},[478,129207,129208],{"class":480,"line":1769},[478,129209,129210],{"class":770},"\u002F* 精确单位 *\u002F\n",[478,129212,129213,129215],{"class":480,"line":1783},[478,129214,51991],{"class":51680},[478,129216,16137],{"class":714},[478,129218,129219,129221,129223,129225,129227,129229,129231],{"class":480,"line":1789},[478,129220,129192],{"class":495},[478,129222,51817],{"class":714},[478,129224,1396],{"class":495},[478,129226,51872],{"class":710},[478,129228,57884],{"class":495},[478,129230,51872],{"class":710},[478,129232,1859],{"class":714},[478,129234,129235],{"class":480,"line":1880},[478,129236,2133],{"class":714},[478,129238,129239],{"class":480,"line":1886},[478,129240,129241],{"class":770},"\u002F* 混合单位 *\u002F\n",[478,129243,129244,129246],{"class":480,"line":1898},[478,129245,51991],{"class":51680},[478,129247,16137],{"class":714},[478,129249,129250,129252,129254,129256,129258,129260],{"class":480,"line":2180},[478,129251,129192],{"class":495},[478,129253,51817],{"class":714},[478,129255,1396],{"class":495},[478,129257,51872],{"class":710},[478,129259,17709],{"class":495},[478,129261,1859],{"class":714},[478,129263,129264],{"class":480,"line":2185},[478,129265,2133],{"class":714},[19,129267,129268],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[371,129270,129271,129279],{},[374,129272,129273],{},[377,129274,129275,129277],{},[380,129276,129045],{"align":382},[380,129278,26249],{"align":382},[388,129280,129281,129288],{},[377,129282,129283,129285],{},[393,129284,52348],{"align":382},[393,129286,129287],{"align":382},"百分数|由浮点数和单位标识符组成的长度值",[377,129289,129290,129293],{},[393,129291,129292],{"align":382},"position",[393,129294,129295],{"align":382},"top|center|bottom|left|center|right 方位名词",[19,129297,129298],{},"其他说明：",[19,129300,129301],{},"①参数是方位名词",[19,129303,129304],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129306,129307],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129309,129310],{},"②参数是精确单位",[19,129312,129313],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129315,129316],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129318,129319],{},"③参数是混合单位",[19,129321,129322],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[129,129324,129326],{"id":129325},"_825-背景图片固定","8.2.5 背景图片固定",[469,129328,129330],{"className":126932,"code":129329,"language":126934,"meta":54,"style":54},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[475,129331,129332,129337,129343,129355,129359,129364,129370,129380],{"__ignoreMap":54},[478,129333,129334],{"class":480,"line":481},[478,129335,129336],{"class":770},"\u002F* 背景滚动（默认） *\u002F\n",[478,129338,129339,129341],{"class":480,"line":565},[478,129340,51991],{"class":51680},[478,129342,16137],{"class":714},[478,129344,129345,129348,129350,129353],{"class":480,"line":579},[478,129346,129347],{"class":495},"  background-attachment",[478,129349,51817],{"class":714},[478,129351,129352],{"class":495},"scroll",[478,129354,1859],{"class":714},[478,129356,129357],{"class":480,"line":593},[478,129358,2133],{"class":714},[478,129360,129361],{"class":480,"line":1769},[478,129362,129363],{"class":770},"\u002F* 背景固定 *\u002F\n",[478,129365,129366,129368],{"class":480,"line":1783},[478,129367,51991],{"class":51680},[478,129369,16137],{"class":714},[478,129371,129372,129374,129376,129378],{"class":480,"line":1789},[478,129373,129347],{"class":495},[478,129375,51817],{"class":714},[478,129377,86613],{"class":495},[478,129379,1859],{"class":714},[478,129381,129382],{"class":480,"line":1880},[478,129383,2133],{"class":714},[371,129385,129386,129395],{},[374,129387,129388],{},[377,129389,129390,129393],{},[380,129391,129392],{"align":382},"参数",[380,129394,103076],{"align":382},[388,129396,129397,129404],{},[377,129398,129399,129401],{},[393,129400,129352],{"align":382},[393,129402,129403],{"align":382},"背景图像是随对象内容滚动",[377,129405,129406,129408],{},[393,129407,86613],{"align":382},[393,129409,129410],{"align":382},"背景图像固定",[129,129412,129414],{"id":129413},"_826-背景样式合写","8.2.6 背景样式合写",[469,129416,129418],{"className":126932,"code":129417,"language":126934,"meta":54,"style":54},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[475,129419,129420,129425,129431,129459],{"__ignoreMap":54},[478,129421,129422],{"class":480,"line":481},[478,129423,129424],{"class":770},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[478,129426,129427,129429],{"class":480,"line":565},[478,129428,51991],{"class":51680},[478,129430,16137],{"class":714},[478,129432,129433,129435,129437,129439,129442,129444,129446,129448,129450,129453,129455,129457],{"class":480,"line":579},[478,129434,70991],{"class":495},[478,129436,51817],{"class":714},[478,129438,61222],{"class":495},[478,129440,129441],{"class":495}," url",[478,129443,263],{"class":714},[478,129445,129030],{"class":5782},[478,129447,14280],{"class":714},[478,129449,62116],{"class":495},[478,129451,129452],{"class":495}," fixed",[478,129454,17709],{"class":495},[478,129456,129199],{"class":495},[478,129458,1859],{"class":714},[478,129460,129461],{"class":480,"line":593},[478,129462,2133],{"class":714},[129,129464,129466],{"id":129465},"_827-背景色半透明","8.2.7 背景色半透明",[469,129468,129470],{"className":126932,"code":129469,"language":126934,"meta":54,"style":54},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[475,129471,129472,129478,129504],{"__ignoreMap":54},[478,129473,129474,129476],{"class":480,"line":481},[478,129475,51991],{"class":51680},[478,129477,16137],{"class":714},[478,129479,129480,129482,129484,129486,129488,129490,129492,129494,129496,129498,129500,129502],{"class":480,"line":565},[478,129481,70991],{"class":495},[478,129483,51817],{"class":714},[478,129485,55490],{"class":495},[478,129487,263],{"class":714},[478,129489,895],{"class":495},[478,129491,13001],{"class":714},[478,129493,895],{"class":495},[478,129495,13001],{"class":714},[478,129497,895],{"class":495},[478,129499,13001],{"class":714},[478,129501,100901],{"class":495},[478,129503,3285],{"class":714},[478,129505,129506],{"class":480,"line":579},[478,129507,2133],{"class":714},[19,129509,99776],{},[19,129511,129512],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129514,129515],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129517,129518],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129520,129521],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[129,129523,129525],{"id":129524},"_828-总结","8.2.8 总结",[371,129527,129528,129539],{},[374,129529,129530],{},[377,129531,129532,129535,129537],{},[380,129533,129534],{"align":382},"属性",[380,129536,103076],{"align":382},[380,129538,858],{"align":382},[388,129540,129541,129552,129563,129574,129585,129596,129607],{},[377,129542,129543,129546,129549],{},[393,129544,129545],{"align":382},"background-color",[393,129547,129548],{"align":382},"背景颜色",[393,129550,129551],{"align":382},"预定义的颜色值\u002F十六进制\u002FRGB代码",[377,129553,129554,129557,129560],{},[393,129555,129556],{"align":382},"background-image",[393,129558,129559],{"align":382},"背景图片",[393,129561,129562],{"align":382},"url(图片路径)",[377,129564,129565,129568,129571],{},[393,129566,129567],{"align":382},"background-repeat",[393,129569,129570],{"align":382},"是否平铺",[393,129572,129573],{"align":382},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[377,129575,129576,129579,129582],{},[393,129577,129578],{"align":382},"background-position",[393,129580,129581],{"align":382},"背景位置",[393,129583,129584],{"align":382},"length\u002Fposition 分别是x和y坐标",[377,129586,129587,129590,129593],{},[393,129588,129589],{"align":382},"background-attachment",[393,129591,129592],{"align":382},"背景附着",[393,129594,129595],{"align":382},"scroll(背景滚动) \u002Ffixed (背景固定)",[377,129597,129598,129601,129604],{},[393,129599,129600],{"align":382},"背景简写",[393,129602,129603],{"align":382},"书写更简单",[393,129605,129606],{"align":382},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[377,129608,129609,129612,129615],{},[393,129610,129611],{"align":382},"背景半透明",[393,129613,129614],{"align":382},"背景颜色半透明",[393,129616,129617],{"align":382},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129619,129620],{},"颜色渐变：",[52,129622],{"style":126788,"src":129623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[52,129625],{"style":126788,"src":129626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[129,129628,129630],{"id":129629},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[469,129632,129634],{"className":127679,"code":129633,"language":127681,"meta":54,"style":54},"\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",[475,129635,129636,129651,129670,129689,129708,129727,129746],{"__ignoreMap":54},[478,129637,129638,129640,129642,129644,129646,129649],{"class":480,"line":481},[478,129639,1605],{"class":714},[478,129641,51991],{"class":51680},[478,129643,53866],{"class":484},[478,129645,759],{"class":714},[478,129647,129648],{"class":488},"\"nav\"",[478,129650,51687],{"class":714},[478,129652,129653,129655,129657,129659,129661,129663,129666,129668],{"class":480,"line":565},[478,129654,52524],{"class":714},[478,129656,518],{"class":51680},[478,129658,61437],{"class":484},[478,129660,759],{"class":714},[478,129662,61442],{"class":488},[478,129664,129665],{"class":714},">五彩导航1\u003C\u002F",[478,129667,518],{"class":51680},[478,129669,51687],{"class":714},[478,129671,129672,129674,129676,129678,129680,129682,129685,129687],{"class":480,"line":579},[478,129673,52524],{"class":714},[478,129675,518],{"class":51680},[478,129677,61437],{"class":484},[478,129679,759],{"class":714},[478,129681,61442],{"class":488},[478,129683,129684],{"class":714},">五彩导航2\u003C\u002F",[478,129686,518],{"class":51680},[478,129688,51687],{"class":714},[478,129690,129691,129693,129695,129697,129699,129701,129704,129706],{"class":480,"line":593},[478,129692,52524],{"class":714},[478,129694,518],{"class":51680},[478,129696,61437],{"class":484},[478,129698,759],{"class":714},[478,129700,61442],{"class":488},[478,129702,129703],{"class":714},">五彩导航3\u003C\u002F",[478,129705,518],{"class":51680},[478,129707,51687],{"class":714},[478,129709,129710,129712,129714,129716,129718,129720,129723,129725],{"class":480,"line":1769},[478,129711,52524],{"class":714},[478,129713,518],{"class":51680},[478,129715,61437],{"class":484},[478,129717,759],{"class":714},[478,129719,61442],{"class":488},[478,129721,129722],{"class":714},">五彩导航4\u003C\u002F",[478,129724,518],{"class":51680},[478,129726,51687],{"class":714},[478,129728,129729,129731,129733,129735,129737,129739,129742,129744],{"class":480,"line":1783},[478,129730,52524],{"class":714},[478,129732,518],{"class":51680},[478,129734,61437],{"class":484},[478,129736,759],{"class":714},[478,129738,61442],{"class":488},[478,129740,129741],{"class":714},">五彩导航5\u003C\u002F",[478,129743,518],{"class":51680},[478,129745,51687],{"class":714},[478,129747,129748,129750,129752],{"class":480,"line":1789},[478,129749,52165],{"class":714},[478,129751,51991],{"class":51680},[478,129753,51687],{"class":714},[469,129755,129757],{"className":126932,"code":129756,"language":126934,"meta":54,"style":54},".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",[475,129758,129759,129768,129778,129790,129802,129812,129824,129834,129838,129863,129886,129909,129932],{"__ignoreMap":54},[478,129760,129761,129764,129766],{"class":480,"line":481},[478,129762,129763],{"class":484},".nav",[478,129765,1967],{"class":51680},[478,129767,16137],{"class":714},[478,129769,129770,129772,129774,129776],{"class":480,"line":565},[478,129771,128548],{"class":495},[478,129773,51817],{"class":714},[478,129775,72763],{"class":495},[478,129777,1859],{"class":714},[478,129779,129780,129782,129784,129786,129788],{"class":480,"line":579},[478,129781,70948],{"class":495},[478,129783,51817],{"class":714},[478,129785,1512],{"class":495},[478,129787,51872],{"class":710},[478,129789,1859],{"class":714},[478,129791,129792,129794,129796,129798,129800],{"class":480,"line":593},[478,129793,71168],{"class":495},[478,129795,51817],{"class":714},[478,129797,1551],{"class":495},[478,129799,51872],{"class":710},[478,129801,1859],{"class":714},[478,129803,129804,129806,129808,129810],{"class":480,"line":1769},[478,129805,70906],{"class":495},[478,129807,51817],{"class":714},[478,129809,51972],{"class":495},[478,129811,1859],{"class":714},[478,129813,129814,129816,129818,129820,129822],{"class":480,"line":1783},[478,129815,127616],{"class":495},[478,129817,51817],{"class":714},[478,129819,1551],{"class":495},[478,129821,51872],{"class":710},[478,129823,1859],{"class":714},[478,129825,129826,129828,129830,129832],{"class":480,"line":1789},[478,129827,71285],{"class":495},[478,129829,51817],{"class":714},[478,129831,61222],{"class":495},[478,129833,1859],{"class":714},[478,129835,129836],{"class":480,"line":1880},[478,129837,2133],{"class":714},[478,129839,129840,129842,129844,129847,129849,129851,129854,129856,129858,129860],{"class":480,"line":1886},[478,129841,129763],{"class":484},[478,129843,1967],{"class":51680},[478,129845,129846],{"class":484},":nth-child",[478,129848,263],{"class":714},[478,129850,193],{"class":495},[478,129852,129853],{"class":714},") { ",[478,129855,129545],{"class":495},[478,129857,51817],{"class":714},[478,129859,128963],{"class":495},[478,129861,129862],{"class":714},"; }\n",[478,129864,129865,129867,129869,129871,129873,129875,129877,129879,129881,129884],{"class":480,"line":1898},[478,129866,129763],{"class":484},[478,129868,1967],{"class":51680},[478,129870,129846],{"class":484},[478,129872,263],{"class":714},[478,129874,789],{"class":495},[478,129876,129853],{"class":714},[478,129878,129545],{"class":495},[478,129880,51817],{"class":714},[478,129882,129883],{"class":495},"#ff0000",[478,129885,129862],{"class":714},[478,129887,129888,129890,129892,129894,129896,129898,129900,129902,129904,129907],{"class":480,"line":2180},[478,129889,129763],{"class":484},[478,129891,1967],{"class":51680},[478,129893,129846],{"class":484},[478,129895,263],{"class":714},[478,129897,783],{"class":495},[478,129899,129853],{"class":714},[478,129901,129545],{"class":495},[478,129903,51817],{"class":714},[478,129905,129906],{"class":495},"#00a4ff",[478,129908,129862],{"class":714},[478,129910,129911,129913,129915,129917,129919,129921,129923,129925,129927,129930],{"class":480,"line":2185},[478,129912,129763],{"class":484},[478,129914,1967],{"class":51680},[478,129916,129846],{"class":484},[478,129918,263],{"class":714},[478,129920,994],{"class":495},[478,129922,129853],{"class":714},[478,129924,129545],{"class":495},[478,129926,51817],{"class":714},[478,129928,129929],{"class":495},"#ff00ff",[478,129931,129862],{"class":714},[478,129933,129934,129936,129938,129940,129942,129944,129946,129948,129950,129953],{"class":480,"line":2191},[478,129935,129763],{"class":484},[478,129937,1967],{"class":51680},[478,129939,129846],{"class":484},[478,129941,263],{"class":714},[478,129943,1020],{"class":495},[478,129945,129853],{"class":714},[478,129947,129545],{"class":495},[478,129949,51817],{"class":714},[478,129951,129952],{"class":495},"#00ff00",[478,129954,129862],{"class":714},[14,129956,129958],{"id":129957},"_83-css三大特性","8.3 css三大特性",[129,129960,129962],{"id":129961},"_831-层叠性","8.3.1 层叠性",[19,129964,129965],{},"为了解决样式冲突问题",[19,129967,129968],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129970,129971],{},"   ②样式不冲突，不会层叠",[129,129973,129975],{"id":129974},"_832-继承性","8.3.2 继承性",[19,129977,129978],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129980,129981],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[469,129983,129985],{"className":126932,"code":129984,"language":126934,"meta":54,"style":54},"p {\n  color: #333;\n}\n",[475,129986,129987,129993,130003],{"__ignoreMap":54},[478,129988,129989,129991],{"class":480,"line":481},[478,129990,19],{"class":51680},[478,129992,16137],{"class":714},[478,129994,129995,129997,129999,130001],{"class":480,"line":565},[478,129996,71285],{"class":495},[478,129998,51817],{"class":714},[478,130000,62749],{"class":495},[478,130002,1859],{"class":714},[478,130004,130005],{"class":480,"line":579},[478,130006,2133],{"class":714},[52,130008],{"style":126788,"src":130009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130011,130012],{},"解释：①行高可以跟单位也可以不跟单位",[19,130014,130015],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130017,130018],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130020,130021],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[129,130023,130025],{"id":130024},"_833-优先级","8.3.3 优先级",[29,130027,130028,130031],{},[32,130029,130030],{},"选择器相同，则执行层叠性",[32,130032,130033],{},"选择器不同，则根据选择器权重执行",[371,130035,130036,130046],{},[374,130037,130038],{},[377,130039,130040,130043],{},[380,130041,130042],{"align":382},"选择器",[380,130044,130045],{"align":382},"选择器权重",[388,130047,130048,130056,130064,130072,130080,130088],{},[377,130049,130050,130053],{},[393,130051,130052],{"align":382},"继承 或者*",[393,130054,130055],{"align":382},"0，0，0，0",[377,130057,130058,130061],{},[393,130059,130060],{"align":382},"标签选择器",[393,130062,130063],{"align":382},"0，0，0，1",[377,130065,130066,130069],{},[393,130067,130068],{"align":382},"类选择器，伪类选择器",[393,130070,130071],{"align":382},"0，0，1，0",[377,130073,130074,130077],{},[393,130075,130076],{"align":382},"ID选择器",[393,130078,130079],{"align":382},"0，1，0，0",[377,130081,130082,130085],{},[393,130083,130084],{"align":382},"行内样式",[393,130086,130087],{"align":382},"1，0，0，0",[377,130089,130090,130093],{},[393,130091,130092],{"align":382},"！important",[393,130094,130095],{"align":382},"无穷大",[19,130097,130098],{},"! important用法：",[469,130100,130102],{"className":126932,"code":130101,"language":126934,"meta":54,"style":54},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[475,130103,130104,130109,130115,130128,130132,130137,130143,130153],{"__ignoreMap":54},[478,130105,130106],{"class":480,"line":481},[478,130107,130108],{"class":770},"\u002F* !important 拥有最高优先级 *\u002F\n",[478,130110,130111,130113],{"class":480,"line":565},[478,130112,51991],{"class":51680},[478,130114,16137],{"class":714},[478,130116,130117,130119,130121,130123,130126],{"class":480,"line":579},[478,130118,71285],{"class":495},[478,130120,51817],{"class":714},[478,130122,52025],{"class":495},[478,130124,130125],{"class":710}," !important",[478,130127,1859],{"class":714},[478,130129,130130],{"class":480,"line":593},[478,130131,2133],{"class":714},[478,130133,130134],{"class":480,"line":1769},[478,130135,130136],{"class":770},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[478,130138,130139,130141],{"class":480,"line":1783},[478,130140,51991],{"class":51680},[478,130142,16137],{"class":714},[478,130144,130145,130147,130149,130151],{"class":480,"line":1789},[478,130146,71285],{"class":495},[478,130148,51817],{"class":714},[478,130150,57801],{"class":495},[478,130152,1859],{"class":714},[478,130154,130155],{"class":480,"line":1880},[478,130156,2133],{"class":714},[19,130158,130159],{},"优先级注意点：",[19,130161,130162],{},"①权重是有4组数字组成,但是不会有进位",[19,130164,130165],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130167,130168],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130170,130171],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130173,130174],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130176,130177],{},"⑥复合选择器",[371,130179,130180,130190],{},[374,130181,130182],{},[377,130183,130184,130187],{},[380,130185,130186],{"align":382},"div ul li",[380,130188,130189],{"align":382},"0,0,0,3",[388,130191,130192,130200,130208],{},[377,130193,130194,130197],{},[393,130195,130196],{"align":382},".nav ul li",[393,130198,130199],{"align":382},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[377,130201,130202,130205],{},[393,130203,130204],{"align":382},"a:hover",[393,130206,130207],{"align":382},"0,0,1,1",[377,130209,130210,130213],{},[393,130211,130212],{"align":382},".nav a",[393,130214,130207],{"align":382},[617,130216,130217],{},"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":54,"searchDepth":565,"depth":565,"links":130219},[130220,130228,130239],{"id":128328,"depth":565,"text":128329,"children":130221},[130222,130223,130224,130225,130226,130227],{"id":128341,"depth":579,"text":128342},{"id":128413,"depth":579,"text":128414},{"id":128485,"depth":579,"text":128486},{"id":128516,"depth":579,"text":128517},{"id":128523,"depth":579,"text":128524},{"id":128676,"depth":579,"text":128677},{"id":128984,"depth":565,"text":128985,"children":130229},[130230,130231,130232,130233,130234,130235,130236,130237,130238],{"id":128991,"depth":579,"text":128992},{"id":129001,"depth":579,"text":129002},{"id":129097,"depth":579,"text":129098},{"id":129170,"depth":579,"text":129171},{"id":129325,"depth":579,"text":129326},{"id":129413,"depth":579,"text":129414},{"id":129465,"depth":579,"text":129466},{"id":129524,"depth":579,"text":129525},{"id":129629,"depth":579,"text":129630},{"id":129957,"depth":565,"text":129958,"children":130240},[130241,130242,130243],{"id":129961,"depth":579,"text":129962},{"id":129974,"depth":579,"text":129975},{"id":130024,"depth":579,"text":130025},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128320,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130250,"title":130251,"body":130252,"description":23942,"extension":638,"meta":131842,"navigation":640,"path":131843,"seo":131844,"stem":131845,"__hash__":131846},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130253,"toc":131821},[130254,130257,130261,130264,130267,130270,130273,130276,130279,130282,130286,130294,130331,130367,130370,130384,130389,130423,130426,130519,130524,130527,130557,130560,130565,130573,130577,130584,130630,130674,130679,130682,130685,130688,130691,130694,130697,130699,130702,130706,130711,130755,130760,130763,130766,130803,130808,130811,130814,130817,130820,130852,130855,130858,130861,130893,130896,130899,130902,130906,130909,130941,130944,130948,130968,130971,130979,130982,130986,130991,130994,131026,131031,131034,131072,131076,131081,131084,131087,131118,131121,131138,131143,131195,131255,131260,131314,131352,131356,131360,131363,131367,131375,131378,131380,131391,131396,131444,131478,131481,131484,131487,131490,131534,131537,131540,131543,131546,131549,131552,131596,131599,131602,131605,131608,131611,131614,131620,131623,131667,131670,131673,131676,131679,131682,131726,131729,131731,131734,131738,131742,131780,131784,131787,131790,131794,131802,131806,131809,131812,131815,131818],[10,130255,130251],{"id":130256},"_9-css盒模型浮动与切图",[14,130258,130260],{"id":130259},"_91-盒子模型","9.1 盒子模型",[19,130262,130263],{},"利用盒子来设计网页",[19,130265,130266],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130268,130269],{},"网页布局设置：",[19,130271,130272],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130274,130275],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130277,130278],{},"③往盒子里装内容",[52,130280],{"style":126788,"src":130281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[129,130283,130285],{"id":130284},"_911-边框border","9.1.1 边框（border）",[29,130287,130288,130291],{},[32,130289,130290],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[32,130292,130293],{},"语法",[469,130295,130297],{"className":126932,"code":130296,"language":126934,"meta":54,"style":54},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[475,130298,130299,130304,130310,130327],{"__ignoreMap":54},[478,130300,130301],{"class":480,"line":481},[478,130302,130303],{"class":770},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[478,130305,130306,130308],{"class":480,"line":565},[478,130307,51991],{"class":51680},[478,130309,16137],{"class":714},[478,130311,130312,130314,130316,130318,130320,130322,130325],{"class":480,"line":579},[478,130313,71276],{"class":495},[478,130315,51817],{"class":714},[478,130317,193],{"class":495},[478,130319,51872],{"class":710},[478,130321,51901],{"class":495},[478,130323,130324],{"class":495}," #ccc",[478,130326,1859],{"class":714},[478,130328,130329],{"class":480,"line":593},[478,130330,2133],{"class":714},[371,130332,130333,130341],{},[374,130334,130335],{},[377,130336,130337,130339],{},[380,130338,129534],{"align":382},[380,130340,103076],{"align":382},[388,130342,130343,130351,130359],{},[377,130344,130345,130348],{},[393,130346,130347],{"align":382},"border-width",[393,130349,130350],{"align":382},"定义边框粗细，单位是px",[377,130352,130353,130356],{},[393,130354,130355],{"align":382},"border-style",[393,130357,130358],{"align":382},"边框的样式",[377,130360,130361,130364],{},[393,130362,130363],{"align":382},"border-color",[393,130365,130366],{"align":382},"边框的颜色",[19,130368,130369],{},"边框样式 border-style 可以设置如下值：",[1702,130371,130372,130375,130378,130381],{},[32,130373,130374],{},"none：没有边框即忽略所有边框的宽度（默认值）",[32,130376,130377],{},"solid：边框为单实线(最为常用的)",[32,130379,130380],{},"dashed：边框为虚线",[32,130382,130383],{},"dotted：边框为点线",[29,130385,130386],{"start":579},[32,130387,130388],{},"边框的合写分写",[469,130390,130391],{"className":126932,"code":130296,"language":126934,"meta":54,"style":54},[475,130392,130393,130397,130403,130419],{"__ignoreMap":54},[478,130394,130395],{"class":480,"line":481},[478,130396,130303],{"class":770},[478,130398,130399,130401],{"class":480,"line":565},[478,130400,51991],{"class":51680},[478,130402,16137],{"class":714},[478,130404,130405,130407,130409,130411,130413,130415,130417],{"class":480,"line":579},[478,130406,71276],{"class":495},[478,130408,51817],{"class":714},[478,130410,193],{"class":495},[478,130412,51872],{"class":710},[478,130414,51901],{"class":495},[478,130416,130324],{"class":495},[478,130418,1859],{"class":714},[478,130420,130421],{"class":480,"line":593},[478,130422,2133],{"class":714},[19,130424,130425],{},"边框分开写法：",[469,130427,130429],{"className":126932,"code":130428,"language":126934,"meta":54,"style":54},"\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",[475,130430,130431,130436,130442,130460,130478,130497,130515],{"__ignoreMap":54},[478,130432,130433],{"class":480,"line":481},[478,130434,130435],{"class":770},"\u002F* 边框分开写法 *\u002F\n",[478,130437,130438,130440],{"class":480,"line":565},[478,130439,51991],{"class":51680},[478,130441,16137],{"class":714},[478,130443,130444,130447,130449,130451,130453,130455,130458],{"class":480,"line":579},[478,130445,130446],{"class":495},"  border-top",[478,130448,51817],{"class":714},[478,130450,193],{"class":495},[478,130452,51872],{"class":710},[478,130454,51901],{"class":495},[478,130456,130457],{"class":495}," #000",[478,130459,1859],{"class":714},[478,130461,130462,130465,130467,130469,130471,130473,130476],{"class":480,"line":593},[478,130463,130464],{"class":495},"  border-right",[478,130466,51817],{"class":714},[478,130468,789],{"class":495},[478,130470,51872],{"class":710},[478,130472,62621],{"class":495},[478,130474,130475],{"class":495}," #333",[478,130477,1859],{"class":714},[478,130479,130480,130483,130485,130487,130489,130492,130495],{"class":480,"line":1769},[478,130481,130482],{"class":495},"  border-bottom",[478,130484,51817],{"class":714},[478,130486,783],{"class":495},[478,130488,51872],{"class":710},[478,130490,130491],{"class":495}," dotted",[478,130493,130494],{"class":495}," #666",[478,130496,1859],{"class":714},[478,130498,130499,130502,130504,130506,130508,130510,130513],{"class":480,"line":1783},[478,130500,130501],{"class":495},"  border-left",[478,130503,51817],{"class":714},[478,130505,193],{"class":495},[478,130507,51872],{"class":710},[478,130509,51901],{"class":495},[478,130511,130512],{"class":495}," #999",[478,130514,1859],{"class":714},[478,130516,130517],{"class":480,"line":1789},[478,130518,2133],{"class":714},[29,130520,130521],{"start":593},[32,130522,130523],{},"表格的细线边框",[19,130525,130526],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[469,130528,130530],{"className":126932,"code":130529,"language":126934,"meta":54,"style":54},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[475,130531,130532,130537,130543,130553],{"__ignoreMap":54},[478,130533,130534],{"class":480,"line":481},[478,130535,130536],{"class":770},"\u002F* 表格细线边框合并 *\u002F\n",[478,130538,130539,130541],{"class":480,"line":565},[478,130540,371],{"class":51680},[478,130542,16137],{"class":714},[478,130544,130545,130547,130549,130551],{"class":480,"line":579},[478,130546,70958],{"class":495},[478,130548,51817],{"class":714},[478,130550,65415],{"class":495},[478,130552,1859],{"class":714},[478,130554,130555],{"class":480,"line":593},[478,130556,2133],{"class":714},[19,130558,130559],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[29,130561,130562],{"start":1769},[32,130563,130564],{},"解决边框额外增加盒子的实际大小的方法：",[1702,130566,130567,130570],{},[32,130568,130569],{},"测量盒子大小的时候,不量边框",[32,130571,130572],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[129,130574,130576],{"id":130575},"_912-内边距","9.1.2 内边距",[29,130578,130579,130582],{},[32,130580,130581],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[32,130583,130293],{},[371,130585,130586,130596],{},[374,130587,130588],{},[377,130589,130590,130593],{},[380,130591,130592],{"align":382},"值的个数",[380,130594,130595],{"align":382},"表达意思",[388,130597,130598,130606,130614,130622],{},[377,130599,130600,130603],{},[393,130601,130602],{"align":382},"padding: 5px;",[393,130604,130605],{"align":382},"1个值，代表上下左右都有5个元素",[377,130607,130608,130611],{},[393,130609,130610],{"align":382},"padding: 5px 10px;",[393,130612,130613],{"align":382},"2个值，代表上下内边距为5像素，左右内边距为10像素",[377,130615,130616,130619],{},[393,130617,130618],{"align":382},"padding: 5px 10px 20px;",[393,130620,130621],{"align":382},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[377,130623,130624,130627],{},[393,130625,130626],{"align":382},"padding: 5px 10px 20px 30px;",[393,130628,130629],{"align":382},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[371,130631,130632,130640],{},[374,130633,130634],{},[377,130635,130636,130638],{},[380,130637,129534],{"align":382},[380,130639,103076],{"align":382},[388,130641,130642,130650,130658,130666],{},[377,130643,130644,130647],{},[393,130645,130646],{"align":382},"padding-left",[393,130648,130649],{"align":382},"左内边距",[377,130651,130652,130655],{},[393,130653,130654],{"align":382},"padding-right",[393,130656,130657],{"align":382},"右内边距",[377,130659,130660,130663],{},[393,130661,130662],{"align":382},"padding-top",[393,130664,130665],{"align":382},"上内边距",[377,130667,130668,130671],{},[393,130669,130670],{"align":382},"padding-bottom",[393,130672,130673],{"align":382},"下内边距",[29,130675,130676],{"start":579},[32,130677,130678],{},"内边距会影响盒子的实际大小",[19,130680,130681],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130683,130684],{},"①内容和边框有了距离，添加了内边距",[19,130686,130687],{},"②padding影响了盒子实际大小",[19,130689,130690],{},"内边距对盒子大小的影响：",[19,130692,130693],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130695,130696],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130698,95600],{},[19,130700,130701],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[129,130703,130705],{"id":130704},"_913-外边距","9.1.3 外边距",[29,130707,130708],{},[32,130709,130710],{},"控制盒子与盒子之间的距离",[371,130712,130713,130721],{},[374,130714,130715],{},[377,130716,130717,130719],{},[380,130718,129534],{"align":382},[380,130720,103076],{"align":382},[388,130722,130723,130731,130739,130747],{},[377,130724,130725,130728],{},[393,130726,130727],{"align":382},"margin-left",[393,130729,130730],{"align":382},"左外边距",[377,130732,130733,130736],{},[393,130734,130735],{"align":382},"margin-right",[393,130737,130738],{"align":382},"右外边距",[377,130740,130741,130744],{},[393,130742,130743],{"align":382},"margin-top",[393,130745,130746],{"align":382},"上外边距",[377,130748,130749,130752],{},[393,130750,130751],{"align":382},"margin-bottom",[393,130753,130754],{"align":382},"下外边距",[29,130756,130757],{"start":565},[32,130758,130759],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130761,130762],{},"①盒子必须指定了宽度（width）",[19,130764,130765],{},"②盒子左右的外边距都设置为 auto",[469,130767,130769],{"className":126932,"code":130768,"language":126934,"meta":54,"style":54},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[475,130770,130771,130776,130783,130799],{"__ignoreMap":54},[478,130772,130773],{"class":480,"line":481},[478,130774,130775],{"class":770},"\u002F* margin 复合写法（同上） *\u002F\n",[478,130777,130778,130781],{"class":480,"line":565},[478,130779,130780],{"class":484},".box",[478,130782,16137],{"class":714},[478,130784,130785,130787,130789,130791,130793,130796],{"class":480,"line":579},[478,130786,70850],{"class":495},[478,130788,51817],{"class":714},[478,130790,895],{"class":495},[478,130792,51936],{"class":495},[478,130794,130795],{"class":714},";  ",[478,130797,130798],{"class":770},"\u002F* 块级盒子水平居中 *\u002F\n",[478,130800,130801],{"class":480,"line":593},[478,130802,2133],{"class":714},[29,130804,130805],{"start":579},[32,130806,130807],{},"外边距塌陷问题",[19,130809,130810],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[52,130812],{"style":126788,"src":130813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130815,130816],{},"解决方案：",[19,130818,130819],{},"①可以为父亲元素定义上边距",[469,130821,130822],{"className":126932,"code":130768,"language":126934,"meta":54,"style":54},[475,130823,130824,130828,130834,130848],{"__ignoreMap":54},[478,130825,130826],{"class":480,"line":481},[478,130827,130775],{"class":770},[478,130829,130830,130832],{"class":480,"line":565},[478,130831,130780],{"class":484},[478,130833,16137],{"class":714},[478,130835,130836,130838,130840,130842,130844,130846],{"class":480,"line":579},[478,130837,70850],{"class":495},[478,130839,51817],{"class":714},[478,130841,895],{"class":495},[478,130843,51936],{"class":495},[478,130845,130795],{"class":714},[478,130847,130798],{"class":770},[478,130849,130850],{"class":480,"line":593},[478,130851,2133],{"class":714},[19,130853,130854],{},"②可以为父亲元素定义上内边距",[19,130856,130857],{},"③可以为父亲元素添加overflow:hidden",[52,130859],{"style":126788,"src":130860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[469,130862,130863],{"className":126932,"code":130768,"language":126934,"meta":54,"style":54},[475,130864,130865,130869,130875,130889],{"__ignoreMap":54},[478,130866,130867],{"class":480,"line":481},[478,130868,130775],{"class":770},[478,130870,130871,130873],{"class":480,"line":565},[478,130872,130780],{"class":484},[478,130874,16137],{"class":714},[478,130876,130877,130879,130881,130883,130885,130887],{"class":480,"line":579},[478,130878,70850],{"class":495},[478,130880,51817],{"class":714},[478,130882,895],{"class":495},[478,130884,51936],{"class":495},[478,130886,130795],{"class":714},[478,130888,130798],{"class":770},[478,130890,130891],{"class":480,"line":593},[478,130892,2133],{"class":714},[52,130894],{"style":126788,"src":130895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130897,130898],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130900,130901],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[129,130903,130905],{"id":130904},"_914-清除内外边距","9.1.4 清除内外边距",[19,130907,130908],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[469,130910,130911],{"className":126932,"code":130768,"language":126934,"meta":54,"style":54},[475,130912,130913,130917,130923,130937],{"__ignoreMap":54},[478,130914,130915],{"class":480,"line":481},[478,130916,130775],{"class":770},[478,130918,130919,130921],{"class":480,"line":565},[478,130920,130780],{"class":484},[478,130922,16137],{"class":714},[478,130924,130925,130927,130929,130931,130933,130935],{"class":480,"line":579},[478,130926,70850],{"class":495},[478,130928,51817],{"class":714},[478,130930,895],{"class":495},[478,130932,51936],{"class":495},[478,130934,130795],{"class":714},[478,130936,130798],{"class":770},[478,130938,130939],{"class":480,"line":593},[478,130940,2133],{"class":714},[19,130942,130943],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[129,130945,130947],{"id":130946},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1702,130949,130950,130953,130956,130959,130962,130965],{},[32,130951,130952],{},"文件→打开 ：可以打开我们要测量的图片",[32,130954,130955],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[32,130957,130958],{},"右击标尺，把里面的单位改为像素",[32,130960,130961],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[32,130963,130964],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[32,130966,130967],{},"用选区拖动 可以测量大小",[52,130969],{"style":126788,"src":130970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1702,130972,130973,130976],{},[32,130974,130975],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[32,130977,130978],{},"吸管取色工具",[52,130980],{"style":126788,"src":130981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[129,130983,130985],{"id":130984},"_916-案例","9.1.6 案例",[29,130987,130988],{},[32,130989,130990],{},"小米商品",[52,130992],{"style":126788,"src":130993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[469,130995,130996],{"className":126932,"code":130768,"language":126934,"meta":54,"style":54},[475,130997,130998,131002,131008,131022],{"__ignoreMap":54},[478,130999,131000],{"class":480,"line":481},[478,131001,130775],{"class":770},[478,131003,131004,131006],{"class":480,"line":565},[478,131005,130780],{"class":484},[478,131007,16137],{"class":714},[478,131009,131010,131012,131014,131016,131018,131020],{"class":480,"line":579},[478,131011,70850],{"class":495},[478,131013,51817],{"class":714},[478,131015,895],{"class":495},[478,131017,51936],{"class":495},[478,131019,130795],{"class":714},[478,131021,130798],{"class":770},[478,131023,131024],{"class":480,"line":593},[478,131025,2133],{"class":714},[29,131027,131028],{"start":565},[32,131029,131030],{},"快报模块",[52,131032],{"style":126788,"src":131033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[469,131035,131037],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[475,131038,131039,131044,131059,131064],{"__ignoreMap":54},[478,131040,131041],{"class":480,"line":481},[478,131042,131043],{"class":770},"\u003C!-- HTML 代码示例 -->\n",[478,131045,131046,131048,131050,131052,131054,131057],{"class":480,"line":565},[478,131047,1605],{"class":714},[478,131049,51991],{"class":51680},[478,131051,53866],{"class":484},[478,131053,759],{"class":714},[478,131055,131056],{"class":488},"\"example\"",[478,131058,51687],{"class":714},[478,131060,131061],{"class":480,"line":579},[478,131062,131063],{"class":714},"  示例内容\n",[478,131065,131066,131068,131070],{"class":480,"line":593},[478,131067,52165],{"class":714},[478,131069,51991],{"class":51680},[478,131071,51687],{"class":714},[129,131073,131075],{"id":131074},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[29,131077,131078],{},[32,131079,131080],{},"圆角边框",[19,131082,131083],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[52,131085],{"style":126788,"src":131086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[469,131088,131090],{"className":126932,"code":131089,"language":126934,"meta":54,"style":54},"div {\n  border: 1px solid #ccc;\n}\n",[475,131091,131092,131098,131114],{"__ignoreMap":54},[478,131093,131094,131096],{"class":480,"line":481},[478,131095,51991],{"class":51680},[478,131097,16137],{"class":714},[478,131099,131100,131102,131104,131106,131108,131110,131112],{"class":480,"line":565},[478,131101,71276],{"class":495},[478,131103,51817],{"class":714},[478,131105,193],{"class":495},[478,131107,51872],{"class":710},[478,131109,51901],{"class":495},[478,131111,130324],{"class":495},[478,131113,1859],{"class":714},[478,131115,131116],{"class":480,"line":579},[478,131117,2133],{"class":714},[19,131119,131120],{},"解释:",[1702,131122,131123,131126,131129,131132,131135],{},[32,131124,131125],{},"参数值可以为数值或百分比的形式",[32,131127,131128],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[32,131130,131131],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[32,131133,131134],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[32,131136,131137],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[29,131139,131140],{"start":565},[32,131141,131142],{},"盒子阴影",[469,131144,131146],{"className":126932,"code":131145,"language":126934,"meta":54,"style":54},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[475,131147,131148,131154,131191],{"__ignoreMap":54},[478,131149,131150,131152],{"class":480,"line":481},[478,131151,51991],{"class":51680},[478,131153,16137],{"class":714},[478,131155,131156,131159,131161,131163,131165,131167,131169,131171,131173,131175,131177,131179,131181,131183,131185,131187,131189],{"class":480,"line":565},[478,131157,131158],{"class":495},"  box-shadow",[478,131160,51817],{"class":714},[478,131162,895],{"class":495},[478,131164,15320],{"class":495},[478,131166,51872],{"class":710},[478,131168,2604],{"class":495},[478,131170,51872],{"class":710},[478,131172,79147],{"class":495},[478,131174,263],{"class":714},[478,131176,895],{"class":495},[478,131178,13001],{"class":714},[478,131180,895],{"class":495},[478,131182,13001],{"class":714},[478,131184,895],{"class":495},[478,131186,13001],{"class":714},[478,131188,86590],{"class":495},[478,131190,3285],{"class":714},[478,131192,131193],{"class":480,"line":579},[478,131194,2133],{"class":714},[371,131196,131197,131205],{},[374,131198,131199],{},[377,131200,131201,131203],{},[380,131202,858],{"align":382},[380,131204,27869],{"align":382},[388,131206,131207,131215,131223,131231,131239,131247],{},[377,131208,131209,131212],{},[393,131210,131211],{"align":382},"h-shadow",[393,131213,131214],{"align":382},"必需,水平阴影的位置,允许负值",[377,131216,131217,131220],{},[393,131218,131219],{"align":382},"v-shadow",[393,131221,131222],{"align":382},"必需,垂直阴影的位置,允许负值",[377,131224,131225,131228],{},[393,131226,131227],{"align":382},"blur",[393,131229,131230],{"align":382},"可选,模糊距离,就是影子的虚实",[377,131232,131233,131236],{},[393,131234,131235],{"align":382},"spread",[393,131237,131238],{"align":382},"可选,阴影尺寸",[377,131240,131241,131244],{},[393,131242,131243],{"align":382},"color",[393,131245,131246],{"align":382},"可选,阴影的颜色",[377,131248,131249,131252],{},[393,131250,131251],{"align":382},"inset",[393,131253,131254],{"align":382},"可选,将外部阴影(outset)改为内部阴影",[29,131256,131257],{"start":579},[32,131258,131259],{},"文字阴影",[469,131261,131263],{"className":126932,"code":131262,"language":126934,"meta":54,"style":54},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[475,131264,131265,131271,131310],{"__ignoreMap":54},[478,131266,131267,131269],{"class":480,"line":481},[478,131268,19],{"class":51680},[478,131270,16137],{"class":714},[478,131272,131273,131276,131278,131280,131282,131284,131286,131288,131290,131292,131294,131296,131298,131300,131302,131304,131306,131308],{"class":480,"line":565},[478,131274,131275],{"class":495},"  text-shadow",[478,131277,51817],{"class":714},[478,131279,193],{"class":495},[478,131281,51872],{"class":710},[478,131283,25498],{"class":495},[478,131285,51872],{"class":710},[478,131287,15320],{"class":495},[478,131289,51872],{"class":710},[478,131291,79147],{"class":495},[478,131293,263],{"class":714},[478,131295,895],{"class":495},[478,131297,13001],{"class":714},[478,131299,895],{"class":495},[478,131301,13001],{"class":714},[478,131303,895],{"class":495},[478,131305,13001],{"class":714},[478,131307,100901],{"class":495},[478,131309,3285],{"class":714},[478,131311,131312],{"class":480,"line":579},[478,131313,2133],{"class":714},[371,131315,131316,131324],{},[374,131317,131318],{},[377,131319,131320,131322],{},[380,131321,858],{"align":382},[380,131323,27869],{"align":382},[388,131325,131326,131332,131339,131346],{},[377,131327,131328,131330],{},[393,131329,131211],{"align":382},[393,131331,131214],{"align":382},[377,131333,131334,131336],{},[393,131335,131219],{"align":382},[393,131337,131338],{"align":382},"必需,垂直阴影位置,允许负值",[377,131340,131341,131343],{},[393,131342,131227],{"align":382},[393,131344,131345],{"align":382},"可选,模糊的距离",[377,131347,131348,131350],{},[393,131349,131243],{"align":382},[393,131351,131246],{"align":382},[14,131353,131355],{"id":131354},"_92-浮动","9.2 浮动",[129,131357,131359],{"id":131358},"_921-浮动介绍","9.2.1 浮动介绍",[19,131361,131362],{},"在16.2中详细介绍",[129,131364,131366],{"id":131365},"_922-清除浮动","9.2.2 清除浮动",[29,131368,131369,131372],{},[32,131370,131371],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[32,131373,131374],{},"清除浮动的本质",[19,131376,131377],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131379,9591],{},[1702,131381,131382,131385,131388],{},[32,131383,131384],{},"如果父盒子本身有高度，则不需要清除浮动",[32,131386,131387],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[32,131389,131390],{},"父级有了高度，就不会影响下面的标准流了",[29,131392,131393],{"start":579},[32,131394,131395],{},"清除浮动样式",[469,131397,131399],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[475,131400,131401,131408,131419,131423,131430,131440],{"__ignoreMap":54},[478,131402,131403,131406],{"class":480,"line":481},[478,131404,131405],{"class":484},".left",[478,131407,16137],{"class":714},[478,131409,131410,131413,131415,131417],{"class":480,"line":565},[478,131411,131412],{"class":495},"  float",[478,131414,51817],{"class":714},[478,131416,382],{"class":495},[478,131418,1859],{"class":714},[478,131420,131421],{"class":480,"line":579},[478,131422,2133],{"class":714},[478,131424,131425,131428],{"class":480,"line":593},[478,131426,131427],{"class":484},".right",[478,131429,16137],{"class":714},[478,131431,131432,131434,131436,131438],{"class":480,"line":1769},[478,131433,131412],{"class":495},[478,131435,51817],{"class":714},[478,131437,72902],{"class":495},[478,131439,1859],{"class":714},[478,131441,131442],{"class":480,"line":1783},[478,131443,2133],{"class":714},[371,131445,131446,131454],{},[374,131447,131448],{},[377,131449,131450,131452],{},[380,131451,127396],{"align":382},[380,131453,27869],{"align":382},[388,131455,131456,131463,131470],{},[377,131457,131458,131460],{},[393,131459,382],{"align":382},[393,131461,131462],{"align":382},"不允许左侧有浮动元素（清除左侧浮动的影响）",[377,131464,131465,131467],{},[393,131466,72902],{"align":382},[393,131468,131469],{"align":382},"不允许右侧有浮动元素（清除右侧浮动的影响）",[377,131471,131472,131475],{},[393,131473,131474],{"align":382},"both",[393,131476,131477],{"align":382},"同时清除左右侧浮动的影响",[19,131479,131480],{},"法一",[19,131482,131483],{},"额外标签法也称为隔墙法",[19,131485,131486],{},"使用方式：",[19,131488,131489],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[469,131491,131492],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},[475,131493,131494,131500,131510,131514,131520,131530],{"__ignoreMap":54},[478,131495,131496,131498],{"class":480,"line":481},[478,131497,131405],{"class":484},[478,131499,16137],{"class":714},[478,131501,131502,131504,131506,131508],{"class":480,"line":565},[478,131503,131412],{"class":495},[478,131505,51817],{"class":714},[478,131507,382],{"class":495},[478,131509,1859],{"class":714},[478,131511,131512],{"class":480,"line":579},[478,131513,2133],{"class":714},[478,131515,131516,131518],{"class":480,"line":593},[478,131517,131427],{"class":484},[478,131519,16137],{"class":714},[478,131521,131522,131524,131526,131528],{"class":480,"line":1769},[478,131523,131412],{"class":495},[478,131525,51817],{"class":714},[478,131527,72902],{"class":495},[478,131529,1859],{"class":714},[478,131531,131532],{"class":480,"line":1783},[478,131533,2133],{"class":714},[19,131535,131536],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131538,131539],{},"优点： 通俗易懂，书写方便",[19,131541,131542],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131544,131545],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131547,131548],{},"法二",[19,131550,131551],{},"父级添加overflow属性",[469,131553,131554],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},[475,131555,131556,131562,131572,131576,131582,131592],{"__ignoreMap":54},[478,131557,131558,131560],{"class":480,"line":481},[478,131559,131405],{"class":484},[478,131561,16137],{"class":714},[478,131563,131564,131566,131568,131570],{"class":480,"line":565},[478,131565,131412],{"class":495},[478,131567,51817],{"class":714},[478,131569,382],{"class":495},[478,131571,1859],{"class":714},[478,131573,131574],{"class":480,"line":579},[478,131575,2133],{"class":714},[478,131577,131578,131580],{"class":480,"line":593},[478,131579,131427],{"class":484},[478,131581,16137],{"class":714},[478,131583,131584,131586,131588,131590],{"class":480,"line":1769},[478,131585,131412],{"class":495},[478,131587,51817],{"class":714},[478,131589,72902],{"class":495},[478,131591,1859],{"class":714},[478,131593,131594],{"class":480,"line":1783},[478,131595,2133],{"class":714},[19,131597,131598],{},"overflow: hidden;",[19,131600,131601],{},"优点：代码简洁",[19,131603,131604],{},"缺点：无法显示溢出的部分",[19,131606,131607],{},"注意：是给父元素添加代码",[19,131609,131610],{},"法三",[19,131612,131613],{},"父级添加after伪元素",[19,131615,131616,131619],{},[131617,131618],"after",{}," 方式是额外标签法的升级版",[19,131621,131622],{},"使用的时候复制就可以",[469,131624,131625],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},[475,131626,131627,131633,131643,131647,131653,131663],{"__ignoreMap":54},[478,131628,131629,131631],{"class":480,"line":481},[478,131630,131405],{"class":484},[478,131632,16137],{"class":714},[478,131634,131635,131637,131639,131641],{"class":480,"line":565},[478,131636,131412],{"class":495},[478,131638,51817],{"class":714},[478,131640,382],{"class":495},[478,131642,1859],{"class":714},[478,131644,131645],{"class":480,"line":579},[478,131646,2133],{"class":714},[478,131648,131649,131651],{"class":480,"line":593},[478,131650,131427],{"class":484},[478,131652,16137],{"class":714},[478,131654,131655,131657,131659,131661],{"class":480,"line":1769},[478,131656,131412],{"class":495},[478,131658,51817],{"class":714},[478,131660,72902],{"class":495},[478,131662,1859],{"class":714},[478,131664,131665],{"class":480,"line":1783},[478,131666,2133],{"class":714},[19,131668,131669],{},"优点：没有增加标签，结构更简单",[19,131671,131672],{},"缺点：照顾低版本浏览器",[19,131674,131675],{},"代表网站： 百度、淘宝网、网易等",[19,131677,131678],{},"法四",[19,131680,131681],{},"父级添加双伪元素",[469,131683,131684],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},[475,131685,131686,131692,131702,131706,131712,131722],{"__ignoreMap":54},[478,131687,131688,131690],{"class":480,"line":481},[478,131689,131405],{"class":484},[478,131691,16137],{"class":714},[478,131693,131694,131696,131698,131700],{"class":480,"line":565},[478,131695,131412],{"class":495},[478,131697,51817],{"class":714},[478,131699,382],{"class":495},[478,131701,1859],{"class":714},[478,131703,131704],{"class":480,"line":579},[478,131705,2133],{"class":714},[478,131707,131708,131710],{"class":480,"line":593},[478,131709,131427],{"class":484},[478,131711,16137],{"class":714},[478,131713,131714,131716,131718,131720],{"class":480,"line":1769},[478,131715,131412],{"class":495},[478,131717,51817],{"class":714},[478,131719,72902],{"class":495},[478,131721,1859],{"class":714},[478,131723,131724],{"class":480,"line":1783},[478,131725,2133],{"class":714},[19,131727,131728],{},"优点：代码更简洁",[19,131730,131672],{},[19,131732,131733],{},"代表网站：小米、腾讯等",[14,131735,131737],{"id":131736},"_93-ps切图","9.3 PS切图",[129,131739,131741],{"id":131740},"_931-常见图片格式","9.3.1 常见图片格式",[371,131743,131744,131754],{},[374,131745,131746],{},[377,131747,131748,131751],{},[380,131749,131750],{"align":382},"jpg图像格式",[380,131752,131753],{"align":382},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[388,131755,131756,131764,131772],{},[377,131757,131758,131761],{},[393,131759,131760],{"align":382},"gif图像格式",[393,131762,131763],{"align":382},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[377,131765,131766,131769],{},[393,131767,131768],{"align":382},"png图像格式",[393,131770,131771],{"align":382},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[377,131773,131774,131777],{},[393,131775,131776],{"align":382},"PSD图像格式",[393,131778,131779],{"align":382},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[129,131781,131783],{"id":131782},"_932-图层切图","9.3.2 图层切图",[19,131785,131786],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131788,131789],{},"按住shift选中两个图层->图层菜单->合并图层",[129,131791,131793],{"id":131792},"_933-切片切图","9.3.3 切片切图",[1702,131795,131796,131799],{},[32,131797,131798],{},"利用切片工具手动划出",[32,131800,131801],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[129,131803,131805],{"id":131804},"_934-切图步骤","9.3.4 切图步骤",[19,131807,131808],{},"用切片工具选中：",[52,131810],{"style":126788,"src":131811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131813,131814],{},"文件 -> 导出",[52,131816],{"style":126788,"src":131817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[617,131819,131820],{},"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":54,"searchDepth":565,"depth":565,"links":131822},[131823,131832,131836],{"id":130259,"depth":565,"text":130260,"children":131824},[131825,131826,131827,131828,131829,131830,131831],{"id":130284,"depth":579,"text":130285},{"id":130575,"depth":579,"text":130576},{"id":130704,"depth":579,"text":130705},{"id":130904,"depth":579,"text":130905},{"id":130946,"depth":579,"text":130947},{"id":130984,"depth":579,"text":130985},{"id":131074,"depth":579,"text":131075},{"id":131354,"depth":565,"text":131355,"children":131833},[131834,131835],{"id":131358,"depth":579,"text":131359},{"id":131365,"depth":579,"text":131366},{"id":131736,"depth":565,"text":131737,"children":131837},[131838,131839,131840,131841],{"id":131740,"depth":579,"text":131741},{"id":131782,"depth":579,"text":131783},{"id":131792,"depth":579,"text":131793},{"id":131804,"depth":579,"text":131805},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130251,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131848,"title":131849,"body":131850,"description":23942,"extension":638,"meta":132491,"navigation":640,"path":132492,"seo":132493,"stem":132494,"__hash__":132495},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131851,"toc":132479},[131852,131855,131859,131885,131919,131923,131927,131930,131972,131979,131989,131997,131999,132002,132005,132008,132015,132029,132033,132036,132065,132069,132072,132086,132090,132093,132121,132125,132128,132154,132158,132163,132196,132201,132229,132233,132250,132296,132301,132345,132362,132469,132477],[10,131853,131849],{"id":131854},"_10-css规范与学成在线案例",[14,131856,131858],{"id":131857},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[29,131860,131861,131867,131873,131879],{},[32,131862,131863,131866],{},[45,131864,131865],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[32,131868,131869,131872],{},[45,131870,131871],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[32,131874,131875,131878],{},[45,131876,131877],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[32,131880,131881,131884],{},[45,131882,131883],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[469,131886,131887],{"className":126932,"code":130296,"language":126934,"meta":54,"style":54},[475,131888,131889,131893,131899,131915],{"__ignoreMap":54},[478,131890,131891],{"class":480,"line":481},[478,131892,130303],{"class":770},[478,131894,131895,131897],{"class":480,"line":565},[478,131896,51991],{"class":51680},[478,131898,16137],{"class":714},[478,131900,131901,131903,131905,131907,131909,131911,131913],{"class":480,"line":579},[478,131902,71276],{"class":495},[478,131904,51817],{"class":714},[478,131906,193],{"class":495},[478,131908,51872],{"class":710},[478,131910,51901],{"class":495},[478,131912,130324],{"class":495},[478,131914,1859],{"class":714},[478,131916,131917],{"class":480,"line":593},[478,131918,2133],{"class":714},[14,131920,131922],{"id":131921},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[129,131924,131926],{"id":131925},"_1021-header头部制作","10.2.1 header头部制作",[52,131928],{"style":126788,"src":131929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1702,131931,131932,131939,131946,131952,131959,131966],{},[32,131933,131934,131935,131938],{},"1号是版心盒子 ",[45,131936,131937],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[32,131940,131941,131942,131945],{},"版心盒子 里面包含 2号盒子 ",[45,131943,131944],{},"logo"," 图标",[32,131947,131948,131949,131951],{},"版心盒子 里面包含 3号盒子 ",[45,131950,54093],{}," 导航栏",[32,131953,131954,131955,131958],{},"版心盒子 里面包含 4号盒子 ",[45,131956,131957],{},"search"," 搜索框",[32,131960,131961,131962,131965],{},"版心盒子 里面包含 5号盒子 ",[45,131963,131964],{},"user"," 个人信息",[32,131967,131968,131969],{},"注意，要求里面的 ",[45,131970,131971],{},"4个子盒子 必须都浮动",[29,131973,131974],{},[32,131975,131976],{},[45,131977,131978],{},"导航栏注意点:",[19,131980,131981,131982,131985,131986],{},"实际开发中， ",[45,131983,131984],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[45,131987,131988],{},"用 li 包含链接(li+a)的做法",[1702,131990,131991,131994],{},[32,131992,131993],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[32,131995,131996],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131998,9591],{},[19,132000,132001],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132003,132004],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132006,132007],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[29,132009,132010],{"start":565},[32,132011,132012],{},[45,132013,132014],{},"4号盒子search的细节：",[1702,132016,132017,132020,132023],{},[32,132018,132019],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[32,132021,132022],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[32,132024,132025,132028],{},[475,132026,132027],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[129,132030,132032],{"id":132031},"_1022-banner制作","10.2.2 banner制作",[52,132034],{"style":126788,"src":132035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1702,132037,132038,132045,132051,132058],{},[32,132039,132040,132041,132044],{},"1号盒子是通栏的大盒子 ",[45,132042,132043],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[32,132046,132047,132048,132050],{},"2号盒子是版心 ",[45,132049,1490],{}," ， 要水平居中对齐",[32,132052,132053,132054,132057],{},"3号盒子版心内，左对齐 ",[45,132055,132056],{},"subnav"," 侧导航栏",[32,132059,132060,132061,132064],{},"4号盒子版心内，右对齐 ",[45,132062,132063],{},"course"," 课程",[129,132066,132068],{"id":132067},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[52,132070],{"style":126788,"src":132071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1702,132073,132074,132077,132080,132083],{},[32,132075,132076],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[32,132078,132079],{},"1号盒子是标题 H3 左侧浮动",[32,132081,132082],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[32,132084,132085],{},"3号盒子 右浮动 mod 修改",[129,132087,132089],{"id":132088},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[52,132091],{"style":126788,"src":132092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1702,132094,132095,132101,132108,132115,132118],{},[32,132096,132097,132098,132100],{},"1号盒子为最大的盒子 ",[45,132099,54094],{}," 版心水平居中对齐",[32,132102,132103,132104,132107],{},"2号盒子为上面部分 ",[45,132105,132106],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[32,132109,132110,132111,132114],{},"3号盒子为底下部分 ",[45,132112,132113],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[32,132116,132117],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[32,132119,132120],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[129,132122,132124],{"id":132123},"_1025-底部模块制作","10.2.5 底部模块制作",[52,132126],{"style":126788,"src":132127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1702,132129,132130,132137,132140,132147],{},[32,132131,132132,132133,132136],{},"1号盒子通栏大盒子 底部 ",[45,132134,132135],{},"footer"," 给高度 底色是白色",[32,132138,132139],{},"2号盒子版心水平居中",[32,132141,132142,132143,132146],{},"3号盒子版权 ",[45,132144,132145],{},"copyright"," 左对齐",[32,132148,132149,132150,132153],{},"4号盒子 链接组 ",[45,132151,132152],{},"links"," 右对齐",[129,132155,132157],{"id":132156},"_1026-代码模块","10.2.6 代码模块",[29,132159,132160],{},[32,132161,132162],{},"html部分",[469,132164,132166],{"className":127679,"code":132165,"language":127681,"meta":54,"style":54},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[475,132167,132168],{"__ignoreMap":54},[478,132169,132170,132172,132174,132176,132178,132181,132184,132186,132189,132192,132194],{"class":480,"line":481},[478,132171,1605],{"class":714},[478,132173,518],{"class":51680},[478,132175,61437],{"class":484},[478,132177,759],{"class":714},[478,132179,132180],{"class":488},"\"https:\u002F\u002Fexample.com\"",[478,132182,132183],{"class":484}," target",[478,132185,759],{"class":714},[478,132187,132188],{"class":488},"\"_blank\"",[478,132190,132191],{"class":714},">链接文字\u003C\u002F",[478,132193,518],{"class":51680},[478,132195,51687],{"class":714},[29,132197,132198],{"start":565},[32,132199,132200],{},"css部分",[469,132202,132203],{"className":127679,"code":132165,"language":127681,"meta":54,"style":54},[475,132204,132205],{"__ignoreMap":54},[478,132206,132207,132209,132211,132213,132215,132217,132219,132221,132223,132225,132227],{"class":480,"line":481},[478,132208,1605],{"class":714},[478,132210,518],{"class":51680},[478,132212,61437],{"class":484},[478,132214,759],{"class":714},[478,132216,132180],{"class":488},[478,132218,132183],{"class":484},[478,132220,759],{"class":714},[478,132222,132188],{"class":488},[478,132224,132191],{"class":714},[478,132226,518],{"class":51680},[478,132228,51687],{"class":714},[129,132230,132232],{"id":132231},"_1027-收获","10.2.7 收获",[29,132234,132235,132238,132241,132244,132247],{},[32,132236,132237],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[32,132239,132240],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[32,132242,132243],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[32,132245,132246],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[32,132248,132249],{},"遗忘代码",[469,132251,132253],{"className":126932,"code":132252,"language":126934,"meta":54,"style":54},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[475,132254,132255,132277,132282,132292],{"__ignoreMap":54},[478,132256,132257,132259,132261,132263,132265,132267,132269,132271,132273,132275],{"class":480,"line":481},[478,132258,51991],{"class":51680},[478,132260,13001],{"class":714},[478,132262,19],{"class":51680},[478,132264,13001],{"class":714},[478,132266,10],{"class":51680},[478,132268,13001],{"class":714},[478,132270,1702],{"class":51680},[478,132272,13001],{"class":714},[478,132274,32],{"class":51680},[478,132276,16137],{"class":714},[478,132278,132279],{"class":480,"line":565},[478,132280,132281],{"class":770},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[478,132283,132284,132286,132288,132290],{"class":480,"line":579},[478,132285,128548],{"class":495},[478,132287,51817],{"class":714},[478,132289,61249],{"class":495},[478,132291,1859],{"class":714},[478,132293,132294],{"class":480,"line":593},[478,132295,2133],{"class":714},[29,132297,132298],{"start":1783},[32,132299,132300],{},"html引css的程序",[469,132302,132303],{"className":126932,"code":132252,"language":126934,"meta":54,"style":54},[475,132304,132305,132327,132331,132341],{"__ignoreMap":54},[478,132306,132307,132309,132311,132313,132315,132317,132319,132321,132323,132325],{"class":480,"line":481},[478,132308,51991],{"class":51680},[478,132310,13001],{"class":714},[478,132312,19],{"class":51680},[478,132314,13001],{"class":714},[478,132316,10],{"class":51680},[478,132318,13001],{"class":714},[478,132320,1702],{"class":51680},[478,132322,13001],{"class":714},[478,132324,32],{"class":51680},[478,132326,16137],{"class":714},[478,132328,132329],{"class":480,"line":565},[478,132330,132281],{"class":770},[478,132332,132333,132335,132337,132339],{"class":480,"line":579},[478,132334,128548],{"class":495},[478,132336,51817],{"class":714},[478,132338,61249],{"class":495},[478,132340,1859],{"class":714},[478,132342,132343],{"class":480,"line":593},[478,132344,2133],{"class":714},[29,132346,132347,132350,132353,132356,132359],{"start":1789},[32,132348,132349],{},"浮动的盒子不会有外边距合并问题",[32,132351,132352],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[32,132354,132355],{},"ctrl+g快速定位行；shift+alt多个光标",[32,132357,132358],{},"学习上方各个模块的选择器起名方法，以后就这样用",[32,132360,132361],{},"在写选择器时尽量写全一些，例如",[469,132363,132365],{"className":126932,"code":132364,"language":126934,"meta":54,"style":54},"\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",[475,132366,132367,132372,132388,132393,132408,132413,132428,132433,132448,132453],{"__ignoreMap":54},[478,132368,132369],{"class":480,"line":481},[478,132370,132371],{"class":770},"\u002F* 静态定位（默认） *\u002F\n",[478,132373,132374,132377,132379,132381,132383,132386],{"class":480,"line":565},[478,132375,132376],{"class":484},".static",[478,132378,80187],{"class":714},[478,132380,129292],{"class":495},[478,132382,51817],{"class":714},[478,132384,132385],{"class":495},"static",[478,132387,129862],{"class":714},[478,132389,132390],{"class":480,"line":579},[478,132391,132392],{"class":770},"\u002F* 相对定位 *\u002F\n",[478,132394,132395,132398,132400,132402,132404,132406],{"class":480,"line":593},[478,132396,132397],{"class":484},".relative",[478,132399,80187],{"class":714},[478,132401,129292],{"class":495},[478,132403,51817],{"class":714},[478,132405,55144],{"class":495},[478,132407,129862],{"class":714},[478,132409,132410],{"class":480,"line":1769},[478,132411,132412],{"class":770},"\u002F* 绝对定位 *\u002F\n",[478,132414,132415,132418,132420,132422,132424,132426],{"class":480,"line":1783},[478,132416,132417],{"class":484},".absolute",[478,132419,80187],{"class":714},[478,132421,129292],{"class":495},[478,132423,51817],{"class":714},[478,132425,55211],{"class":495},[478,132427,129862],{"class":714},[478,132429,132430],{"class":480,"line":1789},[478,132431,132432],{"class":770},"\u002F* 固定定位 *\u002F\n",[478,132434,132435,132438,132440,132442,132444,132446],{"class":480,"line":1880},[478,132436,132437],{"class":484},".fixed",[478,132439,80187],{"class":714},[478,132441,129292],{"class":495},[478,132443,51817],{"class":714},[478,132445,86613],{"class":495},[478,132447,129862],{"class":714},[478,132449,132450],{"class":480,"line":1886},[478,132451,132452],{"class":770},"\u002F* 粘性定位 *\u002F\n",[478,132454,132455,132458,132460,132462,132464,132467],{"class":480,"line":1898},[478,132456,132457],{"class":484},".sticky",[478,132459,80187],{"class":714},[478,132461,129292],{"class":495},[478,132463,51817],{"class":714},[478,132465,132466],{"class":495},"sticky",[478,132468,129862],{"class":714},[29,132470,132471,132474],{"start":2185},[32,132472,132473],{},"一定要用好注释",[32,132475,132476],{},"浮动的盒子不会有外边距合并的问题",[617,132478,131820],{},{"title":54,"searchDepth":565,"depth":565,"links":132480},[132481,132482],{"id":131857,"depth":565,"text":131858},{"id":131921,"depth":565,"text":131922,"children":132483},[132484,132485,132486,132487,132488,132489,132490],{"id":131925,"depth":579,"text":131926},{"id":132031,"depth":579,"text":132032},{"id":132067,"depth":579,"text":132068},{"id":132088,"depth":579,"text":132089},{"id":132123,"depth":579,"text":132124},{"id":132156,"depth":579,"text":132157},{"id":132231,"depth":579,"text":132232},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131849,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132497,"title":132498,"body":132499,"description":23942,"extension":638,"meta":133985,"navigation":640,"path":133986,"seo":133987,"stem":133988,"__hash__":133989},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132500,"toc":133977},[132501,132504,132508,132512,132523,132527,132544,132588,132621,132624,132641,132644,132647,132691,132695,132699,132702,132705,132709,132712,132723,132786,132827,132830,132845,132899,132907,132910,132921,132975,133001,133004,133017,133071,133103,133157,133180,133234,133237,133240,133247,133301,133322,133376,133379,133382,133467,133475,133532,133555,133559,133562,133580,133584,133603,133657,133695,133699,133702,133705,133727,133731,133739,133742,133747,133758,133761,133765,133779,133823,133826,133830,133833,133838,133864,133869,133946,133949,133953,133956,133959,133962,133965,133968,133971,133974],[10,132502,132498],{"id":132503},"_11-传统布局与定位体系",[14,132505,132507],{"id":132506},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[129,132509,132511],{"id":132510},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1702,132513,132514,132517,132520],{},[32,132515,132516],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[32,132518,132519],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[32,132521,132522],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[129,132524,132526],{"id":132525},"_1112-浮动","11.1.2 浮动",[1702,132528,132529,132532,132535,132538,132541],{},[32,132530,132531],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[32,132533,132534],{},"浮动可以改变元素标签默认的排列方式",[32,132536,132537],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[32,132539,132540],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[32,132542,132543],{},"在使用行内块转换时盒子之间是有空隙的",[469,132545,132546],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},[475,132547,132548,132554,132564,132568,132574,132584],{"__ignoreMap":54},[478,132549,132550,132552],{"class":480,"line":481},[478,132551,131405],{"class":484},[478,132553,16137],{"class":714},[478,132555,132556,132558,132560,132562],{"class":480,"line":565},[478,132557,131412],{"class":495},[478,132559,51817],{"class":714},[478,132561,382],{"class":495},[478,132563,1859],{"class":714},[478,132565,132566],{"class":480,"line":579},[478,132567,2133],{"class":714},[478,132569,132570,132572],{"class":480,"line":593},[478,132571,131427],{"class":484},[478,132573,16137],{"class":714},[478,132575,132576,132578,132580,132582],{"class":480,"line":1769},[478,132577,131412],{"class":495},[478,132579,51817],{"class":714},[478,132581,72902],{"class":495},[478,132583,1859],{"class":714},[478,132585,132586],{"class":480,"line":1783},[478,132587,2133],{"class":714},[371,132589,132590,132598],{},[374,132591,132592],{},[377,132593,132594,132596],{},[380,132595,127396],{"align":382},[380,132597,27869],{"align":382},[388,132599,132600,132607,132614],{},[377,132601,132602,132604],{},[393,132603,55117],{"align":382},[393,132605,132606],{"align":382},"元素不浮动（默认值）",[377,132608,132609,132611],{},[393,132610,382],{"align":382},[393,132612,132613],{"align":382},"元素向左浮动",[377,132615,132616,132618],{},[393,132617,72902],{"align":382},[393,132619,132620],{"align":382},"元素向右浮动",[19,132622,132623],{},"浮动重点：",[1702,132625,132626,132629,132632,132635,132638],{},[32,132627,132628],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[32,132630,132631],{},"浮动的元素会一行内显示并且元素顶部对齐",[32,132633,132634],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[32,132636,132637],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[32,132639,132640],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132642,132643],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132645,132646],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[469,132648,132649],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},[475,132650,132651,132657,132667,132671,132677,132687],{"__ignoreMap":54},[478,132652,132653,132655],{"class":480,"line":481},[478,132654,131405],{"class":484},[478,132656,16137],{"class":714},[478,132658,132659,132661,132663,132665],{"class":480,"line":565},[478,132660,131412],{"class":495},[478,132662,51817],{"class":714},[478,132664,382],{"class":495},[478,132666,1859],{"class":714},[478,132668,132669],{"class":480,"line":579},[478,132670,2133],{"class":714},[478,132672,132673,132675],{"class":480,"line":593},[478,132674,131427],{"class":484},[478,132676,16137],{"class":714},[478,132678,132679,132681,132683,132685],{"class":480,"line":1769},[478,132680,131412],{"class":495},[478,132682,51817],{"class":714},[478,132684,72902],{"class":495},[478,132686,1859],{"class":714},[478,132688,132689],{"class":480,"line":1783},[478,132690,2133],{"class":714},[129,132692,132694],{"id":132693},"_1113-定位","11.1.3 定位",[22563,132696,132698],{"id":132697},"_11131-使用场景","11.1.3.1 使用场景",[19,132700,132701],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132703,132704],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22563,132706,132708],{"id":132707},"_11132-定位组成","11.1.3.2 定位组成",[19,132710,132711],{},"定位 = 定位模式 + 边偏移",[29,132713,132714],{},[32,132715,132716,132719,132720],{},[45,132717,132718],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[45,132721,132722],{},"定位模式",[469,132724,132726],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[475,132727,132728,132734,132748,132765,132782],{"__ignoreMap":54},[478,132729,132730,132732],{"class":480,"line":481},[478,132731,130780],{"class":484},[478,132733,16137],{"class":714},[478,132735,132736,132739,132741,132743,132745],{"class":480,"line":565},[478,132737,132738],{"class":495},"  position",[478,132740,51817],{"class":714},[478,132742,55144],{"class":495},[478,132744,130795],{"class":714},[478,132746,132747],{"class":770},"\u002F* 定位模式 *\u002F\n",[478,132749,132750,132753,132755,132757,132759,132762],{"class":480,"line":579},[478,132751,132752],{"class":495},"  top",[478,132754,51817],{"class":714},[478,132756,1146],{"class":495},[478,132758,51872],{"class":710},[478,132760,132761],{"class":714},";           ",[478,132763,132764],{"class":770},"\u002F* 边偏移：上 *\u002F\n",[478,132766,132767,132770,132772,132774,132776,132779],{"class":480,"line":593},[478,132768,132769],{"class":495},"  left",[478,132771,51817],{"class":714},[478,132773,1396],{"class":495},[478,132775,51872],{"class":710},[478,132777,132778],{"class":714},";          ",[478,132780,132781],{"class":770},"\u002F* 边偏移：左 *\u002F\n",[478,132783,132784],{"class":480,"line":1769},[478,132785,2133],{"class":714},[371,132787,132788,132797],{},[374,132789,132790],{},[377,132791,132792,132794],{},[380,132793,858],{"align":382},[380,132795,132796],{"align":382},"语义",[388,132798,132799,132806,132813,132820],{},[377,132800,132801,132803],{},[393,132802,132385],{"align":382},[393,132804,132805],{"align":382},"静态定位",[377,132807,132808,132810],{},[393,132809,55144],{"align":382},[393,132811,132812],{"align":382},"相对定位",[377,132814,132815,132817],{},[393,132816,55211],{"align":382},[393,132818,132819],{"align":382},"绝对定位",[377,132821,132822,132824],{},[393,132823,86613],{"align":382},[393,132825,132826],{"align":382},"固定定位",[19,132828,132829],{},"（1）静态定位：",[1702,132831,132832,132843],{},[32,132833,132834,132835,132838,132839,132842],{},"静态定位是元素的 ",[45,132836,132837],{},"默认定位方式"," ， ",[45,132840,132841],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[32,132844,5747],{},[469,132846,132847],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},[475,132848,132849,132855,132867,132881,132895],{"__ignoreMap":54},[478,132850,132851,132853],{"class":480,"line":481},[478,132852,130780],{"class":484},[478,132854,16137],{"class":714},[478,132856,132857,132859,132861,132863,132865],{"class":480,"line":565},[478,132858,132738],{"class":495},[478,132860,51817],{"class":714},[478,132862,55144],{"class":495},[478,132864,130795],{"class":714},[478,132866,132747],{"class":770},[478,132868,132869,132871,132873,132875,132877,132879],{"class":480,"line":579},[478,132870,132752],{"class":495},[478,132872,51817],{"class":714},[478,132874,1146],{"class":495},[478,132876,51872],{"class":710},[478,132878,132761],{"class":714},[478,132880,132764],{"class":770},[478,132882,132883,132885,132887,132889,132891,132893],{"class":480,"line":593},[478,132884,132769],{"class":495},[478,132886,51817],{"class":714},[478,132888,1396],{"class":495},[478,132890,51872],{"class":710},[478,132892,132778],{"class":714},[478,132894,132781],{"class":770},[478,132896,132897],{"class":480,"line":1769},[478,132898,2133],{"class":714},[1702,132900,132901,132904],{},[32,132902,132903],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[32,132905,132906],{},"静态定位在布局时我们几乎不用的",[19,132908,132909],{},"（2）相对定位",[1702,132911,132912,132919],{},[32,132913,132914,132915,132918],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[45,132916,132917],{},"原来的位置"," 来说的（自恋型）",[32,132920,5747],{},[469,132922,132923],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},[475,132924,132925,132931,132943,132957,132971],{"__ignoreMap":54},[478,132926,132927,132929],{"class":480,"line":481},[478,132928,130780],{"class":484},[478,132930,16137],{"class":714},[478,132932,132933,132935,132937,132939,132941],{"class":480,"line":565},[478,132934,132738],{"class":495},[478,132936,51817],{"class":714},[478,132938,55144],{"class":495},[478,132940,130795],{"class":714},[478,132942,132747],{"class":770},[478,132944,132945,132947,132949,132951,132953,132955],{"class":480,"line":579},[478,132946,132752],{"class":495},[478,132948,51817],{"class":714},[478,132950,1146],{"class":495},[478,132952,51872],{"class":710},[478,132954,132761],{"class":714},[478,132956,132764],{"class":770},[478,132958,132959,132961,132963,132965,132967,132969],{"class":480,"line":593},[478,132960,132769],{"class":495},[478,132962,51817],{"class":714},[478,132964,1396],{"class":495},[478,132966,51872],{"class":710},[478,132968,132778],{"class":714},[478,132970,132781],{"class":770},[478,132972,132973],{"class":480,"line":1769},[478,132974,2133],{"class":714},[1702,132976,132977],{},[32,132978,132979,132980,132982,132983,132985,132986,132989,132990,132993,132994,132996,132997,133000],{},"相对定位的特点：",[54096,132981],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54096,132984],{},"  ② ",[45,132987,132988],{},"原来"," 在标准流的 ",[45,132991,132992],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54096,132995],{},"  ③因此， ",[45,132998,132999],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133002,133003],{},"（3）绝对定位",[1702,133005,133006,133015],{},[32,133007,133008,133010,133011,133014],{},[45,133009,132819],{}," 是元素在移动位置的时候，是相对于它 ",[45,133012,133013],{},"祖先元素"," 来说的（拼爹型）",[32,133016,5747],{},[469,133018,133019],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},[475,133020,133021,133027,133039,133053,133067],{"__ignoreMap":54},[478,133022,133023,133025],{"class":480,"line":481},[478,133024,130780],{"class":484},[478,133026,16137],{"class":714},[478,133028,133029,133031,133033,133035,133037],{"class":480,"line":565},[478,133030,132738],{"class":495},[478,133032,51817],{"class":714},[478,133034,55144],{"class":495},[478,133036,130795],{"class":714},[478,133038,132747],{"class":770},[478,133040,133041,133043,133045,133047,133049,133051],{"class":480,"line":579},[478,133042,132752],{"class":495},[478,133044,51817],{"class":714},[478,133046,1146],{"class":495},[478,133048,51872],{"class":710},[478,133050,132761],{"class":714},[478,133052,132764],{"class":770},[478,133054,133055,133057,133059,133061,133063,133065],{"class":480,"line":593},[478,133056,132769],{"class":495},[478,133058,51817],{"class":714},[478,133060,1396],{"class":495},[478,133062,51872],{"class":710},[478,133064,132778],{"class":714},[478,133066,132781],{"class":770},[478,133068,133069],{"class":480,"line":1769},[478,133070,2133],{"class":714},[1702,133072,133073,133088,133097,133100],{},[32,133074,133075,133076,133078,133079,133081,133082,133084,133085,133087],{},"绝对定位的特点：",[54096,133077],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54096,133080],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54096,133083],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54096,133086],{},"  (4)固定定位",[32,133089,133090,133092,133093,133096],{},[45,133091,132826],{}," 是元素 ",[45,133094,133095],{},"固定于浏览器可视区的位置"," 。（认死理型）",[32,133098,133099],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[32,133101,133102],{},"语法:",[469,133104,133105],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},[475,133106,133107,133113,133125,133139,133153],{"__ignoreMap":54},[478,133108,133109,133111],{"class":480,"line":481},[478,133110,130780],{"class":484},[478,133112,16137],{"class":714},[478,133114,133115,133117,133119,133121,133123],{"class":480,"line":565},[478,133116,132738],{"class":495},[478,133118,51817],{"class":714},[478,133120,55144],{"class":495},[478,133122,130795],{"class":714},[478,133124,132747],{"class":770},[478,133126,133127,133129,133131,133133,133135,133137],{"class":480,"line":579},[478,133128,132752],{"class":495},[478,133130,51817],{"class":714},[478,133132,1146],{"class":495},[478,133134,51872],{"class":710},[478,133136,132761],{"class":714},[478,133138,132764],{"class":770},[478,133140,133141,133143,133145,133147,133149,133151],{"class":480,"line":593},[478,133142,132769],{"class":495},[478,133144,51817],{"class":714},[478,133146,1396],{"class":495},[478,133148,51872],{"class":710},[478,133150,132778],{"class":714},[478,133152,132781],{"class":770},[478,133154,133155],{"class":480,"line":1769},[478,133156,2133],{"class":714},[1702,133158,133159,133168],{},[32,133160,133161,133162,133164,133165,133167],{},"特点:",[54096,133163],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54096,133166],{},"  ②固定定位不再占有原先的位置,完全脱标",[32,133169,133170,133171,133173,133174,133176,133177,133179],{},"固定在版心位置的方法:",[54096,133172],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54096,133175],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54096,133178],{},"  实例：",[469,133181,133182],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},[475,133183,133184,133190,133202,133216,133230],{"__ignoreMap":54},[478,133185,133186,133188],{"class":480,"line":481},[478,133187,130780],{"class":484},[478,133189,16137],{"class":714},[478,133191,133192,133194,133196,133198,133200],{"class":480,"line":565},[478,133193,132738],{"class":495},[478,133195,51817],{"class":714},[478,133197,55144],{"class":495},[478,133199,130795],{"class":714},[478,133201,132747],{"class":770},[478,133203,133204,133206,133208,133210,133212,133214],{"class":480,"line":579},[478,133205,132752],{"class":495},[478,133207,51817],{"class":714},[478,133209,1146],{"class":495},[478,133211,51872],{"class":710},[478,133213,132761],{"class":714},[478,133215,132764],{"class":770},[478,133217,133218,133220,133222,133224,133226,133228],{"class":480,"line":593},[478,133219,132769],{"class":495},[478,133221,51817],{"class":714},[478,133223,1396],{"class":495},[478,133225,51872],{"class":710},[478,133227,132778],{"class":714},[478,133229,132781],{"class":770},[478,133231,133232],{"class":480,"line":1769},[478,133233,2133],{"class":714},[52,133235],{"style":126788,"src":133236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133238,133239],{},"(5)粘性定位",[1702,133241,133242,133245],{},[32,133243,133244],{},"粘性定位可以被认为是相对定位和固定定位的混合",[32,133246,5747],{},[469,133248,133249],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},[475,133250,133251,133257,133269,133283,133297],{"__ignoreMap":54},[478,133252,133253,133255],{"class":480,"line":481},[478,133254,130780],{"class":484},[478,133256,16137],{"class":714},[478,133258,133259,133261,133263,133265,133267],{"class":480,"line":565},[478,133260,132738],{"class":495},[478,133262,51817],{"class":714},[478,133264,55144],{"class":495},[478,133266,130795],{"class":714},[478,133268,132747],{"class":770},[478,133270,133271,133273,133275,133277,133279,133281],{"class":480,"line":579},[478,133272,132752],{"class":495},[478,133274,51817],{"class":714},[478,133276,1146],{"class":495},[478,133278,51872],{"class":710},[478,133280,132761],{"class":714},[478,133282,132764],{"class":770},[478,133284,133285,133287,133289,133291,133293,133295],{"class":480,"line":593},[478,133286,132769],{"class":495},[478,133288,51817],{"class":714},[478,133290,1396],{"class":495},[478,133292,51872],{"class":710},[478,133294,132778],{"class":714},[478,133296,132781],{"class":770},[478,133298,133299],{"class":480,"line":1769},[478,133300,2133],{"class":714},[1702,133302,133303],{},[32,133304,133305,133306,133308,133309,133311,133312,133314,133315,133318,133319,133321],{},"粘性定位的特点：",[54096,133307],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54096,133310],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54096,133313],{},"  ③必须添加 top 、left、right、bottom ",[45,133316,133317],{},"其中一个"," 才有效",[54096,133320],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[469,133323,133324],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},[475,133325,133326,133332,133344,133358,133372],{"__ignoreMap":54},[478,133327,133328,133330],{"class":480,"line":481},[478,133329,130780],{"class":484},[478,133331,16137],{"class":714},[478,133333,133334,133336,133338,133340,133342],{"class":480,"line":565},[478,133335,132738],{"class":495},[478,133337,51817],{"class":714},[478,133339,55144],{"class":495},[478,133341,130795],{"class":714},[478,133343,132747],{"class":770},[478,133345,133346,133348,133350,133352,133354,133356],{"class":480,"line":579},[478,133347,132752],{"class":495},[478,133349,51817],{"class":714},[478,133351,1146],{"class":495},[478,133353,51872],{"class":710},[478,133355,132761],{"class":714},[478,133357,132764],{"class":770},[478,133359,133360,133362,133364,133366,133368,133370],{"class":480,"line":593},[478,133361,132769],{"class":495},[478,133363,51817],{"class":714},[478,133365,1396],{"class":495},[478,133367,51872],{"class":710},[478,133369,132778],{"class":714},[478,133371,132781],{"class":770},[478,133373,133374],{"class":480,"line":1769},[478,133375,2133],{"class":714},[52,133377],{"style":126788,"src":133378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133380,133381],{},"(6)总结",[371,133383,133384,133399],{},[374,133385,133386],{},[377,133387,133388,133390,133393,133396],{},[380,133389,132722],{"align":382},[380,133391,133392],{"align":382},"是否脱标",[380,133394,133395],{"align":382},"移动位置",[380,133397,133398],{"align":382},"是否常用",[388,133400,133401,133414,133428,133442,133455],{},[377,133402,133403,133406,133408,133411],{},[393,133404,133405],{"align":382},"Static 静态定位",[393,133407,105058],{"align":382},[393,133409,133410],{"align":382},"不能使用边偏移",[393,133412,133413],{"align":382},"很少",[377,133415,133416,133419,133422,133425],{},[393,133417,133418],{"align":382},"Relative 相对定位",[393,133420,133421],{"align":382},"否(占有位置)",[393,133423,133424],{"align":382},"相对于自身位置移动",[393,133426,133427],{"align":382},"基本单独使用",[377,133429,133430,133433,133436,133439],{},[393,133431,133432],{"align":382},"Absolute 绝对定位",[393,133434,133435],{"align":382},"是(不占有位置)",[393,133437,133438],{"align":382},"带有定位的父级",[393,133440,133441],{"align":382},"要和定位父级元素搭配使用",[377,133443,133444,133447,133449,133452],{},[393,133445,133446],{"align":382},"Fixed 固定定位",[393,133448,133435],{"align":382},[393,133450,133451],{"align":382},"浏览器可视区",[393,133453,133454],{"align":382},"单独使用,不需要父级",[377,133456,133457,133460,133462,133464],{},[393,133458,133459],{"align":382},"Sticky 粘性定位",[393,133461,133421],{"align":382},[393,133463,133451],{"align":382},[393,133465,133466],{"align":382},"当前阶段少",[29,133468,133469],{"start":565},[32,133470,133471,133474],{},[45,133472,133473],{},"边偏移"," 则决定了该元素的最终位置",[371,133476,133477,133488],{},[374,133478,133479],{},[377,133480,133481,133484,133486],{},[380,133482,133483],{"align":382},"边偏移属性",[380,133485,27872],{"align":382},[380,133487,27869],{"align":382},[388,133489,133490,133501,133512,133522],{},[377,133491,133492,133495,133498],{},[393,133493,133494],{"align":382},"top",[393,133496,133497],{"align":382},"top: 80px;",[393,133499,133500],{"align":382},"顶端偏移量，定义元素相对于父元素上边线的距离",[377,133502,133503,133506,133509],{},[393,133504,133505],{"align":382},"bottom",[393,133507,133508],{"align":382},"bottom: 80px ;",[393,133510,133511],{"align":382},"底部偏移量，定义元素相对于其父元素下边线的距离",[377,133513,133514,133516,133519],{},[393,133515,382],{"align":382},[393,133517,133518],{"align":382},"left: 80px ;",[393,133520,133521],{"align":382},"左侧偏移量，定义元素相对于其父元素左边线的距离",[377,133523,133524,133526,133529],{},[393,133525,72902],{"align":382},[393,133527,133528],{"align":382},"right: 80px ;",[393,133530,133531],{"align":382},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1702,133533,133534],{},[32,133535,9591,133536,133538,133539,133541,133542,133544,133545,133548,133549,133551,133552,133554],{},[54096,133537],{},"  ① ",[45,133540,133473],{}," 需要和 ",[45,133543,132722],{}," 联合使用， ",[45,133546,133547],{},"单独使用无效"," ；",[54096,133550],{},"  ②top和bottom不要同时使用",[54096,133553],{},"  ③left和right不要同时使用",[22563,133556,133558],{"id":133557},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133560,133561],{},"子级是绝对定位的话，父级要用相对定位",[1702,133563,133564,133567,133570,133573],{},[32,133565,133566],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[32,133568,133569],{},"父盒子需要加定位限制子盒子在父盒子内显示",[32,133571,133572],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[32,133574,133575,133576,133579],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[45,133577,133578],{},"子绝父绝"," 也会遇到",[22563,133581,133583],{"id":133582},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1702,133585,133586,133601],{},[32,133587,133588,133589,133592,133593,133596,133597,133600],{},"在使用 ",[45,133590,133591],{},"定位"," 布局时，可能会 ",[45,133594,133595],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[45,133598,133599],{},"z-index"," 来控制盒子的前后次序 (z轴)",[32,133602,5747],{},[469,133604,133605],{"className":126932,"code":132725,"language":126934,"meta":54,"style":54},[475,133606,133607,133613,133625,133639,133653],{"__ignoreMap":54},[478,133608,133609,133611],{"class":480,"line":481},[478,133610,130780],{"class":484},[478,133612,16137],{"class":714},[478,133614,133615,133617,133619,133621,133623],{"class":480,"line":565},[478,133616,132738],{"class":495},[478,133618,51817],{"class":714},[478,133620,55144],{"class":495},[478,133622,130795],{"class":714},[478,133624,132747],{"class":770},[478,133626,133627,133629,133631,133633,133635,133637],{"class":480,"line":579},[478,133628,132752],{"class":495},[478,133630,51817],{"class":714},[478,133632,1146],{"class":495},[478,133634,51872],{"class":710},[478,133636,132761],{"class":714},[478,133638,132764],{"class":770},[478,133640,133641,133643,133645,133647,133649,133651],{"class":480,"line":593},[478,133642,132769],{"class":495},[478,133644,51817],{"class":714},[478,133646,1396],{"class":495},[478,133648,51872],{"class":710},[478,133650,132778],{"class":714},[478,133652,132781],{"class":770},[478,133654,133655],{"class":480,"line":1769},[478,133656,2133],{"class":714},[1702,133658,133659],{},[32,133660,133661,133662,133538,133664,133666,133667,128095,133670,82919,133673,133675,133676,133678,133679,133682,133683,133548,133686,133688,133689,133692,133694],{},"z-index的特性",[54096,133663],{},[45,133665,127396],{}," ： ",[45,133668,133669],{},"正整数",[45,133671,133672],{},"负整数",[45,133674,895],{}," ，默认值是 0，数值越大，盒子越靠上；",[54096,133677],{},"  ②如果 ",[45,133680,133681],{},"属性值相同"," ，则按照书写顺序， ",[45,133684,133685],{},"后来居上",[54096,133687],{},"  ③数字后面 ",[45,133690,133691],{},"不能加单位",[54096,133693],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22563,133696,133698],{"id":133697},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133700,133701],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133703,133704],{},"方法:",[1702,133706,133707,133717],{},[32,133708,133709,133710,133713,133714],{},"left: 50%; 让 ",[45,133711,133712],{},"盒子的左侧"," 移动到 ",[45,133715,133716],{},"父级元素的水平中心位置",[32,133718,133719,133720,133723,133724],{},"margin-left: -100px; 让盒子 ",[45,133721,133722],{},"向左"," 移动 ",[45,133725,133726],{},"自身宽度的一半",[22563,133728,133730],{"id":133729},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[29,133732,133733,133736],{},[32,133734,133735],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[32,133737,133738],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133740,133741],{},"也就是说绝对定位和固定定位和浮动类似",[29,133743,133744],{"start":579},[32,133745,133746],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1702,133748,133749,133752,133755],{},[32,133750,133751],{},"可以用inline-block 转换为行内块",[32,133753,133754],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[32,133756,133757],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133759,133760],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22563,133762,133764],{"id":133763},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[29,133766,133767,133770,133773,133776],{},[32,133768,133769],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[32,133771,133772],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[32,133774,133775],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[32,133777,133778],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[469,133780,133781],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},[475,133782,133783,133789,133799,133803,133809,133819],{"__ignoreMap":54},[478,133784,133785,133787],{"class":480,"line":481},[478,133786,131405],{"class":484},[478,133788,16137],{"class":714},[478,133790,133791,133793,133795,133797],{"class":480,"line":565},[478,133792,131412],{"class":495},[478,133794,51817],{"class":714},[478,133796,382],{"class":495},[478,133798,1859],{"class":714},[478,133800,133801],{"class":480,"line":579},[478,133802,2133],{"class":714},[478,133804,133805,133807],{"class":480,"line":593},[478,133806,131427],{"class":484},[478,133808,16137],{"class":714},[478,133810,133811,133813,133815,133817],{"class":480,"line":1769},[478,133812,131412],{"class":495},[478,133814,51817],{"class":714},[478,133816,72902],{"class":495},[478,133818,1859],{"class":714},[478,133820,133821],{"class":480,"line":1783},[478,133822,2133],{"class":714},[52,133824],{"style":126788,"src":133825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22563,133827,133829],{"id":133828},"_11138-轮播图","11.1.3.8 轮播图",[52,133831],{"style":126788,"src":133832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[29,133834,133835],{},[32,133836,133837],{},"制作顺序:",[1702,133839,133840,133843,133846,133855],{},[32,133841,133842],{},"大盒子我们类名为： tb-promo 淘宝广告",[32,133844,133845],{},"里面先放一张图片",[32,133847,133848,133849,133851,133852,133854],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54096,133850],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54096,133853],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[32,133856,133857,133858,133860,133861,133863],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54096,133859],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54096,133862],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[29,133865,133866],{"start":565},[32,133867,133868],{},"代码模块",[469,133870,133872],{"className":126932,"code":133871,"language":126934,"meta":54,"style":54},"\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",[475,133873,133874,133879,133886,133896,133906,133916,133920,133925,133932,133942],{"__ignoreMap":54},[478,133875,133876],{"class":480,"line":481},[478,133877,133878],{"class":770},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[478,133880,133881,133884],{"class":480,"line":565},[478,133882,133883],{"class":484},".son",[478,133885,16137],{"class":714},[478,133887,133888,133890,133892,133894],{"class":480,"line":579},[478,133889,132738],{"class":495},[478,133891,51817],{"class":714},[478,133893,55211],{"class":495},[478,133895,1859],{"class":714},[478,133897,133898,133900,133902,133904],{"class":480,"line":593},[478,133899,132752],{"class":495},[478,133901,51817],{"class":714},[478,133903,895],{"class":495},[478,133905,1859],{"class":714},[478,133907,133908,133910,133912,133914],{"class":480,"line":1769},[478,133909,132769],{"class":495},[478,133911,51817],{"class":714},[478,133913,895],{"class":495},[478,133915,1859],{"class":714},[478,133917,133918],{"class":480,"line":1783},[478,133919,2133],{"class":714},[478,133921,133922],{"class":480,"line":1789},[478,133923,133924],{"class":770},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[478,133926,133927,133930],{"class":480,"line":1880},[478,133928,133929],{"class":484},".father",[478,133931,16137],{"class":714},[478,133933,133934,133936,133938,133940],{"class":480,"line":1886},[478,133935,132738],{"class":495},[478,133937,51817],{"class":714},[478,133939,55144],{"class":495},[478,133941,1859],{"class":714},[478,133943,133944],{"class":480,"line":1898},[478,133945,2133],{"class":714},[19,133947,133948],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[129,133950,133952],{"id":133951},"_1114-定位数值的移动","11.1.4 定位数值的移动",[52,133954],{"style":126788,"src":133955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133957,133958],{},"✨ 黄金口诀：",[19,133960,133961],{},"\"TOP正下负上，LEFT正右负左\"",[19,133963,133964],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133966,133967],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133969,133970],{},"✨ 简单记：",[19,133972,133973],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[617,133975,133976],{},"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":54,"searchDepth":565,"depth":565,"links":133978},[133979],{"id":132506,"depth":565,"text":132507,"children":133980},[133981,133982,133983,133984],{"id":132510,"depth":579,"text":132511},{"id":132525,"depth":579,"text":132526},{"id":132693,"depth":579,"text":132694},{"id":133951,"depth":579,"text":133952},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132498,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133991,"title":133992,"body":133993,"description":23942,"extension":638,"meta":135416,"navigation":640,"path":135417,"seo":135418,"stem":135419,"__hash__":135420},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133994,"toc":135395},[133995,133998,134002,134010,134014,134019,134027,134039,134043,134048,134056,134067,134071,134076,134117,134125,134129,134132,134135,134138,134232,134235,134329,134332,134426,134429,134432,134467,134470,134473,134503,134506,134509,134512,134515,134518,134521,134524,134594,134597,134601,134605,134646,134650,134656,134659,134662,134666,134669,134672,134675,134756,134759,134762,134766,134770,134773,134776,134779,134782,134785,134791,134800,134804,134823,134827,134837,134840,134843,134846,134849,134852,134855,134858,134861,134870,134874,134883,134886,134891,134944,134949,135115,135118,135121,135126,135129,135132,135135,135138,135143,135291,135294,135297,135302,135305,135310,135344,135347,135350,135354,135357,135364,135367,135370,135373,135376,135379,135382,135385,135389,135392],[10,133996,133992],{"id":133997},"_12-显示隐藏与图形资源",[14,133999,134001],{"id":134000},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1702,134003,134004,134007],{},[32,134005,134006],{},"目的:让一个元素在页面中消失或者显示出来",[32,134008,134009],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[129,134011,134013],{"id":134012},"_1211-display-显示","12.1.1 display 显示",[29,134015,134016],{},[32,134017,134018],{},"display 设置或检索对象是否及如何显示",[1702,134020,134021,134024],{},[32,134022,134023],{},"display: none;隐藏对象",[32,134025,134026],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[29,134028,134029,134036],{"start":565},[32,134030,134031,134032,134035],{},"特点： display 隐藏元素后， ",[45,134033,134034],{},"不再占"," 有原来的位置",[32,134037,134038],{},"在js中使用非常的广泛",[129,134040,134042],{"id":134041},"_1212-visibility可见性","12.1.2 visibility可见性",[29,134044,134045],{},[32,134046,134047],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1702,134049,134050,134053],{},[32,134051,134052],{},"visibility： visible；元素可见",[32,134054,134055],{},"visibility：hidden；元素隐藏",[29,134057,134058,134061,134064],{"start":565},[32,134059,134060],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[32,134062,134063],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[32,134065,134066],{},"隐藏后继续占有原有位置",[129,134068,134070],{"id":134069},"_1213-overflow溢出","12.1.3 overflow溢出",[1702,134072,134073],{},[32,134074,134075],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[371,134077,134078,134086],{},[374,134079,134080],{},[377,134081,134082,134084],{},[380,134083,127396],{"align":382},[380,134085,27869],{"align":382},[388,134087,134088,134096,134103,134110],{},[377,134089,134090,134093],{},[393,134091,134092],{"align":382},"visible",[393,134094,134095],{"align":382},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[377,134097,134098,134100],{},[393,134099,62094],{"align":382},[393,134101,134102],{"align":382},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[377,134104,134105,134107],{},[393,134106,129352],{"align":382},[393,134108,134109],{"align":382},"不管超出内容否，总是显示滚动条",[377,134111,134112,134114],{},[393,134113,73043],{"align":382},[393,134115,134116],{"align":382},"超出自动显示滚动条，不超出不显示滚动条",[1702,134118,134119,134122],{},[32,134120,134121],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[32,134123,134124],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[129,134126,134128],{"id":134127},"_1214-案例收获","12.1.4 案例收获",[52,134130],{"style":126788,"src":134131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134133,134134],{},"问题：没做出来动态效果，使用hover没实现",[19,134136,134137],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[469,134139,134140],{"className":126932,"code":132364,"language":126934,"meta":54,"style":54},[475,134141,134142,134146,134160,134164,134178,134182,134196,134200,134214,134218],{"__ignoreMap":54},[478,134143,134144],{"class":480,"line":481},[478,134145,132371],{"class":770},[478,134147,134148,134150,134152,134154,134156,134158],{"class":480,"line":565},[478,134149,132376],{"class":484},[478,134151,80187],{"class":714},[478,134153,129292],{"class":495},[478,134155,51817],{"class":714},[478,134157,132385],{"class":495},[478,134159,129862],{"class":714},[478,134161,134162],{"class":480,"line":579},[478,134163,132392],{"class":770},[478,134165,134166,134168,134170,134172,134174,134176],{"class":480,"line":593},[478,134167,132397],{"class":484},[478,134169,80187],{"class":714},[478,134171,129292],{"class":495},[478,134173,51817],{"class":714},[478,134175,55144],{"class":495},[478,134177,129862],{"class":714},[478,134179,134180],{"class":480,"line":1769},[478,134181,132412],{"class":770},[478,134183,134184,134186,134188,134190,134192,134194],{"class":480,"line":1783},[478,134185,132417],{"class":484},[478,134187,80187],{"class":714},[478,134189,129292],{"class":495},[478,134191,51817],{"class":714},[478,134193,55211],{"class":495},[478,134195,129862],{"class":714},[478,134197,134198],{"class":480,"line":1789},[478,134199,132432],{"class":770},[478,134201,134202,134204,134206,134208,134210,134212],{"class":480,"line":1880},[478,134203,132437],{"class":484},[478,134205,80187],{"class":714},[478,134207,129292],{"class":495},[478,134209,51817],{"class":714},[478,134211,86613],{"class":495},[478,134213,129862],{"class":714},[478,134215,134216],{"class":480,"line":1886},[478,134217,132452],{"class":770},[478,134219,134220,134222,134224,134226,134228,134230],{"class":480,"line":1898},[478,134221,132457],{"class":484},[478,134223,80187],{"class":714},[478,134225,129292],{"class":495},[478,134227,51817],{"class":714},[478,134229,132466],{"class":495},[478,134231,129862],{"class":714},[19,134233,134234],{},"完整代码：",[469,134236,134237],{"className":126932,"code":132364,"language":126934,"meta":54,"style":54},[475,134238,134239,134243,134257,134261,134275,134279,134293,134297,134311,134315],{"__ignoreMap":54},[478,134240,134241],{"class":480,"line":481},[478,134242,132371],{"class":770},[478,134244,134245,134247,134249,134251,134253,134255],{"class":480,"line":565},[478,134246,132376],{"class":484},[478,134248,80187],{"class":714},[478,134250,129292],{"class":495},[478,134252,51817],{"class":714},[478,134254,132385],{"class":495},[478,134256,129862],{"class":714},[478,134258,134259],{"class":480,"line":579},[478,134260,132392],{"class":770},[478,134262,134263,134265,134267,134269,134271,134273],{"class":480,"line":593},[478,134264,132397],{"class":484},[478,134266,80187],{"class":714},[478,134268,129292],{"class":495},[478,134270,51817],{"class":714},[478,134272,55144],{"class":495},[478,134274,129862],{"class":714},[478,134276,134277],{"class":480,"line":1769},[478,134278,132412],{"class":770},[478,134280,134281,134283,134285,134287,134289,134291],{"class":480,"line":1783},[478,134282,132417],{"class":484},[478,134284,80187],{"class":714},[478,134286,129292],{"class":495},[478,134288,51817],{"class":714},[478,134290,55211],{"class":495},[478,134292,129862],{"class":714},[478,134294,134295],{"class":480,"line":1789},[478,134296,132432],{"class":770},[478,134298,134299,134301,134303,134305,134307,134309],{"class":480,"line":1880},[478,134300,132437],{"class":484},[478,134302,80187],{"class":714},[478,134304,129292],{"class":495},[478,134306,51817],{"class":714},[478,134308,86613],{"class":495},[478,134310,129862],{"class":714},[478,134312,134313],{"class":480,"line":1886},[478,134314,132452],{"class":770},[478,134316,134317,134319,134321,134323,134325,134327],{"class":480,"line":1898},[478,134318,132457],{"class":484},[478,134320,80187],{"class":714},[478,134322,129292],{"class":495},[478,134324,51817],{"class":714},[478,134326,132466],{"class":495},[478,134328,129862],{"class":714},[19,134330,134331],{},"分布思路重点详解：",[469,134333,134334],{"className":126932,"code":132364,"language":126934,"meta":54,"style":54},[475,134335,134336,134340,134354,134358,134372,134376,134390,134394,134408,134412],{"__ignoreMap":54},[478,134337,134338],{"class":480,"line":481},[478,134339,132371],{"class":770},[478,134341,134342,134344,134346,134348,134350,134352],{"class":480,"line":565},[478,134343,132376],{"class":484},[478,134345,80187],{"class":714},[478,134347,129292],{"class":495},[478,134349,51817],{"class":714},[478,134351,132385],{"class":495},[478,134353,129862],{"class":714},[478,134355,134356],{"class":480,"line":579},[478,134357,132392],{"class":770},[478,134359,134360,134362,134364,134366,134368,134370],{"class":480,"line":593},[478,134361,132397],{"class":484},[478,134363,80187],{"class":714},[478,134365,129292],{"class":495},[478,134367,51817],{"class":714},[478,134369,55144],{"class":495},[478,134371,129862],{"class":714},[478,134373,134374],{"class":480,"line":1769},[478,134375,132412],{"class":770},[478,134377,134378,134380,134382,134384,134386,134388],{"class":480,"line":1783},[478,134379,132417],{"class":484},[478,134381,80187],{"class":714},[478,134383,129292],{"class":495},[478,134385,51817],{"class":714},[478,134387,55211],{"class":495},[478,134389,129862],{"class":714},[478,134391,134392],{"class":480,"line":1789},[478,134393,132432],{"class":770},[478,134395,134396,134398,134400,134402,134404,134406],{"class":480,"line":1880},[478,134397,132437],{"class":484},[478,134399,80187],{"class":714},[478,134401,129292],{"class":495},[478,134403,51817],{"class":714},[478,134405,86613],{"class":495},[478,134407,129862],{"class":714},[478,134409,134410],{"class":480,"line":1886},[478,134411,132452],{"class":770},[478,134413,134414,134416,134418,134420,134422,134424],{"class":480,"line":1898},[478,134415,132457],{"class":484},[478,134417,80187],{"class":714},[478,134419,129292],{"class":495},[478,134421,51817],{"class":714},[478,134423,132466],{"class":495},[478,134425,129862],{"class":714},[52,134427],{"style":126788,"src":134428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134430,134431],{},"图片太大，盒子太小，此时需要修改图片的大小",[469,134433,134435],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[475,134436,134437],{"__ignoreMap":54},[478,134438,134439,134441,134443,134445,134447,134450,134452,134454,134457,134460,134462,134465],{"class":480,"line":481},[478,134440,1605],{"class":714},[478,134442,52],{"class":51680},[478,134444,55619],{"class":484},[478,134446,759],{"class":714},[478,134448,134449],{"class":488},"\"images\u002Fpic.jpg\"",[478,134451,55627],{"class":484},[478,134453,759],{"class":714},[478,134455,134456],{"class":488},"\"描述文字\"",[478,134458,134459],{"class":484}," title",[478,134461,759],{"class":714},[478,134463,134464],{"class":488},"\"悬停提示\"",[478,134466,51687],{"class":714},[52,134468],{"style":126788,"src":134469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134471,134472],{},"制造遮罩层",[469,134474,134475],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,134476,134477],{"__ignoreMap":54},[478,134478,134479,134481,134483,134485,134487,134489,134491,134493,134495,134497,134499,134501],{"class":480,"line":481},[478,134480,1605],{"class":714},[478,134482,52],{"class":51680},[478,134484,55619],{"class":484},[478,134486,759],{"class":714},[478,134488,134449],{"class":488},[478,134490,55627],{"class":484},[478,134492,759],{"class":714},[478,134494,134456],{"class":488},[478,134496,134459],{"class":484},[478,134498,759],{"class":714},[478,134500,134464],{"class":488},[478,134502,51687],{"class":714},[19,134504,134505],{},"此时是这样的为标准流",[52,134507],{"style":126788,"src":134508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134510,134511],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134513,134514],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134516,134517],{},"让他在中间，用center(background-position)",[19,134519,134520],{},"将需要变的尽可能放到一个盒子中",[19,134522,134523],{},"放大盒子上内部盒子发生变化",[469,134525,134527],{"className":126932,"code":134526,"language":126934,"meta":54,"style":54},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[475,134528,134529,134535,134545,134549,134556,134566,134578,134590],{"__ignoreMap":54},[478,134530,134531,134533],{"class":480,"line":481},[478,134532,127999],{"class":484},[478,134534,16137],{"class":714},[478,134536,134537,134539,134541,134543],{"class":480,"line":565},[478,134538,132738],{"class":495},[478,134540,51817],{"class":714},[478,134542,55144],{"class":495},[478,134544,1859],{"class":714},[478,134546,134547],{"class":480,"line":579},[478,134548,2133],{"class":714},[478,134550,134551,134554],{"class":480,"line":593},[478,134552,134553],{"class":484},".child",[478,134555,16137],{"class":714},[478,134557,134558,134560,134562,134564],{"class":480,"line":1769},[478,134559,132738],{"class":495},[478,134561,51817],{"class":714},[478,134563,55211],{"class":495},[478,134565,1859],{"class":714},[478,134567,134568,134570,134572,134574,134576],{"class":480,"line":1783},[478,134569,132752],{"class":495},[478,134571,51817],{"class":714},[478,134573,1354],{"class":495},[478,134575,1029],{"class":710},[478,134577,1859],{"class":714},[478,134579,134580,134582,134584,134586,134588],{"class":480,"line":1789},[478,134581,132769],{"class":495},[478,134583,51817],{"class":714},[478,134585,1354],{"class":495},[478,134587,1029],{"class":710},[478,134589,1859],{"class":714},[478,134591,134592],{"class":480,"line":1880},[478,134593,2133],{"class":714},[19,134595,134596],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134598,134600],{"id":134599},"_122-精灵图","12.2 精灵图",[129,134602,134604],{"id":134603},"_1221-理解","12.2.1 理解",[29,134606,134607,134625],{},[32,134608,134609,134610,132838,134613,134616,134617,134620,134621,134624],{},"目的： ",[45,134611,134612],{},"为了有效地减少服务器接收和发送请求的次数",[45,134614,134615],{},"提高"," 页面的 ",[45,134618,134619],{},"加载速度"," ，出现了 ",[45,134622,134623],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[32,134626,134627,134628,134630,134631,134633,134634,134636,134637,134639,134640,134642,134643,134645],{},"使用精灵图核心：",[54096,134629],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54096,134632],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54096,134635],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54096,134638],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54096,134641],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54096,134644],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[129,134647,134649],{"id":134648},"_1222-扒图","12.2.2 扒图",[469,134651,134654],{"className":134652,"code":134653,"language":5753},[5751],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[475,134655,134653],{"__ignoreMap":54},[52,134657],{"style":126788,"src":134658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[52,134660],{"style":126788,"src":134661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[129,134663,134665],{"id":134664},"_1223-精灵图的实现","12.2.3 精灵图的实现",[52,134667],{"style":126788,"src":134668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134670,134671],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[52,134673],{"style":126788,"src":134674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[469,134676,134678],{"className":126932,"code":134677,"language":126934,"meta":54,"style":54},"\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",[475,134679,134680,134685,134692,134704,134716,134735,134752],{"__ignoreMap":54},[478,134681,134682],{"class":480,"line":481},[478,134683,134684],{"class":770},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[478,134686,134687,134690],{"class":480,"line":565},[478,134688,134689],{"class":484},".icon",[478,134691,16137],{"class":714},[478,134693,134694,134696,134698,134700,134702],{"class":480,"line":579},[478,134695,70948],{"class":495},[478,134697,51817],{"class":714},[478,134699,1396],{"class":495},[478,134701,51872],{"class":710},[478,134703,1859],{"class":714},[478,134705,134706,134708,134710,134712,134714],{"class":480,"line":593},[478,134707,71168],{"class":495},[478,134709,51817],{"class":714},[478,134711,1396],{"class":495},[478,134713,51872],{"class":710},[478,134715,1859],{"class":714},[478,134717,134718,134720,134722,134724,134726,134729,134731,134733],{"class":480,"line":1769},[478,134719,70991],{"class":495},[478,134721,51817],{"class":714},[478,134723,62106],{"class":495},[478,134725,263],{"class":714},[478,134727,134728],{"class":5782},"sprites.png",[478,134730,14280],{"class":714},[478,134732,62116],{"class":495},[478,134734,1859],{"class":714},[478,134736,134737,134739,134741,134743,134745,134748,134750],{"class":480,"line":1783},[478,134738,129192],{"class":495},[478,134740,51817],{"class":714},[478,134742,52143],{"class":495},[478,134744,51872],{"class":710},[478,134746,134747],{"class":495}," -20",[478,134749,51872],{"class":710},[478,134751,1859],{"class":714},[478,134753,134754],{"class":480,"line":1789},[478,134755,2133],{"class":714},[52,134757],{"style":126788,"src":134758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134760,134761],{},"在前端中坐标轴的正方向是右和下",[14,134763,134765],{"id":134764},"_123-字体图标","12.3 字体图标",[129,134767,134769],{"id":134768},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134771,134772],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134774,134775],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134777,134778],{},"1.图片文件还是比较大的。",[19,134780,134781],{},"2.图片本身放大和缩小会失真。",[19,134783,134784],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134786,134787,134788,26120],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[45,134789,134790],{},"字体图标 iconfont",[19,134792,134793,134796,134797,28765],{},[45,134794,134795],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[45,134798,134799],{},"展示的是图标，本质属于字体",[129,134801,134803],{"id":134802},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1702,134805,134806,134811,134814,134817,134820],{},[32,134807,134808,134810],{},[45,134809,26256],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[32,134812,134813],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[32,134815,134816],{},"兼容性：几乎支持所有的浏览器，请放心使用",[32,134818,134819],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[32,134821,134822],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[129,134824,134826],{"id":134825},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1702,134828,134829],{},[32,134830,134831,134832],{},"icomoon字体库：",[518,134833,134836],{"href":134834,"rel":134835},"http:\u002F\u002Ficomoon.io\u002F",[522],"http:\u002F\u002Ficomoon.io",[19,134838,134839],{},"进去之后点icomoon app",[52,134841],{"style":126788,"src":134842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134844,134845],{},"可以对其编辑：",[52,134847],{"style":126788,"src":134848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134850,134851],{},"生成字体：",[52,134853],{"style":126788,"src":134854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134856,134857],{},"下载：",[52,134859],{"style":126788,"src":134860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1702,134862,134863],{},[32,134864,134865,134866],{},"阿里iconfont字体库： ",[518,134867,134868],{"href":134868,"rel":134869},"http:\u002F\u002Fwww.iconfont.cn\u002F",[522],[129,134871,134873],{"id":134872},"_1234-字体图标的引入","12.3.4 字体图标的引入",[29,134875,134876],{},[32,134877,134878,134879,134882],{},"把下载包里面的 ",[45,134880,134881],{},"fonts"," 文件夹放入页面根目录下",[52,134884],{"style":126788,"src":134885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[29,134887,134888],{"start":565},[32,134889,134890],{},"字体文件格式",[371,134892,134893,134902],{},[374,134894,134895],{},[377,134896,134897,134900],{},[380,134898,134899],{"align":382},"格式",[380,134901,386],{"align":382},[388,134903,134904,134914,134924,134934],{},[377,134905,134906,134911],{},[393,134907,134908],{"align":382},[45,134909,134910],{},".ttf",[393,134912,134913],{"align":382},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[377,134915,134916,134921],{},[393,134917,134918],{"align":382},[45,134919,134920],{},".woff",[393,134922,134923],{"align":382},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[377,134925,134926,134931],{},[393,134927,134928],{"align":382},[45,134929,134930],{},".eot",[393,134932,134933],{"align":382},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[377,134935,134936,134941],{},[393,134937,134938],{"align":382},[45,134939,134940],{},"svg",[393,134942,134943],{"align":382},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[29,134945,134946],{"start":579},[32,134947,134948],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[469,134950,134952],{"className":126932,"code":134951,"language":126934,"meta":54,"style":54},"\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",[475,134953,134954,134959,134966,134978,134994,135019,135040,135060,135080,135084,135090,135100,135111],{"__ignoreMap":54},[478,134955,134956],{"class":480,"line":481},[478,134957,134958],{"class":770},"\u002F* 引入字体图标 *\u002F\n",[478,134960,134961,134964],{"class":480,"line":565},[478,134962,134963],{"class":710},"@font-face",[478,134965,16137],{"class":714},[478,134967,134968,134971,134973,134976],{"class":480,"line":579},[478,134969,134970],{"class":495},"  font-family",[478,134972,51817],{"class":714},[478,134974,134975],{"class":488},"'icomoon'",[478,134977,1859],{"class":714},[478,134979,134980,134983,134985,134987,134989,134992],{"class":480,"line":593},[478,134981,134982],{"class":495},"  src",[478,134984,51817],{"class":714},[478,134986,62106],{"class":495},[478,134988,263],{"class":714},[478,134990,134991],{"class":488},"'fonts\u002Ficomoon.eot'",[478,134993,3285],{"class":714},[478,134995,134996,134998,135000,135002,135004,135007,135009,135012,135014,135017],{"class":480,"line":1769},[478,134997,134982],{"class":495},[478,134999,51817],{"class":714},[478,135001,62106],{"class":495},[478,135003,263],{"class":714},[478,135005,135006],{"class":488},"'fonts\u002Ficomoon.eot?#iefix'",[478,135008,14280],{"class":714},[478,135010,135011],{"class":495},"format",[478,135013,263],{"class":714},[478,135015,135016],{"class":488},"'embedded-opentype'",[478,135018,38427],{"class":714},[478,135020,135021,135024,135026,135029,135031,135033,135035,135038],{"class":480,"line":1783},[478,135022,135023],{"class":495},"       url",[478,135025,263],{"class":714},[478,135027,135028],{"class":488},"'fonts\u002Ficomoon.woff'",[478,135030,14280],{"class":714},[478,135032,135011],{"class":495},[478,135034,263],{"class":714},[478,135036,135037],{"class":488},"'woff'",[478,135039,38427],{"class":714},[478,135041,135042,135044,135046,135049,135051,135053,135055,135058],{"class":480,"line":1789},[478,135043,135023],{"class":495},[478,135045,263],{"class":714},[478,135047,135048],{"class":488},"'fonts\u002Ficomoon.ttf'",[478,135050,14280],{"class":714},[478,135052,135011],{"class":495},[478,135054,263],{"class":714},[478,135056,135057],{"class":488},"'truetype'",[478,135059,38427],{"class":714},[478,135061,135062,135064,135066,135069,135071,135073,135075,135078],{"class":480,"line":1880},[478,135063,135023],{"class":495},[478,135065,263],{"class":714},[478,135067,135068],{"class":488},"'fonts\u002Ficomoon.svg#icomoon'",[478,135070,14280],{"class":714},[478,135072,135011],{"class":495},[478,135074,263],{"class":714},[478,135076,135077],{"class":488},"'svg'",[478,135079,3285],{"class":714},[478,135081,135082],{"class":480,"line":1886},[478,135083,2133],{"class":714},[478,135085,135086,135088],{"class":480,"line":1898},[478,135087,134689],{"class":484},[478,135089,16137],{"class":714},[478,135091,135092,135094,135096,135098],{"class":480,"line":2180},[478,135093,134970],{"class":495},[478,135095,51817],{"class":714},[478,135097,134975],{"class":488},[478,135099,1859],{"class":714},[478,135101,135102,135105,135107,135109],{"class":480,"line":2185},[478,135103,135104],{"class":495},"  font-style",[478,135106,51817],{"class":714},[478,135108,64221],{"class":495},[478,135110,1859],{"class":714},[478,135112,135113],{"class":480,"line":2191},[478,135114,2133],{"class":714},[19,135116,135117],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[52,135119],{"style":126788,"src":135120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[29,135122,135123],{"start":593},[32,135124,135125],{},"添加字体",[52,135127],{"style":126788,"src":135128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135130,135131],{},"复制：",[52,135133],{"style":126788,"src":135134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135136,135137],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[29,135139,135140],{"start":1769},[32,135141,135142],{},"代码展示：",[469,135144,135145],{"className":126932,"code":134951,"language":126934,"meta":54,"style":54},[475,135146,135147,135151,135157,135167,135181,135203,135221,135239,135257,135261,135267,135277,135287],{"__ignoreMap":54},[478,135148,135149],{"class":480,"line":481},[478,135150,134958],{"class":770},[478,135152,135153,135155],{"class":480,"line":565},[478,135154,134963],{"class":710},[478,135156,16137],{"class":714},[478,135158,135159,135161,135163,135165],{"class":480,"line":579},[478,135160,134970],{"class":495},[478,135162,51817],{"class":714},[478,135164,134975],{"class":488},[478,135166,1859],{"class":714},[478,135168,135169,135171,135173,135175,135177,135179],{"class":480,"line":593},[478,135170,134982],{"class":495},[478,135172,51817],{"class":714},[478,135174,62106],{"class":495},[478,135176,263],{"class":714},[478,135178,134991],{"class":488},[478,135180,3285],{"class":714},[478,135182,135183,135185,135187,135189,135191,135193,135195,135197,135199,135201],{"class":480,"line":1769},[478,135184,134982],{"class":495},[478,135186,51817],{"class":714},[478,135188,62106],{"class":495},[478,135190,263],{"class":714},[478,135192,135006],{"class":488},[478,135194,14280],{"class":714},[478,135196,135011],{"class":495},[478,135198,263],{"class":714},[478,135200,135016],{"class":488},[478,135202,38427],{"class":714},[478,135204,135205,135207,135209,135211,135213,135215,135217,135219],{"class":480,"line":1783},[478,135206,135023],{"class":495},[478,135208,263],{"class":714},[478,135210,135028],{"class":488},[478,135212,14280],{"class":714},[478,135214,135011],{"class":495},[478,135216,263],{"class":714},[478,135218,135037],{"class":488},[478,135220,38427],{"class":714},[478,135222,135223,135225,135227,135229,135231,135233,135235,135237],{"class":480,"line":1789},[478,135224,135023],{"class":495},[478,135226,263],{"class":714},[478,135228,135048],{"class":488},[478,135230,14280],{"class":714},[478,135232,135011],{"class":495},[478,135234,263],{"class":714},[478,135236,135057],{"class":488},[478,135238,38427],{"class":714},[478,135240,135241,135243,135245,135247,135249,135251,135253,135255],{"class":480,"line":1880},[478,135242,135023],{"class":495},[478,135244,263],{"class":714},[478,135246,135068],{"class":488},[478,135248,14280],{"class":714},[478,135250,135011],{"class":495},[478,135252,263],{"class":714},[478,135254,135077],{"class":488},[478,135256,3285],{"class":714},[478,135258,135259],{"class":480,"line":1886},[478,135260,2133],{"class":714},[478,135262,135263,135265],{"class":480,"line":1898},[478,135264,134689],{"class":484},[478,135266,16137],{"class":714},[478,135268,135269,135271,135273,135275],{"class":480,"line":2180},[478,135270,134970],{"class":495},[478,135272,51817],{"class":714},[478,135274,134975],{"class":488},[478,135276,1859],{"class":714},[478,135278,135279,135281,135283,135285],{"class":480,"line":2185},[478,135280,135104],{"class":495},[478,135282,51817],{"class":714},[478,135284,64221],{"class":495},[478,135286,1859],{"class":714},[478,135288,135289],{"class":480,"line":2191},[478,135290,2133],{"class":714},[52,135292],{"style":126788,"src":135293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135295,135296],{},"更加细节展示：",[29,135298,135299],{},[32,135300,135301],{},"html 标签内添加小图标",[52,135303],{"style":126788,"src":135304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[29,135306,135307],{"start":565},[32,135308,135309],{},"给标签定义字体",[469,135311,135312],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,135313,135314,135318,135332,135336],{"__ignoreMap":54},[478,135315,135316],{"class":480,"line":481},[478,135317,131043],{"class":770},[478,135319,135320,135322,135324,135326,135328,135330],{"class":480,"line":565},[478,135321,1605],{"class":714},[478,135323,51991],{"class":51680},[478,135325,53866],{"class":484},[478,135327,759],{"class":714},[478,135329,131056],{"class":488},[478,135331,51687],{"class":714},[478,135333,135334],{"class":480,"line":579},[478,135335,131063],{"class":714},[478,135337,135338,135340,135342],{"class":480,"line":593},[478,135339,52165],{"class":714},[478,135341,51991],{"class":51680},[478,135343,51687],{"class":714},[19,135345,135346],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[52,135348],{"style":126788,"src":135349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[129,135351,135353],{"id":135352},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135355,135356],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135358,135359,135360,135363],{},"把压缩包里面的 ",[45,135361,135362],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135365,135366],{},"打开网站，点下方：",[52,135368],{"style":126788,"src":135369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[52,135371],{"style":126788,"src":135372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[52,135374],{"style":126788,"src":135375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135377,135378],{},"点yes重新加载",[19,135380,135381],{},"然后重复之前的操作就可以实现了",[19,135383,135384],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[129,135386,135388],{"id":135387},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[52,135390],{"style":126788,"src":135391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[617,135393,135394],{},"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":54,"searchDepth":565,"depth":565,"links":135396},[135397,135403,135408],{"id":134000,"depth":565,"text":134001,"children":135398},[135399,135400,135401,135402],{"id":134012,"depth":579,"text":134013},{"id":134041,"depth":579,"text":134042},{"id":134069,"depth":579,"text":134070},{"id":134127,"depth":579,"text":134128},{"id":134599,"depth":565,"text":134600,"children":135404},[135405,135406,135407],{"id":134603,"depth":579,"text":134604},{"id":134648,"depth":579,"text":134649},{"id":134664,"depth":579,"text":134665},{"id":134764,"depth":565,"text":134765,"children":135409},[135410,135411,135412,135413,135414,135415],{"id":134768,"depth":579,"text":134769},{"id":134802,"depth":579,"text":134803},{"id":134825,"depth":579,"text":134826},{"id":134872,"depth":579,"text":134873},{"id":135352,"depth":579,"text":135353},{"id":135387,"depth":579,"text":135388},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133992,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135422,"title":135423,"body":135424,"description":23942,"extension":638,"meta":136651,"navigation":640,"path":136652,"seo":136653,"stem":136654,"__hash__":136655},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135425,"toc":136632},[135426,135429,135433,135436,135450,135518,135548,135551,135555,135559,135661,135708,135712,135715,135718,135752,135755,135758,135761,135764,135767,135770,135773,135775,135778,135781,135784,135787,135790,135793,135796,135824,135827,135831,135834,135841,135844,135847,135873,135876,135880,135883,135886,135893,135897,135900,135902,135934,135937,135940,135952,135958,135961,135964,135967,135969,135973,135976,135979,135982,136027,136031,136033,136036,136043,136085,136088,136092,136097,136111,136115,136118,136121,136124,136127,136130,136164,136167,136170,136224,136227,136230,136233,136236,136288,136291,136294,136343,136347,136349,136352,136355,136358,136361,136364,136422,136425,136431,136434,136437,136469,136472,136476,136480,136483,136515,136519,136522,136566,136570,136573,136576,136579,136582,136585,136588,136591,136593,136596,136598,136601,136604,136607,136610,136615,136618,136620,136623,136626,136629],[10,135427,135423],{"id":135428},"_13-界面样式与布局技巧",[14,135430,135432],{"id":135431},"_131-css三角","13.1 css三角",[19,135434,135435],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1702,135437,135438,135441,135444,135447],{},[32,135439,135440],{},"用css 边框可以模拟三角效果",[32,135442,135443],{},"宽度高度为0",[32,135445,135446],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[32,135448,135449],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[469,135451,135453],{"className":126932,"code":135452,"language":126934,"meta":54,"style":54},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[475,135454,135455,135460,135467,135477,135487,135503,135514],{"__ignoreMap":54},[478,135456,135457],{"class":480,"line":481},[478,135458,135459],{"class":770},"\u002F* CSS 实现三角形 *\u002F\n",[478,135461,135462,135465],{"class":480,"line":565},[478,135463,135464],{"class":484},".triangle",[478,135466,16137],{"class":714},[478,135468,135469,135471,135473,135475],{"class":480,"line":579},[478,135470,70948],{"class":495},[478,135472,51817],{"class":714},[478,135474,895],{"class":495},[478,135476,1859],{"class":714},[478,135478,135479,135481,135483,135485],{"class":480,"line":593},[478,135480,71168],{"class":495},[478,135482,51817],{"class":714},[478,135484,895],{"class":495},[478,135486,1859],{"class":714},[478,135488,135489,135491,135493,135495,135497,135499,135501],{"class":480,"line":1769},[478,135490,71276],{"class":495},[478,135492,51817],{"class":714},[478,135494,1146],{"class":495},[478,135496,51872],{"class":710},[478,135498,51901],{"class":495},[478,135500,64371],{"class":495},[478,135502,1859],{"class":714},[478,135504,135505,135508,135510,135512],{"class":480,"line":1783},[478,135506,135507],{"class":495},"  border-bottom-color",[478,135509,51817],{"class":714},[478,135511,62749],{"class":495},[478,135513,1859],{"class":714},[478,135515,135516],{"class":480,"line":1789},[478,135517,2133],{"class":714},[469,135519,135520],{"className":126932,"code":131089,"language":126934,"meta":54,"style":54},[475,135521,135522,135528,135544],{"__ignoreMap":54},[478,135523,135524,135526],{"class":480,"line":481},[478,135525,51991],{"class":51680},[478,135527,16137],{"class":714},[478,135529,135530,135532,135534,135536,135538,135540,135542],{"class":480,"line":565},[478,135531,71276],{"class":495},[478,135533,51817],{"class":714},[478,135535,193],{"class":495},[478,135537,51872],{"class":710},[478,135539,51901],{"class":495},[478,135541,130324],{"class":495},[478,135543,1859],{"class":714},[478,135545,135546],{"class":480,"line":579},[478,135547,2133],{"class":714},[52,135549],{"style":126788,"src":135550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135552,135554],{"id":135553},"_132-css用户界面样式","13.2 css用户界面样式",[129,135556,135558],{"id":135557},"_1321-鼠标样式","13.2.1 鼠标样式",[469,135560,135562],{"className":126932,"code":135561,"language":126934,"meta":54,"style":54},"\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",[475,135563,135564,135569,135588,135606,135625,135642],{"__ignoreMap":54},[478,135565,135566],{"class":480,"line":481},[478,135567,135568],{"class":770},"\u002F* 鼠标样式 *\u002F\n",[478,135570,135571,135573,135575,135578,135580,135582,135585],{"class":480,"line":565},[478,135572,51991],{"class":51680},[478,135574,80187],{"class":714},[478,135576,135577],{"class":495},"cursor",[478,135579,51817],{"class":714},[478,135581,62410],{"class":495},[478,135583,135584],{"class":714},"; }   ",[478,135586,135587],{"class":770},"\u002F* 手型 *\u002F\n",[478,135589,135590,135592,135594,135596,135598,135601,135603],{"class":480,"line":579},[478,135591,51991],{"class":51680},[478,135593,80187],{"class":714},[478,135595,135577],{"class":495},[478,135597,51817],{"class":714},[478,135599,135600],{"class":495},"default",[478,135602,135584],{"class":714},[478,135604,135605],{"class":770},"\u002F* 默认 *\u002F\n",[478,135607,135608,135610,135612,135614,135616,135619,135622],{"class":480,"line":593},[478,135609,51991],{"class":51680},[478,135611,80187],{"class":714},[478,135613,135577],{"class":495},[478,135615,51817],{"class":714},[478,135617,135618],{"class":495},"move",[478,135620,135621],{"class":714},"; }      ",[478,135623,135624],{"class":770},"\u002F* 移动 *\u002F\n",[478,135626,135627,135629,135631,135633,135635,135637,135639],{"class":480,"line":1769},[478,135628,51991],{"class":51680},[478,135630,80187],{"class":714},[478,135632,135577],{"class":495},[478,135634,51817],{"class":714},[478,135636,5753],{"class":495},[478,135638,135621],{"class":714},[478,135640,135641],{"class":770},"\u002F* 文本 *\u002F\n",[478,135643,135644,135646,135648,135650,135652,135655,135658],{"class":480,"line":1783},[478,135645,51991],{"class":51680},[478,135647,80187],{"class":714},[478,135649,135577],{"class":495},[478,135651,51817],{"class":714},[478,135653,135654],{"class":495},"not-allowed",[478,135656,135657],{"class":714},"; } ",[478,135659,135660],{"class":770},"\u002F* 禁止 *\u002F\n",[371,135662,135663,135671],{},[374,135664,135665],{},[377,135666,135667,135669],{},[380,135668,127396],{"align":382},[380,135670,27869],{"align":382},[388,135672,135673,135680,135687,135694,135701],{},[377,135674,135675,135677],{},[393,135676,135600],{"align":382},[393,135678,135679],{"align":382},"小白 默认",[377,135681,135682,135684],{},[393,135683,62410],{"align":382},[393,135685,135686],{"align":382},"小手",[377,135688,135689,135691],{},[393,135690,135618],{"align":382},[393,135692,135693],{"align":382},"移动",[377,135695,135696,135698],{},[393,135697,5753],{"align":382},[393,135699,135700],{"align":382},"文本",[377,135702,135703,135705],{},[393,135704,135654],{"align":382},[393,135706,135707],{"align":382},"禁止",[129,135709,135711],{"id":135710},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135713,135714],{},"去除表单轮廓线",[19,135716,135717],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[469,135719,135720],{"className":126932,"code":130296,"language":126934,"meta":54,"style":54},[475,135721,135722,135726,135732,135748],{"__ignoreMap":54},[478,135723,135724],{"class":480,"line":481},[478,135725,130303],{"class":770},[478,135727,135728,135730],{"class":480,"line":565},[478,135729,51991],{"class":51680},[478,135731,16137],{"class":714},[478,135733,135734,135736,135738,135740,135742,135744,135746],{"class":480,"line":579},[478,135735,71276],{"class":495},[478,135737,51817],{"class":714},[478,135739,193],{"class":495},[478,135741,51872],{"class":710},[478,135743,51901],{"class":495},[478,135745,130324],{"class":495},[478,135747,1859],{"class":714},[478,135749,135750],{"class":480,"line":593},[478,135751,2133],{"class":714},[19,135753,135754],{},"文本域：",[52,135756],{"style":126788,"src":135757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135759,135760],{},"此时会有一个空白区域",[52,135762],{"style":126788,"src":135763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135765,135766],{},"写在同一行就不会出现这个问题",[52,135768],{"style":126788,"src":135769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135771,135772],{},"文本域是行内块元素，一定记住！！！",[19,135774,98613],{},[52,135776],{"style":126788,"src":135777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135779,135780],{},"文本域尽量放在一行",[19,135782,135783],{},"知识回顾：cols是列，rols是行",[52,135785],{"style":126788,"src":135786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135788,135789],{},"它可以进行拖动，显然这是我们不愿意看到的",[52,135791],{"style":126788,"src":135792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135794,135795],{},"使用resize进行解决",[469,135797,135799],{"className":126932,"code":135798,"language":126934,"meta":54,"style":54},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[475,135800,135801,135807,135820],{"__ignoreMap":54},[478,135802,135803,135805],{"class":480,"line":481},[478,135804,54201],{"class":51680},[478,135806,16137],{"class":714},[478,135808,135809,135811,135813,135815,135817],{"class":480,"line":565},[478,135810,71178],{"class":495},[478,135812,51817],{"class":714},[478,135814,55117],{"class":495},[478,135816,130795],{"class":714},[478,135818,135819],{"class":770},"\u002F* 取消表单轮廓线 *\u002F\n",[478,135821,135822],{"class":480,"line":579},[478,135823,2133],{"class":714},[19,135825,135826],{},"此时就无法通过右下方实现拖动了",[129,135828,135830],{"id":135829},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135832,135833],{},"实现一个盒子中的文字和图片对齐",[19,135835,135836,135837,135840],{},"用于设置一个元素的 ",[45,135838,135839],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135842,135843],{},"图片和文字默认是基线对齐",[52,135845],{"style":126788,"src":135846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[469,135848,135849],{"className":126932,"code":135798,"language":126934,"meta":54,"style":54},[475,135850,135851,135857,135869],{"__ignoreMap":54},[478,135852,135853,135855],{"class":480,"line":481},[478,135854,54201],{"class":51680},[478,135856,16137],{"class":714},[478,135858,135859,135861,135863,135865,135867],{"class":480,"line":565},[478,135860,71178],{"class":495},[478,135862,51817],{"class":714},[478,135864,55117],{"class":495},[478,135866,130795],{"class":714},[478,135868,135819],{"class":770},[478,135870,135871],{"class":480,"line":579},[478,135872,2133],{"class":714},[52,135874],{"style":126788,"src":135875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22563,135877,135879],{"id":135878},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135881,135882],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[52,135884],{"style":126788,"src":135885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135887,135888,135889,135892],{},"此时可以给图片、表单这些行内块元素的 ",[45,135890,135891],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22563,135894,135896],{"id":135895},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135898,135899],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135901,15198],{},[469,135903,135905],{"className":126932,"code":135904,"language":126934,"meta":54,"style":54},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[475,135906,135907,135912,135918,135930],{"__ignoreMap":54},[478,135908,135909],{"class":480,"line":481},[478,135910,135911],{"class":770},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[478,135913,135914,135916],{"class":480,"line":565},[478,135915,52],{"class":51680},[478,135917,16137],{"class":714},[478,135919,135920,135923,135925,135928],{"class":480,"line":579},[478,135921,135922],{"class":495},"  vertical-align",[478,135924,51817],{"class":714},[478,135926,135927],{"class":495},"middle",[478,135929,1859],{"class":714},[478,135931,135932],{"class":480,"line":593},[478,135933,2133],{"class":714},[52,135935],{"style":126788,"src":135936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135938,135939],{},"主要解决方法有两种：",[29,135941,135942],{},[32,135943,135944,135947,135948,135951],{},[45,135945,135946],{},"给图片"," 添加 ",[45,135949,135950],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135953,135954,135955],{},"2.把图片转换为块级元素 ",[45,135956,135957],{},"display: block",[19,135959,135960],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135962,135963],{},"img {",[19,135965,135966],{},"vertical-align:middle;",[19,135968,1641],{},[129,135970,135972],{"id":135971},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135974,135975],{},"效果：",[52,135977],{"style":126788,"src":135978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135980,135981],{},"单行文本溢出显示省略号--必须满足三个条件：",[469,135983,135985],{"className":126932,"code":135984,"language":126934,"meta":54,"style":54},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[475,135986,135987,135992,135998,136008,136013,136023],{"__ignoreMap":54},[478,135988,135989],{"class":480,"line":481},[478,135990,135991],{"class":770},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[478,135993,135994,135996],{"class":480,"line":565},[478,135995,52],{"class":51680},[478,135997,16137],{"class":714},[478,135999,136000,136002,136004,136006],{"class":480,"line":579},[478,136001,135922],{"class":495},[478,136003,51817],{"class":714},[478,136005,135927],{"class":495},[478,136007,1859],{"class":714},[478,136009,136010],{"class":480,"line":593},[478,136011,136012],{"class":770},"  \u002F* 或 *\u002F\n",[478,136014,136015,136017,136019,136021],{"class":480,"line":1769},[478,136016,128548],{"class":495},[478,136018,51817],{"class":714},[478,136020,61249],{"class":495},[478,136022,1859],{"class":714},[478,136024,136025],{"class":480,"line":1783},[478,136026,2133],{"class":714},[129,136028,136030],{"id":136029},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136032,135975],{},[52,136034],{"style":126788,"src":136035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136037,136038,136039,136042],{},"多行文本溢出显示省略号， ",[45,136040,136041],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[469,136044,136045],{"className":126932,"code":135984,"language":126934,"meta":54,"style":54},[475,136046,136047,136051,136057,136067,136071,136081],{"__ignoreMap":54},[478,136048,136049],{"class":480,"line":481},[478,136050,135991],{"class":770},[478,136052,136053,136055],{"class":480,"line":565},[478,136054,52],{"class":51680},[478,136056,16137],{"class":714},[478,136058,136059,136061,136063,136065],{"class":480,"line":579},[478,136060,135922],{"class":495},[478,136062,51817],{"class":714},[478,136064,135927],{"class":495},[478,136066,1859],{"class":714},[478,136068,136069],{"class":480,"line":593},[478,136070,136012],{"class":770},[478,136072,136073,136075,136077,136079],{"class":480,"line":1769},[478,136074,128548],{"class":495},[478,136076,51817],{"class":714},[478,136078,61249],{"class":495},[478,136080,1859],{"class":714},[478,136082,136083],{"class":480,"line":1783},[478,136084,2133],{"class":714},[19,136086,136087],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136089,136091],{"id":136090},"_133-常见布局技巧","13.3 常见布局技巧",[19,136093,136094],{},[45,136095,136096],{},"巧妙利用一个技术更快更好的布局：",[29,136098,136099,136102,136105,136108],{},[32,136100,136101],{},"margin负值的运用",[32,136103,136104],{},"文字围绕浮动元素",[32,136106,136107],{},"行内块的巧妙运用",[32,136109,136110],{},"CSS三角强化",[129,136112,136114],{"id":136113},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136116,136117],{},"应用场景：",[52,136119],{"style":126788,"src":136120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[52,136122],{"style":126788,"src":136123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136125,136126],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136128,136129],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[469,136131,136132],{"className":126932,"code":130296,"language":126934,"meta":54,"style":54},[475,136133,136134,136138,136144,136160],{"__ignoreMap":54},[478,136135,136136],{"class":480,"line":481},[478,136137,130303],{"class":770},[478,136139,136140,136142],{"class":480,"line":565},[478,136141,51991],{"class":51680},[478,136143,16137],{"class":714},[478,136145,136146,136148,136150,136152,136154,136156,136158],{"class":480,"line":579},[478,136147,71276],{"class":495},[478,136149,51817],{"class":714},[478,136151,193],{"class":495},[478,136153,51872],{"class":710},[478,136155,51901],{"class":495},[478,136157,130324],{"class":495},[478,136159,1859],{"class":714},[478,136161,136162],{"class":480,"line":593},[478,136163,2133],{"class":714},[52,136165],{"style":126788,"src":136166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136168,136169],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[469,136171,136173],{"className":126932,"code":136172,"language":126934,"meta":54,"style":54},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[475,136174,136175,136180,136186,136196,136208,136220],{"__ignoreMap":54},[478,136176,136177],{"class":480,"line":481},[478,136178,136179],{"class":770},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[478,136181,136182,136184],{"class":480,"line":565},[478,136183,130780],{"class":484},[478,136185,16137],{"class":714},[478,136187,136188,136190,136192,136194],{"class":480,"line":579},[478,136189,132738],{"class":495},[478,136191,51817],{"class":714},[478,136193,55144],{"class":495},[478,136195,1859],{"class":714},[478,136197,136198,136200,136202,136204,136206],{"class":480,"line":593},[478,136199,132752],{"class":495},[478,136201,51817],{"class":714},[478,136203,1146],{"class":495},[478,136205,51872],{"class":710},[478,136207,1859],{"class":714},[478,136209,136210,136212,136214,136216,136218],{"class":480,"line":1769},[478,136211,132769],{"class":495},[478,136213,51817],{"class":714},[478,136215,1396],{"class":495},[478,136217,51872],{"class":710},[478,136219,1859],{"class":714},[478,136221,136222],{"class":480,"line":1783},[478,136223,2133],{"class":714},[19,136225,136226],{},"加上上述代码会发现：",[52,136228],{"style":126788,"src":136229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136231,136232],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136234,136235],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[469,136237,136238],{"className":126932,"code":136172,"language":126934,"meta":54,"style":54},[475,136239,136240,136244,136250,136260,136272,136284],{"__ignoreMap":54},[478,136241,136242],{"class":480,"line":481},[478,136243,136179],{"class":770},[478,136245,136246,136248],{"class":480,"line":565},[478,136247,130780],{"class":484},[478,136249,16137],{"class":714},[478,136251,136252,136254,136256,136258],{"class":480,"line":579},[478,136253,132738],{"class":495},[478,136255,51817],{"class":714},[478,136257,55144],{"class":495},[478,136259,1859],{"class":714},[478,136261,136262,136264,136266,136268,136270],{"class":480,"line":593},[478,136263,132752],{"class":495},[478,136265,51817],{"class":714},[478,136267,1146],{"class":495},[478,136269,51872],{"class":710},[478,136271,1859],{"class":714},[478,136273,136274,136276,136278,136280,136282],{"class":480,"line":1769},[478,136275,132769],{"class":495},[478,136277,51817],{"class":714},[478,136279,1396],{"class":495},[478,136281,51872],{"class":710},[478,136283,1859],{"class":714},[478,136285,136286],{"class":480,"line":1783},[478,136287,2133],{"class":714},[19,136289,136290],{},"解决方式2：",[19,136292,136293],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[469,136295,136297],{"className":126932,"code":136296,"language":126934,"meta":54,"style":54},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[475,136298,136299,136305,136315,136327,136339],{"__ignoreMap":54},[478,136300,136301,136303],{"class":480,"line":481},[478,136302,51991],{"class":51680},[478,136304,16137],{"class":714},[478,136306,136307,136309,136311,136313],{"class":480,"line":565},[478,136308,132738],{"class":495},[478,136310,51817],{"class":714},[478,136312,55144],{"class":495},[478,136314,1859],{"class":714},[478,136316,136317,136319,136321,136323,136325],{"class":480,"line":579},[478,136318,132752],{"class":495},[478,136320,51817],{"class":714},[478,136322,1146],{"class":495},[478,136324,51872],{"class":710},[478,136326,1859],{"class":714},[478,136328,136329,136331,136333,136335,136337],{"class":480,"line":593},[478,136330,132769],{"class":495},[478,136332,51817],{"class":714},[478,136334,1396],{"class":495},[478,136336,51872],{"class":710},[478,136338,1859],{"class":714},[478,136340,136341],{"class":480,"line":1769},[478,136342,2133],{"class":714},[129,136344,136346],{"id":136345},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136348,136117],{},[52,136350],{"style":126788,"src":136351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136353,136354],{},"实现结构图：",[52,136356],{"style":126788,"src":136357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136359,136360],{},"巧妙运用浮动元素不会压住文字的特性",[19,136362,136363],{},"代码显示：",[469,136365,136367],{"className":126932,"code":136366,"language":126934,"meta":54,"style":54},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[475,136368,136369,136375,136385,136389,136394,136398,136404,136418],{"__ignoreMap":54},[478,136370,136371,136373],{"class":480,"line":481},[478,136372,130780],{"class":484},[478,136374,16137],{"class":714},[478,136376,136377,136379,136381,136383],{"class":480,"line":565},[478,136378,131412],{"class":495},[478,136380,51817],{"class":714},[478,136382,382],{"class":495},[478,136384,1859],{"class":714},[478,136386,136387],{"class":480,"line":579},[478,136388,2133],{"class":714},[478,136390,136391],{"class":480,"line":593},[478,136392,136393],{"class":714},"```Css\n",[478,136395,136396],{"class":480,"line":1769},[478,136397,130775],{"class":770},[478,136399,136400,136402],{"class":480,"line":1783},[478,136401,130780],{"class":484},[478,136403,16137],{"class":714},[478,136405,136406,136408,136410,136412,136414,136416],{"class":480,"line":1789},[478,136407,70850],{"class":495},[478,136409,51817],{"class":714},[478,136411,895],{"class":495},[478,136413,51936],{"class":495},[478,136415,130795],{"class":714},[478,136417,130798],{"class":770},[478,136419,136420],{"class":480,"line":1880},[478,136421,2133],{"class":714},[19,136423,136424],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[469,136426,136429],{"className":136427,"code":136428,"language":5753},[5751],"\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",[475,136430,136428],{"__ignoreMap":54},[52,136432],{"style":126788,"src":136433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136435,136436],{},"最终展示结果：",[469,136438,136439],{"className":126932,"code":130768,"language":126934,"meta":54,"style":54},[475,136440,136441,136445,136451,136465],{"__ignoreMap":54},[478,136442,136443],{"class":480,"line":481},[478,136444,130775],{"class":770},[478,136446,136447,136449],{"class":480,"line":565},[478,136448,130780],{"class":484},[478,136450,16137],{"class":714},[478,136452,136453,136455,136457,136459,136461,136463],{"class":480,"line":579},[478,136454,70850],{"class":495},[478,136456,51817],{"class":714},[478,136458,895],{"class":495},[478,136460,51936],{"class":495},[478,136462,130795],{"class":714},[478,136464,130798],{"class":770},[478,136466,136467],{"class":480,"line":593},[478,136468,2133],{"class":714},[52,136470],{"style":126788,"src":136471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136473,136475],{"id":136474},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[129,136477,136479],{"id":136478},"_1341-原理","13.4.1 原理",[52,136481],{"style":126788,"src":136482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[469,136484,136485],{"className":126932,"code":130768,"language":126934,"meta":54,"style":54},[475,136486,136487,136491,136497,136511],{"__ignoreMap":54},[478,136488,136489],{"class":480,"line":481},[478,136490,130775],{"class":770},[478,136492,136493,136495],{"class":480,"line":565},[478,136494,130780],{"class":484},[478,136496,16137],{"class":714},[478,136498,136499,136501,136503,136505,136507,136509],{"class":480,"line":579},[478,136500,70850],{"class":495},[478,136502,51817],{"class":714},[478,136504,895],{"class":495},[478,136506,51936],{"class":495},[478,136508,130795],{"class":714},[478,136510,130798],{"class":770},[478,136512,136513],{"class":480,"line":593},[478,136514,2133],{"class":714},[129,136516,136518],{"id":136517},"_1342-实例","13.4.2 实例",[52,136520],{"style":126788,"src":136521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[469,136523,136524],{"className":126932,"code":131398,"language":126934,"meta":54,"style":54},[475,136525,136526,136532,136542,136546,136552,136562],{"__ignoreMap":54},[478,136527,136528,136530],{"class":480,"line":481},[478,136529,131405],{"class":484},[478,136531,16137],{"class":714},[478,136533,136534,136536,136538,136540],{"class":480,"line":565},[478,136535,131412],{"class":495},[478,136537,51817],{"class":714},[478,136539,382],{"class":495},[478,136541,1859],{"class":714},[478,136543,136544],{"class":480,"line":579},[478,136545,2133],{"class":714},[478,136547,136548,136550],{"class":480,"line":593},[478,136549,131427],{"class":484},[478,136551,16137],{"class":714},[478,136553,136554,136556,136558,136560],{"class":480,"line":1769},[478,136555,131412],{"class":495},[478,136557,51817],{"class":714},[478,136559,72902],{"class":495},[478,136561,1859],{"class":714},[478,136563,136564],{"class":480,"line":1783},[478,136565,2133],{"class":714},[14,136567,136569],{"id":136568},"_135-css的初始化","13.5 css的初始化",[19,136571,136572],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136574,136575],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136577,136578],{},"每个网页都必须首先进行 CSS初始化。",[19,136580,136581],{},"这里我们以 京东CSS初始化代码为例。",[19,136583,136584],{},"在网页右键查看网页源代码",[19,136586,136587],{},"找到css的link引入语句",[19,136589,136590],{},"然后ctrl+f 输入body",[19,136592,77606],{},[52,136594],{"style":126788,"src":136595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136597,77629],{},[52,136599],{"style":126788,"src":136600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136602,136603],{},"③打开了网页上传压缩的代码",[52,136605],{"style":126788,"src":136606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136608,136609],{},"④从body前可以查看这个网页的初始化代码",[19,136611,136612],{},[45,136613,136614],{},"Unicode编码字体：",[19,136616,136617],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136619,83587],{},[19,136621,136622],{},"黑体 \\9ED1\\4F53",[19,136624,136625],{},"宋体 \\5B8B\\4F53",[19,136627,136628],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[617,136630,136631],{},"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":54,"searchDepth":565,"depth":565,"links":136633},[136634,136635,136642,136646,136650],{"id":135431,"depth":565,"text":135432},{"id":135553,"depth":565,"text":135554,"children":136636},[136637,136638,136639,136640,136641],{"id":135557,"depth":579,"text":135558},{"id":135710,"depth":579,"text":135711},{"id":135829,"depth":579,"text":135830},{"id":135971,"depth":579,"text":135972},{"id":136029,"depth":579,"text":136030},{"id":136090,"depth":565,"text":136091,"children":136643},[136644,136645],{"id":136113,"depth":579,"text":136114},{"id":136345,"depth":579,"text":136346},{"id":136474,"depth":565,"text":136475,"children":136647},[136648,136649],{"id":136478,"depth":579,"text":136479},{"id":136517,"depth":579,"text":136518},{"id":136568,"depth":565,"text":136569},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135423,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136657,"title":136658,"body":136659,"description":23942,"extension":638,"meta":138345,"navigation":640,"path":138346,"seo":138347,"stem":138348,"__hash__":138349},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136660,"toc":138334},[136661,136664,136668,136672,136675,136682,136685,136688,136726,136729,136731,136745,136749,136758,136762,136767,136770,136773,136776,136811,136816,136819,136849,136852,136857,136860,136863,136893,136896,136950,136953,136957,136962,136974,136977,136981,137011,137014,137019,137022,137052,137055,137059,137076,137080,137084,137087,137120,137123,137127,137130,137133,137136,137139,137142,137253,137256,137259,137262,137364,137367,137371,137375,137379,137382,137422,137425,137427,137443,137447,137450,137455,137536,137539,137542,137668,137673,137676,137684,137687,137692,137777,137780,137784,137787,137790,137794,137814,137819,137903,137906,137911,137914,137917,137995,137998,138001,138004,138007,138010,138015,138018,138021,138093,138096,138101,138104,138201,138204,138210,138213,138216,138219,138222,138225,138228,138231,138234,138238,138243,138246,138279,138284,138287,138328,138331],[10,136662,136658],{"id":136663},"_14-html5与css3新特性",[14,136665,136667],{"id":136666},"_141-html5的新特性","14.1 HTML5的新特性",[129,136669,136671],{"id":136670},"_1411-基本标签","14.1.1 基本标签",[19,136673,136674],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136676,136677,136678,136681],{},"这些新特性都有兼容性问题，基本是 ",[45,136679,136680],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136683,136684],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136686,136687],{},"现在使用的是新特性：",[1702,136689,136690,136696,136702,136708,136714,136720],{},[32,136691,136692,136695],{},[475,136693,136694],{},"\u003Cheader>"," 头部标签",[32,136697,136698,136701],{},[475,136699,136700],{},"\u003Cnav>"," 导航标签",[32,136703,136704,136707],{},[475,136705,136706],{},"\u003Carticle>"," 内容标签",[32,136709,136710,136713],{},[475,136711,136712],{},"\u003Csection>"," 定义文档某个区域",[32,136715,136716,136719],{},[475,136717,136718],{},"\u003Caside>"," 侧边栏标签",[32,136721,136722,136725],{},[475,136723,136724],{},"\u003Cfooter>"," 尾部标签",[52,136727],{"style":126788,"src":136728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136730,743],{},[1702,136732,136733,136736,136739,136742],{},[32,136734,136735],{},"这种语义化标准主要是针对搜索引擎的",[32,136737,136738],{},"这些标签页面中可以经常使用",[32,136740,136741],{},"在IE9中，需要把这些元素转换为块级元素",[32,136743,136744],{},"移动端更喜欢使用这些标签",[129,136746,136748],{"id":136747},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136750,136751,136752,136754,136755,136757],{},"音频 ",[45,136753,28554],{}," 和视频 ",[45,136756,28563],{}," 两个标签",[22563,136759,136761],{"id":136760},"_14121-视频标签-video","14.1.2.1 视频标签- video",[29,136763,136764],{},[32,136765,136766],{},"支持格式：",[52,136768],{"style":126788,"src":136769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136771,136772],{},"尽量使用MP4，兼容性好",[19,136774,136775],{},"用MP4就可以",[469,136777,136779],{"className":127679,"code":136778,"language":127681,"meta":54,"style":54},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[475,136780,136781],{"__ignoreMap":54},[478,136782,136783,136785,136787,136789,136791,136794,136796,136799,136802,136805,136807,136809],{"class":480,"line":481},[478,136784,1605],{"class":714},[478,136786,28563],{"class":51680},[478,136788,55619],{"class":484},[478,136790,759],{"class":714},[478,136792,136793],{"class":488},"\"movie.mp4\"",[478,136795,92803],{"class":484},[478,136797,136798],{"class":484}," autoplay",[478,136800,136801],{"class":484}," muted",[478,136803,136804],{"class":484}," loop",[478,136806,55694],{"class":714},[478,136808,28563],{"class":51680},[478,136810,51687],{"class":714},[29,136812,136813],{"start":565},[32,136814,136815],{},"兼容写法",[19,136817,136818],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[469,136820,136821],{"className":127679,"code":136778,"language":127681,"meta":54,"style":54},[475,136822,136823],{"__ignoreMap":54},[478,136824,136825,136827,136829,136831,136833,136835,136837,136839,136841,136843,136845,136847],{"class":480,"line":481},[478,136826,1605],{"class":714},[478,136828,28563],{"class":51680},[478,136830,55619],{"class":484},[478,136832,759],{"class":714},[478,136834,136793],{"class":488},[478,136836,92803],{"class":484},[478,136838,136798],{"class":484},[478,136840,136801],{"class":484},[478,136842,136804],{"class":484},[478,136844,55694],{"class":714},[478,136846,28563],{"class":51680},[478,136848,51687],{"class":714},[19,136850,136851],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[29,136853,136854],{"start":579},[32,136855,136856],{},"video常用属性",[52,136858],{"style":126788,"src":136859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136861,136862],{},"poster属性后面是跟的等待加载图片的地址",[469,136864,136865],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,136866,136867],{"__ignoreMap":54},[478,136868,136869,136871,136873,136875,136877,136879,136881,136883,136885,136887,136889,136891],{"class":480,"line":481},[478,136870,1605],{"class":714},[478,136872,52],{"class":51680},[478,136874,55619],{"class":484},[478,136876,759],{"class":714},[478,136878,134449],{"class":488},[478,136880,55627],{"class":484},[478,136882,759],{"class":714},[478,136884,134456],{"class":488},[478,136886,134459],{"class":484},[478,136888,759],{"class":714},[478,136890,134464],{"class":488},[478,136892,51687],{"class":714},[19,136894,136895],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[469,136897,136899],{"className":126932,"code":136898,"language":126934,"meta":54,"style":54},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[475,136900,136901,136906,136912,136936,136941,136946],{"__ignoreMap":54},[478,136902,136903],{"class":480,"line":481},[478,136904,136905],{"class":770},"\u002F* 2D 位移 *\u002F\n",[478,136907,136908,136910],{"class":480,"line":565},[478,136909,51991],{"class":51680},[478,136911,16137],{"class":714},[478,136913,136914,136917,136919,136922,136924,136926,136928,136930,136932,136934],{"class":480,"line":579},[478,136915,136916],{"class":495},"  transform",[478,136918,51817],{"class":714},[478,136920,136921],{"class":495},"translate",[478,136923,263],{"class":714},[478,136925,1012],{"class":495},[478,136927,51872],{"class":710},[478,136929,13001],{"class":714},[478,136931,1354],{"class":495},[478,136933,51872],{"class":710},[478,136935,3285],{"class":714},[478,136937,136938],{"class":480,"line":593},[478,136939,136940],{"class":770},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[478,136942,136943],{"class":480,"line":1769},[478,136944,136945],{"class":770},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[478,136947,136948],{"class":480,"line":1783},[478,136949,2133],{"class":714},[19,136951,136952],{},"muted:自动静音属性",[22563,136954,136956],{"id":136955},"_14122-音频标签audio","14.1.2.2 音频标签audio",[29,136958,136959],{},[32,136960,136961],{},"基本使用",[19,136963,136964,136965,136970,136971],{},"当前 ",[45,136966,136967],{},[475,136968,136969],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[45,136972,136973],{},"mp3格式",[52,136975],{"style":126788,"src":136976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[29,136978,136979],{"start":565},[32,136980,136815],{},[469,136982,136983],{"className":127679,"code":136778,"language":127681,"meta":54,"style":54},[475,136984,136985],{"__ignoreMap":54},[478,136986,136987,136989,136991,136993,136995,136997,136999,137001,137003,137005,137007,137009],{"class":480,"line":481},[478,136988,1605],{"class":714},[478,136990,28563],{"class":51680},[478,136992,55619],{"class":484},[478,136994,759],{"class":714},[478,136996,136793],{"class":488},[478,136998,92803],{"class":484},[478,137000,136798],{"class":484},[478,137002,136801],{"class":484},[478,137004,136804],{"class":484},[478,137006,55694],{"class":714},[478,137008,28563],{"class":51680},[478,137010,51687],{"class":714},[19,137012,137013],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[29,137015,137016],{"start":579},[32,137017,137018],{},"常用属性",[52,137020],{"style":126788,"src":137021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[469,137023,137024],{"className":127679,"code":136778,"language":127681,"meta":54,"style":54},[475,137025,137026],{"__ignoreMap":54},[478,137027,137028,137030,137032,137034,137036,137038,137040,137042,137044,137046,137048,137050],{"class":480,"line":481},[478,137029,1605],{"class":714},[478,137031,28563],{"class":51680},[478,137033,55619],{"class":484},[478,137035,759],{"class":714},[478,137037,136793],{"class":488},[478,137039,92803],{"class":484},[478,137041,136798],{"class":484},[478,137043,136801],{"class":484},[478,137045,136804],{"class":484},[478,137047,55694],{"class":714},[478,137049,28563],{"class":51680},[478,137051,51687],{"class":714},[19,137053,137054],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22563,137056,137058],{"id":137057},"_14123-总结","14.1.2.3 总结",[1702,137060,137061,137064,137067,137070,137073],{},[32,137062,137063],{},"音频标签和视频标签使用方式基本一致",[32,137065,137066],{},"浏览器支持情况不同",[32,137068,137069],{},"谷歌浏览器把音频和视频自动播放禁止了",[32,137071,137072],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[32,137074,137075],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[129,137077,137079],{"id":137078},"_1413-表单元素","14.1.3 表单元素",[22563,137081,137083],{"id":137082},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[52,137085],{"style":126788,"src":137086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[469,137088,137090],{"className":127679,"code":137089,"language":127681,"meta":54,"style":54},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[475,137091,137092],{"__ignoreMap":54},[478,137093,137094,137096,137098,137100,137102,137104,137106,137108,137111,137113,137115,137118],{"class":480,"line":481},[478,137095,1605],{"class":714},[478,137097,54201],{"class":51680},[478,137099,54204],{"class":484},[478,137101,759],{"class":714},[478,137103,63079],{"class":488},[478,137105,15485],{"class":484},[478,137107,759],{"class":714},[478,137109,137110],{"class":488},"\"username\"",[478,137112,61400],{"class":484},[478,137114,759],{"class":714},[478,137116,137117],{"class":488},"\"请输入用户名\"",[478,137119,51687],{"class":714},[52,137121],{"style":126788,"src":137122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22563,137124,137126],{"id":137125},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[52,137128],{"style":126788,"src":137129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137131,137132],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137134,137135],{},"快捷操作：",[52,137137],{"style":126788,"src":137138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137140,137141],{},"例子1：",[469,137143,137145],{"className":127679,"code":137144,"language":127681,"meta":54,"style":54},"\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",[475,137146,137147,137170,137197,137226,137245],{"__ignoreMap":54},[478,137148,137149,137151,137153,137155,137157,137160,137163,137165,137168],{"class":480,"line":481},[478,137150,1605],{"class":714},[478,137152,67005],{"class":51680},[478,137154,67008],{"class":484},[478,137156,759],{"class":714},[478,137158,137159],{"class":488},"\"\u002Fsubmit\"",[478,137161,137162],{"class":484}," method",[478,137164,759],{"class":714},[478,137166,137167],{"class":488},"\"post\"",[478,137169,51687],{"class":714},[478,137171,137172,137174,137176,137178,137180,137182,137184,137186,137188,137190,137192,137195],{"class":480,"line":565},[478,137173,52524],{"class":714},[478,137175,54201],{"class":51680},[478,137177,54204],{"class":484},[478,137179,759],{"class":714},[478,137181,63079],{"class":488},[478,137183,15485],{"class":484},[478,137185,759],{"class":714},[478,137187,137110],{"class":488},[478,137189,61400],{"class":484},[478,137191,759],{"class":714},[478,137193,137194],{"class":488},"\"用户名\"",[478,137196,51687],{"class":714},[478,137198,137199,137201,137203,137205,137207,137210,137212,137214,137217,137219,137221,137224],{"class":480,"line":579},[478,137200,52524],{"class":714},[478,137202,54201],{"class":51680},[478,137204,54204],{"class":484},[478,137206,759],{"class":714},[478,137208,137209],{"class":488},"\"password\"",[478,137211,15485],{"class":484},[478,137213,759],{"class":714},[478,137215,137216],{"class":488},"\"pwd\"",[478,137218,61400],{"class":484},[478,137220,759],{"class":714},[478,137222,137223],{"class":488},"\"密码\"",[478,137225,51687],{"class":714},[478,137227,137228,137230,137232,137234,137236,137238,137241,137243],{"class":480,"line":593},[478,137229,52524],{"class":714},[478,137231,54267],{"class":51680},[478,137233,54204],{"class":484},[478,137235,759],{"class":714},[478,137237,67028],{"class":488},[478,137239,137240],{"class":714},">提交\u003C\u002F",[478,137242,54267],{"class":51680},[478,137244,51687],{"class":714},[478,137246,137247,137249,137251],{"class":480,"line":1769},[478,137248,52165],{"class":714},[478,137250,67005],{"class":51680},[478,137252,51687],{"class":714},[52,137254],{"style":126788,"src":137255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137257,137258],{},"value是表单域的内容",[19,137260,137261],{},"例子2：",[469,137263,137264],{"className":127679,"code":137144,"language":127681,"meta":54,"style":54},[475,137265,137266,137286,137312,137338,137356],{"__ignoreMap":54},[478,137267,137268,137270,137272,137274,137276,137278,137280,137282,137284],{"class":480,"line":481},[478,137269,1605],{"class":714},[478,137271,67005],{"class":51680},[478,137273,67008],{"class":484},[478,137275,759],{"class":714},[478,137277,137159],{"class":488},[478,137279,137162],{"class":484},[478,137281,759],{"class":714},[478,137283,137167],{"class":488},[478,137285,51687],{"class":714},[478,137287,137288,137290,137292,137294,137296,137298,137300,137302,137304,137306,137308,137310],{"class":480,"line":565},[478,137289,52524],{"class":714},[478,137291,54201],{"class":51680},[478,137293,54204],{"class":484},[478,137295,759],{"class":714},[478,137297,63079],{"class":488},[478,137299,15485],{"class":484},[478,137301,759],{"class":714},[478,137303,137110],{"class":488},[478,137305,61400],{"class":484},[478,137307,759],{"class":714},[478,137309,137194],{"class":488},[478,137311,51687],{"class":714},[478,137313,137314,137316,137318,137320,137322,137324,137326,137328,137330,137332,137334,137336],{"class":480,"line":579},[478,137315,52524],{"class":714},[478,137317,54201],{"class":51680},[478,137319,54204],{"class":484},[478,137321,759],{"class":714},[478,137323,137209],{"class":488},[478,137325,15485],{"class":484},[478,137327,759],{"class":714},[478,137329,137216],{"class":488},[478,137331,61400],{"class":484},[478,137333,759],{"class":714},[478,137335,137223],{"class":488},[478,137337,51687],{"class":714},[478,137339,137340,137342,137344,137346,137348,137350,137352,137354],{"class":480,"line":593},[478,137341,52524],{"class":714},[478,137343,54267],{"class":51680},[478,137345,54204],{"class":484},[478,137347,759],{"class":714},[478,137349,67028],{"class":488},[478,137351,137240],{"class":714},[478,137353,54267],{"class":51680},[478,137355,51687],{"class":714},[478,137357,137358,137360,137362],{"class":480,"line":1769},[478,137359,52165],{"class":714},[478,137361,67005],{"class":51680},[478,137363,51687],{"class":714},[52,137365],{"style":126788,"src":137366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137368,137370],{"id":137369},"_142-css新特性","14.2 CSS新特性",[129,137372,137374],{"id":137373},"_1421-新增选择器","14.2.1 新增选择器",[22563,137376,137378],{"id":137377},"_14211-属性选择器","14.2.1.1 属性选择器",[52,137380],{"style":126788,"src":137381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[469,137383,137385],{"className":126932,"code":137384,"language":126934,"meta":54,"style":54},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[475,137386,137387,137402,137418],{"__ignoreMap":54},[478,137388,137389,137391,137393,137395,137397,137399],{"class":480,"line":481},[478,137390,54201],{"class":51680},[478,137392,1585],{"class":714},[478,137394,103487],{"class":484},[478,137396,759],{"class":710},[478,137398,63079],{"class":488},[478,137400,137401],{"class":714},"] {\n",[478,137403,137404,137406,137408,137410,137412,137414,137416],{"class":480,"line":565},[478,137405,71276],{"class":495},[478,137407,51817],{"class":714},[478,137409,193],{"class":495},[478,137411,51872],{"class":710},[478,137413,51901],{"class":495},[478,137415,130512],{"class":495},[478,137417,1859],{"class":714},[478,137419,137420],{"class":480,"line":579},[478,137421,2133],{"class":714},[52,137423],{"style":126788,"src":137424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137426,743],{},[1702,137428,137429,137432,137435,137438],{},[32,137430,137431],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[32,137433,137434],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[32,137436,137437],{},"属性选择器也可以选择出来自定义的属性",[32,137439,137440,137442],{},[45,137441,9591],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22563,137444,137446],{"id":137445},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[52,137448],{"style":126788,"src":137449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[29,137451,137452],{},[32,137453,137454],{},"fist-child",[469,137456,137458],{"className":126932,"code":137457,"language":126934,"meta":54,"style":54},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[475,137459,137460,137465,137480,137500,137518],{"__ignoreMap":54},[478,137461,137462],{"class":480,"line":481},[478,137463,137464],{"class":770},"\u002F* 属性选择器 *\u002F\n",[478,137466,137467,137469,137471,137473,137475,137477],{"class":480,"line":565},[478,137468,54201],{"class":51680},[478,137470,1585],{"class":714},[478,137472,103487],{"class":484},[478,137474,759],{"class":710},[478,137476,63079],{"class":488},[478,137478,137479],{"class":714},"] { }\n",[478,137481,137482,137484,137486,137488,137491,137494,137497],{"class":480,"line":579},[478,137483,54201],{"class":51680},[478,137485,1585],{"class":714},[478,137487,15259],{"class":484},[478,137489,137490],{"class":710},"^=",[478,137492,137493],{"class":488},"\"icon\"",[478,137495,137496],{"class":714},"] { }  ",[478,137498,137499],{"class":770},"\u002F* 以 icon 开头 *\u002F\n",[478,137501,137502,137504,137506,137508,137511,137513,137515],{"class":480,"line":593},[478,137503,54201],{"class":51680},[478,137505,1585],{"class":714},[478,137507,15259],{"class":484},[478,137509,137510],{"class":710},"$=",[478,137512,137493],{"class":488},[478,137514,137496],{"class":714},[478,137516,137517],{"class":770},"\u002F* 以 icon 结尾 *\u002F\n",[478,137519,137520,137522,137524,137526,137529,137531,137533],{"class":480,"line":1769},[478,137521,54201],{"class":51680},[478,137523,1585],{"class":714},[478,137525,15259],{"class":484},[478,137527,137528],{"class":710},"*=",[478,137530,137493],{"class":488},[478,137532,137496],{"class":714},[478,137534,137535],{"class":770},"\u002F* 包含 icon *\u002F\n",[19,137537,137538],{},"ul的第一个儿子文本为红色",[19,137540,137541],{},"一定要在冒号前加空格，不然就是选中所有的了",[469,137543,137545],{"className":126932,"code":137544,"language":126934,"meta":54,"style":54},".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",[475,137546,137547,137553,137563,137567,137571,137576,137589,137602,137618,137635,137652],{"__ignoreMap":54},[478,137548,137549,137551],{"class":480,"line":481},[478,137550,127223],{"class":484},[478,137552,16137],{"class":714},[478,137554,137555,137557,137559,137561],{"class":480,"line":565},[478,137556,71285],{"class":495},[478,137558,51817],{"class":714},[478,137560,57801],{"class":495},[478,137562,1859],{"class":714},[478,137564,137565],{"class":480,"line":579},[478,137566,2133],{"class":714},[478,137568,137569],{"class":480,"line":593},[478,137570,136393],{"class":714},[478,137572,137573],{"class":480,"line":1769},[478,137574,137575],{"class":770},"\u002F* 结构伪类选择器 *\u002F\n",[478,137577,137578,137580,137583,137586],{"class":480,"line":1783},[478,137579,32],{"class":51680},[478,137581,137582],{"class":484},":first-child",[478,137584,137585],{"class":714}," { }           ",[478,137587,137588],{"class":770},"\u002F* 第一个 *\u002F\n",[478,137590,137591,137593,137596,137599],{"class":480,"line":1789},[478,137592,32],{"class":51680},[478,137594,137595],{"class":484},":last-child",[478,137597,137598],{"class":714}," { }            ",[478,137600,137601],{"class":770},"\u002F* 最后一个 *\u002F\n",[478,137603,137604,137606,137608,137610,137612,137615],{"class":480,"line":1880},[478,137605,32],{"class":51680},[478,137607,129846],{"class":484},[478,137609,263],{"class":714},[478,137611,789],{"class":495},[478,137613,137614],{"class":714},") { }          ",[478,137616,137617],{"class":770},"\u002F* 第2个 *\u002F\n",[478,137619,137620,137622,137624,137626,137629,137632],{"class":480,"line":1886},[478,137621,32],{"class":51680},[478,137623,129846],{"class":484},[478,137625,263],{"class":714},[478,137627,137628],{"class":495},"2n",[478,137630,137631],{"class":714},") { }         ",[478,137633,137634],{"class":770},"\u002F* 偶数 *\u002F\n",[478,137636,137637,137639,137641,137643,137646,137649],{"class":480,"line":1898},[478,137638,32],{"class":51680},[478,137640,129846],{"class":484},[478,137642,263],{"class":714},[478,137644,137645],{"class":495},"2n+1",[478,137647,137648],{"class":714},") { }       ",[478,137650,137651],{"class":770},"\u002F* 奇数 *\u002F\n",[478,137653,137654,137656,137658,137660,137663,137665],{"class":480,"line":2180},[478,137655,32],{"class":51680},[478,137657,129846],{"class":484},[478,137659,263],{"class":714},[478,137661,137662],{"class":495},"-n+3",[478,137664,137648],{"class":714},[478,137666,137667],{"class":770},"\u002F* 前3个 *\u002F\n",[51991,137669,137672],{"className":137670},[137671],"example","\n  示例内容\n",[19,137674,137675],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1702,137677,137678],{},[32,137679,137680,137683],{},[475,137681,137682],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137685,137686],{},"也就是说它选择的是熊大",[29,137688,137689],{"start":1783},[32,137690,137691],{},"权重",[469,137693,137695],{"className":126932,"code":137694,"language":126934,"meta":54,"style":54},"\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",[475,137696,137697,137701,137711,137721,137735,137749,137763],{"__ignoreMap":54},[478,137698,137699],{"class":480,"line":481},[478,137700,137575],{"class":770},[478,137702,137703,137705,137707,137709],{"class":480,"line":565},[478,137704,32],{"class":51680},[478,137706,137582],{"class":484},[478,137708,137585],{"class":714},[478,137710,137588],{"class":770},[478,137712,137713,137715,137717,137719],{"class":480,"line":579},[478,137714,32],{"class":51680},[478,137716,137595],{"class":484},[478,137718,137598],{"class":714},[478,137720,137601],{"class":770},[478,137722,137723,137725,137727,137729,137731,137733],{"class":480,"line":593},[478,137724,32],{"class":51680},[478,137726,129846],{"class":484},[478,137728,263],{"class":714},[478,137730,789],{"class":495},[478,137732,137614],{"class":714},[478,137734,137617],{"class":770},[478,137736,137737,137739,137741,137743,137745,137747],{"class":480,"line":1769},[478,137738,32],{"class":51680},[478,137740,129846],{"class":484},[478,137742,263],{"class":714},[478,137744,137628],{"class":495},[478,137746,137631],{"class":714},[478,137748,137634],{"class":770},[478,137750,137751,137753,137755,137757,137759,137761],{"class":480,"line":1783},[478,137752,32],{"class":51680},[478,137754,129846],{"class":484},[478,137756,263],{"class":714},[478,137758,137645],{"class":495},[478,137760,137648],{"class":714},[478,137762,137651],{"class":770},[478,137764,137765,137767,137769,137771,137773,137775],{"class":480,"line":1789},[478,137766,32],{"class":51680},[478,137768,129846],{"class":484},[478,137770,263],{"class":714},[478,137772,137662],{"class":495},[478,137774,137648],{"class":714},[478,137776,137667],{"class":770},[19,137778,137779],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22563,137781,137783],{"id":137782},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137785,137786],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[52,137788],{"style":126788,"src":137789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[29,137791,137792],{},[32,137793,743],{},[1702,137795,137796,137799,137802,137805,137808,137811],{},[32,137797,137798],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[32,137800,137801],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[32,137803,137804],{},"语法： element::before {}",[32,137806,137807],{},"before 和 after 必须有 content 属性",[32,137809,137810],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[32,137812,137813],{},"伪元素选择器和标签选择器一样，权重为 1",[29,137815,137816],{"start":565},[32,137817,137818],{},"实例",[469,137820,137821],{"className":126932,"code":137694,"language":126934,"meta":54,"style":54},[475,137822,137823,137827,137837,137847,137861,137875,137889],{"__ignoreMap":54},[478,137824,137825],{"class":480,"line":481},[478,137826,137575],{"class":770},[478,137828,137829,137831,137833,137835],{"class":480,"line":565},[478,137830,32],{"class":51680},[478,137832,137582],{"class":484},[478,137834,137585],{"class":714},[478,137836,137588],{"class":770},[478,137838,137839,137841,137843,137845],{"class":480,"line":579},[478,137840,32],{"class":51680},[478,137842,137595],{"class":484},[478,137844,137598],{"class":714},[478,137846,137601],{"class":770},[478,137848,137849,137851,137853,137855,137857,137859],{"class":480,"line":593},[478,137850,32],{"class":51680},[478,137852,129846],{"class":484},[478,137854,263],{"class":714},[478,137856,789],{"class":495},[478,137858,137614],{"class":714},[478,137860,137617],{"class":770},[478,137862,137863,137865,137867,137869,137871,137873],{"class":480,"line":1769},[478,137864,32],{"class":51680},[478,137866,129846],{"class":484},[478,137868,263],{"class":714},[478,137870,137628],{"class":495},[478,137872,137631],{"class":714},[478,137874,137634],{"class":770},[478,137876,137877,137879,137881,137883,137885,137887],{"class":480,"line":1783},[478,137878,32],{"class":51680},[478,137880,129846],{"class":484},[478,137882,263],{"class":714},[478,137884,137645],{"class":495},[478,137886,137648],{"class":714},[478,137888,137651],{"class":770},[478,137890,137891,137893,137895,137897,137899,137901],{"class":480,"line":1789},[478,137892,32],{"class":51680},[478,137894,129846],{"class":484},[478,137896,263],{"class":714},[478,137898,137662],{"class":495},[478,137900,137648],{"class":714},[478,137902,137667],{"class":770},[52,137904],{"style":126788,"src":137905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[29,137907,137908],{"start":579},[32,137909,137910],{},"使用场景1",[52,137912],{"style":126788,"src":137913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137915,137916],{},"不需要再加盒子来整红色那部分了",[469,137918,137920],{"className":126932,"code":137919,"language":126934,"meta":54,"style":54},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[475,137921,137922,137927,137936,137947,137957,137961,137970,137981,137991],{"__ignoreMap":54},[478,137923,137924],{"class":480,"line":481},[478,137925,137926],{"class":770},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[478,137928,137929,137931,137934],{"class":480,"line":565},[478,137930,51991],{"class":51680},[478,137932,137933],{"class":484},"::before",[478,137935,16137],{"class":714},[478,137937,137938,137941,137943,137945],{"class":480,"line":579},[478,137939,137940],{"class":495},"  content",[478,137942,51817],{"class":714},[478,137944,8218],{"class":488},[478,137946,1859],{"class":714},[478,137948,137949,137951,137953,137955],{"class":480,"line":593},[478,137950,128548],{"class":495},[478,137952,51817],{"class":714},[478,137954,61249],{"class":495},[478,137956,1859],{"class":714},[478,137958,137959],{"class":480,"line":1769},[478,137960,2133],{"class":714},[478,137962,137963,137965,137968],{"class":480,"line":1783},[478,137964,51991],{"class":51680},[478,137966,137967],{"class":484},"::after",[478,137969,16137],{"class":714},[478,137971,137972,137974,137976,137979],{"class":480,"line":1789},[478,137973,137940],{"class":495},[478,137975,51817],{"class":714},[478,137977,137978],{"class":488},"\"→\"",[478,137980,1859],{"class":714},[478,137982,137983,137985,137987,137989],{"class":480,"line":1880},[478,137984,71285],{"class":495},[478,137986,51817],{"class":714},[478,137988,62450],{"class":495},[478,137990,1859],{"class":714},[478,137992,137993],{"class":480,"line":1886},[478,137994,2133],{"class":714},[52,137996],{"style":126788,"src":137997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137999,138000],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[52,138002],{"style":126788,"src":138003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138005,138006],{},"但是在引用时需要先转义一下",[19,138008,138009],{},"content='\\e930'",[29,138011,138012],{"start":593},[32,138013,138014],{},"使用场景2",[19,138016,138017],{},"仿土豆效果",[19,138019,138020],{},"通过使用伪元素选择器可以减少body中盒子的数量",[469,138022,138023],{"className":126932,"code":137919,"language":126934,"meta":54,"style":54},[475,138024,138025,138029,138037,138047,138057,138061,138069,138079,138089],{"__ignoreMap":54},[478,138026,138027],{"class":480,"line":481},[478,138028,137926],{"class":770},[478,138030,138031,138033,138035],{"class":480,"line":565},[478,138032,51991],{"class":51680},[478,138034,137933],{"class":484},[478,138036,16137],{"class":714},[478,138038,138039,138041,138043,138045],{"class":480,"line":579},[478,138040,137940],{"class":495},[478,138042,51817],{"class":714},[478,138044,8218],{"class":488},[478,138046,1859],{"class":714},[478,138048,138049,138051,138053,138055],{"class":480,"line":593},[478,138050,128548],{"class":495},[478,138052,51817],{"class":714},[478,138054,61249],{"class":495},[478,138056,1859],{"class":714},[478,138058,138059],{"class":480,"line":1769},[478,138060,2133],{"class":714},[478,138062,138063,138065,138067],{"class":480,"line":1783},[478,138064,51991],{"class":51680},[478,138066,137967],{"class":484},[478,138068,16137],{"class":714},[478,138070,138071,138073,138075,138077],{"class":480,"line":1789},[478,138072,137940],{"class":495},[478,138074,51817],{"class":714},[478,138076,137978],{"class":488},[478,138078,1859],{"class":714},[478,138080,138081,138083,138085,138087],{"class":480,"line":1880},[478,138082,71285],{"class":495},[478,138084,51817],{"class":714},[478,138086,62450],{"class":495},[478,138088,1859],{"class":714},[478,138090,138091],{"class":480,"line":1886},[478,138092,2133],{"class":714},[52,138094],{"style":126788,"src":138095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[29,138097,138098],{"start":1769},[32,138099,138100],{},"使用场景3",[19,138102,138103],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[469,138105,138107],{"className":126932,"code":138106,"language":126934,"meta":54,"style":54},".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",[475,138108,138109,138115,138125,138129,138133,138137,138145,138155,138165,138169,138177,138187,138197],{"__ignoreMap":54},[478,138110,138111,138113],{"class":480,"line":481},[478,138112,130780],{"class":484},[478,138114,16137],{"class":714},[478,138116,138117,138119,138121,138123],{"class":480,"line":565},[478,138118,131412],{"class":495},[478,138120,51817],{"class":714},[478,138122,382],{"class":495},[478,138124,1859],{"class":714},[478,138126,138127],{"class":480,"line":579},[478,138128,2133],{"class":714},[478,138130,138131],{"class":480,"line":593},[478,138132,136393],{"class":714},[478,138134,138135],{"class":480,"line":1769},[478,138136,137926],{"class":770},[478,138138,138139,138141,138143],{"class":480,"line":1783},[478,138140,51991],{"class":51680},[478,138142,137933],{"class":484},[478,138144,16137],{"class":714},[478,138146,138147,138149,138151,138153],{"class":480,"line":1789},[478,138148,137940],{"class":495},[478,138150,51817],{"class":714},[478,138152,8218],{"class":488},[478,138154,1859],{"class":714},[478,138156,138157,138159,138161,138163],{"class":480,"line":1880},[478,138158,128548],{"class":495},[478,138160,51817],{"class":714},[478,138162,61249],{"class":495},[478,138164,1859],{"class":714},[478,138166,138167],{"class":480,"line":1886},[478,138168,2133],{"class":714},[478,138170,138171,138173,138175],{"class":480,"line":1898},[478,138172,51991],{"class":51680},[478,138174,137967],{"class":484},[478,138176,16137],{"class":714},[478,138178,138179,138181,138183,138185],{"class":480,"line":2180},[478,138180,137940],{"class":495},[478,138182,51817],{"class":714},[478,138184,137978],{"class":488},[478,138186,1859],{"class":714},[478,138188,138189,138191,138193,138195],{"class":480,"line":2185},[478,138190,71285],{"class":495},[478,138192,51817],{"class":714},[478,138194,62450],{"class":495},[478,138196,1859],{"class":714},[478,138198,138199],{"class":480,"line":2191},[478,138200,2133],{"class":714},[19,138202,138203],{},"div {\nmargin: 0 auto;\n}",[469,138205,138208],{"className":138206,"code":138207,"language":5753},[5751],"\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",[475,138209,138207],{"__ignoreMap":54},[19,138211,138212],{},"如果想让多个元素都发生变化",[19,138214,138215],{},"不能如下操作：",[19,138217,138218],{},"transition: width 2s ease 0.5s;",[19,138220,138221],{},"transition: height 2s ease 0.5s;不对！！！",[19,138223,138224],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138226,138227],{},"使用如下：加逗号隔开",[19,138229,138230],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138232,138233],{},"transition all 2s ease;",[129,138235,138237],{"id":138236},"_1426-过渡练习","14.2.6 过渡练习",[29,138239,138240],{},[32,138241,138242],{},"进度条",[52,138244],{"style":126788,"src":138245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[469,138247,138249],{"className":126932,"code":138248,"language":126934,"meta":54,"style":54},"div {\n  transition: all 0.3s ease;\n}\n",[475,138250,138251,138257,138275],{"__ignoreMap":54},[478,138252,138253,138255],{"class":480,"line":481},[478,138254,51991],{"class":51680},[478,138256,16137],{"class":714},[478,138258,138259,138262,138264,138266,138269,138271,138273],{"class":480,"line":565},[478,138260,138261],{"class":495},"  transition",[478,138263,51817],{"class":714},[478,138265,28501],{"class":495},[478,138267,138268],{"class":495}," 0.3",[478,138270,1391],{"class":710},[478,138272,79060],{"class":495},[478,138274,1859],{"class":714},[478,138276,138277],{"class":480,"line":579},[478,138278,2133],{"class":714},[29,138280,138281],{"start":565},[32,138282,138283],{},"小米logo",[19,138285,138286],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[469,138288,138290],{"className":126932,"code":138289,"language":126934,"meta":54,"style":54},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[475,138291,138292,138297,138303,138319,138324],{"__ignoreMap":54},[478,138293,138294],{"class":480,"line":481},[478,138295,138296],{"class":770},"\u002F* CSS3 过渡 *\u002F\n",[478,138298,138299,138301],{"class":480,"line":565},[478,138300,51991],{"class":51680},[478,138302,16137],{"class":714},[478,138304,138305,138307,138309,138311,138313,138315,138317],{"class":480,"line":579},[478,138306,138261],{"class":495},[478,138308,51817],{"class":714},[478,138310,28501],{"class":495},[478,138312,138268],{"class":495},[478,138314,1391],{"class":710},[478,138316,79060],{"class":495},[478,138318,1859],{"class":714},[478,138320,138321],{"class":480,"line":593},[478,138322,138323],{"class":770},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[478,138325,138326],{"class":480,"line":1769},[478,138327,2133],{"class":714},[19,138329,138330],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[617,138332,138333],{},"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":54,"searchDepth":565,"depth":565,"links":138335},[138336,138341],{"id":136666,"depth":565,"text":136667,"children":138337},[138338,138339,138340],{"id":136670,"depth":579,"text":136671},{"id":136747,"depth":579,"text":136748},{"id":137078,"depth":579,"text":137079},{"id":137369,"depth":565,"text":137370,"children":138342},[138343,138344],{"id":137373,"depth":579,"text":137374},{"id":138236,"depth":579,"text":138237},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136658,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138351,"title":138352,"body":138353,"description":23942,"extension":638,"meta":140097,"navigation":640,"path":140098,"seo":140099,"stem":140100,"__hash__":140101},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138354,"toc":140078},[138355,138358,138362,138365,138371,138377,138381,138383,138386,138389,138392,138395,138398,138401,138404,138408,138412,138415,138418,138421,138425,138428,138431,138436,138439,138442,138445,138449,138452,138461,138464,138467,138471,138474,138477,138482,138489,138503,138511,138518,138523,138526,138529,138532,138539,138543,138549,138555,138558,138561,138566,138572,138574,138582,138587,138590,138596,138598,138603,138608,138611,138613,138618,138621,138626,138631,138665,138669,138673,138676,138680,138683,138769,138772,138809,138812,138848,138852,138857,138870,138924,138926,138954,138956,138984,138990,139004,139006,139050,139052,139096,139099,139106,139117,139119,139146,139148,139174,139181,139197,139199,139293,139295,139389,139396,139399,139404,139410,139484,139487,139489,139525,139527,139563,139566,139573,139592,139595,139598,139600,139625,139627,139651,139654,139657,139687,139691,139694,139757,139759,139825,139827,139891,139894,139926,139928,139954,139956,139982,139985,140016,140018,140044,140046,140072,140075],[10,138356,138352],{"id":138357},"_15-品优购项目上篇-搭建与公共模块",[14,138359,138361],{"id":138360},"_151-项目规划","15.1 项目规划",[52,138363],{"style":126788,"src":138364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138366,138367,138370],{},[45,138368,138369],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138372,138373,138376],{},[45,138374,138375],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138378,138380],{"id":138379},"_152-项目介绍","15.2 项目介绍",[19,138382,138369],{},[52,138384],{"style":126788,"src":138385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138387,138388],{},"主页：",[52,138390],{"style":126788,"src":138391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138393,138394],{},"列表页：",[52,138396],{"style":126788,"src":138397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138399,138400],{},"注册页：",[52,138402],{"style":126788,"src":138403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138405,138407],{"id":138406},"_153-项目搭建工作","15.3 项目搭建工作",[129,138409,138411],{"id":138410},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[52,138413],{"style":126788,"src":138414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138416,138417],{},"经常更换的图片要放到upload文件夹中",[19,138419,138420],{},"不经常换的放到images文件夹中",[129,138422,138424],{"id":138423},"_1532-创建文件如下","15.3.2 创建文件如下",[52,138426],{"style":126788,"src":138427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[52,138429],{"style":126788,"src":138430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138432,138433],{},[45,138434,138435],{},"初始化样式：",[19,138437,138438],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138440,138441],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138443,138444],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[129,138446,138448],{"id":138447},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138450,138451],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138453,138454,138455,138460],{},"这里最典型的应用就是 ",[45,138456,138457],{},[475,138458,138459],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[52,138462],{"style":126788,"src":138463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138465,138466],{},"通过link方法来引入",[129,138468,138470],{"id":138469},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[52,138472],{"style":126788,"src":138473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138475,138476],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[29,138478,138479],{},[32,138480,138481],{},"制作favicon图标",[19,138483,138484,138485,138488],{},"①把品优购图标切成 ",[475,138486,138487],{},"png"," 图片",[19,138490,138491,138492,138494,138495,138498,138499],{},"②把 ",[475,138493,138487],{}," 图片转换为 ",[475,138496,138497],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[518,138500,138501],{"href":138501,"rel":138502},"http:\u002F\u002Fwww.bitbug.net\u002F",[522],[29,138504,138505,138508],{"start":565},[32,138506,138507],{},"favicon图标放到网站根目录下",[32,138509,138510],{},"HTML页面引入favicon",[19,138512,138513,138514,138517],{},"在html 页面里面的 ",[475,138515,138516],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138519,138520],{},[475,138521,138522],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138524,138525],{},"复制这行代码或者在生成这个的网站进行复制",[52,138527],{"style":126788,"src":138528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138530,138531],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138533,138534,138535],{},"例如:",[518,138536,138537],{"href":138537,"rel":138538},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[522],[129,138540,138542],{"id":138541},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138544,138545,138548],{},[45,138546,138547],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138550,138551,138554],{},[45,138552,138553],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138556,138557],{},"页面必须有三个标签用来符合 SEO 优化",[52,138559],{"style":126788,"src":138560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[29,138562,138563],{},[32,138564,138565],{},"title网站标题",[19,138567,138568,138571],{},[45,138569,138570],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138573,69170],{},[1702,138575,138576,138579],{},[32,138577,138578],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[32,138580,138581],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[29,138583,138584],{"start":565},[32,138585,138586],{},"description网站描述",[19,138588,138589],{},"简要说明我们网站主要是做什么的",[19,138591,138592,138595],{},[45,138593,138594],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138597,69170],{},[19,138599,138600],{},[475,138601,138602],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[29,138604,138605],{"start":579},[32,138606,138607],{},"keywords关键词",[19,138609,138610],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138612,69170],{},[19,138614,138615],{},[475,138616,138617],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138619,138620],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138622,138623],{},[45,138624,138625],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[29,138627,138628],{"start":593},[32,138629,138630],{},"代码总结",[469,138632,138633],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,138634,138635,138639,138653,138657],{"__ignoreMap":54},[478,138636,138637],{"class":480,"line":481},[478,138638,131043],{"class":770},[478,138640,138641,138643,138645,138647,138649,138651],{"class":480,"line":565},[478,138642,1605],{"class":714},[478,138644,51991],{"class":51680},[478,138646,53866],{"class":484},[478,138648,759],{"class":714},[478,138650,131056],{"class":488},[478,138652,51687],{"class":714},[478,138654,138655],{"class":480,"line":579},[478,138656,131063],{"class":714},[478,138658,138659,138661,138663],{"class":480,"line":593},[478,138660,52165],{"class":714},[478,138662,51991],{"class":51680},[478,138664,51687],{"class":714},[14,138666,138668],{"id":138667},"_154-项目公共部分制作","15.4 项目公共部分制作",[129,138670,138672],{"id":138671},"_1541-常用模块类命名","15.4.1 常用模块类命名",[52,138674],{"style":126788,"src":138675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[129,138677,138679],{"id":138678},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138681,138682],{},"布局思路：",[1702,138684,138685,138688,138691,138713,138746],{},[32,138686,138687],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[32,138689,138690],{},"里面包含版心的盒子",[32,138692,138693,138694],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1702,138695,138696,138704,138710],{},[32,138697,138698,138699,22065,138701,138703],{},"1 号盒子 里面包含一个",[475,138700,1702],{},[475,138702,1702],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[32,138705,138706,138707,138709],{},"里面的内容是水平排列，所以需要给",[475,138708,32],{},"设置浮动",[32,138711,138712],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[32,138714,138715,138716],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1702,138717,138718,138732,138737],{},[32,138719,138720,138721,22065,138723,138725,138726,138728,138729,138731],{},"2 号盒子 里面包含一个",[475,138722,1702],{},[475,138724,1702],{},"包裹",[475,138727,32],{},"，中间的",[475,138730,1616],{},"可以用样式去设置，也可以用字符 |",[32,138733,138734,138735,138709],{},"里面内容水平排列，给",[475,138736,32],{},[32,138738,138739,138740,138742,138743,138745],{},"找到里面所有偶数的 ",[475,138741,32],{}," 设置样式（偶数的 ",[475,138744,32],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[32,138747,138748,138749],{},"需要用到字体图标",[1702,138750,138751,138757,138760,138763,138766],{},[32,138752,138753,138754],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[475,138755,138756],{},"arrow-icon",[32,138758,138759],{},"先要引入字体图片的资源",[32,138761,138762],{},"在样式里面利用 font-face 来进行声明",[32,138764,138765],{},"在伪元素的 content属性设置 图标的编码",[32,138767,138768],{},"给伪元素设置font-family属性",[19,138770,138771],{},"结构实例代码：",[469,138773,138775],{"className":126932,"code":138774,"language":126934,"meta":54,"style":54},"div::before {\n  content: \"\";\n  display: block;\n}\n",[475,138776,138777,138785,138795,138805],{"__ignoreMap":54},[478,138778,138779,138781,138783],{"class":480,"line":481},[478,138780,51991],{"class":51680},[478,138782,137933],{"class":484},[478,138784,16137],{"class":714},[478,138786,138787,138789,138791,138793],{"class":480,"line":565},[478,138788,137940],{"class":495},[478,138790,51817],{"class":714},[478,138792,8218],{"class":488},[478,138794,1859],{"class":714},[478,138796,138797,138799,138801,138803],{"class":480,"line":579},[478,138798,128548],{"class":495},[478,138800,51817],{"class":714},[478,138802,61249],{"class":495},[478,138804,1859],{"class":714},[478,138806,138807],{"class":480,"line":593},[478,138808,2133],{"class":714},[19,138810,138811],{},"样式实例代码：",[469,138813,138814],{"className":126932,"code":138774,"language":126934,"meta":54,"style":54},[475,138815,138816,138824,138834,138844],{"__ignoreMap":54},[478,138817,138818,138820,138822],{"class":480,"line":481},[478,138819,51991],{"class":51680},[478,138821,137933],{"class":484},[478,138823,16137],{"class":714},[478,138825,138826,138828,138830,138832],{"class":480,"line":565},[478,138827,137940],{"class":495},[478,138829,51817],{"class":714},[478,138831,8218],{"class":488},[478,138833,1859],{"class":714},[478,138835,138836,138838,138840,138842],{"class":480,"line":579},[478,138837,128548],{"class":495},[478,138839,51817],{"class":714},[478,138841,61249],{"class":495},[478,138843,1859],{"class":714},[478,138845,138846],{"class":480,"line":593},[478,138847,2133],{"class":714},[129,138849,138851],{"id":138850},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1702,138853,138854],{},[32,138855,138856],{},"header 盒子必须要有高度",[19,138858,138859,138860,138862,138863],{},"1 号盒子是 ",[475,138861,131944],{}," 标志定位，在正常开发过程中， ",[45,138864,138865,138866,138869],{},"logo的布局其实是有讲究的，需要进行 ",[475,138867,138868],{},"logoSEO","的优化 （★★★）",[1702,138871,138872,138880,138888,138915],{},[32,138873,138874,138876,138877,138879],{},[475,138875,131944],{}," 里面首先放一个 ",[475,138878,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[32,138881,138882,138884,138885,138887],{},[475,138883,10],{}," 里面再放一个链接，可以返回首页的，把 ",[475,138886,131944],{}," 的背景图片给链接即可",[32,138889,138890,138891],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1702,138892,138893,138908],{},[32,138894,138895,138896,138899,138900,138903,138904,138907],{},"方法1：",[475,138897,138898],{},"text-indent"," 移到盒子外面（",[475,138901,138902],{},"text-indent: -9999px",") ，然后 ",[475,138905,138906],{},"overflow:hidden"," ，淘宝的做法",[32,138909,138910,138911,138914],{},"方法2：直接给 ",[475,138912,138913],{},"font-size: 0;"," 就看不到文字了，京东的做法",[32,138916,138917,138918,138920,138921,138923],{},"最后给链接一个 ",[475,138919,51787],{}," 属性，这样鼠标放到 ",[475,138922,131944],{}," 上就可以看到提示文字了",[19,138925,138771],{},[469,138927,138928],{"className":127679,"code":132165,"language":127681,"meta":54,"style":54},[475,138929,138930],{"__ignoreMap":54},[478,138931,138932,138934,138936,138938,138940,138942,138944,138946,138948,138950,138952],{"class":480,"line":481},[478,138933,1605],{"class":714},[478,138935,518],{"class":51680},[478,138937,61437],{"class":484},[478,138939,759],{"class":714},[478,138941,132180],{"class":488},[478,138943,132183],{"class":484},[478,138945,759],{"class":714},[478,138947,132188],{"class":488},[478,138949,132191],{"class":714},[478,138951,518],{"class":51680},[478,138953,51687],{"class":714},[19,138955,138811],{},[469,138957,138958],{"className":127679,"code":132165,"language":127681,"meta":54,"style":54},[475,138959,138960],{"__ignoreMap":54},[478,138961,138962,138964,138966,138968,138970,138972,138974,138976,138978,138980,138982],{"class":480,"line":481},[478,138963,1605],{"class":714},[478,138965,518],{"class":51680},[478,138967,61437],{"class":484},[478,138969,759],{"class":714},[478,138971,132180],{"class":488},[478,138973,132183],{"class":484},[478,138975,759],{"class":714},[478,138977,132188],{"class":488},[478,138979,132191],{"class":714},[478,138981,518],{"class":51680},[478,138983,51687],{"class":714},[19,138985,138986,138987,138989],{},"2 号盒子是 ",[475,138988,131957],{}," 搜索模块定位",[1702,138991,138992,138995,138998,139001],{},[32,138993,138994],{},"search盒子利用定位的方式放在对应的位置",[32,138996,138997],{},"search盒子设置绝对定位，header盒子设置相对定位",[32,138999,139000],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[32,139002,139003],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139005,138771],{},[469,139007,139008],{"className":126932,"code":132252,"language":126934,"meta":54,"style":54},[475,139009,139010,139032,139036,139046],{"__ignoreMap":54},[478,139011,139012,139014,139016,139018,139020,139022,139024,139026,139028,139030],{"class":480,"line":481},[478,139013,51991],{"class":51680},[478,139015,13001],{"class":714},[478,139017,19],{"class":51680},[478,139019,13001],{"class":714},[478,139021,10],{"class":51680},[478,139023,13001],{"class":714},[478,139025,1702],{"class":51680},[478,139027,13001],{"class":714},[478,139029,32],{"class":51680},[478,139031,16137],{"class":714},[478,139033,139034],{"class":480,"line":565},[478,139035,132281],{"class":770},[478,139037,139038,139040,139042,139044],{"class":480,"line":579},[478,139039,128548],{"class":495},[478,139041,51817],{"class":714},[478,139043,61249],{"class":495},[478,139045,1859],{"class":714},[478,139047,139048],{"class":480,"line":593},[478,139049,2133],{"class":714},[19,139051,138811],{},[469,139053,139054],{"className":126932,"code":132252,"language":126934,"meta":54,"style":54},[475,139055,139056,139078,139082,139092],{"__ignoreMap":54},[478,139057,139058,139060,139062,139064,139066,139068,139070,139072,139074,139076],{"class":480,"line":481},[478,139059,51991],{"class":51680},[478,139061,13001],{"class":714},[478,139063,19],{"class":51680},[478,139065,13001],{"class":714},[478,139067,10],{"class":51680},[478,139069,13001],{"class":714},[478,139071,1702],{"class":51680},[478,139073,13001],{"class":714},[478,139075,32],{"class":51680},[478,139077,16137],{"class":714},[478,139079,139080],{"class":480,"line":565},[478,139081,132281],{"class":770},[478,139083,139084,139086,139088,139090],{"class":480,"line":579},[478,139085,128548],{"class":495},[478,139087,51817],{"class":714},[478,139089,61249],{"class":495},[478,139091,1859],{"class":714},[478,139093,139094],{"class":480,"line":593},[478,139095,2133],{"class":714},[19,139097,139098],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139100,139101,139102,139105],{},"3 号盒子是 ",[475,139103,139104],{},"hotwords"," 热词模块定位",[1702,139107,139108,139111,139114],{},[32,139109,139110],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[32,139112,139113],{},"给里面所有的a标签设置 左右10px的外边距",[32,139115,139116],{},"给第一个a标签设置文字变红色（#c81623）",[19,139118,138771],{},[469,139120,139122],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},"div {\n  margin: 0 auto;\n}\n",[475,139123,139124,139130,139142],{"__ignoreMap":54},[478,139125,139126,139128],{"class":480,"line":481},[478,139127,51991],{"class":51680},[478,139129,16137],{"class":714},[478,139131,139132,139134,139136,139138,139140],{"class":480,"line":565},[478,139133,70850],{"class":495},[478,139135,51817],{"class":714},[478,139137,895],{"class":495},[478,139139,51936],{"class":495},[478,139141,1859],{"class":714},[478,139143,139144],{"class":480,"line":579},[478,139145,2133],{"class":714},[19,139147,138811],{},[469,139149,139150],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},[475,139151,139152,139158,139170],{"__ignoreMap":54},[478,139153,139154,139156],{"class":480,"line":481},[478,139155,51991],{"class":51680},[478,139157,16137],{"class":714},[478,139159,139160,139162,139164,139166,139168],{"class":480,"line":565},[478,139161,70850],{"class":495},[478,139163,51817],{"class":714},[478,139165,895],{"class":495},[478,139167,51936],{"class":495},[478,139169,1859],{"class":714},[478,139171,139172],{"class":480,"line":579},[478,139173,2133],{"class":714},[19,139175,139176,139177,139180],{},"4 号盒子是 ",[475,139178,139179],{},"shopcar"," 购物车模块",[1702,139182,139183,139188,139191,139194],{},[32,139184,123715,139185,139187],{},[475,139186,139179],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[32,139189,139190],{},"count 统计部分用绝对定位做",[32,139192,139193],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[32,139195,139196],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139198,138771],{},[469,139200,139201],{"className":126932,"code":132364,"language":126934,"meta":54,"style":54},[475,139202,139203,139207,139221,139225,139239,139243,139257,139261,139275,139279],{"__ignoreMap":54},[478,139204,139205],{"class":480,"line":481},[478,139206,132371],{"class":770},[478,139208,139209,139211,139213,139215,139217,139219],{"class":480,"line":565},[478,139210,132376],{"class":484},[478,139212,80187],{"class":714},[478,139214,129292],{"class":495},[478,139216,51817],{"class":714},[478,139218,132385],{"class":495},[478,139220,129862],{"class":714},[478,139222,139223],{"class":480,"line":579},[478,139224,132392],{"class":770},[478,139226,139227,139229,139231,139233,139235,139237],{"class":480,"line":593},[478,139228,132397],{"class":484},[478,139230,80187],{"class":714},[478,139232,129292],{"class":495},[478,139234,51817],{"class":714},[478,139236,55144],{"class":495},[478,139238,129862],{"class":714},[478,139240,139241],{"class":480,"line":1769},[478,139242,132412],{"class":770},[478,139244,139245,139247,139249,139251,139253,139255],{"class":480,"line":1783},[478,139246,132417],{"class":484},[478,139248,80187],{"class":714},[478,139250,129292],{"class":495},[478,139252,51817],{"class":714},[478,139254,55211],{"class":495},[478,139256,129862],{"class":714},[478,139258,139259],{"class":480,"line":1789},[478,139260,132432],{"class":770},[478,139262,139263,139265,139267,139269,139271,139273],{"class":480,"line":1880},[478,139264,132437],{"class":484},[478,139266,80187],{"class":714},[478,139268,129292],{"class":495},[478,139270,51817],{"class":714},[478,139272,86613],{"class":495},[478,139274,129862],{"class":714},[478,139276,139277],{"class":480,"line":1886},[478,139278,132452],{"class":770},[478,139280,139281,139283,139285,139287,139289,139291],{"class":480,"line":1898},[478,139282,132457],{"class":484},[478,139284,80187],{"class":714},[478,139286,129292],{"class":495},[478,139288,51817],{"class":714},[478,139290,132466],{"class":495},[478,139292,129862],{"class":714},[19,139294,138811],{},[469,139296,139297],{"className":126932,"code":132364,"language":126934,"meta":54,"style":54},[475,139298,139299,139303,139317,139321,139335,139339,139353,139357,139371,139375],{"__ignoreMap":54},[478,139300,139301],{"class":480,"line":481},[478,139302,132371],{"class":770},[478,139304,139305,139307,139309,139311,139313,139315],{"class":480,"line":565},[478,139306,132376],{"class":484},[478,139308,80187],{"class":714},[478,139310,129292],{"class":495},[478,139312,51817],{"class":714},[478,139314,132385],{"class":495},[478,139316,129862],{"class":714},[478,139318,139319],{"class":480,"line":579},[478,139320,132392],{"class":770},[478,139322,139323,139325,139327,139329,139331,139333],{"class":480,"line":593},[478,139324,132397],{"class":484},[478,139326,80187],{"class":714},[478,139328,129292],{"class":495},[478,139330,51817],{"class":714},[478,139332,55144],{"class":495},[478,139334,129862],{"class":714},[478,139336,139337],{"class":480,"line":1769},[478,139338,132412],{"class":770},[478,139340,139341,139343,139345,139347,139349,139351],{"class":480,"line":1783},[478,139342,132417],{"class":484},[478,139344,80187],{"class":714},[478,139346,129292],{"class":495},[478,139348,51817],{"class":714},[478,139350,55211],{"class":495},[478,139352,129862],{"class":714},[478,139354,139355],{"class":480,"line":1789},[478,139356,132432],{"class":770},[478,139358,139359,139361,139363,139365,139367,139369],{"class":480,"line":1880},[478,139360,132437],{"class":484},[478,139362,80187],{"class":714},[478,139364,129292],{"class":495},[478,139366,51817],{"class":714},[478,139368,86613],{"class":495},[478,139370,129862],{"class":714},[478,139372,139373],{"class":480,"line":1886},[478,139374,132452],{"class":770},[478,139376,139377,139379,139381,139383,139385,139387],{"class":480,"line":1898},[478,139378,132457],{"class":484},[478,139380,80187],{"class":714},[478,139382,129292],{"class":495},[478,139384,51817],{"class":714},[478,139386,132466],{"class":495},[478,139388,129862],{"class":714},[129,139390,139392,139393,139395],{"id":139391},"_1544-nav导航模块制作","15.4.4 ",[475,139394,54093],{},"导航模块制作",[52,139397],{"style":126788,"src":139398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139400,139401,139403],{},[475,139402,54093],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139405,139406,139407],{},"1 号盒子左侧浮动，",[475,139408,139409],{},"dropdown",[1702,139411,139412,139422,139430,139436,139444,139454,139462,139473],{},[32,139413,139414,139415,101398,139418,139421],{},"1号盒子有讲究，根据相关性 里面包含 ",[475,139416,139417],{},".dt",[475,139419,139420],{},".dd"," 两个盒子",[32,139423,139424,139426,139427,139429],{},[475,139425,139417],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[475,139428,139420],{}," 挤到下面去了",[32,139431,139432,139433,139435],{},"给 ",[475,139434,139420],{}," 盒子设置宽度 和 高度，以及背景颜色",[32,139437,139432,139438,139440,139441,120617],{},[475,139439,139420],{}," 盒子里面定义 无序列表 （",[475,139442,139443],{},"ul > li > a",[32,139445,139446,139447,139449,139450,139453],{},"每个 ",[475,139448,32],{}," 都有一个高度（",[475,139451,139452],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[32,139455,139432,139456,139458,139459,120617],{},[475,139457,32],{}," 里面的a设置文字大小（",[475,139460,139461],{},"14px",[32,139463,139432,139464,139466,139467,139469,139470,139472],{},[475,139465,32],{}," 设置 ",[475,139468,128093],{},"，当鼠标移入的时候，让",[475,139471,32],{},"的背景变成白色，让里面的文字变成红色",[32,139474,139475,139477,139478,139480,139481,139483],{},[475,139476,32],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[475,139479,32],{},"的右侧，那么给",[475,139482,32],{},"设置相对定位",[19,139485,139486],{},"一定要注意相关性",[19,139488,138771],{},[469,139490,139491],{"className":126932,"code":138774,"language":126934,"meta":54,"style":54},[475,139492,139493,139501,139511,139521],{"__ignoreMap":54},[478,139494,139495,139497,139499],{"class":480,"line":481},[478,139496,51991],{"class":51680},[478,139498,137933],{"class":484},[478,139500,16137],{"class":714},[478,139502,139503,139505,139507,139509],{"class":480,"line":565},[478,139504,137940],{"class":495},[478,139506,51817],{"class":714},[478,139508,8218],{"class":488},[478,139510,1859],{"class":714},[478,139512,139513,139515,139517,139519],{"class":480,"line":579},[478,139514,128548],{"class":495},[478,139516,51817],{"class":714},[478,139518,61249],{"class":495},[478,139520,1859],{"class":714},[478,139522,139523],{"class":480,"line":593},[478,139524,2133],{"class":714},[19,139526,138811],{},[469,139528,139529],{"className":126932,"code":138774,"language":126934,"meta":54,"style":54},[475,139530,139531,139539,139549,139559],{"__ignoreMap":54},[478,139532,139533,139535,139537],{"class":480,"line":481},[478,139534,51991],{"class":51680},[478,139536,137933],{"class":484},[478,139538,16137],{"class":714},[478,139540,139541,139543,139545,139547],{"class":480,"line":565},[478,139542,137940],{"class":495},[478,139544,51817],{"class":714},[478,139546,8218],{"class":488},[478,139548,1859],{"class":714},[478,139550,139551,139553,139555,139557],{"class":480,"line":579},[478,139552,128548],{"class":495},[478,139554,51817],{"class":714},[478,139556,61249],{"class":495},[478,139558,1859],{"class":714},[478,139560,139561],{"class":480,"line":593},[478,139562,2133],{"class":714},[19,139564,139565],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139567,139568,139569,139572],{},"2 号盒子左侧浮动，",[475,139570,139571],{},"navitems"," 导航栏组",[1702,139574,139575,139580,139589],{},[32,139576,139577,139578],{},"里面结构是 ",[475,139579,139443],{},[32,139581,139582,139583,139585,139586,139588],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[475,139584,518],{},"左右的",[475,139587,31263],{},"把两侧撑开",[32,139590,139591],{},"让文字垂直居中（行高等于高度）",[52,139593],{"style":126788,"src":139594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139596,139597],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139599,138771],{},[469,139601,139603],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},".box {\n  float: left;\n}\n",[475,139604,139605,139611,139621],{"__ignoreMap":54},[478,139606,139607,139609],{"class":480,"line":481},[478,139608,130780],{"class":484},[478,139610,16137],{"class":714},[478,139612,139613,139615,139617,139619],{"class":480,"line":565},[478,139614,131412],{"class":495},[478,139616,51817],{"class":714},[478,139618,382],{"class":495},[478,139620,1859],{"class":714},[478,139622,139623],{"class":480,"line":579},[478,139624,2133],{"class":714},[19,139626,138811],{},[469,139628,139629],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,139630,139631,139637,139647],{"__ignoreMap":54},[478,139632,139633,139635],{"class":480,"line":481},[478,139634,130780],{"class":484},[478,139636,16137],{"class":714},[478,139638,139639,139641,139643,139645],{"class":480,"line":565},[478,139640,131412],{"class":495},[478,139642,51817],{"class":714},[478,139644,382],{"class":495},[478,139646,1859],{"class":714},[478,139648,139649],{"class":480,"line":579},[478,139650,2133],{"class":714},[19,139652,139653],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[52,139655],{"style":126788,"src":139656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[469,139658,139659],{"className":126932,"code":131089,"language":126934,"meta":54,"style":54},[475,139660,139661,139667,139683],{"__ignoreMap":54},[478,139662,139663,139665],{"class":480,"line":481},[478,139664,51991],{"class":51680},[478,139666,16137],{"class":714},[478,139668,139669,139671,139673,139675,139677,139679,139681],{"class":480,"line":565},[478,139670,71276],{"class":495},[478,139672,51817],{"class":714},[478,139674,193],{"class":495},[478,139676,51872],{"class":710},[478,139678,51901],{"class":495},[478,139680,130324],{"class":495},[478,139682,1859],{"class":714},[478,139684,139685],{"class":480,"line":579},[478,139686,2133],{"class":714},[129,139688,139690],{"id":139689},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[52,139692],{"style":126788,"src":139693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1702,139695,139696,139701,139706],{},[32,139697,139698,139700],{},[475,139699,132135],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[32,139702,139703,139705],{},[475,139704,132135],{}," 里面有一个大的版心",[32,139707,139708,139709,139712,139713],{},"版心里面包含 1 号盒子，",[475,139710,139711],{},"mod_service"," 是服务模块，mod 是模块的意思",[1702,139714,139715,139720,139733,139749,139754],{},[32,139716,139432,139717,139719],{},[475,139718,139711],{}," 设置高度（80px）和下边框",[32,139721,139722,139723,139726,139727,139729,139730,139732],{},"在里面定义 ",[475,139724,139725],{},"ul > li"," ,每个",[475,139728,32],{}," 宽度是300px 高度是 50px，给每个",[475,139731,32],{},"设置35px的左内边距",[32,139734,139735,139736,139738,139739,139741,139742,139744,139745,18975,139747,120617],{},"在每个",[475,139737,32],{},"里面，放一个 ",[475,139740,23475],{},"（里面放图标），一个",[475,139743,51991],{},"（里面放",[475,139746,51991],{},[475,139748,19],{},[32,139750,139432,139751,139753],{},[475,139752,23475],{},"设置浮动，让h5与这个div左右排列",[32,139755,139756],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139758,138771],{},[469,139760,139762],{"className":126932,"code":139761,"language":126934,"meta":54,"style":54},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[475,139763,139764,139770,139782,139794,139821],{"__ignoreMap":54},[478,139765,139766,139768],{"class":480,"line":481},[478,139767,134689],{"class":484},[478,139769,16137],{"class":714},[478,139771,139772,139774,139776,139778,139780],{"class":480,"line":565},[478,139773,70948],{"class":495},[478,139775,51817],{"class":714},[478,139777,1396],{"class":495},[478,139779,51872],{"class":710},[478,139781,1859],{"class":714},[478,139783,139784,139786,139788,139790,139792],{"class":480,"line":579},[478,139785,71168],{"class":495},[478,139787,51817],{"class":714},[478,139789,1396],{"class":495},[478,139791,51872],{"class":710},[478,139793,1859],{"class":714},[478,139795,139796,139798,139800,139802,139804,139806,139808,139810,139813,139815,139817,139819],{"class":480,"line":593},[478,139797,70991],{"class":495},[478,139799,51817],{"class":714},[478,139801,62106],{"class":495},[478,139803,263],{"class":714},[478,139805,134728],{"class":5782},[478,139807,14280],{"class":714},[478,139809,62116],{"class":495},[478,139811,139812],{"class":495}," -10",[478,139814,51872],{"class":710},[478,139816,134747],{"class":495},[478,139818,51872],{"class":710},[478,139820,1859],{"class":714},[478,139822,139823],{"class":480,"line":1769},[478,139824,2133],{"class":714},[19,139826,138811],{},[469,139828,139829],{"className":126932,"code":139761,"language":126934,"meta":54,"style":54},[475,139830,139831,139837,139849,139861,139887],{"__ignoreMap":54},[478,139832,139833,139835],{"class":480,"line":481},[478,139834,134689],{"class":484},[478,139836,16137],{"class":714},[478,139838,139839,139841,139843,139845,139847],{"class":480,"line":565},[478,139840,70948],{"class":495},[478,139842,51817],{"class":714},[478,139844,1396],{"class":495},[478,139846,51872],{"class":710},[478,139848,1859],{"class":714},[478,139850,139851,139853,139855,139857,139859],{"class":480,"line":579},[478,139852,71168],{"class":495},[478,139854,51817],{"class":714},[478,139856,1396],{"class":495},[478,139858,51872],{"class":710},[478,139860,1859],{"class":714},[478,139862,139863,139865,139867,139869,139871,139873,139875,139877,139879,139881,139883,139885],{"class":480,"line":593},[478,139864,70991],{"class":495},[478,139866,51817],{"class":714},[478,139868,62106],{"class":495},[478,139870,263],{"class":714},[478,139872,134728],{"class":5782},[478,139874,14280],{"class":714},[478,139876,62116],{"class":495},[478,139878,139812],{"class":495},[478,139880,51872],{"class":710},[478,139882,134747],{"class":495},[478,139884,51872],{"class":710},[478,139886,1859],{"class":714},[478,139888,139889],{"class":480,"line":1769},[478,139890,2133],{"class":714},[19,139892,139893],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1702,139895,139896,139899,139905,139911,139923],{},[32,139897,139898],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[32,139900,139901,139902,120617],{},"里面的布局利用 自定义列表来实现（",[475,139903,139904],{},"dl > dt + dd",[32,139906,139432,139907,139910],{},[475,139908,139909],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[32,139912,139432,139913,139916,139917,18975,139919,139922],{},[475,139914,139915],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[475,139918,139915],{},[475,139920,139921],{},"dd","之间有些距离",[32,139924,139925],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139927,138771],{},[469,139929,139930],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},[475,139931,139932,139938,139950],{"__ignoreMap":54},[478,139933,139934,139936],{"class":480,"line":481},[478,139935,51991],{"class":51680},[478,139937,16137],{"class":714},[478,139939,139940,139942,139944,139946,139948],{"class":480,"line":565},[478,139941,70850],{"class":495},[478,139943,51817],{"class":714},[478,139945,895],{"class":495},[478,139947,51936],{"class":495},[478,139949,1859],{"class":714},[478,139951,139952],{"class":480,"line":579},[478,139953,2133],{"class":714},[19,139955,138811],{},[469,139957,139958],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},[475,139959,139960,139966,139978],{"__ignoreMap":54},[478,139961,139962,139964],{"class":480,"line":481},[478,139963,51991],{"class":51680},[478,139965,16137],{"class":714},[478,139967,139968,139970,139972,139974,139976],{"class":480,"line":565},[478,139969,70850],{"class":495},[478,139971,51817],{"class":714},[478,139973,895],{"class":495},[478,139975,51936],{"class":495},[478,139977,1859],{"class":714},[478,139979,139980],{"class":480,"line":579},[478,139981,2133],{"class":714},[19,139983,139984],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1702,139986,139987,139996,139999,140010],{},[32,139988,139989,139990,139992,139993,139995],{},"分为上下两块，上面是 ",[475,139991,132152],{}," 友情链接，下面是 ",[475,139994,132145],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[32,139997,139998],{},"把内容分别复制到相应模块中",[32,140000,139432,140001,140003,140004,140006,140007,140009],{},[475,140002,132152],{}," 设置 15px 的下外边距，给",[475,140005,132152],{}," 里面 的 ",[475,140008,518],{}," 标签设置 左右 3px 的外边距",[32,140011,140012,140013,140015],{},"给",[475,140014,132145],{}," 设置 20px 的行高",[19,140017,138771],{},[469,140019,140020],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},[475,140021,140022,140028,140040],{"__ignoreMap":54},[478,140023,140024,140026],{"class":480,"line":481},[478,140025,51991],{"class":51680},[478,140027,16137],{"class":714},[478,140029,140030,140032,140034,140036,140038],{"class":480,"line":565},[478,140031,70850],{"class":495},[478,140033,51817],{"class":714},[478,140035,895],{"class":495},[478,140037,51936],{"class":495},[478,140039,1859],{"class":714},[478,140041,140042],{"class":480,"line":579},[478,140043,2133],{"class":714},[19,140045,138811],{},[469,140047,140048],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},[475,140049,140050,140056,140068],{"__ignoreMap":54},[478,140051,140052,140054],{"class":480,"line":481},[478,140053,51991],{"class":51680},[478,140055,16137],{"class":714},[478,140057,140058,140060,140062,140064,140066],{"class":480,"line":565},[478,140059,70850],{"class":495},[478,140061,51817],{"class":714},[478,140063,895],{"class":495},[478,140065,51936],{"class":495},[478,140067,1859],{"class":714},[478,140069,140070],{"class":480,"line":579},[478,140071,2133],{"class":714},[19,140073,140074],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[617,140076,140077],{},"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":54,"searchDepth":565,"depth":565,"links":140079},[140080,140081,140082,140089],{"id":138360,"depth":565,"text":138361},{"id":138379,"depth":565,"text":138380},{"id":138406,"depth":565,"text":138407,"children":140083},[140084,140085,140086,140087,140088],{"id":138410,"depth":579,"text":138411},{"id":138423,"depth":579,"text":138424},{"id":138447,"depth":579,"text":138448},{"id":138469,"depth":579,"text":138470},{"id":138541,"depth":579,"text":138542},{"id":138667,"depth":565,"text":138668,"children":140090},[140091,140092,140093,140094,140096],{"id":138671,"depth":579,"text":138672},{"id":138678,"depth":579,"text":138679},{"id":138850,"depth":579,"text":138851},{"id":139391,"depth":579,"text":140095},"15.4.4 nav导航模块制作",{"id":139689,"depth":579,"text":139690},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138352,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140103,"title":140104,"body":140105,"description":23942,"extension":638,"meta":142507,"navigation":640,"path":142508,"seo":142509,"stem":142510,"__hash__":142511},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140106,"toc":142484},[140107,140110,140114,140118,140130,140133,140136,140139,140150,140152,140176,140178,140202,140207,140210,140212,140248,140250,140286,140289,140294,140297,140300,140303,140333,140340,140343,140353,140355,140389,140392,140426,140432,140449,140451,140487,140489,140525,140530,140555,140557,140583,140585,140609,140616,140619,140683,140685,140727,140729,140769,140776,140781,140783,140813,140815,140845,140849,140852,140859,140871,140873,140899,140901,140925,140928,140930,140954,140960,140970,140972,141002,141004,141034,141041,141082,141084,141120,141122,141158,141162,141165,141168,141171,141177,141182,141185,141208,141211,141235,141238,141262,141267,141270,141273,141276,141279,141282,141356,141358,141388,141390,141420,141423,141426,141458,141462,141466,141480,141489,141492,141497,141499,141593,141595,141689,141712,141714,141738,141740,141764,141771,141774,141784,141786,141810,141815,141823,141825,141855,141860,141900,141902,141928,141930,141956,141960,141963,141968,141971,141975,141983,141990,141998,142000,142030,142032,142062,142070,142073,142076,142078,142108,142110,142140,142143,142148,142150,142174,142176,142200,142203,142288,142290,142314,142316,142340,142344,142346,142370,142372,142406,142410,142424,142427,142432,142435,142440,142443,142473,142481],[10,140108,140104],{"id":140109},"_16-品优购项目下篇-主体与页面开发",[14,140111,140113],{"id":140112},"_161-项目主体模块制作","16.1 项目主体模块制作",[129,140115,140117],{"id":140116},"_1611-首页制作","16.1.1 首页制作",[19,140119,140120,140122,140123,140125,140126,140129],{},[45,140121,102438],{}," 主体模块是 ",[45,140124,74438],{}," 里面专有的，注意需要新的样式文件 ",[45,140127,140128],{},"index.css，"," 就不要写在common.css中了",[52,140131],{"style":126788,"src":140132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[52,140134],{"style":126788,"src":140135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140137,140138],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1702,140140,140141,140144,140147],{},[32,140142,140143],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[32,140145,140146],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[32,140148,140149],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140151,138771],{},[469,140153,140154],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,140155,140156,140162,140172],{"__ignoreMap":54},[478,140157,140158,140160],{"class":480,"line":481},[478,140159,130780],{"class":484},[478,140161,16137],{"class":714},[478,140163,140164,140166,140168,140170],{"class":480,"line":565},[478,140165,131412],{"class":495},[478,140167,51817],{"class":714},[478,140169,382],{"class":495},[478,140171,1859],{"class":714},[478,140173,140174],{"class":480,"line":579},[478,140175,2133],{"class":714},[19,140177,138811],{},[469,140179,140180],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,140181,140182,140188,140198],{"__ignoreMap":54},[478,140183,140184,140186],{"class":480,"line":481},[478,140185,130780],{"class":484},[478,140187,16137],{"class":714},[478,140189,140190,140192,140194,140196],{"class":480,"line":565},[478,140191,131412],{"class":495},[478,140193,51817],{"class":714},[478,140195,382],{"class":495},[478,140197,1859],{"class":714},[478,140199,140200],{"class":480,"line":579},[478,140201,2133],{"class":714},[29,140203,140204],{},[32,140205,140206],{},"左侧focus模块制作",[52,140208],{"style":126788,"src":140209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140211,138771],{},[469,140213,140214],{"className":126932,"code":128255,"language":126934,"meta":54,"style":54},[475,140215,140216,140224,140234,140244],{"__ignoreMap":54},[478,140217,140218,140220,140222],{"class":480,"line":481},[478,140219,54201],{"class":51680},[478,140221,62280],{"class":484},[478,140223,16137],{"class":714},[478,140225,140226,140228,140230,140232],{"class":480,"line":565},[478,140227,128270],{"class":495},[478,140229,51817],{"class":714},[478,140231,55269],{"class":495},[478,140233,1859],{"class":714},[478,140235,140236,140238,140240,140242],{"class":480,"line":579},[478,140237,71178],{"class":495},[478,140239,51817],{"class":714},[478,140241,55117],{"class":495},[478,140243,1859],{"class":714},[478,140245,140246],{"class":480,"line":593},[478,140247,2133],{"class":714},[19,140249,138811],{},[469,140251,140252],{"className":126932,"code":128255,"language":126934,"meta":54,"style":54},[475,140253,140254,140262,140272,140282],{"__ignoreMap":54},[478,140255,140256,140258,140260],{"class":480,"line":481},[478,140257,54201],{"class":51680},[478,140259,62280],{"class":484},[478,140261,16137],{"class":714},[478,140263,140264,140266,140268,140270],{"class":480,"line":565},[478,140265,128270],{"class":495},[478,140267,51817],{"class":714},[478,140269,55269],{"class":495},[478,140271,1859],{"class":714},[478,140273,140274,140276,140278,140280],{"class":480,"line":579},[478,140275,71178],{"class":495},[478,140277,51817],{"class":714},[478,140279,55117],{"class":495},[478,140281,1859],{"class":714},[478,140283,140284],{"class":480,"line":593},[478,140285,2133],{"class":714},[19,140287,140288],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[29,140290,140291],{"start":565},[32,140292,140293],{},"右侧newsflash模块制作",[52,140295],{"style":126788,"src":140296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140298,140299],{},"右侧的模块 分为上中下三个盒子",[19,140301,140302],{},"结构代码：",[469,140304,140305],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,140306,140307],{"__ignoreMap":54},[478,140308,140309,140311,140313,140315,140317,140319,140321,140323,140325,140327,140329,140331],{"class":480,"line":481},[478,140310,1605],{"class":714},[478,140312,52],{"class":51680},[478,140314,55619],{"class":484},[478,140316,759],{"class":714},[478,140318,134449],{"class":488},[478,140320,55627],{"class":484},[478,140322,759],{"class":714},[478,140324,134456],{"class":488},[478,140326,134459],{"class":484},[478,140328,759],{"class":714},[478,140330,134464],{"class":488},[478,140332,51687],{"class":714},[19,140334,140335,140336,140339],{},"1 号盒子为 ",[475,140337,140338],{},"news"," 新闻模块 高度为 165px",[52,140341],{"style":126788,"src":140342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140344,140345,140346,140349,140350],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[475,140347,140348],{},"news-hd","，下面是 ",[475,140351,140352],{},"news-bd",[19,140354,140302],{},[469,140356,140357],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,140358,140359,140363,140377,140381],{"__ignoreMap":54},[478,140360,140361],{"class":480,"line":481},[478,140362,131043],{"class":770},[478,140364,140365,140367,140369,140371,140373,140375],{"class":480,"line":565},[478,140366,1605],{"class":714},[478,140368,51991],{"class":51680},[478,140370,53866],{"class":484},[478,140372,759],{"class":714},[478,140374,131056],{"class":488},[478,140376,51687],{"class":714},[478,140378,140379],{"class":480,"line":579},[478,140380,131063],{"class":714},[478,140382,140383,140385,140387],{"class":480,"line":593},[478,140384,52165],{"class":714},[478,140386,51991],{"class":51680},[478,140388,51687],{"class":714},[19,140390,140391],{},"样式代码：",[469,140393,140394],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,140395,140396,140400,140414,140418],{"__ignoreMap":54},[478,140397,140398],{"class":480,"line":481},[478,140399,131043],{"class":770},[478,140401,140402,140404,140406,140408,140410,140412],{"class":480,"line":565},[478,140403,1605],{"class":714},[478,140405,51991],{"class":51680},[478,140407,53866],{"class":484},[478,140409,759],{"class":714},[478,140411,131056],{"class":488},[478,140413,51687],{"class":714},[478,140415,140416],{"class":480,"line":579},[478,140417,131063],{"class":714},[478,140419,140420,140422,140424],{"class":480,"line":593},[478,140421,52165],{"class":714},[478,140423,51991],{"class":51680},[478,140425,51687],{"class":714},[19,140427,140428,140429,140431],{},"上面是",[475,140430,140348],{},"，设置高度是 33px，设置下边框",[1702,140433,140434,140440],{},[32,140435,140436,140437,140439],{},"里面放一个",[475,140438,23475],{}," 标题",[32,140441,140442,140443,140445,140446,140448],{},"放一个a",[475,140444,103073],{},"，内容是 更多，然后让 ",[475,140447,518],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140450,140302],{},[469,140452,140453],{"className":126932,"code":138774,"language":126934,"meta":54,"style":54},[475,140454,140455,140463,140473,140483],{"__ignoreMap":54},[478,140456,140457,140459,140461],{"class":480,"line":481},[478,140458,51991],{"class":51680},[478,140460,137933],{"class":484},[478,140462,16137],{"class":714},[478,140464,140465,140467,140469,140471],{"class":480,"line":565},[478,140466,137940],{"class":495},[478,140468,51817],{"class":714},[478,140470,8218],{"class":488},[478,140472,1859],{"class":714},[478,140474,140475,140477,140479,140481],{"class":480,"line":579},[478,140476,128548],{"class":495},[478,140478,51817],{"class":714},[478,140480,61249],{"class":495},[478,140482,1859],{"class":714},[478,140484,140485],{"class":480,"line":593},[478,140486,2133],{"class":714},[19,140488,140391],{},[469,140490,140491],{"className":126932,"code":138774,"language":126934,"meta":54,"style":54},[475,140492,140493,140501,140511,140521],{"__ignoreMap":54},[478,140494,140495,140497,140499],{"class":480,"line":481},[478,140496,51991],{"class":51680},[478,140498,137933],{"class":484},[478,140500,16137],{"class":714},[478,140502,140503,140505,140507,140509],{"class":480,"line":565},[478,140504,137940],{"class":495},[478,140506,51817],{"class":714},[478,140508,8218],{"class":488},[478,140510,1859],{"class":714},[478,140512,140513,140515,140517,140519],{"class":480,"line":579},[478,140514,128548],{"class":495},[478,140516,51817],{"class":714},[478,140518,61249],{"class":495},[478,140520,1859],{"class":714},[478,140522,140523],{"class":480,"line":593},[478,140524,2133],{"class":714},[19,140526,140527,140528],{},"下面是",[475,140529,140352],{},[1702,140531,140532,140540],{},[32,140533,140534,140535,101398,140537,140539],{},"里面包含 ",[475,140536,1702],{},[475,140538,32],{}," 还有链接",[32,140541,140012,140542,140544,140545,140547,140548,140551,140552],{},[475,140543,32],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[475,140546,131598],{}," 2.设置 ",[475,140549,140550],{},"white-space: nowrap;"," 3. 设置 ",[475,140553,140554],{},"text-overflow: ellipsis;",[19,140556,140302],{},[469,140558,140560],{"className":126932,"code":140559,"language":126934,"meta":54,"style":54},"div {\n  overflow: hidden;\n}\n",[475,140561,140562,140568,140579],{"__ignoreMap":54},[478,140563,140564,140566],{"class":480,"line":481},[478,140565,51991],{"class":51680},[478,140567,16137],{"class":714},[478,140569,140570,140573,140575,140577],{"class":480,"line":565},[478,140571,140572],{"class":495},"  overflow",[478,140574,51817],{"class":714},[478,140576,62094],{"class":495},[478,140578,1859],{"class":714},[478,140580,140581],{"class":480,"line":579},[478,140582,2133],{"class":714},[19,140584,140391],{},[469,140586,140587],{"className":126932,"code":140559,"language":126934,"meta":54,"style":54},[475,140588,140589,140595,140605],{"__ignoreMap":54},[478,140590,140591,140593],{"class":480,"line":481},[478,140592,51991],{"class":51680},[478,140594,16137],{"class":714},[478,140596,140597,140599,140601,140603],{"class":480,"line":565},[478,140598,140572],{"class":495},[478,140600,51817],{"class":714},[478,140602,62094],{"class":495},[478,140604,1859],{"class":714},[478,140606,140607],{"class":480,"line":579},[478,140608,2133],{"class":714},[19,140610,140611,140612,140615],{},"2 号盒子为 ",[475,140613,140614],{},"lifeservice"," 生活服务模块 高度为 209px",[52,140617],{"style":126788,"src":140618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1702,140620,140621,140624,140634,140658,140669],{},[32,140622,140623],{},"设置边框（左右下边框）",[32,140625,140626,140627,140630,140631,140633],{},"里面的内容 是 ",[475,140628,140629],{},"ul > 12*li","，给",[475,140632,32],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[32,140635,140636,140637],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1702,140638,140639,140644,140653],{},[32,140640,140641,140643],{},[475,140642,140614],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[32,140645,140646,140647,140649,140650,140652],{},"可以让 ",[475,140648,140614],{}," 里面的 ",[475,140651,1702],{}," 宽度为 252，就可以装的下 4 个 小 li",[32,140654,140655,140657],{},[475,140656,140614],{}," 盒子 overflow 隐藏多余的部分就可以了",[32,140659,116847,140660,140662,140663,140665,140666,140668],{},[475,140661,32],{}," 里面放一个 ",[475,140664,1141],{},"（里面放图标），下面的文本用 ",[475,140667,19],{}," 标签包裹",[32,140670,139432,140671,140673,140674,140676,140677,139466,140679,140682],{},[475,140672,1141],{}," 设置 24px宽和28px的高（注意 ",[475,140675,1141],{}," 是行内元素， 转成行内块），给 ",[475,140678,32],{},[475,140680,140681],{},"text-align:center"," 让里面内容居中显示",[19,140684,140302],{},[469,140686,140688],{"className":126932,"code":140687,"language":126934,"meta":54,"style":54},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[475,140689,140690,140708,140713,140723],{"__ignoreMap":54},[478,140691,140692,140694,140696,140698,140700,140702,140704,140706],{"class":480,"line":481},[478,140693,478],{"class":51680},[478,140695,13001],{"class":714},[478,140697,518],{"class":51680},[478,140699,13001],{"class":714},[478,140701,183],{"class":51680},[478,140703,13001],{"class":714},[478,140705,45],{"class":51680},[478,140707,16137],{"class":714},[478,140709,140710],{"class":480,"line":565},[478,140711,140712],{"class":770},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[478,140714,140715,140717,140719,140721],{"class":480,"line":579},[478,140716,128548],{"class":495},[478,140718,51817],{"class":714},[478,140720,128610],{"class":495},[478,140722,1859],{"class":714},[478,140724,140725],{"class":480,"line":593},[478,140726,2133],{"class":714},[19,140728,140391],{},[469,140730,140731],{"className":126932,"code":140687,"language":126934,"meta":54,"style":54},[475,140732,140733,140751,140755,140765],{"__ignoreMap":54},[478,140734,140735,140737,140739,140741,140743,140745,140747,140749],{"class":480,"line":481},[478,140736,478],{"class":51680},[478,140738,13001],{"class":714},[478,140740,518],{"class":51680},[478,140742,13001],{"class":714},[478,140744,183],{"class":51680},[478,140746,13001],{"class":714},[478,140748,45],{"class":51680},[478,140750,16137],{"class":714},[478,140752,140753],{"class":480,"line":565},[478,140754,140712],{"class":770},[478,140756,140757,140759,140761,140763],{"class":480,"line":579},[478,140758,128548],{"class":495},[478,140760,51817],{"class":714},[478,140762,128610],{"class":495},[478,140764,1859],{"class":714},[478,140766,140767],{"class":480,"line":593},[478,140768,2133],{"class":714},[19,140770,140771,140772,140775],{},"3 号盒子为 ",[475,140773,140774],{},"bargain"," 特价商品",[1702,140777,140778],{},[32,140779,140780],{},"这个比较简单，直接插入一张图片即可",[19,140782,140302],{},[469,140784,140785],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,140786,140787],{"__ignoreMap":54},[478,140788,140789,140791,140793,140795,140797,140799,140801,140803,140805,140807,140809,140811],{"class":480,"line":481},[478,140790,1605],{"class":714},[478,140792,52],{"class":51680},[478,140794,55619],{"class":484},[478,140796,759],{"class":714},[478,140798,134449],{"class":488},[478,140800,55627],{"class":484},[478,140802,759],{"class":714},[478,140804,134456],{"class":488},[478,140806,134459],{"class":484},[478,140808,759],{"class":714},[478,140810,134464],{"class":488},[478,140812,51687],{"class":714},[19,140814,140391],{},[469,140816,140817],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,140818,140819],{"__ignoreMap":54},[478,140820,140821,140823,140825,140827,140829,140831,140833,140835,140837,140839,140841,140843],{"class":480,"line":481},[478,140822,1605],{"class":714},[478,140824,52],{"class":51680},[478,140826,55619],{"class":484},[478,140828,759],{"class":714},[478,140830,134449],{"class":488},[478,140832,55627],{"class":484},[478,140834,759],{"class":714},[478,140836,134456],{"class":488},[478,140838,134459],{"class":484},[478,140840,759],{"class":714},[478,140842,134464],{"class":488},[478,140844,51687],{"class":714},[129,140846,140848],{"id":140847},"_1612-推荐模块制作","16.1.2 推荐模块制作",[52,140850],{"style":126788,"src":140851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140853,140854,140855,140858],{},"大盒子 ",[475,140856,140857],{},"recom"," 推荐模块 recommend",[1702,140860,140861],{},[32,140862,140863,140864,140866,140867,140870],{},"给这个 ",[475,140865,140857],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[475,140868,140869],{},"#ebebeb","），设置距离上边 12px",[19,140872,140302],{},[469,140874,140876],{"className":126932,"code":140875,"language":126934,"meta":54,"style":54},"div {\n  background-color: #f0f0f0;\n}\n",[475,140877,140878,140884,140895],{"__ignoreMap":54},[478,140879,140880,140882],{"class":480,"line":481},[478,140881,51991],{"class":51680},[478,140883,16137],{"class":714},[478,140885,140886,140888,140890,140893],{"class":480,"line":565},[478,140887,71258],{"class":495},[478,140889,51817],{"class":714},[478,140891,140892],{"class":495},"#f0f0f0",[478,140894,1859],{"class":714},[478,140896,140897],{"class":480,"line":579},[478,140898,2133],{"class":714},[19,140900,140391],{},[469,140902,140903],{"className":126932,"code":140875,"language":126934,"meta":54,"style":54},[475,140904,140905,140911,140921],{"__ignoreMap":54},[478,140906,140907,140909],{"class":480,"line":481},[478,140908,51991],{"class":51680},[478,140910,16137],{"class":714},[478,140912,140913,140915,140917,140919],{"class":480,"line":565},[478,140914,71258],{"class":495},[478,140916,51817],{"class":714},[478,140918,140892],{"class":495},[478,140920,1859],{"class":714},[478,140922,140923],{"class":480,"line":579},[478,140924,2133],{"class":714},[19,140926,140927],{},"里面包含 2 个盒子， 浮动即可",[19,140929,140302],{},[469,140931,140932],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,140933,140934,140940,140950],{"__ignoreMap":54},[478,140935,140936,140938],{"class":480,"line":481},[478,140937,130780],{"class":484},[478,140939,16137],{"class":714},[478,140941,140942,140944,140946,140948],{"class":480,"line":565},[478,140943,131412],{"class":495},[478,140945,51817],{"class":714},[478,140947,382],{"class":495},[478,140949,1859],{"class":714},[478,140951,140952],{"class":480,"line":579},[478,140953,2133],{"class":714},[19,140955,140956,140957],{},"1 号盒子 ",[475,140958,140959],{},"recom_hd",[1702,140961,140962,140965],{},[32,140963,140964],{},"设置宽度205px，高度163px",[32,140966,140436,140967,140969],{},[475,140968,52],{},"标签，插入图片即可",[19,140971,140302],{},[469,140973,140974],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,140975,140976],{"__ignoreMap":54},[478,140977,140978,140980,140982,140984,140986,140988,140990,140992,140994,140996,140998,141000],{"class":480,"line":481},[478,140979,1605],{"class":714},[478,140981,52],{"class":51680},[478,140983,55619],{"class":484},[478,140985,759],{"class":714},[478,140987,134449],{"class":488},[478,140989,55627],{"class":484},[478,140991,759],{"class":714},[478,140993,134456],{"class":488},[478,140995,134459],{"class":484},[478,140997,759],{"class":714},[478,140999,134464],{"class":488},[478,141001,51687],{"class":714},[19,141003,140391],{},[469,141005,141006],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,141007,141008],{"__ignoreMap":54},[478,141009,141010,141012,141014,141016,141018,141020,141022,141024,141026,141028,141030,141032],{"class":480,"line":481},[478,141011,1605],{"class":714},[478,141013,52],{"class":51680},[478,141015,55619],{"class":484},[478,141017,759],{"class":714},[478,141019,134449],{"class":488},[478,141021,55627],{"class":484},[478,141023,759],{"class":714},[478,141025,134456],{"class":488},[478,141027,134459],{"class":484},[478,141029,759],{"class":714},[478,141031,134464],{"class":488},[478,141033,51687],{"class":714},[19,141035,141036,141037,141040],{},"2 号盒子 ",[475,141038,141039],{},"recom_bd"," ，注意里面的小竖线",[1702,141042,141043,141054,141057,141062,141067],{},[32,141044,141045,141046,141048,141049,141051,141052],{},"右侧结构里面放 ",[475,141047,1702],{}," 包含 4个 ",[475,141050,32],{},"，每个li里面包含一个",[475,141053,52],{},[32,141055,141056],{},"直接利用切片工具把里面的内容当成一张图片",[32,141058,139432,141059,141061],{},[475,141060,32],{}," 设置浮动",[32,141063,139432,141064,141066],{},[475,141065,52],{}," 设置宽高，宽度 248px，高度 163px",[32,141068,141069,141070,140630,141073,141075,141076,141078,141079],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[475,141071,141072],{},"top 10px",[475,141074,32],{},"设置相对定位（注意，最后一个",[475,141077,32],{},"不用设置伪元素），可以利用 ",[475,141080,141081],{},"nth-child(-n+3){...}",[19,141083,140302],{},[469,141085,141086],{"className":126932,"code":138774,"language":126934,"meta":54,"style":54},[475,141087,141088,141096,141106,141116],{"__ignoreMap":54},[478,141089,141090,141092,141094],{"class":480,"line":481},[478,141091,51991],{"class":51680},[478,141093,137933],{"class":484},[478,141095,16137],{"class":714},[478,141097,141098,141100,141102,141104],{"class":480,"line":565},[478,141099,137940],{"class":495},[478,141101,51817],{"class":714},[478,141103,8218],{"class":488},[478,141105,1859],{"class":714},[478,141107,141108,141110,141112,141114],{"class":480,"line":579},[478,141109,128548],{"class":495},[478,141111,51817],{"class":714},[478,141113,61249],{"class":495},[478,141115,1859],{"class":714},[478,141117,141118],{"class":480,"line":593},[478,141119,2133],{"class":714},[19,141121,140391],{},[469,141123,141124],{"className":126932,"code":138774,"language":126934,"meta":54,"style":54},[475,141125,141126,141134,141144,141154],{"__ignoreMap":54},[478,141127,141128,141130,141132],{"class":480,"line":481},[478,141129,51991],{"class":51680},[478,141131,137933],{"class":484},[478,141133,16137],{"class":714},[478,141135,141136,141138,141140,141142],{"class":480,"line":565},[478,141137,137940],{"class":495},[478,141139,51817],{"class":714},[478,141141,8218],{"class":488},[478,141143,1859],{"class":714},[478,141145,141146,141148,141150,141152],{"class":480,"line":579},[478,141147,128548],{"class":495},[478,141149,51817],{"class":714},[478,141151,61249],{"class":495},[478,141153,1859],{"class":714},[478,141155,141156],{"class":480,"line":593},[478,141157,2133],{"class":714},[129,141159,141161],{"id":141160},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[52,141163],{"style":126788,"src":141164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141166,141167],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141169,141170],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141172,141173,141176],{},[475,141174,141175],{},"box_hd"," 制作",[19,141178,140956,141179,141181],{},[475,141180,141175],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[52,141183],{"style":126788,"src":141184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1702,141186,141187,141192,141197,141200],{},[32,141188,141189,141191],{},[475,141190,141175],{}," 给 30px 的高度，2个像素的下边框",[32,141193,141194,141195],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[475,141196,139443],{},[32,141198,141199],{},"左侧盒左浮动，右侧盒子右浮动",[32,141201,141202,141204,141205,141207],{},[475,141203,518],{},"标签之间的距离用左右的",[475,141206,31263],{},"撑开即可",[19,141209,141210],{},"结构代码",[469,141212,141213],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,141214,141215,141221,141231],{"__ignoreMap":54},[478,141216,141217,141219],{"class":480,"line":481},[478,141218,130780],{"class":484},[478,141220,16137],{"class":714},[478,141222,141223,141225,141227,141229],{"class":480,"line":565},[478,141224,131412],{"class":495},[478,141226,51817],{"class":714},[478,141228,382],{"class":495},[478,141230,1859],{"class":714},[478,141232,141233],{"class":480,"line":579},[478,141234,2133],{"class":714},[19,141236,141237],{},"样式代码",[469,141239,141240],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,141241,141242,141248,141258],{"__ignoreMap":54},[478,141243,141244,141246],{"class":480,"line":481},[478,141245,130780],{"class":484},[478,141247,16137],{"class":714},[478,141249,141250,141252,141254,141256],{"class":480,"line":565},[478,141251,131412],{"class":495},[478,141253,51817],{"class":714},[478,141255,382],{"class":495},[478,141257,1859],{"class":714},[478,141259,141260],{"class":480,"line":579},[478,141261,2133],{"class":714},[19,141263,141264,141176],{},[475,141265,141266],{},"box_bd",[19,141268,141269],{},"2 号盒子 box_bd，不要给高度",[52,141271],{"style":126788,"src":141272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141274,141275],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141277,141278],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141280,141281],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1702,141283,141284,141296,141312],{},[32,141285,141286,141288,141289,141292,141293,141295],{},[475,141287,141266],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[475,141290,141291],{},"tab_content","，在",[475,141294,141291],{}," 里面包裹tab选项卡对应的内容",[32,141297,141298,141299,141302,141303,141305,141306,141308,141309,141311],{},"内容被一个大盒子包裹（",[475,141300,141301],{},"tab_list_item","），里面是 ",[475,141304,1702],{}," 包裹 5个 ",[475,141307,32],{},"，每个",[475,141310,32],{},"设置对应的宽度，然后设置浮动",[32,141313,141314,141315,141317,141318,141320,141321],{},"而这5个",[475,141316,32],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[475,141319,32],{},"设置",[1702,141322,141323,141341,141344],{},[32,141324,141325,141326,141328,141329,141331,141332,141334,141335,141337,141338,141340],{},"第一个小 ",[475,141327,32],{}," 分为上下结构，上面是 ",[475,141330,1702],{}," 包裹 ",[475,141333,32],{}," ，",[475,141336,32],{},"里面包裹 ",[475,141339,518],{},"，下面插入一张图片",[32,141342,141343],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[32,141345,141346,141347,141349,141350,141352,141353,141355],{},"后面的小 ",[475,141348,32],{}," 里面先放一个",[475,141351,518],{},"标签，然后在",[475,141354,518],{},"标签里面插入图片即可",[19,141357,141210],{},[469,141359,141360],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,141361,141362],{"__ignoreMap":54},[478,141363,141364,141366,141368,141370,141372,141374,141376,141378,141380,141382,141384,141386],{"class":480,"line":481},[478,141365,1605],{"class":714},[478,141367,52],{"class":51680},[478,141369,55619],{"class":484},[478,141371,759],{"class":714},[478,141373,134449],{"class":488},[478,141375,55627],{"class":484},[478,141377,759],{"class":714},[478,141379,134456],{"class":488},[478,141381,134459],{"class":484},[478,141383,759],{"class":714},[478,141385,134464],{"class":488},[478,141387,51687],{"class":714},[19,141389,141237],{},[469,141391,141392],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,141393,141394],{"__ignoreMap":54},[478,141395,141396,141398,141400,141402,141404,141406,141408,141410,141412,141414,141416,141418],{"class":480,"line":481},[478,141397,1605],{"class":714},[478,141399,52],{"class":51680},[478,141401,55619],{"class":484},[478,141403,759],{"class":714},[478,141405,134449],{"class":488},[478,141407,55627],{"class":484},[478,141409,759],{"class":714},[478,141411,134456],{"class":488},[478,141413,134459],{"class":484},[478,141415,759],{"class":714},[478,141417,134464],{"class":488},[478,141419,51687],{"class":714},[19,141421,141422],{},"tab栏切换需求！！！！！！介绍：",[52,141424],{"style":126788,"src":141425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1702,141427,141428,141436,141442,141445],{},[32,141429,141430,141433,141434],{},[475,141431,141432],{},"tab","栏的布局是 ",[475,141435,139443],{},[32,141437,141438,141439,141441],{},"有多少个",[475,141440,141432],{},"选项卡，那么对应就有多少个内容",[32,141443,141444],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[32,141446,141447,141448,141451,141452,141454,141455,141457],{},"等后面我们学习了",[475,141449,141450],{},"js","之后，我们就会配合",[475,141453,141450],{},"来实现，",[475,141456,141432],{},"栏的切换",[14,141459,141461],{"id":141460},"_162-列表制作","16.2 列表制作",[129,141463,141465],{"id":141464},"_1621-准备工作","16.2.1 准备工作",[1702,141467,141468,141471,141474,141477],{},[32,141469,141470],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[32,141472,141473],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[32,141475,141476],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[32,141478,141479],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[129,141481,141483,141484,101398,141486,141488],{"id":141482},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[475,141485,131937],{},[475,141487,54093],{}," 修改",[52,141490],{"style":126788,"src":141491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1702,141493,141494],{},[32,141495,141496],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141498,140302],{},[469,141500,141501],{"className":126932,"code":132364,"language":126934,"meta":54,"style":54},[475,141502,141503,141507,141521,141525,141539,141543,141557,141561,141575,141579],{"__ignoreMap":54},[478,141504,141505],{"class":480,"line":481},[478,141506,132371],{"class":770},[478,141508,141509,141511,141513,141515,141517,141519],{"class":480,"line":565},[478,141510,132376],{"class":484},[478,141512,80187],{"class":714},[478,141514,129292],{"class":495},[478,141516,51817],{"class":714},[478,141518,132385],{"class":495},[478,141520,129862],{"class":714},[478,141522,141523],{"class":480,"line":579},[478,141524,132392],{"class":770},[478,141526,141527,141529,141531,141533,141535,141537],{"class":480,"line":593},[478,141528,132397],{"class":484},[478,141530,80187],{"class":714},[478,141532,129292],{"class":495},[478,141534,51817],{"class":714},[478,141536,55144],{"class":495},[478,141538,129862],{"class":714},[478,141540,141541],{"class":480,"line":1769},[478,141542,132412],{"class":770},[478,141544,141545,141547,141549,141551,141553,141555],{"class":480,"line":1783},[478,141546,132417],{"class":484},[478,141548,80187],{"class":714},[478,141550,129292],{"class":495},[478,141552,51817],{"class":714},[478,141554,55211],{"class":495},[478,141556,129862],{"class":714},[478,141558,141559],{"class":480,"line":1789},[478,141560,132432],{"class":770},[478,141562,141563,141565,141567,141569,141571,141573],{"class":480,"line":1880},[478,141564,132437],{"class":484},[478,141566,80187],{"class":714},[478,141568,129292],{"class":495},[478,141570,51817],{"class":714},[478,141572,86613],{"class":495},[478,141574,129862],{"class":714},[478,141576,141577],{"class":480,"line":1886},[478,141578,132452],{"class":770},[478,141580,141581,141583,141585,141587,141589,141591],{"class":480,"line":1898},[478,141582,132457],{"class":484},[478,141584,80187],{"class":714},[478,141586,129292],{"class":495},[478,141588,51817],{"class":714},[478,141590,132466],{"class":495},[478,141592,129862],{"class":714},[19,141594,140391],{},[469,141596,141597],{"className":126932,"code":132364,"language":126934,"meta":54,"style":54},[475,141598,141599,141603,141617,141621,141635,141639,141653,141657,141671,141675],{"__ignoreMap":54},[478,141600,141601],{"class":480,"line":481},[478,141602,132371],{"class":770},[478,141604,141605,141607,141609,141611,141613,141615],{"class":480,"line":565},[478,141606,132376],{"class":484},[478,141608,80187],{"class":714},[478,141610,129292],{"class":495},[478,141612,51817],{"class":714},[478,141614,132385],{"class":495},[478,141616,129862],{"class":714},[478,141618,141619],{"class":480,"line":579},[478,141620,132392],{"class":770},[478,141622,141623,141625,141627,141629,141631,141633],{"class":480,"line":593},[478,141624,132397],{"class":484},[478,141626,80187],{"class":714},[478,141628,129292],{"class":495},[478,141630,51817],{"class":714},[478,141632,55144],{"class":495},[478,141634,129862],{"class":714},[478,141636,141637],{"class":480,"line":1769},[478,141638,132412],{"class":770},[478,141640,141641,141643,141645,141647,141649,141651],{"class":480,"line":1783},[478,141642,132417],{"class":484},[478,141644,80187],{"class":714},[478,141646,129292],{"class":495},[478,141648,51817],{"class":714},[478,141650,55211],{"class":495},[478,141652,129862],{"class":714},[478,141654,141655],{"class":480,"line":1789},[478,141656,132432],{"class":770},[478,141658,141659,141661,141663,141665,141667,141669],{"class":480,"line":1880},[478,141660,132437],{"class":484},[478,141662,80187],{"class":714},[478,141664,129292],{"class":495},[478,141666,51817],{"class":714},[478,141668,86613],{"class":495},[478,141670,129862],{"class":714},[478,141672,141673],{"class":480,"line":1886},[478,141674,132452],{"class":770},[478,141676,141677,141679,141681,141683,141685,141687],{"class":480,"line":1898},[478,141678,132457],{"class":484},[478,141680,80187],{"class":714},[478,141682,129292],{"class":495},[478,141684,51817],{"class":714},[478,141686,132466],{"class":495},[478,141688,129862],{"class":714},[1702,141690,141691,141702],{},[32,141692,141693,141694,141697,141698,101398,141700],{},"1 号盒子左侧浮动 ",[475,141695,141696],{},"sk_list"," 里面包含 ",[475,141699,1702],{},[475,141701,32],{},[32,141703,141704,141705,141697,141708,101398,141710],{},"2 号盒子左侧浮动 ",[475,141706,141707],{},"sk_con",[475,141709,1702],{},[475,141711,32],{},[19,141713,140302],{},[469,141715,141716],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,141717,141718,141724,141734],{"__ignoreMap":54},[478,141719,141720,141722],{"class":480,"line":481},[478,141721,130780],{"class":484},[478,141723,16137],{"class":714},[478,141725,141726,141728,141730,141732],{"class":480,"line":565},[478,141727,131412],{"class":495},[478,141729,51817],{"class":714},[478,141731,382],{"class":495},[478,141733,1859],{"class":714},[478,141735,141736],{"class":480,"line":579},[478,141737,2133],{"class":714},[19,141739,140391],{},[469,141741,141742],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,141743,141744,141750,141760],{"__ignoreMap":54},[478,141745,141746,141748],{"class":480,"line":481},[478,141747,130780],{"class":484},[478,141749,16137],{"class":714},[478,141751,141752,141754,141756,141758],{"class":480,"line":565},[478,141753,131412],{"class":495},[478,141755,51817],{"class":714},[478,141757,382],{"class":495},[478,141759,1859],{"class":714},[478,141761,141762],{"class":480,"line":579},[478,141763,2133],{"class":714},[129,141765,141767,141768],{"id":141766},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[475,141769,141770],{},"sk_container",[52,141772],{"style":126788,"src":141773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1702,141775,141776,141781],{},[32,141777,140956,141778,141780],{},[475,141779,141770],{}," 给宽度 1200，不要给高度",[32,141782,141783],{},"一定不要忘记清除浮动",[19,141785,140302],{},[469,141787,141788],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,141789,141790,141796,141806],{"__ignoreMap":54},[478,141791,141792,141794],{"class":480,"line":481},[478,141793,130780],{"class":484},[478,141795,16137],{"class":714},[478,141797,141798,141800,141802,141804],{"class":480,"line":565},[478,141799,131412],{"class":495},[478,141801,51817],{"class":714},[478,141803,382],{"class":495},[478,141805,1859],{"class":714},[478,141807,141808],{"class":480,"line":579},[478,141809,2133],{"class":714},[29,141811,141812],{},[32,141813,141814],{},"sk_hd制作",[1702,141816,141817],{},[32,141818,141036,141819,141822],{},[475,141820,141821],{},"sk_hd"," ，插入图片即可",[19,141824,140302],{},[469,141826,141827],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,141828,141829],{"__ignoreMap":54},[478,141830,141831,141833,141835,141837,141839,141841,141843,141845,141847,141849,141851,141853],{"class":480,"line":481},[478,141832,1605],{"class":714},[478,141834,52],{"class":51680},[478,141836,55619],{"class":484},[478,141838,759],{"class":714},[478,141840,134449],{"class":488},[478,141842,55627],{"class":484},[478,141844,759],{"class":714},[478,141846,134456],{"class":488},[478,141848,134459],{"class":484},[478,141850,759],{"class":714},[478,141852,134464],{"class":488},[478,141854,51687],{"class":714},[29,141856,141857],{"start":565},[32,141858,141859],{},"sk_bd制作",[1702,141861,141862],{},[32,141863,141864,141865,141868,141869,101398,141871,141873],{},"3 号盒子 ",[475,141866,141867],{},"sk_bd"," ，里面包含很多的 ",[475,141870,1702],{},[475,141872,32],{},[1702,141874,141875,141884],{},[32,141876,141877,141878,141880,141881,141883],{},"当鼠标移入到 ",[475,141879,32],{}," 上面的时候显示红色的边框，在这里先给 ",[475,141882,32],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[32,141885,141886,141887,141889,141890,141892,141893,141896,141897,141899],{},"由于给每个 ",[475,141888,32],{}," 都设置了外边距，导致一行的最后一个 ",[475,141891,32],{}," 掉了下来，在这里我们利用 ",[475,141894,141895],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[475,141898,32],{},"，去掉外边距就好了",[19,141901,140302],{},[469,141903,141904],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},[475,141905,141906,141912,141924],{"__ignoreMap":54},[478,141907,141908,141910],{"class":480,"line":481},[478,141909,51991],{"class":51680},[478,141911,16137],{"class":714},[478,141913,141914,141916,141918,141920,141922],{"class":480,"line":565},[478,141915,70850],{"class":495},[478,141917,51817],{"class":714},[478,141919,895],{"class":495},[478,141921,51936],{"class":495},[478,141923,1859],{"class":714},[478,141925,141926],{"class":480,"line":579},[478,141927,2133],{"class":714},[19,141929,140391],{},[469,141931,141932],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},[475,141933,141934,141940,141952],{"__ignoreMap":54},[478,141935,141936,141938],{"class":480,"line":481},[478,141937,51991],{"class":51680},[478,141939,16137],{"class":714},[478,141941,141942,141944,141946,141948,141950],{"class":480,"line":565},[478,141943,70850],{"class":495},[478,141945,51817],{"class":714},[478,141947,895],{"class":495},[478,141949,51936],{"class":495},[478,141951,1859],{"class":714},[478,141953,141954],{"class":480,"line":579},[478,141955,2133],{"class":714},[14,141957,141959],{"id":141958},"_163-注册页面制作","16.3 注册页面制作",[52,141961],{"style":126788,"src":141962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141964,141965,141967],{},[45,141966,9591],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[52,141969],{"style":126788,"src":141970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[129,141972,141974],{"id":141973},"_1631-准备工作","16.3.1 准备工作",[1702,141976,141977,141980],{},[32,141978,141979],{},"创建register.html，引入 base.css，引入favicon图标",[32,141981,141982],{},"创建register.css ，在html页面进行引入",[129,141984,141986,141987,141989],{"id":141985},"_1632-header-头部实现","16.3.2 ",[475,141988,131937],{}," 头部实现",[1702,141991,141992,141995],{},[32,141993,141994],{},"整个内容用 版心 进行包裹",[32,141996,141997],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141999,140302],{},[469,142001,142002],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,142003,142004],{"__ignoreMap":54},[478,142005,142006,142008,142010,142012,142014,142016,142018,142020,142022,142024,142026,142028],{"class":480,"line":481},[478,142007,1605],{"class":714},[478,142009,52],{"class":51680},[478,142011,55619],{"class":484},[478,142013,759],{"class":714},[478,142015,134449],{"class":488},[478,142017,55627],{"class":484},[478,142019,759],{"class":714},[478,142021,134456],{"class":488},[478,142023,134459],{"class":484},[478,142025,759],{"class":714},[478,142027,134464],{"class":488},[478,142029,51687],{"class":714},[19,142031,140391],{},[469,142033,142034],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,142035,142036],{"__ignoreMap":54},[478,142037,142038,142040,142042,142044,142046,142048,142050,142052,142054,142056,142058,142060],{"class":480,"line":481},[478,142039,1605],{"class":714},[478,142041,52],{"class":51680},[478,142043,55619],{"class":484},[478,142045,759],{"class":714},[478,142047,134449],{"class":488},[478,142049,55627],{"class":484},[478,142051,759],{"class":714},[478,142053,134456],{"class":488},[478,142055,134459],{"class":484},[478,142057,759],{"class":714},[478,142059,134464],{"class":488},[478,142061,51687],{"class":714},[129,142063,142065,142066,142069],{"id":142064},"_1633-registerarea-主体模块实现","16.3.3 ",[475,142067,142068],{},"registerarea"," 主体模块实现",[52,142071],{"style":126788,"src":142072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142074,142075],{},"整个大盒子 高度为 522px，设置4个边框",[19,142077,140302],{},[469,142079,142080],{"className":126932,"code":131089,"language":126934,"meta":54,"style":54},[475,142081,142082,142088,142104],{"__ignoreMap":54},[478,142083,142084,142086],{"class":480,"line":481},[478,142085,51991],{"class":51680},[478,142087,16137],{"class":714},[478,142089,142090,142092,142094,142096,142098,142100,142102],{"class":480,"line":565},[478,142091,71276],{"class":495},[478,142093,51817],{"class":714},[478,142095,193],{"class":495},[478,142097,51872],{"class":710},[478,142099,51901],{"class":495},[478,142101,130324],{"class":495},[478,142103,1859],{"class":714},[478,142105,142106],{"class":480,"line":579},[478,142107,2133],{"class":714},[19,142109,140391],{},[469,142111,142112],{"className":126932,"code":131089,"language":126934,"meta":54,"style":54},[475,142113,142114,142120,142136],{"__ignoreMap":54},[478,142115,142116,142118],{"class":480,"line":481},[478,142117,51991],{"class":51680},[478,142119,16137],{"class":714},[478,142121,142122,142124,142126,142128,142130,142132,142134],{"class":480,"line":565},[478,142123,71276],{"class":495},[478,142125,51817],{"class":714},[478,142127,193],{"class":495},[478,142129,51872],{"class":710},[478,142131,51901],{"class":495},[478,142133,130324],{"class":495},[478,142135,1859],{"class":714},[478,142137,142138],{"class":480,"line":579},[478,142139,2133],{"class":714},[19,142141,142142],{},"1号盒子 是一个 h3 标签，放标题",[1702,142144,142145],{},[32,142146,142147],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142149,140302],{},[469,142151,142152],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,142153,142154,142160,142170],{"__ignoreMap":54},[478,142155,142156,142158],{"class":480,"line":481},[478,142157,130780],{"class":484},[478,142159,16137],{"class":714},[478,142161,142162,142164,142166,142168],{"class":480,"line":565},[478,142163,131412],{"class":495},[478,142165,51817],{"class":714},[478,142167,382],{"class":495},[478,142169,1859],{"class":714},[478,142171,142172],{"class":480,"line":579},[478,142173,2133],{"class":714},[19,142175,140391],{},[469,142177,142178],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,142179,142180,142186,142196],{"__ignoreMap":54},[478,142181,142182,142184],{"class":480,"line":481},[478,142183,130780],{"class":484},[478,142185,16137],{"class":714},[478,142187,142188,142190,142192,142194],{"class":480,"line":565},[478,142189,131412],{"class":495},[478,142191,51817],{"class":714},[478,142193,382],{"class":495},[478,142195,1859],{"class":714},[478,142197,142198],{"class":480,"line":579},[478,142199,2133],{"class":714},[19,142201,142202],{},"2号盒子 里面放注册的内容",[1702,142204,142205,142208,142217,142231,142244,142247,142250,142268,142282],{},[32,142206,142207],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[32,142209,142210,142211,142213,142214,142216],{},"里面的内容利用 ",[475,142212,1702],{}," 包含 ",[475,142215,32],{}," 来实现的（不需要用表格）",[32,142218,139446,142219,142221,142222,142224,142225,142227,142228,142230],{},[475,142220,32],{}," 里面，左侧放 ",[475,142223,33988],{}," 标签， 中间放",[475,142226,54201],{}," 标签， 右侧放 ",[475,142229,478],{}," 提示信息",[32,142232,142233,142234,142236,142237,142239,142240,142243],{},"左侧 ",[475,142235,33988],{},"里面的文字都是右对齐，我们可以给",[475,142238,33988],{},"设置一个宽度（88px），然后利用",[475,142241,142242],{},"text-align"," 来设置右对齐",[32,142245,142246],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[32,142248,142249],{},"右侧 span修饰一下文字颜色",[32,142251,142252,142253],{},"提示信息的样式优化",[1702,142254,142255,142258,142261],{},[32,142256,142257],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[32,142259,142260],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[32,142262,142263,142264,142267],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[475,142265,142266],{},"vertical-algin"," 来设置 图片与文字对齐方式",[32,142269,142270,142271],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1702,142272,142273,142279],{},[32,142274,142275,142276,142278],{},"设置 ",[475,142277,183],{}," 的 左右 12px 的内边距，设置一下文字颜色",[32,142280,142281],{},"分别设置 背景颜色",[32,142283,142284,142285,142287],{},"同意协议 和 完成注册 都是用 ",[475,142286,32],{}," 进行包裹",[19,142289,140302],{},[469,142291,142292],{"className":126932,"code":140875,"language":126934,"meta":54,"style":54},[475,142293,142294,142300,142310],{"__ignoreMap":54},[478,142295,142296,142298],{"class":480,"line":481},[478,142297,51991],{"class":51680},[478,142299,16137],{"class":714},[478,142301,142302,142304,142306,142308],{"class":480,"line":565},[478,142303,71258],{"class":495},[478,142305,51817],{"class":714},[478,142307,140892],{"class":495},[478,142309,1859],{"class":714},[478,142311,142312],{"class":480,"line":579},[478,142313,2133],{"class":714},[19,142315,140391],{},[469,142317,142318],{"className":126932,"code":140875,"language":126934,"meta":54,"style":54},[475,142319,142320,142326,142336],{"__ignoreMap":54},[478,142321,142322,142324],{"class":480,"line":481},[478,142323,51991],{"class":51680},[478,142325,16137],{"class":714},[478,142327,142328,142330,142332,142334],{"class":480,"line":565},[478,142329,71258],{"class":495},[478,142331,51817],{"class":714},[478,142333,140892],{"class":495},[478,142335,1859],{"class":714},[478,142337,142338],{"class":480,"line":579},[478,142339,2133],{"class":714},[129,142341,142343],{"id":142342},"_1634-底部实现","16.3.4 底部实现",[19,142345,140302],{},[469,142347,142348],{"className":126932,"code":140875,"language":126934,"meta":54,"style":54},[475,142349,142350,142356,142366],{"__ignoreMap":54},[478,142351,142352,142354],{"class":480,"line":481},[478,142353,51991],{"class":51680},[478,142355,16137],{"class":714},[478,142357,142358,142360,142362,142364],{"class":480,"line":565},[478,142359,71258],{"class":495},[478,142361,51817],{"class":714},[478,142363,140892],{"class":495},[478,142365,1859],{"class":714},[478,142367,142368],{"class":480,"line":579},[478,142369,2133],{"class":714},[19,142371,140391],{},[469,142373,142374],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,142375,142376,142380,142394,142398],{"__ignoreMap":54},[478,142377,142378],{"class":480,"line":481},[478,142379,131043],{"class":770},[478,142381,142382,142384,142386,142388,142390,142392],{"class":480,"line":565},[478,142383,1605],{"class":714},[478,142385,51991],{"class":51680},[478,142387,53866],{"class":484},[478,142389,759],{"class":714},[478,142391,131056],{"class":488},[478,142393,51687],{"class":714},[478,142395,142396],{"class":480,"line":579},[478,142397,131063],{"class":714},[478,142399,142400,142402,142404],{"class":480,"line":593},[478,142401,52165],{"class":714},[478,142403,51991],{"class":51680},[478,142405,51687],{"class":714},[14,142407,142409],{"id":142408},"_164-项目总结","16.4 项目总结",[29,142411,142412,142415,142418,142421],{},[32,142413,142414],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[32,142416,142417],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[32,142419,142420],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[32,142422,142423],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[52,142425],{"style":126788,"src":142426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[29,142428,142429],{"start":1769},[32,142430,142431],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[52,142433],{"style":126788,"src":142434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[29,142436,142437],{"start":1783},[32,142438,142439],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[52,142441],{"style":126788,"src":142442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[469,142444,142445],{"className":127679,"code":137089,"language":127681,"meta":54,"style":54},[475,142446,142447],{"__ignoreMap":54},[478,142448,142449,142451,142453,142455,142457,142459,142461,142463,142465,142467,142469,142471],{"class":480,"line":481},[478,142450,1605],{"class":714},[478,142452,54201],{"class":51680},[478,142454,54204],{"class":484},[478,142456,759],{"class":714},[478,142458,63079],{"class":488},[478,142460,15485],{"class":484},[478,142462,759],{"class":714},[478,142464,137110],{"class":488},[478,142466,61400],{"class":484},[478,142468,759],{"class":714},[478,142470,137117],{"class":488},[478,142472,51687],{"class":714},[29,142474,142475,142478],{"start":1789},[32,142476,142477],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[32,142479,142480],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[617,142482,142483],{},"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":54,"searchDepth":565,"depth":565,"links":142485},[142486,142491,142498,142506],{"id":140112,"depth":565,"text":140113,"children":142487},[142488,142489,142490],{"id":140116,"depth":579,"text":140117},{"id":140847,"depth":579,"text":140848},{"id":141160,"depth":579,"text":141161},{"id":141460,"depth":565,"text":141461,"children":142492},[142493,142494,142496],{"id":141464,"depth":579,"text":141465},{"id":141482,"depth":579,"text":142495},"16.2.2 列表页 header 和 nav 修改",{"id":141766,"depth":579,"text":142497},"16.2.3 列表页主体 sk_container",{"id":141958,"depth":565,"text":141959,"children":142499},[142500,142501,142503,142505],{"id":141973,"depth":579,"text":141974},{"id":141985,"depth":579,"text":142502},"16.3.2 header 头部实现",{"id":142064,"depth":579,"text":142504},"16.3.3 registerarea 主体模块实现",{"id":142342,"depth":579,"text":142343},{"id":142408,"depth":565,"text":142409},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140104,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142513,"title":142514,"body":142515,"description":23942,"extension":638,"meta":142623,"navigation":640,"path":142624,"seo":142625,"stem":142626,"__hash__":142627},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142516,"toc":142618},[142517,142520,142524,142527,142530,142539,142548,142552,142557,142564,142582,142585,142588,142591,142594,142597,142600,142603,142606,142609,142612,142615],[10,142518,142514],{"id":142519},"_17-web服务器与网站发布",[14,142521,142523],{"id":142522},"_171-web服务器","17.1 Web服务器",[19,142525,142526],{},"把自己网站上传到服务器上，可以让其他人访问",[52,142528],{"style":126788,"src":142529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142531,142532,142535,142536],{},[45,142533,142534],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[45,142537,142538],{},"Web 服务器等",[19,142540,142541,142542,101398,142545,26120],{},"根据服务器在网络中所在的位置不同，又可分为 ",[45,142543,142544],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[45,142546,142547],{},"远程服务器",[129,142549,142551],{"id":142550},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142553,142554],{},[45,142555,142556],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142558,142559,142560],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[518,142561,142562],{"href":142562,"rel":142563},"http:\u002F\u002Ffree.3v.do\u002F",[522],[1702,142565,142566,142569,142572,142579],{},[32,142567,142568],{},"去免费空间网站注册账号。",[32,142570,142571],{},"记录下主机名、用户名、密码、域名。",[32,142573,142574,142575,142578],{},"利用 ",[475,142576,142577],{},"utftp"," 软件 上传网站到远程服务器",[32,142580,142581],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142583,142584],{},"使用软件上传，对上传软件文件进行解压",[52,142586],{"style":126788,"src":142587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[52,142589],{"style":126788,"src":142590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142592,142593],{},"输入刚刚申请的服务器账号信息：",[52,142595],{"style":126788,"src":142596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[52,142598],{"style":126788,"src":142599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[52,142601],{"style":126788,"src":142602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[52,142604],{"style":126788,"src":142605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142607,142608],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[52,142610],{"style":126788,"src":142611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142613,142614],{},"浏览器输入域名即可访问",[19,142616,142617],{},"首页一定必须是index",{"title":54,"searchDepth":565,"depth":565,"links":142619},[142620],{"id":142522,"depth":565,"text":142523,"children":142621},[142622],{"id":142550,"depth":579,"text":142551},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142514,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142629,"title":142630,"body":142631,"description":23942,"extension":638,"meta":143558,"navigation":640,"path":143559,"seo":143560,"stem":143561,"__hash__":143562},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142632,"toc":143541},[142633,142636,142640,142643,142646,142657,142660,142664,142668,142673,142676,142679,142682,142685,142689,142715,142719,142723,142726,142729,142733,142766,142770,142773,142776,142840,142844,142848,142851,142854,142857,142861,142906,142910,142913,142943,142947,142951,142954,142957,142961,142964,143033,143036,143144,143146,143152,143156,143159,143162,143258,143261,143265,143289,143293,143296,143300,143303,143307,143310,143313,143316,143319,143323,143326,143329,143333,143337,143340,143343,143346,143349,143353,143356,143360,143363,143366,143411,143415,143419,143422,143425,143428,143460,143464,143467,143501,143505,143508,143538],[10,142634,142630],{"id":142635},"_18-2d动画与3d转换",[14,142637,142639],{"id":142638},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142641,142642],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142644,142645],{},"转换（transform）你可以简单理解为变形",[1702,142647,142648,142651,142654],{},[32,142649,142650],{},"移动：translate",[32,142652,142653],{},"旋转：rotate",[32,142655,142656],{},"缩放：scale",[52,142658],{"style":126788,"src":142659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[129,142661,142663],{"id":142662},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22563,142665,142667],{"id":142666},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142669,142670,142671],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[45,142672,133591],{},[52,142674],{"style":126788,"src":142675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142677,142678],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142680,142681],{},"对于行内元素无效",[19,142683,142684],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22563,142686,142688],{"id":142687},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[469,142690,142691],{"className":126932,"code":139121,"language":126934,"meta":54,"style":54},[475,142692,142693,142699,142711],{"__ignoreMap":54},[478,142694,142695,142697],{"class":480,"line":481},[478,142696,51991],{"class":51680},[478,142698,16137],{"class":714},[478,142700,142701,142703,142705,142707,142709],{"class":480,"line":565},[478,142702,70850],{"class":495},[478,142704,51817],{"class":714},[478,142706,895],{"class":495},[478,142708,51936],{"class":495},[478,142710,1859],{"class":714},[478,142712,142713],{"class":480,"line":579},[478,142714,2133],{"class":714},[129,142716,142718],{"id":142717},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22563,142720,142722],{"id":142721},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142724,142725],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[52,142727],{"style":126788,"src":142728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22563,142730,142732],{"id":142731},"_18122-旋转效果","18.1.2.2 旋转效果",[469,142734,142736],{"className":126932,"code":142735,"language":126934,"meta":54,"style":54},"div {\n  transform: rotate(45deg);\n}\n",[475,142737,142738,142744,142762],{"__ignoreMap":54},[478,142739,142740,142742],{"class":480,"line":481},[478,142741,51991],{"class":51680},[478,142743,16137],{"class":714},[478,142745,142746,142748,142750,142753,142755,142757,142760],{"class":480,"line":565},[478,142747,136916],{"class":495},[478,142749,51817],{"class":714},[478,142751,142752],{"class":495},"rotate",[478,142754,263],{"class":714},[478,142756,1229],{"class":495},[478,142758,142759],{"class":710},"deg",[478,142761,3285],{"class":714},[478,142763,142764],{"class":480,"line":579},[478,142765,2133],{"class":714},[22563,142767,142769],{"id":142768},"_18123-三角做法","18.1.2.3 三角做法",[19,142771,142772],{},"该下标当经过最外层大盒子时会实现向上反转",[52,142774],{"style":126788,"src":142775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[469,142777,142778],{"className":126932,"code":135452,"language":126934,"meta":54,"style":54},[475,142779,142780,142784,142790,142800,142810,142826,142836],{"__ignoreMap":54},[478,142781,142782],{"class":480,"line":481},[478,142783,135459],{"class":770},[478,142785,142786,142788],{"class":480,"line":565},[478,142787,135464],{"class":484},[478,142789,16137],{"class":714},[478,142791,142792,142794,142796,142798],{"class":480,"line":579},[478,142793,70948],{"class":495},[478,142795,51817],{"class":714},[478,142797,895],{"class":495},[478,142799,1859],{"class":714},[478,142801,142802,142804,142806,142808],{"class":480,"line":593},[478,142803,71168],{"class":495},[478,142805,51817],{"class":714},[478,142807,895],{"class":495},[478,142809,1859],{"class":714},[478,142811,142812,142814,142816,142818,142820,142822,142824],{"class":480,"line":1769},[478,142813,71276],{"class":495},[478,142815,51817],{"class":714},[478,142817,1146],{"class":495},[478,142819,51872],{"class":710},[478,142821,51901],{"class":495},[478,142823,64371],{"class":495},[478,142825,1859],{"class":714},[478,142827,142828,142830,142832,142834],{"class":480,"line":1783},[478,142829,135507],{"class":495},[478,142831,51817],{"class":714},[478,142833,62749],{"class":495},[478,142835,1859],{"class":714},[478,142837,142838],{"class":480,"line":1789},[478,142839,2133],{"class":714},[129,142841,142843],{"id":142842},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22563,142845,142847],{"id":142846},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142849,142850],{},"设置中心点",[52,142852],{"style":126788,"src":142853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142855,142856],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22563,142858,142860],{"id":142859},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[469,142862,142864],{"className":126932,"code":142863,"language":126934,"meta":54,"style":54},"\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",[475,142865,142866,142871,142877,142892,142897,142902],{"__ignoreMap":54},[478,142867,142868],{"class":480,"line":481},[478,142869,142870],{"class":770},"\u002F* 转换中心点 *\u002F\n",[478,142872,142873,142875],{"class":480,"line":565},[478,142874,51991],{"class":51680},[478,142876,16137],{"class":714},[478,142878,142879,142882,142884,142886,142888,142890],{"class":480,"line":579},[478,142880,142881],{"class":495},"  transform-origin",[478,142883,51817],{"class":714},[478,142885,51972],{"class":495},[478,142887,17709],{"class":495},[478,142889,130795],{"class":714},[478,142891,135605],{"class":770},[478,142893,142894],{"class":480,"line":593},[478,142895,142896],{"class":770},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[478,142898,142899],{"class":480,"line":1769},[478,142900,142901],{"class":770},"  \u002F* transform-origin: left top; *\u002F\n",[478,142903,142904],{"class":480,"line":1783},[478,142905,2133],{"class":714},[22563,142907,142909],{"id":142908},"_18133-旋转案例","18.1.3.3 旋转案例",[52,142911],{"style":126788,"src":142912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[469,142914,142915],{"className":126932,"code":142735,"language":126934,"meta":54,"style":54},[475,142916,142917,142923,142939],{"__ignoreMap":54},[478,142918,142919,142921],{"class":480,"line":481},[478,142920,51991],{"class":51680},[478,142922,16137],{"class":714},[478,142924,142925,142927,142929,142931,142933,142935,142937],{"class":480,"line":565},[478,142926,136916],{"class":495},[478,142928,51817],{"class":714},[478,142930,142752],{"class":495},[478,142932,263],{"class":714},[478,142934,1229],{"class":495},[478,142936,142759],{"class":710},[478,142938,3285],{"class":714},[478,142940,142941],{"class":480,"line":579},[478,142942,2133],{"class":714},[129,142944,142946],{"id":142945},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22563,142948,142950],{"id":142949},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142952,142953],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[52,142955],{"style":126788,"src":142956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22563,142958,142960],{"id":142959},"_18142-分页按钮","18.1.4.2 分页按钮",[52,142962],{"style":126788,"src":142963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[469,142965,142967],{"className":126932,"code":142966,"language":126934,"meta":54,"style":54},"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",[475,142968,142969,142975,142991,142995,142999,143004,143010,143024,143029],{"__ignoreMap":54},[478,142970,142971,142973],{"class":480,"line":481},[478,142972,51991],{"class":51680},[478,142974,16137],{"class":714},[478,142976,142977,142979,142981,142984,142986,142989],{"class":480,"line":565},[478,142978,136916],{"class":495},[478,142980,51817],{"class":714},[478,142982,142983],{"class":495},"scale",[478,142985,263],{"class":714},[478,142987,142988],{"class":495},"1.2",[478,142990,3285],{"class":714},[478,142992,142993],{"class":480,"line":579},[478,142994,2133],{"class":714},[478,142996,142997],{"class":480,"line":593},[478,142998,136393],{"class":714},[478,143000,143001],{"class":480,"line":1769},[478,143002,143003],{"class":770},"\u002F* 2D 缩放 *\u002F\n",[478,143005,143006,143008],{"class":480,"line":1783},[478,143007,51991],{"class":51680},[478,143009,16137],{"class":714},[478,143011,143012,143014,143016,143018,143020,143022],{"class":480,"line":1789},[478,143013,136916],{"class":495},[478,143015,51817],{"class":714},[478,143017,142983],{"class":495},[478,143019,263],{"class":714},[478,143021,142988],{"class":495},[478,143023,3285],{"class":714},[478,143025,143026],{"class":480,"line":1880},[478,143027,143028],{"class":770},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[478,143030,143031],{"class":480,"line":1886},[478,143032,2133],{"class":714},[19,143034,143035],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[469,143037,143039],{"className":126932,"code":143038,"language":126934,"meta":54,"style":54},"\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",[475,143040,143041,143046,143056,143077,143098,143102,143107,143113,143140],{"__ignoreMap":54},[478,143042,143043],{"class":480,"line":481},[478,143044,143045],{"class":770},"\u002F* 定义动画 *\u002F\n",[478,143047,143048,143051,143054],{"class":480,"line":565},[478,143049,143050],{"class":710},"@keyframes",[478,143052,143053],{"class":5782}," move",[478,143055,16137],{"class":714},[478,143057,143058,143061,143063,143065,143067,143070,143072,143074],{"class":480,"line":579},[478,143059,143060],{"class":484},"  0%",[478,143062,80187],{"class":714},[478,143064,48514],{"class":495},[478,143066,51817],{"class":714},[478,143068,143069],{"class":495},"translateX",[478,143071,263],{"class":714},[478,143073,895],{"class":495},[478,143075,143076],{"class":714},"); }\n",[478,143078,143079,143082,143084,143086,143088,143090,143092,143094,143096],{"class":480,"line":593},[478,143080,143081],{"class":484},"  100%",[478,143083,80187],{"class":714},[478,143085,48514],{"class":495},[478,143087,51817],{"class":714},[478,143089,143069],{"class":495},[478,143091,263],{"class":714},[478,143093,1012],{"class":495},[478,143095,51872],{"class":710},[478,143097,143076],{"class":714},[478,143099,143100],{"class":480,"line":1769},[478,143101,2133],{"class":714},[478,143103,143104],{"class":480,"line":1783},[478,143105,143106],{"class":770},"\u002F* 调用动画 *\u002F\n",[478,143108,143109,143111],{"class":480,"line":1789},[478,143110,51991],{"class":51680},[478,143112,16137],{"class":714},[478,143114,143115,143118,143120,143122,143124,143126,143128,143130,143132,143135,143138],{"class":480,"line":1880},[478,143116,143117],{"class":495},"  animation",[478,143119,51817],{"class":714},[478,143121,135618],{"class":495},[478,143123,25498],{"class":495},[478,143125,1391],{"class":710},[478,143127,79060],{"class":495},[478,143129,4659],{"class":495},[478,143131,1391],{"class":710},[478,143133,143134],{"class":495}," infinite",[478,143136,143137],{"class":495}," alternate",[478,143139,1859],{"class":714},[478,143141,143142],{"class":480,"line":1886},[478,143143,2133],{"class":714},[19,143145,143035],{},[469,143147,143150],{"className":143148,"code":143149,"language":5753},[5751],"\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",[475,143151,143149],{"__ignoreMap":54},[22563,143153,143155],{"id":143154},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143157,143158],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[52,143160],{"style":126788,"src":143161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[469,143163,143164],{"className":126932,"code":143038,"language":126934,"meta":54,"style":54},[475,143165,143166,143170,143178,143196,143216,143220,143224,143230,143254],{"__ignoreMap":54},[478,143167,143168],{"class":480,"line":481},[478,143169,143045],{"class":770},[478,143171,143172,143174,143176],{"class":480,"line":565},[478,143173,143050],{"class":710},[478,143175,143053],{"class":5782},[478,143177,16137],{"class":714},[478,143179,143180,143182,143184,143186,143188,143190,143192,143194],{"class":480,"line":579},[478,143181,143060],{"class":484},[478,143183,80187],{"class":714},[478,143185,48514],{"class":495},[478,143187,51817],{"class":714},[478,143189,143069],{"class":495},[478,143191,263],{"class":714},[478,143193,895],{"class":495},[478,143195,143076],{"class":714},[478,143197,143198,143200,143202,143204,143206,143208,143210,143212,143214],{"class":480,"line":593},[478,143199,143081],{"class":484},[478,143201,80187],{"class":714},[478,143203,48514],{"class":495},[478,143205,51817],{"class":714},[478,143207,143069],{"class":495},[478,143209,263],{"class":714},[478,143211,1012],{"class":495},[478,143213,51872],{"class":710},[478,143215,143076],{"class":714},[478,143217,143218],{"class":480,"line":1769},[478,143219,2133],{"class":714},[478,143221,143222],{"class":480,"line":1783},[478,143223,143106],{"class":770},[478,143225,143226,143228],{"class":480,"line":1789},[478,143227,51991],{"class":51680},[478,143229,16137],{"class":714},[478,143231,143232,143234,143236,143238,143240,143242,143244,143246,143248,143250,143252],{"class":480,"line":1880},[478,143233,143117],{"class":495},[478,143235,51817],{"class":714},[478,143237,135618],{"class":495},[478,143239,25498],{"class":495},[478,143241,1391],{"class":710},[478,143243,79060],{"class":495},[478,143245,4659],{"class":495},[478,143247,1391],{"class":710},[478,143249,143134],{"class":495},[478,143251,143137],{"class":495},[478,143253,1859],{"class":714},[478,143255,143256],{"class":480,"line":1886},[478,143257,2133],{"class":714},[19,143259,143260],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[129,143262,143264],{"id":143263},"_1823-知识点回顾","18.2.3 知识点回顾",[469,143266,143267],{"className":126932,"code":129101,"language":126934,"meta":54,"style":54},[475,143268,143269,143275,143285],{"__ignoreMap":54},[478,143270,143271,143273],{"class":480,"line":481},[478,143272,51991],{"class":51680},[478,143274,16137],{"class":714},[478,143276,143277,143279,143281,143283],{"class":480,"line":565},[478,143278,129114],{"class":495},[478,143280,51817],{"class":714},[478,143282,62116],{"class":495},[478,143284,1859],{"class":714},[478,143286,143287],{"class":480,"line":579},[478,143288,2133],{"class":714},[14,143290,143292],{"id":143291},"_183-3d-转换","18.3 3D 转换",[19,143294,143295],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[129,143297,143299],{"id":143298},"_1831-坐标轴认识","18.3.1 坐标轴认识",[52,143301],{"style":126788,"src":143302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[129,143304,143306],{"id":143305},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[52,143308],{"style":126788,"src":143309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143311,143312],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143314,143315],{},"translate3d的效果需要搭配透视perspective来使用",[52,143317],{"style":126788,"src":143318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[129,143320,143322],{"id":143321},"_1833-透视-perspective","18.3.3 透视 perspective",[52,143324],{"style":126788,"src":143325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143327,143328],{},"透视写在父盒子上，单位为像素",[129,143330,143332],{"id":143331},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22563,143334,143336],{"id":143335},"_18341-分开解释","18.3.4.1 分开解释",[52,143338],{"style":126788,"src":143339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[52,143341],{"style":126788,"src":143342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[52,143344],{"style":126788,"src":143345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143347,143348],{},"总结来说就是左手原则",[22563,143350,143352],{"id":143351},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[52,143354],{"style":126788,"src":143355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[129,143357,143359],{"id":143358},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[52,143361],{"style":126788,"src":143362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[52,143364],{"style":126788,"src":143365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[469,143367,143369],{"className":126932,"code":143368,"language":126934,"meta":54,"style":54},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[475,143370,143371,143377,143390,143407],{"__ignoreMap":54},[478,143372,143373,143375],{"class":480,"line":481},[478,143374,51991],{"class":51680},[478,143376,16137],{"class":714},[478,143378,143379,143382,143384,143386,143388],{"class":480,"line":565},[478,143380,143381],{"class":495},"  perspective",[478,143383,51817],{"class":714},[478,143385,65454],{"class":495},[478,143387,51872],{"class":710},[478,143389,1859],{"class":714},[478,143391,143392,143394,143396,143399,143401,143403,143405],{"class":480,"line":579},[478,143393,136916],{"class":495},[478,143395,51817],{"class":714},[478,143397,143398],{"class":495},"rotateX",[478,143400,263],{"class":714},[478,143402,1229],{"class":495},[478,143404,142759],{"class":710},[478,143406,3285],{"class":714},[478,143408,143409],{"class":480,"line":593},[478,143410,2133],{"class":714},[129,143412,143414],{"id":143413},"_1836-案例","18.3.6 案例",[22563,143416,143418],{"id":143417},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[52,143420],{"style":126788,"src":143421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[52,143423],{"style":126788,"src":143424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[52,143426],{"style":126788,"src":143427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[469,143429,143431],{"className":126932,"code":143430,"language":126934,"meta":54,"style":54},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[475,143432,143433,143438,143444,143456],{"__ignoreMap":54},[478,143434,143435],{"class":480,"line":481},[478,143436,143437],{"class":770},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[478,143439,143440,143442],{"class":480,"line":565},[478,143441,133929],{"class":484},[478,143443,16137],{"class":714},[478,143445,143446,143448,143450,143452,143454],{"class":480,"line":579},[478,143447,143381],{"class":495},[478,143449,51817],{"class":714},[478,143451,65454],{"class":495},[478,143453,51872],{"class":710},[478,143455,1859],{"class":714},[478,143457,143458],{"class":480,"line":593},[478,143459,2133],{"class":714},[22563,143461,143463],{"id":143462},"_18362-3d导航栏","18.3.6.2 3D导航栏",[52,143465],{"style":126788,"src":143466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[469,143468,143469],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,143470,143471,143475,143489,143493],{"__ignoreMap":54},[478,143472,143473],{"class":480,"line":481},[478,143474,131043],{"class":770},[478,143476,143477,143479,143481,143483,143485,143487],{"class":480,"line":565},[478,143478,1605],{"class":714},[478,143480,51991],{"class":51680},[478,143482,53866],{"class":484},[478,143484,759],{"class":714},[478,143486,131056],{"class":488},[478,143488,51687],{"class":714},[478,143490,143491],{"class":480,"line":579},[478,143492,131063],{"class":714},[478,143494,143495,143497,143499],{"class":480,"line":593},[478,143496,52165],{"class":714},[478,143498,51991],{"class":51680},[478,143500,51687],{"class":714},[22563,143502,143504],{"id":143503},"_18363-旋转木马","18.3.6.3 旋转木马",[52,143506],{"style":126788,"src":143507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[469,143509,143510],{"className":126932,"code":142735,"language":126934,"meta":54,"style":54},[475,143511,143512,143518,143534],{"__ignoreMap":54},[478,143513,143514,143516],{"class":480,"line":481},[478,143515,51991],{"class":51680},[478,143517,16137],{"class":714},[478,143519,143520,143522,143524,143526,143528,143530,143532],{"class":480,"line":565},[478,143521,136916],{"class":495},[478,143523,51817],{"class":714},[478,143525,142752],{"class":495},[478,143527,263],{"class":714},[478,143529,1229],{"class":495},[478,143531,142759],{"class":710},[478,143533,3285],{"class":714},[478,143535,143536],{"class":480,"line":579},[478,143537,2133],{"class":714},[617,143539,143540],{},"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":54,"searchDepth":565,"depth":565,"links":143542},[143543,143550],{"id":142638,"depth":565,"text":142639,"children":143544},[143545,143546,143547,143548,143549],{"id":142662,"depth":579,"text":142663},{"id":142717,"depth":579,"text":142718},{"id":142842,"depth":579,"text":142843},{"id":142945,"depth":579,"text":142946},{"id":143263,"depth":579,"text":143264},{"id":143291,"depth":565,"text":143292,"children":143551},[143552,143553,143554,143555,143556,143557],{"id":143298,"depth":579,"text":143299},{"id":143305,"depth":579,"text":143306},{"id":143321,"depth":579,"text":143322},{"id":143331,"depth":579,"text":143332},{"id":143358,"depth":579,"text":143359},{"id":143413,"depth":579,"text":143414},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142630,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143564,"title":143565,"body":143566,"description":23942,"extension":638,"meta":143769,"navigation":640,"path":143770,"seo":143771,"stem":143772,"__hash__":143773},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143567,"toc":143758},[143568,143571,143575,143578,143581,143585,143588,143591,143594,143598,143601,143605,143608,143612,143615,143619,143633,143637,143662,143665,143668,143685,143689,143693,143696,143699,143703,143706,143709,143727,143731,143734,143748,143752,143755],[10,143569,143565],{"id":143570},"_19-移动端基础-前缀现状与视口",[14,143572,143574],{"id":143573},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[52,143576],{"style":126788,"src":143577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143579,143580],{},"意思就是加个前缀，增加兼容性",[14,143582,143584],{"id":143583},"_192-移动端现状认识","19.2 移动端现状认识",[52,143586],{"style":126788,"src":143587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143589,143590],{},"调试方法：",[52,143592],{"style":126788,"src":143593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143595,143597],{"id":143596},"_193-视口","19.3 视口",[19,143599,143600],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[129,143602,143604],{"id":143603},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[52,143606],{"style":126788,"src":143607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[129,143609,143611],{"id":143610},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[52,143613],{"style":126788,"src":143614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[129,143616,143618],{"id":143617},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1702,143620,143621,143624,143627,143630],{},[32,143622,143623],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[32,143625,143626],{},"理想视口，对设备来讲，是最理想的视口尺寸",[32,143628,143629],{},"需要手动添写meta视口标签通知浏览器操作",[32,143631,143632],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[129,143634,143636],{"id":143635},"_1934-meta视口标签","19.3.4 meta视口标签",[469,143638,143640],{"className":127679,"code":143639,"language":127681,"meta":54,"style":54},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[475,143641,143642],{"__ignoreMap":54},[478,143643,143644,143646,143648,143650,143652,143654,143656,143658,143660],{"class":480,"line":481},[478,143645,1605],{"class":714},[478,143647,51724],{"class":51680},[478,143649,15485],{"class":484},[478,143651,759],{"class":714},[478,143653,51771],{"class":488},[478,143655,51751],{"class":484},[478,143657,759],{"class":714},[478,143659,51778],{"class":488},[478,143661,51687],{"class":714},[52,143663],{"style":126788,"src":143664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143666,143667],{},"标准视口设置：",[29,143669,143670,143673,143676,143679,143682],{},[32,143671,143672],{},"视口宽度和设备保持一致",[32,143674,143675],{},"视口的默认缩放比例1.0",[32,143677,143678],{},"不允许用户自行缩放",[32,143680,143681],{},"最大允许的缩放比例1.0",[32,143683,143684],{},"最小允许的缩放比例1.0",[129,143686,143688],{"id":143687},"_1935-二倍图","19.3.5 二倍图",[22563,143690,143692],{"id":143691},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[52,143694],{"style":126788,"src":143695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[52,143697],{"style":126788,"src":143698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22563,143700,143702],{"id":143701},"_19352-多倍图","19.3.5.2 多倍图",[52,143704],{"style":126788,"src":143705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143707,143708],{},"二倍图法，代码如下：",[469,143710,143712],{"className":126932,"code":143711,"language":126934,"meta":54,"style":54},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[475,143713,143714,143719],{"__ignoreMap":54},[478,143715,143716],{"class":480,"line":481},[478,143717,143718],{"class":770},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[478,143720,143721,143724],{"class":480,"line":565},[478,143722,143723],{"class":51680},"background-size",[478,143725,143726],{"class":714},": 50% 50%;\n",[22563,143728,143730],{"id":143729},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[52,143732],{"style":126788,"src":143733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[29,143735,143736,143739,143742,143745],{},[32,143737,143738],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[32,143740,143741],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[32,143743,143744],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[32,143746,143747],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22563,143749,143751],{"id":143750},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[52,143753],{"style":126788,"src":143754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[617,143756,143757],{},"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":54,"searchDepth":565,"depth":565,"links":143759},[143760,143761,143762],{"id":143573,"depth":565,"text":143574},{"id":143583,"depth":565,"text":143584},{"id":143596,"depth":565,"text":143597,"children":143763},[143764,143765,143766,143767,143768],{"id":143603,"depth":579,"text":143604},{"id":143610,"depth":579,"text":143611},{"id":143617,"depth":579,"text":143618},{"id":143635,"depth":579,"text":143636},{"id":143687,"depth":579,"text":143688},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143565,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143775,"title":143776,"body":143777,"description":23942,"extension":638,"meta":144654,"navigation":640,"path":144655,"seo":144656,"stem":144657,"__hash__":144658},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143778,"toc":144638},[143779,143782,143786,143793,143796,143803,143806,143811,143814,143818,143822,143829,143832,143835,143839,143842,143845,143848,143851,143854,143858,143861,143865,143867,143870,143873,143876,143879,143881,143884,143886,143916,143918,143948,143952,143955,143959,143962,143979,143982,143985,144061,144063,144066,144069,144072,144075,144077,144080,144083,144087,144109,144112,144115,144119,144122,144128,144131,144135,144138,144141,144145,144148,144151,144154,144158,144161,144164,144167,144170,144174,144177,144181,144188,144191,144194,144197,144200,144210,144213,144216,144223,144226,144230,144233,144236,144240,144243,144246,144249,144294,144297,144300,144303,144305,144434,144436,144474,144477,144480,144482,144600,144602,144636],[10,143780,143776],{"id":143781},"_20-移动端布局实战上篇",[14,143783,143785],{"id":143784},"_201-移动端主流方案","20.1 移动端主流方案",[29,143787,143788],{},[32,143789,143790],{},[45,143791,143792],{},"单独移动端页面（主流）",[52,143794],{"style":126788,"src":143795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[29,143797,143798],{"start":565},[32,143799,143800],{},[45,143801,143802],{},"响应式兼容PC移动端",[52,143804],{"style":126788,"src":143805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[29,143807,143808],{"start":579},[32,143809,143810],{},"两种页面选型布局方式",[52,143812],{"style":126788,"src":143813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143815,143817],{"id":143816},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[129,143819,143821],{"id":143820},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143823,143824,143825],{},"官网地址： ",[518,143826,143827],{"href":143827,"rel":143828},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[522],[52,143830],{"style":126788,"src":143831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[52,143833],{"style":126788,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[129,143836,143838],{"id":143837},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[52,143840],{"style":126788,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[52,143843],{"style":126788,"src":143844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143846,143847],{},"去除高亮：",[19,143849,143850],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143852,143853],{},"-webkit- tap-highlight-color: transparent;",[14,143855,143857],{"id":143856},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[52,143859],{"style":126788,"src":143860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143862,143864],{"id":143863},"_204-流式布局案例","20.4 流式布局案例",[19,143866,743],{},[19,143868,143869],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143871,143872],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143874,143875],{},"图片格式：",[52,143877],{"style":126788,"src":143878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143880,135975],{},[52,143882],{"style":126788,"src":143883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143885,140302],{},[469,143887,143888],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,143889,143890],{"__ignoreMap":54},[478,143891,143892,143894,143896,143898,143900,143902,143904,143906,143908,143910,143912,143914],{"class":480,"line":481},[478,143893,1605],{"class":714},[478,143895,52],{"class":51680},[478,143897,55619],{"class":484},[478,143899,759],{"class":714},[478,143901,134449],{"class":488},[478,143903,55627],{"class":484},[478,143905,759],{"class":714},[478,143907,134456],{"class":488},[478,143909,134459],{"class":484},[478,143911,759],{"class":714},[478,143913,134464],{"class":488},[478,143915,51687],{"class":714},[19,143917,140391],{},[469,143919,143920],{"className":127679,"code":134434,"language":127681,"meta":54,"style":54},[475,143921,143922],{"__ignoreMap":54},[478,143923,143924,143926,143928,143930,143932,143934,143936,143938,143940,143942,143944,143946],{"class":480,"line":481},[478,143925,1605],{"class":714},[478,143927,52],{"class":51680},[478,143929,55619],{"class":484},[478,143931,759],{"class":714},[478,143933,134449],{"class":488},[478,143935,55627],{"class":484},[478,143937,759],{"class":714},[478,143939,134456],{"class":488},[478,143941,134459],{"class":484},[478,143943,759],{"class":714},[478,143945,134464],{"class":488},[478,143947,51687],{"class":714},[14,143949,143951],{"id":143950},"_205-flex布局","20.5 flex布局",[52,143953],{"style":126788,"src":143954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[129,143956,143958],{"id":143957},"_2051-布局原理","20.5.1 布局原理",[19,143960,143961],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1702,143963,143964,143967,143970,143973,143976],{},[32,143965,143966],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[32,143968,143969],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[32,143971,143972],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[32,143974,143975],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[32,143977,143978],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143980,143981],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143983,143984],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[469,143986,143988],{"className":126932,"code":143987,"language":126934,"meta":54,"style":54},"\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",[475,143989,143990,143995,144002,144012,144024,144035,144046,144057],{"__ignoreMap":54},[478,143991,143992],{"class":480,"line":481},[478,143993,143994],{"class":770},"\u002F* Flex 弹性布局 *\u002F\n",[478,143996,143997,144000],{"class":480,"line":565},[478,143998,143999],{"class":484},".container",[478,144001,16137],{"class":714},[478,144003,144004,144006,144008,144010],{"class":480,"line":579},[478,144005,128548],{"class":495},[478,144007,51817],{"class":714},[478,144009,51857],{"class":495},[478,144011,1859],{"class":714},[478,144013,144014,144017,144019,144022],{"class":480,"line":593},[478,144015,144016],{"class":495},"  flex-direction",[478,144018,51817],{"class":714},[478,144020,144021],{"class":495},"row",[478,144023,1859],{"class":714},[478,144025,144026,144029,144031,144033],{"class":480,"line":1769},[478,144027,144028],{"class":495},"  justify-content",[478,144030,51817],{"class":714},[478,144032,52048],{"class":495},[478,144034,1859],{"class":714},[478,144036,144037,144040,144042,144044],{"class":480,"line":1783},[478,144038,144039],{"class":495},"  align-items",[478,144041,51817],{"class":714},[478,144043,51972],{"class":495},[478,144045,1859],{"class":714},[478,144047,144048,144051,144053,144055],{"class":480,"line":1789},[478,144049,144050],{"class":495},"  flex-wrap",[478,144052,51817],{"class":714},[478,144054,78990],{"class":495},[478,144056,1859],{"class":714},[478,144058,144059],{"class":480,"line":1880},[478,144060,2133],{"class":714},[19,144062,70833],{},[19,144064,144065],{},".form-item .male-label {",[19,144067,144068],{},"   margin-right: 20px;",[19,144070,144071],{},"   display: inline-flex;",[19,144073,144074],{},"   align-items: center;",[19,144076,1641],{},[52,144078],{"style":126788,"src":144079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[52,144081],{"style":126788,"src":144082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[129,144084,144086],{"id":144085},"_2052-常见父项属性","20.5.2 常见父项属性",[29,144088,144089,144092,144095,144098,144101,144104,144107],{},[32,144090,144091],{},"flex-direction：设置主轴的方向",[32,144093,144094],{},"justify-content：设置主轴上的子元素排列方式",[32,144096,144097],{},"flex-wrap：设置子元素是否换行",[32,144099,144100],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[32,144102,144103],{},"align-items：设置侧轴上的子元素排列方式（单行）",[32,144105,144106],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[32,144108,144091],{},[52,144110],{"style":126788,"src":144111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[52,144113],{"style":126788,"src":144114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[29,144116,144117],{"start":565},[32,144118,144094],{},[52,144120],{"style":126788,"src":144121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144123,144124,144127],{},[475,144125,144126],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144129,144130],{},"跟着主轴走",[29,144132,144133],{"start":579},[32,144134,144097],{},[52,144136],{"style":126788,"src":144137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144139,144140],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[29,144142,144143],{"start":593},[32,144144,144100],{},[52,144146],{"style":126788,"src":144147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144149,144150],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144152,144153],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[29,144155,144156],{"start":1769},[32,144157,144103],{},[52,144159],{"style":126788,"src":144160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144162,144163],{},"align-items与align-content之间的区别：",[19,144165,144166],{},"单找items，多找content",[52,144168],{"style":126788,"src":144169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[29,144171,144172],{"start":1783},[32,144173,144106],{},[52,144175],{"style":126788,"src":144176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[129,144178,144180],{"id":144179},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[29,144182,144183],{},[32,144184,144185],{},[45,144186,144187],{},"flex 属性",[19,144189,144190],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[52,144192],{"style":126788,"src":144193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144195,144196],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144198,144199],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[29,144201,144202],{"start":565},[32,144203,144204,201,144207],{},[45,144205,144206],{},"align-self",[45,144208,144209],{},"控制子项自己在侧轴上的排列方式",[52,144211],{"style":126788,"src":144212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144214,144215],{},"单个子盒子在父盒子侧轴上的排列方式",[29,144217,144218],{"start":579},[32,144219,144220,144222],{},[45,144221,95677],{}," 属性定义项目的排列顺序",[52,144224],{"style":126788,"src":144225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[129,144227,144229],{"id":144228},"_2054-背景线性渐变","20.5.4 背景线性渐变",[52,144231],{"style":126788,"src":144232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144234,144235],{},"必须要添加浏览器的私有前缀",[129,144237,144239],{"id":144238},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144241,144242],{},"学到最重要的知识：",[19,144244,144245],{},"flex处理这样的布局思路",[52,144247],{"style":126788,"src":144248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[469,144250,144252],{"className":126932,"code":144251,"language":126934,"meta":54,"style":54},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[475,144253,144254,144260,144270,144280,144290],{"__ignoreMap":54},[478,144255,144256,144258],{"class":480,"line":481},[478,144257,143999],{"class":484},[478,144259,16137],{"class":714},[478,144261,144262,144264,144266,144268],{"class":480,"line":565},[478,144263,128548],{"class":495},[478,144265,51817],{"class":714},[478,144267,51857],{"class":495},[478,144269,1859],{"class":714},[478,144271,144272,144274,144276,144278],{"class":480,"line":579},[478,144273,144028],{"class":495},[478,144275,51817],{"class":714},[478,144277,51972],{"class":495},[478,144279,1859],{"class":714},[478,144281,144282,144284,144286,144288],{"class":480,"line":593},[478,144283,144039],{"class":495},[478,144285,51817],{"class":714},[478,144287,51972],{"class":495},[478,144289,1859],{"class":714},[478,144291,144292],{"class":480,"line":1769},[478,144293,2133],{"class":714},[19,144295,144296],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144298,144299],{},"使用属性选择器",[52,144301],{"style":126788,"src":144302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144304,69269],{},[469,144306,144308],{"className":127679,"code":144307,"language":127681,"meta":54,"style":54},"\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",[475,144309,144310,144315,144329,144334,144354,144359,144378,144383,144402,144407,144426],{"__ignoreMap":54},[478,144311,144312],{"class":480,"line":481},[478,144313,144314],{"class":770},"\u003C!-- 携程网移动端案例结构 -->\n",[478,144316,144317,144319,144321,144323,144325,144327],{"class":480,"line":565},[478,144318,1605],{"class":714},[478,144320,51991],{"class":51680},[478,144322,53866],{"class":484},[478,144324,759],{"class":714},[478,144326,92703],{"class":488},[478,144328,51687],{"class":714},[478,144330,144331],{"class":480,"line":579},[478,144332,144333],{"class":770},"  \u003C!-- 搜索栏 -->\n",[478,144335,144336,144338,144340,144342,144344,144347,144350,144352],{"class":480,"line":593},[478,144337,52524],{"class":714},[478,144339,51991],{"class":51680},[478,144341,53866],{"class":484},[478,144343,759],{"class":714},[478,144345,144346],{"class":488},"\"search-index\"",[478,144348,144349],{"class":714},">...\u003C\u002F",[478,144351,51991],{"class":51680},[478,144353,51687],{"class":714},[478,144355,144356],{"class":480,"line":1769},[478,144357,144358],{"class":770},"  \u003C!-- 焦点图 -->\n",[478,144360,144361,144363,144365,144367,144369,144372,144374,144376],{"class":480,"line":1783},[478,144362,52524],{"class":714},[478,144364,51991],{"class":51680},[478,144366,53866],{"class":484},[478,144368,759],{"class":714},[478,144370,144371],{"class":488},"\"focus\"",[478,144373,144349],{"class":714},[478,144375,51991],{"class":51680},[478,144377,51687],{"class":714},[478,144379,144380],{"class":480,"line":1789},[478,144381,144382],{"class":770},"  \u003C!-- 主导航 -->\n",[478,144384,144385,144387,144389,144391,144393,144396,144398,144400],{"class":480,"line":1880},[478,144386,52524],{"class":714},[478,144388,51991],{"class":51680},[478,144390,53866],{"class":484},[478,144392,759],{"class":714},[478,144394,144395],{"class":488},"\"local-nav\"",[478,144397,144349],{"class":714},[478,144399,51991],{"class":51680},[478,144401,51687],{"class":714},[478,144403,144404],{"class":480,"line":1886},[478,144405,144406],{"class":770},"  \u003C!-- 子导航 -->\n",[478,144408,144409,144411,144413,144415,144417,144420,144422,144424],{"class":480,"line":1898},[478,144410,52524],{"class":714},[478,144412,51991],{"class":51680},[478,144414,53866],{"class":484},[478,144416,759],{"class":714},[478,144418,144419],{"class":488},"\"nav-common\"",[478,144421,144349],{"class":714},[478,144423,51991],{"class":51680},[478,144425,51687],{"class":714},[478,144427,144428,144430,144432],{"class":480,"line":2180},[478,144429,52165],{"class":714},[478,144431,51991],{"class":51680},[478,144433,51687],{"class":714},[19,144435,70833],{},[469,144437,144438],{"className":126932,"code":137384,"language":126934,"meta":54,"style":54},[475,144439,144440,144454,144470],{"__ignoreMap":54},[478,144441,144442,144444,144446,144448,144450,144452],{"class":480,"line":481},[478,144443,54201],{"class":51680},[478,144445,1585],{"class":714},[478,144447,103487],{"class":484},[478,144449,759],{"class":710},[478,144451,63079],{"class":488},[478,144453,137401],{"class":714},[478,144455,144456,144458,144460,144462,144464,144466,144468],{"class":480,"line":565},[478,144457,71276],{"class":495},[478,144459,51817],{"class":714},[478,144461,193],{"class":495},[478,144463,51872],{"class":710},[478,144465,51901],{"class":495},[478,144467,130512],{"class":495},[478,144469,1859],{"class":714},[478,144471,144472],{"class":480,"line":579},[478,144473,2133],{"class":714},[19,144475,144476],{},"总代码和效果展示：",[52,144478],{"style":126788,"src":144479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144481,69269],{},[469,144483,144484],{"className":127679,"code":144307,"language":127681,"meta":54,"style":54},[475,144485,144486,144490,144504,144508,144526,144530,144548,144552,144570,144574,144592],{"__ignoreMap":54},[478,144487,144488],{"class":480,"line":481},[478,144489,144314],{"class":770},[478,144491,144492,144494,144496,144498,144500,144502],{"class":480,"line":565},[478,144493,1605],{"class":714},[478,144495,51991],{"class":51680},[478,144497,53866],{"class":484},[478,144499,759],{"class":714},[478,144501,92703],{"class":488},[478,144503,51687],{"class":714},[478,144505,144506],{"class":480,"line":579},[478,144507,144333],{"class":770},[478,144509,144510,144512,144514,144516,144518,144520,144522,144524],{"class":480,"line":593},[478,144511,52524],{"class":714},[478,144513,51991],{"class":51680},[478,144515,53866],{"class":484},[478,144517,759],{"class":714},[478,144519,144346],{"class":488},[478,144521,144349],{"class":714},[478,144523,51991],{"class":51680},[478,144525,51687],{"class":714},[478,144527,144528],{"class":480,"line":1769},[478,144529,144358],{"class":770},[478,144531,144532,144534,144536,144538,144540,144542,144544,144546],{"class":480,"line":1783},[478,144533,52524],{"class":714},[478,144535,51991],{"class":51680},[478,144537,53866],{"class":484},[478,144539,759],{"class":714},[478,144541,144371],{"class":488},[478,144543,144349],{"class":714},[478,144545,51991],{"class":51680},[478,144547,51687],{"class":714},[478,144549,144550],{"class":480,"line":1789},[478,144551,144382],{"class":770},[478,144553,144554,144556,144558,144560,144562,144564,144566,144568],{"class":480,"line":1880},[478,144555,52524],{"class":714},[478,144557,51991],{"class":51680},[478,144559,53866],{"class":484},[478,144561,759],{"class":714},[478,144563,144395],{"class":488},[478,144565,144349],{"class":714},[478,144567,51991],{"class":51680},[478,144569,51687],{"class":714},[478,144571,144572],{"class":480,"line":1886},[478,144573,144406],{"class":770},[478,144575,144576,144578,144580,144582,144584,144586,144588,144590],{"class":480,"line":1898},[478,144577,52524],{"class":714},[478,144579,51991],{"class":51680},[478,144581,53866],{"class":484},[478,144583,759],{"class":714},[478,144585,144419],{"class":488},[478,144587,144349],{"class":714},[478,144589,51991],{"class":51680},[478,144591,51687],{"class":714},[478,144593,144594,144596,144598],{"class":480,"line":2180},[478,144595,52165],{"class":714},[478,144597,51991],{"class":51680},[478,144599,51687],{"class":714},[19,144601,70833],{},[469,144603,144604],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,144605,144606,144610,144624,144628],{"__ignoreMap":54},[478,144607,144608],{"class":480,"line":481},[478,144609,131043],{"class":770},[478,144611,144612,144614,144616,144618,144620,144622],{"class":480,"line":565},[478,144613,1605],{"class":714},[478,144615,51991],{"class":51680},[478,144617,53866],{"class":484},[478,144619,759],{"class":714},[478,144621,131056],{"class":488},[478,144623,51687],{"class":714},[478,144625,144626],{"class":480,"line":579},[478,144627,131063],{"class":714},[478,144629,144630,144632,144634],{"class":480,"line":593},[478,144631,52165],{"class":714},[478,144633,51991],{"class":51680},[478,144635,51687],{"class":714},[617,144637,138333],{},{"title":54,"searchDepth":565,"depth":565,"links":144639},[144640,144641,144645,144646,144647],{"id":143784,"depth":565,"text":143785},{"id":143816,"depth":565,"text":143817,"children":144642},[144643,144644],{"id":143820,"depth":579,"text":143821},{"id":143837,"depth":579,"text":143838},{"id":143856,"depth":565,"text":143857},{"id":143863,"depth":565,"text":143864},{"id":143950,"depth":565,"text":143951,"children":144648},[144649,144650,144651,144652,144653],{"id":143957,"depth":579,"text":143958},{"id":144085,"depth":579,"text":144086},{"id":144179,"depth":579,"text":144180},{"id":144228,"depth":579,"text":144229},{"id":144238,"depth":579,"text":144239},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143776,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144660,"title":144661,"body":144662,"description":23942,"extension":638,"meta":145889,"navigation":640,"path":145890,"seo":145891,"stem":145892,"__hash__":145893},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144663,"toc":145867},[144664,144667,144671,144675,144678,144681,144685,144690,144693,144696,144699,144702,144705,144762,144765,144770,144773,144776,144780,144791,144795,144798,144801,144808,144813,144817,144820,144826,144829,144833,144836,144843,144846,144849,144856,144859,144866,144869,144872,144879,144882,144885,144887,144904,144908,144911,144914,144917,144921,144924,144927,144930,144933,144936,144939,144941,144944,144947,145009,145012,145122,145129,145135,145138,145141,145145,145148,145152,145157,145160,145167,145170,145176,145181,145184,145187,145190,145193,145196,145199,145202,145205,145261,145263,145289,145293,145296,145299,145302,145310,145313,145316,145320,145376,145379,145383,145389,145400,145403,145408,145411,145414,145420,145423,145426,145429,145432,145435,145438,145441,145444,145469,145475,145478,145481,145484,145487,145490,145493,145498,145501,145504,145507,145515,145518,145525,145528,145531,145533,145557,145559,145562,145565,145568,145571,145574,145577,145580,145614,145617,145620,145654,145661,145664,145667,145670,145673,145676,145679,145686,145689,145692,145695,145698,145705,145708,145711,145718,145721,145724,145728,145731,145734,145737,145740,145743,145746,145749,145752,145754,145778,145780,145804,145808,145819,145822,145825,145828,145831,145834,145837,145840,145843,145846,145849,145852,145855,145858,145861,145864],[10,144665,144661],{"id":144666},"_21-移动端布局实战下篇",[14,144668,144670],{"id":144669},"_211-rem适配布局","21.1 rem适配布局",[129,144672,144674],{"id":144673},"_2111-rem单位","21.1.1 rem单位",[52,144676],{"style":126788,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144679,144680],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[129,144682,144684],{"id":144683},"_2112-媒体查询","21.1.2 媒体查询",[29,144686,144687],{},[32,144688,144689],{},"参数介绍",[52,144691],{"style":126788,"src":144692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[52,144694],{"style":126788,"src":144695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[52,144697],{"style":126788,"src":144698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[52,144700],{"style":126788,"src":144701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[52,144703],{"style":126788,"src":144704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[469,144706,144708],{"className":126932,"code":144707,"language":126934,"meta":54,"style":54},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[475,144709,144710,144715,144734,144741,144754,144758],{"__ignoreMap":54},[478,144711,144712],{"class":480,"line":481},[478,144713,144714],{"class":770},"\u002F* 媒体查询 *\u002F\n",[478,144716,144717,144720,144722,144725,144727,144730,144732],{"class":480,"line":565},[478,144718,144719],{"class":710},"@media",[478,144721,219],{"class":714},[478,144723,144724],{"class":495},"max-width",[478,144726,51817],{"class":714},[478,144728,144729],{"class":495},"768",[478,144731,51872],{"class":710},[478,144733,13008],{"class":714},[478,144735,144736,144739],{"class":480,"line":579},[478,144737,144738],{"class":484},"  .container",[478,144740,16137],{"class":714},[478,144742,144743,144746,144748,144750,144752],{"class":480,"line":593},[478,144744,144745],{"class":495},"    width",[478,144747,51817],{"class":714},[478,144749,1012],{"class":495},[478,144751,1029],{"class":710},[478,144753,1859],{"class":714},[478,144755,144756],{"class":480,"line":1769},[478,144757,127728],{"class":714},[478,144759,144760],{"class":480,"line":1783},[478,144761,2133],{"class":714},[19,144763,144764],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[29,144766,144767],{"start":565},[32,144768,144769],{},"引入资源",[52,144771],{"style":126788,"src":144772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144774,144775],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[129,144777,144779],{"id":144778},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1702,144781,144782,144785,144788],{},[32,144783,144784],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[32,144786,144787],{},"媒体查询可以根据不同设备宽度来修改样式",[32,144789,144790],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144792,144794],{"id":144793},"_212-less基础","21.2 Less基础",[19,144796,144797],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144799,144800],{},"Less可以解决该问题，它是css的扩展语言",[19,144802,144803,144804],{},"Less中文网址： ",[518,144805,144806],{"href":144806,"rel":144807},"http:\u002F\u002Flesscss.cn\u002F",[522],[19,144809,144810],{},[45,144811,144812],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[129,144814,144816],{"id":144815},"_2121-less安装","21.2.1 less安装",[19,144818,144819],{},"如果使用vscode，则无需进行下方安装步骤",[19,144821,144822],{},[518,144823,144824],{"href":144824,"rel":144825},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[522],[52,144827],{"style":126788,"src":144828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[129,144830,144832],{"id":144831},"_2122-less使用","21.2.2 less使用",[19,144834,144835],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[29,144837,144838],{},[32,144839,144840],{},[45,144841,144842],{},"Less 变量",[52,144844],{"style":126788,"src":144845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[52,144847],{"style":126788,"src":144848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[29,144850,144851],{"start":565},[32,144852,144853],{},[45,144854,144855],{},"Less 编译",[52,144857],{"style":126788,"src":144858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[29,144860,144861],{"start":579},[32,144862,144863],{},[45,144864,144865],{},"Less 嵌套",[52,144867],{"style":126788,"src":144868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[52,144870],{"style":126788,"src":144871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[29,144873,144874],{"start":593},[32,144875,144876],{},[45,144877,144878],{},"Less 运算",[52,144880],{"style":126788,"src":144881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144883,144884],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144886,743],{},[1702,144888,144889,144892,144895,144898,144901],{},[32,144890,144891],{},"乘号（*）和除号（\u002F）的写法",[32,144893,144894],{},"运算符中间左右有个空格隔开 1px + 5",[32,144896,144897],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[32,144899,144900],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[32,144902,144903],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144905,144907],{"id":144906},"_213-rem-适配方案","21.3 rem 适配方案",[19,144909,144910],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144912,144913],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[52,144915],{"style":126788,"src":144916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[129,144918,144920],{"id":144919},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144922,144923],{},"rem + 媒体查询 + less 技术",[52,144925],{"style":126788,"src":144926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144928,144929],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144931,144932],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[52,144934],{"style":126788,"src":144935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144937,144938],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144940,15198],{},[52,144942],{"style":126788,"src":144943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144945,144946],{},"index.html:",[469,144948,144950],{"className":126932,"code":144949,"language":126934,"meta":54,"style":54},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[475,144951,144952,144957,144963,144979,144983,144989,145005],{"__ignoreMap":54},[478,144953,144954],{"class":480,"line":481},[478,144955,144956],{"class":770},"\u002F* rem 适配方案 *\u002F\n",[478,144958,144959,144961],{"class":480,"line":565},[478,144960,51015],{"class":51680},[478,144962,16137],{"class":714},[478,144964,144965,144967,144969,144972,144974,144976],{"class":480,"line":579},[478,144966,71006],{"class":495},[478,144968,51817],{"class":714},[478,144970,144971],{"class":495},"62.5",[478,144973,1029],{"class":710},[478,144975,130795],{"class":714},[478,144977,144978],{"class":770},"\u002F* 1rem = 10px *\u002F\n",[478,144980,144981],{"class":480,"line":593},[478,144982,2133],{"class":714},[478,144984,144985,144987],{"class":480,"line":1769},[478,144986,130780],{"class":484},[478,144988,16137],{"class":714},[478,144990,144991,144993,144995,144997,145000,145002],{"class":480,"line":1783},[478,144992,70948],{"class":495},[478,144994,51817],{"class":714},[478,144996,1146],{"class":495},[478,144998,144999],{"class":710},"rem",[478,145001,130795],{"class":714},[478,145003,145004],{"class":770},"\u002F* 100px *\u002F\n",[478,145006,145007],{"class":480,"line":1789},[478,145008,2133],{"class":714},[19,145010,145011],{},"common.less",[469,145013,145015],{"className":126932,"code":145014,"language":126934,"meta":54,"style":54},"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",[475,145016,145017,145023,145038,145042,145048,145062,145066,145070,145074,145080,145094,145098,145104,145118],{"__ignoreMap":54},[478,145018,145019,145021],{"class":480,"line":481},[478,145020,51015],{"class":51680},[478,145022,16137],{"class":714},[478,145024,145025,145027,145029,145031,145033,145035],{"class":480,"line":565},[478,145026,71006],{"class":495},[478,145028,51817],{"class":714},[478,145030,144971],{"class":495},[478,145032,1029],{"class":710},[478,145034,26447],{"class":714},[478,145036,145037],{"class":770},"\u002F* 10px *\u002F\n",[478,145039,145040],{"class":480,"line":579},[478,145041,2133],{"class":714},[478,145043,145044,145046],{"class":480,"line":593},[478,145045,51991],{"class":51680},[478,145047,16137],{"class":714},[478,145049,145050,145052,145054,145056,145058,145060],{"class":480,"line":1769},[478,145051,70948],{"class":495},[478,145053,51817],{"class":714},[478,145055,1146],{"class":495},[478,145057,144999],{"class":710},[478,145059,26447],{"class":714},[478,145061,145004],{"class":770},[478,145063,145064],{"class":480,"line":1783},[478,145065,2133],{"class":714},[478,145067,145068],{"class":480,"line":1789},[478,145069,136393],{"class":714},[478,145071,145072],{"class":480,"line":1880},[478,145073,144956],{"class":770},[478,145075,145076,145078],{"class":480,"line":1886},[478,145077,51015],{"class":51680},[478,145079,16137],{"class":714},[478,145081,145082,145084,145086,145088,145090,145092],{"class":480,"line":1898},[478,145083,71006],{"class":495},[478,145085,51817],{"class":714},[478,145087,144971],{"class":495},[478,145089,1029],{"class":710},[478,145091,130795],{"class":714},[478,145093,144978],{"class":770},[478,145095,145096],{"class":480,"line":2180},[478,145097,2133],{"class":714},[478,145099,145100,145102],{"class":480,"line":2185},[478,145101,130780],{"class":484},[478,145103,16137],{"class":714},[478,145105,145106,145108,145110,145112,145114,145116],{"class":480,"line":2191},[478,145107,70948],{"class":495},[478,145109,51817],{"class":714},[478,145111,1146],{"class":495},[478,145113,144999],{"class":710},[478,145115,130795],{"class":714},[478,145117,145004],{"class":770},[478,145119,145120],{"class":480,"line":2196},[478,145121,2133],{"class":714},[19,145123,145124,145125,145128],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[183,145126,145127],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[469,145130,145133],{"className":145131,"code":145132,"language":5753},[5751],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[475,145134,145132],{"__ignoreMap":54},[19,145136,145137],{},"less保存时会自动变成.css文件",[19,145139,145140],{},"好好搞懂上述代码写法",[129,145142,145144],{"id":145143},"_2132-样式导入样式","21.3.2 样式导入样式",[52,145146],{"style":126788,"src":145147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[129,145149,145151],{"id":145150},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[29,145153,145154],{},[32,145155,145156],{},"准备工作",[52,145158],{"style":126788,"src":145159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145161,145162,145163],{},"github地址：",[518,145164,145165],{"href":145165,"rel":145166},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[522],[19,145168,145169],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145171,145172,145173],{},"js文件引入到index.html中使用的是",[475,145174,145175],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[29,145177,145178],{"start":565},[32,145179,145180],{},"vscode插件",[52,145182],{"style":126788,"src":145183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145185,145186],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145188,145189],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[52,145191],{"style":126788,"src":145192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145194,145195],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[52,145197],{"style":126788,"src":145198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145200,145201],{},"修改成75就可以，alt+z为快捷键",[19,145203,145204],{},"index.css：",[469,145206,145207],{"className":126932,"code":144949,"language":126934,"meta":54,"style":54},[475,145208,145209,145213,145219,145233,145237,145243,145257],{"__ignoreMap":54},[478,145210,145211],{"class":480,"line":481},[478,145212,144956],{"class":770},[478,145214,145215,145217],{"class":480,"line":565},[478,145216,51015],{"class":51680},[478,145218,16137],{"class":714},[478,145220,145221,145223,145225,145227,145229,145231],{"class":480,"line":579},[478,145222,71006],{"class":495},[478,145224,51817],{"class":714},[478,145226,144971],{"class":495},[478,145228,1029],{"class":710},[478,145230,130795],{"class":714},[478,145232,144978],{"class":770},[478,145234,145235],{"class":480,"line":593},[478,145236,2133],{"class":714},[478,145238,145239,145241],{"class":480,"line":1769},[478,145240,130780],{"class":484},[478,145242,16137],{"class":714},[478,145244,145245,145247,145249,145251,145253,145255],{"class":480,"line":1783},[478,145246,70948],{"class":495},[478,145248,51817],{"class":714},[478,145250,1146],{"class":495},[478,145252,144999],{"class":710},[478,145254,130795],{"class":714},[478,145256,145004],{"class":770},[478,145258,145259],{"class":480,"line":1789},[478,145260,2133],{"class":714},[19,145262,144946],{},[469,145264,145265],{"className":126932,"code":127336,"language":126934,"meta":54,"style":54},[475,145266,145267,145273,145285],{"__ignoreMap":54},[478,145268,145269,145271],{"class":480,"line":481},[478,145270,52180],{"class":51680},[478,145272,16137],{"class":714},[478,145274,145275,145277,145279,145281,145283],{"class":480,"line":565},[478,145276,71006],{"class":495},[478,145278,51817],{"class":714},[478,145280,1299],{"class":495},[478,145282,51872],{"class":710},[478,145284,1859],{"class":714},[478,145286,145287],{"class":480,"line":579},[478,145288,2133],{"class":714},[14,145290,145292],{"id":145291},"_214-响应式开发","21.4 响应式开发",[19,145294,145295],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[52,145297],{"style":126788,"src":145298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145300,145301],{},"做法：",[1702,145303,145304,145307],{},[32,145305,145306],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[32,145308,145309],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[52,145311],{"style":126788,"src":145312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145314,145315],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[129,145317,145319],{"id":145318},"_2141-简单代码示范","21.4.1 简单代码示范",[469,145321,145322],{"className":126932,"code":144949,"language":126934,"meta":54,"style":54},[475,145323,145324,145328,145334,145348,145352,145358,145372],{"__ignoreMap":54},[478,145325,145326],{"class":480,"line":481},[478,145327,144956],{"class":770},[478,145329,145330,145332],{"class":480,"line":565},[478,145331,51015],{"class":51680},[478,145333,16137],{"class":714},[478,145335,145336,145338,145340,145342,145344,145346],{"class":480,"line":579},[478,145337,71006],{"class":495},[478,145339,51817],{"class":714},[478,145341,144971],{"class":495},[478,145343,1029],{"class":710},[478,145345,130795],{"class":714},[478,145347,144978],{"class":770},[478,145349,145350],{"class":480,"line":593},[478,145351,2133],{"class":714},[478,145353,145354,145356],{"class":480,"line":1769},[478,145355,130780],{"class":484},[478,145357,16137],{"class":714},[478,145359,145360,145362,145364,145366,145368,145370],{"class":480,"line":1783},[478,145361,70948],{"class":495},[478,145363,51817],{"class":714},[478,145365,1146],{"class":495},[478,145367,144999],{"class":710},[478,145369,130795],{"class":714},[478,145371,145004],{"class":770},[478,145373,145374],{"class":480,"line":1789},[478,145375,2133],{"class":714},[19,145377,145378],{},"父盒子一般命名为container",[129,145380,145382],{"id":145381},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145384,145385,145386],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[45,145387,145388],{},"使得 Web 开发更加快捷",[1702,145390,145391],{},[32,145392,145393,145394],{},"官网：",[45,145395,145396],{},[518,145397,145398],{"href":145398,"rel":145399},"http:\u002F\u002Fgetbootstrap.com\u002F",[522],[19,145401,145402],{},"可以直接去官网拿现成的东西",[29,145404,145405],{},[32,145406,145407],{},"Bootstrap的使用",[19,145409,145410],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145412,145413],{},"Bootstrap 使用四步曲：",[19,145415,145416,145419],{},[45,145417,145418],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[52,145421],{"style":126788,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145424,145425],{},"打开Bootstrap官网，然后下载",[52,145427],{"style":126788,"src":145428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[52,145430],{"style":126788,"src":145431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145433,145434],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145436,145437],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145439,145440],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[52,145442],{"style":126788,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[469,145445,145447],{"className":126932,"code":145446,"language":126934,"meta":54,"style":54},".center {\n  color: red;\n}\n",[475,145448,145449,145455,145465],{"__ignoreMap":54},[478,145450,145451,145453],{"class":480,"line":481},[478,145452,127223],{"class":484},[478,145454,16137],{"class":714},[478,145456,145457,145459,145461,145463],{"class":480,"line":565},[478,145458,71285],{"class":495},[478,145460,51817],{"class":714},[478,145462,57801],{"class":495},[478,145464,1859],{"class":714},[478,145466,145467],{"class":480,"line":579},[478,145468,2133],{"class":714},[19,145470,145471,145474],{},[475,145472,145473],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[52,145476],{"style":126788,"src":145477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[52,145479],{"style":126788,"src":145480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[52,145482],{"style":126788,"src":145483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145485,145486],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[52,145488],{"style":126788,"src":145489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145491,145492],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[29,145494,145495],{"start":565},[32,145496,145497],{},"布局容器",[52,145499],{"style":126788,"src":145500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145502,145503],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145505,145506],{},"container-fluid用于移动式布局比较方便",[29,145508,145509],{"start":579},[32,145510,145511,145512],{},"bootstrap ",[45,145513,145514],{},"栅格系统原理",[52,145516],{"style":126788,"src":145517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[29,145519,145520],{"start":593},[32,145521,145522],{},[45,145523,145524],{},"栅格选项参数",[52,145526],{"style":126788,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145529,145530],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145532,15198],{},[469,145534,145535],{"className":126932,"code":145446,"language":126934,"meta":54,"style":54},[475,145536,145537,145543,145553],{"__ignoreMap":54},[478,145538,145539,145541],{"class":480,"line":481},[478,145540,127223],{"class":484},[478,145542,16137],{"class":714},[478,145544,145545,145547,145549,145551],{"class":480,"line":565},[478,145546,71285],{"class":495},[478,145548,51817],{"class":714},[478,145550,57801],{"class":495},[478,145552,1859],{"class":714},[478,145554,145555],{"class":480,"line":579},[478,145556,2133],{"class":714},[19,145558,135975],{},[52,145560],{"style":126788,"src":145561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145563,145564],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145566,145567],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145569,145570],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145572,145573],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145575,145576],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145578,145579],{},"汇总展示说明：",[469,145581,145582],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,145583,145584,145588,145602,145606],{"__ignoreMap":54},[478,145585,145586],{"class":480,"line":481},[478,145587,131043],{"class":770},[478,145589,145590,145592,145594,145596,145598,145600],{"class":480,"line":565},[478,145591,1605],{"class":714},[478,145593,51991],{"class":51680},[478,145595,53866],{"class":484},[478,145597,759],{"class":714},[478,145599,131056],{"class":488},[478,145601,51687],{"class":714},[478,145603,145604],{"class":480,"line":579},[478,145605,131063],{"class":714},[478,145607,145608,145610,145612],{"class":480,"line":593},[478,145609,52165],{"class":714},[478,145611,51991],{"class":51680},[478,145613,51687],{"class":714},[52,145615],{"style":126788,"src":145616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145618,145619],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[469,145621,145622],{"className":127679,"code":131036,"language":127681,"meta":54,"style":54},[475,145623,145624,145628,145642,145646],{"__ignoreMap":54},[478,145625,145626],{"class":480,"line":481},[478,145627,131043],{"class":770},[478,145629,145630,145632,145634,145636,145638,145640],{"class":480,"line":565},[478,145631,1605],{"class":714},[478,145633,51991],{"class":51680},[478,145635,53866],{"class":484},[478,145637,759],{"class":714},[478,145639,131056],{"class":488},[478,145641,51687],{"class":714},[478,145643,145644],{"class":480,"line":579},[478,145645,131063],{"class":714},[478,145647,145648,145650,145652],{"class":480,"line":593},[478,145649,52165],{"class":714},[478,145651,51991],{"class":51680},[478,145653,51687],{"class":714},[29,145655,145656],{"start":1769},[32,145657,145658],{},[45,145659,145660],{},"列嵌套",[52,145662],{"style":126788,"src":145663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145665,145666],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145668,145669],{},"没加row内部这样：",[52,145671],{"style":126788,"src":145672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145674,145675],{},"加上row之后内部为：",[52,145677],{"style":126788,"src":145678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[29,145680,145681],{"start":1783},[32,145682,145683],{},[45,145684,145685],{},"列偏移",[52,145687],{"style":126788,"src":145688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145690,145691],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145693,145694],{},"要加偏移量，即偏移份数",[19,145696,145697],{},"偏移的份数=12-两个盒子的份数",[29,145699,145700],{"start":1789},[32,145701,145702],{},[45,145703,145704],{},"列排序",[52,145706],{"style":126788,"src":145707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145709,145710],{},"pull拉左；push推右",[29,145712,145713],{"start":1880},[32,145714,145715],{},[45,145716,145717],{},"响应式工具",[52,145719],{"style":126788,"src":145720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145722,145723],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[129,145725,145727],{"id":145726},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145729,145730],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145732,145733],{},"ul {",[19,145735,145736],{},"list-style: none;",[19,145738,145739],{},"margin:0;",[19,145741,145742],{},"padding:0; }",[52,145744],{"style":126788,"src":145745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[52,145747],{"style":126788,"src":145748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145750,145751],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145753,69269],{},[469,145755,145756],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,145757,145758,145764,145774],{"__ignoreMap":54},[478,145759,145760,145762],{"class":480,"line":481},[478,145761,130780],{"class":484},[478,145763,16137],{"class":714},[478,145765,145766,145768,145770,145772],{"class":480,"line":565},[478,145767,131412],{"class":495},[478,145769,51817],{"class":714},[478,145771,382],{"class":495},[478,145773,1859],{"class":714},[478,145775,145776],{"class":480,"line":579},[478,145777,2133],{"class":714},[19,145779,70833],{},[469,145781,145782],{"className":126932,"code":139602,"language":126934,"meta":54,"style":54},[475,145783,145784,145790,145800],{"__ignoreMap":54},[478,145785,145786,145788],{"class":480,"line":481},[478,145787,130780],{"class":484},[478,145789,16137],{"class":714},[478,145791,145792,145794,145796,145798],{"class":480,"line":565},[478,145793,131412],{"class":495},[478,145795,51817],{"class":714},[478,145797,382],{"class":495},[478,145799,1859],{"class":714},[478,145801,145802],{"class":480,"line":579},[478,145803,2133],{"class":714},[14,145805,145807],{"id":145806},"_215-swiper-插件使用","21.5 swiper 插件使用",[1702,145809,145810,145813,145816],{},[32,145811,145812],{},"下载需要的css和js文件html页面中 引入相关文件",[32,145814,145815],{},"官网找到类似案例，复制html结构，css样式 js 语法",[32,145817,145818],{},"根据需求定制修改模块",[52,145820],{"style":126788,"src":145821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145823,145824],{},"解压后将这两部分放到项目中",[52,145826],{"style":126788,"src":145827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145829,145830],{},"这个插件可以帮助我们实现轮播图效果",[19,145832,145833],{},"用法：",[52,145835],{"style":126788,"src":145836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145838,145839],{},"找到自己喜欢的",[52,145841],{"style":126788,"src":145842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145844,145845],{},"右键，查看网页源代码",[52,145847],{"style":126788,"src":145848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145850,145851],{},"复制人家的结构内容",[19,145853,145854],{},"然后去看API文档：",[52,145856],{"style":126788,"src":145857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145859,145860],{},"可以看看如何修改样式",[19,145862,145863],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[617,145865,145866],{},"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":54,"searchDepth":565,"depth":565,"links":145868},[145869,145874,145878,145883,145888],{"id":144669,"depth":565,"text":144670,"children":145870},[145871,145872,145873],{"id":144673,"depth":579,"text":144674},{"id":144683,"depth":579,"text":144684},{"id":144778,"depth":579,"text":144779},{"id":144793,"depth":565,"text":144794,"children":145875},[145876,145877],{"id":144815,"depth":579,"text":144816},{"id":144831,"depth":579,"text":144832},{"id":144906,"depth":565,"text":144907,"children":145879},[145880,145881,145882],{"id":144919,"depth":579,"text":144920},{"id":145143,"depth":579,"text":145144},{"id":145150,"depth":579,"text":145151},{"id":145291,"depth":565,"text":145292,"children":145884},[145885,145886,145887],{"id":145318,"depth":579,"text":145319},{"id":145381,"depth":579,"text":145382},{"id":145726,"depth":579,"text":145727},{"id":145806,"depth":565,"text":145807},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144661,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145895,"title":145896,"body":145897,"description":23942,"extension":638,"meta":146117,"navigation":640,"path":146118,"seo":146119,"stem":146120,"__hash__":146121},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145898,"toc":146113},[145899,145902,145906,145909,145924,145929,145932,145937,145972,145977,145989,145994,146007,146012,146029,146034,146054,146059,146077,146080,146083,146086,146089,146093,146096,146099,146102,146105,146108,146111],[10,145900,145896],{"id":145901},"_22-代码提交与新型相对单位",[14,145903,145905],{"id":145904},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145907,145908],{},"法1：",[29,145910,145911,145918,145921],{},[32,145912,145913,145914],{},"登录网站注册：",[518,145915,145916],{"href":145916,"rel":145917},"https:\u002F\u002Fgitee.com\u002F",[522],[32,145919,145920],{},"码云创建新的仓库",[32,145922,145923],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1702,145925,145926],{},[32,145927,145928],{},"在网站根目录右键-- Git Bash Here",[52,145930],{"style":126788,"src":145931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1702,145933,145934],{},[32,145935,145936],{},"如果是第一次利用git提交，请配置好全局选项",[469,145938,145940],{"className":117676,"code":145939,"language":117678,"meta":54,"style":54},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[475,145941,145942,145958],{"__ignoreMap":54},[478,145943,145944,145947,145949,145952,145955],{"class":480,"line":481},[478,145945,145946],{"class":484},"git",[478,145948,120099],{"class":488},[478,145950,145951],{"class":495}," --global",[478,145953,145954],{"class":488}," user.name",[478,145956,145957],{"class":488}," \"你的名字\"\n",[478,145959,145960,145962,145964,145966,145969],{"class":480,"line":565},[478,145961,145946],{"class":484},[478,145963,120099],{"class":488},[478,145965,145951],{"class":495},[478,145967,145968],{"class":488}," user.email",[478,145970,145971],{"class":488}," \"你的邮箱\"\n",[1702,145973,145974],{},[32,145975,145976],{},"初始化仓库",[469,145978,145980],{"className":117676,"code":145979,"language":117678,"meta":54,"style":54},"git init\n",[475,145981,145982],{"__ignoreMap":54},[478,145983,145984,145986],{"class":480,"line":481},[478,145985,145946],{"class":484},[478,145987,145988],{"class":488}," init\n",[1702,145990,145991],{},[32,145992,145993],{},"把本地文件放到暂存区",[469,145995,145997],{"className":117676,"code":145996,"language":117678,"meta":54,"style":54},"git add .\n",[475,145998,145999],{"__ignoreMap":54},[478,146000,146001,146003,146005],{"class":480,"line":481},[478,146002,145946],{"class":484},[478,146004,5775],{"class":488},[478,146006,29121],{"class":488},[1702,146008,146009],{},[32,146010,146011],{},"把本地文件放到本地仓库里面",[469,146013,146015],{"className":117676,"code":146014,"language":117678,"meta":54,"style":54},"git commit -m \"first commit\"\n",[475,146016,146017],{"__ignoreMap":54},[478,146018,146019,146021,146024,146026],{"class":480,"line":481},[478,146020,145946],{"class":484},[478,146022,146023],{"class":488}," commit",[478,146025,101262],{"class":495},[478,146027,146028],{"class":488}," \"first commit\"\n",[1702,146030,146031],{},[32,146032,146033],{},"链接远程仓库",[469,146035,146037],{"className":117676,"code":146036,"language":117678,"meta":54,"style":54},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[475,146038,146039],{"__ignoreMap":54},[478,146040,146041,146043,146046,146048,146051],{"class":480,"line":481},[478,146042,145946],{"class":484},[478,146044,146045],{"class":488}," remote",[478,146047,5775],{"class":488},[478,146049,146050],{"class":488}," origin",[478,146052,146053],{"class":488}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1702,146055,146056],{},[32,146057,146058],{},"把本地仓库的文件推送到远程仓库 push",[469,146060,146062],{"className":117676,"code":146061,"language":117678,"meta":54,"style":54},"git push -u origin master\n",[475,146063,146064],{"__ignoreMap":54},[478,146065,146066,146068,146070,146072,146074],{"class":480,"line":481},[478,146067,145946],{"class":484},[478,146069,29396],{"class":488},[478,146071,28670],{"class":495},[478,146073,146050],{"class":488},[478,146075,146076],{"class":488}," master\n",[52,146078],{"style":126788,"src":146079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146081,146082],{},"上方方法暂未实现，后边学完git后在整",[19,146084,146085],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[52,146087],{"style":126788,"src":146088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146090,146092],{"id":146091},"_222-新型相对单位","22.2 新型相对单位",[52,146094],{"style":126788,"src":146095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[52,146097],{"style":126788,"src":146098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146100,146101],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146103,146104],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[52,146106],{"style":126788,"src":146107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146109,146110],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[617,146112,619],{},{"title":54,"searchDepth":565,"depth":565,"links":146114},[146115,146116],{"id":145904,"depth":565,"text":145905},{"id":146091,"depth":565,"text":146092},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145896,"description":23942},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146123,"title":146124,"body":146125,"description":146129,"extension":638,"meta":146130,"navigation":640,"path":146131,"seo":146132,"stem":146133,"__hash__":146134},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146126,"toc":146127},[],{"title":54,"searchDepth":565,"depth":565,"links":146128},[],"自己正经开始学编程的第一门语言！",{"category":93219},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146124,"description":146129},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146136,"title":146137,"body":146138,"description":23942,"extension":638,"meta":147285,"navigation":640,"path":147286,"seo":147287,"stem":147288,"__hash__":147289},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146139,"toc":147261},[146140,146143,146147,146150,146153,146178,146181,146187,146191,146194,146221,146224,146264,146267,146279,146282,146288,146292,146296,146323,146340,146347,146351,146354,146380,146383,146387,146390,146430,146433,146450,146456,146460,146465,146509,146512,146530,146533,146601,146605,146612,146615,146630,146633,146642,146645,146656,146659,146668,146671,146688,146691,146706,146710,146714,146717,146719,146739,146743,146746,146749,146760,146763,146769,146773,146779,146806,146809,146821,146824,146835,146838,146844,146848,146854,146904,146907,146949,146952,146985,146988,147022,147026,147029,147049,147052,147088,147091,147104,147108,147112,147118,147121,147134,147138,147141,147147,147150,147154,147157,147160,147209,147213,147229,147235,147242,147248,147258],[10,146141,146137],{"id":146142},"_1-python环境与第一个程序",[14,146144,146146],{"id":146145},"_11-什么是python","1.1 什么是Python",[19,146148,146149],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146151,146152],{},"理解 Python 时抓住三个关键词：",[29,146154,146155,146158,146161],{},[32,146156,146157],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[32,146159,146160],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[32,146162,146163,146164,916,146167,916,146170,916,146173,916,146175,28765],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[475,146165,146166],{},"os",[475,146168,146169],{},"sys",[475,146171,146172],{},"json",[475,146174,58240],{},[475,146176,146177],{},"datetime",[19,146179,146180],{},"Python 程序的运行链路：",[469,146182,146185],{"className":146183,"code":146184,"language":5753,"meta":54},[5751],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[475,146186,146184],{"__ignoreMap":54},[14,146188,146190],{"id":146189},"_12-python解释器","1.2 Python解释器",[19,146192,146193],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[469,146195,146197],{"className":471,"code":146196,"language":473,"meta":54,"style":54},"python --version\npython3 --version\npython\npython3\n",[475,146198,146199,146205,146211,146216],{"__ignoreMap":54},[478,146200,146201,146203],{"class":480,"line":481},[478,146202,30760],{"class":484},[478,146204,26673],{"class":495},[478,146206,146207,146209],{"class":480,"line":565},[478,146208,101259],{"class":484},[478,146210,26673],{"class":495},[478,146212,146213],{"class":480,"line":579},[478,146214,146215],{"class":484},"python\n",[478,146217,146218],{"class":480,"line":593},[478,146219,146220],{"class":484},"python3\n",[19,146222,146223],{},"进入交互模式后，可以直接输入表达式：",[469,146225,146227],{"className":30758,"code":146226,"language":30760,"meta":54,"style":54},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[475,146228,146229,146240,146245,146259],{"__ignoreMap":54},[478,146230,146231,146234,146236,146238],{"class":480,"line":481},[478,146232,146233],{"class":710},">>>",[478,146235,25498],{"class":495},[478,146237,45946],{"class":710},[478,146239,48103],{"class":495},[478,146241,146242],{"class":480,"line":565},[478,146243,146244],{"class":495},"3\n",[478,146246,146247,146249,146252,146254,146257],{"class":480,"line":579},[478,146248,146233],{"class":710},[478,146250,146251],{"class":495}," print",[478,146253,263],{"class":714},[478,146255,146256],{"class":488},"\"hello python\"",[478,146258,720],{"class":714},[478,146260,146261],{"class":480,"line":593},[478,146262,146263],{"class":714},"hello python\n",[19,146265,146266],{},"退出交互模式：",[469,146268,146270],{"className":30758,"code":146269,"language":30760,"meta":54,"style":54},"exit()\n",[475,146271,146272],{"__ignoreMap":54},[478,146273,146274,146277],{"class":480,"line":481},[478,146275,146276],{"class":495},"exit",[478,146278,2542],{"class":714},[19,146280,146281],{},"或使用快捷键：",[469,146283,146286],{"className":146284,"code":146285,"language":5753,"meta":54},[5751],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[475,146287,146285],{"__ignoreMap":54},[14,146289,146291],{"id":146290},"_13-安装python","1.3 安装Python",[129,146293,146295],{"id":146294},"_131-windows安装","1.3.1 Windows安装",[29,146297,146298,146305,146308,146314,146320],{},[32,146299,146300,146301],{},"打开 Python 官网：",[518,146302,146303],{"href":146303,"rel":146304},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[522],[32,146306,146307],{},"下载 Windows Installer。",[32,146309,146310,146311,28765],{},"安装时勾选 ",[475,146312,146313],{},"Add Python to PATH",[32,146315,146316,146317,28765],{},"点击 ",[475,146318,146319],{},"Install Now",[32,146321,146322],{},"安装完成后打开命令提示符验证：",[469,146324,146326],{"className":471,"code":146325,"language":473,"meta":54,"style":54},"python --version\npip --version\n",[475,146327,146328,146334],{"__ignoreMap":54},[478,146329,146330,146332],{"class":480,"line":481},[478,146331,30760],{"class":484},[478,146333,26673],{"class":495},[478,146335,146336,146338],{"class":480,"line":565},[478,146337,485],{"class":484},[478,146339,26673],{"class":495},[19,146341,146342,146343,146346],{},"如果提示 ",[475,146344,146345],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[129,146348,146350],{"id":146349},"_132-macos安装","1.3.2 macOS安装",[19,146352,146353],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[469,146355,146357],{"className":471,"code":146356,"language":473,"meta":54,"style":54},"brew install python\npython3 --version\npip3 --version\n",[475,146358,146359,146368,146374],{"__ignoreMap":54},[478,146360,146361,146364,146366],{"class":480,"line":481},[478,146362,146363],{"class":484},"brew",[478,146365,489],{"class":488},[478,146367,124698],{"class":488},[478,146369,146370,146372],{"class":480,"line":565},[478,146371,101259],{"class":484},[478,146373,26673],{"class":495},[478,146375,146376,146378],{"class":480,"line":579},[478,146377,120080],{"class":484},[478,146379,26673],{"class":495},[19,146381,146382],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[129,146384,146386],{"id":146385},"_133-linux安装","1.3.3 Linux安装",[19,146388,146389],{},"Ubuntu\u002FDebian：",[469,146391,146393],{"className":471,"code":146392,"language":473,"meta":54,"style":54},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[475,146394,146395,146403,146418,146424],{"__ignoreMap":54},[478,146396,146397,146399,146401],{"class":480,"line":481},[478,146398,24956],{"class":484},[478,146400,117697],{"class":488},[478,146402,26622],{"class":488},[478,146404,146405,146407,146409,146411,146413,146415],{"class":480,"line":565},[478,146406,24956],{"class":484},[478,146408,117697],{"class":488},[478,146410,489],{"class":488},[478,146412,104783],{"class":488},[478,146414,101178],{"class":488},[478,146416,146417],{"class":488}," python3-venv\n",[478,146419,146420,146422],{"class":480,"line":579},[478,146421,101259],{"class":484},[478,146423,26673],{"class":495},[478,146425,146426,146428],{"class":480,"line":593},[478,146427,120080],{"class":484},[478,146429,26673],{"class":495},[19,146431,146432],{},"Fedora：",[469,146434,146436],{"className":471,"code":146435,"language":473,"meta":54,"style":54},"sudo dnf install python3 python3-pip\n",[475,146437,146438],{"__ignoreMap":54},[478,146439,146440,146442,146444,146446,146448],{"class":480,"line":481},[478,146441,24956],{"class":484},[478,146443,26695],{"class":488},[478,146445,489],{"class":488},[478,146447,104783],{"class":488},[478,146449,120145],{"class":488},[19,146451,146452,146453,146455],{},"Linux 上通常使用 ",[475,146454,101259],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146457,146459],{"id":146458},"_14-pip包管理器","1.4 pip包管理器",[19,146461,146462,146464],{},[475,146463,485],{}," 用来安装第三方库。",[469,146466,146468],{"className":471,"code":146467,"language":473,"meta":54,"style":54},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[475,146469,146470,146479,146488,146496,146502],{"__ignoreMap":54},[478,146471,146472,146474,146476],{"class":480,"line":481},[478,146473,485],{"class":484},[478,146475,489],{"class":488},[478,146477,146478],{"class":488}," requests\n",[478,146480,146481,146483,146486],{"class":480,"line":565},[478,146482,485],{"class":484},[478,146484,146485],{"class":488}," uninstall",[478,146487,146478],{"class":488},[478,146489,146490,146492,146494],{"class":480,"line":579},[478,146491,485],{"class":484},[478,146493,117954],{"class":488},[478,146495,146478],{"class":488},[478,146497,146498,146500],{"class":480,"line":593},[478,146499,485],{"class":484},[478,146501,119335],{"class":488},[478,146503,146504,146506],{"class":480,"line":1769},[478,146505,485],{"class":484},[478,146507,146508],{"class":488}," freeze\n",[19,146510,146511],{},"国内网络较慢时可以临时使用镜像：",[469,146513,146515],{"className":471,"code":146514,"language":473,"meta":54,"style":54},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[475,146516,146517],{"__ignoreMap":54},[478,146518,146519,146521,146523,146526,146528],{"class":480,"line":481},[478,146520,485],{"class":484},[478,146522,489],{"class":488},[478,146524,146525],{"class":488}," requests",[478,146527,26810],{"class":495},[478,146529,120108],{"class":488},[19,146531,146532],{},"常见第三方库：",[371,146534,146535,146544],{},[374,146536,146537],{},[377,146538,146539,146542],{},[380,146540,146541],{},"库",[380,146543,103076],{},[388,146545,146546,146554,146561,146569,146577,146585,146593],{},[377,146547,146548,146551],{},[393,146549,146550],{},"requests",[393,146552,146553],{},"网络请求",[377,146555,146556,146558],{},[393,146557,101006],{},[393,146559,146560],{},"数值计算",[377,146562,146563,146566],{},[393,146564,146565],{},"pandas",[393,146567,146568],{},"表格数据处理",[377,146570,146571,146574],{},[393,146572,146573],{},"matplotlib",[393,146575,146576],{},"绘图",[377,146578,146579,146582],{},[393,146580,146581],{},"pyecharts",[393,146583,146584],{},"ECharts 图表",[377,146586,146587,146590],{},[393,146588,146589],{},"flask",[393,146591,146592],{},"Web 后端",[377,146594,146595,146598],{},[393,146596,146597],{},"pytest",[393,146599,146600],{},"自动化测试",[14,146602,146604],{"id":146603},"_15-虚拟环境","1.5 虚拟环境",[19,146606,146607,146608,146611],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[475,146609,146610],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146613,146614],{},"创建虚拟环境：",[469,146616,146618],{"className":471,"code":146617,"language":473,"meta":54,"style":54},"python -m venv .venv\n",[475,146619,146620],{"__ignoreMap":54},[478,146621,146622,146624,146626,146628],{"class":480,"line":481},[478,146623,30760],{"class":484},[478,146625,101262],{"class":495},[478,146627,101265],{"class":488},[478,146629,101268],{"class":488},[19,146631,146632],{},"Windows 激活：",[469,146634,146636],{"className":471,"code":146635,"language":473,"meta":54,"style":54},".venv\\Scripts\\activate\n",[475,146637,146638],{"__ignoreMap":54},[478,146639,146640],{"class":480,"line":481},[478,146641,146635],{"class":484},[19,146643,146644],{},"macOS\u002FLinux 激活：",[469,146646,146648],{"className":471,"code":146647,"language":473,"meta":54,"style":54},"source .venv\u002Fbin\u002Factivate\n",[475,146649,146650],{"__ignoreMap":54},[478,146651,146652,146654],{"class":480,"line":481},[478,146653,101273],{"class":495},[478,146655,101276],{"class":488},[19,146657,146658],{},"退出虚拟环境：",[469,146660,146662],{"className":471,"code":146661,"language":473,"meta":54,"style":54},"deactivate\n",[475,146663,146664],{"__ignoreMap":54},[478,146665,146666],{"class":480,"line":481},[478,146667,146661],{"class":484},[19,146669,146670],{},"保存依赖：",[469,146672,146674],{"className":471,"code":146673,"language":473,"meta":54,"style":54},"pip freeze > requirements.txt\n",[475,146675,146676],{"__ignoreMap":54},[478,146677,146678,146680,146683,146685],{"class":480,"line":481},[478,146679,485],{"class":484},[478,146681,146682],{"class":488}," freeze",[478,146684,26602],{"class":710},[478,146686,146687],{"class":488}," requirements.txt\n",[19,146689,146690],{},"安装依赖：",[469,146692,146694],{"className":471,"code":146693,"language":473,"meta":54,"style":54},"pip install -r requirements.txt\n",[475,146695,146696],{"__ignoreMap":54},[478,146697,146698,146700,146702,146704],{"class":480,"line":481},[478,146699,485],{"class":484},[478,146701,489],{"class":488},[478,146703,120019],{"class":495},[478,146705,146687],{"class":488},[14,146707,146709],{"id":146708},"_16-开发工具","1.6 开发工具",[129,146711,146713],{"id":146712},"_161-pycharm","1.6.1 PyCharm",[19,146715,146716],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146718,122442],{},[29,146720,146721,146724,146727,146733,146736],{},[32,146722,146723],{},"New Project：创建项目。",[32,146725,146726],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[32,146728,146729,146730,126363],{},"New Python File：创建 ",[475,146731,146732],{},".py",[32,146734,146735],{},"Run：运行当前文件。",[32,146737,146738],{},"Debug：断点调试。",[129,146740,146742],{"id":146741},"_162-vs-code","1.6.2 VS Code",[19,146744,146745],{},"VS Code 轻量，适合后续多语言开发。",[19,146747,146748],{},"建议安装插件：",[29,146750,146751,146754,146757],{},[32,146752,146753],{},"Python。",[32,146755,146756],{},"Pylance。",[32,146758,146759],{},"Jupyter。",[19,146761,146762],{},"选择解释器：",[469,146764,146767],{"className":146765,"code":146766,"language":5753,"meta":54},[5751],"Ctrl + Shift + P -> Python: Select Interpreter\n",[475,146768,146766],{"__ignoreMap":54},[14,146770,146772],{"id":146771},"_17-第一个python程序","1.7 第一个Python程序",[19,146774,146775,146776,24998],{},"创建文件 ",[475,146777,146778],{},"hello.py",[469,146780,146782],{"className":30758,"code":146781,"language":30760,"meta":54,"style":54},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[475,146783,146784,146795],{"__ignoreMap":54},[478,146785,146786,146788,146790,146793],{"class":480,"line":481},[478,146787,30795],{"class":495},[478,146789,263],{"class":714},[478,146791,146792],{"class":488},"\"Hello World\"",[478,146794,720],{"class":714},[478,146796,146797,146799,146801,146804],{"class":480,"line":565},[478,146798,30795],{"class":495},[478,146800,263],{"class":714},[478,146802,146803],{"class":488},"\"你好，Python\"",[478,146805,720],{"class":714},[19,146807,146808],{},"在终端运行：",[469,146810,146812],{"className":471,"code":146811,"language":473,"meta":54,"style":54},"python hello.py\n",[475,146813,146814],{"__ignoreMap":54},[478,146815,146816,146818],{"class":480,"line":481},[478,146817,30760],{"class":484},[478,146819,146820],{"class":488}," hello.py\n",[19,146822,146823],{},"或：",[469,146825,146827],{"className":471,"code":146826,"language":473,"meta":54,"style":54},"python3 hello.py\n",[475,146828,146829],{"__ignoreMap":54},[478,146830,146831,146833],{"class":480,"line":481},[478,146832,101259],{"class":484},[478,146834,146820],{"class":488},[19,146836,146837],{},"输出：",[469,146839,146842],{"className":146840,"code":146841,"language":5753,"meta":54},[5751],"Hello World\n你好，Python\n",[475,146843,146841],{"__ignoreMap":54},[14,146845,146847],{"id":146846},"_18-print函数","1.8 print函数",[19,146849,146850,146853],{},[475,146851,146852],{},"print()"," 用来输出内容。",[469,146855,146857],{"className":30758,"code":146856,"language":30760,"meta":54,"style":54},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[475,146858,146859,146869,146879,146889],{"__ignoreMap":54},[478,146860,146861,146863,146865,146867],{"class":480,"line":481},[478,146862,30795],{"class":495},[478,146864,263],{"class":714},[478,146866,6410],{"class":488},[478,146868,720],{"class":714},[478,146870,146871,146873,146875,146877],{"class":480,"line":565},[478,146872,30795],{"class":495},[478,146874,263],{"class":714},[478,146876,1012],{"class":495},[478,146878,720],{"class":714},[478,146880,146881,146883,146885,146887],{"class":480,"line":579},[478,146882,30795],{"class":495},[478,146884,263],{"class":714},[478,146886,762],{"class":495},[478,146888,720],{"class":714},[478,146890,146891,146893,146895,146898,146900,146902],{"class":480,"line":593},[478,146892,30795],{"class":495},[478,146894,263],{"class":714},[478,146896,146897],{"class":488},"\"年龄:\"",[478,146899,13001],{"class":714},[478,146901,1348],{"class":495},[478,146903,720],{"class":714},[19,146905,146906],{},"多个内容用逗号隔开，默认中间加空格：",[469,146908,146910],{"className":30758,"code":146909,"language":30760,"meta":54,"style":54},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[475,146911,146912,146922,146932],{"__ignoreMap":54},[478,146913,146914,146917,146919],{"class":480,"line":481},[478,146915,146916],{"class":714},"name ",[478,146918,759],{"class":710},[478,146920,146921],{"class":488}," \"张三\"\n",[478,146923,146924,146927,146929],{"class":480,"line":565},[478,146925,146926],{"class":714},"age ",[478,146928,759],{"class":710},[478,146930,146931],{"class":495}," 18\n",[478,146933,146934,146936,146938,146941,146944,146946],{"class":480,"line":579},[478,146935,30795],{"class":495},[478,146937,263],{"class":714},[478,146939,146940],{"class":488},"\"姓名:\"",[478,146942,146943],{"class":714},", name, ",[478,146945,146897],{"class":488},[478,146947,146948],{"class":714},", age)\n",[19,146950,146951],{},"修改分隔符：",[469,146953,146955],{"className":30758,"code":146954,"language":30760,"meta":54,"style":54},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[475,146956,146957],{"__ignoreMap":54},[478,146958,146959,146961,146963,146966,146968,146970,146972,146974,146976,146979,146981,146983],{"class":480,"line":481},[478,146960,30795],{"class":495},[478,146962,263],{"class":714},[478,146964,146965],{"class":488},"\"2024\"",[478,146967,13001],{"class":714},[478,146969,54696],{"class":488},[478,146971,13001],{"class":714},[478,146973,54696],{"class":488},[478,146975,13001],{"class":714},[478,146977,146978],{"class":5782},"sep",[478,146980,759],{"class":710},[478,146982,32863],{"class":488},[478,146984,720],{"class":714},[19,146986,146987],{},"修改结尾符：",[469,146989,146991],{"className":30758,"code":146990,"language":30760,"meta":54,"style":54},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[475,146992,146993,147011],{"__ignoreMap":54},[478,146994,146995,146997,146999,147001,147003,147005,147007,147009],{"class":480,"line":481},[478,146996,30795],{"class":495},[478,146998,263],{"class":714},[478,147000,6410],{"class":488},[478,147002,13001],{"class":714},[478,147004,46181],{"class":5782},[478,147006,759],{"class":710},[478,147008,4925],{"class":488},[478,147010,720],{"class":714},[478,147012,147013,147015,147017,147020],{"class":480,"line":565},[478,147014,30795],{"class":495},[478,147016,263],{"class":714},[478,147018,147019],{"class":488},"\"python\"",[478,147021,720],{"class":714},[14,147023,147025],{"id":147024},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147027,147028],{},"交互运行适合临时验证：",[469,147030,147032],{"className":30758,"code":147031,"language":30760,"meta":54,"style":54},">>> 10 * 3\n30\n",[475,147033,147034,147044],{"__ignoreMap":54},[478,147035,147036,147038,147040,147042],{"class":480,"line":481},[478,147037,146233],{"class":710},[478,147039,2604],{"class":495},[478,147041,7084],{"class":710},[478,147043,120416],{"class":495},[478,147045,147046],{"class":480,"line":565},[478,147047,147048],{"class":495},"30\n",[19,147050,147051],{},"脚本运行适合保存程序：",[469,147053,147055],{"className":30758,"code":147054,"language":30760,"meta":54,"style":54},"price = 8\ncount = 5\nprint(price * count)\n",[475,147056,147057,147067,147076],{"__ignoreMap":54},[478,147058,147059,147062,147064],{"class":480,"line":481},[478,147060,147061],{"class":714},"price ",[478,147063,759],{"class":710},[478,147065,147066],{"class":495}," 8\n",[478,147068,147069,147072,147074],{"class":480,"line":565},[478,147070,147071],{"class":714},"count ",[478,147073,759],{"class":710},[478,147075,54807],{"class":495},[478,147077,147078,147080,147083,147085],{"class":480,"line":579},[478,147079,30795],{"class":495},[478,147081,147082],{"class":714},"(price ",[478,147084,1155],{"class":710},[478,147086,147087],{"class":714}," count)\n",[19,147089,147090],{},"实际学习中推荐：",[29,147092,147093,147096,147101],{},[32,147094,147095],{},"临时试一个语法，用交互模式。",[32,147097,147098,147099,126363],{},"写完整练习，用 ",[475,147100,146732],{},[32,147102,147103],{},"写项目，用独立目录和虚拟环境。",[14,147105,147107],{"id":147106},"_110-常见错误","1.10 常见错误",[129,147109,147111],{"id":147110},"_1101-命令找不到","1.10.1 命令找不到",[469,147113,147116],{"className":147114,"code":147115,"language":5753,"meta":54},[5751],"python: command not found\n",[475,147117,147115],{"__ignoreMap":54},[19,147119,147120],{},"原因：",[29,147122,147123,147126,147129],{},[32,147124,147125],{},"没安装 Python。",[32,147127,147128],{},"PATH 没配置。",[32,147130,147131,147132,28765],{},"Linux\u002FmacOS 应该使用 ",[475,147133,101259],{},[129,147135,147137],{"id":147136},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147139,147140],{},"不要把文件命名为：",[469,147142,147145],{"className":147143,"code":147144,"language":5753,"meta":54},[5751],"random.py\njson.py\ntime.py\nrequests.py\n",[475,147146,147144],{"__ignoreMap":54},[19,147148,147149],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[129,147151,147153],{"id":147152},"_1103-中文乱码","1.10.3 中文乱码",[19,147155,147156],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147158,147159],{},"如果读写文件出现乱码，要明确指定编码：",[469,147161,147163],{"className":30758,"code":147162,"language":30760,"meta":54,"style":54},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[475,147164,147165,147199],{"__ignoreMap":54},[478,147166,147167,147169,147172,147174,147177,147179,147182,147184,147187,147189,147192,147194,147196],{"class":480,"line":481},[478,147168,108213],{"class":710},[478,147170,147171],{"class":495}," open",[478,147173,263],{"class":714},[478,147175,147176],{"class":488},"\"data.txt\"",[478,147178,13001],{"class":714},[478,147180,147181],{"class":488},"\"r\"",[478,147183,13001],{"class":714},[478,147185,147186],{"class":5782},"encoding",[478,147188,759],{"class":710},[478,147190,147191],{"class":488},"\"utf-8\"",[478,147193,14280],{"class":714},[478,147195,31763],{"class":710},[478,147197,147198],{"class":714}," f:\n",[478,147200,147201,147204,147206],{"class":480,"line":565},[478,147202,147203],{"class":714},"    content ",[478,147205,759],{"class":710},[478,147207,147208],{"class":714}," f.read()\n",[14,147210,147212],{"id":147211},"_111-本章练习","1.11 本章练习",[29,147214,147215,147218,147224],{},[32,147216,147217],{},"安装 Python，并在终端输出版本号。",[32,147219,147220,147221,147223],{},"新建 ",[475,147222,146778],{},"，输出自己的姓名、年龄、学习目标。",[32,147225,104746,147226,147228],{},[475,147227,146852],{}," 输出下面格式：",[469,147230,147233],{"className":147231,"code":147232,"language":5753,"meta":54},[5751],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[475,147234,147232],{"__ignoreMap":54},[29,147236,147237],{"start":593},[32,147238,104746,147239,147241],{},[475,147240,146978],{}," 输出日期：",[469,147243,147246],{"className":147244,"code":147245,"language":5753,"meta":54},[5751],"2024-10-10\n",[475,147247,147245],{"__ignoreMap":54},[29,147249,147250],{"start":1769},[32,147251,104746,147252,147254,147255,147257],{},[475,147253,46181],{}," 让两次 ",[475,147256,146852],{}," 输出在同一行。",[617,147259,147260],{},"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":54,"searchDepth":565,"depth":565,"links":147262},[147263,147264,147265,147270,147271,147272,147276,147277,147278,147279,147284],{"id":146145,"depth":565,"text":146146},{"id":146189,"depth":565,"text":146190},{"id":146290,"depth":565,"text":146291,"children":147266},[147267,147268,147269],{"id":146294,"depth":579,"text":146295},{"id":146349,"depth":579,"text":146350},{"id":146385,"depth":579,"text":146386},{"id":146458,"depth":565,"text":146459},{"id":146603,"depth":565,"text":146604},{"id":146708,"depth":565,"text":146709,"children":147273},[147274,147275],{"id":146712,"depth":579,"text":146713},{"id":146741,"depth":579,"text":146742},{"id":146771,"depth":565,"text":146772},{"id":146846,"depth":565,"text":146847},{"id":147024,"depth":565,"text":147025},{"id":147106,"depth":565,"text":147107,"children":147280},[147281,147282,147283],{"id":147110,"depth":579,"text":147111},{"id":147136,"depth":579,"text":147137},{"id":147152,"depth":579,"text":147153},{"id":147211,"depth":565,"text":147212},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146137,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147291,"title":147292,"body":147293,"description":23942,"extension":638,"meta":149697,"navigation":640,"path":149698,"seo":149699,"stem":149700,"__hash__":149701},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147294,"toc":149682},[147295,147298,147302,147305,147308,147325,147328,147370,147373,147377,147380,147383,147420,147423,147457,147460,147552,147556,147570,147573,147600,147603,147607,147710,147717,147720,147737,147741,147748,147937,147940,148013,148017,148020,148104,148107,148139,148143,148347,148350,148354,148360,148462,148465,148721,148725,148728,148731,148745,148747,148933,148937,149299,149305,149309,149312,149436,149439,149618,149621,149625,149658,149662,149679],[10,147296,147292],{"id":147297},"_10-json与pyecharts折线图",[14,147299,147301],{"id":147300},"_101-数据可视化","10.1 数据可视化",[19,147303,147304],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147306,147307],{},"常见图表：",[29,147309,147310,147313,147316,147319,147322],{},[32,147311,147312],{},"折线图：看趋势。",[32,147314,147315],{},"柱状图：看分类对比。",[32,147317,147318],{},"饼图：看占比。",[32,147320,147321],{},"地图：看地域分布。",[32,147323,147324],{},"散点图：看两个变量之间的关系。",[19,147326,147327],{},"Python 可视化常用库：",[371,147329,147330,147338],{},[374,147331,147332],{},[377,147333,147334,147336],{},[380,147335,146541],{},[380,147337,386],{},[388,147339,147340,147347,147355,147362],{},[377,147341,147342,147344],{},[393,147343,146573],{},[393,147345,147346],{},"基础、经典、可定制",[377,147348,147349,147352],{},[393,147350,147351],{},"seaborn",[393,147353,147354],{},"统计图表更美观",[377,147356,147357,147359],{},[393,147358,146581],{},[393,147360,147361],{},"生成交互式网页图表",[377,147363,147364,147367],{},[393,147365,147366],{},"plotly",[393,147368,147369],{},"交互图表能力强",[19,147371,147372],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147374,147376],{"id":147375},"_102-json回顾","10.2 JSON回顾",[19,147378,147379],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147381,147382],{},"Python 字典：",[469,147384,147386],{"className":30758,"code":147385,"language":30760,"meta":54,"style":54},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[475,147387,147388,147396,147407,147416],{"__ignoreMap":54},[478,147389,147390,147392,147394],{"class":480,"line":481},[478,147391,102038],{"class":714},[478,147393,759],{"class":710},[478,147395,16137],{"class":714},[478,147397,147398,147401,147403,147405],{"class":480,"line":565},[478,147399,147400],{"class":488},"    \"name\"",[478,147402,51817],{"class":714},[478,147404,69649],{"class":488},[478,147406,31846],{"class":714},[478,147408,147409,147412,147414],{"class":480,"line":579},[478,147410,147411],{"class":488},"    \"value\"",[478,147413,51817],{"class":714},[478,147415,97838],{"class":495},[478,147417,147418],{"class":480,"line":593},[478,147419,2133],{"class":714},[19,147421,147422],{},"JSON 字符串：",[469,147424,147427],{"className":147425,"code":147426,"language":146172,"meta":54,"style":54},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[475,147428,147429,147433,147444,147453],{"__ignoreMap":54},[478,147430,147431],{"class":480,"line":481},[478,147432,2114],{"class":714},[478,147434,147435,147438,147440,147442],{"class":480,"line":565},[478,147436,147437],{"class":495},"  \"name\"",[478,147439,51817],{"class":714},[478,147441,69649],{"class":488},[478,147443,31846],{"class":714},[478,147445,147446,147449,147451],{"class":480,"line":579},[478,147447,147448],{"class":495},"  \"value\"",[478,147450,51817],{"class":714},[478,147452,97838],{"class":495},[478,147454,147455],{"class":480,"line":593},[478,147456,2133],{"class":714},[19,147458,147459],{},"Python 与 JSON 的转换：",[469,147461,147463],{"className":30758,"code":147462,"language":30760,"meta":54,"style":54},"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",[475,147464,147465,147472,147476,147501,147505,147524,147531,147535,147545],{"__ignoreMap":54},[478,147466,147467,147469],{"class":480,"line":481},[478,147468,30772],{"class":710},[478,147470,147471],{"class":714}," json\n",[478,147473,147474],{"class":480,"line":565},[478,147475,2966],{"emptyLinePlaceholder":640},[478,147477,147478,147480,147482,147484,147486,147488,147490,147492,147495,147497,147499],{"class":480,"line":579},[478,147479,102038],{"class":714},[478,147481,759],{"class":710},[478,147483,5014],{"class":714},[478,147485,63059],{"class":488},[478,147487,51817],{"class":714},[478,147489,69649],{"class":488},[478,147491,13001],{"class":714},[478,147493,147494],{"class":488},"\"value\"",[478,147496,51817],{"class":714},[478,147498,1012],{"class":495},[478,147500,2133],{"class":714},[478,147502,147503],{"class":480,"line":593},[478,147504,2966],{"emptyLinePlaceholder":640},[478,147506,147507,147510,147512,147515,147518,147520,147522],{"class":480,"line":1769},[478,147508,147509],{"class":714},"json_text ",[478,147511,759],{"class":710},[478,147513,147514],{"class":714}," json.dumps(data, ",[478,147516,147517],{"class":5782},"ensure_ascii",[478,147519,759],{"class":710},[478,147521,34367],{"class":495},[478,147523,720],{"class":714},[478,147525,147526,147528],{"class":480,"line":1783},[478,147527,30795],{"class":495},[478,147529,147530],{"class":714},"(json_text)\n",[478,147532,147533],{"class":480,"line":1789},[478,147534,2966],{"emptyLinePlaceholder":640},[478,147536,147537,147540,147542],{"class":480,"line":1880},[478,147538,147539],{"class":714},"new_data ",[478,147541,759],{"class":710},[478,147543,147544],{"class":714}," json.loads(json_text)\n",[478,147546,147547,147549],{"class":480,"line":1886},[478,147548,30795],{"class":495},[478,147550,147551],{"class":714},"(new_data)\n",[14,147553,147555],{"id":147554},"_103-安装pyecharts","10.3 安装pyecharts",[469,147557,147559],{"className":471,"code":147558,"language":473,"meta":54,"style":54},"pip install pyecharts\n",[475,147560,147561],{"__ignoreMap":54},[478,147562,147563,147565,147567],{"class":480,"line":481},[478,147564,485],{"class":484},[478,147566,489],{"class":488},[478,147568,147569],{"class":488}," pyecharts\n",[19,147571,147572],{},"验证：",[469,147574,147576],{"className":30758,"code":147575,"language":30760,"meta":54,"style":54},"import pyecharts\n\nprint(pyecharts.__version__)\n",[475,147577,147578,147584,147588],{"__ignoreMap":54},[478,147579,147580,147582],{"class":480,"line":481},[478,147581,30772],{"class":710},[478,147583,147569],{"class":714},[478,147585,147586],{"class":480,"line":565},[478,147587,2966],{"emptyLinePlaceholder":640},[478,147589,147590,147592,147595,147598],{"class":480,"line":579},[478,147591,30795],{"class":495},[478,147593,147594],{"class":714},"(pyecharts.",[478,147596,147597],{"class":495},"__version__",[478,147599,720],{"class":714},[19,147601,147602],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147604,147606],{"id":147605},"_104-第一个折线图","10.4 第一个折线图",[469,147608,147610],{"className":30758,"code":147609,"language":30760,"meta":54,"style":54},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[475,147611,147612,147624,147628,147638,147668,147700],{"__ignoreMap":54},[478,147613,147614,147616,147619,147621],{"class":480,"line":481},[478,147615,31117],{"class":710},[478,147617,147618],{"class":714}," pyecharts.charts ",[478,147620,30772],{"class":710},[478,147622,147623],{"class":714}," Line\n",[478,147625,147626],{"class":480,"line":565},[478,147627,2966],{"emptyLinePlaceholder":640},[478,147629,147630,147633,147635],{"class":480,"line":579},[478,147631,147632],{"class":714},"line ",[478,147634,759],{"class":710},[478,147636,147637],{"class":714}," Line()\n",[478,147639,147640,147643,147646,147648,147651,147653,147656,147658,147661,147663,147666],{"class":480,"line":593},[478,147641,147642],{"class":714},"line.add_xaxis([",[478,147644,147645],{"class":488},"\"周一\"",[478,147647,13001],{"class":714},[478,147649,147650],{"class":488},"\"周二\"",[478,147652,13001],{"class":714},[478,147654,147655],{"class":488},"\"周三\"",[478,147657,13001],{"class":714},[478,147659,147660],{"class":488},"\"周四\"",[478,147662,13001],{"class":714},[478,147664,147665],{"class":488},"\"周五\"",[478,147667,5223],{"class":714},[478,147669,147670,147673,147676,147678,147680,147682,147684,147686,147688,147690,147693,147695,147698],{"class":480,"line":1769},[478,147671,147672],{"class":714},"line.add_yaxis(",[478,147674,147675],{"class":488},"\"销售额\"",[478,147677,77898],{"class":714},[478,147679,1012],{"class":495},[478,147681,13001],{"class":714},[478,147683,1512],{"class":495},[478,147685,13001],{"class":714},[478,147687,1557],{"class":495},[478,147689,13001],{"class":714},[478,147691,147692],{"class":495},"150",[478,147694,13001],{"class":714},[478,147696,147697],{"class":495},"180",[478,147699,5223],{"class":714},[478,147701,147702,147705,147708],{"class":480,"line":1783},[478,147703,147704],{"class":714},"line.render(",[478,147706,147707],{"class":488},"\"line.html\"",[478,147709,720],{"class":714},[19,147711,147712,147713,147716],{},"运行后会生成 ",[475,147714,147715],{},"line.html","，用浏览器打开即可看到图表。",[19,147718,147719],{},"核心步骤：",[29,147721,147722,147725,147728,147731,147734],{},[32,147723,147724],{},"导入图表类。",[32,147726,147727],{},"创建图表对象。",[32,147729,147730],{},"添加 x 轴数据。",[32,147732,147733],{},"添加 y 轴数据。",[32,147735,147736],{},"渲染为 HTML。",[14,147738,147740],{"id":147739},"_105-全局配置","10.5 全局配置",[19,147742,147743,147744,147747],{},"常用配置在 ",[475,147745,147746],{},"pyecharts.options"," 中。",[469,147749,147751],{"className":30758,"code":147750,"language":30760,"meta":54,"style":54},"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",[475,147752,147753,147770,147780,147784,147792,147816,147844,147849,147868,147887,147905,147925,147929],{"__ignoreMap":54},[478,147754,147755,147757,147760,147762,147765,147767],{"class":480,"line":481},[478,147756,31117],{"class":710},[478,147758,147759],{"class":714}," pyecharts ",[478,147761,30772],{"class":710},[478,147763,147764],{"class":714}," options ",[478,147766,31763],{"class":710},[478,147768,147769],{"class":714}," opts\n",[478,147771,147772,147774,147776,147778],{"class":480,"line":565},[478,147773,31117],{"class":710},[478,147775,147618],{"class":714},[478,147777,30772],{"class":710},[478,147779,147623],{"class":714},[478,147781,147782],{"class":480,"line":579},[478,147783,2966],{"emptyLinePlaceholder":640},[478,147785,147786,147788,147790],{"class":480,"line":593},[478,147787,147632],{"class":714},[478,147789,759],{"class":710},[478,147791,147637],{"class":714},[478,147793,147794,147796,147798,147800,147802,147804,147806,147808,147810,147812,147814],{"class":480,"line":1769},[478,147795,147642],{"class":714},[478,147797,147645],{"class":488},[478,147799,13001],{"class":714},[478,147801,147650],{"class":488},[478,147803,13001],{"class":714},[478,147805,147655],{"class":488},[478,147807,13001],{"class":714},[478,147809,147660],{"class":488},[478,147811,13001],{"class":714},[478,147813,147665],{"class":488},[478,147815,5223],{"class":714},[478,147817,147818,147820,147822,147824,147826,147828,147830,147832,147834,147836,147838,147840,147842],{"class":480,"line":1783},[478,147819,147672],{"class":714},[478,147821,147675],{"class":488},[478,147823,77898],{"class":714},[478,147825,1012],{"class":495},[478,147827,13001],{"class":714},[478,147829,1512],{"class":495},[478,147831,13001],{"class":714},[478,147833,1557],{"class":495},[478,147835,13001],{"class":714},[478,147837,147692],{"class":495},[478,147839,13001],{"class":714},[478,147841,147697],{"class":495},[478,147843,5223],{"class":714},[478,147845,147846],{"class":480,"line":1789},[478,147847,147848],{"class":714},"line.set_global_opts(\n",[478,147850,147851,147854,147856,147859,147861,147863,147866],{"class":480,"line":1880},[478,147852,147853],{"class":5782},"    title_opts",[478,147855,759],{"class":710},[478,147857,147858],{"class":714},"opts.TitleOpts(",[478,147860,51787],{"class":5782},[478,147862,759],{"class":710},[478,147864,147865],{"class":488},"\"一周销售额\"",[478,147867,38427],{"class":714},[478,147869,147870,147873,147875,147878,147880,147882,147885],{"class":480,"line":1886},[478,147871,147872],{"class":5782},"    xaxis_opts",[478,147874,759],{"class":710},[478,147876,147877],{"class":714},"opts.AxisOpts(",[478,147879,80190],{"class":5782},[478,147881,759],{"class":710},[478,147883,147884],{"class":488},"\"日期\"",[478,147886,38427],{"class":714},[478,147888,147889,147892,147894,147896,147898,147900,147903],{"class":480,"line":1898},[478,147890,147891],{"class":5782},"    yaxis_opts",[478,147893,759],{"class":710},[478,147895,147877],{"class":714},[478,147897,80190],{"class":5782},[478,147899,759],{"class":710},[478,147901,147902],{"class":488},"\"金额\"",[478,147904,38427],{"class":714},[478,147906,147907,147910,147912,147915,147918,147920,147923],{"class":480,"line":2180},[478,147908,147909],{"class":5782},"    tooltip_opts",[478,147911,759],{"class":710},[478,147913,147914],{"class":714},"opts.TooltipOpts(",[478,147916,147917],{"class":5782},"trigger",[478,147919,759],{"class":710},[478,147921,147922],{"class":488},"\"axis\"",[478,147924,38427],{"class":714},[478,147926,147927],{"class":480,"line":2185},[478,147928,720],{"class":714},[478,147930,147931,147933,147935],{"class":480,"line":2191},[478,147932,147704],{"class":714},[478,147934,147707],{"class":488},[478,147936,720],{"class":714},[19,147938,147939],{},"常见全局配置：",[371,147941,147942,147951],{},[374,147943,147944],{},[377,147945,147946,147949],{},[380,147947,147948],{},"配置",[380,147950,103076],{},[388,147952,147953,147963,147973,147983,147993,148003],{},[377,147954,147955,147960],{},[393,147956,147957],{},[475,147958,147959],{},"TitleOpts",[393,147961,147962],{},"标题",[377,147964,147965,147970],{},[393,147966,147967],{},[475,147968,147969],{},"LegendOpts",[393,147971,147972],{},"图例",[377,147974,147975,147980],{},[393,147976,147977],{},[475,147978,147979],{},"TooltipOpts",[393,147981,147982],{},"提示框",[377,147984,147985,147990],{},[393,147986,147987],{},[475,147988,147989],{},"AxisOpts",[393,147991,147992],{},"坐标轴",[377,147994,147995,148000],{},[393,147996,147997],{},[475,147998,147999],{},"VisualMapOpts",[393,148001,148002],{},"视觉映射",[377,148004,148005,148010],{},[393,148006,148007],{},[475,148008,148009],{},"DataZoomOpts",[393,148011,148012],{},"区域缩放",[14,148014,148016],{"id":148015},"_106-系列配置","10.6 系列配置",[19,148018,148019],{},"系列配置作用于某一组数据。",[469,148021,148023],{"className":30758,"code":148022,"language":30760,"meta":54,"style":54},"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",[475,148024,148025,148030,148041,148070,148081,148100],{"__ignoreMap":54},[478,148026,148027],{"class":480,"line":481},[478,148028,148029],{"class":714},"line.add_yaxis(\n",[478,148031,148032,148035,148037,148039],{"class":480,"line":565},[478,148033,148034],{"class":5782},"    series_name",[478,148036,759],{"class":710},[478,148038,147675],{"class":488},[478,148040,31846],{"class":714},[478,148042,148043,148046,148048,148050,148052,148054,148056,148058,148060,148062,148064,148066,148068],{"class":480,"line":579},[478,148044,148045],{"class":5782},"    y_axis",[478,148047,759],{"class":710},[478,148049,1585],{"class":714},[478,148051,1012],{"class":495},[478,148053,13001],{"class":714},[478,148055,1512],{"class":495},[478,148057,13001],{"class":714},[478,148059,1557],{"class":495},[478,148061,13001],{"class":714},[478,148063,147692],{"class":495},[478,148065,13001],{"class":714},[478,148067,147697],{"class":495},[478,148069,88216],{"class":714},[478,148071,148072,148075,148077,148079],{"class":480,"line":593},[478,148073,148074],{"class":5782},"    is_smooth",[478,148076,759],{"class":710},[478,148078,31856],{"class":495},[478,148080,31846],{"class":714},[478,148082,148083,148086,148088,148091,148094,148096,148098],{"class":480,"line":1769},[478,148084,148085],{"class":5782},"    label_opts",[478,148087,759],{"class":710},[478,148089,148090],{"class":714},"opts.LabelOpts(",[478,148092,148093],{"class":5782},"is_show",[478,148095,759],{"class":710},[478,148097,31856],{"class":495},[478,148099,38427],{"class":714},[478,148101,148102],{"class":480,"line":1783},[478,148103,720],{"class":714},[19,148105,148106],{},"常用参数：",[29,148108,148109,148115,148121,148127,148133],{},[32,148110,148111,148114],{},[475,148112,148113],{},"series_name","：系列名称。",[32,148116,148117,148120],{},[475,148118,148119],{},"y_axis","：y 轴数据。",[32,148122,148123,148126],{},[475,148124,148125],{},"is_smooth","：是否平滑曲线。",[32,148128,148129,148132],{},[475,148130,148131],{},"label_opts","：标签配置。",[32,148134,148135,148138],{},[475,148136,148137],{},"symbol_size","：标记点大小。",[14,148140,148142],{"id":148141},"_107-多条折线","10.7 多条折线",[469,148144,148146],{"className":30758,"code":148145,"language":30760,"meta":54,"style":54},"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",[475,148147,148148,148162,148172,148176,148205,148209,148217,148222,148260,148297,148301,148318,148334,148338],{"__ignoreMap":54},[478,148149,148150,148152,148154,148156,148158,148160],{"class":480,"line":481},[478,148151,31117],{"class":710},[478,148153,147759],{"class":714},[478,148155,30772],{"class":710},[478,148157,147764],{"class":714},[478,148159,31763],{"class":710},[478,148161,147769],{"class":714},[478,148163,148164,148166,148168,148170],{"class":480,"line":565},[478,148165,31117],{"class":710},[478,148167,147618],{"class":714},[478,148169,30772],{"class":710},[478,148171,147623],{"class":714},[478,148173,148174],{"class":480,"line":579},[478,148175,2966],{"emptyLinePlaceholder":640},[478,148177,148178,148181,148183,148185,148187,148189,148191,148193,148195,148197,148199,148201,148203],{"class":480,"line":593},[478,148179,148180],{"class":714},"dates ",[478,148182,759],{"class":710},[478,148184,52606],{"class":714},[478,148186,147645],{"class":488},[478,148188,13001],{"class":714},[478,148190,147650],{"class":488},[478,148192,13001],{"class":714},[478,148194,147655],{"class":488},[478,148196,13001],{"class":714},[478,148198,147660],{"class":488},[478,148200,13001],{"class":714},[478,148202,147665],{"class":488},[478,148204,33626],{"class":714},[478,148206,148207],{"class":480,"line":1769},[478,148208,2966],{"emptyLinePlaceholder":640},[478,148210,148211,148213,148215],{"class":480,"line":1783},[478,148212,147632],{"class":714},[478,148214,759],{"class":710},[478,148216,147637],{"class":714},[478,148218,148219],{"class":480,"line":1789},[478,148220,148221],{"class":714},"line.add_xaxis(dates)\n",[478,148223,148224,148226,148229,148231,148233,148235,148238,148240,148242,148244,148246,148248,148250,148252,148254,148256,148258],{"class":480,"line":1880},[478,148225,147672],{"class":714},[478,148227,148228],{"class":488},"\"线上销售\"",[478,148230,77898],{"class":714},[478,148232,1012],{"class":495},[478,148234,13001],{"class":714},[478,148236,148237],{"class":495},"130",[478,148239,13001],{"class":714},[478,148241,1512],{"class":495},[478,148243,13001],{"class":714},[478,148245,21613],{"class":495},[478,148247,13001],{"class":714},[478,148249,2289],{"class":495},[478,148251,112582],{"class":714},[478,148253,148125],{"class":5782},[478,148255,759],{"class":710},[478,148257,31856],{"class":495},[478,148259,720],{"class":714},[478,148261,148262,148264,148267,148269,148271,148273,148275,148277,148279,148281,148283,148285,148287,148289,148291,148293,148295],{"class":480,"line":1886},[478,148263,147672],{"class":714},[478,148265,148266],{"class":488},"\"线下销售\"",[478,148268,77898],{"class":714},[478,148270,1310],{"class":495},[478,148272,13001],{"class":714},[478,148274,1557],{"class":495},[478,148276,13001],{"class":714},[478,148278,1012],{"class":495},[478,148280,13001],{"class":714},[478,148282,1512],{"class":495},[478,148284,13001],{"class":714},[478,148286,147692],{"class":495},[478,148288,112582],{"class":714},[478,148290,148125],{"class":5782},[478,148292,759],{"class":710},[478,148294,31856],{"class":495},[478,148296,720],{"class":714},[478,148298,148299],{"class":480,"line":1898},[478,148300,147848],{"class":714},[478,148302,148303,148305,148307,148309,148311,148313,148316],{"class":480,"line":2180},[478,148304,147853],{"class":5782},[478,148306,759],{"class":710},[478,148308,147858],{"class":714},[478,148310,51787],{"class":5782},[478,148312,759],{"class":710},[478,148314,148315],{"class":488},"\"线上线下销售趋势\"",[478,148317,38427],{"class":714},[478,148319,148320,148322,148324,148326,148328,148330,148332],{"class":480,"line":2185},[478,148321,147909],{"class":5782},[478,148323,759],{"class":710},[478,148325,147914],{"class":714},[478,148327,147917],{"class":5782},[478,148329,759],{"class":710},[478,148331,147922],{"class":488},[478,148333,38427],{"class":714},[478,148335,148336],{"class":480,"line":2191},[478,148337,720],{"class":714},[478,148339,148340,148342,148345],{"class":480,"line":2196},[478,148341,147704],{"class":714},[478,148343,148344],{"class":488},"\"sales.html\"",[478,148346,720],{"class":714},[19,148348,148349],{},"多条折线适合比较不同指标或不同地区。",[14,148351,148353],{"id":148352},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148355,148356,148357,24998],{},"假设 ",[475,148358,148359],{},"sales.json",[469,148361,148363],{"className":147425,"code":148362,"language":146172,"meta":54,"style":54},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[475,148364,148365,148370,148402,148430,148458],{"__ignoreMap":54},[478,148366,148367],{"class":480,"line":481},[478,148368,148369],{"class":714},"[\n",[478,148371,148372,148375,148378,148380,148382,148384,148387,148389,148391,148393,148396,148398,148400],{"class":480,"line":565},[478,148373,148374],{"class":714},"  {",[478,148376,148377],{"class":495},"\"date\"",[478,148379,51817],{"class":714},[478,148381,147645],{"class":488},[478,148383,13001],{"class":714},[478,148385,148386],{"class":495},"\"online\"",[478,148388,51817],{"class":714},[478,148390,1012],{"class":495},[478,148392,13001],{"class":714},[478,148394,148395],{"class":495},"\"offline\"",[478,148397,51817],{"class":714},[478,148399,1310],{"class":495},[478,148401,5496],{"class":714},[478,148403,148404,148406,148408,148410,148412,148414,148416,148418,148420,148422,148424,148426,148428],{"class":480,"line":579},[478,148405,148374],{"class":714},[478,148407,148377],{"class":495},[478,148409,51817],{"class":714},[478,148411,147650],{"class":488},[478,148413,13001],{"class":714},[478,148415,148386],{"class":495},[478,148417,51817],{"class":714},[478,148419,148237],{"class":495},[478,148421,13001],{"class":714},[478,148423,148395],{"class":495},[478,148425,51817],{"class":714},[478,148427,1557],{"class":495},[478,148429,5496],{"class":714},[478,148431,148432,148434,148436,148438,148440,148442,148444,148446,148448,148450,148452,148454,148456],{"class":480,"line":593},[478,148433,148374],{"class":714},[478,148435,148377],{"class":495},[478,148437,51817],{"class":714},[478,148439,147655],{"class":488},[478,148441,13001],{"class":714},[478,148443,148386],{"class":495},[478,148445,51817],{"class":714},[478,148447,1512],{"class":495},[478,148449,13001],{"class":714},[478,148451,148395],{"class":495},[478,148453,51817],{"class":714},[478,148455,1012],{"class":495},[478,148457,2133],{"class":714},[478,148459,148460],{"class":480,"line":1769},[478,148461,33626],{"class":714},[19,148463,148464],{},"读取并绘图：",[469,148466,148468],{"className":30758,"code":148467,"language":30760,"meta":54,"style":54},"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",[475,148469,148470,148476,148490,148500,148504,148536,148549,148553,148561,148570,148579,148583,148595,148604,148613,148622,148626,148634,148638,148655,148672,148676,148693,148709,148713],{"__ignoreMap":54},[478,148471,148472,148474],{"class":480,"line":481},[478,148473,30772],{"class":710},[478,148475,147471],{"class":714},[478,148477,148478,148480,148482,148484,148486,148488],{"class":480,"line":565},[478,148479,31117],{"class":710},[478,148481,147759],{"class":714},[478,148483,30772],{"class":710},[478,148485,147764],{"class":714},[478,148487,31763],{"class":710},[478,148489,147769],{"class":714},[478,148491,148492,148494,148496,148498],{"class":480,"line":579},[478,148493,31117],{"class":710},[478,148495,147618],{"class":714},[478,148497,30772],{"class":710},[478,148499,147623],{"class":714},[478,148501,148502],{"class":480,"line":593},[478,148503,2966],{"emptyLinePlaceholder":640},[478,148505,148506,148508,148510,148512,148515,148517,148519,148521,148523,148525,148527,148529,148531,148534],{"class":480,"line":1769},[478,148507,108213],{"class":710},[478,148509,147171],{"class":495},[478,148511,263],{"class":714},[478,148513,148514],{"class":488},"\"sales.json\"",[478,148516,13001],{"class":714},[478,148518,147181],{"class":488},[478,148520,13001],{"class":714},[478,148522,147186],{"class":5782},[478,148524,759],{"class":710},[478,148526,147191],{"class":488},[478,148528,14280],{"class":714},[478,148530,31763],{"class":710},[478,148532,148533],{"class":5782}," file",[478,148535,4305],{"class":714},[478,148537,148538,148540,148542,148545,148547],{"class":480,"line":1783},[478,148539,101801],{"class":714},[478,148541,759],{"class":710},[478,148543,148544],{"class":714}," json.load(",[478,148546,45734],{"class":5782},[478,148548,720],{"class":714},[478,148550,148551],{"class":480,"line":1789},[478,148552,2966],{"emptyLinePlaceholder":640},[478,148554,148555,148557,148559],{"class":480,"line":1880},[478,148556,148180],{"class":714},[478,148558,759],{"class":710},[478,148560,52218],{"class":714},[478,148562,148563,148566,148568],{"class":480,"line":1886},[478,148564,148565],{"class":714},"online_sales ",[478,148567,759],{"class":710},[478,148569,52218],{"class":714},[478,148571,148572,148575,148577],{"class":480,"line":1898},[478,148573,148574],{"class":714},"offline_sales ",[478,148576,759],{"class":710},[478,148578,52218],{"class":714},[478,148580,148581],{"class":480,"line":2180},[478,148582,2966],{"emptyLinePlaceholder":640},[478,148584,148585,148587,148590,148592],{"class":480,"line":2185},[478,148586,3591],{"class":710},[478,148588,148589],{"class":714}," item ",[478,148591,26423],{"class":710},[478,148593,148594],{"class":714}," data:\n",[478,148596,148597,148600,148602],{"class":480,"line":2191},[478,148598,148599],{"class":714},"    dates.append(item[",[478,148601,148377],{"class":488},[478,148603,5223],{"class":714},[478,148605,148606,148609,148611],{"class":480,"line":2196},[478,148607,148608],{"class":714},"    online_sales.append(item[",[478,148610,148386],{"class":488},[478,148612,5223],{"class":714},[478,148614,148615,148618,148620],{"class":480,"line":2210},[478,148616,148617],{"class":714},"    offline_sales.append(item[",[478,148619,148395],{"class":488},[478,148621,5223],{"class":714},[478,148623,148624],{"class":480,"line":2215},[478,148625,2966],{"emptyLinePlaceholder":640},[478,148627,148628,148630,148632],{"class":480,"line":2221},[478,148629,147632],{"class":714},[478,148631,759],{"class":710},[478,148633,147637],{"class":714},[478,148635,148636],{"class":480,"line":2241},[478,148637,148221],{"class":714},[478,148639,148640,148642,148644,148647,148649,148651,148653],{"class":480,"line":2246},[478,148641,147672],{"class":714},[478,148643,148228],{"class":488},[478,148645,148646],{"class":714},", online_sales, ",[478,148648,148125],{"class":5782},[478,148650,759],{"class":710},[478,148652,31856],{"class":495},[478,148654,720],{"class":714},[478,148656,148657,148659,148661,148664,148666,148668,148670],{"class":480,"line":2260},[478,148658,147672],{"class":714},[478,148660,148266],{"class":488},[478,148662,148663],{"class":714},", offline_sales, ",[478,148665,148125],{"class":5782},[478,148667,759],{"class":710},[478,148669,31856],{"class":495},[478,148671,720],{"class":714},[478,148673,148674],{"class":480,"line":2265},[478,148675,147848],{"class":714},[478,148677,148678,148680,148682,148684,148686,148688,148691],{"class":480,"line":2294},[478,148679,147853],{"class":5782},[478,148681,759],{"class":710},[478,148683,147858],{"class":714},[478,148685,51787],{"class":5782},[478,148687,759],{"class":710},[478,148689,148690],{"class":488},"\"销售趋势\"",[478,148692,38427],{"class":714},[478,148694,148695,148697,148699,148701,148703,148705,148707],{"class":480,"line":2299},[478,148696,147909],{"class":5782},[478,148698,759],{"class":710},[478,148700,147914],{"class":714},[478,148702,147917],{"class":5782},[478,148704,759],{"class":710},[478,148706,147922],{"class":488},[478,148708,38427],{"class":714},[478,148710,148711],{"class":480,"line":2316},[478,148712,720],{"class":714},[478,148714,148715,148717,148719],{"class":480,"line":2321},[478,148716,147704],{"class":714},[478,148718,148344],{"class":488},[478,148720,720],{"class":714},[14,148722,148724],{"id":148723},"_109-数据清洗","10.9 数据清洗",[19,148726,148727],{},"真实数据经常不整齐，需要清洗。",[19,148729,148730],{},"常见问题：",[29,148732,148733,148736,148739,148742],{},[32,148734,148735],{},"数字是字符串。",[32,148737,148738],{},"字段缺失。",[32,148740,148741],{},"空值。",[32,148743,148744],{},"日期格式不统一。",[19,148746,15700],{},[469,148748,148750],{"className":30758,"code":148749,"language":30760,"meta":54,"style":54},"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",[475,148751,148752,148761,148784,148804,148825,148829,148833,148841,148850,148854,148865,148879,148888,148893,148897,148905,148915,148919,148926],{"__ignoreMap":54},[478,148753,148754,148757,148759],{"class":480,"line":481},[478,148755,148756],{"class":714},"raw_data ",[478,148758,759],{"class":710},[478,148760,55827],{"class":714},[478,148762,148763,148766,148768,148770,148772,148774,148777,148779,148782],{"class":480,"line":565},[478,148764,148765],{"class":714},"    {",[478,148767,148377],{"class":488},[478,148769,51817],{"class":714},[478,148771,147645],{"class":488},[478,148773,13001],{"class":714},[478,148775,148776],{"class":488},"\"sales\"",[478,148778,51817],{"class":714},[478,148780,148781],{"class":488},"\"100\"",[478,148783,5496],{"class":714},[478,148785,148786,148788,148790,148792,148794,148796,148798,148800,148802],{"class":480,"line":579},[478,148787,148765],{"class":714},[478,148789,148377],{"class":488},[478,148791,51817],{"class":714},[478,148793,147650],{"class":488},[478,148795,13001],{"class":714},[478,148797,148776],{"class":488},[478,148799,51817],{"class":714},[478,148801,8218],{"class":488},[478,148803,5496],{"class":714},[478,148805,148806,148808,148810,148812,148814,148816,148818,148820,148823],{"class":480,"line":593},[478,148807,148765],{"class":714},[478,148809,148377],{"class":488},[478,148811,51817],{"class":714},[478,148813,147655],{"class":488},[478,148815,13001],{"class":714},[478,148817,148776],{"class":488},[478,148819,51817],{"class":714},[478,148821,148822],{"class":488},"\"120\"",[478,148824,5496],{"class":714},[478,148826,148827],{"class":480,"line":1769},[478,148828,33626],{"class":714},[478,148830,148831],{"class":480,"line":1783},[478,148832,2966],{"emptyLinePlaceholder":640},[478,148834,148835,148837,148839],{"class":480,"line":1789},[478,148836,148180],{"class":714},[478,148838,759],{"class":710},[478,148840,52218],{"class":714},[478,148842,148843,148846,148848],{"class":480,"line":1880},[478,148844,148845],{"class":714},"sales ",[478,148847,759],{"class":710},[478,148849,52218],{"class":714},[478,148851,148852],{"class":480,"line":1886},[478,148853,2966],{"emptyLinePlaceholder":640},[478,148855,148856,148858,148860,148862],{"class":480,"line":1898},[478,148857,3591],{"class":710},[478,148859,148589],{"class":714},[478,148861,26423],{"class":710},[478,148863,148864],{"class":714}," raw_data:\n",[478,148866,148867,148870,148872,148875,148877],{"class":480,"line":2180},[478,148868,148869],{"class":714},"    value ",[478,148871,759],{"class":710},[478,148873,148874],{"class":714}," item.get(",[478,148876,148776],{"class":488},[478,148878,720],{"class":714},[478,148880,148881,148883,148885],{"class":480,"line":2185},[478,148882,3667],{"class":710},[478,148884,39310],{"class":710},[478,148886,148887],{"class":714}," value:\n",[478,148889,148890],{"class":480,"line":2191},[478,148891,148892],{"class":710},"        continue\n",[478,148894,148895],{"class":480,"line":2196},[478,148896,2966],{"emptyLinePlaceholder":640},[478,148898,148899,148901,148903],{"class":480,"line":2210},[478,148900,148599],{"class":714},[478,148902,148377],{"class":488},[478,148904,5223],{"class":714},[478,148906,148907,148910,148912],{"class":480,"line":2215},[478,148908,148909],{"class":714},"    sales.append(",[478,148911,717],{"class":495},[478,148913,148914],{"class":714},"(value))\n",[478,148916,148917],{"class":480,"line":2221},[478,148918,2966],{"emptyLinePlaceholder":640},[478,148920,148921,148923],{"class":480,"line":2241},[478,148922,30795],{"class":495},[478,148924,148925],{"class":714},"(dates)\n",[478,148927,148928,148930],{"class":480,"line":2246},[478,148929,30795],{"class":495},[478,148931,148932],{"class":714},"(sales)\n",[14,148934,148936],{"id":148935},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[469,148938,148940],{"className":30758,"code":148939,"language":30760,"meta":54,"style":54},"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",[475,148941,148942,148956,148966,148970,148978,148999,149021,149043,149065,149087,149091,149095,149117,149138,149142,149150,149154,149158,149168,149177,149187,149203,149207,149211,149228,149244,149260,149276,149286,149290],{"__ignoreMap":54},[478,148943,148944,148946,148948,148950,148952,148954],{"class":480,"line":481},[478,148945,31117],{"class":710},[478,148947,147759],{"class":714},[478,148949,30772],{"class":710},[478,148951,147764],{"class":714},[478,148953,31763],{"class":710},[478,148955,147769],{"class":714},[478,148957,148958,148960,148962,148964],{"class":480,"line":565},[478,148959,31117],{"class":710},[478,148961,147618],{"class":714},[478,148963,30772],{"class":710},[478,148965,147623],{"class":714},[478,148967,148968],{"class":480,"line":579},[478,148969,2966],{"emptyLinePlaceholder":640},[478,148971,148972,148974,148976],{"class":480,"line":593},[478,148973,148845],{"class":714},[478,148975,759],{"class":710},[478,148977,55827],{"class":714},[478,148979,148980,148982,148984,148986,148989,148991,148993,148995,148997],{"class":480,"line":1769},[478,148981,148765],{"class":714},[478,148983,148377],{"class":488},[478,148985,51817],{"class":714},[478,148987,148988],{"class":488},"\"2024-10-01\"",[478,148990,13001],{"class":714},[478,148992,84464],{"class":488},[478,148994,51817],{"class":714},[478,148996,92403],{"class":495},[478,148998,5496],{"class":714},[478,149000,149001,149003,149005,149007,149010,149012,149014,149016,149019],{"class":480,"line":1783},[478,149002,148765],{"class":714},[478,149004,148377],{"class":488},[478,149006,51817],{"class":714},[478,149008,149009],{"class":488},"\"2024-10-02\"",[478,149011,13001],{"class":714},[478,149013,84464],{"class":488},[478,149015,51817],{"class":714},[478,149017,149018],{"class":495},"1800",[478,149020,5496],{"class":714},[478,149022,149023,149025,149027,149029,149032,149034,149036,149038,149041],{"class":480,"line":1789},[478,149024,148765],{"class":714},[478,149026,148377],{"class":488},[478,149028,51817],{"class":714},[478,149030,149031],{"class":488},"\"2024-10-03\"",[478,149033,13001],{"class":714},[478,149035,84464],{"class":488},[478,149037,51817],{"class":714},[478,149039,149040],{"class":495},"1500",[478,149042,5496],{"class":714},[478,149044,149045,149047,149049,149051,149054,149056,149058,149060,149063],{"class":480,"line":1880},[478,149046,148765],{"class":714},[478,149048,148377],{"class":488},[478,149050,51817],{"class":714},[478,149052,149053],{"class":488},"\"2024-10-04\"",[478,149055,13001],{"class":714},[478,149057,84464],{"class":488},[478,149059,51817],{"class":714},[478,149061,149062],{"class":495},"2100",[478,149064,5496],{"class":714},[478,149066,149067,149069,149071,149073,149076,149078,149080,149082,149085],{"class":480,"line":1886},[478,149068,148765],{"class":714},[478,149070,148377],{"class":488},[478,149072,51817],{"class":714},[478,149074,149075],{"class":488},"\"2024-10-05\"",[478,149077,13001],{"class":714},[478,149079,84464],{"class":488},[478,149081,51817],{"class":714},[478,149083,149084],{"class":495},"2600",[478,149086,5496],{"class":714},[478,149088,149089],{"class":480,"line":1898},[478,149090,33626],{"class":714},[478,149092,149093],{"class":480,"line":2180},[478,149094,2966],{"emptyLinePlaceholder":640},[478,149096,149097,149099,149101,149104,149106,149108,149110,149112,149114],{"class":480,"line":2185},[478,149098,148180],{"class":714},[478,149100,759],{"class":710},[478,149102,149103],{"class":714}," [item[",[478,149105,148377],{"class":488},[478,149107,5009],{"class":714},[478,149109,3591],{"class":710},[478,149111,148589],{"class":714},[478,149113,26423],{"class":710},[478,149115,149116],{"class":714}," sales]\n",[478,149118,149119,149122,149124,149126,149128,149130,149132,149134,149136],{"class":480,"line":2191},[478,149120,149121],{"class":714},"amounts ",[478,149123,759],{"class":710},[478,149125,149103],{"class":714},[478,149127,84464],{"class":488},[478,149129,5009],{"class":714},[478,149131,3591],{"class":710},[478,149133,148589],{"class":714},[478,149135,26423],{"class":710},[478,149137,149116],{"class":714},[478,149139,149140],{"class":480,"line":2196},[478,149141,2966],{"emptyLinePlaceholder":640},[478,149143,149144,149146,149148],{"class":480,"line":2210},[478,149145,147632],{"class":714},[478,149147,759],{"class":710},[478,149149,147637],{"class":714},[478,149151,149152],{"class":480,"line":2215},[478,149153,148221],{"class":714},[478,149155,149156],{"class":480,"line":2221},[478,149157,148029],{"class":714},[478,149159,149160,149162,149164,149166],{"class":480,"line":2241},[478,149161,148034],{"class":5782},[478,149163,759],{"class":710},[478,149165,147675],{"class":488},[478,149167,31846],{"class":714},[478,149169,149170,149172,149174],{"class":480,"line":2246},[478,149171,148045],{"class":5782},[478,149173,759],{"class":710},[478,149175,149176],{"class":714},"amounts,\n",[478,149178,149179,149181,149183,149185],{"class":480,"line":2260},[478,149180,148074],{"class":5782},[478,149182,759],{"class":710},[478,149184,31856],{"class":495},[478,149186,31846],{"class":714},[478,149188,149189,149191,149193,149195,149197,149199,149201],{"class":480,"line":2265},[478,149190,148085],{"class":5782},[478,149192,759],{"class":710},[478,149194,148090],{"class":714},[478,149196,148093],{"class":5782},[478,149198,759],{"class":710},[478,149200,31856],{"class":495},[478,149202,38427],{"class":714},[478,149204,149205],{"class":480,"line":2294},[478,149206,720],{"class":714},[478,149208,149209],{"class":480,"line":2299},[478,149210,147848],{"class":714},[478,149212,149213,149215,149217,149219,149221,149223,149226],{"class":480,"line":2316},[478,149214,147853],{"class":5782},[478,149216,759],{"class":710},[478,149218,147858],{"class":714},[478,149220,51787],{"class":5782},[478,149222,759],{"class":710},[478,149224,149225],{"class":488},"\"每日销售额\"",[478,149227,38427],{"class":714},[478,149229,149230,149232,149234,149236,149238,149240,149242],{"class":480,"line":2321},[478,149231,147872],{"class":5782},[478,149233,759],{"class":710},[478,149235,147877],{"class":714},[478,149237,80190],{"class":5782},[478,149239,759],{"class":710},[478,149241,147884],{"class":488},[478,149243,38427],{"class":714},[478,149245,149246,149248,149250,149252,149254,149256,149258],{"class":480,"line":2326},[478,149247,147891],{"class":5782},[478,149249,759],{"class":710},[478,149251,147877],{"class":714},[478,149253,80190],{"class":5782},[478,149255,759],{"class":710},[478,149257,147902],{"class":488},[478,149259,38427],{"class":714},[478,149261,149262,149264,149266,149268,149270,149272,149274],{"class":480,"line":2331},[478,149263,147909],{"class":5782},[478,149265,759],{"class":710},[478,149267,147914],{"class":714},[478,149269,147917],{"class":5782},[478,149271,759],{"class":710},[478,149273,147922],{"class":488},[478,149275,38427],{"class":714},[478,149277,149278,149281,149283],{"class":480,"line":2345},[478,149279,149280],{"class":5782},"    datazoom_opts",[478,149282,759],{"class":710},[478,149284,149285],{"class":714},"[opts.DataZoomOpts()],\n",[478,149287,149288],{"class":480,"line":2350},[478,149289,720],{"class":714},[478,149291,149292,149294,149297],{"class":480,"line":3143},[478,149293,147704],{"class":714},[478,149295,149296],{"class":488},"\"daily_sales.html\"",[478,149298,720],{"class":714},[19,149300,149301,149304],{},[475,149302,149303],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149306,149308],{"id":149307},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149310,149311],{},"如果数据结构如下：",[469,149313,149315],{"className":30758,"code":149314,"language":30760,"meta":54,"style":54},"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",[475,149316,149317,149325,149333,149355,149376,149381,149388,149408,149428,149432],{"__ignoreMap":54},[478,149318,149319,149321,149323],{"class":480,"line":481},[478,149320,102038],{"class":714},[478,149322,759],{"class":710},[478,149324,16137],{"class":714},[478,149326,149327,149330],{"class":480,"line":565},[478,149328,149329],{"class":488},"    \"北京\"",[478,149331,149332],{"class":714},": [\n",[478,149334,149335,149337,149339,149341,149344,149346,149349,149351,149353],{"class":480,"line":579},[478,149336,5483],{"class":714},[478,149338,148377],{"class":488},[478,149340,51817],{"class":714},[478,149342,149343],{"class":488},"\"2024-01-01\"",[478,149345,13001],{"class":714},[478,149347,149348],{"class":488},"\"confirm\"",[478,149350,51817],{"class":714},[478,149352,1146],{"class":495},[478,149354,5496],{"class":714},[478,149356,149357,149359,149361,149363,149366,149368,149370,149372,149374],{"class":480,"line":593},[478,149358,5483],{"class":714},[478,149360,148377],{"class":488},[478,149362,51817],{"class":714},[478,149364,149365],{"class":488},"\"2024-01-02\"",[478,149367,13001],{"class":714},[478,149369,149348],{"class":488},[478,149371,51817],{"class":714},[478,149373,1198],{"class":495},[478,149375,5496],{"class":714},[478,149377,149378],{"class":480,"line":1769},[478,149379,149380],{"class":714},"    ],\n",[478,149382,149383,149386],{"class":480,"line":1783},[478,149384,149385],{"class":488},"    \"上海\"",[478,149387,149332],{"class":714},[478,149389,149390,149392,149394,149396,149398,149400,149402,149404,149406],{"class":480,"line":1789},[478,149391,5483],{"class":714},[478,149393,148377],{"class":488},[478,149395,51817],{"class":714},[478,149397,149343],{"class":488},[478,149399,13001],{"class":714},[478,149401,149348],{"class":488},[478,149403,51817],{"class":714},[478,149405,1096],{"class":495},[478,149407,5496],{"class":714},[478,149409,149410,149412,149414,149416,149418,149420,149422,149424,149426],{"class":480,"line":1880},[478,149411,5483],{"class":714},[478,149413,148377],{"class":488},[478,149415,51817],{"class":714},[478,149417,149365],{"class":488},[478,149419,13001],{"class":714},[478,149421,149348],{"class":488},[478,149423,51817],{"class":714},[478,149425,1223],{"class":495},[478,149427,5496],{"class":714},[478,149429,149430],{"class":480,"line":1886},[478,149431,149380],{"class":714},[478,149433,149434],{"class":480,"line":1898},[478,149435,2133],{"class":714},[19,149437,149438],{},"绘制多地区趋势：",[469,149440,149442],{"className":30758,"code":149441,"language":30760,"meta":54,"style":54},"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",[475,149443,149444,149458,149468,149472,149497,149501,149509,149513,149517,149529,149551,149564,149568,149572,149589,149605,149609],{"__ignoreMap":54},[478,149445,149446,149448,149450,149452,149454,149456],{"class":480,"line":481},[478,149447,31117],{"class":710},[478,149449,147759],{"class":714},[478,149451,30772],{"class":710},[478,149453,147764],{"class":714},[478,149455,31763],{"class":710},[478,149457,147769],{"class":714},[478,149459,149460,149462,149464,149466],{"class":480,"line":565},[478,149461,31117],{"class":710},[478,149463,147618],{"class":714},[478,149465,30772],{"class":710},[478,149467,147623],{"class":714},[478,149469,149470],{"class":480,"line":579},[478,149471,2966],{"emptyLinePlaceholder":640},[478,149473,149474,149476,149478,149480,149482,149484,149486,149488,149490,149493,149495],{"class":480,"line":593},[478,149475,148180],{"class":714},[478,149477,759],{"class":710},[478,149479,149103],{"class":714},[478,149481,148377],{"class":488},[478,149483,5009],{"class":714},[478,149485,3591],{"class":710},[478,149487,148589],{"class":714},[478,149489,26423],{"class":710},[478,149491,149492],{"class":714}," data[",[478,149494,69649],{"class":488},[478,149496,77907],{"class":714},[478,149498,149499],{"class":480,"line":1769},[478,149500,2966],{"emptyLinePlaceholder":640},[478,149502,149503,149505,149507],{"class":480,"line":1783},[478,149504,147632],{"class":714},[478,149506,759],{"class":710},[478,149508,147637],{"class":714},[478,149510,149511],{"class":480,"line":1789},[478,149512,148221],{"class":714},[478,149514,149515],{"class":480,"line":1880},[478,149516,2966],{"emptyLinePlaceholder":640},[478,149518,149519,149521,149524,149526],{"class":480,"line":1886},[478,149520,3591],{"class":710},[478,149522,149523],{"class":714}," city, records ",[478,149525,26423],{"class":710},[478,149527,149528],{"class":714}," data.items():\n",[478,149530,149531,149534,149536,149538,149540,149542,149544,149546,149548],{"class":480,"line":1898},[478,149532,149533],{"class":714},"    values ",[478,149535,759],{"class":710},[478,149537,149103],{"class":714},[478,149539,149348],{"class":488},[478,149541,5009],{"class":714},[478,149543,3591],{"class":710},[478,149545,148589],{"class":714},[478,149547,26423],{"class":710},[478,149549,149550],{"class":714}," records]\n",[478,149552,149553,149556,149558,149560,149562],{"class":480,"line":2180},[478,149554,149555],{"class":714},"    line.add_yaxis(city, values, ",[478,149557,148125],{"class":5782},[478,149559,759],{"class":710},[478,149561,31856],{"class":495},[478,149563,720],{"class":714},[478,149565,149566],{"class":480,"line":2185},[478,149567,2966],{"emptyLinePlaceholder":640},[478,149569,149570],{"class":480,"line":2191},[478,149571,147848],{"class":714},[478,149573,149574,149576,149578,149580,149582,149584,149587],{"class":480,"line":2196},[478,149575,147853],{"class":5782},[478,149577,759],{"class":710},[478,149579,147858],{"class":714},[478,149581,51787],{"class":5782},[478,149583,759],{"class":710},[478,149585,149586],{"class":488},"\"多地区趋势图\"",[478,149588,38427],{"class":714},[478,149590,149591,149593,149595,149597,149599,149601,149603],{"class":480,"line":2210},[478,149592,147909],{"class":5782},[478,149594,759],{"class":710},[478,149596,147914],{"class":714},[478,149598,147917],{"class":5782},[478,149600,759],{"class":710},[478,149602,147922],{"class":488},[478,149604,38427],{"class":714},[478,149606,149607],{"class":480,"line":2215},[478,149608,720],{"class":714},[478,149610,149611,149613,149616],{"class":480,"line":2221},[478,149612,147704],{"class":714},[478,149614,149615],{"class":488},"\"trend.html\"",[478,149617,720],{"class":714},[19,149619,149620],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149622,149624],{"id":149623},"_1012-易错点","10.12 易错点",[29,149626,149627,149633,149639,149649,149655],{},[32,149628,149629,149632],{},[475,149630,149631],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[32,149634,149635,149638],{},[475,149636,149637],{},"render()"," 生成的是 HTML，不是图片。",[32,149640,149641,149642,149645,149646,28765],{},"JSON 字符串用 ",[475,149643,149644],{},"json.loads()","，JSON 文件用 ",[475,149647,149648],{},"json.load()",[32,149650,149651,149652,28765],{},"中文 JSON 保存时加 ",[475,149653,149654],{},"ensure_ascii=False",[32,149656,149657],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149659,149661],{"id":149660},"_1013-本章练习","10.13 本章练习",[29,149663,149664,149667,149670,149673,149676],{},[32,149665,149666],{},"安装 pyecharts 并生成第一个折线图。",[32,149668,149669],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[32,149671,149672],{},"绘制两条折线，对比线上和线下销售额。",[32,149674,149675],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[32,149677,149678],{},"对含有空值的销售数据进行清洗后再绘图。",[617,149680,149681],{},"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":54,"searchDepth":565,"depth":565,"links":149683},[149684,149685,149686,149687,149688,149689,149690,149691,149692,149693,149694,149695,149696],{"id":147300,"depth":565,"text":147301},{"id":147375,"depth":565,"text":147376},{"id":147554,"depth":565,"text":147555},{"id":147605,"depth":565,"text":147606},{"id":147739,"depth":565,"text":147740},{"id":148015,"depth":565,"text":148016},{"id":148141,"depth":565,"text":148142},{"id":148352,"depth":565,"text":148353},{"id":148723,"depth":565,"text":148724},{"id":148935,"depth":565,"text":148936},{"id":149307,"depth":565,"text":149308},{"id":149623,"depth":565,"text":149624},{"id":149660,"depth":565,"text":149661},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147292,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149703,"title":149704,"body":149705,"description":23942,"extension":638,"meta":152065,"navigation":640,"path":152066,"seo":152067,"stem":152068,"__hash__":152069},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149706,"toc":152042},[149707,149710,149714,149717,149720,149796,149799,149890,149893,149897,149900,149944,149957,149961,149964,150031,150034,150038,150041,150125,150133,150137,150142,150283,150286,150297,150303,150309,150423,150427,150430,150433,150686,150689,150693,150696,150800,150803,150807,150958,150962,150969,151082,151086,151089,151195,151198,151202,151205,151236,151239,151344,151347,151351,151355,151365,151433,151437,151444,151508,151511,151515,151521,151617,151626,151630,151954,151963,151967,151995,151999,152039],[10,149708,149704],{"id":149709},"_11-面向对象基础",[14,149711,149713],{"id":149712},"_111-什么是面向对象","11.1 什么是面向对象",[19,149715,149716],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149718,149719],{},"面向过程：",[469,149721,149723],{"className":30758,"code":149722,"language":30760,"meta":54,"style":54},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[475,149724,149725,149734,149742,149746,149756,149787,149791],{"__ignoreMap":54},[478,149726,149727,149729,149731],{"class":480,"line":481},[478,149728,146916],{"class":714},[478,149730,759],{"class":710},[478,149732,149733],{"class":488}," \"小明\"\n",[478,149735,149736,149738,149740],{"class":480,"line":565},[478,149737,146926],{"class":714},[478,149739,759],{"class":710},[478,149741,146931],{"class":495},[478,149743,149744],{"class":480,"line":579},[478,149745,2966],{"emptyLinePlaceholder":640},[478,149747,149748,149750,149753],{"class":480,"line":593},[478,149749,32327],{"class":710},[478,149751,149752],{"class":484}," introduce",[478,149754,149755],{"class":714},"(name, age):\n",[478,149757,149758,149760,149762,149764,149767,149769,149771,149773,149776,149778,149780,149782,149785],{"class":480,"line":1769},[478,149759,31679],{"class":495},[478,149761,263],{"class":714},[478,149763,218],{"class":710},[478,149765,149766],{"class":488},"\"我叫",[478,149768,1591],{"class":495},[478,149770,80190],{"class":714},[478,149772,1641],{"class":495},[478,149774,149775],{"class":488},"，今年",[478,149777,1591],{"class":495},[478,149779,70601],{"class":714},[478,149781,1641],{"class":495},[478,149783,149784],{"class":488},"岁\"",[478,149786,720],{"class":714},[478,149788,149789],{"class":480,"line":1783},[478,149790,2966],{"emptyLinePlaceholder":640},[478,149792,149793],{"class":480,"line":1789},[478,149794,149795],{"class":714},"introduce(name, age)\n",[19,149797,149798],{},"面向对象：",[469,149800,149802],{"className":30758,"code":149801,"language":30760,"meta":54,"style":54},"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",[475,149803,149804,149812,149820,149849,149853,149857,149867,149876,149885],{"__ignoreMap":54},[478,149805,149806,149808,149810],{"class":480,"line":481},[478,149807,15259],{"class":710},[478,149809,8464],{"class":484},[478,149811,4305],{"class":714},[478,149813,149814,149816,149818],{"class":480,"line":565},[478,149815,31181],{"class":710},[478,149817,149752],{"class":484},[478,149819,31187],{"class":714},[478,149821,149822,149824,149826,149828,149830,149833,149835,149837,149839,149841,149843,149845,149847],{"class":480,"line":579},[478,149823,32831],{"class":495},[478,149825,263],{"class":714},[478,149827,218],{"class":710},[478,149829,149766],{"class":488},[478,149831,149832],{"class":495},"{self",[478,149834,80681],{"class":714},[478,149836,1641],{"class":495},[478,149838,149775],{"class":488},[478,149840,149832],{"class":495},[478,149842,80693],{"class":714},[478,149844,1641],{"class":495},[478,149846,149784],{"class":488},[478,149848,720],{"class":714},[478,149850,149851],{"class":480,"line":593},[478,149852,2966],{"emptyLinePlaceholder":640},[478,149854,149855],{"class":480,"line":1769},[478,149856,2966],{"emptyLinePlaceholder":640},[478,149858,149859,149862,149864],{"class":480,"line":1783},[478,149860,149861],{"class":714},"student ",[478,149863,759],{"class":710},[478,149865,149866],{"class":714}," Student()\n",[478,149868,149869,149872,149874],{"class":480,"line":1789},[478,149870,149871],{"class":714},"student.name ",[478,149873,759],{"class":710},[478,149875,149733],{"class":488},[478,149877,149878,149881,149883],{"class":480,"line":1880},[478,149879,149880],{"class":714},"student.age ",[478,149882,759],{"class":710},[478,149884,146931],{"class":495},[478,149886,149887],{"class":480,"line":1886},[478,149888,149889],{"class":714},"student.introduce()\n",[19,149891,149892],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149894,149896],{"id":149895},"_112-类和对象","11.2 类和对象",[19,149898,149899],{},"类是模板，对象是根据模板创建出来的具体实例。",[469,149901,149903],{"className":30758,"code":149902,"language":30760,"meta":54,"style":54},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[475,149904,149905,149913,149918,149922,149926,149935],{"__ignoreMap":54},[478,149906,149907,149909,149911],{"class":480,"line":481},[478,149908,15259],{"class":710},[478,149910,8464],{"class":484},[478,149912,4305],{"class":714},[478,149914,149915],{"class":480,"line":565},[478,149916,149917],{"class":710},"    pass\n",[478,149919,149920],{"class":480,"line":579},[478,149921,2966],{"emptyLinePlaceholder":640},[478,149923,149924],{"class":480,"line":593},[478,149925,2966],{"emptyLinePlaceholder":640},[478,149927,149928,149931,149933],{"class":480,"line":1769},[478,149929,149930],{"class":714},"student1 ",[478,149932,759],{"class":710},[478,149934,149866],{"class":714},[478,149936,149937,149940,149942],{"class":480,"line":1783},[478,149938,149939],{"class":714},"student2 ",[478,149941,759],{"class":710},[478,149943,149866],{"class":714},[19,149945,149946,149949,149950,101398,149953,149956],{},[475,149947,149948],{},"Student"," 是类，",[475,149951,149952],{},"student1",[475,149954,149955],{},"student2"," 是对象。",[14,149958,149960],{"id":149959},"_113-属性","11.3 属性",[19,149962,149963],{},"属性是对象保存的数据。",[469,149965,149967],{"className":30758,"code":149966,"language":30760,"meta":54,"style":54},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[475,149968,149969,149977,149981,149985,149989,149997,150005,150013,150017,150024],{"__ignoreMap":54},[478,149970,149971,149973,149975],{"class":480,"line":481},[478,149972,15259],{"class":710},[478,149974,8464],{"class":484},[478,149976,4305],{"class":714},[478,149978,149979],{"class":480,"line":565},[478,149980,149917],{"class":710},[478,149982,149983],{"class":480,"line":579},[478,149984,2966],{"emptyLinePlaceholder":640},[478,149986,149987],{"class":480,"line":593},[478,149988,2966],{"emptyLinePlaceholder":640},[478,149990,149991,149993,149995],{"class":480,"line":1769},[478,149992,149861],{"class":714},[478,149994,759],{"class":710},[478,149996,149866],{"class":714},[478,149998,149999,150001,150003],{"class":480,"line":1783},[478,150000,149871],{"class":714},[478,150002,759],{"class":710},[478,150004,149733],{"class":488},[478,150006,150007,150009,150011],{"class":480,"line":1789},[478,150008,149880],{"class":714},[478,150010,759],{"class":710},[478,150012,146931],{"class":495},[478,150014,150015],{"class":480,"line":1880},[478,150016,2966],{"emptyLinePlaceholder":640},[478,150018,150019,150021],{"class":480,"line":1886},[478,150020,30795],{"class":495},[478,150022,150023],{"class":714},"(student.name)\n",[478,150025,150026,150028],{"class":480,"line":1898},[478,150027,30795],{"class":495},[478,150029,150030],{"class":714},"(student.age)\n",[19,150032,150033],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150035,150037],{"id":150036},"_114-方法","11.4 方法",[19,150039,150040],{},"类中的函数叫方法。",[469,150042,150043],{"className":30758,"code":149801,"language":30760,"meta":54,"style":54},[475,150044,150045,150053,150061,150089,150093,150097,150105,150113,150121],{"__ignoreMap":54},[478,150046,150047,150049,150051],{"class":480,"line":481},[478,150048,15259],{"class":710},[478,150050,8464],{"class":484},[478,150052,4305],{"class":714},[478,150054,150055,150057,150059],{"class":480,"line":565},[478,150056,31181],{"class":710},[478,150058,149752],{"class":484},[478,150060,31187],{"class":714},[478,150062,150063,150065,150067,150069,150071,150073,150075,150077,150079,150081,150083,150085,150087],{"class":480,"line":579},[478,150064,32831],{"class":495},[478,150066,263],{"class":714},[478,150068,218],{"class":710},[478,150070,149766],{"class":488},[478,150072,149832],{"class":495},[478,150074,80681],{"class":714},[478,150076,1641],{"class":495},[478,150078,149775],{"class":488},[478,150080,149832],{"class":495},[478,150082,80693],{"class":714},[478,150084,1641],{"class":495},[478,150086,149784],{"class":488},[478,150088,720],{"class":714},[478,150090,150091],{"class":480,"line":593},[478,150092,2966],{"emptyLinePlaceholder":640},[478,150094,150095],{"class":480,"line":1769},[478,150096,2966],{"emptyLinePlaceholder":640},[478,150098,150099,150101,150103],{"class":480,"line":1783},[478,150100,149861],{"class":714},[478,150102,759],{"class":710},[478,150104,149866],{"class":714},[478,150106,150107,150109,150111],{"class":480,"line":1789},[478,150108,149871],{"class":714},[478,150110,759],{"class":710},[478,150112,149733],{"class":488},[478,150114,150115,150117,150119],{"class":480,"line":1880},[478,150116,149880],{"class":714},[478,150118,759],{"class":710},[478,150120,146931],{"class":495},[478,150122,150123],{"class":480,"line":1886},[478,150124,149889],{"class":714},[19,150126,150127,150129,150130,150132],{},[475,150128,31203],{}," 表示当前对象。调用方法时不需要手动传入 ",[475,150131,31203],{},"，Python 会自动传。",[14,150134,150136],{"id":150135},"_115-构造方法__init__","11.5 构造方法__init__",[19,150138,150139,150141],{},[475,150140,31209],{}," 在对象创建时自动执行，用于初始化属性。",[469,150143,150145],{"className":30758,"code":150144,"language":30760,"meta":54,"style":54},"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",[475,150146,150147,150155,150164,150176,150188,150199,150203,150211,150249,150253,150257,150279],{"__ignoreMap":54},[478,150148,150149,150151,150153],{"class":480,"line":481},[478,150150,15259],{"class":710},[478,150152,8464],{"class":484},[478,150154,4305],{"class":714},[478,150156,150157,150159,150161],{"class":480,"line":565},[478,150158,31181],{"class":710},[478,150160,31184],{"class":495},[478,150162,150163],{"class":714},"(self, name, age, score):\n",[478,150165,150166,150168,150171,150173],{"class":480,"line":579},[478,150167,31225],{"class":495},[478,150169,150170],{"class":714},".name ",[478,150172,759],{"class":710},[478,150174,150175],{"class":714}," name\n",[478,150177,150178,150180,150183,150185],{"class":480,"line":593},[478,150179,31225],{"class":495},[478,150181,150182],{"class":714},".age ",[478,150184,759],{"class":710},[478,150186,150187],{"class":714}," age\n",[478,150189,150190,150192,150195,150197],{"class":480,"line":1769},[478,150191,31225],{"class":495},[478,150193,150194],{"class":714},".score ",[478,150196,759],{"class":710},[478,150198,2147],{"class":714},[478,150200,150201],{"class":480,"line":1783},[478,150202,2966],{"emptyLinePlaceholder":640},[478,150204,150205,150207,150209],{"class":480,"line":1789},[478,150206,31181],{"class":710},[478,150208,149752],{"class":484},[478,150210,31187],{"class":714},[478,150212,150213,150215,150217,150219,150221,150223,150225,150227,150229,150231,150233,150235,150238,150240,150243,150245,150247],{"class":480,"line":1880},[478,150214,32831],{"class":495},[478,150216,263],{"class":714},[478,150218,218],{"class":710},[478,150220,149766],{"class":488},[478,150222,149832],{"class":495},[478,150224,80681],{"class":714},[478,150226,1641],{"class":495},[478,150228,149775],{"class":488},[478,150230,149832],{"class":495},[478,150232,80693],{"class":714},[478,150234,1641],{"class":495},[478,150236,150237],{"class":488},"岁，成绩",[478,150239,149832],{"class":495},[478,150241,150242],{"class":714},".score",[478,150244,1641],{"class":495},[478,150246,952],{"class":488},[478,150248,720],{"class":714},[478,150250,150251],{"class":480,"line":1886},[478,150252,2966],{"emptyLinePlaceholder":640},[478,150254,150255],{"class":480,"line":1898},[478,150256,2966],{"emptyLinePlaceholder":640},[478,150258,150259,150261,150263,150266,150269,150271,150273,150275,150277],{"class":480,"line":2180},[478,150260,149861],{"class":714},[478,150262,759],{"class":710},[478,150264,150265],{"class":714}," Student(",[478,150267,150268],{"class":488},"\"小明\"",[478,150270,13001],{"class":714},[478,150272,1348],{"class":495},[478,150274,13001],{"class":714},[478,150276,1684],{"class":495},[478,150278,720],{"class":714},[478,150280,150281],{"class":480,"line":2185},[478,150282,149889],{"class":714},[19,150284,150285],{},"构造方法的好处：",[29,150287,150288,150291,150294],{},[32,150289,150290],{},"创建对象时必须提供必要数据。",[32,150292,150293],{},"属性初始化集中，不容易漏。",[32,150295,150296],{},"对象状态更完整。",[14,150298,150300,150301],{"id":150299},"_116-str","11.6 ",[45,150302,1868],{},[19,150304,150305,150306,28765],{},"直接打印对象时，默认输出不直观。可以定义 ",[475,150307,150308],{},"__str__",[469,150310,150312],{"className":30758,"code":150311,"language":30760,"meta":54,"style":54},"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",[475,150313,150314,150322,150331,150341,150351,150355,150364,150392,150396,150400,150416],{"__ignoreMap":54},[478,150315,150316,150318,150320],{"class":480,"line":481},[478,150317,15259],{"class":710},[478,150319,8464],{"class":484},[478,150321,4305],{"class":714},[478,150323,150324,150326,150328],{"class":480,"line":565},[478,150325,31181],{"class":710},[478,150327,31184],{"class":495},[478,150329,150330],{"class":714},"(self, name, age):\n",[478,150332,150333,150335,150337,150339],{"class":480,"line":579},[478,150334,31225],{"class":495},[478,150336,150170],{"class":714},[478,150338,759],{"class":710},[478,150340,150175],{"class":714},[478,150342,150343,150345,150347,150349],{"class":480,"line":593},[478,150344,31225],{"class":495},[478,150346,150182],{"class":714},[478,150348,759],{"class":710},[478,150350,150187],{"class":714},[478,150352,150353],{"class":480,"line":1769},[478,150354,2966],{"emptyLinePlaceholder":640},[478,150356,150357,150359,150362],{"class":480,"line":1783},[478,150358,31181],{"class":710},[478,150360,150361],{"class":495}," __str__",[478,150363,31187],{"class":714},[478,150365,150366,150368,150371,150374,150376,150378,150380,150383,150385,150387,150389],{"class":480,"line":1789},[478,150367,15317],{"class":710},[478,150369,150370],{"class":710}," f",[478,150372,150373],{"class":488},"\"Student(name=",[478,150375,149832],{"class":495},[478,150377,80681],{"class":714},[478,150379,1641],{"class":495},[478,150381,150382],{"class":488},", age=",[478,150384,149832],{"class":495},[478,150386,80693],{"class":714},[478,150388,1641],{"class":495},[478,150390,150391],{"class":488},")\"\n",[478,150393,150394],{"class":480,"line":1880},[478,150395,2966],{"emptyLinePlaceholder":640},[478,150397,150398],{"class":480,"line":1886},[478,150399,2966],{"emptyLinePlaceholder":640},[478,150401,150402,150404,150406,150408,150410,150412,150414],{"class":480,"line":1898},[478,150403,149861],{"class":714},[478,150405,759],{"class":710},[478,150407,150265],{"class":714},[478,150409,150268],{"class":488},[478,150411,13001],{"class":714},[478,150413,1348],{"class":495},[478,150415,720],{"class":714},[478,150417,150418,150420],{"class":480,"line":2180},[478,150419,30795],{"class":495},[478,150421,150422],{"class":714},"(student)\n",[14,150424,150426],{"id":150425},"_117-封装","11.7 封装",[19,150428,150429],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150431,150432],{},"Python 中以双下划线开头的属性通常视为私有属性。",[469,150434,150436],{"className":30758,"code":150435,"language":30760,"meta":54,"style":54},"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",[475,150437,150438,150447,150456,150468,150480,150484,150493,150502,150506,150516,150529,150540,150545,150556,150560,150569,150581,150592,150596,150609,150620,150624,150635,150639,150643,150661,150670,150679],{"__ignoreMap":54},[478,150439,150440,150442,150445],{"class":480,"line":481},[478,150441,15259],{"class":710},[478,150443,150444],{"class":484}," Account",[478,150446,4305],{"class":714},[478,150448,150449,150451,150453],{"class":480,"line":565},[478,150450,31181],{"class":710},[478,150452,31184],{"class":495},[478,150454,150455],{"class":714},"(self, owner, balance):\n",[478,150457,150458,150460,150463,150465],{"class":480,"line":579},[478,150459,31225],{"class":495},[478,150461,150462],{"class":714},".owner ",[478,150464,759],{"class":710},[478,150466,150467],{"class":714}," owner\n",[478,150469,150470,150472,150475,150477],{"class":480,"line":593},[478,150471,31225],{"class":495},[478,150473,150474],{"class":714},".__balance ",[478,150476,759],{"class":710},[478,150478,150479],{"class":714}," balance\n",[478,150481,150482],{"class":480,"line":1769},[478,150483,2966],{"emptyLinePlaceholder":640},[478,150485,150486,150488,150491],{"class":480,"line":1783},[478,150487,31181],{"class":710},[478,150489,150490],{"class":484}," get_balance",[478,150492,31187],{"class":714},[478,150494,150495,150497,150499],{"class":480,"line":1789},[478,150496,15317],{"class":710},[478,150498,39253],{"class":495},[478,150500,150501],{"class":714},".__balance\n",[478,150503,150504],{"class":480,"line":1880},[478,150505,2966],{"emptyLinePlaceholder":640},[478,150507,150508,150510,150513],{"class":480,"line":1886},[478,150509,31181],{"class":710},[478,150511,150512],{"class":484}," deposit",[478,150514,150515],{"class":714},"(self, money):\n",[478,150517,150518,150520,150523,150525,150527],{"class":480,"line":1898},[478,150519,3063],{"class":710},[478,150521,150522],{"class":714}," money ",[478,150524,2156],{"class":710},[478,150526,4659],{"class":495},[478,150528,4305],{"class":714},[478,150530,150531,150533,150535,150538],{"class":480,"line":2180},[478,150532,35030],{"class":495},[478,150534,263],{"class":714},[478,150536,150537],{"class":488},"\"存款金额必须大于0\"",[478,150539,720],{"class":714},[478,150541,150542],{"class":480,"line":2185},[478,150543,150544],{"class":710},"            return\n",[478,150546,150547,150549,150551,150553],{"class":480,"line":2191},[478,150548,31225],{"class":495},[478,150550,150474],{"class":714},[478,150552,10043],{"class":710},[478,150554,150555],{"class":714}," money\n",[478,150557,150558],{"class":480,"line":2196},[478,150559,2966],{"emptyLinePlaceholder":640},[478,150561,150562,150564,150567],{"class":480,"line":2210},[478,150563,31181],{"class":710},[478,150565,150566],{"class":484}," withdraw",[478,150568,150515],{"class":714},[478,150570,150571,150573,150575,150577,150579],{"class":480,"line":2215},[478,150572,3063],{"class":710},[478,150574,150522],{"class":714},[478,150576,2156],{"class":710},[478,150578,4659],{"class":495},[478,150580,4305],{"class":714},[478,150582,150583,150585,150587,150590],{"class":480,"line":2221},[478,150584,35030],{"class":495},[478,150586,263],{"class":714},[478,150588,150589],{"class":488},"\"取款金额必须大于0\"",[478,150591,720],{"class":714},[478,150593,150594],{"class":480,"line":2241},[478,150595,150544],{"class":710},[478,150597,150598,150600,150602,150604,150606],{"class":480,"line":2246},[478,150599,3063],{"class":710},[478,150601,150522],{"class":714},[478,150603,1655],{"class":710},[478,150605,39253],{"class":495},[478,150607,150608],{"class":714},".__balance:\n",[478,150610,150611,150613,150615,150618],{"class":480,"line":2260},[478,150612,35030],{"class":495},[478,150614,263],{"class":714},[478,150616,150617],{"class":488},"\"余额不足\"",[478,150619,720],{"class":714},[478,150621,150622],{"class":480,"line":2265},[478,150623,150544],{"class":710},[478,150625,150626,150628,150630,150633],{"class":480,"line":2294},[478,150627,31225],{"class":495},[478,150629,150474],{"class":714},[478,150631,150632],{"class":710},"-=",[478,150634,150555],{"class":714},[478,150636,150637],{"class":480,"line":2299},[478,150638,2966],{"emptyLinePlaceholder":640},[478,150640,150641],{"class":480,"line":2316},[478,150642,2966],{"emptyLinePlaceholder":640},[478,150644,150645,150648,150650,150653,150655,150657,150659],{"class":480,"line":2321},[478,150646,150647],{"class":714},"account ",[478,150649,759],{"class":710},[478,150651,150652],{"class":714}," Account(",[478,150654,150268],{"class":488},[478,150656,13001],{"class":714},[478,150658,6976],{"class":495},[478,150660,720],{"class":714},[478,150662,150663,150666,150668],{"class":480,"line":2326},[478,150664,150665],{"class":714},"account.deposit(",[478,150667,2289],{"class":495},[478,150669,720],{"class":714},[478,150671,150672,150675,150677],{"class":480,"line":2331},[478,150673,150674],{"class":714},"account.withdraw(",[478,150676,1012],{"class":495},[478,150678,720],{"class":714},[478,150680,150681,150683],{"class":480,"line":2345},[478,150682,30795],{"class":495},[478,150684,150685],{"class":714},"(account.get_balance())\n",[19,150687,150688],{},"封装的意义是避免外部随意修改内部状态。",[14,150690,150692],{"id":150691},"_118-继承","11.8 继承",[19,150694,150695],{},"继承可以让子类复用父类的属性和方法。",[469,150697,150699],{"className":30758,"code":150698,"language":30760,"meta":54,"style":54},"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",[475,150700,150701,150710,150719,150730,150734,150738,150752,150761,150772,150776,150780,150790,150795],{"__ignoreMap":54},[478,150702,150703,150705,150708],{"class":480,"line":481},[478,150704,15259],{"class":710},[478,150706,150707],{"class":484}," Animal",[478,150709,4305],{"class":714},[478,150711,150712,150714,150717],{"class":480,"line":565},[478,150713,31181],{"class":710},[478,150715,150716],{"class":484}," eat",[478,150718,31187],{"class":714},[478,150720,150721,150723,150725,150728],{"class":480,"line":579},[478,150722,32831],{"class":495},[478,150724,263],{"class":714},[478,150726,150727],{"class":488},"\"吃东西\"",[478,150729,720],{"class":714},[478,150731,150732],{"class":480,"line":593},[478,150733,2966],{"emptyLinePlaceholder":640},[478,150735,150736],{"class":480,"line":1769},[478,150737,2966],{"emptyLinePlaceholder":640},[478,150739,150740,150742,150745,150747,150750],{"class":480,"line":1783},[478,150741,15259],{"class":710},[478,150743,150744],{"class":484}," Dog",[478,150746,263],{"class":714},[478,150748,150749],{"class":484},"Animal",[478,150751,31166],{"class":714},[478,150753,150754,150756,150759],{"class":480,"line":1789},[478,150755,31181],{"class":710},[478,150757,150758],{"class":484}," bark",[478,150760,31187],{"class":714},[478,150762,150763,150765,150767,150770],{"class":480,"line":1880},[478,150764,32831],{"class":495},[478,150766,263],{"class":714},[478,150768,150769],{"class":488},"\"汪汪\"",[478,150771,720],{"class":714},[478,150773,150774],{"class":480,"line":1886},[478,150775,2966],{"emptyLinePlaceholder":640},[478,150777,150778],{"class":480,"line":1898},[478,150779,2966],{"emptyLinePlaceholder":640},[478,150781,150782,150785,150787],{"class":480,"line":2180},[478,150783,150784],{"class":714},"dog ",[478,150786,759],{"class":710},[478,150788,150789],{"class":714}," Dog()\n",[478,150791,150792],{"class":480,"line":2185},[478,150793,150794],{"class":714},"dog.eat()\n",[478,150796,150797],{"class":480,"line":2191},[478,150798,150799],{"class":714},"dog.bark()\n",[19,150801,150802],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150804,150806],{"id":150805},"_119-方法重写","11.9 方法重写",[469,150808,150810],{"className":30758,"code":150809,"language":30760,"meta":54,"style":54},"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",[475,150811,150812,150820,150829,150840,150844,150848,150860,150868,150878,150882,150886,150899,150907,150918,150922,150926,150934,150944,150948,150953],{"__ignoreMap":54},[478,150813,150814,150816,150818],{"class":480,"line":481},[478,150815,15259],{"class":710},[478,150817,150707],{"class":484},[478,150819,4305],{"class":714},[478,150821,150822,150824,150827],{"class":480,"line":565},[478,150823,31181],{"class":710},[478,150825,150826],{"class":484}," speak",[478,150828,31187],{"class":714},[478,150830,150831,150833,150835,150838],{"class":480,"line":579},[478,150832,32831],{"class":495},[478,150834,263],{"class":714},[478,150836,150837],{"class":488},"\"动物叫\"",[478,150839,720],{"class":714},[478,150841,150842],{"class":480,"line":593},[478,150843,2966],{"emptyLinePlaceholder":640},[478,150845,150846],{"class":480,"line":1769},[478,150847,2966],{"emptyLinePlaceholder":640},[478,150849,150850,150852,150854,150856,150858],{"class":480,"line":1783},[478,150851,15259],{"class":710},[478,150853,150744],{"class":484},[478,150855,263],{"class":714},[478,150857,150749],{"class":484},[478,150859,31166],{"class":714},[478,150861,150862,150864,150866],{"class":480,"line":1789},[478,150863,31181],{"class":710},[478,150865,150826],{"class":484},[478,150867,31187],{"class":714},[478,150869,150870,150872,150874,150876],{"class":480,"line":1880},[478,150871,32831],{"class":495},[478,150873,263],{"class":714},[478,150875,150769],{"class":488},[478,150877,720],{"class":714},[478,150879,150880],{"class":480,"line":1886},[478,150881,2966],{"emptyLinePlaceholder":640},[478,150883,150884],{"class":480,"line":1898},[478,150885,2966],{"emptyLinePlaceholder":640},[478,150887,150888,150890,150893,150895,150897],{"class":480,"line":2180},[478,150889,15259],{"class":710},[478,150891,150892],{"class":484}," Cat",[478,150894,263],{"class":714},[478,150896,150749],{"class":484},[478,150898,31166],{"class":714},[478,150900,150901,150903,150905],{"class":480,"line":2185},[478,150902,31181],{"class":710},[478,150904,150826],{"class":484},[478,150906,31187],{"class":714},[478,150908,150909,150911,150913,150916],{"class":480,"line":2191},[478,150910,32831],{"class":495},[478,150912,263],{"class":714},[478,150914,150915],{"class":488},"\"喵喵\"",[478,150917,720],{"class":714},[478,150919,150920],{"class":480,"line":2196},[478,150921,2966],{"emptyLinePlaceholder":640},[478,150923,150924],{"class":480,"line":2210},[478,150925,2966],{"emptyLinePlaceholder":640},[478,150927,150928,150930,150932],{"class":480,"line":2215},[478,150929,150784],{"class":714},[478,150931,759],{"class":710},[478,150933,150789],{"class":714},[478,150935,150936,150939,150941],{"class":480,"line":2221},[478,150937,150938],{"class":714},"cat ",[478,150940,759],{"class":710},[478,150942,150943],{"class":714}," Cat()\n",[478,150945,150946],{"class":480,"line":2241},[478,150947,2966],{"emptyLinePlaceholder":640},[478,150949,150950],{"class":480,"line":2246},[478,150951,150952],{"class":714},"dog.speak()\n",[478,150954,150955],{"class":480,"line":2260},[478,150956,150957],{"class":714},"cat.speak()\n",[14,150959,150961],{"id":150960},"_1110-super","11.10 super",[19,150963,150964,150965,150968],{},"子类可以通过 ",[475,150966,150967],{},"super()"," 调用父类方法。",[469,150970,150972],{"className":30758,"code":150971,"language":30760,"meta":54,"style":54},"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",[475,150973,150974,150982,150991,151001,151005,151009,151021,151030,151041,151051,151055,151059,151075],{"__ignoreMap":54},[478,150975,150976,150978,150980],{"class":480,"line":481},[478,150977,15259],{"class":710},[478,150979,16134],{"class":484},[478,150981,4305],{"class":714},[478,150983,150984,150986,150988],{"class":480,"line":565},[478,150985,31181],{"class":710},[478,150987,31184],{"class":495},[478,150989,150990],{"class":714},"(self, name):\n",[478,150992,150993,150995,150997,150999],{"class":480,"line":579},[478,150994,31225],{"class":495},[478,150996,150170],{"class":714},[478,150998,759],{"class":710},[478,151000,150175],{"class":714},[478,151002,151003],{"class":480,"line":593},[478,151004,2966],{"emptyLinePlaceholder":640},[478,151006,151007],{"class":480,"line":1769},[478,151008,2966],{"emptyLinePlaceholder":640},[478,151010,151011,151013,151015,151017,151019],{"class":480,"line":1783},[478,151012,15259],{"class":710},[478,151014,8464],{"class":484},[478,151016,263],{"class":714},[478,151018,19611],{"class":484},[478,151020,31166],{"class":714},[478,151022,151023,151025,151027],{"class":480,"line":1789},[478,151024,31181],{"class":710},[478,151026,31184],{"class":495},[478,151028,151029],{"class":714},"(self, name, score):\n",[478,151031,151032,151034,151036,151038],{"class":480,"line":1880},[478,151033,31197],{"class":495},[478,151035,17826],{"class":714},[478,151037,31209],{"class":495},[478,151039,151040],{"class":714},"(name)\n",[478,151042,151043,151045,151047,151049],{"class":480,"line":1886},[478,151044,31225],{"class":495},[478,151046,150194],{"class":714},[478,151048,759],{"class":710},[478,151050,2147],{"class":714},[478,151052,151053],{"class":480,"line":1898},[478,151054,2966],{"emptyLinePlaceholder":640},[478,151056,151057],{"class":480,"line":2180},[478,151058,2966],{"emptyLinePlaceholder":640},[478,151060,151061,151063,151065,151067,151069,151071,151073],{"class":480,"line":2185},[478,151062,149861],{"class":714},[478,151064,759],{"class":710},[478,151066,150265],{"class":714},[478,151068,150268],{"class":488},[478,151070,13001],{"class":714},[478,151072,1684],{"class":495},[478,151074,720],{"class":714},[478,151076,151077,151079],{"class":480,"line":2191},[478,151078,30795],{"class":495},[478,151080,151081],{"class":714},"(student.name, student.score)\n",[14,151083,151085],{"id":151084},"_1111-多态","11.11 多态",[19,151087,151088],{},"多态指不同对象响应同一个方法，表现出不同结果。",[469,151090,151092],{"className":30758,"code":151091,"language":30760,"meta":54,"style":54},"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",[475,151093,151094,151102,151110,151120,151124,151128,151136,151144,151154,151158,151162,151172,151177,151181,151185,151190],{"__ignoreMap":54},[478,151095,151096,151098,151100],{"class":480,"line":481},[478,151097,15259],{"class":710},[478,151099,150744],{"class":484},[478,151101,4305],{"class":714},[478,151103,151104,151106,151108],{"class":480,"line":565},[478,151105,31181],{"class":710},[478,151107,150826],{"class":484},[478,151109,31187],{"class":714},[478,151111,151112,151114,151116,151118],{"class":480,"line":579},[478,151113,32831],{"class":495},[478,151115,263],{"class":714},[478,151117,150769],{"class":488},[478,151119,720],{"class":714},[478,151121,151122],{"class":480,"line":593},[478,151123,2966],{"emptyLinePlaceholder":640},[478,151125,151126],{"class":480,"line":1769},[478,151127,2966],{"emptyLinePlaceholder":640},[478,151129,151130,151132,151134],{"class":480,"line":1783},[478,151131,15259],{"class":710},[478,151133,150892],{"class":484},[478,151135,4305],{"class":714},[478,151137,151138,151140,151142],{"class":480,"line":1789},[478,151139,31181],{"class":710},[478,151141,150826],{"class":484},[478,151143,31187],{"class":714},[478,151145,151146,151148,151150,151152],{"class":480,"line":1880},[478,151147,32831],{"class":495},[478,151149,263],{"class":714},[478,151151,150915],{"class":488},[478,151153,720],{"class":714},[478,151155,151156],{"class":480,"line":1886},[478,151157,2966],{"emptyLinePlaceholder":640},[478,151159,151160],{"class":480,"line":1898},[478,151161,2966],{"emptyLinePlaceholder":640},[478,151163,151164,151166,151169],{"class":480,"line":2180},[478,151165,32327],{"class":710},[478,151167,151168],{"class":484}," make_sound",[478,151170,151171],{"class":714},"(animal):\n",[478,151173,151174],{"class":480,"line":2185},[478,151175,151176],{"class":714},"    animal.speak()\n",[478,151178,151179],{"class":480,"line":2191},[478,151180,2966],{"emptyLinePlaceholder":640},[478,151182,151183],{"class":480,"line":2196},[478,151184,2966],{"emptyLinePlaceholder":640},[478,151186,151187],{"class":480,"line":2210},[478,151188,151189],{"class":714},"make_sound(Dog())\n",[478,151191,151192],{"class":480,"line":2215},[478,151193,151194],{"class":714},"make_sound(Cat())\n",[19,151196,151197],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151199,151201],{"id":151200},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151203,151204],{},"实例属性属于对象：",[469,151206,151208],{"className":30758,"code":151207,"language":30760,"meta":54,"style":54},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[475,151209,151210,151218,151226],{"__ignoreMap":54},[478,151211,151212,151214,151216],{"class":480,"line":481},[478,151213,15259],{"class":710},[478,151215,8464],{"class":484},[478,151217,4305],{"class":714},[478,151219,151220,151222,151224],{"class":480,"line":565},[478,151221,31181],{"class":710},[478,151223,31184],{"class":495},[478,151225,150990],{"class":714},[478,151227,151228,151230,151232,151234],{"class":480,"line":579},[478,151229,31225],{"class":495},[478,151231,150170],{"class":714},[478,151233,759],{"class":710},[478,151235,150175],{"class":714},[19,151237,151238],{},"类属性属于类，所有对象共享：",[469,151240,151242],{"className":30758,"code":151241,"language":30760,"meta":54,"style":54},"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",[475,151243,151244,151252,151262,151266,151274,151284,151288,151292,151305,151319,151323,151330,151337],{"__ignoreMap":54},[478,151245,151246,151248,151250],{"class":480,"line":481},[478,151247,15259],{"class":710},[478,151249,8464],{"class":484},[478,151251,4305],{"class":714},[478,151253,151254,151257,151259],{"class":480,"line":565},[478,151255,151256],{"class":714},"    school ",[478,151258,759],{"class":710},[478,151260,151261],{"class":488}," \"黑马学校\"\n",[478,151263,151264],{"class":480,"line":579},[478,151265,2966],{"emptyLinePlaceholder":640},[478,151267,151268,151270,151272],{"class":480,"line":593},[478,151269,31181],{"class":710},[478,151271,31184],{"class":495},[478,151273,150990],{"class":714},[478,151275,151276,151278,151280,151282],{"class":480,"line":1769},[478,151277,31225],{"class":495},[478,151279,150170],{"class":714},[478,151281,759],{"class":710},[478,151283,150175],{"class":714},[478,151285,151286],{"class":480,"line":1783},[478,151287,2966],{"emptyLinePlaceholder":640},[478,151289,151290],{"class":480,"line":1789},[478,151291,2966],{"emptyLinePlaceholder":640},[478,151293,151294,151297,151299,151301,151303],{"class":480,"line":1880},[478,151295,151296],{"class":714},"s1 ",[478,151298,759],{"class":710},[478,151300,150265],{"class":714},[478,151302,150268],{"class":488},[478,151304,720],{"class":714},[478,151306,151307,151310,151312,151314,151317],{"class":480,"line":1886},[478,151308,151309],{"class":714},"s2 ",[478,151311,759],{"class":710},[478,151313,150265],{"class":714},[478,151315,151316],{"class":488},"\"小红\"",[478,151318,720],{"class":714},[478,151320,151321],{"class":480,"line":1898},[478,151322,2966],{"emptyLinePlaceholder":640},[478,151324,151325,151327],{"class":480,"line":2180},[478,151326,30795],{"class":495},[478,151328,151329],{"class":714},"(s1.school)\n",[478,151331,151332,151334],{"class":480,"line":2185},[478,151333,30795],{"class":495},[478,151335,151336],{"class":714},"(s2.school)\n",[478,151338,151339,151341],{"class":480,"line":2191},[478,151340,30795],{"class":495},[478,151342,151343],{"class":714},"(Student.school)\n",[19,151345,151346],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151348,151350],{"id":151349},"_1113-类方法和静态方法","11.13 类方法和静态方法",[129,151352,151354],{"id":151353},"_11131-类方法","11.13.1 类方法",[19,151356,151357,151358,151361,151362,28765],{},"类方法使用 ",[475,151359,151360],{},"@classmethod","，第一个参数通常是 ",[475,151363,151364],{},"cls",[469,151366,151368],{"className":30758,"code":151367,"language":30760,"meta":54,"style":54},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[475,151369,151370,151378,151386,151390,151398,151408,151418,151422,151426],{"__ignoreMap":54},[478,151371,151372,151374,151376],{"class":480,"line":481},[478,151373,15259],{"class":710},[478,151375,8464],{"class":484},[478,151377,4305],{"class":714},[478,151379,151380,151382,151384],{"class":480,"line":565},[478,151381,151256],{"class":714},[478,151383,759],{"class":710},[478,151385,151261],{"class":488},[478,151387,151388],{"class":480,"line":579},[478,151389,2966],{"emptyLinePlaceholder":640},[478,151391,151392,151395],{"class":480,"line":593},[478,151393,151394],{"class":484},"    @",[478,151396,151397],{"class":495},"classmethod\n",[478,151399,151400,151402,151405],{"class":480,"line":1769},[478,151401,31181],{"class":710},[478,151403,151404],{"class":484}," get_school",[478,151406,151407],{"class":714},"(cls):\n",[478,151409,151410,151412,151415],{"class":480,"line":1783},[478,151411,15317],{"class":710},[478,151413,151414],{"class":495}," cls",[478,151416,151417],{"class":714},".school\n",[478,151419,151420],{"class":480,"line":1789},[478,151421,2966],{"emptyLinePlaceholder":640},[478,151423,151424],{"class":480,"line":1880},[478,151425,2966],{"emptyLinePlaceholder":640},[478,151427,151428,151430],{"class":480,"line":1886},[478,151429,30795],{"class":495},[478,151431,151432],{"class":714},"(Student.get_school())\n",[129,151434,151436],{"id":151435},"_11132-静态方法","11.13.2 静态方法",[19,151438,151439,151440,151443],{},"静态方法使用 ",[475,151441,151442],{},"@staticmethod","，不需要访问实例和类。",[469,151445,151447],{"className":30758,"code":151446,"language":30760,"meta":54,"style":54},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[475,151448,151449,151458,151465,151474,151485,151489,151493],{"__ignoreMap":54},[478,151450,151451,151453,151456],{"class":480,"line":481},[478,151452,15259],{"class":710},[478,151454,151455],{"class":484}," MathUtils",[478,151457,4305],{"class":714},[478,151459,151460,151462],{"class":480,"line":565},[478,151461,151394],{"class":484},[478,151463,151464],{"class":495},"staticmethod\n",[478,151466,151467,151469,151471],{"class":480,"line":579},[478,151468,31181],{"class":710},[478,151470,5775],{"class":484},[478,151472,151473],{"class":714},"(a, b):\n",[478,151475,151476,151478,151480,151482],{"class":480,"line":593},[478,151477,15317],{"class":710},[478,151479,11435],{"class":714},[478,151481,1181],{"class":710},[478,151483,151484],{"class":714}," b\n",[478,151486,151487],{"class":480,"line":1769},[478,151488,2966],{"emptyLinePlaceholder":640},[478,151490,151491],{"class":480,"line":1783},[478,151492,2966],{"emptyLinePlaceholder":640},[478,151494,151495,151497,151500,151502,151504,151506],{"class":480,"line":1789},[478,151496,30795],{"class":495},[478,151498,151499],{"class":714},"(MathUtils.add(",[478,151501,193],{"class":495},[478,151503,13001],{"class":714},[478,151505,789],{"class":495},[478,151507,30877],{"class":714},[19,151509,151510],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151512,151514],{"id":151513},"_1114-dataclass","11.14 dataclass",[19,151516,151517,151520],{},[475,151518,151519],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[469,151522,151524],{"className":30758,"code":151523,"language":30760,"meta":54,"style":54},"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",[475,151525,151526,151538,151542,151546,151551,151559,151567,151575,151583,151587,151591,151611],{"__ignoreMap":54},[478,151527,151528,151530,151533,151535],{"class":480,"line":481},[478,151529,31117],{"class":710},[478,151531,151532],{"class":714}," dataclasses ",[478,151534,30772],{"class":710},[478,151536,151537],{"class":714}," dataclass\n",[478,151539,151540],{"class":480,"line":565},[478,151541,2966],{"emptyLinePlaceholder":640},[478,151543,151544],{"class":480,"line":579},[478,151545,2966],{"emptyLinePlaceholder":640},[478,151547,151548],{"class":480,"line":593},[478,151549,151550],{"class":484},"@dataclass\n",[478,151552,151553,151555,151557],{"class":480,"line":1769},[478,151554,15259],{"class":710},[478,151556,8464],{"class":484},[478,151558,4305],{"class":714},[478,151560,151561,151564],{"class":480,"line":1783},[478,151562,151563],{"class":714},"    name: ",[478,151565,151566],{"class":495},"str\n",[478,151568,151569,151572],{"class":480,"line":1789},[478,151570,151571],{"class":714},"    age: ",[478,151573,151574],{"class":495},"int\n",[478,151576,151577,151580],{"class":480,"line":1880},[478,151578,151579],{"class":714},"    score: ",[478,151581,151582],{"class":495},"float\n",[478,151584,151585],{"class":480,"line":1886},[478,151586,2966],{"emptyLinePlaceholder":640},[478,151588,151589],{"class":480,"line":1898},[478,151590,2966],{"emptyLinePlaceholder":640},[478,151592,151593,151595,151597,151599,151601,151603,151605,151607,151609],{"class":480,"line":2180},[478,151594,149861],{"class":714},[478,151596,759],{"class":710},[478,151598,150265],{"class":714},[478,151600,150268],{"class":488},[478,151602,13001],{"class":714},[478,151604,1348],{"class":495},[478,151606,13001],{"class":714},[478,151608,1684],{"class":495},[478,151610,720],{"class":714},[478,151612,151613,151615],{"class":480,"line":2185},[478,151614,30795],{"class":495},[478,151616,150422],{"class":714},[19,151618,151619,151620,916,151622,151625],{},"它会自动生成 ",[475,151621,31209],{},[475,151623,151624],{},"__repr__"," 等方法。适合数据模型类。",[14,151627,151629],{"id":151628},"_1115-小案例学生类","11.15 小案例：学生类",[469,151631,151633],{"className":30758,"code":151632,"language":30760,"meta":54,"style":54},"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",[475,151634,151635,151643,151652,151664,151674,151684,151694,151698,151707,151720,151724,151733,151739,151751,151763,151775,151787,151791,151795,151801,151811,151820,151830,151838,151846,151855,151859,151863,151871,151907,151911,151915,151940,151947],{"__ignoreMap":54},[478,151636,151637,151639,151641],{"class":480,"line":481},[478,151638,15259],{"class":710},[478,151640,8464],{"class":484},[478,151642,4305],{"class":714},[478,151644,151645,151647,151649],{"class":480,"line":565},[478,151646,31181],{"class":710},[478,151648,31184],{"class":495},[478,151650,151651],{"class":714},"(self, student_id, name, age, score):\n",[478,151653,151654,151656,151659,151661],{"class":480,"line":579},[478,151655,31225],{"class":495},[478,151657,151658],{"class":714},".student_id ",[478,151660,759],{"class":710},[478,151662,151663],{"class":714}," student_id\n",[478,151665,151666,151668,151670,151672],{"class":480,"line":593},[478,151667,31225],{"class":495},[478,151669,150170],{"class":714},[478,151671,759],{"class":710},[478,151673,150175],{"class":714},[478,151675,151676,151678,151680,151682],{"class":480,"line":1769},[478,151677,31225],{"class":495},[478,151679,150182],{"class":714},[478,151681,759],{"class":710},[478,151683,150187],{"class":714},[478,151685,151686,151688,151690,151692],{"class":480,"line":1783},[478,151687,31225],{"class":495},[478,151689,150194],{"class":714},[478,151691,759],{"class":710},[478,151693,2147],{"class":714},[478,151695,151696],{"class":480,"line":1789},[478,151697,2966],{"emptyLinePlaceholder":640},[478,151699,151700,151702,151705],{"class":480,"line":1880},[478,151701,31181],{"class":710},[478,151703,151704],{"class":484}," is_passed",[478,151706,31187],{"class":714},[478,151708,151709,151711,151713,151715,151717],{"class":480,"line":1886},[478,151710,15317],{"class":710},[478,151712,39253],{"class":495},[478,151714,150194],{"class":714},[478,151716,2277],{"class":710},[478,151718,151719],{"class":495}," 60\n",[478,151721,151722],{"class":480,"line":1898},[478,151723,2966],{"emptyLinePlaceholder":640},[478,151725,151726,151728,151731],{"class":480,"line":2180},[478,151727,31181],{"class":710},[478,151729,151730],{"class":484}," to_dict",[478,151732,31187],{"class":714},[478,151734,151735,151737],{"class":480,"line":2185},[478,151736,15317],{"class":710},[478,151738,16137],{"class":714},[478,151740,151741,151744,151746,151748],{"class":480,"line":2191},[478,151742,151743],{"class":488},"            \"student_id\"",[478,151745,51817],{"class":714},[478,151747,31203],{"class":495},[478,151749,151750],{"class":714},".student_id,\n",[478,151752,151753,151756,151758,151760],{"class":480,"line":2196},[478,151754,151755],{"class":488},"            \"name\"",[478,151757,51817],{"class":714},[478,151759,31203],{"class":495},[478,151761,151762],{"class":714},".name,\n",[478,151764,151765,151768,151770,151772],{"class":480,"line":2210},[478,151766,151767],{"class":488},"            \"age\"",[478,151769,51817],{"class":714},[478,151771,31203],{"class":495},[478,151773,151774],{"class":714},".age,\n",[478,151776,151777,151780,151782,151784],{"class":480,"line":2215},[478,151778,151779],{"class":488},"            \"score\"",[478,151781,51817],{"class":714},[478,151783,31203],{"class":495},[478,151785,151786],{"class":714},".score,\n",[478,151788,151789],{"class":480,"line":2221},[478,151790,3095],{"class":714},[478,151792,151793],{"class":480,"line":2241},[478,151794,2966],{"emptyLinePlaceholder":640},[478,151796,151797,151799],{"class":480,"line":2246},[478,151798,151394],{"class":484},[478,151800,151397],{"class":495},[478,151802,151803,151805,151808],{"class":480,"line":2260},[478,151804,31181],{"class":710},[478,151806,151807],{"class":484}," from_dict",[478,151809,151810],{"class":714},"(cls, data):\n",[478,151812,151813,151815,151817],{"class":480,"line":2265},[478,151814,15317],{"class":710},[478,151816,151414],{"class":495},[478,151818,151819],{"class":714},"(\n",[478,151821,151822,151825,151828],{"class":480,"line":2294},[478,151823,151824],{"class":714},"            data[",[478,151826,151827],{"class":488},"\"student_id\"",[478,151829,88216],{"class":714},[478,151831,151832,151834,151836],{"class":480,"line":2299},[478,151833,151824],{"class":714},[478,151835,63059],{"class":488},[478,151837,88216],{"class":714},[478,151839,151840,151842,151844],{"class":480,"line":2316},[478,151841,151824],{"class":714},[478,151843,69504],{"class":488},[478,151845,88216],{"class":714},[478,151847,151848,151850,151853],{"class":480,"line":2321},[478,151849,151824],{"class":714},[478,151851,151852],{"class":488},"\"score\"",[478,151854,88216],{"class":714},[478,151856,151857],{"class":480,"line":2326},[478,151858,38506],{"class":714},[478,151860,151861],{"class":480,"line":2331},[478,151862,2966],{"emptyLinePlaceholder":640},[478,151864,151865,151867,151869],{"class":480,"line":2345},[478,151866,31181],{"class":710},[478,151868,150361],{"class":495},[478,151870,31187],{"class":714},[478,151872,151873,151875,151877,151879,151881,151884,151886,151889,151891,151893,151895,151897,151899,151901,151903,151905],{"class":480,"line":2350},[478,151874,15317],{"class":710},[478,151876,150370],{"class":710},[478,151878,952],{"class":488},[478,151880,149832],{"class":495},[478,151882,151883],{"class":714},".student_id",[478,151885,1641],{"class":495},[478,151887,151888],{"class":495}," {self",[478,151890,80681],{"class":714},[478,151892,1641],{"class":495},[478,151894,151888],{"class":495},[478,151896,80693],{"class":714},[478,151898,1641],{"class":495},[478,151900,151888],{"class":495},[478,151902,150242],{"class":714},[478,151904,1641],{"class":495},[478,151906,25513],{"class":488},[478,151908,151909],{"class":480,"line":3143},[478,151910,2966],{"emptyLinePlaceholder":640},[478,151912,151913],{"class":480,"line":3157},[478,151914,2966],{"emptyLinePlaceholder":640},[478,151916,151917,151919,151921,151923,151926,151928,151930,151932,151934,151936,151938],{"class":480,"line":3165},[478,151918,149861],{"class":714},[478,151920,759],{"class":710},[478,151922,150265],{"class":714},[478,151924,151925],{"class":488},"\"001\"",[478,151927,13001],{"class":714},[478,151929,150268],{"class":488},[478,151931,13001],{"class":714},[478,151933,1348],{"class":495},[478,151935,13001],{"class":714},[478,151937,1684],{"class":495},[478,151939,720],{"class":714},[478,151941,151942,151944],{"class":480,"line":3170},[478,151943,30795],{"class":495},[478,151945,151946],{"class":714},"(student.is_passed())\n",[478,151948,151949,151951],{"class":480,"line":3176},[478,151950,30795],{"class":495},[478,151952,151953],{"class":714},"(student.to_dict())\n",[19,151955,151956,101398,151959,151962],{},[475,151957,151958],{},"to_dict()",[475,151960,151961],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151964,151966],{"id":151965},"_1116-易错点","11.16 易错点",[29,151968,151969,151975,151981,151986,151989,151992],{},[32,151970,151971,151972,28765],{},"类名推荐使用大驼峰，如 ",[475,151973,151974],{},"StudentManager",[32,151976,151977,151978,151980],{},"方法第一个参数必须写 ",[475,151979,31203],{},"，调用时不用传。",[32,151982,151983,151985],{},[475,151984,31209],{}," 不是普通方法，它在创建对象时自动执行。",[32,151987,151988],{},"私有属性不是绝对安全，只是约定和名称改写。",[32,151990,151991],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[32,151993,151994],{},"类中方法太多时，说明职责可能过重。",[14,151996,151998],{"id":151997},"_1117-本章练习","11.17 本章练习",[29,152000,152001,152007,152013,152018,152031],{},[32,152002,152003,152004,152006],{},"定义 ",[475,152005,149948],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[32,152008,152003,152009,152012],{},[475,152010,152011],{},"Account"," 类，实现存款、取款、查询余额。",[32,152014,152003,152015,152017],{},[475,152016,17791],{}," 类，计算圆的周长和面积。",[32,152019,152003,152020,916,152023,152026,152027,152030],{},[475,152021,152022],{},"Dog",[475,152024,152025],{},"Cat"," 类，并用同一个函数调用它们的 ",[475,152028,152029],{},"speak()"," 方法。",[32,152032,104746,152033,152035,152036,28765],{},[475,152034,151519],{}," 定义一个商品类 ",[475,152037,152038],{},"Product",[617,152040,152041],{},"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":54,"searchDepth":565,"depth":565,"links":152043},[152044,152045,152046,152047,152048,152049,152051,152052,152053,152054,152055,152056,152057,152061,152062,152063,152064],{"id":149712,"depth":565,"text":149713},{"id":149895,"depth":565,"text":149896},{"id":149959,"depth":565,"text":149960},{"id":150036,"depth":565,"text":150037},{"id":150135,"depth":565,"text":150136},{"id":150299,"depth":565,"text":152050},"11.6 str",{"id":150425,"depth":565,"text":150426},{"id":150691,"depth":565,"text":150692},{"id":150805,"depth":565,"text":150806},{"id":150960,"depth":565,"text":150961},{"id":151084,"depth":565,"text":151085},{"id":151200,"depth":565,"text":151201},{"id":151349,"depth":565,"text":151350,"children":152058},[152059,152060],{"id":151353,"depth":579,"text":151354},{"id":151435,"depth":579,"text":151436},{"id":151513,"depth":565,"text":151514},{"id":151628,"depth":565,"text":151629},{"id":151965,"depth":565,"text":151966},{"id":151997,"depth":565,"text":151998},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149704,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152071,"title":152072,"body":152073,"description":23942,"extension":638,"meta":155386,"navigation":640,"path":155387,"seo":155388,"stem":155389,"__hash__":155390},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152074,"toc":155362},[152075,152078,152082,152085,152088,152117,152120,152128,152132,152136,152139,152162,152165,152171,152175,153621,153624,153645,153649,153652,153664,153667,153851,153854,153980,153983,153987,153991,154127,154131,154217,154221,154303,154307,154344,154348,154537,154541,154544,154774,154778,154781,154962,154965,154969,154972,154978,154981,155007,155011,155014,155028,155031,155056,155059,155073,155076,155093,155096,155113,155116,155133,155137,155163,155167,155190,155194,155197,155199,155205,155207,155228,155231,155237,155243,155247,155250,155326,155329,155333,155359],[10,152076,152072],{"id":152077},"_12-综合案例与复习路线",[14,152079,152081],{"id":152080},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152083,152084],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152086,152087],{},"一个合格的入门综合项目最好覆盖：",[29,152089,152090,152093,152096,152099,152102,152105,152108,152111,152114],{},[32,152091,152092],{},"输入输出。",[32,152094,152095],{},"判断和循环。",[32,152097,152098],{},"函数拆分。",[32,152100,152101],{},"列表、字典等容器。",[32,152103,152104],{},"文件持久化。",[32,152106,152107],{},"异常处理。",[32,152109,152110],{},"模块拆分。",[32,152112,152113],{},"可选：面向对象。",[32,152115,152116],{},"可选：数据可视化。",[19,152118,152119],{},"本章整理两个方向：",[29,152121,152122,152125],{},[32,152123,152124],{},"学生管理系统。",[32,152126,152127],{},"销售数据统计和可视化。",[14,152129,152131],{"id":152130},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[129,152133,152135],{"id":152134},"_1221-需求","12.2.1 需求",[19,152137,152138],{},"实现一个命令行学生管理系统：",[29,152140,152141,152144,152147,152150,152153,152156,152159],{},[32,152142,152143],{},"添加学生。",[32,152145,152146],{},"删除学生。",[32,152148,152149],{},"修改学生。",[32,152151,152152],{},"查询学生。",[32,152154,152155],{},"显示所有学生。",[32,152157,152158],{},"保存到 JSON 文件。",[32,152160,152161],{},"程序启动时自动读取 JSON 文件。",[19,152163,152164],{},"学生字段：",[469,152166,152169],{"className":152167,"code":152168,"language":5753,"meta":54},[5751],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[475,152170,152168],{"__ignoreMap":54},[14,152172,152174],{"id":152173},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[469,152176,152178],{"className":30758,"code":152177,"language":30760,"meta":54,"style":54},"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",[475,152179,152180,152186,152196,152200,152214,152218,152222,152231,152243,152249,152253,152259,152290,152300,152307,152318,152324,152328,152332,152342,152373,152399,152403,152407,152416,152427,152438,152449,152460,152471,152482,152493,152497,152501,152511,152523,152539,152546,152553,152557,152561,152571,152579,152586,152599,152609,152620,152624,152628,152637,152645,152651,152663,152671,152682,152686,152690,152699,152715,152719,152726,152737,152742,152746,152762,152777,152792,152796,152801,152809,152817,152825,152833,152837,152842,152853,152857,152861,152870,152885,152895,152899,152911,152922,152926,152930,152935,152939,152950,152954,152958,152967,152982,152990,152994,153006,153016,153020,153024,153039,153052,153065,153069,153082,153094,153106,153110,153114,153125,153129,153133,153142,153157,153165,153169,153181,153191,153195,153199,153204,153208,153212,153222,153228,153250,153269,153288,153307,153312,153316,153320,153329,153337,153348,153352,153356,153382,153392,153397,153401,153405,153413,153423,153427,153435,153440,153456,153460,153474,153479,153493,153498,153511,153516,153529,153534,153547,153552,153565,153576,153580,153586,153597,153601,153605,153617],{"__ignoreMap":54},[478,152181,152182,152184],{"class":480,"line":481},[478,152183,30772],{"class":710},[478,152185,147471],{"class":714},[478,152187,152188,152190,152192,152194],{"class":480,"line":565},[478,152189,31117],{"class":710},[478,152191,108691],{"class":714},[478,152193,30772],{"class":710},[478,152195,108696],{"class":714},[478,152197,152198],{"class":480,"line":579},[478,152199,2966],{"emptyLinePlaceholder":640},[478,152201,152202,152205,152207,152209,152212],{"class":480,"line":593},[478,152203,152204],{"class":495},"DATA_FILE",[478,152206,14130],{"class":710},[478,152208,108925],{"class":714},[478,152210,152211],{"class":488},"\"students.json\"",[478,152213,720],{"class":714},[478,152215,152216],{"class":480,"line":1769},[478,152217,2966],{"emptyLinePlaceholder":640},[478,152219,152220],{"class":480,"line":1783},[478,152221,2966],{"emptyLinePlaceholder":640},[478,152223,152224,152226,152229],{"class":480,"line":1789},[478,152225,32327],{"class":710},[478,152227,152228],{"class":484}," load_students",[478,152230,32333],{"class":714},[478,152232,152233,152235,152237,152240],{"class":480,"line":1880},[478,152234,3667],{"class":710},[478,152236,39310],{"class":710},[478,152238,152239],{"class":495}," DATA_FILE",[478,152241,152242],{"class":714},".exists():\n",[478,152244,152245,152247],{"class":480,"line":1886},[478,152246,15317],{"class":710},[478,152248,52218],{"class":714},[478,152250,152251],{"class":480,"line":1898},[478,152252,2966],{"emptyLinePlaceholder":640},[478,152254,152255,152257],{"class":480,"line":2180},[478,152256,126164],{"class":710},[478,152258,4305],{"class":714},[478,152260,152261,152264,152266,152268,152270,152272,152274,152276,152278,152280,152282,152284,152286,152288],{"class":480,"line":2185},[478,152262,152263],{"class":710},"        with",[478,152265,147171],{"class":495},[478,152267,263],{"class":714},[478,152269,152204],{"class":495},[478,152271,13001],{"class":714},[478,152273,147181],{"class":488},[478,152275,13001],{"class":714},[478,152277,147186],{"class":5782},[478,152279,759],{"class":710},[478,152281,147191],{"class":488},[478,152283,14280],{"class":714},[478,152285,31763],{"class":710},[478,152287,148533],{"class":5782},[478,152289,4305],{"class":714},[478,152291,152292,152294,152296,152298],{"class":480,"line":2191},[478,152293,16297],{"class":710},[478,152295,148544],{"class":714},[478,152297,45734],{"class":5782},[478,152299,720],{"class":714},[478,152301,152302,152304],{"class":480,"line":2196},[478,152303,126192],{"class":710},[478,152305,152306],{"class":714}," json.JSONDecodeError:\n",[478,152308,152309,152311,152313,152316],{"class":480,"line":2210},[478,152310,32831],{"class":495},[478,152312,263],{"class":714},[478,152314,152315],{"class":488},"\"数据文件格式错误，已使用空数据启动\"",[478,152317,720],{"class":714},[478,152319,152320,152322],{"class":480,"line":2215},[478,152321,15317],{"class":710},[478,152323,52218],{"class":714},[478,152325,152326],{"class":480,"line":2221},[478,152327,2966],{"emptyLinePlaceholder":640},[478,152329,152330],{"class":480,"line":2241},[478,152331,2966],{"emptyLinePlaceholder":640},[478,152333,152334,152336,152339],{"class":480,"line":2246},[478,152335,32327],{"class":710},[478,152337,152338],{"class":484}," save_students",[478,152340,152341],{"class":714},"(students):\n",[478,152343,152344,152346,152348,152350,152352,152354,152357,152359,152361,152363,152365,152367,152369,152371],{"class":480,"line":2260},[478,152345,34558],{"class":710},[478,152347,147171],{"class":495},[478,152349,263],{"class":714},[478,152351,152204],{"class":495},[478,152353,13001],{"class":714},[478,152355,152356],{"class":488},"\"w\"",[478,152358,13001],{"class":714},[478,152360,147186],{"class":5782},[478,152362,759],{"class":710},[478,152364,147191],{"class":488},[478,152366,14280],{"class":714},[478,152368,31763],{"class":710},[478,152370,148533],{"class":5782},[478,152372,4305],{"class":714},[478,152374,152375,152378,152380,152382,152384,152386,152388,152390,152393,152395,152397],{"class":480,"line":2265},[478,152376,152377],{"class":714},"        json.dump(students, ",[478,152379,45734],{"class":5782},[478,152381,13001],{"class":714},[478,152383,147517],{"class":5782},[478,152385,759],{"class":710},[478,152387,34367],{"class":495},[478,152389,13001],{"class":714},[478,152391,152392],{"class":5782},"indent",[478,152394,759],{"class":710},[478,152396,789],{"class":495},[478,152398,720],{"class":714},[478,152400,152401],{"class":480,"line":2294},[478,152402,2966],{"emptyLinePlaceholder":640},[478,152404,152405],{"class":480,"line":2299},[478,152406,2966],{"emptyLinePlaceholder":640},[478,152408,152409,152411,152414],{"class":480,"line":2316},[478,152410,32327],{"class":710},[478,152412,152413],{"class":484}," show_menu",[478,152415,32333],{"class":714},[478,152417,152418,152420,152422,152425],{"class":480,"line":2321},[478,152419,31679],{"class":495},[478,152421,263],{"class":714},[478,152423,152424],{"class":488},"\"====== 学生管理系统 ======\"",[478,152426,720],{"class":714},[478,152428,152429,152431,152433,152436],{"class":480,"line":2326},[478,152430,31679],{"class":495},[478,152432,263],{"class":714},[478,152434,152435],{"class":488},"\"1. 添加学生\"",[478,152437,720],{"class":714},[478,152439,152440,152442,152444,152447],{"class":480,"line":2331},[478,152441,31679],{"class":495},[478,152443,263],{"class":714},[478,152445,152446],{"class":488},"\"2. 删除学生\"",[478,152448,720],{"class":714},[478,152450,152451,152453,152455,152458],{"class":480,"line":2345},[478,152452,31679],{"class":495},[478,152454,263],{"class":714},[478,152456,152457],{"class":488},"\"3. 修改学生\"",[478,152459,720],{"class":714},[478,152461,152462,152464,152466,152469],{"class":480,"line":2350},[478,152463,31679],{"class":495},[478,152465,263],{"class":714},[478,152467,152468],{"class":488},"\"4. 查询学生\"",[478,152470,720],{"class":714},[478,152472,152473,152475,152477,152480],{"class":480,"line":3143},[478,152474,31679],{"class":495},[478,152476,263],{"class":714},[478,152478,152479],{"class":488},"\"5. 显示所有学生\"",[478,152481,720],{"class":714},[478,152483,152484,152486,152488,152491],{"class":480,"line":3157},[478,152485,31679],{"class":495},[478,152487,263],{"class":714},[478,152489,152490],{"class":488},"\"0. 退出系统\"",[478,152492,720],{"class":714},[478,152494,152495],{"class":480,"line":3165},[478,152496,2966],{"emptyLinePlaceholder":640},[478,152498,152499],{"class":480,"line":3170},[478,152500,2966],{"emptyLinePlaceholder":640},[478,152502,152503,152505,152508],{"class":480,"line":3176},[478,152504,32327],{"class":710},[478,152506,152507],{"class":484}," find_student",[478,152509,152510],{"class":714},"(students, student_id):\n",[478,152512,152513,152515,152518,152520],{"class":480,"line":3182},[478,152514,3767],{"class":710},[478,152516,152517],{"class":714}," student ",[478,152519,26423],{"class":710},[478,152521,152522],{"class":714}," students:\n",[478,152524,152525,152527,152530,152532,152534,152536],{"class":480,"line":3187},[478,152526,3063],{"class":710},[478,152528,152529],{"class":714}," student[",[478,152531,151827],{"class":488},[478,152533,5009],{"class":714},[478,152535,3515],{"class":710},[478,152537,152538],{"class":714}," student_id:\n",[478,152540,152541,152543],{"class":480,"line":8514},[478,152542,16297],{"class":710},[478,152544,152545],{"class":714}," student\n",[478,152547,152548,152550],{"class":480,"line":8538},[478,152549,4656],{"class":710},[478,152551,152552],{"class":495}," None\n",[478,152554,152555],{"class":480,"line":8543},[478,152556,2966],{"emptyLinePlaceholder":640},[478,152558,152559],{"class":480,"line":8549},[478,152560,2966],{"emptyLinePlaceholder":640},[478,152562,152563,152565,152568],{"class":480,"line":8576},[478,152564,32327],{"class":710},[478,152566,152567],{"class":484}," input_int",[478,152569,152570],{"class":714},"(prompt):\n",[478,152572,152573,152575,152577],{"class":480,"line":8581},[478,152574,2817],{"class":710},[478,152576,95672],{"class":495},[478,152578,4305],{"class":714},[478,152580,152581,152584],{"class":480,"line":8587},[478,152582,152583],{"class":710},"        try",[478,152585,4305],{"class":714},[478,152587,152588,152590,152592,152594,152596],{"class":480,"line":8599},[478,152589,16297],{"class":710},[478,152591,2948],{"class":495},[478,152593,263],{"class":714},[478,152595,54201],{"class":495},[478,152597,152598],{"class":714},"(prompt))\n",[478,152600,152601,152604,152607],{"class":480,"line":8611},[478,152602,152603],{"class":710},"        except",[478,152605,152606],{"class":495}," ValueError",[478,152608,4305],{"class":714},[478,152610,152611,152613,152615,152618],{"class":480,"line":8623},[478,152612,35030],{"class":495},[478,152614,263],{"class":714},[478,152616,152617],{"class":488},"\"请输入整数\"",[478,152619,720],{"class":714},[478,152621,152622],{"class":480,"line":10282},[478,152623,2966],{"emptyLinePlaceholder":640},[478,152625,152626],{"class":480,"line":10307},[478,152627,2966],{"emptyLinePlaceholder":640},[478,152629,152630,152632,152635],{"class":480,"line":10330},[478,152631,32327],{"class":710},[478,152633,152634],{"class":484}," input_float",[478,152636,152570],{"class":714},[478,152638,152639,152641,152643],{"class":480,"line":10354},[478,152640,2817],{"class":710},[478,152642,95672],{"class":495},[478,152644,4305],{"class":714},[478,152646,152647,152649],{"class":480,"line":10359},[478,152648,152583],{"class":710},[478,152650,4305],{"class":714},[478,152652,152653,152655,152657,152659,152661],{"class":480,"line":10364},[478,152654,16297],{"class":710},[478,152656,110177],{"class":495},[478,152658,263],{"class":714},[478,152660,54201],{"class":495},[478,152662,152598],{"class":714},[478,152664,152665,152667,152669],{"class":480,"line":10369},[478,152666,152603],{"class":710},[478,152668,152606],{"class":495},[478,152670,4305],{"class":714},[478,152672,152673,152675,152677,152680],{"class":480,"line":10378},[478,152674,35030],{"class":495},[478,152676,263],{"class":714},[478,152678,152679],{"class":488},"\"请输入数字\"",[478,152681,720],{"class":714},[478,152683,152684],{"class":480,"line":10383},[478,152685,2966],{"emptyLinePlaceholder":640},[478,152687,152688],{"class":480,"line":10389},[478,152689,2966],{"emptyLinePlaceholder":640},[478,152691,152692,152694,152697],{"class":480,"line":10410},[478,152693,32327],{"class":710},[478,152695,152696],{"class":484}," add_student",[478,152698,152341],{"class":714},[478,152700,152701,152704,152706,152708,152710,152713],{"class":480,"line":10416},[478,152702,152703],{"class":714},"    student_id ",[478,152705,759],{"class":710},[478,152707,60985],{"class":495},[478,152709,263],{"class":714},[478,152711,152712],{"class":488},"\"请输入学号:\"",[478,152714,720],{"class":714},[478,152716,152717],{"class":480,"line":10430},[478,152718,2966],{"emptyLinePlaceholder":640},[478,152720,152721,152723],{"class":480,"line":10436},[478,152722,3667],{"class":710},[478,152724,152725],{"class":714}," find_student(students, student_id):\n",[478,152727,152728,152730,152732,152735],{"class":480,"line":10463},[478,152729,32831],{"class":495},[478,152731,263],{"class":714},[478,152733,152734],{"class":488},"\"学号已存在\"",[478,152736,720],{"class":714},[478,152738,152739],{"class":480,"line":10472},[478,152740,152741],{"class":710},"        return\n",[478,152743,152744],{"class":480,"line":10478},[478,152745,2966],{"emptyLinePlaceholder":640},[478,152747,152748,152751,152753,152755,152757,152760],{"class":480,"line":10486},[478,152749,152750],{"class":714},"    name ",[478,152752,759],{"class":710},[478,152754,60985],{"class":495},[478,152756,263],{"class":714},[478,152758,152759],{"class":488},"\"请输入姓名:\"",[478,152761,720],{"class":714},[478,152763,152764,152767,152769,152772,152775],{"class":480,"line":10491},[478,152765,152766],{"class":714},"    age ",[478,152768,759],{"class":710},[478,152770,152771],{"class":714}," input_int(",[478,152773,152774],{"class":488},"\"请输入年龄:\"",[478,152776,720],{"class":714},[478,152778,152779,152782,152784,152787,152790],{"class":480,"line":17169},[478,152780,152781],{"class":714},"    score ",[478,152783,759],{"class":710},[478,152785,152786],{"class":714}," input_float(",[478,152788,152789],{"class":488},"\"请输入成绩:\"",[478,152791,720],{"class":714},[478,152793,152794],{"class":480,"line":17175},[478,152795,2966],{"emptyLinePlaceholder":640},[478,152797,152798],{"class":480,"line":17198},[478,152799,152800],{"class":714},"    students.append({\n",[478,152802,152803,152806],{"class":480,"line":17204},[478,152804,152805],{"class":488},"        \"student_id\"",[478,152807,152808],{"class":714},": student_id,\n",[478,152810,152811,152814],{"class":480,"line":17227},[478,152812,152813],{"class":488},"        \"name\"",[478,152815,152816],{"class":714},": name,\n",[478,152818,152819,152822],{"class":480,"line":17241},[478,152820,152821],{"class":488},"        \"age\"",[478,152823,152824],{"class":714},": age,\n",[478,152826,152827,152830],{"class":480,"line":17261},[478,152828,152829],{"class":488},"        \"score\"",[478,152831,152832],{"class":714},": score,\n",[478,152834,152835],{"class":480,"line":17267},[478,152836,33841],{"class":714},[478,152838,152839],{"class":480,"line":17278},[478,152840,152841],{"class":714},"    save_students(students)\n",[478,152843,152844,152846,152848,152851],{"class":480,"line":17301},[478,152845,31679],{"class":495},[478,152847,263],{"class":714},[478,152849,152850],{"class":488},"\"添加成功\"",[478,152852,720],{"class":714},[478,152854,152855],{"class":480,"line":17323},[478,152856,2966],{"emptyLinePlaceholder":640},[478,152858,152859],{"class":480,"line":17328},[478,152860,2966],{"emptyLinePlaceholder":640},[478,152862,152863,152865,152868],{"class":480,"line":17334},[478,152864,32327],{"class":710},[478,152866,152867],{"class":484}," delete_student",[478,152869,152341],{"class":714},[478,152871,152872,152874,152876,152878,152880,152883],{"class":480,"line":17348},[478,152873,152703],{"class":714},[478,152875,759],{"class":710},[478,152877,60985],{"class":495},[478,152879,263],{"class":714},[478,152881,152882],{"class":488},"\"请输入要删除的学号:\"",[478,152884,720],{"class":714},[478,152886,152887,152890,152892],{"class":480,"line":17361},[478,152888,152889],{"class":714},"    student ",[478,152891,759],{"class":710},[478,152893,152894],{"class":714}," find_student(students, student_id)\n",[478,152896,152897],{"class":480,"line":17366},[478,152898,2966],{"emptyLinePlaceholder":640},[478,152900,152901,152903,152905,152907,152909],{"class":480,"line":17380},[478,152902,3667],{"class":710},[478,152904,152517],{"class":714},[478,152906,39307],{"class":710},[478,152908,39313],{"class":495},[478,152910,4305],{"class":714},[478,152912,152913,152915,152917,152920],{"class":480,"line":17385},[478,152914,32831],{"class":495},[478,152916,263],{"class":714},[478,152918,152919],{"class":488},"\"学生不存在\"",[478,152921,720],{"class":714},[478,152923,152924],{"class":480,"line":17391},[478,152925,152741],{"class":710},[478,152927,152928],{"class":480,"line":17396},[478,152929,2966],{"emptyLinePlaceholder":640},[478,152931,152932],{"class":480,"line":17410},[478,152933,152934],{"class":714},"    students.remove(student)\n",[478,152936,152937],{"class":480,"line":17415},[478,152938,152841],{"class":714},[478,152940,152941,152943,152945,152948],{"class":480,"line":17420},[478,152942,31679],{"class":495},[478,152944,263],{"class":714},[478,152946,152947],{"class":488},"\"删除成功\"",[478,152949,720],{"class":714},[478,152951,152952],{"class":480,"line":17434},[478,152953,2966],{"emptyLinePlaceholder":640},[478,152955,152956],{"class":480,"line":17446},[478,152957,2966],{"emptyLinePlaceholder":640},[478,152959,152960,152962,152965],{"class":480,"line":17451},[478,152961,32327],{"class":710},[478,152963,152964],{"class":484}," update_student",[478,152966,152341],{"class":714},[478,152968,152969,152971,152973,152975,152977,152980],{"class":480,"line":17464},[478,152970,152703],{"class":714},[478,152972,759],{"class":710},[478,152974,60985],{"class":495},[478,152976,263],{"class":714},[478,152978,152979],{"class":488},"\"请输入要修改的学号:\"",[478,152981,720],{"class":714},[478,152983,152984,152986,152988],{"class":480,"line":17469},[478,152985,152889],{"class":714},[478,152987,759],{"class":710},[478,152989,152894],{"class":714},[478,152991,152992],{"class":480,"line":17474},[478,152993,2966],{"emptyLinePlaceholder":640},[478,152995,152996,152998,153000,153002,153004],{"class":480,"line":17479},[478,152997,3667],{"class":710},[478,152999,152517],{"class":714},[478,153001,39307],{"class":710},[478,153003,39313],{"class":495},[478,153005,4305],{"class":714},[478,153007,153008,153010,153012,153014],{"class":480,"line":17492},[478,153009,32831],{"class":495},[478,153011,263],{"class":714},[478,153013,152919],{"class":488},[478,153015,720],{"class":714},[478,153017,153018],{"class":480,"line":17497},[478,153019,152741],{"class":710},[478,153021,153022],{"class":480,"line":33013},[478,153023,2966],{"emptyLinePlaceholder":640},[478,153025,153026,153028,153030,153032,153034,153037],{"class":480,"line":33019},[478,153027,152750],{"class":714},[478,153029,759],{"class":710},[478,153031,60985],{"class":495},[478,153033,263],{"class":714},[478,153035,153036],{"class":488},"\"请输入新姓名:\"",[478,153038,720],{"class":714},[478,153040,153041,153043,153045,153047,153050],{"class":480,"line":33025},[478,153042,152766],{"class":714},[478,153044,759],{"class":710},[478,153046,152771],{"class":714},[478,153048,153049],{"class":488},"\"请输入新年龄:\"",[478,153051,720],{"class":714},[478,153053,153054,153056,153058,153060,153063],{"class":480,"line":33031},[478,153055,152781],{"class":714},[478,153057,759],{"class":710},[478,153059,152786],{"class":714},[478,153061,153062],{"class":488},"\"请输入新成绩:\"",[478,153064,720],{"class":714},[478,153066,153067],{"class":480,"line":33037},[478,153068,2966],{"emptyLinePlaceholder":640},[478,153070,153071,153074,153076,153078,153080],{"class":480,"line":33048},[478,153072,153073],{"class":714},"    student[",[478,153075,63059],{"class":488},[478,153077,5009],{"class":714},[478,153079,759],{"class":710},[478,153081,150175],{"class":714},[478,153083,153084,153086,153088,153090,153092],{"class":480,"line":33054},[478,153085,153073],{"class":714},[478,153087,69504],{"class":488},[478,153089,5009],{"class":714},[478,153091,759],{"class":710},[478,153093,150187],{"class":714},[478,153095,153096,153098,153100,153102,153104],{"class":480,"line":33074},[478,153097,153073],{"class":714},[478,153099,151852],{"class":488},[478,153101,5009],{"class":714},[478,153103,759],{"class":710},[478,153105,2147],{"class":714},[478,153107,153108],{"class":480,"line":33080},[478,153109,2966],{"emptyLinePlaceholder":640},[478,153111,153112],{"class":480,"line":33091},[478,153113,152841],{"class":714},[478,153115,153116,153118,153120,153123],{"class":480,"line":33097},[478,153117,31679],{"class":495},[478,153119,263],{"class":714},[478,153121,153122],{"class":488},"\"修改成功\"",[478,153124,720],{"class":714},[478,153126,153127],{"class":480,"line":33103},[478,153128,2966],{"emptyLinePlaceholder":640},[478,153130,153131],{"class":480,"line":33109},[478,153132,2966],{"emptyLinePlaceholder":640},[478,153134,153135,153137,153140],{"class":480,"line":33115},[478,153136,32327],{"class":710},[478,153138,153139],{"class":484}," query_student",[478,153141,152341],{"class":714},[478,153143,153144,153146,153148,153150,153152,153155],{"class":480,"line":33121},[478,153145,152703],{"class":714},[478,153147,759],{"class":710},[478,153149,60985],{"class":495},[478,153151,263],{"class":714},[478,153153,153154],{"class":488},"\"请输入要查询的学号:\"",[478,153156,720],{"class":714},[478,153158,153159,153161,153163],{"class":480,"line":33127},[478,153160,152889],{"class":714},[478,153162,759],{"class":710},[478,153164,152894],{"class":714},[478,153166,153167],{"class":480,"line":33133},[478,153168,2966],{"emptyLinePlaceholder":640},[478,153170,153171,153173,153175,153177,153179],{"class":480,"line":33153},[478,153172,3667],{"class":710},[478,153174,152517],{"class":714},[478,153176,39307],{"class":710},[478,153178,39313],{"class":495},[478,153180,4305],{"class":714},[478,153182,153183,153185,153187,153189],{"class":480,"line":33159},[478,153184,32831],{"class":495},[478,153186,263],{"class":714},[478,153188,152919],{"class":488},[478,153190,720],{"class":714},[478,153192,153193],{"class":480,"line":33175},[478,153194,152741],{"class":710},[478,153196,153197],{"class":480,"line":33181},[478,153198,2966],{"emptyLinePlaceholder":640},[478,153200,153201],{"class":480,"line":33195},[478,153202,153203],{"class":714},"    print_student(student)\n",[478,153205,153206],{"class":480,"line":33201},[478,153207,2966],{"emptyLinePlaceholder":640},[478,153209,153210],{"class":480,"line":33216},[478,153211,2966],{"emptyLinePlaceholder":640},[478,153213,153214,153216,153219],{"class":480,"line":33222},[478,153215,32327],{"class":710},[478,153217,153218],{"class":484}," print_student",[478,153220,153221],{"class":714},"(student):\n",[478,153223,153224,153226],{"class":480,"line":33231},[478,153225,31679],{"class":495},[478,153227,151819],{"class":714},[478,153229,153230,153233,153235,153237,153240,153243,153245,153248],{"class":480,"line":33237},[478,153231,153232],{"class":710},"        f",[478,153234,952],{"class":488},[478,153236,1591],{"class":495},[478,153238,153239],{"class":714},"student[",[478,153241,153242],{"class":488},"'student_id'",[478,153244,1635],{"class":714},[478,153246,153247],{"class":495},"}\\t",[478,153249,25513],{"class":488},[478,153251,153252,153254,153256,153258,153260,153263,153265,153267],{"class":480,"line":33246},[478,153253,153232],{"class":710},[478,153255,952],{"class":488},[478,153257,1591],{"class":495},[478,153259,153239],{"class":714},[478,153261,153262],{"class":488},"'name'",[478,153264,1635],{"class":714},[478,153266,153247],{"class":495},[478,153268,25513],{"class":488},[478,153270,153271,153273,153275,153277,153279,153282,153284,153286],{"class":480,"line":33252},[478,153272,153232],{"class":710},[478,153274,952],{"class":488},[478,153276,1591],{"class":495},[478,153278,153239],{"class":714},[478,153280,153281],{"class":488},"'age'",[478,153283,1635],{"class":714},[478,153285,153247],{"class":495},[478,153287,25513],{"class":488},[478,153289,153290,153292,153294,153296,153298,153301,153303,153305],{"class":480,"line":33258},[478,153291,153232],{"class":710},[478,153293,952],{"class":488},[478,153295,1591],{"class":495},[478,153297,153239],{"class":714},[478,153299,153300],{"class":488},"'score'",[478,153302,1635],{"class":714},[478,153304,1641],{"class":495},[478,153306,25513],{"class":488},[478,153308,153309],{"class":480,"line":33267},[478,153310,153311],{"class":714},"    )\n",[478,153313,153314],{"class":480,"line":33273},[478,153315,2966],{"emptyLinePlaceholder":640},[478,153317,153318],{"class":480,"line":33284},[478,153319,2966],{"emptyLinePlaceholder":640},[478,153321,153322,153324,153327],{"class":480,"line":33290},[478,153323,32327],{"class":710},[478,153325,153326],{"class":484}," show_all_students",[478,153328,152341],{"class":714},[478,153330,153331,153333,153335],{"class":480,"line":33309},[478,153332,3667],{"class":710},[478,153334,39310],{"class":710},[478,153336,152522],{"class":714},[478,153338,153339,153341,153343,153346],{"class":480,"line":33315},[478,153340,32831],{"class":495},[478,153342,263],{"class":714},[478,153344,153345],{"class":488},"\"暂无学生\"",[478,153347,720],{"class":714},[478,153349,153350],{"class":480,"line":33326},[478,153351,152741],{"class":710},[478,153353,153354],{"class":480,"line":33332},[478,153355,2966],{"emptyLinePlaceholder":640},[478,153357,153358,153360,153362,153365,153367,153370,153372,153375,153377,153380],{"class":480,"line":33352},[478,153359,31679],{"class":495},[478,153361,263],{"class":714},[478,153363,153364],{"class":488},"\"学号",[478,153366,1799],{"class":495},[478,153368,153369],{"class":488},"姓名",[478,153371,1799],{"class":495},[478,153373,153374],{"class":488},"年龄",[478,153376,1799],{"class":495},[478,153378,153379],{"class":488},"成绩\"",[478,153381,720],{"class":714},[478,153383,153384,153386,153388,153390],{"class":480,"line":33368},[478,153385,3767],{"class":710},[478,153387,152517],{"class":714},[478,153389,26423],{"class":710},[478,153391,152522],{"class":714},[478,153393,153394],{"class":480,"line":33374},[478,153395,153396],{"class":714},"        print_student(student)\n",[478,153398,153399],{"class":480,"line":33388},[478,153400,2966],{"emptyLinePlaceholder":640},[478,153402,153403],{"class":480,"line":33394},[478,153404,2966],{"emptyLinePlaceholder":640},[478,153406,153407,153409,153411],{"class":480,"line":33400},[478,153408,32327],{"class":710},[478,153410,2539],{"class":484},[478,153412,32333],{"class":714},[478,153414,153415,153418,153420],{"class":480,"line":33411},[478,153416,153417],{"class":714},"    students ",[478,153419,759],{"class":710},[478,153421,153422],{"class":714}," load_students()\n",[478,153424,153425],{"class":480,"line":33417},[478,153426,2966],{"emptyLinePlaceholder":640},[478,153428,153429,153431,153433],{"class":480,"line":33423},[478,153430,2817],{"class":710},[478,153432,95672],{"class":495},[478,153434,4305],{"class":714},[478,153436,153437],{"class":480,"line":33433},[478,153438,153439],{"class":714},"        show_menu()\n",[478,153441,153442,153445,153447,153449,153451,153454],{"class":480,"line":33439},[478,153443,153444],{"class":714},"        choice ",[478,153446,759],{"class":710},[478,153448,60985],{"class":495},[478,153450,263],{"class":714},[478,153452,153453],{"class":488},"\"请输入操作:\"",[478,153455,720],{"class":714},[478,153457,153458],{"class":480,"line":33450},[478,153459,2966],{"emptyLinePlaceholder":640},[478,153461,153462,153464,153467,153469,153472],{"class":480,"line":33456},[478,153463,3063],{"class":710},[478,153465,153466],{"class":714}," choice ",[478,153468,3515],{"class":710},[478,153470,153471],{"class":488}," \"1\"",[478,153473,4305],{"class":714},[478,153475,153476],{"class":480,"line":33466},[478,153477,153478],{"class":714},"            add_student(students)\n",[478,153480,153481,153484,153486,153488,153491],{"class":480,"line":33471},[478,153482,153483],{"class":710},"        elif",[478,153485,153466],{"class":714},[478,153487,3515],{"class":710},[478,153489,153490],{"class":488}," \"2\"",[478,153492,4305],{"class":714},[478,153494,153495],{"class":480,"line":33477},[478,153496,153497],{"class":714},"            delete_student(students)\n",[478,153499,153500,153502,153504,153506,153509],{"class":480,"line":33526},[478,153501,153483],{"class":710},[478,153503,153466],{"class":714},[478,153505,3515],{"class":710},[478,153507,153508],{"class":488}," \"3\"",[478,153510,4305],{"class":714},[478,153512,153513],{"class":480,"line":33573},[478,153514,153515],{"class":714},"            update_student(students)\n",[478,153517,153518,153520,153522,153524,153527],{"class":480,"line":33578},[478,153519,153483],{"class":710},[478,153521,153466],{"class":714},[478,153523,3515],{"class":710},[478,153525,153526],{"class":488}," \"4\"",[478,153528,4305],{"class":714},[478,153530,153531],{"class":480,"line":33584},[478,153532,153533],{"class":714},"            query_student(students)\n",[478,153535,153536,153538,153540,153542,153545],{"class":480,"line":33603},[478,153537,153483],{"class":710},[478,153539,153466],{"class":714},[478,153541,3515],{"class":710},[478,153543,153544],{"class":488}," \"5\"",[478,153546,4305],{"class":714},[478,153548,153549],{"class":480,"line":33609},[478,153550,153551],{"class":714},"            show_all_students(students)\n",[478,153553,153554,153556,153558,153560,153563],{"class":480,"line":33629},[478,153555,153483],{"class":710},[478,153557,153466],{"class":714},[478,153559,3515],{"class":710},[478,153561,153562],{"class":488}," \"0\"",[478,153564,4305],{"class":714},[478,153566,153567,153569,153571,153574],{"class":480,"line":33635},[478,153568,35030],{"class":495},[478,153570,263],{"class":714},[478,153572,153573],{"class":488},"\"退出系统\"",[478,153575,720],{"class":714},[478,153577,153578],{"class":480,"line":33641},[478,153579,115478],{"class":710},[478,153581,153582,153584],{"class":480,"line":33651},[478,153583,3100],{"class":710},[478,153585,4305],{"class":714},[478,153587,153588,153590,153592,153595],{"class":480,"line":33656},[478,153589,35030],{"class":495},[478,153591,263],{"class":714},[478,153593,153594],{"class":488},"\"输入错误\"",[478,153596,720],{"class":714},[478,153598,153599],{"class":480,"line":33662},[478,153600,2966],{"emptyLinePlaceholder":640},[478,153602,153603],{"class":480,"line":33678},[478,153604,2966],{"emptyLinePlaceholder":640},[478,153606,153607,153609,153611,153613,153615],{"class":480,"line":33723},[478,153608,2099],{"class":710},[478,153610,31600],{"class":495},[478,153612,101939],{"class":710},[478,153614,101942],{"class":488},[478,153616,4305],{"class":714},[478,153618,153619],{"class":480,"line":33729},[478,153620,101949],{"class":714},[19,153622,153623],{},"这个项目串联了：",[29,153625,153626,153629,153632,153635,153638,153640],{},[32,153627,153628],{},"菜单循环。",[32,153630,153631],{},"函数封装。",[32,153633,153634],{},"列表字典。",[32,153636,153637],{},"JSON 读写。",[32,153639,152107],{},[32,153641,153642,28765],{},[475,153643,153644],{},"if __name__ == \"__main__\"",[14,153646,153648],{"id":153647},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153650,153651],{},"可以进一步拆成两个类：",[29,153653,153654,153659],{},[32,153655,153656,153658],{},[475,153657,149948],{},"：表示单个学生。",[32,153660,153661,153663],{},[475,153662,151974],{},"：负责学生增删改查和文件保存。",[19,153665,153666],{},"示意代码：",[469,153668,153670],{"className":30758,"code":153669,"language":30760,"meta":54,"style":54},"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",[475,153671,153672,153682,153686,153690,153694,153702,153709,153715,153721,153727,153731,153739,153745,153755,153765,153775,153785,153789,153793,153799,153807,153815,153823,153831,153839,153847],{"__ignoreMap":54},[478,153673,153674,153676,153678,153680],{"class":480,"line":481},[478,153675,31117],{"class":710},[478,153677,151532],{"class":714},[478,153679,30772],{"class":710},[478,153681,151537],{"class":714},[478,153683,153684],{"class":480,"line":565},[478,153685,2966],{"emptyLinePlaceholder":640},[478,153687,153688],{"class":480,"line":579},[478,153689,2966],{"emptyLinePlaceholder":640},[478,153691,153692],{"class":480,"line":593},[478,153693,151550],{"class":484},[478,153695,153696,153698,153700],{"class":480,"line":1769},[478,153697,15259],{"class":710},[478,153699,8464],{"class":484},[478,153701,4305],{"class":714},[478,153703,153704,153707],{"class":480,"line":1783},[478,153705,153706],{"class":714},"    student_id: ",[478,153708,151566],{"class":495},[478,153710,153711,153713],{"class":480,"line":1789},[478,153712,151563],{"class":714},[478,153714,151566],{"class":495},[478,153716,153717,153719],{"class":480,"line":1880},[478,153718,151571],{"class":714},[478,153720,151574],{"class":495},[478,153722,153723,153725],{"class":480,"line":1886},[478,153724,151579],{"class":714},[478,153726,151582],{"class":495},[478,153728,153729],{"class":480,"line":1898},[478,153730,2966],{"emptyLinePlaceholder":640},[478,153732,153733,153735,153737],{"class":480,"line":2180},[478,153734,31181],{"class":710},[478,153736,151730],{"class":484},[478,153738,31187],{"class":714},[478,153740,153741,153743],{"class":480,"line":2185},[478,153742,15317],{"class":710},[478,153744,16137],{"class":714},[478,153746,153747,153749,153751,153753],{"class":480,"line":2191},[478,153748,151743],{"class":488},[478,153750,51817],{"class":714},[478,153752,31203],{"class":495},[478,153754,151750],{"class":714},[478,153756,153757,153759,153761,153763],{"class":480,"line":2196},[478,153758,151755],{"class":488},[478,153760,51817],{"class":714},[478,153762,31203],{"class":495},[478,153764,151762],{"class":714},[478,153766,153767,153769,153771,153773],{"class":480,"line":2210},[478,153768,151767],{"class":488},[478,153770,51817],{"class":714},[478,153772,31203],{"class":495},[478,153774,151774],{"class":714},[478,153776,153777,153779,153781,153783],{"class":480,"line":2215},[478,153778,151779],{"class":488},[478,153780,51817],{"class":714},[478,153782,31203],{"class":495},[478,153784,151786],{"class":714},[478,153786,153787],{"class":480,"line":2221},[478,153788,3095],{"class":714},[478,153790,153791],{"class":480,"line":2241},[478,153792,2966],{"emptyLinePlaceholder":640},[478,153794,153795,153797],{"class":480,"line":2246},[478,153796,151394],{"class":484},[478,153798,151397],{"class":495},[478,153800,153801,153803,153805],{"class":480,"line":2260},[478,153802,31181],{"class":710},[478,153804,151807],{"class":484},[478,153806,151810],{"class":714},[478,153808,153809,153811,153813],{"class":480,"line":2265},[478,153810,15317],{"class":710},[478,153812,151414],{"class":495},[478,153814,151819],{"class":714},[478,153816,153817,153819,153821],{"class":480,"line":2294},[478,153818,151824],{"class":714},[478,153820,151827],{"class":488},[478,153822,88216],{"class":714},[478,153824,153825,153827,153829],{"class":480,"line":2299},[478,153826,151824],{"class":714},[478,153828,63059],{"class":488},[478,153830,88216],{"class":714},[478,153832,153833,153835,153837],{"class":480,"line":2316},[478,153834,151824],{"class":714},[478,153836,69504],{"class":488},[478,153838,88216],{"class":714},[478,153840,153841,153843,153845],{"class":480,"line":2321},[478,153842,151824],{"class":714},[478,153844,151852],{"class":488},[478,153846,88216],{"class":714},[478,153848,153849],{"class":480,"line":2326},[478,153850,38506],{"class":714},[19,153852,153853],{},"管理器示意：",[469,153855,153857],{"className":30758,"code":153856,"language":30760,"meta":54,"style":54},"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",[475,153858,153859,153868,153876,153887,153891,153901,153914,153925,153932,153938,153942,153951,153960,153966,153973],{"__ignoreMap":54},[478,153860,153861,153863,153866],{"class":480,"line":481},[478,153862,15259],{"class":710},[478,153864,153865],{"class":484}," StudentManager",[478,153867,4305],{"class":714},[478,153869,153870,153872,153874],{"class":480,"line":565},[478,153871,31181],{"class":710},[478,153873,31184],{"class":495},[478,153875,31187],{"class":714},[478,153877,153878,153880,153883,153885],{"class":480,"line":579},[478,153879,31225],{"class":495},[478,153881,153882],{"class":714},".students ",[478,153884,759],{"class":710},[478,153886,52218],{"class":714},[478,153888,153889],{"class":480,"line":593},[478,153890,2966],{"emptyLinePlaceholder":640},[478,153892,153893,153895,153898],{"class":480,"line":1769},[478,153894,31181],{"class":710},[478,153896,153897],{"class":484}," find_by_id",[478,153899,153900],{"class":714},"(self, student_id):\n",[478,153902,153903,153905,153907,153909,153911],{"class":480,"line":1783},[478,153904,3969],{"class":710},[478,153906,152517],{"class":714},[478,153908,26423],{"class":710},[478,153910,39253],{"class":495},[478,153912,153913],{"class":714},".students:\n",[478,153915,153916,153918,153921,153923],{"class":480,"line":1789},[478,153917,5208],{"class":710},[478,153919,153920],{"class":714}," student.student_id ",[478,153922,3515],{"class":710},[478,153924,152538],{"class":714},[478,153926,153927,153930],{"class":480,"line":1880},[478,153928,153929],{"class":710},"                return",[478,153931,152545],{"class":714},[478,153933,153934,153936],{"class":480,"line":1886},[478,153935,15317],{"class":710},[478,153937,152552],{"class":495},[478,153939,153940],{"class":480,"line":1898},[478,153941,2966],{"emptyLinePlaceholder":640},[478,153943,153944,153946,153948],{"class":480,"line":2180},[478,153945,31181],{"class":710},[478,153947,5775],{"class":484},[478,153949,153950],{"class":714},"(self, student):\n",[478,153952,153953,153955,153957],{"class":480,"line":2185},[478,153954,3063],{"class":710},[478,153956,39253],{"class":495},[478,153958,153959],{"class":714},".find_by_id(student.student_id):\n",[478,153961,153962,153964],{"class":480,"line":2191},[478,153963,16297],{"class":710},[478,153965,126187],{"class":495},[478,153967,153968,153970],{"class":480,"line":2196},[478,153969,31225],{"class":495},[478,153971,153972],{"class":714},".students.append(student)\n",[478,153974,153975,153977],{"class":480,"line":2210},[478,153976,15317],{"class":710},[478,153978,153979],{"class":495}," True\n",[19,153981,153982],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153984,153986],{"id":153985},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[129,153988,153990],{"id":153989},"_1251-数据结构","12.5.1 数据结构",[469,153992,153994],{"className":30758,"code":153993,"language":30760,"meta":54,"style":54},"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",[475,153995,153996,154004,154035,154065,154094,154123],{"__ignoreMap":54},[478,153997,153998,154000,154002],{"class":480,"line":481},[478,153999,148845],{"class":714},[478,154001,759],{"class":710},[478,154003,55827],{"class":714},[478,154005,154006,154008,154010,154012,154014,154016,154019,154021,154024,154026,154028,154030,154033],{"class":480,"line":565},[478,154007,148765],{"class":714},[478,154009,148377],{"class":488},[478,154011,51817],{"class":714},[478,154013,148988],{"class":488},[478,154015,13001],{"class":714},[478,154017,154018],{"class":488},"\"category\"",[478,154020,51817],{"class":714},[478,154022,154023],{"class":488},"\"手机\"",[478,154025,13001],{"class":714},[478,154027,84464],{"class":488},[478,154029,51817],{"class":714},[478,154031,154032],{"class":495},"12000",[478,154034,5496],{"class":714},[478,154036,154037,154039,154041,154043,154045,154047,154049,154051,154054,154056,154058,154060,154063],{"class":480,"line":579},[478,154038,148765],{"class":714},[478,154040,148377],{"class":488},[478,154042,51817],{"class":714},[478,154044,148988],{"class":488},[478,154046,13001],{"class":714},[478,154048,154018],{"class":488},[478,154050,51817],{"class":714},[478,154052,154053],{"class":488},"\"电脑\"",[478,154055,13001],{"class":714},[478,154057,84464],{"class":488},[478,154059,51817],{"class":714},[478,154061,154062],{"class":495},"18000",[478,154064,5496],{"class":714},[478,154066,154067,154069,154071,154073,154075,154077,154079,154081,154083,154085,154087,154089,154092],{"class":480,"line":593},[478,154068,148765],{"class":714},[478,154070,148377],{"class":488},[478,154072,51817],{"class":714},[478,154074,149009],{"class":488},[478,154076,13001],{"class":714},[478,154078,154018],{"class":488},[478,154080,51817],{"class":714},[478,154082,154023],{"class":488},[478,154084,13001],{"class":714},[478,154086,84464],{"class":488},[478,154088,51817],{"class":714},[478,154090,154091],{"class":495},"15000",[478,154093,5496],{"class":714},[478,154095,154096,154098,154100,154102,154104,154106,154108,154110,154112,154114,154116,154118,154121],{"class":480,"line":1769},[478,154097,148765],{"class":714},[478,154099,148377],{"class":488},[478,154101,51817],{"class":714},[478,154103,149009],{"class":488},[478,154105,13001],{"class":714},[478,154107,154018],{"class":488},[478,154109,51817],{"class":714},[478,154111,154053],{"class":488},[478,154113,13001],{"class":714},[478,154115,84464],{"class":488},[478,154117,51817],{"class":714},[478,154119,154120],{"class":495},"16000",[478,154122,5496],{"class":714},[478,154124,154125],{"class":480,"line":1783},[478,154126,33626],{"class":714},[129,154128,154130],{"id":154129},"_1252-按日期统计","12.5.2 按日期统计",[469,154132,154134],{"className":30758,"code":154133,"language":30760,"meta":54,"style":54},"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",[475,154135,154136,154145,154149,154160,154174,154187,154206,154210],{"__ignoreMap":54},[478,154137,154138,154141,154143],{"class":480,"line":481},[478,154139,154140],{"class":714},"daily_total ",[478,154142,759],{"class":710},[478,154144,88248],{"class":714},[478,154146,154147],{"class":480,"line":565},[478,154148,2966],{"emptyLinePlaceholder":640},[478,154150,154151,154153,154155,154157],{"class":480,"line":579},[478,154152,3591],{"class":710},[478,154154,148589],{"class":714},[478,154156,26423],{"class":710},[478,154158,154159],{"class":714}," sales:\n",[478,154161,154162,154165,154167,154170,154172],{"class":480,"line":593},[478,154163,154164],{"class":714},"    date ",[478,154166,759],{"class":710},[478,154168,154169],{"class":714}," item[",[478,154171,148377],{"class":488},[478,154173,33626],{"class":714},[478,154175,154176,154179,154181,154183,154185],{"class":480,"line":1769},[478,154177,154178],{"class":714},"    amount ",[478,154180,759],{"class":710},[478,154182,154169],{"class":714},[478,154184,84464],{"class":488},[478,154186,33626],{"class":714},[478,154188,154189,154192,154194,154197,154199,154201,154203],{"class":480,"line":1783},[478,154190,154191],{"class":714},"    daily_total[date] ",[478,154193,759],{"class":710},[478,154195,154196],{"class":714}," daily_total.get(date, ",[478,154198,895],{"class":495},[478,154200,14280],{"class":714},[478,154202,1181],{"class":710},[478,154204,154205],{"class":714}," amount\n",[478,154207,154208],{"class":480,"line":1789},[478,154209,2966],{"emptyLinePlaceholder":640},[478,154211,154212,154214],{"class":480,"line":1880},[478,154213,30795],{"class":495},[478,154215,154216],{"class":714},"(daily_total)\n",[129,154218,154220],{"id":154219},"_1253-按类别统计","12.5.3 按类别统计",[469,154222,154224],{"className":30758,"code":154223,"language":30760,"meta":54,"style":54},"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",[475,154225,154226,154235,154239,154249,154262,154274,154292,154296],{"__ignoreMap":54},[478,154227,154228,154231,154233],{"class":480,"line":481},[478,154229,154230],{"class":714},"category_total ",[478,154232,759],{"class":710},[478,154234,88248],{"class":714},[478,154236,154237],{"class":480,"line":565},[478,154238,2966],{"emptyLinePlaceholder":640},[478,154240,154241,154243,154245,154247],{"class":480,"line":579},[478,154242,3591],{"class":710},[478,154244,148589],{"class":714},[478,154246,26423],{"class":710},[478,154248,154159],{"class":714},[478,154250,154251,154254,154256,154258,154260],{"class":480,"line":593},[478,154252,154253],{"class":714},"    category ",[478,154255,759],{"class":710},[478,154257,154169],{"class":714},[478,154259,154018],{"class":488},[478,154261,33626],{"class":714},[478,154263,154264,154266,154268,154270,154272],{"class":480,"line":1769},[478,154265,154178],{"class":714},[478,154267,759],{"class":710},[478,154269,154169],{"class":714},[478,154271,84464],{"class":488},[478,154273,33626],{"class":714},[478,154275,154276,154279,154281,154284,154286,154288,154290],{"class":480,"line":1783},[478,154277,154278],{"class":714},"    category_total[category] ",[478,154280,759],{"class":710},[478,154282,154283],{"class":714}," category_total.get(category, ",[478,154285,895],{"class":495},[478,154287,14280],{"class":714},[478,154289,1181],{"class":710},[478,154291,154205],{"class":714},[478,154293,154294],{"class":480,"line":1789},[478,154295,2966],{"emptyLinePlaceholder":640},[478,154297,154298,154300],{"class":480,"line":1880},[478,154299,30795],{"class":495},[478,154301,154302],{"class":714},"(category_total)\n",[129,154304,154306],{"id":154305},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[469,154308,154310],{"className":30758,"code":154309,"language":30760,"meta":54,"style":54},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[475,154311,154312,154337],{"__ignoreMap":54},[478,154313,154314,154317,154319,154321,154324,154327,154330,154333,154335],{"class":480,"line":481},[478,154315,154316],{"class":714},"top_date, top_amount ",[478,154318,759],{"class":710},[478,154320,6517],{"class":495},[478,154322,154323],{"class":714},"(daily_total.items(), ",[478,154325,154326],{"class":5782},"key",[478,154328,154329],{"class":710},"=lambda",[478,154331,154332],{"class":714}," item: item[",[478,154334,193],{"class":495},[478,154336,5223],{"class":714},[478,154338,154339,154341],{"class":480,"line":565},[478,154340,30795],{"class":495},[478,154342,154343],{"class":714},"(top_date, top_amount)\n",[14,154345,154347],{"id":154346},"_126-绘制柱状图","12.6 绘制柱状图",[469,154349,154351],{"className":30758,"code":154350,"language":30760,"meta":54,"style":54},"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",[475,154352,154353,154367,154378,154382,154390,154402,154414,154425,154429,154433,154443,154454,154468,154473,154490,154507,154523,154527],{"__ignoreMap":54},[478,154354,154355,154357,154359,154361,154363,154365],{"class":480,"line":481},[478,154356,31117],{"class":710},[478,154358,147759],{"class":714},[478,154360,30772],{"class":710},[478,154362,147764],{"class":714},[478,154364,31763],{"class":710},[478,154366,147769],{"class":714},[478,154368,154369,154371,154373,154375],{"class":480,"line":565},[478,154370,31117],{"class":710},[478,154372,147618],{"class":714},[478,154374,30772],{"class":710},[478,154376,154377],{"class":714}," Bar\n",[478,154379,154380],{"class":480,"line":579},[478,154381,2966],{"emptyLinePlaceholder":640},[478,154383,154384,154386,154388],{"class":480,"line":593},[478,154385,154230],{"class":714},[478,154387,759],{"class":710},[478,154389,16137],{"class":714},[478,154391,154392,154395,154397,154400],{"class":480,"line":1769},[478,154393,154394],{"class":488},"    \"手机\"",[478,154396,51817],{"class":714},[478,154398,154399],{"class":495},"27000",[478,154401,31846],{"class":714},[478,154403,154404,154407,154409,154412],{"class":480,"line":1783},[478,154405,154406],{"class":488},"    \"电脑\"",[478,154408,51817],{"class":714},[478,154410,154411],{"class":495},"34000",[478,154413,31846],{"class":714},[478,154415,154416,154419,154421,154423],{"class":480,"line":1789},[478,154417,154418],{"class":488},"    \"耳机\"",[478,154420,51817],{"class":714},[478,154422,124779],{"class":495},[478,154424,31846],{"class":714},[478,154426,154427],{"class":480,"line":1880},[478,154428,2133],{"class":714},[478,154430,154431],{"class":480,"line":1886},[478,154432,2966],{"emptyLinePlaceholder":640},[478,154434,154435,154438,154440],{"class":480,"line":1898},[478,154436,154437],{"class":714},"bar ",[478,154439,759],{"class":710},[478,154441,154442],{"class":714}," Bar()\n",[478,154444,154445,154448,154451],{"class":480,"line":2180},[478,154446,154447],{"class":714},"bar.add_xaxis(",[478,154449,154450],{"class":495},"list",[478,154452,154453],{"class":714},"(category_total.keys()))\n",[478,154455,154456,154459,154461,154463,154465],{"class":480,"line":2185},[478,154457,154458],{"class":714},"bar.add_yaxis(",[478,154460,147675],{"class":488},[478,154462,13001],{"class":714},[478,154464,154450],{"class":495},[478,154466,154467],{"class":714},"(category_total.values()))\n",[478,154469,154470],{"class":480,"line":2191},[478,154471,154472],{"class":714},"bar.set_global_opts(\n",[478,154474,154475,154477,154479,154481,154483,154485,154488],{"class":480,"line":2196},[478,154476,147853],{"class":5782},[478,154478,759],{"class":710},[478,154480,147858],{"class":714},[478,154482,51787],{"class":5782},[478,154484,759],{"class":710},[478,154486,154487],{"class":488},"\"品类销售额\"",[478,154489,38427],{"class":714},[478,154491,154492,154494,154496,154498,154500,154502,154505],{"class":480,"line":2210},[478,154493,147872],{"class":5782},[478,154495,759],{"class":710},[478,154497,147877],{"class":714},[478,154499,80190],{"class":5782},[478,154501,759],{"class":710},[478,154503,154504],{"class":488},"\"品类\"",[478,154506,38427],{"class":714},[478,154508,154509,154511,154513,154515,154517,154519,154521],{"class":480,"line":2215},[478,154510,147891],{"class":5782},[478,154512,759],{"class":710},[478,154514,147877],{"class":714},[478,154516,80190],{"class":5782},[478,154518,759],{"class":710},[478,154520,147675],{"class":488},[478,154522,38427],{"class":714},[478,154524,154525],{"class":480,"line":2221},[478,154526,720],{"class":714},[478,154528,154529,154532,154535],{"class":480,"line":2241},[478,154530,154531],{"class":714},"bar.render(",[478,154533,154534],{"class":488},"\"category_sales.html\"",[478,154536,720],{"class":714},[14,154538,154540],{"id":154539},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154542,154543],{},"时间线适合展示不同日期、月份、年份的数据变化。",[469,154545,154547],{"className":30758,"code":154546,"language":30760,"meta":54,"style":54},"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",[475,154548,154549,154563,154574,154578,154586,154610,154633,154658,154662,154666,154676,154680,154691,154700,154710,154724,154755,154760,154764],{"__ignoreMap":54},[478,154550,154551,154553,154555,154557,154559,154561],{"class":480,"line":481},[478,154552,31117],{"class":710},[478,154554,147759],{"class":714},[478,154556,30772],{"class":710},[478,154558,147764],{"class":714},[478,154560,31763],{"class":710},[478,154562,147769],{"class":714},[478,154564,154565,154567,154569,154571],{"class":480,"line":565},[478,154566,31117],{"class":710},[478,154568,147618],{"class":714},[478,154570,30772],{"class":710},[478,154572,154573],{"class":714}," Bar, Timeline\n",[478,154575,154576],{"class":480,"line":579},[478,154577,2966],{"emptyLinePlaceholder":640},[478,154579,154580,154582,154584],{"class":480,"line":593},[478,154581,102038],{"class":714},[478,154583,759],{"class":710},[478,154585,16137],{"class":714},[478,154587,154588,154591,154594,154596,154598,154600,154602,154604,154606,154608],{"class":480,"line":1769},[478,154589,154590],{"class":488},"    \"2024-10-01\"",[478,154592,154593],{"class":714},": {",[478,154595,154023],{"class":488},[478,154597,51817],{"class":714},[478,154599,154032],{"class":495},[478,154601,13001],{"class":714},[478,154603,154053],{"class":488},[478,154605,51817],{"class":714},[478,154607,154062],{"class":495},[478,154609,5496],{"class":714},[478,154611,154612,154615,154617,154619,154621,154623,154625,154627,154629,154631],{"class":480,"line":1783},[478,154613,154614],{"class":488},"    \"2024-10-02\"",[478,154616,154593],{"class":714},[478,154618,154023],{"class":488},[478,154620,51817],{"class":714},[478,154622,154091],{"class":495},[478,154624,13001],{"class":714},[478,154626,154053],{"class":488},[478,154628,51817],{"class":714},[478,154630,154120],{"class":495},[478,154632,5496],{"class":714},[478,154634,154635,154638,154640,154642,154644,154647,154649,154651,154653,154656],{"class":480,"line":1789},[478,154636,154637],{"class":488},"    \"2024-10-03\"",[478,154639,154593],{"class":714},[478,154641,154023],{"class":488},[478,154643,51817],{"class":714},[478,154645,154646],{"class":495},"17000",[478,154648,13001],{"class":714},[478,154650,154053],{"class":488},[478,154652,51817],{"class":714},[478,154654,154655],{"class":495},"19000",[478,154657,5496],{"class":714},[478,154659,154660],{"class":480,"line":1880},[478,154661,2133],{"class":714},[478,154663,154664],{"class":480,"line":1886},[478,154665,2966],{"emptyLinePlaceholder":640},[478,154667,154668,154671,154673],{"class":480,"line":1898},[478,154669,154670],{"class":714},"timeline ",[478,154672,759],{"class":710},[478,154674,154675],{"class":714}," Timeline()\n",[478,154677,154678],{"class":480,"line":2180},[478,154679,2966],{"emptyLinePlaceholder":640},[478,154681,154682,154684,154687,154689],{"class":480,"line":2185},[478,154683,3591],{"class":710},[478,154685,154686],{"class":714}," date, category_data ",[478,154688,26423],{"class":710},[478,154690,149528],{"class":714},[478,154692,154693,154696,154698],{"class":480,"line":2191},[478,154694,154695],{"class":714},"    bar ",[478,154697,759],{"class":710},[478,154699,154442],{"class":714},[478,154701,154702,154705,154707],{"class":480,"line":2196},[478,154703,154704],{"class":714},"    bar.add_xaxis(",[478,154706,154450],{"class":495},[478,154708,154709],{"class":714},"(category_data.keys()))\n",[478,154711,154712,154715,154717,154719,154721],{"class":480,"line":2210},[478,154713,154714],{"class":714},"    bar.add_yaxis(",[478,154716,147675],{"class":488},[478,154718,13001],{"class":714},[478,154720,154450],{"class":495},[478,154722,154723],{"class":714},"(category_data.values()))\n",[478,154725,154726,154729,154732,154734,154736,154738,154740,154742,154744,154746,154748,154750,154753],{"class":480,"line":2215},[478,154727,154728],{"class":714},"    bar.set_global_opts(",[478,154730,154731],{"class":5782},"title_opts",[478,154733,759],{"class":710},[478,154735,147858],{"class":714},[478,154737,51787],{"class":5782},[478,154739,759],{"class":710},[478,154741,218],{"class":710},[478,154743,952],{"class":488},[478,154745,1591],{"class":495},[478,154747,74306],{"class":714},[478,154749,1641],{"class":495},[478,154751,154752],{"class":488},"销售额\"",[478,154754,30877],{"class":714},[478,154756,154757],{"class":480,"line":2221},[478,154758,154759],{"class":714},"    timeline.add(bar, date)\n",[478,154761,154762],{"class":480,"line":2241},[478,154763,2966],{"emptyLinePlaceholder":640},[478,154765,154766,154769,154772],{"class":480,"line":2246},[478,154767,154768],{"class":714},"timeline.render(",[478,154770,154771],{"class":488},"\"timeline_sales.html\"",[478,154773,720],{"class":714},[14,154775,154777],{"id":154776},"_128-绘制地图","12.8 绘制地图",[19,154779,154780],{},"地图适合展示地区数据。",[469,154782,154784],{"className":30758,"code":154783,"language":30760,"meta":54,"style":54},"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",[475,154785,154786,154800,154811,154815,154823,154836,154848,154861,154874,154878,154882,154892,154907,154912,154929,154948,154952],{"__ignoreMap":54},[478,154787,154788,154790,154792,154794,154796,154798],{"class":480,"line":481},[478,154789,31117],{"class":710},[478,154791,147759],{"class":714},[478,154793,30772],{"class":710},[478,154795,147764],{"class":714},[478,154797,31763],{"class":710},[478,154799,147769],{"class":714},[478,154801,154802,154804,154806,154808],{"class":480,"line":565},[478,154803,31117],{"class":710},[478,154805,147618],{"class":714},[478,154807,30772],{"class":710},[478,154809,154810],{"class":714}," Map\n",[478,154812,154813],{"class":480,"line":579},[478,154814,2966],{"emptyLinePlaceholder":640},[478,154816,154817,154819,154821],{"class":480,"line":593},[478,154818,102038],{"class":714},[478,154820,759],{"class":710},[478,154822,55827],{"class":714},[478,154824,154825,154828,154830,154832,154834],{"class":480,"line":1769},[478,154826,154827],{"class":714},"    (",[478,154829,69649],{"class":488},[478,154831,13001],{"class":714},[478,154833,1512],{"class":495},[478,154835,38427],{"class":714},[478,154837,154838,154840,154842,154844,154846],{"class":480,"line":1783},[478,154839,154827],{"class":714},[478,154841,69669],{"class":488},[478,154843,13001],{"class":714},[478,154845,147692],{"class":495},[478,154847,38427],{"class":714},[478,154849,154850,154852,154855,154857,154859],{"class":480,"line":1789},[478,154851,154827],{"class":714},[478,154853,154854],{"class":488},"\"广东\"",[478,154856,13001],{"class":714},[478,154858,2289],{"class":495},[478,154860,38427],{"class":714},[478,154862,154863,154865,154868,154870,154872],{"class":480,"line":1880},[478,154864,154827],{"class":714},[478,154866,154867],{"class":488},"\"浙江\"",[478,154869,13001],{"class":714},[478,154871,147697],{"class":495},[478,154873,38427],{"class":714},[478,154875,154876],{"class":480,"line":1886},[478,154877,33626],{"class":714},[478,154879,154880],{"class":480,"line":1898},[478,154881,2966],{"emptyLinePlaceholder":640},[478,154883,154884,154887,154889],{"class":480,"line":2180},[478,154885,154886],{"class":714},"map_chart ",[478,154888,759],{"class":710},[478,154890,154891],{"class":714}," Map()\n",[478,154893,154894,154897,154899,154902,154905],{"class":480,"line":2185},[478,154895,154896],{"class":714},"map_chart.add(",[478,154898,147675],{"class":488},[478,154900,154901],{"class":714},", data, ",[478,154903,154904],{"class":488},"\"china\"",[478,154906,720],{"class":714},[478,154908,154909],{"class":480,"line":2191},[478,154910,154911],{"class":714},"map_chart.set_global_opts(\n",[478,154913,154914,154916,154918,154920,154922,154924,154927],{"class":480,"line":2196},[478,154915,147853],{"class":5782},[478,154917,759],{"class":710},[478,154919,147858],{"class":714},[478,154921,51787],{"class":5782},[478,154923,759],{"class":710},[478,154925,154926],{"class":488},"\"地区销售额\"",[478,154928,38427],{"class":714},[478,154930,154931,154934,154936,154939,154942,154944,154946],{"class":480,"line":2210},[478,154932,154933],{"class":5782},"    visualmap_opts",[478,154935,759],{"class":710},[478,154937,154938],{"class":714},"opts.VisualMapOpts(",[478,154940,154941],{"class":5782},"max_",[478,154943,759],{"class":710},[478,154945,2289],{"class":495},[478,154947,38427],{"class":714},[478,154949,154950],{"class":480,"line":2215},[478,154951,720],{"class":714},[478,154953,154954,154957,154960],{"class":480,"line":2221},[478,154955,154956],{"class":714},"map_chart.render(",[478,154958,154959],{"class":488},"\"map_sales.html\"",[478,154961,720],{"class":714},[19,154963,154964],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154966,154968],{"id":154967},"_129-项目拆分建议","12.9 项目拆分建议",[19,154970,154971],{},"当代码超过一个文件时，可以这样组织：",[469,154973,154976],{"className":154974,"code":154975,"language":5753,"meta":54},[5751],"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",[475,154977,154975],{"__ignoreMap":54},[19,154979,154980],{},"职责：",[29,154982,154983,154989,154995,155001],{},[32,154984,154985,154988],{},[475,154986,154987],{},"main.py","：程序入口。",[32,154990,154991,154994],{},[475,154992,154993],{},"file_utils.py","：读写 JSON。",[32,154996,154997,155000],{},[475,154998,154999],{},"sales_service.py","：统计销售数据。",[32,155002,155003,155006],{},[475,155004,155005],{},"chart_builder.py","：生成图表。",[14,155008,155010],{"id":155009},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155012,155013],{},"语法基础：",[29,155015,155016,155019,155022,155025],{},[32,155017,155018],{},"会写变量、注释、输入输出。",[32,155020,155021],{},"会使用 int、float、str、bool。",[32,155023,155024],{},"会做类型转换。",[32,155026,155027],{},"会使用 f-string 格式化输出。",[19,155029,155030],{},"流程控制：",[29,155032,155033,155039,155045,155053],{},[32,155034,155035,155036,28765],{},"会写 ",[475,155037,155038],{},"if elif else",[32,155040,155035,155041,101398,155043,28765],{},[475,155042,109043],{},[475,155044,3591],{},[32,155046,155047,155048,101398,155050,28765],{},"理解 ",[475,155049,2619],{},[475,155051,155052],{},"continue",[32,155054,155055],{},"能写嵌套循环。",[19,155057,155058],{},"函数：",[29,155060,155061,155064,155067,155070],{},[32,155062,155063],{},"会定义和调用函数。",[32,155065,155066],{},"理解参数和返回值。",[32,155068,155069],{},"知道局部变量和全局变量。",[32,155071,155072],{},"会使用默认参数、关键字参数、不定长参数。",[19,155074,155075],{},"容器：",[29,155077,155078,155081,155084,155087,155090],{},[32,155079,155080],{},"会使用列表增删改查。",[32,155082,155083],{},"会遍历列表、字典。",[32,155085,155086],{},"会使用切片。",[32,155088,155089],{},"会用集合去重。",[32,155091,155092],{},"会处理列表嵌套字典。",[19,155094,155095],{},"文件和模块：",[29,155097,155098,155101,155104,155107,155110],{},[32,155099,155100],{},"会读写文本文件。",[32,155102,155103],{},"会读写 JSON。",[32,155105,155106],{},"会捕获常见异常。",[32,155108,155109],{},"会导入模块和第三方包。",[32,155111,155112],{},"会创建简单包结构。",[19,155114,155115],{},"项目能力：",[29,155117,155118,155121,155124,155127,155130],{},[32,155119,155120],{},"能把代码拆成函数。",[32,155122,155123],{},"能把数据保存到文件。",[32,155125,155126],{},"能处理用户输入错误。",[32,155128,155129],{},"能写一个完整菜单程序。",[32,155131,155132],{},"能用 pyecharts 生成图表。",[14,155134,155136],{"id":155135},"_1211-推荐练习顺序","12.11 推荐练习顺序",[29,155138,155139,155142,155145,155148,155151,155154,155157,155160],{},[32,155140,155141],{},"猜数字游戏。",[32,155143,155144],{},"ATM 菜单程序。",[32,155146,155147],{},"学生成绩统计。",[32,155149,155150],{},"学生管理系统函数版。",[32,155152,155153],{},"学生管理系统文件持久化版。",[32,155155,155156],{},"学生管理系统面向对象版。",[32,155158,155159],{},"销售数据统计。",[32,155161,155162],{},"销售数据可视化。",[14,155164,155166],{"id":155165},"_1212-常见学习误区","12.12 常见学习误区",[29,155168,155169,155172,155175,155178,155181,155184,155187],{},[32,155170,155171],{},"只看视频不敲代码。",[32,155173,155174],{},"一报错就复制错误去搜，不先读报错位置。",[32,155176,155177],{},"变量名随便写，后续自己看不懂。",[32,155179,155180],{},"所有代码都写在一个文件一个函数里。",[32,155182,155183],{},"不保存练习代码，复习时没有材料。",[32,155185,155186],{},"还没掌握列表字典就急着学框架。",[32,155188,155189],{},"不会读官方文档，只依赖教程。",[14,155191,155193],{"id":155192},"_1213-如何读报错","12.13 如何读报错",[19,155195,155196],{},"报错通常从下往上看最后几行。",[19,155198,15700],{},[469,155200,155203],{"className":155201,"code":155202,"language":5753,"meta":54},[5751],"ValueError: invalid literal for int() with base 10: 'abc'\n",[475,155204,155202],{"__ignoreMap":54},[19,155206,24979],{},[29,155208,155209,155215,155225],{},[32,155210,155211,155212,28765],{},"异常类型是 ",[475,155213,155214],{},"ValueError",[32,155216,107725,155217,155220,155221,155224],{},[475,155218,155219],{},"int()"," 无法把 ",[475,155222,155223],{},"'abc'"," 转成整数。",[32,155226,155227],{},"应该检查输入内容或增加异常处理。",[19,155229,155230],{},"再看文件名和行号：",[469,155232,155235],{"className":155233,"code":155234,"language":5753,"meta":54},[5751],"File \"main.py\", line 10, in \u003Cmodule>\n",[475,155236,155234],{"__ignoreMap":54},[19,155238,155239,155240,155242],{},"表示错误发生在 ",[475,155241,154987],{}," 第 10 行。",[14,155244,155246],{"id":155245},"_1214-后续学习方向","12.14 后续学习方向",[19,155248,155249],{},"Python 基础完成后，可以按兴趣选择方向：",[29,155251,155252,155264,155273,155285,155296,155305,155315],{},[32,155253,155254,155255,916,155258,916,155261,28765],{},"自动化办公：",[475,155256,155257],{},"openpyxl",[475,155259,155260],{},"python-docx",[475,155262,155263],{},"pdfplumber",[32,155265,155266,155267,916,155269,916,155271,28765],{},"数据分析：",[475,155268,101006],{},[475,155270,146565],{},[475,155272,146573],{},[32,155274,155275,155276,916,155279,916,155282,28765],{},"Web 后端：",[475,155277,155278],{},"Flask",[475,155280,155281],{},"FastAPI",[475,155283,155284],{},"Django",[32,155286,155287,155288,916,155290,916,155293,28765],{},"爬虫：",[475,155289,146550],{},[475,155291,155292],{},"BeautifulSoup",[475,155294,155295],{},"Scrapy",[32,155297,155298,155299,916,155301,155304],{},"测试开发：",[475,155300,146597],{},[475,155302,155303],{},"selenium","、接口测试。",[32,155306,155307,155308,916,155310,916,155312,28765],{},"人工智能：",[475,155309,101006],{},[475,155311,146565],{},[475,155313,155314],{},"pytorch",[32,155316,155317,155318,916,155320,916,155323,28765],{},"运维脚本：",[475,155319,146166],{},[475,155321,155322],{},"subprocess",[475,155324,155325],{},"paramiko",[19,155327,155328],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155330,155332],{"id":155331},"_1215-结课练习","12.15 结课练习",[29,155334,155335,155338,155341,155344,155347,155350,155353,155356],{},[32,155336,155337],{},"完成函数版学生管理系统。",[32,155339,155340],{},"给学生管理系统增加 JSON 持久化。",[32,155342,155343],{},"给学生管理系统增加异常处理。",[32,155345,155346],{},"把学生管理系统改成面向对象版。",[32,155348,155349],{},"使用 pyecharts 绘制学生成绩柱状图。",[32,155351,155352],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[32,155354,155355],{},"按品类统计销售额并绘制柱状图。",[32,155357,155358],{},"写一份自己的 Python 学习路线图。",[617,155360,155361],{},"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":54,"searchDepth":565,"depth":565,"links":155363},[155364,155365,155368,155369,155370,155376,155377,155378,155379,155380,155381,155382,155383,155384,155385],{"id":152080,"depth":565,"text":152081},{"id":152130,"depth":565,"text":152131,"children":155366},[155367],{"id":152134,"depth":579,"text":152135},{"id":152173,"depth":565,"text":152174},{"id":153647,"depth":565,"text":153648},{"id":153985,"depth":565,"text":153986,"children":155371},[155372,155373,155374,155375],{"id":153989,"depth":579,"text":153990},{"id":154129,"depth":579,"text":154130},{"id":154219,"depth":579,"text":154220},{"id":154305,"depth":579,"text":154306},{"id":154346,"depth":565,"text":154347},{"id":154539,"depth":565,"text":154540},{"id":154776,"depth":565,"text":154777},{"id":154967,"depth":565,"text":154968},{"id":155009,"depth":565,"text":155010},{"id":155135,"depth":565,"text":155136},{"id":155165,"depth":565,"text":155166},{"id":155192,"depth":565,"text":155193},{"id":155245,"depth":565,"text":155246},{"id":155331,"depth":565,"text":155332},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152072,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155392,"title":155393,"body":155394,"description":23942,"extension":638,"meta":157863,"navigation":640,"path":157864,"seo":157865,"stem":157866,"__hash__":157867},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155395,"toc":157838},[155396,155399,155403,155406,155409,155429,155432,155455,155458,155461,155483,155486,155508,155512,155515,155555,155558,155679,155683,155686,155726,155729,155753,155756,155760,155763,155777,155810,155813,155848,155851,155874,155877,155910,155913,155915,155921,155996,155999,156005,156022,156062,156066,156069,156115,156117,156155,156158,156193,156196,156231,156234,156266,156269,156288,156292,156296,156409,156411,156486,156490,156536,156539,156565,156574,156578,156581,156644,156652,156680,156684,156724,156789,156793,156796,156835,156838,156883,156886,156947,156951,156978,156981,157009,157012,157016,157020,157085,157088,157126,157129,157161,157165,157264,157268,157271,157344,157347,157395,157399,157405,157445,157448,157495,157498,157547,157551,157553,157567,157569,157750,157754,157781,157801,157808,157812,157829,157835],[10,155397,155393],{"id":155398},"_2-基础语法变量与字符串",[14,155400,155402],{"id":155401},"_21-注释","2.1 注释",[19,155404,155405],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155407,155408],{},"单行注释：",[469,155410,155412],{"className":30758,"code":155411,"language":30760,"meta":54,"style":54},"# 这是单行注释\nprint(\"hello\")\n",[475,155413,155414,155419],{"__ignoreMap":54},[478,155415,155416],{"class":480,"line":481},[478,155417,155418],{"class":770},"# 这是单行注释\n",[478,155420,155421,155423,155425,155427],{"class":480,"line":565},[478,155422,30795],{"class":495},[478,155424,263],{"class":714},[478,155426,6410],{"class":488},[478,155428,720],{"class":714},[19,155430,155431],{},"多行说明常用三引号：",[469,155433,155435],{"className":30758,"code":155434,"language":30760,"meta":54,"style":54},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[475,155436,155437,155441,155446,155451],{"__ignoreMap":54},[478,155438,155439],{"class":480,"line":481},[478,155440,96078],{"class":488},[478,155442,155443],{"class":480,"line":565},[478,155444,155445],{"class":488},"这是多行说明。\n",[478,155447,155448],{"class":480,"line":579},[478,155449,155450],{"class":488},"常用于文件顶部说明、函数说明等。\n",[478,155452,155453],{"class":480,"line":593},[478,155454,96078],{"class":488},[19,155456,155457],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155459,155460],{},"不好：",[469,155462,155464],{"className":30758,"code":155463,"language":30760,"meta":54,"style":54},"# age 加 1\nage = age + 1\n",[475,155465,155466,155471],{"__ignoreMap":54},[478,155467,155468],{"class":480,"line":481},[478,155469,155470],{"class":770},"# age 加 1\n",[478,155472,155473,155475,155477,155479,155481],{"class":480,"line":565},[478,155474,146926],{"class":714},[478,155476,759],{"class":710},[478,155478,16272],{"class":714},[478,155480,1181],{"class":710},[478,155482,56079],{"class":495},[19,155484,155485],{},"较好：",[469,155487,155489],{"className":30758,"code":155488,"language":30760,"meta":54,"style":54},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[475,155490,155491,155496],{"__ignoreMap":54},[478,155492,155493],{"class":480,"line":481},[478,155494,155495],{"class":770},"# 用户过完生日后，年龄增加一岁\n",[478,155497,155498,155500,155502,155504,155506],{"class":480,"line":565},[478,155499,146926],{"class":714},[478,155501,759],{"class":710},[478,155503,16272],{"class":714},[478,155505,1181],{"class":710},[478,155507,56079],{"class":495},[14,155509,155511],{"id":155510},"_22-字面量","2.2 字面量",[19,155513,155514],{},"字面量就是代码中直接写出来的数据。",[469,155516,155518],{"className":30758,"code":155517,"language":30760,"meta":54,"style":54},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[475,155519,155520,155527,155534,155541,155548],{"__ignoreMap":54},[478,155521,155522,155524],{"class":480,"line":481},[478,155523,1012],{"class":495},[478,155525,155526],{"class":770},"          # 整数\n",[478,155528,155529,155531],{"class":480,"line":565},[478,155530,762],{"class":495},[478,155532,155533],{"class":770},"         # 小数\n",[478,155535,155536,155538],{"class":480,"line":579},[478,155537,6410],{"class":488},[478,155539,155540],{"class":770},"      # 字符串\n",[478,155542,155543,155545],{"class":480,"line":593},[478,155544,31856],{"class":495},[478,155546,155547],{"class":770},"         # 布尔值\n",[478,155549,155550,155552],{"class":480,"line":1769},[478,155551,96066],{"class":495},[478,155553,155554],{"class":770},"         # 空值\n",[19,155556,155557],{},"常见字面量类型：",[371,155559,155560,155570],{},[374,155561,155562],{},[377,155563,155564,155566,155568],{},[380,155565,383],{},[380,155567,27872],{},[380,155569,26249],{},[388,155571,155572,155583,155594,155605,155617,155629,155641,155654,155666],{},[377,155573,155574,155576,155580],{},[393,155575,717],{},[393,155577,155578],{},[475,155579,1012],{},[393,155581,155582],{},"整数",[377,155584,155585,155587,155591],{},[393,155586,753],{},[393,155588,155589],{},[475,155590,762],{},[393,155592,155593],{},"浮点数",[377,155595,155596,155598,155602],{},[393,155597,1868],{},[393,155599,155600],{},[475,155601,6410],{},[393,155603,155604],{},"字符串",[377,155606,155607,155609,155615],{},[393,155608,1923],{},[393,155610,155611,916,155613],{},[475,155612,31856],{},[475,155614,34367],{},[393,155616,66395],{},[377,155618,155619,155622,155626],{},[393,155620,155621],{},"NoneType",[393,155623,155624],{},[475,155625,96066],{},[393,155627,155628],{},"空值",[377,155630,155631,155633,155638],{},[393,155632,154450],{},[393,155634,155635],{},[475,155636,155637],{},"[1, 2, 3]",[393,155639,155640],{},"列表",[377,155642,155643,155646,155651],{},[393,155644,155645],{},"tuple",[393,155647,155648],{},[475,155649,155650],{},"(1, 2, 3)",[393,155652,155653],{},"元组",[377,155655,155656,155658,155663],{},[393,155657,114926],{},[393,155659,155660],{},[475,155661,155662],{},"{\"name\": \"张三\"}",[393,155664,155665],{},"字典",[377,155667,155668,155671,155676],{},[393,155669,155670],{},"set",[393,155672,155673],{},[475,155674,155675],{},"{1, 2, 3}",[393,155677,155678],{},"集合",[14,155680,155682],{"id":155681},"_23-变量","2.3 变量",[19,155684,155685],{},"变量是保存数据的名字。",[469,155687,155689],{"className":30758,"code":155688,"language":30760,"meta":54,"style":54},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[475,155690,155691,155699,155707,155717],{"__ignoreMap":54},[478,155692,155693,155695,155697],{"class":480,"line":481},[478,155694,146916],{"class":714},[478,155696,759],{"class":710},[478,155698,149733],{"class":488},[478,155700,155701,155703,155705],{"class":480,"line":565},[478,155702,146926],{"class":714},[478,155704,759],{"class":710},[478,155706,146931],{"class":495},[478,155708,155709,155712,155714],{"class":480,"line":579},[478,155710,155711],{"class":714},"height ",[478,155713,759],{"class":710},[478,155715,155716],{"class":495}," 1.75\n",[478,155718,155719,155722,155724],{"class":480,"line":593},[478,155720,155721],{"class":714},"is_student ",[478,155723,759],{"class":710},[478,155725,153979],{"class":495},[19,155727,155728],{},"Python 的变量不需要提前声明类型：",[469,155730,155732],{"className":30758,"code":155731,"language":30760,"meta":54,"style":54},"score = 100\nscore = \"满分\"\n",[475,155733,155734,155744],{"__ignoreMap":54},[478,155735,155736,155739,155741],{"class":480,"line":481},[478,155737,155738],{"class":714},"score ",[478,155740,759],{"class":710},[478,155742,155743],{"class":495}," 100\n",[478,155745,155746,155748,155750],{"class":480,"line":565},[478,155747,155738],{"class":714},[478,155749,759],{"class":710},[478,155751,155752],{"class":488}," \"满分\"\n",[19,155754,155755],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155757,155759],{"id":155758},"_24-变量命名规则","2.4 变量命名规则",[19,155761,155762],{},"硬性规则：",[29,155764,155765,155768,155771,155774],{},[32,155766,155767],{},"只能由字母、数字、下划线组成。",[32,155769,155770],{},"不能以数字开头。",[32,155772,155773],{},"不能使用 Python 关键字。",[32,155775,155776],{},"区分大小写。",[469,155778,155780],{"className":30758,"code":155779,"language":30760,"meta":54,"style":54},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[475,155781,155782,155791,155800],{"__ignoreMap":54},[478,155783,155784,155787,155789],{"class":480,"line":481},[478,155785,155786],{"class":714},"user_name ",[478,155788,759],{"class":710},[478,155790,146921],{"class":488},[478,155792,155793,155796,155798],{"class":480,"line":565},[478,155794,155795],{"class":714},"age2 ",[478,155797,759],{"class":710},[478,155799,146931],{"class":495},[478,155801,155802,155805,155807],{"class":480,"line":579},[478,155803,155804],{"class":714},"_token ",[478,155806,759],{"class":710},[478,155808,155809],{"class":488}," \"abc\"\n",[19,155811,155812],{},"错误写法：",[469,155814,155816],{"className":30758,"code":155815,"language":30760,"meta":54,"style":54},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[475,155817,155818,155827,155839],{"__ignoreMap":54},[478,155819,155820,155823,155825],{"class":480,"line":481},[478,155821,155822],{"class":77783},"2age",[478,155824,14130],{"class":710},[478,155826,146931],{"class":495},[478,155828,155829,155831,155833,155835,155837],{"class":480,"line":565},[478,155830,131964],{"class":714},[478,155832,1232],{"class":710},[478,155834,146916],{"class":714},[478,155836,759],{"class":710},[478,155838,146921],{"class":488},[478,155840,155841,155843,155845],{"class":480,"line":579},[478,155842,15259],{"class":710},[478,155844,14130],{"class":710},[478,155846,155847],{"class":488}," \"一班\"\n",[19,155849,155850],{},"查看关键字：",[469,155852,155854],{"className":30758,"code":155853,"language":30760,"meta":54,"style":54},"import keyword\n\nprint(keyword.kwlist)\n",[475,155855,155856,155863,155867],{"__ignoreMap":54},[478,155857,155858,155860],{"class":480,"line":481},[478,155859,30772],{"class":710},[478,155861,155862],{"class":714}," keyword\n",[478,155864,155865],{"class":480,"line":565},[478,155866,2966],{"emptyLinePlaceholder":640},[478,155868,155869,155871],{"class":480,"line":579},[478,155870,30795],{"class":495},[478,155872,155873],{"class":714},"(keyword.kwlist)\n",[19,155875,155876],{},"推荐命名风格：",[469,155878,155880],{"className":30758,"code":155879,"language":30760,"meta":54,"style":54},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[475,155881,155882,155891,155901],{"__ignoreMap":54},[478,155883,155884,155887,155889],{"class":480,"line":481},[478,155885,155886],{"class":714},"student_name ",[478,155888,759],{"class":710},[478,155890,149733],{"class":488},[478,155892,155893,155896,155898],{"class":480,"line":565},[478,155894,155895],{"class":714},"total_price ",[478,155897,759],{"class":710},[478,155899,155900],{"class":495}," 99.8\n",[478,155902,155903,155906,155908],{"class":480,"line":579},[478,155904,155905],{"class":714},"is_finished ",[478,155907,759],{"class":710},[478,155909,126187],{"class":495},[19,155911,155912],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155914,51112],{"id":51111},[19,155916,104746,155917,155920],{},[475,155918,155919],{},"type()"," 查看数据类型：",[469,155922,155924],{"className":30758,"code":155923,"language":30760,"meta":54,"style":54},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[475,155925,155926,155940,155954,155968,155982],{"__ignoreMap":54},[478,155927,155928,155930,155932,155934,155936,155938],{"class":480,"line":481},[478,155929,30795],{"class":495},[478,155931,263],{"class":714},[478,155933,103487],{"class":495},[478,155935,263],{"class":714},[478,155937,1012],{"class":495},[478,155939,30877],{"class":714},[478,155941,155942,155944,155946,155948,155950,155952],{"class":480,"line":565},[478,155943,30795],{"class":495},[478,155945,263],{"class":714},[478,155947,103487],{"class":495},[478,155949,263],{"class":714},[478,155951,762],{"class":495},[478,155953,30877],{"class":714},[478,155955,155956,155958,155960,155962,155964,155966],{"class":480,"line":579},[478,155957,30795],{"class":495},[478,155959,263],{"class":714},[478,155961,103487],{"class":495},[478,155963,263],{"class":714},[478,155965,6410],{"class":488},[478,155967,30877],{"class":714},[478,155969,155970,155972,155974,155976,155978,155980],{"class":480,"line":593},[478,155971,30795],{"class":495},[478,155973,263],{"class":714},[478,155975,103487],{"class":495},[478,155977,263],{"class":714},[478,155979,31856],{"class":495},[478,155981,30877],{"class":714},[478,155983,155984,155986,155988,155990,155992,155994],{"class":480,"line":1769},[478,155985,30795],{"class":495},[478,155987,263],{"class":714},[478,155989,103487],{"class":495},[478,155991,263],{"class":714},[478,155993,96066],{"class":495},[478,155995,30877],{"class":714},[19,155997,155998],{},"输出类似：",[469,156000,156003],{"className":156001,"code":156002,"language":5753,"meta":54},[5751],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[475,156004,156002],{"__ignoreMap":54},[19,156006,9591,156007,107663,156009,156011,156012,156014,156015,22065,156017,156014,156019,156021],{},[475,156008,1923],{},[475,156010,717],{}," 的子类，",[475,156013,31856],{}," 可以当作 ",[475,156016,193],{},[475,156018,34367],{},[475,156020,895],{},"，但业务代码中不要滥用。",[469,156023,156025],{"className":30758,"code":156024,"language":30760,"meta":54,"style":54},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[475,156026,156027,156045],{"__ignoreMap":54},[478,156028,156029,156031,156033,156035,156037,156039,156042],{"class":480,"line":481},[478,156030,30795],{"class":495},[478,156032,263],{"class":714},[478,156034,31856],{"class":495},[478,156036,45946],{"class":710},[478,156038,25498],{"class":495},[478,156040,156041],{"class":714},")   ",[478,156043,156044],{"class":770},"# 2\n",[478,156046,156047,156049,156051,156053,156055,156057,156059],{"class":480,"line":565},[478,156048,30795],{"class":495},[478,156050,263],{"class":714},[478,156052,34367],{"class":495},[478,156054,45946],{"class":710},[478,156056,25498],{"class":495},[478,156058,46188],{"class":714},[478,156060,156061],{"class":770},"# 1\n",[14,156063,156065],{"id":156064},"_26-类型转换","2.6 类型转换",[19,156067,156068],{},"常用转换函数：",[469,156070,156072],{"className":30758,"code":156071,"language":30760,"meta":54,"style":54},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[475,156073,156074,156084,156095,156105],{"__ignoreMap":54},[478,156075,156076,156078,156080,156082],{"class":480,"line":481},[478,156077,717],{"class":495},[478,156079,263],{"class":714},[478,156081,54696],{"class":488},[478,156083,720],{"class":714},[478,156085,156086,156088,156090,156093],{"class":480,"line":565},[478,156087,753],{"class":495},[478,156089,263],{"class":714},[478,156091,156092],{"class":488},"\"3.14\"",[478,156094,720],{"class":714},[478,156096,156097,156099,156101,156103],{"class":480,"line":579},[478,156098,1868],{"class":495},[478,156100,263],{"class":714},[478,156102,1012],{"class":495},[478,156104,720],{"class":714},[478,156106,156107,156109,156111,156113],{"class":480,"line":593},[478,156108,1923],{"class":495},[478,156110,263],{"class":714},[478,156112,193],{"class":495},[478,156114,720],{"class":714},[19,156116,15700],{},[469,156118,156120],{"className":30758,"code":156119,"language":30760,"meta":54,"style":54},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[475,156121,156122,156131,156142],{"__ignoreMap":54},[478,156123,156124,156126,156128],{"class":480,"line":481},[478,156125,146926],{"class":714},[478,156127,759],{"class":710},[478,156129,156130],{"class":488}," \"18\"\n",[478,156132,156133,156135,156137,156139],{"class":480,"line":565},[478,156134,146926],{"class":714},[478,156136,759],{"class":710},[478,156138,2948],{"class":495},[478,156140,156141],{"class":714},"(age)\n",[478,156143,156144,156146,156149,156151,156153],{"class":480,"line":579},[478,156145,30795],{"class":495},[478,156147,156148],{"class":714},"(age ",[478,156150,1181],{"class":710},[478,156152,25498],{"class":495},[478,156154,720],{"class":714},[19,156156,156157],{},"输入得到的内容永远是字符串：",[469,156159,156161],{"className":30758,"code":156160,"language":30760,"meta":54,"style":54},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[475,156162,156163,156179],{"__ignoreMap":54},[478,156164,156165,156168,156170,156172,156174,156177],{"class":480,"line":481},[478,156166,156167],{"class":714},"num ",[478,156169,759],{"class":710},[478,156171,60985],{"class":495},[478,156173,263],{"class":714},[478,156175,156176],{"class":488},"\"请输入数字:\"",[478,156178,720],{"class":714},[478,156180,156181,156183,156185,156187,156190],{"class":480,"line":565},[478,156182,30795],{"class":495},[478,156184,263],{"class":714},[478,156186,103487],{"class":495},[478,156188,156189],{"class":714},"(num))  ",[478,156191,156192],{"class":770},"# str\n",[19,156194,156195],{},"如果要做数学运算，必须转换：",[469,156197,156199],{"className":30758,"code":156198,"language":30760,"meta":54,"style":54},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[475,156200,156201,156219],{"__ignoreMap":54},[478,156202,156203,156205,156207,156209,156211,156213,156215,156217],{"class":480,"line":481},[478,156204,156167],{"class":714},[478,156206,759],{"class":710},[478,156208,2948],{"class":495},[478,156210,263],{"class":714},[478,156212,54201],{"class":495},[478,156214,263],{"class":714},[478,156216,156176],{"class":488},[478,156218,30877],{"class":714},[478,156220,156221,156223,156225,156227,156229],{"class":480,"line":565},[478,156222,30795],{"class":495},[478,156224,45999],{"class":714},[478,156226,1181],{"class":710},[478,156228,2604],{"class":495},[478,156230,720],{"class":714},[19,156232,156233],{},"常见错误：",[469,156235,156237],{"className":30758,"code":156236,"language":30760,"meta":54,"style":54},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[475,156238,156239,156252],{"__ignoreMap":54},[478,156240,156241,156243,156245,156247,156249],{"class":480,"line":481},[478,156242,717],{"class":495},[478,156244,263],{"class":714},[478,156246,156092],{"class":488},[478,156248,156041],{"class":714},[478,156250,156251],{"class":770},"# 错误\n",[478,156253,156254,156256,156258,156261,156264],{"class":480,"line":565},[478,156255,717],{"class":495},[478,156257,263],{"class":714},[478,156259,156260],{"class":488},"\"abc\"",[478,156262,156263],{"class":714},")    ",[478,156265,156251],{"class":770},[19,156267,156268],{},"正确写法：",[469,156270,156272],{"className":30758,"code":156271,"language":30760,"meta":54,"style":54},"num = float(\"3.14\")\n",[475,156273,156274],{"__ignoreMap":54},[478,156275,156276,156278,156280,156282,156284,156286],{"class":480,"line":481},[478,156277,156167],{"class":714},[478,156279,759],{"class":710},[478,156281,110177],{"class":495},[478,156283,263],{"class":714},[478,156285,156092],{"class":488},[478,156287,720],{"class":714},[14,156289,156291],{"id":156290},"_27-运算符","2.7 运算符",[129,156293,156295],{"id":156294},"_271-算术运算符","2.7.1 算术运算符",[371,156297,156298,156309],{},[374,156299,156300],{},[377,156301,156302,156305,156307],{},[380,156303,156304],{},"运算符",[380,156306,26249],{},[380,156308,27872],{},[388,156310,156311,156325,156339,156353,156367,156381,156395],{},[377,156312,156313,156317,156320],{},[393,156314,156315],{},[475,156316,1181],{},[393,156318,156319],{},"加法",[393,156321,156322],{},[475,156323,156324],{},"1 + 2",[377,156326,156327,156331,156334],{},[393,156328,156329],{},[475,156330,1232],{},[393,156332,156333],{},"减法",[393,156335,156336],{},[475,156337,156338],{},"5 - 3",[377,156340,156341,156345,156348],{},[393,156342,156343],{},[475,156344,1155],{},[393,156346,156347],{},"乘法",[393,156349,156350],{},[475,156351,156352],{},"2 * 3",[377,156354,156355,156359,156362],{},[393,156356,156357],{},[475,156358,1284],{},[393,156360,156361],{},"除法，结果是浮点数",[393,156363,156364],{},[475,156365,156366],{},"5 \u002F 2",[377,156368,156369,156373,156376],{},[393,156370,156371],{},[475,156372,33709],{},[393,156374,156375],{},"整除",[393,156377,156378],{},[475,156379,156380],{},"5 \u002F\u002F 2",[377,156382,156383,156387,156390],{},[393,156384,156385],{},[475,156386,1029],{},[393,156388,156389],{},"取余",[393,156391,156392],{},[475,156393,156394],{},"5 % 2",[377,156396,156397,156401,156404],{},[393,156398,156399],{},[475,156400,11227],{},[393,156402,156403],{},"幂运算",[393,156405,156406],{},[475,156407,156408],{},"2 ** 3",[19,156410,15700],{},[469,156412,156414],{"className":30758,"code":156413,"language":30760,"meta":54,"style":54},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[475,156415,156416,156434,156451,156468],{"__ignoreMap":54},[478,156417,156418,156420,156422,156424,156427,156429,156431],{"class":480,"line":481},[478,156419,30795],{"class":495},[478,156421,263],{"class":714},[478,156423,1020],{"class":495},[478,156425,156426],{"class":710}," \u002F",[478,156428,15320],{"class":495},[478,156430,156041],{"class":714},[478,156432,156433],{"class":770},"# 2.5\n",[478,156435,156436,156438,156440,156442,156445,156447,156449],{"class":480,"line":565},[478,156437,30795],{"class":495},[478,156439,263],{"class":714},[478,156441,1020],{"class":495},[478,156443,156444],{"class":710}," \u002F\u002F",[478,156446,15320],{"class":495},[478,156448,46188],{"class":714},[478,156450,156044],{"class":770},[478,156452,156453,156455,156457,156459,156462,156464,156466],{"class":480,"line":579},[478,156454,30795],{"class":495},[478,156456,263],{"class":714},[478,156458,1020],{"class":495},[478,156460,156461],{"class":710}," %",[478,156463,15320],{"class":495},[478,156465,156041],{"class":714},[478,156467,156061],{"class":770},[478,156469,156470,156472,156474,156476,156479,156481,156483],{"class":480,"line":593},[478,156471,30795],{"class":495},[478,156473,263],{"class":714},[478,156475,789],{"class":495},[478,156477,156478],{"class":710}," **",[478,156480,78450],{"class":495},[478,156482,46188],{"class":714},[478,156484,156485],{"class":770},"# 8\n",[129,156487,156489],{"id":156488},"_272-赋值运算符","2.7.2 赋值运算符",[469,156491,156493],{"className":30758,"code":156492,"language":30760,"meta":54,"style":54},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[475,156494,156495,156503,156511,156519,156527],{"__ignoreMap":54},[478,156496,156497,156499,156501],{"class":480,"line":481},[478,156498,156167],{"class":714},[478,156500,759],{"class":710},[478,156502,58808],{"class":495},[478,156504,156505,156507,156509],{"class":480,"line":565},[478,156506,156167],{"class":714},[478,156508,10043],{"class":710},[478,156510,54807],{"class":495},[478,156512,156513,156515,156517],{"class":480,"line":579},[478,156514,156167],{"class":714},[478,156516,150632],{"class":710},[478,156518,48103],{"class":495},[478,156520,156521,156523,156525],{"class":480,"line":593},[478,156522,156167],{"class":714},[478,156524,137528],{"class":710},[478,156526,120416],{"class":495},[478,156528,156529,156531,156534],{"class":480,"line":1769},[478,156530,156167],{"class":714},[478,156532,156533],{"class":710},"\u002F=",[478,156535,48103],{"class":495},[19,156537,156538],{},"等价关系：",[469,156540,156542],{"className":30758,"code":156541,"language":30760,"meta":54,"style":54},"num += 1\nnum = num + 1\n",[475,156543,156544,156552],{"__ignoreMap":54},[478,156545,156546,156548,156550],{"class":480,"line":481},[478,156547,156167],{"class":714},[478,156549,10043],{"class":710},[478,156551,56079],{"class":495},[478,156553,156554,156556,156558,156561,156563],{"class":480,"line":565},[478,156555,156167],{"class":714},[478,156557,759],{"class":710},[478,156559,156560],{"class":714}," num ",[478,156562,1181],{"class":710},[478,156564,56079],{"class":495},[19,156566,156567,156568,101398,156571,28765],{},"Python 没有 ",[475,156569,156570],{},"num++",[475,156572,156573],{},"num--",[129,156575,156577],{"id":156576},"_273-比较运算符","2.7.3 比较运算符",[19,156579,156580],{},"比较运算结果是布尔值。",[469,156582,156584],{"className":30758,"code":156583,"language":30760,"meta":54,"style":54},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[475,156585,156586,156600,156615,156629],{"__ignoreMap":54},[478,156587,156588,156590,156592,156594,156596,156598],{"class":480,"line":481},[478,156589,30795],{"class":495},[478,156591,263],{"class":714},[478,156593,1146],{"class":495},[478,156595,26602],{"class":710},[478,156597,2714],{"class":495},[478,156599,720],{"class":714},[478,156601,156602,156604,156606,156608,156611,156613],{"class":480,"line":565},[478,156603,30795],{"class":495},[478,156605,263],{"class":714},[478,156607,1146],{"class":495},[478,156609,156610],{"class":710}," >=",[478,156612,2604],{"class":495},[478,156614,720],{"class":714},[478,156616,156617,156619,156621,156623,156625,156627],{"class":480,"line":579},[478,156618,30795],{"class":495},[478,156620,263],{"class":714},[478,156622,1146],{"class":495},[478,156624,101939],{"class":710},[478,156626,2649],{"class":495},[478,156628,720],{"class":714},[478,156630,156631,156633,156635,156637,156640,156642],{"class":480,"line":593},[478,156632,30795],{"class":495},[478,156634,263],{"class":714},[478,156636,1146],{"class":495},[478,156638,156639],{"class":710}," !=",[478,156641,2649],{"class":495},[478,156643,720],{"class":714},[19,156645,156646,156647,156649,156650,28765],{},"注意：判断相等用 ",[475,156648,3515],{},"，赋值用 ",[475,156651,759],{},[469,156653,156655],{"className":30758,"code":156654,"language":30760,"meta":54,"style":54},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[475,156656,156657,156669],{"__ignoreMap":54},[478,156658,156659,156661,156663,156666],{"class":480,"line":481},[478,156660,146926],{"class":714},[478,156662,759],{"class":710},[478,156664,156665],{"class":495}," 18",[478,156667,156668],{"class":770},"       # 赋值\n",[478,156670,156671,156673,156675,156677],{"class":480,"line":565},[478,156672,146926],{"class":714},[478,156674,3515],{"class":710},[478,156676,156665],{"class":495},[478,156678,156679],{"class":770},"      # 判断是否相等\n",[129,156681,156683],{"id":156682},"_274-逻辑运算符","2.7.4 逻辑运算符",[371,156685,156686,156694],{},[374,156687,156688],{},[377,156689,156690,156692],{},[380,156691,156304],{},[380,156693,26249],{},[388,156695,156696,156705,156714],{},[377,156697,156698,156702],{},[393,156699,156700],{},[475,156701,30842],{},[393,156703,156704],{},"并且",[377,156706,156707,156711],{},[393,156708,156709],{},[475,156710,115470],{},[393,156712,156713],{},"或者",[377,156715,156716,156721],{},[393,156717,156718],{},[475,156719,156720],{},"not",[393,156722,156723],{},"取反",[469,156725,156727],{"className":30758,"code":156726,"language":30760,"meta":54,"style":54},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[475,156728,156729,156737,156746,156750,156765,156779],{"__ignoreMap":54},[478,156730,156731,156733,156735],{"class":480,"line":481},[478,156732,146926],{"class":714},[478,156734,759],{"class":710},[478,156736,88445],{"class":495},[478,156738,156739,156742,156744],{"class":480,"line":565},[478,156740,156741],{"class":714},"has_ticket ",[478,156743,759],{"class":710},[478,156745,153979],{"class":495},[478,156747,156748],{"class":480,"line":579},[478,156749,2966],{"emptyLinePlaceholder":640},[478,156751,156752,156754,156756,156758,156760,156762],{"class":480,"line":593},[478,156753,30795],{"class":495},[478,156755,156148],{"class":714},[478,156757,2277],{"class":710},[478,156759,156665],{"class":495},[478,156761,120809],{"class":710},[478,156763,156764],{"class":714}," has_ticket)\n",[478,156766,156767,156769,156771,156773,156775,156777],{"class":480,"line":1769},[478,156768,30795],{"class":495},[478,156770,156148],{"class":714},[478,156772,1605],{"class":710},[478,156774,156665],{"class":495},[478,156776,114581],{"class":710},[478,156778,156764],{"class":714},[478,156780,156781,156783,156785,156787],{"class":480,"line":1783},[478,156782,30795],{"class":495},[478,156784,263],{"class":714},[478,156786,156720],{"class":710},[478,156788,156764],{"class":714},[14,156790,156792],{"id":156791},"_28-字符串定义","2.8 字符串定义",[19,156794,156795],{},"三种常见写法：",[469,156797,156799],{"className":30758,"code":156798,"language":30760,"meta":54,"style":54},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[475,156800,156801,156811,156820,156830],{"__ignoreMap":54},[478,156802,156803,156806,156808],{"class":480,"line":481},[478,156804,156805],{"class":714},"name1 ",[478,156807,759],{"class":710},[478,156809,156810],{"class":488}," '小明'\n",[478,156812,156813,156816,156818],{"class":480,"line":565},[478,156814,156815],{"class":714},"name2 ",[478,156817,759],{"class":710},[478,156819,149733],{"class":488},[478,156821,156822,156825,156827],{"class":480,"line":579},[478,156823,156824],{"class":714},"text ",[478,156826,759],{"class":710},[478,156828,156829],{"class":488}," \"\"\"这是多行字符串\n",[478,156831,156832],{"class":480,"line":593},[478,156833,156834],{"class":488},"可以换行\"\"\"\n",[19,156836,156837],{},"字符串中包含引号：",[469,156839,156841],{"className":30758,"code":156840,"language":30760,"meta":54,"style":54},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[475,156842,156843,156853,156863],{"__ignoreMap":54},[478,156844,156845,156848,156850],{"class":480,"line":481},[478,156846,156847],{"class":714},"msg ",[478,156849,759],{"class":710},[478,156851,156852],{"class":488}," \"他说:'你好'\"\n",[478,156854,156855,156858,156860],{"class":480,"line":565},[478,156856,156857],{"class":714},"msg2 ",[478,156859,759],{"class":710},[478,156861,156862],{"class":488}," '他说:\"你好\"'\n",[478,156864,156865,156868,156870,156873,156876,156879,156881],{"class":480,"line":579},[478,156866,156867],{"class":714},"msg3 ",[478,156869,759],{"class":710},[478,156871,156872],{"class":488}," \"他说:",[478,156874,156875],{"class":495},"\\\"",[478,156877,156878],{"class":488},"你好",[478,156880,156875],{"class":495},[478,156882,25513],{"class":488},[19,156884,156885],{},"常见转义字符：",[371,156887,156888,156897],{},[374,156889,156890],{},[377,156891,156892,156895],{},[380,156893,156894],{},"写法",[380,156896,101080],{},[388,156898,156899,156909,156918,156928,156937],{},[377,156900,156901,156906],{},[393,156902,156903],{},[475,156904,156905],{},"\\n",[393,156907,156908],{},"换行",[377,156910,156911,156915],{},[393,156912,156913],{},[475,156914,1799],{},[393,156916,156917],{},"制表符",[377,156919,156920,156925],{},[393,156921,156922],{},[475,156923,156924],{},"\\\\",[393,156926,156927],{},"反斜杠",[377,156929,156930,156934],{},[393,156931,156932],{},[475,156933,156875],{},[393,156935,156936],{},"双引号",[377,156938,156939,156944],{},[393,156940,156941],{},[475,156942,156943],{},"\\'",[393,156945,156946],{},"单引号",[14,156948,156950],{"id":156949},"_29-字符串拼接","2.9 字符串拼接",[469,156952,156954],{"className":30758,"code":156953,"language":30760,"meta":54,"style":54},"name = \"小明\"\nprint(\"你好，\" + name)\n",[475,156955,156956,156964],{"__ignoreMap":54},[478,156957,156958,156960,156962],{"class":480,"line":481},[478,156959,146916],{"class":714},[478,156961,759],{"class":710},[478,156963,149733],{"class":488},[478,156965,156966,156968,156970,156973,156975],{"class":480,"line":565},[478,156967,30795],{"class":495},[478,156969,263],{"class":714},[478,156971,156972],{"class":488},"\"你好，\"",[478,156974,45946],{"class":710},[478,156976,156977],{"class":714}," name)\n",[19,156979,156980],{},"字符串只能和字符串拼接：",[469,156982,156984],{"className":30758,"code":156983,"language":30760,"meta":54,"style":54},"age = 18\nprint(\"年龄:\" + str(age))\n",[475,156985,156986,156994],{"__ignoreMap":54},[478,156987,156988,156990,156992],{"class":480,"line":481},[478,156989,146926],{"class":714},[478,156991,759],{"class":710},[478,156993,146931],{"class":495},[478,156995,156996,156998,157000,157002,157004,157006],{"class":480,"line":565},[478,156997,30795],{"class":495},[478,156999,263],{"class":714},[478,157001,146897],{"class":488},[478,157003,45946],{"class":710},[478,157005,74299],{"class":495},[478,157007,157008],{"class":714},"(age))\n",[19,157010,157011],{},"更推荐使用格式化字符串。",[14,157013,157015],{"id":157014},"_210-字符串格式化","2.10 字符串格式化",[129,157017,157019],{"id":157018},"_2101-百分号格式化","2.10.1 百分号格式化",[469,157021,157023],{"className":30758,"code":157022,"language":30760,"meta":54,"style":54},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[475,157024,157025,157033,157041,157050,157054],{"__ignoreMap":54},[478,157026,157027,157029,157031],{"class":480,"line":481},[478,157028,146916],{"class":714},[478,157030,759],{"class":710},[478,157032,149733],{"class":488},[478,157034,157035,157037,157039],{"class":480,"line":565},[478,157036,146926],{"class":714},[478,157038,759],{"class":710},[478,157040,146931],{"class":495},[478,157042,157043,157045,157047],{"class":480,"line":579},[478,157044,155738],{"class":714},[478,157046,759],{"class":710},[478,157048,157049],{"class":495}," 95.5\n",[478,157051,157052],{"class":480,"line":593},[478,157053,2966],{"emptyLinePlaceholder":640},[478,157055,157056,157058,157060,157063,157066,157069,157072,157075,157078,157080,157082],{"class":480,"line":1769},[478,157057,30795],{"class":495},[478,157059,263],{"class":714},[478,157061,157062],{"class":488},"\"姓名:",[478,157064,157065],{"class":495},"%s",[478,157067,157068],{"class":488}," 年龄:",[478,157070,157071],{"class":495},"%d",[478,157073,157074],{"class":488}," 分数:",[478,157076,157077],{"class":495},"%.1f",[478,157079,952],{"class":488},[478,157081,156461],{"class":710},[478,157083,157084],{"class":714}," (name, age, score))\n",[19,157086,157087],{},"常用占位符：",[371,157089,157090,157099],{},[374,157091,157092],{},[377,157093,157094,157097],{},[380,157095,157096],{},"占位符",[380,157098,26249],{},[388,157100,157101,157109,157117],{},[377,157102,157103,157107],{},[393,157104,157105],{},[475,157106,157065],{},[393,157108,155604],{},[377,157110,157111,157115],{},[393,157112,157113],{},[475,157114,157071],{},[393,157116,155582],{},[377,157118,157119,157124],{},[393,157120,157121],{},[475,157122,157123],{},"%f",[393,157125,155593],{},[19,157127,157128],{},"精度控制：",[469,157130,157132],{"className":30758,"code":157131,"language":30760,"meta":54,"style":54},"price = 12.3456\nprint(\"%.2f\" % price)\n",[475,157133,157134,157143],{"__ignoreMap":54},[478,157135,157136,157138,157140],{"class":480,"line":481},[478,157137,147061],{"class":714},[478,157139,759],{"class":710},[478,157141,157142],{"class":495}," 12.3456\n",[478,157144,157145,157147,157149,157151,157154,157156,157158],{"class":480,"line":565},[478,157146,30795],{"class":495},[478,157148,263],{"class":714},[478,157150,952],{"class":488},[478,157152,157153],{"class":495},"%.2f",[478,157155,952],{"class":488},[478,157157,156461],{"class":710},[478,157159,157160],{"class":714}," price)\n",[129,157162,157164],{"id":157163},"_2102-format方法","2.10.2 format方法",[469,157166,157168],{"className":30758,"code":157167,"language":30760,"meta":54,"style":54},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[475,157169,157170,157178,157186,157190,157209,157229],{"__ignoreMap":54},[478,157171,157172,157174,157176],{"class":480,"line":481},[478,157173,146916],{"class":714},[478,157175,759],{"class":710},[478,157177,149733],{"class":488},[478,157179,157180,157182,157184],{"class":480,"line":565},[478,157181,146926],{"class":714},[478,157183,759],{"class":710},[478,157185,146931],{"class":495},[478,157187,157188],{"class":480,"line":579},[478,157189,2966],{"emptyLinePlaceholder":640},[478,157191,157192,157194,157196,157198,157200,157202,157204,157206],{"class":480,"line":593},[478,157193,30795],{"class":495},[478,157195,263],{"class":714},[478,157197,157062],{"class":488},[478,157199,32839],{"class":495},[478,157201,157068],{"class":488},[478,157203,32839],{"class":495},[478,157205,952],{"class":488},[478,157207,157208],{"class":714},".format(name, age))\n",[478,157210,157211,157213,157215,157217,157220,157222,157225,157227],{"class":480,"line":1769},[478,157212,30795],{"class":495},[478,157214,263],{"class":714},[478,157216,157062],{"class":488},[478,157218,157219],{"class":495},"{0}",[478,157221,157068],{"class":488},[478,157223,157224],{"class":495},"{1}",[478,157226,952],{"class":488},[478,157228,157208],{"class":714},[478,157230,157231,157233,157235,157237,157240,157242,157245,157247,157250,157252,157254,157257,157259,157261],{"class":480,"line":1783},[478,157232,30795],{"class":495},[478,157234,263],{"class":714},[478,157236,157062],{"class":488},[478,157238,157239],{"class":495},"{name}",[478,157241,157068],{"class":488},[478,157243,157244],{"class":495},"{age}",[478,157246,952],{"class":488},[478,157248,157249],{"class":714},".format(",[478,157251,80190],{"class":5782},[478,157253,759],{"class":710},[478,157255,157256],{"class":714},"name, ",[478,157258,70601],{"class":5782},[478,157260,759],{"class":710},[478,157262,157263],{"class":714},"age))\n",[129,157265,157267],{"id":157266},"_2103-f-string","2.10.3 f-string",[19,157269,157270],{},"推荐写法：",[469,157272,157274],{"className":30758,"code":157273,"language":30760,"meta":54,"style":54},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[475,157275,157276,157284,157292,157300,157304],{"__ignoreMap":54},[478,157277,157278,157280,157282],{"class":480,"line":481},[478,157279,146916],{"class":714},[478,157281,759],{"class":710},[478,157283,149733],{"class":488},[478,157285,157286,157288,157290],{"class":480,"line":565},[478,157287,146926],{"class":714},[478,157289,759],{"class":710},[478,157291,146931],{"class":495},[478,157293,157294,157296,157298],{"class":480,"line":579},[478,157295,155738],{"class":714},[478,157297,759],{"class":710},[478,157299,157049],{"class":495},[478,157301,157302],{"class":480,"line":593},[478,157303,2966],{"emptyLinePlaceholder":640},[478,157305,157306,157308,157310,157312,157314,157316,157318,157320,157322,157324,157326,157328,157330,157332,157335,157338,157340,157342],{"class":480,"line":1769},[478,157307,30795],{"class":495},[478,157309,263],{"class":714},[478,157311,218],{"class":710},[478,157313,157062],{"class":488},[478,157315,1591],{"class":495},[478,157317,80190],{"class":714},[478,157319,1641],{"class":495},[478,157321,157068],{"class":488},[478,157323,1591],{"class":495},[478,157325,70601],{"class":714},[478,157327,1641],{"class":495},[478,157329,157074],{"class":488},[478,157331,1591],{"class":495},[478,157333,157334],{"class":714},"score",[478,157336,157337],{"class":710},":.1f",[478,157339,1641],{"class":495},[478,157341,952],{"class":488},[478,157343,720],{"class":714},[19,157345,157346],{},"表达式也可以放进去：",[469,157348,157350],{"className":30758,"code":157349,"language":30760,"meta":54,"style":54},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[475,157351,157352,157360,157368],{"__ignoreMap":54},[478,157353,157354,157356,157358],{"class":480,"line":481},[478,157355,147061],{"class":714},[478,157357,759],{"class":710},[478,157359,147066],{"class":495},[478,157361,157362,157364,157366],{"class":480,"line":565},[478,157363,147071],{"class":714},[478,157365,759],{"class":710},[478,157367,54807],{"class":495},[478,157369,157370,157372,157374,157376,157379,157381,157383,157385,157388,157390,157393],{"class":480,"line":579},[478,157371,30795],{"class":495},[478,157373,263],{"class":714},[478,157375,218],{"class":710},[478,157377,157378],{"class":488},"\"总价:",[478,157380,1591],{"class":495},[478,157382,147061],{"class":714},[478,157384,1155],{"class":710},[478,157386,157387],{"class":714}," count",[478,157389,1641],{"class":495},[478,157391,157392],{"class":488},"元\"",[478,157394,720],{"class":714},[14,157396,157398],{"id":157397},"_211-input输入","2.11 input输入",[19,157400,157401,157404],{},[475,157402,157403],{},"input()"," 会暂停程序，等待用户输入。",[469,157406,157408],{"className":30758,"code":157407,"language":30760,"meta":54,"style":54},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[475,157409,157410,157424],{"__ignoreMap":54},[478,157411,157412,157414,157416,157418,157420,157422],{"class":480,"line":481},[478,157413,146916],{"class":714},[478,157415,759],{"class":710},[478,157417,60985],{"class":495},[478,157419,263],{"class":714},[478,157421,152759],{"class":488},[478,157423,720],{"class":714},[478,157425,157426,157428,157430,157432,157435,157437,157439,157441,157443],{"class":480,"line":565},[478,157427,30795],{"class":495},[478,157429,263],{"class":714},[478,157431,218],{"class":710},[478,157433,157434],{"class":488},"\"你好，",[478,157436,1591],{"class":495},[478,157438,80190],{"class":714},[478,157440,1641],{"class":495},[478,157442,952],{"class":488},[478,157444,720],{"class":714},[19,157446,157447],{},"输入整数：",[469,157449,157451],{"className":30758,"code":157450,"language":30760,"meta":54,"style":54},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[475,157452,157453,157471],{"__ignoreMap":54},[478,157454,157455,157457,157459,157461,157463,157465,157467,157469],{"class":480,"line":481},[478,157456,146926],{"class":714},[478,157458,759],{"class":710},[478,157460,2948],{"class":495},[478,157462,263],{"class":714},[478,157464,54201],{"class":495},[478,157466,263],{"class":714},[478,157468,152774],{"class":488},[478,157470,30877],{"class":714},[478,157472,157473,157475,157477,157479,157482,157484,157486,157488,157491,157493],{"class":480,"line":565},[478,157474,30795],{"class":495},[478,157476,263],{"class":714},[478,157478,218],{"class":710},[478,157480,157481],{"class":488},"\"明年你",[478,157483,1591],{"class":495},[478,157485,146926],{"class":714},[478,157487,1181],{"class":710},[478,157489,157490],{"class":495}," 1}",[478,157492,149784],{"class":488},[478,157494,720],{"class":714},[19,157496,157497],{},"输入小数：",[469,157499,157501],{"className":30758,"code":157500,"language":30760,"meta":54,"style":54},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[475,157502,157503,157522],{"__ignoreMap":54},[478,157504,157505,157507,157509,157511,157513,157515,157517,157520],{"class":480,"line":481},[478,157506,155711],{"class":714},[478,157508,759],{"class":710},[478,157510,110177],{"class":495},[478,157512,263],{"class":714},[478,157514,54201],{"class":495},[478,157516,263],{"class":714},[478,157518,157519],{"class":488},"\"请输入身高:\"",[478,157521,30877],{"class":714},[478,157523,157524,157526,157528,157530,157533,157535,157537,157540,157542,157545],{"class":480,"line":565},[478,157525,30795],{"class":495},[478,157527,263],{"class":714},[478,157529,218],{"class":710},[478,157531,157532],{"class":488},"\"身高:",[478,157534,1591],{"class":495},[478,157536,25361],{"class":714},[478,157538,157539],{"class":710},":.2f",[478,157541,1641],{"class":495},[478,157543,157544],{"class":488},"米\"",[478,157546,720],{"class":714},[14,157548,157550],{"id":157549},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157552,123672],{},[29,157554,157555,157558,157561,157564],{},[32,157556,157557],{},"输入商品单价。",[32,157559,157560],{},"输入购买数量。",[32,157562,157563],{},"输入折扣，例如 0.8 表示八折。",[32,157565,157566],{},"输出最终金额，保留两位小数。",[19,157568,10601],{},[469,157570,157572],{"className":30758,"code":157571,"language":30760,"meta":54,"style":54},"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",[475,157573,157574,157593,157612,157632,157636,157656,157660,157683,157704,157726],{"__ignoreMap":54},[478,157575,157576,157578,157580,157582,157584,157586,157588,157591],{"class":480,"line":481},[478,157577,147061],{"class":714},[478,157579,759],{"class":710},[478,157581,110177],{"class":495},[478,157583,263],{"class":714},[478,157585,54201],{"class":495},[478,157587,263],{"class":714},[478,157589,157590],{"class":488},"\"请输入商品单价:\"",[478,157592,30877],{"class":714},[478,157594,157595,157597,157599,157601,157603,157605,157607,157610],{"class":480,"line":565},[478,157596,147071],{"class":714},[478,157598,759],{"class":710},[478,157600,2948],{"class":495},[478,157602,263],{"class":714},[478,157604,54201],{"class":495},[478,157606,263],{"class":714},[478,157608,157609],{"class":488},"\"请输入购买数量:\"",[478,157611,30877],{"class":714},[478,157613,157614,157617,157619,157621,157623,157625,157627,157630],{"class":480,"line":579},[478,157615,157616],{"class":714},"discount ",[478,157618,759],{"class":710},[478,157620,110177],{"class":495},[478,157622,263],{"class":714},[478,157624,54201],{"class":495},[478,157626,263],{"class":714},[478,157628,157629],{"class":488},"\"请输入折扣:\"",[478,157631,30877],{"class":714},[478,157633,157634],{"class":480,"line":593},[478,157635,2966],{"emptyLinePlaceholder":640},[478,157637,157638,157641,157643,157646,157648,157651,157653],{"class":480,"line":1769},[478,157639,157640],{"class":714},"total ",[478,157642,759],{"class":710},[478,157644,157645],{"class":714}," price ",[478,157647,1155],{"class":710},[478,157649,157650],{"class":714}," count ",[478,157652,1155],{"class":710},[478,157654,157655],{"class":714}," discount\n",[478,157657,157658],{"class":480,"line":1783},[478,157659,2966],{"emptyLinePlaceholder":640},[478,157661,157662,157664,157666,157668,157671,157673,157675,157677,157679,157681],{"class":480,"line":1789},[478,157663,30795],{"class":495},[478,157665,263],{"class":714},[478,157667,218],{"class":710},[478,157669,157670],{"class":488},"\"商品单价:",[478,157672,1591],{"class":495},[478,157674,80195],{"class":714},[478,157676,157539],{"class":710},[478,157678,1641],{"class":495},[478,157680,952],{"class":488},[478,157682,720],{"class":714},[478,157684,157685,157687,157689,157691,157694,157696,157698,157700,157702],{"class":480,"line":1880},[478,157686,30795],{"class":495},[478,157688,263],{"class":714},[478,157690,218],{"class":710},[478,157692,157693],{"class":488},"\"购买数量:",[478,157695,1591],{"class":495},[478,157697,84814],{"class":714},[478,157699,1641],{"class":495},[478,157701,952],{"class":488},[478,157703,720],{"class":714},[478,157705,157706,157708,157710,157712,157715,157717,157720,157722,157724],{"class":480,"line":1886},[478,157707,30795],{"class":495},[478,157709,263],{"class":714},[478,157711,218],{"class":710},[478,157713,157714],{"class":488},"\"折扣:",[478,157716,1591],{"class":495},[478,157718,157719],{"class":714},"discount",[478,157721,1641],{"class":495},[478,157723,952],{"class":488},[478,157725,720],{"class":714},[478,157727,157728,157730,157732,157734,157737,157739,157742,157744,157746,157748],{"class":480,"line":1898},[478,157729,30795],{"class":495},[478,157731,263],{"class":714},[478,157733,218],{"class":710},[478,157735,157736],{"class":488},"\"应付金额:",[478,157738,1591],{"class":495},[478,157740,157741],{"class":714},"total",[478,157743,157539],{"class":710},[478,157745,1641],{"class":495},[478,157747,157392],{"class":488},[478,157749,720],{"class":714},[14,157751,157753],{"id":157752},"_213-易错点","2.13 易错点",[29,157755,157756,157761,157767,157775,157778],{},[32,157757,157758,157760],{},[475,157759,157403],{}," 的结果是字符串，做运算前要转换。",[32,157762,157763,157764,28765],{},"字符串拼接时，数字要先 ",[475,157765,157766],{},"str()",[32,157768,157769,157771,157772,157774],{},[475,157770,759],{}," 是赋值，",[475,157773,3515],{}," 是比较。",[32,157776,157777],{},"Python 没有自增自减运算符。",[32,157779,157780],{},"浮点数计算可能有精度误差：",[469,157782,157784],{"className":30758,"code":157783,"language":30760,"meta":54,"style":54},"print(0.1 + 0.2)\n",[475,157785,157786],{"__ignoreMap":54},[478,157787,157788,157790,157792,157794,157796,157799],{"class":480,"line":481},[478,157789,30795],{"class":495},[478,157791,263],{"class":714},[478,157793,86590],{"class":495},[478,157795,45946],{"class":710},[478,157797,157798],{"class":495}," 0.2",[478,157800,720],{"class":714},[19,157802,157803,157804,157807],{},"金额计算如果要求严格，可以后续学习 ",[475,157805,157806],{},"decimal"," 模块。",[14,157809,157811],{"id":157810},"_214-本章练习","2.14 本章练习",[29,157813,157814,157817,157820,157823,157826],{},[32,157815,157816],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[32,157818,157819],{},"输入圆的半径，计算面积，保留两位小数。",[32,157821,157822],{},"输入工资和奖金，计算总收入。",[32,157824,157825],{},"输入摄氏温度，转换为华氏温度。",[32,157827,157828],{},"写一个 BMI 计算程序：",[469,157830,157833],{"className":157831,"code":157832,"language":5753,"meta":54},[5751],"BMI = 体重kg \u002F 身高m ** 2\n",[475,157834,157832],{"__ignoreMap":54},[617,157836,157837],{},"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":54,"searchDepth":565,"depth":565,"links":157839},[157840,157841,157842,157843,157844,157845,157846,157852,157853,157854,157859,157860,157861,157862],{"id":155401,"depth":565,"text":155402},{"id":155510,"depth":565,"text":155511},{"id":155681,"depth":565,"text":155682},{"id":155758,"depth":565,"text":155759},{"id":51111,"depth":565,"text":51112},{"id":156064,"depth":565,"text":156065},{"id":156290,"depth":565,"text":156291,"children":157847},[157848,157849,157850,157851],{"id":156294,"depth":579,"text":156295},{"id":156488,"depth":579,"text":156489},{"id":156576,"depth":579,"text":156577},{"id":156682,"depth":579,"text":156683},{"id":156791,"depth":565,"text":156792},{"id":156949,"depth":565,"text":156950},{"id":157014,"depth":565,"text":157015,"children":157855},[157856,157857,157858],{"id":157018,"depth":579,"text":157019},{"id":157163,"depth":579,"text":157164},{"id":157266,"depth":579,"text":157267},{"id":157397,"depth":565,"text":157398},{"id":157549,"depth":565,"text":157550},{"id":157752,"depth":565,"text":157753},{"id":157810,"depth":565,"text":157811},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155393,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157869,"title":157870,"body":157871,"description":23942,"extension":638,"meta":159507,"navigation":640,"path":159508,"seo":159509,"stem":159510,"__hash__":159511},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157872,"toc":159488},[157873,157876,157880,157883,157898,157901,157929,157933,157983,157985,158001,158004,158030,158033,158037,158104,158107,158123,158127,158130,158248,158251,158258,158307,158313,158317,158320,158433,158436,158440,158444,158447,158497,158501,158504,158554,158558,158561,158599,158603,158606,158652,158655,158690,158694,158699,158702,158748,158750,158817,158821,158827,158938,158947,158951,158953,158964,158966,159132,159136,159138,159152,159154,159368,159372,159391,159408,159411,159457,159461,159485],[10,157874,157870],{"id":157875},"_3-判断语句",[14,157877,157879],{"id":157878},"_31-布尔值","3.1 布尔值",[19,157881,157882],{},"判断语句依赖布尔值：",[469,157884,157886],{"className":30758,"code":157885,"language":30760,"meta":54,"style":54},"True\nFalse\n",[475,157887,157888,157893],{"__ignoreMap":54},[478,157889,157890],{"class":480,"line":481},[478,157891,157892],{"class":495},"True\n",[478,157894,157895],{"class":480,"line":565},[478,157896,157897],{"class":495},"False\n",[19,157899,157900],{},"比较表达式会产生布尔值：",[469,157902,157904],{"className":30758,"code":157903,"language":30760,"meta":54,"style":54},"age = 18\nprint(age >= 18)  # True\n",[475,157905,157906,157914],{"__ignoreMap":54},[478,157907,157908,157910,157912],{"class":480,"line":481},[478,157909,146926],{"class":714},[478,157911,759],{"class":710},[478,157913,146931],{"class":495},[478,157915,157916,157918,157920,157922,157924,157926],{"class":480,"line":565},[478,157917,30795],{"class":495},[478,157919,156148],{"class":714},[478,157921,2277],{"class":710},[478,157923,156665],{"class":495},[478,157925,46188],{"class":714},[478,157927,157928],{"class":770},"# True\n",[14,157930,157932],{"id":157931},"_32-if基础语法","3.2 if基础语法",[469,157934,157936],{"className":30758,"code":157935,"language":30760,"meta":54,"style":54},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[475,157937,157938,157956,157960,157972],{"__ignoreMap":54},[478,157939,157940,157942,157944,157946,157948,157950,157952,157954],{"class":480,"line":481},[478,157941,146926],{"class":714},[478,157943,759],{"class":710},[478,157945,2948],{"class":495},[478,157947,263],{"class":714},[478,157949,54201],{"class":495},[478,157951,263],{"class":714},[478,157953,152774],{"class":488},[478,157955,30877],{"class":714},[478,157957,157958],{"class":480,"line":565},[478,157959,2966],{"emptyLinePlaceholder":640},[478,157961,157962,157964,157966,157968,157970],{"class":480,"line":579},[478,157963,2099],{"class":710},[478,157965,16272],{"class":714},[478,157967,2277],{"class":710},[478,157969,156665],{"class":495},[478,157971,4305],{"class":714},[478,157973,157974,157976,157978,157981],{"class":480,"line":593},[478,157975,31679],{"class":495},[478,157977,263],{"class":714},[478,157979,157980],{"class":488},"\"可以进入网吧\"",[478,157982,720],{"class":714},[19,157984,9591],{},[29,157986,157987,157992,157995,157998],{},[32,157988,157989,157991],{},[475,157990,2099],{}," 后面是条件表达式。",[32,157993,157994],{},"条件后面必须写冒号。",[32,157996,157997],{},"条件成立时执行缩进代码块。",[32,157999,158000],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158002,158003],{},"错误示例：",[469,158005,158007],{"className":30758,"code":158006,"language":30760,"meta":54,"style":54},"if age >= 18\n    print(\"可以进入\")\n",[475,158008,158009,158019],{"__ignoreMap":54},[478,158010,158011,158013,158015,158017],{"class":480,"line":481},[478,158012,2099],{"class":710},[478,158014,16272],{"class":714},[478,158016,2277],{"class":710},[478,158018,146931],{"class":495},[478,158020,158021,158023,158025,158028],{"class":480,"line":565},[478,158022,31679],{"class":495},[478,158024,263],{"class":714},[478,158026,158027],{"class":488},"\"可以进入\"",[478,158029,720],{"class":714},[19,158031,158032],{},"缺少冒号。",[14,158034,158036],{"id":158035},"_33-if-else","3.3 if else",[469,158038,158040],{"className":30758,"code":158039,"language":30760,"meta":54,"style":54},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[475,158041,158042,158060,158064,158076,158087,158093],{"__ignoreMap":54},[478,158043,158044,158046,158048,158050,158052,158054,158056,158058],{"class":480,"line":481},[478,158045,146926],{"class":714},[478,158047,759],{"class":710},[478,158049,2948],{"class":495},[478,158051,263],{"class":714},[478,158053,54201],{"class":495},[478,158055,263],{"class":714},[478,158057,152774],{"class":488},[478,158059,30877],{"class":714},[478,158061,158062],{"class":480,"line":565},[478,158063,2966],{"emptyLinePlaceholder":640},[478,158065,158066,158068,158070,158072,158074],{"class":480,"line":579},[478,158067,2099],{"class":710},[478,158069,16272],{"class":714},[478,158071,2277],{"class":710},[478,158073,156665],{"class":495},[478,158075,4305],{"class":714},[478,158077,158078,158080,158082,158085],{"class":480,"line":593},[478,158079,31679],{"class":495},[478,158081,263],{"class":714},[478,158083,158084],{"class":488},"\"成年人\"",[478,158086,720],{"class":714},[478,158088,158089,158091],{"class":480,"line":1769},[478,158090,2268],{"class":710},[478,158092,4305],{"class":714},[478,158094,158095,158097,158099,158102],{"class":480,"line":1783},[478,158096,31679],{"class":495},[478,158098,263],{"class":714},[478,158100,158101],{"class":488},"\"未成年人\"",[478,158103,720],{"class":714},[19,158105,158106],{},"执行逻辑：",[29,158108,158109,158115,158120],{},[32,158110,158111,158112,158114],{},"条件成立，执行 ",[475,158113,2099],{}," 代码块。",[32,158116,158117,158118,158114],{},"条件不成立，执行 ",[475,158119,2268],{},[32,158121,158122],{},"两个代码块只会执行其中一个。",[14,158124,158126],{"id":158125},"_34-if-elif-else","3.4 if elif else",[19,158128,158129],{},"多条件判断：",[469,158131,158133],{"className":30758,"code":158132,"language":30760,"meta":54,"style":54},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[475,158134,158135,158153,158157,158171,158182,158196,158207,158220,158231,158237],{"__ignoreMap":54},[478,158136,158137,158139,158141,158143,158145,158147,158149,158151],{"class":480,"line":481},[478,158138,155738],{"class":714},[478,158140,759],{"class":710},[478,158142,2948],{"class":495},[478,158144,263],{"class":714},[478,158146,54201],{"class":495},[478,158148,263],{"class":714},[478,158150,152789],{"class":488},[478,158152,30877],{"class":714},[478,158154,158155],{"class":480,"line":565},[478,158156,2966],{"emptyLinePlaceholder":640},[478,158158,158159,158161,158164,158166,158169],{"class":480,"line":579},[478,158160,2099],{"class":710},[478,158162,158163],{"class":714}," score ",[478,158165,2277],{"class":710},[478,158167,158168],{"class":495}," 90",[478,158170,4305],{"class":714},[478,158172,158173,158175,158177,158180],{"class":480,"line":593},[478,158174,31679],{"class":495},[478,158176,263],{"class":714},[478,158178,158179],{"class":488},"\"优秀\"",[478,158181,720],{"class":714},[478,158183,158184,158187,158189,158191,158194],{"class":480,"line":1769},[478,158185,158186],{"class":710},"elif",[478,158188,158163],{"class":714},[478,158190,2277],{"class":710},[478,158192,158193],{"class":495}," 80",[478,158195,4305],{"class":714},[478,158197,158198,158200,158202,158205],{"class":480,"line":1783},[478,158199,31679],{"class":495},[478,158201,263],{"class":714},[478,158203,158204],{"class":488},"\"良好\"",[478,158206,720],{"class":714},[478,158208,158209,158211,158213,158215,158218],{"class":480,"line":1789},[478,158210,158186],{"class":710},[478,158212,158163],{"class":714},[478,158214,2277],{"class":710},[478,158216,158217],{"class":495}," 60",[478,158219,4305],{"class":714},[478,158221,158222,158224,158226,158229],{"class":480,"line":1880},[478,158223,31679],{"class":495},[478,158225,263],{"class":714},[478,158227,158228],{"class":488},"\"及格\"",[478,158230,720],{"class":714},[478,158232,158233,158235],{"class":480,"line":1886},[478,158234,2268],{"class":710},[478,158236,4305],{"class":714},[478,158238,158239,158241,158243,158246],{"class":480,"line":1898},[478,158240,31679],{"class":495},[478,158242,263],{"class":714},[478,158244,158245],{"class":488},"\"不及格\"",[478,158247,720],{"class":714},[19,158249,158250],{},"注意判断顺序很重要。",[19,158252,158253,158254,158257],{},"如果把 ",[475,158255,158256],{},"score >= 60"," 放在最前面：",[469,158259,158261],{"className":30758,"code":158260,"language":30760,"meta":54,"style":54},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[475,158262,158263,158275,158285,158297],{"__ignoreMap":54},[478,158264,158265,158267,158269,158271,158273],{"class":480,"line":481},[478,158266,2099],{"class":710},[478,158268,158163],{"class":714},[478,158270,2277],{"class":710},[478,158272,158217],{"class":495},[478,158274,4305],{"class":714},[478,158276,158277,158279,158281,158283],{"class":480,"line":565},[478,158278,31679],{"class":495},[478,158280,263],{"class":714},[478,158282,158228],{"class":488},[478,158284,720],{"class":714},[478,158286,158287,158289,158291,158293,158295],{"class":480,"line":579},[478,158288,158186],{"class":710},[478,158290,158163],{"class":714},[478,158292,2277],{"class":710},[478,158294,158168],{"class":495},[478,158296,4305],{"class":714},[478,158298,158299,158301,158303,158305],{"class":480,"line":593},[478,158300,31679],{"class":495},[478,158302,263],{"class":714},[478,158304,158179],{"class":488},[478,158306,720],{"class":714},[19,158308,158309,158310,158312],{},"成绩 95 会先满足 ",[475,158311,158256],{},"，后面的优秀分支就不会执行。",[14,158314,158316],{"id":158315},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158318,158319],{},"嵌套判断就是在一个判断内部再写判断。",[469,158321,158323],{"className":30758,"code":158322,"language":30760,"meta":54,"style":54},"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",[475,158324,158325,158343,158358,158362,158374,158388,158398,158405,158416,158422],{"__ignoreMap":54},[478,158326,158327,158329,158331,158333,158335,158337,158339,158341],{"class":480,"line":481},[478,158328,146926],{"class":714},[478,158330,759],{"class":710},[478,158332,2948],{"class":495},[478,158334,263],{"class":714},[478,158336,54201],{"class":495},[478,158338,263],{"class":714},[478,158340,152774],{"class":488},[478,158342,30877],{"class":714},[478,158344,158345,158347,158349,158351,158353,158356],{"class":480,"line":565},[478,158346,156741],{"class":714},[478,158348,759],{"class":710},[478,158350,60985],{"class":495},[478,158352,263],{"class":714},[478,158354,158355],{"class":488},"\"是否有票(y\u002Fn):\"",[478,158357,720],{"class":714},[478,158359,158360],{"class":480,"line":579},[478,158361,2966],{"emptyLinePlaceholder":640},[478,158363,158364,158366,158368,158370,158372],{"class":480,"line":593},[478,158365,2099],{"class":710},[478,158367,16272],{"class":714},[478,158369,2277],{"class":710},[478,158371,156665],{"class":495},[478,158373,4305],{"class":714},[478,158375,158376,158378,158381,158383,158386],{"class":480,"line":1769},[478,158377,3667],{"class":710},[478,158379,158380],{"class":714}," has_ticket ",[478,158382,3515],{"class":710},[478,158384,158385],{"class":488}," \"y\"",[478,158387,4305],{"class":714},[478,158389,158390,158392,158394,158396],{"class":480,"line":1783},[478,158391,32831],{"class":495},[478,158393,263],{"class":714},[478,158395,158027],{"class":488},[478,158397,720],{"class":714},[478,158399,158400,158403],{"class":480,"line":1789},[478,158401,158402],{"class":710},"    else",[478,158404,4305],{"class":714},[478,158406,158407,158409,158411,158414],{"class":480,"line":1880},[478,158408,32831],{"class":495},[478,158410,263],{"class":714},[478,158412,158413],{"class":488},"\"请先买票\"",[478,158415,720],{"class":714},[478,158417,158418,158420],{"class":480,"line":1886},[478,158419,2268],{"class":710},[478,158421,4305],{"class":714},[478,158423,158424,158426,158428,158431],{"class":480,"line":1898},[478,158425,31679],{"class":495},[478,158427,263],{"class":714},[478,158429,158430],{"class":488},"\"未成年人禁止进入\"",[478,158432,720],{"class":714},[19,158434,158435],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158437,158439],{"id":158438},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[129,158441,158443],{"id":158442},"_361-and","3.6.1 and",[19,158445,158446],{},"两个条件都成立才成立。",[469,158448,158450],{"className":30758,"code":158449,"language":30760,"meta":54,"style":54},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[475,158451,158452,158460,158468,158472,158487],{"__ignoreMap":54},[478,158453,158454,158456,158458],{"class":480,"line":481},[478,158455,146926],{"class":714},[478,158457,759],{"class":710},[478,158459,88445],{"class":495},[478,158461,158462,158464,158466],{"class":480,"line":565},[478,158463,156741],{"class":714},[478,158465,759],{"class":710},[478,158467,153979],{"class":495},[478,158469,158470],{"class":480,"line":579},[478,158471,2966],{"emptyLinePlaceholder":640},[478,158473,158474,158476,158478,158480,158482,158484],{"class":480,"line":593},[478,158475,2099],{"class":710},[478,158477,16272],{"class":714},[478,158479,2277],{"class":710},[478,158481,156665],{"class":495},[478,158483,120809],{"class":710},[478,158485,158486],{"class":714}," has_ticket:\n",[478,158488,158489,158491,158493,158495],{"class":480,"line":1769},[478,158490,31679],{"class":495},[478,158492,263],{"class":714},[478,158494,158027],{"class":488},[478,158496,720],{"class":714},[129,158498,158500],{"id":158499},"_362-or","3.6.2 or",[19,158502,158503],{},"只要一个条件成立就成立。",[469,158505,158507],{"className":30758,"code":158506,"language":30760,"meta":54,"style":54},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[475,158508,158509,158518,158527,158531,158543],{"__ignoreMap":54},[478,158510,158511,158514,158516],{"class":480,"line":481},[478,158512,158513],{"class":714},"is_vip ",[478,158515,759],{"class":710},[478,158517,126187],{"class":495},[478,158519,158520,158523,158525],{"class":480,"line":565},[478,158521,158522],{"class":714},"coupon ",[478,158524,759],{"class":710},[478,158526,153979],{"class":495},[478,158528,158529],{"class":480,"line":579},[478,158530,2966],{"emptyLinePlaceholder":640},[478,158532,158533,158535,158538,158540],{"class":480,"line":593},[478,158534,2099],{"class":710},[478,158536,158537],{"class":714}," is_vip ",[478,158539,115470],{"class":710},[478,158541,158542],{"class":714}," coupon:\n",[478,158544,158545,158547,158549,158552],{"class":480,"line":1769},[478,158546,31679],{"class":495},[478,158548,263],{"class":714},[478,158550,158551],{"class":488},"\"可以享受优惠\"",[478,158553,720],{"class":714},[129,158555,158557],{"id":158556},"_363-not","3.6.3 not",[19,158559,158560],{},"取反。",[469,158562,158564],{"className":30758,"code":158563,"language":30760,"meta":54,"style":54},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[475,158565,158566,158575,158579,158588],{"__ignoreMap":54},[478,158567,158568,158571,158573],{"class":480,"line":481},[478,158569,158570],{"class":714},"is_closed ",[478,158572,759],{"class":710},[478,158574,126187],{"class":495},[478,158576,158577],{"class":480,"line":565},[478,158578,2966],{"emptyLinePlaceholder":640},[478,158580,158581,158583,158585],{"class":480,"line":579},[478,158582,2099],{"class":710},[478,158584,39310],{"class":710},[478,158586,158587],{"class":714}," is_closed:\n",[478,158589,158590,158592,158594,158597],{"class":480,"line":593},[478,158591,31679],{"class":495},[478,158593,263],{"class":714},[478,158595,158596],{"class":488},"\"店铺营业中\"",[478,158598,720],{"class":714},[14,158600,158602],{"id":158601},"_37-链式比较","3.7 链式比较",[19,158604,158605],{},"Python 支持链式比较：",[469,158607,158609],{"className":30758,"code":158608,"language":30760,"meta":54,"style":54},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[475,158610,158611,158620,158624,158641],{"__ignoreMap":54},[478,158612,158613,158615,158617],{"class":480,"line":481},[478,158614,155738],{"class":714},[478,158616,759],{"class":710},[478,158618,158619],{"class":495}," 85\n",[478,158621,158622],{"class":480,"line":565},[478,158623,2966],{"emptyLinePlaceholder":640},[478,158625,158626,158628,158630,158633,158635,158637,158639],{"class":480,"line":579},[478,158627,2099],{"class":710},[478,158629,4659],{"class":495},[478,158631,158632],{"class":710}," \u003C=",[478,158634,158163],{"class":714},[478,158636,2156],{"class":710},[478,158638,6320],{"class":495},[478,158640,4305],{"class":714},[478,158642,158643,158645,158647,158650],{"class":480,"line":593},[478,158644,31679],{"class":495},[478,158646,263],{"class":714},[478,158648,158649],{"class":488},"\"成绩合法\"",[478,158651,720],{"class":714},[19,158653,158654],{},"等价于：",[469,158656,158658],{"className":30758,"code":158657,"language":30760,"meta":54,"style":54},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[475,158659,158660,158680],{"__ignoreMap":54},[478,158661,158662,158664,158666,158668,158670,158672,158674,158676,158678],{"class":480,"line":481},[478,158663,2099],{"class":710},[478,158665,158163],{"class":714},[478,158667,2277],{"class":710},[478,158669,4659],{"class":495},[478,158671,120809],{"class":710},[478,158673,158163],{"class":714},[478,158675,2156],{"class":710},[478,158677,6320],{"class":495},[478,158679,4305],{"class":714},[478,158681,158682,158684,158686,158688],{"class":480,"line":565},[478,158683,31679],{"class":495},[478,158685,263],{"class":714},[478,158687,158649],{"class":488},[478,158689,720],{"class":714},[14,158691,158693],{"id":158692},"_38-真值和假值","3.8 真值和假值",[19,158695,116847,158696,158698],{},[475,158697,2099],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158700,158701],{},"假值：",[469,158703,158705],{"className":30758,"code":158704,"language":30760,"meta":54,"style":54},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[475,158706,158707,158711,158716,158720,158724,158729,158733,158737,158742],{"__ignoreMap":54},[478,158708,158709],{"class":480,"line":481},[478,158710,157897],{"class":495},[478,158712,158713],{"class":480,"line":565},[478,158714,158715],{"class":495},"None\n",[478,158717,158718],{"class":480,"line":579},[478,158719,3651],{"class":495},[478,158721,158722],{"class":480,"line":593},[478,158723,32722],{"class":495},[478,158725,158726],{"class":480,"line":1769},[478,158727,158728],{"class":488},"\"\"\n",[478,158730,158731],{"class":480,"line":1783},[478,158732,32737],{"class":714},[478,158734,158735],{"class":480,"line":1789},[478,158736,2542],{"class":714},[478,158738,158739],{"class":480,"line":1880},[478,158740,158741],{"class":714},"{}\n",[478,158743,158744,158746],{"class":480,"line":1886},[478,158745,155670],{"class":495},[478,158747,2542],{"class":714},[19,158749,15700],{},[469,158751,158753],{"className":30758,"code":158752,"language":30760,"meta":54,"style":54},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[475,158754,158755,158769,158773,158780,158800,158806],{"__ignoreMap":54},[478,158756,158757,158759,158761,158763,158765,158767],{"class":480,"line":481},[478,158758,146916],{"class":714},[478,158760,759],{"class":710},[478,158762,60985],{"class":495},[478,158764,263],{"class":714},[478,158766,152759],{"class":488},[478,158768,720],{"class":714},[478,158770,158771],{"class":480,"line":565},[478,158772,2966],{"emptyLinePlaceholder":640},[478,158774,158775,158777],{"class":480,"line":579},[478,158776,2099],{"class":710},[478,158778,158779],{"class":714}," name:\n",[478,158781,158782,158784,158786,158788,158790,158792,158794,158796,158798],{"class":480,"line":593},[478,158783,31679],{"class":495},[478,158785,263],{"class":714},[478,158787,218],{"class":710},[478,158789,157434],{"class":488},[478,158791,1591],{"class":495},[478,158793,80190],{"class":714},[478,158795,1641],{"class":495},[478,158797,952],{"class":488},[478,158799,720],{"class":714},[478,158801,158802,158804],{"class":480,"line":1769},[478,158803,2268],{"class":710},[478,158805,4305],{"class":714},[478,158807,158808,158810,158812,158815],{"class":480,"line":1783},[478,158809,31679],{"class":495},[478,158811,263],{"class":714},[478,158813,158814],{"class":488},"\"姓名不能为空\"",[478,158816,720],{"class":714},[14,158818,158820],{"id":158819},"_39-match语句","3.9 match语句",[19,158822,158823,158824,158826],{},"Python 3.10 开始支持 ",[475,158825,71645],{},"。它适合处理固定选项。",[469,158828,158830],{"className":30758,"code":158829,"language":30760,"meta":54,"style":54},"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",[475,158831,158832,158848,158852,158859,158869,158880,158889,158900,158909,158920,158927],{"__ignoreMap":54},[478,158833,158834,158837,158839,158841,158843,158846],{"class":480,"line":481},[478,158835,158836],{"class":714},"command ",[478,158838,759],{"class":710},[478,158840,60985],{"class":495},[478,158842,263],{"class":714},[478,158844,158845],{"class":488},"\"请输入命令:\"",[478,158847,720],{"class":714},[478,158849,158850],{"class":480,"line":565},[478,158851,2966],{"emptyLinePlaceholder":640},[478,158853,158854,158856],{"class":480,"line":579},[478,158855,71645],{"class":710},[478,158857,158858],{"class":714}," command:\n",[478,158860,158861,158864,158867],{"class":480,"line":593},[478,158862,158863],{"class":710},"    case",[478,158865,158866],{"class":488}," \"start\"",[478,158868,4305],{"class":714},[478,158870,158871,158873,158875,158878],{"class":480,"line":1769},[478,158872,32831],{"class":495},[478,158874,263],{"class":714},[478,158876,158877],{"class":488},"\"启动\"",[478,158879,720],{"class":714},[478,158881,158882,158884,158887],{"class":480,"line":1783},[478,158883,158863],{"class":710},[478,158885,158886],{"class":488}," \"stop\"",[478,158888,4305],{"class":714},[478,158890,158891,158893,158895,158898],{"class":480,"line":1789},[478,158892,32831],{"class":495},[478,158894,263],{"class":714},[478,158896,158897],{"class":488},"\"停止\"",[478,158899,720],{"class":714},[478,158901,158902,158904,158907],{"class":480,"line":1880},[478,158903,158863],{"class":710},[478,158905,158906],{"class":488}," \"restart\"",[478,158908,4305],{"class":714},[478,158910,158911,158913,158915,158918],{"class":480,"line":1886},[478,158912,32831],{"class":495},[478,158914,263],{"class":714},[478,158916,158917],{"class":488},"\"重启\"",[478,158919,720],{"class":714},[478,158921,158922,158924],{"class":480,"line":1898},[478,158923,158863],{"class":710},[478,158925,158926],{"class":714}," _:\n",[478,158928,158929,158931,158933,158936],{"class":480,"line":2180},[478,158930,32831],{"class":495},[478,158932,263],{"class":714},[478,158934,158935],{"class":488},"\"未知命令\"",[478,158937,720],{"class":714},[19,158939,158940,158941,158943,158944,158946],{},"入门阶段掌握 ",[475,158942,155038],{}," 更重要，",[475,158945,71645],{}," 可以作为补充。",[14,158948,158950],{"id":158949},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158952,123672],{},[29,158954,158955,158958,158961],{},[32,158956,158957],{},"输入成绩。",[32,158959,158960],{},"判断成绩是否合法。",[32,158962,158963],{},"输出等级。",[19,158965,10601],{},[469,158967,158969],{"className":30758,"code":158968,"language":30760,"meta":54,"style":54},"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",[475,158970,158971,158989,158993,159011,159022,159034,159045,159057,159068,159081,159092,159104,159115,159121],{"__ignoreMap":54},[478,158972,158973,158975,158977,158979,158981,158983,158985,158987],{"class":480,"line":481},[478,158974,155738],{"class":714},[478,158976,759],{"class":710},[478,158978,110177],{"class":495},[478,158980,263],{"class":714},[478,158982,54201],{"class":495},[478,158984,263],{"class":714},[478,158986,152789],{"class":488},[478,158988,30877],{"class":714},[478,158990,158991],{"class":480,"line":565},[478,158992,2966],{"emptyLinePlaceholder":640},[478,158994,158995,158997,158999,159001,159003,159005,159007,159009],{"class":480,"line":579},[478,158996,2099],{"class":710},[478,158998,39310],{"class":710},[478,159000,4659],{"class":495},[478,159002,158632],{"class":710},[478,159004,158163],{"class":714},[478,159006,2156],{"class":710},[478,159008,6320],{"class":495},[478,159010,4305],{"class":714},[478,159012,159013,159015,159017,159020],{"class":480,"line":593},[478,159014,31679],{"class":495},[478,159016,263],{"class":714},[478,159018,159019],{"class":488},"\"成绩不合法\"",[478,159021,720],{"class":714},[478,159023,159024,159026,159028,159030,159032],{"class":480,"line":1769},[478,159025,158186],{"class":710},[478,159027,158163],{"class":714},[478,159029,2277],{"class":710},[478,159031,158168],{"class":495},[478,159033,4305],{"class":714},[478,159035,159036,159038,159040,159043],{"class":480,"line":1783},[478,159037,31679],{"class":495},[478,159039,263],{"class":714},[478,159041,159042],{"class":488},"\"等级:A\"",[478,159044,720],{"class":714},[478,159046,159047,159049,159051,159053,159055],{"class":480,"line":1789},[478,159048,158186],{"class":710},[478,159050,158163],{"class":714},[478,159052,2277],{"class":710},[478,159054,158193],{"class":495},[478,159056,4305],{"class":714},[478,159058,159059,159061,159063,159066],{"class":480,"line":1880},[478,159060,31679],{"class":495},[478,159062,263],{"class":714},[478,159064,159065],{"class":488},"\"等级:B\"",[478,159067,720],{"class":714},[478,159069,159070,159072,159074,159076,159079],{"class":480,"line":1886},[478,159071,158186],{"class":710},[478,159073,158163],{"class":714},[478,159075,2277],{"class":710},[478,159077,159078],{"class":495}," 70",[478,159080,4305],{"class":714},[478,159082,159083,159085,159087,159090],{"class":480,"line":1898},[478,159084,31679],{"class":495},[478,159086,263],{"class":714},[478,159088,159089],{"class":488},"\"等级:C\"",[478,159091,720],{"class":714},[478,159093,159094,159096,159098,159100,159102],{"class":480,"line":2180},[478,159095,158186],{"class":710},[478,159097,158163],{"class":714},[478,159099,2277],{"class":710},[478,159101,158217],{"class":495},[478,159103,4305],{"class":714},[478,159105,159106,159108,159110,159113],{"class":480,"line":2185},[478,159107,31679],{"class":495},[478,159109,263],{"class":714},[478,159111,159112],{"class":488},"\"等级:D\"",[478,159114,720],{"class":714},[478,159116,159117,159119],{"class":480,"line":2191},[478,159118,2268],{"class":710},[478,159120,4305],{"class":714},[478,159122,159123,159125,159127,159130],{"class":480,"line":2196},[478,159124,31679],{"class":495},[478,159126,263],{"class":714},[478,159128,159129],{"class":488},"\"等级:E\"",[478,159131,720],{"class":714},[14,159133,159135],{"id":159134},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159137,123672],{},[29,159139,159140,159143,159146,159149],{},[32,159141,159142],{},"输入消费金额。",[32,159144,159145],{},"输入会员等级，普通、银卡、金卡。",[32,159147,159148],{},"普通不打折，银卡 9 折，金卡 8 折。",[32,159150,159151],{},"满 500 再减 50。",[19,159153,10601],{},[469,159155,159157],{"className":30758,"code":159156,"language":30760,"meta":54,"style":54},"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",[475,159158,159159,159179,159195,159199,159207,159211,159225,159235,159248,159257,159270,159278,159284,159295,159299,159313,159317,159331,159341,159345],{"__ignoreMap":54},[478,159160,159161,159164,159166,159168,159170,159172,159174,159177],{"class":480,"line":481},[478,159162,159163],{"class":714},"amount ",[478,159165,759],{"class":710},[478,159167,110177],{"class":495},[478,159169,263],{"class":714},[478,159171,54201],{"class":495},[478,159173,263],{"class":714},[478,159175,159176],{"class":488},"\"请输入消费金额:\"",[478,159178,30877],{"class":714},[478,159180,159181,159184,159186,159188,159190,159193],{"class":480,"line":565},[478,159182,159183],{"class":714},"level ",[478,159185,759],{"class":710},[478,159187,60985],{"class":495},[478,159189,263],{"class":714},[478,159191,159192],{"class":488},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[478,159194,720],{"class":714},[478,159196,159197],{"class":480,"line":579},[478,159198,2966],{"emptyLinePlaceholder":640},[478,159200,159201,159203,159205],{"class":480,"line":593},[478,159202,157616],{"class":714},[478,159204,759],{"class":710},[478,159206,56079],{"class":495},[478,159208,159209],{"class":480,"line":1769},[478,159210,2966],{"emptyLinePlaceholder":640},[478,159212,159213,159215,159218,159220,159223],{"class":480,"line":1783},[478,159214,2099],{"class":710},[478,159216,159217],{"class":714}," level ",[478,159219,3515],{"class":710},[478,159221,159222],{"class":488}," \"银卡\"",[478,159224,4305],{"class":714},[478,159226,159227,159230,159232],{"class":480,"line":1789},[478,159228,159229],{"class":714},"    discount ",[478,159231,759],{"class":710},[478,159233,159234],{"class":495}," 0.9\n",[478,159236,159237,159239,159241,159243,159246],{"class":480,"line":1880},[478,159238,158186],{"class":710},[478,159240,159217],{"class":714},[478,159242,3515],{"class":710},[478,159244,159245],{"class":488}," \"金卡\"",[478,159247,4305],{"class":714},[478,159249,159250,159252,159254],{"class":480,"line":1886},[478,159251,159229],{"class":714},[478,159253,759],{"class":710},[478,159255,159256],{"class":495}," 0.8\n",[478,159258,159259,159261,159263,159265,159268],{"class":480,"line":1898},[478,159260,158186],{"class":710},[478,159262,159217],{"class":714},[478,159264,3515],{"class":710},[478,159266,159267],{"class":488}," \"普通\"",[478,159269,4305],{"class":714},[478,159271,159272,159274,159276],{"class":480,"line":2180},[478,159273,159229],{"class":714},[478,159275,759],{"class":710},[478,159277,56079],{"class":495},[478,159279,159280,159282],{"class":480,"line":2185},[478,159281,2268],{"class":710},[478,159283,4305],{"class":714},[478,159285,159286,159288,159290,159293],{"class":480,"line":2191},[478,159287,31679],{"class":495},[478,159289,263],{"class":714},[478,159291,159292],{"class":488},"\"会员等级输入错误，按普通会员计算\"",[478,159294,720],{"class":714},[478,159296,159297],{"class":480,"line":2196},[478,159298,2966],{"emptyLinePlaceholder":640},[478,159300,159301,159304,159306,159309,159311],{"class":480,"line":2210},[478,159302,159303],{"class":714},"pay ",[478,159305,759],{"class":710},[478,159307,159308],{"class":714}," amount ",[478,159310,1155],{"class":710},[478,159312,157655],{"class":714},[478,159314,159315],{"class":480,"line":2215},[478,159316,2966],{"emptyLinePlaceholder":640},[478,159318,159319,159321,159324,159326,159329],{"class":480,"line":2221},[478,159320,2099],{"class":710},[478,159322,159323],{"class":714}," pay ",[478,159325,2277],{"class":710},[478,159327,159328],{"class":495}," 500",[478,159330,4305],{"class":714},[478,159332,159333,159336,159338],{"class":480,"line":2241},[478,159334,159335],{"class":714},"    pay ",[478,159337,150632],{"class":710},[478,159339,159340],{"class":495}," 50\n",[478,159342,159343],{"class":480,"line":2246},[478,159344,2966],{"emptyLinePlaceholder":640},[478,159346,159347,159349,159351,159353,159355,159357,159360,159362,159364,159366],{"class":480,"line":2260},[478,159348,30795],{"class":495},[478,159350,263],{"class":714},[478,159352,218],{"class":710},[478,159354,157736],{"class":488},[478,159356,1591],{"class":495},[478,159358,159359],{"class":714},"pay",[478,159361,157539],{"class":710},[478,159363,1641],{"class":495},[478,159365,157392],{"class":488},[478,159367,720],{"class":714},[14,159369,159371],{"id":159370},"_312-易错点","3.12 易错点",[29,159373,159374,159377,159380,159383,159388],{},[32,159375,159376],{},"冒号不能漏。",[32,159378,159379],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[32,159381,159382],{},"多分支判断要注意顺序。",[32,159384,159385,159386,28765],{},"判断相等用 ",[475,159387,3515],{},[32,159389,159390],{},"字符串比较区分大小写：",[469,159392,159394],{"className":30758,"code":159393,"language":30760,"meta":54,"style":54},"\"Y\" == \"y\"  # False\n",[475,159395,159396],{"__ignoreMap":54},[478,159397,159398,159401,159403,159405],{"class":480,"line":481},[478,159399,159400],{"class":488},"\"Y\"",[478,159402,101939],{"class":710},[478,159404,158385],{"class":488},[478,159406,159407],{"class":770},"  # False\n",[19,159409,159410],{},"可转换后再判断：",[469,159412,159414],{"className":30758,"code":159413,"language":30760,"meta":54,"style":54},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[475,159415,159416,159433,159446],{"__ignoreMap":54},[478,159417,159418,159421,159423,159425,159427,159430],{"class":480,"line":481},[478,159419,159420],{"class":714},"answer ",[478,159422,759],{"class":710},[478,159424,60985],{"class":495},[478,159426,263],{"class":714},[478,159428,159429],{"class":488},"\"是否继续(y\u002Fn):\"",[478,159431,159432],{"class":714},").lower()\n",[478,159434,159435,159437,159440,159442,159444],{"class":480,"line":565},[478,159436,2099],{"class":710},[478,159438,159439],{"class":714}," answer ",[478,159441,3515],{"class":710},[478,159443,158385],{"class":488},[478,159445,4305],{"class":714},[478,159447,159448,159450,159452,159455],{"class":480,"line":579},[478,159449,31679],{"class":495},[478,159451,263],{"class":714},[478,159453,159454],{"class":488},"\"继续\"",[478,159456,720],{"class":714},[14,159458,159460],{"id":159459},"_313-本章练习","3.13 本章练习",[29,159462,159463,159466,159469,159472,159482],{},[32,159464,159465],{},"输入年龄，判断是否成年。",[32,159467,159468],{},"输入年份，判断是否为闰年。",[32,159470,159471],{},"输入三个数字，输出最大值。",[32,159473,159474,159475,159478,159479,159481],{},"写登录判断：用户名是 ",[475,159476,159477],{},"admin"," 且密码是 ",[475,159480,15649],{}," 才登录成功。",[32,159483,159484],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[617,159486,159487],{},"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":54,"searchDepth":565,"depth":565,"links":159489},[159490,159491,159492,159493,159494,159495,159500,159501,159502,159503,159504,159505,159506],{"id":157878,"depth":565,"text":157879},{"id":157931,"depth":565,"text":157932},{"id":158035,"depth":565,"text":158036},{"id":158125,"depth":565,"text":158126},{"id":158315,"depth":565,"text":158316},{"id":158438,"depth":565,"text":158439,"children":159496},[159497,159498,159499],{"id":158442,"depth":579,"text":158443},{"id":158499,"depth":579,"text":158500},{"id":158556,"depth":579,"text":158557},{"id":158601,"depth":565,"text":158602},{"id":158692,"depth":565,"text":158693},{"id":158819,"depth":565,"text":158820},{"id":158949,"depth":565,"text":158950},{"id":159134,"depth":565,"text":159135},{"id":159370,"depth":565,"text":159371},{"id":159459,"depth":565,"text":159460},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157870,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159513,"title":159514,"body":159515,"description":23942,"extension":638,"meta":161284,"navigation":640,"path":161285,"seo":161286,"stem":161287,"__hash__":161288},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159516,"toc":161264},[159517,159520,159524,159530,159533,159550,159554,159556,159573,159575,159620,159622,159639,159643,159646,159712,159715,159733,159737,159898,159907,159911,159915,159920,159967,159969,159975,159979,159984,160031,160033,160039,160043,160048,160084,160087,160134,160138,160144,160202,160207,160238,160243,160247,160302,160305,160377,160380,160439,160443,160446,160521,160524,160528,160634,160637,160663,160667,160679,160748,160751,160843,160847,160849,160860,160862,160992,160996,161198,161206,161210,161240,161244,161261],[10,159518,159514],{"id":159519},"_4-循环语句",[14,159521,159523],{"id":159522},"_41-为什么需要循环","4.1 为什么需要循环",[19,159525,159526,159527,159529],{},"如果要输出 1 到 100，不应该写 100 行 ",[475,159528,146852],{},"，而应该用循环。",[19,159531,159532],{},"循环适合处理重复任务：",[29,159534,159535,159538,159541,159544,159547],{},[32,159536,159537],{},"重复输出。",[32,159539,159540],{},"重复输入。",[32,159542,159543],{},"遍历数据。",[32,159545,159546],{},"持续执行菜单。",[32,159548,159549],{},"批量处理文件或数据。",[14,159551,159553],{"id":159552},"_42-while循环","4.2 while循环",[19,159555,5747],{},[469,159557,159559],{"className":30758,"code":159558,"language":30760,"meta":54,"style":54},"while 条件:\n    循环体\n",[475,159560,159561,159568],{"__ignoreMap":54},[478,159562,159563,159565],{"class":480,"line":481},[478,159564,109043],{"class":710},[478,159566,159567],{"class":714}," 条件:\n",[478,159569,159570],{"class":480,"line":565},[478,159571,159572],{"class":714},"    循环体\n",[19,159574,15700],{},[469,159576,159578],{"className":30758,"code":159577,"language":30760,"meta":54,"style":54},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[475,159579,159580,159588,159592,159604,159611],{"__ignoreMap":54},[478,159581,159582,159584,159586],{"class":480,"line":481},[478,159583,100528],{"class":714},[478,159585,759],{"class":710},[478,159587,56079],{"class":495},[478,159589,159590],{"class":480,"line":565},[478,159591,2966],{"emptyLinePlaceholder":640},[478,159593,159594,159596,159598,159600,159602],{"class":480,"line":579},[478,159595,109043],{"class":710},[478,159597,10004],{"class":714},[478,159599,2156],{"class":710},[478,159601,2714],{"class":495},[478,159603,4305],{"class":714},[478,159605,159606,159608],{"class":480,"line":593},[478,159607,31679],{"class":495},[478,159609,159610],{"class":714},"(i)\n",[478,159612,159613,159616,159618],{"class":480,"line":1769},[478,159614,159615],{"class":714},"    i ",[478,159617,10043],{"class":710},[478,159619,56079],{"class":495},[19,159621,81309],{},[29,159623,159624,159630,159633,159636],{},[32,159625,159626,159627,28765],{},"判断条件 ",[475,159628,159629],{},"i \u003C= 5",[32,159631,159632],{},"条件成立，执行循环体。",[32,159634,159635],{},"执行完后回到条件判断。",[32,159637,159638],{},"条件不成立，退出循环。",[14,159640,159642],{"id":159641},"_43-while累加","4.3 while累加",[19,159644,159645],{},"计算 1 到 100 的和：",[469,159647,159649],{"className":30758,"code":159648,"language":30760,"meta":54,"style":54},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[475,159650,159651,159659,159667,159671,159683,159693,159701,159705],{"__ignoreMap":54},[478,159652,159653,159655,159657],{"class":480,"line":481},[478,159654,100528],{"class":714},[478,159656,759],{"class":710},[478,159658,56079],{"class":495},[478,159660,159661,159663,159665],{"class":480,"line":565},[478,159662,157640],{"class":714},[478,159664,759],{"class":710},[478,159666,47713],{"class":495},[478,159668,159669],{"class":480,"line":579},[478,159670,2966],{"emptyLinePlaceholder":640},[478,159672,159673,159675,159677,159679,159681],{"class":480,"line":593},[478,159674,109043],{"class":710},[478,159676,10004],{"class":714},[478,159678,2156],{"class":710},[478,159680,6320],{"class":495},[478,159682,4305],{"class":714},[478,159684,159685,159688,159690],{"class":480,"line":1769},[478,159686,159687],{"class":714},"    total ",[478,159689,10043],{"class":710},[478,159691,159692],{"class":714}," i\n",[478,159694,159695,159697,159699],{"class":480,"line":1783},[478,159696,159615],{"class":714},[478,159698,10043],{"class":710},[478,159700,56079],{"class":495},[478,159702,159703],{"class":480,"line":1789},[478,159704,2966],{"emptyLinePlaceholder":640},[478,159706,159707,159709],{"class":480,"line":1880},[478,159708,30795],{"class":495},[478,159710,159711],{"class":714},"(total)\n",[19,159713,159714],{},"核心思想：",[29,159716,159717,159722,159727],{},[32,159718,159719,159721],{},[475,159720,1141],{}," 控制循环次数。",[32,159723,159724,159726],{},[475,159725,157741],{}," 保存累加结果。",[32,159728,159729,159730,159732],{},"每轮循环都要更新 ",[475,159731,1141],{},"，否则可能死循环。",[14,159734,159736],{"id":159735},"_44-while猜数字","4.4 while猜数字",[469,159738,159740],{"className":30758,"code":159739,"language":30760,"meta":54,"style":54},"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",[475,159741,159742,159748,159752,159769,159777,159781,159789,159809,159818,159822,159834,159845,159855,159866,159872,159894],{"__ignoreMap":54},[478,159743,159744,159746],{"class":480,"line":481},[478,159745,30772],{"class":710},[478,159747,45708],{"class":714},[478,159749,159750],{"class":480,"line":565},[478,159751,2966],{"emptyLinePlaceholder":640},[478,159753,159754,159756,159758,159761,159763,159765,159767],{"class":480,"line":579},[478,159755,159420],{"class":714},[478,159757,759],{"class":710},[478,159759,159760],{"class":714}," random.randint(",[478,159762,193],{"class":495},[478,159764,13001],{"class":714},[478,159766,1012],{"class":495},[478,159768,720],{"class":714},[478,159770,159771,159773,159775],{"class":480,"line":593},[478,159772,147071],{"class":714},[478,159774,759],{"class":710},[478,159776,47713],{"class":495},[478,159778,159779],{"class":480,"line":1769},[478,159780,2966],{"emptyLinePlaceholder":640},[478,159782,159783,159785,159787],{"class":480,"line":1783},[478,159784,109043],{"class":710},[478,159786,95672],{"class":495},[478,159788,4305],{"class":714},[478,159790,159791,159794,159796,159798,159800,159802,159804,159807],{"class":480,"line":1789},[478,159792,159793],{"class":714},"    guess ",[478,159795,759],{"class":710},[478,159797,2948],{"class":495},[478,159799,263],{"class":714},[478,159801,54201],{"class":495},[478,159803,263],{"class":714},[478,159805,159806],{"class":488},"\"请输入1到100之间的数字:\"",[478,159808,30877],{"class":714},[478,159810,159811,159814,159816],{"class":480,"line":1880},[478,159812,159813],{"class":714},"    count ",[478,159815,10043],{"class":710},[478,159817,56079],{"class":495},[478,159819,159820],{"class":480,"line":1886},[478,159821,2966],{"emptyLinePlaceholder":640},[478,159823,159824,159826,159829,159831],{"class":480,"line":1898},[478,159825,3667],{"class":710},[478,159827,159828],{"class":714}," guess ",[478,159830,1655],{"class":710},[478,159832,159833],{"class":714}," answer:\n",[478,159835,159836,159838,159840,159843],{"class":480,"line":2180},[478,159837,32831],{"class":495},[478,159839,263],{"class":714},[478,159841,159842],{"class":488},"\"猜大了\"",[478,159844,720],{"class":714},[478,159846,159847,159849,159851,159853],{"class":480,"line":2185},[478,159848,39673],{"class":710},[478,159850,159828],{"class":714},[478,159852,1605],{"class":710},[478,159854,159833],{"class":714},[478,159856,159857,159859,159861,159864],{"class":480,"line":2191},[478,159858,32831],{"class":495},[478,159860,263],{"class":714},[478,159862,159863],{"class":488},"\"猜小了\"",[478,159865,720],{"class":714},[478,159867,159868,159870],{"class":480,"line":2196},[478,159869,158402],{"class":710},[478,159871,4305],{"class":714},[478,159873,159874,159876,159878,159880,159883,159885,159887,159889,159892],{"class":480,"line":2210},[478,159875,32831],{"class":495},[478,159877,263],{"class":714},[478,159879,218],{"class":710},[478,159881,159882],{"class":488},"\"猜对了，一共猜了",[478,159884,1591],{"class":495},[478,159886,84814],{"class":714},[478,159888,1641],{"class":495},[478,159890,159891],{"class":488},"次\"",[478,159893,720],{"class":714},[478,159895,159896],{"class":480,"line":2215},[478,159897,32007],{"class":710},[19,159899,159900,159903,159904,159906],{},[475,159901,159902],{},"while True"," 表示无限循环，通常配合 ",[475,159905,2619],{}," 使用。",[14,159908,159910],{"id":159909},"_45-break和continue","4.5 break和continue",[129,159912,159914],{"id":159913},"_451-break","4.5.1 break",[19,159916,159917,159919],{},[475,159918,2619],{}," 直接结束整个循环。",[469,159921,159923],{"className":30758,"code":159922,"language":30760,"meta":54,"style":54},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[475,159924,159925,159945,159957,159961],{"__ignoreMap":54},[478,159926,159927,159929,159931,159933,159935,159937,159939,159941,159943],{"class":480,"line":481},[478,159928,3591],{"class":710},[478,159930,10004],{"class":714},[478,159932,26423],{"class":710},[478,159934,32823],{"class":495},[478,159936,263],{"class":714},[478,159938,193],{"class":495},[478,159940,13001],{"class":714},[478,159942,1045],{"class":495},[478,159944,31166],{"class":714},[478,159946,159947,159949,159951,159953,159955],{"class":480,"line":565},[478,159948,3667],{"class":710},[478,159950,10004],{"class":714},[478,159952,3515],{"class":710},[478,159954,78450],{"class":495},[478,159956,4305],{"class":714},[478,159958,159959],{"class":480,"line":579},[478,159960,32007],{"class":710},[478,159962,159963,159965],{"class":480,"line":593},[478,159964,31679],{"class":495},[478,159966,159610],{"class":714},[19,159968,146837],{},[469,159970,159973],{"className":159971,"code":159972,"language":5753,"meta":54},[5751],"1\n2\n",[475,159974,159972],{"__ignoreMap":54},[129,159976,159978],{"id":159977},"_452-continue","4.5.2 continue",[19,159980,159981,159983],{},[475,159982,155052],{}," 跳过本轮剩余代码，进入下一轮循环。",[469,159985,159987],{"className":30758,"code":159986,"language":30760,"meta":54,"style":54},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[475,159988,159989,160009,160021,160025],{"__ignoreMap":54},[478,159990,159991,159993,159995,159997,159999,160001,160003,160005,160007],{"class":480,"line":481},[478,159992,3591],{"class":710},[478,159994,10004],{"class":714},[478,159996,26423],{"class":710},[478,159998,32823],{"class":495},[478,160000,263],{"class":714},[478,160002,193],{"class":495},[478,160004,13001],{"class":714},[478,160006,1045],{"class":495},[478,160008,31166],{"class":714},[478,160010,160011,160013,160015,160017,160019],{"class":480,"line":565},[478,160012,3667],{"class":710},[478,160014,10004],{"class":714},[478,160016,3515],{"class":710},[478,160018,78450],{"class":495},[478,160020,4305],{"class":714},[478,160022,160023],{"class":480,"line":579},[478,160024,148892],{"class":710},[478,160026,160027,160029],{"class":480,"line":593},[478,160028,31679],{"class":495},[478,160030,159610],{"class":714},[19,160032,146837],{},[469,160034,160037],{"className":160035,"code":160036,"language":5753,"meta":54},[5751],"1\n2\n4\n5\n",[475,160038,160036],{"__ignoreMap":54},[14,160040,160042],{"id":160041},"_46-for循环","4.6 for循环",[19,160044,160045,160047],{},[475,160046,3591],{}," 常用于遍历序列。",[469,160049,160051],{"className":30758,"code":160050,"language":30760,"meta":54,"style":54},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[475,160052,160053,160062,160066,160077],{"__ignoreMap":54},[478,160054,160055,160057,160059],{"class":480,"line":481},[478,160056,146916],{"class":714},[478,160058,759],{"class":710},[478,160060,160061],{"class":488}," \"python\"\n",[478,160063,160064],{"class":480,"line":565},[478,160065,2966],{"emptyLinePlaceholder":640},[478,160067,160068,160070,160073,160075],{"class":480,"line":579},[478,160069,3591],{"class":710},[478,160071,160072],{"class":714}," ch ",[478,160074,26423],{"class":710},[478,160076,158779],{"class":714},[478,160078,160079,160081],{"class":480,"line":593},[478,160080,31679],{"class":495},[478,160082,160083],{"class":714},"(ch)\n",[19,160085,160086],{},"遍历列表：",[469,160088,160090],{"className":30758,"code":160089,"language":30760,"meta":54,"style":54},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[475,160091,160092,160114,160118,160128],{"__ignoreMap":54},[478,160093,160094,160097,160099,160101,160103,160105,160107,160109,160112],{"class":480,"line":481},[478,160095,160096],{"class":714},"students ",[478,160098,759],{"class":710},[478,160100,52606],{"class":714},[478,160102,150268],{"class":488},[478,160104,13001],{"class":714},[478,160106,151316],{"class":488},[478,160108,13001],{"class":714},[478,160110,160111],{"class":488},"\"小刚\"",[478,160113,33626],{"class":714},[478,160115,160116],{"class":480,"line":565},[478,160117,2966],{"emptyLinePlaceholder":640},[478,160119,160120,160122,160124,160126],{"class":480,"line":579},[478,160121,3591],{"class":710},[478,160123,152517],{"class":714},[478,160125,26423],{"class":710},[478,160127,152522],{"class":714},[478,160129,160130,160132],{"class":480,"line":593},[478,160131,31679],{"class":495},[478,160133,150422],{"class":714},[14,160135,160137],{"id":160136},"_47-range函数","4.7 range函数",[19,160139,160140,160143],{},[475,160141,160142],{},"range()"," 用于生成整数序列。",[469,160145,160147],{"className":30758,"code":160146,"language":30760,"meta":54,"style":54},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[475,160148,160149,160163,160181],{"__ignoreMap":54},[478,160150,160151,160153,160155,160157,160160],{"class":480,"line":481},[478,160152,33796],{"class":495},[478,160154,263],{"class":714},[478,160156,1020],{"class":495},[478,160158,160159],{"class":714},")          ",[478,160161,160162],{"class":770},"# 0,1,2,3,4\n",[478,160164,160165,160167,160169,160171,160173,160175,160178],{"class":480,"line":565},[478,160166,33796],{"class":495},[478,160168,263],{"class":714},[478,160170,193],{"class":495},[478,160172,13001],{"class":714},[478,160174,1020],{"class":495},[478,160176,160177],{"class":714},")       ",[478,160179,160180],{"class":770},"# 1,2,3,4\n",[478,160182,160183,160185,160187,160189,160191,160193,160195,160197,160199],{"class":480,"line":579},[478,160184,33796],{"class":495},[478,160186,263],{"class":714},[478,160188,193],{"class":495},[478,160190,13001],{"class":714},[478,160192,1146],{"class":495},[478,160194,13001],{"class":714},[478,160196,789],{"class":495},[478,160198,156041],{"class":714},[478,160200,160201],{"class":770},"# 1,3,5,7,9\n",[19,160203,160204,160205,24998],{},"配合 ",[475,160206,3591],{},[469,160208,160210],{"className":30758,"code":160209,"language":30760,"meta":54,"style":54},"for i in range(1, 6):\n    print(i)\n",[475,160211,160212,160232],{"__ignoreMap":54},[478,160213,160214,160216,160218,160220,160222,160224,160226,160228,160230],{"class":480,"line":481},[478,160215,3591],{"class":710},[478,160217,10004],{"class":714},[478,160219,26423],{"class":710},[478,160221,32823],{"class":495},[478,160223,263],{"class":714},[478,160225,193],{"class":495},[478,160227,13001],{"class":714},[478,160229,1045],{"class":495},[478,160231,31166],{"class":714},[478,160233,160234,160236],{"class":480,"line":565},[478,160235,31679],{"class":495},[478,160237,159610],{"class":714},[19,160239,9591,160240,160242],{},[475,160241,33796],{}," 的结束值不包含在内。",[14,160244,160246],{"id":160245},"_48-for循环求和","4.8 for循环求和",[469,160248,160250],{"className":30758,"code":160249,"language":30760,"meta":54,"style":54},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[475,160251,160252,160260,160264,160284,160292,160296],{"__ignoreMap":54},[478,160253,160254,160256,160258],{"class":480,"line":481},[478,160255,157640],{"class":714},[478,160257,759],{"class":710},[478,160259,47713],{"class":495},[478,160261,160262],{"class":480,"line":565},[478,160263,2966],{"emptyLinePlaceholder":640},[478,160265,160266,160268,160270,160272,160274,160276,160278,160280,160282],{"class":480,"line":579},[478,160267,3591],{"class":710},[478,160269,10004],{"class":714},[478,160271,26423],{"class":710},[478,160273,32823],{"class":495},[478,160275,263],{"class":714},[478,160277,193],{"class":495},[478,160279,13001],{"class":714},[478,160281,1038],{"class":495},[478,160283,31166],{"class":714},[478,160285,160286,160288,160290],{"class":480,"line":593},[478,160287,159687],{"class":714},[478,160289,10043],{"class":710},[478,160291,159692],{"class":714},[478,160293,160294],{"class":480,"line":1769},[478,160295,2966],{"emptyLinePlaceholder":640},[478,160297,160298,160300],{"class":480,"line":1783},[478,160299,30795],{"class":495},[478,160301,159711],{"class":714},[19,160303,160304],{},"求偶数和：",[469,160306,160308],{"className":30758,"code":160307,"language":30760,"meta":54,"style":54},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[475,160309,160310,160318,160322,160342,160358,160367,160371],{"__ignoreMap":54},[478,160311,160312,160314,160316],{"class":480,"line":481},[478,160313,157640],{"class":714},[478,160315,759],{"class":710},[478,160317,47713],{"class":495},[478,160319,160320],{"class":480,"line":565},[478,160321,2966],{"emptyLinePlaceholder":640},[478,160323,160324,160326,160328,160330,160332,160334,160336,160338,160340],{"class":480,"line":579},[478,160325,3591],{"class":710},[478,160327,10004],{"class":714},[478,160329,26423],{"class":710},[478,160331,32823],{"class":495},[478,160333,263],{"class":714},[478,160335,193],{"class":495},[478,160337,13001],{"class":714},[478,160339,1038],{"class":495},[478,160341,31166],{"class":714},[478,160343,160344,160346,160348,160350,160352,160354,160356],{"class":480,"line":593},[478,160345,3667],{"class":710},[478,160347,10004],{"class":714},[478,160349,1029],{"class":710},[478,160351,15320],{"class":495},[478,160353,101939],{"class":710},[478,160355,4659],{"class":495},[478,160357,4305],{"class":714},[478,160359,160360,160363,160365],{"class":480,"line":1769},[478,160361,160362],{"class":714},"        total ",[478,160364,10043],{"class":710},[478,160366,159692],{"class":714},[478,160368,160369],{"class":480,"line":1783},[478,160370,2966],{"emptyLinePlaceholder":640},[478,160372,160373,160375],{"class":480,"line":1789},[478,160374,30795],{"class":495},[478,160376,159711],{"class":714},[19,160378,160379],{},"也可以：",[469,160381,160383],{"className":30758,"code":160382,"language":30760,"meta":54,"style":54},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[475,160384,160385,160393,160397,160421,160429,160433],{"__ignoreMap":54},[478,160386,160387,160389,160391],{"class":480,"line":481},[478,160388,157640],{"class":714},[478,160390,759],{"class":710},[478,160392,47713],{"class":495},[478,160394,160395],{"class":480,"line":565},[478,160396,2966],{"emptyLinePlaceholder":640},[478,160398,160399,160401,160403,160405,160407,160409,160411,160413,160415,160417,160419],{"class":480,"line":579},[478,160400,3591],{"class":710},[478,160402,10004],{"class":714},[478,160404,26423],{"class":710},[478,160406,32823],{"class":495},[478,160408,263],{"class":714},[478,160410,789],{"class":495},[478,160412,13001],{"class":714},[478,160414,1038],{"class":495},[478,160416,13001],{"class":714},[478,160418,789],{"class":495},[478,160420,31166],{"class":714},[478,160422,160423,160425,160427],{"class":480,"line":593},[478,160424,159687],{"class":714},[478,160426,10043],{"class":710},[478,160428,159692],{"class":714},[478,160430,160431],{"class":480,"line":1769},[478,160432,2966],{"emptyLinePlaceholder":640},[478,160434,160435,160437],{"class":480,"line":1783},[478,160436,30795],{"class":495},[478,160438,159711],{"class":714},[14,160440,160442],{"id":160441},"_49-循环嵌套","4.9 循环嵌套",[19,160444,160445],{},"嵌套循环就是循环里面再写循环。",[469,160447,160449],{"className":30758,"code":160448,"language":30760,"meta":54,"style":54},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[475,160450,160451,160471,160491],{"__ignoreMap":54},[478,160452,160453,160455,160457,160459,160461,160463,160465,160467,160469],{"class":480,"line":481},[478,160454,3591],{"class":710},[478,160456,10004],{"class":714},[478,160458,26423],{"class":710},[478,160460,32823],{"class":495},[478,160462,263],{"class":714},[478,160464,193],{"class":495},[478,160466,13001],{"class":714},[478,160468,994],{"class":495},[478,160470,31166],{"class":714},[478,160472,160473,160475,160477,160479,160481,160483,160485,160487,160489],{"class":480,"line":565},[478,160474,3767],{"class":710},[478,160476,10066],{"class":714},[478,160478,26423],{"class":710},[478,160480,32823],{"class":495},[478,160482,263],{"class":714},[478,160484,193],{"class":495},[478,160486,13001],{"class":714},[478,160488,994],{"class":495},[478,160490,31166],{"class":714},[478,160492,160493,160495,160497,160499,160502,160504,160506,160508,160511,160513,160515,160517,160519],{"class":480,"line":579},[478,160494,32831],{"class":495},[478,160496,263],{"class":714},[478,160498,218],{"class":710},[478,160500,160501],{"class":488},"\"i=",[478,160503,1591],{"class":495},[478,160505,1141],{"class":714},[478,160507,1641],{"class":495},[478,160509,160510],{"class":488},", j=",[478,160512,1591],{"class":495},[478,160514,1167],{"class":714},[478,160516,1641],{"class":495},[478,160518,952],{"class":488},[478,160520,720],{"class":714},[19,160522,160523],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160525,160527],{"id":160526},"_410-九九乘法表","4.10 九九乘法表",[469,160529,160531],{"className":30758,"code":160530,"language":30760,"meta":54,"style":54},"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",[475,160532,160533,160553,160576,160628],{"__ignoreMap":54},[478,160534,160535,160537,160539,160541,160543,160545,160547,160549,160551],{"class":480,"line":481},[478,160536,3591],{"class":710},[478,160538,10004],{"class":714},[478,160540,26423],{"class":710},[478,160542,32823],{"class":495},[478,160544,263],{"class":714},[478,160546,193],{"class":495},[478,160548,13001],{"class":714},[478,160550,1146],{"class":495},[478,160552,31166],{"class":714},[478,160554,160555,160557,160559,160561,160563,160565,160567,160570,160572,160574],{"class":480,"line":565},[478,160556,3767],{"class":710},[478,160558,10066],{"class":714},[478,160560,26423],{"class":710},[478,160562,32823],{"class":495},[478,160564,263],{"class":714},[478,160566,193],{"class":495},[478,160568,160569],{"class":714},", i ",[478,160571,1181],{"class":710},[478,160573,25498],{"class":495},[478,160575,31166],{"class":714},[478,160577,160578,160580,160582,160584,160586,160588,160590,160592,160594,160596,160598,160600,160602,160604,160606,160608,160610,160612,160614,160616,160618,160620,160622,160624,160626],{"class":480,"line":579},[478,160579,32831],{"class":495},[478,160581,263],{"class":714},[478,160583,218],{"class":710},[478,160585,952],{"class":488},[478,160587,1591],{"class":495},[478,160589,1167],{"class":714},[478,160591,1641],{"class":495},[478,160593,1155],{"class":488},[478,160595,1591],{"class":495},[478,160597,1141],{"class":714},[478,160599,1641],{"class":495},[478,160601,759],{"class":488},[478,160603,1591],{"class":495},[478,160605,100528],{"class":714},[478,160607,1155],{"class":710},[478,160609,3976],{"class":714},[478,160611,1641],{"class":495},[478,160613,952],{"class":488},[478,160615,13001],{"class":714},[478,160617,46181],{"class":5782},[478,160619,759],{"class":710},[478,160621,952],{"class":488},[478,160623,1799],{"class":495},[478,160625,952],{"class":488},[478,160627,720],{"class":714},[478,160629,160630,160632],{"class":480,"line":593},[478,160631,31679],{"class":495},[478,160633,2542],{"class":714},[19,160635,160636],{},"关键点：",[29,160638,160639,160645,160651,160657],{},[32,160640,160641,160642,160644],{},"外层 ",[475,160643,1141],{}," 控制行。",[32,160646,160647,160648,160650],{},"内层 ",[475,160649,1167],{}," 控制列。",[32,160652,160653,160654,160656],{},"每行结束后用 ",[475,160655,146852],{}," 换行。",[32,160658,160659,160662],{},[475,160660,160661],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160664,160666],{"id":160665},"_411-循环else","4.11 循环else",[19,160668,160669,160670,160672,160673,160675,160676,160678],{},"Python 的循环可以带 ",[475,160671,2268],{},"。当循环正常结束时执行 ",[475,160674,2268],{},"，如果被 ",[475,160677,2619],{}," 打断，则不执行。",[469,160680,160682],{"className":30758,"code":160681,"language":30760,"meta":54,"style":54},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[475,160683,160684,160704,160716,160727,160731,160737],{"__ignoreMap":54},[478,160685,160686,160688,160690,160692,160694,160696,160698,160700,160702],{"class":480,"line":481},[478,160687,3591],{"class":710},[478,160689,10004],{"class":714},[478,160691,26423],{"class":710},[478,160693,32823],{"class":495},[478,160695,263],{"class":714},[478,160697,193],{"class":495},[478,160699,13001],{"class":714},[478,160701,1045],{"class":495},[478,160703,31166],{"class":714},[478,160705,160706,160708,160710,160712,160714],{"class":480,"line":565},[478,160707,3667],{"class":710},[478,160709,10004],{"class":714},[478,160711,3515],{"class":710},[478,160713,2604],{"class":495},[478,160715,4305],{"class":714},[478,160717,160718,160720,160722,160725],{"class":480,"line":579},[478,160719,32831],{"class":495},[478,160721,263],{"class":714},[478,160723,160724],{"class":488},"\"找到了\"",[478,160726,720],{"class":714},[478,160728,160729],{"class":480,"line":593},[478,160730,32007],{"class":710},[478,160732,160733,160735],{"class":480,"line":1769},[478,160734,2268],{"class":710},[478,160736,4305],{"class":714},[478,160738,160739,160741,160743,160746],{"class":480,"line":1783},[478,160740,31679],{"class":495},[478,160742,263],{"class":714},[478,160744,160745],{"class":488},"\"没找到\"",[478,160747,720],{"class":714},[19,160749,160750],{},"常用于搜索。",[469,160752,160754],{"className":30758,"code":160753,"language":30760,"meta":54,"style":54},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[475,160755,160756,160777,160786,160790,160802,160813,160823,160827,160833],{"__ignoreMap":54},[478,160757,160758,160761,160763,160765,160767,160769,160771,160773,160775],{"class":480,"line":481},[478,160759,160760],{"class":714},"names ",[478,160762,759],{"class":710},[478,160764,52606],{"class":714},[478,160766,150268],{"class":488},[478,160768,13001],{"class":714},[478,160770,151316],{"class":488},[478,160772,13001],{"class":714},[478,160774,160111],{"class":488},[478,160776,33626],{"class":714},[478,160778,160779,160781,160783],{"class":480,"line":565},[478,160780,111958],{"class":714},[478,160782,759],{"class":710},[478,160784,160785],{"class":488}," \"小李\"\n",[478,160787,160788],{"class":480,"line":579},[478,160789,2966],{"emptyLinePlaceholder":640},[478,160791,160792,160794,160797,160799],{"class":480,"line":593},[478,160793,3591],{"class":710},[478,160795,160796],{"class":714}," name ",[478,160798,26423],{"class":710},[478,160800,160801],{"class":714}," names:\n",[478,160803,160804,160806,160808,160810],{"class":480,"line":1769},[478,160805,3667],{"class":710},[478,160807,160796],{"class":714},[478,160809,3515],{"class":710},[478,160811,160812],{"class":714}," target:\n",[478,160814,160815,160817,160819,160821],{"class":480,"line":1783},[478,160816,32831],{"class":495},[478,160818,263],{"class":714},[478,160820,160724],{"class":488},[478,160822,720],{"class":714},[478,160824,160825],{"class":480,"line":1789},[478,160826,32007],{"class":710},[478,160828,160829,160831],{"class":480,"line":1880},[478,160830,2268],{"class":710},[478,160832,4305],{"class":714},[478,160834,160835,160837,160839,160841],{"class":480,"line":1886},[478,160836,31679],{"class":495},[478,160838,263],{"class":714},[478,160840,160745],{"class":488},[478,160842,720],{"class":714},[14,160844,160846],{"id":160845},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160848,123672],{},[29,160850,160851,160854,160857],{},[32,160852,160853],{},"用户最多输入 3 次密码。",[32,160855,160856],{},"密码正确则登录成功。",[32,160858,160859],{},"3 次都错误则锁定账号。",[19,160861,10601],{},[469,160863,160865],{"className":30758,"code":160864,"language":30760,"meta":54,"style":54},"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",[475,160866,160867,160877,160881,160897,160913,160917,160929,160940,160944,160950,160975,160981],{"__ignoreMap":54},[478,160868,160869,160872,160874],{"class":480,"line":481},[478,160870,160871],{"class":714},"password ",[478,160873,759],{"class":710},[478,160875,160876],{"class":488}," \"123456\"\n",[478,160878,160879],{"class":480,"line":565},[478,160880,2966],{"emptyLinePlaceholder":640},[478,160882,160883,160885,160887,160889,160891,160893,160895],{"class":480,"line":579},[478,160884,3591],{"class":710},[478,160886,10004],{"class":714},[478,160888,26423],{"class":710},[478,160890,32823],{"class":495},[478,160892,263],{"class":714},[478,160894,783],{"class":495},[478,160896,31166],{"class":714},[478,160898,160899,160902,160904,160906,160908,160911],{"class":480,"line":593},[478,160900,160901],{"class":714},"    user_password ",[478,160903,759],{"class":710},[478,160905,60985],{"class":495},[478,160907,263],{"class":714},[478,160909,160910],{"class":488},"\"请输入密码:\"",[478,160912,720],{"class":714},[478,160914,160915],{"class":480,"line":1769},[478,160916,2966],{"emptyLinePlaceholder":640},[478,160918,160919,160921,160924,160926],{"class":480,"line":1783},[478,160920,3667],{"class":710},[478,160922,160923],{"class":714}," user_password ",[478,160925,3515],{"class":710},[478,160927,160928],{"class":714}," password:\n",[478,160930,160931,160933,160935,160938],{"class":480,"line":1789},[478,160932,32831],{"class":495},[478,160934,263],{"class":714},[478,160936,160937],{"class":488},"\"登录成功\"",[478,160939,720],{"class":714},[478,160941,160942],{"class":480,"line":1880},[478,160943,32007],{"class":710},[478,160945,160946,160948],{"class":480,"line":1886},[478,160947,158402],{"class":710},[478,160949,4305],{"class":714},[478,160951,160952,160954,160956,160958,160961,160964,160966,160968,160970,160973],{"class":480,"line":1898},[478,160953,32831],{"class":495},[478,160955,263],{"class":714},[478,160957,218],{"class":710},[478,160959,160960],{"class":488},"\"密码错误，还剩",[478,160962,160963],{"class":495},"{2",[478,160965,52651],{"class":710},[478,160967,3598],{"class":714},[478,160969,1641],{"class":495},[478,160971,160972],{"class":488},"次机会\"",[478,160974,720],{"class":714},[478,160976,160977,160979],{"class":480,"line":2180},[478,160978,2268],{"class":710},[478,160980,4305],{"class":714},[478,160982,160983,160985,160987,160990],{"class":480,"line":2185},[478,160984,31679],{"class":495},[478,160986,263],{"class":714},[478,160988,160989],{"class":488},"\"账号已锁定\"",[478,160991,720],{"class":714},[14,160993,160995],{"id":160994},"_413-小案例菜单程序","4.13 小案例：菜单程序",[469,160997,160999],{"className":30758,"code":160998,"language":30760,"meta":54,"style":54},"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",[475,161000,161001,161009,161020,161031,161042,161053,161064,161068,161083,161087,161099,161110,161122,161133,161145,161156,161168,161178,161182,161188],{"__ignoreMap":54},[478,161002,161003,161005,161007],{"class":480,"line":481},[478,161004,109043],{"class":710},[478,161006,95672],{"class":495},[478,161008,4305],{"class":714},[478,161010,161011,161013,161015,161018],{"class":480,"line":565},[478,161012,31679],{"class":495},[478,161014,263],{"class":714},[478,161016,161017],{"class":488},"\"====== 菜单 ======\"",[478,161019,720],{"class":714},[478,161021,161022,161024,161026,161029],{"class":480,"line":579},[478,161023,31679],{"class":495},[478,161025,263],{"class":714},[478,161027,161028],{"class":488},"\"1. 查询余额\"",[478,161030,720],{"class":714},[478,161032,161033,161035,161037,161040],{"class":480,"line":593},[478,161034,31679],{"class":495},[478,161036,263],{"class":714},[478,161038,161039],{"class":488},"\"2. 存款\"",[478,161041,720],{"class":714},[478,161043,161044,161046,161048,161051],{"class":480,"line":1769},[478,161045,31679],{"class":495},[478,161047,263],{"class":714},[478,161049,161050],{"class":488},"\"3. 取款\"",[478,161052,720],{"class":714},[478,161054,161055,161057,161059,161062],{"class":480,"line":1783},[478,161056,31679],{"class":495},[478,161058,263],{"class":714},[478,161060,161061],{"class":488},"\"0. 退出\"",[478,161063,720],{"class":714},[478,161065,161066],{"class":480,"line":1789},[478,161067,2966],{"emptyLinePlaceholder":640},[478,161069,161070,161073,161075,161077,161079,161081],{"class":480,"line":1880},[478,161071,161072],{"class":714},"    choice ",[478,161074,759],{"class":710},[478,161076,60985],{"class":495},[478,161078,263],{"class":714},[478,161080,153453],{"class":488},[478,161082,720],{"class":714},[478,161084,161085],{"class":480,"line":1886},[478,161086,2966],{"emptyLinePlaceholder":640},[478,161088,161089,161091,161093,161095,161097],{"class":480,"line":1898},[478,161090,3667],{"class":710},[478,161092,153466],{"class":714},[478,161094,3515],{"class":710},[478,161096,153471],{"class":488},[478,161098,4305],{"class":714},[478,161100,161101,161103,161105,161108],{"class":480,"line":2180},[478,161102,32831],{"class":495},[478,161104,263],{"class":714},[478,161106,161107],{"class":488},"\"余额为1000元\"",[478,161109,720],{"class":714},[478,161111,161112,161114,161116,161118,161120],{"class":480,"line":2185},[478,161113,39673],{"class":710},[478,161115,153466],{"class":714},[478,161117,3515],{"class":710},[478,161119,153490],{"class":488},[478,161121,4305],{"class":714},[478,161123,161124,161126,161128,161131],{"class":480,"line":2191},[478,161125,32831],{"class":495},[478,161127,263],{"class":714},[478,161129,161130],{"class":488},"\"存款功能\"",[478,161132,720],{"class":714},[478,161134,161135,161137,161139,161141,161143],{"class":480,"line":2196},[478,161136,39673],{"class":710},[478,161138,153466],{"class":714},[478,161140,3515],{"class":710},[478,161142,153508],{"class":488},[478,161144,4305],{"class":714},[478,161146,161147,161149,161151,161154],{"class":480,"line":2210},[478,161148,32831],{"class":495},[478,161150,263],{"class":714},[478,161152,161153],{"class":488},"\"取款功能\"",[478,161155,720],{"class":714},[478,161157,161158,161160,161162,161164,161166],{"class":480,"line":2215},[478,161159,39673],{"class":710},[478,161161,153466],{"class":714},[478,161163,3515],{"class":710},[478,161165,153562],{"class":488},[478,161167,4305],{"class":714},[478,161169,161170,161172,161174,161176],{"class":480,"line":2221},[478,161171,32831],{"class":495},[478,161173,263],{"class":714},[478,161175,153573],{"class":488},[478,161177,720],{"class":714},[478,161179,161180],{"class":480,"line":2241},[478,161181,32007],{"class":710},[478,161183,161184,161186],{"class":480,"line":2246},[478,161185,158402],{"class":710},[478,161187,4305],{"class":714},[478,161189,161190,161192,161194,161196],{"class":480,"line":2260},[478,161191,32831],{"class":495},[478,161193,263],{"class":714},[478,161195,153594],{"class":488},[478,161197,720],{"class":714},[19,161199,161200,161201,161203,161204,28765],{},"菜单类程序通常使用 ",[475,161202,159902],{},"，用户选择退出时 ",[475,161205,2619],{},[14,161207,161209],{"id":161208},"_414-易错点","4.14 易错点",[29,161211,161212,161217,161223,161231,161237],{},[32,161213,161214,161216],{},[475,161215,109043],{}," 循环必须更新控制变量。",[32,161218,161219,161222],{},[475,161220,161221],{},"range(1, 10)"," 不包含 10。",[32,161224,161225,161227,161228,161230],{},[475,161226,2619],{}," 结束整个循环，",[475,161229,155052],{}," 只跳过本轮。",[32,161232,161233,161234,161236],{},"嵌套循环中，",[475,161235,2619],{}," 只跳出当前所在的一层循环。",[32,161238,161239],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161241,161243],{"id":161242},"_415-本章练习","4.15 本章练习",[29,161245,161246,161249,161252,161255,161258],{},[32,161247,161248],{},"输出 1 到 100。",[32,161250,161251],{},"计算 1 到 100 的偶数和。",[32,161253,161254],{},"输出 100 以内能被 3 和 5 同时整除的数。",[32,161256,161257],{},"编写猜数字游戏，限制最多猜 7 次。",[32,161259,161260],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[617,161262,161263],{},"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":54,"searchDepth":565,"depth":565,"links":161265},[161266,161267,161268,161269,161270,161274,161275,161276,161277,161278,161279,161280,161281,161282,161283],{"id":159522,"depth":565,"text":159523},{"id":159552,"depth":565,"text":159553},{"id":159641,"depth":565,"text":159642},{"id":159735,"depth":565,"text":159736},{"id":159909,"depth":565,"text":159910,"children":161271},[161272,161273],{"id":159913,"depth":579,"text":159914},{"id":159977,"depth":579,"text":159978},{"id":160041,"depth":565,"text":160042},{"id":160136,"depth":565,"text":160137},{"id":160245,"depth":565,"text":160246},{"id":160441,"depth":565,"text":160442},{"id":160526,"depth":565,"text":160527},{"id":160665,"depth":565,"text":160666},{"id":160845,"depth":565,"text":160846},{"id":160994,"depth":565,"text":160995},{"id":161208,"depth":565,"text":161209},{"id":161242,"depth":565,"text":161243},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159514,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161290,"title":161291,"body":161292,"description":23942,"extension":638,"meta":163297,"navigation":640,"path":163298,"seo":163299,"stem":163300,"__hash__":163301},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161293,"toc":163277},[161294,161297,161301,161304,161307,161321,161324,161338,161342,161344,161363,161365,161412,161414,161428,161432,161506,161509,161513,161516,161575,161583,161586,161639,161642,161646,161651,161706,161714,161764,161768,161773,161781,161880,161886,161890,161895,161898,161909,161950,161963,161967,161970,162006,162009,162022,162025,162085,162089,162093,162096,162147,162151,162154,162201,162207,162273,162276,162280,162283,162399,162402,162406,162409,162515,162519,162522,162560,162563,162605,162608,162668,162671,162675,163139,163142,163146,163173,163179,163240,163244,163274],[10,161295,161291],{"id":161296},"_5-函数基础",[14,161298,161300],{"id":161299},"_51-为什么需要函数","5.1 为什么需要函数",[19,161302,161303],{},"函数用于封装一段可以重复使用的代码。",[19,161305,161306],{},"不使用函数的问题：",[29,161308,161309,161312,161315,161318],{},[32,161310,161311],{},"重复代码多。",[32,161313,161314],{},"修改逻辑时容易漏改。",[32,161316,161317],{},"主流程不清晰。",[32,161319,161320],{},"程序越写越长，难以维护。",[19,161322,161323],{},"使用函数后的好处：",[29,161325,161326,161329,161332,161335],{},[32,161327,161328],{},"提高复用性。",[32,161330,161331],{},"提高可读性。",[32,161333,161334],{},"便于调试。",[32,161336,161337],{},"便于分工。",[14,161339,161341],{"id":161340},"_52-函数定义","5.2 函数定义",[19,161343,5747],{},[469,161345,161347],{"className":30758,"code":161346,"language":30760,"meta":54,"style":54},"def 函数名():\n    函数体\n",[475,161348,161349,161358],{"__ignoreMap":54},[478,161350,161351,161353,161356],{"class":480,"line":481},[478,161352,32327],{"class":710},[478,161354,161355],{"class":484}," 函数名",[478,161357,32333],{"class":714},[478,161359,161360],{"class":480,"line":565},[478,161361,161362],{"class":714},"    函数体\n",[19,161364,15700],{},[469,161366,161368],{"className":30758,"code":161367,"language":30760,"meta":54,"style":54},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[475,161369,161370,161379,161389,161399,161403,161407],{"__ignoreMap":54},[478,161371,161372,161374,161377],{"class":480,"line":481},[478,161373,32327],{"class":710},[478,161375,161376],{"class":484}," say_hello",[478,161378,32333],{"class":714},[478,161380,161381,161383,161385,161387],{"class":480,"line":565},[478,161382,31679],{"class":495},[478,161384,263],{"class":714},[478,161386,6410],{"class":488},[478,161388,720],{"class":714},[478,161390,161391,161393,161395,161397],{"class":480,"line":579},[478,161392,31679],{"class":495},[478,161394,263],{"class":714},[478,161396,147019],{"class":488},[478,161398,720],{"class":714},[478,161400,161401],{"class":480,"line":593},[478,161402,2966],{"emptyLinePlaceholder":640},[478,161404,161405],{"class":480,"line":1769},[478,161406,2966],{"emptyLinePlaceholder":640},[478,161408,161409],{"class":480,"line":1783},[478,161410,161411],{"class":714},"say_hello()\n",[19,161413,9591],{},[29,161415,161416,161419,161422,161425],{},[32,161417,161418],{},"函数必须先定义，再调用。",[32,161420,161421],{},"函数名遵循变量命名规则。",[32,161423,161424],{},"函数体需要缩进。",[32,161426,161427],{},"函数不调用就不会执行。",[14,161429,161431],{"id":161430},"_53-函数调用","5.3 函数调用",[469,161433,161435],{"className":30758,"code":161434,"language":30760,"meta":54,"style":54},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[475,161436,161437,161446,161457,161468,161479,161489,161493,161497,161502],{"__ignoreMap":54},[478,161438,161439,161441,161444],{"class":480,"line":481},[478,161440,32327],{"class":710},[478,161442,161443],{"class":484}," print_menu",[478,161445,32333],{"class":714},[478,161447,161448,161450,161452,161455],{"class":480,"line":565},[478,161449,31679],{"class":495},[478,161451,263],{"class":714},[478,161453,161454],{"class":488},"\"1. 查询\"",[478,161456,720],{"class":714},[478,161458,161459,161461,161463,161466],{"class":480,"line":579},[478,161460,31679],{"class":495},[478,161462,263],{"class":714},[478,161464,161465],{"class":488},"\"2. 添加\"",[478,161467,720],{"class":714},[478,161469,161470,161472,161474,161477],{"class":480,"line":593},[478,161471,31679],{"class":495},[478,161473,263],{"class":714},[478,161475,161476],{"class":488},"\"3. 删除\"",[478,161478,720],{"class":714},[478,161480,161481,161483,161485,161487],{"class":480,"line":1769},[478,161482,31679],{"class":495},[478,161484,263],{"class":714},[478,161486,161061],{"class":488},[478,161488,720],{"class":714},[478,161490,161491],{"class":480,"line":1783},[478,161492,2966],{"emptyLinePlaceholder":640},[478,161494,161495],{"class":480,"line":1789},[478,161496,2966],{"emptyLinePlaceholder":640},[478,161498,161499],{"class":480,"line":1880},[478,161500,161501],{"class":714},"print_menu()\n",[478,161503,161504],{"class":480,"line":1886},[478,161505,161501],{"class":714},[19,161507,161508],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161510,161512],{"id":161511},"_54-参数","5.4 参数",[19,161514,161515],{},"参数用于向函数传递数据。",[469,161517,161519],{"className":30758,"code":161518,"language":30760,"meta":54,"style":54},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[475,161520,161521,161530,161550,161554,161558,161567],{"__ignoreMap":54},[478,161522,161523,161525,161527],{"class":480,"line":481},[478,161524,32327],{"class":710},[478,161526,161376],{"class":484},[478,161528,161529],{"class":714},"(name):\n",[478,161531,161532,161534,161536,161538,161540,161542,161544,161546,161548],{"class":480,"line":565},[478,161533,31679],{"class":495},[478,161535,263],{"class":714},[478,161537,218],{"class":710},[478,161539,157434],{"class":488},[478,161541,1591],{"class":495},[478,161543,80190],{"class":714},[478,161545,1641],{"class":495},[478,161547,952],{"class":488},[478,161549,720],{"class":714},[478,161551,161552],{"class":480,"line":579},[478,161553,2966],{"emptyLinePlaceholder":640},[478,161555,161556],{"class":480,"line":593},[478,161557,2966],{"emptyLinePlaceholder":640},[478,161559,161560,161563,161565],{"class":480,"line":1769},[478,161561,161562],{"class":714},"say_hello(",[478,161564,150268],{"class":488},[478,161566,720],{"class":714},[478,161568,161569,161571,161573],{"class":480,"line":1783},[478,161570,161562],{"class":714},[478,161572,151316],{"class":488},[478,161574,720],{"class":714},[19,161576,161577,161579,161580,161582],{},[475,161578,80190],{}," 是形参，",[475,161581,150268],{}," 是实参。",[19,161584,161585],{},"多个参数：",[469,161587,161589],{"className":30758,"code":161588,"language":30760,"meta":54,"style":54},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[475,161590,161591,161599,161612,161618,161622,161626],{"__ignoreMap":54},[478,161592,161593,161595,161597],{"class":480,"line":481},[478,161594,32327],{"class":710},[478,161596,5775],{"class":484},[478,161598,151473],{"class":714},[478,161600,161601,161604,161606,161608,161610],{"class":480,"line":565},[478,161602,161603],{"class":714},"    result ",[478,161605,759],{"class":710},[478,161607,11435],{"class":714},[478,161609,1181],{"class":710},[478,161611,151484],{"class":714},[478,161613,161614,161616],{"class":480,"line":579},[478,161615,31679],{"class":495},[478,161617,76965],{"class":714},[478,161619,161620],{"class":480,"line":593},[478,161621,2966],{"emptyLinePlaceholder":640},[478,161623,161624],{"class":480,"line":1769},[478,161625,2966],{"emptyLinePlaceholder":640},[478,161627,161628,161631,161633,161635,161637],{"class":480,"line":1783},[478,161629,161630],{"class":714},"add(",[478,161632,1146],{"class":495},[478,161634,13001],{"class":714},[478,161636,1396],{"class":495},[478,161638,720],{"class":714},[19,161640,161641],{},"调用时参数数量必须匹配。",[14,161643,161645],{"id":161644},"_55-返回值","5.5 返回值",[19,161647,161648,161650],{},[475,161649,17611],{}," 用于把函数内部的结果返回给调用者。",[469,161652,161654],{"className":30758,"code":161653,"language":30760,"meta":54,"style":54},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[475,161655,161656,161664,161674,161678,161682,161700],{"__ignoreMap":54},[478,161657,161658,161660,161662],{"class":480,"line":481},[478,161659,32327],{"class":710},[478,161661,5775],{"class":484},[478,161663,151473],{"class":714},[478,161665,161666,161668,161670,161672],{"class":480,"line":565},[478,161667,4656],{"class":710},[478,161669,11435],{"class":714},[478,161671,1181],{"class":710},[478,161673,151484],{"class":714},[478,161675,161676],{"class":480,"line":579},[478,161677,2966],{"emptyLinePlaceholder":640},[478,161679,161680],{"class":480,"line":593},[478,161681,2966],{"emptyLinePlaceholder":640},[478,161683,161684,161687,161689,161692,161694,161696,161698],{"class":480,"line":1769},[478,161685,161686],{"class":714},"result ",[478,161688,759],{"class":710},[478,161690,161691],{"class":714}," add(",[478,161693,1146],{"class":495},[478,161695,13001],{"class":714},[478,161697,1396],{"class":495},[478,161699,720],{"class":714},[478,161701,161702,161704],{"class":480,"line":1783},[478,161703,30795],{"class":495},[478,161705,76965],{"class":714},[19,161707,161708,161709,161711,161712,28765],{},"如果函数没有写 ",[475,161710,17611],{},"，默认返回 ",[475,161713,96066],{},[469,161715,161717],{"className":30758,"code":161716,"language":30760,"meta":54,"style":54},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[475,161718,161719,161727,161737,161741,161745,161754],{"__ignoreMap":54},[478,161720,161721,161723,161725],{"class":480,"line":481},[478,161722,32327],{"class":710},[478,161724,161376],{"class":484},[478,161726,32333],{"class":714},[478,161728,161729,161731,161733,161735],{"class":480,"line":565},[478,161730,31679],{"class":495},[478,161732,263],{"class":714},[478,161734,6410],{"class":488},[478,161736,720],{"class":714},[478,161738,161739],{"class":480,"line":579},[478,161740,2966],{"emptyLinePlaceholder":640},[478,161742,161743],{"class":480,"line":593},[478,161744,2966],{"emptyLinePlaceholder":640},[478,161746,161747,161749,161751],{"class":480,"line":1769},[478,161748,161686],{"class":714},[478,161750,759],{"class":710},[478,161752,161753],{"class":714}," say_hello()\n",[478,161755,161756,161758,161761],{"class":480,"line":1783},[478,161757,30795],{"class":495},[478,161759,161760],{"class":714},"(result)  ",[478,161762,161763],{"class":770},"# None\n",[14,161765,161767],{"id":161766},"_56-return的作用","5.6 return的作用",[19,161769,161770,161772],{},[475,161771,17611],{}," 有两个作用：",[29,161774,161775,161778],{},[32,161776,161777],{},"返回结果。",[32,161779,161780],{},"结束函数。",[469,161782,161784],{"className":30758,"code":161783,"language":30760,"meta":54,"style":54},"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",[475,161785,161786,161796,161808,161815,161819,161831,161838,161842,161849,161853,161857,161868],{"__ignoreMap":54},[478,161787,161788,161790,161793],{"class":480,"line":481},[478,161789,32327],{"class":710},[478,161791,161792],{"class":484}," check_age",[478,161794,161795],{"class":714},"(age):\n",[478,161797,161798,161800,161802,161804,161806],{"class":480,"line":565},[478,161799,3667],{"class":710},[478,161801,16272],{"class":714},[478,161803,1605],{"class":710},[478,161805,4659],{"class":495},[478,161807,4305],{"class":714},[478,161809,161810,161812],{"class":480,"line":579},[478,161811,15317],{"class":710},[478,161813,161814],{"class":488}," \"年龄不合法\"\n",[478,161816,161817],{"class":480,"line":593},[478,161818,2966],{"emptyLinePlaceholder":640},[478,161820,161821,161823,161825,161827,161829],{"class":480,"line":1769},[478,161822,3667],{"class":710},[478,161824,16272],{"class":714},[478,161826,2277],{"class":710},[478,161828,156665],{"class":495},[478,161830,4305],{"class":714},[478,161832,161833,161835],{"class":480,"line":1783},[478,161834,15317],{"class":710},[478,161836,161837],{"class":488}," \"成年人\"\n",[478,161839,161840],{"class":480,"line":1789},[478,161841,2966],{"emptyLinePlaceholder":640},[478,161843,161844,161846],{"class":480,"line":1880},[478,161845,4656],{"class":710},[478,161847,161848],{"class":488}," \"未成年人\"\n",[478,161850,161851],{"class":480,"line":1886},[478,161852,2966],{"emptyLinePlaceholder":640},[478,161854,161855],{"class":480,"line":1898},[478,161856,2966],{"emptyLinePlaceholder":640},[478,161858,161859,161861,161864,161866],{"class":480,"line":2180},[478,161860,30795],{"class":495},[478,161862,161863],{"class":714},"(check_age(",[478,161865,1396],{"class":495},[478,161867,30877],{"class":714},[478,161869,161870,161872,161874,161876,161878],{"class":480,"line":2185},[478,161871,30795],{"class":495},[478,161873,161863],{"class":714},[478,161875,1232],{"class":710},[478,161877,193],{"class":495},[478,161879,30877],{"class":714},[19,161881,161882,161883,161885],{},"函数执行到 ",[475,161884,17611],{}," 后，后面的代码不会继续执行。",[14,161887,161889],{"id":161888},"_57-none","5.7 None",[19,161891,161892,161894],{},[475,161893,96066],{}," 表示空值或没有结果。",[19,161896,161897],{},"常见使用场景：",[29,161899,161900,161903,161906],{},[32,161901,161902],{},"函数没有返回值。",[32,161904,161905],{},"变量暂时没有具体值。",[32,161907,161908],{},"表示查询不到结果。",[469,161910,161912],{"className":30758,"code":161911,"language":30760,"meta":54,"style":54},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[475,161913,161914,161922,161926,161939],{"__ignoreMap":54},[478,161915,161916,161918,161920],{"class":480,"line":481},[478,161917,161686],{"class":714},[478,161919,759],{"class":710},[478,161921,152552],{"class":495},[478,161923,161924],{"class":480,"line":565},[478,161925,2966],{"emptyLinePlaceholder":640},[478,161927,161928,161930,161933,161935,161937],{"class":480,"line":579},[478,161929,2099],{"class":710},[478,161931,161932],{"class":714}," result ",[478,161934,39307],{"class":710},[478,161936,39313],{"class":495},[478,161938,4305],{"class":714},[478,161940,161941,161943,161945,161948],{"class":480,"line":593},[478,161942,31679],{"class":495},[478,161944,263],{"class":714},[478,161946,161947],{"class":488},"\"没有数据\"",[478,161949,720],{"class":714},[19,161951,161952,161953,161955,161956,161959,161960,28765],{},"判断 ",[475,161954,96066],{}," 推荐使用 ",[475,161957,161958],{},"is None","，不要写成 ",[475,161961,161962],{},"== None",[14,161964,161966],{"id":161965},"_58-函数文档字符串","5.8 函数文档字符串",[19,161968,161969],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[469,161971,161973],{"className":30758,"code":161972,"language":30760,"meta":54,"style":54},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[475,161974,161975,161985,161990],{"__ignoreMap":54},[478,161976,161977,161979,161982],{"class":480,"line":481},[478,161978,32327],{"class":710},[478,161980,161981],{"class":484}," calculate_bmi",[478,161983,161984],{"class":714},"(weight, height):\n",[478,161986,161987],{"class":480,"line":565},[478,161988,161989],{"class":488},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[478,161991,161992,161994,161997,161999,162002,162004],{"class":480,"line":579},[478,161993,4656],{"class":710},[478,161995,161996],{"class":714}," weight ",[478,161998,1284],{"class":710},[478,162000,162001],{"class":714}," height ",[478,162003,11227],{"class":710},[478,162005,48103],{"class":495},[19,162007,162008],{},"查看说明：",[469,162010,162012],{"className":30758,"code":162011,"language":30760,"meta":54,"style":54},"help(calculate_bmi)\n",[475,162013,162014],{"__ignoreMap":54},[478,162015,162016,162019],{"class":480,"line":481},[478,162017,162018],{"class":495},"help",[478,162020,162021],{"class":714},"(calculate_bmi)\n",[19,162023,162024],{},"较完整的写法：",[469,162026,162028],{"className":30758,"code":162027,"language":30760,"meta":54,"style":54},"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",[475,162029,162030,162038,162043,162048,162052,162057,162062,162067,162071],{"__ignoreMap":54},[478,162031,162032,162034,162036],{"class":480,"line":481},[478,162033,32327],{"class":710},[478,162035,161981],{"class":484},[478,162037,161984],{"class":714},[478,162039,162040],{"class":480,"line":565},[478,162041,162042],{"class":488},"    \"\"\"\n",[478,162044,162045],{"class":480,"line":579},[478,162046,162047],{"class":488},"    计算BMI。\n",[478,162049,162050],{"class":480,"line":593},[478,162051,2966],{"emptyLinePlaceholder":640},[478,162053,162054],{"class":480,"line":1769},[478,162055,162056],{"class":488},"    :param weight: 体重，单位kg\n",[478,162058,162059],{"class":480,"line":1783},[478,162060,162061],{"class":488},"    :param height: 身高，单位m\n",[478,162063,162064],{"class":480,"line":1789},[478,162065,162066],{"class":488},"    :return: BMI数值\n",[478,162068,162069],{"class":480,"line":1880},[478,162070,162042],{"class":488},[478,162072,162073,162075,162077,162079,162081,162083],{"class":480,"line":1886},[478,162074,4656],{"class":710},[478,162076,161996],{"class":714},[478,162078,1284],{"class":710},[478,162080,162001],{"class":714},[478,162082,11227],{"class":710},[478,162084,48103],{"class":495},[14,162086,162088],{"id":162087},"_59-变量作用域","5.9 变量作用域",[129,162090,162092],{"id":162091},"_591-局部变量","5.9.1 局部变量",[19,162094,162095],{},"在函数内部定义的变量，只能在函数内部使用。",[469,162097,162099],{"className":30758,"code":162098,"language":30760,"meta":54,"style":54},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[475,162100,162101,162110,162118,162124,162128,162132,162137],{"__ignoreMap":54},[478,162102,162103,162105,162108],{"class":480,"line":481},[478,162104,32327],{"class":710},[478,162106,162107],{"class":484}," test",[478,162109,32333],{"class":714},[478,162111,162112,162114,162116],{"class":480,"line":565},[478,162113,45973],{"class":714},[478,162115,759],{"class":710},[478,162117,58808],{"class":495},[478,162119,162120,162122],{"class":480,"line":579},[478,162121,31679],{"class":495},[478,162123,727],{"class":714},[478,162125,162126],{"class":480,"line":593},[478,162127,2966],{"emptyLinePlaceholder":640},[478,162129,162130],{"class":480,"line":1769},[478,162131,2966],{"emptyLinePlaceholder":640},[478,162133,162134],{"class":480,"line":1783},[478,162135,162136],{"class":714},"test()\n",[478,162138,162139,162141,162144],{"class":480,"line":1789},[478,162140,30795],{"class":495},[478,162142,162143],{"class":714},"(num)  ",[478,162145,162146],{"class":770},"# 报错\n",[129,162148,162150],{"id":162149},"_592-全局变量","5.9.2 全局变量",[19,162152,162153],{},"在函数外部定义的变量，可以在函数内部读取。",[469,162155,162157],{"className":30758,"code":162156,"language":30760,"meta":54,"style":54},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[475,162158,162159,162167,162171,162175,162183,162189,162193,162197],{"__ignoreMap":54},[478,162160,162161,162163,162165],{"class":480,"line":481},[478,162162,146916],{"class":714},[478,162164,759],{"class":710},[478,162166,149733],{"class":488},[478,162168,162169],{"class":480,"line":565},[478,162170,2966],{"emptyLinePlaceholder":640},[478,162172,162173],{"class":480,"line":579},[478,162174,2966],{"emptyLinePlaceholder":640},[478,162176,162177,162179,162181],{"class":480,"line":593},[478,162178,32327],{"class":710},[478,162180,161376],{"class":484},[478,162182,32333],{"class":714},[478,162184,162185,162187],{"class":480,"line":1769},[478,162186,31679],{"class":495},[478,162188,151040],{"class":714},[478,162190,162191],{"class":480,"line":1783},[478,162192,2966],{"emptyLinePlaceholder":640},[478,162194,162195],{"class":480,"line":1789},[478,162196,2966],{"emptyLinePlaceholder":640},[478,162198,162199],{"class":480,"line":1880},[478,162200,161411],{"class":714},[19,162202,162203,162204,28765],{},"如果要在函数内部修改全局变量，需要 ",[475,162205,162206],{},"global",[469,162208,162210],{"className":30758,"code":162209,"language":30760,"meta":54,"style":54},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[475,162211,162212,162220,162224,162228,162237,162245,162253,162257,162261,162266],{"__ignoreMap":54},[478,162213,162214,162216,162218],{"class":480,"line":481},[478,162215,147071],{"class":714},[478,162217,759],{"class":710},[478,162219,47713],{"class":495},[478,162221,162222],{"class":480,"line":565},[478,162223,2966],{"emptyLinePlaceholder":640},[478,162225,162226],{"class":480,"line":579},[478,162227,2966],{"emptyLinePlaceholder":640},[478,162229,162230,162232,162235],{"class":480,"line":593},[478,162231,32327],{"class":710},[478,162233,162234],{"class":484}," add_count",[478,162236,32333],{"class":714},[478,162238,162239,162242],{"class":480,"line":1769},[478,162240,162241],{"class":710},"    global",[478,162243,162244],{"class":714}," count\n",[478,162246,162247,162249,162251],{"class":480,"line":1783},[478,162248,159813],{"class":714},[478,162250,10043],{"class":710},[478,162252,56079],{"class":495},[478,162254,162255],{"class":480,"line":1789},[478,162256,2966],{"emptyLinePlaceholder":640},[478,162258,162259],{"class":480,"line":1880},[478,162260,2966],{"emptyLinePlaceholder":640},[478,162262,162263],{"class":480,"line":1886},[478,162264,162265],{"class":714},"add_count()\n",[478,162267,162268,162270],{"class":480,"line":1898},[478,162269,30795],{"class":495},[478,162271,162272],{"class":714},"(count)\n",[19,162274,162275],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162277,162279],{"id":162278},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162281,162282],{},"一个函数中可以调用另一个函数。",[469,162284,162286],{"className":30758,"code":162285,"language":30760,"meta":54,"style":54},"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",[475,162287,162288,162297,162311,162315,162319,162328,162333,162353,162374,162378,162382,162386],{"__ignoreMap":54},[478,162289,162290,162292,162295],{"class":480,"line":481},[478,162291,32327],{"class":710},[478,162293,162294],{"class":484}," print_line",[478,162296,32333],{"class":714},[478,162298,162299,162301,162303,162305,162307,162309],{"class":480,"line":565},[478,162300,31679],{"class":495},[478,162302,263],{"class":714},[478,162304,32863],{"class":488},[478,162306,7084],{"class":710},[478,162308,79045],{"class":495},[478,162310,720],{"class":714},[478,162312,162313],{"class":480,"line":579},[478,162314,2966],{"emptyLinePlaceholder":640},[478,162316,162317],{"class":480,"line":593},[478,162318,2966],{"emptyLinePlaceholder":640},[478,162320,162321,162323,162326],{"class":480,"line":1769},[478,162322,32327],{"class":710},[478,162324,162325],{"class":484}," print_info",[478,162327,149755],{"class":714},[478,162329,162330],{"class":480,"line":1783},[478,162331,162332],{"class":714},"    print_line()\n",[478,162334,162335,162337,162339,162341,162343,162345,162347,162349,162351],{"class":480,"line":1789},[478,162336,31679],{"class":495},[478,162338,263],{"class":714},[478,162340,218],{"class":710},[478,162342,157062],{"class":488},[478,162344,1591],{"class":495},[478,162346,80190],{"class":714},[478,162348,1641],{"class":495},[478,162350,952],{"class":488},[478,162352,720],{"class":714},[478,162354,162355,162357,162359,162361,162364,162366,162368,162370,162372],{"class":480,"line":1880},[478,162356,31679],{"class":495},[478,162358,263],{"class":714},[478,162360,218],{"class":710},[478,162362,162363],{"class":488},"\"年龄:",[478,162365,1591],{"class":495},[478,162367,70601],{"class":714},[478,162369,1641],{"class":495},[478,162371,952],{"class":488},[478,162373,720],{"class":714},[478,162375,162376],{"class":480,"line":1886},[478,162377,162332],{"class":714},[478,162379,162380],{"class":480,"line":1898},[478,162381,2966],{"emptyLinePlaceholder":640},[478,162383,162384],{"class":480,"line":2180},[478,162385,2966],{"emptyLinePlaceholder":640},[478,162387,162388,162391,162393,162395,162397],{"class":480,"line":2185},[478,162389,162390],{"class":714},"print_info(",[478,162392,150268],{"class":488},[478,162394,13001],{"class":714},[478,162396,1348],{"class":495},[478,162398,720],{"class":714},[19,162400,162401],{},"这种方式可以把小功能组合成大功能。",[14,162403,162405],{"id":162404},"_511-参数检查","5.11 参数检查",[19,162407,162408],{},"函数内部可以检查参数是否合法。",[469,162410,162412],{"className":30758,"code":162411,"language":30760,"meta":54,"style":54},"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",[475,162413,162414,162423,162435,162441,162451,162455,162459,162476,162480,162492,162503,162509],{"__ignoreMap":54},[478,162415,162416,162418,162421],{"class":480,"line":481},[478,162417,32327],{"class":710},[478,162419,162420],{"class":484}," divide",[478,162422,151473],{"class":714},[478,162424,162425,162427,162429,162431,162433],{"class":480,"line":565},[478,162426,3667],{"class":710},[478,162428,11448],{"class":714},[478,162430,3515],{"class":710},[478,162432,4659],{"class":495},[478,162434,4305],{"class":714},[478,162436,162437,162439],{"class":480,"line":579},[478,162438,15317],{"class":710},[478,162440,152552],{"class":495},[478,162442,162443,162445,162447,162449],{"class":480,"line":593},[478,162444,4656],{"class":710},[478,162446,11435],{"class":714},[478,162448,1284],{"class":710},[478,162450,151484],{"class":714},[478,162452,162453],{"class":480,"line":1769},[478,162454,2966],{"emptyLinePlaceholder":640},[478,162456,162457],{"class":480,"line":1783},[478,162458,2966],{"emptyLinePlaceholder":640},[478,162460,162461,162463,162465,162468,162470,162472,162474],{"class":480,"line":1789},[478,162462,161686],{"class":714},[478,162464,759],{"class":710},[478,162466,162467],{"class":714}," divide(",[478,162469,1146],{"class":495},[478,162471,13001],{"class":714},[478,162473,895],{"class":495},[478,162475,720],{"class":714},[478,162477,162478],{"class":480,"line":1880},[478,162479,2966],{"emptyLinePlaceholder":640},[478,162481,162482,162484,162486,162488,162490],{"class":480,"line":1886},[478,162483,2099],{"class":710},[478,162485,161932],{"class":714},[478,162487,39307],{"class":710},[478,162489,39313],{"class":495},[478,162491,4305],{"class":714},[478,162493,162494,162496,162498,162501],{"class":480,"line":1898},[478,162495,31679],{"class":495},[478,162497,263],{"class":714},[478,162499,162500],{"class":488},"\"除数不能为0\"",[478,162502,720],{"class":714},[478,162504,162505,162507],{"class":480,"line":2180},[478,162506,2268],{"class":710},[478,162508,4305],{"class":714},[478,162510,162511,162513],{"class":480,"line":2185},[478,162512,31679],{"class":495},[478,162514,76965],{"class":714},[14,162516,162518],{"id":162517},"_512-类型提示","5.12 类型提示",[19,162520,162521],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[469,162523,162525],{"className":30758,"code":162524,"language":30760,"meta":54,"style":54},"def add(a: int, b: int) -> int:\n    return a + b\n",[475,162526,162527,162550],{"__ignoreMap":54},[478,162528,162529,162531,162533,162536,162538,162541,162543,162546,162548],{"class":480,"line":481},[478,162530,32327],{"class":710},[478,162532,5775],{"class":484},[478,162534,162535],{"class":714},"(a: ",[478,162537,717],{"class":495},[478,162539,162540],{"class":714},", b: ",[478,162542,717],{"class":495},[478,162544,162545],{"class":714},") -> ",[478,162547,717],{"class":495},[478,162549,4305],{"class":714},[478,162551,162552,162554,162556,162558],{"class":480,"line":565},[478,162553,4656],{"class":710},[478,162555,11435],{"class":714},[478,162557,1181],{"class":710},[478,162559,151484],{"class":714},[19,162561,162562],{},"字符串参数：",[469,162564,162566],{"className":30758,"code":162565,"language":30760,"meta":54,"style":54},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[475,162567,162568,162585],{"__ignoreMap":54},[478,162569,162570,162572,162574,162577,162579,162581,162583],{"class":480,"line":481},[478,162571,32327],{"class":710},[478,162573,161376],{"class":484},[478,162575,162576],{"class":714},"(name: ",[478,162578,1868],{"class":495},[478,162580,162545],{"class":714},[478,162582,96066],{"class":495},[478,162584,4305],{"class":714},[478,162586,162587,162589,162591,162593,162595,162597,162599,162601,162603],{"class":480,"line":565},[478,162588,31679],{"class":495},[478,162590,263],{"class":714},[478,162592,218],{"class":710},[478,162594,157434],{"class":488},[478,162596,1591],{"class":495},[478,162598,80190],{"class":714},[478,162600,1641],{"class":495},[478,162602,952],{"class":488},[478,162604,720],{"class":714},[19,162606,162607],{},"列表参数：",[469,162609,162611],{"className":30758,"code":162610,"language":30760,"meta":54,"style":54},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[475,162612,162613,162632,162640,162652,162661],{"__ignoreMap":54},[478,162614,162615,162617,162620,162623,162625,162628,162630],{"class":480,"line":481},[478,162616,32327],{"class":710},[478,162618,162619],{"class":484}," get_total",[478,162621,162622],{"class":714},"(numbers: list[",[478,162624,717],{"class":495},[478,162626,162627],{"class":714},"]) -> ",[478,162629,717],{"class":495},[478,162631,4305],{"class":714},[478,162633,162634,162636,162638],{"class":480,"line":565},[478,162635,159687],{"class":714},[478,162637,759],{"class":710},[478,162639,47713],{"class":495},[478,162641,162642,162644,162647,162649],{"class":480,"line":579},[478,162643,3767],{"class":710},[478,162645,162646],{"class":714}," number ",[478,162648,26423],{"class":710},[478,162650,162651],{"class":714}," numbers:\n",[478,162653,162654,162656,162658],{"class":480,"line":593},[478,162655,160362],{"class":714},[478,162657,10043],{"class":710},[478,162659,162660],{"class":714}," number\n",[478,162662,162663,162665],{"class":480,"line":1769},[478,162664,4656],{"class":710},[478,162666,162667],{"class":714}," total\n",[19,162669,162670],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162672,162674],{"id":162673},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[469,162676,162678],{"className":30758,"code":162677,"language":30760,"meta":54,"style":54},"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",[475,162679,162680,162690,162694,162698,162706,162717,162727,162737,162747,162757,162761,162765,162774,162796,162800,162804,162813,162819,162839,162851,162862,162866,162875,162886,162891,162895,162899,162908,162914,162933,162945,162955,162959,162970,162980,162984,162992,163003,163007,163011,163015,163023,163028,163042,163046,163058,163063,163075,163080,163092,163097,163109,163119,163123,163129],{"__ignoreMap":54},[478,162681,162682,162685,162687],{"class":480,"line":481},[478,162683,162684],{"class":714},"balance ",[478,162686,759],{"class":710},[478,162688,162689],{"class":495}," 1000\n",[478,162691,162692],{"class":480,"line":565},[478,162693,2966],{"emptyLinePlaceholder":640},[478,162695,162696],{"class":480,"line":579},[478,162697,2966],{"emptyLinePlaceholder":640},[478,162699,162700,162702,162704],{"class":480,"line":593},[478,162701,32327],{"class":710},[478,162703,152413],{"class":484},[478,162705,32333],{"class":714},[478,162707,162708,162710,162712,162715],{"class":480,"line":1769},[478,162709,31679],{"class":495},[478,162711,263],{"class":714},[478,162713,162714],{"class":488},"\"====== ATM ======\"",[478,162716,720],{"class":714},[478,162718,162719,162721,162723,162725],{"class":480,"line":1783},[478,162720,31679],{"class":495},[478,162722,263],{"class":714},[478,162724,161028],{"class":488},[478,162726,720],{"class":714},[478,162728,162729,162731,162733,162735],{"class":480,"line":1789},[478,162730,31679],{"class":495},[478,162732,263],{"class":714},[478,162734,161039],{"class":488},[478,162736,720],{"class":714},[478,162738,162739,162741,162743,162745],{"class":480,"line":1880},[478,162740,31679],{"class":495},[478,162742,263],{"class":714},[478,162744,161050],{"class":488},[478,162746,720],{"class":714},[478,162748,162749,162751,162753,162755],{"class":480,"line":1886},[478,162750,31679],{"class":495},[478,162752,263],{"class":714},[478,162754,161061],{"class":488},[478,162756,720],{"class":714},[478,162758,162759],{"class":480,"line":1898},[478,162760,2966],{"emptyLinePlaceholder":640},[478,162762,162763],{"class":480,"line":2180},[478,162764,2966],{"emptyLinePlaceholder":640},[478,162766,162767,162769,162772],{"class":480,"line":2185},[478,162768,32327],{"class":710},[478,162770,162771],{"class":484}," show_balance",[478,162773,32333],{"class":714},[478,162775,162776,162778,162780,162782,162785,162787,162790,162792,162794],{"class":480,"line":2191},[478,162777,31679],{"class":495},[478,162779,263],{"class":714},[478,162781,218],{"class":710},[478,162783,162784],{"class":488},"\"当前余额:",[478,162786,1591],{"class":495},[478,162788,162789],{"class":714},"balance",[478,162791,1641],{"class":495},[478,162793,157392],{"class":488},[478,162795,720],{"class":714},[478,162797,162798],{"class":480,"line":2196},[478,162799,2966],{"emptyLinePlaceholder":640},[478,162801,162802],{"class":480,"line":2210},[478,162803,2966],{"emptyLinePlaceholder":640},[478,162805,162806,162808,162811],{"class":480,"line":2215},[478,162807,32327],{"class":710},[478,162809,162810],{"class":484}," save_money",[478,162812,32333],{"class":714},[478,162814,162815,162817],{"class":480,"line":2221},[478,162816,162241],{"class":710},[478,162818,150479],{"class":714},[478,162820,162821,162824,162826,162828,162830,162832,162834,162837],{"class":480,"line":2241},[478,162822,162823],{"class":714},"    money ",[478,162825,759],{"class":710},[478,162827,110177],{"class":495},[478,162829,263],{"class":714},[478,162831,54201],{"class":495},[478,162833,263],{"class":714},[478,162835,162836],{"class":488},"\"请输入存款金额:\"",[478,162838,30877],{"class":714},[478,162840,162841,162843,162845,162847,162849],{"class":480,"line":2246},[478,162842,3667],{"class":710},[478,162844,150522],{"class":714},[478,162846,2156],{"class":710},[478,162848,4659],{"class":495},[478,162850,4305],{"class":714},[478,162852,162853,162855,162857,162860],{"class":480,"line":2260},[478,162854,32831],{"class":495},[478,162856,263],{"class":714},[478,162858,162859],{"class":488},"\"金额必须大于0\"",[478,162861,720],{"class":714},[478,162863,162864],{"class":480,"line":2265},[478,162865,152741],{"class":710},[478,162867,162868,162871,162873],{"class":480,"line":2294},[478,162869,162870],{"class":714},"    balance ",[478,162872,10043],{"class":710},[478,162874,150555],{"class":714},[478,162876,162877,162879,162881,162884],{"class":480,"line":2299},[478,162878,31679],{"class":495},[478,162880,263],{"class":714},[478,162882,162883],{"class":488},"\"存款成功\"",[478,162885,720],{"class":714},[478,162887,162888],{"class":480,"line":2316},[478,162889,162890],{"class":714},"    show_balance()\n",[478,162892,162893],{"class":480,"line":2321},[478,162894,2966],{"emptyLinePlaceholder":640},[478,162896,162897],{"class":480,"line":2326},[478,162898,2966],{"emptyLinePlaceholder":640},[478,162900,162901,162903,162906],{"class":480,"line":2331},[478,162902,32327],{"class":710},[478,162904,162905],{"class":484}," withdraw_money",[478,162907,32333],{"class":714},[478,162909,162910,162912],{"class":480,"line":2345},[478,162911,162241],{"class":710},[478,162913,150479],{"class":714},[478,162915,162916,162918,162920,162922,162924,162926,162928,162931],{"class":480,"line":2350},[478,162917,162823],{"class":714},[478,162919,759],{"class":710},[478,162921,110177],{"class":495},[478,162923,263],{"class":714},[478,162925,54201],{"class":495},[478,162927,263],{"class":714},[478,162929,162930],{"class":488},"\"请输入取款金额:\"",[478,162932,30877],{"class":714},[478,162934,162935,162937,162939,162941,162943],{"class":480,"line":3143},[478,162936,3667],{"class":710},[478,162938,150522],{"class":714},[478,162940,2156],{"class":710},[478,162942,4659],{"class":495},[478,162944,4305],{"class":714},[478,162946,162947,162949,162951,162953],{"class":480,"line":3157},[478,162948,32831],{"class":495},[478,162950,263],{"class":714},[478,162952,162859],{"class":488},[478,162954,720],{"class":714},[478,162956,162957],{"class":480,"line":3165},[478,162958,152741],{"class":710},[478,162960,162961,162963,162965,162967],{"class":480,"line":3170},[478,162962,3667],{"class":710},[478,162964,150522],{"class":714},[478,162966,1655],{"class":710},[478,162968,162969],{"class":714}," balance:\n",[478,162971,162972,162974,162976,162978],{"class":480,"line":3176},[478,162973,32831],{"class":495},[478,162975,263],{"class":714},[478,162977,150617],{"class":488},[478,162979,720],{"class":714},[478,162981,162982],{"class":480,"line":3182},[478,162983,152741],{"class":710},[478,162985,162986,162988,162990],{"class":480,"line":3187},[478,162987,162870],{"class":714},[478,162989,150632],{"class":710},[478,162991,150555],{"class":714},[478,162993,162994,162996,162998,163001],{"class":480,"line":8514},[478,162995,31679],{"class":495},[478,162997,263],{"class":714},[478,162999,163000],{"class":488},"\"取款成功\"",[478,163002,720],{"class":714},[478,163004,163005],{"class":480,"line":8538},[478,163006,162890],{"class":714},[478,163008,163009],{"class":480,"line":8543},[478,163010,2966],{"emptyLinePlaceholder":640},[478,163012,163013],{"class":480,"line":8549},[478,163014,2966],{"emptyLinePlaceholder":640},[478,163016,163017,163019,163021],{"class":480,"line":8576},[478,163018,109043],{"class":710},[478,163020,95672],{"class":495},[478,163022,4305],{"class":714},[478,163024,163025],{"class":480,"line":8581},[478,163026,163027],{"class":714},"    show_menu()\n",[478,163029,163030,163032,163034,163036,163038,163040],{"class":480,"line":8587},[478,163031,161072],{"class":714},[478,163033,759],{"class":710},[478,163035,60985],{"class":495},[478,163037,263],{"class":714},[478,163039,153453],{"class":488},[478,163041,720],{"class":714},[478,163043,163044],{"class":480,"line":8599},[478,163045,2966],{"emptyLinePlaceholder":640},[478,163047,163048,163050,163052,163054,163056],{"class":480,"line":8611},[478,163049,3667],{"class":710},[478,163051,153466],{"class":714},[478,163053,3515],{"class":710},[478,163055,153471],{"class":488},[478,163057,4305],{"class":714},[478,163059,163060],{"class":480,"line":8623},[478,163061,163062],{"class":714},"        show_balance()\n",[478,163064,163065,163067,163069,163071,163073],{"class":480,"line":10282},[478,163066,39673],{"class":710},[478,163068,153466],{"class":714},[478,163070,3515],{"class":710},[478,163072,153490],{"class":488},[478,163074,4305],{"class":714},[478,163076,163077],{"class":480,"line":10307},[478,163078,163079],{"class":714},"        save_money()\n",[478,163081,163082,163084,163086,163088,163090],{"class":480,"line":10330},[478,163083,39673],{"class":710},[478,163085,153466],{"class":714},[478,163087,3515],{"class":710},[478,163089,153508],{"class":488},[478,163091,4305],{"class":714},[478,163093,163094],{"class":480,"line":10354},[478,163095,163096],{"class":714},"        withdraw_money()\n",[478,163098,163099,163101,163103,163105,163107],{"class":480,"line":10359},[478,163100,39673],{"class":710},[478,163102,153466],{"class":714},[478,163104,3515],{"class":710},[478,163106,153562],{"class":488},[478,163108,4305],{"class":714},[478,163110,163111,163113,163115,163117],{"class":480,"line":10364},[478,163112,32831],{"class":495},[478,163114,263],{"class":714},[478,163116,153573],{"class":488},[478,163118,720],{"class":714},[478,163120,163121],{"class":480,"line":10369},[478,163122,32007],{"class":710},[478,163124,163125,163127],{"class":480,"line":10378},[478,163126,158402],{"class":710},[478,163128,4305],{"class":714},[478,163130,163131,163133,163135,163137],{"class":480,"line":10383},[478,163132,32831],{"class":495},[478,163134,263],{"class":714},[478,163136,153594],{"class":488},[478,163138,720],{"class":714},[19,163140,163141],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163143,163145],{"id":163144},"_514-易错点","5.14 易错点",[29,163147,163148,163151,163154,163159,163164,163167],{},[32,163149,163150],{},"函数定义后必须调用才会执行。",[32,163152,163153],{},"函数名后面有括号才是调用。",[32,163155,163156,163158],{},[475,163157,17611],{}," 后面的代码不会执行。",[32,163160,163161,163162,28765],{},"没有返回值的函数默认返回 ",[475,163163,96066],{},[32,163165,163166],{},"局部变量不能在函数外部访问。",[32,163168,163169,163170,163172],{},"不要滥用 ",[475,163171,162206],{},"，更好的方式是让函数返回新值。",[19,163174,163175,163176,163178],{},"例如不用 ",[475,163177,162206],{}," 改写存款：",[469,163180,163182],{"className":30758,"code":163181,"language":30760,"meta":54,"style":54},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[475,163183,163184,163193,163204,163208,163212,163220,163233],{"__ignoreMap":54},[478,163185,163186,163188,163190],{"class":480,"line":481},[478,163187,32327],{"class":710},[478,163189,162810],{"class":484},[478,163191,163192],{"class":714},"(balance, money):\n",[478,163194,163195,163197,163200,163202],{"class":480,"line":565},[478,163196,4656],{"class":710},[478,163198,163199],{"class":714}," balance ",[478,163201,1181],{"class":710},[478,163203,150555],{"class":714},[478,163205,163206],{"class":480,"line":579},[478,163207,2966],{"emptyLinePlaceholder":640},[478,163209,163210],{"class":480,"line":593},[478,163211,2966],{"emptyLinePlaceholder":640},[478,163213,163214,163216,163218],{"class":480,"line":1769},[478,163215,162684],{"class":714},[478,163217,759],{"class":710},[478,163219,162689],{"class":495},[478,163221,163222,163224,163226,163229,163231],{"class":480,"line":1783},[478,163223,162684],{"class":714},[478,163225,759],{"class":710},[478,163227,163228],{"class":714}," save_money(balance, ",[478,163230,2289],{"class":495},[478,163232,720],{"class":714},[478,163234,163235,163237],{"class":480,"line":1789},[478,163236,30795],{"class":495},[478,163238,163239],{"class":714},"(balance)\n",[14,163241,163243],{"id":163242},"_515-本章练习","5.15 本章练习",[29,163245,163246,163253,163259,163265,163271],{},[32,163247,163248,163249,163252],{},"定义函数 ",[475,163250,163251],{},"print_student(name, age)","，输出学生信息。",[32,163254,163248,163255,163258],{},[475,163256,163257],{},"get_max(a, b, c)","，返回三个数中的最大值。",[32,163260,163248,163261,163264],{},[475,163262,163263],{},"is_even(num)","，判断一个数是否为偶数。",[32,163266,163248,163267,163270],{},[475,163268,163269],{},"calculate_bmi(weight, height)","，返回 BMI。",[32,163272,163273],{},"把第 4 章的菜单程序拆分成多个函数。",[617,163275,163276],{},"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":54,"searchDepth":565,"depth":565,"links":163278},[163279,163280,163281,163282,163283,163284,163285,163286,163287,163291,163292,163293,163294,163295,163296],{"id":161299,"depth":565,"text":161300},{"id":161340,"depth":565,"text":161341},{"id":161430,"depth":565,"text":161431},{"id":161511,"depth":565,"text":161512},{"id":161644,"depth":565,"text":161645},{"id":161766,"depth":565,"text":161767},{"id":161888,"depth":565,"text":161889},{"id":161965,"depth":565,"text":161966},{"id":162087,"depth":565,"text":162088,"children":163288},[163289,163290],{"id":162091,"depth":579,"text":162092},{"id":162149,"depth":579,"text":162150},{"id":162278,"depth":565,"text":162279},{"id":162404,"depth":565,"text":162405},{"id":162517,"depth":565,"text":162518},{"id":162673,"depth":565,"text":162674},{"id":163144,"depth":565,"text":163145},{"id":163242,"depth":565,"text":163243},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161291,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163303,"title":163304,"body":163305,"description":23942,"extension":638,"meta":166349,"navigation":640,"path":166350,"seo":166351,"stem":166352,"__hash__":166353},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163306,"toc":166330},[163307,163310,163314,163317,163320,163424,163427,163431,163434,163514,163517,163521,163524,163584,163587,163623,163626,163641,163645,163718,163721,163776,163779,163849,163852,163936,163946,164004,164008,164053,164056,164082,164085,164191,164195,164198,164240,164243,164307,164310,164314,164317,164378,164381,164411,164414,164452,164456,164459,164468,164471,164595,164598,164639,164643,164646,164657,164697,164700,164715,164720,164723,164790,164793,164883,164887,164890,164938,164941,164968,164970,165000,165003,165023,165026,165057,165060,165093,165097,165100,165124,165127,165151,165154,165178,165182,165185,165315,165318,165398,165401,165476,165480,165483,165533,165536,165578,165581,165605,165607,165631,165634,165689,165692,165758,165762,165765,165768,165806,165809,165862,165865,165911,165914,165947,165950,165954,166273,166277,166306,166310,166327],[10,163308,163304],{"id":163309},"_6-数据容器",[14,163311,163313],{"id":163312},"_61-什么是数据容器","6.1 什么是数据容器",[19,163315,163316],{},"数据容器用于一次保存多个数据。",[19,163318,163319],{},"常见容器：",[371,163321,163322,163339],{},[374,163323,163324],{},[377,163325,163326,163328,163331,163334,163337],{},[380,163327,26151],{},[380,163329,163330],{},"是否有序",[380,163332,163333],{},"是否可变",[380,163335,163336],{},"是否允许重复",[380,163338,27872],{},[388,163340,163341,163359,163375,163390,163407],{},[377,163342,163343,163346,163349,163352,163355],{},[393,163344,163345],{},"list列表",[393,163347,163348],{},"有序",[393,163350,163351],{},"可变",[393,163353,163354],{},"允许",[393,163356,163357],{},[475,163358,155637],{},[377,163360,163361,163364,163366,163369,163371],{},[393,163362,163363],{},"tuple元组",[393,163365,163348],{},[393,163367,163368],{},"不可变",[393,163370,163354],{},[393,163372,163373],{},[475,163374,155650],{},[377,163376,163377,163380,163382,163384,163386],{},[393,163378,163379],{},"str字符串",[393,163381,163348],{},[393,163383,163368],{},[393,163385,163354],{},[393,163387,163388],{},[475,163389,156260],{},[377,163391,163392,163395,163398,163400,163403],{},[393,163393,163394],{},"set集合",[393,163396,163397],{},"无序",[393,163399,163351],{},[393,163401,163402],{},"不允许",[393,163404,163405],{},[475,163406,155675],{},[377,163408,163409,163412,163414,163416,163419],{},[393,163410,163411],{},"dict字典",[393,163413,163348],{},[393,163415,163351],{},[393,163417,163418],{},"key不允许重复",[393,163420,163421],{},[475,163422,163423],{},"{\"name\": \"小明\"}",[19,163425,163426],{},"Python 3.7 之后，字典保持插入顺序。",[14,163428,163430],{"id":163429},"_62-列表list","6.2 列表list",[19,163432,163433],{},"列表用于保存一组有顺序的数据。",[469,163435,163437],{"className":30758,"code":163436,"language":30760,"meta":54,"style":54},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[475,163438,163439,163459,163484,163505],{"__ignoreMap":54},[478,163440,163441,163443,163445,163447,163449,163451,163453,163455,163457],{"class":480,"line":481},[478,163442,160760],{"class":714},[478,163444,759],{"class":710},[478,163446,52606],{"class":714},[478,163448,150268],{"class":488},[478,163450,13001],{"class":714},[478,163452,151316],{"class":488},[478,163454,13001],{"class":714},[478,163456,160111],{"class":488},[478,163458,33626],{"class":714},[478,163460,163461,163464,163466,163468,163470,163472,163474,163476,163478,163480,163482],{"class":480,"line":565},[478,163462,163463],{"class":714},"numbers ",[478,163465,759],{"class":710},[478,163467,52606],{"class":714},[478,163469,193],{"class":495},[478,163471,13001],{"class":714},[478,163473,789],{"class":495},[478,163475,13001],{"class":714},[478,163477,783],{"class":495},[478,163479,13001],{"class":714},[478,163481,994],{"class":495},[478,163483,33626],{"class":714},[478,163485,163486,163489,163491,163493,163495,163497,163499,163501,163503],{"class":480,"line":579},[478,163487,163488],{"class":714},"mixed ",[478,163490,759],{"class":710},[478,163492,52606],{"class":714},[478,163494,150268],{"class":488},[478,163496,13001],{"class":714},[478,163498,1348],{"class":495},[478,163500,13001],{"class":714},[478,163502,31856],{"class":495},[478,163504,33626],{"class":714},[478,163506,163507,163510,163512],{"class":480,"line":593},[478,163508,163509],{"class":714},"empty ",[478,163511,759],{"class":710},[478,163513,52218],{"class":714},[19,163515,163516],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163518,163520],{"id":163519},"_63-列表索引","6.3 列表索引",[19,163522,163523],{},"正向索引从 0 开始：",[469,163525,163527],{"className":30758,"code":163526,"language":30760,"meta":54,"style":54},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[475,163528,163529,163549,163553,163564,163574],{"__ignoreMap":54},[478,163530,163531,163533,163535,163537,163539,163541,163543,163545,163547],{"class":480,"line":481},[478,163532,160760],{"class":714},[478,163534,759],{"class":710},[478,163536,52606],{"class":714},[478,163538,150268],{"class":488},[478,163540,13001],{"class":714},[478,163542,151316],{"class":488},[478,163544,13001],{"class":714},[478,163546,160111],{"class":488},[478,163548,33626],{"class":714},[478,163550,163551],{"class":480,"line":565},[478,163552,2966],{"emptyLinePlaceholder":640},[478,163554,163555,163557,163560,163562],{"class":480,"line":579},[478,163556,30795],{"class":495},[478,163558,163559],{"class":714},"(names[",[478,163561,895],{"class":495},[478,163563,5223],{"class":714},[478,163565,163566,163568,163570,163572],{"class":480,"line":593},[478,163567,30795],{"class":495},[478,163569,163559],{"class":714},[478,163571,193],{"class":495},[478,163573,5223],{"class":714},[478,163575,163576,163578,163580,163582],{"class":480,"line":1769},[478,163577,30795],{"class":495},[478,163579,163559],{"class":714},[478,163581,789],{"class":495},[478,163583,5223],{"class":714},[19,163585,163586],{},"反向索引从 -1 开始：",[469,163588,163590],{"className":30758,"code":163589,"language":30760,"meta":54,"style":54},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[475,163591,163592,163608],{"__ignoreMap":54},[478,163593,163594,163596,163598,163600,163602,163605],{"class":480,"line":481},[478,163595,30795],{"class":495},[478,163597,163559],{"class":714},[478,163599,1232],{"class":710},[478,163601,193],{"class":495},[478,163603,163604],{"class":714},"])  ",[478,163606,163607],{"class":770},"# 小刚\n",[478,163609,163610,163612,163614,163616,163618,163620],{"class":480,"line":565},[478,163611,30795],{"class":495},[478,163613,163559],{"class":714},[478,163615,1232],{"class":710},[478,163617,789],{"class":495},[478,163619,163604],{"class":714},[478,163621,163622],{"class":770},"# 小红\n",[19,163624,163625],{},"索引越界会报错：",[469,163627,163629],{"className":30758,"code":163628,"language":30760,"meta":54,"style":54},"print(names[3])\n",[475,163630,163631],{"__ignoreMap":54},[478,163632,163633,163635,163637,163639],{"class":480,"line":481},[478,163634,30795],{"class":495},[478,163636,163559],{"class":714},[478,163638,783],{"class":495},[478,163640,5223],{"class":714},[14,163642,163644],{"id":163643},"_64-列表常用方法","6.4 列表常用方法",[469,163646,163648],{"className":30758,"code":163647,"language":30760,"meta":54,"style":54},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[475,163649,163650,163666,163670,163679,163693,163707,163711],{"__ignoreMap":54},[478,163651,163652,163654,163656,163658,163660,163662,163664],{"class":480,"line":481},[478,163653,160760],{"class":714},[478,163655,759],{"class":710},[478,163657,52606],{"class":714},[478,163659,150268],{"class":488},[478,163661,13001],{"class":714},[478,163663,151316],{"class":488},[478,163665,33626],{"class":714},[478,163667,163668],{"class":480,"line":565},[478,163669,2966],{"emptyLinePlaceholder":640},[478,163671,163672,163675,163677],{"class":480,"line":579},[478,163673,163674],{"class":714},"names.append(",[478,163676,160111],{"class":488},[478,163678,720],{"class":714},[478,163680,163681,163684,163686,163688,163691],{"class":480,"line":593},[478,163682,163683],{"class":714},"names.insert(",[478,163685,193],{"class":495},[478,163687,13001],{"class":714},[478,163689,163690],{"class":488},"\"小李\"",[478,163692,720],{"class":714},[478,163694,163695,163698,163700,163702,163705],{"class":480,"line":1769},[478,163696,163697],{"class":714},"names.extend([",[478,163699,9249],{"class":488},[478,163701,13001],{"class":714},[478,163703,163704],{"class":488},"\"小赵\"",[478,163706,5223],{"class":714},[478,163708,163709],{"class":480,"line":1783},[478,163710,2966],{"emptyLinePlaceholder":640},[478,163712,163713,163715],{"class":480,"line":1789},[478,163714,30795],{"class":495},[478,163716,163717],{"class":714},"(names)\n",[19,163719,163720],{},"删除元素：",[469,163722,163724],{"className":30758,"code":163723,"language":30760,"meta":54,"style":54},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[475,163725,163726,163735,163745,163759,163771],{"__ignoreMap":54},[478,163727,163728,163731,163733],{"class":480,"line":481},[478,163729,163730],{"class":714},"names.remove(",[478,163732,151316],{"class":488},[478,163734,720],{"class":714},[478,163736,163737,163740,163742],{"class":480,"line":565},[478,163738,163739],{"class":714},"last ",[478,163741,759],{"class":710},[478,163743,163744],{"class":714}," names.pop()\n",[478,163746,163747,163750,163752,163755,163757],{"class":480,"line":579},[478,163748,163749],{"class":714},"first ",[478,163751,759],{"class":710},[478,163753,163754],{"class":714}," names.pop(",[478,163756,895],{"class":495},[478,163758,720],{"class":714},[478,163760,163761,163764,163767,163769],{"class":480,"line":593},[478,163762,163763],{"class":710},"del",[478,163765,163766],{"class":714}," names[",[478,163768,895],{"class":495},[478,163770,33626],{"class":714},[478,163772,163773],{"class":480,"line":1769},[478,163774,163775],{"class":714},"names.clear()\n",[19,163777,163778],{},"查询和统计：",[469,163780,163782],{"className":30758,"code":163781,"language":30760,"meta":54,"style":54},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[475,163783,163784,163812,163816,163827,163838],{"__ignoreMap":54},[478,163785,163786,163788,163790,163792,163794,163796,163798,163800,163802,163804,163806,163808,163810],{"class":480,"line":481},[478,163787,163463],{"class":714},[478,163789,759],{"class":710},[478,163791,52606],{"class":714},[478,163793,193],{"class":495},[478,163795,13001],{"class":714},[478,163797,789],{"class":495},[478,163799,13001],{"class":714},[478,163801,783],{"class":495},[478,163803,13001],{"class":714},[478,163805,789],{"class":495},[478,163807,13001],{"class":714},[478,163809,994],{"class":495},[478,163811,33626],{"class":714},[478,163813,163814],{"class":480,"line":565},[478,163815,2966],{"emptyLinePlaceholder":640},[478,163817,163818,163820,163823,163825],{"class":480,"line":579},[478,163819,30795],{"class":495},[478,163821,163822],{"class":714},"(numbers.index(",[478,163824,783],{"class":495},[478,163826,30877],{"class":714},[478,163828,163829,163831,163834,163836],{"class":480,"line":593},[478,163830,30795],{"class":495},[478,163832,163833],{"class":714},"(numbers.count(",[478,163835,789],{"class":495},[478,163837,30877],{"class":714},[478,163839,163840,163842,163844,163846],{"class":480,"line":1769},[478,163841,30795],{"class":495},[478,163843,263],{"class":714},[478,163845,7924],{"class":495},[478,163847,163848],{"class":714},"(numbers))\n",[19,163850,163851],{},"排序：",[469,163853,163855],{"className":30758,"code":163854,"language":30760,"meta":54,"style":54},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[475,163856,163857,163881,163885,163890,163897,163901,163915,163921,163925,163930],{"__ignoreMap":54},[478,163858,163859,163861,163863,163865,163867,163869,163871,163873,163875,163877,163879],{"class":480,"line":481},[478,163860,163463],{"class":714},[478,163862,759],{"class":710},[478,163864,52606],{"class":714},[478,163866,783],{"class":495},[478,163868,13001],{"class":714},[478,163870,193],{"class":495},[478,163872,13001],{"class":714},[478,163874,1020],{"class":495},[478,163876,13001],{"class":714},[478,163878,789],{"class":495},[478,163880,33626],{"class":714},[478,163882,163883],{"class":480,"line":565},[478,163884,2966],{"emptyLinePlaceholder":640},[478,163886,163887],{"class":480,"line":579},[478,163888,163889],{"class":714},"numbers.sort()\n",[478,163891,163892,163894],{"class":480,"line":593},[478,163893,30795],{"class":495},[478,163895,163896],{"class":714},"(numbers)\n",[478,163898,163899],{"class":480,"line":1769},[478,163900,2966],{"emptyLinePlaceholder":640},[478,163902,163903,163906,163909,163911,163913],{"class":480,"line":1783},[478,163904,163905],{"class":714},"numbers.sort(",[478,163907,163908],{"class":5782},"reverse",[478,163910,759],{"class":710},[478,163912,31856],{"class":495},[478,163914,720],{"class":714},[478,163916,163917,163919],{"class":480,"line":1789},[478,163918,30795],{"class":495},[478,163920,163896],{"class":714},[478,163922,163923],{"class":480,"line":1880},[478,163924,2966],{"emptyLinePlaceholder":640},[478,163926,163927],{"class":480,"line":1886},[478,163928,163929],{"class":714},"numbers.reverse()\n",[478,163931,163932,163934],{"class":480,"line":1898},[478,163933,30795],{"class":495},[478,163935,163896],{"class":714},[19,163937,163938,163941,163942,163945],{},[475,163939,163940],{},"sort()"," 会修改原列表，",[475,163943,163944],{},"sorted()"," 返回新列表。",[469,163947,163949],{"className":30758,"code":163948,"language":30760,"meta":54,"style":54},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[475,163950,163951,163975,163987,163991,163997],{"__ignoreMap":54},[478,163952,163953,163955,163957,163959,163961,163963,163965,163967,163969,163971,163973],{"class":480,"line":481},[478,163954,163463],{"class":714},[478,163956,759],{"class":710},[478,163958,52606],{"class":714},[478,163960,783],{"class":495},[478,163962,13001],{"class":714},[478,163964,193],{"class":495},[478,163966,13001],{"class":714},[478,163968,1020],{"class":495},[478,163970,13001],{"class":714},[478,163972,789],{"class":495},[478,163974,33626],{"class":714},[478,163976,163977,163980,163982,163985],{"class":480,"line":565},[478,163978,163979],{"class":714},"new_numbers ",[478,163981,759],{"class":710},[478,163983,163984],{"class":495}," sorted",[478,163986,163896],{"class":714},[478,163988,163989],{"class":480,"line":579},[478,163990,2966],{"emptyLinePlaceholder":640},[478,163992,163993,163995],{"class":480,"line":593},[478,163994,30795],{"class":495},[478,163996,163896],{"class":714},[478,163998,163999,164001],{"class":480,"line":1769},[478,164000,30795],{"class":495},[478,164002,164003],{"class":714},"(new_numbers)\n",[14,164005,164007],{"id":164006},"_65-列表遍历","6.5 列表遍历",[469,164009,164011],{"className":30758,"code":164010,"language":30760,"meta":54,"style":54},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[475,164012,164013,164033,164037,164047],{"__ignoreMap":54},[478,164014,164015,164017,164019,164021,164023,164025,164027,164029,164031],{"class":480,"line":481},[478,164016,160760],{"class":714},[478,164018,759],{"class":710},[478,164020,52606],{"class":714},[478,164022,150268],{"class":488},[478,164024,13001],{"class":714},[478,164026,151316],{"class":488},[478,164028,13001],{"class":714},[478,164030,160111],{"class":488},[478,164032,33626],{"class":714},[478,164034,164035],{"class":480,"line":565},[478,164036,2966],{"emptyLinePlaceholder":640},[478,164038,164039,164041,164043,164045],{"class":480,"line":579},[478,164040,3591],{"class":710},[478,164042,160796],{"class":714},[478,164044,26423],{"class":710},[478,164046,160801],{"class":714},[478,164048,164049,164051],{"class":480,"line":593},[478,164050,31679],{"class":495},[478,164052,151040],{"class":714},[19,164054,164055],{},"需要索引时：",[469,164057,164059],{"className":30758,"code":164058,"language":30760,"meta":54,"style":54},"for index, name in enumerate(names):\n    print(index, name)\n",[475,164060,164061,164075],{"__ignoreMap":54},[478,164062,164063,164065,164068,164070,164072],{"class":480,"line":481},[478,164064,3591],{"class":710},[478,164066,164067],{"class":714}," index, name ",[478,164069,26423],{"class":710},[478,164071,31986],{"class":495},[478,164073,164074],{"class":714},"(names):\n",[478,164076,164077,164079],{"class":480,"line":565},[478,164078,31679],{"class":495},[478,164080,164081],{"class":714},"(index, name)\n",[19,164083,164084],{},"统计总分：",[469,164086,164088],{"className":30758,"code":164087,"language":30760,"meta":54,"style":54},"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",[475,164089,164090,164115,164123,164127,164138,164146,164150,164167],{"__ignoreMap":54},[478,164091,164092,164095,164097,164099,164101,164103,164105,164107,164109,164111,164113],{"class":480,"line":481},[478,164093,164094],{"class":714},"scores ",[478,164096,759],{"class":710},[478,164098,52606],{"class":714},[478,164100,1557],{"class":495},[478,164102,13001],{"class":714},[478,164104,1431],{"class":495},[478,164106,13001],{"class":714},[478,164108,955],{"class":495},[478,164110,13001],{"class":714},[478,164112,1261],{"class":495},[478,164114,33626],{"class":714},[478,164116,164117,164119,164121],{"class":480,"line":565},[478,164118,157640],{"class":714},[478,164120,759],{"class":710},[478,164122,47713],{"class":495},[478,164124,164125],{"class":480,"line":579},[478,164126,2966],{"emptyLinePlaceholder":640},[478,164128,164129,164131,164133,164135],{"class":480,"line":593},[478,164130,3591],{"class":710},[478,164132,158163],{"class":714},[478,164134,26423],{"class":710},[478,164136,164137],{"class":714}," scores:\n",[478,164139,164140,164142,164144],{"class":480,"line":1769},[478,164141,159687],{"class":714},[478,164143,10043],{"class":710},[478,164145,2147],{"class":714},[478,164147,164148],{"class":480,"line":1783},[478,164149,2966],{"emptyLinePlaceholder":640},[478,164151,164152,164155,164157,164160,164162,164164],{"class":480,"line":1789},[478,164153,164154],{"class":714},"avg ",[478,164156,759],{"class":710},[478,164158,164159],{"class":714}," total ",[478,164161,1284],{"class":710},[478,164163,7897],{"class":495},[478,164165,164166],{"class":714},"(scores)\n",[478,164168,164169,164171,164173,164175,164178,164180,164183,164185,164187,164189],{"class":480,"line":1880},[478,164170,30795],{"class":495},[478,164172,263],{"class":714},[478,164174,218],{"class":710},[478,164176,164177],{"class":488},"\"平均分:",[478,164179,1591],{"class":495},[478,164181,164182],{"class":714},"avg",[478,164184,157539],{"class":710},[478,164186,1641],{"class":495},[478,164188,952],{"class":488},[478,164190,720],{"class":714},[14,164192,164194],{"id":164193},"_66-元组tuple","6.6 元组tuple",[19,164196,164197],{},"元组和列表类似，但不可修改。",[469,164199,164201],{"className":30758,"code":164200,"language":30760,"meta":54,"style":54},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[475,164202,164203,164220],{"__ignoreMap":54},[478,164204,164205,164208,164210,164212,164214,164216,164218],{"class":480,"line":481},[478,164206,164207],{"class":714},"point ",[478,164209,759],{"class":710},[478,164211,219],{"class":714},[478,164213,1146],{"class":495},[478,164215,13001],{"class":714},[478,164217,1396],{"class":495},[478,164219,720],{"class":714},[478,164221,164222,164224,164226,164228,164230,164232,164234,164236,164238],{"class":480,"line":565},[478,164223,116694],{"class":714},[478,164225,759],{"class":710},[478,164227,219],{"class":714},[478,164229,150268],{"class":488},[478,164231,13001],{"class":714},[478,164233,1348],{"class":495},[478,164235,13001],{"class":714},[478,164237,69649],{"class":488},[478,164239,720],{"class":714},[19,164241,164242],{},"单元素元组必须加逗号：",[469,164244,164246],{"className":30758,"code":164245,"language":30760,"meta":54,"style":54},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[475,164247,164248,164262,164275,164279,164293],{"__ignoreMap":54},[478,164249,164250,164253,164255,164257,164259],{"class":480,"line":481},[478,164251,164252],{"class":714},"t1 ",[478,164254,759],{"class":710},[478,164256,219],{"class":714},[478,164258,1146],{"class":495},[478,164260,164261],{"class":714},",)\n",[478,164263,164264,164267,164269,164271,164273],{"class":480,"line":565},[478,164265,164266],{"class":714},"t2 ",[478,164268,759],{"class":710},[478,164270,219],{"class":714},[478,164272,1146],{"class":495},[478,164274,720],{"class":714},[478,164276,164277],{"class":480,"line":579},[478,164278,2966],{"emptyLinePlaceholder":640},[478,164280,164281,164283,164285,164287,164290],{"class":480,"line":593},[478,164282,30795],{"class":495},[478,164284,263],{"class":714},[478,164286,103487],{"class":495},[478,164288,164289],{"class":714},"(t1))  ",[478,164291,164292],{"class":770},"# tuple\n",[478,164294,164295,164297,164299,164301,164304],{"class":480,"line":1769},[478,164296,30795],{"class":495},[478,164298,263],{"class":714},[478,164300,103487],{"class":495},[478,164302,164303],{"class":714},"(t2))  ",[478,164305,164306],{"class":770},"# int\n",[19,164308,164309],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164311,164313],{"id":164312},"_67-字符串str","6.7 字符串str",[19,164315,164316],{},"字符串也是序列，可以索引、切片和遍历。",[469,164318,164320],{"className":30758,"code":164319,"language":30760,"meta":54,"style":54},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[475,164321,164322,164330,164334,164345,164357,164361,164372],{"__ignoreMap":54},[478,164323,164324,164326,164328],{"class":480,"line":481},[478,164325,156824],{"class":714},[478,164327,759],{"class":710},[478,164329,160061],{"class":488},[478,164331,164332],{"class":480,"line":565},[478,164333,2966],{"emptyLinePlaceholder":640},[478,164335,164336,164338,164341,164343],{"class":480,"line":579},[478,164337,30795],{"class":495},[478,164339,164340],{"class":714},"(text[",[478,164342,895],{"class":495},[478,164344,5223],{"class":714},[478,164346,164347,164349,164351,164353,164355],{"class":480,"line":593},[478,164348,30795],{"class":495},[478,164350,164340],{"class":714},[478,164352,1232],{"class":710},[478,164354,193],{"class":495},[478,164356,5223],{"class":714},[478,164358,164359],{"class":480,"line":1769},[478,164360,2966],{"emptyLinePlaceholder":640},[478,164362,164363,164365,164367,164369],{"class":480,"line":1783},[478,164364,3591],{"class":710},[478,164366,160072],{"class":714},[478,164368,26423],{"class":710},[478,164370,164371],{"class":714}," text:\n",[478,164373,164374,164376],{"class":480,"line":1789},[478,164375,31679],{"class":495},[478,164377,160083],{"class":714},[19,164379,164380],{},"字符串不可变：",[469,164382,164384],{"className":30758,"code":164383,"language":30760,"meta":54,"style":54},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[475,164385,164386,164394],{"__ignoreMap":54},[478,164387,164388,164390,164392],{"class":480,"line":481},[478,164389,156824],{"class":714},[478,164391,759],{"class":710},[478,164393,160061],{"class":488},[478,164395,164396,164399,164401,164403,164405,164408],{"class":480,"line":565},[478,164397,164398],{"class":714},"text[",[478,164400,895],{"class":495},[478,164402,5009],{"class":714},[478,164404,759],{"class":710},[478,164406,164407],{"class":488}," \"P\"",[478,164409,164410],{"class":770},"  # 报错\n",[19,164412,164413],{},"如果要得到新字符串：",[469,164415,164417],{"className":30758,"code":164416,"language":30760,"meta":54,"style":54},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[475,164418,164419,164427,164445],{"__ignoreMap":54},[478,164420,164421,164423,164425],{"class":480,"line":481},[478,164422,156824],{"class":714},[478,164424,759],{"class":710},[478,164426,160061],{"class":488},[478,164428,164429,164431,164433,164435,164437,164440,164442],{"class":480,"line":565},[478,164430,156824],{"class":714},[478,164432,759],{"class":710},[478,164434,164407],{"class":488},[478,164436,45946],{"class":710},[478,164438,164439],{"class":714}," text[",[478,164441,193],{"class":495},[478,164443,164444],{"class":714},":]\n",[478,164446,164447,164449],{"class":480,"line":579},[478,164448,30795],{"class":495},[478,164450,164451],{"class":714},"(text)\n",[14,164453,164455],{"id":164454},"_68-切片","6.8 切片",[19,164457,164458],{},"切片用于从序列中取一部分。",[469,164460,164462],{"className":30758,"code":164461,"language":30760,"meta":54,"style":54},"序列[开始:结束:步长]\n",[475,164463,164464],{"__ignoreMap":54},[478,164465,164466],{"class":480,"line":481},[478,164467,164461],{"class":714},[19,164469,164470],{},"结束位置不包含。",[469,164472,164474],{"className":30758,"code":164473,"language":30760,"meta":54,"style":54},"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",[475,164475,164476,164513,164517,164536,164551,164565,164579],{"__ignoreMap":54},[478,164477,164478,164481,164483,164485,164487,164489,164491,164493,164495,164497,164499,164501,164503,164505,164507,164509,164511],{"class":480,"line":481},[478,164479,164480],{"class":714},"nums ",[478,164482,759],{"class":710},[478,164484,52606],{"class":714},[478,164486,895],{"class":495},[478,164488,13001],{"class":714},[478,164490,193],{"class":495},[478,164492,13001],{"class":714},[478,164494,789],{"class":495},[478,164496,13001],{"class":714},[478,164498,783],{"class":495},[478,164500,13001],{"class":714},[478,164502,994],{"class":495},[478,164504,13001],{"class":714},[478,164506,1020],{"class":495},[478,164508,13001],{"class":714},[478,164510,1045],{"class":495},[478,164512,33626],{"class":714},[478,164514,164515],{"class":480,"line":565},[478,164516,2966],{"emptyLinePlaceholder":640},[478,164518,164519,164521,164524,164526,164528,164530,164533],{"class":480,"line":579},[478,164520,30795],{"class":495},[478,164522,164523],{"class":714},"(nums[",[478,164525,193],{"class":495},[478,164527,1554],{"class":714},[478,164529,994],{"class":495},[478,164531,164532],{"class":714},"])    ",[478,164534,164535],{"class":770},"# [1, 2, 3]\n",[478,164537,164538,164540,164543,164545,164548],{"class":480,"line":593},[478,164539,30795],{"class":495},[478,164541,164542],{"class":714},"(nums[:",[478,164544,783],{"class":495},[478,164546,164547],{"class":714},"])     ",[478,164549,164550],{"class":770},"# [0, 1, 2]\n",[478,164552,164553,164555,164557,164559,164562],{"class":480,"line":1769},[478,164554,30795],{"class":495},[478,164556,164523],{"class":714},[478,164558,783],{"class":495},[478,164560,164561],{"class":714},":])     ",[478,164563,164564],{"class":770},"# [3, 4, 5, 6]\n",[478,164566,164567,164569,164572,164574,164576],{"class":480,"line":1783},[478,164568,30795],{"class":495},[478,164570,164571],{"class":714},"(nums[::",[478,164573,789],{"class":495},[478,164575,164532],{"class":714},[478,164577,164578],{"class":770},"# [0, 2, 4, 6]\n",[478,164580,164581,164583,164585,164587,164589,164592],{"class":480,"line":1789},[478,164582,30795],{"class":495},[478,164584,164571],{"class":714},[478,164586,1232],{"class":710},[478,164588,193],{"class":495},[478,164590,164591],{"class":714},"])   ",[478,164593,164594],{"class":770},"# 反转\n",[19,164596,164597],{},"字符串切片：",[469,164599,164601],{"className":30758,"code":164600,"language":30760,"meta":54,"style":54},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[475,164602,164603,164612,164626],{"__ignoreMap":54},[478,164604,164605,164607,164609],{"class":480,"line":481},[478,164606,156824],{"class":714},[478,164608,759],{"class":710},[478,164610,164611],{"class":488}," \"abcdef\"\n",[478,164613,164614,164616,164618,164620,164622,164624],{"class":480,"line":565},[478,164615,30795],{"class":495},[478,164617,164340],{"class":714},[478,164619,193],{"class":495},[478,164621,1554],{"class":714},[478,164623,994],{"class":495},[478,164625,5223],{"class":714},[478,164627,164628,164630,164633,164635,164637],{"class":480,"line":579},[478,164629,30795],{"class":495},[478,164631,164632],{"class":714},"(text[::",[478,164634,1232],{"class":710},[478,164636,193],{"class":495},[478,164638,5223],{"class":714},[14,164640,164642],{"id":164641},"_69-集合set","6.9 集合set",[19,164644,164645],{},"集合特点：",[29,164647,164648,164651,164654],{},[32,164649,164650],{},"无序。",[32,164652,164653],{},"元素不重复。",[32,164655,164656],{},"可以做交集、并集、差集。",[469,164658,164660],{"className":30758,"code":164659,"language":30760,"meta":54,"style":54},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[475,164661,164662,164690],{"__ignoreMap":54},[478,164663,164664,164666,164668,164670,164672,164674,164676,164678,164680,164682,164684,164686,164688],{"class":480,"line":481},[478,164665,164480],{"class":714},[478,164667,759],{"class":710},[478,164669,5014],{"class":714},[478,164671,193],{"class":495},[478,164673,13001],{"class":714},[478,164675,789],{"class":495},[478,164677,13001],{"class":714},[478,164679,783],{"class":495},[478,164681,13001],{"class":714},[478,164683,783],{"class":495},[478,164685,13001],{"class":714},[478,164687,994],{"class":495},[478,164689,2133],{"class":714},[478,164691,164692,164694],{"class":480,"line":565},[478,164693,30795],{"class":495},[478,164695,164696],{"class":714},"(nums)\n",[19,164698,164699],{},"创建空集合：",[469,164701,164703],{"className":30758,"code":164702,"language":30760,"meta":54,"style":54},"s = set()\n",[475,164704,164705],{"__ignoreMap":54},[478,164706,164707,164709,164711,164713],{"class":480,"line":481},[478,164708,11145],{"class":714},[478,164710,759],{"class":710},[478,164712,120102],{"class":495},[478,164714,2542],{"class":714},[19,164716,9591,164717,164719],{},[475,164718,32839],{}," 是空字典，不是空集合。",[19,164721,164722],{},"集合常用操作：",[469,164724,164726],{"className":30758,"code":164725,"language":30760,"meta":54,"style":54},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[475,164727,164728,164748,164752,164761,164770,164779],{"__ignoreMap":54},[478,164729,164730,164732,164734,164736,164738,164740,164742,164744,164746],{"class":480,"line":481},[478,164731,11145],{"class":714},[478,164733,759],{"class":710},[478,164735,5014],{"class":714},[478,164737,193],{"class":495},[478,164739,13001],{"class":714},[478,164741,789],{"class":495},[478,164743,13001],{"class":714},[478,164745,783],{"class":495},[478,164747,2133],{"class":714},[478,164749,164750],{"class":480,"line":565},[478,164751,2966],{"emptyLinePlaceholder":640},[478,164753,164754,164757,164759],{"class":480,"line":579},[478,164755,164756],{"class":714},"s.add(",[478,164758,994],{"class":495},[478,164760,720],{"class":714},[478,164762,164763,164766,164768],{"class":480,"line":593},[478,164764,164765],{"class":714},"s.remove(",[478,164767,789],{"class":495},[478,164769,720],{"class":714},[478,164771,164772,164775,164777],{"class":480,"line":1769},[478,164773,164774],{"class":714},"s.discard(",[478,164776,1146],{"class":495},[478,164778,720],{"class":714},[478,164780,164781,164783,164785,164787],{"class":480,"line":1783},[478,164782,30795],{"class":495},[478,164784,263],{"class":714},[478,164786,7924],{"class":495},[478,164788,164789],{"class":714},"(s))\n",[19,164791,164792],{},"交并差：",[469,164794,164796],{"className":30758,"code":164795,"language":30760,"meta":54,"style":54},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[475,164797,164798,164818,164838,164842,164857,164870],{"__ignoreMap":54},[478,164799,164800,164802,164804,164806,164808,164810,164812,164814,164816],{"class":480,"line":481},[478,164801,11485],{"class":714},[478,164803,759],{"class":710},[478,164805,5014],{"class":714},[478,164807,193],{"class":495},[478,164809,13001],{"class":714},[478,164811,789],{"class":495},[478,164813,13001],{"class":714},[478,164815,783],{"class":495},[478,164817,2133],{"class":714},[478,164819,164820,164822,164824,164826,164828,164830,164832,164834,164836],{"class":480,"line":565},[478,164821,11511],{"class":714},[478,164823,759],{"class":710},[478,164825,5014],{"class":714},[478,164827,783],{"class":495},[478,164829,13001],{"class":714},[478,164831,994],{"class":495},[478,164833,13001],{"class":714},[478,164835,1020],{"class":495},[478,164837,2133],{"class":714},[478,164839,164840],{"class":480,"line":579},[478,164841,2966],{"emptyLinePlaceholder":640},[478,164843,164844,164846,164849,164851,164854],{"class":480,"line":593},[478,164845,30795],{"class":495},[478,164847,164848],{"class":714},"(a ",[478,164850,1054],{"class":710},[478,164852,164853],{"class":714}," b)  ",[478,164855,164856],{"class":770},"# 交集\n",[478,164858,164859,164861,164863,164865,164867],{"class":480,"line":1769},[478,164860,30795],{"class":495},[478,164862,164848],{"class":714},[478,164864,1616],{"class":710},[478,164866,164853],{"class":714},[478,164868,164869],{"class":770},"# 并集\n",[478,164871,164872,164874,164876,164878,164880],{"class":480,"line":1783},[478,164873,30795],{"class":495},[478,164875,164848],{"class":714},[478,164877,1232],{"class":710},[478,164879,164853],{"class":714},[478,164881,164882],{"class":770},"# 差集\n",[14,164884,164886],{"id":164885},"_610-字典dict","6.10 字典dict",[19,164888,164889],{},"字典通过 key-value 保存数据。",[469,164891,164893],{"className":30758,"code":164892,"language":30760,"meta":54,"style":54},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[475,164894,164895,164903,164913,164924,164934],{"__ignoreMap":54},[478,164896,164897,164899,164901],{"class":480,"line":481},[478,164898,149861],{"class":714},[478,164900,759],{"class":710},[478,164902,16137],{"class":714},[478,164904,164905,164907,164909,164911],{"class":480,"line":565},[478,164906,147400],{"class":488},[478,164908,51817],{"class":714},[478,164910,150268],{"class":488},[478,164912,31846],{"class":714},[478,164914,164915,164918,164920,164922],{"class":480,"line":579},[478,164916,164917],{"class":488},"    \"age\"",[478,164919,51817],{"class":714},[478,164921,1348],{"class":495},[478,164923,31846],{"class":714},[478,164925,164926,164929,164931],{"class":480,"line":593},[478,164927,164928],{"class":488},"    \"score\"",[478,164930,51817],{"class":714},[478,164932,164933],{"class":495},"95\n",[478,164935,164936],{"class":480,"line":1769},[478,164937,2133],{"class":714},[19,164939,164940],{},"获取值：",[469,164942,164944],{"className":30758,"code":164943,"language":30760,"meta":54,"style":54},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[475,164945,164946,164957],{"__ignoreMap":54},[478,164947,164948,164950,164953,164955],{"class":480,"line":481},[478,164949,30795],{"class":495},[478,164951,164952],{"class":714},"(student[",[478,164954,63059],{"class":488},[478,164956,5223],{"class":714},[478,164958,164959,164961,164964,164966],{"class":480,"line":565},[478,164960,30795],{"class":495},[478,164962,164963],{"class":714},"(student.get(",[478,164965,63059],{"class":488},[478,164967,30877],{"class":714},[19,164969,15953],{},[469,164971,164973],{"className":30758,"code":164972,"language":30760,"meta":54,"style":54},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[475,164974,164975,164988],{"__ignoreMap":54},[478,164976,164977,164979,164982,164985],{"class":480,"line":481},[478,164978,153239],{"class":714},[478,164980,164981],{"class":488},"\"address\"",[478,164983,164984],{"class":714},"]     ",[478,164986,164987],{"class":770},"# key不存在会报错\n",[478,164989,164990,164993,164995,164997],{"class":480,"line":565},[478,164991,164992],{"class":714},"student.get(",[478,164994,164981],{"class":488},[478,164996,14280],{"class":714},[478,164998,164999],{"class":770},"# key不存在返回None\n",[19,165001,165002],{},"设置默认值：",[469,165004,165006],{"className":30758,"code":165005,"language":30760,"meta":54,"style":54},"print(student.get(\"address\", \"未知\"))\n",[475,165007,165008],{"__ignoreMap":54},[478,165009,165010,165012,165014,165016,165018,165021],{"class":480,"line":481},[478,165011,30795],{"class":495},[478,165013,164963],{"class":714},[478,165015,164981],{"class":488},[478,165017,13001],{"class":714},[478,165019,165020],{"class":488},"\"未知\"",[478,165022,30877],{"class":714},[19,165024,165025],{},"新增和修改：",[469,165027,165029],{"className":30758,"code":165028,"language":30760,"meta":54,"style":54},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[475,165030,165031,165044],{"__ignoreMap":54},[478,165032,165033,165035,165037,165039,165041],{"class":480,"line":481},[478,165034,153239],{"class":714},[478,165036,69504],{"class":488},[478,165038,5009],{"class":714},[478,165040,759],{"class":710},[478,165042,165043],{"class":495}," 19\n",[478,165045,165046,165048,165050,165052,165054],{"class":480,"line":565},[478,165047,153239],{"class":714},[478,165049,164981],{"class":488},[478,165051,5009],{"class":714},[478,165053,759],{"class":710},[478,165055,165056],{"class":488}," \"北京\"\n",[19,165058,165059],{},"删除：",[469,165061,165063],{"className":30758,"code":165062,"language":30760,"meta":54,"style":54},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[475,165064,165065,165078,165088],{"__ignoreMap":54},[478,165066,165067,165069,165071,165074,165076],{"class":480,"line":481},[478,165068,155738],{"class":714},[478,165070,759],{"class":710},[478,165072,165073],{"class":714}," student.pop(",[478,165075,151852],{"class":488},[478,165077,720],{"class":714},[478,165079,165080,165082,165084,165086],{"class":480,"line":565},[478,165081,163763],{"class":710},[478,165083,152529],{"class":714},[478,165085,69504],{"class":488},[478,165087,33626],{"class":714},[478,165089,165090],{"class":480,"line":579},[478,165091,165092],{"class":714},"student.clear()\n",[14,165094,165096],{"id":165095},"_611-字典遍历","6.11 字典遍历",[19,165098,165099],{},"遍历 key：",[469,165101,165103],{"className":30758,"code":165102,"language":30760,"meta":54,"style":54},"for key in student:\n    print(key, student[key])\n",[475,165104,165105,165117],{"__ignoreMap":54},[478,165106,165107,165109,165112,165114],{"class":480,"line":481},[478,165108,3591],{"class":710},[478,165110,165111],{"class":714}," key ",[478,165113,26423],{"class":710},[478,165115,165116],{"class":714}," student:\n",[478,165118,165119,165121],{"class":480,"line":565},[478,165120,31679],{"class":495},[478,165122,165123],{"class":714},"(key, student[key])\n",[19,165125,165126],{},"遍历 value：",[469,165128,165130],{"className":30758,"code":165129,"language":30760,"meta":54,"style":54},"for value in student.values():\n    print(value)\n",[475,165131,165132,165144],{"__ignoreMap":54},[478,165133,165134,165136,165139,165141],{"class":480,"line":481},[478,165135,3591],{"class":710},[478,165137,165138],{"class":714}," value ",[478,165140,26423],{"class":710},[478,165142,165143],{"class":714}," student.values():\n",[478,165145,165146,165148],{"class":480,"line":565},[478,165147,31679],{"class":495},[478,165149,165150],{"class":714},"(value)\n",[19,165152,165153],{},"遍历 key 和 value：",[469,165155,165157],{"className":30758,"code":165156,"language":30760,"meta":54,"style":54},"for key, value in student.items():\n    print(key, value)\n",[475,165158,165159,165171],{"__ignoreMap":54},[478,165160,165161,165163,165166,165168],{"class":480,"line":481},[478,165162,3591],{"class":710},[478,165164,165165],{"class":714}," key, value ",[478,165167,26423],{"class":710},[478,165169,165170],{"class":714}," student.items():\n",[478,165172,165173,165175],{"class":480,"line":565},[478,165174,31679],{"class":495},[478,165176,165177],{"class":714},"(key, value)\n",[14,165179,165181],{"id":165180},"_612-嵌套容器","6.12 嵌套容器",[19,165183,165184],{},"列表中保存字典，是项目中最常见的结构之一。",[469,165186,165188],{"className":30758,"code":165187,"language":30760,"meta":54,"style":54},"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",[475,165189,165190,165198,165226,165254,165282,165286,165290,165300],{"__ignoreMap":54},[478,165191,165192,165194,165196],{"class":480,"line":481},[478,165193,160096],{"class":714},[478,165195,759],{"class":710},[478,165197,55827],{"class":714},[478,165199,165200,165202,165204,165206,165208,165210,165212,165214,165216,165218,165220,165222,165224],{"class":480,"line":565},[478,165201,148765],{"class":714},[478,165203,63059],{"class":488},[478,165205,51817],{"class":714},[478,165207,150268],{"class":488},[478,165209,13001],{"class":714},[478,165211,69504],{"class":488},[478,165213,51817],{"class":714},[478,165215,1348],{"class":495},[478,165217,13001],{"class":714},[478,165219,151852],{"class":488},[478,165221,51817],{"class":714},[478,165223,1684],{"class":495},[478,165225,5496],{"class":714},[478,165227,165228,165230,165232,165234,165236,165238,165240,165242,165244,165246,165248,165250,165252],{"class":480,"line":579},[478,165229,148765],{"class":714},[478,165231,63059],{"class":488},[478,165233,51817],{"class":714},[478,165235,151316],{"class":488},[478,165237,13001],{"class":714},[478,165239,69504],{"class":488},[478,165241,51817],{"class":714},[478,165243,1323],{"class":495},[478,165245,13001],{"class":714},[478,165247,151852],{"class":488},[478,165249,51817],{"class":714},[478,165251,1506],{"class":495},[478,165253,5496],{"class":714},[478,165255,165256,165258,165260,165262,165264,165266,165268,165270,165272,165274,165276,165278,165280],{"class":480,"line":593},[478,165257,148765],{"class":714},[478,165259,63059],{"class":488},[478,165261,51817],{"class":714},[478,165263,160111],{"class":488},[478,165265,13001],{"class":714},[478,165267,69504],{"class":488},[478,165269,51817],{"class":714},[478,165271,1372],{"class":495},[478,165273,13001],{"class":714},[478,165275,151852],{"class":488},[478,165277,51817],{"class":714},[478,165279,1107],{"class":495},[478,165281,5496],{"class":714},[478,165283,165284],{"class":480,"line":1769},[478,165285,33626],{"class":714},[478,165287,165288],{"class":480,"line":1783},[478,165289,2966],{"emptyLinePlaceholder":640},[478,165291,165292,165294,165296,165298],{"class":480,"line":1789},[478,165293,3591],{"class":710},[478,165295,152517],{"class":714},[478,165297,26423],{"class":710},[478,165299,152522],{"class":714},[478,165301,165302,165304,165306,165308,165311,165313],{"class":480,"line":1880},[478,165303,31679],{"class":495},[478,165305,164952],{"class":714},[478,165307,63059],{"class":488},[478,165309,165310],{"class":714},"], student[",[478,165312,151852],{"class":488},[478,165314,5223],{"class":714},[19,165316,165317],{},"统计平均分：",[469,165319,165321],{"className":30758,"code":165320,"language":30760,"meta":54,"style":54},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[475,165322,165323,165331,165335,165345,165357,165361,165376],{"__ignoreMap":54},[478,165324,165325,165327,165329],{"class":480,"line":481},[478,165326,157640],{"class":714},[478,165328,759],{"class":710},[478,165330,47713],{"class":495},[478,165332,165333],{"class":480,"line":565},[478,165334,2966],{"emptyLinePlaceholder":640},[478,165336,165337,165339,165341,165343],{"class":480,"line":579},[478,165338,3591],{"class":710},[478,165340,152517],{"class":714},[478,165342,26423],{"class":710},[478,165344,152522],{"class":714},[478,165346,165347,165349,165351,165353,165355],{"class":480,"line":593},[478,165348,159687],{"class":714},[478,165350,10043],{"class":710},[478,165352,152529],{"class":714},[478,165354,151852],{"class":488},[478,165356,33626],{"class":714},[478,165358,165359],{"class":480,"line":1769},[478,165360,2966],{"emptyLinePlaceholder":640},[478,165362,165363,165365,165367,165369,165371,165373],{"class":480,"line":1783},[478,165364,164154],{"class":714},[478,165366,759],{"class":710},[478,165368,164159],{"class":714},[478,165370,1284],{"class":710},[478,165372,7897],{"class":495},[478,165374,165375],{"class":714},"(students)\n",[478,165377,165378,165380,165382,165384,165386,165388,165390,165392,165394,165396],{"class":480,"line":1789},[478,165379,30795],{"class":495},[478,165381,263],{"class":714},[478,165383,218],{"class":710},[478,165385,164177],{"class":488},[478,165387,1591],{"class":495},[478,165389,164182],{"class":714},[478,165391,157539],{"class":710},[478,165393,1641],{"class":495},[478,165395,952],{"class":488},[478,165397,720],{"class":714},[19,165399,165400],{},"查找学生：",[469,165402,165404],{"className":30758,"code":165403,"language":30760,"meta":54,"style":54},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[475,165405,165406,165421,165425,165435,165449,165455,165459,165465],{"__ignoreMap":54},[478,165407,165408,165410,165412,165414,165416,165419],{"class":480,"line":481},[478,165409,111958],{"class":714},[478,165411,759],{"class":710},[478,165413,60985],{"class":495},[478,165415,263],{"class":714},[478,165417,165418],{"class":488},"\"请输入学生姓名:\"",[478,165420,720],{"class":714},[478,165422,165423],{"class":480,"line":565},[478,165424,2966],{"emptyLinePlaceholder":640},[478,165426,165427,165429,165431,165433],{"class":480,"line":579},[478,165428,3591],{"class":710},[478,165430,152517],{"class":714},[478,165432,26423],{"class":710},[478,165434,152522],{"class":714},[478,165436,165437,165439,165441,165443,165445,165447],{"class":480,"line":593},[478,165438,3667],{"class":710},[478,165440,152529],{"class":714},[478,165442,63059],{"class":488},[478,165444,5009],{"class":714},[478,165446,3515],{"class":710},[478,165448,160812],{"class":714},[478,165450,165451,165453],{"class":480,"line":1769},[478,165452,32831],{"class":495},[478,165454,150422],{"class":714},[478,165456,165457],{"class":480,"line":1783},[478,165458,32007],{"class":710},[478,165460,165461,165463],{"class":480,"line":1789},[478,165462,2268],{"class":710},[478,165464,4305],{"class":714},[478,165466,165467,165469,165471,165474],{"class":480,"line":1880},[478,165468,31679],{"class":495},[478,165470,263],{"class":714},[478,165472,165473],{"class":488},"\"没有找到\"",[478,165475,720],{"class":714},[14,165477,165479],{"id":165478},"_613-容器通用操作","6.13 容器通用操作",[19,165481,165482],{},"长度：",[469,165484,165486],{"className":30758,"code":165485,"language":30760,"meta":54,"style":54},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[475,165487,165488,165507,165517],{"__ignoreMap":54},[478,165489,165490,165492,165495,165497,165499,165501,165503,165505],{"class":480,"line":481},[478,165491,7924],{"class":495},[478,165493,165494],{"class":714},"([",[478,165496,193],{"class":495},[478,165498,13001],{"class":714},[478,165500,789],{"class":495},[478,165502,13001],{"class":714},[478,165504,783],{"class":495},[478,165506,5223],{"class":714},[478,165508,165509,165511,165513,165515],{"class":480,"line":565},[478,165510,7924],{"class":495},[478,165512,263],{"class":714},[478,165514,156260],{"class":488},[478,165516,720],{"class":714},[478,165518,165519,165521,165524,165526,165528,165530],{"class":480,"line":579},[478,165520,7924],{"class":495},[478,165522,165523],{"class":714},"({",[478,165525,63059],{"class":488},[478,165527,51817],{"class":714},[478,165529,150268],{"class":488},[478,165531,165532],{"class":714},"})\n",[19,165534,165535],{},"最大最小：",[469,165537,165539],{"className":30758,"code":165538,"language":30760,"meta":54,"style":54},"max([1, 2, 3])\nmin([1, 2, 3])\n",[475,165540,165541,165559],{"__ignoreMap":54},[478,165542,165543,165545,165547,165549,165551,165553,165555,165557],{"class":480,"line":481},[478,165544,6581],{"class":495},[478,165546,165494],{"class":714},[478,165548,193],{"class":495},[478,165550,13001],{"class":714},[478,165552,789],{"class":495},[478,165554,13001],{"class":714},[478,165556,783],{"class":495},[478,165558,5223],{"class":714},[478,165560,165561,165564,165566,165568,165570,165572,165574,165576],{"class":480,"line":565},[478,165562,165563],{"class":495},"min",[478,165565,165494],{"class":714},[478,165567,193],{"class":495},[478,165569,13001],{"class":714},[478,165571,789],{"class":495},[478,165573,13001],{"class":714},[478,165575,783],{"class":495},[478,165577,5223],{"class":714},[19,165579,165580],{},"求和：",[469,165582,165584],{"className":30758,"code":165583,"language":30760,"meta":54,"style":54},"sum([1, 2, 3])\n",[475,165585,165586],{"__ignoreMap":54},[478,165587,165588,165591,165593,165595,165597,165599,165601,165603],{"class":480,"line":481},[478,165589,165590],{"class":495},"sum",[478,165592,165494],{"class":714},[478,165594,193],{"class":495},[478,165596,13001],{"class":714},[478,165598,789],{"class":495},[478,165600,13001],{"class":714},[478,165602,783],{"class":495},[478,165604,5223],{"class":714},[19,165606,163851],{},[469,165608,165610],{"className":30758,"code":165609,"language":30760,"meta":54,"style":54},"sorted([3, 1, 2])\n",[475,165611,165612],{"__ignoreMap":54},[478,165613,165614,165617,165619,165621,165623,165625,165627,165629],{"class":480,"line":481},[478,165615,165616],{"class":495},"sorted",[478,165618,165494],{"class":714},[478,165620,783],{"class":495},[478,165622,13001],{"class":714},[478,165624,193],{"class":495},[478,165626,13001],{"class":714},[478,165628,789],{"class":495},[478,165630,5223],{"class":714},[19,165632,165633],{},"类型转换：",[469,165635,165637],{"className":30758,"code":165636,"language":30760,"meta":54,"style":54},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[475,165638,165639,165649,165667],{"__ignoreMap":54},[478,165640,165641,165643,165645,165647],{"class":480,"line":481},[478,165642,154450],{"class":495},[478,165644,263],{"class":714},[478,165646,156260],{"class":488},[478,165648,720],{"class":714},[478,165650,165651,165653,165655,165657,165659,165661,165663,165665],{"class":480,"line":565},[478,165652,155645],{"class":495},[478,165654,165494],{"class":714},[478,165656,193],{"class":495},[478,165658,13001],{"class":714},[478,165660,789],{"class":495},[478,165662,13001],{"class":714},[478,165664,783],{"class":495},[478,165666,5223],{"class":714},[478,165668,165669,165671,165673,165675,165677,165679,165681,165683,165685,165687],{"class":480,"line":579},[478,165670,155670],{"class":495},[478,165672,165494],{"class":714},[478,165674,193],{"class":495},[478,165676,13001],{"class":714},[478,165678,193],{"class":495},[478,165680,13001],{"class":714},[478,165682,789],{"class":495},[478,165684,13001],{"class":714},[478,165686,783],{"class":495},[478,165688,5223],{"class":714},[19,165690,165691],{},"成员判断：",[469,165693,165695],{"className":30758,"code":165694,"language":30760,"meta":54,"style":54},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[475,165696,165697,165714,165738],{"__ignoreMap":54},[478,165698,165699,165701,165703,165706,165709,165712],{"class":480,"line":481},[478,165700,30795],{"class":495},[478,165702,263],{"class":714},[478,165704,165705],{"class":488},"\"a\"",[478,165707,165708],{"class":710}," in",[478,165710,165711],{"class":488}," \"abc\"",[478,165713,720],{"class":714},[478,165715,165716,165718,165720,165722,165724,165726,165728,165730,165732,165734,165736],{"class":480,"line":565},[478,165717,30795],{"class":495},[478,165719,263],{"class":714},[478,165721,193],{"class":495},[478,165723,165708],{"class":710},[478,165725,52606],{"class":714},[478,165727,193],{"class":495},[478,165729,13001],{"class":714},[478,165731,789],{"class":495},[478,165733,13001],{"class":714},[478,165735,783],{"class":495},[478,165737,5223],{"class":714},[478,165739,165740,165742,165744,165746,165748,165750,165752,165754,165756],{"class":480,"line":579},[478,165741,30795],{"class":495},[478,165743,263],{"class":714},[478,165745,63059],{"class":488},[478,165747,165708],{"class":710},[478,165749,5014],{"class":714},[478,165751,63059],{"class":488},[478,165753,51817],{"class":714},[478,165755,150268],{"class":488},[478,165757,165532],{"class":714},[14,165759,165761],{"id":165760},"_614-推导式","6.14 推导式",[19,165763,165764],{},"推导式用于快速生成容器。",[19,165766,165767],{},"列表推导式：",[469,165769,165771],{"className":30758,"code":165770,"language":30760,"meta":54,"style":54},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[475,165772,165773,165800],{"__ignoreMap":54},[478,165774,165775,165777,165779,165782,165784,165786,165788,165790,165792,165794,165796,165798],{"class":480,"line":481},[478,165776,164480],{"class":714},[478,165778,759],{"class":710},[478,165780,165781],{"class":714}," [i ",[478,165783,3591],{"class":710},[478,165785,10004],{"class":714},[478,165787,26423],{"class":710},[478,165789,32823],{"class":495},[478,165791,263],{"class":714},[478,165793,193],{"class":495},[478,165795,13001],{"class":714},[478,165797,1045],{"class":495},[478,165799,97680],{"class":714},[478,165801,165802,165804],{"class":480,"line":565},[478,165803,30795],{"class":495},[478,165805,164696],{"class":714},[19,165807,165808],{},"带条件：",[469,165810,165812],{"className":30758,"code":165811,"language":30760,"meta":54,"style":54},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[475,165813,165814,165855],{"__ignoreMap":54},[478,165815,165816,165819,165821,165823,165825,165827,165829,165831,165833,165835,165837,165839,165841,165843,165845,165847,165849,165851,165853],{"class":480,"line":481},[478,165817,165818],{"class":714},"even_nums ",[478,165820,759],{"class":710},[478,165822,165781],{"class":714},[478,165824,3591],{"class":710},[478,165826,10004],{"class":714},[478,165828,26423],{"class":710},[478,165830,32823],{"class":495},[478,165832,263],{"class":714},[478,165834,193],{"class":495},[478,165836,13001],{"class":714},[478,165838,1038],{"class":495},[478,165840,14280],{"class":714},[478,165842,2099],{"class":710},[478,165844,10004],{"class":714},[478,165846,1029],{"class":710},[478,165848,15320],{"class":495},[478,165850,101939],{"class":710},[478,165852,4659],{"class":495},[478,165854,33626],{"class":714},[478,165856,165857,165859],{"class":480,"line":565},[478,165858,30795],{"class":495},[478,165860,165861],{"class":714},"(even_nums)\n",[19,165863,165864],{},"字典推导式：",[469,165866,165868],{"className":30758,"code":165867,"language":30760,"meta":54,"style":54},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[475,165869,165870,165904],{"__ignoreMap":54},[478,165871,165872,165875,165877,165880,165882,165884,165887,165889,165891,165893,165895,165897,165899,165901],{"class":480,"line":481},[478,165873,165874],{"class":714},"squares ",[478,165876,759],{"class":710},[478,165878,165879],{"class":714}," {i: i ",[478,165881,11227],{"class":710},[478,165883,15320],{"class":495},[478,165885,165886],{"class":710}," for",[478,165888,10004],{"class":714},[478,165890,26423],{"class":710},[478,165892,32823],{"class":495},[478,165894,263],{"class":714},[478,165896,193],{"class":495},[478,165898,13001],{"class":714},[478,165900,1045],{"class":495},[478,165902,165903],{"class":714},")}\n",[478,165905,165906,165908],{"class":480,"line":565},[478,165907,30795],{"class":495},[478,165909,165910],{"class":714},"(squares)\n",[19,165912,165913],{},"集合推导式：",[469,165915,165917],{"className":30758,"code":165916,"language":30760,"meta":54,"style":54},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[475,165918,165919,165940],{"__ignoreMap":54},[478,165920,165921,165924,165926,165929,165931,165933,165935,165938],{"class":480,"line":481},[478,165922,165923],{"class":714},"chars ",[478,165925,759],{"class":710},[478,165927,165928],{"class":714}," {ch ",[478,165930,3591],{"class":710},[478,165932,160072],{"class":714},[478,165934,26423],{"class":710},[478,165936,165937],{"class":488}," \"hello\"",[478,165939,2133],{"class":714},[478,165941,165942,165944],{"class":480,"line":565},[478,165943,30795],{"class":495},[478,165945,165946],{"class":714},"(chars)\n",[19,165948,165949],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165951,165953],{"id":165952},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[469,165955,165957],{"className":30758,"code":165956,"language":30760,"meta":54,"style":54},"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",[475,165958,165959,165967,165987,166007,166027,166047,166051,166055,166063,166077,166086,166090,166100,166112,166116,166136,166145,166149,166165,166170,166174,166188,166192,166214,166250],{"__ignoreMap":54},[478,165960,165961,165963,165965],{"class":480,"line":481},[478,165962,160096],{"class":714},[478,165964,759],{"class":710},[478,165966,55827],{"class":714},[478,165968,165969,165971,165973,165975,165977,165979,165981,165983,165985],{"class":480,"line":565},[478,165970,148765],{"class":714},[478,165972,63059],{"class":488},[478,165974,51817],{"class":714},[478,165976,150268],{"class":488},[478,165978,13001],{"class":714},[478,165980,151852],{"class":488},[478,165982,51817],{"class":714},[478,165984,1684],{"class":495},[478,165986,5496],{"class":714},[478,165988,165989,165991,165993,165995,165997,165999,166001,166003,166005],{"class":480,"line":579},[478,165990,148765],{"class":714},[478,165992,63059],{"class":488},[478,165994,51817],{"class":714},[478,165996,151316],{"class":488},[478,165998,13001],{"class":714},[478,166000,151852],{"class":488},[478,166002,51817],{"class":714},[478,166004,1506],{"class":495},[478,166006,5496],{"class":714},[478,166008,166009,166011,166013,166015,166017,166019,166021,166023,166025],{"class":480,"line":593},[478,166010,148765],{"class":714},[478,166012,63059],{"class":488},[478,166014,51817],{"class":714},[478,166016,160111],{"class":488},[478,166018,13001],{"class":714},[478,166020,151852],{"class":488},[478,166022,51817],{"class":714},[478,166024,1107],{"class":495},[478,166026,5496],{"class":714},[478,166028,166029,166031,166033,166035,166037,166039,166041,166043,166045],{"class":480,"line":1769},[478,166030,148765],{"class":714},[478,166032,63059],{"class":488},[478,166034,51817],{"class":714},[478,166036,163690],{"class":488},[478,166038,13001],{"class":714},[478,166040,151852],{"class":488},[478,166042,51817],{"class":714},[478,166044,1577],{"class":495},[478,166046,5496],{"class":714},[478,166048,166049],{"class":480,"line":1783},[478,166050,33626],{"class":714},[478,166052,166053],{"class":480,"line":1789},[478,166054,2966],{"emptyLinePlaceholder":640},[478,166056,166057,166059,166061],{"class":480,"line":1880},[478,166058,157640],{"class":714},[478,166060,759],{"class":710},[478,166062,47713],{"class":495},[478,166064,166065,166068,166070,166073,166075],{"class":480,"line":1886},[478,166066,166067],{"class":714},"max_student ",[478,166069,759],{"class":710},[478,166071,166072],{"class":714}," students[",[478,166074,895],{"class":495},[478,166076,33626],{"class":714},[478,166078,166079,166082,166084],{"class":480,"line":1898},[478,166080,166081],{"class":714},"passed ",[478,166083,759],{"class":710},[478,166085,52218],{"class":714},[478,166087,166088],{"class":480,"line":2180},[478,166089,2966],{"emptyLinePlaceholder":640},[478,166091,166092,166094,166096,166098],{"class":480,"line":2185},[478,166093,3591],{"class":710},[478,166095,152517],{"class":714},[478,166097,26423],{"class":710},[478,166099,152522],{"class":714},[478,166101,166102,166104,166106,166108,166110],{"class":480,"line":2191},[478,166103,159687],{"class":714},[478,166105,10043],{"class":710},[478,166107,152529],{"class":714},[478,166109,151852],{"class":488},[478,166111,33626],{"class":714},[478,166113,166114],{"class":480,"line":2196},[478,166115,2966],{"emptyLinePlaceholder":640},[478,166117,166118,166120,166122,166124,166126,166128,166131,166133],{"class":480,"line":2210},[478,166119,3667],{"class":710},[478,166121,152529],{"class":714},[478,166123,151852],{"class":488},[478,166125,5009],{"class":714},[478,166127,1655],{"class":710},[478,166129,166130],{"class":714}," max_student[",[478,166132,151852],{"class":488},[478,166134,166135],{"class":714},"]:\n",[478,166137,166138,166141,166143],{"class":480,"line":2215},[478,166139,166140],{"class":714},"        max_student ",[478,166142,759],{"class":710},[478,166144,152545],{"class":714},[478,166146,166147],{"class":480,"line":2221},[478,166148,2966],{"emptyLinePlaceholder":640},[478,166150,166151,166153,166155,166157,166159,166161,166163],{"class":480,"line":2241},[478,166152,3667],{"class":710},[478,166154,152529],{"class":714},[478,166156,151852],{"class":488},[478,166158,5009],{"class":714},[478,166160,2277],{"class":710},[478,166162,158217],{"class":495},[478,166164,4305],{"class":714},[478,166166,166167],{"class":480,"line":2246},[478,166168,166169],{"class":714},"        passed.append(student)\n",[478,166171,166172],{"class":480,"line":2260},[478,166173,2966],{"emptyLinePlaceholder":640},[478,166175,166176,166178,166180,166182,166184,166186],{"class":480,"line":2265},[478,166177,164154],{"class":714},[478,166179,759],{"class":710},[478,166181,164159],{"class":714},[478,166183,1284],{"class":710},[478,166185,7897],{"class":495},[478,166187,165375],{"class":714},[478,166189,166190],{"class":480,"line":2294},[478,166191,2966],{"emptyLinePlaceholder":640},[478,166193,166194,166196,166198,166200,166202,166204,166206,166208,166210,166212],{"class":480,"line":2299},[478,166195,30795],{"class":495},[478,166197,263],{"class":714},[478,166199,218],{"class":710},[478,166201,164177],{"class":488},[478,166203,1591],{"class":495},[478,166205,164182],{"class":714},[478,166207,157539],{"class":710},[478,166209,1641],{"class":495},[478,166211,952],{"class":488},[478,166213,720],{"class":714},[478,166215,166216,166218,166220,166222,166225,166227,166230,166232,166234,166236,166238,166240,166242,166244,166246,166248],{"class":480,"line":2316},[478,166217,30795],{"class":495},[478,166219,263],{"class":714},[478,166221,218],{"class":710},[478,166223,166224],{"class":488},"\"最高分学生:",[478,166226,1591],{"class":495},[478,166228,166229],{"class":714},"max_student[",[478,166231,153262],{"class":488},[478,166233,1635],{"class":714},[478,166235,1641],{"class":495},[478,166237,5014],{"class":495},[478,166239,166229],{"class":714},[478,166241,153300],{"class":488},[478,166243,1635],{"class":714},[478,166245,1641],{"class":495},[478,166247,952],{"class":488},[478,166249,720],{"class":714},[478,166251,166252,166254,166256,166258,166261,166264,166267,166269,166271],{"class":480,"line":2321},[478,166253,30795],{"class":495},[478,166255,263],{"class":714},[478,166257,218],{"class":710},[478,166259,166260],{"class":488},"\"及格人数:",[478,166262,166263],{"class":495},"{len",[478,166265,166266],{"class":714},"(passed)",[478,166268,1641],{"class":495},[478,166270,952],{"class":488},[478,166272,720],{"class":714},[14,166274,166276],{"id":166275},"_616-易错点","6.16 易错点",[29,166278,166279,166282,166285,166288,166294,166303],{},[32,166280,166281],{},"列表可变，元组和字符串不可变。",[32,166283,166284],{},"切片结束位置不包含。",[32,166286,166287],{},"字典通过 key 取值，不是通过索引。",[32,166289,166290,166291,28765],{},"空集合要用 ",[475,166292,166293],{},"set()",[32,166295,104746,166296,166299,166300,28765],{},[475,166297,166298],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[475,166301,166302],{},"get()",[32,166304,166305],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166307,166309],{"id":166308},"_617-本章练习","6.17 本章练习",[29,166311,166312,166315,166318,166321,166324],{},[32,166313,166314],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[32,166316,166317],{},"输入一句话，统计每个字符出现次数。",[32,166319,166320],{},"使用集合去除列表中的重复元素。",[32,166322,166323],{},"使用字典保存一个学生的信息，并实现修改成绩。",[32,166325,166326],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[617,166328,166329],{},"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":54,"searchDepth":565,"depth":565,"links":166331},[166332,166333,166334,166335,166336,166337,166338,166339,166340,166341,166342,166343,166344,166345,166346,166347,166348],{"id":163312,"depth":565,"text":163313},{"id":163429,"depth":565,"text":163430},{"id":163519,"depth":565,"text":163520},{"id":163643,"depth":565,"text":163644},{"id":164006,"depth":565,"text":164007},{"id":164193,"depth":565,"text":164194},{"id":164312,"depth":565,"text":164313},{"id":164454,"depth":565,"text":164455},{"id":164641,"depth":565,"text":164642},{"id":164885,"depth":565,"text":164886},{"id":165095,"depth":565,"text":165096},{"id":165180,"depth":565,"text":165181},{"id":165478,"depth":565,"text":165479},{"id":165760,"depth":565,"text":165761},{"id":165952,"depth":565,"text":165953},{"id":166275,"depth":565,"text":166276},{"id":166308,"depth":565,"text":166309},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163304,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166355,"title":166356,"body":166357,"description":23942,"extension":638,"meta":168529,"navigation":640,"path":168530,"seo":168531,"stem":168532,"__hash__":168533},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166358,"toc":168504},[166359,166362,166366,166369,166449,166452,166473,166476,166480,166483,166545,166548,166565,166569,166572,166617,166619,166627,166631,166634,166716,166719,166722,166747,166750,166773,166777,166780,166782,166844,166847,166849,166900,166904,166908,166914,167019,167023,167029,167100,167104,167107,167175,167178,167258,167262,167268,167304,167307,167310,167420,167426,167430,167433,167505,167508,167512,167516,167521,167583,167587,167592,167660,167664,167669,167785,167789,167792,167872,167875,167879,167882,167986,167988,168003,168006,168010,168148,168156,168160,168162,168173,168175,168433,168437,168469,168473,168501],[10,166360,166356],{"id":166361},"_7-函数进阶",[14,166363,166365],{"id":166364},"_71-多返回值","7.1 多返回值",[19,166367,166368],{},"Python 函数可以返回多个值，本质上返回的是元组。",[469,166370,166372],{"className":30758,"code":166371,"language":30760,"meta":54,"style":54},"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",[475,166373,166374,166383,166391,166399,166408,166415,166419,166423,166432,166438],{"__ignoreMap":54},[478,166375,166376,166378,166381],{"class":480,"line":481},[478,166377,32327],{"class":710},[478,166379,166380],{"class":484}," get_info",[478,166382,32333],{"class":714},[478,166384,166385,166387,166389],{"class":480,"line":565},[478,166386,152750],{"class":714},[478,166388,759],{"class":710},[478,166390,149733],{"class":488},[478,166392,166393,166395,166397],{"class":480,"line":579},[478,166394,152766],{"class":714},[478,166396,759],{"class":710},[478,166398,146931],{"class":495},[478,166400,166401,166403,166405],{"class":480,"line":593},[478,166402,152781],{"class":714},[478,166404,759],{"class":710},[478,166406,166407],{"class":495}," 95\n",[478,166409,166410,166412],{"class":480,"line":1769},[478,166411,4656],{"class":710},[478,166413,166414],{"class":714}," name, age, score\n",[478,166416,166417],{"class":480,"line":1783},[478,166418,2966],{"emptyLinePlaceholder":640},[478,166420,166421],{"class":480,"line":1789},[478,166422,2966],{"emptyLinePlaceholder":640},[478,166424,166425,166427,166429],{"class":480,"line":1880},[478,166426,161686],{"class":714},[478,166428,759],{"class":710},[478,166430,166431],{"class":714}," get_info()\n",[478,166433,166434,166436],{"class":480,"line":1886},[478,166435,30795],{"class":495},[478,166437,76965],{"class":714},[478,166439,166440,166442,166444,166446],{"class":480,"line":1898},[478,166441,30795],{"class":495},[478,166443,263],{"class":714},[478,166445,103487],{"class":495},[478,166447,166448],{"class":714},"(result))\n",[19,166450,166451],{},"可以直接解包：",[469,166453,166455],{"className":30758,"code":166454,"language":30760,"meta":54,"style":54},"name, age, score = get_info()\nprint(name, age, score)\n",[475,166456,166457,166466],{"__ignoreMap":54},[478,166458,166459,166462,166464],{"class":480,"line":481},[478,166460,166461],{"class":714},"name, age, score ",[478,166463,759],{"class":710},[478,166465,166431],{"class":714},[478,166467,166468,166470],{"class":480,"line":565},[478,166469,30795],{"class":495},[478,166471,166472],{"class":714},"(name, age, score)\n",[19,166474,166475],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166477,166479],{"id":166478},"_72-位置参数","7.2 位置参数",[19,166481,166482],{},"位置参数按顺序传递。",[469,166484,166486],{"className":30758,"code":166485,"language":30760,"meta":54,"style":54},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[475,166487,166488,166496,166524,166528,166532],{"__ignoreMap":54},[478,166489,166490,166492,166494],{"class":480,"line":481},[478,166491,32327],{"class":710},[478,166493,149752],{"class":484},[478,166495,149755],{"class":714},[478,166497,166498,166500,166502,166504,166506,166508,166510,166512,166514,166516,166518,166520,166522],{"class":480,"line":565},[478,166499,31679],{"class":495},[478,166501,263],{"class":714},[478,166503,218],{"class":710},[478,166505,149766],{"class":488},[478,166507,1591],{"class":495},[478,166509,80190],{"class":714},[478,166511,1641],{"class":495},[478,166513,149775],{"class":488},[478,166515,1591],{"class":495},[478,166517,70601],{"class":714},[478,166519,1641],{"class":495},[478,166521,149784],{"class":488},[478,166523,720],{"class":714},[478,166525,166526],{"class":480,"line":579},[478,166527,2966],{"emptyLinePlaceholder":640},[478,166529,166530],{"class":480,"line":593},[478,166531,2966],{"emptyLinePlaceholder":640},[478,166533,166534,166537,166539,166541,166543],{"class":480,"line":1769},[478,166535,166536],{"class":714},"introduce(",[478,166538,150268],{"class":488},[478,166540,13001],{"class":714},[478,166542,1348],{"class":495},[478,166544,720],{"class":714},[19,166546,166547],{},"顺序错了就会得到错误含义：",[469,166549,166551],{"className":30758,"code":166550,"language":30760,"meta":54,"style":54},"introduce(18, \"小明\")\n",[475,166552,166553],{"__ignoreMap":54},[478,166554,166555,166557,166559,166561,166563],{"class":480,"line":481},[478,166556,166536],{"class":714},[478,166558,1348],{"class":495},[478,166560,13001],{"class":714},[478,166562,150268],{"class":488},[478,166564,720],{"class":714},[14,166566,166568],{"id":166567},"_73-关键字参数","7.3 关键字参数",[19,166570,166571],{},"关键字参数按参数名传递。",[469,166573,166575],{"className":30758,"code":166574,"language":30760,"meta":54,"style":54},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[475,166576,166577,166597],{"__ignoreMap":54},[478,166578,166579,166581,166583,166585,166587,166589,166591,166593,166595],{"class":480,"line":481},[478,166580,166536],{"class":714},[478,166582,80190],{"class":5782},[478,166584,759],{"class":710},[478,166586,150268],{"class":488},[478,166588,13001],{"class":714},[478,166590,70601],{"class":5782},[478,166592,759],{"class":710},[478,166594,1348],{"class":495},[478,166596,720],{"class":714},[478,166598,166599,166601,166603,166605,166607,166609,166611,166613,166615],{"class":480,"line":565},[478,166600,166536],{"class":714},[478,166602,70601],{"class":5782},[478,166604,759],{"class":710},[478,166606,1348],{"class":495},[478,166608,13001],{"class":714},[478,166610,80190],{"class":5782},[478,166612,759],{"class":710},[478,166614,150268],{"class":488},[478,166616,720],{"class":714},[19,166618,118314],{},[29,166620,166621,166624],{},[32,166622,166623],{},"顺序不容易错。",[32,166625,166626],{},"调用时可读性更强。",[14,166628,166630],{"id":166629},"_74-默认参数","7.4 默认参数",[19,166632,166633],{},"默认参数给参数设置默认值。",[469,166635,166637],{"className":30758,"code":166636,"language":30760,"meta":54,"style":54},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[475,166638,166639,166655,166685,166689,166693,166703],{"__ignoreMap":54},[478,166640,166641,166643,166645,166648,166650,166653],{"class":480,"line":481},[478,166642,32327],{"class":710},[478,166644,122473],{"class":484},[478,166646,166647],{"class":714},"(host, port",[478,166649,759],{"class":710},[478,166651,166652],{"class":495},"3306",[478,166654,31166],{"class":714},[478,166656,166657,166659,166661,166663,166666,166668,166670,166672,166674,166676,166679,166681,166683],{"class":480,"line":565},[478,166658,31679],{"class":495},[478,166660,263],{"class":714},[478,166662,218],{"class":710},[478,166664,166665],{"class":488},"\"连接",[478,166667,1591],{"class":495},[478,166669,27775],{"class":714},[478,166671,1641],{"class":495},[478,166673,1554],{"class":488},[478,166675,1591],{"class":495},[478,166677,166678],{"class":714},"port",[478,166680,1641],{"class":495},[478,166682,952],{"class":488},[478,166684,720],{"class":714},[478,166686,166687],{"class":480,"line":579},[478,166688,2966],{"emptyLinePlaceholder":640},[478,166690,166691],{"class":480,"line":593},[478,166692,2966],{"emptyLinePlaceholder":640},[478,166694,166695,166698,166701],{"class":480,"line":1769},[478,166696,166697],{"class":714},"connect(",[478,166699,166700],{"class":488},"\"localhost\"",[478,166702,720],{"class":714},[478,166704,166705,166707,166709,166711,166714],{"class":480,"line":1783},[478,166706,166697],{"class":714},[478,166708,166700],{"class":488},[478,166710,13001],{"class":714},[478,166712,166713],{"class":495},"6379",[478,166715,720],{"class":714},[19,166717,166718],{},"注意：默认参数必须放在非默认参数后面。",[19,166720,166721],{},"错误：",[469,166723,166725],{"className":30758,"code":166724,"language":30760,"meta":54,"style":54},"def connect(port=3306, host):\n    pass\n",[475,166726,166727,166743],{"__ignoreMap":54},[478,166728,166729,166731,166733,166736,166738,166740],{"class":480,"line":481},[478,166730,32327],{"class":710},[478,166732,122473],{"class":484},[478,166734,166735],{"class":714},"(port",[478,166737,759],{"class":710},[478,166739,166652],{"class":495},[478,166741,166742],{"class":714},", host):\n",[478,166744,166745],{"class":480,"line":565},[478,166746,149917],{"class":710},[19,166748,166749],{},"正确：",[469,166751,166753],{"className":30758,"code":166752,"language":30760,"meta":54,"style":54},"def connect(host, port=3306):\n    pass\n",[475,166754,166755,166769],{"__ignoreMap":54},[478,166756,166757,166759,166761,166763,166765,166767],{"class":480,"line":481},[478,166758,32327],{"class":710},[478,166760,122473],{"class":484},[478,166762,166647],{"class":714},[478,166764,759],{"class":710},[478,166766,166652],{"class":495},[478,166768,31166],{"class":714},[478,166770,166771],{"class":480,"line":565},[478,166772,149917],{"class":710},[14,166774,166776],{"id":166775},"_75-默认参数的坑","7.5 默认参数的坑",[19,166778,166779],{},"不要使用可变对象作为默认参数。",[19,166781,158003],{},[469,166783,166785],{"className":30758,"code":166784,"language":30760,"meta":54,"style":54},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[475,166786,166787,166802,166807,166814,166818,166822,166833],{"__ignoreMap":54},[478,166788,166789,166791,166794,166797,166799],{"class":480,"line":481},[478,166790,32327],{"class":710},[478,166792,166793],{"class":484}," add_item",[478,166795,166796],{"class":714},"(item, items",[478,166798,759],{"class":710},[478,166800,166801],{"class":714},"[]):\n",[478,166803,166804],{"class":480,"line":565},[478,166805,166806],{"class":714},"    items.append(item)\n",[478,166808,166809,166811],{"class":480,"line":579},[478,166810,4656],{"class":710},[478,166812,166813],{"class":714}," items\n",[478,166815,166816],{"class":480,"line":593},[478,166817,2966],{"emptyLinePlaceholder":640},[478,166819,166820],{"class":480,"line":1769},[478,166821,2966],{"emptyLinePlaceholder":640},[478,166823,166824,166826,166829,166831],{"class":480,"line":1783},[478,166825,30795],{"class":495},[478,166827,166828],{"class":714},"(add_item(",[478,166830,165705],{"class":488},[478,166832,30877],{"class":714},[478,166834,166835,166837,166839,166842],{"class":480,"line":1789},[478,166836,30795],{"class":495},[478,166838,166828],{"class":714},[478,166840,166841],{"class":488},"\"b\"",[478,166843,30877],{"class":714},[19,166845,166846],{},"第二次调用会复用第一次的列表。",[19,166848,156268],{},[469,166850,166852],{"className":30758,"code":166851,"language":30760,"meta":54,"style":54},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[475,166853,166854,166868,166881,166890,166894],{"__ignoreMap":54},[478,166855,166856,166858,166860,166862,166864,166866],{"class":480,"line":481},[478,166857,32327],{"class":710},[478,166859,166793],{"class":484},[478,166861,166796],{"class":714},[478,166863,759],{"class":710},[478,166865,96066],{"class":495},[478,166867,31166],{"class":714},[478,166869,166870,166872,166875,166877,166879],{"class":480,"line":565},[478,166871,3667],{"class":710},[478,166873,166874],{"class":714}," items ",[478,166876,39307],{"class":710},[478,166878,39313],{"class":495},[478,166880,4305],{"class":714},[478,166882,166883,166886,166888],{"class":480,"line":579},[478,166884,166885],{"class":714},"        items ",[478,166887,759],{"class":710},[478,166889,52218],{"class":714},[478,166891,166892],{"class":480,"line":593},[478,166893,166806],{"class":714},[478,166895,166896,166898],{"class":480,"line":1769},[478,166897,4656],{"class":710},[478,166899,166813],{"class":714},[14,166901,166903],{"id":166902},"_76-不定长参数","7.6 不定长参数",[129,166905,166907],{"id":166906},"_761-args","7.6.1 *args",[19,166909,166910,166913],{},[475,166911,166912],{},"*args"," 接收任意数量的位置参数，得到元组。",[469,166915,166917],{"className":30758,"code":166916,"language":30760,"meta":54,"style":54},"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",[475,166918,166919,166932,166940,166951,166960,166966,166970,166974,166993],{"__ignoreMap":54},[478,166920,166921,166923,166925,166927,166929],{"class":480,"line":481},[478,166922,32327],{"class":710},[478,166924,5775],{"class":484},[478,166926,263],{"class":714},[478,166928,1155],{"class":710},[478,166930,166931],{"class":714},"args):\n",[478,166933,166934,166936,166938],{"class":480,"line":565},[478,166935,159687],{"class":714},[478,166937,759],{"class":710},[478,166939,47713],{"class":495},[478,166941,166942,166944,166946,166948],{"class":480,"line":579},[478,166943,3767],{"class":710},[478,166945,156560],{"class":714},[478,166947,26423],{"class":710},[478,166949,166950],{"class":714}," args:\n",[478,166952,166953,166955,166957],{"class":480,"line":593},[478,166954,160362],{"class":714},[478,166956,10043],{"class":710},[478,166958,166959],{"class":714}," num\n",[478,166961,166962,166964],{"class":480,"line":1769},[478,166963,4656],{"class":710},[478,166965,162667],{"class":714},[478,166967,166968],{"class":480,"line":1783},[478,166969,2966],{"emptyLinePlaceholder":640},[478,166971,166972],{"class":480,"line":1789},[478,166973,2966],{"emptyLinePlaceholder":640},[478,166975,166976,166978,166981,166983,166985,166987,166989,166991],{"class":480,"line":1880},[478,166977,30795],{"class":495},[478,166979,166980],{"class":714},"(add(",[478,166982,193],{"class":495},[478,166984,13001],{"class":714},[478,166986,789],{"class":495},[478,166988,13001],{"class":714},[478,166990,783],{"class":495},[478,166992,30877],{"class":714},[478,166994,166995,166997,166999,167001,167003,167005,167007,167009,167011,167013,167015,167017],{"class":480,"line":1886},[478,166996,30795],{"class":495},[478,166998,166980],{"class":714},[478,167000,193],{"class":495},[478,167002,13001],{"class":714},[478,167004,789],{"class":495},[478,167006,13001],{"class":714},[478,167008,783],{"class":495},[478,167010,13001],{"class":714},[478,167012,994],{"class":495},[478,167014,13001],{"class":714},[478,167016,1020],{"class":495},[478,167018,30877],{"class":714},[129,167020,167022],{"id":167021},"_762-kwargs","7.6.2 **kwargs",[19,167024,167025,167028],{},[475,167026,167027],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[469,167030,167032],{"className":30758,"code":167031,"language":30760,"meta":54,"style":54},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[475,167033,167034,167047,167058,167064,167068,167072],{"__ignoreMap":54},[478,167035,167036,167038,167040,167042,167044],{"class":480,"line":481},[478,167037,32327],{"class":710},[478,167039,162325],{"class":484},[478,167041,263],{"class":714},[478,167043,11227],{"class":710},[478,167045,167046],{"class":714},"kwargs):\n",[478,167048,167049,167051,167053,167055],{"class":480,"line":565},[478,167050,3767],{"class":710},[478,167052,165165],{"class":714},[478,167054,26423],{"class":710},[478,167056,167057],{"class":714}," kwargs.items():\n",[478,167059,167060,167062],{"class":480,"line":579},[478,167061,32831],{"class":495},[478,167063,165177],{"class":714},[478,167065,167066],{"class":480,"line":593},[478,167067,2966],{"emptyLinePlaceholder":640},[478,167069,167070],{"class":480,"line":1769},[478,167071,2966],{"emptyLinePlaceholder":640},[478,167073,167074,167076,167078,167080,167082,167084,167086,167088,167090,167092,167094,167096,167098],{"class":480,"line":1783},[478,167075,162390],{"class":714},[478,167077,80190],{"class":5782},[478,167079,759],{"class":710},[478,167081,150268],{"class":488},[478,167083,13001],{"class":714},[478,167085,70601],{"class":5782},[478,167087,759],{"class":710},[478,167089,1348],{"class":495},[478,167091,13001],{"class":714},[478,167093,70652],{"class":5782},[478,167095,759],{"class":710},[478,167097,69649],{"class":488},[478,167099,720],{"class":714},[14,167101,167103],{"id":167102},"_77-参数解包","7.7 参数解包",[19,167105,167106],{},"列表或元组解包为位置参数：",[469,167108,167110],{"className":30758,"code":167109,"language":30760,"meta":54,"style":54},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[475,167111,167112,167121,167136,167140,167144,167164],{"__ignoreMap":54},[478,167113,167114,167116,167118],{"class":480,"line":481},[478,167115,32327],{"class":710},[478,167117,5775],{"class":484},[478,167119,167120],{"class":714},"(a, b, c):\n",[478,167122,167123,167125,167127,167129,167131,167133],{"class":480,"line":565},[478,167124,4656],{"class":710},[478,167126,11435],{"class":714},[478,167128,1181],{"class":710},[478,167130,11448],{"class":714},[478,167132,1181],{"class":710},[478,167134,167135],{"class":714}," c\n",[478,167137,167138],{"class":480,"line":579},[478,167139,2966],{"emptyLinePlaceholder":640},[478,167141,167142],{"class":480,"line":593},[478,167143,2966],{"emptyLinePlaceholder":640},[478,167145,167146,167148,167150,167152,167154,167156,167158,167160,167162],{"class":480,"line":1769},[478,167147,164480],{"class":714},[478,167149,759],{"class":710},[478,167151,52606],{"class":714},[478,167153,193],{"class":495},[478,167155,13001],{"class":714},[478,167157,789],{"class":495},[478,167159,13001],{"class":714},[478,167161,783],{"class":495},[478,167163,33626],{"class":714},[478,167165,167166,167168,167170,167172],{"class":480,"line":1783},[478,167167,30795],{"class":495},[478,167169,166980],{"class":714},[478,167171,1155],{"class":710},[478,167173,167174],{"class":714},"nums))\n",[19,167176,167177],{},"字典解包为关键字参数：",[469,167179,167181],{"className":30758,"code":167180,"language":30760,"meta":54,"style":54},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[475,167182,167183,167191,167217,167221,167225,167249],{"__ignoreMap":54},[478,167184,167185,167187,167189],{"class":480,"line":481},[478,167186,32327],{"class":710},[478,167188,149752],{"class":484},[478,167190,149755],{"class":714},[478,167192,167193,167195,167197,167199,167201,167203,167205,167207,167209,167211,167213,167215],{"class":480,"line":565},[478,167194,31679],{"class":495},[478,167196,263],{"class":714},[478,167198,218],{"class":710},[478,167200,952],{"class":488},[478,167202,1591],{"class":495},[478,167204,80190],{"class":714},[478,167206,1641],{"class":495},[478,167208,5014],{"class":495},[478,167210,70601],{"class":714},[478,167212,1641],{"class":495},[478,167214,952],{"class":488},[478,167216,720],{"class":714},[478,167218,167219],{"class":480,"line":579},[478,167220,2966],{"emptyLinePlaceholder":640},[478,167222,167223],{"class":480,"line":593},[478,167224,2966],{"emptyLinePlaceholder":640},[478,167226,167227,167229,167231,167233,167235,167237,167239,167241,167243,167245,167247],{"class":480,"line":1769},[478,167228,116694],{"class":714},[478,167230,759],{"class":710},[478,167232,5014],{"class":714},[478,167234,63059],{"class":488},[478,167236,51817],{"class":714},[478,167238,150268],{"class":488},[478,167240,13001],{"class":714},[478,167242,69504],{"class":488},[478,167244,51817],{"class":714},[478,167246,1348],{"class":495},[478,167248,2133],{"class":714},[478,167250,167251,167253,167255],{"class":480,"line":1783},[478,167252,166536],{"class":714},[478,167254,11227],{"class":710},[478,167256,167257],{"class":714},"info)\n",[14,167259,167261],{"id":167260},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167263,167264,167267],{},[475,167265,167266],{},"lambda"," 用于定义简单匿名函数。",[469,167269,167271],{"className":30758,"code":167270,"language":30760,"meta":54,"style":54},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[475,167272,167273,167290],{"__ignoreMap":54},[478,167274,167275,167278,167280,167283,167286,167288],{"class":480,"line":481},[478,167276,167277],{"class":714},"add ",[478,167279,759],{"class":710},[478,167281,167282],{"class":710}," lambda",[478,167284,167285],{"class":714}," a, b: a ",[478,167287,1181],{"class":710},[478,167289,151484],{"class":714},[478,167291,167292,167294,167296,167298,167300,167302],{"class":480,"line":565},[478,167293,30795],{"class":495},[478,167295,166980],{"class":714},[478,167297,193],{"class":495},[478,167299,13001],{"class":714},[478,167301,789],{"class":495},[478,167303,30877],{"class":714},[19,167305,167306],{},"常和排序、过滤等函数一起使用。",[19,167308,167309],{},"按分数排序：",[469,167311,167313],{"className":30758,"code":167312,"language":30760,"meta":54,"style":54},"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",[475,167314,167315,167323,167343,167363,167383,167387,167391,167414],{"__ignoreMap":54},[478,167316,167317,167319,167321],{"class":480,"line":481},[478,167318,160096],{"class":714},[478,167320,759],{"class":710},[478,167322,55827],{"class":714},[478,167324,167325,167327,167329,167331,167333,167335,167337,167339,167341],{"class":480,"line":565},[478,167326,148765],{"class":714},[478,167328,63059],{"class":488},[478,167330,51817],{"class":714},[478,167332,150268],{"class":488},[478,167334,13001],{"class":714},[478,167336,151852],{"class":488},[478,167338,51817],{"class":714},[478,167340,1684],{"class":495},[478,167342,5496],{"class":714},[478,167344,167345,167347,167349,167351,167353,167355,167357,167359,167361],{"class":480,"line":579},[478,167346,148765],{"class":714},[478,167348,63059],{"class":488},[478,167350,51817],{"class":714},[478,167352,151316],{"class":488},[478,167354,13001],{"class":714},[478,167356,151852],{"class":488},[478,167358,51817],{"class":714},[478,167360,1506],{"class":495},[478,167362,5496],{"class":714},[478,167364,167365,167367,167369,167371,167373,167375,167377,167379,167381],{"class":480,"line":593},[478,167366,148765],{"class":714},[478,167368,63059],{"class":488},[478,167370,51817],{"class":714},[478,167372,160111],{"class":488},[478,167374,13001],{"class":714},[478,167376,151852],{"class":488},[478,167378,51817],{"class":714},[478,167380,1107],{"class":495},[478,167382,5496],{"class":714},[478,167384,167385],{"class":480,"line":1769},[478,167386,33626],{"class":714},[478,167388,167389],{"class":480,"line":1783},[478,167390,2966],{"emptyLinePlaceholder":640},[478,167392,167393,167396,167398,167400,167402,167404,167406,167408,167410,167412],{"class":480,"line":1789},[478,167394,167395],{"class":714},"students.sort(",[478,167397,154326],{"class":5782},[478,167399,154329],{"class":710},[478,167401,154332],{"class":714},[478,167403,151852],{"class":488},[478,167405,112582],{"class":714},[478,167407,163908],{"class":5782},[478,167409,759],{"class":710},[478,167411,31856],{"class":495},[478,167413,720],{"class":714},[478,167415,167416,167418],{"class":480,"line":1880},[478,167417,30795],{"class":495},[478,167419,165375],{"class":714},[19,167421,167422,167423,167425],{},"如果逻辑复杂，不要硬写 ",[475,167424,167266],{},"，定义普通函数更清晰。",[14,167427,167429],{"id":167428},"_79-函数作为参数","7.9 函数作为参数",[19,167431,167432],{},"函数可以作为参数传给另一个函数。",[469,167434,167436],{"className":30758,"code":167435,"language":30760,"meta":54,"style":54},"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",[475,167437,167438,167446,167456,167460,167464,167474,167481,167485,167489],{"__ignoreMap":54},[478,167439,167440,167442,167444],{"class":480,"line":481},[478,167441,32327],{"class":710},[478,167443,5775],{"class":484},[478,167445,151473],{"class":714},[478,167447,167448,167450,167452,167454],{"class":480,"line":565},[478,167449,4656],{"class":710},[478,167451,11435],{"class":714},[478,167453,1181],{"class":710},[478,167455,151484],{"class":714},[478,167457,167458],{"class":480,"line":579},[478,167459,2966],{"emptyLinePlaceholder":640},[478,167461,167462],{"class":480,"line":593},[478,167463,2966],{"emptyLinePlaceholder":640},[478,167465,167466,167468,167471],{"class":480,"line":1769},[478,167467,32327],{"class":710},[478,167469,167470],{"class":484}," calculate",[478,167472,167473],{"class":714},"(a, b, func):\n",[478,167475,167476,167478],{"class":480,"line":1783},[478,167477,4656],{"class":710},[478,167479,167480],{"class":714}," func(a, b)\n",[478,167482,167483],{"class":480,"line":1789},[478,167484,2966],{"emptyLinePlaceholder":640},[478,167486,167487],{"class":480,"line":1880},[478,167488,2966],{"emptyLinePlaceholder":640},[478,167490,167491,167493,167496,167498,167500,167502],{"class":480,"line":1886},[478,167492,30795],{"class":495},[478,167494,167495],{"class":714},"(calculate(",[478,167497,1146],{"class":495},[478,167499,13001],{"class":714},[478,167501,1396],{"class":495},[478,167503,167504],{"class":714},", add))\n",[19,167506,167507],{},"这种思想在排序、回调、框架中经常出现。",[14,167509,167511],{"id":167510},"_710-mapfiltersorted","7.10 map、filter、sorted",[129,167513,167515],{"id":167514},"_7101-map","7.10.1 map",[19,167517,167518,167520],{},[475,167519,74424],{}," 对每个元素执行函数。",[469,167522,167524],{"className":30758,"code":167523,"language":30760,"meta":54,"style":54},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[475,167525,167526,167550,167573],{"__ignoreMap":54},[478,167527,167528,167530,167532,167534,167536,167538,167540,167542,167544,167546,167548],{"class":480,"line":481},[478,167529,164480],{"class":714},[478,167531,759],{"class":710},[478,167533,52606],{"class":714},[478,167535,193],{"class":495},[478,167537,13001],{"class":714},[478,167539,789],{"class":495},[478,167541,13001],{"class":714},[478,167543,783],{"class":495},[478,167545,13001],{"class":714},[478,167547,994],{"class":495},[478,167549,33626],{"class":714},[478,167551,167552,167554,167556,167559,167561,167563,167566,167568,167570],{"class":480,"line":565},[478,167553,161686],{"class":714},[478,167555,759],{"class":710},[478,167557,167558],{"class":495}," map",[478,167560,263],{"class":714},[478,167562,167266],{"class":710},[478,167564,167565],{"class":714}," x: x ",[478,167567,1155],{"class":710},[478,167569,15320],{"class":495},[478,167571,167572],{"class":714},", nums)\n",[478,167574,167575,167577,167579,167581],{"class":480,"line":579},[478,167576,30795],{"class":495},[478,167578,263],{"class":714},[478,167580,154450],{"class":495},[478,167582,166448],{"class":714},[129,167584,167586],{"id":167585},"_7102-filter","7.10.2 filter",[19,167588,167589,167591],{},[475,167590,80431],{}," 保留满足条件的元素。",[469,167593,167595],{"className":30758,"code":167594,"language":30760,"meta":54,"style":54},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[475,167596,167597,167625,167650],{"__ignoreMap":54},[478,167598,167599,167601,167603,167605,167607,167609,167611,167613,167615,167617,167619,167621,167623],{"class":480,"line":481},[478,167600,164480],{"class":714},[478,167602,759],{"class":710},[478,167604,52606],{"class":714},[478,167606,193],{"class":495},[478,167608,13001],{"class":714},[478,167610,789],{"class":495},[478,167612,13001],{"class":714},[478,167614,783],{"class":495},[478,167616,13001],{"class":714},[478,167618,994],{"class":495},[478,167620,13001],{"class":714},[478,167622,1020],{"class":495},[478,167624,33626],{"class":714},[478,167626,167627,167629,167631,167634,167636,167638,167640,167642,167644,167646,167648],{"class":480,"line":565},[478,167628,161686],{"class":714},[478,167630,759],{"class":710},[478,167632,167633],{"class":495}," filter",[478,167635,263],{"class":714},[478,167637,167266],{"class":710},[478,167639,167565],{"class":714},[478,167641,1029],{"class":710},[478,167643,15320],{"class":495},[478,167645,101939],{"class":710},[478,167647,4659],{"class":495},[478,167649,167572],{"class":714},[478,167651,167652,167654,167656,167658],{"class":480,"line":579},[478,167653,30795],{"class":495},[478,167655,263],{"class":714},[478,167657,154450],{"class":495},[478,167659,166448],{"class":714},[129,167661,167663],{"id":167662},"_7103-sorted","7.10.3 sorted",[19,167665,167666,167668],{},[475,167667,165616],{}," 返回排序后的新列表。",[469,167670,167672],{"className":30758,"code":167671,"language":30760,"meta":54,"style":54},"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",[475,167673,167674,167682,167702,167722,167742,167746,167750,167779],{"__ignoreMap":54},[478,167675,167676,167678,167680],{"class":480,"line":481},[478,167677,160096],{"class":714},[478,167679,759],{"class":710},[478,167681,55827],{"class":714},[478,167683,167684,167686,167688,167690,167692,167694,167696,167698,167700],{"class":480,"line":565},[478,167685,148765],{"class":714},[478,167687,63059],{"class":488},[478,167689,51817],{"class":714},[478,167691,150268],{"class":488},[478,167693,13001],{"class":714},[478,167695,151852],{"class":488},[478,167697,51817],{"class":714},[478,167699,1684],{"class":495},[478,167701,5496],{"class":714},[478,167703,167704,167706,167708,167710,167712,167714,167716,167718,167720],{"class":480,"line":579},[478,167705,148765],{"class":714},[478,167707,63059],{"class":488},[478,167709,51817],{"class":714},[478,167711,151316],{"class":488},[478,167713,13001],{"class":714},[478,167715,151852],{"class":488},[478,167717,51817],{"class":714},[478,167719,1506],{"class":495},[478,167721,5496],{"class":714},[478,167723,167724,167726,167728,167730,167732,167734,167736,167738,167740],{"class":480,"line":593},[478,167725,148765],{"class":714},[478,167727,63059],{"class":488},[478,167729,51817],{"class":714},[478,167731,160111],{"class":488},[478,167733,13001],{"class":714},[478,167735,151852],{"class":488},[478,167737,51817],{"class":714},[478,167739,1107],{"class":495},[478,167741,5496],{"class":714},[478,167743,167744],{"class":480,"line":1769},[478,167745,33626],{"class":714},[478,167747,167748],{"class":480,"line":1783},[478,167749,2966],{"emptyLinePlaceholder":640},[478,167751,167752,167754,167756,167758,167761,167763,167765,167767,167769,167771,167773,167775,167777],{"class":480,"line":1789},[478,167753,161686],{"class":714},[478,167755,759],{"class":710},[478,167757,163984],{"class":495},[478,167759,167760],{"class":714},"(students, ",[478,167762,154326],{"class":5782},[478,167764,154329],{"class":710},[478,167766,154332],{"class":714},[478,167768,151852],{"class":488},[478,167770,112582],{"class":714},[478,167772,163908],{"class":5782},[478,167774,759],{"class":710},[478,167776,31856],{"class":495},[478,167778,720],{"class":714},[478,167780,167781,167783],{"class":480,"line":1880},[478,167782,30795],{"class":495},[478,167784,76965],{"class":714},[14,167786,167788],{"id":167787},"_711-闭包入门","7.11 闭包入门",[19,167790,167791],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[469,167793,167795],{"className":30758,"code":167794,"language":30760,"meta":54,"style":54},"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",[475,167796,167797,167807,167817,167828,167832,167839,167843,167847,167861],{"__ignoreMap":54},[478,167798,167799,167801,167804],{"class":480,"line":481},[478,167800,32327],{"class":710},[478,167802,167803],{"class":484}," outer",[478,167805,167806],{"class":714},"(base):\n",[478,167808,167809,167811,167814],{"class":480,"line":565},[478,167810,31181],{"class":710},[478,167812,167813],{"class":484}," inner",[478,167815,167816],{"class":714},"(num):\n",[478,167818,167819,167821,167824,167826],{"class":480,"line":579},[478,167820,15317],{"class":710},[478,167822,167823],{"class":714}," base ",[478,167825,1181],{"class":710},[478,167827,166959],{"class":714},[478,167829,167830],{"class":480,"line":593},[478,167831,2966],{"emptyLinePlaceholder":640},[478,167833,167834,167836],{"class":480,"line":1769},[478,167835,4656],{"class":710},[478,167837,167838],{"class":714}," inner\n",[478,167840,167841],{"class":480,"line":1783},[478,167842,2966],{"emptyLinePlaceholder":640},[478,167844,167845],{"class":480,"line":1789},[478,167846,2966],{"emptyLinePlaceholder":640},[478,167848,167849,167852,167854,167857,167859],{"class":480,"line":1880},[478,167850,167851],{"class":714},"add_10 ",[478,167853,759],{"class":710},[478,167855,167856],{"class":714}," outer(",[478,167858,1146],{"class":495},[478,167860,720],{"class":714},[478,167862,167863,167865,167868,167870],{"class":480,"line":1886},[478,167864,30795],{"class":495},[478,167866,167867],{"class":714},"(add_10(",[478,167869,1020],{"class":495},[478,167871,30877],{"class":714},[19,167873,167874],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167876,167878],{"id":167877},"_712-装饰器入门","7.12 装饰器入门",[19,167880,167881],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[469,167883,167885],{"className":30758,"code":167884,"language":30760,"meta":54,"style":54},"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",[475,167886,167887,167896,167905,167916,167921,167932,167936,167943,167947,167951,167956,167964,167974,167978,167982],{"__ignoreMap":54},[478,167888,167889,167891,167893],{"class":480,"line":481},[478,167890,32327],{"class":710},[478,167892,87571],{"class":484},[478,167894,167895],{"class":714},"(func):\n",[478,167897,167898,167900,167903],{"class":480,"line":565},[478,167899,31181],{"class":710},[478,167901,167902],{"class":484}," wrapper",[478,167904,32333],{"class":714},[478,167906,167907,167909,167911,167914],{"class":480,"line":579},[478,167908,32831],{"class":495},[478,167910,263],{"class":714},[478,167912,167913],{"class":488},"\"函数开始执行\"",[478,167915,720],{"class":714},[478,167917,167918],{"class":480,"line":593},[478,167919,167920],{"class":714},"        func()\n",[478,167922,167923,167925,167927,167930],{"class":480,"line":1769},[478,167924,32831],{"class":495},[478,167926,263],{"class":714},[478,167928,167929],{"class":488},"\"函数执行结束\"",[478,167931,720],{"class":714},[478,167933,167934],{"class":480,"line":1783},[478,167935,2966],{"emptyLinePlaceholder":640},[478,167937,167938,167940],{"class":480,"line":1789},[478,167939,4656],{"class":710},[478,167941,167942],{"class":714}," wrapper\n",[478,167944,167945],{"class":480,"line":1880},[478,167946,2966],{"emptyLinePlaceholder":640},[478,167948,167949],{"class":480,"line":1886},[478,167950,2966],{"emptyLinePlaceholder":640},[478,167952,167953],{"class":480,"line":1898},[478,167954,167955],{"class":484},"@log\n",[478,167957,167958,167960,167962],{"class":480,"line":2180},[478,167959,32327],{"class":710},[478,167961,161376],{"class":484},[478,167963,32333],{"class":714},[478,167965,167966,167968,167970,167972],{"class":480,"line":2185},[478,167967,31679],{"class":495},[478,167969,263],{"class":714},[478,167971,6410],{"class":488},[478,167973,720],{"class":714},[478,167975,167976],{"class":480,"line":2191},[478,167977,2966],{"emptyLinePlaceholder":640},[478,167979,167980],{"class":480,"line":2196},[478,167981,2966],{"emptyLinePlaceholder":640},[478,167983,167984],{"class":480,"line":2210},[478,167985,161411],{"class":714},[19,167987,158654],{},[469,167989,167991],{"className":30758,"code":167990,"language":30760,"meta":54,"style":54},"say_hello = log(say_hello)\n",[475,167992,167993],{"__ignoreMap":54},[478,167994,167995,167998,168000],{"class":480,"line":481},[478,167996,167997],{"class":714},"say_hello ",[478,167999,759],{"class":710},[478,168001,168002],{"class":714}," log(say_hello)\n",[19,168004,168005],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168007,168009],{"id":168008},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[469,168011,168013],{"className":30758,"code":168012,"language":30760,"meta":54,"style":54},"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",[475,168014,168015,168023,168040,168050,168069,168079,168086,168090,168096,168100,168104,168108,168116,168126,168130,168134],{"__ignoreMap":54},[478,168016,168017,168019,168021],{"class":480,"line":481},[478,168018,32327],{"class":710},[478,168020,87571],{"class":484},[478,168022,167895],{"class":714},[478,168024,168025,168027,168029,168031,168033,168036,168038],{"class":480,"line":565},[478,168026,31181],{"class":710},[478,168028,167902],{"class":484},[478,168030,263],{"class":714},[478,168032,1155],{"class":710},[478,168034,168035],{"class":714},"args, ",[478,168037,11227],{"class":710},[478,168039,167046],{"class":714},[478,168041,168042,168044,168046,168048],{"class":480,"line":579},[478,168043,32831],{"class":495},[478,168045,263],{"class":714},[478,168047,167913],{"class":488},[478,168049,720],{"class":714},[478,168051,168052,168055,168057,168060,168062,168064,168066],{"class":480,"line":593},[478,168053,168054],{"class":714},"        result ",[478,168056,759],{"class":710},[478,168058,168059],{"class":714}," func(",[478,168061,1155],{"class":710},[478,168063,168035],{"class":714},[478,168065,11227],{"class":710},[478,168067,168068],{"class":714},"kwargs)\n",[478,168070,168071,168073,168075,168077],{"class":480,"line":1769},[478,168072,32831],{"class":495},[478,168074,263],{"class":714},[478,168076,167929],{"class":488},[478,168078,720],{"class":714},[478,168080,168081,168083],{"class":480,"line":1783},[478,168082,15317],{"class":710},[478,168084,168085],{"class":714}," result\n",[478,168087,168088],{"class":480,"line":1789},[478,168089,2966],{"emptyLinePlaceholder":640},[478,168091,168092,168094],{"class":480,"line":1880},[478,168093,4656],{"class":710},[478,168095,167942],{"class":714},[478,168097,168098],{"class":480,"line":1886},[478,168099,2966],{"emptyLinePlaceholder":640},[478,168101,168102],{"class":480,"line":1898},[478,168103,2966],{"emptyLinePlaceholder":640},[478,168105,168106],{"class":480,"line":2180},[478,168107,167955],{"class":484},[478,168109,168110,168112,168114],{"class":480,"line":2185},[478,168111,32327],{"class":710},[478,168113,5775],{"class":484},[478,168115,151473],{"class":714},[478,168117,168118,168120,168122,168124],{"class":480,"line":2191},[478,168119,4656],{"class":710},[478,168121,11435],{"class":714},[478,168123,1181],{"class":710},[478,168125,151484],{"class":714},[478,168127,168128],{"class":480,"line":2196},[478,168129,2966],{"emptyLinePlaceholder":640},[478,168131,168132],{"class":480,"line":2210},[478,168133,2966],{"emptyLinePlaceholder":640},[478,168135,168136,168138,168140,168142,168144,168146],{"class":480,"line":2215},[478,168137,30795],{"class":495},[478,168139,166980],{"class":714},[478,168141,1146],{"class":495},[478,168143,13001],{"class":714},[478,168145,1396],{"class":495},[478,168147,30877],{"class":714},[19,168149,168150,168151,101398,168153,168155],{},"这个写法使用 ",[475,168152,166912],{},[475,168154,167027],{}," 接收原函数的所有参数。",[14,168157,168159],{"id":168158},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168161,123672],{},[29,168163,168164,168167,168170],{},[32,168165,168166],{},"给定一组学生数据。",[32,168168,168169],{},"封装函数，根据传入规则筛选学生。",[32,168171,168172],{},"筛选及格、优秀、未成年学生。",[19,168174,10601],{},[469,168176,168178],{"className":30758,"code":168177,"language":30760,"meta":54,"style":54},"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",[475,168179,168180,168188,168216,168244,168272,168276,168280,168284,168294,168302,168312,168319,168324,168330,168334,168338,168362,168385,168408,168412,168419,168426],{"__ignoreMap":54},[478,168181,168182,168184,168186],{"class":480,"line":481},[478,168183,160096],{"class":714},[478,168185,759],{"class":710},[478,168187,55827],{"class":714},[478,168189,168190,168192,168194,168196,168198,168200,168202,168204,168206,168208,168210,168212,168214],{"class":480,"line":565},[478,168191,148765],{"class":714},[478,168193,63059],{"class":488},[478,168195,51817],{"class":714},[478,168197,150268],{"class":488},[478,168199,13001],{"class":714},[478,168201,69504],{"class":488},[478,168203,51817],{"class":714},[478,168205,1348],{"class":495},[478,168207,13001],{"class":714},[478,168209,151852],{"class":488},[478,168211,51817],{"class":714},[478,168213,1684],{"class":495},[478,168215,5496],{"class":714},[478,168217,168218,168220,168222,168224,168226,168228,168230,168232,168234,168236,168238,168240,168242],{"class":480,"line":579},[478,168219,148765],{"class":714},[478,168221,63059],{"class":488},[478,168223,51817],{"class":714},[478,168225,151316],{"class":488},[478,168227,13001],{"class":714},[478,168229,69504],{"class":488},[478,168231,51817],{"class":714},[478,168233,1323],{"class":495},[478,168235,13001],{"class":714},[478,168237,151852],{"class":488},[478,168239,51817],{"class":714},[478,168241,1506],{"class":495},[478,168243,5496],{"class":714},[478,168245,168246,168248,168250,168252,168254,168256,168258,168260,168262,168264,168266,168268,168270],{"class":480,"line":593},[478,168247,148765],{"class":714},[478,168249,63059],{"class":488},[478,168251,51817],{"class":714},[478,168253,160111],{"class":488},[478,168255,13001],{"class":714},[478,168257,69504],{"class":488},[478,168259,51817],{"class":714},[478,168261,1372],{"class":495},[478,168263,13001],{"class":714},[478,168265,151852],{"class":488},[478,168267,51817],{"class":714},[478,168269,1577],{"class":495},[478,168271,5496],{"class":714},[478,168273,168274],{"class":480,"line":1769},[478,168275,33626],{"class":714},[478,168277,168278],{"class":480,"line":1783},[478,168279,2966],{"emptyLinePlaceholder":640},[478,168281,168282],{"class":480,"line":1789},[478,168283,2966],{"emptyLinePlaceholder":640},[478,168285,168286,168288,168291],{"class":480,"line":1880},[478,168287,32327],{"class":710},[478,168289,168290],{"class":484}," filter_students",[478,168292,168293],{"class":714},"(students, condition):\n",[478,168295,168296,168298,168300],{"class":480,"line":1886},[478,168297,161603],{"class":714},[478,168299,759],{"class":710},[478,168301,52218],{"class":714},[478,168303,168304,168306,168308,168310],{"class":480,"line":1898},[478,168305,3767],{"class":710},[478,168307,152517],{"class":714},[478,168309,26423],{"class":710},[478,168311,152522],{"class":714},[478,168313,168314,168316],{"class":480,"line":2180},[478,168315,3063],{"class":710},[478,168317,168318],{"class":714}," condition(student):\n",[478,168320,168321],{"class":480,"line":2185},[478,168322,168323],{"class":714},"            result.append(student)\n",[478,168325,168326,168328],{"class":480,"line":2191},[478,168327,4656],{"class":710},[478,168329,168085],{"class":714},[478,168331,168332],{"class":480,"line":2196},[478,168333,2966],{"emptyLinePlaceholder":640},[478,168335,168336],{"class":480,"line":2210},[478,168337,2966],{"emptyLinePlaceholder":640},[478,168339,168340,168342,168344,168347,168349,168352,168354,168356,168358,168360],{"class":480,"line":2215},[478,168341,166081],{"class":714},[478,168343,759],{"class":710},[478,168345,168346],{"class":714}," filter_students(students, ",[478,168348,167266],{"class":710},[478,168350,168351],{"class":714}," s: s[",[478,168353,151852],{"class":488},[478,168355,5009],{"class":714},[478,168357,2277],{"class":710},[478,168359,158217],{"class":495},[478,168361,720],{"class":714},[478,168363,168364,168367,168369,168371,168373,168375,168377,168379,168381,168383],{"class":480,"line":2221},[478,168365,168366],{"class":714},"excellent ",[478,168368,759],{"class":710},[478,168370,168346],{"class":714},[478,168372,167266],{"class":710},[478,168374,168351],{"class":714},[478,168376,151852],{"class":488},[478,168378,5009],{"class":714},[478,168380,2277],{"class":710},[478,168382,158168],{"class":495},[478,168384,720],{"class":714},[478,168386,168387,168390,168392,168394,168396,168398,168400,168402,168404,168406],{"class":480,"line":2241},[478,168388,168389],{"class":714},"under_age ",[478,168391,759],{"class":710},[478,168393,168346],{"class":714},[478,168395,167266],{"class":710},[478,168397,168351],{"class":714},[478,168399,69504],{"class":488},[478,168401,5009],{"class":714},[478,168403,1605],{"class":710},[478,168405,156665],{"class":495},[478,168407,720],{"class":714},[478,168409,168410],{"class":480,"line":2246},[478,168411,2966],{"emptyLinePlaceholder":640},[478,168413,168414,168416],{"class":480,"line":2260},[478,168415,30795],{"class":495},[478,168417,168418],{"class":714},"(passed)\n",[478,168420,168421,168423],{"class":480,"line":2265},[478,168422,30795],{"class":495},[478,168424,168425],{"class":714},"(excellent)\n",[478,168427,168428,168430],{"class":480,"line":2294},[478,168429,30795],{"class":495},[478,168431,168432],{"class":714},"(under_age)\n",[14,168434,168436],{"id":168435},"_715-易错点","7.15 易错点",[29,168438,168439,168442,168450,168455,168466],{},[32,168440,168441],{},"默认参数不要写可变对象。",[32,168443,168444,168446,168447,168449],{},[475,168445,166912],{}," 是元组，",[475,168448,167027],{}," 是字典。",[32,168451,168452,168454],{},[475,168453,167266],{}," 只适合简单表达式。",[32,168456,168457,101398,168459,168461,168462,168465],{},[475,168458,74424],{},[475,168460,80431],{}," 的结果是迭代器，常用 ",[475,168463,168464],{},"list()"," 转换查看。",[32,168467,168468],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168470,168472],{"id":168471},"_716-本章练习","7.16 本章练习",[29,168474,168475,168482,168488,168493,168498],{},[32,168476,168477,168478,168481],{},"写函数 ",[475,168479,168480],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[32,168483,168477,168484,168487],{},[475,168485,168486],{},"print_user(**kwargs)","，输出用户所有字段。",[32,168489,104746,168490,168492],{},[475,168491,167266],{}," 对学生列表按年龄排序。",[32,168494,104746,168495,168497],{},[475,168496,80431],{}," 找出成绩不及格的学生。",[32,168499,168500],{},"写一个装饰器，统计函数执行前后的提示信息。",[617,168502,168503],{},"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":54,"searchDepth":565,"depth":565,"links":168505},[168506,168507,168508,168509,168510,168511,168515,168516,168517,168518,168523,168524,168525,168526,168527,168528],{"id":166364,"depth":565,"text":166365},{"id":166478,"depth":565,"text":166479},{"id":166567,"depth":565,"text":166568},{"id":166629,"depth":565,"text":166630},{"id":166775,"depth":565,"text":166776},{"id":166902,"depth":565,"text":166903,"children":168512},[168513,168514],{"id":166906,"depth":579,"text":166907},{"id":167021,"depth":579,"text":167022},{"id":167102,"depth":565,"text":167103},{"id":167260,"depth":565,"text":167261},{"id":167428,"depth":565,"text":167429},{"id":167510,"depth":565,"text":167511,"children":168519},[168520,168521,168522],{"id":167514,"depth":579,"text":167515},{"id":167585,"depth":579,"text":167586},{"id":167662,"depth":579,"text":167663},{"id":167787,"depth":565,"text":167788},{"id":167877,"depth":565,"text":167878},{"id":168008,"depth":565,"text":168009},{"id":168158,"depth":565,"text":168159},{"id":168435,"depth":565,"text":168436},{"id":168471,"depth":565,"text":168472},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166356,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168535,"title":168536,"body":168537,"description":23942,"extension":638,"meta":171056,"navigation":640,"path":171057,"seo":171058,"stem":171059,"__hash__":171060},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168538,"toc":171031},[168539,168542,168546,168549,168552,168583,168587,168591,168594,168621,168625,168628,168679,168682,168697,168700,168735,168739,168741,168765,168768,168828,168832,168836,168839,168896,168899,168919,168923,168926,168989,168993,168996,169052,169059,169083,169087,169090,169153,169157,169162,169213,169216,169220,169225,169292,169295,169377,169381,169386,169437,169440,169444,169447,169450,169458,169461,169507,169510,169556,169560,169566,169610,169613,169659,169662,169702,169705,169766,169770,169773,169863,169866,170008,170011,170078,170082,170085,170088,170229,170232,170310,170313,170489,170493,170495,170506,170508,170707,170711,170955,170959,170993,170997,171028],[10,168540,168536],{"id":168541},"_8-文件操作",[14,168543,168545],{"id":168544},"_81-文件操作的意义","8.1 文件操作的意义",[19,168547,168548],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168550,168551],{},"常见文件类型：",[29,168553,168554,168560,168566,168572,168578],{},[32,168555,168556,168559],{},[475,168557,168558],{},".txt","：普通文本。",[32,168561,168562,168565],{},[475,168563,168564],{},".csv","：表格文本。",[32,168567,168568,168571],{},[475,168569,168570],{},".json","：结构化数据。",[32,168573,168574,168577],{},[475,168575,168576],{},".log","：日志文件。",[32,168579,168580,168582],{},[475,168581,146732],{},"：Python 源代码。",[14,168584,168586],{"id":168585},"_82-路径","8.2 路径",[129,168588,168590],{"id":168589},"_821-相对路径","8.2.1 相对路径",[19,168592,168593],{},"相对当前运行目录：",[469,168595,168597],{"className":30758,"code":168596,"language":30760,"meta":54,"style":54},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[475,168598,168599],{"__ignoreMap":54},[478,168600,168601,168603,168605,168607,168609,168611,168613,168615,168617,168619],{"class":480,"line":481},[478,168602,87295],{"class":495},[478,168604,263],{"class":714},[478,168606,147176],{"class":488},[478,168608,13001],{"class":714},[478,168610,147181],{"class":488},[478,168612,13001],{"class":714},[478,168614,147186],{"class":5782},[478,168616,759],{"class":710},[478,168618,147191],{"class":488},[478,168620,720],{"class":714},[129,168622,168624],{"id":168623},"_822-绝对路径","8.2.2 绝对路径",[19,168626,168627],{},"从根目录或盘符开始：",[469,168629,168631],{"className":30758,"code":168630,"language":30760,"meta":54,"style":54},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[475,168632,168633,168656],{"__ignoreMap":54},[478,168634,168635,168637,168639,168642,168644,168646,168648,168650,168652,168654],{"class":480,"line":481},[478,168636,87295],{"class":495},[478,168638,263],{"class":714},[478,168640,168641],{"class":488},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[478,168643,13001],{"class":714},[478,168645,147181],{"class":488},[478,168647,13001],{"class":714},[478,168649,147186],{"class":5782},[478,168651,759],{"class":710},[478,168653,147191],{"class":488},[478,168655,720],{"class":714},[478,168657,168658,168660,168662,168665,168667,168669,168671,168673,168675,168677],{"class":480,"line":565},[478,168659,87295],{"class":495},[478,168661,263],{"class":714},[478,168663,168664],{"class":488},"\"D:\u002Fdata\u002Fdata.txt\"",[478,168666,13001],{"class":714},[478,168668,147181],{"class":488},[478,168670,13001],{"class":714},[478,168672,147186],{"class":5782},[478,168674,759],{"class":710},[478,168676,147191],{"class":488},[478,168678,720],{"class":714},[19,168680,168681],{},"Windows 路径建议写成：",[469,168683,168685],{"className":30758,"code":168684,"language":30760,"meta":54,"style":54},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[475,168686,168687],{"__ignoreMap":54},[478,168688,168689,168692,168694],{"class":480,"line":481},[478,168690,168691],{"class":714},"path ",[478,168693,759],{"class":710},[478,168695,168696],{"class":488}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168698,168699],{},"或原始字符串：",[469,168701,168703],{"className":30758,"code":168702,"language":30760,"meta":54,"style":54},"path = r\"D:\\data\\data.txt\"\n",[475,168704,168705],{"__ignoreMap":54},[478,168706,168707,168709,168711,168713,168715,168718,168721,168724,168726,168728,168730,168733],{"class":480,"line":481},[478,168708,168691],{"class":714},[478,168710,759],{"class":710},[478,168712,17686],{"class":710},[478,168714,952],{"class":488},[478,168716,168717],{"class":48357},"D:",[478,168719,168720],{"class":495},"\\d",[478,168722,168723],{"class":48357},"ata",[478,168725,168720],{"class":495},[478,168727,168723],{"class":48357},[478,168729,1258],{"class":495},[478,168731,168732],{"class":48357},"txt",[478,168734,25513],{"class":488},[14,168736,168738],{"id":168737},"_83-open函数","8.3 open函数",[19,168740,5747],{},[469,168742,168744],{"className":30758,"code":168743,"language":30760,"meta":54,"style":54},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[475,168745,168746],{"__ignoreMap":54},[478,168747,168748,168750,168752,168754,168757,168759,168761,168763],{"class":480,"line":481},[478,168749,45734],{"class":5782},[478,168751,14130],{"class":710},[478,168753,147171],{"class":495},[478,168755,168756],{"class":714},"(文件路径, 打开模式, ",[478,168758,147186],{"class":5782},[478,168760,759],{"class":710},[478,168762,147191],{"class":488},[478,168764,720],{"class":714},[19,168766,168767],{},"常见模式：",[371,168769,168770,168779],{},[374,168771,168772],{},[377,168773,168774,168777],{},[380,168775,168776],{},"模式",[380,168778,26249],{},[388,168780,168781,168790,168799,168808,168818],{},[377,168782,168783,168787],{},[393,168784,168785],{},[475,168786,1367],{},[393,168788,168789],{},"只读，文件不存在会报错",[377,168791,168792,168796],{},[393,168793,168794],{},[475,168795,1490],{},[393,168797,168798],{},"只写，文件不存在会创建，存在会清空",[377,168800,168801,168805],{},[393,168802,168803],{},[475,168804,518],{},[393,168806,168807],{},"追加，文件不存在会创建",[377,168809,168810,168815],{},[393,168811,168812],{},[475,168813,168814],{},"rb",[393,168816,168817],{},"二进制只读",[377,168819,168820,168825],{},[393,168821,168822],{},[475,168823,168824],{},"wb",[393,168826,168827],{},"二进制只写",[14,168829,168831],{"id":168830},"_84-读取文件","8.4 读取文件",[129,168833,168835],{"id":168834},"_841-read","8.4.1 read",[19,168837,168838],{},"一次读取全部内容：",[469,168840,168842],{"className":30758,"code":168841,"language":30760,"meta":54,"style":54},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[475,168843,168844,168870,168882,168889],{"__ignoreMap":54},[478,168845,168846,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866,168868],{"class":480,"line":481},[478,168847,45734],{"class":5782},[478,168849,14130],{"class":710},[478,168851,147171],{"class":495},[478,168853,263],{"class":714},[478,168855,147176],{"class":488},[478,168857,13001],{"class":714},[478,168859,147181],{"class":488},[478,168861,13001],{"class":714},[478,168863,147186],{"class":5782},[478,168865,759],{"class":710},[478,168867,147191],{"class":488},[478,168869,720],{"class":714},[478,168871,168872,168875,168877,168879],{"class":480,"line":565},[478,168873,168874],{"class":714},"content ",[478,168876,759],{"class":710},[478,168878,148533],{"class":5782},[478,168880,168881],{"class":714},".read()\n",[478,168883,168884,168886],{"class":480,"line":579},[478,168885,30795],{"class":495},[478,168887,168888],{"class":714},"(content)\n",[478,168890,168891,168893],{"class":480,"line":593},[478,168892,45734],{"class":5782},[478,168894,168895],{"class":714},".close()\n",[19,168897,168898],{},"可以指定读取字符数：",[469,168900,168902],{"className":30758,"code":168901,"language":30760,"meta":54,"style":54},"content = file.read(10)\n",[475,168903,168904],{"__ignoreMap":54},[478,168905,168906,168908,168910,168912,168915,168917],{"class":480,"line":481},[478,168907,168874],{"class":714},[478,168909,759],{"class":710},[478,168911,148533],{"class":5782},[478,168913,168914],{"class":714},".read(",[478,168916,1146],{"class":495},[478,168918,720],{"class":714},[129,168920,168922],{"id":168921},"_842-readline","8.4.2 readline",[19,168924,168925],{},"一次读取一行：",[469,168927,168929],{"className":30758,"code":168928,"language":30760,"meta":54,"style":54},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[475,168930,168931,168957,168961,168972,168979,168983],{"__ignoreMap":54},[478,168932,168933,168935,168937,168939,168941,168943,168945,168947,168949,168951,168953,168955],{"class":480,"line":481},[478,168934,45734],{"class":5782},[478,168936,14130],{"class":710},[478,168938,147171],{"class":495},[478,168940,263],{"class":714},[478,168942,147176],{"class":488},[478,168944,13001],{"class":714},[478,168946,147181],{"class":488},[478,168948,13001],{"class":714},[478,168950,147186],{"class":5782},[478,168952,759],{"class":710},[478,168954,147191],{"class":488},[478,168956,720],{"class":714},[478,168958,168959],{"class":480,"line":565},[478,168960,2966],{"emptyLinePlaceholder":640},[478,168962,168963,168965,168967,168969],{"class":480,"line":579},[478,168964,147632],{"class":714},[478,168966,759],{"class":710},[478,168968,148533],{"class":5782},[478,168970,168971],{"class":714},".readline()\n",[478,168973,168974,168976],{"class":480,"line":593},[478,168975,30795],{"class":495},[478,168977,168978],{"class":714},"(line)\n",[478,168980,168981],{"class":480,"line":1769},[478,168982,2966],{"emptyLinePlaceholder":640},[478,168984,168985,168987],{"class":480,"line":1783},[478,168986,45734],{"class":5782},[478,168988,168895],{"class":714},[129,168990,168992],{"id":168991},"_843-readlines","8.4.3 readlines",[19,168994,168995],{},"读取所有行，返回列表：",[469,168997,168999],{"className":30758,"code":168998,"language":30760,"meta":54,"style":54},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[475,169000,169001,169027,169039,169046],{"__ignoreMap":54},[478,169002,169003,169005,169007,169009,169011,169013,169015,169017,169019,169021,169023,169025],{"class":480,"line":481},[478,169004,45734],{"class":5782},[478,169006,14130],{"class":710},[478,169008,147171],{"class":495},[478,169010,263],{"class":714},[478,169012,147176],{"class":488},[478,169014,13001],{"class":714},[478,169016,147181],{"class":488},[478,169018,13001],{"class":714},[478,169020,147186],{"class":5782},[478,169022,759],{"class":710},[478,169024,147191],{"class":488},[478,169026,720],{"class":714},[478,169028,169029,169032,169034,169036],{"class":480,"line":565},[478,169030,169031],{"class":714},"lines ",[478,169033,759],{"class":710},[478,169035,148533],{"class":5782},[478,169037,169038],{"class":714},".readlines()\n",[478,169040,169041,169043],{"class":480,"line":579},[478,169042,30795],{"class":495},[478,169044,169045],{"class":714},"(lines)\n",[478,169047,169048,169050],{"class":480,"line":593},[478,169049,45734],{"class":5782},[478,169051,168895],{"class":714},[19,169053,169054,169055,169058],{},"每一行通常带有换行符，可以用 ",[475,169056,169057],{},"strip()"," 去掉：",[469,169060,169062],{"className":30758,"code":169061,"language":30760,"meta":54,"style":54},"for line in lines:\n    print(line.strip())\n",[475,169063,169064,169076],{"__ignoreMap":54},[478,169065,169066,169068,169071,169073],{"class":480,"line":481},[478,169067,3591],{"class":710},[478,169069,169070],{"class":714}," line ",[478,169072,26423],{"class":710},[478,169074,169075],{"class":714}," lines:\n",[478,169077,169078,169080],{"class":480,"line":565},[478,169079,31679],{"class":495},[478,169081,169082],{"class":714},"(line.strip())\n",[129,169084,169086],{"id":169085},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169088,169089],{},"推荐读取大文件时使用：",[469,169091,169093],{"className":30758,"code":169092,"language":30760,"meta":54,"style":54},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[475,169094,169095,169121,169125,169137,169143,169147],{"__ignoreMap":54},[478,169096,169097,169099,169101,169103,169105,169107,169109,169111,169113,169115,169117,169119],{"class":480,"line":481},[478,169098,45734],{"class":5782},[478,169100,14130],{"class":710},[478,169102,147171],{"class":495},[478,169104,263],{"class":714},[478,169106,147176],{"class":488},[478,169108,13001],{"class":714},[478,169110,147181],{"class":488},[478,169112,13001],{"class":714},[478,169114,147186],{"class":5782},[478,169116,759],{"class":710},[478,169118,147191],{"class":488},[478,169120,720],{"class":714},[478,169122,169123],{"class":480,"line":565},[478,169124,2966],{"emptyLinePlaceholder":640},[478,169126,169127,169129,169131,169133,169135],{"class":480,"line":579},[478,169128,3591],{"class":710},[478,169130,169070],{"class":714},[478,169132,26423],{"class":710},[478,169134,148533],{"class":5782},[478,169136,4305],{"class":714},[478,169138,169139,169141],{"class":480,"line":593},[478,169140,31679],{"class":495},[478,169142,169082],{"class":714},[478,169144,169145],{"class":480,"line":1769},[478,169146,2966],{"emptyLinePlaceholder":640},[478,169148,169149,169151],{"class":480,"line":1783},[478,169150,45734],{"class":5782},[478,169152,168895],{"class":714},[14,169154,169156],{"id":169155},"_85-with语句","8.5 with语句",[19,169158,169159,169161],{},[475,169160,108213],{}," 会自动关闭文件，推荐使用。",[469,169163,169165],{"className":30758,"code":169164,"language":30760,"meta":54,"style":54},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[475,169166,169167,169197,169207],{"__ignoreMap":54},[478,169168,169169,169171,169173,169175,169177,169179,169181,169183,169185,169187,169189,169191,169193,169195],{"class":480,"line":481},[478,169170,108213],{"class":710},[478,169172,147171],{"class":495},[478,169174,263],{"class":714},[478,169176,147176],{"class":488},[478,169178,13001],{"class":714},[478,169180,147181],{"class":488},[478,169182,13001],{"class":714},[478,169184,147186],{"class":5782},[478,169186,759],{"class":710},[478,169188,147191],{"class":488},[478,169190,14280],{"class":714},[478,169192,31763],{"class":710},[478,169194,148533],{"class":5782},[478,169196,4305],{"class":714},[478,169198,169199,169201,169203,169205],{"class":480,"line":565},[478,169200,147203],{"class":714},[478,169202,759],{"class":710},[478,169204,148533],{"class":5782},[478,169206,168881],{"class":714},[478,169208,169209,169211],{"class":480,"line":579},[478,169210,31679],{"class":495},[478,169212,168888],{"class":714},[19,169214,169215],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169217,169219],{"id":169218},"_86-写入文件","8.6 写入文件",[19,169221,169222,169224],{},[475,169223,1490],{}," 模式会清空原文件。",[469,169226,169228],{"className":30758,"code":169227,"language":30760,"meta":54,"style":54},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[475,169229,169230,169260,169277],{"__ignoreMap":54},[478,169231,169232,169234,169236,169238,169240,169242,169244,169246,169248,169250,169252,169254,169256,169258],{"class":480,"line":481},[478,169233,108213],{"class":710},[478,169235,147171],{"class":495},[478,169237,263],{"class":714},[478,169239,147176],{"class":488},[478,169241,13001],{"class":714},[478,169243,152356],{"class":488},[478,169245,13001],{"class":714},[478,169247,147186],{"class":5782},[478,169249,759],{"class":710},[478,169251,147191],{"class":488},[478,169253,14280],{"class":714},[478,169255,31763],{"class":710},[478,169257,148533],{"class":5782},[478,169259,4305],{"class":714},[478,169261,169262,169265,169268,169271,169273,169275],{"class":480,"line":565},[478,169263,169264],{"class":5782},"    file",[478,169266,169267],{"class":714},".write(",[478,169269,169270],{"class":488},"\"hello",[478,169272,156905],{"class":495},[478,169274,952],{"class":488},[478,169276,720],{"class":714},[478,169278,169279,169281,169283,169286,169288,169290],{"class":480,"line":579},[478,169280,169264],{"class":5782},[478,169282,169267],{"class":714},[478,169284,169285],{"class":488},"\"python",[478,169287,156905],{"class":495},[478,169289,952],{"class":488},[478,169291,720],{"class":714},[19,169293,169294],{},"写入多行：",[469,169296,169298],{"className":30758,"code":169297,"language":30760,"meta":54,"style":54},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[475,169299,169300,169335,169339,169370],{"__ignoreMap":54},[478,169301,169302,169304,169306,169308,169311,169313,169315,169317,169320,169322,169324,169326,169329,169331,169333],{"class":480,"line":481},[478,169303,169031],{"class":714},[478,169305,759],{"class":710},[478,169307,52606],{"class":714},[478,169309,169310],{"class":488},"\"小明,18",[478,169312,156905],{"class":495},[478,169314,952],{"class":488},[478,169316,13001],{"class":714},[478,169318,169319],{"class":488},"\"小红,17",[478,169321,156905],{"class":495},[478,169323,952],{"class":488},[478,169325,13001],{"class":714},[478,169327,169328],{"class":488},"\"小刚,19",[478,169330,156905],{"class":495},[478,169332,952],{"class":488},[478,169334,33626],{"class":714},[478,169336,169337],{"class":480,"line":565},[478,169338,2966],{"emptyLinePlaceholder":640},[478,169340,169341,169343,169345,169347,169350,169352,169354,169356,169358,169360,169362,169364,169366,169368],{"class":480,"line":579},[478,169342,108213],{"class":710},[478,169344,147171],{"class":495},[478,169346,263],{"class":714},[478,169348,169349],{"class":488},"\"students.txt\"",[478,169351,13001],{"class":714},[478,169353,152356],{"class":488},[478,169355,13001],{"class":714},[478,169357,147186],{"class":5782},[478,169359,759],{"class":710},[478,169361,147191],{"class":488},[478,169363,14280],{"class":714},[478,169365,31763],{"class":710},[478,169367,148533],{"class":5782},[478,169369,4305],{"class":714},[478,169371,169372,169374],{"class":480,"line":593},[478,169373,169264],{"class":5782},[478,169375,169376],{"class":714},".writelines(lines)\n",[14,169378,169380],{"id":169379},"_87-追加文件","8.7 追加文件",[19,169382,169383,169385],{},[475,169384,518],{}," 模式不会清空原内容，而是在末尾追加。",[469,169387,169389],{"className":30758,"code":169388,"language":30760,"meta":54,"style":54},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[475,169390,169391,169422],{"__ignoreMap":54},[478,169392,169393,169395,169397,169399,169402,169404,169406,169408,169410,169412,169414,169416,169418,169420],{"class":480,"line":481},[478,169394,108213],{"class":710},[478,169396,147171],{"class":495},[478,169398,263],{"class":714},[478,169400,169401],{"class":488},"\"log.txt\"",[478,169403,13001],{"class":714},[478,169405,165705],{"class":488},[478,169407,13001],{"class":714},[478,169409,147186],{"class":5782},[478,169411,759],{"class":710},[478,169413,147191],{"class":488},[478,169415,14280],{"class":714},[478,169417,31763],{"class":710},[478,169419,148533],{"class":5782},[478,169421,4305],{"class":714},[478,169423,169424,169426,169428,169431,169433,169435],{"class":480,"line":565},[478,169425,169264],{"class":5782},[478,169427,169267],{"class":714},[478,169429,169430],{"class":488},"\"程序启动",[478,169432,156905],{"class":495},[478,169434,952],{"class":488},[478,169436,720],{"class":714},[19,169438,169439],{},"日志类文件常用追加模式。",[14,169441,169443],{"id":169442},"_88-文件编码","8.8 文件编码",[19,169445,169446],{},"编码决定文字如何保存为字节。",[19,169448,169449],{},"常见编码：",[29,169451,169452,169455],{},[32,169453,169454],{},"UTF-8：推荐。",[32,169456,169457],{},"GBK：部分 Windows 中文文件常见。",[19,169459,169460],{},"读取文件乱码时，可以尝试：",[469,169462,169464],{"className":30758,"code":169463,"language":30760,"meta":54,"style":54},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[475,169465,169466,169497],{"__ignoreMap":54},[478,169467,169468,169470,169472,169474,169476,169478,169480,169482,169484,169486,169489,169491,169493,169495],{"class":480,"line":481},[478,169469,108213],{"class":710},[478,169471,147171],{"class":495},[478,169473,263],{"class":714},[478,169475,147176],{"class":488},[478,169477,13001],{"class":714},[478,169479,147181],{"class":488},[478,169481,13001],{"class":714},[478,169483,147186],{"class":5782},[478,169485,759],{"class":710},[478,169487,169488],{"class":488},"\"gbk\"",[478,169490,14280],{"class":714},[478,169492,31763],{"class":710},[478,169494,148533],{"class":5782},[478,169496,4305],{"class":714},[478,169498,169499,169501,169503,169505],{"class":480,"line":565},[478,169500,147203],{"class":714},[478,169502,759],{"class":710},[478,169504,148533],{"class":5782},[478,169506,168881],{"class":714},[19,169508,169509],{},"写文件时建议统一 UTF-8：",[469,169511,169513],{"className":30758,"code":169512,"language":30760,"meta":54,"style":54},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[475,169514,169515,169545],{"__ignoreMap":54},[478,169516,169517,169519,169521,169523,169525,169527,169529,169531,169533,169535,169537,169539,169541,169543],{"class":480,"line":481},[478,169518,108213],{"class":710},[478,169520,147171],{"class":495},[478,169522,263],{"class":714},[478,169524,147176],{"class":488},[478,169526,13001],{"class":714},[478,169528,152356],{"class":488},[478,169530,13001],{"class":714},[478,169532,147186],{"class":5782},[478,169534,759],{"class":710},[478,169536,147191],{"class":488},[478,169538,14280],{"class":714},[478,169540,31763],{"class":710},[478,169542,148533],{"class":5782},[478,169544,4305],{"class":714},[478,169546,169547,169549,169551,169554],{"class":480,"line":565},[478,169548,169264],{"class":5782},[478,169550,169267],{"class":714},[478,169552,169553],{"class":488},"\"中文内容\"",[478,169555,720],{"class":714},[14,169557,169559],{"id":169558},"_89-pathlib","8.9 pathlib",[19,169561,169562,169565],{},[475,169563,169564],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[469,169567,169569],{"className":30758,"code":169568,"language":30760,"meta":54,"style":54},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[475,169570,169571,169581,169585,169603],{"__ignoreMap":54},[478,169572,169573,169575,169577,169579],{"class":480,"line":481},[478,169574,31117],{"class":710},[478,169576,108691],{"class":714},[478,169578,30772],{"class":710},[478,169580,108696],{"class":714},[478,169582,169583],{"class":480,"line":565},[478,169584,2966],{"emptyLinePlaceholder":640},[478,169586,169587,169589,169591,169593,169596,169598,169600],{"class":480,"line":579},[478,169588,168691],{"class":714},[478,169590,759],{"class":710},[478,169592,108925],{"class":714},[478,169594,169595],{"class":488},"\"data\"",[478,169597,14280],{"class":714},[478,169599,1284],{"class":710},[478,169601,169602],{"class":488}," \"students.txt\"\n",[478,169604,169605,169607],{"class":480,"line":593},[478,169606,30795],{"class":495},[478,169608,169609],{"class":714},"(path)\n",[19,169611,169612],{},"创建目录：",[469,169614,169616],{"className":30758,"code":169615,"language":30760,"meta":54,"style":54},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[475,169617,169618,169628,169632,169645],{"__ignoreMap":54},[478,169619,169620,169622,169624,169626],{"class":480,"line":481},[478,169621,31117],{"class":710},[478,169623,108691],{"class":714},[478,169625,30772],{"class":710},[478,169627,108696],{"class":714},[478,169629,169630],{"class":480,"line":565},[478,169631,2966],{"emptyLinePlaceholder":640},[478,169633,169634,169637,169639,169641,169643],{"class":480,"line":579},[478,169635,169636],{"class":714},"data_dir ",[478,169638,759],{"class":710},[478,169640,108925],{"class":714},[478,169642,169595],{"class":488},[478,169644,720],{"class":714},[478,169646,169647,169650,169653,169655,169657],{"class":480,"line":593},[478,169648,169649],{"class":714},"data_dir.mkdir(",[478,169651,169652],{"class":5782},"exist_ok",[478,169654,759],{"class":710},[478,169656,31856],{"class":495},[478,169658,720],{"class":714},[19,169660,169661],{},"判断文件是否存在：",[469,169663,169665],{"className":30758,"code":169664,"language":30760,"meta":54,"style":54},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[475,169666,169667,169680,169684,169691],{"__ignoreMap":54},[478,169668,169669,169671,169673,169675,169678],{"class":480,"line":481},[478,169670,168691],{"class":714},[478,169672,759],{"class":710},[478,169674,108925],{"class":714},[478,169676,169677],{"class":488},"\"data\u002Fstudents.txt\"",[478,169679,720],{"class":714},[478,169681,169682],{"class":480,"line":565},[478,169683,2966],{"emptyLinePlaceholder":640},[478,169685,169686,169688],{"class":480,"line":579},[478,169687,2099],{"class":710},[478,169689,169690],{"class":714}," path.exists():\n",[478,169692,169693,169695,169697,169700],{"class":480,"line":593},[478,169694,31679],{"class":495},[478,169696,263],{"class":714},[478,169698,169699],{"class":488},"\"文件存在\"",[478,169701,720],{"class":714},[19,169703,169704],{},"读写文本：",[469,169706,169708],{"className":30758,"code":169707,"language":30760,"meta":54,"style":54},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[475,169709,169710,169722,169726,169743,169760],{"__ignoreMap":54},[478,169711,169712,169714,169716,169718,169720],{"class":480,"line":481},[478,169713,168691],{"class":714},[478,169715,759],{"class":710},[478,169717,108925],{"class":714},[478,169719,147176],{"class":488},[478,169721,720],{"class":714},[478,169723,169724],{"class":480,"line":565},[478,169725,2966],{"emptyLinePlaceholder":640},[478,169727,169728,169731,169733,169735,169737,169739,169741],{"class":480,"line":579},[478,169729,169730],{"class":714},"path.write_text(",[478,169732,146256],{"class":488},[478,169734,13001],{"class":714},[478,169736,147186],{"class":5782},[478,169738,759],{"class":710},[478,169740,147191],{"class":488},[478,169742,720],{"class":714},[478,169744,169745,169747,169749,169752,169754,169756,169758],{"class":480,"line":593},[478,169746,168874],{"class":714},[478,169748,759],{"class":710},[478,169750,169751],{"class":714}," path.read_text(",[478,169753,147186],{"class":5782},[478,169755,759],{"class":710},[478,169757,147191],{"class":488},[478,169759,720],{"class":714},[478,169761,169762,169764],{"class":480,"line":1769},[478,169763,30795],{"class":495},[478,169765,168888],{"class":714},[14,169767,169769],{"id":169768},"_810-json文件","8.10 JSON文件",[19,169771,169772],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[469,169774,169776],{"className":30758,"code":169775,"language":30760,"meta":54,"style":54},"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",[475,169777,169778,169784,169788,169796,169806,169816,169824,169828,169832,169857],{"__ignoreMap":54},[478,169779,169780,169782],{"class":480,"line":481},[478,169781,30772],{"class":710},[478,169783,147471],{"class":714},[478,169785,169786],{"class":480,"line":565},[478,169787,2966],{"emptyLinePlaceholder":640},[478,169789,169790,169792,169794],{"class":480,"line":579},[478,169791,149861],{"class":714},[478,169793,759],{"class":710},[478,169795,16137],{"class":714},[478,169797,169798,169800,169802,169804],{"class":480,"line":593},[478,169799,147400],{"class":488},[478,169801,51817],{"class":714},[478,169803,150268],{"class":488},[478,169805,31846],{"class":714},[478,169807,169808,169810,169812,169814],{"class":480,"line":1769},[478,169809,164917],{"class":488},[478,169811,51817],{"class":714},[478,169813,1348],{"class":495},[478,169815,31846],{"class":714},[478,169817,169818,169820,169822],{"class":480,"line":1783},[478,169819,164928],{"class":488},[478,169821,51817],{"class":714},[478,169823,164933],{"class":495},[478,169825,169826],{"class":480,"line":1789},[478,169827,2133],{"class":714},[478,169829,169830],{"class":480,"line":1880},[478,169831,2966],{"emptyLinePlaceholder":640},[478,169833,169834,169836,169838,169841,169843,169845,169847,169849,169851,169853,169855],{"class":480,"line":1886},[478,169835,156824],{"class":714},[478,169837,759],{"class":710},[478,169839,169840],{"class":714}," json.dumps(student, ",[478,169842,147517],{"class":5782},[478,169844,759],{"class":710},[478,169846,34367],{"class":495},[478,169848,13001],{"class":714},[478,169850,152392],{"class":5782},[478,169852,759],{"class":710},[478,169854,789],{"class":495},[478,169856,720],{"class":714},[478,169858,169859,169861],{"class":480,"line":1898},[478,169860,30795],{"class":495},[478,169862,164451],{"class":714},[19,169864,169865],{},"写入 JSON 文件：",[469,169867,169869],{"className":30758,"code":169868,"language":30760,"meta":54,"style":54},"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",[475,169870,169871,169877,169881,169889,169917,169945,169949,169953,169983],{"__ignoreMap":54},[478,169872,169873,169875],{"class":480,"line":481},[478,169874,30772],{"class":710},[478,169876,147471],{"class":714},[478,169878,169879],{"class":480,"line":565},[478,169880,2966],{"emptyLinePlaceholder":640},[478,169882,169883,169885,169887],{"class":480,"line":579},[478,169884,160096],{"class":714},[478,169886,759],{"class":710},[478,169888,55827],{"class":714},[478,169890,169891,169893,169895,169897,169899,169901,169903,169905,169907,169909,169911,169913,169915],{"class":480,"line":593},[478,169892,148765],{"class":714},[478,169894,63059],{"class":488},[478,169896,51817],{"class":714},[478,169898,150268],{"class":488},[478,169900,13001],{"class":714},[478,169902,69504],{"class":488},[478,169904,51817],{"class":714},[478,169906,1348],{"class":495},[478,169908,13001],{"class":714},[478,169910,151852],{"class":488},[478,169912,51817],{"class":714},[478,169914,1684],{"class":495},[478,169916,5496],{"class":714},[478,169918,169919,169921,169923,169925,169927,169929,169931,169933,169935,169937,169939,169941,169943],{"class":480,"line":1769},[478,169920,148765],{"class":714},[478,169922,63059],{"class":488},[478,169924,51817],{"class":714},[478,169926,151316],{"class":488},[478,169928,13001],{"class":714},[478,169930,69504],{"class":488},[478,169932,51817],{"class":714},[478,169934,1323],{"class":495},[478,169936,13001],{"class":714},[478,169938,151852],{"class":488},[478,169940,51817],{"class":714},[478,169942,1506],{"class":495},[478,169944,5496],{"class":714},[478,169946,169947],{"class":480,"line":1783},[478,169948,33626],{"class":714},[478,169950,169951],{"class":480,"line":1789},[478,169952,2966],{"emptyLinePlaceholder":640},[478,169954,169955,169957,169959,169961,169963,169965,169967,169969,169971,169973,169975,169977,169979,169981],{"class":480,"line":1880},[478,169956,108213],{"class":710},[478,169958,147171],{"class":495},[478,169960,263],{"class":714},[478,169962,152211],{"class":488},[478,169964,13001],{"class":714},[478,169966,152356],{"class":488},[478,169968,13001],{"class":714},[478,169970,147186],{"class":5782},[478,169972,759],{"class":710},[478,169974,147191],{"class":488},[478,169976,14280],{"class":714},[478,169978,31763],{"class":710},[478,169980,148533],{"class":5782},[478,169982,4305],{"class":714},[478,169984,169985,169988,169990,169992,169994,169996,169998,170000,170002,170004,170006],{"class":480,"line":1886},[478,169986,169987],{"class":714},"    json.dump(students, ",[478,169989,45734],{"class":5782},[478,169991,13001],{"class":714},[478,169993,147517],{"class":5782},[478,169995,759],{"class":710},[478,169997,34367],{"class":495},[478,169999,13001],{"class":714},[478,170001,152392],{"class":5782},[478,170003,759],{"class":710},[478,170005,789],{"class":495},[478,170007,720],{"class":714},[19,170009,170010],{},"读取 JSON 文件：",[469,170012,170014],{"className":30758,"code":170013,"language":30760,"meta":54,"style":54},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[475,170015,170016,170022,170026,170056,170068,170072],{"__ignoreMap":54},[478,170017,170018,170020],{"class":480,"line":481},[478,170019,30772],{"class":710},[478,170021,147471],{"class":714},[478,170023,170024],{"class":480,"line":565},[478,170025,2966],{"emptyLinePlaceholder":640},[478,170027,170028,170030,170032,170034,170036,170038,170040,170042,170044,170046,170048,170050,170052,170054],{"class":480,"line":579},[478,170029,108213],{"class":710},[478,170031,147171],{"class":495},[478,170033,263],{"class":714},[478,170035,152211],{"class":488},[478,170037,13001],{"class":714},[478,170039,147181],{"class":488},[478,170041,13001],{"class":714},[478,170043,147186],{"class":5782},[478,170045,759],{"class":710},[478,170047,147191],{"class":488},[478,170049,14280],{"class":714},[478,170051,31763],{"class":710},[478,170053,148533],{"class":5782},[478,170055,4305],{"class":714},[478,170057,170058,170060,170062,170064,170066],{"class":480,"line":593},[478,170059,153417],{"class":714},[478,170061,759],{"class":710},[478,170063,148544],{"class":714},[478,170065,45734],{"class":5782},[478,170067,720],{"class":714},[478,170069,170070],{"class":480,"line":1769},[478,170071,2966],{"emptyLinePlaceholder":640},[478,170073,170074,170076],{"class":480,"line":1783},[478,170075,30795],{"class":495},[478,170077,165375],{"class":714},[14,170079,170081],{"id":170080},"_811-csv文件","8.11 CSV文件",[19,170083,170084],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170086,170087],{},"写入 CSV：",[469,170089,170091],{"className":30758,"code":170090,"language":30760,"meta":54,"style":54},"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",[475,170092,170093,170100,170104,170112,170130,170146,170162,170166,170170,170210,170224],{"__ignoreMap":54},[478,170094,170095,170097],{"class":480,"line":481},[478,170096,30772],{"class":710},[478,170098,170099],{"class":714}," csv\n",[478,170101,170102],{"class":480,"line":565},[478,170103,2966],{"emptyLinePlaceholder":640},[478,170105,170106,170108,170110],{"class":480,"line":579},[478,170107,160096],{"class":714},[478,170109,759],{"class":710},[478,170111,55827],{"class":714},[478,170113,170114,170117,170119,170121,170123,170125,170128],{"class":480,"line":593},[478,170115,170116],{"class":714},"    [",[478,170118,73479],{"class":488},[478,170120,13001],{"class":714},[478,170122,73512],{"class":488},[478,170124,13001],{"class":714},[478,170126,170127],{"class":488},"\"成绩\"",[478,170129,88216],{"class":714},[478,170131,170132,170134,170136,170138,170140,170142,170144],{"class":480,"line":1769},[478,170133,170116],{"class":714},[478,170135,150268],{"class":488},[478,170137,13001],{"class":714},[478,170139,1348],{"class":495},[478,170141,13001],{"class":714},[478,170143,1684],{"class":495},[478,170145,88216],{"class":714},[478,170147,170148,170150,170152,170154,170156,170158,170160],{"class":480,"line":1783},[478,170149,170116],{"class":714},[478,170151,151316],{"class":488},[478,170153,13001],{"class":714},[478,170155,1323],{"class":495},[478,170157,13001],{"class":714},[478,170159,1506],{"class":495},[478,170161,88216],{"class":714},[478,170163,170164],{"class":480,"line":1789},[478,170165,33626],{"class":714},[478,170167,170168],{"class":480,"line":1880},[478,170169,2966],{"emptyLinePlaceholder":640},[478,170171,170172,170174,170176,170178,170181,170183,170185,170187,170189,170191,170193,170195,170198,170200,170202,170204,170206,170208],{"class":480,"line":1886},[478,170173,108213],{"class":710},[478,170175,147171],{"class":495},[478,170177,263],{"class":714},[478,170179,170180],{"class":488},"\"students.csv\"",[478,170182,13001],{"class":714},[478,170184,152356],{"class":488},[478,170186,13001],{"class":714},[478,170188,147186],{"class":5782},[478,170190,759],{"class":710},[478,170192,147191],{"class":488},[478,170194,13001],{"class":714},[478,170196,170197],{"class":5782},"newline",[478,170199,759],{"class":710},[478,170201,8218],{"class":488},[478,170203,14280],{"class":714},[478,170205,31763],{"class":710},[478,170207,148533],{"class":5782},[478,170209,4305],{"class":714},[478,170211,170212,170215,170217,170220,170222],{"class":480,"line":1898},[478,170213,170214],{"class":714},"    writer ",[478,170216,759],{"class":710},[478,170218,170219],{"class":714}," csv.writer(",[478,170221,45734],{"class":5782},[478,170223,720],{"class":714},[478,170225,170226],{"class":480,"line":2180},[478,170227,170228],{"class":714},"    writer.writerows(students)\n",[19,170230,170231],{},"读取 CSV：",[469,170233,170235],{"className":30758,"code":170234,"language":30760,"meta":54,"style":54},"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",[475,170236,170237,170243,170247,170277,170291,170303],{"__ignoreMap":54},[478,170238,170239,170241],{"class":480,"line":481},[478,170240,30772],{"class":710},[478,170242,170099],{"class":714},[478,170244,170245],{"class":480,"line":565},[478,170246,2966],{"emptyLinePlaceholder":640},[478,170248,170249,170251,170253,170255,170257,170259,170261,170263,170265,170267,170269,170271,170273,170275],{"class":480,"line":579},[478,170250,108213],{"class":710},[478,170252,147171],{"class":495},[478,170254,263],{"class":714},[478,170256,170180],{"class":488},[478,170258,13001],{"class":714},[478,170260,147181],{"class":488},[478,170262,13001],{"class":714},[478,170264,147186],{"class":5782},[478,170266,759],{"class":710},[478,170268,147191],{"class":488},[478,170270,14280],{"class":714},[478,170272,31763],{"class":710},[478,170274,148533],{"class":5782},[478,170276,4305],{"class":714},[478,170278,170279,170282,170284,170287,170289],{"class":480,"line":593},[478,170280,170281],{"class":714},"    reader ",[478,170283,759],{"class":710},[478,170285,170286],{"class":714}," csv.reader(",[478,170288,45734],{"class":5782},[478,170290,720],{"class":714},[478,170292,170293,170295,170298,170300],{"class":480,"line":1769},[478,170294,3767],{"class":710},[478,170296,170297],{"class":714}," row ",[478,170299,26423],{"class":710},[478,170301,170302],{"class":714}," reader:\n",[478,170304,170305,170307],{"class":480,"line":1783},[478,170306,32831],{"class":495},[478,170308,170309],{"class":714},"(row)\n",[19,170311,170312],{},"使用字典写入：",[469,170314,170316],{"className":30758,"code":170315,"language":30760,"meta":54,"style":54},"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",[475,170317,170318,170324,170328,170336,170364,170392,170396,170400,170438,170459,170480,170485],{"__ignoreMap":54},[478,170319,170320,170322],{"class":480,"line":481},[478,170321,30772],{"class":710},[478,170323,170099],{"class":714},[478,170325,170326],{"class":480,"line":565},[478,170327,2966],{"emptyLinePlaceholder":640},[478,170329,170330,170332,170334],{"class":480,"line":579},[478,170331,160096],{"class":714},[478,170333,759],{"class":710},[478,170335,55827],{"class":714},[478,170337,170338,170340,170342,170344,170346,170348,170350,170352,170354,170356,170358,170360,170362],{"class":480,"line":593},[478,170339,148765],{"class":714},[478,170341,63059],{"class":488},[478,170343,51817],{"class":714},[478,170345,150268],{"class":488},[478,170347,13001],{"class":714},[478,170349,69504],{"class":488},[478,170351,51817],{"class":714},[478,170353,1348],{"class":495},[478,170355,13001],{"class":714},[478,170357,151852],{"class":488},[478,170359,51817],{"class":714},[478,170361,1684],{"class":495},[478,170363,5496],{"class":714},[478,170365,170366,170368,170370,170372,170374,170376,170378,170380,170382,170384,170386,170388,170390],{"class":480,"line":1769},[478,170367,148765],{"class":714},[478,170369,63059],{"class":488},[478,170371,51817],{"class":714},[478,170373,151316],{"class":488},[478,170375,13001],{"class":714},[478,170377,69504],{"class":488},[478,170379,51817],{"class":714},[478,170381,1323],{"class":495},[478,170383,13001],{"class":714},[478,170385,151852],{"class":488},[478,170387,51817],{"class":714},[478,170389,1506],{"class":495},[478,170391,5496],{"class":714},[478,170393,170394],{"class":480,"line":1783},[478,170395,33626],{"class":714},[478,170397,170398],{"class":480,"line":1789},[478,170399,2966],{"emptyLinePlaceholder":640},[478,170401,170402,170404,170406,170408,170410,170412,170414,170416,170418,170420,170422,170424,170426,170428,170430,170432,170434,170436],{"class":480,"line":1880},[478,170403,108213],{"class":710},[478,170405,147171],{"class":495},[478,170407,263],{"class":714},[478,170409,170180],{"class":488},[478,170411,13001],{"class":714},[478,170413,152356],{"class":488},[478,170415,13001],{"class":714},[478,170417,147186],{"class":5782},[478,170419,759],{"class":710},[478,170421,147191],{"class":488},[478,170423,13001],{"class":714},[478,170425,170197],{"class":5782},[478,170427,759],{"class":710},[478,170429,8218],{"class":488},[478,170431,14280],{"class":714},[478,170433,31763],{"class":710},[478,170435,148533],{"class":5782},[478,170437,4305],{"class":714},[478,170439,170440,170443,170445,170447,170449,170451,170453,170455,170457],{"class":480,"line":1886},[478,170441,170442],{"class":714},"    fieldnames ",[478,170444,759],{"class":710},[478,170446,52606],{"class":714},[478,170448,63059],{"class":488},[478,170450,13001],{"class":714},[478,170452,69504],{"class":488},[478,170454,13001],{"class":714},[478,170456,151852],{"class":488},[478,170458,33626],{"class":714},[478,170460,170461,170463,170465,170468,170470,170472,170475,170477],{"class":480,"line":1898},[478,170462,170214],{"class":714},[478,170464,759],{"class":710},[478,170466,170467],{"class":714}," csv.DictWriter(",[478,170469,45734],{"class":5782},[478,170471,13001],{"class":714},[478,170473,170474],{"class":5782},"fieldnames",[478,170476,759],{"class":710},[478,170478,170479],{"class":714},"fieldnames)\n",[478,170481,170482],{"class":480,"line":2180},[478,170483,170484],{"class":714},"    writer.writeheader()\n",[478,170486,170487],{"class":480,"line":2185},[478,170488,170228],{"class":714},[14,170490,170492],{"id":170491},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170494,123672],{},[29,170496,170497,170500,170503],{},[32,170498,170499],{},"读取文本文件。",[32,170501,170502],{},"统计每个单词出现次数。",[32,170504,170505],{},"输出出现次数最多的前 10 个单词。",[19,170507,10601],{},[469,170509,170511],{"className":30758,"code":170510,"language":30760,"meta":54,"style":54},"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",[475,170512,170513,170523,170527,170540,170556,170560,170570,170579,170583,170595,170615,170624,170628,170646,170650,170680,170684,170700],{"__ignoreMap":54},[478,170514,170515,170517,170519,170521],{"class":480,"line":481},[478,170516,31117],{"class":710},[478,170518,108691],{"class":714},[478,170520,30772],{"class":710},[478,170522,108696],{"class":714},[478,170524,170525],{"class":480,"line":565},[478,170526,2966],{"emptyLinePlaceholder":640},[478,170528,170529,170531,170533,170535,170538],{"class":480,"line":579},[478,170530,168691],{"class":714},[478,170532,759],{"class":710},[478,170534,108925],{"class":714},[478,170536,170537],{"class":488},"\"article.txt\"",[478,170539,720],{"class":714},[478,170541,170542,170544,170546,170548,170550,170552,170554],{"class":480,"line":593},[478,170543,168874],{"class":714},[478,170545,759],{"class":710},[478,170547,169751],{"class":714},[478,170549,147186],{"class":5782},[478,170551,759],{"class":710},[478,170553,147191],{"class":488},[478,170555,720],{"class":714},[478,170557,170558],{"class":480,"line":1769},[478,170559,2966],{"emptyLinePlaceholder":640},[478,170561,170562,170565,170567],{"class":480,"line":1783},[478,170563,170564],{"class":714},"words ",[478,170566,759],{"class":710},[478,170568,170569],{"class":714}," content.lower().split()\n",[478,170571,170572,170575,170577],{"class":480,"line":1789},[478,170573,170574],{"class":714},"counter ",[478,170576,759],{"class":710},[478,170578,88248],{"class":714},[478,170580,170581],{"class":480,"line":1880},[478,170582,2966],{"emptyLinePlaceholder":640},[478,170584,170585,170587,170590,170592],{"class":480,"line":1886},[478,170586,3591],{"class":710},[478,170588,170589],{"class":714}," word ",[478,170591,26423],{"class":710},[478,170593,170594],{"class":714}," words:\n",[478,170596,170597,170600,170602,170605,170608,170610,170613],{"class":480,"line":1898},[478,170598,170599],{"class":714},"    word ",[478,170601,759],{"class":710},[478,170603,170604],{"class":714}," word.strip(",[478,170606,170607],{"class":488},"\".,!?;:",[478,170609,156875],{"class":495},[478,170611,170612],{"class":488},"'()[]\"",[478,170614,720],{"class":714},[478,170616,170617,170619,170621],{"class":480,"line":2180},[478,170618,3667],{"class":710},[478,170620,39310],{"class":710},[478,170622,170623],{"class":714}," word:\n",[478,170625,170626],{"class":480,"line":2185},[478,170627,148892],{"class":710},[478,170629,170630,170633,170635,170638,170640,170642,170644],{"class":480,"line":2191},[478,170631,170632],{"class":714},"    counter[word] ",[478,170634,759],{"class":710},[478,170636,170637],{"class":714}," counter.get(word, ",[478,170639,895],{"class":495},[478,170641,14280],{"class":714},[478,170643,1181],{"class":710},[478,170645,56079],{"class":495},[478,170647,170648],{"class":480,"line":2196},[478,170649,2966],{"emptyLinePlaceholder":640},[478,170651,170652,170655,170657,170659,170662,170664,170666,170668,170670,170672,170674,170676,170678],{"class":480,"line":2210},[478,170653,170654],{"class":714},"items ",[478,170656,759],{"class":710},[478,170658,163984],{"class":495},[478,170660,170661],{"class":714},"(counter.items(), ",[478,170663,154326],{"class":5782},[478,170665,154329],{"class":710},[478,170667,154332],{"class":714},[478,170669,193],{"class":495},[478,170671,112582],{"class":714},[478,170673,163908],{"class":5782},[478,170675,759],{"class":710},[478,170677,31856],{"class":495},[478,170679,720],{"class":714},[478,170681,170682],{"class":480,"line":2215},[478,170683,2966],{"emptyLinePlaceholder":640},[478,170685,170686,170688,170691,170693,170696,170698],{"class":480,"line":2221},[478,170687,3591],{"class":710},[478,170689,170690],{"class":714}," word, count ",[478,170692,26423],{"class":710},[478,170694,170695],{"class":714}," items[:",[478,170697,1146],{"class":495},[478,170699,166135],{"class":714},[478,170701,170702,170704],{"class":480,"line":2241},[478,170703,31679],{"class":495},[478,170705,170706],{"class":714},"(word, count)\n",[14,170708,170710],{"id":170709},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[469,170712,170714],{"className":30758,"code":170713,"language":30760,"meta":54,"style":54},"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",[475,170715,170716,170722,170732,170736,170748,170752,170756,170764,170774,170780,170784,170814,170824,170828,170832,170840,170870,170894,170898,170902,170910,170939,170944],{"__ignoreMap":54},[478,170717,170718,170720],{"class":480,"line":481},[478,170719,30772],{"class":710},[478,170721,147471],{"class":714},[478,170723,170724,170726,170728,170730],{"class":480,"line":565},[478,170725,31117],{"class":710},[478,170727,108691],{"class":714},[478,170729,30772],{"class":710},[478,170731,108696],{"class":714},[478,170733,170734],{"class":480,"line":579},[478,170735,2966],{"emptyLinePlaceholder":640},[478,170737,170738,170740,170742,170744,170746],{"class":480,"line":593},[478,170739,152204],{"class":495},[478,170741,14130],{"class":710},[478,170743,108925],{"class":714},[478,170745,152211],{"class":488},[478,170747,720],{"class":714},[478,170749,170750],{"class":480,"line":1769},[478,170751,2966],{"emptyLinePlaceholder":640},[478,170753,170754],{"class":480,"line":1783},[478,170755,2966],{"emptyLinePlaceholder":640},[478,170757,170758,170760,170762],{"class":480,"line":1789},[478,170759,32327],{"class":710},[478,170761,152228],{"class":484},[478,170763,32333],{"class":714},[478,170765,170766,170768,170770,170772],{"class":480,"line":1880},[478,170767,3667],{"class":710},[478,170769,39310],{"class":710},[478,170771,152239],{"class":495},[478,170773,152242],{"class":714},[478,170775,170776,170778],{"class":480,"line":1886},[478,170777,15317],{"class":710},[478,170779,52218],{"class":714},[478,170781,170782],{"class":480,"line":1898},[478,170783,2966],{"emptyLinePlaceholder":640},[478,170785,170786,170788,170790,170792,170794,170796,170798,170800,170802,170804,170806,170808,170810,170812],{"class":480,"line":2180},[478,170787,34558],{"class":710},[478,170789,147171],{"class":495},[478,170791,263],{"class":714},[478,170793,152204],{"class":495},[478,170795,13001],{"class":714},[478,170797,147181],{"class":488},[478,170799,13001],{"class":714},[478,170801,147186],{"class":5782},[478,170803,759],{"class":710},[478,170805,147191],{"class":488},[478,170807,14280],{"class":714},[478,170809,31763],{"class":710},[478,170811,148533],{"class":5782},[478,170813,4305],{"class":714},[478,170815,170816,170818,170820,170822],{"class":480,"line":2185},[478,170817,15317],{"class":710},[478,170819,148544],{"class":714},[478,170821,45734],{"class":5782},[478,170823,720],{"class":714},[478,170825,170826],{"class":480,"line":2191},[478,170827,2966],{"emptyLinePlaceholder":640},[478,170829,170830],{"class":480,"line":2196},[478,170831,2966],{"emptyLinePlaceholder":640},[478,170833,170834,170836,170838],{"class":480,"line":2210},[478,170835,32327],{"class":710},[478,170837,152338],{"class":484},[478,170839,152341],{"class":714},[478,170841,170842,170844,170846,170848,170850,170852,170854,170856,170858,170860,170862,170864,170866,170868],{"class":480,"line":2215},[478,170843,34558],{"class":710},[478,170845,147171],{"class":495},[478,170847,263],{"class":714},[478,170849,152204],{"class":495},[478,170851,13001],{"class":714},[478,170853,152356],{"class":488},[478,170855,13001],{"class":714},[478,170857,147186],{"class":5782},[478,170859,759],{"class":710},[478,170861,147191],{"class":488},[478,170863,14280],{"class":714},[478,170865,31763],{"class":710},[478,170867,148533],{"class":5782},[478,170869,4305],{"class":714},[478,170871,170872,170874,170876,170878,170880,170882,170884,170886,170888,170890,170892],{"class":480,"line":2221},[478,170873,152377],{"class":714},[478,170875,45734],{"class":5782},[478,170877,13001],{"class":714},[478,170879,147517],{"class":5782},[478,170881,759],{"class":710},[478,170883,34367],{"class":495},[478,170885,13001],{"class":714},[478,170887,152392],{"class":5782},[478,170889,759],{"class":710},[478,170891,789],{"class":495},[478,170893,720],{"class":714},[478,170895,170896],{"class":480,"line":2241},[478,170897,2966],{"emptyLinePlaceholder":640},[478,170899,170900],{"class":480,"line":2246},[478,170901,2966],{"emptyLinePlaceholder":640},[478,170903,170904,170906,170908],{"class":480,"line":2260},[478,170905,160096],{"class":714},[478,170907,759],{"class":710},[478,170909,153422],{"class":714},[478,170911,170912,170915,170917,170919,170921,170923,170925,170927,170929,170931,170933,170935,170937],{"class":480,"line":2265},[478,170913,170914],{"class":714},"students.append({",[478,170916,63059],{"class":488},[478,170918,51817],{"class":714},[478,170920,150268],{"class":488},[478,170922,13001],{"class":714},[478,170924,69504],{"class":488},[478,170926,51817],{"class":714},[478,170928,1348],{"class":495},[478,170930,13001],{"class":714},[478,170932,151852],{"class":488},[478,170934,51817],{"class":714},[478,170936,1684],{"class":495},[478,170938,165532],{"class":714},[478,170940,170941],{"class":480,"line":2294},[478,170942,170943],{"class":714},"save_students(students)\n",[478,170945,170946,170948,170950,170953],{"class":480,"line":2299},[478,170947,30795],{"class":495},[478,170949,263],{"class":714},[478,170951,170952],{"class":488},"\"保存成功\"",[478,170954,720],{"class":714},[14,170956,170958],{"id":170957},"_814-易错点","8.14 易错点",[29,170960,170961,170965,170971,170976,170983,170990],{},[32,170962,170963,169224],{},[475,170964,1490],{},[32,170966,170967,170968,28765],{},"读写中文要指定 ",[475,170969,170970],{},"encoding=\"utf-8\"",[32,170972,170973,170974,28765],{},"打开文件后要关闭，推荐使用 ",[475,170975,108213],{},[32,170977,170978,170979,170982],{},"读取大文件不要直接 ",[475,170980,170981],{},"read()"," 全部内容。",[32,170984,170985,170986,170989],{},"Windows 写 CSV 时建议加 ",[475,170987,170988],{},"newline=\"\"","，避免空行。",[32,170991,170992],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170994,170996],{"id":170995},"_815-本章练习","8.15 本章练习",[29,170998,170999,171006,171011,171014,171017],{},[32,171000,171001,171002,171005],{},"写入一个 ",[475,171003,171004],{},"students.txt","，每行保存一个学生姓名。",[32,171007,104735,171008,171010],{},[475,171009,171004],{}," 并输出所有学生。",[32,171012,171013],{},"把学生列表保存为 JSON 文件。",[32,171015,171016],{},"从 JSON 文件读取学生数据，计算平均分。",[32,171018,171019,171020,171023,171024,171027],{},"写一个日志函数 ",[475,171021,171022],{},"write_log(message)","，每次调用向 ",[475,171025,171026],{},"app.log"," 追加一行。",[617,171029,171030],{},"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":54,"searchDepth":565,"depth":565,"links":171032},[171033,171034,171038,171039,171045,171046,171047,171048,171049,171050,171051,171052,171053,171054,171055],{"id":168544,"depth":565,"text":168545},{"id":168585,"depth":565,"text":168586,"children":171035},[171036,171037],{"id":168589,"depth":579,"text":168590},{"id":168623,"depth":579,"text":168624},{"id":168737,"depth":565,"text":168738},{"id":168830,"depth":565,"text":168831,"children":171040},[171041,171042,171043,171044],{"id":168834,"depth":579,"text":168835},{"id":168921,"depth":579,"text":168922},{"id":168991,"depth":579,"text":168992},{"id":169085,"depth":579,"text":169086},{"id":169155,"depth":565,"text":169156},{"id":169218,"depth":565,"text":169219},{"id":169379,"depth":565,"text":169380},{"id":169442,"depth":565,"text":169443},{"id":169558,"depth":565,"text":169559},{"id":169768,"depth":565,"text":169769},{"id":170080,"depth":565,"text":170081},{"id":170491,"depth":565,"text":170492},{"id":170709,"depth":565,"text":170710},{"id":170957,"depth":565,"text":170958},{"id":170995,"depth":565,"text":170996},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168536,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171062,"title":171063,"body":171064,"description":23942,"extension":638,"meta":173250,"navigation":640,"path":173251,"seo":173252,"stem":173253,"__hash__":173254},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171065,"toc":173217},[171066,171069,171073,171076,171079,171171,171173,171192,171197,171201,171204,171207,171236,171243,171246,171250,171253,171282,171284,171336,171342,171395,171399,171497,171500,171567,171571,171628,171630,171636,171640,171645,171651,171742,171747,171751,171754,171832,171835,171873,171877,171995,171998,172002,172005,172050,172053,172057,172062,172068,172118,172121,172152,172156,172160,172190,172194,172229,172233,172268,172308,172312,172328,172331,172335,172339,172418,172422,172463,172467,172522,172526,172560,172564,172594,172603,172610,172616,172673,172676,172684,172687,172691,172698,172701,172707,172710,172727,172732,172736,172742,172755,172758,172795,172798,172809,172812,172826,172829,172843,172847,172854,172887,172890,172892,172898,172901,172905,172907,172913,172918,173091,173095,173158,173162,173186,173190,173214],[10,171067,171063],{"id":171068},"_9-异常模块与包",[14,171070,171072],{"id":171071},"_91-什么是异常","9.1 什么是异常",[19,171074,171075],{},"异常是程序运行过程中出现的错误。",[19,171077,171078],{},"常见异常：",[371,171080,171081,171090],{},[374,171082,171083],{},[377,171084,171085,171088],{},[380,171086,171087],{},"异常",[380,171089,26249],{},[388,171091,171092,171102,171112,171121,171131,171141,171151,171161],{},[377,171093,171094,171099],{},[393,171095,171096],{},[475,171097,171098],{},"NameError",[393,171100,171101],{},"使用了未定义变量",[377,171103,171104,171109],{},[393,171105,171106],{},[475,171107,171108],{},"TypeError",[393,171110,171111],{},"类型不匹配",[377,171113,171114,171118],{},[393,171115,171116],{},[475,171117,155214],{},[393,171119,171120],{},"值不合法",[377,171122,171123,171128],{},[393,171124,171125],{},[475,171126,171127],{},"IndexError",[393,171129,171130],{},"列表索引越界",[377,171132,171133,171138],{},[393,171134,171135],{},[475,171136,171137],{},"KeyError",[393,171139,171140],{},"字典 key 不存在",[377,171142,171143,171148],{},[393,171144,171145],{},[475,171146,171147],{},"FileNotFoundError",[393,171149,171150],{},"文件不存在",[377,171152,171153,171158],{},[393,171154,171155],{},[475,171156,171157],{},"ZeroDivisionError",[393,171159,171160],{},"除数为 0",[377,171162,171163,171168],{},[393,171164,171165],{},[475,171166,171167],{},"ImportError",[393,171169,171170],{},"导入失败",[19,171172,15700],{},[469,171174,171176],{"className":30758,"code":171175,"language":30760,"meta":54,"style":54},"num = int(\"abc\")\n",[475,171177,171178],{"__ignoreMap":54},[478,171179,171180,171182,171184,171186,171188,171190],{"class":480,"line":481},[478,171181,156167],{"class":714},[478,171183,759],{"class":710},[478,171185,2948],{"class":495},[478,171187,263],{"class":714},[478,171189,156260],{"class":488},[478,171191,720],{"class":714},[19,171193,171194,171195,28765],{},"会触发 ",[475,171196,155214],{},[14,171198,171200],{"id":171199},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171202,171203],{},"如果不处理异常，程序会直接终止。",[19,171205,171206],{},"例如用户输入年龄：",[469,171208,171210],{"className":30758,"code":171209,"language":30760,"meta":54,"style":54},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[475,171211,171212,171230],{"__ignoreMap":54},[478,171213,171214,171216,171218,171220,171222,171224,171226,171228],{"class":480,"line":481},[478,171215,146926],{"class":714},[478,171217,759],{"class":710},[478,171219,2948],{"class":495},[478,171221,263],{"class":714},[478,171223,54201],{"class":495},[478,171225,263],{"class":714},[478,171227,152774],{"class":488},[478,171229,30877],{"class":714},[478,171231,171232,171234],{"class":480,"line":565},[478,171233,30795],{"class":495},[478,171235,156141],{"class":714},[19,171237,171238,171239,171242],{},"用户输入 ",[475,171240,171241],{},"abc","，程序就会报错退出。",[19,171244,171245],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171247,171249],{"id":171248},"_93-try-except","9.3 try except",[19,171251,171252],{},"基础语法：",[469,171254,171256],{"className":30758,"code":171255,"language":30760,"meta":54,"style":54},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[475,171257,171258,171265,171270,171277],{"__ignoreMap":54},[478,171259,171260,171263],{"class":480,"line":481},[478,171261,171262],{"class":710},"try",[478,171264,4305],{"class":714},[478,171266,171267],{"class":480,"line":565},[478,171268,171269],{"class":714},"    可能出错的代码\n",[478,171271,171272,171275],{"class":480,"line":579},[478,171273,171274],{"class":710},"except",[478,171276,4305],{"class":714},[478,171278,171279],{"class":480,"line":593},[478,171280,171281],{"class":714},"    出错后的处理代码\n",[19,171283,15700],{},[469,171285,171287],{"className":30758,"code":171286,"language":30760,"meta":54,"style":54},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[475,171288,171289,171295,171313,171319,171325],{"__ignoreMap":54},[478,171290,171291,171293],{"class":480,"line":481},[478,171292,171262],{"class":710},[478,171294,4305],{"class":714},[478,171296,171297,171299,171301,171303,171305,171307,171309,171311],{"class":480,"line":565},[478,171298,152766],{"class":714},[478,171300,759],{"class":710},[478,171302,2948],{"class":495},[478,171304,263],{"class":714},[478,171306,54201],{"class":495},[478,171308,263],{"class":714},[478,171310,152774],{"class":488},[478,171312,30877],{"class":714},[478,171314,171315,171317],{"class":480,"line":579},[478,171316,31679],{"class":495},[478,171318,156141],{"class":714},[478,171320,171321,171323],{"class":480,"line":593},[478,171322,171274],{"class":710},[478,171324,4305],{"class":714},[478,171326,171327,171329,171331,171334],{"class":480,"line":1769},[478,171328,31679],{"class":495},[478,171330,263],{"class":714},[478,171332,171333],{"class":488},"\"年龄必须是数字\"",[478,171335,720],{"class":714},[19,171337,171338,171339,171341],{},"不建议裸写 ",[475,171340,171274],{},"，最好指定异常类型。",[469,171343,171345],{"className":30758,"code":171344,"language":30760,"meta":54,"style":54},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[475,171346,171347,171353,171371,171377,171385],{"__ignoreMap":54},[478,171348,171349,171351],{"class":480,"line":481},[478,171350,171262],{"class":710},[478,171352,4305],{"class":714},[478,171354,171355,171357,171359,171361,171363,171365,171367,171369],{"class":480,"line":565},[478,171356,152766],{"class":714},[478,171358,759],{"class":710},[478,171360,2948],{"class":495},[478,171362,263],{"class":714},[478,171364,54201],{"class":495},[478,171366,263],{"class":714},[478,171368,152774],{"class":488},[478,171370,30877],{"class":714},[478,171372,171373,171375],{"class":480,"line":579},[478,171374,31679],{"class":495},[478,171376,156141],{"class":714},[478,171378,171379,171381,171383],{"class":480,"line":593},[478,171380,171274],{"class":710},[478,171382,152606],{"class":495},[478,171384,4305],{"class":714},[478,171386,171387,171389,171391,171393],{"class":480,"line":1769},[478,171388,31679],{"class":495},[478,171390,263],{"class":714},[478,171392,171333],{"class":488},[478,171394,720],{"class":714},[14,171396,171398],{"id":171397},"_94-捕获多个异常","9.4 捕获多个异常",[469,171400,171402],{"className":30758,"code":171401,"language":30760,"meta":54,"style":54},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[475,171403,171404,171410,171431,171451,171458,171466,171477,171486],{"__ignoreMap":54},[478,171405,171406,171408],{"class":480,"line":481},[478,171407,171262],{"class":710},[478,171409,4305],{"class":714},[478,171411,171412,171415,171417,171419,171421,171423,171425,171427,171429],{"class":480,"line":565},[478,171413,171414],{"class":714},"    nums ",[478,171416,759],{"class":710},[478,171418,52606],{"class":714},[478,171420,193],{"class":495},[478,171422,13001],{"class":714},[478,171424,789],{"class":495},[478,171426,13001],{"class":714},[478,171428,783],{"class":495},[478,171430,33626],{"class":714},[478,171432,171433,171436,171438,171440,171442,171444,171446,171449],{"class":480,"line":579},[478,171434,171435],{"class":714},"    index ",[478,171437,759],{"class":710},[478,171439,2948],{"class":495},[478,171441,263],{"class":714},[478,171443,54201],{"class":495},[478,171445,263],{"class":714},[478,171447,171448],{"class":488},"\"请输入索引:\"",[478,171450,30877],{"class":714},[478,171452,171453,171455],{"class":480,"line":593},[478,171454,31679],{"class":495},[478,171456,171457],{"class":714},"(nums[index])\n",[478,171459,171460,171462,171464],{"class":480,"line":1769},[478,171461,171274],{"class":710},[478,171463,152606],{"class":495},[478,171465,4305],{"class":714},[478,171467,171468,171470,171472,171475],{"class":480,"line":1783},[478,171469,31679],{"class":495},[478,171471,263],{"class":714},[478,171473,171474],{"class":488},"\"索引必须是整数\"",[478,171476,720],{"class":714},[478,171478,171479,171481,171484],{"class":480,"line":1789},[478,171480,171274],{"class":710},[478,171482,171483],{"class":495}," IndexError",[478,171485,4305],{"class":714},[478,171487,171488,171490,171492,171495],{"class":480,"line":1880},[478,171489,31679],{"class":495},[478,171491,263],{"class":714},[478,171493,171494],{"class":488},"\"索引越界\"",[478,171496,720],{"class":714},[19,171498,171499],{},"多个异常使用相同处理逻辑：",[469,171501,171503],{"className":30758,"code":171502,"language":30760,"meta":54,"style":54},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[475,171504,171505,171511,171529,171542,171556],{"__ignoreMap":54},[478,171506,171507,171509],{"class":480,"line":481},[478,171508,171262],{"class":710},[478,171510,4305],{"class":714},[478,171512,171513,171515,171517,171519,171521,171523,171525,171527],{"class":480,"line":565},[478,171514,45973],{"class":714},[478,171516,759],{"class":710},[478,171518,2948],{"class":495},[478,171520,263],{"class":714},[478,171522,54201],{"class":495},[478,171524,263],{"class":714},[478,171526,156176],{"class":488},[478,171528,30877],{"class":714},[478,171530,171531,171533,171535,171537,171539],{"class":480,"line":579},[478,171532,31679],{"class":495},[478,171534,263],{"class":714},[478,171536,1146],{"class":495},[478,171538,156426],{"class":710},[478,171540,171541],{"class":714}," num)\n",[478,171543,171544,171546,171548,171550,171552,171554],{"class":480,"line":593},[478,171545,171274],{"class":710},[478,171547,219],{"class":714},[478,171549,155214],{"class":495},[478,171551,13001],{"class":714},[478,171553,171157],{"class":495},[478,171555,31166],{"class":714},[478,171557,171558,171560,171562,171565],{"class":480,"line":1769},[478,171559,31679],{"class":495},[478,171561,263],{"class":714},[478,171563,171564],{"class":488},"\"输入不合法\"",[478,171566,720],{"class":714},[14,171568,171570],{"id":171569},"_95-获取异常信息","9.5 获取异常信息",[469,171572,171574],{"className":30758,"code":171573,"language":30760,"meta":54,"style":54},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[475,171575,171576,171582,171596,171607],{"__ignoreMap":54},[478,171577,171578,171580],{"class":480,"line":481},[478,171579,171262],{"class":710},[478,171581,4305],{"class":714},[478,171583,171584,171586,171588,171590,171592,171594],{"class":480,"line":565},[478,171585,45973],{"class":714},[478,171587,759],{"class":710},[478,171589,2948],{"class":495},[478,171591,263],{"class":714},[478,171593,156260],{"class":488},[478,171595,720],{"class":714},[478,171597,171598,171600,171602,171604],{"class":480,"line":579},[478,171599,171274],{"class":710},[478,171601,152606],{"class":495},[478,171603,64984],{"class":710},[478,171605,171606],{"class":714}," e:\n",[478,171608,171609,171611,171613,171615,171618,171620,171622,171624,171626],{"class":480,"line":593},[478,171610,31679],{"class":495},[478,171612,263],{"class":714},[478,171614,218],{"class":710},[478,171616,171617],{"class":488},"\"出错了:",[478,171619,1591],{"class":495},[478,171621,786],{"class":714},[478,171623,1641],{"class":495},[478,171625,952],{"class":488},[478,171627,720],{"class":714},[19,171629,146837],{},[469,171631,171634],{"className":171632,"code":171633,"language":5753,"meta":54},[5751],"出错了:invalid literal for int() with base 10: 'abc'\n",[475,171635,171633],{"__ignoreMap":54},[14,171637,171639],{"id":171638},"_96-else和finally","9.6 else和finally",[19,171641,171642,171644],{},[475,171643,2268],{},"：没有异常时执行。",[19,171646,171647,171650],{},[475,171648,171649],{},"finally","：无论是否异常都会执行。",[469,171652,171654],{"className":30758,"code":171653,"language":30760,"meta":54,"style":54},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[475,171655,171656,171662,171680,171688,171698,171704,171725,171731],{"__ignoreMap":54},[478,171657,171658,171660],{"class":480,"line":481},[478,171659,171262],{"class":710},[478,171661,4305],{"class":714},[478,171663,171664,171666,171668,171670,171672,171674,171676,171678],{"class":480,"line":565},[478,171665,45973],{"class":714},[478,171667,759],{"class":710},[478,171669,2948],{"class":495},[478,171671,263],{"class":714},[478,171673,54201],{"class":495},[478,171675,263],{"class":714},[478,171677,156176],{"class":488},[478,171679,30877],{"class":714},[478,171681,171682,171684,171686],{"class":480,"line":579},[478,171683,171274],{"class":710},[478,171685,152606],{"class":495},[478,171687,4305],{"class":714},[478,171689,171690,171692,171694,171696],{"class":480,"line":593},[478,171691,31679],{"class":495},[478,171693,263],{"class":714},[478,171695,153594],{"class":488},[478,171697,720],{"class":714},[478,171699,171700,171702],{"class":480,"line":1769},[478,171701,2268],{"class":710},[478,171703,4305],{"class":714},[478,171705,171706,171708,171710,171712,171715,171717,171719,171721,171723],{"class":480,"line":1783},[478,171707,31679],{"class":495},[478,171709,263],{"class":714},[478,171711,218],{"class":710},[478,171713,171714],{"class":488},"\"输入正确:",[478,171716,1591],{"class":495},[478,171718,2232],{"class":714},[478,171720,1641],{"class":495},[478,171722,952],{"class":488},[478,171724,720],{"class":714},[478,171726,171727,171729],{"class":480,"line":1789},[478,171728,171649],{"class":710},[478,171730,4305],{"class":714},[478,171732,171733,171735,171737,171740],{"class":480,"line":1880},[478,171734,31679],{"class":495},[478,171736,263],{"class":714},[478,171738,171739],{"class":488},"\"程序结束\"",[478,171741,720],{"class":714},[19,171743,171744,171746],{},[475,171745,171649],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171748,171750],{"id":171749},"_97-抛出异常","9.7 抛出异常",[19,171752,171753],{},"程序可以主动抛出异常。",[469,171755,171757],{"className":30758,"code":171756,"language":30760,"meta":54,"style":54},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[475,171758,171759,171768,171780,171793,171813,171817,171821],{"__ignoreMap":54},[478,171760,171761,171763,171766],{"class":480,"line":481},[478,171762,32327],{"class":710},[478,171764,171765],{"class":484}," set_age",[478,171767,161795],{"class":714},[478,171769,171770,171772,171774,171776,171778],{"class":480,"line":565},[478,171771,3667],{"class":710},[478,171773,16272],{"class":714},[478,171775,1605],{"class":710},[478,171777,4659],{"class":495},[478,171779,4305],{"class":714},[478,171781,171782,171784,171786,171788,171791],{"class":480,"line":579},[478,171783,103812],{"class":710},[478,171785,152606],{"class":495},[478,171787,263],{"class":714},[478,171789,171790],{"class":488},"\"年龄不能为负数\"",[478,171792,720],{"class":714},[478,171794,171795,171797,171799,171801,171803,171805,171807,171809,171811],{"class":480,"line":593},[478,171796,31679],{"class":495},[478,171798,263],{"class":714},[478,171800,218],{"class":710},[478,171802,162363],{"class":488},[478,171804,1591],{"class":495},[478,171806,70601],{"class":714},[478,171808,1641],{"class":495},[478,171810,952],{"class":488},[478,171812,720],{"class":714},[478,171814,171815],{"class":480,"line":1769},[478,171816,2966],{"emptyLinePlaceholder":640},[478,171818,171819],{"class":480,"line":1783},[478,171820,2966],{"emptyLinePlaceholder":640},[478,171822,171823,171826,171828,171830],{"class":480,"line":1789},[478,171824,171825],{"class":714},"set_age(",[478,171827,1232],{"class":710},[478,171829,193],{"class":495},[478,171831,720],{"class":714},[19,171833,171834],{},"调用者可以捕获：",[469,171836,171838],{"className":30758,"code":171837,"language":30760,"meta":54,"style":54},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[475,171839,171840,171846,171857,171867],{"__ignoreMap":54},[478,171841,171842,171844],{"class":480,"line":481},[478,171843,171262],{"class":710},[478,171845,4305],{"class":714},[478,171847,171848,171851,171853,171855],{"class":480,"line":565},[478,171849,171850],{"class":714},"    set_age(",[478,171852,1232],{"class":710},[478,171854,193],{"class":495},[478,171856,720],{"class":714},[478,171858,171859,171861,171863,171865],{"class":480,"line":579},[478,171860,171274],{"class":710},[478,171862,152606],{"class":495},[478,171864,64984],{"class":710},[478,171866,171606],{"class":714},[478,171868,171869,171871],{"class":480,"line":593},[478,171870,31679],{"class":495},[478,171872,67379],{"class":714},[14,171874,171876],{"id":171875},"_98-自定义异常","9.8 自定义异常",[469,171878,171880],{"className":30758,"code":171879,"language":30760,"meta":54,"style":54},"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",[475,171881,171882,171896,171900,171904,171908,171916,171926,171937,171947,171951,171955,171961,171978,171989],{"__ignoreMap":54},[478,171883,171884,171886,171889,171891,171894],{"class":480,"line":481},[478,171885,15259],{"class":710},[478,171887,171888],{"class":484}," BalanceNotEnoughError",[478,171890,263],{"class":714},[478,171892,171893],{"class":495},"Exception",[478,171895,31166],{"class":714},[478,171897,171898],{"class":480,"line":565},[478,171899,149917],{"class":710},[478,171901,171902],{"class":480,"line":579},[478,171903,2966],{"emptyLinePlaceholder":640},[478,171905,171906],{"class":480,"line":593},[478,171907,2966],{"emptyLinePlaceholder":640},[478,171909,171910,171912,171914],{"class":480,"line":1769},[478,171911,32327],{"class":710},[478,171913,150566],{"class":484},[478,171915,163192],{"class":714},[478,171917,171918,171920,171922,171924],{"class":480,"line":1783},[478,171919,3667],{"class":710},[478,171921,150522],{"class":714},[478,171923,1655],{"class":710},[478,171925,162969],{"class":714},[478,171927,171928,171930,171933,171935],{"class":480,"line":1789},[478,171929,103812],{"class":710},[478,171931,171932],{"class":714}," BalanceNotEnoughError(",[478,171934,150617],{"class":488},[478,171936,720],{"class":714},[478,171938,171939,171941,171943,171945],{"class":480,"line":1880},[478,171940,4656],{"class":710},[478,171942,163199],{"class":714},[478,171944,1232],{"class":710},[478,171946,150555],{"class":714},[478,171948,171949],{"class":480,"line":1886},[478,171950,2966],{"emptyLinePlaceholder":640},[478,171952,171953],{"class":480,"line":1898},[478,171954,2966],{"emptyLinePlaceholder":640},[478,171956,171957,171959],{"class":480,"line":2180},[478,171958,171262],{"class":710},[478,171960,4305],{"class":714},[478,171962,171963,171965,171967,171970,171972,171974,171976],{"class":480,"line":2185},[478,171964,162870],{"class":714},[478,171966,759],{"class":710},[478,171968,171969],{"class":714}," withdraw(",[478,171971,1012],{"class":495},[478,171973,13001],{"class":714},[478,171975,2289],{"class":495},[478,171977,720],{"class":714},[478,171979,171980,171982,171985,171987],{"class":480,"line":2191},[478,171981,171274],{"class":710},[478,171983,171984],{"class":714}," BalanceNotEnoughError ",[478,171986,31763],{"class":710},[478,171988,171606],{"class":714},[478,171990,171991,171993],{"class":480,"line":2196},[478,171992,31679],{"class":495},[478,171994,67379],{"class":714},[19,171996,171997],{},"入门阶段大多数情况使用内置异常即可。",[14,171999,172001],{"id":172000},"_99-traceback","9.9 traceback",[19,172003,172004],{},"调试时可以输出完整异常堆栈。",[469,172006,172008],{"className":30758,"code":172007,"language":30760,"meta":54,"style":54},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[475,172009,172010,172017,172021,172027,172037,172045],{"__ignoreMap":54},[478,172011,172012,172014],{"class":480,"line":481},[478,172013,30772],{"class":710},[478,172015,172016],{"class":714}," traceback\n",[478,172018,172019],{"class":480,"line":565},[478,172020,2966],{"emptyLinePlaceholder":640},[478,172022,172023,172025],{"class":480,"line":579},[478,172024,171262],{"class":710},[478,172026,4305],{"class":714},[478,172028,172029,172031,172033,172035],{"class":480,"line":593},[478,172030,2551],{"class":495},[478,172032,263],{"class":714},[478,172034,156260],{"class":488},[478,172036,720],{"class":714},[478,172038,172039,172041,172043],{"class":480,"line":1769},[478,172040,171274],{"class":710},[478,172042,152606],{"class":495},[478,172044,4305],{"class":714},[478,172046,172047],{"class":480,"line":1783},[478,172048,172049],{"class":714},"    traceback.print_exc()\n",[19,172051,172052],{},"日志系统中常把异常堆栈记录到文件。",[14,172054,172056],{"id":172055},"_910-什么是模块","9.10 什么是模块",[19,172058,172059,172060,126363],{},"模块就是一个 ",[475,172061,146732],{},[19,172063,172064,172065,24998],{},"例如创建 ",[475,172066,172067],{},"my_math.py",[469,172069,172071],{"className":30758,"code":172070,"language":30760,"meta":54,"style":54},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[475,172072,172073,172081,172091,172095,172099,172108],{"__ignoreMap":54},[478,172074,172075,172077,172079],{"class":480,"line":481},[478,172076,32327],{"class":710},[478,172078,5775],{"class":484},[478,172080,151473],{"class":714},[478,172082,172083,172085,172087,172089],{"class":480,"line":565},[478,172084,4656],{"class":710},[478,172086,11435],{"class":714},[478,172088,1181],{"class":710},[478,172090,151484],{"class":714},[478,172092,172093],{"class":480,"line":579},[478,172094,2966],{"emptyLinePlaceholder":640},[478,172096,172097],{"class":480,"line":593},[478,172098,2966],{"emptyLinePlaceholder":640},[478,172100,172101,172103,172106],{"class":480,"line":1769},[478,172102,32327],{"class":710},[478,172104,172105],{"class":484}," sub",[478,172107,151473],{"class":714},[478,172109,172110,172112,172114,172116],{"class":480,"line":1783},[478,172111,4656],{"class":710},[478,172113,11435],{"class":714},[478,172115,1232],{"class":710},[478,172117,151484],{"class":714},[19,172119,172120],{},"在另一个文件中导入：",[469,172122,172124],{"className":30758,"code":172123,"language":30760,"meta":54,"style":54},"import my_math\n\nprint(my_math.add(1, 2))\n",[475,172125,172126,172133,172137],{"__ignoreMap":54},[478,172127,172128,172130],{"class":480,"line":481},[478,172129,30772],{"class":710},[478,172131,172132],{"class":714}," my_math\n",[478,172134,172135],{"class":480,"line":565},[478,172136,2966],{"emptyLinePlaceholder":640},[478,172138,172139,172141,172144,172146,172148,172150],{"class":480,"line":579},[478,172140,30795],{"class":495},[478,172142,172143],{"class":714},"(my_math.add(",[478,172145,193],{"class":495},[478,172147,13001],{"class":714},[478,172149,789],{"class":495},[478,172151,30877],{"class":714},[14,172153,172155],{"id":172154},"_911-import导入","9.11 import导入",[129,172157,172159],{"id":172158},"_9111-导入模块","9.11.1 导入模块",[469,172161,172163],{"className":30758,"code":172162,"language":30760,"meta":54,"style":54},"import random\n\nprint(random.randint(1, 10))\n",[475,172164,172165,172171,172175],{"__ignoreMap":54},[478,172166,172167,172169],{"class":480,"line":481},[478,172168,30772],{"class":710},[478,172170,45708],{"class":714},[478,172172,172173],{"class":480,"line":565},[478,172174,2966],{"emptyLinePlaceholder":640},[478,172176,172177,172179,172182,172184,172186,172188],{"class":480,"line":579},[478,172178,30795],{"class":495},[478,172180,172181],{"class":714},"(random.randint(",[478,172183,193],{"class":495},[478,172185,13001],{"class":714},[478,172187,1146],{"class":495},[478,172189,30877],{"class":714},[129,172191,172193],{"id":172192},"_9112-导入指定内容","9.11.2 导入指定内容",[469,172195,172197],{"className":30758,"code":172196,"language":30760,"meta":54,"style":54},"from random import randint\n\nprint(randint(1, 10))\n",[475,172198,172199,172210,172214],{"__ignoreMap":54},[478,172200,172201,172203,172205,172207],{"class":480,"line":481},[478,172202,31117],{"class":710},[478,172204,58176],{"class":714},[478,172206,30772],{"class":710},[478,172208,172209],{"class":714}," randint\n",[478,172211,172212],{"class":480,"line":565},[478,172213,2966],{"emptyLinePlaceholder":640},[478,172215,172216,172218,172221,172223,172225,172227],{"class":480,"line":579},[478,172217,30795],{"class":495},[478,172219,172220],{"class":714},"(randint(",[478,172222,193],{"class":495},[478,172224,13001],{"class":714},[478,172226,1146],{"class":495},[478,172228,30877],{"class":714},[129,172230,172232],{"id":172231},"_9113-起别名","9.11.3 起别名",[469,172234,172236],{"className":30758,"code":172235,"language":30760,"meta":54,"style":54},"import random as rd\n\nprint(rd.randint(1, 10))\n",[475,172237,172238,172249,172253],{"__ignoreMap":54},[478,172239,172240,172242,172244,172246],{"class":480,"line":481},[478,172241,30772],{"class":710},[478,172243,58176],{"class":714},[478,172245,31763],{"class":710},[478,172247,172248],{"class":714}," rd\n",[478,172250,172251],{"class":480,"line":565},[478,172252,2966],{"emptyLinePlaceholder":640},[478,172254,172255,172257,172260,172262,172264,172266],{"class":480,"line":579},[478,172256,30795],{"class":495},[478,172258,172259],{"class":714},"(rd.randint(",[478,172261,193],{"class":495},[478,172263,13001],{"class":714},[478,172265,1146],{"class":495},[478,172267,30877],{"class":714},[469,172269,172271],{"className":30758,"code":172270,"language":30760,"meta":54,"style":54},"from random import randint as rint\n\nprint(rint(1, 10))\n",[475,172272,172273,172289,172293],{"__ignoreMap":54},[478,172274,172275,172277,172279,172281,172284,172286],{"class":480,"line":481},[478,172276,31117],{"class":710},[478,172278,58176],{"class":714},[478,172280,30772],{"class":710},[478,172282,172283],{"class":714}," randint ",[478,172285,31763],{"class":710},[478,172287,172288],{"class":714}," rint\n",[478,172290,172291],{"class":480,"line":565},[478,172292,2966],{"emptyLinePlaceholder":640},[478,172294,172295,172297,172300,172302,172304,172306],{"class":480,"line":579},[478,172296,30795],{"class":495},[478,172298,172299],{"class":714},"(rint(",[478,172301,193],{"class":495},[478,172303,13001],{"class":714},[478,172305,1146],{"class":495},[478,172307,30877],{"class":714},[129,172309,172311],{"id":172310},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[469,172313,172315],{"className":30758,"code":172314,"language":30760,"meta":54,"style":54},"from random import *\n",[475,172316,172317],{"__ignoreMap":54},[478,172318,172319,172321,172323,172325],{"class":480,"line":481},[478,172320,31117],{"class":710},[478,172322,58176],{"class":714},[478,172324,30772],{"class":710},[478,172326,172327],{"class":710}," *\n",[19,172329,172330],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172332,172334],{"id":172333},"_912-常用内置模块","9.12 常用内置模块",[129,172336,172338],{"id":172337},"_9121-random","9.12.1 random",[469,172340,172342],{"className":30758,"code":172341,"language":30760,"meta":54,"style":54},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[475,172343,172344,172350,172354,172368,172387],{"__ignoreMap":54},[478,172345,172346,172348],{"class":480,"line":481},[478,172347,30772],{"class":710},[478,172349,45708],{"class":714},[478,172351,172352],{"class":480,"line":565},[478,172353,2966],{"emptyLinePlaceholder":640},[478,172355,172356,172358,172360,172362,172364,172366],{"class":480,"line":579},[478,172357,30795],{"class":495},[478,172359,172181],{"class":714},[478,172361,193],{"class":495},[478,172363,13001],{"class":714},[478,172365,1146],{"class":495},[478,172367,30877],{"class":714},[478,172369,172370,172372,172375,172377,172379,172381,172383,172385],{"class":480,"line":593},[478,172371,30795],{"class":495},[478,172373,172374],{"class":714},"(random.choice([",[478,172376,150268],{"class":488},[478,172378,13001],{"class":714},[478,172380,151316],{"class":488},[478,172382,13001],{"class":714},[478,172384,160111],{"class":488},[478,172386,33523],{"class":714},[478,172388,172389,172391,172394,172396,172398,172400,172402,172404,172406,172408,172410,172412,172414,172416],{"class":480,"line":1769},[478,172390,30795],{"class":495},[478,172392,172393],{"class":714},"(random.sample([",[478,172395,193],{"class":495},[478,172397,13001],{"class":714},[478,172399,789],{"class":495},[478,172401,13001],{"class":714},[478,172403,783],{"class":495},[478,172405,13001],{"class":714},[478,172407,994],{"class":495},[478,172409,13001],{"class":714},[478,172411,1020],{"class":495},[478,172413,112582],{"class":714},[478,172415,789],{"class":495},[478,172417,30877],{"class":714},[129,172419,172421],{"id":172420},"_9122-time","9.12.2 time",[469,172423,172425],{"className":30758,"code":172424,"language":30760,"meta":54,"style":54},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[475,172426,172427,172433,172437,172444,172452],{"__ignoreMap":54},[478,172428,172429,172431],{"class":480,"line":481},[478,172430,30772],{"class":710},[478,172432,32209],{"class":714},[478,172434,172435],{"class":480,"line":565},[478,172436,2966],{"emptyLinePlaceholder":640},[478,172438,172439,172441],{"class":480,"line":579},[478,172440,30795],{"class":495},[478,172442,172443],{"class":714},"(time.time())\n",[478,172445,172446,172448,172450],{"class":480,"line":593},[478,172447,95451],{"class":714},[478,172449,193],{"class":495},[478,172451,720],{"class":714},[478,172453,172454,172456,172458,172461],{"class":480,"line":1769},[478,172455,30795],{"class":495},[478,172457,263],{"class":714},[478,172459,172460],{"class":488},"\"1秒后执行\"",[478,172462,720],{"class":714},[129,172464,172466],{"id":172465},"_9123-datetime","9.12.3 datetime",[469,172468,172470],{"className":30758,"code":172469,"language":30760,"meta":54,"style":54},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[475,172471,172472,172484,172488,172498,172505],{"__ignoreMap":54},[478,172473,172474,172476,172479,172481],{"class":480,"line":481},[478,172475,31117],{"class":710},[478,172477,172478],{"class":714}," datetime ",[478,172480,30772],{"class":710},[478,172482,172483],{"class":714}," datetime\n",[478,172485,172486],{"class":480,"line":565},[478,172487,2966],{"emptyLinePlaceholder":640},[478,172489,172490,172493,172495],{"class":480,"line":579},[478,172491,172492],{"class":714},"now ",[478,172494,759],{"class":710},[478,172496,172497],{"class":714}," datetime.now()\n",[478,172499,172500,172502],{"class":480,"line":593},[478,172501,30795],{"class":495},[478,172503,172504],{"class":714},"(now)\n",[478,172506,172507,172509,172512,172515,172517,172520],{"class":480,"line":1769},[478,172508,30795],{"class":495},[478,172510,172511],{"class":714},"(now.strftime(",[478,172513,172514],{"class":488},"\"%Y-%m-",[478,172516,157071],{"class":495},[478,172518,172519],{"class":488}," %H:%M:%S\"",[478,172521,30877],{"class":714},[129,172523,172525],{"id":172524},"_9124-os","9.12.4 os",[469,172527,172529],{"className":30758,"code":172528,"language":30760,"meta":54,"style":54},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[475,172530,172531,172537,172541,172548],{"__ignoreMap":54},[478,172532,172533,172535],{"class":480,"line":481},[478,172534,30772],{"class":710},[478,172536,45685],{"class":714},[478,172538,172539],{"class":480,"line":565},[478,172540,2966],{"emptyLinePlaceholder":640},[478,172542,172543,172545],{"class":480,"line":579},[478,172544,30795],{"class":495},[478,172546,172547],{"class":714},"(os.getcwd())\n",[478,172549,172550,172552,172555,172558],{"class":480,"line":593},[478,172551,30795],{"class":495},[478,172553,172554],{"class":714},"(os.listdir(",[478,172556,172557],{"class":488},"\".\"",[478,172559,30877],{"class":714},[129,172561,172563],{"id":172562},"_9125-sys","9.12.5 sys",[469,172565,172567],{"className":30758,"code":172566,"language":30760,"meta":54,"style":54},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[475,172568,172569,172576,172580,172587],{"__ignoreMap":54},[478,172570,172571,172573],{"class":480,"line":481},[478,172572,30772],{"class":710},[478,172574,172575],{"class":714}," sys\n",[478,172577,172578],{"class":480,"line":565},[478,172579,2966],{"emptyLinePlaceholder":640},[478,172581,172582,172584],{"class":480,"line":579},[478,172583,30795],{"class":495},[478,172585,172586],{"class":714},"(sys.version)\n",[478,172588,172589,172591],{"class":480,"line":593},[478,172590,30795],{"class":495},[478,172592,172593],{"class":714},"(sys.path)\n",[14,172595,172597,172598,172600,172601,952],{"id":172596},"_913-if-name-main","9.13 if ",[45,172599,80190],{}," == \"",[45,172602,102438],{},[19,172604,172605,172606,172609],{},"模块被直接运行和被导入时，",[475,172607,172608],{},"__name__"," 的值不同。",[19,172611,172612,172613,24998],{},"创建 ",[475,172614,172615],{},"my_module.py",[469,172617,172619],{"className":30758,"code":172618,"language":30760,"meta":54,"style":54},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[475,172620,172621,172629,172639,172643,172647,172659],{"__ignoreMap":54},[478,172622,172623,172625,172627],{"class":480,"line":481},[478,172624,32327],{"class":710},[478,172626,5775],{"class":484},[478,172628,151473],{"class":714},[478,172630,172631,172633,172635,172637],{"class":480,"line":565},[478,172632,4656],{"class":710},[478,172634,11435],{"class":714},[478,172636,1181],{"class":710},[478,172638,151484],{"class":714},[478,172640,172641],{"class":480,"line":579},[478,172642,2966],{"emptyLinePlaceholder":640},[478,172644,172645],{"class":480,"line":593},[478,172646,2966],{"emptyLinePlaceholder":640},[478,172648,172649,172651,172653,172655,172657],{"class":480,"line":1769},[478,172650,2099],{"class":710},[478,172652,31600],{"class":495},[478,172654,101939],{"class":710},[478,172656,101942],{"class":488},[478,172658,4305],{"class":714},[478,172660,172661,172663,172665,172667,172669,172671],{"class":480,"line":1783},[478,172662,31679],{"class":495},[478,172664,166980],{"class":714},[478,172666,193],{"class":495},[478,172668,13001],{"class":714},[478,172670,789],{"class":495},[478,172672,30877],{"class":714},[19,172674,172675],{},"作用：",[29,172677,172678,172681],{},[32,172679,172680],{},"直接运行该文件时，执行测试代码。",[32,172682,172683],{},"被其他文件导入时，不执行测试代码。",[19,172685,172686],{},"这是写模块时很常用的习惯。",[14,172688,172690],{"id":172689},"_914-包","9.14 包",[19,172692,172693,172694,172697],{},"包是包含 ",[475,172695,172696],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172699,172700],{},"目录结构：",[469,172702,172705],{"className":172703,"code":172704,"language":5753,"meta":54},[5751],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[475,172706,172704],{"__ignoreMap":54},[19,172708,172709],{},"导入：",[469,172711,172713],{"className":30758,"code":172712,"language":30760,"meta":54,"style":54},"from utils.file_utils import read_file\n",[475,172714,172715],{"__ignoreMap":54},[478,172716,172717,172719,172722,172724],{"class":480,"line":481},[478,172718,31117],{"class":710},[478,172720,172721],{"class":714}," utils.file_utils ",[478,172723,30772],{"class":710},[478,172725,172726],{"class":714}," read_file\n",[19,172728,172729,172731],{},[475,172730,172696],{}," 可以为空，也可以写包初始化逻辑。",[14,172733,172735],{"id":172734},"_915-第三方包","9.15 第三方包",[19,172737,172738,172739,172741],{},"第三方包通过 ",[475,172740,485],{}," 安装。",[469,172743,172745],{"className":471,"code":172744,"language":473,"meta":54,"style":54},"pip install requests\n",[475,172746,172747],{"__ignoreMap":54},[478,172748,172749,172751,172753],{"class":480,"line":481},[478,172750,485],{"class":484},[478,172752,489],{"class":488},[478,172754,146478],{"class":488},[19,172756,172757],{},"使用：",[469,172759,172761],{"className":30758,"code":172760,"language":30760,"meta":54,"style":54},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[475,172762,172763,172769,172773,172788],{"__ignoreMap":54},[478,172764,172765,172767],{"class":480,"line":481},[478,172766,30772],{"class":710},[478,172768,146478],{"class":714},[478,172770,172771],{"class":480,"line":565},[478,172772,2966],{"emptyLinePlaceholder":640},[478,172774,172775,172778,172780,172783,172786],{"class":480,"line":579},[478,172776,172777],{"class":714},"response ",[478,172779,759],{"class":710},[478,172781,172782],{"class":714}," requests.get(",[478,172784,172785],{"class":488},"\"https:\u002F\u002Fwww.example.com\"",[478,172787,720],{"class":714},[478,172789,172790,172792],{"class":480,"line":593},[478,172791,30795],{"class":495},[478,172793,172794],{"class":714},"(response.status_code)\n",[19,172796,172797],{},"查看已安装包：",[469,172799,172801],{"className":471,"code":172800,"language":473,"meta":54,"style":54},"pip list\n",[475,172802,172803],{"__ignoreMap":54},[478,172804,172805,172807],{"class":480,"line":481},[478,172806,485],{"class":484},[478,172808,119335],{"class":488},[19,172810,172811],{},"导出项目依赖：",[469,172813,172814],{"className":471,"code":146673,"language":473,"meta":54,"style":54},[475,172815,172816],{"__ignoreMap":54},[478,172817,172818,172820,172822,172824],{"class":480,"line":481},[478,172819,485],{"class":484},[478,172821,146682],{"class":488},[478,172823,26602],{"class":710},[478,172825,146687],{"class":488},[19,172827,172828],{},"安装项目依赖：",[469,172830,172831],{"className":471,"code":146693,"language":473,"meta":54,"style":54},[475,172832,172833],{"__ignoreMap":54},[478,172834,172835,172837,172839,172841],{"class":480,"line":481},[478,172836,485],{"class":484},[478,172838,489],{"class":488},[478,172840,120019],{"class":495},[478,172842,146687],{"class":488},[14,172844,172846],{"id":172845},"_916-模块搜索路径","9.16 模块搜索路径",[19,172848,172849,172850,172853],{},"Python 导入模块时会在 ",[475,172851,172852],{},"sys.path"," 中查找。",[469,172855,172857],{"className":30758,"code":172856,"language":30760,"meta":54,"style":54},"import sys\n\nfor path in sys.path:\n    print(path)\n",[475,172858,172859,172865,172869,172881],{"__ignoreMap":54},[478,172860,172861,172863],{"class":480,"line":481},[478,172862,30772],{"class":710},[478,172864,172575],{"class":714},[478,172866,172867],{"class":480,"line":565},[478,172868,2966],{"emptyLinePlaceholder":640},[478,172870,172871,172873,172876,172878],{"class":480,"line":579},[478,172872,3591],{"class":710},[478,172874,172875],{"class":714}," path ",[478,172877,26423],{"class":710},[478,172879,172880],{"class":714}," sys.path:\n",[478,172882,172883,172885],{"class":480,"line":593},[478,172884,31679],{"class":495},[478,172886,169609],{"class":714},[19,172888,172889],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172891,158003],{},[469,172893,172896],{"className":172894,"code":172895,"language":5753,"meta":54},[5751],"random.py\njson.py\ntime.py\n",[475,172897,172895],{"__ignoreMap":54},[19,172899,172900],{},"这些文件名可能导致导入异常。",[14,172902,172904],{"id":172903},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172906,172700],{},[469,172908,172911],{"className":172909,"code":172910,"language":5753,"meta":54},[5751],"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",[475,172912,172910],{"__ignoreMap":54},[19,172914,172915,24998],{},[475,172916,172917],{},"utils\u002Ffile_utils.py",[469,172919,172921],{"className":30758,"code":172920,"language":30760,"meta":54,"style":54},"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",[475,172922,172923,172929,172939,172943,172947,172957,172967,172975,172981,172985,173012,173022,173026,173030,173040,173066],{"__ignoreMap":54},[478,172924,172925,172927],{"class":480,"line":481},[478,172926,30772],{"class":710},[478,172928,147471],{"class":714},[478,172930,172931,172933,172935,172937],{"class":480,"line":565},[478,172932,31117],{"class":710},[478,172934,108691],{"class":714},[478,172936,30772],{"class":710},[478,172938,108696],{"class":714},[478,172940,172941],{"class":480,"line":579},[478,172942,2966],{"emptyLinePlaceholder":640},[478,172944,172945],{"class":480,"line":593},[478,172946,2966],{"emptyLinePlaceholder":640},[478,172948,172949,172951,172954],{"class":480,"line":1769},[478,172950,32327],{"class":710},[478,172952,172953],{"class":484}," read_json",[478,172955,172956],{"class":714},"(path):\n",[478,172958,172959,172962,172964],{"class":480,"line":1783},[478,172960,172961],{"class":714},"    path ",[478,172963,759],{"class":710},[478,172965,172966],{"class":714}," Path(path)\n",[478,172968,172969,172971,172973],{"class":480,"line":1789},[478,172970,3667],{"class":710},[478,172972,39310],{"class":710},[478,172974,169690],{"class":714},[478,172976,172977,172979],{"class":480,"line":1880},[478,172978,15317],{"class":710},[478,172980,52218],{"class":714},[478,172982,172983],{"class":480,"line":1886},[478,172984,2966],{"emptyLinePlaceholder":640},[478,172986,172987,172989,172991,172994,172996,172998,173000,173002,173004,173006,173008,173010],{"class":480,"line":1898},[478,172988,34558],{"class":710},[478,172990,147171],{"class":495},[478,172992,172993],{"class":714},"(path, ",[478,172995,147181],{"class":488},[478,172997,13001],{"class":714},[478,172999,147186],{"class":5782},[478,173001,759],{"class":710},[478,173003,147191],{"class":488},[478,173005,14280],{"class":714},[478,173007,31763],{"class":710},[478,173009,148533],{"class":5782},[478,173011,4305],{"class":714},[478,173013,173014,173016,173018,173020],{"class":480,"line":2180},[478,173015,15317],{"class":710},[478,173017,148544],{"class":714},[478,173019,45734],{"class":5782},[478,173021,720],{"class":714},[478,173023,173024],{"class":480,"line":2185},[478,173025,2966],{"emptyLinePlaceholder":640},[478,173027,173028],{"class":480,"line":2191},[478,173029,2966],{"emptyLinePlaceholder":640},[478,173031,173032,173034,173037],{"class":480,"line":2196},[478,173033,32327],{"class":710},[478,173035,173036],{"class":484}," write_json",[478,173038,173039],{"class":714},"(path, data):\n",[478,173041,173042,173044,173046,173048,173050,173052,173054,173056,173058,173060,173062,173064],{"class":480,"line":2210},[478,173043,34558],{"class":710},[478,173045,147171],{"class":495},[478,173047,172993],{"class":714},[478,173049,152356],{"class":488},[478,173051,13001],{"class":714},[478,173053,147186],{"class":5782},[478,173055,759],{"class":710},[478,173057,147191],{"class":488},[478,173059,14280],{"class":714},[478,173061,31763],{"class":710},[478,173063,148533],{"class":5782},[478,173065,4305],{"class":714},[478,173067,173068,173071,173073,173075,173077,173079,173081,173083,173085,173087,173089],{"class":480,"line":2215},[478,173069,173070],{"class":714},"        json.dump(data, ",[478,173072,45734],{"class":5782},[478,173074,13001],{"class":714},[478,173076,147517],{"class":5782},[478,173078,759],{"class":710},[478,173080,34367],{"class":495},[478,173082,13001],{"class":714},[478,173084,152392],{"class":5782},[478,173086,759],{"class":710},[478,173088,789],{"class":495},[478,173090,720],{"class":714},[19,173092,173093,24998],{},[475,173094,154987],{},[469,173096,173098],{"className":30758,"code":173097,"language":30760,"meta":54,"style":54},"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",[475,173099,173100,173111,173115,173128,173148],{"__ignoreMap":54},[478,173101,173102,173104,173106,173108],{"class":480,"line":481},[478,173103,31117],{"class":710},[478,173105,172721],{"class":714},[478,173107,30772],{"class":710},[478,173109,173110],{"class":714}," read_json, write_json\n",[478,173112,173113],{"class":480,"line":565},[478,173114,2966],{"emptyLinePlaceholder":640},[478,173116,173117,173119,173121,173124,173126],{"class":480,"line":579},[478,173118,160096],{"class":714},[478,173120,759],{"class":710},[478,173122,173123],{"class":714}," read_json(",[478,173125,152211],{"class":488},[478,173127,720],{"class":714},[478,173129,173130,173132,173134,173136,173138,173140,173142,173144,173146],{"class":480,"line":593},[478,173131,170914],{"class":714},[478,173133,63059],{"class":488},[478,173135,51817],{"class":714},[478,173137,150268],{"class":488},[478,173139,13001],{"class":714},[478,173141,151852],{"class":488},[478,173143,51817],{"class":714},[478,173145,1684],{"class":495},[478,173147,165532],{"class":714},[478,173149,173150,173153,173155],{"class":480,"line":1769},[478,173151,173152],{"class":714},"write_json(",[478,173154,152211],{"class":488},[478,173156,173157],{"class":714},", students)\n",[14,173159,173161],{"id":173160},"_918-易错点","9.18 易错点",[29,173163,173164,173167,173172,173177,173180,173183],{},[32,173165,173166],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[32,173168,173169,173170,28765],{},"能指定异常类型就不要裸写 ",[475,173171,171274],{},[32,173173,173174,173176],{},[475,173175,171649],{}," 无论是否出错都会执行。",[32,173178,173179],{},"模块文件名不要和标准库重名。",[32,173181,173182],{},"导入自己写的模块时，要注意运行目录。",[32,173184,173185],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173187,173189],{"id":173188},"_919-本章练习","9.19 本章练习",[29,173191,173192,173195,173198,173204,173211],{},[32,173193,173194],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[32,173196,173197],{},"写函数读取文件，如果文件不存在则返回空字符串。",[32,173199,172612,173200,173203],{},[475,173201,173202],{},"math_utils.py","，实现加减乘除函数并导入使用。",[32,173205,173206,173207,173210],{},"创建一个 ",[475,173208,173209],{},"utils"," 包，把 JSON 读写函数放进去。",[32,173212,173213],{},"写一个程序，捕获除零异常和输入格式异常。",[617,173215,173216],{},"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":54,"searchDepth":565,"depth":565,"links":173218},[173219,173220,173221,173222,173223,173224,173225,173226,173227,173228,173229,173235,173242,173244,173245,173246,173247,173248,173249],{"id":171071,"depth":565,"text":171072},{"id":171199,"depth":565,"text":171200},{"id":171248,"depth":565,"text":171249},{"id":171397,"depth":565,"text":171398},{"id":171569,"depth":565,"text":171570},{"id":171638,"depth":565,"text":171639},{"id":171749,"depth":565,"text":171750},{"id":171875,"depth":565,"text":171876},{"id":172000,"depth":565,"text":172001},{"id":172055,"depth":565,"text":172056},{"id":172154,"depth":565,"text":172155,"children":173230},[173231,173232,173233,173234],{"id":172158,"depth":579,"text":172159},{"id":172192,"depth":579,"text":172193},{"id":172231,"depth":579,"text":172232},{"id":172310,"depth":579,"text":172311},{"id":172333,"depth":565,"text":172334,"children":173236},[173237,173238,173239,173240,173241],{"id":172337,"depth":579,"text":172338},{"id":172420,"depth":579,"text":172421},{"id":172465,"depth":579,"text":172466},{"id":172524,"depth":579,"text":172525},{"id":172562,"depth":579,"text":172563},{"id":172596,"depth":565,"text":173243},"9.13 if name == \"main\"",{"id":172689,"depth":565,"text":172690},{"id":172734,"depth":565,"text":172735},{"id":172845,"depth":565,"text":172846},{"id":172903,"depth":565,"text":172904},{"id":173160,"depth":565,"text":173161},{"id":173188,"depth":565,"text":173189},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171063,"description":23942},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173256,"title":173257,"body":173258,"description":173421,"extension":638,"meta":173422,"navigation":640,"path":173423,"seo":173424,"stem":173425,"__hash__":173426},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173259,"toc":173416},[173260,173263,173266,173269,173280,173282,173356,173359,173362,173365,173368,173371,173374,173377,173380,173383,173386],[10,173261,173257],{"id":173262},"python教程",[19,173264,173265],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173267,173268],{},"建议学习环境：",[29,173270,173271,173274,173277],{},[32,173272,173273],{},"Python 版本：Python 3.10 及以上。",[32,173275,173276],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[32,173278,173279],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173281,117458],{"id":117458},[29,173283,173284,173290,173296,173302,173308,173314,173320,173326,173332,173338,173344,173350],{},[32,173285,173286],{},[518,173287,173289],{"href":173288},".\u002Fch1-Python","Python环境与第一个程序",[32,173291,173292],{},[518,173293,173295],{"href":173294},".\u002Fch2","基础语法、变量与字符串",[32,173297,173298],{},[518,173299,173301],{"href":173300},".\u002Fch3","判断语句",[32,173303,173304],{},[518,173305,173307],{"href":173306},".\u002Fch4","循环语句",[32,173309,173310],{},[518,173311,173313],{"href":173312},".\u002Fch5","函数基础",[32,173315,173316],{},[518,173317,173319],{"href":173318},".\u002Fch6","数据容器",[32,173321,173322],{},[518,173323,173325],{"href":173324},".\u002Fch7","函数进阶",[32,173327,173328],{},[518,173329,173331],{"href":173330},".\u002Fch8","文件操作",[32,173333,173334],{},[518,173335,173337],{"href":173336},".\u002Fch9","异常、模块与包",[32,173339,173340],{},[518,173341,173343],{"href":173342},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[32,173345,173346],{},[518,173347,173349],{"href":173348},".\u002Fch11","面向对象基础",[32,173351,173352],{},[518,173353,173355],{"href":173354},".\u002Fch12","综合案例与复习路线",[14,173357,173358],{"id":173358},"学习路线",[19,173360,173361],{},"第一阶段：能运行程序。",[19,173363,173364],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173366,173367],{},"第二阶段：能组织数据。",[19,173369,173370],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173372,173373],{},"第三阶段：能封装逻辑。",[19,173375,173376],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173378,173379],{},"第四阶段：能做小项目。",[19,173381,173382],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173384,173385],{"id":173385},"参考资料",[29,173387,173388,173395,173402,173409],{},[32,173389,173390,173391],{},"黑马程序员 Python 入门教程推荐：",[518,173392,173393],{"href":173393,"rel":173394},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[522],[32,173396,173397,173398],{},"Python 官方中文教程：",[518,173399,173400],{"href":173400,"rel":173401},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[522],[32,173403,173404,173405],{},"Python 标准库文档：",[518,173406,173407],{"href":173407,"rel":173408},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[522],[32,173410,173411,173412],{},"pyecharts 文档：",[518,173413,173414],{"href":173414,"rel":173415},"https:\u002F\u002Fpyecharts.org\u002F",[522],{"title":54,"searchDepth":565,"depth":565,"links":173417},[173418,173419,173420],{"id":117458,"depth":565,"text":117458},{"id":173358,"depth":565,"text":173358},{"id":173385,"depth":565,"text":173385},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23944},"\u002Fwiki\u002F2024-10-10-python",{"title":173257,"description":173421},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331400225]