回顾itertools.cycle的实现细节,在我看来while循环是用来重置生成器(具有yield的函数(并提供可迭代函数的无限重复的,但如果是这样的话,while不要向上移动while,并删除该方法的后半部分。假设他们比我聪明,我就假设我遗漏了什么,尽管下面的第二个函数似乎可以处理生成的dict、列表和字符串。
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
我一定是错过了什么?或者一个可迭代类型,其中第一个是必需的,第二个会破坏它
如果iterable
是生成器或其他适当的迭代器(而不是列表(,那么它将在第一次通过for element in iterable
循环时耗尽,随后通过该循环将一无所获。在第一次迭代时,您需要将可迭代的内容保存在某个地方,以避免这种情况发生。