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动态加载模块的3种方法
Nov 22 Python
Python 正则表达式(转义问题)
Dec 15 Python
深入讲解Python中的迭代器和生成器
Oct 26 Python
python中virtualenvwrapper安装与使用
May 20 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python topk()函数求最大和最小值实例
Apr 02 Python
Python求凸包及多边形面积教程
Apr 12 Python
Python 多线程共享变量的实现示例
Apr 17 Python
python实现图像高斯金字塔的示例代码
Dec 11 Python
python cv2图像质量压缩的算法示例
Jun 04 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中文字母数字验证码实现代码
2008/04/25 PHP
php设置编码格式的方法
2013/03/05 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
input框中的name和id的区别
2016/11/16 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
JS实现音乐钢琴特效
2020/01/06 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python实现端口检测的方法
2018/07/24 Python
python中的decimal类型转换实例详解
2019/06/26 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
医学院毕业生自荐信
2013/11/08 职场文书
生产部主管岗位职责
2014/01/06 职场文书
经典婚礼主持词
2014/03/13 职场文书
感恩教育月活动总结
2014/07/07 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书