Recibí el siguiente fragmento de código del sitio web de Peter Norvig; es un decorador para permitir la memorización de llamadas a funciones (caché de llamadas previas a la función para cambiar una recursión exponencial en un programa dinámico simple).¿Por qué es necesaria una línea en esta función python? (recursividad memorable)
def memo(f):
table = {}
def fmemo(*args):
if args not in table:
table[args] = f(*args)
return table[args]
fmemo.memo = table
return fmemo
El código funciona bien, pero me pregunto por qué es necesaria la penúltima línea. Esto es claramente un vacío en mi conocimiento de Python, pero al eliminar la línea y ejecutar una función simple de Fibonacci, parece que todavía funciona. ¿Tiene esto que ver con memorizar múltiples funciones simultáneamente? ¿Por qué la variable miembro de fmemo se llama memo (suponiendo que no sea una coincidencia incómoda)?
Gracias!
sangría de su código no se ve bien. ¿Es eso una función anidada? – MAK
FTFY ........... – katrielalex
Por cierto, esto se ha implementado en Python 3.2 como ['functools.lru_cache'] (http://docs.python.org/dev/library/functools.html#functools .lru_cache). – katrielalex