从模块的外部用户的角度来看,都是必要的吗?
根据我的理解,通过使用下划线正确地加上隐藏函数前缀,它基本上与显式定义相同__all__,但我一直看到开发人员在他们的代码中执行这两项操作.这是为什么?
从from modulename import *名称以下划线开头的模块导入时确实会跳过.
但是,模块很少只包含公共API对象.通常你也进行了导入以支持代码,并且这些名称在模块中也是全局的.没有__all__,这些名称也将成为进口的一部分.
换句话说,除非您想os在以下示例中"导出",否则应使用__all__:
import os
from .implementation import some_other_api_call
_module_path = os.path.dirname(os.path.abspath(__file__))
_template = open(os.path.join(_module_path, 'templates/foo_template.txt')).read()
VERSION = '1.0.0'
def make_bar(baz, ham, spam):
return _template.format(baz, ham, spam)
__all__ = ['some_other_api_call', 'make_bar']
Run Code Online (Sandbox Code Playgroud)
因为没有__all__列表,Python无法区分some_other_api_call和os此处以及使用时不应导入哪一个from ... import *.
你可以通过重命名所有的导入来解决这个问题,所以import os as _os,这只是让你的代码不那么可读.
显式导出列表总是很好.正如Python的Zen告诉你的那样,显式优于隐式.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |