 <p>The first useful clue is the result of running both commands in the REPL:</p> <pre><code>&gt;&gt;&gt; f = open("asdf.txt","r") &gt;&gt;&gt; f.close &lt;built-in method close of file object at 0x7f38a1da84b0&gt; &gt;&gt;&gt; f.close() &gt;&gt;&gt; </code></pre> <p>So <code>f.close</code> itself returns a method, that you can then call. For example, you could write:</p> <pre><code>&gt;&gt;&gt; x = f.close &gt;&gt;&gt; x() </code></pre> <p>To close the file.</p> <p>So just typing <code>f.close</code> isn't actually enough, as it only returns a method that <em>allows you</em> to close the file. I can even prove this: go make a file and call it <code>example.txt</code>.</p> <p>Then try out the following code:</p> <pre><code>Type "help", "copyright", "credits" or "license" for more information. &gt;&gt;&gt; f = open("example.txt","r") &gt;&gt;&gt; f.close &lt;built-in method close of file object at 0x7f3d411154b0&gt; &gt;&gt;&gt; f.readlines() ['this is an example\n', 'file\n'] </code></pre> <p>So if we just write <code>f.close</code>, we can still use <code>f.readlines()</code>: this is proof that the file isn't actually "closed" to access yet!</p> <p>On the other hand, if we use <code>f.close()</code>:</p> <pre><code>Type "help", "copyright", "credits" or "license" for more information. &gt;&gt;&gt; f = open("example.txt","r") &gt;&gt;&gt; f.close() &gt;&gt;&gt; f.readlines() Traceback (most recent call last): File "&lt;stdin&gt;", line 1, in &lt;module&gt; ValueError: I/O operation on closed file &gt;&gt;&gt; </code></pre> <p>So that's proof of the previous assertions: <code>f.close()</code> and <code>f.close</code> do in fact <strong>not</strong> do the same things. <code>f.close()</code> actually closes the file, whereas <code>f.close</code> just returns a method to close the file.</p> <hr> <p>In this answer, I used Python 2.7.4. I don't know if the behavior of <code>f.close()</code> and <code>f.close</code> is any different in Python 3+. </p>