functools中lru缓存的用法

use*_*827 2 python lru functools

我想在我的代码中使用lru_cache,但是,我收到此错误:

NameError: name 'lru_cache' is not defined
Run Code Online (Sandbox Code Playgroud)

我的代码中有一个导入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)
Run Code Online (Sandbox Code Playgroud)

Rob*_*edy 9

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

在这方面,functools模块没什么特别之处.所有模块都以这种方式工作 当您导入其他模块并使用其他功能时,您可能已经注意到了.


nie*_*mmi 6

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)
Run Code Online (Sandbox Code Playgroud)

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

import functools

@functools.lru_cache(maxsize=None)
def fib(n):
Run Code Online (Sandbox Code Playgroud)