搞清楚 Python 的迭代器、可迭代对象、生成器
很多伙伴对 Python 的迭代器、可迭代对象、生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助。
1 迭代器协议
迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了。
所谓迭代器协议,就是要求一个迭代器必须要实现如下两个方法
iterator.__iter__()
Return the iterator object itself.
iterator.__next__()
Return the next item from the container.
也就是说,一个对象只要支持上面两个方法,就是迭代器。__iter__()
需要返回迭代器本身,而 __next__()
需要返回下一个元素。
2 可迭代对象
知道了迭代器的概念,那可迭代对象又是啥呢?
这个更简单,只要对象实现了 __iter__()
方法,并且返回的是一个迭代器,那么这个对象就是可迭代对象。
比如我们常见的列表就是可迭代对象
>>> l = [1, 3, 5]
>>> iter(l)
<list_iterator object at 0x101a1d9e8>
使用 iter() 会调用对应的 __iter__()
方法,这里返回的是一个列表迭代器,所以说列表就是一个可迭代对象。