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