如果我在Python 2.7中有一个非常简单(尽管可能非常复杂)的函数生成器,就像这样:
def accumulator():
x = yield 0
while True:
x += yield x
Run Code Online (Sandbox Code Playgroud)
哪个可以使用,如下所示:
>>> a = accumulator()
>>> a.send(None)
0
>>> a.send(1)
1
>>> a.send(2)
3
>>> a.send(3)
6
Run Code Online (Sandbox Code Playgroud)
除了乘以2之外,另一个产生相同结果的函数生成器的简单包装器是什么?上面的函数生成器很简单,但请假设复制粘贴太复杂.我正在尝试一些事情,比如:
def doubler():
a = accumulator()
a.send(None)
y = yield 0
while True:
y = 2 * a.send(yield y)
Run Code Online (Sandbox Code Playgroud)
或者,想象一些更简单的事情:
def doubler():
a = accumulator()
a.send = lambda v: 2 * super(self).send(v)
return a
Run Code Online (Sandbox Code Playgroud)
两者都是可怕的破坏,所以我不会分享语法错误,但它可以说明我正在尝试做什么.
理想情况下,我想得到一些东西,比如:
>>> d = doubler()
>>> d.send(None)
0
>>> d.send(1)
2
>>> d.send(2)
6 …Run Code Online (Sandbox Code Playgroud)