1 python装饰器嵌套基础
python支持装饰器嵌套,即多个装饰器装饰同一个函数或方法。
1.1 嵌套执行顺序
用法
@a_deco
@b_deco
@c_deco
def test_nest_deco():
pass
描述
@a_deco、@b_deco、@c_deco分别占一行,编写在同一个函数或方法的def语句上方。
从def开始,由近到远,依次执行装饰器@c_deco、@b_deco、@c_deco。
等价于
test_nest_deco=a_deco(b_deco(c_deco(test_nest_deco))))
示例文章来源地址https://www.toymoban.com/news/detail-823799.html
>>> def a_decorator(func):
print('a_decorator 被调用')
return func
>>> def b_decorator(func):
print('b_decorator 被调用')
return func
>>> def c_decorator(func):
print('c_decorator 被调用')
return func
>>> @a_decorator
@b_decorator
@c_decorator
def test_nest_deco():
print('test_nest_deco 被调用')
c_decorator 被调用
b_decorator 被调用
a_decorator 被调用
>>> test_nest_deco()
test_nest_deco 被调用
1.2 嵌套返回调用对象
描述
装饰器的包装函数,比如a_wrapper(),保存接收到的入参函数,以便包装器调用。
最后执行的包装器a_decorator(),会将返回的包装器a_wrapper赋值给主函数变量名test_nest_deco。
调用主函数test_nest_deco()时,相当于调用最后的包装器a_wrapper()。文章来源:https://www.toymoban.com/news/detail-823799.html
示例
>>> def a_decorator(func):
print('a_decorator 被调用')
def a_wrapper():
print(func.__name__.center(50,'='))
func()
return '返回 a_decorator'
return a_wrapper
>>> def b_decorator(func):
print('b_decorator 被调用')
def b_wrapper():
print(func.__name__.center(50,'='))
func()
return '返回 b_decorator'
return b_wrapper
>>> def c_decorator(func):
print('c_decorator 被调用')
def c_wrapper():
print(func.__name__.center(50,'='))
func()
return '返回 c_decorator'
return c_wrapper
>>> @a_decorator
@b_decorator
@c_decorator
def test_nest_deco():
print('test_nest_deco 被调用')
c_decorator 被调用
b_decorator 被调用
a_decorator 被调用
>>> test_nest_deco()
====================b_wrapper=====================
====================c_wrapper=====================
==================test_nest_deco==================
test_nest_deco 被调用
'返回 a_decorator'
>>> test_nest_deco.__name__
'a_wrapper'
到了这里,关于python装饰器嵌套基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!