web-dev-qa-db-fra.com

Comment obtenir une valeur à la fois à partir d'une fonction de générateur en Python?

Question très basique - comment obtenir une valeur d'un générateur en Python?

Jusqu'à présent, j'ai trouvé que je pouvais en obtenir un en écrivant gen.next(). Je veux juste m'assurer que c'est la bonne façon?

89
bodacydo

Oui, ou next(gen) en 2.6+.

120

Dans Python <= 2.5, utilisez gen.next(). Cela fonctionnera pour toutes les versions Python 2.x, mais pas Python 3.x

Dans Python> = 2.6, utilisez next(gen). Il s'agit d'une fonction intégrée et plus claire. Cela fonctionnera également dans Python 3.

Ces deux éléments finissent par appeler une fonction spécialement nommée, next(), qui peut être remplacée par un sous-classement. Dans Python 3, cependant, cette fonction a été renommée en __next__(), pour être cohérente avec les autres fonctions spéciales.

55
Christian Oudard

C'est la bonne façon de procéder.

Vous pouvez également utiliser next(gen).

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

9
recursive

Utiliser (pour python 3)

next(generator)

Voici un exemple

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

devrait imprimer

0
1
6
dshri

Dans python 3 vous n'avez pas gen.next (), mais vous pouvez toujours utiliser next (gen). Un peu bizarre si vous me demandez mais c'est comme ça.

1
Niki.py