You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:05:33