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]
    
  • 相关阅读:
    C#拾遗(一、基本类型)
    JS正则表达式的test()方法检查汉字
    从程序员到项目经理(一)
    程序员基本素质要求
    似乎比较快
    Qt常用类
    QT 获取窗口 大小 信息
    QT 获取屏幕尺寸的法子
    Qt中 QString 和int, char等的“相互”转换
    qt 读取xml文件
  • 原文地址:https://www.cnblogs.com/heenhui2016/p/12489453.html
Copyright © 2011-2022 走看看