以下整理自《流畅的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__方法,因此迭代器也可以迭代。
Sign in to make a reply
dserz
以下整理自《流畅的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__方法,因此迭代器也可以迭代。