首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 上下文(Context)学

前言 最早接触到with语句的时候,是初学python,对文件进行读写的时候,当时文件读写一般都是用open()函数来对文件进行读写,为了防止读写的过程中出现错误,也为了让代码更加的pythonic,会接触到...上下文管理器 上下文管理器协议,是指要实现对象的 __enter__() 和 __exit__() 方法。...上下文管理器也就是支持上下文管理器协议的对象,也就是实现了 __enter__() 和 __exit__() 方法。 上下文管理器 是一个对象,它定义了在执行 with 语句时要建立的运行时上下文。...所以,在定义上下文管理器的时候,我们只需实现好这两个方法就行了。 上下文管理器的运用场景 上下文管理器的典型用法包括保存和恢复各种全局状态,锁定和解锁资源,关闭打开的文件等。...比如我们需要在一段代码中使用到数据库的查询,可以通过上下文处理器来优化我们的代码结构, contextilb模块 contextilb模块是python内置模块中的一个用于上下文的模块,可以让我们更优雅地使用上下文管理器

2.5K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python with上下文管理及自定义上下文管理

    一、上下文管理器 上下文管理器是对Context Manager的翻译 ,上下文是 context 直译的叫法,在程序中用来表示代码执行过程中所处的前后环境....语法: with with 语句是 Pyhton 提供的一种简化语法,从Python 2.5 开始引入的一种与异常处理相关的功能,适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的...四、自定义上下文管理器 根据上下文管理的原理,上下文管理器的原理是实现了__enter__和__exit__这两个方法,所以我们可以根据此原理来自定义自己的上下文管理器...._handle.close() with OpenFile('test01.txt', 'w') as f: f.write('自定义上下文管理\n') 上面的代码中,我们不是使用Python...,不能进行写操作.运行结果为: Traceback (most recent call last): Type: File "python_demo

    84830

    Python 上下文管理器

    当然我们是可以通过关闭会话的方式回收资源,还有一种更为简便的方式就是使用Python上下文管理器。 在说明TensorFlow的会话操作之前,先介绍上下文管理器和它的一个其他使用。...在使用Python编程中,可以会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作(如打开文本);当语句块执行完成后,需要继续执行一些收尾动作(如收回资源)。...版本时,我们在开头定义了一个IplImage类型的变量,总要在程序结束前 cvReleaseImage它,不然就会造成内存的泄漏,而这也是1.0版本的一个很大的诟病,直到2.0版之后引入了Mat类型,而Python...的上下文管理器就相当于Mat类型,不需要在最后手动收回,不需要考虑代码异常情况下的资源收回。...但是需要说明的是with仅能工作于支持上下文管理协议(context management protocol)的对象。

    66590

    Python with与上下文管理器

    比如 Python 程序打开一个文件,往文件中写内容,写完之后,就要关闭该文件,否则会出现什么情况呢?...在讲 with 的原理前要涉及到另外一个概念,就是上下文管理器(Context Manager)。 什么是上下文(context) 上下文在不同的地方表示不同的含义,要感性理解。...哦,上下文就是这样? ? 不然呢 上下文管理器 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字。...使用@contextmanager实现上下文管理器的另外方式 Python 还提供了一个 contextmanager 的装饰器,更进一步简化了上下文管理器的实现方式。...[root@server01 with]# 总结 Python 提供了 with 语法用于简化资源操作的后续清除操作,是 try/finally 的替代方法,实现原理建立在上下文管理器之上。

    57451

    Python上下文管理器详解

    首先,看一个简单的例子: # 创建一个文件写入字符串“Python” f = open('123.txt', 'w') f.write("python") f.close() # 使用with语句调用上下文实现文件写入操作...with open('123.txt', 'w') as f: f.write('python') 可以看到,使用上下文管理器,可以让代码更加优雅简洁。...上下文管理器的异常处理 根据上下文管理的原理,上下文管理是实现了__enter__()和 __exit__() 这两个方法,所以我们可以根据此原理来自定义自己的上下文管理器。..._handle.close() # 读的模式打开文件,进行写操作,不支持 with MyOpen('123.txt', 'r') as f: f.write('python') 当with中执行的语句发生异常时...("异常已被处理") return True # 读的模式打开文件,进行写操作,不支持 with MyOpen('123.txt', 'r') as f: f.write('python

    38630

    python高阶教程-上下文管理器

    本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/book/senior_python/context/ 本篇内容来自原创小册子《python...在python中是用with语句来实现上下文管理的。...with语句的执行流程 在python中使用with进行上下文的管理,with语句的执行过程如下: 计算表达式的值,返回一个上下文管理器对象 加载上下文管理器对象的exit()方法,但不执行 调用上下文管理器对象的...如果处理结束,返回True,代码继续执行;如果无法处理,就返回False,python会把这个异常继续抛出,直至被正常处理。...在生成器实现的上下文管理器中进行异常处理 使用类的方法进行上下文管理时,异常是作为参数传递的,那使用生成器进行上下文管理时应该怎样做呢?

    41020

    Python else与上下文管理器

    上下文管理器 上下文管理器可以对上下文进行管理,上下文管理器中有两个必须的方法:__enter__和__exit__。...当你使用上下文管理器对象调用__enter__方法时,就进入了上下文管理中,__enter__中的操作会对上下文进行影响,要停止上下文管理时,就调用__exit__方法停止上下文管理。...通过 UpperOut() 得到一个上下文管理器对象,而调用__enter__后进入上下文管理,在这之间所有的输出都是大写,在调用__exit__方法后结束上下文管理,可以看到monster的输出变为小写...with 在了解上下文管理器后,学习with就很简单了,上下文管理器对象就是用来控制with语句的。...▼ 往期精彩回顾 ▼ 由浅入深彻底了解 Python 闭包和装饰器 字符串拼接的N种方式 Iterable、Sequece、Iterator、generator Python partial()最通俗的理解

    46320

    Python - Context Manager 上下文管理器

    什么是上下文管理器 官方解释......上下文管理器是一个对象 它定义了在执行 with 语句时要建立的运行时上下文 上下文管理器处理进入和退出所需的运行时上下文以执行代码块 上下文管理器通常使用 with 语句调用,但也可以通过直接调用它们的实例方法来使用...一顿花里胡哨猛如虎,结果我也不太懂 简单一句话 同时包含 __enter__() 和 __exit__() 方法的对象就是上下文管理器 __enter__(self) 进入上下文管理器自动调用的方法...拆分了解 上下文表达式: with open('file_path', 'w') as file: 上下文管理器: open('file_path', 'w') file:可以理解为资源对象 执行顺序...最后执行 open() 的 __exit__() 方法 自定义上下文管理器 其实有两种方式 基于类实现 基于生成器实现 基于类实现上下文管理器 只需要给对象添加一个 __enter__ 和一个 __exit

    89220

    Python 中的上下文管理器

    参考链接: Python中的上下文管理器 Python 中的上下文管理器  with expression [as target]:     with-body 上下文管理器是为with 语句而生。...只要实现了上下文管理器协议__enter__与__exit__,就可以使用with语句。 ...如果我们在让__exit__返回True,相当于告诉python:这些异常我都已经处理了,都在掌控之中,您老不必操心。  除了自定义类手动实现两个特殊方法外,还有另一种途径实现一个上下文管理器。...标准库contextlib中提供了一个@contextmanager可以方便的把一个协程函数包装成一个上下文管理器。...至此我们好像实现了一个功能正常的上下文管理器。但别忘了还有异常捕获的机制。。。

    55520

    Python深入02 上下文管理器

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存)。...上下文管理器可以在不需要文件的时候,自动关闭文件。...我们的第二段程序就使用了上下文管理器 (with...as...)。上下文管理器有隶属于它的程序块。...当我们使用上下文管理器的语法时,我们实际上要求Python在进入程序块之前调用对象的__enter__()方法,在结束程序块的时候调用__exit__()方法。...所以在使用上下文管理器时,我们就不用明文关闭f文件了。 自定义 任何定义了__enter__()和__exit__()方法的对象都可以用于上下文管理器。

    53270
    领券