总结:
1、yield有两个方法:next和send。
2、带有yield的函数不是函数而是一个生成器。
3、yield相当于return会作为生成器返回一个yield后面的值。
4、生成器每执行到yield语句后,返回之后会终止,当下一次启动生成器接着上一次继续运行。
5、next和send相当于生成器的开启开关。不同的是send会强制给yield后面的值变成所赋的值。
6、用在for循环中时,程序会默认启动next方法来启动生成器(自己理解的)
参考资料1
参考资料2
可迭代对象(iterable)、生成器、迭代器
理解可迭代对象、生成器、迭代器
一、可迭代对象
定义: 可以被for循环的都是可迭代对象
包括:
1、list、tuple、set、dict、str
2、generator,包含生成器和带yield的generatoe function
二、迭代器
定义: 可以被next函数调用返回下一个值的是迭代器
generator不仅是可迭代对象,还可以被next函数调用,所以是迭代器。
List、tuple等不能被next调用,所以不是迭代器,但是可以通过iter函数返回生成器被next函数调用。
参考链接