如何调用返回两个变量的函数?
例如:
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
内拨打z
和F2
?
答案 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)
您可以使用*args
至pass 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