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

Python functools lru_cache是否缓存函数参数及返回结果?

关于lru_cache装饰器的缓存逻辑疑问

示例代码

from functools import lru_cache


@lru_cache(maxsize=256)
def task_a(a, b):
    print(f'Multiplying {a} and {b}')
    return a*b


print(task_a(2, 3))
print(task_a(2, 3))

print(task_a(2, 4))
print(task_a(2, 4))

print(task_a(2, 5))
print(task_a(2, 5))

运行输出

Multiplying 2 and 3
6
6
Multiplying 2 and 4
8
8
Multiplying 2 and 5
10
10

疑问解答

lru_cache是将函数参数作为键、对应的返回结果作为值,一起存入缓存的,它的工作逻辑如下:

  • 首次调用函数时,会执行函数体代码,计算出返回结果,同时把本次调用的参数组合作为键、返回结果作为值,存入内部缓存容器。
  • 后续用完全相同的参数调用函数时,装饰器会先检查缓存中是否存在该参数对应的键。如果存在,直接取出对应的返回结果返回,不会再执行函数体代码——这就是你示例中第二次调用相同参数时,没有打印Multiplying...语句的原因。

拿你的代码举例:第一次调用task_a(2,3)时,执行函数打印语句并返回6,缓存中会记录(2,3):6;第二次调用该参数时,直接从缓存取出6返回,跳过了函数体的执行,因此没有打印内容。

内容的提问来源于stack exchange,提问作者Deepak Tatyaji Ahire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:57:15