python中迭代器和生成器

2022-08-24 03:45:08 字數 1435 閱讀 4593

這裡的迭代可以指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的...