gpt4 book ai didi

python - 从“yield from”表达式中捕获最后一个值

转载 作者:行者123 更新时间:2023-11-30 22:18:43 25 4
gpt4 key购买 nike

假设我们想要一个递归生成值的生成器,并且为了方便起见,我们有一个从中生成值的子迭代器。

def gen(l, last_value=0):

if not l:
return None

yield from (l[0] + i + last_value for i in range(3))
yield from gen(l[1:])

我们如何捕获子迭代器的最后一个返回值,以便我们可以将其提供给第二个迭代器?

这可能吗?

这是一个可能的解决方案,它会放弃使用以下产量:

def gen(l, last_value=0):

if not l:
return None

for x in (l[0] + i + last_value for i in range(3)):
yield x

yield from gen(l[1:], x)

最佳答案

由于我们知道本例中子迭代器的长度,因此我们可以使用 itertools.islice 对它进行切片直到倒数第二个项目,然后只需在剩余切片上调用 next() 即可获取最后一个项目。

使用 islice 可以防止 Python 级别的 for 循环:

from itertools import islice

def gen(l, last_value=0):

if not l:
return None

it = (l[0] + i + last_value for i in range(3))
yield from islice(it, 2)
last = next(it)
yield last
yield from gen(l[1:], last)
<小时/>

另一种方法,但违背了使用迭代器的目的的是使用 extended variable unpacking :

it = (l[0] + i + last_value for i in range(3))
*items, last = it # Now items is a tuple
yield from items
yield last
yield from gen(l[1:], last)

关于python - 从“yield from”表达式中捕获最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49297668/

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