python装饰器嵌套基础

这篇具有很好参考价值的文章主要介绍了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))))

示例文章来源地址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()。

示例

>>> 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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS—@Observed装饰器和@ObjectLink嵌套类对象属性变化

    概述 @ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步: 被@Observed装饰的类,可以被观察到属性的变化; 子组件中@ObjectLink装饰器装饰的状态变量用于接收@Observed装饰的类的实例,和父组件中对应的状态变量建立双向数据绑定。这个实例可以是

    2024年02月21日
    浏览(30)
  • 【python基础】复杂数据类型-字典(嵌套)

    有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为 嵌套 。我们可以在列表中嵌套字典、在字典中嵌套列表、在字典中嵌套字典。 我们可以把一个人的信息放在字典中,但是多个人的信息我们无法放在同一个字典中,所以就需要字典列表。 其语

    2024年02月08日
    浏览(31)
  • 【python】Python基础语法详细教程以及案例教学之 while循环语句、while语句嵌套应用、for循环语句、for语句嵌套应用、循环中断

    目录  前言 一、while循环的基础语法  1)什么是while语句?  2)如何具体实现while语句? 二、while循环的基础案例 1)案例一:  2)案例二: 三、while循环的嵌套应用 1)学习目标: 2)什么是while循环的嵌套 3)如何实现while嵌套? 四、while循环的嵌套案例 1)学习目标 2)补充

    2024年01月25日
    浏览(52)
  • python 单例模式,装饰类,装饰函数

    知乎 python 实现单例模式的两种方式 stack overflow 装饰函数 vs 装饰类 medium Do we even need a class to realize singleton? 单例模式大家肯定不陌生了,在读reference的两篇blog时突然发现用python实现单例模式的很多好玩之处。 用类实现单例模式是各种语言比较通用的方式。在python中的实现就

    2024年02月16日
    浏览(29)
  • JavaSE核心基础-循环嵌套-笔记

    1.循环嵌套概述 循环嵌套:一个循环体内包含了另一个完整的循环结构,那么总共的循环次数  =   外循环次数   *    内循环次数。 2.循环嵌套分类 语法:     for(初始化表达式①; 循环条件②; 步进表达式⑦) {        for(初始化表达式③; 循环条件④; 步进表达式⑥) {    

    2024年01月20日
    浏览(30)
  • 系统学习Python——装饰器:类装饰器-[初探类装饰器和元类]

    分类目录:《系统学习Python》总目录 函数装饰器是如此有用,以至于Python2.X和Python3.X都扩展了这一模式,允许装饰器应用于类和函数。简而言之,类装饰器类似于函数装饰器,但它们是在一条 class 语句的末尾运行,并把一个类名重新绑定到一个可调用对象。同样,它们可以

    2024年02月19日
    浏览(29)
  • 【Web前端开发基础】CSS的定位和装饰

    能够说出 定位 的常见应用场景 能够说出 不同定位方式 的特点 能够使用 子绝父相 完成元素水平垂直案例 能够写出三种常见的 光标类型 (cursor) 能够使用 圆角边框 属性完成 正圆 和 胶囊按钮 效果 能够说出 display 和 visibility 让 元素本身隐藏 的区别 2.1 定位 目标:能够说

    2024年01月23日
    浏览(35)
  • CSS基础学习--12 分组 和 嵌套 选择器

    一、分组选择器         在样式表中有很多具有相同样式的元素         为了尽量减少代码,你可以使用分组选择器。          每个选择器用逗号分隔 。         在下面的例子中,我们对以上代码使用分组选择器: 备注 :h1、h2与p标签字体颜色都是绿色, 为

    2024年02月09日
    浏览(33)
  • Python小知识 - Python装饰器

    Python装饰器 在Python中,装饰器是一个特殊的函数,可以将其他函数包装在装饰器函数中,并且将被包装的函数作为参数传递给装饰器函数。 使用装饰器的好处是可以自动在被包装的函数前后执行一些额外的代码,比如在函数执行前后打印日志,或者在函数执行前后计算函数

    2024年02月09日
    浏览(29)
  • 【Java 基础】for 循环、嵌套循环详解(附案例)

    《 Java 零基础入门到精通 》 专栏持续更新中。通过本专栏你将学习到 Java 从 入门 到 进阶 再到 实战 的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。 订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java

    2023年04月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包