是否正确理解以下两个功能完全相同?不管它们是如何调用的。
def test():
file = open("testfile.txt", "w")
file.write("Hello World")
def test_2():
with open("testfile.txt", "w") as f:
f.write("Hello World")
Run Code Online (Sandbox Code Playgroud)
由于python在不再引用对象时调用close方法。
如果不是,那么这句话让我感到困惑:
当文件的引用对象重新分配给另一个文件时,Python 会自动关闭文件。使用 close() 方法关闭文件是一种很好的做法。
Bas*_*tch 11
不,该close方法将在第一种情况下由 python 垃圾收集器(终结器)机器调用,在第二种情况下会立即调用。如果您循环调用您的test或test_2函数数千次,观察到的行为可能会有所不同。
文件描述符(至少在 Linux 上)是一种宝贵且稀缺的资源(当它耗尽时,open(2)系统调用失败)。在 Linux 上,使用getrlimit(2) withRLIMIT_NOFILE查询进程的文件描述符数量限制。您应该更喜欢在文件句柄无用时快速调用close(2)系统调用。
您的问题是特定于实现、特定于操作系统和特定于计算机的。您可能想通过阅读操作系统:三个简单的部分来了解有关操作系统的更多信息。
在 Linux 上,也可以尝试在终端中使用cat /proc/$$/limitsorcat /proc/self/limits命令。您会看到一行以Max open files(在我的 Debian 台式计算机上,现在是 2019 年 12 月,软限制为 1024)。见proc(5)。
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |