2016-04-18 3 views
-1

я хочу использовать lru_cache в моем коде, однако, я получаю эту ошибку:Использование для кэша LRU в functools

NameError: name 'lru_cache' is not defined 

У меня есть импортный 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) 

ответ

3

Если вы на самом деле просто написал import functools, то этого недостаточно. Вам нужно либо импортировать символ lru_cache с from functools import lru_cache, либо вам нужно квалифицировать имя при попытке его использования, например @functools.lru_cache.

В этом отношении нет ничего особенного в модуле functools. Все модули работают таким образом. Вероятно, вы заметили, когда импортировали другие модули и использовали другие функции.

0

Вам необходимо импортировать 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): 
0

Ввоз линия не входит в этот вопрос, но он должен быть:

from functools import lru_cache 

Кроме того, функция декоратор может быть изменен на:

@functools.lru_cache(maxsize=None) 
Смежные вопросы