如何在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静态方法实例
Jan 14 Python
python使用mailbox打印电子邮件的方法
Apr 30 Python
深入理解Python分布式爬虫原理
Nov 23 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
python快排算法详解
Mar 04 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
Python使用ElementTree美化XML格式的操作
Mar 06 Python
python实现梯度法 python最速下降法
Mar 24 Python
利用Python如何实时检测自身内存占用
May 09 Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 Python
Python 内置函数速查表一览
Jun 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
如何用PHP实现插入排序?
2013/04/10 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
小型js框架veryide.librar源代码
2009/03/05 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
理想高通滤波实现Python opencv示例
2019/01/30 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
精彩广告词大全
2014/03/19 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
篮球社团活动总结
2014/06/27 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
2022年显卡天梯图(6月更新)
2022/06/17 数码科技
Hive HQL支持2种查询语句风格
2022/06/25 数据库