1.装饰器的功能
a.不改变函数源代码
b.不改变调用方式
c.在原有函数的基础上添加新功能
2.装饰器原理
a.高等函数
b.可变参参数(*args,**kwargs) *arg=>元组参数;**kwargs=>字典参数 元祖在前,字典在后,顺序不可变
3.举例说明
函数功能很简单,2秒后输出
import time
def f1():
time.sleep(2)
print("这里是f1")
f1()
现在添加个记时功能
import time
def f1():
time.sleep(2)
print("这里是f1")
def deco(f1):
def wrapper(*args,**kwargs):
print("这里是before装饰器1")
start_time = time.time()
res = f1(*args,**kwargs)
print("这里是after装饰器1")
end_time = time.time()
print("end_time - start_time = %s" %(end_time - start_time))
return res
return wrapper
f1 = deco(f1) #不适用装饰器的写法
f1()
现在使用装饰器
import time
def deco(f1):
def wrapper(*args,**kwargs):
print("这里是before装饰器1")
start_time = time.time()
res = f1(*args,**kwargs)
print("这里是after装饰器1")
end_time = time.time()
print("end_time - start_time = %s" %(end_time - start_time))
return res
return wrapper
@deco #这里使用了装饰器 @deco =》 f1 = deco(f1)
def f1():
time.sleep(2)
print("这里是f1")
f1()