如何在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 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
python奇偶行分开存储实现代码
Mar 19 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
python如何实现复制目录到指定目录
Feb 13 Python
python计算导数并绘图的实例
Feb 29 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
python 19个值得学习的编程技巧
Aug 15 Python
如何在python中处理配置文件代码实例
Sep 27 Python
python实现无边框进度条的实例代码
Dec 30 Python
详解Python 3.10 中的新功能和变化
Apr 28 Python
python tqdm用法及实例详解
Jun 16 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类包含的七种语法说明
2015/06/04 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
Python中数字以及算数运算符的相关使用
2015/10/12 Python
21行Python代码实现拼写检查器
2016/01/25 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
Shell如何接收变量输入
2016/08/06 面试题
店长助理岗位职责
2013/12/13 职场文书
yy结婚证婚词
2014/01/10 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
寒假家长评语大全
2014/04/16 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
Python利用capstone实现反汇编
2022/04/06 Python