1. 程式人生 > >python 迭代器,生成器詳解。

python 迭代器,生成器詳解。

迭代器

任何實現了__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))
tmp
Out[67]: <generator object <genexpr> at 0x08C59270>