从函数返回后文件会关闭吗?
Posted
技术标签:
【中文标题】从函数返回后文件会关闭吗?【英文标题】:Will the file be closed after returning from function? 【发布时间】:2016-09-07 01:08:15 【问题描述】:这是一个python函数:
def read_data(filename):
f = zipfile.ZipFile(filename)
for name in f.namelist():
return tf.compat.as_str(f.read(name))
f.close()
文件会被关闭吗?调用没有错误。
【问题讨论】:
我不太了解这里的缩进,您可能会遇到语法错误或对程序的意外解释。为什么for
语句相对于前面的变量声明缩进?
另外,如果你修复缩进,答案是否定的,文件不会被关闭。您应该在此处使用with
子句,以便在您离开范围后自动释放文件句柄。
您的代码也不会像第一次迭代中的return
那样遍历namelist
...如果您正在寻找更多此函数的一个结果。
@AsadSaeeduddin 我很确定python在返回后不会执行打印方法,但不相信关闭文件。
@C.Zion Python 不会在返回后执行任何操作,对于名为 close
的方法没有特别的限制。
【参考方案1】:
文件不会被关闭。如果要关闭文件,可以这样写:
def read_data(filename):
with zipfile.ZipFile(filename) as f:
for name in f.namelist():
return tf.compat.as_str(f.read(name))
测试您的代码:
使用with
测试代码:
【讨论】:
从技术上讲,在 CPython 中,close
在释放对类文件对象的最后一个引用时隐式发生(例如,如果没有存储其他引用,则在函数返回时),但这是 CPython 引用的产物计数(并且它可能会被一些简单的事情暂时挫败,比如在回溯框架中保留本地人的异常);您应该始终尽可能使用with
块以获得可预测的关闭行为,因此不会被遗忘或意外跳过。
@wolframalpha 谢谢!以上是关于从函数返回后文件会关闭吗?的主要内容,如果未能解决你的问题,请参考以下文章