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的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
python生成验证码图片代码分享
Jan 28 Python
手把手教你python实现SVM算法
Dec 27 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
Python+OpenCV实现将图像转换为二进制格式
Jan 09 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
PHP 高手之路(一)
2006/10/09 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
php 多文件上传的实现实例
2016/10/23 PHP
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
flask入门之表单的实现
2018/07/18 Python
python查看数据类型的方法
2019/10/12 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
python设置环境变量的作用整理
2020/02/17 Python
python map比for循环快在哪
2020/09/21 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
挂牌仪式策划方案
2014/05/18 职场文书
个人安全生产责任书
2014/07/28 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android