通过单个属性实现“迭代器协议”的对象不会被识别为可迭代

时间:2017-10-23 14:29:30

标签: python python-3.x methods iterator

在Python 3 documentation中,迭代器协议的定义如下:

  

迭代器对象本身需要支持以下内容   两种方法,它们共同构成迭代器协议

     

iterator.__iter__()

     

返回迭代器对象本身。这是允许容器和迭代器与for和in语句一起使用所必需的。   此方法对应于类型结构的tp_iter槽   Python / C API中的Python对象。

     

iterator.__next__()

     

从容器中返回下一个项目。如果没有其他项,请提高StopIteration异常。这种方法对应于   Python中对象的类型结构的tp_iternext槽   Python / C API。

我尝试通过单个对象属性实现它:

class Empty: pass
o = Empty()
o.__iter__ = lambda: o
o.__next__ = lambda: 42
for i in o: print(i)

得到TypeError

TypeError: 'Empty' object is not iterable

有什么问题?在for循环中,是否有关于哪些对象可用作 iterable 的精确规则?

0 个答案:

没有答案