Python 使用with上下文实现计时功能

yipeiwu_com7年前Python基础

引言

with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用),从 2.6 版本开始缺省可用(参考 What's new in Python 2.6? 中 with 语句相关部分介绍)。with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

在Python常常需要记录一段代码运行了多长时间,普通的一般用两个 time.time() ,然后计算差值;高级一点的,就是写一个计时装饰器,用装饰器包裹方法,记录运行时间,但这这意味着你的代码需要写在函数里,然后才能使用此计时装饰器。

今天我要介绍的是一种可以给一段代码计时,而不是一个函数计时的方便的、“高级的”的Python计时方法。

代码如下:

from contextlib import contextmanager
@contextmanager
def timer(name): 
 start = time.time()
 yield
 print(f'[{name}] done in {time.time() - start:.2f} s')

使用方法:

with timer('Test'): 
 i = 0
 while i < 1000000:
  i += 1

输出:

[Test] done in 0.11 s

从1加到1百万需要0.11s。可以在 timer 通过修改 .2f 来修改时间精度。

总结

以上所述是小编给大家介绍的Python 使用with上下文实现计时功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对【听图阁-专注于Python设计】网站的支持!

相关文章

在win10和linux上分别安装Python虚拟环境的方法步骤

很多初学者会使用windows作为开发机使用, 今天就来看下如何在win10和Linux下分别安装Python虚机环境。虚机环境有非常多的优点,今天我们用的虚拟环境是virtualenv...

浅谈python中真正关闭socket的方法

close方法可以释放一个连接的资源,但是不是立即释放,如果想立即释放,那么在close之前使用shutdown方法 shut_rd() -------关闭接受消息通道 shut_wr(...

对Python 获取类的成员变量及临时变量的方法详解

利用Python反射机制,从代码块中静态获取参数: co_argcount: 普通参数的总数,不包括参数和*参数。 co_names: 所有的参数名(包括参数和*参数)和局部变量名的元...

Laravel+Dingo/Api 自定义响应的实现

在最近的开发开发项目中,我使用了Dingo/Api这个第三方Api库。 Dingo是个很强大的Api库, 但在开发的过程中,需要自定义响应字段。 刚开始使用Ding/Api时,返回如下...

python networkx 包绘制复杂网络关系图的实现

1. 创建一个图 import networkx as nx g = nx.Graph() g.clear() #将图上元素清空 所有的构建复杂网络图的操作基本都围绕这个g来执行...