【Python】提高函数调用效率:使用缓存装饰器实现简单的记忆化

缓存是一种避免重复计算和加速程序运行的常用技术。

幸运的是,在大多数情况下,我们不需要编写自己的缓存代码,因为Python已经提供了一个现成的解决方案------@functools.cache装饰器

例如,以下代码展示了两个斐波那契数列生成函数的对比,其中一个应用了缓存装饰器,另一个则没有:


python 复制代码
import timeit
import functools

def fibonacci(n):
    if n in (0, 1):
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

@functools.cache
def fibonacci_cached(n):
    if n in (0, 1):
        return n
    return fibonacci_cached(n - 1) + fibonacci_cached(n - 2)

# Test the execution time of each function
print(timeit.timeit(lambda: fibonacci(30), number=1))
# 0.09499712497927248
print(timeit.timeit(lambda: fibonacci_cached(30), number=1))
# 6.458023563027382e-06

测试结果清楚地展示了functools.cache装饰器是如何使我们的代码运行得更快的。

普通的fibonacci函数效率不高,特别是在计算诸如fibonacci(30)这样的结果时,它会重复计算多次相同的斐波那契数。

而使用了缓存的版本则显著加快了计算速度,原因是它缓存了之前计算的结果。这意味着每个斐波那契数只计算一次,之后相同参数的调用会直接从缓存中获取结果。

只需简单添加一个内置的装饰器,就能实现这样显著的性能提升,这正是典型的Pythonic风格。

相关推荐
互联网搬砖老肖9 分钟前
Web 架构之负载均衡全解析
前端·架构·负载均衡
未名编程9 分钟前
LeetCode 88. 合并两个有序数组 | Python 最简写法 + 实战注释
python·算法·leetcode
没有梦想的咸鱼185-1037-166320 分钟前
全球森林数据如何分析?基于R语言森林生态系统结构、功能与稳定性分析与可视化
开发语言·随机森林·数据分析·r语言
Your易元23 分钟前
设计模式-迭代器模式
java·开发语言
魔障阿Q24 分钟前
windows使用bat脚本激活conda环境
人工智能·windows·python·深度学习·conda
2401_8582861128 分钟前
CD37.【C++ Dev】string类的模拟实现(上)
开发语言·c++·算法
洋芋爱吃芋头31 分钟前
hadoop中的序列化和反序列化(3)
大数据·hadoop·python
╭⌒心岛初晴34 分钟前
JAVA练习题(2) 找素数
java·开发语言·算法·java练习题·判断素数/质数
四谷夕雨34 分钟前
C++八股 —— vector底层
开发语言·c++
零炻大礼包1 小时前
【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装)
开发语言·python·uv·mcp