【问题标题】:Does Python provide "free" default iterators? [duplicate]Python 是否提供“免费”的默认迭代器? [复制]
【发布时间】:2011-10-30 00:24:21
【问题描述】:

可能重复:
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__ 的类将被视为具有已定义的迭代器?也欢迎任何其他关于这可能导致的怪异的信息。

【问题讨论】:

  • @Ned 谢谢,这就是我要找的东西,但找不到。啊,搜索词的挑剔本质。

标签: python iterator default


【解决方案1】:

如果一个类没有__iter__,但有__getitem__,则迭代机制将使用连续整数调用它,直到用完为止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多