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