python装饰器常见使用方法分析

yipeiwu_com7年前Python基础

本文实例讲述了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实现微信消息防撤回功能的实例代码

微信(WeChat)是腾讯公司于2011年1月21日推出的一款社交软件,8年时间微信做到日活10亿,日消息量450亿。在此期间微信也推出了不少的功能如:“摇一摇”、“漂流瓶”、“朋友圈”...

Python使用pylab库实现绘制直方图功能示例

Python使用pylab库实现绘制直方图功能示例

本文实例讲述了Python使用pylab库实现绘制直方图功能。分享给大家供大家参考,具体如下: Python直方图 #!/usr/bin/python # -*- coding: u...

Python简单实现安全开关文件的两种方式

本文实例讲述了Python简单实现安全开关文件的两种方式。分享给大家供大家参考,具体如下: 以下代码经Python3.3测试。 方式1: try: file = open('co...

Django开发的简易留言板案例详解

Django开发的简易留言板案例详解

本文实例讲述了Django开发的简易留言板。分享给大家供大家参考,具体如下: Django在线留言板小练习 环境 ubuntu16.04 + python3 + django1.11 1...

Python中下划线的使用方法

本文将讨论Python中下划线(_)字符的使用方法。我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已。 单下划线(_) 通常情况下,会在以...