Magazine Internet

python et les generator expressions

Publié le 05 septembre 2008 par Mikebrant

les generator expressions

Les generators expressions sont au python ce que le ménage est à la femme.

On va voir 2 façons d'utiliser les generator expressions .

La première façon de les utiliser est exactement la même que pour les list compréhensions ( jetez-y un oeil si vous ne savez pas ce que c'est ).

Voilà à quoi cela ressemble :

 monOpération( monExpression for maVariable in monObjet ) -> monResultat

Ça va donc nous permettre de générer un résultat, en effectuant monOpération sur l'ensemble des itérations de monObjet (et non à chaque itération) .
Et, à chaque itération, maVariable rentre  dans monExpression  .

Puisque c'est pas très clair pour vous, un bon exemple pour illustrer ceci :

#-*- coding:Utf-8 -*-
print sum( i*i for i in range(11) )


Et donc cette ligne va faire une somme de tous les :
sum( ( 0,1,4,9,16,25,36,49,64,81 ) )

Voilà , je rentrerai pas plus en détail dans cette 1° partie, mon article sur les list compréhensions l'ait suffisamment .

On peut  donc utiliser les generator expression autrement : comme son nom l'indique, on peut utiliser un generator expression en tant que generator (cf l'article dessus ) .
Cela nous évite alors de créer une fonction afin d'avoir notre generator .
De ce fait, tout pourra tenir sur une ligne et devenir incompréhensible, vous pourrez alors faire vos kékés : "ah t'arrives pas à comprendre ça, pov quiche lorraine " .

Voici la syntaxe :

( monExpression for maVariable in monObjet ) -> generator

Cela va nous renvoyer un generator ; et à chaque appel de next(), on va donc itérer monObjet et effectuer alors sur maVariable actuelle monExpression .

Et comme là aussi, vous n'avez rien compris ( je vous rassure moi non plus ) , un exemple :

#-*- coding:Utf-8 -*-
generator = ( i*i for i in range(11) )
for i in generator :
   print i
#ou
#for i in ( i*i for i in range(11) ) :
#   print i


Voilà, donc on crée notre generator .
A chaque appel de next(), on va itérer monObjet (qui est une liste contenant les nombres de  0 à 10  )  renvoyant i*i  .
J'ai mis la seconde méthode, plus compacte, en commentaires puisqu'elle est peut-être moins compréhensible aux premiers abords .

C'est terminé pour cette courte intro aux generator expressions


Retour à La Une de Logo Paperblog

LES COMMENTAIRES (2)

Par gargame
posté le 09 octobre à 02:01
Signaler un abus

Salut,

sympa tes articles sur Python .... sauf que je suis une femme, et que toi, t'as bien fait d'appeler ton appli Z3 jesuisunconnard ... :-) !!!

Par plonstic
posté le 28 mars à 19:46
Signaler un abus

merci, petite présentation simple mais efficace. Toutefois un xrange serait mieux pour garder l'interet d'un générateur.

A propos de l’auteur


Mikebrant 9 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte