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 30 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
TensorFlow神经网络优化策略学习
Mar 09 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
Django 日志配置按日期滚动的方法
Jan 31 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
anaconda python3.8安装后降级
Jun 11 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python微信好友数据分析详解
2018/11/19 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
Python读取表格类型文件代码实例
2020/02/17 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
水果连锁超市创业计划书
2014/01/24 职场文书
户外婚礼策划方案
2014/02/08 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
python实现双链表
2022/05/25 Python
Python代码实现双链表
2022/05/25 Python