我将如何编写这样的装饰器。我希望能够在调用装饰器时指定 max_hits 的值(或者可以选择将其省略)。
例如,期望的用途是
@memoize(max_hits=7)
def a(val):
print val
或者
@memoize
def a(val):
print val
(使用第一个示例给出了关于不正确参数的错误。)
装饰师:
class memoize:
"""A decorator to cache previosly seen function inputs.
usage:
@memoize
def some_func(..
"""
def __init__(self, function, max_hits=None):
self.max_hits = max_hits
self.function = function
self.memoized = {}
def __call__(self, *args, **kwargs):
key = (args,tuple(kwargs.items()))
try:
return self.memoized[key]
except KeyError:
self.memoized[key] = self.function(*args,**kwargs)
return self.memoized[key]