Gabriel Genellina wrote:
> At Thursday 26/10/2006 16:30, robert wrote:
>>> I want to use a computation cache scheme like
>>>>>> o = CACHECOMPUTE complex-key-expr expensive-calc-expr
>>>>>> frequently and elegantly without writing complex-key-expr or
>> expensive-calc-expr twice.
>> So its ugly:
>>>> _=complex-key-expr; o=cache.get(_) or
>> cache.setdefault(_,expensive-calc-expr)
>>>> Any ideas?
>> The memoize pattern can help; in
>http://wiki.python.org/moin/PythonDecoratorLibrary you can see an
> implementation using decorators.
>
thanks, as such it will not help hooking single line expressions, but it helped me remember the lambda ! :shame: :
class MemoCache(dict): # cache expensive Objects during a session (memory only)
def memo(self, k, f):
try: return self[k]
except IndexError:
return self.setdefault(k, f())
cache=MemoCache()
...
o = cache.memo( complex-key-expr, lambda: expensive-calc-expr )
Thats pythonic now.
-robert