我们为什么要使用"来自。进口*"在Python中

时间:2015-07-26 19:48:56

标签: python

python中这个语句的全部含义是什么?

from . import *

我在某些应用程序中看到过这样的代码,例如这个用于我的地图文件阅读器。

https://github.com/twoolie/NBT/blob/master/nbt/__init__.py

1 个答案:

答案 0 :(得分:1)

当您编写from mypkg import *时,Python会查看程序包的__all__文件的__init__.py变量,该变量被认为填充了子模块的名称。然后,它将该变量中列出的所有子模块加载到本地名称空间中。如果__all__不存在,则会加载__init__.py文件中定义的所有符号(包括在该文件中明确导入的子模块,但不包括包的每个子模块)。 Reference

当您在包(包内引用)中的子模块中时,使用from .。这指的是子模块所包含的包,无论它具有什么名称。所以from . import *完全按照上面描述的那样做,但对于子模块是其中一部分的包。请注意,如果子模块本身在__all__变量中列出,那么它将因依赖循环而失败。

关于您的示例,模块本身是__init__.py并且还定义了__all__变量,因此幸运的是Python不会在依赖循环上崩溃。无论如何,该行无用,因为本地代码不使用这些模块。