IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

[Article] Introduction aux itérateurs et aux générateurs


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut [Article] Introduction aux itérateurs et aux générateurs
    Bonjour à tous,

    Je vous propose un article d'introduction aux itérateurs et aux générateurs.

    Bonne lecture

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Salut,

    Je vais encore apprendre des choses, merci

  3. #3
    Membre expérimenté Avatar de cervo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 220
    Par défaut

    Merci beaucoup !

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonsoir et bravo tout d'abord pour ce tutoriel,

    J'ai apprécié la partie itérateurs, mais je dois avouer que je suis un peu rester sur ma fin quand aux générateurs...

    Je m'explique,

    Dans la partie itérateur, tu exprimes la façon dont on crée un itérateur à l'aide de la méthode __iter__, très bien ! Cependant tu ne le fais pas pour la création d'un générateur sur cette même méthode en utilisant le mot clé yield, c'est dommage car ça permet au lecteur de comparer les deux codes

    Pour rester cohérent avec ce que tu as écris j'aurais fait cela...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class MonGenerateur(object):
      def __init__(self, obj):
        self.obj = obj
        self.length = len(obj)
        self.count = 0
     
      def __iter__(self):
        ind = 0
        while True:
            try:
              current = self.obj[ind]
              yield current
              ind += 2
            except IndexError:
                raise StopIteration
     
    if __name__ == "__main__":
        chaine = "hello_world"
        ma_classe_generateur = MonGenerateur(chaine)
        generateur = ma_classe_generateur.__iter__()
        try:
          for idx in range(len(chaine)):
            print(next(generateur))
        except StopIteration:
            print("fin d'iteration")
    Autre chose, j'ai remarqué une faible indentation (2 espaces), dans le fond ce n'est pas grave, mais si je l'ai remarqué ça en choquera sans doute d'autres, même si je sais très bien que c'est une convention, ça me gêne un peu.

    J'ai apprécié la partie où tu parles du module itertools, ça me semble incontournable car le meilleur exemple d'utilisation des générateurs...

    On peut aussi spécifier qu'un générateur est un itérateur, ce qui n'est pas forcément réciproque pour l'inverse.

    Tu pourrais aussi lire la PEP 3114 Je pense clairement que maintenant la version 3.x est aboutie et quelle doit devenir la version à enseigner par défaut.

    En revanche, si un débutant peut très bien se passer de les connaître, ce n'est pas le cas des développeurs confirmés.
    Je ne suis pas d'accord, débutant ou pas, c'est un incontournable, que fait-on avec une boucle for ? On parle bien d'itérer une séquence, c'est une base algorithmique. Quand tu dis débutant, nous ne prenons pas en compte que des autodidactes, nous sommes bien d'accord ?

  5. #5
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Bonjour à tous,

    Heureux que le sujet plaise

    ALors sinon, pour le post un peu plus grand

    Citation Envoyé par fred1599 Voir le message
    Autre chose, j'ai remarqué une faible indentation (2 espaces), dans le fond ce n'est pas grave, mais si je l'ai remarqué ça en choquera sans doute d'autres, même si je sais très bien que c'est une convention, ça me gêne un peu.
    Effectivement, j'ai l'habitude de respecter la convention a 4 espaces. C'est un petit soucis que je vais résoudre rapidement. Sûrement un problème de copier/coller.

    Citation Envoyé par fred1599 Voir le message
    Je ne suis pas d'accord, débutant ou pas, c'est un incontournable, que fait-on avec une boucle for ? On parle bien d'itérer une séquence, c'est une base algorithmique. Quand tu dis débutant, nous ne prenons pas en compte que des autodidactes, nous sommes bien d'accord ?
    Je me doutais que cela prêterai à confusion. Je veux sous entendre que l'on peut très bien utiliser justement des boucles FOR en Python sans savoir comment cela fonctionne derrière. Et je suis personnellement un autodidacte et ai peu être une vision différente effectivement.

    En tout cas je te remercie pour tes retours que je tâcherais de prendre en compte pour une mise à jour

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Et je suis personnellement un autodidacte et ai peu être une vision différente effectivement.
    J'y suis aussi Mais c'est vrai que sur les forums, les débutants en python travaillant avec les listes par exemple retrouvent assez rapidement la notion d'itérer et d'itérable... Maintenant je comprend où tu veux en venir, mais si ça prête à confusion, peut-être que le tourner autrement serait souhaitable pour lever l'ambiguïté, en indiquant que son utilisation est assez naturelle sans avoir vraiment de notions d'algorithmie. À toi de voir

  7. #7
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    J'y suis aussi Mais c'est vrai que sur les forums, les débutants en python travaillant avec les listes par exemple retrouvent assez rapidement la notion d'itérer et d'itérable... Maintenant je comprend où tu veux en venir, mais si ça prête à confusion, peut-être que le tourner autrement serait souhaitable pour lever l'ambiguïté, en indiquant que son utilisation est assez naturelle sans avoir vraiment de notions d'algorithmie. À toi de voir
    Effectivement, je ne m'en suis pas soucié pendant longtemps et cela ne m'a pas empêché de monter en compétence . Cependant, il est vrai qu'expliqué tel que tu le fait, cela peut permettre de lever des ambiguité. Et comme déjà dit, je savais que ce point avait besoin d'être amélioré.

    J'espère avoir le temps de faire une vague de mise à jour de mes tutos debut 2016. Je n'en oublierais aucuns Merci beaucoup

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo