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中with语句的用法
Apr 15 Python
Python随机数random模块使用指南
Sep 09 Python
python最长回文串算法
Jun 04 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
python networkx 包绘制复杂网络关系图的实现
Jul 10 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
Python pymysql模块安装并操作过程解析
Oct 13 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 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
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
Python实现重建二叉树的三种方法详解
2018/06/23 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
七年级英语教学反思
2014/01/15 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
心得体会的写法
2014/09/05 职场文书
八达岭长城导游词
2015/01/30 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python