python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python之@cache装饰器

Python之@cache装饰器的使用及说明

作者:Tipriest_

@cache是Python3.9引入的新装饰器,用于缓存函数结果,避免重复计算,提高性能,它基于functools.lru_cache实现,支持无限大小缓存,适用于纯函数,使用示例包括递归斐波那契数列和模拟耗时计算,注意适用场景、参数限制和内存占用,与@lru_cache相比,@cache更简洁,但功能单一

一、@cache装饰器的基本概念

@cache 是 Python 3.9 引入的新功能,来源于标准库 functools 模块。它的作用是 对函数结果进行缓存(记忆化 memoization),从而避免重复计算,提高程序性能。

它的定义方式非常简单:

from functools import cache

@cache
def some_function(...):
    ...

当你用 @cache 修饰一个函数时,Python 会将该函数的输入参数与计算结果自动保存到一个缓存(字典)中。当后续调用该函数且参数完全相同时,不会再次执行函数体的计算逻辑,而是直接返回之前缓存的结果。

二、工作原理

@cache 装饰器内部其实是基于 functools.lru_cache 实现的,它等价于:

from functools import lru_cache

cache = lru_cache(maxsize=None)

也就是说:

三、使用示例

1. 基本示例:递归斐波那契数列

from functools import cache

@cache
def fib(n):
    print(f"计算 fib({n})")
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)

print(fib(10))  # 第一次需要计算
print(fib(10))  # 第二次直接命中缓存,不会重新计算

运行效果:

2. 模拟耗时计算

import time
from functools import cache

@cache
def slow_function(x):
    print(f"开始计算 {x}...")
    time.sleep(2)  # 模拟耗时
    return x * x

# 首次调用耗时
print(slow_function(5))

# 第二次调用相同参数时几乎立即返回
print(slow_function(5))

在实际场景中,如果一个函数计算代价高(如数据库查询、大文件解析、复杂计算等),使用 @cache 能显著减少重复工作。

四、注意事项

适用场景

参数限制

内存占用

缓存失效

your_function.cache_clear()

五、@cache与@lru_cache的区别

特性@cache@lru_cache
缓存大小限制无限 (maxsize=None)可自定义 maxsize
缓存策略简单字典保存LRU(Least Recently Used)淘汰
用途适合始终命中缓存且参数种类有限适合缓存有限结果并自动淘汰旧数据

六、总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文