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编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
基于python内置函数与匿名函数详解
Jan 09 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
python字符串与url编码的转换实例
May 10 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
python使用KNN算法识别手写数字
Apr 25 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
python数据类型强制转换实例详解
Jun 22 Python
python3.7添加dlib模块的方法
Jul 01 Python
python tkinter Entry控件的焦点移动操作
May 22 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读写文件的方法(生成HTML)
2006/11/27 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
JavaScript 字符串乘法
2009/08/20 Javascript
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
python颜色随机生成器的实例代码
2020/01/10 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
汽车专业人才自我鉴定范文
2013/12/29 职场文书
八年级语文教学反思
2014/02/11 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
详解Laravel制作API接口
2021/05/31 PHP