1058
Comentário:
|
1774
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 1: | Linha 1: |
## page was renamed from CacheDeFunções | |
Linha 8: | Linha 9: |
def cache_f(f): | def cached(f): |
Linha 10: | Linha 11: |
Exemplo: >>> f = cache_f(math.sin) >>> f.cache {} >>> f(0) 0.0 >>> f(1) 0.8414709848078965 >>> f.cache {(1,): 0.8414709848078965, (0,): 0.0} |
Note que esta função *não* funciona com keyword arguments. |
Linha 23: | Linha 15: |
if args in g.cache: return g.cache[args] else: |
if args not in g.cache: |
Linha 27: | Linha 17: |
return g.cache[args] | return g.cache[args] |
Linha 29: | Linha 19: |
g.__doc__ = f.__doc__ g.__name__ = f.__name__ |
|
Linha 30: | Linha 22: |
}}} == Como usar == Para usá-la com funções já definidas ou no Python 2.3 ou mais antigo faça como no exemplo abaixo: {{{ #!python f = cached(math.sin) print f.cache # Imprime {} print f(0) # Imprime 0.0 print f(1) # Imprime 0.8414709848078965 print f.cache # Imprime {(1,): 0.8414709848078965, (0,): 0.0} }}} A partir do Python 2.4 é possível aplicar esse cache através de um decorator para funções sendo definidas por você: {{{ #!python @cached def test(number): print number return number ** 2 print test(10) # Imprime "10" e "100" print test(10) # Imprime apenas "100" print test(10) # Novamente, apenas "100" print test(9) # Imprime "9" e "81" print test(9) # Adivinhe? Apenas "81" |
|
Linha 36: | Linha 57: |
RudaMoura | RudaMoura, FelipeLessa |
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.