Python中的生成器和迭代器

迭代器

所谓迭代器,是指具有next方法的对象。注意调用next方式的时候,不需要任何参数。调用next方法时,迭代器会返回它的下一个值。如果迭代器没有值返回,则会抛出StopIteration的异常。
简单示例:

list = [1, 2, 3]
it = list.__iter__()               #调用列表的__iter__方法返回一个迭代器
print(it)
>>> it.next()
1
>>> it.next()
2
>>> it.next()
3
>>> it.next()

**

生成器

普通的函数遇到异常和return语句,函数的所有状态都会被清空,再次调用这个函数的时候,所有的局部变量,堆栈信息都会被重新创建。
在Python中,生成器通过生成器函数生成,生成器函数定义方法与普通函数一样,唯一的不同就是使用yield关键字,一次返回一个结果,在每个结果之间挂起与继续他们的状态,来实现循环

def myxrange(n):
    print('myxrange beginning!')
    i = 0
    while i < n:
        print("before yield, i is:", i)
        yield i
        i += 1
        print("after yield, i is:", i)
    print('myxrange endding!')

1.当调用生成器函数时候,函数返回的,只是一个生成器对象,并没有真正执行里面的逻辑。
2.当next()方法第一次被调用以后,生成器才真正开始工作。一旦遇到yield语句,代码便停止运行。注意此时的停止运行跟return的是不一样的。
3.调用next()方法的时候,返回的是yield处的参数值
4.当继续调用next()方法时,代码将在上一次停止的yield语句处继续执行,并且到下一个yield处停止。
5.一直到后面没有yield语句,最后抛出StopIteration的异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值