zoukankan      html  css  js  c++  java
  • 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]
    
  • 相关阅读:
    编程之美---求数组中最长递增子序列
    编程之美----子数组的最大乘积
    编程之美----寻找数组中的最大值和最小值
    编程之美---找符合条件的整数
    编程之美----最大公约数问题
    编程之美----1的数目
    编程之美----寻找发帖“水王”
    C语言 |= &= 位运算
    整型数类型定义
    extern使用方法总结!(转)
  • 原文地址:https://www.cnblogs.com/heenhui2016/p/12489453.html
Copyright © 2011-2022 走看看