我注意到,有时如果您在包/模块上调用 dir(),您会在命名空间中看到其他模块,这些模块是作为实现的一部分导入的,并不意味着你使用。例如,如果我从 PyPI 安装 fish 包并导入它,我会看到 fish.sys,它只引用内置的 sys 模块。
我的问题是这是否合理,如果不合理该怎么办。
我认为 __all__ 变量不太相关,因为它仅 影响from X import * 的行为。我看到的选项是:
- 更好地构建您的包,至少将困惑的命名空间插入子模块
- 在你的包中使用
import X as _X来区分实现细节和你的包API - 从你的函数中导入东西(blegh)
请您参考如下方法:
My question is whether that's sane
这是理智的。执行 import fish 只会将一个名称添加到您的命名空间,而不是“命名空间困惑”。这几乎是模块背后的伟大理念,将许多东西归为一个名称!
当你想知道一个模块做什么时,查看文档或调用help,不要做dir。
Python 中的所有名称都存储在字典中。这意味着无论您看到多少个名字,查找其中一个都需要花费恒定的时间。因此也没有任何类型的速度缺陷。
