gpt4 book ai didi

Python open() 与 .close()

转载 作者:太空狗 更新时间:2023-10-29 20:49:06 52 4
gpt4 key购买 nike

关于 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

这看起来类似于您的 close("file") 构造,但不要被愚弄:它通过直接引用关闭文件,而不是存储在字符串中的文件名.

Python 开发人员选择做同样的事情,但它看起来不同,因为他们使用面向对象的方法来实现它。部分原因是 Python 文件对象 have a lot of methods read(), flush(), seek() 等。如果我们使用 close(f ),那么我们将不得不将文件对象方法的其余部分所有更改为函数,或者让它成为一个无缘无故与其他函数表现不同的随机函数。

长话短说
open()file.close() 的设计符合 OOP 原则和良好的文件引用实践。 open() 是一个类似于工厂的函数,它创建引用文件或其他设备的对象。创建对象后,对该对象的所有其他操作都通过类或实例方法完成。

关于Python open() 与 .close(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41001442/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com