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

Diferenças para "CacheDeFuncoes"

Diferenças entre as versões de 4 e 5
Revisão 4e 2006-01-16 18:03:40
Tamanho: 1358
Editor: RudaMoura
Comentário:
Revisão 5e 2006-01-24 01:51:09
Tamanho: 1354
Comentário: qualquer func que receba e retorne uma func pode ser aplicada como decorator
Deleções são marcadas assim. Adições são marcadas assim.
Linha 33: Linha 33:
A partir do Python 2.4 é possível implementar esse cache através de um decorator, um exemplo pode ser encontrado em [http://wiki.python.org/moin/PythonDecoratorLibrary#head-11870a08b0fa59a8622201abfac735ea47ffade5 Python Decorator Library - Memoize]. A partir do Python 2.4 é possível aplicar esse cache através de um decorator, um exemplo pode ser encontrado em [http://wiki.python.org/moin/PythonDecoratorLibrary#head-11870a08b0fa59a8622201abfac735ea47ffade5 Python Decorator Library - Memoize].

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

A partir do Python 2.4 é possível aplicar esse cache através de um decorator, um exemplo pode ser encontrado em [http://wiki.python.org/moin/PythonDecoratorLibrary#head-11870a08b0fa59a8622201abfac735ea47ffade5 Python Decorator Library - Memoize].

Volta para CookBook.


RudaMoura