编程语言
首页 > 编程语言> > python – 为什么它不是实例的方法而__iter__是?

python – 为什么它不是实例的方法而__iter__是?

作者:互联网

参见英文答案 > Why does Python code use len() function instead of a length method?                                    8个
为通常使用Java,C等编程的人获取迭代器的“直观”方法就像list.iterator().

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

同样的问题也可以询问构造的长度(len()).

解决方法:

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

您可以传入一个序列(支持长度和项访问)或一个iterable(通过调用obj .__ iter __()生成一个迭代器)或一个迭代器(从__iter__返回self).

然后,Java list.iter()由Python中的list .__ iter __()提供服务,但iter()函数允许更多类型.您可以使用__iter__方法自定义行为,但如果您实现了序列,那么事情仍然有效.

还有一个函数的第二种形式,其中传入一个callable和一个sentinel:

iter(fileobj.readline, '')

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

然后就是Principle of Least Astonishment的论点; iter()为标准库提供了一个稳定的API调用来标准化,就像运算符一样;无需查看类的文档以查看它是否实现了obj.iter()或obj.iterator()或obj.get_iterator().

标签:python,iterator,python-internals
来源: https://codeday.me/bug/20190624/1277732.html