引用连接:
https://blog.csdn.net/qq_31482599/article/details/103005139
装饰器
是Python的一个重要组成部分,可以有效的增强一个函数的功能。
可以在不修改原函数的情况下对其进行功能扩展,遵循开放封闭原则
简单的装饰器
# 不带参数的装饰器
def pre_do_sth(func):
def wrapper(*args, **kwargs):
print("Do sth before call one")
func(*args, **kwargs)
return wrapper
@pre_do_sth
def echo(msg):
print(msg)
echo("Hello World")
多层装饰器执行顺序
def verify1(func):
print("装饰器 1 ...")
def run():
print("权限验证逻辑 1 ...")
print('fun',func.__name__)
func()
print("111111111111111")
return run
def verify2(func2):
print("装饰器2 ...")
def run2():
print("权限验证逻辑 2 ...")
print('fun2',func2.__name__)
func2()
print("22222222222222")
return run2
##########
print('#########'*20+'\n')
@verify1
@verify2
def index1():
print("index1....")
index1()
结果:
####################################################################################################################################################################################
装饰器2 ...
装饰器 1 ...
权限验证逻辑 1 ...
fun run2
权限验证逻辑 2 ...
fun2 index1
index1....
22222222222222
111111111111111
上方的装饰器和下面两个一样。可以更加清楚看到执行的顺序
#改造一
verify1(verify2(index1))()
#改造二
@verify2
def index1():
print("index1....")
# 将@verify2 装饰的 index1() 用@verify再装饰
@verify1
def test22():
return index1()
test22()
执行的是顺序一样。