Python中的yeild关键字提高代码执行效率场景实例探究

 更新时间:2024年01月23日 09:27:08   作者:python学习与大数据分析  
在Python编程语言中,yeild是一个非常实用的关键字,它不仅可以帮助你编写更加简洁的代码,还可以提高代码的执行效率,本文将详细介绍yeild在Python中的使用方法,并通过示例代码进行演示,让我们一起来探索这个强大的关键字吧

一、理解"yeild"关键字

"yeild"是Python中的一个特殊关键字,它用于在函数内部生成一个生成器对象。生成器是一种可以在需要时按需生成值的迭代器,相比于传统的列表或元组,生成器更加轻量级且内存占用更少。通过使用"yeild"关键字,我们可以将一个函数变成一个生成器函数,从而在需要时生成新的值。

如果说到这里,你觉得还是不好理解,那么你可以简单粗暴的把yeild想象成一个跟return差不多的东西,但它跟return是有区别的。

但yield 不是真正的返回结果给你,而是暂停当前函数,返回一个迭代器。每一次迭代的时候,都返回一个新的数值。

但为什么不用return呢,因为return之后,return之后的代码就不会再执行了,相当于只会返回一次值程序就结束了。

当然在非无限循环的场景下,你完成可以将所有的值存放到列表或者元祖中,然后使用return一次性将所有结果返回。

但是这里有需要注意的地方,当你需要返回的数据量很大的时候,程序会占用大量内存,这是很危险的行为。

使用yeild呢,yeild返回的只是一个生成器,你每取值一次,生成器才给你返回一个真实值,这样就可以大大减少机器性能压力了。

二、"yeild"关键字的使用场景

无限序列:当需要处理一个无限序列时,使用"yeild"关键字可以避免一次性加载所有数据到内存中,而是按需生成数据。

  • 大量数据处理:当需要处理大量数据时,使用"yeild"关键字可以减少内存占用,提高程序的性能。例如,从文件中逐行读取数据并进行处理。

递归算法:使用"yeild"关键字可以将递归算法转化为迭代算法,从而提高程序的性能。例如,计算阶乘时可以使用"yeild"关键字。

三、实际代码

def infinite_sequence():
    num = 0
    while True:
        """
        [来自python学习与大数据分析微信公众号的友情提醒]
        这里的 yield 相当于 return,但不是真正的返回,而是暂停当前函数,返回一个迭代器。每一次迭代的时候,都返回一个新的数值。
        但为什么不用return呢,因为return之后,return之后的代码就不会再执行了,相当于只会返回一次值程序就结束了。
        当然在非无限循环的场景下,你完成可以将所有的值存放到列表或者元祖中,然后使用return一次性将所有结果返回。
        但是这里有需要注意的地方,当你需要返回的数据量很大的时候,程序会占用大量内存,这是很危险的行为。
        使用yeild呢,yeild返回的只是一个生成器,你每取值一次,生成器才给你返回一个真实值,这样就可以大大减少机器性能压力了。
        """
        yield num
        num += 1
for i in infinite_sequence():
    print(i)

在上面的代码中,我们定义了一个名为infinite_sequence的生成器函数,它会生成一个无限的整数序列。通过使用yeild关键字,我们可以在每次迭代时生成一个新的值。

下面我们再来看下读取大数据量文件时,使用yeild的场景:

def process_data(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            """
            [来自python学习与大数据分析微信公众号的友情提醒]
            假设:file_path这个文件的数据量很大的时候,比如成千上万行的时候,
            如果你是直接将数据放到一个变量里return返回的话,就会大量占用内存。
            """
            yield line.strip()
data = process_data('monitor.log')
for line in data:
    # 处理每一行数据,减少内存占用
    print(line)

当然了,如果你在调试代码的时候,不想使用for循环来遍历所有的生成器数据,你可以使用next()方法来取得生成器的下一个值。

def process_data(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            """
            [来自python学习与大数据分析微信公众号的友情提醒]
            假设:file_path这个文件的数据量很大的时候,比如成千上万行的时候,
            如果你是直接将数据放到一个变量里return返回的话,就会大量占用内存。
            """
            yield line.strip()
data = process_data('monitor.log')
# for line in data:
#     # 处理每一行数据,减少内存占用
#     print(line)
# 当然了,除了通过上面的for循环来获取数据外,你还可以通过next()函数来获取数据。
print(next(data))
print(next(data))
print(next(data))

以上就是yeild的一些使用方法及注意事项。注:以上代码在我本地均运行通过了的(有图为证,哈哈),大家只需要把代码中涉及到的文件地址改成自己的地址即可,更多关于Python yeild关键字的资料请关注脚本之家其它相关文章!

相关文章

  • Python 多线程的实例详解

    Python 多线程的实例详解

    这篇文章主要介绍了 Python 多线程的实例详解的相关资料,希望通过本文大家能掌握多线程的知识,需要的朋友可以参考下
    2017-09-09
  • python  dataprep库简化加速数据科学操作

    python  dataprep库简化加速数据科学操作

    这篇文章主要为大家介绍了python  dataprep库简化加速数据科学操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python中顺序表原理与实现方法详解

    Python中顺序表原理与实现方法详解

    这篇文章主要介绍了Python中顺序表原理与实现方法,结合实例形式分析了Python顺序表的概念、原理及增删查等相关实现技巧,需要的朋友可以参考下
    2019-12-12
  • Python实现绘制Matlab格式的地图边框的示例代码

    Python实现绘制Matlab格式的地图边框的示例代码

    这篇文章主要为大家详细介绍了如何利用Python实现绘制Matlab格式的地图边框,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-09-09
  • python 面向对象开发及基本特征

    python 面向对象开发及基本特征

    面向对象编程是一种编程方式,此编程方式的落地需要使用“类”和 “对象”来实现,所以,面向对象编程其实就是对 “类”和“对象” 的使用,今天给大家介绍下python 面向对象开发及基本特征,感兴趣的朋友一起看看吧
    2022-03-03
  • Python和RabbitMQ进行消息传递和处理方式

    Python和RabbitMQ进行消息传递和处理方式

    这篇文章主要介绍了Python和RabbitMQ进行消息传递和处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • python pyecharts库的用法大全

    python pyecharts库的用法大全

    这篇文章主要介绍了python pyecharts库的用法大全,pyecharts 是一个用于生成 Echarts 图表的类库,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-04-04
  • python学习之基于Python的人脸识别技术学习

    python学习之基于Python的人脸识别技术学习

    面部识别技术的应用越来越广泛,它广泛应用于安全系统、人机交互、社交媒体、医疗保健等领域。本文介绍了基于Python的人脸识别技术,感兴趣的小伙伴可以参考阅读
    2023-03-03
  • sqlalchemy对象转dict的示例

    sqlalchemy对象转dict的示例

    这篇文章主要介绍了sqlalchemy对象转dict的示例,需要的朋友可以参考下
    2014-04-04
  • python打包发布pypi及更新全部流程

    python打包发布pypi及更新全部流程

    这篇文章主要介绍了python打包发布pypi及更新全部流程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03

最新评论