2017-06-22 61 views
1

我有一点概念性问题。对于写入文件 “to_file”,这部作品:为什么需要一个变量来打开文件

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

...但是这并不:

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

从理论上讲,不应该换出一个变量(out_file)定义变量本身产生相同的结果?我很困惑,为什么创建变量的额外步骤是必要的。

+2

你为什么认为其他案件不起作用?不要说这是缺少的变量。 –

回答

3

正如其他人指出的那样,您的代码实际上会打开并写入文件。但是,...

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

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

即使您的程序马上关闭,这是一个坏习惯开发。您不仅想编写程序,还希望编写能够在各种情况下运行良好的代码。您可能会认为“我永远不会在长时间运行的程序中使用此代码。”这种声明常常被误认为是错误的。编码很难 - 不要让自己更难。避免你的第二个例子的“反模式”。

Python中有一个更好的模式,using the with statement。阅读该链接并使用该模式,而不是两个示例中的任何一个。

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

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

0

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

相关问题