python关键字"with"的用途是什么?
Python中的“with”这个关键词是用来简化代码的,特别是在处理一些需要打开和关闭的资源时,比如文件。
使用“with”可以确保在你完成操作后,资源会自动被关闭,这样就不用担心忘记关闭它们了。
举个例子,假设你要打开一个文件来读取内容,如果不使用“with”,你需要手动打开和关闭文件,这样容易出错。而使用“with”后,Python会帮你处理这些事情,让代码更简洁,也更安全。
下面是一个示例,展示了如何使用“with”来打开文件:
>>> with open('/tmp/workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
2 个回答
来自Preshing on Programming博客的解释:
当你有两个相关的操作想要一起执行,并且中间需要一段代码时,使用这个方法会很方便。一个经典的例子就是打开一个文件,处理这个文件,然后再关闭它:
with open('output.txt', 'w') as f: f.write('Hi there!')
上面的这个方法会在代码块执行完后自动关闭文件。(继续阅读可以了解关闭是如何发生的。)使用这个方法的好处是,不管代码块是怎么结束的,它都会确保文件被关闭。如果在代码块结束前发生了错误,它会在错误被外部处理之前关闭文件。如果代码块里有返回语句,或者继续、跳出循环的语句,这个方法也会自动关闭文件。
在Python中,with
这个关键词用来处理一些不受管理的资源,比如文件流。它和VB.NET和C#中的using
语句很像。使用with
可以确保当使用这些资源的代码运行完毕后,资源会被“清理”,即使在运行过程中出现了错误也没关系。它其实是对try/finally
结构的一种简化写法。
来自Python文档的说明:
with
语句让之前需要用try...finally
块来确保执行清理代码的代码变得更加清晰。
with
语句是一种控制流结构,它的基本结构是:with expression [as variable]: with-block
这个表达式会被计算,结果应该是一个支持上下文管理协议的对象(也就是说,它需要有
__enter__()
和__exit__()
这两个方法)。
更新:根据Scott Wisniewski的评论修正了VB的引用。我确实把with
和using
搞混了。