如果我在 Python 2.7 中有一个非常简单(尽管可能非常复杂)的函数生成器,如下所示:
def accumulator():
x = yield 0
while True:
x += yield x
可以这样使用:
>>> a = accumulator()
>>> a.send(None)
0
>>> a.send(1)
1
>>> a.send(2)
3
>>> a.send(3)
6
另一个产生相同结果(除了乘以 2)的函数生成器的简单包装器是什么?上面的函数生成器很简单,但请假设它太复杂而无法复制粘贴。我正在尝试一些事情,比如:
def doubler():
a = accumulator()
a.send(None)
y = yield 0
while True:
y = 2 * a.send(yield y)
或者,想象一些更简单的事情:
def doubler():
a = accumulator()
a.send = lambda v: 2 * super(self).send(v)
return a
两者都严重损坏,所以我不会分享语法错误,但它可能说明我正在尝试做的事情。
理想情况下,我想要得到一些东西,比如:
>>> d = doubler()
>>> d.send(None)
0
>>> d.send(1)
2
>>> d.send(2)
6
>>> d.send(3)
12
结果与原始结果完全相同,只是增加了一倍。
我试图避免重复非常复杂的函数生成器来创建相同的结果,除非按已知因子进行缩放。
第二个生成器最终将具有不同的输入流,因此我不能只使用第一个生成器的结果并将其加倍。我需要第二个独立的生成器,包裹第一个生成器。
输入流是不确定的,因此不可能生成整个序列然后进行变换。
看来我想映射或嵌套这些函数生成器,但我不确定合适的术语,所以我在谷歌中一无所获。