正如 's 文档中的memoization 示例中所述decorator
,您不能使用嵌套函数方法来实现 memoization,同时保留函数签名。相反,您必须将内部函数取出,然后创建一个简单的装饰器函数:
def _memoize(func, *args, **kwargs):
# the memoization code
def memoize(f):
f.cache = {}
return decorator(_memoize, f)
为什么我不能使用内部函数?或者文档是否具有误导性,这意味着有一种方法可以将内部函数与@decorator
? 为什么会这样,是否有某种实际的、基于实施的原因,还是我真的被迫以别人的方式去做?我讨厌辅助函数,并希望尽可能避免这种方法;如果有一个 hack 让它工作(当然,没有自己从头开始编写),我想听听它是什么。
应该注意的是,不需要初始化cache
或任何其他不属于内部函数的代码,当然,@decorator
完全不使用外部函数就可以正常工作(但话又说回来,为什么要使用内部函数当您在内部函数之外没有代码时?)。