Skip to main content
 首页 » 编程设计

Python修改生成器

2025年05月04日17exmyth

我实现了一个(简单的)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)