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实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
Python中用于检查英文字母大写的isupper()方法
May 19 Python
python3+PyQt5自定义视图详解
Apr 24 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
python kafka 多线程消费者&手动提交实例
Dec 21 Python
PyCharm第一次安装及使用教程
Jan 08 Python
Python实现一个优先级队列的方法
Jul 31 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
pytorch 如何使用float64训练
May 24 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 闭包特性在实际应用中的问题
2009/10/30 PHP
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
php数组分页实现方法
2016/04/30 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
js 判断浏览器使用的语言示例代码
2014/03/22 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
Python循环语句中else的用法总结
2016/09/11 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
Python多线程获取返回值代码实例
2020/02/17 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
车辆年检委托书范本
2014/10/14 职场文书
2016公司新年问候语
2015/11/11 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
JavaScript实现登录窗体
2021/06/22 Javascript