参数化发电机?

时间:2018-03-08 22:29:20

标签: python parameters generator

我需要参数化的发电机。这样一个接受调用.next(arg)的参数。 在这种特殊情况下,我希望生成器在arg为True时为+1,在False时为-1。

这在python中是否可行?

2 个答案:

答案 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