什么是迭代器
迭代是python中访问集合元素的一种非常强大的一种方式。迭代器是一个可以记住遍历位置的对象,因此不会像列表那样一次性全部生成,而是可以等到用的时候才生成,因此节省了大量的内存资源。迭代器对象从集合中的第一个元素开始访问,直到所有的元素被访问完。迭代器有两个方法:iter()和next()方法。
什么是可迭代的对象
类似于list、tuple、str 等类型的数据可以使用for …… in…… 的循环遍历语法从其中依次拿到数据并进行使用,我们把这个过程称为遍历,也称迭代。python中可迭代的对象有list(列表)、tuple(元组)、dirt(字典)、str(字符串)set等。除此之外,也可以创建一个可迭代的对象:只要此对象含有__iter__方法,那么它就是一个可迭代的对象,如果还含有__next__()方法,那么它就是迭代器。
创建一个迭代器
需要实现__iter__()和__next()__方法
class Fabonaci:
def __init__(self, num):
self.num = num
self.count = 0
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
if self.count < self.num:
ret = self.a
self.a, self.b = self.b, self.a + self.b
self.count += 1
return ret
else:
raise StopIteration
if __name__ == "__main__":
fb = Fabonaci(5)
for v in fb:
print(v)
创建一个可迭代对象
只需要实现__iter__()方法
class Iter:
def __init__(self, num):
self.num = num
def __iter__(self):
return Fabonaci(self.num)
class Fabonaci:
def __init__(self, num):
self.num = num
self.count = 0
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
if self.count < self.num:
ret = self.a
self.a, self.b = self.b, self.a + self.b
self.count += 1
return ret
else:
raise StopIteration
if __name__ == "__main__":
it = iter(Iter(5))
while True:
print(next(it))
程序中将Iter(5)转换成了迭代器,所以可以使用next()方法遍历其元素;但Iter(5)本是只是一个可迭代的对象,可以直接用for循环遍历里面的元素。