Python 导入单元的构成详解

导入单元有多种,可以是模块、包及变量等。

对于这些基础的概念,对于新手还是有必要介绍一下它们的区别。

模块:类似 *.py,*.pyc, *.pyd ,*.so,*.dll 这样的文件,是 Python 代码载体的最小单元。

还可以细分为两种:

关于 Namespace packages,有的人会比较陌生,我这里摘抄官方文档的一段说明来解释一下。

Namespace packages 是由多个 部分 构成的,每个部分为父包增加一个子包。 各个部分可能处于文件系统的不同位置。 部分也可能处于 zip 文件中、网络上,或者 Python 在导入期间可以搜索的其他地方。 命名空间包并不一定会直接对应到文件系统中的对象;它们有可能是无实体表示的虚拟模块。

命名空间包的 __path__ 属性不使用普通的列表。 而是使用定制的可迭代类型,如果其父包的路径 (或者最高层级包的 sys.path) 发生改变,这种对象会在该包内的下一次导入尝试时自动执行新的对包部分的搜索。

命名空间包没有 parent/__init__.py 文件。 实际上,在导入搜索期间可能找到多个 parent 目录,每个都由不同的部分所提供。 因此 parent/one 的物理位置不一定与 parent/two 相邻。 在这种情况下,Python 将为顶级的 parent 包创建一个命名空间包,无论是它本身还是它的某个子包被导入。

教程来源于Github,感谢iswbm大佬的无私奉献,致敬!

技术教程推荐

Linux性能优化实战 -〔倪朋飞〕

玩转Git三剑客 -〔苏玲〕

玩转Spring全家桶 -〔丁雪丰〕

Redis核心技术与实战 -〔蒋德钧〕

深度学习推荐系统实战 -〔王喆〕

A/B测试从0到1 -〔张博伟〕

基于人因的用户体验设计课 -〔刘石〕

手把手带你写一个Web框架 -〔叶剑峰〕

Rust 语言从入门到实战 -〔唐刚〕