zoukankan      html  css  js  c++  java
  • 迭代器与可迭代对象

    可迭代对象: 实现了__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)
  • 相关阅读:
    贮油点问题(C++)
    二维数组操作
    二的幂次方(递归)
    [haoi2009]巧克力
    距离最远的牛
    ssh注解basedao简单的实现
    @service中构造方法报错
    spring注解 构造函数问题
    json与gson
    AsyncTask异步类的简单操作
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12046264.html
Copyright © 2011-2022 走看看