多个装饰器修饰一个函数
作者:互联网
被装饰的函数正上方有多个装饰器,先执行离被装饰函数最近的装饰器
def wrapper1(func): # func == inner2
def inner1(*args, **kwargs):
print("这是第一个装饰器开始")
func(*args, **kwargs)
print("这是第一个装饰器结束")
return inner1
def wrapper2(func): # func == foo
def inner2(*args, **kwargs):
print("这是第二个装饰器开始")
func(*args, **kwargs)
print("这是第二个装饰器结束")
return inner2
@wrapper1
@wrapper2
def foo():
print("这是被装饰的函数")
"""
@wrapper1
@wrapper2
解构:
foo = wrapper2(foo) # foo == inner2
foo = wrapper1(foo) # foo = wrapper1(inner2)
"""
foo()
增加一个修饰器
def wrapper1(func): # func == inner2
def inner1(*args, **kwargs):
print("这是第一个装饰器开始")
func(*args, **kwargs)
print("这是第一个装饰器结束")
return inner1
def wrapper2(func): # func == foo
def inner2(*args, **kwargs):
print("这是第二个装饰器开始")
func(*args, **kwargs)
print("这是第二个装饰器结束")
return inner2
def wrapper3(func):
def inner3(*args, **kwargs):
print("这是第三个装饰器开始")
func(*args, **kwargs)
print("这是第三个装饰器结束")
return inner3
@wrapper1
@wrapper2
@wrapper3
def foo():
print("这是被装饰的函数")
"""
@wrapper1
@wrapper2
@wrapper3
解构:
foo = wrapper3(foo) # foo == inner3
foo = wrapper2(foo) # foo = wrapper2(inner3) foo == inner2
foo = wrapper1(foo) # foo = wrapper1(inner2)
"""
foo()
标签:wrapper1,函数,print,func,修饰,foo,装饰,def 来源: https://www.cnblogs.com/Ylinn/p/13883266.html