从Python模块导入多个函数

Jim*_*ies 36 python import coding-style

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

使用起来更好吗?

from my_module import function1, function2, function3, function4, function5, function6, function7
Run Code Online (Sandbox Code Playgroud)

这有点乱,但避免使用该模块或其他所有内容充斥当前命名空间

from my_module import *
Run Code Online (Sandbox Code Playgroud)

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

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

Kug*_*gel 43

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

我会建议:

import my_module
Run Code Online (Sandbox Code Playgroud)

或者,如果my_module具有长名称,则使用别名:

import my_long_module as m
Run Code Online (Sandbox Code Playgroud)


agf*_*agf 21

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

from my_module import function1, function2, function3, function4, function5, function6, function7
Run Code Online (Sandbox Code Playgroud)

请参阅"显式优于隐式".在import this.

如果你只想要一个更短的名字my_module.function1,总会有import my_module as mod.

对于少数几次使用的函数(要么输入很多次,所以你想要一个简短的名字或循环,所以访问速度很重要),有

func1 = my_module.function1
Run Code Online (Sandbox Code Playgroud)


Man*_*y D 9

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

my_module.py:

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

def function1():
   ...

# etc...
Run Code Online (Sandbox Code Playgroud)

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

  • 那么你可能不能/不应该这样做。我根据文件名推测这是他正在创建的东西。 (2认同)

小智 9

不确定这是否是新的,但现在你可以这样做:

from my_module import (
     function1,
     function2, 
     function3, 
     function4
     )
Run Code Online (Sandbox Code Playgroud)

至少这不会脱离页面,而且在我看来更容易阅读。