将返回函数中的变量用作另一个函数中的参数

时间:2014-03-13 13:44:05

标签: python function return

我有一个函数有4个参数定义为:

call(a,b,c,d):

我有另一个叫做

的函数
return_args() #that returns 4 variables. 

当我执行以下操作时:

call(return_args()) #it errors out saying, that's 1 arguments, not 4 arguments 

我知道我可以将4个变量存储在call()之前的另一行中,但是可以在call()行中返回所有变量。

4 个答案:

答案 0 :(得分:4)

您可以使用*参数解包

call(*return_args())

这是以下的简写形式:

a, b, c, d = return_args()
call(a, b, c, d)

甚至

tup = return_args()
call(*tup)

以这种方式使用的Python *运算符基本上说"解包这个元组并将解压缩的值作为参数传递给此函数"。

相关运算符**对关键字参数执行类似的技巧:

def call(arg1=None, arg2=None, **kwargs):
    pass

kwargs = {'arg1': 'test', 'arg3': 'whatever'}
call(**kwargs)

***可以一起使用:

def call(*args, **kwargs):
    pass
call(*return_args(), **kwargs)

答案 1 :(得分:2)

您可以使用*运算符将列表作为单独的参数发送:

call(*return_args())

答案 2 :(得分:1)

使用'变量解包'句法: call( *return_args() )

或者,您可以使用过时的语法:apply( call, return_args() )

答案 3 :(得分:1)

return_args() #that returns 4 variables. 

这是一个误解,它不会返回4个变量。功能如:

def return_args():
    return 1, 2, 3, 4

实际上是这样做的:

def return_args():
    mytuple = (1, 2, 3, 4)
    return mytuple

并返回一件事。

另一方面是"解构分配"在Python中,这是能够做到这一点:

a, b = 1, 2

这是一种分配/绑定两个变量的方法,但实际上它正在创建,然后解压缩序列(1,2)。你可以写:

a, b, c, d = return_args()

看起来你返回了四件东西并将它们绑定到四个变量名称,这是一个干净,有用的抽象,但事实并非如此 - 实际上创建了一个序列(其中包含4个内容) ),然后将它解压缩以匹配一系列变量名称。

两个抽象泄漏,你发现当你尝试这样做时,return_args()返回一个东西:

call(return_args()) #it errors out saying, that's 1 arguments, not 4 arguments

其他答案正确地建议call(*return_args())作为一个解决方案,它在"解包参数列表":http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists

下记录在此处

(另一方面是为了接受这里讨论的可变数量的参数而创建的函数:https://stackoverflow.com/a/11550319/478656