Python 函数缓存
什么是函数缓存?
函数缓存是一种优化技术,它可以存储函数的调用结果,当函数使用相同的参数再次调用时,直接返回缓存的结果,而不必重新计算。这种技术特别适用于:
- 计算密集型函数
- 具有相同输入多次调用的函数
- 递归函数,如斐波那契数列计算
函数缓存可以显著提高程序性能,特别是在重复计算相同结果的场景下。
Python 中的内置缓存装饰器
从Python 3.2开始,functools
模块提供了lru_cache
装饰器,它实现了一个基于LRU(Least Recently Used,最近最少使用)策略的缓存机制。
使用functools.lru_cache
import functools
import time
# 使用lru_cache装饰器
@functools.lru_cache(maxsize=128)
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
# 测试函数执行时间
def measure_time(func, *args):
start = time.time()
result = func(*args)
end = time.time()
print(f"执行时间: {end - start:.6f}秒")
return result
# 不使用缓存的斐波那契函数
def fibonacci_no_cache(n):
if n <= 1:
return n
return fibonacci_no_cache(n-1) + fibonacci_no_cache(n-2)
# 比较有缓存和无缓存的性能差异
print("计算斐波那契数列第35项:")
print("使用缓存:")
result_cached = measure_time(fibonacci, 35)
print(f"结果: {result_cached}")
print("\n不使用缓存:")
result_no_cache = measure_time(fibonacci_no_cache, 35)
print(f"