iterable和iterator区别
文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 一、iterable(可迭代对象)
- 二、iterator(迭代器)
- 三、iter()和next()函数
- 四、for循环的本质
Iterable类是指具有__iter__()方法的类,它需要返回一个iterator来迭代数据,比如:
class Mylist:
def __init__(self, num):
self.num = num
def __iter__(self):
return MyIterator(self.num)
二、iterator(迭代器)
Iterator类是指具有__iter__()和__next__()方法的类,比如:
class MyIterator:
def __init__(self, num):
self.list = [i for i in range(num)]
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.list):
result = self.list[self.index]
self.index += 1
return result
else:
raise StopIteration
三、iter()和next()函数
iter()就是通过__iter__获取迭代器, next()本质就是通过迭代器的__next__方法获取值,直至遇到StopIteration异常。
for num in Mylist(10):
print(num)
等价于
mylist = Mylist(10)
iterator = iter(mylist)
while True:
try:
num = next(iterator)
print(num)
except StopIteration as e:
break
四、for循环的本质
for item in Iterable 循环的本质就是先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。
for item in Iterator 循环的迭代器,不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束



