我理解标准说它确实如此,但我试图找到其根本原因.
如果它只是总是返回self它的需要?
您显然总是可以访问该对象,因为您正在调用iter该对象,那么需要它有什么需要?
想象一下,你想编写迭代任何迭代的代码.通常你只是写一个for陈述或理解,但是让我们明确地做一些for有用的事情,让事情变得更加明显:
i = iter(iterable)
while True:
try:
val = next(i)
except StopIteration:
break
else:
do_stuff(val)
Run Code Online (Sandbox Code Playgroud)
如果你不做第一行,你的代码将无法使用列表,字符串,元组或除迭代器之外的任何东西.
但是,如果您执行第一行,那么iter(iterable)最好返回迭代器,否则您的代码将无法与迭代器一起使用.
你可能想知道为什么iter不能在没有这个的情况下做正确的事情?毕竟,它确实因为有一个对象的时候有它的魔力来创建一个迭代器__len__和__getitem__,但没有__iter__,那么为什么不能也有魔法刚刚返回它的参数,如果它有一个__next__,但没有__iter__?这是一个语言设计问题,但一般来说,Python试图尽可能少地使用魔法.使非完全序列可迭代的魔力是必要的,因为在迭代协议被添加到语言之前存在这样的序列(在广泛的第三方代码中),并且为了简化事物的微小好处而去除它太难了.