More a suggestion really: you can include the has of the function in the list of cache keys to get automatic cache invalidation if the function changes...
This would be a bot flaky, as it would not handle changes in dependent functions, and I don't know how stable python function hashes are in practice. Still, having done a lot of memoization in non-introspecting languages where this is not an option, I think this is a neat possibility.
Alternatively, you might want to add a way of clearing the cache?
But thanks for putting this up!