Ho ottenuto il seguente snippet di codice dal sito Web di Peter Norvig; è un decoratore per abilitare la memoizzazione sulle chiamate di funzione (memorizzazione nella cache di chiamate precedenti alla funzione per modificare una ricorsione esponenziale in un semplice programma dinamico).Perché è necessaria una linea in questa funzione python? (ricorsione memoized)
def memo(f):
table = {}
def fmemo(*args):
if args not in table:
table[args] = f(*args)
return table[args]
fmemo.memo = table
return fmemo
Il codice funziona correttamente, ma mi chiedo perché è necessaria la penultima riga. Questo è chiaramente un divario nella mia conoscenza di Python, ma rimuovendo la linea e eseguendo una semplice funzione di Fibonacci, sembra ancora funzionare. Ha a che fare con la memoizzazione di più funzioni contemporaneamente? Perché la variabile membro di fmemo può essere chiamata memo (supponendo che non sia una coincidenza impacciata)?
Grazie!
indentazione del codice non guardare a destra. È una funzione annidata? – MAK
FTFY ........... – katrielalex
BTW questo è stato implementato in Python 3.2 come ['functools.lru_cache'] (http://docs.python.org/dev/library/functools.html#functools .lru_cache). – katrielalex