Journal Publication de Python 3.0rc2

Posté par  (site web personnel) .
Étiquettes : aucune
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  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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  (site web personnel) . É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).

      Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

Suivre le flux des commentaires

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