python - __iter__ 返回迭代器对象本身的目的是什么?

标签 python python-3.x

我不明白为什么 __iter__ 特殊方法只返回调用它的对象(如果它是在迭代器上调用的)。它本质上只是一个标志,表明该对象是一个迭代器吗?

编辑:实际上,我发现“这是允许容器和迭代器与 forin 语句一起使用所必需的。” 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/

相关文章:

python - 我正在尝试使用(?(ID/NAME)...)找出正则表达式

python - 提取列表中找到的子列表的索引

python - * 之后的 add() 参数必须是序列,而不是 Settings

python - 在 OSX Lion 10.7.3 上安装 pyUSB 0.4.3

python-3.x - 为什么我的 Flask 应用程序在使用 `python app.py` 执行时可以工作,但在使用 `heroku local web` 或 `flask run` 时却不能工作?

python - 如何处理大量小部件的 QPropertyAnimation

python - 字典内棘手的列表操作

python - 在Python中查找两个列表之间单个不同元素的索引的有效方法

python - 如果列表中的一个条目的键包含另一列中的字符串,则选择该条目

基于Python SSH的基于Web的远程目录/文件查看器