Python 为什么打开文件需要变量

Python 为什么打开文件需要变量,python,Python,我有点概念上的问题。对于写入文件“to_file”,此操作有效: out_file = open(to_file, 'w') out_file.write(indata) …但这并不是: (open(to_file, 'w')).write(indata) 从理论上讲,将变量的(out_文件)定义替换为变量本身不应该产生相同的结果吗?我不明白为什么创建变量的额外步骤是必要的。在Python 2.7中,您提供的两个示例都可以工作并写入文件 正如其他人所指出的,您的代码实际上会打开并写入文件。然

我有点概念上的问题。对于写入文件“to_file”,此操作有效:

out_file = open(to_file, 'w')
out_file.write(indata)
…但这并不是:

(open(to_file, 'w')).write(indata)

从理论上讲,将变量的(out_文件)定义替换为变量本身不应该产生相同的结果吗?我不明白为什么创建变量的额外步骤是必要的。

在Python 2.7中,您提供的两个示例都可以工作并写入文件

正如其他人所指出的,您的代码实际上会打开并写入文件。然而

在第二个单行代码中,您现在没有对打开的文件的引用。因此,你没有办法关闭它或用它做任何其他事情

使文件保持打开状态是一种资源泄漏。如果您的程序立即关闭,Python将在结束前尝试关闭该文件。但由于各种原因,Python可能会失败。例如,包含该文件的可移动磁盘驱动器可能在写入该文件后但在程序结束前被删除。这可能会使文件在可移动驱动器上无法读取——我已经看到了这种情况。如果你的程序没有立即关闭,你会有额外的资源,占用内存和其他不需要占用的资源。如果您的程序持续很长时间,不断增长的资源可能会减慢或停止计算机

即使您的程序将立即关闭,这也是一个需要养成的坏习惯。您不仅想要编写程序,还想要编写在各种情况下都能正常工作的代码。您可能会认为“我永远不会在长时间运行的程序中使用此代码。”这样的声明常常被证明是错误的。编码已经够难了——不要让自己变得更难。避免第二个例子中的“反模式”

Python中有一个更好的模式来处理这些事情。阅读该链接并使用该模式,而不是两个示例中的任何一个

with open(to_file, 'w') as out_file:
    out_file.write(indata)

这两行打开文件,将数据写入文件,然后关闭文件。如果您想在文件关闭之前对其进行更多操作,请将该代码放入
with
语句下的缩进部分。

为什么您认为另一种情况不起作用?不要说它是缺少的变量。