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模块WSGI使用详解

    Python模块WSGI使用详解

    这篇文章主要为大家详细介绍了Python模块WSGI使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Pandas中DataFrame数据删除详情

    Pandas中DataFrame数据删除详情

    这篇文章主要以介绍的是Pandas中DataFrame的数据删除的相关资料,主要使用drop、del方式,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • 跟老齐学Python之不要红头文件(2)

    跟老齐学Python之不要红头文件(2)

    在前面学习了基本的打开和建立文件之后,就可以对文件进行多种多样的操作了。请看官要注意,文件,不是什么特别的东西,就是一个对象,如同对待此前学习过的字符串、列表等一样。
    2014-09-09
  • Python中random模块常用方法的使用教程

    Python中random模块常用方法的使用教程

    这篇文章主要给大家介绍了关于Python中random模块常用方法的使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • python将图片透明背景转为白色背景的两种方法

    python将图片透明背景转为白色背景的两种方法

    这篇文章主要为大家详细介绍了python如何使用opencv2和PIL实现将图片透明背景转换成白色背景功能,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-05-05
  • (手写)PCA原理及其Python实现图文详解

    (手写)PCA原理及其Python实现图文详解

    这篇文章主要介绍了Python来PCA算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能给你带来帮助
    2021-08-08
  • python报错解决之python运行bat文件的各种问题处理

    python报错解决之python运行bat文件的各种问题处理

    这篇文章主要介绍了python报错解决之python运行bat文件的各种问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Python 提速器numba

    Python 提速器numba

    这篇文章主要介绍了Python 提速器numba,相信大部分人都感叹过python 真的太好用了,但是它真的好慢啊,然而今天我们就来用numba解决Python 慢的这个问题,需要的朋友可以参考一下
    2022-01-01
  • 使用Python在Excel工作表中创建图表的实现步骤

    使用Python在Excel工作表中创建图表的实现步骤

    在现代企业中,数据驱动的决策变得越来越重要,Excel作为企业中最常用的数据分析工具,其强大的表格和图表功能在日常工作中不可或缺,然而,当面对成百上千条数据或需要生成定期报告时,手动制作图表不仅耗时,还容易出错,所以本文介绍了如何实现Excel图表自动化生成
    2025-12-12
  • Python实现解析Html的方法与对比

    Python实现解析Html的方法与对比

    在最近需要的需求中,需要 python 获取网页内容,并从html中获取到想要的内容,本文主要介绍了两种常用方法并进行了对比,感兴趣的可以了解下
    2024-03-03

最新评论