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关键字的资料请关注脚本之家其它相关文章!

相关文章

  • PyCharm实现本地恢复或查看历史代码

    PyCharm实现本地恢复或查看历史代码

    这篇文章主要介绍了PyCharm实现本地恢复或查看历史代码,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Python获取指定网段正在使用的IP

    Python获取指定网段正在使用的IP

    这篇文章主要介绍了Python获取指定网段正在使用的IP的示例代码,帮助大家更好的利用python进行测试,感兴趣的朋友可以了解下
    2020-12-12
  • python中的字典详细介绍

    python中的字典详细介绍

    这篇文章主要介绍了python中的字典详细介绍,字典是Python中最强大的数据类型之一,本文讲解了什么是字典、创建字典和给字典赋值 、字典的基本操作、映射类型操作符、映射相关的函数、字典的方法等内容,需要的朋友可以参考下
    2014-09-09
  • OpenCV半小时掌握基本操作之像素加减乘除&逻辑运算

    OpenCV半小时掌握基本操作之像素加减乘除&逻辑运算

    这篇文章主要介绍了OpenCV基本操作之像素加减乘除&逻辑运算,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 关于python安装第三方库的问题与解决方案

    关于python安装第三方库的问题与解决方案

    Python开发中经常遇到第三方库安装困难的问题,速度慢可以使用国内镜像如清华镜像加速,若遇到wheel错误,可以手动下载whl文件进行安装,对于找不到的包,可以尝试在Python的官方包发布网站上进行搜索和下载,本文提供了具体的解决方案和操作步骤
    2024-10-10
  • Python+Opencv实现把图片、视频互转的示例

    Python+Opencv实现把图片、视频互转的示例

    这篇文章主要介绍了Python+Opencv实现把图片、视频互转的示例,帮助大家更好的理解和实用python,感兴趣的朋友可以了解下
    2020-12-12
  • python一键去抖音视频水印工具

    python一键去抖音视频水印工具

    抖音越来越火,越刷越上瘾,总感觉下一个视频一定会更精彩,根本停不下来。想将抖音里喜欢的小哥哥/小姐姐的视频全部存到电脑硬盘里,还没有抖音的视频水印,跟着小编来看看吧
    2018-09-09
  • windows下python安装pip方法详解

    windows下python安装pip方法详解

    这篇文章主要介绍了windows下python安装pip方法详解,需要的朋友可以参考下
    2020-02-02
  • Django基于ORM操作数据库的方法详解

    Django基于ORM操作数据库的方法详解

    这篇文章主要介绍了Django基于ORM操作数据库的方法,结合实例形式总结分析了Django使用ORM操作数据库的相关配置、增删改查等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • windows7 32、64位下python爬虫框架scrapy环境的搭建方法

    windows7 32、64位下python爬虫框架scrapy环境的搭建方法

    这篇文章主要介绍了windows7 32、64位下python爬虫框架scrapy环境的搭建方法,需要的朋友可以参考下
    2018-11-11

最新评论