如何从Python中的生成器中获取一个值?

bod*_*ydo 99 python generator

非常基本的问题 - 如何从Python中的生成器获取一个值?

到目前为止,我发现我可以写一个gen.next().我只是想确保这是正确的方法?

Ign*_*ams 132

是的,或next(gen)2.6+.

  • 我知道这很尴尬,为什么这不起作用?`W1 = params.next()` 但得到一个错误 `AttributeError: 'generator' object has no attribute 'next'` (5认同)
  • @CharlieParker 您必须使用 Python 3! (2认同)

Chr*_*ard 59

在Python <= 2.5中,使用gen.next().这适用于所有Python 2.x版本,但不适用于Python 3.x.

在Python> = 2.6中,使用next(gen).这是一个内置功能,更清晰.它也适用于Python 3.

这两个最终都会调用一个特殊命名的函数next(),它可以被子类化覆盖.但是,在Python 3中,此函数已重命名为__next__()与其他特殊函数一致.


rec*_*ive 10

这是正确的方法.

你也可以使用next(gen).

http://docs.python.org/library/functions.html#next


dsh*_*hri 10

使用(适用于python 3)

next(generator)
Run Code Online (Sandbox Code Playgroud)

这是一个例子

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)
Run Code Online (Sandbox Code Playgroud)

应该打印

0
1
Run Code Online (Sandbox Code Playgroud)


小智 5

要获取与 python 3 及更高版本中的生成器对象关联的值,请使用next(<your generator object>). 对 next() 的后续调用会在队列中生成连续的对象值。