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中实现两个字典(dict)合并的方法
Sep 23 Python
使用PDB简单调试Python程序简明指南
Apr 25 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
Python常用知识点汇总
May 08 Python
Python使用剪切板的方法
Jun 06 Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
python3 爬取图片的实例代码
Nov 06 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 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数据缓存的使用说明
2013/05/10 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
javascript闭包的理解
2015/04/01 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
js实现全选和全不选
2020/07/28 Javascript
python实现识别相似图片小结
2016/02/22 Python
python脚本监控docker容器
2016/04/27 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
关于python写入文件自动换行的问题
2018/06/23 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
英格兰足协官方商店:England Store
2019/07/12 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
工作表现自我评价
2014/02/08 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
董事长助理工作总结2015
2015/07/23 职场文书