zoukankan      html  css  js  c++  java
  • 类中的迭代器__iter__


    什么是迭代器
      有iter()函数返回,可以通过next(it)函数取值的对象就是迭代器

    迭代器协议
      迭代器协议是指对象能够使用next函数获取下一项数据,在没有下一项数据时触发一个StopIteration异常来终止迭代的约定

    迭代器协议实现方法:
      __next__(self) 方法来实现迭代器协议

    语法形式:
      class MyIterator:
        def __next__(self):
          迭代器协议
        return 数据
    什么是可迭代对象:
      是指能用iter(obj) 函数返回迭代器的对象(实例)
      可迭代对象内部需要定义__iter__(self) 方法来返回迭代器对象

    class MyList:
        def __init__(self, iterable=()):
            self.data = [x for x in iterable]
    
        def __repr__(self):
            return "MyList(%s)" % self.data
    
        def __iter__(self):
            return MyListIterator(self.data)        #创建迭代器并且返回
    
    
    class MyListIterator:
    
        def __init__(self, lst):
            self.data_lst = lst
            self.cur_index = 0          #迭代器访问的起始位置
    
        def __next__(self):
            if self.cur_index >= len(self.data_lst):     #判断如果当前的索引大于长度时,则抛出异常
                raise StopIteration
            i = self.data_lst[self.cur_index]
            self.cur_index += 1
            return i
    
    myl = MyList([2,3,4,5])
    it = iter(myl)
    print(next(it))
    print(next(it))
    print("------")
    
    for x in myl: 
        print(x) 
    
    
    输出结果:
    tarena@tedu:~/zengsf/827$ python3 exercise827_2.py
    2
    3
    ------
    2
    3
    4
    5
  • 相关阅读:
    Java中的四种内部类
    用输入/输出写一个程序,让用户输入一些姓名和电话号码
    分批读取大数据问题
    Linux产生序列数字
    两个有序链表的合并
    int和Integer的区别
    wait()和sleep()的区别
    Unix和Windows文件格式转化
    截取字符串的代码实现
    查看系统信息
  • 原文地址:https://www.cnblogs.com/zengsf/p/9551192.html
Copyright © 2011-2022 走看看