[英]return variable outputs in Python function?
我有一个返回列表的函数。 当我知道列表中的元素数量时,我可以执行以下操作:
x,y,z=foo()
但是,列表中的元素数量可以变化。 我想做类似的事情
x,y*=foo()
其中x将包含返回列表中的第一个元素,而y *将包含其余元素的其余部分。 显然,Python不支持此语法。 这有什么哲学原因吗? 我在想这个错误的方式吗?
提前致谢。
您的语法没有哲学上的异议,实际上,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
>>>
像这样
results = foo()
x= results[0]
y= results[1:]
或更改您的函数以返回两个元组
def foo():
....
return someList[0], someList[1:]
稍微概括的方法:
>>> 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]
您需要做的就是返回列表
例如return [...]
然后,您会收到列表并找到其长度,例如abc = f(.....)
len(abc)将为您提供列表中元素的数量
对于abc中的iiabc:将允许您访问每个元素
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.