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 相关文章推荐
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
Python线程创建和终止实例代码
Jan 20 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
python的移位操作实现详解
Aug 21 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
Python的轻量级ORM框架peewee使用教程
Feb 05 Python
Python 实现定积分与二重定积分的操作
May 26 Python
python b站视频下载的五种版本
May 27 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
php正则
2006/07/07 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
JS的get和set使用示例
2014/02/20 Javascript
javascript实现简单的html5视频播放器
2015/05/06 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
Python可迭代对象操作示例
2019/05/07 Python
python通过http下载文件的方法详解
2019/07/26 Python
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
食品销售计划书
2014/04/26 职场文书
保安公司服务承诺书
2014/05/28 职场文书
同学聚会策划方案
2014/06/06 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
2015政治思想表现评语
2015/03/25 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python