python的lru_cache

发布时间 2023-07-24 11:22:06作者: tangjicheng

functools模块中的lru_cache是一个装饰器,用于缓存函数的结果,以避免重复计算。LRU(Least Recently Used)表示最近最少使用,这意味着当缓存空间满时,会优先删除最久未被使用的缓存项。

要使用lru_cache装饰器,需要将其应用于你想要缓存的函数。以下是一个简单的例子:

import functools

@functools.lru_cache(maxsize=128)
def fibonacci(n):
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

# 第一次调用将会计算并缓存结果
print(fibonacci(10))

# 第二次调用时,将直接从缓存中获取结果,而不进行重复计算
print(fibonacci(10))

在上面的例子中,我们定义了一个fibonacci函数来计算斐波那契数列的第n项。使用@functools.lru_cache(maxsize=128)装饰器,我们启用了缓存功能,并设置了缓存的最大大小为128个缓存项。

lru_cache装饰器还支持其他可选参数:

  • maxsize: 设置缓存的最大大小,表示最多缓存多少个不同的参数。默认值为128。
  • typed: 若为True,则不同类型的函数参数将分别缓存。例如,对于参数1和1.0,当typed为True时,它们会被认为是不同的参数,而当typed为False时,它们会被认为是相同的参数。默认为False。

请注意,lru_cache适用于纯函数,即给定相同的输入,始终返回相同的结果。对于有副作用的函数,如修改全局变量、读写文件等,不应该使用lru_cache,因为缓存可能导致不可预测的行为。