python中迭代器詳解

2022-05-21 09:21:40 字數 3185 閱讀 7491

1、迭代器是乙個可以記住遍歷的位置的物件。

2、迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

3、迭代器有兩個基本的方法:iter()next()

4、字串,列表或元組物件都可用於建立迭代器:

>>> list=[1,2,3,4]

>>> it = iter(list) # 建立迭代器物件

>>> print (next(it)) # 輸出迭代器的下乙個元素

1>>> print (next(it))

2>>>

我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種:

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

一類是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物件,但listdictstr雖然是iterable,卻不是iterator

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

>>> isinstance(iter(), iterator)

true

>>> isinstance(iter('abc'), iterator)

true

你可能會問,為什麼listdictstr等資料型別不是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...