Hello I wrote a decorator to add a cache to functions. I realized that cache dictionnary could be defined as an object attribute or as a local variable in method __call__. Both seems to work properly. Can you see any differences between the two variants ?
from collection import OrderedDict class Memoize1: def __init__(self, size=None): self.size = size self.cache = OrderedDict() ### cache defined as an attribute def __call__(self, f): def f2(*arg): if arg not in self.cache: self.cache[arg] = f(*arg) if self.size is not None and len(self.cache) >self.size: self.cache.popitem(last=False) return self.cache[arg] return f2 # variant class Memoize2: def __init__(self, size=None): self.size = size def __call__(self, f): cache = OrderedDict() ### cache defined as a local variable def f2(*arg): if arg not in cache: cache[arg] = f(*arg) if self.size is not None and len(cache) > self.size: cache.popitem(last=False) return cache[arg] return f2 @Memoize1(16) def fibo1(n): if n < 2: return n return fibo1(n-2)+fibo1(n-1) @Memoize2(16) def fibo2(n): if n < 2: return n return fibo2(n-2)+fibo2(n-1) -- https://mail.python.org/mailman/listinfo/python-list