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 相关文章推荐
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
基于python进行桶排序与基数排序的总结
May 29 Python
python的继承知识点总结
Dec 10 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
创建Django项目图文实例详解
Jun 06 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
python的pip有什么用
Jun 17 Python
如何在vscode中安装python库的方法步骤
Jan 06 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 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数组分页实现方法
2016/04/30 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
kmock javascript 单元测试代码
2011/02/06 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
微信小程序仿美团城市选择
2018/06/06 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
优化Python代码使其加快作用域内的查找
2015/03/30 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
python 调用HBase的简单实例
2016/12/18 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
django解决跨域请求的问题
2018/11/11 Python
pandas如何处理缺失值
2019/07/31 Python
Python缓存技术实现过程详解
2019/09/25 Python
python实现的Iou与Giou代码
2020/01/18 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
Java面试题及答案
2012/09/08 面试题
Python中如何定义一个函数
2016/09/06 面试题
财产保全担保书范文
2014/04/01 职场文书
求职教师自荐书
2014/06/19 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
小学校长个人总结
2015/03/03 职场文书
工作推荐信模板
2015/03/25 职场文书
七年级生物教学反思
2016/02/20 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang