Skip to content

Commit 1ccca41

Browse files
committed
更新模块代码编写基础
1 parent 1b109ef commit 1ccca41

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

Learning Python/5、模块和包/2. 模块代码编写基础.ipynb

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"# 模块的创建 \n",
7+
"# 1. 模块的创建 \n",
88
"定义模块,只要使用文本编辑器,把一些 Python 代码输入至文本文件中,然后以“.py”为后缀名进行保存,任何此类文件都会被自动认为是 Python 模块。在模块顶层指定的所有变量名都会变成其属性,并且可以导出供客户端来使用。 \n",
99
"\n",
1010
"例如,如果在名为 module1.py 的文件中输入下面的 def 语句,并将这个文件导入,就会创建一个拥有一个属性的模块对象。"
@@ -24,13 +24,13 @@
2424
"cell_type": "markdown",
2525
"metadata": {},
2626
"source": [
27-
"## 模块文件名 \n",
27+
"## 1.1 模块文件名 \n",
2828
"模块名在 Python 程序中会变成变量名(没有.py)。当一个模块被导入时,Python 会把内部模块名映射到外部文件名,也就是说通过把模块搜索路径中的目录路径加在前边,而 .py 或其他后缀名添加在后边。 \n",
2929
"\n",
30-
"# 模块的使用 \n",
30+
"# 2. 模块的使用 \n",
3131
"客户端可以执行 import 或 from 语句。import 会读取整个模块,所以必须进行定义后才能读取它的变量名;from 将获取(或者说复制)模块特定的变量名。 \n",
3232
"\n",
33-
"## import 语句 \n",
33+
"## 2.1 import 语句 \n",
3434
"上面的变量名 module1 有两个不同的目的:识别要被载入的外部文件,同时会生成脚本中的变量,在文件加载后,用来引用模块对象。"
3535
]
3636
},
@@ -63,7 +63,7 @@
6363
"cell_type": "markdown",
6464
"metadata": {},
6565
"source": [
66-
"## from 语句 \n",
66+
"## 2.2 from 语句 \n",
6767
"因为 from 会把变量名复制到另一个作用域,所以它就可以让我们直接在脚本中使用复制后的变量名,而不需要通过模块。"
6868
]
6969
},
@@ -89,7 +89,7 @@
8989
"cell_type": "markdown",
9090
"metadata": {},
9191
"source": [
92-
"## from * 语句 \n",
92+
"## 2.3 from * 语句 \n",
9393
"当我们使用 * 时,会取得模块顶层所有赋了值的变量名的拷贝。还是在脚本中使用复制后得到的变量名 printer,而不需要通过模块名。"
9494
]
9595
},
@@ -115,7 +115,7 @@
115115
"cell_type": "markdown",
116116
"metadata": {},
117117
"source": [
118-
"## 导入只发生一次 \n",
118+
"## 2.4 导入只发生一次 \n",
119119
"模块会在第一次 import 或 from 时载入并执行,并且只在第一次如此。之后的导入操作都只会取出已加载的模块对象。 \n",
120120
"\n",
121121
"**初始化代码**"
@@ -182,7 +182,7 @@
182182
"cell_type": "markdown",
183183
"metadata": {},
184184
"source": [
185-
"## import 和 from 是赋值语句 \n",
185+
"## 2.5 import 和 from 是赋值语句 \n",
186186
"import 和 from 是可执行的语句,可以嵌套在 if 测试中,出现在函数 def、try 语句之中等。 \n",
187187
"\n",
188188
"import 和 from 都是隐形的赋值语句:\n",
@@ -194,7 +194,7 @@
194194
"cell_type": "markdown",
195195
"metadata": {},
196196
"source": [
197-
"## import 和 from 的对等性 \n",
197+
"## 2.6 import 和 from 的对等性 \n",
198198
"一个像这样的 from 语句:\n",
199199
"```\n",
200200
"from module import name1, name2\n",
@@ -212,14 +212,14 @@
212212
"cell_type": "markdown",
213213
"metadata": {},
214214
"source": [
215-
"# 模块命名空间 \n",
216-
"## 文件生成命名空间 \n",
215+
"# 3. 模块命名空间 \n",
216+
"## 3.1 文件生成命名空间 \n",
217217
"- **模块语句会在首次导入时执行。**\n",
218218
"- **顶层的赋值语句会创建模块属性。**\n",
219219
"- **模块的命名空间能通过属性 `__dict__` 或 dir(M) 获取。**\n",
220220
"- **模块是一个独立的作用域(本地变量就是全局变量)。**\n",
221221
"\n",
222-
"## 命名空间字典:`__dict__` \n",
222+
"## 3.2 命名空间字典:`__dict__` \n",
223223
"在内部模块命名空间是作为字典对象进行存储的。可以通过模块的 `__dict__` 属性获取模块命名空间字典:"
224224
]
225225
},
@@ -255,7 +255,7 @@
255255
"cell_type": "markdown",
256256
"metadata": {},
257257
"source": [
258-
"## 属性名的点号运算 \n",
258+
"## 3.3 属性名的点号运算 \n",
259259
"在 Python 中,可以使用点号运算语法 object.attribute 获取任意 object 的 attribute 属性。 \n",
260260
"\n",
261261
"属性的点号运算与作用域法则无关,LEGB 规则只适用于无点号运算的纯变量名。以下是其规则:\n",
@@ -264,7 +264,7 @@
264264
"- **多层点号运算。**X.Y.Z 指的是寻找对象 X 之中的变量名 Y,然后再找对象 X.Y 之中的 Z。\n",
265265
"- **通用性。**点号运算可用于任何具有属性的对象:模块、类、C 扩展类型等。\n",
266266
"\n",
267-
"## 导入和作用域 \n",
267+
"## 3.4 导入和作用域 \n",
268268
"导入操作不会赋予被导入文件中的代码对上层代码的可见度:被导入文件无法看见进行导入的文件内的变量名。更确切的说法是:\n",
269269
"- 函数绝对无法看见其他函数内的变量名,除非它们从物理上处于这个函数内。\n",
270270
"- 模块程序代码绝对无法看见其他模块内的变量名,除非明确地进行了导入。\n",
@@ -276,14 +276,14 @@
276276
"cell_type": "markdown",
277277
"metadata": {},
278278
"source": [
279-
"# 重载模块 \n",
279+
"# 4. 重载模块 \n",
280280
"调用 reload 内置函数可以强制使模块代码重新载入并重新运行。此文件中新的代码的赋值语句会在适当的地方修改现有的模块对象。 \n",
281281
"\n",
282282
"reload 函数可以修改程序的一些部分,而无需停止整个程序。因此,利用 reload,可以立即看到对组件的修改的效果。 \n",
283283
"\n",
284284
"在 Python 3.X 中,reload 在 imp 标准库模块中,需要 import 语句或 from 语句来载入该工具。 \n",
285285
"\n",
286-
"## reload 基础 \n",
286+
"## 4.1 reload 基础 \n",
287287
"- reload 是 Python 中的内置函数,而不是语句。\n",
288288
"- 传给 reload 的是已经存在的模块对象,而不是变量名。\n",
289289
"- reload 在 Python 3.X 中位于模块中,并且必须导入自己。\n",
@@ -305,7 +305,7 @@
305305
"- **重载只会对以后使用 from 的客户端造成影响。**\n",
306306
"- **重载只应用于单个模块。** \n",
307307
"\n",
308-
"## reload 实例 \n",
308+
"## 4.2 reload 实例 \n",
309309
"下面,我们要修改并重载一个模块文件,但不会中止交互模式的 Python 会话。 \n",
310310
"\n",
311311
"首先,在文本编辑器中,编写一个名为 changer.py 的模块文件,其内容如下:"
@@ -445,7 +445,7 @@
445445
"name": "python",
446446
"nbconvert_exporter": "python",
447447
"pygments_lexer": "ipython3",
448-
"version": "3.6.5"
448+
"version": "3.6.8"
449449
}
450450
},
451451
"nbformat": 4,

0 commit comments

Comments
 (0)