从Python模块导入多个函数

时间:2011-07-20 12:23:19

标签: python coding-style import

我从模块中导入了很多函数

使用

更好吗?
from my_module import function1, function2, function3, function4, function5, function6, function7

这有点乱,但避免使用该模块或

中的所有内容充斥当前命名空间
from my_module import *

看起来整洁,但会用该模块中的所有内容填充命名空间。

在PEP8中找不到关于按名称输入多少限制的内容。哪个更好,为什么?

4 个答案:

答案 0 :(得分:38)

如果您真的需要那么多功能,那么您已经在污染您的命名空间了。

我建议:

import my_module

或者,如果my_module有一个长名称,请使用别名:

import my_long_module as m

答案 1 :(得分:17)

如果它在一个或另一个之间,请使用

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

答案 2 :(得分:9)

通过一些管理,您可以控制导入*导入的内容。假设你的my_module有function1..function8,但你只想使功能1到6可用。在my_module中,重新分配__all__属性:

<强> my_module.py

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

def function1():
   ...

# etc...

现在,如果您使用from my_module import *,则只会从my_module.py中导入您在__all__属性中定义的那些函数和变量。

答案 3 :(得分:-1)

我建议您通过将功能分组并将其放入单独的模块中来拆分模块来解决问题。

Kugel的别名方法也很好 - 尽管我不鼓励使用像“m”这样的别名。 :O)