Discuss / Python / 可迭代对象与迭代器的对比

可迭代对象与迭代器的对比

Topic source

dserz

#1 Created at ... [Delete] [Delete and Lock User]

以下整理自《流畅的Python》一书。

问:如何判断对象是否为iterable? 

答:从Python 3.4开始,检查对象x能否迭代,最准确的方法是:调用iter(x)函数,如果不可迭代,则会抛出异常:“TypeError: 'C' is not iterable.”。这比使用isinstance(x, abc.Iterable)更准确。因为iter(x)函数会考虑到遗留的__getitem__方法,而abc.Iterable类则不考虑。

可迭代对象:

使用iter内置函数可以获取迭代器的对象。如果对象实现了能返回迭代器的__iter__方法,那么对象就是可迭代的。序列都可以迭代,实现了__getitem__方法,而且其参数是从零开始的索引,这种对象也可以迭代。

迭代器:

实现了无参数的__next__方法,返回序列中的下一个元素;如果没有元素了,那么抛出StopIteration异常。 Python中的迭代器还实现了__iter__方法,因此迭代器也可以迭代。


  • 1

Reply