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操作gmail实例
Jan 14 Python
Python读取Excel的方法实例分析
Jul 11 Python
Python设置默认编码为utf8的方法
Jul 01 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
pytorch-神经网络拟合曲线实例
Jan 15 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 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 分页类(模仿google)-面试题目解答
2009/09/13 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
php不用正则验证真假身份证
2013/11/06 PHP
浅谈php冒泡排序
2014/12/30 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
Python struct.unpack
2008/09/06 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python+Wordpress制作小说站
2017/04/14 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Python递归函数实例讲解
2019/02/27 Python
Python操作Jira库常用方法解析
2020/04/10 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
优秀团支部事迹材料
2014/02/08 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
晚会开场白和结束语
2015/05/29 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA
Python字符串格式化方式
2022/04/07 Python