# 使用类的方式写 带参数的装饰器
import time
class GetExecTime:
def __init__(self, sec):
self.sec = sec
def __call__(self, func):
self.func = func
return self.wrapper
def wrapper(self, *args, **kwargs):
for i in range(self.sec):
print(f"距离函数执行还有{self.sec - i}秒钟")
time.sleep(1)
t1 = time.time()
result = self.func(*args, **kwargs)
t2 = time.time()
print(f"函数执行时间是:{t2 - t1}秒")
return result
@GetExecTime(5)
def myfunc(n):
k = 0
for i in range(n):
k = i
return k
if __name__ == '__main__':
r = myfunc(99996666)
print(r)
################################################################################
# 不带参数的装饰器
import time
class SleepFunc:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
for i in range(5):
print(f"休眠{5 - i}秒后启动")
time.sleep(1)
ret = self.func(*args, **kwargs)
return ret
@SleepFunc
def test(name):
print(f"我的名字是{name}")
test("刘德华")