Jua*_*nti 24 python namespaces
我在python/Lib源代码中看到了很多,但我不知道它是什么.
我以为它被用来限制模块的可访问成员.因此,只有__all__将要出现的元素才会显示出来dir(module).
我做了一个小例子,看到它没有像我预期的那样工作.
那么...... python __all__模块级变量是什么?
Joh*_*kin 48
它有两个目的:
任何阅读源代码的人都会知道暴露的公共API是什么.它不会阻止他们在私人声明中徘徊,但确实提供了一个很好的警告.
使用时from mod import *,只会__all__导入列出的名称.在我看来,这并不重要,因为导入所有东西都是一个非常糟糕的主意.
http://docs.python.org/tutorial/modules.html#importing-from-a-package
现在当用户写的时候会发生什么
from sound.effects import *?理想情况下,人们希望以某种方式传递给文件系统,找到包中存在哪些子模块,并将它们全部导入.这可能需要很长时间,导入子模块可能会产生不必要的副作用,这种副作用只有在显式导入子模块时才会发生.唯一的解决方案是让包作者提供包的显式索引.import语句使用以下约定:如果包的
__init__.py代码定义了一个名为的列表__all__,则它将被视为from package import *遇到时应导入的模块名称列表.在发布新版本的软件包时,由软件包作者决定是否保持此列表的最新状态.如果包装作者没有看到从包装中导入*的用途,他们也可能决定不支持它.
| 归档时间: |
|
| 查看次数: |
14407 次 |
| 最近记录: |