自动导出所有函数(与手动指定__all__相对)

9 投票
3 回答
8751 浏览
提问于 2025-04-17 10:22

我有一个叫做 helpers.py 的文件,这个文件里定义了大约30个辅助函数,我想把它们导出,像这样:

from helpers import *

为了做到这一点,我把这30个函数都添加到了 __all__ 这个变量里。请问有没有办法自动导出所有函数,而不需要一个一个去指定呢?

3 个回答

9

其实我觉得Gandaro说得对,你不一定需要指定 __all__,不过如果出于某种未知的原因你需要这样做的话,你可以通过 dir() 来过滤关键词:

__all__ = [ helper for helper in dir() if helper == MY_CONDITION ]
9

如果你不定义 __all__,那么在使用 from helpers import * 时,你模块里的所有函数都会被导入。

如果你有一些想要保密的函数,可以在它们的名字前面加个下划线。根据我的测试,这样做可以阻止这些函数被 import * 导入。

比如,在 helper.py 文件里:

def _HiddenFunc():
    return "Something"

def AnActualFunc():
    return "Hello"

然后:

>>> from helper import *
>>> AnActualFunc()
'Hello'
>>> _HiddenFunc()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
NameError: name '_HiddenFunc' is not defined
18

是的,只要不指定 __all__ 就可以了。

撰写回答