反復可能オブジェクトと反復

1449 ワード

反復器は集団内の要素にアクセスする方法であり、一般的にデータを巡回するために使用されます.
反復器は以下のラベルのアクセス方式とは異なり、反復器は返すことができません.反復器はlistのようにすべてのデータを一度に格納するのではなく、一時的に1つのデータを生成する不活性な方法を提供します.
反復可能オブジェクトが実装されました_iter__魔法関数(listなど、反復可能なオブジェクト)
反復器が実現したのは実現しただけではない.iter__(自分で定義したクラス内で再定義することなく、Iteratorクラスを継続することができます)、さらに_next__方法
from collections.abc import Iterable, Iterator
class Company:
    def __init__(self, employ_list):
        self.employ = employ_list

    # def __getitem__(self, item):
    #     return self.employ[item]

    def __iter__(self):               #         ,  Company           
        return MyIterator(self.employ)   #             


class MyIterator(Iterator):             #    Iterator 
    def __init__(self, employ_list):
        self.employ_list = employ_list
        self.index = 0

    def __next__(self):             #   __next__  ,     MyIterator      
        try:
            person = self.employ_list[self.index]
        except IndexError:
            raise StopIteration
        self.index += 1
        return person


if __name__ == '__main__':
    company = Company(['john', 'mary', 'sam'])
    company_itor = iter(company)    #     company    Company       ,     
    for employ in company:          # company_itor     ,    Company   __getitem__       
        print(employ)