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生成验证码实例
Aug 21 Python
Python3使用requests发闪存的方法
May 11 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python 多线程Threading初学教程
Aug 22 Python
python+opencv识别图片中的圆形
Mar 25 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
Python之时间和日期使用小结
Feb 14 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
使用Python的turtle模块画国旗
Sep 24 Python
Python单元测试与测试用例简析
Nov 09 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
Python 中random 库的详细使用
Jun 03 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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
JQuery获得内容和属性方法解析
2020/05/30 jQuery
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python协程用法实例分析
2015/06/04 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
python数据处理实战(必看篇)
2017/06/11 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
基于python图像处理API的使用示例
2020/04/03 Python
Python 操作 MySQL数据库
2020/09/18 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
中专毕业生的自我鉴定
2013/12/01 职场文书
青蓝工程实施方案
2014/03/27 职场文书
《称象》教学反思
2014/04/25 职场文书
新教师岗前培训方案
2014/06/05 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
婚宴邀请函
2015/01/30 职场文书
家长必看:义务教育,不得以面试 评测等名义选拔学生
2019/07/09 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
Python turtle实现贪吃蛇游戏
2021/06/18 Python
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android