更深入 - 从内部收益率中收益

时间:2011-02-03 14:08:21

标签: python yield

是否有一个单线轮来接收发电机并产生该发电机中的所有元件?例如:

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 个答案:

答案 0 :(得分:5)

import itertools

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

基本上,将YEARLY_HEADERYEARLY_FOOTER放入迭代器中,它们可以与月度迭代器链接。

答案 1 :(得分:3)

这种情况没有特殊的语法。

PEP 380中描述了您想要的内容。它已存在多年,但我不认为它会很快进入Python。 for .. yield很简单,其提出的其他更改非常复杂。