2

我很好奇itertools.cycle(iterable)中的警告:

制作一个迭代器,从可迭代对象中返回元素并保存每个元素的副本。当迭代耗尽时,从保存的副本中返回元素。无限重复。

相当于:

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(iterable):
    while True:
        for i in iterable:
            yield i

存放用过的物品有什么好处saved

4

2 回答 2

1

有些可迭代对象只能迭代一次。因此循环将存储一个副本,以便它可以继续读取这些项目。请参阅此相关问题

于 2013-08-28T03:16:22.437 回答
0

可迭代对象可能是一些生成器,它执行昂贵的计算来生成元素。

通过缓存可迭代的结果,您不必重复可能是昂贵且耗时的操作来循环遍历可迭代。

于 2013-08-28T03:13:29.953 回答