迭代器

迭代器是什么

迭代器是访问集合内元素的一种方式,一般用来遍历数据,迭代器和下标访问的方式不同,迭代器不能返回,且迭代器提供了一种惰性方式的数据获取方法

iter()函数可以将iterable变为 iterator

__iter__

返回一个iterator,如果实现了这个方法,则对象可迭代,如果未实现,Python 会去寻找__getitem__,如果实现了这个也是可迭代的

__next__

真正返回迭代器的值,接受一个迭代器类型,用于取值,对应next()方法

for 循环原理如下:

1
2
3
4
5
6
7
8
9
10
11
# my_itor = [1, 2, 3] # 会报错: TypeError: 'list' object is not an iterator
my_itor = iter([1, 2, 3])

for item in my_itor:
print(item)

while True:
try:
print(next(my_itor))
except StopIteration:
break

迭代器不支持切片

自定义迭代器

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
class MyIterator:
def __init__(self, data):
self.iter_list = data
self.index = 0

def __next__(self):
try:
word = self.iter_list[self.index]
except IndexError:
raise StopIteration
self.index += 1
return word


class Company:
def __init__(self, staffs):
self.staffs = staffs

def __iter__(self):
return MyIterator(self.staffs)


company = Company([1, 2, 3, 4])
for staff in company:
print(staff)

不要再业务类中实现__next__,单独定义一个迭代器来维护index