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 相关文章推荐
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
django数据库自动重连的方法实例
Jul 21 Python
python pycharm的安装及其使用
Oct 11 Python
python读取Kafka实例
Dec 23 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
教你怎么用python实现字符串转日期
May 24 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 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详解ASCII码对照表与字符转换
2011/12/05 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
Python文档生成工具pydoc使用介绍
2015/06/02 Python
详解Python验证码识别
2016/01/25 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
Django中url的反向查询的方法
2018/03/14 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
大学生自荐书范文
2013/12/10 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
会计工作岗位职责
2015/02/03 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python