-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpython-modules.html
199 lines (199 loc) · 49.8 KB
/
python-modules.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=2"><meta name="theme-color" content="#222"><meta http-equiv="X-UA-COMPATIBLE" content="IE=edge,chrome=1"><meta name="renderer" content="webkit"><link rel="icon" type="image/ico" sizes="32x32" href="/assets/favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png"><link rel="alternate" href="/rss.xml" title="Jiankychen's Blog" type="application/rss+xml"><link rel="alternate" href="/atom.xml" title="Jiankychen's Blog" type="application/atom+xml"><link rel="alternate" type="application/json" title="Jiankychen's Blog" href="https://jiankychen.github.io/feed.json"><link rel="preconnect" href="https://lf9-cdn-tos.bytecdntp.com"><link rel="preconnect" href="https://at.alicdn.com"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Mulish:400,400italic,700,700italic%7CFredericka%20the%20Great:400,400italic,700,700italic%7CNoto%20Serif%20JP:400,400italic,700,700italic%7CNoto%20Serif%20SC:400,400italic,700,700italic%7CInconsolata:400,400italic,700,700italic&display=swap&subset=latin,latin-ext" media="none" onload="this.media='all'"><link rel="stylesheet" href="/css/app.css?v=0.4.2"><link rel="modulepreload" href="/js/chunk-7IVLRIQ3.js"><link rel="modulepreload" href="/js/chunk-IXT6LZJL.js"><link rel="modulepreload" href="/js/chunk-PHSEV26P.js"><link rel="modulepreload" href="/js/chunk-XHQGHZCW.js"><link rel="modulepreload" href="/js/comments-TUWNDU5I.js"><link rel="modulepreload" href="/js/post-P6IN2S3Y.js"><link rel="modulepreload" href="/js/quicklink-HAJEHOPK.js"><link rel="modulepreload" href="/js/search-WFXK2K66.js"><link rel="modulepreload" href="/js/siteInit.js"><link rel="stylesheet" href="https://npm.webcache.cn/@waline/[email protected]/dist/waline.css" media="none" onload="this.media='all'"><link rel="preload" href="https://img.timelessq.com/images/2022/07/26/9b626c5ba21d7cb4dbcba2b507688bbb.jpg" as="image" fetchpriority="high"><link rel="preload" href="https://i.imgtg.com/2023/03/09/YS6XY.jpg" as="image" fetchpriority="high"><link rel="preload" href="https://img.timelessq.com/images/2022/07/26/8491109c4ae2ac88bbf9659a4f6d5ed2.jpg" as="image" fetchpriority="high"><link rel="preload" href="https://img.timelessq.com/images/2022/07/26/8fe50780c15461b629c9aeab5a7f2acd.jpg" as="image" fetchpriority="high"><link rel="preload" href="https://img.timelessq.com/images/2022/07/26/488297bfd0233b6c6a444f1860e55d45.jpg" as="image" fetchpriority="high"><link rel="preload" href="https://i.imgtg.com/2023/03/09/Y0iNK.jpg" as="image" fetchpriority="high"><link rel="canonical" href="https://jiankychen.github.io/python-modules"><title>Python 异常、模块、包</title><meta name="generator" content="Hexo 7.0.0"></head><body itemscope="" itemtype="http://schema.org/WebPage"><div id="loading"><div class="cat"><div class="body"></div><div class="head"><div class="face"></div></div><div class="foot"><div class="tummy-end"></div><div class="bottom"></div><div class="legs left"></div><div class="legs right"></div></div><div class="paw"><div class="hands left"></div><div class="hands right"></div></div></div></div><div id="container"><header id="header" itemscope="" itemtype="http://schema.org/WPHeader"><div class="inner"><div id="brand"><div class="pjax"><h1 itemprop="name headline">Python 异常、模块、包</h1><div class="meta"><span class="item" title="创建时间:2023-01-15 18:19:13"><span class="icon"><i class="ic i-calendar"></i></span><span class="text">发表于</span><time itemprop="dateCreated datePublished" datetime="2023-01-15T18:19:13+08:00">2023-01-15</time></span><span class="item" title="本文字数"><span class="icon"><i class="ic i-pen"></i></span><span class="text">本文字数</span><span>5.4k</span><span class="text">字</span></span><span class="item" title="阅读时长"><span class="icon"><i class="ic i-clock"></i></span><span class="text">阅读时长</span><span>5 分钟</span></span></div></div></div><nav id="nav"><div class="inner"><div class="toggle"><div class="lines" aria-label="切换导航栏"><span class="line"></span><span class="line"></span><span class="line"></span></div></div><ul class="menu"><li class="item title"><a href="/" rel="start">Jiankychen</a></li></ul><ul class="right" id="rightNav"><li class="item theme"><i class="ic i-sun"></i></li><li class="item search"><i class="ic i-search"></i></li></ul></div></nav></div><div class="pjax" id="imgs"><ul><li class="item" style="background-image: url("https://img.timelessq.com/images/2022/07/26/9b626c5ba21d7cb4dbcba2b507688bbb.jpg");"></li><li class="item" style="background-image: url("https://i.imgtg.com/2023/03/09/YS6XY.jpg");"></li><li class="item" style="background-image: url("https://img.timelessq.com/images/2022/07/26/8491109c4ae2ac88bbf9659a4f6d5ed2.jpg");"></li><li class="item" style="background-image: url("https://img.timelessq.com/images/2022/07/26/8fe50780c15461b629c9aeab5a7f2acd.jpg");"></li><li class="item" style="background-image: url("https://img.timelessq.com/images/2022/07/26/488297bfd0233b6c6a444f1860e55d45.jpg");"></li><li class="item" style="background-image: url("https://i.imgtg.com/2023/03/09/Y0iNK.jpg");"></li></ul></div></header><div id="waves"><svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto"><defs><path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"></path></defs><g class="parallax"><use xlink:href="#gentle-wave" x="48" y="0"></use><use xlink:href="#gentle-wave" x="48" y="3"></use><use xlink:href="#gentle-wave" x="48" y="5"></use><use xlink:href="#gentle-wave" x="48" y="7"></use></g></svg></div><main><div class="inner"><div class="pjax" id="main"><div class="article wrap"><div class="breadcrumb" itemlistelement="" itemscope="" itemtype="https://schema.org/BreadcrumbList"><i class="ic i-home"></i><span><a href="/">首页</a></span><i class="ic i-angle-right"></i><span class="current" itemprop="itemListElement" itemscope="itemscope" itemtype="https://schema.org/ListItem"><a href="/categories/Python/" itemprop="item" rel="index" title="分类于Python"><span itemprop="name">Python<meta itemprop="position" content="0"></span></a></span></div><article class="post block" itemscope="itemscope" itemtype="http://schema.org/Article" lang="zh-CN"><link itemprop="mainEntityOfPage" href="https://jiankychen.github.io/python-modules.html"><span hidden="hidden" itemprop="author" itemscope="itemscope" itemtype="http://schema.org/Person"><meta itemprop="image" content="/assets/avatar.jpg"><meta itemprop="name" content="Jiankychen"><meta itemprop="description" content="Never put off till tomorrow what you can do today, "></span><span hidden="hidden" itemprop="publisher" itemscope="itemscope" itemtype="http://schema.org/Organization"><meta itemprop="name" content="Jiankychen's Blog"></span><div class="body md" itemprop="articleBody"><h1 id="异常"><a class="anchor" href="#异常">#</a> 异常</h1>
<p>异常是指程序运行的过程中出现了错误</p>
<blockquote>
<p>bug 就是指异常,历史上因为小虫子导致计算机失灵,所以延续至今,bug 就代表软件出现错误</p>
</blockquote>
<h2 id="异常的捕获"><a class="anchor" href="#异常的捕获">#</a> 异常的捕获</h2>
<p>异常处理(捕获异常):针对可能出现的异常,提前做好准备,当真的出现异常时,可以有后续处置,以免其导致程序无法正常运行</p>
<h3 id="捕获常规异常"><a class="anchor" href="#捕获常规异常">#</a> 捕获常规异常</h3>
<p>语法:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> 尝试执行的代码</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">except</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> 若出现异常,将会执行本段代码</pre></td></tr></tbody></table></figure><p>例如:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token comment"># 尝试以 'r' 模式打开文件,如果文件不存在,则以 'w' 方式打开</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="3"></td><td><pre> f <span class="token operator">=</span> <span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string">'linux.txt'</span><span class="token punctuation">,</span> <span class="token string">'r'</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token keyword">except</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="5"></td><td><pre> f <span class="token operator">=</span> <span class="token builtin">open</span><span class="token punctuation">(</span><span class="token string">'linux.txt'</span><span class="token punctuation">,</span> <span class="token string">'w'</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><h3 id="捕获指定异常"><a class="anchor" href="#捕获指定异常">#</a> 捕获指定异常</h3>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> 尝试执行的代码</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">except</span> ErrorType <span class="token keyword">as</span> e<span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> 若出现类型为 ErrorType 的异常,将会执行本段代码</pre></td></tr></tbody></table></figure><p>其中,ErrorType 是指要捕获的异常类型</p>
<p>注意:如果 “尝试执行的代码” 的异常类型和要捕获的异常类型不一致,则无法捕获异常</p>
<p>常见的异常类型如下表所示:</p>
<table>
<thead>
<tr>
<th style="text-align:center">类名</th>
<th style="text-align:center">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center"><code>SyntaxError</code></td>
<td style="text-align:center">发生语法错误时引发</td>
</tr>
<tr>
<td style="text-align:center"><code>FileNotFoundError</code></td>
<td style="text-align:center">未找到指定文件或目录时引发</td>
</tr>
<tr>
<td style="text-align:center"><code>NameError</code></td>
<td style="text-align:center">找不到指定名称的变量时引发</td>
</tr>
<tr>
<td style="text-align:center"><code>ZeroDivisionError</code></td>
<td style="text-align:center">除数为 0 时的异常</td>
</tr>
<tr>
<td style="text-align:center"><code>IndexError</code></td>
<td style="text-align:center">当使用超出列表范围的索引时引发</td>
</tr>
<tr>
<td style="text-align:center"><code>KeyError</code></td>
<td style="text-align:center">当使用映射不存在的键时引发</td>
</tr>
<tr>
<td style="text-align:center"><code>AttributeError</code></td>
<td style="text-align:center">当尝试访问未知对象属性时引发</td>
</tr>
<tr>
<td style="text-align:center"><code>TypeError</code></td>
<td style="text-align:center">当试图在使用 a 类型的场合使用 b 类型时引发</td>
</tr>
</tbody>
</table>
<p>例如:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token keyword">print</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">except</span> NameError <span class="token keyword">as</span> e<span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'未定义 name 变量'</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><h3 id="捕获多个异常"><a class="anchor" href="#捕获多个异常">#</a> 捕获多个异常</h3>
<p>当需要捕获多个异常时,可以把要捕获的异常类型的名字,放到 except 后,并使用元组的方式进行书写</p>
<p>例如:</p>
<p>捕获多个异常(但不输出异常的具体描述):</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">/</span> <span class="token number">0</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">except</span> <span class="token punctuation">(</span>NameError<span class="token punctuation">,</span> ZeroDivisionError<span class="token punctuation">)</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'错误...'</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><p>捕获多个异常并输出异常的具体信息:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token keyword">print</span><span class="token punctuation">(</span>num<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">except</span> <span class="token punctuation">(</span>NameError<span class="token punctuation">,</span> ZeroDivisionError<span class="token punctuation">)</span> <span class="token keyword">as</span> e<span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token keyword">print</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><h3 id="捕获所有异常"><a class="anchor" href="#捕获所有异常">#</a> 捕获所有异常</h3>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> 尝试执行的代码</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">except</span> Exception <span class="token keyword">as</span> e<span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> 若出现异常,将会执行本段代码</pre></td></tr></tbody></table></figure><p>注意: <code>except:</code> 与 <code>except Exception as e:</code> 这两种方式都可以捕获全部的异常</p>
<h3 id="异常-else"><a class="anchor" href="#异常-else">#</a> 异常 else</h3>
<p><code>else</code> 表示没有异常时要执行的代码</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> 尝试执行的代码</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">except</span> Exception <span class="token keyword">as</span> e<span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> 若出现异常,将会执行本段代码</pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token keyword">else</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="6"></td><td><pre> 若没有出现异常,将会执行本段代码</pre></td></tr></tbody></table></figure><h3 id="异常-finally"><a class="anchor" href="#异常-finally">#</a> 异常 finally</h3>
<p><code>finally</code> 表示无论是否异常都要执行的代码,例如关闭文件</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">try</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> 尝试执行的代码</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">except</span> Exception <span class="token keyword">as</span> e<span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> 若出现异常,将会执行本段代码</pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token keyword">else</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="6"></td><td><pre> 若没有出现异常,将会执行本段代码</pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token keyword">finally</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="8"></td><td><pre> 无论是否出现异常,都会执行本段代码</pre></td></tr></tbody></table></figure><h3 id="异常的传递"><a class="anchor" href="#异常的传递">#</a> 异常的传递</h3>
<p>异常具有传递性:</p>
<ul>
<li>
<p>当函数 / 方法执行出现异常,会将异常传递给函数 / 方法的调用一方</p>
</li>
<li>
<p>如果传递到主程序,仍然没有异常处理,程序才会被终止</p>
</li>
</ul>
<p>利用异常具有传递性的特点,当我们想要保证程序不会因为异常崩溃的时候,就可以在 <code>main</code> 函数中设置异常捕获,由于无论在整个程序哪里发生异常,最终都会传递到 <code>main</code> 函数中,这样就可以确保所有的异常都会被捕获</p>
<h1 id="模块"><a class="anchor" href="#模块">#</a> 模块</h1>
<p>Python 模块(Module),是一个 Python 文件,以 <code>.py</code> 为后缀名</p>
<p>模块能定义函数、类和变量,模块里也能包含可执行的代码</p>
<p>可以认为一个模块就是一个工具包,每一个工具包中都有各种不同的工具供我们使用,以实现各种不同的功能</p>
<h2 id="导入模块"><a class="anchor" href="#导入模块">#</a> 导入模块</h2>
<p>在使用模块之前,需要先将模块导入 Python 程序</p>
<p>常用的导入模块方式:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">import</span> module_name</pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">from</span> module_name <span class="token keyword">import</span> class_name<span class="token punctuation">,</span> var_name<span class="token punctuation">,</span> func_name</pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">from</span> module_name <span class="token keyword">import</span> <span class="token operator">*</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token keyword">import</span> module_name <span class="token keyword">as</span> nick_name</pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token keyword">from</span> module_name <span class="token keyword">import</span> func_name <span class="token keyword">as</span> nick_name</pre></td></tr></tbody></table></figure><p>其中:</p>
<ul>
<li>module_name 表示模块</li>
<li>class_name 表示模块内的类</li>
<li>var_name 表示模块内的变量</li>
<li>func_name 表示模块内的函数</li>
<li>nick_name 表示为模块自定义的别名</li>
</ul>
<p>注意:导入模块时,module_name 不需要包含 <code>.py</code> 后缀</p>
<h3 id="import-module_name"><a class="anchor" href="#import-module_name">#</a> import module_name</h3>
<p>使用 <code>import</code> 导入模块后,可以通过 <code>'.'</code> 来使用模块中的函数或类</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">import</span> module_name</pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre>module_name<span class="token punctuation">.</span>func_name<span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="4"></td><td><pre>module_name<span class="token punctuation">.</span>class_name</pre></td></tr><tr><td data-num="5"></td><td><pre>module_name<span class="token punctuation">.</span>var_name</pre></td></tr></tbody></table></figure><h3 id="from-module_name-import-func_name"><a class="anchor" href="#from-module_name-import-func_name">#</a> from module_name import func_name</h3>
<p>使用 <code>from … import …</code> 方式导入之后,无需添加前缀,直接调用即可</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">from</span> module_name <span class="token keyword">import</span> func_name</pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre>func_name<span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><p>注意,利用 <code>from</code> 把内容从模块中导入后,会导致相同名称的内容被覆盖,也就是说,不同模块的命名空间会在此处重叠</p>
<h3 id="from-module_name-import"><a class="anchor" href="#from-module_name-import">#</a> from module_name import *</h3>
<p>导入模块全部内容</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">from</span> module_name <span class="token keyword">import</span> <span class="token operator">*</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre>func_name<span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="4"></td><td><pre>class_name</pre></td></tr><tr><td data-num="5"></td><td><pre>var_name</pre></td></tr></tbody></table></figure><h3 id="as-nick_name"><a class="anchor" href="#as-nick_name">#</a> as nick_name</h3>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token comment"># 模块定义别名</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">import</span> module_name <span class="token keyword">as</span> nick_name</pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment"># 功能定义别名</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token keyword">from</span> module_name <span class="token keyword">import</span> func_name <span class="token keyword">as</span> func_nick_name</pre></td></tr></tbody></table></figure><h2 id="自定义模块"><a class="anchor" href="#自定义模块">#</a> 自定义模块</h2>
<p>每个 Python 文件都可以作为一个模块,模块的名字就是文件的名字</p>
<p>因此,自定义模块只需在 Python 代码文件中正常写代码即可,通过 import、from 关键字导入(与导入 Python 内置模块一样)即可使用。但是需要注意,自定义模块名必须要符合标识符命名规则</p>
<h3 id="__main__-变量"><a class="anchor" href="#__main__-变量">#</a> __main__ 变量</h3>
<p><code>if __main__ == “__main__”</code> 语句的作用:只有当含有该语句的 Python 程序是被直接 run 时,才会进入 <code>if</code> 内部。如果是被导入的,则无法进入 <code>if</code></p>
<p>该功能常用于测试模块(即,希望某些代码在测试时运行、而在被导入时不运行)</p>
<p>例如:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">def</span> <span class="token function">test</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token keyword">print</span><span class="token punctuation">(</span>a <span class="token operator">+</span> b<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment"># 只在当前文件中调用该函数,其他导入的文件内均不执行 test 函数调用</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">'__main__'</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="6"></td><td><pre> test <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><p>如果不加 <code>if __name__ == "__main__"</code> 语句:无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行 <code>test</code> 函数的调用</p>
<h3 id="__all__-变量"><a class="anchor" href="#__all__-变量">#</a> __all__ 变量</h3>
<p>如果一个模块文件中有 <code>__all__</code> 变量(该变量为列表对象),在使用 <code>from xxx import *</code> 导入该模块时,只能导入 <code>__all__</code> 列表中的元素</p>
<p>因此, <code>__all__</code> 变量可以控制 <code>import *</code> 导入模块时的导入内容</p>
<p>注意: <code>__all__</code> 变量 仅影响 <code>from ... import *</code> 这一导入方式</p>
<p>例如,自定义如下模块:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre>__all__ <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'Test_A'</span><span class="token punctuation">]</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token keyword">def</span> <span class="token function">Test_A</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="4"></td><td><pre> xxx</pre></td></tr><tr><td data-num="5"></td><td><pre></pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token keyword">def</span> <span class="token function">Test_B</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="7"></td><td><pre> xxx</pre></td></tr></tbody></table></figure><p>通过 <code>from ... import *</code> 导入该模块后,只能使用 <code>Test_A</code> 函数,而不能使用 <code>Test_B</code> 函数</p>
<h1 id="包"><a class="anchor" href="#包">#</a> 包</h1>
<p>如果 Python 模块太多,可以通过 Python 包(Package)来管理</p>
<p>当我们的模块文件非常多时,包可以帮助我们管理这些模块,包的作用就是包含多个模块,但包的本质依然是模块</p>
<ul>
<li>
<p>从物理上看:包就是一个文件夹,在该文件夹下包含了一个 <code>__init__.py</code> 文件,该文件夹可包含多个模块文件</p>
</li>
<li>
<p>从逻辑上看:包的本质依然是模块</p>
</li>
</ul>
<h2 id="自定义包"><a class="anchor" href="#自定义包">#</a> 自定义包</h2>
<p>基本步骤:</p>
<ul>
<li>新建 Python Package</li>
<li>新建 Python 模块</li>
</ul>
<p>在 Pycharm 中,点击 <code>new --> Python Package</code> 新建包后,包内部会自动创建 <code>__init__.py</code> 文件,这个文件控制着包的导入行为</p>
<h2 id="导入包"><a class="anchor" href="#导入包">#</a> 导入包</h2>
<h3 id="import-xxx"><a class="anchor" href="#import-xxx">#</a> import xxx</h3>
<h4 id="导入所有模块"><a class="anchor" href="#导入所有模块">#</a> 导入所有模块</h4>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">import</span> package_name</pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre>package_name<span class="token punctuation">.</span>module_name<span class="token punctuation">.</span>func_name<span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><h4 id="导入指定模块"><a class="anchor" href="#导入指定模块">#</a> 导入指定模块</h4>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">import</span> package_name<span class="token punctuation">.</span>module_name</pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre>package_name<span class="token punctuation">.</span>module_name<span class="token punctuation">.</span>func_name<span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><p>其中:</p>
<ul>
<li>package_name 表示 Python Package 名称</li>
<li>module_name 表示 Python Package 中的模块名称</li>
<li>func_name 表示模块中的函数名称</li>
</ul>
<h3 id="from-xxx-import"><a class="anchor" href="#from-xxx-import">#</a> from xxx import</h3>
<h4 id="导入所有模块-2"><a class="anchor" href="#导入所有模块-2">#</a> 导入所有模块</h4>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">from</span> package_name <span class="token keyword">import</span> <span class="token operator">*</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre>module_name<span class="token punctuation">.</span>func_name<span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><p>注意:必须在 <code>__init__.py</code> 文件中添加 <code>__all__</code> 变量,用于控制 <code>from package_name import *</code> 导入的模块列表(类似于模块文件中的 <code>__all__</code> 变量)</p>
<h4 id="导入指定模块-2"><a class="anchor" href="#导入指定模块-2">#</a> 导入指定模块</h4>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">from</span> package_name <span class="token keyword">import</span> module_name</pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre>module_name<span class="token punctuation">.</span>func_name<span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><h4 id="导入指定模块中的指定函数"><a class="anchor" href="#导入指定模块中的指定函数">#</a> 导入指定模块中的指定函数</h4>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre><span class="token keyword">from</span> package_name<span class="token punctuation">.</span>module_name <span class="token keyword">import</span> func_name</pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre>func_name<span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr></tbody></table></figure><h2 id="第三方包"><a class="anchor" href="#第三方包">#</a> 第三方包</h2>
<p>在 Python 程序的生态中,有许多非常多的第三方包(非 Python 官方),可以极大的帮助我们提高开发效率,如:</p>
<ul>
<li>科学计算:numpy</li>
<li>数据分析:pandas</li>
<li>大数据计算:pyspark、apache-flink</li>
<li>图形可视化:matplotlib、pyecharts</li>
<li>人工智能:tensorflow</li>
</ul>
<p>注意,Python 没有内置这些第三方包,需要安装它们才可以导入使用</p>
<p>可通过 Python 内置的 pip 安装指定的第三方包</p>
<p>即,在命令行中输入:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre>pip install package_name</pre></td></tr></tbody></table></figure><p>pip 是连接外网进行下载,若下载速度相对较慢,可考虑通过国内的镜像源下载</p>
<p>例如:</p>
<figure class="highlight python"><figcaption data-lang="python"></figcaption><table><tbody><tr><td data-num="1"></td><td><pre>pip install <span class="token operator">-</span>i https<span class="token punctuation">:</span><span class="token operator">//</span>pypi<span class="token punctuation">.</span>tuna<span class="token punctuation">.</span>tsinghua<span class="token punctuation">.</span>edu<span class="token punctuation">.</span>cn<span class="token operator">/</span>simple package_name</pre></td></tr></tbody></table></figure></div><footer><div class="meta"><span class="item"><span class="icon"><i class="ic i-calendar-check"></i></span><span class="text">更新于</span><time title="修改时间:2024-06-08 23:09:10" itemprop="dateModified" datetime="2024-06-08T23:09:10+08:00">2024-06-08</time></span></div><div id="copyright"><ul><li class="author"><strong>本文作者:</strong>Jiankychen<i class="ic i-at"><em>@</em></i>Jiankychen's Blog</li><li class="link"><strong>本文链接:</strong><a href="https://jiankychen.github.io/python-modules.html" title="Python 异常、模块、包">https://jiankychen.github.io/python-modules.html</a></li><li class="license"><strong>版权声明:</strong>本站所有文章除特别声明外,均采用 <a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh"><i class="ic i-creative-commons"><em>(CC)</em></i>BY-NC-SA</a> 许可协议。转载请注明出处!</li></ul></div></footer></article></div><div class="post-nav"><div class="item left"><a href="/python-files.html" rel="prev" itemprop="url" data-background-image="https://i.imgtg.com/2023/03/09/Y0iNK.jpg" title="Python 文件操作"><span class="type">上一篇</span><span class="category"><i class="ic i-flag"></i>Python</span><h3>Python 文件操作</h3></a></div><div class="item right"><a href="/python-conda.html" rel="next" itemprop="url" data-background-image="https://i.imgtg.com/2023/03/09/Y0zdB.jpg" title="conda 常用命令"><span class="type">下一篇</span><span class="category"><i class="ic i-flag"></i>Python</span><h3>conda 常用命令</h3></a></div></div><div class="wrap" id="comments"></div></div><div id="sidebar"><div class="inner"><div class="panels"><div class="inner"><div class="contents panel pjax" data-title="文章目录"><ol class="toc"><li class="toc-item toc-level-1"><a class="toc-link" href="#%E5%BC%82%E5%B8%B8"><span class="toc-number">1.</span> <span class="toc-text"> 异常</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%BC%82%E5%B8%B8%E7%9A%84%E6%8D%95%E8%8E%B7"><span class="toc-number">1.1.</span> <span class="toc-text"> 异常的捕获</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%8D%95%E8%8E%B7%E5%B8%B8%E8%A7%84%E5%BC%82%E5%B8%B8"><span class="toc-number">1.1.1.</span> <span class="toc-text"> 捕获常规异常</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%8D%95%E8%8E%B7%E6%8C%87%E5%AE%9A%E5%BC%82%E5%B8%B8"><span class="toc-number">1.1.2.</span> <span class="toc-text"> 捕获指定异常</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%8D%95%E8%8E%B7%E5%A4%9A%E4%B8%AA%E5%BC%82%E5%B8%B8"><span class="toc-number">1.1.3.</span> <span class="toc-text"> 捕获多个异常</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%8D%95%E8%8E%B7%E6%89%80%E6%9C%89%E5%BC%82%E5%B8%B8"><span class="toc-number">1.1.4.</span> <span class="toc-text"> 捕获所有异常</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%BC%82%E5%B8%B8-else"><span class="toc-number">1.1.5.</span> <span class="toc-text"> 异常 else</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%BC%82%E5%B8%B8-finally"><span class="toc-number">1.1.6.</span> <span class="toc-text"> 异常 finally</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%BC%82%E5%B8%B8%E7%9A%84%E4%BC%A0%E9%80%92"><span class="toc-number">1.1.7.</span> <span class="toc-text"> 异常的传递</span></a></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E6%A8%A1%E5%9D%97"><span class="toc-number">2.</span> <span class="toc-text"> 模块</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AF%BC%E5%85%A5%E6%A8%A1%E5%9D%97"><span class="toc-number">2.1.</span> <span class="toc-text"> 导入模块</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#import-module_name"><span class="toc-number">2.1.1.</span> <span class="toc-text"> import module_name</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#from-module_name-import-func_name"><span class="toc-number">2.1.2.</span> <span class="toc-text"> from module_name import func_name</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#from-module_name-import"><span class="toc-number">2.1.3.</span> <span class="toc-text"> from module_name import *</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#as-nick_name"><span class="toc-number">2.1.4.</span> <span class="toc-text"> as nick_name</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A8%A1%E5%9D%97"><span class="toc-number">2.2.</span> <span class="toc-text"> 自定义模块</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#__main__-%E5%8F%98%E9%87%8F"><span class="toc-number">2.2.1.</span> <span class="toc-text"> __main__ 变量</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#__all__-%E5%8F%98%E9%87%8F"><span class="toc-number">2.2.2.</span> <span class="toc-text"> __all__ 变量</span></a></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link" href="#%E5%8C%85"><span class="toc-number">3.</span> <span class="toc-text"> 包</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8C%85"><span class="toc-number">3.1.</span> <span class="toc-text"> 自定义包</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AF%BC%E5%85%A5%E5%8C%85"><span class="toc-number">3.2.</span> <span class="toc-text"> 导入包</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#import-xxx"><span class="toc-number">3.2.1.</span> <span class="toc-text"> import xxx</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AF%BC%E5%85%A5%E6%89%80%E6%9C%89%E6%A8%A1%E5%9D%97"><span class="toc-number">3.2.1.1.</span> <span class="toc-text"> 导入所有模块</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AF%BC%E5%85%A5%E6%8C%87%E5%AE%9A%E6%A8%A1%E5%9D%97"><span class="toc-number">3.2.1.2.</span> <span class="toc-text"> 导入指定模块</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#from-xxx-import"><span class="toc-number">3.2.2.</span> <span class="toc-text"> from xxx import</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AF%BC%E5%85%A5%E6%89%80%E6%9C%89%E6%A8%A1%E5%9D%97-2"><span class="toc-number">3.2.2.1.</span> <span class="toc-text"> 导入所有模块</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AF%BC%E5%85%A5%E6%8C%87%E5%AE%9A%E6%A8%A1%E5%9D%97-2"><span class="toc-number">3.2.2.2.</span> <span class="toc-text"> 导入指定模块</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%AF%BC%E5%85%A5%E6%8C%87%E5%AE%9A%E6%A8%A1%E5%9D%97%E4%B8%AD%E7%9A%84%E6%8C%87%E5%AE%9A%E5%87%BD%E6%95%B0"><span class="toc-number">3.2.2.3.</span> <span class="toc-text"> 导入指定模块中的指定函数</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E7%AC%AC%E4%B8%89%E6%96%B9%E5%8C%85"><span class="toc-number">3.3.</span> <span class="toc-text"> 第三方包</span></a></li></ol></li></ol></div><div class="related panel pjax" data-title="系列文章"><ul><li><a href="/python-basics.html" rel="bookmark" title="Python 基本语法">Python 基本语法</a></li><li><a href="/python-container.html" rel="bookmark" title="Python 数据容器">Python 数据容器</a></li><li><a href="/python-files.html" rel="bookmark" title="Python 文件操作">Python 文件操作</a></li><li class="active"><a href="/python-modules.html" rel="bookmark" title="Python 异常、模块、包">Python 异常、模块、包</a></li><li><a href="/python-conda.html" rel="bookmark" title="conda 常用命令">conda 常用命令</a></li><li><a href="/python-pandas.html" rel="bookmark" title="pandas 基础">pandas 基础</a></li><li><a href="/python-oop.html" rel="bookmark" title="Python 面向对象">Python 面向对象</a></li></ul></div><div class="overview panel" data-title="站点概览"><div class="author" itemprop="author" itemscope="itemscope" itemtype="http://schema.org/Person"><img class="image" loading="lazy" decoding="async" itemprop="image" alt="Jiankychen" src="/assets/avatar.webp"><p class="name" itemprop="name">Jiankychen</p><div class="description" itemprop="description"></div></div><nav class="state"><div class="item posts"><a href="/archives/"><span class="count">51</span><span class="name">文章</span></a></div><div class="item categories"><a href="/categories/"><span class="count">8</span><span class="name">分类</span></a></div><div class="item tags"><a href="/tags/"><span class="count">20</span><span class="name">标签</span></a></div></nav><div class="social"><a target="_blank" rel="noopener" href="https://github.com/jiankychen" class="item github" title="https://github.com/jiankychen"><i class="ic i-github"></i></a><a href="mailto:[email protected]" class="item email" title="mailto:[email protected]"><i class="ic i-envelope"></i></a><a target="_blank" rel="noopener" href="https://music.163.com/#/user/home?id=447771275" class="item music" title="https://music.163.com/#/user/home?id=447771275"><i class="ic i-cloud-music"></i></a><a target="_blank" rel="noopener" href="https://www.zhihu.com/people/jiankychen" class="item zhihu" title="https://www.zhihu.com/people/jiankychen"><i class="ic i-zhihu"></i></a></div><div class="menu"><li class="item"><a href="/" rel="section"><i class="ic i-home"></i>首页</a></li><li class="item dropdown"><a href="#" onclick="return false;"><i class="ic i-feather"></i>文章</a><ul class="submenu"><li class="item"><a href="/archives/" rel="section"><i class="ic i-list-alt"></i>归档</a></li><li class="item"><a href="/categories/" rel="section"><i class="ic i-th"></i>分类</a></li><li class="item"><a href="/tags/" rel="section"><i class="ic i-tags"></i>标签</a></li></ul></li><li class="item dropdown"><a href="#" onclick="return false;"><i class="ic i-feather"></i>链接</a><ul class="submenu"><li class="item"><a href="/peers/" rel="section"><i class="ic i-magic"></i>链环</a></li><li class="item"><a href="/friends/" rel="section"><i class="ic i-heart"></i>友链</a></li></ul></li><li class="item dropdown"><a href="#" onclick="return false;"><i class="ic i-stars"></i>关于</a><ul class="submenu"><li class="item"><a href="/owner/" rel="section"><i class="ic i-user"></i>关于博主</a></li><li class="item"><a href="/site/" rel="section"><i class="ic i-paw"></i>关于本站</a></li><li class="item"><a href="/update/" rel="section"><i class="ic i-cloud"></i>更新日志</a></li></ul></li></div></div></div></div><ul id="quick"><li class="prev pjax"><a href="/python-conda.html" rel="prev" title="上一篇"><i class="ic i-chevron-left"></i></a></li><li class="up"><i class="ic i-arrow-up"></i></li><li class="down"><i class="ic i-arrow-down"></i></li><li class="next pjax"><a href="/python-files.html" rel="next" title="下一篇"><i class="ic i-chevron-right"></i></a></li><li class="percent"></li></ul></div></div><div class="dimmer"></div></div></main><footer id="footer"><div class="inner"><div class="widgets"><div class="rpost pjax"><h2>随机文章</h2><ul><li class="item"><div class="breadcrumb"><a href="/categories/Coding/" title="分类于Coding">Coding</a></div><span><a href="/leetcode-monotonicstacks.html">LeetCode - 单调栈专题</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Coding/" title="分类于Coding">Coding</a></div><span><a href="/leetcode-doublepointer.html">LeetCode - 双指针专题</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/C/" title="分类于C++">C++</a></div><span><a href="/cpp-classes.html">C++ 类</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Python/" title="分类于Python">Python</a></div><span><a href="/python-conda.html">conda 常用命令</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/C/" title="分类于C++">C++</a></div><span><a href="/cpp-statement.html">C++ 语句</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Coding/" title="分类于Coding">Coding</a></div><span><a href="/leetcode-stacks&queues.html">LeetCode - 栈与队列专题</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Coding/" title="分类于Coding">Coding</a></div><span><a href="/leetcode-greedy.html">LeetCode - 贪心专题</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Data-Structure/" title="分类于Data Structure">Data Structure</a></div><span><a href="/traverse.html">回溯</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/C/" title="分类于C++">C++</a></div><span><a href="/cpp-variables.html">C++ 变量和基本类型</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Coding/" title="分类于Coding">Coding</a></div><span><a href="/leetcode-list.html">LeetCode - 链表专题</a></span></li></ul></div><div class="rpost pjax"><h2>最新评论</h2><ul class="leancloud-recent-comment" id="new-comment"></ul></div></div><div class="status"><div class="copyright">© 2021 -<span itemprop="copyrightYear">2024</span><span class="with-love"><i class="ic i-sakura rotate"></i></span><span class="author" itemprop="copyrightHolder">Jiankychen @ Jiankychen</span></div><div class="count"><span class="post-meta-item-icon"><i class="ic i-chart-area"></i></span><span title="站点总字数">955k 字</span><span class="post-meta-divider"> | </span><span class="post-meta-item-icon"><i class="ic i-coffee"></i></span><span title="站点阅读时长">14:28</span></div><div class="powered-by">基于 <a target="_blank" rel="noopener" href="https://hexo.io/">Hexo</a> & Theme.<a target="_blank" rel="noopener" href="https://github.com/theme-shoka-x/hexo-theme-shokaX/">ShokaX</a></div></div><script src="https://unpkg.com/[email protected]/bsz.pure.mini.js"></script><div id="busuanzi-wrap"><span class="ic i-eye"></span><span id="busuanzi_container_site_pv">本站总访问量 <span id="busuanzi_value_site_pv"></span> 次</span> | <span class="ic i-user"></span><span id="busuanzi_container_site_uv">本站总访客量 <span id="busuanzi_value_site_uv"></span> 次</span></div></div></footer></div><script data-config="" type="text/javascript">var LOCAL = {
ispost: true,
path: `/python-modules`,
favicon: {
show: `Jiankychen`,
hide: `Jiankychen`
},
search: {
placeholder: "文章搜索",
empty: "关于 「 ${query} 」,什么也没搜到",
stats: "${time} ms 内找到 ${hits} 条结果"
},
copy_tex: false,
katex: false,
mermaid: false,
audio: undefined,
fancybox: true,
nocopy: false,
outime: true,
template: `<div class="note warning"><p><span class="label warning">文章时效性提示</span><br>这是一篇发布于 {{publish}} 天前,最后一次更新在 {{updated}} 天前的文章,部分信息可能已经发生改变,请注意甄别。</p></div>`,
quiz: {
choice: `单选题`,
multiple: `多选题`,
true_false: `判断题`,
essay: `问答题`,
gap_fill: `填空题`,
mistake: `错题备注`
},
ignores: [
(uri) => uri.includes('#'),
(uri) => new RegExp(LOCAL.path + '$').test(uri),
[]
]
};
</script><script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-6-M/pace/1.2.4/pace.min.js" async=""></script><script src="https://polyfill.io/v3/polyfill.min.js?features=default,fetch" defer=""></script><script src="/js/siteInit.js?v=0.4.2" type="module" fetchpriority="high" defer=""></script></body></html>