我需要参数化的发电机。这样一个接受调用.next(arg)的参数。 在这种特殊情况下,我希望生成器在arg为True时为+1,在False时为-1。
这在python中是否可行?
答案 0 :(得分:4)
在生成器实例上使用.send
方法允许您将状态注入生成器。这使得这样的事情成为可能:
>>> def mygen():
... i = 0
... sign = 1
... while True:
... val = yield sign*i
... if val is not None:
... sign = 1 if val else -1
... i += 1
...
>>> g = mygen()
>>> next(g)
0
>>> next(g)
1
>>> next(g)
2
>>> g.send(False)
-3
>>> next(g)
-4
>>> next(g)
-5
>>> g.send(True)
6
>>> next(g)
7
请注意,next(g)
相当于g.send(None)
。
答案 1 :(得分:0)
这是我的最终版本:
def flip_flop(low=0, high=10):
i = 0
while i >= low and i <= high :
cond = yield i
if cond : i += 1
else : i -= 1
In [64]: ff = flip_flop()
In [65]: ff.next()
Out[65]: 0
In [66]: ff.send(True)
Out[66]: 1
In [67]: ff.send(True)
Out[67]: 2
In [68]: ff.send(True)
Out[68]: 3
In [69]: ff.send(False)
Out[69]: 2