2011-07-20 40 views
22

我从一个模块从一个Python模块

进口大量的功能导入多个功能是它更好地使用

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

这是一个有些凌乱,但避免了一切从充斥当前的命名空间该模块或

from my_module import * 

看起来很整齐,但会填充该模块中的所有内容。

在PEP8中找不到任何关于按名称导入多少的限制。哪个更好?为什么?

回答

29

如果你确实需要这么多功能,那么你已经在污染你的命名空间了。

我建议:

import my_module 

或者,如果my_module有很长的名称使用别名:

import my_long_module as m 
-2

我建议你解决,通过适当分组功能分手了你的模块的问题并将其放入单独的模块中。

Kugel的别名方法也很好 - 虽然我不会鼓励使用别名如“m”。 :O)

9

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

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 
4

随着管理的一点点你可以控制进口*进口。假设你的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的__all__属性定义的那些函数和变量。 PY。

+0

如果模块是某些您不能或不想编辑的内置或第三方模块,该怎么办? –

+0

然后你可能不能/不应该这样做。我通过文件名称假定这是他创建的东西。 –

+0

@MannyD - 这是正确的,但是在我的代码中的其他地方我需要导入function9..functionN –