95

ジェネレーターをループするにはどうすればよいですか? 私はこのように考えました:

gen = function_that_returns_a_generator(param1, param2)
if gen: # in case the generator is null
    while True:
        try:
            print gen.next()
        except StopIteration:
            break

もっとpythonicな方法はありますか?

4

7 に答える 7

164

単に

for x in gen:
    # whatever

トリックを行います。if gen常に を返すことに注意してくださいTrue

于 2012-07-18T10:24:11.170 に答える
17
for item in function_that_returns_a_generator(param1, param2):
    print item

関数から何かが返されているかどうかを確認するためにテストについて心配する必要はありません。何も返されていないかのように、ループに入ることはありません。

于 2012-07-18T10:23:46.660 に答える
15

副作用のみを気にするためにジェネレーターの出力が必要ない場合は、次のワンライナーを使用できます。

for _ in gen: pass

ファローアップ

aiven のコメントに従って、いくつかのパフォーマンス テストを行いlist(gen)ましfor _ in gen: passtuple(gen)

tuple(gen)
于 2015-11-24T10:25:47.930 に答える
7

単純にループできます:

>>> gen = (i for i in range(1, 4))
>>> for i in gen: print i
1
2
3

ただし、ループできるのは 1 回だけであることに注意してください。次回ジェネレーターは空になります:

>>> for i in gen: print i
>>> 
于 2016-02-01T21:27:35.950 に答える
4

他の iterable と同じように扱ってください:

for val in function_that_returns_a_generator(p1, p2):
    print val

if gen:常にTrueになることに注意してください。したがって、これは偽のテストです

于 2012-07-18T10:24:12.617 に答える