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

时间:2018-12-02 22:05:52

标签: python iterator generator

回顾itertools.cycle的实现细节,在我看来,while循环用于重置生成器(具有yield的函数)并提供无限重复的iterable,但如果是这样,则不是向上移动一会儿,然后删除该方法的后半部分。假设它们比我聪明,我假设我丢失了一些东西,尽管下面的第二个函数似乎可以处理屈服的字典,列表和字符串。

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

vs。

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

我一定想念什么吗?或者是一个可迭代的类型,其中第一个是必需的,而第二个将破坏它。

1 个答案:

答案 0 :(得分:2)

如果iterable是生成器或其他适当的迭代器(而不是列表),则它将在for element in iterable循环的第一次通过中耗尽,随后在此循环中通过什么也不会产生。您需要在第一次迭代时将iterable的内容保存在某个地方,以免发生这种情况。