2016-04-18 1 views
-1

Je veux utiliser lru_cache dans mon code, cependant, je reçois cette erreur:Utilisation pour le cache LRU dans functools

NameError: name 'lru_cache' is not defined 

J'ai un functools d'importation dans mon code, mais cela ne suffit pas

Exemple de code est ici:

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) 

Répondre

3

Si vous avez vraiment écrit import functools, alors cela ne suffit pas. Vous devez importer le symbole lru_cache avec from functools import lru_cache, ou vous devez qualifier le nom lorsque vous tentez de l'utiliser, par exemple @functools.lru_cache.

À cet égard, le module functools n'a rien de spécial. Tous les modules fonctionnent de cette manière. Vous avez probablement remarqué lorsque vous avez importé d'autres modules et utilisé d'autres fonctions.

0

Vous devez importer lru_cache avant de l'utiliser:

from functools import lru_cache 

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

Ou bien se référer à elle avec le nom complet lors de l'importation functools:

import functools 

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

La ligne d'importation ne sont pas inclus dans la question, mais il devrait être:

from functools import lru_cache 

Sinon, le décorateur de fonction pourrait être modifiée:

@functools.lru_cache(maxsize=None)