'与开放(文件)之间的性能差异:'并手动打开/关闭它

时间:2015-10-25 13:36:54

标签: python file error-handling with-statement try-finally

我想每个人都会同意

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)吗?

1 个答案:

答案 0 :(得分:4)

这是python惯例。没有有意义的性能差异。

此外,您确定该文件将始终关闭。 f.write('something')行可能会爆炸。