__all__ = []
约定公开接口 : 可以清晰明了的知道该文件暴露的接口, 约定成俗的调用该接口。
限制该行为from XXX import *
: code当中不建议使用 from xxx import *
的写法的,但线下调试的时候经常用到。如果模块中没有定义 all,执行 from XXX import *
的时候会将模块中非下划线开头的成员都导入当前命名空间中,这样就有可能弄脏当前命名空间, 调试容易产生问题。如果显式声明了 __all__
,import *
就只会导入 __all__
列出的成员。但它只对import *
起作用,对from XXX import XXX
不起作用。
用例:
被测文件test.py
__all__ = ['a',
'b',
'run',]
a = 'aaa'
b = 'bbb'
c = 'ccc'
def run():
print ('Run the function.')
测试结果 test1.py
from test import *
print(a)
print(b)
print(run())
print(c)
from test import c
print(c)
- 只能导入__all__声明的变量或函数
- 对
from test import c
无效
注意
__all__=[]
是list 类型, 接受函数的字符串形式,不要写表达式