首页 > 解决方案 > 带参数的生成器?

问题描述

有没有办法创建一个参数化的生成器。

我想要一个生成器/计数器,如果我通过 True,它会增加,如果我通过 False,它会减少。

 next(gen(True))
 1
 next(gen(True))
 2
 next(gen(False))
 1

如果它回落到零以下,我想结束迭代。

我正在使用这个生成器来实现回溯,即当所有选项都用尽时,就会出现低于零的情况。

达到上限是动态的。如果我无法整合它,我可以在外面进行检查。

拥有生成器允许我将循环逻辑作为简单的 while 循环来执行。

如前所述,我也可能会探索 Callable 对象。

标签: pythonparametersgenerator

解决方案


如果gen是 type 的值generator,则可以使用它的send方法。next(gen)本质上与gen.send(None)(其中一个必须用于启动新生成器)相同。

def make_gen():
    counter = 0
    while True:
        if (yield counter):
            counter += 1
        else:
            counter -= 1

然后

>>> gen = make_gen()
>>> next(gen)
0
>>> gen.send(True)
1
>>> gen.send(True)
2
>>> gen.send(False)
1

推荐阅读