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语言函数定义、函数声明、函数调用以及extern跨文件的变量引用
    c语言局部变量 静态局部变量 全局变量与静态全局变量
    Source Insight建工程之Kernel
    day49
    管道实例取出最常用的10个指令
    day52
    Linux中vi的使用
    vi高级技巧
    vim配置
    typedef
  • 原文地址:https://www.cnblogs.com/heenhui2016/p/12489453.html
Copyright © 2011-2022 走看看