functools中lru缓存的用法

2024-05-15 09:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在我的代码中使用lru缓存,但是,出现以下错误:

NameError: name 'lru_cache' is not defined

我的代码中确实有一个import functools,但这没有帮助

示例代码如下:

https://docs.python.org/3/library/functools.html

@lru_cache(maxsize=None)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

Tags: 代码namehttpsimport示例cachereturnis
3条回答

问题中不包括导入行,但应该是:

from functools import lru_cache

或者,可以将函数decorator更改为:

@functools.lru_cache(maxsize=None)

使用前需要导入lru_cache

from functools import lru_cache

@lru_cache(maxsize=None)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

或者在导入functools时使用全名引用它:

import functools

@functools.lru_cache(maxsize=None)
def fib(n):

如果你真的只是写了import functools,那还不够。您需要使用from functools import lru_cache导入lru_cache符号,或者在尝试使用名称时对其进行限定,例如@functools.lru_cache

在这方面,functools模块没有什么特别之处。所有的模块都是这样工作的。当您导入其他模块并使用其他函数时,您可能已经注意到了。

相关问题 更多 >