如何在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中join 和 split详解(推荐)
Jun 30 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
Django权限设置及验证方式
May 13 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
基于python实现复制文件并重命名
Sep 16 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
Python如何急速下载第三方库详解
Nov 02 Python
DRF使用simple JWT身份验证的实现
Jan 14 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 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
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
Python简单I/O操作示例
2019/03/18 Python
django实现用户注册实例讲解
2019/10/30 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
优良学风班总结材料
2014/02/08 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
工作分析计划书
2014/04/30 职场文书
化工工艺设计求职信
2014/06/25 职场文书
装饰公司活动策划方案
2014/08/23 职场文书
活动总结范文
2014/08/30 职场文书
2015毕业寄语大全
2015/02/26 职场文书
限期整改通知书
2015/04/22 职场文书
团支部书记竞选稿
2015/11/21 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书