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

Python中对称函数的高效缓存策略优化:减少函数调用方案咨询

优化对称函数的缓存与循环策略

原方案的问题

原缓存key的实现存在两个明显缺陷:

  1. 集合转列表的顺序不确定,可能导致(a,b)和(b,a)生成不同的key,缓存完全失效;
  2. 集合→列表→字符串的转换操作开销大,远不如直接使用可哈希的有序结构作为key高效。

方案一:用有序元组作为缓存key

直接将两个参数排序后组成元组(元组是可哈希类型),无需任何字符串转换,既保证(a,b)和(b,a)的key一致,又大幅提升效率:

i = range(10)   # 实际数据量更大

def func(a, b):
    return a + b

cache = {}
total = 0
for i_prime in i:
    for i_prime_prime in i:
        if i_prime != i_prime_prime:
            # 生成有序元组作为key,确保对称对的key唯一
            key = tuple(sorted((i_prime, i_prime_prime)))
            if key in cache:
                total += cache[key]
            else:
                temp = func(i_prime, i_prime_prime)
                cache[key] = temp
                total += temp

方案二:重构循环,彻底避免重复计算

既然func(a,b)=func(b,a),可以直接只计算i_prime < i_prime_prime的组合,将结果乘以2后累加到总和,完全无需缓存,效率最高:

i = range(10)   # 实际数据量更大

def func(a, b):
    return a + b

total = 0
for idx, i_prime in enumerate(i):
    # 只遍历当前元素之后的元素,避免重复计算对称对
    for i_prime_prime in i[idx+1:]:
        temp = func(i_prime, i_prime_prime)
        total += temp * 2

原循环中每对(a,b)和(b,a)会被重复计算,总和等价于2倍的所有a<b的func(a,b)之和,此方案通过缩小遍历范围直接消除了重复调用的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:17:28