可迭代对象: 实现了__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)
posted on 2019-12-15 22:05  显示账号  阅读(198)  评论(0编辑  收藏  举报