Python生成器对大型读取器的内存优势?
我想知道python生成器在这个用例中的内存优势(如果有的话)。我希望读入一个必须在所有对象之间共享的大文本文件。因为它只需要使用一次,一旦列表用完,程序就会完成,所以我计划使用生成器 我相信,生成器的保存状态可以让它跟踪传递给调用它的对象的下一个值。我已经读到,生成器也节省了内存使用,因为它不是一次返回所有的值,而是动态地计算它们。不过,我有点困惑,在这个用例中我是否能得到任何好处 示例代码:Python生成器对大型读取器的内存优势?,python,generator,Python,Generator,我想知道python生成器在这个用例中的内存优势(如果有的话)。我希望读入一个必须在所有对象之间共享的大文本文件。因为它只需要使用一次,一旦列表用完,程序就会完成,所以我计划使用生成器 我相信,生成器的保存状态可以让它跟踪传递给调用它的对象的下一个值。我已经读到,生成器也节省了内存使用,因为它不是一次返回所有的值,而是动态地计算它们。不过,我有点困惑,在这个用例中我是否能得到任何好处 示例代码: def bufferedFetch(): while True: buffe
def bufferedFetch():
while True:
buffer = open("bigfile.txt","r").read().split('\n')
for i in buffer:
yield i
考虑到缓冲区将在整个bigfile.txt中读取,这不是存储在生成器中,没有内存优势吗?是否有更好的方法返回可在所有对象之间共享的列表的下一个值
谢谢 在本例中,不是。您正在通过do.read将整个文件读入内存 理想情况下,您想做的是:
def bufferedFetch():
with open("bigfile.txt","r") as f:
for line in f:
yield line
python file对象负责系统相关的行结束,它的内置迭代器只需一次迭代一行即可生成行,而不是将整个文件读入内存。在这种情况下,否。您通过执行.read将整个文件读入内存 理想情况下,您想做的是:
def bufferedFetch():
with open("bigfile.txt","r") as f:
for line in f:
yield line
python file对象负责处理依赖于系统的行结束,它的内置迭代器只需一次迭代一行即可生成行,而不必将整个文件读入内存。。非常感谢,太棒了。非常感谢你。