python装饰器使用实例详解


Posted in Python onDecember 14, 2019

这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

python装饰器的作用就是在不想改变原函数代码的情况下,增加新的功能.主要应用了python闭包的概念,现在用1个小例子说明

import time
def foo():
  time.sleep(1)
  
def bar():
  time.sleep(2)
  
def show_time(f):
  def inner():
    start_time = time.time()
    f()
    end_time = time.time()
    print(end_time-start_time)
  return inner
#show_time(f) is a decoration function
foo = show_time(foo)
bar = show_time(bar)

foo()
bar()

上面的代码定义了两个函数foo()和bar(). 通过装饰器函数show_time(f),在其内部定义了另一个闭包函数inner(),再通过foo=show_time(foo),bar=show_time(bar)语句将foo()和bar()函数同装饰器函数关联起来,从而实现了不改变foo()和bar()函数代码,增加打印程序执行时间的功能.程序的执行结果如下:

1.0011370182
2.00142788887

显然,程序在没有改变原函数的情况下,实现了调用原函数显示程序运行时间的功能.

上面的小程序可以将调用装饰器的语句改成@decoration的形式,效果是造价的,改变后的程序如下,其功能和上面的程序完全相同.

import time

@show_time #foo = show_time(foo)
def foo():
  time.sleep(1)
 
@show_time #bar = show_time(bar)
def bar():
  time.sleep(2)
  
  
def show_time(f):
  def inner():
    start_time = time.time()
    f()
    end_time = time.time()
    print(end_time-start_time)
  return inner
#show_time(f) is a decoration function

foo()
bar()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中optparser库用法实例详解
Jan 26 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
解决Python安装后pip不能用的问题
Jun 12 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
python实现在线翻译功能
Mar 03 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 Python
Python dict的常用方法示例代码
Jun 23 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
python函数不定长参数使用方法解析
Dec 14 #Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 #Python
python模块和包的应用BASE_PATH使用解析
Dec 14 #Python
python socket通信编程实现文件上传代码实例
Dec 14 #Python
python如何使用socketserver模块实现并发聊天
Dec 14 #Python
python paramiko远程服务器终端操作过程解析
Dec 14 #Python
安装PyInstaller失败问题解决
Dec 14 #Python
You might like
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
Javascript复制实例详解
2016/01/28 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
python基础教程之常用运算符
2014/08/29 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
python如何查看网页代码
2020/06/07 Python
英国女装网上商店:I Saw It First
2018/10/18 全球购物
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
《手指教学》反思
2014/02/14 职场文书
安全月活动总结
2014/05/05 职场文书
团队口号大全
2014/06/06 职场文书
应急处置方案
2014/06/16 职场文书
日语专业求职信
2014/07/04 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
经营场所证明范本
2015/06/19 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python