1. ホーム
  2. python

[解決済み] 無限イテレータを表す式はありますか?

2022-06-20 14:27:31

質問

無限イテレータを生成するための簡単な式はありますか?

これは純粋に理論的な質問です。ここで "実用的" の答えは必要ありません :)


例えば、生成式を使って有限のイテレータを作るのは簡単です。

my_gen = (0 for i in xrange(42))

しかし、無限のものを作るには、偽の関数で私の名前空間を "pollute"する必要があります。

def _my_gen():
    while True:
        yield 0
my_gen = _my_gen()

別ファイルで行うことや import -を後で使うことはカウントされません。


また、私は以下のことを知っています。 itertools.repeat はまさにこれを行います。それがないワンライナーのソリューションがあるのかどうか気になるところです。

どのように解決するのですか?

for x in iter(int, 1): pass

  • 2つの引数 iter = ゼロ引数の callable + センチネルの値
  • int() 常に 0

したがって iter(int, 1) は無限反復子です。この特定のテーマには、明らかに膨大な数のバリエーションがあります。 lambda をミックスに加えると特にそうです)。特に注目すべきバリエーションは iter(f, object()) であり、センチネル値として新しく作成されたオブジェクトを使用すると、最初の引数として使用される callable に関係なく、無限イテレータがほとんど保証されるからです。