def __call__(self, *args, **kwargs): original_result = MemorizedFunc.__call__(self, *args, **kwargs) if self.func not in _FUNCTION_HASHES: # Also store in the in-memory store of function hashes if PY3_OR_LATER: is_named_callable = (hasattr(self.func, '__name__') and self.func.__name__ != '<lambda>') else: is_named_callable = (hasattr(self.func, 'func_name') and self.func.func_name != '<lambda>') if is_named_callable: # Don't do this for lambda functions or strange callable # objects, as it ends up being too fragile func_hash = self._hash_func() try: _FUNCTION_HASHES[self.func] = func_hash except TypeError: # Some callable are not hashable pass return original_result