# coding=utf-8
import time
# 用函数装饰器,完成缓存
def Cachedecorater(func):
def infunc(*args,**kwargs):
cache={}
if func.__name__ in cache:
return cache[func.__name__]
else:
result = func(*args,**kwargs)
cache[func.__name__] = result
return result
return infunc
# 用类装饰器,完成计时
class Timedecorater():
def __init__(self,func):
self.func = func
def __call__(self, *args, **kwargs):
start = time.time()
result = self.func(*args,**kwargs)
end = time.time()
print(f"耗时: {end-start}")
return result
@Timedecorater
@Cachedecorater
def fun1_long_time():
"""模拟耗时较长,但每次返回的结果又一样的情况"""
print("fun1 start...")
time.sleep(3)
print("fun1 end...")
return 999
if __name__ == '__main__':
r1 = fun1_long_time()
r2 = fun1_long_time()
print(r1)
print(r2)

老师,我这用了相反的装饰器,就是缓存功能用的是函数定义的,计时是用的类装饰器, 但是结果,计时功能是正常的,而缓存功能却没有体现. 就是测试两次,耗时一样,是我缓存装饰器哪里写错了