返回

长春达内教育

深入解析 Python 中的上下文管理器

python学习网更新时间:2021-10-29 浏览:112

一般人们需要把一些实际操作放进一个代码块中,在代码块中实行时就可以*在某类运作情况,而当离去该代码块时就实行另一个实际操作,完毕当今情况;因此,简易而言,前后文管理工具的目标便是要求目标的运行范畴,假如超出就采用“解决”。Python给予了不一样的办法来管理方法实行時间。比如,您还可以应用Python的内嵌timeit控制模块来管理方法一小段编码的实施時间。

>>> import timeit

>>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)

0.3018611848820001

可是,timeit.timeit涵数仅接纳字符串数组,假如要管理方法较为复杂的涵数的时候会有局限。下列实例向您展现怎么使用timeit控制模块运作和管理方法涵数。

def test()

: """Stupid test function"""

L = [i for i in range(100)]

if ._name._ == '._main._':

import timeit

print(timeit.timeit("test()", setup="from ._main._ import test"))

虽然它还可以工作中,但看着并没有真实的pythonic。管理方法实行的时间的另一种办法是运用Python的内嵌cProfile控制模块,可是并不建议用它,事实上它并不是很精准,这都是一种变通方法,可使您掌握一些字符串常量*须 实行多久。您可以根据下列方法体验它:

>>> python -m cProfile <file_name.py>

即然上边的俩种办法都并不是十分Pythonic而且都是有缺点,那麼大家怎样完成一个非常很好的解决方法呢?

其实不是很难:大家只需能取得程序流程逐渐实行和完毕实行的时间段就可以了,下边详细介绍具体做法,Python有一个内嵌控制模块可供大家应用:time。

>>> import time

>>> start = time.time()

>>> # do some stuff

>>> end = time.time()

>>> print(f"Elapsed Time: {end - start}")

可是那样写并不是很便捷。我们可以组建一个前后文管理工具。

建立一个前后文管理工具

应用Python建立前后文管理工具有三种不一样方式 ,大家将科学研究二种办法来完成此目地:根据类和根据制作器的前后文管理工具。

根据类的前后文管理工具

要建立根据类的前后文管理工具,*须 先完成法术自变量._enter._和._exit._。进到前后文(或代码块)时启用**个,离去前后文时启用后面一种。

拥有这种提前准备,大家就可以来创造一个完成这二种方式 的Timer类。进到代码块时,大家期待获得现在时间并将其存储到表明准备的自变量中。如果我们离去代码块,大家想获得现在时间并从这当中减掉开始时间。結果被打印出出去。

为了更好地自定輸出,大家让客户特定一个句子,该句子在通过的时间段以前打印出。下列关键点向您分享了一个既用型的类。

from time import time

class Timer(object):

def ._init._(self, description):

self.description = description

def ._enter._(self):

self.start = time()

def ._exit._(self, type, value, traceback):

self.end = time()

print(f"{self.description}: {self.end - self.start}")

with Timer("List Comprehension Example"):

s = [x for x in range(10_000_000)]

根据制作器的前后文管理工具

根据制作器的方式 比较简易。我们可以组建一个包括操作程序的制作器涵数(获得开始与结束時间及其打印出通过的時间)。@contextmanager装饰器根据应用GeneratorContextManager目标包裝制作器,将制作器作用转换成为恰当的前后文管理工具。

from contextlib import contextmanager

from time import time

@contextmanager

def timing(description: str) -> None:

start = time()

yield

ellapsed_time = time() - start

print(f"{description}: {ellapsed_time}")

with timing("List Comprehension Example"):

s = [x for x in range(10_000_000)]

假如进行了with后边的代码块,将跳返回yield关键词以后的部位执行。

汇总

在文中中,大家学了怎样构建自身的時间前后文管理工具。掌握基本要素,我们可以根据四种方法完成前后文管理工具:根据类和根据制作器。转化成的类和制作器涵数能够立即应用。

相关资讯

Python操作Excel教程:average函数求平均值的算法
2021-10-30 922
Python操作Excel教程-average函数求平均值...
人工智能和创客教育有什么区别
2022-11-05 881
人工智能和创客教育有什么区别对于人工智能,教育工作者首先要了解和接触这些技术,然后在课堂上介绍给学生。在这个过程中,教师...
怎么用热力图实现Python数据可视化
2021-10-28 749
大数据可视化是计算机科学或深度学习新项目中十分特别的一环。一般,你需要在工程前期开展探究性的数据统计分析(EDA),进而对信息有一定的掌握,并且建立数据可视化的确能够使剖析的目的更清楚...
人工智能在制造业的生产中可以发挥哪些作用
2021-06-12 468
人工智能在制造业的生产中可以发挥的作用共分为7项,分别是:1、预测性和预防性维护;2、提高机器人的效能;3、制造供应链;...
二维密度图实现Python可视化的方法
2021-10-28 451
二维密度图(2D Density Plot)是一维版本号密度图的形象化拓展,相对性于一维版本号,其特点是可以见到有关2个自变量的概率分布函数...
Python的基础语法
2021-11-03 447
编写Paython程序流程以前*对英语的语法有一定的掌握,才可以编写标准的Python程序流程...
Python操作Excel教程:提取Excel工作表的名字并修改的方法
2021-10-30 385
Python操作Excel教程-提取Excel工作表的名字并修改...
怎么运行python
2023-01-10 382
怎么运行python1. 使用Python自带的IDLE在开始--程序--Python2.5(视你安装的版本而不同)中找到IDLE(Python GUI),点击后弹出如下...

相关课程

栏目导航