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 相关文章推荐
基于DataFrame筛选数据与loc的用法详解
May 18 Python
python用plt画图时,cmp设置方法
Dec 13 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
python web框架中实现原生分页
Sep 08 Python
原生python实现knn分类算法
Oct 24 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
python plotly画柱状图代码实例
Dec 13 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
多个python文件调用logging模块报错误
Feb 12 Python
Python urllib3软件包的使用说明
Nov 18 Python
Python OpenCV超详细讲解基本功能
Apr 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
基于mysql的论坛(4)
2006/10/09 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
Less 安装及基本用法
2018/05/05 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
Python中的闭包总结
2014/09/18 Python
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
Python实现登录接口的示例代码
2017/07/21 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
django文档学习之applications使用详解
2018/01/29 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
创业计划书中包含的9个方面
2013/12/26 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
一年级小学生评语大全
2014/12/25 职场文书
辞职信怎么写
2015/02/27 职场文书
春节慰问简报
2015/07/21 职场文书
《称赞》教学反思
2016/02/17 职场文书
千万级用户系统SQL调优实战分享
2022/03/03 MySQL