【发布时间】:2015-09-09 19:32:18
【问题描述】:
我不明白为什么__iter__ 特殊方法只返回它所调用的对象(如果它是在迭代器上调用的)。它本质上只是一个标志,表明该对象是一个迭代器吗?
编辑:实际上,我发现“这是允许容器和迭代器与 for 和 in 语句一起使用所必需的。” https://docs.python.org/3/library/stdtypes.html#iterator.iter
好吧,我是这样理解的:在编写for 循环时,您可以指定一个可迭代对象或一个要循环的迭代器。但 Python 最终需要一个循环迭代器,因此它会调用 __iter__ 方法,无论它给定什么。如果给它一个迭代器,__iter__ 方法将产生一个迭代器,如果给它一个迭代器,__iter__ 方法同样会产生一个迭代器(给定的原始对象)。
【问题讨论】:
-
它只返回相同的对象如果该对象是一个迭代器。如果对象是一个iterable,那么
__iter__可以返回一些其他将成为迭代器的对象。见this question。 -
但如果它是一个迭代器,我仍然不明白你为什么要让它自己返回。
-
您需要返回一个迭代器,您可以将其传递给
next以获取下一个对象。如果实例实现了__next__,则可以返回实例本身。 -
你的问题是“为什么迭代器是可迭代的”?
标签: python python-3.x