如何在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最长公共子串算法实例
Mar 07 Python
Python脚本实现代码行数统计代码分享
Mar 10 Python
python实现中文转换url编码的方法
Jun 14 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
Python爬取知乎图片代码实现解析
Sep 17 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
Python使用graphviz画流程图过程解析
Mar 31 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
python实现一个简单RPC框架的示例
Oct 28 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 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
mysql 性能的检查和优化方法
2009/06/21 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
node中的session的具体使用
2018/09/14 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
毕业生多媒体设计求职信
2013/10/12 职场文书
销售顾问岗位职责
2014/02/25 职场文书
学习作风建设心得体会
2014/10/22 职场文书
教师考核评语大全
2014/12/31 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python