2.1.1.5 生成器链

:这是PEP 380的预览(没有实现,但是已经被Python3.3接受)。

假设我们正在写一个生成器,并且我们想要量产(yield)由第二个生成器生成的一堆值,子生成器。如果只关心量产值,那么就可以没任何难度的用循环实现,比如

In [ ]:

  1. for v in subgen:
  2. yield v

但是,如果子生成器想要与调用者通过send()throw()close()正确交互,事情就会变得复杂起来。yield语句必须用try..except..finally结构保护起来,与前面的生成器函数“degug”部分定义的类似。在PEP 380提供了这些代码,现在可以说在Python 3.3中引入的新语法可以适当的从子生成器量产:

In [ ]:

  1. yield from some_other_generator()

这个行为与上面的显性循环类似,重复从some_other_generator量产值直到生成器最后,但是,也可以向前对子生成器sendthrowclose