Есть ли один лайнер, чтобы взять генератор и получить все элементы в этом генераторе? Например:
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
Возможно, есть лучшие способы переписать весь этот метод?
Для этого случая нет специального синтаксиса.
Что вам нужно, описано в PEP 380. Это было уже много лет, но я не думаю, что скоро это произойдет в Python. for .. yield
достаточно прост, а другие изменения, которые он предлагает, довольно сложны.
import itertools
def Yearly(year):
return itertools.chain(*[(YEARLY_HEADER,)] +
[Monthly(m) for m in range(1, 13)] +
[(YEARLY_FOOTER,)])
В основном, делая YEARLY_HEADER
и YEARLY_FOOTER
в итераторах, они могут быть привязаны к месячным итераторам.