我需要做一个装饰器,检查它的相关函数之前是否调用与它现在调用的参数完全相同的参数。如果是,我需要返回以前的输出。如果没有,我打电话并存储结果以备将来调用。这里是我的:Python装饰器,检查函数是否被调用之前
class memoized(object):
def __init__(self,f):
self.__first=[]
self.__last=[]
self.__f=f
self.__name__=f.__name__
self.__value=[]
def __call__(self,*args,**dargs):
for i in self.__value:
if(self.__first[i]==args and self.__last[i]==dargs):
return self.__value[i]
rv=self.__f(*args,**dargs)
self.__first.append(args)
self.__last.append(dargs)
self.__value.append(rv)
return rv
当我运行它虽然它给了我一个idex错误。我不知道为什么从理论上讲,首先和最后一个值的长度应该一直是相同的,因为我追加了所有其中的3个。有任何想法吗?
请将追溯到您的问题。 – zondo
这通常被称为* memoization *,看到一个[相关的问题](http://stackoverflow.com/q/1988804) –