Python 实现迭代器

方法一: iter和next

for语句调用 iter()iter() 返回 __next__() 方法。返回所有的之后,引发 StopIteration 异常来终止。

于是可以自己写一个 __iter__()函数,返回 self, 写一个 __next__() 方法,每次返回下一个值,直到结束。

实例

class Student():
    def __init__(self,name,age):
        self.stu_list={}
        self.add_stu(name,age)
        self.index=len(self.stu_list)
    def add_stu(self,name,age):
        self.stu_list[name]=[name,age]
        self.index=len(self.stu_list)
    def __iter__(self):
        return self
    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index=self.index-1
        return self.stu_list[list(self.stu_list.keys())[self.index]]

实现了一个学生类,将学生名字作为key,value则是一个list,list中包含姓名和年龄。

s=Student('张华',19)
s.add_stu("李晓明",29)
s.add_stu("张茂",19)

此时s中是:

{'张华': ['张华', 19], '李晓明': ['李晓明', 29], '张茂': ['张茂', 19]}

经过使用for语句:

for i in s:
    print(i)

输出内容:

['张茂', 19]
['李晓明', 29]
['张华', 19]

方法二:使用生成器 Generator

class Student():
    def __init__(self,name,age):
        self.stu_list={}
        self.add_stu(name,age)
        self.index=len(self.stu_list)
    def add_stu(self,name,age):
        self.stu_list[name]=[name,age]
        self.index=len(self.stu_list)
    def itertool(self):
        for i in self.stu_list:
            yield self.stu_list[i]

同样是刚刚的用例,只是把其中的迭代工具改为itertool 注意其中的写法,yield 会记住上次到哪里了。

s=Student('张华',19)
s.add_stu("李晓明",29)
s.add_stu("张茂",19)

输入数据后,调用如下:

for i in s.itertool():
    print(i)

结果是:

['张华', 19]
['李晓明', 29]
['张茂', 19]
原文地址:https://www.cnblogs.com/heenhui2016/p/12489453.html