任何實現了__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語句時,程式就會自動呼叫即將被處理的物件的可...