[英]pack/unpack a generator
我有两个发电机。 第一个生成器有时需要调用第二个生成器并返回它从那里获得的值:
def a():
for _b in b():
yield _b
def b():
yield 1
yield 2
for _a in a():
print _a
有没有更优雅的方法来做到这一点:
for _b in b():
yield _b
我试过这个:
yield *b()
但肯定是行不通的。 我有 Python 2.6。
我想你的意思是PEP380 。 它可从 Python 3.3 获得。 看起来像:
yield from b()
在 Python2 中没有特殊的语法。 您只需使用 for 循环。
您问题中a
function 实际上完全没用。 你可以在它的地方使用b
。
您可以使用生成器表达式。 它与循环一样简洁,而且它表明您的代码主要用于产生返回值而不是副作用。
def a():
return (_b for _b in b())
正如 phihag 所说,如果你的代码真的像这个例子,你可能可以简单地写a = b
,因为 a 和 b 返回相同的序列。
好吧,在这个简单的例子中,你可以只写a = b
或a = lambda: b
。 但是如果a
添加了它自己的元素,你可以使用itertools.chain :
import itertools
def a():
return itertools.chain(['a-value'], b())
请记住,尽管此变体可能更短,但for: yield
是一种非常直观(因此易于理解)的模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.