Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comprendre la documentation python

    21 mars 2019 à 20:35:58

    Bonjour à tous , désolé pour la question de base mais je ne comprend pas la doc python  tant qu'elle ne fournit pas un exemple concret .

    Ainsi je suis intéressé théoriquement par la fonction

    parse

    que j'aie trouvé dans la "fameuse" doc python

    Alors voici ce que j'aie fait dans l'interpréteur python

    saltz@saltz-OptiPlex-780:~$ python3
    Python 3.6.8 |Anaconda custom (64-bit)| (default, Dec 30 2018, 01:22:34) 
    [GCC 7.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import string
    >>> string.hexdigits
    '0123456789abcdefABCDEF'   # ok la machine me renvoie quelque chose
    >>> test = Formatter()   # 1 ère tentative je voudrais crée une instance test mais cela ne fonctionne pas
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'Formatter' is not defined
    >>> Formatter.parse('A1213pokl') # 2 ème tentative je voudrais transformer la string A1213pokl en tuple afin de pouvoir boucler dedans plus tard ...
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'Formatter' is not defined
    >>> 
    

    Pour l'instant , la doc python , je n'accroche pas ; je la trouve abstraite et donc toutes les très fonctions qui sont dedans aussi ....

    Que faire pour mieux l'interpréter ?

    -
    Edité par Saltz 21 mars 2019 à 20:36:16

    • Partager sur Facebook
    • Partager sur Twitter
      21 mars 2019 à 21:19:31

      Mieux connaitre la philosophie du langage (s'accrocher ça prend relativement du temps)

      Pour ce qui est du présent exemple tu as importé le module string ce qui te permet d'accéder à son contenu mais pas de la manière dont tu le fais:

      #option 1 (importe l'accès au module via string.attribute c'est souvent préférable pour éviter au maximum les conflits de noms)
      import string
      i = string.Formatter()
      i.parse("banane")
      
      #option 2 (importe seulement Formatter en local)
      from string import Formatter
      i = Formatter()
      i.parse("banane")
      
      
      #option 3 (importe l'ensemble du module en local)
      from string import *
      i = Formatter()
      i.parse("banane")
      



      -
      Edité par Coliculus 22 mars 2019 à 10:52:16

      • Partager sur Facebook
      • Partager sur Twitter
        21 mars 2019 à 21:21:33

        test = string.Formatter()
        après c'est une classe très peu utilisée, et parse, je ne sais pas s'il est intéressant pour vous, mais si vous voulez découvrir la documentation, vous êtes pas tombé sur l'exemple le plus facile pour l'apprendre, car on utilise une chaîne de caractères assez spécifique représentant le formatage de chaînes.
        • Partager sur Facebook
        • Partager sur Twitter

        Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
        La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

          21 mars 2019 à 21:50:57

          Et pourquoi cela renvoie une instance d'objet et pas un tuple ?De ce que je comprend de la fonction parse , elle est censée renvoyer

          un itérable de tuples ...

          En gros je m'attendais un tuple de ce genre

          mon_tuple = i.parse("banane")
          print(mon_tuple)
          >>>(b,a,n,a,n,e)   # mais je n'obtiens rien de tout cela ...

          et le type de l'objet quand je regarde dedans avec la fonction type() n'est pas un tuple mais un
          <class 'formatteriterator'>

          • Partager sur Facebook
          • Partager sur Twitter
            21 mars 2019 à 22:43:58

            Ce serait plutôt :

            mon_iterable = i.parse("banane")
            une_liste_de_tuples = list(mon_iterable)

            Ici l'itérable est un générateur, tu n'as peut-être pas encore vu ça.

            -
            Edité par thelinekioubeur 21 mars 2019 à 22:45:28

            • Partager sur Facebook
            • Partager sur Twitter
              22 mars 2019 à 0:10:43

              Saltz a écrit:

              Et pourquoi cela renvoie une instance d'objet et pas un tuple ?De ce que je comprend de la fonction parse , elle est censée renvoyer

              un itérable de tuples ...

              En gros je m'attendais un tuple de ce genre

              mon_tuple = i.parse("banane")
              print(mon_tuple)
              >>>(b,a,n,a,n,e)   # mais je n'obtiens rien de tout cela ...

              et le type de l'objet quand je regarde dedans avec la fonction type() n'est pas un tuple mais un
              <class 'formatteriterator'>

              Là c'est plus un problème de langue française qu'autre chose. Si ça renvoie "un itérable de tuples", ça renvoie... Un itérable, qui contient des tuples.

              Après, ton premier post laisse penser que tu es plutôt débutant, donc c'est normal que la doc soit difficile à aborder à ce stade, parce qu'elle suppose une connaissance du langage que tu n'as pas encore.

              • Partager sur Facebook
              • Partager sur Twitter

              Blond, bouclé, toujours le sourire aux lèvres...

                22 mars 2019 à 8:48:55

                Effectivement , je viens de m'apercevoir qu'il me manque la notion d'itérables (et son corollaire les notions d'itérateurs générateur) .

                Finalement j'aie trouvé ceci en python

                motdepasse = '564ffg64'
                for caracters in motdepasse:
                    print(caracters)

                Je pensais qu'il fallait que je transforme ma string en tuple ou en liste pour pouvoir itérer dedans .Mais non ....

                Ceci étant , je ne comprend toujours pas à quoi la fonction

                parse

                sert concretement intégrée à un programme avec un but clair  ? Je me suis fié au mot anglais qui traduit en français veut dire "analyser" , "faire l'analyse grammaticale" .Donc choisir cette fonction m'a parut probant pour analyser une string .

                Pour l'instant mon problème de fond n'est pas résolu , je ne sais toujours pas  lire une doc python .Par effet de bord , j'aie le même problème avec tous les nouveaux modules et les docs qui les accompagnent .C'est souvent difficile de comprendre l'utilité des fonctions qui sont dedans .



                Finalement après relecture des différents intervenants voici mon exemple , ou je trouve le résultat plus exploitable .

                Ce que je reproche aux docs , c'est l'absence d'exemple . Quelquefois les fonctions ont besoin de s'articuler entre elle .

                La il me manquait la fonction list pour avoir un objet exploitable que m'a indiqué thelinekioubeur

                #! /usr/bin/python
                # -*- coding: utf-8 -*-
                #option 1 (importe l'accès au module via string.attribute c'est souvent préférable pour éviter au maximum les conflits de noms)
                import string
                i = string.Formatter()
                i.parse("banane")
                 
                #option 2 (importe seulement Formatter en local)
                from string import Formatter
                i = Formatter()
                i.parse("banane")
                 
                 
                #option 3 (importe l'ensemble du module en local)
                from string import *
                i = Formatter()
                mon_iterable= i.parse("banane")
                une_liste_de_tuples = list(mon_iterable)
                print(une_liste_de_tuples)

                Je suis toutefois surpris de la tête de ma liste avec un tuple dedans  qui m'affiche 3 none supplémentaires .

                [('banane', None, None, None)]
                [Finished in 0.0s]





                -
                Edité par Saltz 22 mars 2019 à 9:23:36

                • Partager sur Facebook
                • Partager sur Twitter
                  22 mars 2019 à 9:07:12

                  Bah c'est bien expliqué dans la doc : la méthode parse est utilisée par la méthode vformat, elle-même utilisée par la méthode format.

                  Dans 99% des cas on utilise en fait la méthode format de la classe str :

                  chaine = "J'ai mangé {} pomme(s)"
                  chaine_formatee = chaine.format(5)
                  print(chaine_formatee)  # J'ai mangé 5 pomme(s)
                  

                  Ce qui est équivalent à :

                  import string
                  
                  chaine = "J'ai mangé {} pomme(s)"
                  formatter = string.Formatter()
                  chaine_formatee = formatter.format(chaine, 5)
                  print(chaine_formatee)  # J'ai mangé 5 pomme(s)

                  Bien sur on n'utilise jamais cette deuxième version, mais la première.

                  En bref comme dit a doc, la classe Formatter est donnée pour pouvoir définir nos propres comportements de formatage. Mais si tu débute ce n'est clairement pas utile pour le moment. Moi même je n'en ai jamais eu besoin, str.format étant déjà suffisant.

                  J'ai pensé que tu as peut-être été trompé par le nom "string" de ce module. Le type python pour les chaînes de caractères c'est str, pas string.

                  https://docs.python.org/fr/3.7/library/stdtypes.html#textseq

                  -
                  Edité par thelinekioubeur 22 mars 2019 à 11:01:47

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 mars 2019 à 10:13:25

                    Merci thelinekioubeur
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Comprendre la documentation python

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown