1. 程式人生 > >python~迭代器,生成器(2)

python~迭代器,生成器(2)

**生成器一定是迭代器,但是迭代器不一定是生成器

迭代器:

可以被next()函式呼叫並不斷返回下一個值的物件稱為迭代器:Iterator

??isinstance() 判斷一個物件是否是 Iterator 物件:

In [56]: from collections import Iterator

In [57]: isinstance((x for x in range(10)), Iterator)
Out[57]: True

In [58]: isinstance([], Iterator)
Out[58]: False

In [59]: isinstance({}, Iterator)
Out[59]: False

In [60]: isinstance('abc', Iterator)
Out[60]: False

In [61]: isinstance(100, Iterator)
Out[61]: False

iter()函式

生成器都是 Iterator 物件,但 list 、 dict 、 str 雖然是 Iterable,卻不是 Iterator

把 list 、 dict 、 str 等 Iterable 變成 Iterator 可以使用 iter() 函式:

In [62]: isinstance(iter([]), Iterator)
Out[62]: True

In [63]: isinstance(iter('abc'), Iterator)
Out[63]: True

總結

凡是可作用於 for 迴圈的物件都是 Iterable 型別;

凡是可作用於 next() 函式的物件都是 Iterator 型別

集合資料型別如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不過可以通過 iter() 函式獲得一個 Iterator 物件。