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 translator使用实例
Sep 06 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
Python之list对应元素求和的方法
Jun 28 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
详解用python计算阶乘的几种方法
Aug 14 Python
python绘制随机网络图形示例
Nov 21 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
python解释器安装教程的方法步骤
Jul 02 Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 Python
如何获取numpy array前N个最大值
May 14 Python
分享3个非常实用的 Python 模块
Mar 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
php实现阳历阴历互转的方法
2015/10/28 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
angular十大常见问题
2017/03/07 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
js实现鼠标拖曳效果
2020/12/30 Javascript
详解Python中的__init__和__new__
2014/03/12 Python
wxPython学习之主框架实例
2014/09/28 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
python 爬虫请求模块requests详解
2020/12/04 Python
AJax面试题
2014/11/25 面试题
自荐书模板
2013/12/19 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
献爱心标语
2014/06/21 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
违纪检讨书范文
2015/01/27 职场文书
中学教代会开幕词
2016/03/04 职场文书
Python基于百度AI实现抓取表情包
2021/06/27 Python
关于python中模块和重载的问题
2021/11/02 Python