這裡的迭代可以指for迴圈,在python中,對於像list,dict和檔案等而言,都可以使用for迴圈,但是它們並不是迭代器,它們屬於可迭代物件。
1.1什麼可迭代物件
最簡單的解釋:可以使用for...in...語句進行迴圈的物件,就是可迭代物件(iterable),可以使用isinstance()方法進行判斷。
from collections import iterable
type = isinstance('python', iterable)
print type
1.2 什麼是迭代器
迭代器指的是可以使用next()方法來**的物件,可以對可迭代物件使用iter()方法,將其轉換為迭代器。
temp = iter([1, 2, 3])
print type(temp)
print next(temp)
此時temp就是乙個迭代器。所以說,迭代器基於兩個方法:
_iter_ 返回迭代器本身
可理解為可被next()函式呼叫並不斷返回下乙個值的物件就是迭代器,在定義乙個裝飾器時將需要同時定義這兩個方法。
迭代器的優勢
在構建迭代器時,不是將所有的元素一次性的載入,而是等呼叫next方法時返回元素,所以不需要考慮記憶體的問題。
迭代器應用場景
那麼,具體在什麼場景下可以使用迭代器呢?
數列的資料規模巨大
數列有規律,但是不能使用列表推導式描述。
生成器是一種高階迭代器,使得需要返回一系列元素的函式所需的**更加的簡單和高效(不像建立迭代器**那般冗長)。
2.1生成器函式
生成器函式和常規函式都採用def語句進行定義,但是基於yield指令返回乙個值,可以暫停乙個函式並返回中間結果。當需要乙個將返回乙個序列或在迴圈中執行的函式時,就可以使用生成器,因為當這些元素被傳遞到另乙個函式中進行後續處理時,一次返回乙個元素可以有效的提公升整體效能。
常見的應用場景是使用生成器的流資料緩衝區。
2.2 生成器表示式
生成式表示式是一種實現生成器的便捷方式,將列表推導式的中括號替換為圓括號。
和列表推導式的區別:列表生成式可以直接建立乙個表,但是生成器表示式是一種邊迴圈邊計算,使得列表的元素可以在迴圈過程中乙個個的推算出來,不需要建立完整的列表,從而節省了大量的空間。
g = (x * x for x in range(10))
總結:生成器是一種高階迭代器。生成器的優點是延遲計算,一次返回乙個結果,這樣非常適用於大資料量的計算。但是,使用生成器必須要注意的一點是:生成器只能遍歷一次。
python中迭代器和生成器
迭代器 迭代器的實質是實現了next 方法的物件,常見的元組 列表 字典都是迭代器。迭代器中重點關注兩種方法 iter 方法 返回迭代器自身。可以通過python內建函式iter 呼叫。next 方法 當next方法被呼叫的時候,迭代器會返回它的下乙個值,如果next方法被呼叫,但迭代器沒有只可以返...
python中迭代器和生成器
1 迭代器 iterator 是乙個實現了迭代器協議的物件,python的一些內建資料型別 列表,陣列,字串,字典等 都可以通過for語句進行迭代,我們也可以自己建立乙個容器,實現了迭代器協議,可以通過for,next方法進行迭代,在迭代的末尾,會引發stopiteration異常。迭代器有兩個基本...
Python迭代器和生成器
先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...