我喜欢让发电机服从其他发电机,例如
def gx():
for i in [1, 2, 3]:
yield i
def gy():
for i in [11, 12, 13]:
yield i
def gz():
"""this should defer to gx and gy to
generate [1, 2, 3, 11, 12, 13]"""
for i in gx(): yield i
for i in gy(): yield i
gz()中的显式循环是唯一可行的方法,还是有更好的选择?
答案 0 :(得分:18)
在当前发布的Python版本中,显式循环是调用子生成器的唯一方法。 (我认为你的例子只是一个例子 - 不是你要解决的确切问题。)
Python 3.3将为此目的添加特殊语法yield from
:
def gz():
"""this should defer to gx and gy to
generate [1, 2, 3, 11, 12, 13]"""
yield from gx()
yield from gy()
有关详细信息,请参阅PEP 380。
答案 1 :(得分:11)
import itertools
gz = itertools.chain(gx(), gy())
在chain
的文档中,他们通过实现来描述它:
def chain(*iterables):
for it in iterables:
for element in it:
yield element
你也可以从中汲取灵感:)