python 迭代器,生成器詳解。

2021-09-01 22:35:39 字數 657 閱讀 5948

任何實現了__iter__和__next__()(python2中實現next())方法的物件都是迭代器

迭代器可以被next()函式呼叫並不斷返回下乙個值的,或者使用for迴圈。

因為python的for迴圈本質上就是通過不斷呼叫next()函式實現的。

for 迴圈在處理這些資料前,會呼叫 __ iter__() 方法,將這些資料轉化為乙個迭代器,然後呼叫迭代器的 __ next__() 方法,並捕獲stopiteration異常,也就實現了遍歷完所有資料就會結束,並不會丟擲這個異常。

list、set、dict都是可迭代物件(iterable),但不是迭代器物件(iterator),不可以使用next()函式呼叫取下乙個值。

可以生成器是一種特殊的迭代器,通過在函式中用yield欄位返回資料或者生成器表示式(generator expression)完成。可使用next()方法依次獲取下乙個值,也可以使用list()直接轉化為列表物件。

def foo1():

for i in range(10):

yield i

tmp = (x for x in range(10))

tmpout[67]: at 0x08c59270>

python 迭代器和生成器詳解

二 生成器 說迭代器之前有兩個相關的名詞需要介紹 可迭代物件 只要定義了 iter 方法,我們就說該物件是可迭代物件,並且可迭代物件能提供迭代器。迭代器 實現了 next 或者next python2 方法的稱為迭代器,迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可以不存在或者被...

Python 迭代器 生成器

可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...

python 迭代器,生成器

什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...