装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^

使用场景

可以用到装饰器的地方有很多,简单的举例如以下场景

引入日志

函数执行时间统计

执行函数前预备处理

执行函数后清理功能

权限校验等场景

缓存

今天讲一下python中装饰器的执行顺序,以两个装饰器为例。

装饰器代码如下:

def wrapper_out1(func):

print('--out11--')

def inner1(*args, **kwargs):

print("--in11--")

ret = func(*args, **kwargs)

print("--in12--")

return ret

print("--out12--")

return inner1

def wrapper_out2(func):

print('--out21--')

def inner2(*args, **kwargs):

print("--in21--")

ret = func(*args, **kwargs)

print("--in22--")

return ret

print("--out22")

return inner2

@wrapper_out2

@wrapper_out1

def test():

print("--test--")

return 1 * 2

if __name__ == '__main__':

test()

执行结果如下:

"""

--out11--

--out12--

--out21--

--out22--

--in21--

--in11--

--test--

--in12--

--in22--

"""

执行顺序以图片形式展示如下:

先进入离test函数最近的装饰器,由于装饰器中返回的是函数的函数名引用,并非真正调用函数,所以先打印:

--out11--

--out12--

--out21--

--out22--

到inner2后,func会真正执行函数,会调用inner1(),所以再打印:

--in21--

--in11--

到inner1中,func会调用test函数,所以会打印:

--test--

再从各个函数出来后,会依次打印:

--in12--

--in22--

合起来就是上面的执行结果。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

python装饰器的顺序_python中多个装饰器的执行顺序详解相关推荐

  1. python定义数组并赋值_python中的数组赋值与拷贝的区别详解

    具体的注解我已经写在了程序里面:通俗的解释了python里面的浅拷贝与深拷贝的不同,请看程序. # -*- coding: utf-8 -*- import numpy as np import co ...

  2. python except用法与作用_Python中关于try-except用法的错误和异常处理详解

    本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常 ...

  3. python中randint是什么意思_python中random.randint和random.randrange的区别详解

    在python中,通过导入random库,就能使用randint 和 randrange 这两个方法来产生随机整数.那这两个方法的区别在于什么地方呢?让我们一起来看看! 区别: randint 产生的 ...

  4. python调用包中的方法_python 中不同包 类 方法 之间的调用详解

    目录结构如下: 在hello.py中导入ORM.py这个文件的时候,采用 import ORMPackage.ORM 或者 import ORM u = User(id = 123, name='co ...

  5. python两个装饰器执行顺序_python中多个装饰器的执行顺序

    今天讲一下python中装饰器的执行顺序,以两个装饰器为例. 装饰器代码如下: def wrapper_out1(func): print('--out11--') def inner1(*args, ...

  6. python两个装饰器执行顺序_python中多个装饰器的执行顺序详解

    装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^ 使用场景 可以用到装饰器的 ...

  7. python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

    1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

  8. python装饰器与闭包_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。...

    转载:http://python.jobbole.com/81683/ 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需 ...

  9. python闭包和装饰器的区别_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。(转)...

    呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数 ...

最新文章

  1. pthread_mutex_lock用法
  2. TortoiseSVN Unable to connect to a repository at URL XXX
  3. 不能忍!世界首富贝索斯发博文称遭”不雅照”威胁
  4. html横向导入word
  5. 女孩子偷偷学好软件测试,想要年薪30w也没有很难!
  6. 计算机桌面ico图标,.ico格式图标制作转换教程及DIY桌面图标的方法
  7. 如何将电脑图片缩小kb?图片怎么压缩大小?
  8. 猫和计算机连接网络,猫、路由器和网卡的连接教程[图文]
  9. BZOJ 1069 最大土地面积(旋转卡壳求最大四边形)
  10. 天猫商城在线购物系统
  11. 01-03Python编程:操作列表
  12. 剑心---速度与位置
  13. 转: 雅虎35条优化黄金守则
  14. 第六章(项目进度管理)知识点
  15. 如何在html中添加图片的自动滚播,制作网页中的滚动图片,怎样循环播放。
  16. PS自动批量处理文件夹下所有文件
  17. MTK如何配置长按关机
  18. 龙讯4号 龙芯图谋你的客厅
  19. MBA-day22 直言命题的矛盾命题
  20. 汇编原理自我总结(四)

热门文章

  1. 简单的Gradle Web应用程序
  2. 在Tomcat上设置和使用Apache Solr
  3. 使用Spring 3 MVC处理表单验证
  4. 真正的模块化Web应用程序:为什么没有开发标准?
  5. php页面 info,通过PATH_INFO方法实现页面伪静态_php
  6. jpa获取数据库当前时间_SpringDataJPA存储数据时通过注解自动设置创建时间和修改时间...
  7. sql安装联机丛书提示发生网络错误_速达软件:安装问题解答
  8. java学习笔记_Java学习笔记day11
  9. _用WSL,MobaXterm,Cmder配置linux开发环境
  10. oracle创建简单包,Oracle创建程序包是什么?