python - 为什么文件对象在 python 中是它们自己的迭代器?

标签 python file python-3.x

我正在学习 python,这件事让我很困惑。 如果文件迭代器和文件对象不同不是更好吗,这样我们就可以支持文件中的多次迭代。 那么为什么 python 文件对象是它们自己的迭代器?

最佳答案

因为您的操作系统不允许您这样做,而且因为磁盘文件不是 only type of I/O Python 文件对象支持。文件是数据的,其处理方式与套接字和管道等其他流源非常相似。

Streams 的行为与迭代器完全一样,除了磁盘文件还可以支持搜索。另一方面,网络套接字和管道不支持查找,但对于操作系统和 Python 来说,它们也是流或文件。

这种抽象使得对文件(和流)处理进行大量优化成为可能,并且几十年来一直是查看文件的实际方式。

Python 可以以不同方式处理磁盘文件对象,并为给定的 Python 文件对象打开多个操作系统文件句柄。但那样效率会很低;瓶颈是与磁盘的通信,虽然您的操作系统可以缓冲来自硬盘的数据,但您通常应该避免多次读取同一个文件。

除此之外还有写入 到磁盘的问题。操作系统已经要求您指定文件模式;阅读或写作。您可以打开一个可以同时执行这两项操作的文件句柄,但是操作系统可能必须以不同的方式处理缓存,因为它需要考虑到当您再次读取相同的位时您的文件可能已被更改。如果 Python 允许多个迭代器,则它必须复制所有这些内容,而您也在其中写入流。

关于python - 为什么文件对象在 python 中是它们自己的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678663/

相关文章:

python - 用于字典和保存数据的多索引数据框

python - 使用 str.contains 忽略 NaN

java - 从相对路径读取文件

python - 将元组的无序列表转换为 pandas DataFrame

python - flask : `@after_this_request` 不工作

python - 检测是否支持 IPv6、与操作系统无关、没有外部程序?

c++ - 使用 C++(和 GSL)扩展和嵌入 Python(和 NumPy): pass gsl_matrix to python and back

html - 静态文件和模板可能存在的 Django 错误

c# - 当文件不存在时,File.Delete 不会抛出错误

python - 在另一个列表中附加一个列表