可迭代对象: 实现了__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)
来源:https://www.cnblogs.com/z-qinfeng/p/12046264.html