为什么iter不是实例的方法而__iter__是



对于通常用Java、c++等编程的人来说,获得迭代器的"直观"方式是list.iterator()

为什么Python的人选择把它作为一个通用函数,像len()(这导致iter(list)而不是list.iter())?

同样的问题也可以用于构造体的长度(len())。

iter()支持不同类型的对象

可以传入序列(支持长度和项访问)或可迭代对象(通过调用obj.__iter__()产生迭代器)或迭代器(从__iter__返回self)。

Java list.iter()然后由Python中的list.__iter__()提供,但是iter()函数允许更多类型。你可以用__iter__方法自定义行为,但如果你实现了一个序列,的东西仍然会工作

还有第二种形式的函数,其中传入一个可调用对象和一个哨兵:

iter(fileobj.readline, '')

通过调用readline()方法迭代一个文件对象,直到它返回一个空字符串(等于第二个参数,哨兵)。

则有最小惊奇原则论证;iter()为标准库提供了一个稳定的API调用来进行标准化,就像操作符一样;不需要查找类的文档来查看它是否实现了obj.iter()obj.iterator()obj.get_iterator()

最新更新