yield 生成器

说明:
https://blog.csdn.net/qq_41554005/article/details/119940983

生成器有两种调用方法:next()和send(),都可以调用生成器
yield生成器函数返回一个生成器对象

yield 和 return区别

return 作为普通函数的结尾,直接返回所有结果,程序终止不再运行,并销毁局部变量
yield 会产生一个断点,暂停函数,挂起函数,保存当前状态。并且在yield处返回某个值,返回之后程序就不再往下运行

判断是否是生成器

#方法一
from inspect import isgeneratorfunction
print(isgeneratorfunction(fab))
#方法二
import types 
print(isinstance(fab, types.GeneratorType) )

使用实例

#大集合的生成
   如果你想生成一个非常大的集合,如果使用 list 创建一个集合,这会导致在内存中申请一个很大的存储空间
   使用生成器就能很好地解决这个问题
   因为生成器只有在执行到 yield 时才会迭代数据,这时只会申请需要返回元素的内存空间