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

Python中如何实现带方法链的延迟计算?

实现Python中的惰性链式调用

当然可以实现这种惰性链式调用的逻辑!核心思路是把操作指令先“记录”下来,而不是立刻执行计算,等到调用compute()的时候再统一处理所有排队的操作。下面我一步步给你讲清楚实现方式:

实现思路

  • 给MATH类新增一个列表,用来存储待执行的操作(比如是加法还是减法,以及对应的参数)
  • 让add、minus这些操作方法返回当前实例(self),这样就能实现链式调用
  • compute()方法负责遍历所有待执行的操作,批量修改results列表

完整代码实现

class MATH(object):
    def __init__(self):
        self.results = [0, 1, 2]
        # 用来存储待执行的操作队列,每个元素是(操作类型, 参数)的元组
        self.operations = []

    def add(self, value):
        # 记录加法操作,不立即执行
        self.operations.append(('add', value))
        # 返回自身实例,支持链式调用
        return self

    def minus(self, value):
        # 记录减法操作
        self.operations.append(('minus', value))
        return self

    def compute(self):
        # 遍历操作队列,依次执行所有计算
        for op_type, value in self.operations:
            if op_type == 'add':
                self.results = [num + value for num in self.results]
            elif op_type == 'minus':
                self.results = [num - value for num in self.results]
        # 执行完毕后清空操作队列,避免重复执行(可选,根据需求调整)
        self.operations = []
        # 返回结果方便后续使用
        return self.results

测试调用逻辑

你可以按照预期的方式调用,完全符合你的需求:

m = MATH()
# 链式调用阶段:只是记录操作,不会修改results
m.add(5).minus(2).add(7)

# 此时查看results还是初始值
print(m.results)  # 输出: [0, 1, 2]

# 调用compute才会批量执行所有操作
final_result = m.compute()
print(final_result)  # 输出: [10, 11, 12]

关键细节说明

  • 链式调用的实现:每个操作方法最后返回self,这样每次调用方法后得到的还是同一个MATH实例,自然就能接着调用下一个方法。
  • 惰性执行的核心:我们没有在add/minus里直接修改results,而是把操作指令存在队列里,相当于把计算任务“攒起来”,直到compute被调用才一次性处理。
  • 扩展性:如果后续要新增乘法、除法等操作,只需要新增对应的方法,往operations队列里添加新的操作类型即可,非常灵活。

内容的提问来源于stack exchange,提问作者slaw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:47