迭代器和可迭代对象的区别
Python 中迭代器(Iterator)和可迭代对象(Iterable)有什么区别?如何判断一个对象是可迭代的?
回答
小字辈
可迭代对象:实现了 __iter__() 方法或 __getitem__() 方法的对象,可用在 for 循环中。如 list、tuple、str、dict、set。
迭代器:实现了 __iter__() 和 __next__() 方法的对象(迭代器协议)。迭代器是有状态的,遍历后耗尽。
from collections.abc import Iterable, Iterator
lst = [1, 2, 3]
print(isinstance(lst, Iterable)) # True
print(isinstance(lst, Iterator)) # False
it = iter(lst)
print(isinstance(it, Iterator)) # True
for x in obj 内部调用 iter(obj) 获取迭代器,然后不断调用 next()。