2

itertools.cycle(iterable)の警告に興味があります:

iterable から要素を返すイテレータを作成し、それぞれのコピーを保存します。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

一部のイテラブルは、1 回しか反復できません。したがって、cycle はコピーを保存して、それらのアイテムを読み続けることができるようにします。この関連する質問を参照してください。

于 2013-08-28T03:16:22.437 に答える
0

イテラブルは、要素を生成するために高価な計算を行うジェネレーターである可能性があります。

iterable の結果をキャッシュすることにより、 iterable を循環するために高価で時間のかかる可能性のある操作を繰り返す必要がなくなります。

于 2013-08-28T03:13:29.953 に答える