生成器
创建生成器的方式
- 生成器推导式
- yield关键字
生成器相关方法
- for:循环遍历生成器中的每一个值
- next:获取生成器中的下一个值
生成器注意点
- 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续执行下去
- 生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出一个Stoplteration异常,表示停止迭代异常
- while循环内部没有处理异常操作,需要自己写代码添加处理异常操作
- for循环内部自动处理了停止迭代异常
生成器推导式
a = (i for i in range(5))print(a)
单个取值
a = (i for i in range(5))
print(next(a)) # 0
使用for循环遍历生成器的每一个值
a = (i for i in range(5))
for i in a:print(i)# 0
# 1
# 2
# 3
# 4
yield关键字
yield生成器的特征,在def函数中看见了yield关键字,那么这个函数就叫做生成器
使用for循环
def demo(num):for i in range(num):yield ia = demo(5)
print(a)
for i in a:print(i)# <generator object demo at 0x000001FCC28F7648>
# 0
# 1
# 2
# 3
# 4
使用while循环
import sysdef demo(num):for i in range(num):yield ia = demo(5)while True:try:print(next(a))except StopIteration:sys.exit()# 0
# 1
# 2
# 3
# 4
生成器总结
- 生成器是根据算法生成数据的一种机制,每次调用生成器只生成一个值,可以节省大量的内存
- 生成器的创建方式有两种:生成器推导式,yield关键字