gpt4 book ai didi

python - 如何在 python 函数中访问 double yield?

转载 作者:行者123 更新时间:2023-11-28 20:46:13 24 4
gpt4 key购买 nike

我有一个函数可以生成列表的两个部分:

>>> x = [1,2,3,4,5,6]
>>> def fold(ls):
... for i in range(0,2):
... yield x[:i]
... yield x[i:]
...

我知道它仍然作为 1 个生成器返回,尽管函数中有超过 1 个 yield:

>>> fold(x)
<generator object fold at 0x13f9320>
>>> t1, t2 = fold(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

要访问它们,我可以:

>>> for i in fold(x):
... print i
...
[]
[1, 2, 3, 4, 5, 6]
[1]
[2, 3, 4, 5, 6]

我想对这两个执行不同的操作,所以我需要像这样的某种访问权限:

>>> for i in fold(x):
... t1, t2 = i
... print t1, t2 # because
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ValueError: need more than 0 values to unpack

我可以对 yield 的奇数/偶数使用一些技巧并执行以下操作,但还有其他方法吗?

>>> for i,j in enumerate(fold(x)):
... if i & 0x1:
... print 't1', j
... else:
... print 't2', j
...
t2 []
t1 [1, 2, 3, 4, 5, 6]
t2 [1]
t1 [2, 3, 4, 5, 6]

最佳答案

只产生一个元组:

yield x[:i], x[i:]

然后你可以这样做:

for i in fold(x):
t1, t2 = i

甚至更好

for t1, t2 in fold(x):
...

旁注:第一个ValueError 是因为您正在尝试解压生成器。无论生成器是什么,如果左侧的变量数与生成器将产生的项目数不同,您将始终得到此异常。这是一个巧合,但您正在寻找的可能是这样的:

t1, t2 = list(fold(x))[0]

关于python - 如何在 python 函数中访问 double yield?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com