目录
生成器的本质:迭代器
生成器包括两种:生成器函数和生成器表达式
作用:可以实现多任务(协程-->模拟并发)
1.生成器函数
概念
一个包含yield关键字的函数就是一个生成器函数。并且yield不能和return共用,并且yield只能用在函数内。
(1).生成器函数执行之后会得到一个生成器作为返回值,并不会执行函数体。
(2).执行了__next__()方法之后才会执行函数体,并且获得返回值。
(3).next()内置方法,内部调用生成器函数的__next__()方法。
(3).yield和return相同的是可以返回值,但是不同的是yield 不会结束函数
具有惰性,推一步走一下,调用一次生成器函数的__next__()方法或next()函数执行一下,遇到yield即止
练习
创建一个生成器,并且调用
创建一个生成器,并且设置返回值
创建生成器,定义多个yield 值
创建生成器,生成200万桶康师傅方便面
2.send()
概念
send 获取下一个值的效果和next()基本一致,只是在获取下一个值的时候,给上一yield的位置传递一个数据
使用send的注意事项
(1).第一次使用生成器的时候 是用next获取下一个值
(2).最后一个yield不能接受外部的值
练习
使用send()方法给yield传递参数
3.yield form
yield from 循环遍历容器类型
使用for循环取出g1生成器中所有的值
使用 yield from 遍历出可变数据类型中的数据
4.生成器表达式
格式:将列表解析式[] 改成 () 即可
使用生成器表达式,进行数数
老母鸡下蛋,使用列表推导式生成
老母鸡下蛋,使用生成器表达式