【Python程序开发系列】一文带你理解Python中的yield用法(案例分析)

这是我的第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、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据杂坛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值