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?
in Python 2.5: cache = collections.defaultdict(lambda: expensive-calc-expr) value = cache[complex-key-expr] or, if expensive-calc-expr needs access to the key: class mycache(dict): def __missing__(self, key): value = expensive-calc-expr(key) self[key] = value return value cache = mycache() value = cache[complex-key-expr] or, if expensive-calc-expr needs access to more than just the key, or you need to run this on more than just 2.5: cache = {} key = complex-key-expr try: value = cache[key] except KeyError: value = cache[key] = expensive-calc-expr </F> -- http://mail.python.org/mailman/listinfo/python-list