Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /