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 中。