如何循环发电机

怎样才能通过一个发电机循环? 我想过这个方法:

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