我今天第一次遇到Python with语句。我已经简单地使用Python几个月了,甚至不知道它的存在!鉴于它的地位有些模糊,我认为有必要问一下:
Python with语句是什么 设计用于? 是什么 你用它干什么? 有吗? 我需要注意的问题,还是 相关联的常见反模式 它的使用?在什么情况下try. finally比with更好? 为什么它没有被更广泛地使用呢? 哪些标准库类与它兼容?
我今天第一次遇到Python with语句。我已经简单地使用Python几个月了,甚至不知道它的存在!鉴于它的地位有些模糊,我认为有必要问一下:
Python with语句是什么 设计用于? 是什么 你用它干什么? 有吗? 我需要注意的问题,还是 相关联的常见反模式 它的使用?在什么情况下try. finally比with更好? 为什么它没有被更广泛地使用呢? 哪些标准库类与它兼容?
当前回答
with语句适用于所谓的上下文管理器:
http://docs.python.org/release/2.5.2/lib/typecontextmanager.html
这个想法是通过在离开with块后进行必要的清理来简化异常处理。一些python内置程序已经作为上下文管理器工作。
其他回答
第1点、第2点和第3点得到了很好的阐述:
4:它相对较新,仅在python2.6+中可用(或python2.5使用from __future__ import with_statement)
with语句适用于所谓的上下文管理器:
http://docs.python.org/release/2.5.2/lib/typecontextmanager.html
这个想法是通过在离开with块后进行必要的清理来简化异常处理。一些python内置程序已经作为上下文管理器工作。
在python中,通常使用" with "语句打开文件,处理文件中的数据,并在不调用close()方法的情况下关闭文件。" with "语句通过提供清理活动简化了异常处理。
with的一般形式:
with open(“file name”, “mode”) as file_var:
processing statements
注意:不需要在file_var.close()上调用close()来关闭文件
参见PEP 343 - 'with'语句,末尾有一个示例部分。
... 新的语句"with"到Python 制造语言 可以排除try/finally语句的标准用法。
Python with语句是c++中常用的“资源获取即初始化”习语的内置语言支持。它的目的是允许安全获取和释放操作系统资源。
with语句在作用域/块内创建资源。您可以使用块中的资源编写代码。当块退出时,无论块中代码的结果如何(即块是正常退出还是因为异常退出),资源都将被干净地释放。
Python库中的许多资源遵循with语句所要求的协议,因此可以与它一起开箱即用。然而,任何人都可以通过实现记录良好的协议PEP 0343来创建可以在with语句中使用的资源
当您在应用程序中获取必须显式放弃的资源(如文件、网络连接、锁等)时,请使用它。