python装饰器常见使用方法分析


Posted in Python onJune 26, 2019

本文实例讲述了python装饰器常见使用方法。分享给大家供大家参考,具体如下:

python 的装饰器,可以用来实现,类似spring AOP 类似的功能。一样可以用来记录某个方法执行前做什么,执行后做什么,或者用来记录日志,运行的时间等,更有甚者,用这个来做权限拦截,也未尝不可。从两个方面来描述python 的装饰模式:

1. 对普通方法的装饰

2. 对在 class 类中的方法的装饰,不需要给参数的情况

3. 对在 class 类中的方法的装饰,需要给参数的情况

一,对普通方法的装饰。比如,要计算一个一个方法执行的时间.

#coding:utf-8
import time
def timeit(func):
  def wrapper(*args, **kv):
    start = time.clock()
    print '开始执行'
    func(*args, **kv)
    end =time.clock()
    print '花费时间:', end - start
  return wrapper
@timeit
def foo():
  print 'in foo()'
if __name__=='__main__':
  foo()

运行结果:

开始执行
in foo()
花费时间: 6.55415628267e-05

可以看到,计算出了时间差。而不是像普通方法一样,写在一个函数里面实现。

二、对在 class 类中的方法的装饰,不需要给参数的情况

#coding:utf-8
import time
def timeit(func):
  def wrapper(*args, **kv):
    start = time.clock()
    print '开始执行'
    func(*args, **kv)
    end =time.clock()
    print '花费时间:', end - start
  return wrapper
class MySpendTime(object):
  def __init__(self):
    pass
  @timeit
  def foo(self):
    print 'in foo()'
spendtime=MySpendTime()
spendtime.foo()

运行结果:

开始执行
in foo()
花费时间: 4.42208134735e-05

三、对在 class 类中的方法的装饰,需要给参数的情况

#coding:utf-8
'''
Created on 2012-11-1
@author: yihaomen.com
'''
def UpdateUI(msg, step):
  print u"内容:", msg
  print u"步骤:到第%s步了" % step
  def dec(func):
    def wapper(self, *args, **kwargs):
      func(self,*args, **kwargs)
    return wapper
  return dec
class Command(object):
  def Excute(self):
    self.Work1st()
    self.Work2nd()
    self.Work3rd()
  @UpdateUI("开始第一步","1")
  def Work1st(self):
    print "Work1st"
  @UpdateUI("开始第二步", 2)
  def Work2nd(self):
    print "Work2nd"
  @UpdateUI("开始第三步", 3)
  def Work3rd(self):
    print "Work3rd"
if __name__=="__main__":
  command = Command()
  command.Excute()

运行结果:

内容: 开始第一步
步骤:到第1步了
内容: 开始第二步
步骤:到第2步了
内容: 开始第三步
步骤:到第3步了
Work1st
Work2nd
Work3rd

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
浅析Python 中整型对象存储的位置
May 16 Python
python 获取网页编码方式实现代码
Mar 11 Python
python八皇后问题的解决方法
Sep 27 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
python Tkinter版学生管理系统
Feb 20 Python
python函数的万能参数传参详解
Jul 26 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
python requests证书问题解决
Sep 05 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 Python
解决python super()调用多重继承函数的问题
Jun 26 #Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 #Python
python里dict变成list实例方法
Jun 26 #Python
Python音频操作工具PyAudio上手教程详解
Jun 26 #Python
python3中类的继承以及self和super的区别详解
Jun 26 #Python
对Python中class和instance以及self的用法详解
Jun 26 #Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 #Python
You might like
2014过年倒计时示例
2014/01/31 PHP
PHP递归创建多级目录
2015/11/05 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
进一步理解Python中的函数编程
2015/04/13 Python
Python 列表理解及使用方法
2017/10/27 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
python属于软件吗
2020/06/18 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
介绍一下游标
2012/01/10 面试题
大学生社会实践方案
2014/05/11 职场文书
销售顾问工作计划书
2014/09/15 职场文书
教师求职自荐信范文
2015/03/04 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript