如何在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深入学习之上下文管理器
Aug 31 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
Python Web编程之WSGI协议简介
Jul 18 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Python *args和**kwargs用法实例解析
Mar 02 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
输出控制类
2006/10/09 PHP
使用php+xslt在windows平台上
2006/10/09 PHP
PHP多例模式介绍
2013/06/24 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
PHP反射基础知识回顾
2020/09/10 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
用javascript做拖动布局的思路
2008/05/31 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
再论Javascript的类继承
2011/03/05 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
vue router 源码概览案例分析
2018/10/09 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
python中常用的九种预处理方法分享
2016/09/11 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
Python telnet登陆功能实现代码
2020/04/16 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
化工专业大学生职业生涯规划书
2014/01/14 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
反邪教标语
2014/06/23 职场文书
七年级地理教学计划
2015/01/22 职场文书
武当山导游词
2015/02/03 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
投诉信回复范文
2015/07/03 职场文书
生日祝酒词大全
2015/08/10 职场文书