在python3中标准数据类型包括,Python语言提供的3个基本数据类型是
在任何编程语言中,文件操作和数据库连接等资源的使用都是很常见的。然而,这些资源的供应是有限的。因此,主要问题是确保这些资源在使用后被释放。如果不释放它们,资源可能会泄漏,导致系统变慢或崩溃。如果用户有自动配置和删除资源的机制,这将非常有用。在Python3中,可以通过使用上下文管理器来实现,上下文管理器有助于正确处理资源。上下文管理器是一个对象。
在Python3中,可以通过上下文管理器来管理资源上下文管理器可以通过三种方式创建:基于类的上下文管理器、基于生成器的上下文管理器和函数修饰的上下文管理器。
http://www。Sina.com/http://www.Sina.com/_ _ enter _()返回被管理的资源。__exit__()执行清理操作,不返回任何内容。
上下文管理器通常用语句调用,但也可以直接用于调用方法。上下文管理器定义在执行with语句时要建立的运行时上下文,并处理进入和退出以执行代码块所需的运行时上下文。
执行文件操作最常见的方式是使用with关键字。Python的with语句支持由上下文管理器定义的运行时上下文的概念。这是使用__enter__,__exit__对实现的。通过这些方法,您可以使用运行时上下文,用户定义的类在执行文本主体之前进入该上下文,并在语句结束时退出。
带语法:
与表达式[作为目标]:套房http://www.Sina.com/
(1).评估上下文公式以获得上下文管理器
(2).加载上下文管理器的__enter__)供以后使用;
(3).加载上下文管理器(__exit__))供以后使用;
(4).调用上下文管理器的__enter__)方法;
(5)什么时候。目标包含在with语句中,则将__enter__))的返回值代入其中。with语句确保在__enter__()方法无错误返回的情况下,始终调用__exit__()方法。因此,如果在给目标列表赋值时出现错误,它将被视为套件中的错误。__enter__()方法可能有也可能没有返回值。如果没有返回值,默认情况下将不返回任何值。
(6).套件已执行。
(7).调用上下文管理器的__exit__)方法。如果套件因异常终止,其类型、值和回溯参数为_ _ exit _ _();否则,我给你三个零。__exit__()方法也可以有返回值。该返回值必须为布尔值True或False,默认值为None (False)。如果为False,则会引发异常,用户必须处理该异常。如果为True,则忽略异常。
如果套件异常终止,并且__exit__()方法返回的值为False,则会发生异常。如果返回值为True,则隐藏异常,继续执行with语句之后的语句。
ext-align:两端对齐;如果套件因异常以外的任何原因退出,将忽略__exit__()的返回值,执行将在退出类型taken的正常位置继续。
经理。_ _ enter _ _():输入运行时上下文管理器。__enter__此对象或另一个与运行时上下文相关的对象。此方法返回的值使用此上下文管理器绑定到with语句的as子句中指定的目标(如果有)。返回自身的上下文管理器的一个例子是文件对象。文件从__enter__()返回自身,以允许open()在with语句中用作上下文表达式。
经理。_ _ exit _ _ (exc _ type,exc _ val,exc _ tb):退出运行时上下文并返回一个布尔标志,该标志指示是否应抑制发生的任何异常。如果在执行with语句体时发生异常,则参数包含异常类型、值和回溯信息。否则,这三个参数都是None。从此方法返回True将导致with语句取消异常,并继续执行紧跟在with语句后面的语句。否则,在执行此方法后,异常将继续传播。此方法执行期间发生的异常将替换with语句体中发生的任何异常。不应显式重新引发传入的异常。相反,此方法应返回False,以指示该方法成功完成,并且不想抑制引发的异常。这允许上下文管理代码轻松地检测__exit__()方法是否确实失败。
上下文管理器的典型用途包括保存和恢复各种全局状态、锁定和解锁资源、关闭打开的文件等。
何时使用上下文管理器:当qcdl的代码必须打开和关闭连接作为其过程的一部分时;当qcdl的代码必须使用前置条件和后置条件时;当qcdl试图管理系统上有限的资源时,上下文管理器是一个很好的选择。
以上内容主要指:
1.https://docs . python . org/3/reference/data model . html #上下文管理器
2.https://www.geeksforgeeks.org/context-manager-in-python/
以下是测试代码:
如果var==1,导入上下文libvar=3:# reference:https://www . geeks forgeeks . org/context-manager-in-python/#基于类的上下文管理器类文件管理器():def _ _ init _ _(self,filename,mode):self。文件名=文件名本身。模式=模式本身。file=None def _ _ enter _ _(self。文件,自我。模式)回归自我。file def _ _ exit _ _(self,exc_type,exc_value,exc _ trace back):self。文件。关闭()#用FileManager(test.txt , w )作为f加载文件:f . write( Test )print(f . closed)# true elif var==2:基于生成器的上下文管理器:代替__输入_ _和__出口_ _方法,生成器和@contextlib.contextmanager装饰器将在产量语句之前运行所有内容,就好像它是__输入_ _方法的一部# 分一样,产生的值可能是__输入_ _方法将返回的结果。之后,将运行随着块中的内容,作为最后一步,将运行产量语句之后的代码,就好像它是__出口_ _方法一样@上下文库。上下文管理器def file _ handler(file _ name,file_mode): file=open(file_name,file _ mode)print( open file )产生file # yeild之前的代码会在上下文管理器中作为__输入_ _方法执行,并将结果通过产量返回,所有在产量之后的代码会作为__出口_ _方法执行文件。close()print( close file )with file _ handler( test。txt , w )as f:f . write( test 2 )print( write file )print(f . closed)# true elif var==3:# https://medium。com/swlh/3-创建上下文的方法-python中的管理器-a 88 E3 ba 536 f 3 #基于函数装饰器的上下文管理器:函数装饰器方法的问题之一是无法访问__输入_ _方法的返回值类file_handler_mixin(contextlib .context decorator):def _ _ init _ _(self,file_name,file_mode): self ._文件名=文件名本身文件模式=文件模式自身. File=None def _ _ enter _ _(self):print(f enter方法:文件名{self ._文件名} )本身. file=open(self ._文件名,自我。_文件模式)#无法从装饰函数访问文件对象回归自我. file def __exit__(self,exc_type,exc_value,exc_traceback): print(fExit方法:文件模式{self ._file_mode} )自身.文件。close()@ file _ handler _ mixin( Test。txt , w) def write_to_file(): print(不访问__enter__方法返回的值)write _ to _ file()print(测试完成)GitHub:https://github。com/冯冰春/Python _ Test
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。