python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python yeild关键字

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

作者:python学习与大数据分析

在Python编程语言中,yeild是一个非常实用的关键字,它不仅可以帮助你编写更加简洁的代码,还可以提高代码的执行效率,本文将详细介绍yeild在Python中的使用方法,并通过示例代码进行演示,让我们一起来探索这个强大的关键字吧

一、理解"yeild"关键字

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

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

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

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

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

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

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

您可能感兴趣的文章:
阅读全文