生成器

一、迭代取值和索引取值的对比

迭代取值:
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,会立马结束

 

上一篇:生成器


下一篇:python入门学习篇十六