<分区>
对于通常使用 Java、C++ 等编程的人来说,获取迭代器的“直观”方法类似于 list.iterator()
。
为什么 Python 的人选择将它作为像 len()
这样的通用函数(结果是 iter(list)
而不是 list.iter ()
)?
对于构造的长度也可以问同样的问题 (len()
)。
<分区>
对于通常使用 Java、C++ 等编程的人来说,获取迭代器的“直观”方法类似于 list.iterator()
。
为什么 Python 的人选择将它作为像 len()
这样的通用函数(结果是 iter(list)
而不是 list.iter ()
)?
对于构造的长度也可以问同样的问题 (len()
)。
最佳答案
iter()
支持不同类型的对象。
您可以传入序列(支持长度和项目访问)或可迭代对象(通过调用 obj.__iter__()
生成迭代器)或迭代器(返回 self
来自 __iter__
)。
Java list.iter()
然后由 Python 中的 list.__iter__()
服务,但是 iter()
函数允许更多类型。您可以使用 __iter__
方法自定义行为,但如果您改为实现序列,事情仍然有效。
还有第二种形式的函数,其中传入了一个可调用对象和一个标记:
iter(fileobj.readline, '')
通过调用 readline()
方法遍历文件对象,直到它返回一个空字符串(等于第二个参数,哨兵)。
然后是Principle of Least Astonishment争论; iter()
为标准库提供了一个稳定的 API 调用来标准化,就像运算符一样;无需查找类的文档来查看它是否实现了 obj.iter()
或 obj.iterator()
或 obj.get_iterator()
.
关于python - 为什么 iter 不是实例的方法而 __iter__ 是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25201717/