1. 程式人生 > >Pythoh 迭代器,可迭代物件,容器,生成器

Pythoh 迭代器,可迭代物件,容器,生成器

容器一般都是可迭代物件,是一種資料結構(data structure)。很多容器(list,dict,tuple)都是可迭代物件。但是可迭代物件不一定是一種資料結構,比如開啟的檔案或者sockets。可迭代物件可以(can)返回迭代器。每一個可迭代物件在程式碼都實現了__iter__()和__next__()方法。每一個實現了__next__()方法的物件都是迭代器。生成器是一種特殊的迭代器,反之不然。生成器可以有和迭代器一樣的使用方法,但是用yield關鍵字替換了__iter__()和__next__()方法。

例如:

>>> class fib:
...     def __init__
(self): ... self.prev = 0 ... self.curr = 1 ... ... def __iter__(self): ... return self ... ... def __next__(self): ... value = self.curr ... self.curr += self.prev ... self.prev = value ... return value ... >>> f = fib() >>>
list(islice(f, 0, 10)) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

Note that this class is both an iterable (because it sports an __iter__() method), and its own iterator (because it has a __next__() method).

上面的英文原文出處。

https://nvie.com/posts/iterators-vs-generators/