什么是迭代器和可迭代對象
迭代器:凡是實現了__iter__()
和__next__()
(python2.x是next())方法的對象就是迭代器
可迭代對象:凡是能返回迭代器對象的對象就是可迭代對象
內建函數iter()會調用__iter__()
來獲取迭代器對象,所以可迭代對象必須實現__iter__()
自定義迭代器
class OddIterator(object):
"""Iterator to return all
odd numbers"""
def __init__(self, max):
self.max = max
self.num = 1
def __iter__(self):
return self
def __next__(self): # python 2.x 改成 next(self)
if self.num <= self.max:
num = self.num
self.num += 2
return num
else:
raise StopIteration
測試
>>> i = OddIterator(5)
>>> next(i)
1
>>> next(i)
3
>>> next(i)
5
迭代器可以直接調用next()方法
自定義可迭代對象
class OddNumber(object):
def __init__(self, max):
self.max = max
def __iter__(self):
return InfIter(self.max)
測試
>>> i = OddNumber(5)
>>> next(i)
Traceback (most recent call last):
File "test.py", line 53, in <module>
print next(i)
TypeError: instance has no next() method
因為OddNumber是可迭代對象,而不是一個迭代器,所以無法直接調用next()方法,必須先調用內建函數iter()獲取迭代器
>>> o = OddNumber(5)
>>> i = iter(o)
>>> next(i)
1
>>> next(i)
3
>>> next(i)
5