1、迭代器是乙個可以記住遍歷的位置的物件。
2、迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
3、迭代器有兩個基本的方法:iter()和next()。
4、字串,列表或元組物件都可用於建立迭代器:
>>> list=[1,2,3,4]>>> it = iter(list) # 建立迭代器物件
>>> print (next(it)) # 輸出迭代器的下乙個元素
1>>> print (next(it))
2>>>
我們已經知道,可以直接作用於for
迴圈的資料型別有以下幾種:
一類是集合資料型別,如list
、tuple
、dict
、set
、str
等;
一類是generator
,包括生成器和帶yield
的generator function。
這些可以直接作用於for
迴圈的物件統稱為可迭代物件:iterable
。
可以使用isinstance()
判斷乙個物件是否是iterable
物件:
>>> from collections.abc import iterable>>> isinstance(, iterable)
true
>>> isinstance({}, iterable)
true
>>> isinstance('abc', iterable)
true
>>> isinstance((x for x in range(10)), iterable)
true
>>> isinstance(100, iterable)
false
而生成器不但可以作用於for
迴圈,還可以被next()
函式不斷呼叫並返回下乙個值,直到最後丟擲stopiteration
錯誤表示無法繼續返回下乙個值了。
可以使用isinstance()
判斷乙個物件是否是iterator
物件:
>>> from collections.abc import iterator>>> isinstance((x for x in range(10)), iterator)
true
>>> isinstance(, iterator)
false
>>> isinstance({}, iterator)
false
>>> isinstance('abc', iterator)
false
生成器都是iterator
物件,但list
、dict
、str
雖然是iterable
,卻不是iterator
。
把list
、dict
、str
等iterable
變成iterator
可以使用iter()
函式:
>>> isinstance(iter(), iterator)
true
>>> isinstance(iter('abc'), iterator)
true
你可能會問,為什麼list
、dict
、str
等資料型別不是iterator
?
這是因為python的iterator
物件表示的是乙個資料流,iterator物件可以被next()
函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration
錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()
函式實現按需計算下乙個資料,所以iterator
的計算是惰性的,只有在需要返回下乙個資料時它才會計算。
iterator
甚至可以表示乙個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。
把乙個類作為乙個迭代器使用需要在類中實現兩個方法 __iter__() 與 __next__() 。
如果你已經了解的物件導向程式設計,就知道類都有乙個建構函式,python 的建構函式為 __init__(), 它會在物件初始化的時候執行。
__iter__() 方法返回乙個特殊的迭代器物件, 這個迭代器物件實現了 __next__() 方法並通過 stopiteration 異常標識迭代的完成。
__next__() 方法(python 2 裡是 next())會返回下乙個迭代器物件。
建立乙個返回數字的迭代器,初始值為 1,逐步遞增 1:
class mynumbers:def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = mynumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
執行輸出結果為:
12345
**自
python中迭代器 python中的迭代器
如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代 iteration d for key in d print key ac b當我們使用for迴圈時,只要作用於乙個可迭代物件,for迴圈就可以正常執行,而我們不太關心該物件究竟是list還...
詳解Python中的迭代器和使用
對於乙個列表,a 1,2,3,4 我們最常見的遍歷方式就是 a 1,2,3,4 for item in a print item 這裡我們研究一種新的方式,就是迭代器。在c 的stl中大量使用了迭代器,迭代器的作用當然就是遍歷容器中的元素,而且他的好處就在於分離了容器的實現和遍歷操作,不管我們使用什...
Python基礎之迭代器詳解
迭代器即用來迭代取值的工具,而迭代是重複反饋過程的活動,其目的通常是為了逼近所需的目標或結果,每一次對過程的重複稱為一次 迭代 而每一次迭代得到的結果會作為下一次迭代的初始值,單純的重複並不是迭代。例項 goods mac lenovo acer dell sony index 0 while in...