迭代器是访问集体内元素的一种方式,一般用来遍历数据
迭代器和以下标的访问方式不一样,迭代器是不能返回的,迭代器提供了一种惰性方式数据的方法(即不像list一样,一次性把所有数据存储,而是每次临时生成一个数据)
可迭代对象 实现了 __iter__魔法函数(例如list,是一个可迭代的对象)
而迭代器实现了不仅实现了__iter__(可以通过继续Iterator类而不用在自己定义的类内部重新定义),还要实现__next__方法
from collections.abc import Iterable, Iterator class Company: def __init__(self, employ_list): self.employ = employ_list # def __getitem__(self, item): # return self.employ[item] def __iter__(self): # 因为实现这个方法,所以Company类的对象是可迭代的对象 return MyIterator(self.employ) # 这个方法要返回一个迭代器 class MyIterator(Iterator): # 继承了Iterator类 def __init__(self, employ_list): self.employ_list = employ_list self.index = 0 def __next__(self): # 实现__next__方法,从而使整个MyIterator类是个迭代器 try: person = self.employ_list[self.index] except IndexError: raise StopIteration self.index += 1 return person if __name__ == '__main__': company = Company(['john', 'mary', 'sam']) company_itor = iter(company) # 如果生成company对象的类Company不是可迭代对象,这步会报错 for employ in company: # company_itor是可迭代的,可以就算Company类没有__getitem__方法也可以遍历 print(employ)