迭代器与生成器

迭代器是通过调用__iter__方法创建,使用__next__获取元素。生成器是包含yield关键字的函数,调用时变为迭代器。生成器在遇到yield时暂停,下次调用__next__会从暂停处继续执行。

迭代器

什么是迭代器?

        可迭代对象调用__iter__方法就创建迭代器对象

迭代器对象调用__next__方法,可以获取到迭代器中下一个元素,和for循环一样

l = [1,2,3,4,56,87]    #l是列表 也是可迭代对象
rex = l.__iter__()    #生成迭代器对像
rex.__next__()    #取值
1

 

生成器

函数中如果存在yield关键字,在调用函数之前,还是一个普通函数,一旦调用函数,就把函数变成了生成器(迭代器)

def index():
    print('from index')
    print('hello world')
    yield 123
    print('second')
    print('second')
    print('second')
    print('second')
    print('second')
    yield 222
    print('three')

 ****************
生成器一定是迭代器
迭代器不一定是生成器
***************

index加括号调用====>index()  ,函数index不会运行,

res = index()  ======》此时才是生成器  ,生成器也是迭代器有__next__属性

res=index()  # 此时就是生成器
ret=res.__next__()   # 代码遇到yield关键字,会停住,夯住
ret=res.__next__()  # 再次执行__next__,代码从上一次被停住的位置继续往下执行
ret=res.__next__()

运行结果如下

from index
hello world
second
second
second
second
second
three

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值