def cache(function):
function_cache = {}
def cached_function(*args, **kwargs):
key = (args, tuple(kwargs.items()))
if key not in function_cache:
function_cache[key] = function(*args, **kwargs)
return function_cache[key]
return cached_function
@cache
def parse(filename):
return hard_work(filename)