我會如何寫這樣的裝飾。我希望能夠在我調用裝飾器時指定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