python迭代协议

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)
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2022 Chenhao Li

请我喝杯咖啡吧~

支付宝
微信