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中for循环下的索引变量的作用域
Apr 15 Python
为Python的web框架编写MVC配置来使其运行的教程
Apr 30 Python
python函数装饰器用法实例详解
Jun 04 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
Python中使用socks5设置全局代理的方法示例
Apr 15 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
Python基于template实现字符串替换
Nov 27 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
Matlab如何实现矩阵复制扩充
Jun 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
新浪SAE搭建PHP项目教程
2015/01/28 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
jquery JSON的解析方式
2009/07/25 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python的缺点和劣势分析
2019/11/19 Python
使用tqdm显示Python代码执行进度功能
2019/12/08 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
2014年师德师风学习材料
2014/05/16 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers