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爬虫之抓取糗事百科代码分享
Nov 06 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
Python语言描述连续子数组的最大和
Jan 04 Python
python邮件发送smtplib使用详解
Jun 16 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
Dec 12 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
Sep 11 Python
Django mysqlclient安装和使用详解
Sep 17 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 Python
如何用python清洗文件中的数据
Jun 18 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脚本
2006/11/26 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
vue实现弹幕功能
2019/10/25 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
会计主管岗位职责
2014/01/03 职场文书
饭店工作计划书
2014/01/10 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
学前班学生评语
2014/12/29 职场文书
武夷山导游词
2015/02/03 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
Java字符串逆序方法详情
2022/03/21 Java/Android