# 1.如果装饰器是多层的,谁距离函数最近,则优先使用那个装饰器
# 2.带参数的装饰器必须有三层函数,如verify->decorate->wrapper
# 添加校验功能的装饰器
import time
def verify1(t):
def decorate(func):
def wrapper(*args, **kwargs):
print('第一层校验正在进行中...')
time.sleep(t)
print('校验完毕!')
# 调用原函数
func(*args, **kwargs)
return wrapper
return decorate
def verify2(t, name, age):
def decorate(func):
def wrapper(*args, **kwargs):
print('第二层校验正在进行中...', name, age)
time.sleep(t)
print('校验完毕!')
# 调用原函数
func(*args, **kwargs)
return wrapper
return decorate
# 使用装饰器
@verify1(2)
@verify2(1, '第一个校验器', 20)
def f1(name):
print('我的名字叫:', name)
f1('lily')
@verify1(1)
@verify2(1, '第一个校验器', 20)
def f2(name, age):
print('我的名字叫:{},今年{}岁'.format(name, age))
f2('lucy', 20)
打印结果:
第一层校验正在进行中...
校验完毕!
第二层校验正在进行中... 第一个校验器 20
校验完毕!
我的名字叫: lily
第一层校验正在进行中...
校验完毕!
第二层校验正在进行中... 第一个校验器 20
校验完毕!
我的名字叫:lucy,今年20岁