从Python模块导入多个函数
我正在从一个模块中导入很多函数。
那么,使用下面这种方式更好呢?
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