首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >generator.next()在Python3中可见吗?

generator.next()在Python3中可见吗?
EN

Stack Overflow用户
提问于 2009-07-02 09:29:45
回答 3查看 147K关注 0票数 282

我有一个生成器,可以生成一个序列,例如:

代码语言:javascript
复制
def triangle_nums():
    '''Generates a series of triangle numbers'''
    tn = 0
    counter = 1
    while True:
        tn += counter
        yield tn
        counter += + 1

在Python 2中,我可以进行以下调用:

代码语言:javascript
复制
g = triangle_nums()  # get the generator
g.next()             # get the next value

然而,在Python3中,如果我执行相同的两行代码,我会得到以下错误:

代码语言:javascript
复制
AttributeError: 'generator' object has no attribute 'next'

但是,循环迭代器语法在Python 3中是有效的

代码语言:javascript
复制
for n in triangle_nums():
    if not exit_cond:
       do_something()...

我还没能找到任何东西来解释Python3的这种行为差异。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-02 10:15:53

g.next()已重命名为g.__next__()。这样做的原因是一致性:像__init__()__del__()这样的特殊方法都有双下划线(或当前术语中的“下划线”),而.next()是该规则的少数例外之一。此问题已在Python 3.0中修复。*

但是,使用next(g)而不是调用g.__next__()

*还有其他特殊属性得到了此修复;func_name,现在是__name__etc.

票数 463
EN

Stack Overflow用户

发布于 2009-07-02 09:31:19

尝试:

代码语言:javascript
复制
next(g)

请查看this neat table,它显示了2和3之间的语法差异。

票数 155
EN

Stack Overflow用户

发布于 2015-09-18 01:09:59

如果您的代码必须在Python2和Python3下运行,请使用2to3 six库,如下所示:

代码语言:javascript
复制
import six

six.next(g)  # on PY2K: 'g.next()' and onPY3K: 'next(g)'
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1073396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档