一、迭代取值和索引取值的对比
迭代取值:
1. 不依赖于索引取值,__next__()取值
2. 不能重复取值,只能从左往右一个一个取值
索引取值:
1. 必须要是一个容器类型
2. 可以重复取值
二、生成器
生成器就是自定义的迭代器
函数里面有yield关键字之后,函数调用之前还是函数,一旦调用函数变成了生成器
一旦是生成器,就可以__next__取值了
函数中的yield关键字的玩法:__next__一下,走一个yield,光标就停在了yield
如果再次__next__,会从上一次停留的yield位置继续往下走
三、生成器实现range功能
四、yield传值
def index(name): print('%s 准备干饭' % name) while True: food = yield print('%s 开干 %s' % (name, food)) res=index('ly') res.__next__() # res.__next__() res.send('苹果') res.send('橘子')
五、yield和return的对比
yield:
1. 函数内遇到yield关键字把函数变成了生成器
2. yield 也可以返回值,并且支持返回多个(元组形式)
3. 遇到yield,函数不会结束,而是"停住"
4. yield 也支持传值
return
1. 后面可以跟返回值,也支持返回多个(元组形式)
2. 函数遇到return,会立马结束