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共享引用(多个变量引用)示例代码
Dec 04 Python
使用Python编写一个模仿CPU工作的程序
Apr 16 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
python算法演练_One Rule 算法(详解)
May 17 Python
详解Python文本操作相关模块
Jun 22 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
Django框架视图介绍与使用详解
Jul 18 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
Python中request的基本使用解决乱码问题
Apr 12 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
批量修改RAR文件注释的php代码
2010/11/20 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
NodeJS框架Express的模板视图机制分析
2011/07/19 NodeJs
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
2019/03/12 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详解Python中的__init__和__new__
2014/03/12 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python实现串口自动触发工作的示例
2019/07/02 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
如何基于Python按行合并两个txt
2020/11/03 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
应届毕业生如何写求职信
2014/02/16 职场文书
学雷锋宣传标语
2014/06/25 职场文书
贷款委托书
2014/08/01 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
企业承诺书格式范文
2015/04/28 职场文书
深入理解Pytorch微调torchvision模型
2021/11/11 Python