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中的作用域规则详解
Jan 30 Python
Python functools模块学习总结
May 09 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
Python列表与元组的异同详解
Jul 02 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
python的scipy实现插值的示例代码
Nov 12 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
Python reques接口测试框架实现代码
Jul 28 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
python调试工具Birdseye的使用教程
May 25 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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
php实现mysql数据库备份类
2008/03/20 PHP
php正则校验用户名介绍
2008/07/19 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
python机器学习之神经网络(三)
2017/12/20 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
python中yield的用法详解
2021/01/13 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
英语专业求职信
2014/07/08 职场文书
社区娱乐活动方案
2014/08/21 职场文书
2014年党委工作总结
2014/11/22 职场文书
食品质检员岗位职责
2015/04/08 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技