语法糖:
def outter(param):
def decorator(func):
def warpper(*args, **kwargs):
pass
return func(*args, **kwargs)
return warpper
return decorator
@outter("xxx")
def test():
pass
test() # 装饰后的调用
举例:
import time
dic = {
'username': None,
}
def auth(engine):
def auth2(func):
def wrapper(*args, **kwargs):
if engine == 'login1': #如果传入的是"login1",就进入这种身份的认证
if dic['username']:
print('已经登陆过了')
res = func(*args, **kwargs)
return res
name = input('用户名>>: ').strip()
pwd = input('密码>>: ').strip()
if name == 'egon' and pwd == '123':
print('登陆成功')
dic['username'] = name
res = func(*args, **kwargs)
return res
else:
print('用户名或密码错误')
elif engine == 'login2': #"login2"这种模式的身份认证
print('匿名认证')
elif engine == 'login3': #"login3"
print('用户认证')
return wrapper
return auth2
@auth('login3') #以"login3"模式的身份认证来使用"index"
def index():
time.sleep(1)
print('欢迎登入')
return 123
@auth('login1') #以"login1"模式的身份认证来使用"home"
def home(song):
time.sleep(2)
print('啧啧啧%s' % song)
index()
home('外婆家')