Browsed by
标签:生成器

搞清楚 Python 的迭代器、可迭代对象、生成器

搞清楚 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__() 方法,这里返回的是一个列表迭代器,所以说列表就是一个可迭代对象。

阅读全文