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)
  • 相关阅读:
    REST-framework快速构建API--生成Swagger接口文档
    Django后端彻底解决跨域问题
    Zabbix实战-简易教程--DB类--ClickHouse
    Django权限控制进阶
    django自定义rbac权限组件(二级菜单)
    jQuery事件委托
    model中的Meta类
    django中ModelForm解决多表单组合显示问题
    Django请求的生命周期
    AJAX
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12046264.html
Copyright © 2011-2022 走看看