1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
#
def cache(funct):
def f(*args, **kwargs):
key = (args, tuple(kwargs.items()))
try:
return funct._cache[key]
except KeyError:
r = funct._cache[key] = funct(*args, **kwargs)
return r
if not hasattr(funct, "_cache"):
funct._cache = dict()
return f
@cache
def Foo(a, b):
return a*b
Foo(1, 2)
Foo(2, 2)
Foo(4, 2)
if hasattr(Foo, "_cache"):
print("La fonction a déjà été appelée !")
# les arguments qui lui ont été passé : test._cache.keys()
# les resultats qu'elle a renvoyé : test._cache.values()
else:
print("La fonction n'a jamais été appelée !") |
Output
La fonction n'a jamais été appelée !
Partager