"""
装饰器本质上是一个闭包
作用:
在不改变原有函数调用的情况下,给函数增加新功能。
场景举例:
1.用户需要登录的地方
2.记录日志
一个函数可以被多个装饰器装饰
"""
def wrapper(game):
def inner(*args, **kwargs):
print("open 挂")
ret = game(*args, **kwargs)
print("close 挂")
return ret
return inner
@wrapper
def play_dnf(user, pwd):
print(user, pwd)
print("this is dnf")
@wrapper
def play_lol(user, pwd, hero):
print(user, pwd, hero)
print('this is lol')
play_dnf('admin', '123')
play_lol('admin', '456', '后羿')
def wrapper1(game):
def inner(*args, **kwargs):
print("open1 挂")
ret = game(*args, **kwargs)
print("close1 挂")
return ret
return inner
def wrapper2(game):
def inner(*args, **kwargs):
print("open2 挂")
ret = game(*args, **kwargs)
print("close2 挂")
return ret
return inner
@wrapper1
@wrapper2
def play_more():
print('this is more')
play_more()
"""
执行结果:
open1 挂
open2 挂
this is more
close2 挂
close1 挂
执行顺序和规律:wrapper1 wrapper2 自定义函数 wrapper2 wrapper1
"""