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 13 Python
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
python利用正则表达式提取字符串
Dec 08 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
详解KMP算法以及python如何实现
Sep 18 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
Python更改pip镜像源的方法示例
Dec 01 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中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
php array_map()函数实例用法
2021/03/03 PHP
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
Python遍历目录的4种方法实例介绍
2015/04/13 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
Python 下载及安装详细步骤
2019/11/04 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
Django REST 异常处理详解
2020/07/15 Python
Python实现JS解密并爬取某音漫客网站
2020/10/23 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
清华大学自主招生自荐信
2014/01/29 职场文书
大学学雷锋活动总结
2014/06/26 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python