• 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]
    
  • 相关阅读:
    32位系统最大只能支持4GB内存之由来
    无线传感器网络中的节点定位技术
    Python 面向对象编程(一)
    Eclipse+PyDev+Django+Mysql搭建Python web开发环境
    Python中的函数(二)
    关于raw_input()和sys.stdin.readline()的区别
    Python中的函数(三)
    将Sublime Text 2搭建成一个好用的IDE
    Windows Phone 7 Tips (1)
    Expression Blend 知识锦分享
  • 原文地址:https://www.cnblogs.com/heenhui2016/p/12489453.html
Copyright © 2020-2023  润新知