当将生成器用作参数时,我无法理解它们。以下是一些我不完全理解错误来源的案例,或者至少是如何解决这些错误的原因。对于发电机功能/用途的明确解决方案以及更广泛的解释将不胜感激。
(我包括3个例子,因为我觉得他们都是同一个误解的一个方面。我认为这个问题会更好地作为一个帖子而不是3.如果你不同意,请发表评论。)
在第一个例子中:我理解生成器对象不能显式添加,但是如何修改脚本以使用(解包?)生成器?
>>> def f(x): return x
>>> def g(x): yield x
>>> def h(x, y): return x + y
>>> h(f(3), f(4))
7
>>> h(g(3), g(4))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in h
TypeError: unsupported operand type(s) for +: 'generator' and 'generator'
在第二个例子中:我无法理解预定义的生成器对象如何用于为函数生成参数值。
>>> print(*(x*2 for x in range(3)))
0 2 4
>>> print(x*2 for x in range(3))
<generator object <genexpr> at 0x7fc71f050db0>
>>> print(*(yld(x) for x in range(3)))
<generator object yld at 0x7fc71f050c50> <generator object yld at 0x7fc71f050ca8> <generator object yld at 0x7fc71f050e08>
在第三个例子中,如何将生成器用于多参数函数?
def yld(x): yield x
(lambda x, y: x + y)(*(yld(x) for x in range(2)))