美文网首页
python_装饰器篇(多个装饰器下的执行顺序)

python_装饰器篇(多个装饰器下的执行顺序)

作者: 金鱼座 | 来源:发表于2019-11-21 09:44 被阅读0次

在之前的帖子中,简单自我总结了装饰器的几个情况以及基本上使用,那么有基本上说的都是单个的装饰器修饰方法

有时候我们会发现一个方法上面有多个装饰器
如下:

@dec2
@dec
def a(a):
    if a:
        print('raise')
        raise ConnectionAbortedError
    print(3)
    return 'a'

看到这类的装饰器那么我们该如何理解呢?

回答这个问题前,我们需要知道当执行到a这个方法时,装饰器是如何工作和加载的?
首先我们把dec 和 dec2分别实现

def dec(func):
  print('进入dec')
  def innner(*args):
      f = func(*args)
      print(1)
      return f, 'dec'
  return innner

def dec2(func2):
  print('进入dec2')
  def inner(*args):
      f = func2(*args)
      print(2)
      return f, 'dec2'
  return inner

按照如上的dec和dec2, 我们可以了解一下几个知识

  1. 装饰器的装饰顺序
  2. 装饰后的被装饰函数的方法返回结果顺序

执行后的结果


执行过程
结果

如上图中的,通过结果可以看出

  1. 装饰器的执行顺序时自下而上的,看结果中打印的 312,如果dec2在下面则打印的是321(可以对比下图)


    颠倒顺序后比对图
  2. 对应返回结果的装饰也存在执行顺序,下一个装饰的方法返回值,接收的是上一个装饰方法的返回结果如图中的((('a', 'dec'), 'dec2'))首先返回f,‘dec’ ,然后下一个装饰器f接收的就是dec的(f, 'dec'),在返回(('a', 'dec'), 'dec2')

相关文章

  • python_装饰器篇(多个装饰器下的执行顺序)

    在之前的帖子中,简单自我总结了装饰器的几个情况以及基本上使用,那么有基本上说的都是单个的装饰器修饰方法 有时候我们...

  • Day05

    一、装饰器进阶 多个装饰器同时装饰一个函数,执行顺序是由上往下执行被装饰函数执行之前的操作,再执行被装饰函数,最后...

  • Python 装饰器执行顺序迷思

    探究多个装饰器执行顺序 装饰器是Python用于封装...

  • 多个装饰器存在时的执行顺序

    装饰器的执行顺序是怎样的? 装饰器函数的执行顺序分为定义阶段和执行阶段,装饰器函数在被装饰函数定义好后立即执行 在...

  • 13. Python之装饰器

    1 什么是装饰器 2 为何要用装饰器 3 如何使用装饰器 4 语法糖 5 叠加多个装饰器,加载顺序与运行顺序 6 ...

  • Python 入门之多个装饰器执行顺序

    装饰器是 Python 用于封装函数或代码的工具,网上可以搜到很多文章可以学习,在这里要讨论的是多个装饰器执行顺序...

  • 关于python多重装饰器的执行顺序

    装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序。...

  • 装饰器5

    装饰器嵌套 语法糖执行顺序def fun_a(func): print("装饰器fun_a")def funct...

  • 装饰器(四)-多装饰器

    多个装饰器可以共同修饰一个函数,多装饰器的执行顺序从近到远或者说由下而上。其格式如下 @outer2 @outer...

  • python3基础---详解装饰器

    1、装饰器原理 2、装饰器语法 3、装饰器执行的时间 装饰器在Python解释器执行的时候,就会进行自动装饰,并不...

网友评论

      本文标题:python_装饰器篇(多个装饰器下的执行顺序)

      本文链接:https://www.haomeiwen.com/subject/npjaictx.html