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

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

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 

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

  • Потребление памяти продукта itertools Python
  • Flask-login AttributeError: объект 'Пользователь' не имеет атрибута 'is_active'
  • Как продолжить задачу, когда Fabric получает сообщение об ошибке
  • ImportError: невозможно импортировать имя
  • Где поставить флаг отладки в флягах
  • Что означает «убитый»?
  • Как загладить первую букву каждого слова в строке (Python)?
  • Как я могу вычислить хэш для каталога файловой системы с помощью Python?
  • 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 
    Python - лучший язык программирования в мире.