我不明白为什么 __iter__
特殊方法只返回调用它的对象(如果它是在迭代器上调用的)。它本质上只是一个标志,表明该对象是一个迭代器吗?
编辑:实际上,我发现“这是允许容器和迭代器与 for
和 in
语句一起使用所必需的。” https://docs.python.org/3/library/stdtypes.html#iterator.iter
好吧,我是这样理解的:在编写 for
循环时,您可以指定要循环的可迭代对象或迭代器。但是 Python 最终需要一个用于循环的迭代器,因此它会根据给定的任何内容调用 __iter__
方法。如果它被赋予一个迭代器,__iter__
方法将产生一个迭代器,如果它被赋予一个迭代器,__iter__
方法同样会产生一个迭代器(给定的原始对象).
最佳答案
当您使用 for x in something
循环某些内容时,循环实际上首先调用了 iter(something)
,因此它有一些可以使用的东西。一般来说,for 循环大约等同于这样的东西:
something_iterator = iter(something)
while True:
try:
x = next(something_iterator)
# loop body
except StopIteration:
break
因此,正如您自己已经弄清楚的那样,为了能够遍历迭代器,即当 something
已经是一个迭代器时,迭代器应该在调用 iter() 时始终返回自己
在他们身上。所以这基本上确保了迭代器也是可迭代的。
关于python - __iter__ 返回迭代器对象本身的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487773/