python中的迭代器

2022-08-20 16:06:15 字數 2684 閱讀 3701

1、可以直接作用於for迴圈的資料型別

第一類:集合資料型別,如listtupledictsetstr等;

第二類:generator,包括集合定義generator和帶yield的generator(也就是generator function)。

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

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

1 >>> from collections import

iterable

2 >>>isinstance(, iterable)

3true

4 >>>isinstance({}, iterable)

5true

6 >>> isinstance('

abc'

, iterable)

7true

8 >>> isinstance((x for x in range(10)), iterable)

9true

10 >>> isinstance(100, iterable)

11 false

2、迭代器(iterator)

generator不但可以作用於for迴圈,還可以被next()函式不斷呼叫並返回下乙個值,直到最後丟擲stopiteration錯誤表示無法繼續返回下乙個值了。那麼定義來了,可以被next()呼叫並不斷返回下乙個值得物件稱為迭代器(iterator)。

很明顯,generator可以被next()呼叫,並不斷返回下乙個值,所以generator肯定是iterator。那麼除了generator,還有那些是iterator呢?如何判斷乙個物件是否是iterator呢?

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

1 >>> from collections import

iterator

2 >>> isinstance((x for x in range(10)), iterator) #注意,(x for x in range(10))這是乙個generator,因為由列表生成式改成了()。

3true

4 >>>isinstance(, iterator)

5false

6 >>>isinstance({}, iterator)

7false

8 >>> isinstance('

abc'

, iterator)

9 false

從以上可以看出,list,dict,str雖然是iterable,但不是iterator。  而generator都是iterator。

3、將iterable變成iterator

listdictstriterable變成iterator可以使用iter()函式:

1 >>>isinstance(iter(), iterator)

2true

3 >>> isinstance(iter('

abc'

), iterator)

4 true

例如:

1 g = iter('

abc')2

3 >>>next(g)4'

a'5 >>>next(g)6'

b'7 >>>next(g)8'

c'9 >>>next(g)

10traceback (most recent call last):

11 file "

", line 1, in

12next(g)

13 stopiteration

4、小結

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

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

集合資料型別如listdictstr等是iterable但不是iterator,不過可以通過iter()函式獲得乙個iterator物件。

python中迭代器 python中的迭代器

如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代 iteration d for key in d print key ac b當我們使用for迴圈時,只要作用於乙個可迭代物件,for迴圈就可以正常執行,而我們不太關心該物件究竟是list還...

Python中的迭代器

可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的生成器函式。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable python的for迴圈本質上就是通過不斷呼叫n...

python中的迭代器

什麼是迭代器?迭代器是帶有next方法的簡單物件,當然也要實現 iter 函式。迭代器能在一串行的值上進行迭代,當沒有可供迭代時,next方法就會引發stopiteration 的異常。python中有很多的物件都是迭代器,例如 列表,元素,字串,檔案,對映,集合 如何使用迭代器?1.for 變數 ...