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 775d6b5

Browse files
committed
更新模块包
1 parent 1ccca41 commit 775d6b5

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

‎Learning Python/5、模块和包/3. 模块包.ipynb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66
"source": [
77
"除了模块名之外,导入也可以指定目录路径。Python 代码的目录就称为包,因此,这类导入就称为包导入。 \n",
88
"\n",
9-
"# 包导入基础 \n",
9+
"# 1. 包导入基础 \n",
1010
"在 import 语句中可以列出路径名称,彼此以点号相隔。 \n",
1111
"```\n",
1212
"import dir1.dir2.mod\n",
1313
"```\n",
1414
"通过这个路径可以获得 dir1 目录中的 dir2 目录中的 mod.py 模块文件。 \n",
1515
"\n",
16-
"## 包和搜索路径设置 \n",
16+
"## 1.1 包和搜索路径设置 \n",
1717
"import 语句中的目录路径只能是以点号间隔的变量。不能在 import 语句中使用任何平台特定的路径语法。需要在模块搜索路径设置中使用平台特定的语法,来定义容器的目录。 \n",
1818
"\n",
1919
"如果完整路径是 `C:\\mycode\\dir1\\dir2\\mod.py`,则可以增加 `C:\\mycode` 在 PYTHONPATH 系统变量中或是 .pth 文件中。 \n",
2020
"\n",
21-
"## `__init__.py` 包文件 \n",
21+
"## 1.2 `__init__.py` 包文件 \n",
2222
"包导入语句的路径中的每个目录内都必须有 `__init__.py` 这个文件,否则导入包会失败。 \n",
2323
"\n",
2424
"对于如下目录结构:\n",
@@ -142,7 +142,7 @@
142142
"cell_type": "markdown",
143143
"metadata": {},
144144
"source": [
145-
"# 从包中使用 * 导入 \n",
145+
"# 2. 从包中使用 * 导入 \n",
146146
"当一个包中有多个文件时,当使用 `from <pakage_name> import *` 时,不会导入任何模块。Python 遵循这样的约定:如果 `__init__.py` 文件在包目录中包含一个名为 `__all__` 的列表,则它被认为是当遇到 `from <pakage_name> import *` 的语句时应该导入的模块列表。"
147147
]
148148
},
@@ -178,8 +178,8 @@
178178
"cell_type": "markdown",
179179
"metadata": {},
180180
"source": [
181-
"# 包相对导入 \n",
182-
"## 相对导入基础知识 \n",
181+
"# 3. 包相对导入 \n",
182+
"## 3.1 相对导入基础知识 \n",
183183
"from 语句可以使用前面的点号来指定,它们需要位于同一包中的模块(相对导入),而不是位于模块导入搜索路径上某处的模块(绝对导入):\n",
184184
"- **使用点号导入。**这样的导入将只在包的内部搜索,并不会搜索位于搜索路径上某处的同名模块。直接效果是包模块覆盖了外部的模块。\n",
185185
"- **不使用点号导入。**在一个包中导入默认是绝对路径的,导入忽略了包含包自身并在 sys.path 路径上的某处查找。 \n",
@@ -207,11 +207,11 @@
207207
"from ..E import X # 导入 A.E.X(..代表 A)\n",
208208
"```\n",
209209
"\n",
210-
"## 相对导入的作用域 \n",
210+
"## 3.2 相对导入的作用域 \n",
211211
"- **相对导入适用于只在包内导入。**\n",
212212
"- **相对导入只适用于 from 语句。** \n",
213213
"\n",
214-
"## 模块查找规则总结 \n",
214+
"## 3.3 模块查找规则总结 \n",
215215
"- 简单模块名(例如,A)通过搜索 sys.path 路径列表上的每个目录来查找,从左到右进行。这个列表由系统默认设置和用户配置设置组成。\n",
216216
"- 包是带有一个特殊的 `__init__py.` 文件的 Python 模块的直接目录,这使得一个导入中可以使用 A.B.C 目录路径语法。在 A.B.C 的一条导入中,名为 A 的目录位于相对于 sys.path 的常规模块导入搜索,B 是 A 中的另一个包子目录,C 是一个模块或 B 中的其他可导入项。\n",
217217
"- 在一个包文件中,常规的 import 和 from 语句使用和其他地方的导入一样的 sys.path 搜索规则。包中的导入使用 from 语句以及前面的点号,然而,它是相对于包的;也就是说,只检查包目录,并且不使用常规的 sys.path 查找。"
@@ -221,14 +221,14 @@
221221
"cell_type": "markdown",
222222
"metadata": {},
223223
"source": [
224-
"# Python 3.3 的命名空间包 \n",
224+
"# 4. Python 3.3 的命名空间包 \n",
225225
"Python 3.3 之后有四种导入模型:\n",
226226
"- **基本模块导入:**import mod, from mod import attr\n",
227227
"- **包导入:**import dir1.dir2.mod, from dir1.mod import attr\n",
228228
"- **包相对导入:**from . import mod(相对), import mod(绝对)\n",
229229
"- **命名空间包:**import splitdir.mod,允许包扩展多个目录,不需要初始化文件。\n",
230230
"\n",
231-
"## 命名空间包语义 \n",
231+
"## 4.1 命名空间包语义 \n",
232232
"**import 算法** \n",
233233
"1. 如果找到 `directory\\spam\\__init__.py` 文件,常规包被导入和返回。\n",
234234
"2. 如果找到 `directory\\spam.{py, pyc, 或其他模块扩展}`,一个简单模块被导入和返回。\n",
@@ -237,7 +237,7 @@
237237
"\n",
238238
"如果搜索路径扫描完成,没有在步骤1或步骤2中返回模块或包,在步骤3中记录到至少一个目录,则命名空间包被创建。新的命名空间包有一个 `__path__` 属性,包含找到的目录路径字符串,在步骤3的扫描中记录。一旦命名空间包被创建,和传统包就没有功能上的不同。 \n",
239239
"\n",
240-
"## 对传统包的影响:可选的 `__init__.py` 文件 \n",
240+
"## 4.2 对传统包的影响:可选的 `__init__.py` 文件 \n",
241241
"Python 3.3 的包不再需要 `__init__.py` 文件——当单个目录包没有这个文件,则会被当做一个单目录命名空间包。许多包不需要初始化代码。传统包模型依旧完全支持,自动运行 `__init__.py` 文件中的代码。 "
242242
]
243243
},
@@ -265,7 +265,7 @@
265265
"name": "python",
266266
"nbconvert_exporter": "python",
267267
"pygments_lexer": "ipython3",
268-
"version": "3.6.6"
268+
"version": "3.6.8"
269269
}
270270
},
271271
"nbformat": 4,

0 commit comments

Comments
(0)

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