如何在Python函数执行前后增加额外的行为


Posted in Python onOctober 20, 2016

首先来看一个小程序,这个是计量所花费时间的程序,以下是以往的解决示例

from functools import wraps, partial
from time import time

def timing(func=None, frequencies=1):
 if func is None:
  # print("+None")
  return partial(timing, frequencies=frequencies)
 # else:
  # print("-None")

 @wraps(func)
 def _wrapper(*args, **kwargs):
  start_time = time()
  for t in range(frequencies):
   result = func(*args, **kwargs)
  end_time = time()
  print('运行花费时间:{:.6f}s。'.format(end_time-start_time))
  return result

 return _wrapper


@timing
def run():
 l = []
 for i in range(5000000):
  l.extend([i])
 return len(l)

运行如下:

In [4]: run()
运行花费时间:2.383398s。
Out[4]: 5000000

(喜欢刨根问底的可以去掉注释,并思考预计会有什么样的输出)。

今天无意间看到了Python的上下文管理器(Context Manager),发现也非常不错,其实这跟with语句是息息相关的,竟然以前一直未在意。

from time import time

def run2():
 l = []
 for i in range(5000000):
  l.extend([i])
 return len(l)

class ElapsedTime():
 def __enter__(self):
  self.start_time = time()
  return self

 def __exit__(self, exception_type, exception_value, traceback):
  self.end_time = time()
  print('运行花费时间:{:.6f}s。'.format(self.end_time - self.start_time))

with ElapsedTime():
 run2()

总结

初略看了一点官方文档,上下文管理还是有点多内容的。Python发展到现在,其实不简单了。说简单,只是你自己不够与时俱进,掌握的都是老式三板斧而已。所以,知识需要不断更新,才能弥补自己的盲点,以上就是本文的全部内容,希望能大家的学习或者工作带来一定的帮助。

Python 相关文章推荐
python发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 Python
简介Django框架中可使用的各类缓存
Jul 23 Python
python获取Linux发行版名称
Aug 30 Python
python实现超市管理系统(后台管理)
Oct 25 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
python画蝴蝶曲线图的实例
Nov 21 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
Python常用库大全及简要说明
Jan 17 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
虚拟机下载python是否需要联网
Jul 27 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
如何利用Fabric自动化你的任务
Oct 20 #Python
windows下ipython的安装与使用详解
Oct 20 #Python
Python做文本按行去重的实现方法
Oct 19 #Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 #Python
python类中super()和__init__()的区别
Oct 18 #Python
Python 序列的方法总结
Oct 18 #Python
python 异常处理总结
Oct 18 #Python
You might like
上海无线电三厂简史修改版
2021/03/01 无线电
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
php中如何防止表单的重复提交
2013/08/02 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
代码中finally中的代码会不会执行
2012/02/06 面试题
电大物流学生的自我评价
2013/10/25 职场文书
揭牌仪式主持词
2014/03/19 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
2019大学生实习报告
2019/06/21 职场文书
Java实现简单小画板
2022/06/10 Java/Android