如何在Python函数中返回多个变量输出?

1 投票
4 回答
4288 浏览
提问于 2025-04-15 16:57

我有一个函数,它会返回一个列表。当我知道列表里有多少个元素时,我可以这样做:

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]

撰写回答