我正在学习python,这件事令我困惑。 如果文件迭代器和文件对象不同会不会更好,这样我们就可以在文件中支持多次迭代了。 那么为什么python文件对象是他们自己的迭代器呢?
答案 0 :(得分:3)
因为您的操作系统不允许您这样做,并且因为磁盘文件不是only type of I/O Python文件对象支持。文件是 streams 的数据,并且像其他流源(如套接字和管道)一样处理很多。
Streams的行为与迭代器完全相同,但磁盘文件也可以支持搜索。另一方面,网络套接字和管道不支持搜索,但对于操作系统和Python,它们也是流或文件。
这种抽象使得可以对文件(和流)处理应用大量优化,并且几十年来一直是查看文件的事实上的方式。
Python 可以以不同方式处理磁盘文件对象,并为给定的Python文件对象打开多个OS文件句柄。但这样效率会相当低;瓶颈是与磁盘的通信,虽然你的操作系统可以缓冲来自硬盘的数据,你通常应该避免多次从同一个文件中读取数据。
除此之外,还有写入到磁盘的问题。操作系统已经要求您指定文件模式;阅读或写作。您可以打开一个可以同时执行这两个操作的文件句柄,但操作系统可能必须以不同的方式处理缓存,因为它需要考虑到当您再次读取相同的位时您的文件可能已被更改。 Python必须复制所有这些,如果它允许多个迭代器,你也写入流。