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查询Mysql时返回字典结构的代码
Jun 18 Python
python私有属性和方法实例分析
Jan 15 Python
Python算法之图的遍历
Nov 16 Python
Python学生成绩管理系统简洁版
Apr 05 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
python 异或加密字符串的实例
Oct 14 Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 Python
python如何将两张图片生成为全景图片
Mar 05 Python
Python 如何实现数据库表结构同步
Sep 29 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
Python数据处理的三个实用技巧分享
Apr 01 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
一个域名查询的程序
2006/10/09 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
js实现缓动动画
2020/11/25 Javascript
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
python获得文件创建时间和修改时间的方法
2015/06/30 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
详解python之heapq模块及排序操作
2019/04/04 Python
python Paramiko使用示例
2020/09/21 Python
python 绘制场景热力图的示例
2020/09/23 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
2020/09/29 Python
电厂职工自我鉴定
2014/02/20 职场文书
英文请假条
2014/04/11 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
语文教师求职信范文
2015/03/20 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
导游词之任弼时故居
2020/01/07 职场文书
详解Python魔法方法之描述符类
2021/05/26 Python