想象一下,您在Python中打开了一些文件(读取,写入或其他操作都没有关系)。我刚刚注意到,当您要关闭该文件时,可以键入:
somefile.close()
或者您可以输入:
somefile.close
这两个版本都是正确的,它们可以正确关闭文件。有什么区别(如果有)?
编辑:句子“两个版本都是正确的,它们可以正确关闭文件。”是完全错误的。您可以在接受的答案中看到原因。
最佳答案
第一个有用的线索是在REPL中运行两个命令的结果:
>>> f = open("asdf.txt","r")
>>> f.close
<built-in method close of file object at 0x7f38a1da84b0>
>>> f.close()
>>>
因此,
f.close
本身返回一个方法,您可以随后调用该方法。例如,您可以编写:>>> x = f.close
>>> x()
关闭文件。
因此,仅键入
f.close
实际上是不够的,因为它仅返回允许您关闭文件的方法。我什至可以证明这一点:创建一个文件并将其命名为example.txt
。然后尝试以下代码:
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open("example.txt","r")
>>> f.close
<built-in method close of file object at 0x7f3d411154b0>
>>> f.readlines()
['this is an example\n', 'file\n']
因此,如果我们只写
f.close
,我们仍然可以使用f.readlines()
:这证明该文件实际上尚未“关闭”访问权限!另一方面,如果我们使用
f.close()
:Type "help", "copyright", "credits" or "license" for more information.
>>> f = open("example.txt","r")
>>> f.close()
>>> f.readlines()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file
>>>
因此,这证明了先前的断言:
f.close()
和f.close
实际上没有做相同的事情。 f.close()
实际上会关闭文件,而f.close
只是返回一种关闭文件的方法。在此答案中,我使用了Python 2.7.4。我不知道
f.close()
和f.close
的行为在Python 3+中是否有所不同。关于python - somefile.close和somefile.close()之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25719138/