如何在Python函数中返回多个变量输出?
我有一个函数,它会返回一个列表。当我知道列表里有多少个元素时,我可以这样做:
x,y,z=foo()
但是,列表里的元素数量是会变化的。我想要做类似这样的事情:
x,y*=foo()
在这里,x会包含返回列表中的第一个元素,而y*会包含剩下的所有元素。显然,这种写法在Python里是不支持的。有没有什么哲学上的原因呢?我是不是想错了?
提前谢谢你。
4 个回答
3
像这样
results = foo()
x= results[0]
y= results[1:]
或者把你的函数改成返回一个包含两个元素的元组
def foo():
....
return someList[0], someList[1:]
16
你的语法没有什么哲学上的问题,实际上,在Python 3.1中是支持的:
>>> a, *b = range(10)
>>> a
0
>>> b
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> # Or even more flexibly:
>>> a, *b, c = range(10)
>>> a
0
>>> b
[1, 2, 3, 4, 5, 6, 7, 8]
>>> c
9
>>>
3
一种稍微通用的方法:
>>> def unpack(seq, count):
... return seq[:count] + [seq[count:]]
>>> a, b = unpack([1, 2, 3], 1)
>>> a
1
>>> b
[2, 3]
>>> a, b = unpack([1, 2], 1)
>>> a
1
>>> b
[2]
>>> a, b = unpack([1], 1)
>>> a
1
>>> b
[]
>>> a, b = unpack([], 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
>>> a, b, c, d = unpack(range(10), 3)
>>> a
0
>>> b
1
>>> c
2
>>> d
[3, 4, 5, 6, 7, 8, 9]