ジェネレーターをどのようにループできますか?私はこの方法について考えました:
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的な方法はありますか?
単に
for x in gen:
# whatever
トリックを行います。ご了承ください if gen
は常にTrue
を返します。
for item in function_that_returns_a_generator(param1, param2):
print item
関数から返されるものがあるかどうかを確認するテストについて心配する必要はありません。何も返されないかのように、ループに入りません。
副作用のみに関心があるためにジェネレータの出力が必要ない場合は、次のワンライナーを使用できます。
for _ in gen: pass
他の反復可能なものと同じように扱ってください:
for val in function_that_returns_a_generator(p1, p2):
print val
ご了承ください if gen:
は常にTrueなので、Falseテストです。
単純にループすることができます:
>>> gen = (i for i in range(1, 4))
>>> for i in gen: print i
1
2
3
ただし、ループは1回しかできないことに注意してください。次回のジェネレーターは空になります:
>>> for i in gen: print i
>>>
ジェネレーターを手動で移動する(つまり、各ループを手動で操作する)場合は、次のようなことができます。
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