如何循环发电机
怎样才能通过一个发电机循环? 我想过这个方法:
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的方式?
只是
for x in gen: # whatever
会做的伎俩。 请注意, if gen
总是返回True
。
for item in function_that_returns_a_generator(param1, param2): print item
你不需要担心testing,看看是否有任何东西被你的函数返回,就好像没有东西返回你不会进入循环。
只要把它像任何其他迭代:
for val in function_that_returns_a_generator(p1, p2): print val
请注意, if gen:
将始终为真,那么这是一个错误的testing
如果您不需要发生器的输出,因为您只关心其副作用,则可以使用以下一行代码:
for _ in gen: pass
你可以简单地循环它:
>>> gen = (i for i in range(1, 4)) >>> for i in gen: print i 1 2 3
但请注意,你只能循环一次。 下次发电机将是空的:
>>> 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 eg, >>c #continue