<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>哞 – 博客</title>
    <link>https://taobo.site/blog/</link>
    <description>Recent content in 博客 on 哞</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Wed, 15 Mar 2023 13:57:40 +0800</lastBuildDate>
    
	  <atom:link href="https://taobo.site/blog/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Blog: paxos 学习笔记</title>
      <link>https://taobo.site/blog/2023/03/15/paxos-study/</link>
      <pubDate>Wed, 15 Mar 2023 13:57:40 +0800</pubDate>
      
      <guid>https://taobo.site/blog/2023/03/15/paxos-study/</guid>
      <description>
        
        
        &lt;p&gt;本质：集群内的多台服务器协同工作，让数据的副本在全部/大多数服务器上保持一致，确保每次读写操作都能得到正确/一致的结果。&lt;/p&gt;


&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;


    &lt;p&gt;&lt;strong&gt;什么是系统的可靠性要求？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;系统的可靠性要求是指系统在一定时间内能够正常运行的概率。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;aws 的对象存储可靠性要求是 9~13 个 9，其中 9~13 个 9 的含义是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;9 个 9：99.9999999%的可靠性，即每十亿次操作中，只有一次操作失败。&lt;/p&gt;


&lt;/div&gt;

&lt;h2 id=&#34;分布式一致性算法&#34;&gt;分布式一致性算法&lt;/h2&gt;
&lt;p&gt;在分布式系统中一份数据冗余的存储多份保证了系统的可靠性, 而多个副本之间的一致, 通常是使用 paxos 这类分布式一致性算法来保证。&lt;/p&gt;
&lt;h2 id=&#34;基础的复制策略&#34;&gt;基础的复制策略&lt;/h2&gt;
&lt;h3 id=&#34;主从异步复制&#34;&gt;主从异步复制&lt;/h3&gt;
&lt;pre class=&#34;mermaid&#34;&gt;graph TB
CL[Client] ---&amp;gt; |发起写请求|A[Master]
A ---&amp;gt; |master写入后立刻应答|CL
A --&amp;gt; |异步复制数据|B[Slave1]
A --&amp;gt; |异步复制数据|C[Slave2]
A --&amp;gt; |异步复制数据|D[Slave3]&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;优点：主从异步复制的性能很高，因为主节点不需要等待从节点的确认。&lt;/li&gt;
&lt;li&gt;缺点：主从异步复制的一致性无法保证。因为主节点在写入成功后就会返回确认，而从节点的复制是异步的，在复制的过程中任意一个机器发生故障，都会导致系统的数据出现不一致。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;主从同步复制&#34;&gt;主从同步复制&lt;/h3&gt;
&lt;pre class=&#34;mermaid&#34;&gt;graph TB
CL[Client] ---&amp;gt; |发起写请求|A[Master]
A ---&amp;gt; |等所有slave确认后应答|CL
A &amp;lt;--&amp;gt; |同步复制数据|B[Slave1]
A &amp;lt;--&amp;gt; |同步复制数据|C[Slave2]
A &amp;lt;--&amp;gt; |同步复制数据|D[Slave3]&lt;/pre&gt;
&lt;p&gt;虽然这种复制策略能够保证数据的一致性，但是性能很差，并且因为主节点需要等待所有从节点的确认，那么任何一个从机宕机都会导致整个系统不可用。&lt;/p&gt;
&lt;h3 id=&#34;主从半同步复制&#34;&gt;主从半同步复制&lt;/h3&gt;
&lt;pre class=&#34;mermaid&#34;&gt;graph TB
CL[Client] ---&amp;gt; |发起写请求|A[Master]
A ---&amp;gt; |等大部分slave确认后应答|CL
A &amp;lt;--&amp;gt; |同步复制数据|B[Slave1]
A &amp;lt;--&amp;gt; |同步复制数据|C[Slave2]
A &amp;lt;--&amp;gt; |异步复制数据|D[Slave3]&lt;/pre&gt;
&lt;p&gt;主从半同步复制是主从同步复制和主从异步复制的折中方案。它要求 master 在应答客户端之前必须把数据复制到足够多的机器上, 但不需要是全部。&lt;br&gt;
但是存在一个显著的问题是，假如 a 数据复制到 slave1，但没有复制到 slave2 和 slave3；数据 b 复制到 slave2 和 slave3，但没有复制到 slave1，那么这个时候如果 master 宕机，就会导致没有一个 slave 是完整的数据，从而导致数据不一致。&lt;/p&gt;
&lt;h3 id=&#34;多数派读写&#34;&gt;多数派读写&lt;/h3&gt;
&lt;pre class=&#34;mermaid&#34;&gt;graph TB
CL[Client] ---&amp;gt; |发起写请求|A[Master]
A ---&amp;gt; |超半数slave确认后应答|CL
A &amp;lt;--&amp;gt; |同步复制数据|B[Slave1]
A &amp;lt;--&amp;gt; |同步复制数据|C[Slave2]
A &amp;lt;--&amp;gt; |同步复制数据|D[Slave3]&lt;/pre&gt;
&lt;p&gt;显然这个策略刚刚好解决了上面主从半同步复制策略的问题，但是这个策略的性能也不好，因为 master 需要等待超过半数的 slave 确认后才能应答客户端。除此之外，在一些情况下，这个策略也无法保证数据的一致性。&lt;/p&gt;
&lt;p&gt;如对于一个数据 a 在第一次更新时，在 slave1 和 slave2 上写入了&lt;code&gt;a=x&lt;/code&gt;；在第二次更新时，在 slave2 和 slave3 上写入了&lt;code&gt;a=y&lt;/code&gt;。客户端来访问的时候，会发现 slave1 和 slave2 上的数据是不一致的。&lt;/p&gt;
&lt;h3 id=&#34;多数派读写-后写入优胜&#34;&gt;多数派读写-后写入优胜&lt;/h3&gt;
&lt;p&gt;这个策略是对上述策略的一个实现的优化，要求我们在复制数据的时候不仅要写入数据本身，还要写入数据的版本号(保证是递增的即可)。这样在读取数据的时候，我们可以通过版本号来获取最新的数据，从而保证数据的一致性。&lt;/p&gt;
&lt;p&gt;存在的问题：仍旧是上面的例子，假设第二次更新的时候只更新了 slave3，然后客户端直接终止了。那么当客户端再次访问的时候，根据多数派读写的原则，则会发生如下情况：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;slave1 + slave2 --&amp;gt; a=x
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;slave2 + slave3 --&amp;gt; a=y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;显然这就导致了数据的不一致。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;tips:&lt;/strong&gt; 大佬的思考逻辑太牛逼了，我自己想的话最多想到主从半同步复制这种折中方案就不再思考了。由此可见，没有一个完美的方案，只有相对完美的方案[doge]。&lt;/p&gt;
&lt;h2 id=&#34;paxos-共识算法&#34;&gt;Paxos 共识算法&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Paxos_(computer_science)&#34;&gt;wikipedia&lt;/a&gt; 是这样介绍 paxos 的：&lt;/p&gt;


&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;


    Paxos is a family of protocols for solving consensus in a network of unreliable or fallible processors. Consensus is the process of agreeing on one result among a group of participants.

&lt;/div&gt;

&lt;p&gt;它可以被认为是多数派读写的进一步升级, paxos 中通过 2 次原本并不严谨的多数派读写, 实现了严谨的强一致共识算法。&lt;/p&gt;
&lt;p&gt;具体推导流程，参看大佬&lt;a href=&#34;https://github.com/drmingdrmer&#34;&gt;drmingdrmer&lt;/a&gt;文章&lt;a href=&#34;https://blog.openacid.com/algo/paxos/&#34;&gt;可靠分布式系统-paxos 的直观解释&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;最终仿照作者&lt;a href=&#34;https://github.com/drmingdrmer&#34;&gt;drmingdrmer&lt;/a&gt;原版 go 实现的 &lt;code&gt;paxoskv&lt;/code&gt;，实现了一个 rust 版本的&lt;a href=&#34;https://github.com/realtaobo/consistency/tree/main/paxoskv&#34;&gt;paxoskv&lt;/a&gt;，之后我感觉对 &lt;code&gt;Paxos&lt;/code&gt; 有了一个较为粗浅的认知。&lt;/p&gt;
&lt;p&gt;但此时我又开始回想，为什么如今工业界的分布式系统都不再使用 &lt;code&gt;Paxos&lt;/code&gt; 而是 &lt;code&gt;Raft&lt;/code&gt; 呢？网上直接搜索看到的答案都是实现过于复杂且难于理解，我觉得要了解真正的原因，只能去看 &lt;code&gt;Raft&lt;/code&gt; 是如何批判 &lt;code&gt;Paxos&lt;/code&gt; 的？ &lt;code&gt;Raft&lt;/code&gt; 又提出了一种怎样的一致性共识策略？raft 在工程上的实现是否真的更简单且易于理解？&lt;/p&gt;
&lt;h2 id=&#34;raft-论文阅读摘要&#34;&gt;Raft 论文阅读摘要&lt;/h2&gt;


&lt;div class=&#34;alert alert-info&#34; role=&#34;alert&#34;&gt;


    🌻 感谢开源项目 &lt;a href=&#34;https://github.com/maemual/raft-zh_cn&#34;&gt;maemual/raft-zh_cn&lt;/a&gt;，让我可以以较低的成本阅读 raft 论文。

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;总结：leader 选举 + 日志复制 + 应用状态机，这三个部分构成了 raft 的核心。&lt;/strong&gt;&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Blog: 分布式系统设计模式</title>
      <link>https://taobo.site/blog/2022/08/08/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</link>
      <pubDate>Mon, 08 Aug 2022 20:27:40 +0800</pubDate>
      
      <guid>https://taobo.site/blog/2022/08/08/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</guid>
      <description>
        
        
        &lt;p&gt;本文是对 &lt;a href=&#34;https://medium.com/@nishantparmar&#34;&gt;Nishant&lt;/a&gt; 文章 &lt;a href=&#34;https://medium.com/@nishantparmar/distributed-system-design-patterns-2d20908fecfc&#34;&gt;Distributed System Design Patterns&lt;/a&gt; 的翻译，主要介绍分布式系统相关设计问题中涉及到的关键模式。&lt;/p&gt;
&lt;h2 id=&#34;keys&#34;&gt;Keys&lt;/h2&gt;
&lt;h3 id=&#34;1布隆过滤器&#34;&gt;1.布隆过滤器&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.geeksforgeeks.org/bloom-filters-introduction-and-python-implementation/&#34;&gt;布隆过滤器&lt;/a&gt;是一个空间友好的概率数据结构，通常用来判断数据是否是集合中的一个元素，其通常用于我们需要知道某个元素是否属于某类对象的场景。具体应用见下图：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://imgse.com/i/xxywRK&#34;&gt;&lt;img src=&#34;https://s1.ax1x.com/2022/11/08/xxywRK.png&#34; alt=&#34;xxywRK.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在&lt;a href=&#34;https://www.cnblogs.com/xybaby/p/9096748.html#_labelTop&#34;&gt;BigTable&lt;/a&gt;，一个分布式数据存储系统中，任何读操作都需要读取构成 Tablet 的所有 SSTables 结构。当 SSTables 结构不在内存的时候，需要进行大量的磁盘 io 才能完成一个读请求，为了减少磁盘读写次数，BigTable 使用了布隆过滤器。&lt;/p&gt;
&lt;h3 id=&#34;2一致性哈希&#34;&gt;2.一致性哈希&lt;/h3&gt;
&lt;p&gt;一致性哈希可以帮助开发者更加容易有效的扩展和复制数据，并且保证良好的可用性和容错能力。&lt;br&gt;
每个被&lt;code&gt;key&lt;/code&gt;标识的数据项最终都会分配到一个节点，具体计算逻辑是，通过对数据项的&lt;code&gt;key&lt;/code&gt;值进行 hash 可以计算出该&lt;code&gt;key&lt;/code&gt;值在环上的位置，然后沿着哈希环顺时针行走，直到发现第一个比&lt;code&gt;key&lt;/code&gt;值的位置大的节点，发现的这个节点就是将要分配给&lt;code&gt;key&lt;/code&gt;标识的数据项的节点。示例：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://imgse.com/i/xxyDMD&#34;&gt;&lt;img src=&#34;https://s1.ax1x.com/2022/11/08/xxyDMD.png&#34; alt=&#34;xxyDMD.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一致性 hash 的主要优势是增量稳定性，集群中的节点删除和新增仅仅影响其相邻的节点，其他的节点不受影响。&lt;/p&gt;
&lt;h3 id=&#34;3quorum&#34;&gt;3.Quorum&lt;/h3&gt;
&lt;p&gt;在分布式环境中，&lt;code&gt;quorum&lt;/code&gt;指的是所有的分布式操作执行成功所需要的最小服务数目。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://imgse.com/i/xxy6Zd&#34;&gt;&lt;img src=&#34;https://s1.ax1x.com/2022/11/08/xxy6Zd.png&#34; alt=&#34;xxy6Zd.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zh.m.wikipedia.org/zh/Cassandra&#34;&gt;Cassanddra&lt;/a&gt;(一个开源分布式 NoSQL 数据库系统)，为了确保数据一致性，可以配置对于每一个写请求只有当数据写入副本节点中至少一个&lt;code&gt;quorum&lt;/code&gt;才算成功。&lt;/p&gt;
&lt;p&gt;对于 Leader 选举，Chubby 使用&lt;a href=&#34;https://www.cnblogs.com/linbingdong/p/6253479.html&#34;&gt;Paxos&lt;/a&gt;，它使用&lt;code&gt;quorum&lt;/code&gt;来保证强一致性。Raft 和 Paxos 共识算法学习参考资料：&lt;a href=&#34;https://ongardie.net/static/raft/userstudy/&#34;&gt;Raft user study&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.allthingsdistributed.com/2007/10/amazons_dynamo.html&#34;&gt;Dynamo&lt;/a&gt;复制写入数据到整个系统其他节点的一个 quorum 中，而不是像 Paxos 一样严格的大多数 quorum 中。系统的所有的读写操作都会被 preference list 上的第一个正常的节点执行，该节点不一定总是在遍历一致性哈希环是遇到的第一个节点。&lt;/p&gt;
&lt;h3 id=&#34;4leader-and-follower&#34;&gt;4.Leader and Follower&lt;/h3&gt;
&lt;p&gt;为了确保数据管理系统的容错性，需要在集群内的多个服务器上复制数据。所以需要在该集群内选出一个服务作为&lt;code&gt;leader&lt;/code&gt;, &lt;code&gt;leader&lt;/code&gt;负责代表整个集群做出决策，并将决策传播到剩余的其他服务器，其他机器可以看作是&lt;code&gt;follower&lt;/code&gt;。&lt;br&gt;
&amp;hellip;&lt;/p&gt;
&lt;h3 id=&#34;5心跳&#34;&gt;5.心跳&lt;/h3&gt;
&lt;p&gt;心跳机制用于检测现有的 leader 服务状态，如果不正常的话需要开始新的 leader 选举。&lt;/p&gt;
&lt;h3 id=&#34;6fencing&#34;&gt;6.Fencing&lt;/h3&gt;
&lt;p&gt;在上面 &lt;code&gt;leader-follower&lt;/code&gt; 模型中，当一个 leader 失败之后, 我们无法确定该 leader 是否已经停止工作。比如说，受网络环境或者网络分区的影响，可能会触发新的 leader 选举，然而此时先前的 leader 仍旧在作为一个活跃的 leader 正常工作。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Fencing&lt;/code&gt;是解决上面这种问题的一个解决方案。&lt;code&gt;Fencing&lt;/code&gt;会在先前的 leader 周围设置一个屏障，这样该 leader 就无法正常访问集群资源，从而停止处理所有的读写请求。&lt;/p&gt;
&lt;p&gt;具体实现时有以下两种实现思路：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;资源屏障：系统阻止以前活跃的 leader 访问执行基本任务所需的资源。&lt;/li&gt;
&lt;li&gt;节点屏障：系统阻止之前活跃的 leader 访问所有资源, 执行此操作的常用方法是关闭或重置节点。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;7预写日志&#34;&gt;7.预写日志&lt;/h3&gt;
&lt;h3 id=&#34;8segmented-log&#34;&gt;8.Segmented Log&lt;/h3&gt;
&lt;h3 id=&#34;9high-water-mark&#34;&gt;9.High-Water mark&lt;/h3&gt;
&lt;h3 id=&#34;10lease&#34;&gt;10.Lease&lt;/h3&gt;
&lt;h3 id=&#34;11gossip-protocol&#34;&gt;11.Gossip Protocol&lt;/h3&gt;
&lt;h3 id=&#34;12phi-accrual-failure-detection&#34;&gt;12.Phi Accrual Failure Detection&lt;/h3&gt;
&lt;h3 id=&#34;13split-brain&#34;&gt;13.Split-brain&lt;/h3&gt;
&lt;h3 id=&#34;14-checksum&#34;&gt;14. Checksum&lt;/h3&gt;
&lt;h3 id=&#34;15cap-theorem&#34;&gt;15.CAP Theorem&lt;/h3&gt;
&lt;p&gt;CAP 定理指出，分布式系统不可能同时具有以下三个属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一致性，Consistency (C)&lt;/li&gt;
&lt;li&gt;可用性，Availability (A)&lt;/li&gt;
&lt;li&gt;分区容错性，Partition Tolerance(P)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;根据 CAP 定理，任何分布式系统都需要满足三个属性中的两个。这三个选项是 CA、CP 和 AP。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/xybaby/p/13944662.html&#34;&gt;Dynamo&lt;/a&gt;：该分布式系统属于 CAP 理论模型中的 AP 系统，旨在以牺牲强一致性为代价实现高可用性。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/xybaby/p/9096748.html&#34;&gt;BigTable&lt;/a&gt;：该分布式系统属于 CAP 理论模型中的 CP 系统，它具有严格一致的读取和写入。&lt;/p&gt;
&lt;h3 id=&#34;16pacelec-theorem&#34;&gt;16.PACELEC Theorem&lt;/h3&gt;
&lt;p&gt;PACELEC 定理指出，在复制数据的分布式系统中，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果分布式系统存在网络分区（P）的情况下，必须在可用性（A）和一致性（C）之间进行选择（和 CAP 定理相同）&lt;/li&gt;
&lt;li&gt;否则（E），即使系统在没有分区的情况下正常运行，也必须在延迟（L）和一致性（C）之间进行选择&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://imgse.com/i/xxygII&#34;&gt;&lt;img src=&#34;https://s1.ax1x.com/2022/11/08/xxygII.png&#34; alt=&#34;xxygII.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;定理（PAC）的第一部分与 CAP 定理相同，ELC 是扩展。整个论点假设我们通过复制来保持高可用性。因此，当系统出现故障时，选择 CAP 定理。但如果没有，我们仍然需要在复制系统的一致性和延迟之间做出选择。&lt;/p&gt;
&lt;h3 id=&#34;17hinted-handoff&#34;&gt;17.Hinted Handoff&lt;/h3&gt;
&lt;h3 id=&#34;18read-repair&#34;&gt;18.Read Repair&lt;/h3&gt;
&lt;h3 id=&#34;19merkle-trees&#34;&gt;19.Merkle Trees&lt;/h3&gt;

      </description>
    </item>
    
    <item>
      <title>Blog: Git后台架构</title>
      <link>https://taobo.site/blog/2022/07/12/git%E5%90%8E%E5%8F%B0%E6%9E%B6%E6%9E%84/</link>
      <pubDate>Tue, 12 Jul 2022 15:57:40 +0800</pubDate>
      
      <guid>https://taobo.site/blog/2022/07/12/git%E5%90%8E%E5%8F%B0%E6%9E%B6%E6%9E%84/</guid>
      <description>
        
        
        &lt;p&gt;在传统的 git 后端服务中，首要面对的挑战就是存储容量上限问题和用户并发访问高负载问题。本文简要概述 git 后端服务的架构，以及一些有用的文章。&lt;/p&gt;
