from functools import wraps def cache(func): """ A decorator for lazy evaluation off true function """ saved = {} @wraps(func) def newfunc(*args): if args in saved: return saved[args] result = func(*args) saved[args] = result return result return newfunc