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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
Apr 15 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
python占位符输入方式实例
May 27 Python
Python读写文件基础知识点
Jun 10 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
python的reverse函数翻转结果为None的问题
May 11 Python
Python selenium模块实现定位过程解析
Jul 09 Python
python os.listdir()乱码解决方案
Jan 31 Python
Python学习之os包使用教程详解
Mar 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解析http获取的json字符串变量总是空白null
2015/03/02 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
javascript静态的url如何传递
2007/05/03 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
Javascript实现单例模式
2016/01/24 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
js 函数性能比较方法
2020/08/24 Javascript
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
Python爬取成语接龙类网站
2018/10/19 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python五子棋游戏的设计与实现
2019/06/18 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
机关职员工作检讨书
2014/10/23 职场文书
四风之害观后感
2015/06/09 职场文书
2016年母亲节寄语
2015/12/04 职场文书
2016年端午节寄语
2015/12/04 职场文书