可迭代对象 和 迭代器

迭代器是访问集体内元素的一种方式,一般用来遍历数据

迭代器和以下标的访问方式不一样,迭代器是不能返回的,迭代器提供了一种惰性方式数据的方法(即不像list一样,一次性把所有数据存储,而是每次临时生成一个数据)


可迭代对象 实现了 __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)

你可能感兴趣的:(python)