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 26 Python
python关键字and和or用法实例
May 28 Python
浅析Python中的for 循环
Jun 09 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
python win32 简单操作方法
May 25 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
Python骚操作之动态定义函数
Mar 26 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
浅谈pycharm使用及设置方法
Sep 09 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
Sep 18 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
Pycharm Plugins加载失败问题解决方案
Nov 28 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下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
php 伪静态之IIS篇
2014/06/02 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
PHP时间处理类操作示例
2018/09/05 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
wxPython事件驱动实例详解
2014/09/28 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
售后服务经理岗位职责
2014/02/25 职场文书
灰雀教学反思
2014/04/28 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
四风自我剖析材料
2014/09/30 职场文书
2016年元旦主持词
2015/07/06 职场文书
技术转让协议书
2016/03/19 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
opencv读取视频并保存图像的方法
2021/06/04 Python
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