关于Python中的语法
我们为什么要用它open("file")来打开而不是"file".close()关闭呢?
为什么不是"file".open()或反过来close("file")?
这是因为它open()是一个函数,并且.close()是一个对象方法."file".open()没有意义,因为你暗示该open()函数实际上是字符串的类或实例方法"file".并非所有字符串都是有效的文件或要打开的设备,因此解释器应该处理的"not a file-like device".open()方式不明确.我们不会"file".close()出于同样的原因使用.
close("file")将需要查找文件名,然后查找是否有当前进程所拥有的文件句柄附加到该文件.这将是非常低效的,并且可能存在隐藏的陷阱,使其不可靠(例如,如果它不是文件,而是TTY设备呢?).只保留对打开的文件或设备的引用并通过该引用(也称为句柄)关闭文件,这样更快更简单.
许多语言采用这种方法:
f = open("file") # open a file and return a file object or handle
# stuff...
close(f) # close the file, using the file handle or object as a reference
Run Code Online (Sandbox Code Playgroud)
这看起来与您的close("file")构造类似,但不要被愚弄:它通过直接引用来关闭文件,而不是存储在字符串中的文件名.
Python开发人员选择做同样的事情,但它看起来不同,因为他们用面向对象的方法实现了它.对于部分原因就是,Python文件对象有很多方法,如提供给他们,read(),flush(),seek(),等.如果我们使用close(f),那么我们就必须要么改变所有的文件对象其余的功能,或者让它成为一个随机函数,其行为与其余函数不同,没有充分理由.
TL; DR
设计open()并file.close()与OOP主体和良好的文件参考实践保持一致.open()是一个类似工厂的函数,它创建引用文件或其他设备的对象.创建对象后,该对象上的所有其他操作都通过类或实例方法完成.
只是比你稍微不那么新,但我会尝试一下,基本上打开和关闭在像 python 这样的语言中是非常不同的操作。当您打开文件时,您真正要做的是创建一个要在代表该文件的应用程序中工作的对象,因此您可以使用一个函数来创建它,该函数通知操作系统该文件已打开并创建一个 python 可以执行的对象用于读取和写入文件。当需要关闭文件时,应用程序基本上需要做的是告诉操作系统文件已完成,并从内存中处理表示文件的对象,最简单的方法是使用对象本身的方法。另请注意,类似的语法"file".open需要字符串类型包含打开文件的方法,这将是一个非常奇怪的设计,并且需要对字符串类型进行大量扩展,以实现您想要使用该语法实现的任何其他功能。 close(file)会更有意义,但仍然是释放该对象/让操作系统知道文件不再打开的笨拙方式,并且您将传递一个表示file打开文件时创建的对象的变量而不是指向的字符串到文件的路径。
| 归档时间: |
|
| 查看次数: |
2051 次 |
| 最近记录: |