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

Ole*_*xiy 2 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
Run Code Online (Sandbox Code Playgroud)

也许有更好的方法来重写这整个方法?

por*_*uod 5

import itertools

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

基本上,使用YEARLY_HEADERYEARLY_FOOTER进入迭代器,它们可以与月度迭代器链接.

  • 这里好点.是的,有一个单行.与大多数单行一样,它更难阅读. (6认同)