欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自定义迭代器

程序员文章站 2022-03-15 19:36:26
...

from collections import Iterable

class StudentList(object):

# 构造方法 __init__ 默认先创建一个保存数据的列表
def __init__(self):
    # 创建一个空的list列表,保存的实例属性items中
    self.items = list()

# __iter__方法
def __iter__(self):
    # 返回迭代器
    stu_iterator = StudentIterator(self.items)

    return stu_iterator

# addItem 方法,用于向对象中添加数据
def addItem(self, item):
    # 把值追加到列表中
    self.items.append(item)
    print(self.items)

创建迭代器

1) 类中必须有 iter 方法

2) 类中必须有 next 方法

class StudentIterator(object):

def __init__(self, items):
    # 保存要迭代的数据到 迭代器
    self.items = items

    # 定义变量,保存当前迭代的位置
    self.current_index = 0

def __iter__(self):
    return self

# 当调用 next(迭代器)
def __next__(self):

    # 判断当前位置是否到了末尾
    if self.current_index < len(self.items):
        # 获取下标对应的元素值
        item = self.items[self.current_index]

        # 索引位置+1
        self.current_index += 1

        return item
    else:
        # 停止迭代
        raise StopIteration

if name == ‘main’:

# 实例化对象
stu_list = StudentList()

# 添加值,保存到对象
stu_list.addItem("a")
stu_list.addItem("b")
stu_list.addItem("c")


# 判断对象是否可迭代
res = isinstance(stu_list, Iterable)
print(res)
#
# for value in stu_list:
#     print(value)
# 获取可迭代对象的迭代器
stu_iterator = iter(stu_list)
# 获取值  __next__
value = next(stu_iterator)
print(value)

value = next(stu_iterator)
print(value)
相关标签: 迭代器