【发布时间】:2021-05-17 10:25:43
【问题描述】:
Python 导入是 confusing,但我以为我终于理解了它们,直到我偶然发现了这种行为(在 3.9.1 中)。这里发生了什么?
采用这个包结构:
countries/
├── __init__.py # from . import greece
├── greece.py
└── spain.py
如果我做import countries,命名空间dir(countries) 只包含greece,正如预期的那样。
但如果我开始我的会话:
from countries import spain
import countries
命名空间dir(countries) 包含greece 和spain!
我知道在我第一次导入时__init__.py 在后台运行。我不明白的是python如何记住在countries命名空间中同时包含greece和spain。是否在运行from countries import spain 之后将countries 命名空间保存在某个地方,然后运行import countries 只是将其添加到本地命名空间?
【问题讨论】:
-
您可以随时打印
sys.path来查看导入情况 -
如果你有一些时间可以燃烧,David Beazley 的这个演讲是我最喜欢的 Python 包之一。 dabeaz.com/modulepackage
-
真的很有趣,谢谢!
标签: python python-3.x import python-import