python 迭代器和iter 生成器

2021-09-16 12:38:16 字數 1352 閱讀 6805

什麼是迭代器

一組資料結構 可以利用索引從0開始迭代到續寫的最後乙個條目

我們已經知道可以對list、tuple、str等型別的資料使用for…in…的迴圈語法從其中依次拿到資料進行使用,我們把這樣的過程稱為遍歷,也叫迭代

我們把可以通過for…in…這類語句迭代讀取一條資料供我們使用的物件稱之為可迭代物件(iterable)

可迭代物件通過** __iter __**方法向我們提供乙個迭代器,我們在迭代乙個可迭代物件的時候,實際上就是先獲取該物件提供的乙個迭代器,然後通過這個迭代器來依次獲取物件中的每乙個資料.

iter()

可迭代物件的本質就是可以向我們提供乙個這樣的中間「人」即迭代器幫助我們對其進行迭代遍歷使用。

該方法返回的是當前物件的迭代器類的例項。因為可迭代物件與迭代器都要實現這個方法,因此有以下兩種寫法。

寫法一:用於可迭代物件類的寫法,返回該可迭代物件的迭代器類的例項。

寫法二:用於迭代器類的寫法,直接返回self(即自己本身),表示自身即是自己的迭代器。

next()

返回迭代的每一步,實現該方法時注意要最後超出邊界要丟擲stopiteration異常。

我們分析對可迭代物件進行迭代使用的過程,發現每迭代一次(即在for…in…中每迴圈一次)都會返回物件中的下一條資料,一直向後讀取資料直到迭代了所有資料後結束。在這個過程中就應該有乙個「人」去記錄每次訪問到了第幾條資料,以便每次迭代都可以返回下一條資料。我們把這個能幫助我們進行資料迭代的「人」稱為迭代器(iterator)

1)可迭代物件包含迭代器。

2)如果乙個物件擁有__iter__方法,其是可迭代物件;如果乙個物件擁有next方法,其是迭代器。

3)定義可迭代物件,必須實現__iter__方法;定義迭代器,必須實現__iter__和next方法。

生成器是一種特殊的迭代器,生成器自動實現了「迭代器協議」(即__iter__和next方法),不需要再手動實現兩方法。

生成器在迭代的過程中可以改變當前迭代值,而修改普通迭代器的當前迭代值往往會發生異常,影響程式的執行。

具有yield關鍵字的函式都是生成器,yield可以理解為return,返回後面的值給呼叫者。不同的是return返回後,函式會釋放,而生成器則不會。在直接呼叫next方法或用for語句進行下一次迭代時,生成器會從yield下一句開始執行,直至遇到下乙個yield。

sent()函式最重要的作用在於它可以給yield對應的賦值語句賦值,

python中迭代器和iter 函式

迭代器是在版本2.2被加入到python的,它為類序列物件提供了乙個類序列的介面。python的迭代無縫地支援序列物件,而且它還允許程式設計師迭代非序列型別,包括使用者定義的物件。迭代器用起來很靈巧,你可以迭代不是序列但表現處序列行為的物件,例如字典的鍵 乙個檔案的行,等等。當你使用迴圈迭代乙個物件...

python中迭代器和iter 函式

迭代器為類序列物件提供了乙個類序列的介面。python的迭代無縫地支援序列物件,而且它還允許程式設計師迭代非序列型別,包括使用者定義的物件。迭代器用起來很靈巧,你可以迭代不是序列但表現處序列行為的物件,例如字典的鍵 乙個檔案的行,等等。迭代器的作用如下 提供了刻擴充套件的迭代器介面 對列表迭代帶來了...

python中的iter迭代

具體解釋了怎麼用迭代,怎樣用迭代,怎樣轉換成迭代,可以看看 一 from collections.abc import iterable from collections.abc import iterator import time class person object def init sel...