在Python函数中返回变量输出?

时间:2009-12-12 12:42:55

标签: python

我有一个返回列表的函数。当我知道列表中的元素数量时,我可以执行以下操作:

x,y,z=foo()

但是,列表中的元素数量可能会有所不同。我想做点什么

x,y*=foo()

其中x将包含返回列表中的第一个元素,而y *将包含剩余的多个元素。显然,Python不支持这种语法。这有哲学上的原因吗?我是否以错误的方式思考这个问题?

提前感谢。

4 个答案:

答案 0 :(得分: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
>>>

答案 1 :(得分:3)

喜欢这个

results = foo()
x= results[0]
y= results[1:]

或者更改你的功能以返回两元组

def foo():
    ....
    return someList[0], someList[1:]

答案 2 :(得分: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]

答案 3 :(得分:0)

您需要做的是返回一个列表

e.g。返回[...]

然后您会收到列表并查找其长度,例如ABC = F(.....)

len(abc)会给你列表中元素的数量

对于abc中的iiabc:允许您访问每个元素