for循环是对容器进行迭代的过程
什么是迭代?
迭代就是从某个容器对象中逐个读取元素,直到容器对象中没有更多元素为止。
哪些对象支持迭代操作?
实现了__iter__方法,并返回一个迭代器
什么是迭代器?
实现了__next__方法
>>> a=[1,2,3]
>>> b=a.__iter__() # 有__iter__方法说明a是个可迭代对象
>>> b
<list_iterator object at 0x7febdb2c5898>
>>> b.__next__() # 有__next__方法说明b是个迭代器
1
>>> b.__next__()
2
>>> b.__next__()
3
>>> b.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIterationfor语句实现循环步骤
- 判断对象是否是可迭代对象,不是可迭代对象直接报错,抛出TypeError异常,是可迭代对象则调用__iter__方法,并返回一个迭代器对象。
- 迭代器对象调用__next__方法,每次按序从迭代器中取一个值
- 当迭代器中没有更多元素时,抛出StopIteration异常
自定义迭代器
class MyRange:
def __init__(self, num):
self.num = num
self.i = 0
def __iter__(self):
"""告诉解释器我是可以返回迭代器的,迭代器就是我自己,没有__iter__方法时MyRange是一个迭代器不是一个可迭代对象"""
return self
def __next__(self):
if self.i < self.num:
i = self.i
self.i += 1
return i
else:
raise StopIteration




Comments | NOTHING