【问题标题】:itertools.cycle().next()?itertools.cycle().next()?
【发布时间】:2011-07-11 09:23:44
【问题描述】:

嗯,我在 Python 2.6.6 中使用 itertools.cycle().next() 方法,但现在我更新到 3.2,我注意到 itertools.cycle() 对象没有方法 next()

我用它在Spinner 类的spin() 方法中循环一个字符串。因此,如果我们循环元组('|', '/', '-', '\\', '|', '/', '-'),它将打印:|/-\|/、@9876543@33@、|、@9876等等……

我搜索了 Python 3.0、3.1 和 3.2 的发行说明,并没有发现任何变化。什么时候改变了?是否有任何简单的替代方法可以实现与以前相同的功能?

提前谢谢你。

【问题讨论】:

  • cycle 这个有趣的用例 +1 :)

标签: python-3.x cycle next itertools


【解决方案1】:

iter.next() 在 python 3 中被删除。改用next(iter)。因此,在您的示例中,将 itertools.cycle().next() 更改为 next(itertools.cycle())

有一个good example here 以及其他各种移植到 python 3 的技巧。它还比较了 python 2.x 与 python 3.x 中的各种其他 next() 习语

【讨论】:

  • 您的回答与@Sven 几乎相同(嗯,我知道,不可能不同),但您的链接保存了您的答案。我不知道diveintopython3.org...收藏了!感谢您的回答和链接。 :)
  • 是的 - 我们几乎同时回答。很高兴您发现该链接很有用,我发现它是一个很好的参考。
  • 为什么iter.next() 被删除了?
  • @KurtMueller 一个简单的网络搜索就能得出答案:python.org/dev/peps/pep-3114 当你不知道的时候别忘了使用网络搜索
  • 链接已失效。任何人都可以找到并更新链接吗?谢谢。
【解决方案2】:

在 Python 3.x 中,迭代器不再有 it.next()。请改用next(it),它也适用于 Python 2.6 或更高版本。在内部,这将在 Python 2.x 中调用 it.next(),在 Python 3.x 中调用 it.__next__()

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 2016-08-11
    • 2019-02-12
    • 2016-07-10
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 2017-06-17
    • 2020-12-05
    相关资源
    最近更新 更多