可迭代对象: 实现了__iter__协议的对象就叫可迭代对象
迭代器 : 继承了Iterator的类或者说实现__iter__和__next__协议的对象就叫着迭代器
二者的关系: 使用迭代器去遍历可迭代对象 (理解起来跟java一样的)
下面是个示例
from collections.abc import Iterator # 自定义一个迭代器 class MyIterator(Iterator): """继承Iterator类就是一个迭代器""" def __init__(self, employee_list): self.iter_list = employee_list self.index = 0 # 通过index维护当前索引,以便next时取下一个值 def __next__(self): '''真正返回迭代值的逻辑''' try: employee = self.iter_list[self.index] except IndexError: raise StopIteration # 通过这个异常结束迭代器 self.index += 1 return employee # 自定义一个可迭代对象 class Company: def __init__(self, employee_list): self.employee_list = employee_list def __iter__(self): '''实现了这个方法,就是一个可迭代对象''' return MyIterator(self.employee_list) if __name__ == '__main__': """测试代码""" company = Company(['admin', 'root', 'jet']) # 使用迭代器遍历可迭代对象 # iterator = iter(company) # while 1: # try: # print(next(iterator)) # except StopIteration: # pass # 在python中使用迭代器遍历感觉比java low,还不如使用for in 方便, 因为ror语句内部已经帮我们处理了StopIteration异常 # for.. in , 发现了个快捷键 iter for item in company: print(item)
日拱一卒无有尽,功不唐捐终入海