Python迭代器和生成器

生成器是迭代器的一种


生成器得是一种函数以及函数内部有yield而不是return来返回值(注:python2)


生成器实现了迭代器协议(即对象必须有next方法。注:python3是__next__方法)


除此外生成器还实现了send方法以及close方法

关于send()方法需要注意的是:调用send传入非None值前,生成器必须处于挂起状态,否则将抛出异常。也就是说,第一次调

用时,要使用next()语句或send(None),因为没有yield语句来接收这个值。

关于close()方法

这个方法用于关闭生成器,对关闭的生成器后再次调用next或send将抛出StopIteration异常。

而迭代对象是指实现了__iter__方法的对象。可迭代对象__iter__方法负责返回一个迭代器。


所以迭代对象可以是迭代器,也可以迭代对象不是一个迭代器(即__iter__方法返回的对象不是当前迭代对象)


如果一个迭代对象也是迭代器那么该迭代对象不可以多次遍历(比如生成器)


如果一个迭代对象不是迭代器那么该迭代对象是可以多次遍历的(比如一个list对象可以多次使用for循环遍历)


使用for语句的时候,for语句就会自动的通过可迭代对象的__iter__()方法来获得迭代器对象,并且通过next()方法来获取下一个元素。


相关资料:http://python.jobbole.com/81881/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值