是否可以在函数调用后直接关闭文件

Is it possible to close a file directly after a function call

我有以下行:

service = discovery.build('sheets', 'v4', credentials=pickle.load(open('google_sheets_token.pickle', 'rb')))

虽然实现这样的事情很简单:

with open('google_sheets_token.pickle', 'rb') as f:
    service = discovery.build('sheets', 'v4', credentials=pickle.load(f)) 

我想知道是否可以在传递给函数后自动关闭文件?

没有。在 CPython 参考解释器中,如果没有发生引用循环(它们比您想象的更容易触发,所以不要假设任何事情),第一个示例将自动关闭文件,因为引用计数在函数执行后立即下降到 0有问题 returns(假设它没有保存参考)。但这不是可以依赖的东西;如果你想在 CPython 上获得保证,甚至希望在 PyPy、Jython、IronPython 等非引用计数的替代解释器(如 PyPy、Jython、IronPython 等)上的正确行为,请使用 with 语句。如果没有 with 管理,该文件将可能 最终 关闭,但无法保证何时会发生(或者即使;这是尽力而为,而不是铁定的保证)。