Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Python中导入整个模块及其两个函数的正确方法是什么?_Python_Python 3.x_Python 3.5 - Fatal编程技术网

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

什么';在Python中导入整个模块及其两个函数的正确方法是什么?,python,python-3.x,python-3.5,Python,Python 3.x,Python 3.5,我知道,from module import*将导入当前名称空间中的所有函数,但这是一种糟糕的做法。我想直接使用两个函数,并在需要使用模块中的任何其他函数时使用module.function。我目前正在做的是: import module from module import func1, func2 # DO REST OF MY STUFF 这是一种好的做法吗?前两个语句的顺序重要吗? 有没有更好的方法可以让我直接使用这两个函数,并像往常一样使用其余的函数,在它们前面加上模块名 如果我在一

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

import module
from module import func1, func2
# DO REST OF MY STUFF
这是一种好的做法吗?前两个语句的顺序重要吗? 有没有更好的方法可以让我直接使用这两个函数,并像往常一样使用其余的函数,在它们前面加上模块名


如果我在一条语句中五次使用给定模块中的同一函数,只使用
import 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
有关更多信息,请阅读文档

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

因为您已经持有对
模块的引用

如果我是你,我会以
导入模块
的形式导入它。因为您的问题是
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()

编辑:基于实际问题中的编辑

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

例如:要将这些函数的重新编译值作为参数传递给另一个函数吗?作为:

可以这样做:

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

大多数程序员都是这样做的。不,顺序不重要。通常,您希望选择一种或另一种样式(因此也可以到处使用
module.func1
module.func2
),但这是一种样式选择。我发现它更加一致。五次调用同一个函数本身在我看来很奇怪。选中“编辑我的”answer@MartijnPieters我不是,我认为这是最好(至少更好)的方法。我想直接使用两个函数,当我必须使用模块中的任何其他函数时,使用module.function。我尝试过这种方法,但当我需要在一条语句中五次使用给定模块中的相同函数时,它变得太长和重复。这就是我想要避免的。@NeenaVivek你应该在你的问题中提到这一点。在这种情况下,我认为做你已经做的事情会更好,因为至少它会减少属性访问的数量。为什么这样做不好呢?毕竟,这只是一种风格的选择,但你不能激励自己为什么要选择你的替代品。@MartijnPieters:是的。可能是基于意见的。在回答中也提到了“如果我是你,我会的”。在我看来,这不是一个好的造型技巧
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)