python协程初步---一个迭代器的实现

Posted saintdingspage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python协程初步---一个迭代器的实现相关的知识,希望对你有一定的参考价值。

一般认为迭代器就是实现了两个方法__iter__和__next__

  • 先创建这样一个类
from collections import Iterable
from collections import Iterator

class classiterable(object):
    def __iter__(self):
        pass
    def __next__(self):
        pass


class mycoach(object):
    def __init__(self):
        pass
    def addname(self):
        pass
    def __iter__(self):
        return classiterable()
cpc = mycoach()

print("类对象可以被迭代" if isinstance(cpc,Iterable) else "无法被迭代")

 

输出结果:

类对象可以被迭代

通过在mycoach类的方法__iter__中返回classiterable实现了mycoach和classiterable类之间的联系

  • 实现classiterator访问mycoach类中的属性
from collections import Iterable
from collections import Iterator

class classiterable(object):
    def __init__(self,obj):
        self.obj = obj
        self.count = 0 #添加一个计数器,确保按顺序遍历数组

    def __iter__(self):
        pass
    def __next__(self):
        #防止迭代过头
        if self.count<len(self.obj.coachname):
            ret = self.obj.coachname[self.count]
            self.count+=1
            return ret
        else:
            raise StopIteration

class mycoach(object):
    def __init__(self):
        self.coachname=[]
    def addname(self,name):
        self.coachname.append(name)
    def __iter__(self):
        return classiterable(self)
cpc = mycoach()
cpc.addname(陈培昌)
cpc.addname(程劲)
cpc.addname(徐晓冬)
for i in cpc:
    print(i)
print("类对象可以被迭代" if isinstance(cpc,Iterable) else "无法被迭代")

输出结果:

陈培昌
程劲
徐晓冬
类对象可以被迭代
  • 完全进化版本---mycoach内部实现__next__魔术方法
class mycoach(object):
    def __init__(self):
        self.coachname=[]
        self.count=0
    def addname(self,name):
        self.coachname.append(name)
    def __iter__(self):
        return self
    def __next__(self):
        if self.count<len(self.coachname):
            ret = self.coachname[self.count]
            self.count+=1
            return ret
        else:
            raise StopIteration


cpc = mycoach()
cpc.addname(陈培昌)
cpc.addname(程劲)
cpc.addname(徐晓冬)
for i in cpc:
    print(i)
print("类对象可以被迭代" if isinstance(cpc,Iterable) else "无法被迭代")

输出结果:

陈培昌
程劲
徐晓冬
类对象可以被迭代

 

以上是关于python协程初步---一个迭代器的实现的主要内容,如果未能解决你的问题,请参考以下文章

python协程函数应用 列表生成式 生成器表达式

python协程初步---一个生成器的实现

python基础-------迭代器,生成器,协程函数

python基础----迭代器生成器协程函数

Unity3D的协程1——初步理解背后的迭代器

10.迭代器/生成器/协程函数/列表生成器