python装饰器的顺序_python中多个装饰器的执行顺序详解
装饰器是程序开发中经常会用到的一个功能,也是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中多个装饰器的执行顺序详解相关推荐
- python定义数组并赋值_python中的数组赋值与拷贝的区别详解
具体的注解我已经写在了程序里面:通俗的解释了python里面的浅拷贝与深拷贝的不同,请看程序. # -*- coding: utf-8 -*- import numpy as np import co ...
- python except用法与作用_Python中关于try-except用法的错误和异常处理详解
本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常 ...
- python中randint是什么意思_python中random.randint和random.randrange的区别详解
在python中,通过导入random库,就能使用randint 和 randrange 这两个方法来产生随机整数.那这两个方法的区别在于什么地方呢?让我们一起来看看! 区别: randint 产生的 ...
- python调用包中的方法_python 中不同包 类 方法 之间的调用详解
目录结构如下: 在hello.py中导入ORM.py这个文件的时候,采用 import ORMPackage.ORM 或者 import ORM u = User(id = 123, name='co ...
- python两个装饰器执行顺序_python中多个装饰器的执行顺序
今天讲一下python中装饰器的执行顺序,以两个装饰器为例. 装饰器代码如下: def wrapper_out1(func): print('--out11--') def inner1(*args, ...
- python两个装饰器执行顺序_python中多个装饰器的执行顺序详解
装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^ 使用场景 可以用到装饰器的 ...
- python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...
1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...
- python装饰器与闭包_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。...
转载:http://python.jobbole.com/81683/ 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需 ...
- python闭包和装饰器的区别_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。(转)...
呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数 ...
最新文章
- pthread_mutex_lock用法
- TortoiseSVN Unable to connect to a repository at URL XXX
- 不能忍!世界首富贝索斯发博文称遭”不雅照”威胁
- html横向导入word
- 女孩子偷偷学好软件测试,想要年薪30w也没有很难!
- 计算机桌面ico图标,.ico格式图标制作转换教程及DIY桌面图标的方法
- 如何将电脑图片缩小kb?图片怎么压缩大小?
- 猫和计算机连接网络,猫、路由器和网卡的连接教程[图文]
- BZOJ 1069 最大土地面积(旋转卡壳求最大四边形)
- 天猫商城在线购物系统
- 01-03Python编程:操作列表
- 剑心---速度与位置
- 转: 雅虎35条优化黄金守则
- 第六章(项目进度管理)知识点
- 如何在html中添加图片的自动滚播,制作网页中的滚动图片,怎样循环播放。
- PS自动批量处理文件夹下所有文件
- MTK如何配置长按关机
- 龙讯4号 龙芯图谋你的客厅
- MBA-day22 直言命题的矛盾命题
- 汇编原理自我总结(四)
热门文章
- 简单的Gradle Web应用程序
- 在Tomcat上设置和使用Apache Solr
- 使用Spring 3 MVC处理表单验证
- 真正的模块化Web应用程序:为什么没有开发标准?
- php页面 info,通过PATH_INFO方法实现页面伪静态_php
- jpa获取数据库当前时间_SpringDataJPA存储数据时通过注解自动设置创建时间和修改时间...
- sql安装联机丛书提示发生网络错误_速达软件:安装问题解答
- java学习笔记_Java学习笔记day11
- _用WSL,MobaXterm,Cmder配置linux开发环境
- oracle创建简单包,Oracle创建程序包是什么?