Receita: Cache de Funções
Exemplo prático de uma função em Python que retorna uma outra função. Isto é possível porque funções em Python são elementos de primeira classe. Esta receita é uma função que recebe como parâmetro qualquer função (matemática) e retorna a mesma função do argumento com um cache associado para lembrar dos resultados calculados, o Cache é simplesmente um dicionário de argumentos da função com o valor calculado correspondende.
Código
1 def cached(f):
2 """Retorna uma funcao igual a 'f' mas com um cache associado.
3
4 Note que esta função *não* funciona com keyword arguments.
5 """
6 def g(*args):
7 if args not in g.cache:
8 g.cache[args] = f(*args)
9 return g.cache[args]
10 g.cache = {}
11 g.__doc__ = f.__doc__
12 g.__name__ = f.__name__
13 return g
Como usar
Para usá-la com funções já definidas ou no Python 2.3 ou mais antigo faça como no exemplo abaixo:
A partir do Python 2.4 é possível aplicar esse cache através de um decorator para funções sendo definidas por você:
Volta para CookBook.