Python提供“免费”默认迭代器吗?

时间:2011-08-18 17:43:24

标签: python iterator default

  

可能重复:
  Why does defining getitem on a class make it iterable in python?

我有一个类,它基本上是python列表的包装器。在这个课程中,我定义了__getitem____setitem____len__。我没有为这个课程定义__iter__

当我离开时:

thing = ListWrapper(range(4))
for i in thing :
    print i

我得到了输出:

0
1
2
3

哪个好,但是我期待某种错误消息说python找不到迭代器。我给了文档一个外观,找不到任何引用默认迭代器的东西。此外,跟踪PyDev中的代码表明它每次迭代都调用__getitem__方法。

我想知道在我的代码中依赖这种行为是否是一种好习惯。在这一点上,这对我来说并不合适。 Python是否保证将具有__getitem____len__的类视为具有已定义的迭代器?关于这可能导致的任何其他古怪信息也是受欢迎的。

1 个答案:

答案 0 :(得分:3)

如果一个类没有__iter__,但确实有__getitem__,那么迭代机制会用连续的整数调用它,直到它用完为止。