迭代器
1、可迭代对象:我们把可以通过for...in...这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象(Iterable)
from collections.abc import Iterable print(isinstance(判断对象,Iterable)) #返回True,说明是可迭代对象,False不是
一个具备了__iter__
方法的对象,就是一个可迭代对象
from collections.abc import Iterable class Mylist(object): def __init__(self): self.container = [] def add(self,item): self.container.append(item) def __iter__(self): """返回一个迭代器""" pass mylist = Mylist() print(isinstance(mylist, Iterable))
2、iiter()函数与nex()函数
list、tuple等都是可迭代对象,我们可以通过iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使用next()函数来获取下一条数据。iter()函数实际上就是调用了可迭代对象的__iter__
方法。
3、迭代器
判断一个对象是否是迭代器
当我们对迭代器使用next()函数的时候,迭代器会向我们返回它所记录位置的下一个位置的数据。实际上,在使用next()函数的时候,调用的就是迭代器对象的__next__
方法(Python3中是对象的__next__
方法,Python2中是对象的next()方法)。所以,我们要想构造一个迭代器,就要实现它的__next__
方法。但这还不够,python要求迭代器本身也是可迭代的,所以我们还要为迭代器实现__iter__
方法,而__iter__
方法要返回一个迭代器,迭代器自身正是一个迭代器,所以迭代器的__iter__
方法返回自身即可
一个实现了__iter__
方法和__next__
方法的对象,就是迭代器:
示例:
class Fibonacci(object): """斐波那契数列迭代器""" def __init__(self,n): self.n = n self.second = 0 # 保存当前生成数列中的第几个数 self .num1 = 0 # 设置初始值 self.num2 = 1 def __iter__(self): return self def __next__(self): if self.second < self.n: num = self.num1 self.num1,self.num2 = self.num2,self.num1+self.num2 self.second += 1 return num else: raise StopIteration if __name__ == '__main__': fi = Fibonacci(10) for i in fi: print(i)