我想每个人都会同意
with open(file_name, 'mode') as f:
#do things with f
比
更好f = open(file_name, 'mode')
#do things with f
f.close()
从http://effbot.org/zone/python-with-statement.htm我们可以阅读
当执行“with”语句时,Python会对表达式求值,在结果值(称为“上下文保护”)上调用 enter 方法,然后分配输入的内容返回as给出的变量。然后Python将执行代码体,无论代码中发生什么,都要调用guard对象的 exit 方法。
换句话说,with
具有类似结构
def controlled_execution():
set things up
try:
yield thing
finally:
tear things down
for thing in controlled_execution():
do something with thing
知道:
try-finally结构保证了"最终"部分总是被执行,即使完成工作的代码没有完成。
因此,一旦文件处于打开状态,无论发生什么,它也将被关闭,从而避免文件在我们不知情的情况下保持打开的可能性,返回错误,如:
错误:Windows32 | ERROR_SHARING_VIOLATION 32(0x20)| 该进程无法访问该文件,因为它正由另一个进程使用。
如果对同一文件进行操作。
我不想离题太多,所以我会直截了当地说, 如果我有简单的代码,我知道肯定文本文件将被关闭(编辑:感谢现在回答我知道 我们无法确定 )
f = open(file_name, 'w')
f.write('something')
f.close()
与
的 REAL 区别是什么?with open(file_name, 'w') as f:
f.write('something')
在性能方面而非安全性方面,手动开启/关闭不是更好吗?代码处理起来肯定更短,而且没有缩进。有人可以解释为什么即使安全代码人们使用with open(file)
吗?
答案 0 :(得分:4)
这是python惯例。没有有意义的性能差异。
此外,您不确定该文件将始终关闭。 f.write('something')
行可能会爆炸。