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基础教程之循环介绍
Aug 29 Python
判断网页编码的方法python版
Aug 12 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
在Python中通过threshold创建mask方式
Feb 19 Python
python实现udp聊天窗口
Mar 31 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
Python pymsql模块的使用
Sep 07 Python
PyCharm 光标变成黑块的解决方式
Feb 06 Python
Anaconda配置各版本Pytorch的实现
Aug 07 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 使用post,get的一种简洁方式
2010/04/25 PHP
《PHP编程最快明白》第三讲:php数组
2010/11/01 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
javascript实现拖放效果
2015/12/16 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
Python类的专用方法实例分析
2015/01/09 Python
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
详解Python的Lambda函数与排序
2016/10/25 Python
python编程羊车门问题代码示例
2017/10/25 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
分析python请求数据
2018/08/19 Python
Pandas之缺失数据的实现
2021/01/06 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
土木工程应届生自荐信
2013/09/24 职场文书
理工大学毕业生自荐信
2013/11/01 职场文书
策划主管的工作职责
2013/11/24 职场文书
小区门卫岗位职责
2013/12/31 职场文书
白酒市场营销方案
2014/02/25 职场文书
美食节策划方案
2014/05/26 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技