从Python模块导入多个函数

63 投票
4 回答
121805 浏览
提问于 2025-04-16 21:55

我正在从一个模块中导入很多函数。

那么,使用下面这种方式更好呢?

from my_module import function1, function2, function3, function4, function5, function6, function7

这种方式虽然有点乱,但可以避免把那个模块里的所有东西都塞进当前的命名空间里,还是说

from my_module import *

这种方式看起来整洁,但会把那个模块里的所有东西都填满命名空间。

在PEP8中找不到关于应该按名称导入多少内容的限制。哪种方式更好,为什么呢?

4 个回答

17

通过一些简单的管理,你可以控制使用“import *”时到底导入哪些内容。假设你的模块叫做 my_module,里面有 function1 到 function8,但你只想让 function1 到 function6 可用。你可以在 my_module 里重新定义一个叫做 __all__ 的属性:

my_module.py:

__all__ = ['function1', 'function2', 'function3' ...]

def function1():
   ...

# etc...

这样一来,如果你使用 from my_module import *,那么只会导入你在 __all__ 属性里定义的那些函数和变量。

47

如果是在两者之间选择,使用

from my_module import function1, function2, function3, function4, function5, function6, function7

可以参考《显式优于隐式》这句话,具体可以在import this中找到。

如果你只是想要一个比my_module.function1更短的名字,可以使用import my_module as mod

对于那些你经常使用的函数(要么是因为你打字太多想要个短名字,要么是在循环中使用所以访问速度很重要),可以使用

func1 = my_module.function1
66

如果你真的需要那么多函数,那你的命名空间已经变得很乱了。

我建议你:

import my_module

或者,如果我的模块名字很长,可以使用一个别名:

import my_long_module as m

撰写回答