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__
。)