20
使用 open("hello.txt", "wb") 作为 f:
    f.write("你好 Python!\n")

似乎和

f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()

使用 open .. as 而不是 f = 有什么好处?它只是语法糖吗?只保存一行代码?

4

3 回答 3

31

为了与with语句版本等效,您编写的代码应如下所示:

f = open("hello.txt", "wb")
try:
    f.write("Hello Python!\n")
finally:
    f.close()

虽然这看起来像是语法糖,但它可以确保您释放资源。一般来说,世界比这些人为的例子更复杂,如果你忘记了一个try.. except...或未能处理一个极端情况,你手上就会有资源泄漏。

with语句使您免于这些泄漏,从而更容易编写干净的代码。要获得完整的解释,请查看PEP 343,它有很多示例。

于 2010-04-29T15:12:13.377 回答
13

如果f.write抛出异常,f.close()则在您使用时with调用,而在第二种情况下不调用。范围f更小,使用时代码更干净with.

于 2010-04-29T15:02:34.627 回答
3

如果ff.write().

于 2010-04-29T15:01:36.187 回答