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脚本和ADB命令实现卸载App
Feb 10 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
Django forms组件的使用教程
Oct 08 Python
python使用正则筛选信用卡
Jan 27 Python
python绘制漏斗图步骤详解
Mar 04 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
Python 2种方法求某个范围内的所有素数(质数)
Jan 31 Python
python对接ihuyi实现短信验证码发送
May 10 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
python3爬虫中多线程的优势总结
Nov 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
编写Js代码要注意的几条规则
2010/09/10 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
Python tkinter常用操作代码实例
2020/01/03 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
奥地利婴儿用品和玩具购物网站:baby-markt.at
2020/01/26 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
商务英语专业毕业生自荐信
2013/11/05 职场文书
董事长职责范文
2013/11/08 职场文书
质检部岗位职责
2013/11/11 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
抽样调查项目计划书
2014/04/24 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书