&lt;h2 id=&#34;后台存储方案&#34;&gt;后台存储方案&lt;/h2&gt;
&lt;h3 id=&#34;1-单机冷备模式&#34;&gt;1. 单机+冷备模式&lt;/h3&gt;
&lt;p&gt;gitlab 社区版提供了单机版，可以通过配置 git hooks 触发同步任务，将数据保存备份到备机。&lt;br&gt;
存在的问题是同步任务经常出现卡住，同步失败，对象缺失等问题，备机无法保证实时最新，也无法保证数据完整性，备机不能开启读服务。&lt;/p&gt;
&lt;h3 id=&#34;2-单机分布式存储&#34;&gt;2. 单机+分布式存储&lt;/h3&gt;
&lt;p&gt;该场景希望使用分布式存储解决存储容量上限问题的问题，这样存储可以无限扩展，具体如下所示：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://imgse.com/i/xxrylD&#34;&gt;&lt;img src=&#34;https://s1.ax1x.com/2022/11/08/xxrylD.png&#34; alt=&#34;xxrylD.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;通过上图可以看见只使用了一个应用集群操作分布式文件系统，试想一下若新建多个应用集群，然后使用类似 dns 轮询分发请求的方式是否可以降低用户高并发访问时的负载？&lt;br&gt;
答案是否定的，Gitee 曾在该架构下发生过&lt;a href=&#34;https://zhuanlan.zhihu.com/p/362855087&#34;&gt;事故&lt;/a&gt;，主要原因是分布式存储系统并不适合用在 Git 这种海量小文件的场景下，因为 Git 每一次的操作都需要遍历大量的引用和对象，导致每一次操作整体耗时非常多。&lt;/p&gt;
&lt;h3 id=&#34;3-数据分片--主备模式&#34;&gt;3. 数据分片 + 主备模式&lt;/h3&gt;
&lt;h4 id=&#34;31-只分片&#34;&gt;3.1 只分片&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://imgse.com/i/xxsSpT&#34;&gt;&lt;img src=&#34;https://s1.ax1x.com/2022/11/08/xxsSpT.png&#34; alt=&#34;xxsSpT.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上图为数据分片模式下的架构模型，其中集群内的 slave 由于仅仅是在主机写入完成后才会发起 hook 消息到从机(slave)，然后 slave 复制 master 数据到 slave。显然 slave 的同步可能会失败或缺失、不完整，所以该模式下所有的读写请求都是 master 来处理。&lt;br&gt;
在这种模式下一个集群只有一台主机提供服务，由于网络带宽和机器资源的限制，当集群的访问超出 master 最大 qps 时, 服务器就会出现不稳定的状况。当前 coding-git 就是运行在这种模式之下的，所以运行效率差强人意。&lt;/p&gt;
&lt;h4 id=&#34;32-分片读写分离&#34;&gt;3.2 分片+读写分离&lt;/h4&gt;
&lt;p&gt;该点其实就是在 2.2.1 的基础上考虑，如何判定 master 和 slave 的仓库对等？也就是读到备机的数据是最新的，且完整的？最简单的一个步骤如下所示：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;由 master 节点，进行写操作，结束后计算并更新当前的 depot 的 hash 值;&lt;/li&gt;
&lt;li&gt;通过 git hook 向 slave 发起同步任务;&lt;/li&gt;
&lt;li&gt;slave 同步完 master 最新数据之后，计算并更新当前 depot 的 hash 值;&lt;/li&gt;
&lt;li&gt;当新的读请求过来时，先查看是否有跟 master 的 depot hash 值相同的 slave，如果有，再根据负载均衡算法选择一台 slave，提供读服务。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;33-存在的问题&#34;&gt;3.3 存在的问题&lt;/h4&gt;
&lt;p&gt;当某个分片的 master 节点发生异常（服务 crash 或服务器宕机等），会导致整个分片无法正常提供服务，下面是几点可能会产生的问题，摘自&lt;a href=&#34;https://developer.aliyun.com/article/786954&#34;&gt;阿里巴巴代码平台架构的演进之路&lt;/a&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;可用性： 由于读写操作是分离的，所以在写服务器故障期间，服务的写功能是无法使用的； 对于单片而言，写操作是单点的，一台服务波动则整个分片都波动。&lt;/li&gt;
&lt;li&gt;性能：主备机器在同步上需要额外的时间开销。对于松散文件、文件压缩的 Git 仓库，这个耗时比单文件拷贝耗时更久。&lt;/li&gt;
&lt;li&gt;安全： 用户侧的短时间内的瞬时操作，对于节点同步来说可能是并发的，无法保证同步中的事务顺序。&lt;/li&gt;
&lt;li&gt;成本：同分片写，主备机器要求规格完全一致，但由于接收的请求不同，存在严重的资源消耗不均；当同步的小文件多时，对延时敏感。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;4-多读多写&#34;&gt;4. 多读多写&lt;/h3&gt;
&lt;p&gt;该节是阿里代码平台的一个实现方案，具体特征有：多写（写时复制）、无状态服务、快速校验仓库一致性。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://imgse.com/i/xxrL0s&#34;&gt;&lt;img src=&#34;https://s1.ax1x.com/2022/11/08/xxrL0s.png&#34; alt=&#34;xxrL0s.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考文章&#34;&gt;参考文章&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/55964292&#34;&gt;一篇文章讲透分布式存储&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/column/c_1350116235108196352&#34;&gt;硬核聊 Git 系列文章&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.aliyun.com/article/786954&#34;&gt;阿里巴巴代码平台架构的演进之路&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://kaito-kidd.com/2021/10/15/what-is-the-multi-site-high-availability-design/&#34;&gt;搞懂异地多活，看这篇就够了&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bbs.huaweicloud.com/blogs/333158&#34;&gt;16 张图解｜一致性哈希算法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
      </description>
    </item>
    
    <item>
      <title>Blog: container/heap包使用指南</title>
      <link>https://taobo.site/blog/2022/06/28/golang-heap/</link>
      <pubDate>Tue, 28 Jun 2022 18:57:40 +0800</pubDate>
      
      <guid>https://taobo.site/blog/2022/06/28/golang-heap/</guid>
      <description>
        
        
        &lt;p&gt;本文基于官方文档介绍 golang 标准库中提供的堆/优先队列的使用方法.&lt;/p&gt;
