lru 缓存
可以使用 @lru_cache 装饰器使用最近最少使用的缓存来包装昂贵的,计算密集型的功能。这允许对函数调用进行记忆,以便具有相同参数的未来调用可以立即返回,而不必重新计算。
@lru_cache(maxsize=None) # Boundless cache
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
>>> fibonacci(15)
在上面的示例中,fibonacci(3) 的值仅计算一次,而如果 fibonacci 没有 LRU 缓存,则 fibonacci(3) 将被计算超过 230 次。因此,@lru_cache 特别适用于递归函数或动态编程,其中可以使用相同的精确参数多次调用昂贵的函数。
@lru_cache 有两个论点
maxsize:保存的呼叫数。当唯一呼叫的数量超过maxsize时,LRU 缓存将删除最近最少使用的呼叫。typed(在 3.3 中添加):用于确定不同类型的等效参数是否属于不同缓存记录的标志(即,如果3.0和3计为不同的参数)
我们也可以看到缓存统计信息:
>>> fib.cache_info()
CacheInfo(hits=13, misses=16, maxsize=None, currsize=16)
注意 :由于 @lru_cache 使用字典来缓存结果,因此该函数的所有参数都必须是可清除的,以使缓存起作用。
官方 Python 文档为 @lru_cache 。@lru_cache 在 3.2 中添加。