我們在前面使用過語句「for x in列表物件」,這就表示列表物件是可迭代的(iterable)。那麼如何判斷某個物件是否可迭代呢?答案是可以使用collections.iterable類來判斷。
如下面的**所示,列表是可迭代的,整數是不可迭代的,字串是可迭代的。
>>> from collections import iterable # 引入iterable類
>>> isinstance(, iterable) # 列表是可迭代的
true
>>> isinstance(12, iterable) # 整數是不可迭代的
false
>>> isinstance("12", iterable) # 字串是可迭代的
true
另外乙個概念是迭代器(iterator)。它可以作為內建函式 next() 的引數,每次按照一定順序得到其中乙個元素。但比較有趣的是,列表不是迭代器。同樣可以用 collections.iterator 類來判斷某個物件是否是迭代器。
如下面的**所示,列表和字串都不是迭代器:
>>> from collections import iterator # 引入iterator類
>>> isinstance(, iterator) # 列表不是迭代器
false
>>> isinstance("abc", iterator) # 字串也不是迭代器
false
那麼列表是否可以作為 next() 的引數呢?答案是不可以。例如下面的**:
>>> a = [1, 2, 3] # 建立列表物件a
>>> next(a) # 使用內建的next()介面函式,發生錯誤
traceback (most recent call last):
file "", line 1, in
typeerror: list object is not an iterator
這比較容易理解,因為我們沒有指定當前位置,但可以使用另外乙個內建函式 iter() 來將其轉換成 iterator。下面的**演示了這種用法:
>>> from collections import iterable # 引入iterable和iterator類
>>> from collections import iterator
>>> a = [1, 2, 3] # 建立列表物件a
>>> isinstance(a, iterable) # 列表物件是可迭代的
true
>>> isinstance(a, iterator) # 列表物件不是迭代器
false
>>> it_a = iter(a) # 從列表物件得到迭代器it_a
>>> isinstance(it_a, iterable) # it_a是可迭代的,也是迭代器
true
>>> isinstance(it_a, iterator)
true
>>> type(it_a) # it_a是列表型迭代器
>>> next(it_a) # 得到乙個資料
>>> it_a.next() # 使用另外一種方式得到乙個資料
>>> next(it_a)
>>> next(it_a) # 沒有資料了,丟擲異常
traceback (most recent call last):
file "", line 1, in
stopiteration
迭代器的乙個特點是它只能使用一次,從頭部走到尾部。如果希望再次走一遍,只能建立乙個新的迭代器。
python迭代器使用 python怎麼使用迭代器
必須是定義了 iter 方法和next 方法的物件。python的iterator物件表示的是乙個資料流,可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,所以iterator 的計算是惰性的,只有在需要返回下乙個資料時它才會計算 iterator物件可以被next 函式呼叫並不斷...
python學習 迭代器使用說明
在學習迭代器過程中,感覺很難理解,還是要放在例項中說明。理解迭代器的話,可以從for in 迴圈語句中。1 序列 number 1,2,3,4,5 for i in number print i 得到結果 123 45上面這個例子在學習for迴圈語句時,很容易理解。但其實,這就是乙個迭代器的用法,列...
ruby 迭代器使用方法
ruby 迭代器並不是ruby發明的.它廣泛地運用於各種物件導向語言.在lisp中也有,只是不這麼叫罷了.儘管如此,迭代器的概念並不為許多人熟悉,因此我們將在此做較為詳細的介紹.你知道,動詞 iterate 的意思是做同一件事許多遍,因此,iterator就是用來將同一件事做許多次的東西.當我們寫程...