如何在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 代码效率的方法
Jul 03 Python
python和bash统计CPU利用率的方法
Jul 10 Python
Python制作Windows系统服务
Mar 25 Python
Python自动发邮件脚本
Mar 31 Python
Python新手们容易犯的几个错误总结
Apr 01 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
Jan 30 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
Python与C++中梯度方向直方图的实现
Mar 17 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
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
浅析node.js中close事件
2014/11/26 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
python中循环语句while用法实例
2015/05/16 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
pytorch之添加BN的实现
2020/01/06 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
如何判断计算机可能已经中马
2013/03/22 面试题
机修工岗位职责
2013/11/24 职场文书
英文演讲稿开场白
2014/08/25 职场文书
校长四风对照检查材料
2014/09/27 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android