associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "CacheDeFuncoes"

Diferenças entre as versões de 1 e 2
Revisão 1e 2005-08-28 04:44:18
Tamanho: 1087
Editor: RudaMoura
Comentário:
Revisão 2e 2006-01-14 15:50:10
Tamanho: 1058
Editor: FabioCorrea
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 1: Linha 1:
#pragma section-numbers off

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 cache_f(f):
   2     """Retorna uma funcao igual a 'f' mas com um cache associado.
   3     
   4     Exemplo:
   5     >>> f = cache_f(math.sin)
   6     >>> f.cache
   7     {}
   8     >>> f(0)
   9     0.0
  10     >>> f(1)
  11     0.8414709848078965
  12     >>> f.cache
  13     {(1,): 0.8414709848078965, (0,): 0.0}
  14     """
  15     def g(*args):
  16         if args in g.cache:
  17             return g.cache[args]
  18         else:
  19             g.cache[args] = f(*args)
  20             return g.cache[args]
  21     g.cache = {}
  22     return g

Volta para CookBook.


RudaMoura