这是我的第416篇原创文章。
一、引言
在 Python 中,yield
是一个关键字,用于定义生成器函数(generator function)。生成器是一种特殊的迭代器,可以逐个返回值,而不是一次性返回所有值。这使得生成器在处理大量数据时非常高效,因为它可以逐个生成值,而不是将所有值一次性加载到内存中。
如果不太好理解yield
,可以先把yield
当作return
的同胞兄弟来看,他们都在函数中使用,并履行着返回某种结果的职责。
这两者的区别是:
有return
的函数直接返回所有结果,程序终止不再运行,并销毁局部变量;
而有yield
的函数则返回一个可迭代的 generator(生成器)对象,你可以使用for循环或者调用next()方法遍历生成器对象来提取结果。
二、实现过程
2.1 高效读文件
当处理大型文件时,一次性将整个文件加载到内存中可能会导致内存不足。使用 yield
,我们可以逐行读取文件,从而节省内存。
逐行读取文件:
def read_file_line_by_line(file_path):
with open(file_path, 'r') as file:
for line in file:
yield line
for line in read_file_line_by_line('example.txt'):
print(line, end='')
在上面的示例中,read_file_line_by_line
函数逐行读取文件,并将每一行作为迭代器返回。
2.2 轻松实现流式处理
流式处理是一种处理大量数据的方法,它允许数据在处理过程中逐个元素地流动。yield
可以帮助我们实现流式处理。
def process_data(data_stream):
for data in data_stream:
# 处理数据
processed_data = data * 2
yield processed_data
data_stream = [1, 2, 3, 4, 5]
processed_stream = process_data(data_stream)
for processed_data in processed_stream:
print(processed_data)
输出:
2
4
6
8
10
在上面的示例中,process_data
函数是一个生成器,它逐个处理数据流中的元素,并将处理后的数据返回。
作者简介:
读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。