问题
以下行在 Python 3 中做了什么?
>>> from . import *
到目前为止我发现的...
它不输出任何东西,我在 Python 3.7.3 中看到的唯一变化如下:
>>> '__warningregistry__' in locals()
False
>>> from . import *
>>> '__warningregistry__' in locals()
True
>>> locals()['__warningregistry__']
{'version': 0}
这可能是警告模块的一部分,表示某处存在未打印的警告,但文档仅提及 __warningregistry__
模块中的一个变量warnings
。
该文档解释了如何from . import foo
工作以及如何from bar import *
工作,但我找不到任何关于from . import *
. 有人可能期望 from 的所有名称__init__.py
都加载到当前名称空间中(就像from bla import *
for一样bla.py
),但这似乎不是这种情况,而且在__name__ == '__main__'
(脚本和终端)时也没有任何意义。
Python 2 的行为与我的预期更相似:
>>> # Python 2.7.16
>>> from . import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Attempted relative import in non-package
PEP 328很有启发性,但也没有回答我的问题。