python装饰器嵌套基础

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))))

示例

>>> 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()。

示例

>>> 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'

相关推荐

  1. python装饰嵌套基础

    2024-01-11 01:12:03       38 阅读
  2. python函数装饰基础

    2024-01-11 01:12:03       40 阅读
  3. python装饰基础

    2024-01-11 01:12:03       36 阅读
  4. 装饰基础知识

    2024-01-11 01:12:03       36 阅读
  5. Python装饰

    2024-01-11 01:12:03       41 阅读
  6. Python装饰

    2024-01-11 01:12:03       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-11 01:12:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-11 01:12:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-11 01:12:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-11 01:12:03       20 阅读

热门阅读

  1. Linux防火墙相关命令

    2024-01-11 01:12:03       37 阅读
  2. Kubernetes 调度器及其优化

    2024-01-11 01:12:03       28 阅读
  3. 3个Linux文件权限命令

    2024-01-11 01:12:03       38 阅读
  4. LeetCode 0383. 赎金信:计数

    2024-01-11 01:12:03       39 阅读
  5. sap报表导入查询数据检查

    2024-01-11 01:12:03       27 阅读
  6. 【笔记】Helm-2 如何使用-2 同步你的仓库

    2024-01-11 01:12:03       36 阅读
  7. linux网络

    2024-01-11 01:12:03       24 阅读