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 相关文章推荐
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
Django框架多表查询实例分析
Jul 04 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
pymongo中聚合查询的使用方法
Mar 22 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
python批量处理txt文件的实例代码
Jan 13 Python
python opencv如何实现图片绘制
Jan 19 Python
python统计字符的个数代码实例
Feb 07 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
python中sys模块是做什么用的
Aug 16 Python
python单例模式的应用场景实例讲解
Feb 24 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
PHP 程序授权验证开发思路
2009/07/09 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
JSQL  一个 web DB 的封装
2010/05/05 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
python基础教程之序列详解
2014/08/29 Python
python计算时间差的方法
2015/05/20 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
毕业生自荐信
2013/12/14 职场文书
旅游项目开发策划书
2014/01/18 职场文书
《恐龙》教学反思
2014/04/27 职场文书
入职担保书范文
2014/05/21 职场文书
校庆标语集锦
2014/06/25 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
公司表扬稿范文
2015/05/05 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL