Python中的yield的用法
学习目标:
- 掌握yield与return的区别
- 掌握yield的用法
记录时间:
- 2023.9.18
学习内容:
yield函数与return的区别
有return的函数直接返回所有结果,函数执行完毕,销毁函数中的局部变量;
有yield的函数则返回一个可迭代的 generator(生成器)对象,你可以使用for循环或者调用next()方法遍历生成器对象来提取结果。调用一个yield函数,就会返回一个生成器对象。【使用了yield的函数被称为生成器】
yield函数有点类似Qt中的exec()函数,会在执行yield的位置暂停,调用next()方法时又从此位置下一行开始。
可以说函数return时就结束了执行,并释放了函数的所有局部变量。而调用yield函数,则暂停了此函数,仍然保留其局部变量。还要注意的是yield也干了return的工作, yield x,会把x返回给调用者,并暂停调用了yield的函数。【return 干一件事,yield干两件事】
yield函数使用
下面举一个例子,展示了两种遍历generator的方式
def yield_generator(x):
yield x
yield x+1
yield x+2
instance_obj = yield_generator(10)
# for i in instance_obj: # 可以打印出10, 11, 12
# print(i)
print(next(instance_obj)) # 10
print(next(instance_obj)) # 11
print(next(instance_obj)) # 12
print(next(instance_obj)) # 再调用next报错
学习小结:
提示:这里统计学习计划的总量
使用yield的好处
1)yield函数可以用来减低内存消耗。生成器存储的是一种获取一部分数据的规则,而普通集合存储的是所有数据,数据量大的话,内存可能不够用
2)用yield驱动生成器函数分步运行,以实现某些算法;协程中常常可用来控制程序流