&lt;h2 id=&#34;1-概述&#34;&gt;1. 概述&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;container/heap&amp;rdquo; 包提供了实现堆操作的接口，用户只需要定义满足 &amp;ldquo;heap.Interface&amp;rdquo; 接口的类型，就可以通过包提供的函数，像操作大根堆或小根堆一样，对实例数组变量进行 &lt;code&gt;Push&lt;/code&gt; 和 &lt;code&gt;Pop&lt;/code&gt; 操作。&lt;br&gt;
堆通常是一个可以被看做一棵树的数组对象，堆总是满足下列性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;堆中某个结点的值总是不大于或不小于其父结点的值；&lt;/li&gt;
&lt;li&gt;堆总是一棵完全二叉树。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;堆的定义如下：n 个元素的序列 &lt;code&gt;{k1,k2,ki,…,kn}&lt;/code&gt; 当且仅当满足下关系时，称之为堆：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://imgse.com/i/xxrlF0&#34;&gt;&lt;img src=&#34;https://s1.ax1x.com/2022/11/08/xxrlF0.png&#34; alt=&#34;xxrlF0.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下面将基于具体实例介绍&amp;quot;container/heap&amp;quot; 包的使用。&lt;/p&gt;
&lt;h2 id=&#34;2-整数堆&#34;&gt;2. 整数堆&lt;/h2&gt;
&lt;p&gt;下面的代码实现了一个整数类型的最小堆：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;container/heap&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;IntHeap&lt;/span&gt; []&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 下面几个函数必须实现，heap包会进行回调
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;IntHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;() &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt; { &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;len&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;) }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// Less函数的实现决定最终实现是最大堆还是最小堆
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;IntHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Less&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;bool&lt;/span&gt; { &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;] &amp;lt; &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;] }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;IntHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Swap&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;)      { &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;], &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;] = &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;], &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;] }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; *&lt;span style=&#34;color:#268bd2&#34;&gt;IntHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt;)        { *&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; = &lt;span style=&#34;color:#cb4b16&#34;&gt;append&lt;/span&gt;((*&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;), &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;.(&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;)) }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; *&lt;span style=&#34;color:#268bd2&#34;&gt;IntHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;() &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt; := *&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; := &lt;span style=&#34;color:#cb4b16&#34;&gt;len&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;-&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    *&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt; : &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;-&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; := &amp;amp;&lt;span style=&#34;color:#268bd2&#34;&gt;IntHeap&lt;/span&gt;{&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;5&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Init&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;3&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Println&lt;/span&gt;(*&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;() &amp;gt; &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;3-标准库堆的实现&#34;&gt;3. 标准库堆的实现&lt;/h2&gt;
&lt;p&gt;通过整数堆的使用方式，发现是通过定义新的整数数组类型，并为其实现 pointer receivers 的方法 Push、Pop，以及 value receivers 的方法 Len、Less、Swap 方法之后，借助 &amp;ldquo;container/heap&amp;rdquo; 包提供的方法对该类型定义的几个方法进行回调，从而实现堆的功能。下面是具体的实现代码，逻辑见注释：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;sort&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// Interface 接口指明了想要使用这个包中的方法去实现堆，应该提供的接口方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 在 heap.Init 方法被调用、数据为空或者原始数据有序时，满足下列条件的情况下，小根堆会被建立
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// !h.Less(j, i) for 0 &amp;lt;= i &amp;lt; h.Len() and 2*i+1 &amp;lt;= j &amp;lt;= 2*i+2 and j &amp;lt; h.Len()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 注意：包中的方法会在添加和删除元素的时候调用Interface 接口实现的 Push 和 Pop方法，详见下面代码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;interface&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;sort&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt; &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 包括 Len()、Less(i, j int)、Swap(i, j int)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt;)    &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// add x as element Len()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;() &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt;      &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// remove and return element Len() - 1.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 将传入的变量初始化为堆，时间复杂度为 O(n), 其中 n = h.Len().
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Init&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// heapify
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;/&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; - &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;; &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; &amp;gt;= &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;-- {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;down&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 向堆中加入新的元素，时间复杂度为 O(log n), 其中 n = h.Len().
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;up&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;()-&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// Pop 移除并返回堆中的最小或最大元素，具体根据 h.Less 函数确定，时间复杂度为 O(log n).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// Pop 等价于 Remove(h, 0).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;() - &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Swap&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;down&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 由此看出实现 h.Pop 方法时只需要将数组最后元素取出并返回即可
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// Remove 移除并返回堆中索引为 i 的元素，时间复杂度为 O(log n).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Remove&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;() - &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; != &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Swap&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; !&lt;span style=&#34;color:#268bd2&#34;&gt;down&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#268bd2&#34;&gt;up&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 当堆数组中索引 i 处的元素的值或优先级发生变更的时候调用 Fix 调整元素 i 在堆中的位置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Fix&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; !&lt;span style=&#34;color:#268bd2&#34;&gt;down&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;()) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;up&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 向上进行堆调整，将新增元素上升到满足条件的位置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;up&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; := (&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; - &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;) / &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// parent
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; == &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; || !&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Less&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#859900&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Swap&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// 向下进行堆调整，确保i0节点是左右子树中的最小节点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;down&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Interface&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i0&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;bool&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;i0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;j1&lt;/span&gt; := &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt;*&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; + &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;j1&lt;/span&gt; &amp;gt;= &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; || &lt;span style=&#34;color:#268bd2&#34;&gt;j1&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt; { &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// j1 &amp;lt; 0 after int overflow
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#859900&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;j1&lt;/span&gt; &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// left child
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;j2&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;j1&lt;/span&gt; + &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;; &lt;span style=&#34;color:#268bd2&#34;&gt;j2&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; &amp;amp;&amp;amp; &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Less&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;j2&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;j2&lt;/span&gt; &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// = 2*i + 2  // right child
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; !&lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Less&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#859900&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Swap&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#268bd2&#34;&gt;i0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;4-优先队列&#34;&gt;4. 优先队列&lt;/h2&gt;
&lt;p&gt;举例实现针对结构实现的最小堆，也即一般意义上的优先队列：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;container/heap&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;Node&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;Val&lt;/span&gt;  &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;float32&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;NodeHeap&lt;/span&gt; []&lt;span style=&#34;color:#268bd2&#34;&gt;Node&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;NodeHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Less&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;bool&lt;/span&gt; { &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;Val&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;Val&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;NodeHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Swap&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;)      { &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;], &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;] = &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;], &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;] }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;NodeHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;() &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;           { &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;len&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;) }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; *&lt;span style=&#34;color:#268bd2&#34;&gt;NodeHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt;)        { *&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; = &lt;span style=&#34;color:#cb4b16&#34;&gt;append&lt;/span&gt;(*&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;.(&lt;span style=&#34;color:#268bd2&#34;&gt;Node&lt;/span&gt;)) }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; *&lt;span style=&#34;color:#268bd2&#34;&gt;NodeHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;() &lt;span style=&#34;color:#268bd2&#34;&gt;any&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt; := *&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; := &lt;span style=&#34;color:#cb4b16&#34;&gt;len&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;-&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    *&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt; : &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;-&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; := &amp;amp;&lt;span style=&#34;color:#268bd2&#34;&gt;NodeHeap&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Init&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;Node&lt;/span&gt;{&lt;span style=&#34;color:#268bd2&#34;&gt;Val&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1.0&lt;/span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;Node&lt;/span&gt;{&lt;span style=&#34;color:#268bd2&#34;&gt;Val&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2.0&lt;/span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;Node&lt;/span&gt;{&lt;span style=&#34;color:#268bd2&#34;&gt;Val&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;3.0&lt;/span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;() &amp;gt; &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;).(&lt;span style=&#34;color:#268bd2&#34;&gt;Node&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;5-优先队列的应用&#34;&gt;5. 优先队列的应用&lt;/h2&gt;
&lt;p&gt;力扣第 23 题「 &lt;a href=&#34;https://leetcode.cn/problems/merge-k-sorted-lists/&#34;&gt;合并 K 个升序链表&lt;/a&gt;」，要求合并 k 个有序链表为 1 个有序列表，如何快速得到 k 个节点中的最小节点，接到结果链表上？&lt;br&gt;
此时就可以使用上述实现的优先队列了，不过需要稍微改动一下结构体，实现如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt; * Definition for singly-linked list.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt; * type ListNode struct {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt; *     Val int
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt; *     Next *ListNode
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt; * }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;ItemHeap&lt;/span&gt; []*&lt;span style=&#34;color:#268bd2&#34;&gt;ListNode&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;ItemHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Less&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;bool&lt;/span&gt; { &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;Val&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;Val&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;ItemHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Swap&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt;) {&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;], &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;] = &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;j&lt;/span&gt;], &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;i&lt;/span&gt;]}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;ItemHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;() &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt; {&lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;len&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;)}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; *&lt;span style=&#34;color:#268bd2&#34;&gt;ItemHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;interface&lt;/span&gt;{}) { *&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; = &lt;span style=&#34;color:#cb4b16&#34;&gt;append&lt;/span&gt;(*&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;.(*&lt;span style=&#34;color:#268bd2&#34;&gt;ListNode&lt;/span&gt;)) }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; *&lt;span style=&#34;color:#268bd2&#34;&gt;ItemHeap&lt;/span&gt;) &lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;() &lt;span style=&#34;color:#859900&#34;&gt;interface&lt;/span&gt;{} {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt; := *&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt; := &lt;span style=&#34;color:#cb4b16&#34;&gt;len&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;[&lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;-&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    *&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;old&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;:&lt;span style=&#34;color:#268bd2&#34;&gt;n&lt;/span&gt;-&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;mergeKLists&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;lists&lt;/span&gt; []*&lt;span style=&#34;color:#268bd2&#34;&gt;ListNode&lt;/span&gt;) *&lt;span style=&#34;color:#268bd2&#34;&gt;ListNode&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt; := &amp;amp;&lt;span style=&#34;color:#268bd2&#34;&gt;ItemHeap&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Init&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;v&lt;/span&gt; := &lt;span style=&#34;color:#859900&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;lists&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;v&lt;/span&gt; != &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;v&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;// dummy
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;dummy&lt;/span&gt; := &amp;amp;&lt;span style=&#34;color:#268bd2&#34;&gt;ListNode&lt;/span&gt;{}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;p&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;dummy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Len&lt;/span&gt;() &amp;gt; &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; := &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Pop&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;).(*&lt;span style=&#34;color:#268bd2&#34;&gt;ListNode&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;p&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;p&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;p&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt; != &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#268bd2&#34;&gt;heap&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Push&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pq&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;dummy&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Next&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;6-参考资料&#34;&gt;6. 参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pkg.go.dev/container/heap@go1.18.3&#34;&gt;https://pkg.go.dev/container/heap@go1.18.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://go.dev/tour/methods/4&#34;&gt;You can declare methods with pointer receivers.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cs.opensource.google/go/go/+/refs/tags/go1.18.3:src/container/heap/heap.go&#34;&gt;src/container/heap/heap.go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://cngolib.com/container-heap.html&#34;&gt;Go 标准库中文文档&amp;ndash;黄健宏&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
      </description>
    </item>
    
    <item>
      <title>Blog: 基于腾讯云cvm的云原生环境搭建</title>
      <link>https://taobo.site/blog/2021/12/14/%E5%9F%BA%E4%BA%8E%E8%85%BE%E8%AE%AF%E4%BA%91cvm%E7%9A%84%E4%BA%91%E5%8E%9F%E7%94%9F%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Tue, 14 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://taobo.site/blog/2021/12/14/%E5%9F%BA%E4%BA%8E%E8%85%BE%E8%AE%AF%E4%BA%91cvm%E7%9A%84%E4%BA%91%E5%8E%9F%E7%94%9F%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/</guid>
      <description>
        
        
        
        <![CDATA[<img src="https://taobo.site/blog/2021/12/14/%E5%9F%BA%E4%BA%8E%E8%85%BE%E8%AE%AF%E4%BA%91cvm%E7%9A%84%E4%BA%91%E5%8E%9F%E7%94%9F%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/featured-native_hu7df1b8edada8435878b0d68b46946683_41103_640x0_resize_catmullrom_3.png" width="640" height="272"/>]]>
        
        &lt;p&gt;本文所有操作基于腾讯云 cvm 实例。&lt;/p&gt;
&lt;p&gt;具体配置如下，操作系统为 TencentOS Server 3.1：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[root@VM-0-16-centos cms]$ cat /etc/motd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Welcome to TencentOS &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;3&lt;/span&gt; 64bit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Version 3.1 &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;20210604&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tlinux3.1-64bit-5.4.119-19.0006-20210623
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;1安装-vim&#34;&gt;1.安装 vim&lt;/h2&gt;
&lt;p&gt;主要是更新 vim 的版本，使其&amp;gt;8.0,这样某些插件才可以正常安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum remove vim vi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -fr /usr/local/vim /usr/bin/vim
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; /tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://github.com/vim/vim/archive/v8.2.0000.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar xzf  v8.2.0000.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; vim-8.2.0000/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./configure --prefix=/usr/local/vim  --with-features=huge --enable-multibyte --enable-gtk3-check  --enable-rubyinterp=yes --with-python3-command=python3 --enable-python3interp=yes --enable-perlinterp=yes --enable-luainterp=yes --enable-cscope
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make &amp;amp;&amp;amp; make install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ln -s /usr/local/vim/bin/vim  /usr/bin/vim
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim --version &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;#验证是否安装成功&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下来快速安装基本插件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://gitcode.net/qq_41345173/tvim.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; tvim
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp .vimrc ~/.vimrc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p ~/.vim/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -r colors/ ~/.vim/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -r autoload/ ~/.vim/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -r plugged/ ~/.vim/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; ~/.vim/plugged
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;unzip plugged.zip
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; ~
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -fr tvim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;相关文章：
&lt;a href=&#34;https://blog.csdn.net/qq_41345173/article/details/120381818&#34;&gt;https://blog.csdn.net/qq_41345173/article/details/120381818&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;2tlinux3-安装-docker&#34;&gt;2.tlinux3 安装 docker&lt;/h2&gt;
&lt;p&gt;Tlinux3 和其他原生操作系统不同，有团队维护 tlinux 源，安装 docker-ce 的方式如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install tencentos-release-docker-ce
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install docker-ce docker-ce-cli containerd.io
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 测试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置 github 相关域名的 ip 地址，以进行加速访问 github 资源：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim /etc/hosts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 尾部添加如下内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 在网站https://www.ipaddress.com/获取最新ip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;140.82.113.3 github.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;185.199.108.133 raw.githubusercontent.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;185.199.109.133 raw.githubusercontent.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;185.199.110.133 raw.githubusercontent.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;185.199.111.133 raw.githubusercontent.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Docker-compose 安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -LO &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;https://github.com/docker/compose/releases/download/1.29.0/docker-compose-&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;$(&lt;/span&gt;uname -s&lt;span style=&#34;color:#859900&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#859900&#34;&gt;$(&lt;/span&gt;uname -m&lt;span style=&#34;color:#859900&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt; -o /usr/local/bin/docker-compose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;3安装-golang&#34;&gt;3.安装 golang&lt;/h2&gt;
&lt;p&gt;安装 golang&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://dl.google.com/go/go1.16.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sha256sum go1.16.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -C /usr/local -xzf go1.16.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 设置环境变量，在~/.bashrc中添加如下配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;PATH&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;$PATH&lt;/span&gt;:/usr/local/go/bin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;GO111MODULE&lt;/span&gt;=on
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;GOPROXY&lt;/span&gt;=https://goproxy.cn,direct
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;GOSUMDB&lt;/span&gt;=off
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;GOPATH&lt;/span&gt;=/root/go
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;PATH&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;$PATH&lt;/span&gt;:&lt;span style=&#34;color:#268bd2&#34;&gt;$GOPATH&lt;/span&gt;/bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装 proto 依赖，便于进行 RPC 开发&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/protocolbuffers/protobuf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# v3.6.0+以上版本支持map解析，syntax=2、3消息序列化后是二进制兼容的，用root执行以下命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; protobuf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./autogen.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./configure
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make install
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ldconfig
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;protoc --version &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 检测是否安装成功&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go get github.com/golang/protobuf &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 安装依赖包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 安装gprc protocol插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 安装grpc-gateway插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;4安装-nginx&#34;&gt;4.安装 nginx&lt;/h2&gt;
&lt;p&gt;通过以下命令安装和启动 nginx:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl start nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# nginx默认监听端口为80，安装后可以通过/etc/nginx/nginx.conf配置文件修改监听的端口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# systemctl reload nginx可以一键重启nginx服务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;5安装-nodejs&#34;&gt;5.安装 nodejs&lt;/h2&gt;
&lt;p&gt;首先在&lt;a href=&#34;https://nodejs.org/zh-cn/download/&#34;&gt;官网下载页面&lt;/a&gt;获取下载链接，然后下载安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p /usr/local/nodejs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; /tmp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fLO https://nodejs.org/dist/v16.16.0/node-v16.16.0-linux-x64.tar.xz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xJvf node-v16.16.0-linux-x64.tar.xz -C /usr/local/nodejs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;export PATH=/usr/local/nodejs/node-v16.16.0-linux-x64.tar.xz/bin:$PATH&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;source&lt;/span&gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;6安装-commitizen-工具&#34;&gt;6.安装 commitizen 工具&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/commitizen/cz-cli&#34;&gt;commitizen 工具&lt;/a&gt;是规范化 git 提交信息的 node 插件，安装流程如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install -g commitizen
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;{ &amp;#34;path&amp;#34;: &amp;#34;cz-conventional-changelog&amp;#34; }&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.czrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Blog: Linux入门基础</title>
      <link>https://taobo.site/blog/2020/11/14/linux%E5%85%A5%E9%97%A8%E5%9F%BA%E7%A1%80/</link>
      <pubDate>Sat, 14 Nov 2020 23:57:40 +0800</pubDate>
      
      <guid>https://taobo.site/blog/2020/11/14/linux%E5%85%A5%E9%97%A8%E5%9F%BA%E7%A1%80/</guid>
      <description>
        
        
        &lt;ul&gt;
&lt;li&gt;能简单使用 cat，grep，cut 等命令进行一些操作；&lt;/li&gt;
&lt;li&gt;文件系统相关的原理，inode 和 block 等概念，数据恢复；&lt;/li&gt;
&lt;li&gt;硬链接与软链接；&lt;/li&gt;
&lt;li&gt;进程管理相关，僵尸进程与孤儿进程，SIGCHLD 。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一常用操作以及概念&#34;&gt;一、常用操作以及概念&lt;/h2&gt;
&lt;h3 id=&#34;快捷键&#34;&gt;快捷键&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tab：命令和文件名补全；&lt;/li&gt;
&lt;li&gt;Ctrl+C：中断正在运行的程序；&lt;/li&gt;
&lt;li&gt;Ctrl+D：结束键盘输入（End Of File，EOF）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;求助&#34;&gt;求助&lt;/h3&gt;
&lt;h4 id=&#34;1---help&#34;&gt;1. &amp;ndash;help&lt;/h4&gt;
&lt;p&gt;指令的基本用法与选项介绍。&lt;/p&gt;
&lt;h4 id=&#34;2-man&#34;&gt;2. man&lt;/h4&gt;
&lt;p&gt;man 是 manual 的缩写，将指令的具体信息显示出来。&lt;/p&gt;
&lt;p&gt;当执行 &lt;code&gt;man date&lt;/code&gt; 时，有 DATE(1) 出现，其中的数字代表指令的类型，常用的数字及其类型如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;代号&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;1&lt;/td&gt;
&lt;td&gt;用户在 shell 环境中可以操作的指令或者可执行文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;5&lt;/td&gt;
&lt;td&gt;配置文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;8&lt;/td&gt;
&lt;td&gt;系统管理员可以使用的管理指令&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;3-info&#34;&gt;3. info&lt;/h4&gt;
&lt;p&gt;info 与 man 类似，但是 info 将文档分成一个个页面，每个页面可以跳转。&lt;/p&gt;
&lt;h4 id=&#34;4-doc&#34;&gt;4. doc&lt;/h4&gt;
&lt;p&gt;/usr/share/doc 存放着软件的一整套说明文件。&lt;/p&gt;
&lt;h3 id=&#34;关机&#34;&gt;关机&lt;/h3&gt;
&lt;h4 id=&#34;1-who&#34;&gt;1. who&lt;/h4&gt;
&lt;p&gt;在关机前需要先使用 who 命令查看有没有其它用户在线。&lt;/p&gt;
&lt;h4 id=&#34;2-sync&#34;&gt;2. sync&lt;/h4&gt;
&lt;p&gt;为了加快对磁盘文件的读写速度，位于内存中的文件数据不会立即同步到磁盘，因此关机之前需要先进行 sync 同步操作。&lt;/p&gt;
&lt;h4 id=&#34;3-shutdown&#34;&gt;3. shutdown&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## shutdown [-krhc] 时间 [信息]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-k ： 不会关机，只是发送警告信息，通知所有在线的用户
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-r ： 将系统的服务停掉后就重新启动
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-h ： 将系统的服务停掉后就立即关机
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-c ： 取消已经在进行的 shutdown
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;path&#34;&gt;PATH&lt;/h3&gt;
&lt;p&gt;可以在环境变量 PATH 中声明可执行文件的路径，路径之间用 : 分隔。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;sudo&#34;&gt;sudo&lt;/h3&gt;
&lt;p&gt;sudo 允许一般用户使用 root 可执行的命令，不过只有在 /etc/sudoers 配置文件中添加的用户才能使用该指令。&lt;/p&gt;
&lt;h3 id=&#34;包管理工具&#34;&gt;包管理工具&lt;/h3&gt;
&lt;p&gt;RPM 和 DPKG 为最常见的两类软件包管理工具：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RPM 全称为 Redhat Package Manager，最早由 Red Hat 公司制定实施，随后被 GNU 开源操作系统接受并成为许多 Linux 系统的既定软件标准。YUM 基于 RPM，具有依赖管理和软件升级功能。&lt;/li&gt;
&lt;li&gt;与 RPM 竞争的是基于 Debian 操作系统的 DEB 软件包管理工具 DPKG，全称为 Debian Package，功能方面与 RPM 相似。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;发行版&#34;&gt;发行版&lt;/h3&gt;
&lt;p&gt;Linux 发行版是 Linux 内核及各种应用软件的集成版本。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;基于的包管理工具&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;商业发行版&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;社区发行版&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;RPM&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Red Hat&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Fedora / CentOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;DPKG&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Ubuntu&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Debian&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;vim-三个模式&#34;&gt;VIM 三个模式&lt;/h3&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191209002818626.png&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;一般指令模式（Command mode）：VIM 的默认模式，可以用于移动游标查看内容；&lt;/li&gt;
&lt;li&gt;编辑模式（Insert mode）：按下 &amp;ldquo;i&amp;rdquo; 等按键之后进入，可以对文本进行编辑；&lt;/li&gt;
&lt;li&gt;指令列模式（Bottom-line mode）：按下 &amp;ldquo;:&amp;rdquo; 按键之后进入，用于保存退出等操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在指令列模式下，有以下命令用于离开或者保存文件。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;命令&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;作用&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;:w&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;写入磁盘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;:w!&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;当文件为只读时，强制写入磁盘。到底能不能写入，与用户对该文件的权限有关&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;:q&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;离开&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;:q!&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;强制离开不保存&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;:wq&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;写入磁盘后离开&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;:wq!&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;强制写入磁盘后离开&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;gnu&#34;&gt;GNU&lt;/h3&gt;
&lt;p&gt;GNU 计划，译为革奴计划，它的目标是创建一套完全自由的操作系统，称为 GNU，其内容软件完全以 GPL 方式发布。其中 GPL 全称为 GNU 通用公共许可协议（GNU General Public License），包含了以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;以任何目的运行此程序的自由；&lt;/li&gt;
&lt;li&gt;再复制的自由；&lt;/li&gt;
&lt;li&gt;改进此程序，并公开发布改进的自由。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;开源协议&#34;&gt;开源协议&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://choosealicense.com/&#34;&gt;Choose an open source license&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html&#34;&gt;如何选择开源许可证？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二磁盘&#34;&gt;二、磁盘&lt;/h2&gt;
&lt;h3 id=&#34;磁盘接口&#34;&gt;磁盘接口&lt;/h3&gt;
&lt;h4 id=&#34;1-ide&#34;&gt;1. IDE&lt;/h4&gt;
&lt;p&gt;IDE（ATA）全称 Advanced Technology Attachment，接口速度最大为 133MB/s，因为并口线的抗干扰性太差，且排线占用空间较大，不利电脑内部散热，已逐渐被 SATA 所取代。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/924914c0-660c-4e4a-bbc0-1df1146e7516.jpg&#34; width=&#34;400&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h4 id=&#34;2-sata&#34;&gt;2. SATA&lt;/h4&gt;
&lt;p&gt;SATA 全称 Serial ATA，也就是使用串口的 ATA 接口，抗干扰性强，且对数据线的长度要求比 ATA 低很多，支持热插拔等功能。SATA-II 的接口速度为 300MB/s，而 SATA-III 标准可达到 600MB/s 的传输速度。SATA 的数据线也比 ATA 的细得多，有利于机箱内的空气流通，整理线材也比较方便。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/f9f2a16b-4843-44d1-9759-c745772e9bcf.jpg&#34; width=&#34;&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h4 id=&#34;3-scsi&#34;&gt;3. SCSI&lt;/h4&gt;
&lt;p&gt;SCSI 全称是 Small Computer System Interface（小型机系统接口），SCSI 硬盘广为工作站以及个人电脑以及服务器所使用，因此会使用较为先进的技术，如碟片转速 15000rpm 的高转速，且传输时 CPU 占用率较低，但是单价也比相同容量的 ATA 及 SATA 硬盘更加昂贵。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/f0574025-c514-49f5-a591-6d6a71f271f7.jpg&#34; width=&#34;&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h4 id=&#34;4-sas&#34;&gt;4. SAS&lt;/h4&gt;
&lt;p&gt;SAS（Serial Attached SCSI）是新一代的 SCSI 技术，和 SATA 硬盘相同，都是采取序列式技术以获得更高的传输速度，可达到 6Gb/s。此外也通过缩小连接线改善系统内部空间等。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/6729baa0-57d7-4817-b3aa-518cbccf824c.jpg&#34; width=&#34;&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h3 id=&#34;磁盘的文件名&#34;&gt;磁盘的文件名&lt;/h3&gt;
&lt;p&gt;Linux 中每个硬件都被当做一个文件，包括磁盘。磁盘以磁盘接口类型进行命名，常见磁盘的文件名如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IDE 磁盘：/dev/hd[a-d]&lt;/li&gt;
&lt;li&gt;SATA/SCSI/SAS 磁盘：/dev/sd[a-p]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中文件名后面的序号的确定与系统检测到磁盘的顺序有关，而与磁盘所插入的插槽位置无关。&lt;/p&gt;
&lt;h2 id=&#34;三分区&#34;&gt;三、分区&lt;/h2&gt;
&lt;h3 id=&#34;分区表&#34;&gt;分区表&lt;/h3&gt;
&lt;p&gt;磁盘分区表主要有两种格式，一种是限制较多的 MBR 分区表，一种是较新且限制较少的 GPT 分区表。&lt;/p&gt;
&lt;h4 id=&#34;1-mbr&#34;&gt;1. MBR&lt;/h4&gt;
&lt;p&gt;MBR 中，第一个扇区最重要，里面有主要开机记录（Master boot record, MBR）及分区表（partition table），其中主要开机记录占 446 bytes，分区表占 64 bytes。&lt;/p&gt;
&lt;p&gt;分区表只有 64 bytes，最多只能存储 4 个分区，这 4 个分区为主分区（Primary）和扩展分区（Extended）。其中扩展分区只有一个，它使用其它扇区来记录额外的分区表，因此通过扩展分区可以分出更多分区，这些分区称为逻辑分区。&lt;/p&gt;
&lt;p&gt;Linux 也把分区当成文件，分区文件的命名方式为：磁盘文件名 + 编号，例如 /dev/sda1。注意，逻辑分区的编号从 5 开始。&lt;/p&gt;
&lt;h4 id=&#34;2-gpt&#34;&gt;2. GPT&lt;/h4&gt;
&lt;p&gt;扇区是磁盘的最小存储单位，旧磁盘的扇区大小通常为 512 bytes，而最新的磁盘支持 4 k。GPT 为了兼容所有磁盘，在定义扇区上使用逻辑区块地址（Logical Block Address, LBA），LBA 默认大小为 512 bytes。&lt;/p&gt;
&lt;p&gt;GPT 第 1 个区块记录了主要开机记录（MBR），紧接着是 33 个区块记录分区信息，并把最后的 33 个区块用于对分区信息进行备份。这 33 个区块第一个为 GPT 表头纪录，这个部份纪录了分区表本身的位置与大小和备份分区的位置，同时放置了分区表的校验码 (CRC32)，操作系统可以根据这个校验码来判断 GPT 是否正确。若有错误，可以使用备份分区进行恢复。&lt;/p&gt;
&lt;p&gt;GPT 没有扩展分区概念，都是主分区，每个 LBA 可以分 4 个分区，因此总共可以分 4 * 32 = 128 个分区。&lt;/p&gt;
&lt;p&gt;MBR 不支持 2.2 TB 以上的硬盘，GPT 则最多支持到 2&lt;sup&gt;33&lt;/sup&gt; TB = 8 ZB。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/GUID_Partition_Table_Scheme.svg.png&#34; width=&#34;400&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h3 id=&#34;开机检测程序&#34;&gt;开机检测程序&lt;/h3&gt;
&lt;h4 id=&#34;1-bios&#34;&gt;1. BIOS&lt;/h4&gt;
&lt;p&gt;BIOS（Basic Input/Output System，基本输入输出系统），它是一个固件（嵌入在硬件中的软件），BIOS 程序存放在断电后内容不会丢失的只读内存中。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/50831a6f-2777-46ea-a571-29f23c85cc21.jpg&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;p&gt;BIOS 是开机的时候计算机执行的第一个程序，这个程序知道可以开机的磁盘，并读取磁盘第一个扇区的主要开机记录（MBR），由主要开机记录（MBR）执行其中的开机管理程序，这个开机管理程序会加载操作系统的核心文件。&lt;/p&gt;
&lt;p&gt;主要开机记录（MBR）中的开机管理程序提供以下功能：选单、载入核心文件以及转交其它开机管理程序。转交这个功能可以用来实现多重引导，只需要将另一个操作系统的开机管理程序安装在其它分区的启动扇区上，在启动开机管理程序时，就可以通过选单选择启动当前的操作系统或者转交给其它开机管理程序从而启动另一个操作系统。&lt;/p&gt;
&lt;p&gt;下图中，第一扇区的主要开机记录（MBR）中的开机管理程序提供了两个选单：M1、M2，M1 指向了 Windows 操作系统，而 M2 指向其它分区的启动扇区，里面包含了另外一个开机管理程序，提供了一个指向 Linux 的选单。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/f900f266-a323-42b2-bc43-218fdb8811a8.jpg&#34; width=&#34;600&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;p&gt;安装多重引导，最好先安装 Windows 再安装 Linux。因为安装 Windows 时会覆盖掉主要开机记录（MBR），而 Linux 可以选择将开机管理程序安装在主要开机记录（MBR）或者其它分区的启动扇区，并且可以设置开机管理程序的选单。&lt;/p&gt;
&lt;h4 id=&#34;2-uefi&#34;&gt;2. UEFI&lt;/h4&gt;
&lt;p&gt;BIOS 不可以读取 GPT 分区表，而 UEFI 可以。&lt;/p&gt;
&lt;h2 id=&#34;四文件系统&#34;&gt;四、文件系统&lt;/h2&gt;
&lt;h3 id=&#34;分区与文件系统&#34;&gt;分区与文件系统&lt;/h3&gt;
&lt;p&gt;对分区进行格式化是为了在分区上建立文件系统。一个分区通常只能格式化为一个文件系统，但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。&lt;/p&gt;
&lt;h3 id=&#34;组成&#34;&gt;组成&lt;/h3&gt;
&lt;p&gt;最主要的几个组成部分如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;inode：一个文件占用一个 inode，记录文件的属性，同时记录此文件的内容所在的 block 编号；&lt;/li&gt;
&lt;li&gt;block：记录文件的内容，文件太大时，会占用多个 block。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除此之外还包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;superblock：记录文件系统的整体信息，包括 inode 和 block 的总量、使用量、剩余量，以及文件系统的格式与相关信息等；&lt;/li&gt;
&lt;li&gt;block bitmap：记录 block 是否被使用的位图。&lt;/li&gt;
&lt;/ul&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/BSD_disk.png&#34; width=&#34;800&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h3 id=&#34;文件读取&#34;&gt;文件读取&lt;/h3&gt;
&lt;p&gt;对于 Ext2 文件系统，当要读取一个文件的内容时，先在 inode 中查找文件内容所在的所有 block，然后把所有 block 的内容读出来。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/12a65cc6-20e0-4706-9fe6-3ba49413d7f6.png&#34; width=&#34;500px&#34;&gt; &lt;/div&gt;&lt;br&gt;
&lt;p&gt;而对于 FAT 文件系统，它没有 inode，每个 block 中存储着下一个 block 的编号。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/5b718e86-7102-4bb6-8ca5-d1dd791530c5.png&#34; width=&#34;500px&#34;&gt; &lt;/div&gt;&lt;br&gt;
&lt;h3 id=&#34;磁盘碎片&#34;&gt;磁盘碎片&lt;/h3&gt;
&lt;p&gt;指一个文件内容所在的 block 过于分散，导致磁盘磁头移动距离过大，从而降低磁盘读写性能。&lt;/p&gt;
&lt;h3 id=&#34;block&#34;&gt;block&lt;/h3&gt;
&lt;p&gt;在 Ext2 文件系统中所支持的 block 大小有 1K，2K 及 4K 三种，不同的大小限制了单个文件和文件系统的最大大小。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;大小&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;1KB&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;2KB&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;4KB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;最大单一文件&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;16GB&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;256GB&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;2TB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;最大文件系统&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;2TB&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;8TB&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;16TB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一个 block 只能被一个文件所使用，未使用的部分直接浪费了。因此如果需要存储大量的小文件，那么最好选用比较小的 block。&lt;/p&gt;
&lt;h3 id=&#34;inode&#34;&gt;inode&lt;/h3&gt;
&lt;p&gt;inode 具体包含以下信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;权限 (read/write/excute)；&lt;/li&gt;
&lt;li&gt;拥有者与群组 (owner/group)；&lt;/li&gt;
&lt;li&gt;容量；&lt;/li&gt;
&lt;li&gt;建立或状态改变的时间 (ctime)；&lt;/li&gt;
&lt;li&gt;最近读取时间 (atime)；&lt;/li&gt;
&lt;li&gt;最近修改时间 (mtime)；&lt;/li&gt;
&lt;li&gt;定义文件特性的旗标 (flag)，如 SetUID&amp;hellip;；&lt;/li&gt;
&lt;li&gt;该文件真正内容的指向 (pointer)。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;inode 具有以下特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个 inode 大小均固定为 128 bytes (新的 ext4 与 xfs 可设定到 256 bytes)；&lt;/li&gt;
&lt;li&gt;每个文件都仅会占用一个 inode。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;inode 中记录了文件内容所在的 block 编号，但是每个 block 非常小，一个大文件随便都需要几十万的 block。而一个 inode 大小有限，无法直接引用这么多 block 编号。因此引入了间接、双间接、三间接引用。间接引用让 inode 记录的引用 block 块记录引用信息。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/inode_with_signatures.jpg&#34; width=&#34;600&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;
&lt;p&gt;建立一个目录时，会分配一个 inode 与至少一个 block。block 记录的内容是目录下所有文件的 inode 编号以及文件名。&lt;/p&gt;
&lt;p&gt;可以看到文件的 inode 本身不记录文件名，文件名记录在目录中，因此新增文件、删除文件、更改文件名这些操作与目录的写权限有关。&lt;/p&gt;
&lt;h3 id=&#34;日志&#34;&gt;日志&lt;/h3&gt;
&lt;p&gt;如果突然断电，那么文件系统会发生错误，例如断电前只修改了 block bitmap，而还没有将数据真正写入 block 中。&lt;/p&gt;
&lt;p&gt;ext3/ext4 文件系统引入了日志功能，可以利用日志来修复文件系统。&lt;/p&gt;
&lt;h3 id=&#34;挂载&#34;&gt;挂载&lt;/h3&gt;
&lt;p&gt;挂载利用目录作为文件系统的进入点，也就是说，进入目录之后就可以读取文件系统的数据。&lt;/p&gt;
&lt;h3 id=&#34;目录配置&#34;&gt;目录配置&lt;/h3&gt;
&lt;p&gt;为了使不同 Linux 发行版本的目录结构保持一致性，Filesystem Hierarchy Standard (FHS) 规定了 Linux 的目录结构。最基础的三个目录如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/ (root, 根目录)&lt;/li&gt;
&lt;li&gt;/usr (unix software resource)：所有系统默认软件都会安装到这个目录；&lt;/li&gt;
&lt;li&gt;/var (variable)：存放系统或程序运行过程中的数据文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/linux-filesystem.png&#34; width=&#34;&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h2 id=&#34;五文件&#34;&gt;五、文件&lt;/h2&gt;
&lt;h3 id=&#34;文件属性&#34;&gt;文件属性&lt;/h3&gt;
&lt;p&gt;用户分为三种：文件拥有者、群组以及其它人，对不同的用户有不同的文件权限。&lt;/p&gt;
&lt;p&gt;使用 ls 查看一个文件时，会显示一个文件的信息，例如 &lt;code&gt;drwxr-xr-x 3 root root 17 May 6 00:14 .config&lt;/code&gt;，对这个信息的解释如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;drwxr-xr-x：文件类型以及权限，第 1 位为文件类型字段，后 9 位为文件权限字段&lt;/li&gt;
&lt;li&gt;3：链接数&lt;/li&gt;
&lt;li&gt;root：文件拥有者&lt;/li&gt;
&lt;li&gt;root：所属群组&lt;/li&gt;
&lt;li&gt;17：文件大小&lt;/li&gt;
&lt;li&gt;May 6 00:14：文件最后被修改的时间&lt;/li&gt;
&lt;li&gt;.config：文件名&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;常见的文件类型及其含义有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;d：目录&lt;/li&gt;
&lt;li&gt;-：文件&lt;/li&gt;
&lt;li&gt;l：链接文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;9 位的文件权限字段中，每 3 个为一组，共 3 组，每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。一组权限中的 3 位分别为 r、w、x 权限，表示可读、可写、可执行。&lt;/p&gt;
&lt;p&gt;文件时间有以下三种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;modification time (mtime)：文件的内容更新就会更新；&lt;/li&gt;
&lt;li&gt;status time (ctime)：文件的状态（权限、属性）更新就会更新；&lt;/li&gt;
&lt;li&gt;access time (atime)：读取文件时就会更新。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;文件与目录的基本操作&#34;&gt;文件与目录的基本操作&lt;/h3&gt;
&lt;h4 id=&#34;1-ls&#34;&gt;1. ls&lt;/h4&gt;
&lt;p&gt;列出文件或者目录的信息，目录的信息就是其中包含的文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## ls [-aAdfFhilnrRSt] file|dir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-a ：列出全部的文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-d ：仅列出目录本身
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-l ：以长数据串行列出，包含文件的属性与权限等等数据
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-cd&#34;&gt;2. cd&lt;/h4&gt;
&lt;p&gt;更换当前目录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; [相对路径或绝对路径]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;3-mkdir&#34;&gt;3. mkdir&lt;/h4&gt;
&lt;p&gt;创建目录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;## mkdir [-mp] 目录名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-m ：配置目录权限
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-p ：递归创建目录
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;4-rmdir&#34;&gt;4. rmdir&lt;/h4&gt;
&lt;p&gt;删除目录，目录必须为空。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rmdir [-p] 目录名称
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-p ：递归删除目录
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;5-touch&#34;&gt;5. touch&lt;/h4&gt;
&lt;p&gt;更新文件时间或者建立新文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## touch [-acdmt] filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-a ： 更新 atime
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-c ： 更新 ctime，若该文件不存在则不建立新文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-m ： 更新 mtime
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-d ： 后面可以接更新日期而不使用当前日期，也可以使用 --date=&amp;#34;日期或时间&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-t ： 后面可以接更新时间而不使用当前时间，格式为[YYYYMMDDhhmm]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;6-cp&#34;&gt;6. cp&lt;/h4&gt;
&lt;p&gt;复制文件。如果源文件有两个以上，则目的文件一定要是目录才行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp [-adfilprsu] source destination
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-a ：相当于 -dr --preserve=all
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-d ：若来源文件为链接文件，则复制链接文件属性而非文件本身
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-i ：若目标文件已经存在时，在覆盖前会先询问
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-p ：连同文件的属性一起复制过去
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-r ：递归复制
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-u ：destination 比 source 旧才更新 destination，或 destination 不存在的情况下才复制
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--preserve=all ：除了 -p 的权限相关参数外，还加入 SELinux 的属性, links, xattr 等也复制了
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;7-rm&#34;&gt;7. rm&lt;/h4&gt;
&lt;p&gt;删除文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## rm [-fir] 文件或目录
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-r ：递归删除
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;8-mv&#34;&gt;8. mv&lt;/h4&gt;
&lt;p&gt;移动文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## mv [-fiu] source destination
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## mv [options] source1 source2 source3 .... directory
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-f ： force 强制的意思，如果目标文件已经存在，不会询问而直接覆盖
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;修改权限&#34;&gt;修改权限&lt;/h3&gt;
&lt;p&gt;可以将一组权限用数字来表示，此时一组权限的 3 个位当做二进制数字的位，从左到右每个位的权值为 4、2、1，即每个权限对应的数字权值为 r : 4、w : 2、x : 1。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## chmod [-R] xyz dirname/filename
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：将 .bashrc 文件的权限修改为 -rwxr-xr&amp;ndash;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## chmod 754 .bashrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也可以使用符号来设定权限。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## chmod [ugoa]  [+-=] [rwx] dirname/filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- u：拥有者
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- g：所属群组
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- o：其他人
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- a：所有人
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- +：添加权限
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- -：移除权限
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- =：设定权限
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：为 .bashrc 文件的所有用户添加写权限。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## chmod a+w .bashrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;默认权限&#34;&gt;默认权限&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;文件默认权限：文件默认没有可执行权限，因此为 666，也就是 -rw-rw-rw- 。&lt;/li&gt;
&lt;li&gt;目录默认权限：目录必须要能够进入，也就是必须拥有可执行权限，因此为 777 ，也就是 drwxrwxrwx。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以通过 umask 设置或者查看默认权限，通常以掩码的形式来表示，例如 002 表示其它用户的权限去除了一个 2 的权限，也就是写权限，因此建立新文件时默认的权限为 -rw-rw-r&amp;ndash;。&lt;/p&gt;
&lt;h3 id=&#34;目录的权限&#34;&gt;目录的权限&lt;/h3&gt;
&lt;p&gt;文件名不是存储在一个文件的内容中，而是存储在一个文件所在的目录中。因此，拥有文件的 w 权限并不能对文件名进行修改。&lt;/p&gt;
&lt;p&gt;目录存储文件列表，一个目录的权限也就是对其文件列表的权限。因此，目录的 r 权限表示可以读取文件列表；w 权限表示可以修改文件列表，具体来说，就是添加删除文件，对文件名进行修改；x 权限可以让该目录成为工作目录，x 权限是 r 和 w 权限的基础，如果不能使一个目录成为工作目录，也就没办法读取文件列表以及对文件列表进行修改了。&lt;/p&gt;
&lt;h3 id=&#34;链接&#34;&gt;链接&lt;/h3&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/1e46fd03-0cda-4d60-9b1c-0c256edaf6b2.png&#34; width=&#34;450px&#34;&gt; &lt;/div&gt;&lt;br&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## ln [-sf] source_filename dist_filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-s ：默认是实体链接，加 -s 为符号链接
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-f ：如果目标文件存在时，先删除目标文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;1-实体链接&#34;&gt;1. 实体链接&lt;/h4&gt;
&lt;p&gt;在目录下创建一个条目，记录着文件名与 inode 编号，这个 inode 就是源文件的 inode。&lt;/p&gt;
&lt;p&gt;删除任意一个条目，文件还是存在，只要引用数量不为 0。&lt;/p&gt;
&lt;p&gt;有以下限制：不能跨越文件系统、不能对目录进行链接。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## ln /etc/crontab .
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## ll -i /etc/crontab crontab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-符号链接&#34;&gt;2. 符号链接&lt;/h4&gt;
&lt;p&gt;符号链接文件保存着源文件所在的绝对路径，在读取时会定位到源文件上，可以理解为 Windows 的快捷方式。&lt;/p&gt;
&lt;p&gt;当源文件被删除了，链接文件就打不开了。&lt;/p&gt;
&lt;p&gt;因为记录的是路径，所以可以为目录建立符号链接。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## ll -i /etc/crontab /root/crontab2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -&amp;gt; /etc/crontab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;获取文件内容&#34;&gt;获取文件内容&lt;/h3&gt;
&lt;h4 id=&#34;1-cat&#34;&gt;1. cat&lt;/h4&gt;
&lt;p&gt;取得文件内容。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## cat [-AbEnTv] filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-n ：打印出行号，连同空白行也会有行号，-b 不会
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-tac&#34;&gt;2. tac&lt;/h4&gt;
&lt;p&gt;是 cat 的反向操作，从最后一行开始打印。&lt;/p&gt;
&lt;h4 id=&#34;3-more&#34;&gt;3. more&lt;/h4&gt;
&lt;p&gt;和 cat 不同的是它可以一页一页查看文件内容，比较适合大文件的查看。&lt;/p&gt;
&lt;h4 id=&#34;4-less&#34;&gt;4. less&lt;/h4&gt;
&lt;p&gt;和 more 类似，但是多了一个向前翻页的功能。&lt;/p&gt;
&lt;h4 id=&#34;5-head&#34;&gt;5. head&lt;/h4&gt;
&lt;p&gt;取得文件前几行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## head [-n number] filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-n ：后面接数字，代表显示几行的意思
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;6-tail&#34;&gt;6. tail&lt;/h4&gt;
&lt;p&gt;是 head 的反向操作，只是取得是后几行。&lt;/p&gt;
&lt;h4 id=&#34;7-od&#34;&gt;7. od&lt;/h4&gt;
&lt;p&gt;以字符或者十六进制的形式显示二进制文件。&lt;/p&gt;
&lt;h3 id=&#34;指令与文件搜索&#34;&gt;指令与文件搜索&lt;/h3&gt;
&lt;h4 id=&#34;1-which&#34;&gt;1. which&lt;/h4&gt;
&lt;p&gt;指令搜索。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## which [-a] command
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-a ：将所有指令列出，而不是只列第一个
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-whereis&#34;&gt;2. whereis&lt;/h4&gt;
&lt;p&gt;文件搜索。速度比较快，因为它只搜索几个特定的目录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## whereis [-bmsu] dirname/filename
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;3-locate&#34;&gt;3. locate&lt;/h4&gt;
&lt;p&gt;文件搜索。可以用关键字或者正则表达式进行搜索。&lt;/p&gt;
&lt;p&gt;locate 使用 /var/lib/mlocate/ 这个数据库来进行搜索，它存储在内存中，并且每天更新一次，所以无法用 locate 搜索新建的文件。可以使用 updatedb 来立即更新数据库。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## locate [-ir] keyword
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-r：正则表达式
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;4-find&#34;&gt;4. find&lt;/h4&gt;
&lt;p&gt;文件搜索。可以使用文件的属性和权限进行搜索。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;## find [basedir] [option]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;example: find . -name &amp;#34;shadow*&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;-与时间有关的选项&#34;&gt;① 与时间有关的选项&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-mtime  n ：列出在 n 天前的那一天修改过内容的文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-mtime +n ：列出在 n 天之前 (不含 n 天本身) 修改过内容的文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-mtime -n ：列出在 n 天之内 (含 n 天本身) 修改过内容的文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-newer file ： 列出比 file 更新的文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;+4、4 和 -4 的指示的时间范围如下：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/658fc5e7-79c0-4247-9445-d69bf194c539.png&#34; width=&#34;&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h5 id=&#34;-与文件拥有者和所属群组有关的选项&#34;&gt;② 与文件拥有者和所属群组有关的选项&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-uid n
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-gid n
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-user name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-group name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-nouser ：搜索拥有者不存在 /etc/passwd 的文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-nogroup：搜索所属群组不存在于 /etc/group 的文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;-与文件权限和名称有关的选项&#34;&gt;③ 与文件权限和名称有关的选项&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-name filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-size [+-]SIZE：搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有：c: 代表 byte，k: 代表 1024bytes。所以，要找比 50KB 还要大的文件，就是 -size +50k
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-type TYPE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-perm mode  ：搜索权限等于 mode 的文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-perm -mode ：搜索权限包含 mode 的文件
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-perm /mode ：搜索权限包含任一 mode 的文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;六压缩与打包&#34;&gt;六、压缩与打包&lt;/h2&gt;
&lt;h3 id=&#34;压缩文件名&#34;&gt;压缩文件名&lt;/h3&gt;
&lt;p&gt;Linux 底下有很多压缩文件名，常见的如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;扩展名&lt;/th&gt;
&lt;th&gt;压缩程序&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;*.Z&lt;/td&gt;
&lt;td&gt;compress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*.zip&lt;/td&gt;
&lt;td&gt;zip&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*.gz&lt;/td&gt;
&lt;td&gt;gzip&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*.bz2&lt;/td&gt;
&lt;td&gt;bzip2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*.xz&lt;/td&gt;
&lt;td&gt;xz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*.tar&lt;/td&gt;
&lt;td&gt;tar 程序打包的数据，没有经过压缩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*.tar.gz&lt;/td&gt;
&lt;td&gt;tar 程序打包的文件，经过 gzip 的压缩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*.tar.bz2&lt;/td&gt;
&lt;td&gt;tar 程序打包的文件，经过 bzip2 的压缩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*.tar.xz&lt;/td&gt;
&lt;td&gt;tar 程序打包的文件，经过 xz 的压缩&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;压缩指令&#34;&gt;压缩指令&lt;/h3&gt;
&lt;h4 id=&#34;1-gzip&#34;&gt;1. gzip&lt;/h4&gt;
&lt;p&gt;gzip 是 Linux 使用最广的压缩指令，可以解开 compress、zip 与 gzip 所压缩的文件。&lt;/p&gt;
&lt;p&gt;经过 gzip 压缩过，源文件就不存在了。&lt;/p&gt;
&lt;p&gt;有 9 个不同的压缩等级可以使用。&lt;/p&gt;
&lt;p&gt;可以使用 zcat、zmore、zless 来读取压缩文件的内容。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gzip [-cdtv#] filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-c ：将压缩的数据输出到屏幕上
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-d ：解压缩
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-t ：检验压缩文件是否出错
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-v ：显示压缩比等信息
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-# ： # 为数字的意思，代表压缩等级，数字越大压缩比越高，默认为 6
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-bzip2&#34;&gt;2. bzip2&lt;/h4&gt;
&lt;p&gt;提供比 gzip 更高的压缩比。&lt;/p&gt;
&lt;p&gt;查看命令：bzcat、bzmore、bzless、bzgrep。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ bzip2 [-cdkzv#] filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-k ：保留源文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;3-xz&#34;&gt;3. xz&lt;/h4&gt;
&lt;p&gt;提供比 bzip2 更佳的压缩比。&lt;/p&gt;
&lt;p&gt;可以看到，gzip、bzip2、xz 的压缩比不断优化。不过要注意的是，压缩比越高，压缩的时间也越长。&lt;/p&gt;
&lt;p&gt;查看命令：xzcat、xzmore、xzless、xzgrep。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;xz [-dtlkc#] filename
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;打包&#34;&gt;打包&lt;/h3&gt;
&lt;p&gt;压缩指令只能对一个文件进行压缩，而打包能够将多个文件打包成一个大文件。tar 不仅可以用于打包，也可以使用 gzip、bzip2、xz 将打包文件进行压缩。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar [-z|-j|-J] [cv] [-f 新建的 tar 文件] filename...  ==打包压缩
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar [-z|-j|-J] [tv] [-f 已有的 tar 文件]              ==查看
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar [-z|-j|-J] [xv] [-f 已有的 tar 文件] [-C 目录]    ==解压缩
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-z ：使用 zip；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-j ：使用 bzip2；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-J ：使用 xz；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-c ：新建打包文件；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-t ：查看打包文件里面有哪些文件；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-x ：解打包或解压缩的功能；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-v ：在压缩/解压缩的过程中，显示正在处理的文件名；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-f : filename：要处理的文件；
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-C 目录 ： 在特定目录解压缩。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;使用方式&lt;/th&gt;
&lt;th&gt;命令&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;打包压缩&lt;/td&gt;
&lt;td&gt;tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;查 看&lt;/td&gt;
&lt;td&gt;tar -jtv -f filename.tar.bz2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;解压缩&lt;/td&gt;
&lt;td&gt;tar -jxv -f filename.tar.bz2 -C 要解压缩的目录&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;七bash&#34;&gt;七、Bash&lt;/h2&gt;
&lt;p&gt;可以通过 Shell 请求内核提供服务，Bash 正是 Shell 的一种。&lt;/p&gt;
&lt;h3 id=&#34;特性&#34;&gt;特性&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;命令历史：记录使用过的命令&lt;/li&gt;
&lt;li&gt;命令与文件补全：快捷键：tab&lt;/li&gt;
&lt;li&gt;命名别名：例如 ll 是 ls -al 的别名&lt;/li&gt;
&lt;li&gt;shell scripts&lt;/li&gt;
&lt;li&gt;通配符：例如 ls -l /usr/bin/X* 列出 /usr/bin 下面所有以 X 开头的文件&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;变量操作&#34;&gt;变量操作&lt;/h3&gt;
&lt;p&gt;对一个变量赋值直接使用 =。&lt;/p&gt;
&lt;p&gt;对变量取用需要在变量前加上 $ ，也可以用 ${} 的形式；&lt;/p&gt;
&lt;p&gt;输出变量使用 echo 命令。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;=abc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;$x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;变量内容如果有空格，必须使用双引号或者单引号。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;双引号内的特殊字符可以保留原本特性，例如 x=&amp;ldquo;lang is $LANG&amp;rdquo;，则 x 的值为 lang is zh_TW.UTF-8；&lt;/li&gt;
&lt;li&gt;单引号内的特殊字符就是特殊字符本身，例如 x=&amp;lsquo;lang is $LANG&amp;rsquo;，则 x 的值为 lang is $LANG。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可以使用 `指令` 或者 $(指令) 的方式将指令的执行结果赋值给变量。例如 version=$(uname -r)，则 version 的值为 4.15.0-22-generic。&lt;/p&gt;
&lt;p&gt;可以使用 export 命令将自定义变量转成环境变量，环境变量可以在子程序中使用，所谓子程序就是由当前 Bash 而产生的子 Bash。&lt;/p&gt;
&lt;p&gt;Bash 的变量可以声明为数组和整数数字。注意数字类型没有浮点数。如果不进行声明，默认是字符串类型。变量的声明使用 declare 命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ declare [-aixr] variable
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-a ： 定义为数组类型
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-i ： 定义为整数类型
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-x ： 定义为环境变量
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-r ： 定义为 readonly 类型
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用 [ ] 来对数组进行索引操作：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;array[1]=a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;array[2]=b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#2aa198&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;array&lt;/span&gt;[1]&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;指令搜索顺序&#34;&gt;指令搜索顺序&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;以绝对或相对路径来执行指令，例如 /bin/ls 或者 ./ls ；&lt;/li&gt;
&lt;li&gt;由别名找到该指令来执行；&lt;/li&gt;
&lt;li&gt;由 Bash 内置的指令来执行；&lt;/li&gt;
&lt;li&gt;按 $PATH 变量指定的搜索路径的顺序找到第一个指令来执行。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;数据流重定向&#34;&gt;数据流重定向&lt;/h3&gt;
&lt;p&gt;重定向指的是使用文件代替标准输入、标准输出和标准错误输出。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;1&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;代码&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;运算符&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;标准输入 (stdin)&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;0&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&amp;lt; 或 &amp;lt;&amp;lt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;标准输出 (stdout)&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;1&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&amp;gt; 或 &amp;gt;&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;标准错误输出 (stderr)&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;2&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;2&amp;gt; 或 2&amp;gt;&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中，有一个箭头的表示以覆盖的方式重定向，而有两个箭头的表示以追加的方式重定向。&lt;/p&gt;
&lt;p&gt;可以将不需要的标准输出以及标准错误输出重定向到 /dev/null，相当于扔进垃圾箱。&lt;/p&gt;
&lt;p&gt;如果需要将标准输出以及标准错误输出同时重定向到一个文件，需要将某个输出转换为另一个输出，例如 2&amp;gt;&amp;amp;1 表示将标准错误输出转换为标准输出。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;find /home -name .bashrc &amp;gt; list 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;八管道指令&#34;&gt;八、管道指令&lt;/h2&gt;
&lt;p&gt;管道是将一个命令的标准输出作为另一个命令的标准输入，在数据需要经过多个步骤的处理之后才能得到我们想要的内容时就可以使用管道。&lt;/p&gt;
&lt;p&gt;在命令之间使用 | 分隔各个管道命令。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls -al /etc | less
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;提取指令&#34;&gt;提取指令&lt;/h3&gt;
&lt;p&gt;cut 对数据进行切分，取出想要的部分。&lt;/p&gt;
&lt;p&gt;切分过程一行一行地进行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cut
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-d ：分隔符
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-f ：经过 -d 分隔后，使用 -f n 取出第 n 个区间
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-c ：以字符为单位取出区间
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例 1：last 显示登入者的信息，取出用户名。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ last
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 (06:33)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ last | cut -d &amp;#39; &amp;#39; -f 1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例 2：将 export 输出的信息，取出第 12 字符以后的所有字符串。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ export
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;declare -x HISTCONTROL=&amp;#34;ignoredups&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;declare -x HISTSIZE=&amp;#34;1000&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;declare -x HOME=&amp;#34;/home/dmtsai&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;declare -x HOSTNAME=&amp;#34;study.centos.vbird&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.....(其他省略).....
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ export | cut -c 12-
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;排序指令&#34;&gt;排序指令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;sort&lt;/strong&gt;   用于排序。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sort [-fbMnrtuk] [file or stdin]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-f ：忽略大小写
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-b ：忽略最前面的空格
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-M ：以月份的名字来排序，例如 JAN，DEC
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-n ：使用数字
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-r ：反向排序
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-u ：相当于 unique，重复的内容只出现一次
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-t ：分隔符，默认为 tab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-k ：指定排序的区间
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：/etc/passwd 文件内容以 : 来分隔，要求以第三列进行排序。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cat /etc/passwd | sort -t &amp;#39;:&amp;#39; -k 3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root❌0:0:root:/root:/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai❌1000:1000:dmtsai:/home/dmtsai:/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alex❌1001:1002::/home/alex:/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;arod❌1002:1003::/home/arod:/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;uniq&lt;/strong&gt;   可以将重复的数据只取一个。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ uniq [-ic]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-i ：忽略大小写
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-c ：进行计数
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：取得每个人的登录总次数&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ last | cut -d &amp;#39; &amp;#39; -f 1 | sort | uniq -c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;6 (unknown
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;47 dmtsai
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4 reboot
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7 root
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1 wtmp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;双向输出重定向&#34;&gt;双向输出重定向&lt;/h3&gt;
&lt;p&gt;输出重定向会将输出内容重定向到文件中，而   &lt;strong&gt;tee&lt;/strong&gt;   不仅能够完成这个功能，还能保留屏幕上的输出。也就是说，使用 tee 指令，一个输出会同时传送到文件和屏幕上。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tee [-a] file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;字符转换指令&#34;&gt;字符转换指令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;tr&lt;/strong&gt;   用来删除一行中的字符，或者对字符进行替换。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tr [-ds] SET1 ...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-d ： 删除行中 SET1 这个字符串
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例，将 last 输出的信息所有小写转换为大写。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;last | tr &amp;#39;[a-z]&amp;#39; &amp;#39;[A-Z]&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;col&lt;/strong&gt;   将 tab 字符转为空格字符。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ col [-xb]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-x ： 将 tab 键转换成对等的空格键
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;expand&lt;/strong&gt;   将 tab 转换一定数量的空格，默认是 8 个。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ expand [-t] file
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-t ：tab 转为空格的数量
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;join&lt;/strong&gt;   将有相同数据的那一行合并在一起。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ join [-ti12] file1 file2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-t ：分隔符，默认为空格
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-i ：忽略大小写的差异
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-1 ：第一个文件所用的比较字段
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-2 ：第二个文件所用的比较字段
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;paste&lt;/strong&gt;   直接将两行粘贴在一起。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ paste [-d] file1 file2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-d ：分隔符，默认为 tab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;分区指令&#34;&gt;分区指令&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;split&lt;/strong&gt;   将一个文件划分成多个文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ split [-bl] file PREFIX
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-b ：以大小来进行分区，可加单位，例如 b, k, m 等
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-l ：以行数来进行分区。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- PREFIX ：分区文件的前导名称
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;九正则表达式&#34;&gt;九、正则表达式&lt;/h2&gt;
&lt;h3 id=&#34;grep&#34;&gt;grep&lt;/h3&gt;
&lt;p&gt;g/re/p（globally search a regular expression and print)，使用正则表示式进行全局查找并打印。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep [-acinv] [--color=auto] 搜寻字符串 filename
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-c ： 统计匹配到行的个数
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-i ： 忽略大小写
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-n ： 输出行号
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-v ： 反向选择，也就是显示出没有 搜寻字符串 内容的那一行
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;--color=auto ：找到的关键字加颜色显示
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：把含有 the 字符串的行提取出来（注意默认会有 &amp;ndash;color=auto 选项，因此以下内容在 Linux 中有颜色显示 the 字符串）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep -n &amp;#39;the&amp;#39; regular_express.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8:I can&amp;#39;t finish the test.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12:the symbol &amp;#39;*&amp;#39; is represented as start.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;15:You are the best is mean you are the no. 1.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;16:The world Happy is the same with &amp;#34;glad&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;18:google is the best tools for search keyword
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：正则表达式 a{m,n} 用来匹配字符 a m~n 次，这里需要将 { 和 } 进行转义，因为它们在 shell 是有特殊意义的。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep -n &amp;#39;a\{2,5\}&amp;#39; regular_express.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;printf&#34;&gt;printf&lt;/h3&gt;
&lt;p&gt;用于格式化输出。它不属于管道命令，在给 printf 传数据时需要使用 $( ) 形式。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ printf &amp;#39;%10s %5i %5i %5i %8.2f \n&amp;#39; $(cat printf.txt)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    DmTsai    80    60    92    77.33
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     VBird    75    55    80    70.00
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       Ken    60    90    70    73.33
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;awk&#34;&gt;awk&lt;/h3&gt;
&lt;p&gt;是由 Alfred Aho，Peter Weinberger 和 Brian Kernighan 创造，awk 这个名字就是这三个创始人名字的首字母。&lt;/p&gt;
&lt;p&gt;awk 每次处理一行，处理的最小单位是字段，每个字段的命名方式为：$n，n 为字段号，从 1 开始，$0 表示一整行。&lt;/p&gt;
&lt;p&gt;示例：取出最近五个登录用户的用户名和 IP。首先用 last -n 5 取出用最近五个登录用户的所有信息，可以看到用户名和 IP 分别在第 1 列和第 3 列，我们用 $1 和 $3 就能取出这两个字段，然后用 print 进行打印。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ last -n 5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai pts/0 192.168.1.100 Tue Jul 14 17:32 still logged in
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai pts/0 192.168.1.100 Thu Jul 9 23:36 - 02:58 (03:22)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai pts/0 192.168.1.100 Thu Jul 9 17:23 - 23:36 (06:12)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai pts/0 192.168.1.100 Thu Jul 9 08:02 - 08:17 (00:14)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai tty1 Fri May 29 11:55 - 12:11 (00:15)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ last -n 5 | awk &amp;#39;{print $1 &amp;#34;\t&amp;#34; $3}&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai   192.168.1.100
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai   192.168.1.100
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai   192.168.1.100
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai   192.168.1.100
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai   Fri
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以根据字段的某些条件进行匹配，例如匹配字段小于某个值的那一行数据。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;awk &amp;#39;条件类型 1 {动作 1} 条件类型 2 {动作 2} ...&amp;#39; filename
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：/etc/passwd 文件第三个字段为 UID，对 UID 小于 10 的数据进行处理。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cat /etc/passwd | awk &amp;#39;BEGIN {FS=&amp;#34;:&amp;#34;} $3 &amp;lt; 10 {print $1 &amp;#34;\t &amp;#34; $3}&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root 0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bin 1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;daemon 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;awk 变量：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;变量名称&lt;/th&gt;
&lt;th&gt;代表意义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;NF&lt;/td&gt;
&lt;td&gt;每一行拥有的字段总数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;NR&lt;/td&gt;
&lt;td&gt;目前所处理的是第几行数据&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;FS&lt;/td&gt;
&lt;td&gt;目前的分隔字符，默认是空格键&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;示例：显示正在处理的行号以及每一行有多少字段&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ last -n 5 | awk &amp;#39;{print $1 &amp;#34;\t lines: &amp;#34; NR &amp;#34;\t columns: &amp;#34; NF}&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai lines: 1 columns: 10
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai lines: 2 columns: 10
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai lines: 3 columns: 10
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai lines: 4 columns: 10
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dmtsai lines: 5 columns: 9
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;十进程管理&#34;&gt;十、进程管理&lt;/h2&gt;
&lt;h3 id=&#34;查看进程&#34;&gt;查看进程&lt;/h3&gt;
&lt;h4 id=&#34;1-ps&#34;&gt;1. ps&lt;/h4&gt;
&lt;p&gt;查看某个时间点的进程信息。&lt;/p&gt;
&lt;p&gt;示例：查看自己的进程&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;## ps -l&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：查看系统所有进程&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;## ps aux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例：查看特定的进程&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;## ps aux | grep threadx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-pstree&#34;&gt;2. pstree&lt;/h4&gt;
&lt;p&gt;查看进程树。&lt;/p&gt;
&lt;p&gt;示例：查看所有进程树&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;## pstree -A&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;3-top&#34;&gt;3. top&lt;/h4&gt;
&lt;p&gt;实时显示进程信息。&lt;/p&gt;
&lt;p&gt;示例：两秒钟刷新一次&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;## top -d 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;4-netstat&#34;&gt;4. netstat&lt;/h4&gt;
&lt;p&gt;查看占用端口的进程&lt;/p&gt;
&lt;p&gt;示例：查看特定端口的进程&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;## netstat -anp | grep port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;进程状态&#34;&gt;进程状态&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;状态&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;R&lt;/td&gt;
&lt;td&gt;running or runnable (on run queue)&lt;br&gt;正在执行或者可执行，此时进程位于执行队列中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;D&lt;/td&gt;
&lt;td&gt;uninterruptible sleep (usually I/O)&lt;br&gt;不可中断阻塞，通常为 IO 阻塞。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;S&lt;/td&gt;
&lt;td&gt;interruptible sleep (waiting for an event to complete) &lt;br&gt; 可中断阻塞，此时进程正在等待某个事件完成。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Z&lt;/td&gt;
&lt;td&gt;zombie (terminated but not reaped by its parent)&lt;br&gt;僵死，进程已经终止但是尚未被其父进程获取信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;T&lt;/td&gt;
&lt;td&gt;stopped (either by a job control signal or because it is being traced) &lt;br&gt; 结束，进程既可以被作业控制信号结束，也可能是正在被追踪。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&lt;br&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/2bab4127-3e7d-48cc-914e-436be859fb05.png&#34; width=&#34;490px&#34;/&gt; &lt;/div&gt;&lt;br&gt;
&lt;h3 id=&#34;sigchld&#34;&gt;SIGCHLD&lt;/h3&gt;
&lt;p&gt;当一个子进程改变了它的状态时（停止运行，继续运行或者退出），有两件事会发生在父进程中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;得到 SIGCHLD 信号；&lt;/li&gt;
&lt;li&gt;waitpid() 或者 wait() 调用会返回。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中子进程发送的 SIGCHLD 信号包含了子进程的信息，比如进程 ID、进程状态、进程使用 CPU 的时间等。&lt;/p&gt;
&lt;p&gt;在子进程退出时，它的进程描述符不会立即释放，这是为了让父进程得到子进程信息，父进程通过 wait() 和 waitpid() 来获得一个已经退出的子进程的信息。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;!-- &lt;img src=&#34;https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/flow.png&#34; width=&#34;&#34;/&gt; --&gt; &lt;/div&gt;&lt;br&gt;
&lt;h3 id=&#34;wait&#34;&gt;wait()&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;pid_t&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;wait&lt;/span&gt;(&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt; *&lt;span style=&#34;color:#268bd2&#34;&gt;status&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;父进程调用 wait() 会一直阻塞，直到收到一个子进程退出的 SIGCHLD 信号，之后 wait() 函数会销毁子进程并返回。&lt;/p&gt;
&lt;p&gt;如果成功，返回被收集的子进程的进程 ID；如果调用进程没有子进程，调用就会失败，此时返回 -1，同时 errno 被置为 ECHILD。&lt;/p&gt;
&lt;p&gt;参数 status 用来保存被收集的子进程退出时的一些状态，如果对这个子进程是如何死掉的毫不在意，只想把这个子进程消灭掉，可以设置这个参数为 NULL。&lt;/p&gt;
&lt;h3 id=&#34;waitpid&#34;&gt;waitpid()&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;pid_t&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;waitpid&lt;/span&gt;(&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;pid_t&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;pid&lt;/span&gt;, &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt; *&lt;span style=&#34;color:#268bd2&#34;&gt;status&lt;/span&gt;, &lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;options&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;作用和 wait() 完全相同，但是多了两个可由用户控制的参数 pid 和 options。&lt;/p&gt;
&lt;p&gt;pid 参数指示一个子进程的 ID，表示只关心这个子进程退出的 SIGCHLD 信号。如果 pid=-1 时，那么和 wait() 作用相同，都是关心所有子进程退出的 SIGCHLD 信号。&lt;/p&gt;
&lt;p&gt;options 参数主要有 WNOHANG 和 WUNTRACED 两个选项，WNOHANG 可以使 waitpid() 调用变成非阻塞的，也就是说它会立即返回，父进程可以继续执行其它任务。&lt;/p&gt;
&lt;h3 id=&#34;孤儿进程&#34;&gt;孤儿进程&lt;/h3&gt;
&lt;p&gt;一个父进程退出，而它的一个或多个子进程还在运行，那么这些子进程将成为孤儿进程。&lt;/p&gt;
&lt;p&gt;孤儿进程将被 init 进程（进程号为 1）所收养，并由 init 进程对它们完成状态收集工作。&lt;/p&gt;
&lt;p&gt;由于孤儿进程会被 init 进程收养，所以孤儿进程不会对系统造成危害。&lt;/p&gt;
&lt;h3 id=&#34;僵尸进程&#34;&gt;僵尸进程&lt;/h3&gt;
&lt;p&gt;一个子进程的进程描述符在子进程退出时不会释放，只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出，而父进程并没有调用 wait() 或 waitpid()，那么子进程的进程描述符仍然保存在系统中，这种进程称之为僵尸进程。&lt;/p&gt;
&lt;p&gt;僵尸进程通过 ps 命令显示出来的状态为 Z（zombie）。&lt;/p&gt;
&lt;p&gt;系统所能使用的进程号是有限的，如果产生大量僵尸进程，将因为没有可用的进程号而导致系统不能产生新的进程。&lt;/p&gt;
&lt;p&gt;要消灭系统中大量的僵尸进程，只需要将其父进程杀死，此时僵尸进程就会变成孤儿进程，从而被 init 进程所收养，这样 init 进程就会释放所有的僵尸进程所占有的资源，从而结束僵尸进程。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;鸟哥. 鸟 哥 的 Linux 私 房 菜 基 础 篇 第 三 版[J]. 2009.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ibm.com/developerworks/cn/linux/l-cn-rpmdpkg/index.html&#34;&gt;Linux 平台上的软件包管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://liubigbin.github.io/2016/03/11/Linux-%E4%B9%8B%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E3%80%81%E5%83%B5%E6%AD%BB%E8%BF%9B%E7%A8%8B%E4%B8%8E%E5%AD%A4%E5%84%BF%E8%BF%9B%E7%A8%8B/&#34;&gt;Linux 之守护进程、僵死进程与孤儿进程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link&#34;&gt;What is the difference between a symbolic link and a hard link?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://idea.popcount.org/2012-12-11-linux-process-states/&#34;&gt;Linux process states&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/GUID_Partition_Table&#34;&gt;GUID Partition Table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/kevinhg/article/details/7001719&#34;&gt;详解 wait 和 waitpid 函数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/tianlesoftware/article/details/6009110&#34;&gt;IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.mpchunter.com/s3000/akai-ib-301s-scsi-interface-for-s2800s3000/&#34;&gt;Akai IB-301S SCSI Interface for S2800,S3000&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Parallel_ATA&#34;&gt;Parallel ATA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.thessdreview.com/our-reviews/adata-xpg-sx900-256gb-sata-3-ssd-review-expanded-capacity-and-sandforce-driven-speed/4/&#34;&gt;ADATA XPG SX900 256GB SATA 3 SSD Review – Expanded Capacity and SandForce Driven Speed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blogs.cisco.com/datacenter/decoding-ucs-invicta-part-1&#34;&gt;Decoding UCS Invicta – Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E7%A1%AC%E7%9B%98&#34;&gt;硬盘&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.differencebetween.info/difference-between-sas-and-sata&#34;&gt;Difference between SAS and SATA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/BIOS&#34;&gt;BIOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://web.cs.ucla.edu/classes/fall14/cs111/scribe/11a/index.html&#34;&gt;FILE SYSTEM DESIGN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
      </description>
    </item>
    
    <item>
      <title>Blog: Python爬虫学习</title>
      <link>https://taobo.site/blog/2020/10/11/python%E7%88%AC%E8%99%AB%E5%AD%A6%E4%B9%A0/</link>
      <pubDate>Sun, 11 Oct 2020 00:00:00 +0000</pubDate>
      
      <guid>https://taobo.site/blog/2020/10/11/python%E7%88%AC%E8%99%AB%E5%AD%A6%E4%B9%A0/</guid>
      <description>
        
        
        &lt;p&gt;Python 爬虫入门学习。&lt;/p&gt;
&lt;h2 id=&#34;python-爬虫&#34;&gt;Python 爬虫&lt;/h2&gt;
&lt;h3 id=&#34;1-准备环境&#34;&gt;1. 准备环境&lt;/h3&gt;
&lt;p&gt;借助 &lt;code&gt;requests&lt;/code&gt; 网络库请求 &lt;code&gt;html&lt;/code&gt; 页面，而 &lt;code&gt;beautifulsoup4&lt;/code&gt; 库则是一个可以从 &lt;code&gt;HTML&lt;/code&gt; 或 &lt;code&gt;XML&lt;/code&gt; 文件中提取数据的 Python 库, 然后安装 &lt;code&gt;lxml&lt;/code&gt; 解析器，&lt;code&gt;BeautifulSoup&lt;/code&gt; 可以使用它来解析 &lt;code&gt;HTML&lt;/code&gt;，然后提取内容。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip install requests pip install beautifulsoup4 pip install lxml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-beautifulsoup-库的使用&#34;&gt;2. BeautifulSoup 库的使用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/Albert-Lee/p/6232745.html&#34;&gt;BeautifulSoup 对象的类型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-参考资料&#34;&gt;3. 参考资料&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/Albert-Lee/p/6226699.html&#34;&gt;Python 爬虫小白入门系列教程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://2.python-requests.org/zh_CN/latest/user/quickstart.html&#34;&gt;快速上手 Requests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://beautifulsoup.readthedocs.io/zh_CN/latest/&#34;&gt;Beautiful Soup 4.4.0 文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
      </description>
    </item>
    
    <item>
      <title>Blog: Python基础学习</title>
      <link>https://taobo.site/blog/2020/09/21/python%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0/</link>
      <pubDate>Mon, 21 Sep 2020 13:57:40 +0800</pubDate>
      
      <guid>https://taobo.site/blog/2020/09/21/python%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0/</guid>
      <description>
        
        
        &lt;p&gt;Linux 环境下的 Python 开发基础教程。&lt;/p&gt;
&lt;h2 id=&#34;一开发环境&#34;&gt;一、开发环境&lt;/h2&gt;
&lt;h3 id=&#34;1安装依赖库&#34;&gt;1.安装依赖库&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2下载安装包&#34;&gt;2.下载安装包&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# wget下载安装包并解压至 /usr/local/python3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -C /usr/local -xzvf Python-3.7.0.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;cd&lt;/span&gt; /usr/local/Python-3.7.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3配置与安装&#34;&gt;3.配置与安装&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./configure --prefix=/usr/local/python3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make &amp;amp;&amp;amp; make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 上面的参数，--prefix 是预期安装目录，--enable-optimizations 是优化选项（LTO，PGO 等）加上这个 flag 编译后，性能有 10% 左右的优化，但是这会明显的增加编译时间。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 安装成功会提示如下消息:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Collecting setuptools
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Collecting pip
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Installing collected packages: setuptools, pip
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Successfully installed pip-10.0.1 setuptools-39.0.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;4创建软链接&#34;&gt;4.创建软链接&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ln -s /usr/local/python3/bin/python3.7 /usr/local/bin/python3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ln -s /usr/local/python3/bin/pip3.7 /usr/local/bin/pip3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;5正确使用-vim-编写第一个-python-程序&#34;&gt;5.正确使用 vim 编写第一个 python 程序&lt;/h3&gt;
&lt;p&gt;首先在 ~/.vimrc 配置 python 缩进：&lt;code&gt;autocmd FileType python set tabstop=4 | set expandtab | set autoindent&lt;/code&gt;&lt;br&gt;
示例程序：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;#!/usr/local/bin/python3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# -*- coding:utf-8 -*-&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;20&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt; % &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; == &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;x&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;6可变对象与不可变对象&#34;&gt;6.可变对象与不可变对象&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;可变对象：list dict set&lt;/li&gt;
&lt;li&gt;不可变对象：tuple string int float bool&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/34395671&#34;&gt;可变对象与不可变对象比较&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二运算符&#34;&gt;二、运算符&lt;/h2&gt;
&lt;h3 id=&#34;1-格式化输出s-与-fexp&#34;&gt;1. 格式化输出——%s 与 f&amp;rsquo;{exp}&#39;&lt;/h3&gt;
&lt;p&gt;格式化字符串除了%s，还可以写为 f&amp;rsquo;{表达式}&#39;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;Tom&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;years&lt;/span&gt; = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1998&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;name = &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;, Year = &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;%d&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;&lt;/span&gt; % (&lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;years&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;name = &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;, Year = &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;years&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-数据类型转换&#34;&gt;2. 数据类型转换&lt;/h3&gt;
&lt;h4 id=&#34;21-input&#34;&gt;2.1 input&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 当程序执⾏到 input ，等待⽤户输⼊，输⼊完成之后才继续向下执⾏。&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 在 Python 中， input 接收⽤户输⼊后，⼀般存储到变量，⽅便使⽤。&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 在 Python 中， input 会把接收到的任意⽤户输⼊的数据都当做字符串处理。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;22-转换数据类型的函数&#34;&gt;2.2 转换数据类型的函数&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;函数&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=yelloerw&gt;int(x [,base ])&lt;/td&gt;
&lt;td&gt;将 x 转换为⼀个整数&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=yelloerw&gt;float(x )&lt;/td&gt;
&lt;td&gt;将 x 转换为⼀个浮点数&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=yelloerw&gt;str(x )&lt;/td&gt;
&lt;td&gt;将对象 x 转换为字符串&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=yelloerw&gt;eval(str )&lt;/td&gt;
&lt;td&gt;⽤来计算在字符串中的有效 Python 表达式,并返回⼀个对象&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=yelloerw&gt;tuple(s )&lt;/td&gt;
&lt;td&gt;将序列 s 转换为⼀个元组&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=yelloerw&gt;list(s )&lt;/td&gt;
&lt;td&gt;将序列 s 转换为⼀个列表 &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;chr(x )&lt;/td&gt;
&lt;td&gt;将⼀个整数转换为⼀个 Unicode 字符&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ord(x )&lt;/td&gt;
&lt;td&gt;将⼀个字符转换为它的 ASCII 整数值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hex(x )&lt;/td&gt;
&lt;td&gt;将⼀个整数转换为⼀个⼗六进制字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;oct(x )&lt;/td&gt;
&lt;td&gt;将⼀个整数转换为⼀个⼋进制字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bin(x )&lt;/td&gt;
&lt;td&gt;将⼀个整数转换为⼀个⼆进制字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;complex(real [,imag ])&lt;/td&gt;
&lt;td&gt;创建⼀个复数，real 为实部，imag 为虚部&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;repr(x )&lt;/td&gt;
&lt;td&gt;将对象 x 转换为表达式字符串&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;23-示例&#34;&gt;2.3 示例&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 1. float() -- 转换成浮点型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;num1&lt;/span&gt; = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;float&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;num1&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;type&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;float&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;num1&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 2. str() -- 转换成字符串类型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;num2&lt;/span&gt; = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;type&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;str&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;num2&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 3. tuple() -- 将⼀个序列转换成元组&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;list1&lt;/span&gt; = [&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;20&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;30&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;tuple&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;list1&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;type&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;tuple&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;list1&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 4. eval() -- 将字符串中的数据转换成Python表达式原本类型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;str1&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;10&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;str2&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;[1, 2, 3]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;str3&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;(1000, 2000, 3000)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;type&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;eval&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;str1&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;type&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;eval&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;str2&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;type&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;eval&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;str3&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-运算符&#34;&gt;3. 运算符&lt;/h3&gt;
&lt;h4 id=&#34;31-分类&#34;&gt;3.1 分类&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;算数运算符&lt;/li&gt;
&lt;li&gt;赋值运算符&lt;/li&gt;
&lt;li&gt;复合赋值运算符&lt;/li&gt;
&lt;li&gt;⽐较运算符&lt;/li&gt;
&lt;li&gt;逻辑运算符&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;32-py-风格的运算符&#34;&gt;3.2 py 风格的运算符&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;算数运算符&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;运算符&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;th&gt;实例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;//&lt;/td&gt;
&lt;td&gt;整除&lt;/td&gt;
&lt;td&gt;9 // 4 输出结果为 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;**&lt;/td&gt;
&lt;td&gt;指数&lt;/td&gt;
&lt;td&gt;2 ** 4 输出结果为 16，即 &lt;code&gt;2*2*2*2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;逻辑运算符&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;运算符&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;th&gt;实例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;and&lt;/td&gt;
&lt;td&gt;逻辑与&lt;/td&gt;
&lt;td&gt;True and False， 返回 False&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;or&lt;/td&gt;
&lt;td&gt;逻辑或&lt;/td&gt;
&lt;td&gt;False or True， 返回 True&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;not&lt;/td&gt;
&lt;td&gt;逻辑非&lt;/td&gt;
&lt;td&gt;not True 返回 False&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;33-拓展&#34;&gt;3.3 拓展&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;数字之间的逻辑运算&lt;/strong&gt;&lt;br&gt;
&lt;font color=red&gt;and 运算符，只要有⼀个值为 0，则结果为 0，否则结果为最后⼀个⾮ 0 数字&lt;br&gt;
or 运算符，只有所有值为 0 结果才为 0，否则结果为第⼀个⾮ 0 数字&lt;/font&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;a&lt;/span&gt; = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;b&lt;/span&gt; = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;c&lt;/span&gt; = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# and运算符，只要有⼀个值为0，则结果为0，否则结果为最后⼀个⾮0数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;b&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;c&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;b&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# or运算符，只有所有值为0结果才为0，否则结果为第⼀个⾮0数字&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;b&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;c&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;c&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;三字符串&#34;&gt;三、字符串&lt;/h2&gt;
&lt;h3 id=&#34;1-修改字符串大小写&#34;&gt;1. 修改字符串大小写&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;firstName&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;ada&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;lastName&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;LOVER&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;firstName&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;() + &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; + &lt;span style=&#34;color:#268bd2&#34;&gt;lastName&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;())  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# Ada Lover&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;firstName&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;upper&lt;/span&gt;())  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# ADA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;lastName&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;lower&lt;/span&gt;())  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# lover&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-删除空白&#34;&gt;2. 删除空白&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; python3 &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;lstrip&lt;/span&gt;())  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# &amp;#39;python3 &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;rstrip&lt;/span&gt;())  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# &amp;#39; python3&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;strip&lt;/span&gt;())  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# &amp;#39;python3&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-字符串长度&#34;&gt;3. 字符串长度&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; python3 &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;__len__&lt;/span&gt;())  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;len&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt;))  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;4-if-示例程序&#34;&gt;4. if 示例程序&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt; = [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;audi&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;bmw&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;subaru&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;toyota&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt; == &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;bmw&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;upper&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;5-条件测试&#34;&gt;5. 条件测试&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;and, or, in, not in&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt; = [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;audi&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;bmw&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;subaru&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;toyota&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;lower&lt;/span&gt;() == &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;audi&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;] == &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;bo&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;True&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;elif&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;] == &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;bmw&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;())  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# Bmw&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# in&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;audi&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;bo&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# not in&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;bo&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;cars&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;四列表&#34;&gt;四、列表&lt;/h2&gt;
&lt;h3 id=&#34;1-列表&#34;&gt;1. 列表&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt; = [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;trek&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;cannondale&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;redline&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;speci&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;trek&amp;#39;, &amp;#39;cannondale&amp;#39;, &amp;#39;redline&amp;#39;, &amp;#39;speci&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-增加元素&#34;&gt;2. 增加元素&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# add&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;hongqi&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;trek&amp;#39;, &amp;#39;cannondale&amp;#39;, &amp;#39;redline&amp;#39;, &amp;#39;speci&amp;#39;, &amp;#39;hongqi&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# insert&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;insert&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;,&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;beijing&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;beijing&amp;#39;, &amp;#39;trek&amp;#39;, &amp;#39;cannondale&amp;#39;, &amp;#39;redline&amp;#39;, &amp;#39;speci&amp;#39;, &amp;#39;hongqi&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-删除元素&#34;&gt;3. 删除元素&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt; = [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;trek&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;redline&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;speci&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;trek&amp;#39;, &amp;#39;redline&amp;#39;, &amp;#39;speci&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;31-使用-del-语句删除元素&#34;&gt;3.1 使用 del 语句删除元素&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;del&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;redline&amp;#39;, &amp;#39;speci&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;32-使用方法-pop-删除元素&#34;&gt;3.2 使用方法 pop 删除元素&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bics&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pop&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bics&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# redline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;trek&amp;#39;, &amp;#39;speci&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pop&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;trek&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;33-根据值删除元素&#34;&gt;3.3 根据值删除元素&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;speci&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;trek&amp;#39;, &amp;#39;redline&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;font color = red&gt; remove 方法只删除第一个指定的值&lt;/font&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-组织列表&#34;&gt;4. 组织列表&lt;/h3&gt;
&lt;h4 id=&#34;41-sort-永久性排序&#34;&gt;4.1 sort 永久性排序&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;sort&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;redline&amp;#39;, &amp;#39;speci&amp;#39;, &amp;#39;trek&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;sort&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;reverse&lt;/span&gt;=&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;trek&amp;#39;, &amp;#39;speci&amp;#39;, &amp;#39;redline&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;42-sorted-函数临时对列表排序&#34;&gt;4.2 sorted 函数临时对列表排序&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;sorted&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#cb4b16&#34;&gt;sorted&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;reverse&lt;/span&gt;=&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;True&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;43-reverse-方法反转列表&#34;&gt;4.3 reverse 方法反转列表&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;reverse&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;bicycles&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;speci&amp;#39;, &amp;#39;redline&amp;#39;, &amp;#39;trek&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;5-操作列表&#34;&gt;5. 操作列表&lt;/h3&gt;
&lt;h4 id=&#34;51-列表解析&#34;&gt;5.1 列表解析&lt;/h4&gt;
&lt;p&gt;&lt;font color = red&gt;列表解析将 for 循环和创建新元素的代码合并为一行，并自动附加新元素&lt;/font&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt; = [&lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; ** &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;11&lt;/span&gt;)]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;52-列表切片&#34;&gt;5.2 列表切片&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;指定范围切片：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt; = [&lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; ** &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;11&lt;/span&gt;)]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;:&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt;])  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [1, 4]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;[:&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;4&lt;/span&gt;])  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [1, 4, 9, 16]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;[&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;5&lt;/span&gt;:])  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [36, 49, 64, 81, 100]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;[-&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;3&lt;/span&gt;:])  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [64, 81, 100]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;遍历切片：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt; = [&lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; ** &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;11&lt;/span&gt;)]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;[:&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;4&lt;/span&gt;]:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;val&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;end&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 1 4 9 16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;53-复制列表&#34;&gt;5.3 复制列表&lt;/h4&gt;
&lt;p&gt;&lt;font color = red&gt;必须使用整个列表切片的方法来确保复制的是列表的副本，而不是使用 &amp;lsquo;=&amp;lsquo;进行复制&lt;/font&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt; = [&lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; ** &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;6&lt;/span&gt;)]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;myNumbers&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;[:]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;36&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;myNumbers&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;49&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [1, 4, 9, 16, 25, 36]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;myNumbers&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [1, 4, 9, 16, 25, 49]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;6-元组&#34;&gt;6. 元组&lt;/h3&gt;
&lt;p&gt;&lt;font color = red&gt;Python 将不能修改的值称为不可变的， 而不可变的列表被称为元组。
元组中元素虽然不可以被改变，但可以通过赋值的方法改变元组变量的值
&lt;/font&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt; = &lt;span style=&#34;color:#cb4b16&#34;&gt;tuple&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; ** &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;6&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# (1, 4, 9, 16, 25)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt; = &lt;span style=&#34;color:#cb4b16&#34;&gt;tuple&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; ** &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;4&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;numbers&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# (1, 4, 9)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;五字典&#34;&gt;五、字典&lt;/h2&gt;
&lt;h3 id=&#34;1-示例程序&#34;&gt;1. 示例程序&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt; = {&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;color&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;green&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;5&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 访问字典键-值对&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;color&amp;#39;&lt;/span&gt;], &lt;span style=&#34;color:#268bd2&#34;&gt;end&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 添加键-值对&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;x_position&amp;#39;&lt;/span&gt;] = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;y_position&amp;#39;&lt;/span&gt;] = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# {&amp;#39;color&amp;#39;: &amp;#39;green&amp;#39;, &amp;#39;points&amp;#39;: 5, &amp;#39;x_position&amp;#39;: 0, &amp;#39;y_position&amp;#39;: 25}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 删除键-值对&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;del&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# {&amp;#39;color&amp;#39;: &amp;#39;green&amp;#39;, &amp;#39;x_position&amp;#39;: 0, &amp;#39;y_position&amp;#39;: 25}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-遍历字典&#34;&gt;2. 遍历字典&lt;/h3&gt;
&lt;h4 id=&#34;21-遍历所有键值对&#34;&gt;2.1 遍历所有键值对&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt; = {&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;x_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;y_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;25&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;key&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;items&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;Key = &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;, Value = &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 输出：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# Key = x_position, Value = 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# Key = y_position, Value = 25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;22-遍历字典所有的键&#34;&gt;2.2 遍历字典所有的键&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt; = {&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;x_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;y_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;25&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;names&lt;/span&gt; = &lt;span style=&#34;color:#cb4b16&#34;&gt;list&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;keys&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;names&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# [&amp;#39;x_position&amp;#39;, &amp;#39;y_position&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;23-按顺序遍历字典中的所有键&#34;&gt;2.3 按顺序遍历字典中的所有键&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt; = {&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;x_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;y_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;25&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;test1&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;test2&amp;#39;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;sorted&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;keys&lt;/span&gt;()):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;key&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;end&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;24-遍历字典所有的值&#34;&gt;2.4 遍历字典所有的值&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt; = {&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;x_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;y_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;25&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;test1&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;test2&amp;#39;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;values&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;value&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-嵌套&#34;&gt;3. 嵌套&lt;/h3&gt;
&lt;h4 id=&#34;31-字典列表&#34;&gt;3.1 字典列表&lt;/h4&gt;
&lt;p&gt;&lt;font color=red&gt;即在列表中嵌套字典&lt;/font&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt; = {&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;x_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;y_position&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;25&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;aliens&lt;/span&gt; = []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;30&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;aliens&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;alien&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;app&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;aliens&lt;/span&gt;[:&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;5&lt;/span&gt;]:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;app&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;32-字典中存储列表&#34;&gt;3.2 字典中存储列表&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt; = {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;jen&amp;#39;&lt;/span&gt;: [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;python&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;rust&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;sarah&amp;#39;&lt;/span&gt;: [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;edward&amp;#39;&lt;/span&gt;: [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;ruby&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;go&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;phil&amp;#39;&lt;/span&gt;: [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;shell&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;php&amp;#39;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;languages&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;favoriteLan&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;items&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt; + &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;() + &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&amp;#39;s favorite languages are: &amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;language&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;languages&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;\t&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt; + &lt;span style=&#34;color:#268bd2&#34;&gt;language&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;33-字典中存储字典&#34;&gt;3.3 字典中存储字典&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;users&lt;/span&gt; = {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;torvalds&amp;#39;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;first&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;linus&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;last&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;torvalds&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;location&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;finland&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;buterin&amp;#39;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;first&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;vitalik&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;last&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;buterin&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;location&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;russia&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;user&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;users&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;items&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;Username: &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;first: &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;user&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;first&amp;#39;&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;, last: &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;user&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;last&amp;#39;&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;, location: &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;user&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;location&amp;#39;&lt;/span&gt;].&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Username: Torvalds
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;first: Linus, last: Torvalds, location: Finland
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Username: Buterin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;first: Vitalik, last: Buterin, location: Russia
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;六函数&#34;&gt;六、函数&lt;/h2&gt;
&lt;h3 id=&#34;1-函数示例&#34;&gt;1. 函数示例&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;greet_user&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;username&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&amp;#34;&amp;#34;greet example&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Hello, &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;username&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;greet_user&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;siya&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;greet_user&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;__doc__&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-传递实参&#34;&gt;2. 传递实参&lt;/h3&gt;
&lt;h4 id=&#34;21-位置实参&#34;&gt;2.1 位置实参&lt;/h4&gt;
&lt;p&gt;&lt;font color=red&gt;实参和形参完全对应的函数参数关联方式&lt;/font&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;describe_pet&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;animal_type&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;pet_name&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;I have a &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;animal_type&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;My &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;animal_type&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;s name is &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;pet_name&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;describe_pet&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;hamster&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;harry&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;22-关键字实参&#34;&gt;2.2 关键字实参&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;describe_pet&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;animal_type&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;hamster&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;pet_name&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;harry&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;describe_pet&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;pet_name&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;harry&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;animal_type&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;hamster&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;23-默认值&#34;&gt;2.3 默认值&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;describe_pet&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;animal_type&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;pet_name&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;harry&amp;#39;&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;I have a &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;animal_type&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;My &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;animal_type&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;s name is &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;pet_name&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;describe_pet&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;hamster&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;vitalik&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;describe_pet&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;dog&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-返回值&#34;&gt;3. 返回值&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;get_formatted_name&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;first_name&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;last_name&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#268bd2&#34;&gt;full_name&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;first_name&lt;/span&gt; + &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; + &lt;span style=&#34;color:#268bd2&#34;&gt;last_name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;full_name&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;full_name&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;get_formatted_name&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;vitalik&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;buterin&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;full_name&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# Vitalik Buterin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;4-传递列表&#34;&gt;4. 传递列表&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;aTob&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;nums1&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;nums2&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;nums1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;nums2&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;append&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;nums1&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pop&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;nums1&lt;/span&gt; = [&lt;span style=&#34;color:#268bd2&#34;&gt;val&lt;/span&gt; * &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;val&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;range&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;)]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;nums2&lt;/span&gt; = []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;aTob&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;nums1&lt;/span&gt;[:], &lt;span style=&#34;color:#268bd2&#34;&gt;nums2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;5-传递任意数量的实参&#34;&gt;5. 传递任意数量的实参&lt;/h3&gt;
&lt;h4 id=&#34;51-示例程序&#34;&gt;5.1 示例程序&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;aTob&lt;/span&gt;(*&lt;span style=&#34;color:#268bd2&#34;&gt;nums&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;nums&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;aTob&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;4&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# (1, 2, 4)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;52-结合使用位置实参与任意数量实参&#34;&gt;5.2 结合使用位置实参与任意数量实参&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;aTob&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;nums1&lt;/span&gt;, *&lt;span style=&#34;color:#268bd2&#34;&gt;nums2&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;nums1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;nums2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;aTob&lt;/span&gt;(&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;4&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# (2, 4)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;53-使用任意数量的关键字实参&#34;&gt;5.3 使用任意数量的关键字实参&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;aTob&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;first&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;last&lt;/span&gt;, **&lt;span style=&#34;color:#268bd2&#34;&gt;nums&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;first&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;last&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;nums&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;aTob&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;vitalik&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;buterin&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;age&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;31&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;sex&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;male&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# Vitalik Buterin.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# {&amp;#39;age&amp;#39;: 31, &amp;#39;sex&amp;#39;: &amp;#39;male&amp;#39;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;七类&#34;&gt;七、类&lt;/h2&gt;
&lt;h3 id=&#34;1-类示例&#34;&gt;1. 类示例&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;Dog&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;__init__&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;age&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;age&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;age&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;sit&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt; is now sitting.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;roll_over&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt; rolled over.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;dog&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Dog&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;vitalik&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;20&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;dog&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;sit&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;dog&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;roll_over&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-类的继承&#34;&gt;2. 类的继承&lt;/h3&gt;
&lt;h4 id=&#34;21-继承示例&#34;&gt;2.1 继承示例&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;基类为 Car , 派生类为 ElectricCar&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;Car&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;__init__&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;make&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;model&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;year&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;make&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;make&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;model&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;year&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;year&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;odometer_reading&lt;/span&gt; = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;get_descriptive_name&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;long_name&lt;/span&gt; = &lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;year&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;make&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;model&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;long_name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;read_odometer&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;This car has &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;odometer_reading&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt; miles on it.&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;update_odometer&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;mileage&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;mileage&lt;/span&gt; &amp;gt;= &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;odometer_reading&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;odometer_reading&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;mileage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;You can&amp;#39;t roll back an odometer!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;increment_odometer&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;miles&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;odometer_reading&lt;/span&gt; += &lt;span style=&#34;color:#268bd2&#34;&gt;miles&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;ElectricCar&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;Car&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;__init__&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;make&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;model&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;year&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;super&lt;/span&gt;().&lt;span style=&#34;color:#268bd2&#34;&gt;__init__&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;make&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;model&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;year&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;battery_size&lt;/span&gt; = &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;70&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;describe_battery&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;This car has a &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;battery_size&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;-kWh battery&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;ElectricCar&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;tesla&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;model s&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;2016&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;longName&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;get_descriptive_name&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;longName&lt;/span&gt;)  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 2016 tesla model s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;describe_battery&lt;/span&gt;()  &lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# This car has a 70-kWh battery&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;22-重写父类方法&#34;&gt;2.2 重写父类方法&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;Car&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;fill_gas_tank&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859900&#34;&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;ElectricCar&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;Car&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;fill_gas_tank&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;This car doesn&amp;#39;t need a gas tank!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;ElectricCar&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;car&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;fill_gas_tank&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-使用-ordereddict-类&#34;&gt;3. 使用 OrderedDict 类&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;collections&lt;/span&gt; &lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;OrderedDict&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;favorite_languages&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;OrderedDict&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;favorite_languages&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;jen&amp;#39;&lt;/span&gt;] = [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;python&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;rust&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;favorite_languages&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;sarah&amp;#39;&lt;/span&gt;] = [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;favorite_languages&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;edward&amp;#39;&lt;/span&gt;] = [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;ruby&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;go&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;favorite_languages&lt;/span&gt;[&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;phil&amp;#39;&lt;/span&gt;] = [&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;shell&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;php&amp;#39;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;languages&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;favorite_languages&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;items&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;s languages: &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;end&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;language&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;languages&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;language&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;()&lt;span style=&#34;color:#2aa198&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;end&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;八gui-编程&#34;&gt;八、GUI 编程&lt;/h2&gt;
&lt;h3 id=&#34;1-gui-编程基础tkinter&#34;&gt;1. GUI 编程基础(Tkinter)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;常用 Python GUI 库如下：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tkinter： Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。&lt;/li&gt;
&lt;li&gt;wxPython：wxPython 是一款开源软件，是 Python 语言的一套优秀的 GUI 图形库，允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。&lt;/li&gt;
&lt;li&gt;Jython：Jython 程序可以和 Java 无缝集成。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;11-tkinter-编程&#34;&gt;1.1 Tkinter 编程&lt;/h4&gt;
&lt;p&gt;创建一个 GUI 程序:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1、导入 Tkinter 模块&lt;/li&gt;
&lt;li&gt;2、创建控件&lt;/li&gt;
&lt;li&gt;3、指定这个控件的 master， 即这个控件属于哪一个&lt;/li&gt;
&lt;li&gt;4、告诉 GM(geometry manager) 有一个控件产生了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# This is a sample Python script.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# Press Shift+F10 to execute it or replace it with your code.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;top&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Tk&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#93a1a1;font-style:italic&#34;&gt;# 进入消息循环&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;top&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;mainloop&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行之后显示：&lt;br&gt;
&lt;img src=&#34;https://s1.ax1x.com/2020/10/31/BUxYqA.png&#34; alt=&#34;BUxYqA.png&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;12-tkinter-组件&#34;&gt;1.2 Tkinter 组件&lt;/h4&gt;
&lt;p&gt;目前有 15 种 Tkinter 的部件。我们提出这些部件以及一个简短的介绍，在下面的表:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;控件&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&lt;a href=&#34;https://www.runoob.com/python/python-tk-button.html&#34;&gt;Button&lt;/a&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;按钮控件；在程序中显示按钮。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&lt;a href=&#34;https://www.runoob.com/python/python-tk-canvas.html&#34;&gt;Canvas&lt;/a&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;画布控件；显示图形元素如线条或文本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&lt;a href=&#34;https://www.runoob.com/python/python-tk-checkbutton.html&#34;&gt;Checkbutton&lt;/a&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;多选框控件；用于在程序中提供多项选择框&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&lt;a href=&#34;https://www.runoob.com/python/python-tkinter-entry.html&#34;&gt;Entry&lt;/a&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;输入控件；用于显示简单的文本内容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&lt;a href=&#34;https://www.runoob.com/python/python-tk-frame.html&#34;&gt;Frame&lt;/a&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;框架控件；在屏幕上显示一个矩形区域，多用来作为容器&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;&lt;a href=&#34;https://www.runoob.com/python/python-tk-label.html&#34;&gt;Label&lt;/a&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;标签控件；可以显示文本和位图&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Listbox&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;列表框控件；在 Listbox 窗口小部件是用来显示一个字符串列表给用户&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Menubutton&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;菜单按钮控件，用于显示菜单项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Menu&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;菜单控件；显示菜单栏,下拉菜单和弹出菜单&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Message&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;消息控件；用来显示多行文本，与 label 比较类似&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Radiobutton&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;单选按钮控件；显示一个单选的按钮状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Scale&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;范围控件；显示一个数值刻度，为输出限定范围的数字区间&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Scrollbar&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;滚动条控件，当内容超过可视化区域时使用，如列表框。.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Text&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;文本控件；用于显示多行文本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Toplevel&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;容器控件；用来提供一个单独的对话框，和 Frame 比较类似&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Spinbox&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;输入控件；与 Entry 类似，但是可以指定输入范围值&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;PanedWindow&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;PanedWindow 是一个窗口布局管理的插件，可以包含一个或者多个子控件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;LabelFrame&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;labelframe 是一个简单的容器控件。常用与复杂的窗口布局。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;tkMessageBox&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;用于显示你应用程序的消息框。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;13-标准属性&#34;&gt;1.3 标准属性&lt;/h4&gt;
&lt;p&gt;标准属性也就是所有控件的共同属性，如大小，字体和颜色等等。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;属性&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Dimension&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;控件大小；&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Color&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;控件颜色；&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Font&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;控件字体；&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Anchor&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;锚点；&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Relief&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;控件样式；&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Bitmap&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;位图；&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Cursor&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;光标；&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;14-几何管理&#34;&gt;1.4 几何管理&lt;/h4&gt;
&lt;p&gt;Tkinter 控件有特定的几何状态管理方法，管理整个控件区域组织，以下是 Tkinter 公开的几何管理类：包、网格、位置&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;几何方法&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;pack()&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;包装；&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;grid()&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;网格；&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;place()&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;位置；&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;2-tkinter-编程实战&#34;&gt;2. Tkinter 编程实战&lt;/h3&gt;
&lt;h4 id=&#34;21-frame-与-pack-的初体验&#34;&gt;2.1 Frame 与 pack 的初体验&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt; &lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;say_hi&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cb4b16&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;hello ~ !&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;root&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Tk&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;frame1&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Frame&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;root&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bd&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;128&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;cursor&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;plus&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bg&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;white&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;frame2&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Frame&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;root&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bd&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;128&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;cursor&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;circle&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bg&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;pink&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;root&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;tkinter frame&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;label&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Label&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;frame1&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;text&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Label&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bg&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;red&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;label&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;fill&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;X&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;hi_there&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Button&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;frame2&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;text&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;say hi~&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;command&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;say_hi&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;hi_there&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;frame1&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;padx&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;pady&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;side&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;RIGHT&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;frame2&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;padx&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;pady&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;side&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;RIGHT&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;root&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;mainloop&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行之后显示：&lt;br&gt;
&lt;img src=&#34;https://s1.ax1x.com/2020/10/31/BaVaoF.md.png&#34; alt=&#34;BaVaoF.md.png&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;22-python-tkinter-文本框entry&#34;&gt;2.2 Python Tkinter 文本框（Entry）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;你如果需要输入多行文本，可以使用 Text 组件。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你如果需要显示一行或多行文本且不允许用户修改，你可以使用 Label 组件。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;top&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Tk&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;top&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;emergency system&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;frame&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Frame&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;top&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bd&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;256&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bg&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;white&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;l1&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Label&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;frame&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;text&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;w&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;Entry&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;frame&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bd&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;highlightcolor&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;red&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;fg&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;black&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;l1&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;side&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;LEFT&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;w&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;side&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;LEFT&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;frame&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;padx&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;pady&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;top&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;mainloop&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-廖雪峰图形编程入门&#34;&gt;3. 廖雪峰图形编程入门&lt;/h3&gt;
&lt;p&gt;加入一个文本框，让用户可以输入文本，然后点按钮后，弹出消息对话框。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#586e75;background-color:#eee8d5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter&lt;/span&gt; &lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dc322f;font-weight:bold&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;tkinter.messagebox&lt;/span&gt; &lt;span style=&#34;color:#859900&#34;&gt;as&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;messagebox&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859900&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#cb4b16&#34;&gt;Application&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;Frame&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;__init__&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;master&lt;/span&gt;=&lt;span style=&#34;color:#859900;font-weight:bold&#34;&gt;None&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;Frame&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;__init__&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;master&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bd&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;128&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bg&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;green&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;createWidgets&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;createWidgets&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;nameInput&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Entry&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bd&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;12&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;bg&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;white&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;nameInput&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;quitButton&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Button&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;text&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;Quit&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;command&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;quit&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;helloButton&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Button&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;text&lt;/span&gt;=&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;command&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;hello&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;helloButton&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;side&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;LEFT&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;padx&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;pady&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;quitButton&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;pack&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;side&lt;/span&gt;=&lt;span style=&#34;color:#268bd2&#34;&gt;LEFT&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;padx&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#268bd2&#34;&gt;pady&lt;/span&gt;=&lt;span style=&#34;color:#2aa198;font-weight:bold&#34;&gt;10&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#859900&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#268bd2&#34;&gt;hello&lt;/span&gt;(&lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;self&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;nameInput&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;get&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#268bd2&#34;&gt;messagebox&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;showinfo&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Message&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Hello &lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;&lt;/span&gt; % &lt;span style=&#34;color:#268bd2&#34;&gt;name&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;app&lt;/span&gt; = &lt;span style=&#34;color:#268bd2&#34;&gt;Application&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;master&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;title&lt;/span&gt;(&lt;span style=&#34;color:#2aa198&#34;&gt;&amp;#34;Hello World!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#268bd2&#34;&gt;app&lt;/span&gt;.&lt;span style=&#34;color:#268bd2&#34;&gt;mainloop&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://s1.ax1x.com/2020/10/31/BaYUw4.png&#34; alt=&#34;32&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-参考资料&#34;&gt;4. 参考资料&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/liuxu0703/article/details/54428405&#34;&gt;[Tkinter 教程 12] 布局管理 (Pack Place Grid)&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://www.cnblogs.com/shwee/p/9427975.html&#34;&gt;Python GUI 之 tkinter 窗口视窗教程大集合（看这篇就够了）&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;九元类&#34;&gt;九、元类&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.liaoxuefeng.com/wiki/1016959663602400/1017592449371072&#34;&gt;廖雪峰使用元类&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/ArsenalfanInECNU/p/9036407.html&#34;&gt;谈谈 Python 中元类 Metaclass(一)：什么是元类&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/ArsenalfanInECNU/p/9100874.html&#34;&gt;谈谈 Python 中元类 Metaclass(二)：ORM 实践&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/JetpropelledSnake/p/9094103.html&#34;&gt;深入理解 Python 中的元类(metaclass)&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    
  </channel>
</rss>
