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

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

如下:

@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, 我们可以了解一下几个知识

装饰器的装饰顺序

装饰后的被装饰函数的方法返回结果顺序

执行后的结果

执行过程

结果

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

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

颠倒顺序后比对图

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

python多个for的执行顺序-python_装饰器篇(多个装饰器下的执行顺序)相关推荐

  1. python多个装饰器执行顺序_Python面试题之多个装饰器执行顺序

    疑问 大部分涉及多个装饰器装饰的函数调用顺序时都会说明它们是自上而下的,比如下面这个例子:def decorator_a(func): print 'Get in decorator_a' def i ...

  2. python统计闰年的个数_闰年python_闰年 python_python 闰年数 - 云+社区 - 腾讯云

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 栈(stack)类,用于模拟一种具有后进先出(lifo)特性的数据结构#! us ...

  3. 进击谷歌:多线程下程序执行顺序怎么稳定不乱?

    面试官您好,我是来面试的 您好,我是这次的面试官,先介绍一下自己把 我是女孩,blala .... 那问一个多线程的问题吧,在一个多线程的环境中,怎么能保证一系列方法的执行顺序呢? 01 PART 题 ...

  4. python编译exe文件太大了_python编译windows下可执行的exe文件

    python编译windows下可执行的exe文件的操作流程: 1.在安装python环境的windows下,安装 pyinstaller,请在dos下执行如下命令: pip install pyin ...

  5. Python编程语言学习:列表与字典互转的几大方法集锦、从列表中按顺序循环抽走一个元素输出剩余元素之详细攻略

    Python编程语言学习:列表与字典互转的几大方法集锦.从列表中按顺序循环抽走一个元素输出剩余元素之详细攻略 目录 列表与字典互转的几大方法集锦 T1.基于两个列表利用zip函数来构造字典 <

  6. Python 用 if __name__ == ‘__main__‘:语句来控制代码是被直接运行还是导包执行

    一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行.因此 if __name__ == '__main__': ...

  7. 多个for语句嵌套执行顺序_阿里真实面试题解析之实现多个线程顺序执行的几种方式...

    前几天有一位同事在阿里一面的时候被问到这么一个多线程问题:如何保证多个线程的顺序执行.当时他没有回答上来,所以为了避免大家以后遇到同样的面试题还是回答不上来,今天我们就来分析解答下这个问题. 问题缘由 ...

  8. 拦截器原理多个拦截器执行顺序

    拦截器原理多个拦截器执行顺序 1.根据当前请求,找到**HandlerExecutionChain[可以处理请求的handler以及handler的所有 拦截器] 2.先来顺序执行 所有拦截器的 pr ...

  9. linux脚本输出缓存上限,关于 Linux 下后台执行 Python 脚本的缓冲问题

    [问题简述] 在 Linux 下后台执行 Python 脚本,重定向到日志文件,日志文件迟迟没有内容. [方案一](测试有效)nohup python3 -u t.py &> log.l ...

  10. Python 闭包、单个装饰器、多个装饰器、装饰器修饰类、应用场景

    1. 闭包 在 Python 中,函数也可以作为参数.我们可以执行下面的代码: def func(a, b):return a + bprint(func) 我们直接输出函数名,而没有加括号.输出结果 ...

最新文章

  1. 20年研发管理经验谈(三)
  2. 设计模式 - 创建型模式_ 单例模式 Singleton Pattern
  3. Spring Boot-@Configuration注解
  4. Linus:“我删除了Linux,因为它就是个垃圾!”
  5. Logcat打印调试信息
  6. java源码文件丢恢复需要多少钱,上岸蚂蚁金服!
  7. 书单推荐:六本好书带你入门数据科学
  8. org/springframework/util/backoff/BackOff
  9. 儿童吹泡泡水简单配方_儿童吹泡泡玩具水怎么制作
  10. HDFS剩余空间大小的Java接口,java api获取hdfs索引大小
  11. PHP中如何判断属性类型,php – 如何获取doctrine实体属性的类型
  12. 根据ip获取所在城市 php,PHP:根据IP地址获取所在城市
  13. 【51单片机】单片机仿真软件Proteus 8.7破解和汉化教程(附下载地址)
  14. 如何监控网页卡顿和崩溃?
  15. 标准差 php,标准偏差怎么算
  16. 复合索引的底层数据结构——最左原则
  17. 【报告分享】2021天猫坚果消费趋势报告-CBNData(附下载)
  18. 数据模型建设步骤总结
  19. oracle查看某个分区的数据,查看oracle表的分区信息
  20. Quartz 2D 涂鸦

热门文章

  1. ElasticSearch聚合分析API——非常详细,如果要全面了解的话,最好看这个
  2. hbase shell-namespace(命名空间指令)
  3. 剑指offer-数组中出现次数超过一半的数字
  4. TcpClient 有好多坑
  5. FLEX PHP 交互 简单登录界面(1)源代码
  6. netty如何实现零拷贝
  7. 多路径下使用ASMLIB创建ASM磁盘
  8. [ARM-Linux]Linux-MATLAB安装
  9. 太白---落燕纷飞第一重 Android单元測试Instrumentation和irobotium
  10. 权限管理系统之模块管理