Python修改生成器

Python修改生成器,python,generator,Python,Generator,我实现了一个(简单的)python生成器。现在,我想做另一个(从它开始),它将迭代所有值,但最后一个 def gen(x): # Generate the interval [x, 10] if x <= 10: yield x for v in gen(x + 1): yield v def gen(x):#生成间隔[x,10] 如果x使用临时变量作为简单的“队列”,则可以从任何迭代器转

我实现了一个(简单的)python生成器。现在,我想做另一个(从它开始),它将迭代所有值,但最后一个

def gen(x):                   # Generate the interval [x, 10]
    if x <= 10:
        yield x
        for v in gen(x + 1):
            yield v
def gen(x):#生成间隔[x,10]

如果x使用临时变量作为简单的“队列”,则可以从任何迭代器转发元素,并将最后一个元素保留在末尾:

def islice_to_last(it):
    prev_value = next(it)
    for value in it:
        yield prev_value
        prev_value = value
或更一般地(对于小于等于x的发电机,最后一个元件):


使用临时变量作为简单的“队列”,您可以转发来自任何迭代器的元素,并将最后一个元素保留在末尾:

def islice_to_last(it):
    prev_value = next(it)
    for value in it:
        yield prev_value
        prev_value = value
或更一般地(对于小于等于x的发电机,最后一个元件):


看不到代码就很难说。您可能不能直接修改现有的,但您可能可以概括您必须能够在这两种情况下工作的内容。我将添加我的代码,但我仍然相信知道它是一个发电机是你所需要的答案。
itertools.islice
就足够了。我们如何告诉你如何在不知道你已经拥有什么的情况下修改你必须做的事情呢?@AlexeyKachayev:不是
islice()
不支持负索引。你必须事先知道另一个迭代器将产生多少项。如果不看你的代码,很难判断。您可能不能直接修改现有的,但您可能可以概括您必须能够在这两种情况下工作的内容。我将添加我的代码,但我仍然相信知道它是一个发电机是你所需要的答案。
itertools.islice
就足够了。我们如何告诉你如何在不知道你已经拥有什么的情况下修改你必须做的事情呢?@AlexeyKachayev:不是
islice()
不支持负索引。你必须事先知道另一个迭代器将产生多少项。装饰器部分如何,它是否产生逻辑?装饰器部分如何,它是否产生逻辑?