【问题标题】:What happend when i assign an iterator to a variable当我将迭代器分配给变量时会发生什么
【发布时间】:2017-09-15 04:54:55
【问题描述】:

我定义了一个列表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

谁能告诉我这两种方式的区别?发送很多:)

【问题讨论】:

  • 您在第一个版本中要求 四个迭代器
  • 谢谢你。我明白了。

标签: python iterator next


【解决方案1】:

每次调用__iter__ 时,都会得到一个新的迭代器。在您的第一个示例中,您调用了四次 __iter__,因此您将获得四个新的迭代器,并且您每次调用一次 next,因此您总是获得第一个值。在您的第二个示例中,您调用了一次 __iter__,因此您只获得了一个迭代器,并且您在同一个迭代器上调用了四次 next,因此您获得了所有四个值。

【讨论】:

  • 哦,我的错。四个迭代器位于不同的地址;谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多