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


113

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 manière?

Réponses:



66

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

En Python> = 2.6, utilisez next(gen). C'est une fonction intégrée, et c'est plus clair. Cela fonctionnera également en Python 3.

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


16

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


2

Pour obtenir la valeur associée à un objet générateur en python 3 et supérieur, utilisez next(<your generator object>). les appels suivants à next () produisent des valeurs d'objet successives dans la file d'attente.


1

En 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
Ce n'est pas si étrange. Python 3 est censé casser les choses et n'autoriser que le meilleur code plus clair. Ne pas avoir de compatibilité descendante est le point de quelques changements de rupture.
Tatarize le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.