Python學習之路 迭代器

2022-08-09 07:15:14 字數 1437 閱讀 8879

可直接作用於for迴圈的資料型別有以下幾種:

一類是集合資料型別,如list\tuple\dict\set\str等;

一類是generator,包括生成器和帶yield的generator function.

這些可以直接作用於for迴圈的物件統稱為可迭代物件:iterable.

可以使用isinstance()判斷乙個物件是否是iterable物件:

>>> from collections import iterable

>>> isinstance(,iterable)

true

>>> isinstance({},iterable)

true

>>> isinstance('abc',iterable)

true

>>> isinstance(100,iterable)

false

生成器不但可以作用於for迴圈,還可以被next()函式不斷呼叫並返回下乙個值,

直到最後丟擲stopiteration錯誤表示無法繼續返回下乙個值了。

可以使用isinstance()判斷乙個物件是否是iterator物件:

>>> from collections import iterator

>>> isinstance((x for x in range(10)),iterator)

true

>>> isinstance(,iterator)

false

生成器都是iterator物件,但list\dict\str雖然是iterable,卻不是iterator;

把list\dict\str等iterable變成 iterator可以使用iter()函式:

>>> isinstance(iter(),iterator)

true

iterator物件表示的是乙個資料流,iterator物件可以被next()函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤,可以把這個資料流看作是乙個有序序列,當我們卻不能提前知道序列長度,只能不斷通過next()函式實現按需計算下乙個資料,所以iterator的計算是惰性的,只有在需要返回下乙個資料時它才會計算。

iterator甚至可以表示乙個無限大的資料流,例如全體自然數,而使用list是永遠不可能儲存全體自然數的。

小結:凡是可作用於for迴圈的物件都是iterable型別;

凡是可以作用於next()的都是iterator型別,它們表示乙個惰性計算的序列;

集合資料型別如list\dict\str等都是iterable 但不是iterator,不過可以通過iter()函式獲得乙個

iterator物件。

python的for迴圈本質上就是通過不斷呼叫next()函式實現的。

檢視物件是否有next()函式用dir()函式。

Python學習之路 day 13 迭代器

一.迭代器介紹 1.什麼是迭代器 1.1.迭代器指的是迭代取值的工具 1.2.迭代是一重複的過程,每一次重複都是基於上一次的結果而來 單純的重複不是迭代 i 0 while true print i 迭代 重複 每次重複都是基於上一次的結果而進行 l a b c i 0while i len l p...

Python學習之路 day 13 迭代器

一.迭代器介紹 1.什麼是迭代器 1.1.迭代器指的是迭代取值的工具 1.2.迭代是一重複的過程,每一次重複都是基於上一次的結果而來 單純的重複不是迭代 i 0 while true print i l a b c i 0while i len l print l i i 1 2.為何要用迭代器 迭...

python之路 迭代器與可迭代物件

可以直接使用for迴圈進行遍歷的資料型別有兩種 一種是集合型資料型別如list str dict set tuple,一種是generator型別,這些物件都可以使用isinstance函式進行判斷 from collections import iterable list1 1,2,3,4,5,6...