首页 > 其他 > 详细

迭代器与可迭代对象

时间:2019-12-15 22:32:51      阅读:93      评论:0      收藏:0      [点我收藏+]

可迭代对象: 实现了__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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!