首页 > 编程语言 >python 两个装饰器,怎么执行

python 两个装饰器,怎么执行

时间:2024-09-25 12:23:49浏览次数:3  
标签:function execution python decorator2 Decorator func 执行 装饰 decorator1

在 Python 中,当你为一个函数应用多个装饰器时,它们会按照自下而上的顺序依次应用。具体来说,假设有两个装饰器 @decorator1@decorator2,应用到同一个函数 func 上,如下所示:

@decorator1
@decorator2
def func():
    pass

这等价于以下代码:

func = decorator1(decorator2(func))

也就是说,decorator2 先被应用,然后 decorator1 再被应用。下面是一个具体的例子来演示这种行为:

def decorator1(func):
    def wrapper(*args, **kwargs):
        print("Decorator 1: Before function execution")
        result = func(*args, **kwargs)
        print("Decorator 1: After function execution")
        return result
    return wrapper

def decorator2(func):
    def wrapper(*args, **kwargs):
        print("Decorator 2: Before function execution")
        result = func(*args, **kwargs)
        print("Decorator 2: After function execution")
        return result
    return wrapper

@decorator1
@decorator2
def say_hello():
    print("Hello, World!")

say_hello()

输出结果为:

Decorator 1: Before function execution
Decorator 2: Before function execution
Hello, World!
Decorator 2: After function execution
Decorator 1: After function execution

从输出可以看到,decorator2 首先包裹了原始函数 say_hello,然后 decorator1 又包裹了 decorator2 包裹后的函数。所以执行顺序是:

  1. decorator1 在函数执行前的代码。
  2. decorator2 在函数执行前的代码。
  3. 原始函数 say_hello 的代码。
  4. decorator2 在函数执行后的代码。
  5. decorator1 在函数执行后的代码。

总结:

  • 多个装饰器应用时,最内层的装饰器(最靠近函数的装饰器)最先执行,最外层的装饰器(最远离函数的装饰器)最后执行。
  • 装饰器的执行顺序为从内到外,返回顺序为从外到内。

标签:function,execution,python,decorator2,Decorator,func,执行,装饰,decorator1
From: https://blog.51cto.com/qianxunman/12108389

相关文章

  • 解决 Python IDLE 横向显示文字的方法
    用pythonIDLE编写代码的时候,遇到中文字体是横向的,如何解决?解决办法,亲测有效。解决办法保存之后,之前的中文横向就竖向显示了。......
  • [含文档+PPT+源码等]精品基于Python实现的django校园流浪猫救助平台的设计与实现
    软件开发环境及开发工具:开发语言:python使用框架:Django前端技术:JavaScript、VUE.js(2.X)、css3开发工具:pycharm、VisualStudioCode、HbuildX数据库:MySQL5.7.26(版本号)数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyogpython版本:python3.0及以上浏览器:谷歌浏览器基......
  • Python 路径管理新纪元:pathlib 模块带你玩转文件系统
    引言在早期的Python版本中,处理文件路径往往需要依赖于os和os.path模块,虽然它们功能强大,但复杂的API设计使得代码可读性较差。随着Python3.4的发布,pathlib模块正式登场,它以对象导向的方式简化了路径操作,使得代码更加直观易懂。本文旨在通过一系列实例帮助你快速上手pa......
  • Python中的文件编码:揭开字符世界的神秘面纱
    引言在计算机系统中,数据是以二进制形式存储的。而我们日常见到的文字、符号等信息,则需要通过特定的方式转化为二进制数据,这就是编码的过程。不同的编码方式决定了如何将字符映射成字节序列。选择合适的编码方案不仅能够保证信息传输的准确性,还能提高程序的兼容性和可移植性。比如,......
  • Python+requests测试接口、关联接口
    一个通过筛选,一个提取cookie(有两种写法)一、依赖接口(1)第一种方法:requests.session 准备两个接口:一个登录接口,一个用户查询接口登录接口:http://cms.duoceshi.cn/manage/loginJump.do请求体:userAccount:adminloginPwd:123456用户查询接口:http://cms.duoceshi.cn/manage/q......
  • Python模拟鼠标轨迹
    一.鼠标轨迹模拟简介传统的鼠标轨迹模拟依赖于简单的数学模型,如直线或曲线路径。然而,这种方法难以捕捉到人类操作的复杂性和多样性。AI大模型的出现,能够通过深度学习技术,学习并模拟更自然的鼠标移动行为。二.鼠标轨迹算法实现AI大模型通过学习大量的人类鼠标操作数据,能够识别......
  • Python-通过Wind获取股票收盘价并绘制收盘价曲线图及均价水平参考线
    注意事项:需要安装Wind金融客户端并且用windPy权限代码如下:importnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlibasmplimportpandasaspdfromWindPyimport*#设置属性防止中文乱码mpl.rcParams['font.family']='SimHei' #设置字体为黑体mpl.rcPar......
  • [Python手撕]实现哈希映射
    classNode:def__init__(self,key,value,next=None):self.key=keyself.value=valueself.next=nextclassMyHashMap:def__init__(self):self.array=[None]*(10**3)defput(self,key:int,value:int)->......
  • 监控下抽烟检测系统 Python
    监控下抽烟检测系统具有以下优势:监控下抽烟检测系统通过视频监控设备对工地和工厂的作业区域进行实时监测,准确捕捉人员抽烟的行为。监控下抽烟检测系统采用先进的图像识别技术,能够准确识别人员抽烟的动作和烟雾。监控下抽烟检测系统一旦系统发现有人员在禁烟区域内抽烟,将立即触发预......
  • 面向企业应用程序的 Python 配置管理
    配置管理的重要性    在企业应用程序中,配置管理是最被低估的运算符,它使所有内容保持集成并平稳运行。它充当后台经理,确保所有灯光都就位,剧院队列准备就绪,演出可以顺利进行。特别是,在处理多环境部署时,使用紧密的 CI/CD 流程,一个错误的配置可能会带来应用程序范围的关闭风险。......