Journal Publication de Python 3.0rc2

Posté par (page perso) .
Tags : aucun
13
7
nov.
2008
Nouveautés de Python 3 : http://docs.python.org/dev/3.0/whatsnew/3.0.html
ChangeLog complet : http://www.python.org/download/releases/3.0/NEWS.txt
Documentation : http://docs.python.org/dev/3.0/

Par rapport à 3.0rc1, il s'agit essentiellement de corrections de bugs. D'ailleurs, vu la quantité de bugs critiques (qui n'étaient -forcément- pas prévus), Python 3.0 a pris beaucoup de retard sur son planning. L'équipe Python préfère corriger tous les bugs plutôt que de sortir une version boguée qui dégoûterait les gens de Python 3.

Par rapport Python 2.5, Python 3.0 inclut tous les changements de Python 2.6. Piqûre de rappel :
http://linuxfr.org/2008/10/02/24556.html
http://docs.python.org/whatsnew/2.6.html

La version 3.0rc1 est sortie le 17 septembre et la version finale est prévue le 3 décembre.

Selon moi, le changement majeur de Python3 est le passage intégral à Unicode : par défaut les fichiers sont ouverts en mode texte en unicode, un script python est en utf-8 (unicode), on peut utiliser des identifiants en unicode (libre à vous d'écrire en japonais, français ou anglais, après ça dépend avec qui vous souhaitez travailler), et utilisation d'unicode dans la grande majorité des modules (la bibliothèque standard).
  • # English vs other languages

    Posté par (page perso) . Évalué à 4.

    , on peut utiliser des identifiants en unicode (libre à vous d'écrire en japonais, français ou anglais, après ça dépend avec qui vous souhaitez travailler)
    Question : est-ce vraiment une bonne pratique d'utiliser autre chose que de l'anglais dans le code d'un programme ? Question d'autant plus importante dans le contexte des logiciels libres où le code est amené à être réutilisé...
    • [^] # Re: English vs other languages

      Posté par . Évalué à 2.

      Aller hop, tout le monde programme en esperanto !
    • [^] # Re: English vs other languages

      Posté par (page perso) . Évalué à 5.

      Je pense que la fonction vise plutôt les formations dans la langue maternelle des élèves ou les entreprises qui développent du logiciel propriétaire. Pour un logiciel libre, bien que l'espéranto soit séduisant, l'anglais est la langue la plus répandue dans l'informatique. Un petit exemple pour la route :
      >>> nom = input("Nom ?")
      Victor
      >>> prénom = input("Prénom ?")
      Stinner
      >>> print("Bonjour {nom} {prénom}".format(nom=nom, prénom=prénom))
      Bonjour Victor Stinner

      Équivalent Python 2.x :
      >>> charset = "UTF-8"
      >>> nom = unicode(raw_input(u"Nom ?"), charset)
      Victor
      >>> prenom = unicode(raw_input(u"Prénom ?"), charset)
      Stinner
      >>> print(u"Bonjour {nom} {prenom}".format(nom=nom, prenom=prenom))
      Bonjour Victor Stinner

      C'est tout de suite plus laid non ? :-) L'orthographe ne peut pas être respectée, c'est dommage. Et encore, mon heuristique pour déterminer le charset du terminal est pourrite : c'est toujours UTF-8 :-) Il faudrait utiliser une fonction pour ça qui n'est pas incluse de base de dans Python 2.x :-/
      • [^] # Re: English vs other languages

        Posté par (page perso) . Évalué à 3.

        >> print("Bonjour {nom} {prénom}".format(nom=nom, prénom=prénom))

        Je ne connais rien à Python, mais j'ai quand même une question : pourquoi faut-il écrire 3 fois 'nom' et 3 fois 'prénom' alors que, dans certains langages, un simple 'print Bonjour $nom $prenom' (ou quelque chose de ressemblant) suffit ?
        • [^] # Re: English vs other languages

          Posté par (page perso) . Évalué à 2.

          Un truc dans le genre:

          >>> print("Bonjour {nom} {prénom}".format(**locals()))

          devrait marcher mais j'ai pas de python 3 sous la main pour tester.
        • [^] # Re: English vs other languages

          Posté par . Évalué à 1.

          >>> print 'bonjour' + ' ' + nom + ' ' + prénom
          • [^] # Re: English vs other languages

            Posté par . Évalué à 2.

            ce n'est plus possible en python 3, print étant devenu une fonction ça deviendrait :
            print( 'bonjour' + ' ' + nom + ' ' + prénom)

            et sinon en python 2.x j'aurais plutôt écrit :
            print 'bonjour' , nom , prénom
          • [^] # Re: English vs other languages

            Posté par (page perso) . Évalué à 4.

            Taratata ;-)


            print "Bonjour %s %s" % (nom, prenom)

            Forum Software Reviews: Comparez et testez les logiciels de forums Internet!

        • [^] # Re: English vs other languages

          Posté par (page perso) . Évalué à 4.

          En fait tu peut écrire facilement :

          >>> print("Bonjour {0} {1}".format(nom,prenom))

          L'idée de la fonction format c'est :

          1) soit tu passes les arguments par ordre, et tu les références par ordre "{0}".format('hibou')

          2) soit tu passes les arguments par mot clé et tu références par mot clé

          "{toto}".format(toto="hibou")

          3) evidemment, le passe par mot clé, c'est juste le passage d'une table de hashage (dictionnaire en python)

          hash = dict(nom='Bouchard',prénom="Guillaume")

          print("Bonjour {prénom} {nom}".format(**hash))

          (le ** est un peu magique, je n'ai jamais aimé...)

          • [^] # Re: English vs other languages

            Posté par (page perso) . Évalué à 3.

            Je m'auto répond à moi même.

            1) s/passe/passage
            2) il est possible de mélanger les deux méthodes (ordre et mot clé)

            dico = dict(nom="Bouchard",prénom="Guillaum")
            "{0} ! {prénom} {nom} est un {0}".format("hibou",**dico)

            3) cela permet d'introduire des formatages (je vous renvoi à la doc pour plus d'info [0])

            4) la raison qui fait que il n'y a pas d'interpolation de chaîne directe comme en PHP (echo "Bonjour $prenom $nom") est simple :

            a) Cela aurait demandé une modification du parseur. Ici il n'en est rien, ce n'est donc pas une notion du langage, mais seulement un outil de la librairie standard, le langage ne se complexifie pas (Python se veut simple). Si demain la fonction format doit évoluer, le parseur ne sera pas touché. De plus en tant que méthode, elle peut être surchargée sans syntaxe particulière.
            b) Cela évite de devoir introduire des chaînes interpolées et des chaînes sans (en PHP le " et le ' différencie ces deux types de chaîne). Python se veut éxplicite, donc on supprime cela (j'ai beaucoup rie à mes débuts en PHP quand j'ai écris echo "$nom est ".$nom; ce n'était pas du tout ce que j'attendais.

            J'aime vraiment cette fonction format de python ;)

            [0] http://docs.python.org/whatsnew/2.6.html#pep-3101-advanced-string-formatting

            N'hésitez pas à corriger mon orthographe, c'est comme cela que j'apprend ;)
        • [^] # Re: English vs other languages

          Posté par (page perso) . Évalué à 4.

          pourquoi faut-il écrire 3 fois 'nom' et 3 fois 'prénom'

          Euh, c'était juste pour l'exemple :-) Pour montrer que Python3 autorise unicode partout : aussi bien dans les chaînes de caractères sans avoir à les préfixer par "u" (unicode), dans les noms de variables, dans les noms d'arguments, etc. Habituellement, j'utilise "Bonjour %s %s" % (nom, prenom) (compatible avec toutes les versions de Python) ou "Bonjour {0} {1}".format(nom, prenom) quand je hacke Python 2.6 ou 3.0 :-) En fait c'est faux, je n'écris jamais nom, mais plutôt name :-)
        • [^] # Re: English vs other languages

          Posté par . Évalué à 1.

          >>> from string import Template
          >>> print Template('bonjour $nom $prenom').substitute(nom='archi', prenom='bald')
          bonjour archi bald
        • [^] # Re: English vs other languages

          Posté par . Évalué à 2.

          Parce que Python est mal fichu?

          Désolé, mais je considère que la gestion des 'template string' est pas terrible dans plein de langage y compris Python.

          En C, tu as printf: avantage les format string sont puissants, inconvenient: pas typesafe, les variables sont toutes regrioupées a la fin.

          Pour moi l'idéal serait:
          puts "salut %{nom} tu as %02d{age}\n";
          la lisibilité de mettre les variables au milieu de la chaine et la possibiité d'avoir quelque conversion simple pour l'affichage comme printf permet.
      • [^] # Re: English vs other languages

        Posté par . Évalué à 4.

        L’inversion du nom et du prénom, c’est :
        — une erreur ;
        — de l’espéranto ;
        — une obligation dans Python 3 ;
        — Kenobi Obi-Wan ?
    • [^] # Re: English vs other languages

      Posté par . Évalué à 2.

      Je pense qu'il vaut mieux utiliser l'anglais dans un cadre professionnel (opensource). Pour une application scolaire, le français suffit.

      Le fait de gérer les identifiants avec des accents est rare dans le domaine des langage de programmation, c'est une première pour Python je crois.
    • [^] # Re: English vs other languages

      Posté par (page perso) . Évalué à 1.

      Tu peux faire des recherches sur les discussions qui ont amené à autoriser unicode pour les identifiants. Perso j'étais a-priori contre (et je pense continuer à me limiter aux jeu de caractères actuels), par contre les arguments de certains m'ont paru tout à fait recevables (ex typique, l'enseignement de l'informatique dans des écoles asiatiques, ou encore, l'utilisation d'identificateurs correspondant à des noms de données - genre des noms de colonnes dans des tables).

      Python 3 - Apprendre à programmer en Python avec PyZo et Jupyter Notebook → https://www.dunod.com/sciences-techniques/python-3

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.