itertools.cycle().next()?

48

我曾经在Python 2.6.6中使用itertools.cycle().next()方法,但现在我更新到3.2后发现itertools.cycle()对象没有next()方法。

我在Spinner类的spin()方法中使用它来循环一个字符串。所以如果我们循环元组('|', '/', '-', '\\', '|', '/', '-'),它会打印:|/-\|/-|/等等...

我已经搜索了Python 3.0、3.1和3.2的发布说明,但没有注意到任何改变。这是什么时候改变的?有没有简单的替代方法来实现与以前相同的功能?

提前感谢您。


5
这个滑稽的 cycle 使用案例值得点赞。 - Fred Foo
2个回答

74

iter.next() 在Python 3中已被删除,请使用next(iter)代替。因此,在您的示例中,将 itertools.cycle().next() 改为 next(itertools.cycle())

这里有一个很好的例子,以及其他各种到Python 3转换的技巧,还比较了Python 2.x与Python 3.x中各种next()习惯用法。


2
你的回答和@Sven的几乎相同(好吧,我知道,这不可能有什么不同),但你的链接拯救了你的回答。我不知道http://diveintopython3.org/…… 已经收藏了!感谢您的回答和链接 :) - Paulo Freitas
是的 - 我们大约同时回答了。很高兴你觉得这个链接有用,我也发现它是一个很好的参考。 - d0ugal
为什么删除了 iter.next() - Kurt Mueller
1
@KurtMueller 一个简单的网络搜索就能得到答案:https://www.python.org/dev/peps/pep-3114/ 当你不知道某些东西时,别忘了使用网络搜索。 - David Heffernan
链接已经失效了。有没有人能找到并更新一下链接呢?谢谢。 - Bowen Liu
链接现在已经失效 - Mohammed Shareef C

17

在Python 3.x中,迭代器已经不再使用it.next()了。现在应该使用next(it),这个方法也适用于Python 2.6或以上的版本。实际上,这个方法在Python 2.x中会调用it.next(),而在Python 3.x中则会调用it.__next__()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接