【问题标题】:Why does making a class iterable produce this output? [duplicate]为什么让一个类可迭代会产生这个输出? [复制]
【发布时间】:2012-02-27 01:12:17
【问题描述】:

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

class b:
    def __getitem__(self, k):
        return k

cb = b()

for k in cb:
    print k

我得到了输出:

0
1
2
3
4
5
6
7
8
.....

遍历类 b 的实例,发出整数。这是为什么呢?

(在看Why does defining __getitem__ on a class make it iterable in python?时遇到了上面的程序)

【问题讨论】:

  • 您为什么发布与您链接的问题完全相同并且已经在那里得到完美回答的问题?
  • @Rob 在那篇文章中,我很难弄清楚为什么要输出整数
  • 事后看来,我应该在发布此问题之前查看 getitem 的语义

标签: python iterable


【解决方案1】:

因为通过将连续索引传递给对象的__getitem__ 方法,为定义__getitem__ 但不定义__iter__ 的对象实现了for 循环。见the effbot。 (IIUC 背后真正发生的事情要复杂一些:如果对象不提供__iter__,则在对象上调用iter,而iter 返回的迭代器会调用底层对象的__getitem__.)

【讨论】:

    猜你喜欢
    • 2017-12-06
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多