如何在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中lambda的用法及其与def的区别解析
Jul 28 Python
Python实现windows下模拟按键和鼠标点击的方法
Mar 13 Python
python查询mysql,返回json的实例
Mar 26 Python
PyQt5每天必学之组合框
Apr 20 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 Python
使用Python函数进行模块化的实现
Nov 15 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
Python短信轰炸的代码
Mar 25 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 Python
.img/.hdr格式转.nii格式的操作
Jul 01 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密码生成类实例
2014/09/24 PHP
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
微信小程序自定义底部弹出框功能
2020/11/18 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
python并发和异步编程实例
2018/11/15 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
美国五金商店:Ace Hardware
2018/03/27 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
大学新生军训方案
2014/05/03 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
企业愿景口号
2015/12/25 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL