为什么Python Iterator需要一个只返回self的iter方法?

Sid*_*Sid 4 python iterator

我理解标准说它确实如此,但我试图找到其根本原因.

如果它只是总是返回self它的需要?

您显然总是可以访问该对象,因为您正在调用iter该对象,那么需要它有什么需要?

aba*_*ert 8

想象一下,你想编写迭代任何迭代的代码.通常你只是写一个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试图尽可能少地使用魔法.使非完全序列可迭代的魔力是必要的,因为在迭代协议被添加到语言之前存在这样的序列(在广泛的第三方代码中),并且为了简化事物的微小好处而去除它太难了.