class CacheDecorator():
__cache = {}
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
# 如果缓存中有对应的方法名,则直接返回对应的返回值
if self.func.__name__ in CacheDecorator.__cache:
return CacheDecorator.__cache[self.func.__name__]
# 如果缓存中没有对应的方法名,则进行计算,并将结果缓存
else:
result = self.func(*args, **kwargs)
CacheDecorator.__cache[self.func.__name__] = result
return result
请问老师这里为什么我跳过中间的result,直接给CacheDecorator.__cache[self.func.__name__]=self.func(*args, **kwargs)
return self.func(*args, **kwargs)
但得出的结果会是
start func1
end func1
start func1
end func1
999
start func1
end func1
耗时:9.001445770263672
耗时:0.0
999
999
为什么结果会不一样
我还有一个疑问,第二次运行时,r2运行之前并没有返回值,也就是说这里if没办法通过返回值是否一致来判断是否要跳过运行,而是判断的是该程序有没有运行过来决定是否跳过对不对。那么这里他if语句判断的内容不应该就是CacheDecorator.__cache[self.func.__name__]有没有内容吗,那为什么得出的结果会不一样,这个中间的result起到了什么作用