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 paramiko实现ssh远程访问的方法
Dec 03 Python
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
python实现自动登录人人网并采集信息的方法
Jun 28 Python
python数据结构之图深度优先和广度优先实例详解
Jul 08 Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
python 同时运行多个程序的实例
Jan 07 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
Django返回HTML文件的实现方法
Sep 17 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
Python 机器学习工具包SKlearn的安装与使用
May 14 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
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
python插入排序算法实例分析
2015/07/03 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
Python如何读取、写入JSON数据
2020/07/28 Python
Python 日期与时间转换的方法
2020/08/01 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
别名指示符是什么
2012/10/08 面试题
文秘大学生求职信
2014/02/25 职场文书
数控专业自荐书范文
2014/03/16 职场文书
个人贷款担保书
2014/04/01 职场文书
公司外出活动方案
2014/08/14 职场文书
好人好事演讲稿
2014/09/01 职场文书
教师自我剖析材料
2014/09/29 职场文书
实习工作表现评语
2014/12/31 职场文书
新郎婚礼致辞
2015/07/27 职场文书
vue中 this.$set的使用详解
2021/11/17 Vue.js
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android