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 中。
迭代器 生成器的區別?
迭代器是乙個更抽象的概念,任何物件,如果它的類有 next 方法和 iter 方法返回自己本身,對於 string list dict tuple 等這類容器物件,使用 for 迴圈遍歷是很方便的。在後台 for 語句對容器物件呼叫 iter 函式,iter 是 python 的內建函式。iter ...
迭代器,生成器的區別
容器 列表 集合 元組 字典 都是可迭代的。可迭代物件中有iter 方法,加上next 方法形成乙個迭代器。在 for迴圈 中用到了迭代器,迭代器有next 方法可以獲取容器中下乙個物件,直到取完容器中的資料,返回 stopiteration 異常。可以使用isinstance 方法判斷乙個物件是否...
生成器和迭代器
可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...