如何在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之重回函数
Oct 10 Python
Python 自动化表单提交实例代码
Jun 08 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
python调用API实现智能回复机器人
Apr 10 Python
python opencv3实现人脸识别(windows)
May 25 Python
对Python中数组的几种使用方法总结
Jun 28 Python
python利用7z批量解压rar的实现
Aug 07 Python
使用python实现画AR模型时序图
Nov 20 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
如何理解python中数字列表
May 29 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 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的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
jQuery 浮动广告实现代码
2008/12/25 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
pyv8学习python和javascript变量进行交互
2013/12/04 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
党员党性分析材料
2014/02/17 职场文书
会计系毕业生求职信
2014/05/28 职场文书
ktv好的活动方案
2014/08/15 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
企业安全生产规章制度
2015/08/06 职场文书
调解协议书范本
2016/03/21 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis