用__all__=[“fun1”, “fun2”,]来暴露接口(模块级别),一些不以下划线开头的变量(比如从其他地方 import 到当前模块的成员)可以同样被排除出去。
不提倡用 from xxx import * 的写法的,但有时候图个方便这样用。如果一个模块 spam 没有定义 all,这种写法会将 spam 中非下划线开头的成员都导入当前命名空间中,这样当然就有可能弄脏当前命名空间。如果显式声明了 all,import * 就只会导入 all 列出的成员。如果 all 定义有误,列出的成员不存在,还会明确地抛出异常,而不是默默忽略。
使用注意:
all 应该是 list 类型的
不应该动态生成 all,比如使用列表解析式。_即
all 应该写在所有 import 语句下面,和函数、常量等模块成员定义的上面。