如何在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 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
Mar 19 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
python 多线程中子线程和主线程相互通信方法
Nov 09 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
神经网络相关之基础概念的讲解
Dec 29 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
django跳转页面传参的实现
Sep 17 Python
python单例模式的应用场景实例讲解
Feb 24 Python
pytorch实现线性回归以及多元回归
Apr 11 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
cache_lite试用
2007/02/14 PHP
php获取文件内容最后一行示例
2014/01/09 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
vue-router 按需加载 component: () => import() 报错的解决
2020/09/22 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
Python中的类与对象之描述符详解
2015/03/27 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
python 将Excel转Word的示例
2021/03/02 Python
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
英国日常交易网站:Wowcher
2018/09/04 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
经典婚礼主持词
2014/03/13 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
小学教学工作总结2015
2015/05/13 职场文书
农村婚庆主持词
2015/06/29 职场文书
Python基础知识之变量的详解
2021/04/14 Python