带参装饰器
msg = """
1.QQ
2.wechat
"""
avg = input('验证方式:')def auth(avg):def wrapper(f):def inner(*args,**kwargs):if avg == 'QQ':user = input('name')pwd = input('password')if user == 'alex' and pwd == '123456':f()else:print('输入错误')elif avg == 'wechat':user = input('name')pwd = input('password')if user == 'lfz' and pwd == '123456':f()else:print('输入错误')return innerreturn wrapper@auth(avg) #func = auth(avg)(func)
def func():print(1)func()
@auth('wechat') :分两步:
第一步先执行auth('wechat')函数,得到返回值auth2
第二步@与auth2结合,形成装饰器@auth2 然后在依次执行。
多个装饰器装饰一个函数
def wrapper1(func):def inner1(*args,**kwargs):print("这是装饰器一开始")func(*args,**kwargs)print("这是装饰器一结束")return inner1def wrapper2(func): def inner2(*args,**kwargs):print("这是装饰器二开始")func(*args,**kwargs)print("这是装饰器二结束")return inner2@wrapper1
@wrapper2
def func():print("这是被装饰的函数")func()
# 结果:
这是装饰器一开始
这是装饰器二开始
这是被装饰的函数
这是装饰器二结束
这是装饰器一结束
Python规定多个装饰器装饰一个函数的时候先执行离被装饰的函数最近的装饰器