使用“open()”而不是“with open()”有什么优势吗?

Sam*_*yng 1 python file with-statement

我知道使用它会好很多

with open(...)... 
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有使用过的情况

open(...)
Run Code Online (Sandbox Code Playgroud)

在任何情况下都有优势。

tes*_*ile 5

是的。with open(...)为您管理文件描述符,因此一旦 with 块完成,python 就会自动为您关闭文件描述符。然而,在某些情况下,保留文件描述符可能会更高效/更有必要。一个简单的例子是一个打开文件并写入标题行并将文件描述符传回的函数:

def open_and_write_header(filename):
    f = open(filename, 'w')
    f.write('This is my header')
    return f

file_desc = open_and_write_header('testfile.txt')
file_desc.write('This is my tail')
file_desc.close()
Run Code Online (Sandbox Code Playgroud)

而如果我们使用with语法:

def open_and_write_header(filename):
    with open(filename, 'w') as f:
        f.write('This is my header')
        return f

file_desc = open_and_write_header('testfile.txt')
file_desc.write('This is my tail')
file_desc.close()
Run Code Online (Sandbox Code Playgroud)

我们得到:

Traceback (most recent call last):
  File "stack.py", line 7, in <module>
    file_desc.write('This is my tail')
ValueError: I/O operation on closed file.
Run Code Online (Sandbox Code Playgroud)