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 类的实例,发出整数。这是为什么?
(在查看为什么在类上定义 __getitem__ 使其在 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 类的实例,发出整数。这是为什么?
(在查看为什么在类上定义 __getitem__ 使其在 python 中可迭代时遇到上述程序? )
因为for循环是为定义__getitem__但不是__iter__通过将连续索引传递给对象__getitem__方法的对象实现的。见effbot。(IIUC 背后真正发生的事情要复杂一些:如果对象不提供__iter__,则iter在对象上调用 then ,返回的迭代器iter调用底层对象的__getitem__。)