Python装饰器简单用法实例小结


Posted in Python onDecember 03, 2018

本文总结分析了Python装饰器简单用法。分享给大家供大家参考,具体如下:

装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能。

比如,运行业务函数fun()同时打印运行花费的时间

1. 运行业务函数fun()同时打印运行花费的时间

import time
def dec(fun):
  start = time.time()
  fun()
  end = time.time()
  a = end - start
  print a
def myfun():
  print 'run myfunction'
dec(myfun)

运行结果

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00108599662781

但是每次运行myfun都要调用dec,下面作下变动解决这个问题

2.

import time
def dec(fun):
  def wrap():
    start = time.time()
    fun()
    end = time.time()
    a = end - start
    print a
  return wrap
def myfun():
  print 'run myfunction'
myfun=dec(myfun)
myfun()

运行结果:

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00122618675232

这个装饰器dec就实现了,并且不影响函数myfun功能

3. 装饰器@符

import time
def dec(fun):
  def wrap():
    start = time.time()
    fun()
    end = time.time()
    a = end - start
    print a
  return wrap
@dec
def myfun():
  print 'run myfunction'
myfun()

结果

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.000470876693726

使用了@后,就不用给myfun重新赋值了

@dec就相当于myfun=dec(myfun)

例子:

def level(leveel):
  def debug(func):
    def wrapper(*args, **kwargs):
      print("[DEBUG]: enter {}()".format(func.__name__),leveel)
      return func(*args, **kwargs)
    return wrapper
  return debug
@level(leveel='debuging')
def say(something):
  print ("hello {}!".format(something))
say(123)

输出:

('[DEBUG]: enter say()', 'debuging')
hello 123!

'''
class logging(object):
  def __init__(self, func):
    self.func = func
  def __call__(self, *args, **kwargs):
    print ("[DEBUG]: enter function {func}()".format(
      func=self.func.__name__))
    return self.func(*args, **kwargs)
@logging
def say(something):
  print ("say {}!".format(something))
'''
class logging(object):
  def __init__(self, level='INFO'):
    self.level = level
  def __call__(self, func): # 接受函数
    def wrapper(*args, **kwargs):
      print ("[{level}]: enter function {func}()".format(
        level=self.level,
        func=func.__name__))
      func(*args, **kwargs)
    return wrapper #返回函数
@logging(level='INFO')
def say(something):
  print ("say {}!".format(something))
say(123)

输出:

[INFO]: enter function say()
say 123!

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python装饰器基础详解
Mar 09 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
Python-jenkins 获取job构建信息方式
May 12 Python
Python3合并两个有序数组代码实例
Aug 11 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
python爬虫中的url下载器用法详解
Nov 30 Python
python实现图片批量压缩
Apr 24 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 #Python
利用Python实现原创工具的Logo与Help
Dec 03 #Python
对pycharm 修改程序运行所需内存详解
Dec 03 #Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 #Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 #Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 #Python
Python实现的特征提取操作示例
Dec 03 #Python
You might like
全国FM电台频率大全 - 19 广东省
2020/03/11 无线电
把PHP安装为Apache DSO
2006/10/09 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
python新手经常遇到的17个错误分析
2014/07/30 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
python+Django+apache的配置方法详解
2016/06/01 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Django数据库操作之save与update的使用
2020/04/01 Python
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
关于读书的演讲稿300字
2014/08/27 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
学习与创新自我评价
2015/03/09 职场文书
python如何进行基准测试
2021/04/26 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python