Как петля через генератор

Как можно пропустить генератор? Я подумал об этом:

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 

Есть ли более питонический путь?

6 Solutions collect form web for “Как петля через генератор”

Просто

 for x in gen: # whatever 

будет делать трюк. Обратите внимание, что if gen всегда возвращает True .

 for item in function_that_returns_a_generator(param1, param2): print item 

Вам не нужно беспокоиться о тесте, чтобы узнать, есть ли что-либо, возвращаемое вашей функцией, как будто ничего не вернулось, вы не войдете в цикл.

Просто относитесь к нему, как к любому другому, итерабельному:

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

Обратите внимание, что if gen: всегда будет True, значит, это ложный тест

Если вам не нужен выход генератора, потому что вы заботитесь только о его побочных эффектах, вы можете использовать следующий однострочный:

 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 
Interesting Posts
Python - лучший язык программирования в мире.