Python 为什么iter不是一个实例的方法,而iter是? 为通常在爪哇、C++等程序中的人获得迭代器的“直觉”方式类似于“代码>列表”迭代器()/。p>

Python 为什么iter不是一个实例的方法,而iter是? 为通常在爪哇、C++等程序中的人获得迭代器的“直觉”方式类似于“代码>列表”迭代器()/。p>,python,iterator,python-internals,Python,Iterator,Python Internals,为什么Python的人选择将它作为一个通用函数,比如len()(这会导致iter(list),而不是list.iter()) 构造的长度也可以问同样的问题(len()) iter()支持不同类型的对象 您可以传入序列(支持长度和项访问)或iterable(通过调用obj.\uu iter\uuu())生成迭代器)或迭代器(从\uu iter\uuuu>返回self) Javalist.iter()然后由Python中的list.\uuuuu iter\uuuuu()提供服务,但是iter()函数

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

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

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

您可以传入序列(支持长度和项访问)或iterable(通过调用
obj.\uu iter\uuu()
)生成迭代器)或迭代器(从
\uu iter\uuuu>返回
self

Java
list.iter()
然后由Python中的
list.\uuuuu iter\uuuuu()
提供服务,但是
iter()
函数允许更多类型。您可以使用
\uuu iter\uuu
方法自定义行为,但是如果您实现了一个序列,事情仍然可以正常进行

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

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


然后是论点
iter()
为标准库提供了一个稳定的API调用,以实现标准化,就像操作人员所做的那样;无需查看该类的文档,查看它是否实现了
obj.iter()
obj.iterator()
obj.get_iterator()

也与此相关:@Shookie:这一点,对于核心语言特性,最好使用一个后修复函数,就像存在用于做算术的操作符一样。您不是在寻找
(4.3)。也可以用(1.4)
除以u;你用
4.3/1.4
来代替。我不明白你的论点。使用
varioustypeofobject.iter()
?@KarolyHorvath:当然,用同样的方法,你可以在任何地方执行
obj.length()
。和
int.divide()
float.add()
。但通过使用运算符和后期修复函数,您可以提供更丰富、更一致的API。我不明白为什么它会更丰富、更一致。两种方法都可以使用运算符。对我来说,这看起来像是一个语言设计决策,这两条路都通向一种丰富而一致的语言。你能举个例子吗?你为什么认为这是个问题?这只是一种不同的语法。示例决策:您没有实现它,它附带了一种语言,它是一个内置的,就像python中的一样。它调用适当的dunder magic函数或任何需要的函数,就像在python中一样。但是,同样,如果您想将解决方案与标准库一起提供,您甚至可以在基本
对象中实现通用
iter()