想象一下,您在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/

10-13 05:40