我实现了一个(简单的)python 生成器。现在,我想(从中)制作另一个,它将遍历所有值,但最后一个。
def gen(x): # Generate the interval [x, 10]
if x <= 10:
yield x
for v in gen(x + 1):
yield v
实现该目标的最佳方法是什么?是否可以使用装饰器更改原始生成器?
请您参考如下方法:
使用一个临时变量作为一个简单的“队列”,你可以转发来自任何迭代器的元素,并将最后一个元素放在最后:
def islice_to_last(it):
prev_value = next(it)
for value in it:
yield prev_value
prev_value = value
或更一般地(对于最多 x 个最后元素的生成器):
from collections import deque
import itertools as it
def islice_without_end(it, x):
d = deque(it.islice(it, x))
for value in it:
yield d.popleft()
d.append(value)
