为什么打开文件需要变量

时间:2017-06-22 15:08:01

标签: python

我有一点概念问题。为了写入文件“to_file”,这有效:

<?php 

            $dirs = glob('images/*', GLOB_ONLYDIR);
            foreach($dirs as $val) {
                echo '<div class="gallery">';
                echo "<a><h3><span>&raquo;</span> ".basename($val). "</h3></a>"; 
                echo '<div class="gallery-list">';
            $files = glob($val.'/*.{jpg,png,gif}', GLOB_BRACE);
            foreach($files as $file) {
                echo "<div><a href='".$file."' ><img src='" . $file . "'></a></div> \r\n";
             }
                echo "</div>";
                echo "</div>";
            } 

        ?>

......但这不是:

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

即使你的程序会立即关闭,这也是一个不好的习惯。您不想只编写程序,而是希望编写能够在各种情况下正常运行的代码。您可能会认为&#34;我永远不会在长期运行的程序中使用此代码。&#34;这种声明经常被证明是错误的。编码很难 - 不要让自己变得更难。避免&#34;反模式&#34;你的第二个例子。

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

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

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

答案 1 :(得分:0)

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