285 votes

Generator.next() n’est visible dans python 3.0 ?

J’ai un générateur qui produit une série, par exemple :

en python 2.6, je suis capable de faire les appels suivants :

Cependant dans 3.0 si j’exécute les mêmes deux lignes de code j’obtiens l’erreur suivante :

Mais, la syntaxe d’itérateur de boucle fonctionne dans la 3.0

Je n’ai pas été en mesure de trouver quoi que ce soit, mais qui explique cette différence de comportement pour 3.0.

467voto

Lennart Regebro Points 52510

Correct, g.next() a été renommé g.__next__(). La raison pour cela est d'avoir de consistance. Méthodes spéciales comme __init__() et __del__ ont tous un double soulignement (ou "dsous", comme c'est la mode de les appeler maintenant), et .next() est l'une des rares exceptions à cette règle. Python 3.0 correctifs. [*]

Mais au lieu d'appeler g.__next__(), comme Paolo dit, utiliser next(g).

[*] Il n'y a plus d'attributs spéciaux qui a obtenu ce correctif, comme les attributs des fonctions. Plus func_name, il est maintenant de __name__, etc.

156voto

Paolo Bergantino Points 199336

Essayez :

Découvrez cette table soignée qui montre les différences de syntaxe entre 2 et 3, lorsqu’il s’agit de cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X