我定义了一个可迭代的列表 i 。如代码所示,当调用 __ iter __()方法时,将返回迭代器。但是当我将其 next()方法调用四次时,它只会打印四次,而不是1,2,3,4次。
>>> i=[1,2,3,4]
>>> i.__iter__
<method-wrapper '__iter__' of list object at 0x04040378>
>>> i.__iter__()
<listiterator object at 0x040561F0>
>>> i.__iter__().next()
1
>>> i.__iter__().next()
1
>>> i.__iter__().next()
1
>>> i.__iter__().next()
1
所以我做了一些打击:)
>>>ite=i.__iter__()
>>>ite.next()
1
>>>ite.next()
2
>>>ite.next()
3
>>>ite.next()
4
>>> ite.next()
Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
ite.next()
StopIteration
有人能告诉我这两种方式的区别吗? Tx很多:)
答案 0 :(得分:4)
每次调用__iter__
时,都会得到一个新的迭代器。在第一个示例中,您调用__iter__
四次,因此您将获得四个新迭代器,并且每次调用next
一次,因此您始终获得第一个值。在你的第二个例子中,你只调用__iter__
一次,所以你只得到一个迭代器,并在同一个迭代器上调用next
四次,所以你得到了所有四个值。