python中实现了__gititem__方法的对象就可迭代

发布于 / python / 2 条评论

颠覆了以前的认知,以前以为只有含有__iter__方法的对象才是可迭代的。近日在《流畅的python》一书中见到:实现了__gititem__方法的对象就可迭代

我当然不是很相信,于是自己测试了一下:

上述实现了一个简单的数组序列。测试发现真的可迭代。

此时我还是不太明白为什么实现了gititem就能够迭代,于是在Google上找了下果然发现了原因,在PEP 234中写着这样的话:

  1. An object can be iterated over with for if it implements __iter__() or __getitem__().
  2. An object can function as an iterator if it implements next().

即是说:

  1. 如果对象实现__iter__()  __getitem__()则是可以迭代该对象
  2. 如果一个对象实现next(),它可以作为迭代器

看到这个或字的时候,结果呼之欲出,python真是神奇。。。

转载原创文章请注明,转载自: adaptの小站 » python中实现了__gititem__方法的对象就可迭代

  1. cc

    👍学到了

  2. […] 此时能看到,在该对象中并没有实现 __next__()方法。也就是说它不是一个生成器/迭代器。它只是一个可迭代对象,因为此对象中实现了__getitem__ 和 __iter__ 方法。具体请参见这篇文章 […]