Itertools循环方法 - 为什么“while”循环?

问题描述 投票:2回答:1

回顾一下itertools.cycle的实现细节,在我看来,while循环用于重置生成器(带有yield的函数)并提供一个可迭代的无限重复,但如果是这种情况,则不要向上移动而up并删除方法的后半部分。假设他们比我聪明,我假设我错过了一些东西,虽然下面的第二个函数似乎与产生的词组,列表和字符串一起工作。

https://docs.python.org/3.7/library/itertools.html#itertools.cycle

def cycle(iterable):
    # cycle('ABCD') --> A B C D A B C D A B C D ...
    saved = []
    for element in iterable:
        yield element
        saved.append(element)
    while saved:
        for element in saved:
              yield element

def cycle_huh(iterable):
    # cycle('ABCD') --> A B C D A B C D A B C D ...
    while True:
        for element in iterable:
            yield element

我肯定错过了什么?或者是可迭代类型,其中第一个是必需的,第二个会破坏它。

python iterator generator
1个回答
2
投票

如果iterable是一个生成器或其他适当的迭代器(而不是一个列表),那么它将在第一次通过for element in iterable循环时耗尽,随后通过这个循环将不会产生任何效果。你需要在第一次迭代时保存iterable的内容,以避免这种情况发生。

© www.soinside.com 2019 - 2024. All rights reserved.