python最强大的yield函数

yield在我们读取大数据时是必用的一个函数,它可以帮我们规避内存溢出等问题,那么在哪些环节我们需要用到它,及为何它能帮我们在众多场景中解决内存溢出问题。

我们先看下面的示例
def csv_reader(file):
file = open(file, encoding='utf-8')
result = file.read().split("\n")
return result

if name == 'main':
csv_gen = csv_reader("test.txt")
row_count = 0

for row in csv_gen:
    row_count += 1

print(f"Row count is {row_count}")

上面的例子通过read直接将内容一次性加载到内存,当数据非常大时,内存直接会溢出,导致整个主机崩溃。

我们再看下面的例子
def csv_reader(file_name):
for row in open(file_name, "r", encoding='utf-8'):
yield row

if name == 'main':
csv_gen = csv_reader("test.txt")
row_count = 0

for row in csv_gen:
    row_count += 1

print(f"Row count is {row_count}")

这个例子通过yield函数返回一个生成器对象,每次只读取一行数据,所以对内存几乎没什么影响,open函数也是一个生成器,一行一行的读取数据

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容