# 使用 functools.lru_cache 实现缓存功能
from functools import lru_cache
import time
# 定义一个计算斐波那契数列的函数,并使用 lru_cache 装饰器来缓存结果
@lru_cache(maxsize=128) # maxsize 表示最多缓存 128 个不同的输入结果
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
# 测试缓存效果
start_time = time.time()
print(f"Fibonacci(30) = {fibonacci(30)}")
end_time = time.time()
print(f"Time taken: {end_time - start_time:.6f} seconds")
# 再次调用,应该会更快,因为结果已经缓存了
start_time = time.time()
print(f"Fibonacci(30) = {fibonacci(30)}")
end_time = time.time()
print(f"Time taken: {end_time - start_time:.6f} seconds")
functools.lru_cache:这是 Python 标准库中的一个装饰器,用于实现最常用的缓存机制(Least Recently Used Cache)。它会将函数的返回值缓存起来,当函数再次被调用时,如果参数相同,则直接返回缓存的结果,而不需要重新执行函数。
maxsize 参数:指定了缓存的最大大小。在这个例子中,maxsize=128 表示最多缓存 128 个不同的输入结果。如果超过了这个限制,最早使用的缓存条目将会被移除。
斐波那契数列:这是一个经典的递归问题,通常情况下递归计算斐波那契数列的时间复杂度是指数级的。通过使用缓存,我们可以显著减少重复计算,从而提高性能。
测试缓存效果:第一次调用 fibonacci(30) 时,程序会进行实际的递归计算并缓存结果;第二次调用时,由于结果已经被缓存,因此可以直接从缓存中获取结果,速度会快得多。
上一篇:python ascii码转换
下一篇:python 列表求和
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站