Minor typo - I think the references to martha.memo[key] in _inner should be to martha.memo[func][key], enabling you to prevent different memoized functions' results from clashing when they were called with the same parameters. Thanks for the correction. Skip