python~迭代器,生成器(2)
阿新 • • 發佈:2018-11-20
**生成器一定是迭代器,但是迭代器不一定是生成器
迭代器:
可以被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 物件。