我想知道 python 生成器在这个用例中的内存优势(如果有的话)。我希望读入一个必须在所有对象之间共享的大文本文件。因为它只需要使用一次,一旦列表用完程序就会结束,所以我计划使用生成器。
我相信生成器的“保存状态”可以让它跟踪要传递给调用它的任何对象的下一个值是什么。我读过生成器还通过不立即返回所有值来节省内存使用量,而是即时计算它们。不过,如果我在此用例中获得任何好处,我会感到有些困惑。
示例代码:
def bufferedFetch():
while True:
buffer = open("bigfile.txt","r").read().split('\n')
for i in buffer:
yield i
考虑到缓冲区无论如何都会读取整个“bigfile.txt”,这不会存储在生成器中,没有内存优势吗?有没有更好的方法来返回可以在所有对象之间共享的列表的下一个值?
谢谢。
最佳答案
在这种情况下没有。您正在通过执行 .read()
将整个文件读入内存。
您理想情况下想要做的是:
def bufferedFetch():
with open("bigfile.txt","r") as f:
for line in f:
yield line
python file
对象会为您处理行尾(系统相关),它的内置迭代器将通过简单地一次迭代一行来产生行时间(没有将整个文件读入内存)。
关于Python Generator 内存对大量读数有好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24443209/