可迭代对象
:实现了__iter__()
方法的对象,它的__iter__()
方法可以返回一个迭代器对象
迭代器对象
:实现了__next__()
方法的对象,它的__iter__()
方法可以返回迭代器对象本身
比如列表就是一个可迭代对象
from collections import Iterable, Iterator
l = [1,2,3,4,5]
print(type(l))
print(isinstance(l,Iterable))
print(isinstance(l,Iterator))
print(dir(l))
结果是列表是一个可迭代的对象,它有__iter__()
方法,但是它不是一个迭代器
<class 'list'>
True
False
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
__iter__()
可以返回一个迭代器对象,这里列表调用这个方法,返回一个迭代器对象
from collections import Iterable, Iterator
l = [1,2,3,4,5]
l = l.__iter__()
print(isinstance(l,Iterator))
print(dir(l))
print(next(l))
print(l.__next__())
迭代器有__next__()
方法
True
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__']
1
2
for循环遍历迭代器实际上是通过调用迭代器__next__
方法实现的
一个对象只要实现了__iter__()
与__next__()
方法就是一个迭代器
网友评论