Como obter um valor de cada vez de uma função de gerador em Python?


113

Pergunta muito básica - como obter um valor de um gerador em Python?

Até agora descobri que posso conseguir um escrevendo gen.next(). Só quero ter certeza de que esse é o caminho certo.

Respostas:



66

Em Python <= 2.5, use gen.next(). Isso funcionará para todas as versões do Python 2.x, mas não para o Python 3.x

Em Python> = 2.6, use next(gen). Esta é uma função incorporada e é mais clara. Também funcionará no Python 3.

Ambos acabam chamando uma função especialmente nomeada next(), que pode ser substituída por uma subclasse. No Python 3, no entanto, essa função foi renomeada para __next__(), para ser consistente com outras funções especiais.


16

Use (para python 3)

next(generator)

Aqui está um exemplo

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

deve imprimir

0
1


2

Para obter o valor associado a um objeto gerador em python 3 e superior, use next(<your generator object>). chamadas subsequentes para next () produzem valores de objeto sucessivos na fila.


1

No python 3 você não tem gen.next(), mas ainda pode usar next(gen). Um pouco bizarro, se você me perguntar, mas é assim que é.


1
Não é tão estranho. Supõe-se que o Python 3 quebra as coisas e permite apenas códigos melhores e mais claros. Não ter compatibilidade com versões anteriores é o ponto de algumas mudanças importantes.
Tatarize de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.