我会如何写这样的装饰。我希望能够在我调用装饰器时指定max_hits的值(或者可以将其忽略)。Python - 如何为基于类的装饰器指定可选参数?
例如,所期望的用途将是
@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]
为什么每个人都拼写它的记忆。 – 2011-05-16 13:56:41
@Jakob Bowyer:http://en.wikipedia.org/wiki/Memoization#Etymology – mouad 2011-05-16 13:59:05
[在Python中用可选参数定义一个类]的可能重复(https://stackoverflow.com/questions/10681038/define-a -class-with-optional-argument-in-python) – 2017-10-20 13:28:20