Iterator & Iterable
迭代器是访问集合内元素的一种方式, 一般用来遍历数据
迭代器Iterator和以下标的访问方式不一样, 迭代器是不能返回的, 迭代器提供了一种惰性方式数据的方式.
list内部只实现了__iter__,而没有实现__next__,list是iterable,但不是迭代器。
自己定义可迭代对象的时候,注意设计模式,不要把可迭代对象和迭代器混在一个class里,用单独的迭代器去管理index,设置__next__,在可迭代对象里只要__iter__返回一个迭代器就好
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| from collections.abc import Iterator
class Company(object): def __init__(self, employee_list): self.employee = employee_list
def __iter__(self): return MyItera·tor(self.employee)
# def __getitem__(self, item): # return self.employee[item]
class MyIterator(Iterator): def __init__(self, employee_list): self.iter_list = employee_list self.index = 0
def __next__(self): #真正返回迭代值的逻辑 try: word = self.iter_list[self.index] except IndexError: raise StopIteration self.index += 1 return word
if __name__ == "__main__": company = Company(["tom", "bob", "jane"]) my_itor = iter(company) # while True: # try: # print (next(my_itor)) # except StopIteration: # pass
# next(my_itor) for item in company: print (item)
|