如何在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中pygame模块用法实例
Oct 09 Python
Python爬取读者并制作成PDF
Mar 10 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
python简单贪吃蛇开发
Jan 28 Python
对DJango视图(views)和模版(templates)的使用详解
Jul 17 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
Python高级特性 切片 迭代解析
Aug 23 Python
Python简易计算器制作方法代码详解
Oct 31 Python
Python自动化爬取天眼查数据的实现
Jun 15 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
模拟xcopy的函数
2006/10/09 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python 学习笔记
2008/12/27 Python
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python实现微信机器人的方法
2019/09/06 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
美术教师岗位职责
2014/03/18 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
大学新学期计划书
2014/04/28 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL