我喜欢让发电机顺从其他发电机,例如
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
Run Code Online (Sandbox Code Playgroud)
gz()中的显式循环是实现此目的的唯一方法,还是有更好的替代方案?
Sve*_*ach 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()
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅PEP 380.
Mag*_*off 11
import itertools
gz = itertools.chain(gx(), gy())
Run Code Online (Sandbox Code Playgroud)
在chain他们的文档中,他们通过实现来描述它:
def chain(*iterables):
for it in iterables:
for element in it:
yield element
Run Code Online (Sandbox Code Playgroud)
你也可以从中汲取灵感:)