python 关键字“with”有什么用途?
示例来自:http://docs.python.org/tutorial/inputoutput.html
>>> with open('/tmp/workfile', 'r') as f: ... read_data = f.read() >>> f.closed True
Python 中的关键字with用于简化资源(例如文件或网络连接)的管理。它是上下文管理器功能的一部分,可确保正确获取和释放资源,即使代码块中发生错误。
with
当使用该with语句时,将调用上下文管理器的__enter__方法来获取资源,并__exit__在退出块时调用其方法来释放资源,无论是正常退出还是通过异常退出。
__enter__
__exit__
以下是您在示例中的工作原理的细分:
with open('/tmp/workfile', 'r') as f: read_data = f.read()
open
/tmp/workfile``'r'
f
f.read()
read_data
用于with资源管理有几个优点:
以下是不使用语句的情况下编写等效代码的方法with:
f = open('/tmp/workfile', 'r') try: read_data = f.read() finally: f.close()
在此版本中,您必须手动确保f.close()调用 来释放资源,即使在读取文件时发生错误。与使用 相比,这更加冗长且容易出错with。
f.close()
contextlib您还可以使用模块或通过在类中定义__enter__和方法来创建自己的上下文管理器__exit__。以下是使用该模块的示例contextlib:
contextlib
from contextlib import contextmanager @contextmanager def my_context_manager(): print("Entering the context") yield print("Exiting the context") with my_context_manager(): print("Inside the context")
输出:
Entering the context Inside the context Exiting the context
在这个例子中,my_context_manager是一个自定义上下文管理器,它在进入和退出上下文时打印消息。
my_context_manager