打开文件并随后在同一行中对该文件执行操作是否可以安全地执行而无需随后关闭文件?

例如,如果我正在使用zipfile模块,并且想要在名为file_list的zip文件中获取文件列表,那么可以安全地执行以下操作:

import zipfile
import os
zip_path = os.path(...)

file_list = zipfile.ZipFile(zip_path).namelist()


当然,我知道这段代码可以安全地完成同一件事,尽管分两行:

import zipfile
import os
zip_path = os.path(...)

with zipfile.ZipFile(zip_path) as my_zip:
    file_list = my_zip.namelist()


哪个更好?

最佳答案

It will close the file when it's garbage collected

# ZipFile in zipfile.py
def __del__(self):
    """Call the "close()" method in case the user forgot."""
    self.close()


如果使用该衬管,则不会创建参照,因此应将其丢弃并依次关闭。但是,您并不是依赖于GC运行时间的实现细节,但这并不是最好的主意,因此最好使用with

例如one liner wouldn't behave the same way with pypy

09-11 18:59
查看更多