目录
一.概念
生成器的本质就是迭代器。
生成器包括两种:生成器函数和生成器表达式
二.生成器基础
1.生成器函数
一个包含yield关键字的函数就是一个生成器函数。并且yield不能和return共用,并且yield只能用在函数内。
(1).生成器函数执行之后会得到一个生成器作为返回值,并不会执行函数体。
(2).执行了__next__()方法之后才会执行函数体,并且获得返回值。
(3).next()内置方法,内部调用生成器函数的__next__()方法。
(3).yield和return相同的是可以返回值,但是不同的是yield 不会结束函数
我们要明白的是:
next(函数地址)等价于 函数地址.__next__()
2.有返回值的生成器
3.创建一个生成器,生成一个生产线
我把代码放在下面,大家可以试试:
def ksf():
for i in range(1,2000001):
yield "正在生产第{}桶方便面".format(i)
a = ksf()
#第一种方法
for i in range(1,2000001):
print(next(a))
#第二种方法
for fbm in a:#a 是一个迭代器,我们用for循环一个一个取出来
print(fbm)
4.send()函数
send 获取下一个值的效果和next()基本一致,只是在获取下一个值的时候,给上一yield的位置传递一个数据
使用send的注意事项
(1).第一次使用生成器的时候 是用next获取下一个值
(2).最后一个yield不能接受外部的值
5.用一个生成器,求平均数
6.yield form
可以遍历生成器的迭代器
7.生成器表达式
格式:将列表解析式[] 改成 () 即可。
结果如下: