Python学习笔记-yield用法及优点
Python学习笔记-yield用法及优点
概述
yield
用于定义生成器,它最终返回一个生成器对象,这个生成器对象可以被迭代。
例子
# encoding:utf8
import sys
n = 200
m = 1000
# 定义一个生成器,yield必须在函数中使用
def Generators(n):
for i in range(n):
if i%2==0:
yield i
print("参数为200生成器占用内存大小:",sys.getsizeof(Generators(n)))
print("参数为1000生成器占用内存大小:",sys.getsizeof(Generators(m)))
# 创建一个列表对象
listobj_1 = [i for i in range(n) if i%2==0]
listobj_2 = [i for i in range(m) if i%2==0]
print("参数为200列表占用内存大小:",sys.getsizeof(listobj_1))
print("参数为1000列表占用内存大小:",sys.getsizeof(listobj_2))
运行结果
参数为200生成器占用内存大小: 200
参数为1000生成器占用内存大小: 200
参数为200列表占用内存大小: 920
参数为1000列表占用内存大小: 4216
优点
- 内存效率:执行结果占用内存不一致,当数据量越大,列表占用的内存就越大,而生成器占用的内存基本上是恒定的
- 惰性求值:只在进行迭代时才生成计算结果,避免无效的计算
- 无限序列:对序列长度没有限制
本文来自博客园,作者:Jruing,转载请注明原文链接:https://www.cnblogs.com/jruing/p/18525809