web-dev-qa-db-ja.com

ジェネレーターをループする方法

ジェネレーターをどのようにループできますか?私はこの方法について考えました:

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

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

63
iTayb

単に

for x in gen:
    # whatever

トリックを行います。ご了承ください if genは常にTrueを返します。

121
Sven Marnach
for item in function_that_returns_a_generator(param1, param2):
    print item

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

15
Christian Witts

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

for _ in gen: pass
7
mmj

他の反復​​可能なものと同じように扱ってください:

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

ご了承ください if gen:は常にTrueなので、Falseテストです。

4
Jon Clements

単純にループすることができます:

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

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

>>> for i in gen: print i
>>> 
3
adalbertpl

ジェネレーターを手動で移動する(つまり、各ループを手動で操作する)場合は、次のようなことができます。

    from pdb import set_trace

    for x in gen:
        set_trace()
        #do whatever you want with x at the command Prompt
        #use pdb commands to step through each loop of the generator e.g., >>c #continue   
1
rysqui