在 Python 中导入整个模块及其几个函数的正确方法是什么?

What's the correct way for importing the whole module as well as a couple of its functions in Python?

我知道 from module import * 将导入当前命名空间中的所有函数,但这是一种不好的做法。我想直接使用两个函数并在必须使用模块中的任何其他函数时使用 module.function 。我目前正在做的是:

import module
from module import func1, func2
# DO REST OF MY STUFF

这是一个好习惯吗?前两个语句的顺序重要吗? 有没有更好的方法可以让我直接使用这两个函数并像往常一样使用其余函数并在它们前面加上模块名称?

如果我在一条语句中使用给定模块中的相同函数五次,仅使用 import module 会导致语句很长且重复很多。这就是我想避免的。

顺序无关紧要,这不是 pythonic 方式。当您导入 module 时,无需再次单独导入其某些功能。如果您不确定可能需要使用多少功能,只需导入模块并通过简单参考按需访问功能。

# The only import you need 
import module

# Use module.funcX when you need any of its functions

毕竟,如果您想比其他函数(更多)更多地使用某些函数,因为属性访问的成本比单独导入函数要大,您最好像之前那样导入它们。

而且,顺序并不重要。你可以这样做:

import module
from module import func1, func2

有关详细信息,请阅读文档 https://www.python.org/dev/peps/pep-0008/#imports

不好做(可能是基于意见):

import module

from module import func1, func2  # `func1` and `func2` are already part of module

因为您已经持有对 module 的引用。

如果我是你,我会以import module的形式导入。由于您的问题是 module.func1() 变得太长。我可以导入模块并使用 as 为名称创建别名。例如:

import module as mo
#                 ^ for illustration purpose. Even the name of 
#                   your actual module wont be `module`. 
#                   Alias should also be self-explanatory 

# For example:
import database_manager as db_manager

现在我可以访问以下功能:

mo.func1()
mo.func2()

编辑:根据实际问题编辑

如果您在同一行中调用相同的函数,则可能您已经做错了。如果您能分享您的函数,那就太好了做。

例如:想要将那些函数的返回值作为参数传递给另一个函数? as:

test_func(mo.func1(x), mo.func1(y). mo.func1(z))

可以这样做:

params_list = [x, y, z]
func_list = [mo.func1(param) for param in params_list]
test_func(*func_list)