使用以下代码可以创建并写入 "Hello Python!" 到文件 hello.txt: with open("hello.txt", "wb") as f: f.write("Hello Python!\n")
似乎与以下代码相同:
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
使用open .. as相比于f = 的优势是什么? 这只是一种语法糖吗?仅仅是为了省略一行代码吗?
使用以下代码可以创建并写入 "Hello Python!" 到文件 hello.txt: with open("hello.txt", "wb") as f: f.write("Hello Python!\n")
似乎与以下代码相同:
f = open("hello.txt", "wb")
f.write("Hello Python!\n")
f.close()
使用open .. as相比于f = 的优势是什么? 这只是一种语法糖吗?仅仅是为了省略一行代码吗?
为了与with
语句版本等效,您编写的代码应该如下所示:
f = open("hello.txt", "wb")
try:
f.write("Hello Python!\n")
finally:
f.close()
虽然这看起来像是语法糖,但它确保释放资源。通常情况下,世界比这些刻意的示例更加复杂,如果你忘记了try.. except...
或者没有处理极端情况,你将会有资源泄漏的问题。
with
语句可以避免这些泄漏,使编写干净的代码更容易。要获得完整的解释,请查看PEP 343,其中有很多示例。
f.write
抛出异常,则使用with
时会调用f.close()
,而在第二种情况下不会被调用。此外,使用with
时,f
的作用域更小,代码更加清晰简洁。如果在f.write()
期间发生异常,前者仍然会关闭f
。