Идти глубже - доходность изнутри доходность - PullRequest
2 голосов
/ 03 февраля 2011

Есть ли одна строка для генерации генератора и выдачи всех элементов в этом генераторе?Например:

def Yearly(year):
  yield YEARLY_HEADER
  for month in range(1, 13):
    # How can I rewrite the following two lines?
    for line in Monthly(month):
      yield line
  yield YEARLY_FOOTER

def Monthly(month):
  yield MONTHLY_HEADER
  for day in range(31):  # Yes, this is wrong
    yield 'Day %d' % day
  yield MONTHLY_FOOTER

Может быть, есть лучшие способы переписать весь этот метод?

Ответы [ 2 ]

5 голосов
/ 03 февраля 2011
import itertools

def Yearly(year):
  return itertools.chain(*[(YEARLY_HEADER,)] + 
                         [Monthly(m) for m in range(1, 13)] + 
                         [(YEARLY_FOOTER,)])

По сути, превращая YEARLY_HEADER и YEARLY_FOOTER в итераторы, они могут быть связаны с ежемесячными итераторами.

3 голосов
/ 03 февраля 2011

Для этого случая нет специального синтаксиса.

То, что вы хотите, описано в PEP 380 .Это было вокруг в течение многих лет, но я не думаю, что оно превратится в Python в ближайшее время.for .. yield достаточно прост, а другие изменения, которые он предлагает, довольно сложны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...