2017-04-19 22 views
2

我定义了一个列表 i,它是可迭代的。如代码所示,当调用 __iter __()方法时,将返回一个迭代器。但是,当我拨打下一个()方法四次时,它只打印四次,而不是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

您在第一个版本中要求*四个迭代器*。 – user2357112

+0

谢谢你。我知道了。 – yikayiyo

回答

4

每当您拨打__iter__时,您会得到一个新的迭代器。在你的第一个例子中,你拨打__iter__四次,所以你得到了四个新的迭代器,并且你每次调用next一次,所以你总是得到第一个值。在第二个示例中,您只需调用__iter__一次,因此只能获得一个迭代器,并且您在同一个迭代器上调用next四次,因此您可以获得全部四个值。

+0

哦,我的坏。四个迭代器在不同的地址; D谢谢。 – yikayiyo

相关问题