迭代器和生成器的区别


1. 生成器都是迭代器,迭代器不一定是生成器
 
2.Iterable 是指实现了 __iter__ 方法的对象,__iter__ 方法的返回值是一个 iterator。可以使用 for ... in ... 来迭代这个对象。
   for 循环内部三件事:
(1)调用可迭代对象的iter方法返回一个迭代器对象
(2)使用迭代器对象的next()方法
(3)处理stopiteration异常
 
3.Iterator(迭代器) 是指实现了__iter__ 方法和 __next__ 方法的对象,它的 __iter__ 方法返回自身(return self), __next__ 方法返回某个值或者抛出 StopIteration。
Iterator 可以被 next(iterator[, default]) 方法调用,直至抛出StopIteration(不传入 default 参数的时候)。
 
4.Generator(生成器) 是把 List comprehension 的括号改为小括号,或者包含 yield 的 function/method 的一种对象。它本身是一个 Iterator,因此可以被 next(iterator[, default]) 调用。
对于 function/method 形式的 Generator 来说,next(iterator[, default]) 调用后的返回值是下一个 yield 的右端的值,可以把 yield 看成阶段性的 return。
另外,Generator 具有 send 方法,可以从外部发送值 至Generator内部前一次 yield 返回时的位置的左端,这样就提供了类似于挂起、唤醒、切换上下文的机制,可以被用到 coroutine 中。
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM