如何调用返回多个值的函数

时间:2015-11-03 15:21:42

标签: python function

如何调用返回两个变量的函数?

例如:

def F1(x):
    do something with x
    return y, z

def F2(y, z, q):
    do lots of other things
    return profit

应该使用什么语法从F1调用F2,这样可以明确F1的哪个输出是y,哪个是z

我的直觉说

F2(F1(x), q) 

哪个没问题,但是如何在y内拨打zF2

6 个答案:

答案 0 :(得分:3)

您可以将F2函数定义更改为以下内容:

def F2((y, z), q):

并将其命名为:

F2(F1(x), q)

F1返回的元组的第0个元素将从y视为F2,返回的元组的第1个元素将从{z视为F2 1}}。

答案 1 :(得分:1)

您已接近解决方案。 您的F1返回2个值,但如果您直接输入F2参数,F2将在输入中看到

(y,z) <--- tuple
q <--- variable

解决方案是将F1的返回值存储到2个变量中,然后将它们传递给F2

y,z = F1(x)
F2(y,z,q)

另一个解决方案是使用*args 首先通过q,然后是y和z

def F2(q, *args):
    y, z = *args
    some other code

def F1(x):
    some code
    return y, z

F2(q, *F1(x))

答案 2 :(得分:0)

你可以回归元组:

a, b = F1(x)

答案 3 :(得分:0)

您可以使用*argspass multiple positional arguments来执行您的功能:

演示:

>>> def F(q,*args):
...    x,y=args
...    print x,y
...    print q
... 
>>> F('q',4,5)
4 5
q

当一个函数返回多个参数时,你可以使用*在调用时解包元组,将所有参数传递给function:

>>> def A():
...    return 5,6
... 
>>> F('q',*A())
5 6
q

答案 4 :(得分:0)

如果你想这样打F2,你可以使用:

F2(*F1(x), q=q)

这会解压缩F1的结果,只有命名参数可以遵循这种操作,因此您必须通过它的名称调用q。但是首先解开F1的结果可能更有意义。

y, z = F1(x)
F2(y, z, q)

答案 5 :(得分:0)

不是很优雅,但您可以将F2称为:

F2(F1(x)[0], F1(x)[1], q)

这将返回profit