1、可以直接作用於for
迴圈的資料型別
第一類:集合資料型別,如list
、tuple
、dict
、set
、str
等;
第二類:generator
,包括集合定義generator和帶yield
的generator(也就是generator function)。
以上這些可以直接作用於for
迴圈的物件統稱為可迭代物件:iterable
。
可以使用isinstance()
判斷乙個物件是否是iterable
物件:
1 >>> from collections importiterable
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 importiterator
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
把list
、dict
、str
等iterable
變成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
型別,它們表示乙個惰性計算的序列;
集合資料型別如list
、dict
、str
等是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 變數 ...