无需使用next的可续接生成器实现方法问询
实现可直接调用的状态保留函数
你需要的是一个能保留执行状态的函数,每次调用自动执行下一个预设操作,不用手动调用next()。可以通过闭包包装生成器来实现:
完整实现代码
def a_generator(): yield lambda x: x + 1 yield lambda x: x + 2 yield lambda x: x + 3 yield lambda x: f"Okay we are almost complete {x}" def make_callable_generator(gen): def wrapper(x): return next(gen)(x) return wrapper # 初始化可直接调用的函数 generator = make_callable_generator(a_generator())
验证调用
直接按你期望的方式调用即可:
assert generator(5) == 6 assert generator(5) == 7 assert generator(5) == 8 assert generator(5) == "Okay we are almost complete 5"
原理说明
make_callable_generator是一个闭包,它接收生成器实例作为参数,返回一个wrapper函数。- 每次调用
wrapper(也就是你使用的generator)时,会自动调用next(gen)获取生成器的下一个操作函数,然后传入参数执行。 - 生成器本身会天然保留上次执行的位置,所以每次调用都会严格按顺序执行预设的操作。
可选:处理生成器耗尽的情况
如果需要避免生成器耗尽后抛出StopIteration异常,可以在闭包里捕获异常并返回提示:
def make_callable_generator(gen): def wrapper(x): try: return next(gen)(x) except StopIteration: return "所有操作已执行完毕" return wrapper
内容的提问来源于stack exchange,提问作者A H
相关产品推荐
相关产品推荐

