>>> from collections import Iterator, Iterable
>>> help(Iterator)
Help onclassIterator:classIterator(Iterable)| Methodresolutionorder:| Iterator| Iterable| builtins.object |**注解:從這里可以看出Iterable繼承自object, Iterator繼承自Iterable。| Methods defined here:|| __iter__(self)|| __next__(self)| Return the next item from the iterator. When exhausted, raise StopIteration
......
>>> help(Iterable)
Help onclass Iterable:class Iterable(builtins.object)| Methods defined here:|| __iter__(self)
......
classIterator:def__init__(self):self.start=-1def__next__(self):self.start +=2if self.start >10:raise StopIterationreturn self.startI = Iterable()
for i in I:print(i)
classIterable:def__iter__(self):return Iterator()classIterator:def__init__(self):self.start=-1def__next__(self):self.start +=2return self.startI = Iterable()
for count, i in zip(range(5),I): #也可以用內置函數enumerate來實現計數工作。print(i)
我們通過range來實現打印多少個元素,這里表示打印5個元素,返回結果和上面一致。
當然,我們可以把這兩個類合并在一起,這樣實現程序的簡練。 最終版本如下
classIterable:def__iter__(self):return selfdef__init__(self):self.start=-1def__next__(self):self.start +=2if self.start >10:raise StopIterationreturn self.startI = Iterable()
for i in I:print(i)
復制迭代器 迭代器是一次性消耗品,使用完了以后就空了,請看。
>>> L=[1,2,3]
>>> I=iter(L)
>>> for i in I:
... print(i, end='-')
...1-2-3-
>>>next(I)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
StopIteration