最近又开始学习Python了,但是在遇到迭代器对象、可迭代对象、生成器对象的时候,感到十分懵逼,所以上B站查了下,本文主要参考对象:15分钟彻底搞懂迭代器、可迭代对象、生成器【python迭代器】,有空的话可以看看,up主讲得挺清楚的。
迭代器对象
首先来看迭代器对象的定义:
- 类中定义了__iter__和__next__方法
- __iter__方法返回self,也就是自身
- __next__方法返回下一个数据,如果没有数据了,则要返回StopIteration的异常(一定要定义什么时候结束迭代,否则就会像没有break的while True循环一样,一直进行下去)
举个例子:
class ItRange():
def __init__(self,num):
self.num = num
self.counter = -1 # 注意,counter是从-1开始的,所以第一次调用__next__函数,会返回0
def __iter__(self):
return self
def __next__(self):
self.counter += 1
if self.counter == self.num: # 如果迭代次数超过num,则触发异常StopIteration,停止迭代,并返回属性counter
raise StopIteration()
return self.counter
ItRange这个类满足了上述的三点要求,是一个迭代器对象。
obj = ItRange(3) # 设置迭代次数上限是3
print(next(obj)) # 输出0, 等价于 obj.__next__() 都是在调用obj这个实例中的__next__方法,