Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

article.md 7.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. title: Principales nouveautés dans Python 2.5
  2. slug: principales-nouveautes-dans-python-25
  3. date: 2006-03-04 14:11:30
  4. type: post
  5. vignette: images/logos/python.png
  6. contextual_title1: Bonnes pratiques et astuces Python
  7. contextual_url1: 20080511-bonnes-pratiques-et-astuces-python
  8. contextual_title2: Benchmarks map, filter vs. list-comprehensions
  9. contextual_url2: 20061025-benchmarks-map-filter-vs-list-comprehensions
  10. contextual_title3: Python : lisibilité vs simplicité
  11. contextual_url3: 20060425-python-et-underscore
  12. <p>Je m'y prend un peu à l'avance (la sortie est prévue pour septembre 2006) mais Guido a apparement fait <a href="http://agiletesting.blogspot.com/2006/02/pycon-notes-part-2-guidos-keynote.html">quelques annonces lors de Pycon</a> qui viennent s'ajouter aux <a href="http://www.python.org/dev/doc/devel/whatsnew/whatsnew25.html"><abbr title="Python Enhancement Proposals">PEP</abbr>s approuvés sur la page officielle</a>. J'essayerais de mettre à jour ce billet lors de l'annonce de nouvelles nouveautés histoire qu'il ne soit pas obsolète dans 6 mois, n'hésitez pas à m'en informer.</p>
  13. <p>Voici la liste des <abbr title="Python Enhancement Proposals">PEP</abbr>s acceptés par ordre de soumission&nbsp;:</p>
  14. <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0308/">308</a>&nbsp;: Ajout des expressions conditionnelles</h2>
  15. <p>Probablement pour remédier au difficilement compréhensible «&nbsp;<a href="http://diveintopython.adrahon.org/power_of_introspection/and_or.html#d0e10029">and-or trick</a> », même si <a href="http://mail.python.org/pipermail/python-dev/2005-September/056846.html">Guido a jugé bon de laisser une syntaxe assez difficile</a> pour des utilisations trop complexes intentionnellement (c'est vrai que le code devient vite illisible sinon).</p>
  16. <p>Syntaxe&nbsp;: expression1 <strong>if</strong> condition <strong>else</strong> expression2</p>
  17. <p>Exemples lisibles&nbsp;:</p>
  18. <pre>x = A if C else B
  19. x = lambda: A if C else B
  20. x = A if C else B if D else E</pre>
  21. <p>Exemples peu lisibles mais corrects&nbsp;:</p>
  22. <pre>if (A if C else B):
  23. [x for x in seq if (A if C else B)]
  24. A if (X if C else Y) else B
  25. (A if C else B) if D else E</pre>
  26. <p>Je sens que ça va faire fureur lors du «&nbsp;Annual Obfuscated Python Contest »&nbsp;!</p>
  27. <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0309/">309</a>&nbsp;: L'application de fonctions partielles</h2>
  28. <p>Là je dois avouer que j'ai pas trop compris en quoi ça consistait mais c'est la <a href="http://www.python.org/dev/doc/devel/whatsnew/node2.html">première amélioration citée</a> dans What's New in Python 2.5 donc j'imagine que c'est assez important, j'attend vos explications ;-).</p>
  29. <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0314/">314</a>&nbsp;: Méta-données pour les paquets Python</h2>
  30. <p>Bon le titre est assez explicite, un exemple&nbsp;:</p>
  31. <pre>Metadata-Version: 1.1
  32. Version: 1.0
  33. Platform: Linux2
  34. Supported-Platform: Ubuntu 5.10
  35. Summary: Mon premier paquet
  36. ...</pre>
  37. <p>Voila qui devrait ravir les concepteurs de paquets.</p>
  38. <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0328/">328</a>&nbsp;: Imports absolus/relatifs</h2>
  39. <p><del>Outre le fait de permettre un import sur plusieurs lignes :</del></p>
  40. <pre>from Tkinter import Tk, Frame, Button, Entry, \
  41. LEFT, DISABLED, NORMAL, RIDGE, END</pre>
  42. <p>Pourra maintenant être déclaré ainsi&nbsp;:</p>
  43. <pre>from Tkinter import (Tk, Frame, Button, Entry,
  44. LEFT, DISABLED, NORMAL, RIDGE, END)</pre>
  45. <p><strong>[Edit du 06.03.06]</strong>&nbsp;: comme le souligne tarek dans les commentaires, cette fonctionnalité est déjà implémentée dans python 2.4.</p>
  46. <p>Cette amélioration permet aussi d'importer des modules relativement&nbsp;:</p>
  47. <pre>from ..subpackage1 import moduleY</pre>
  48. <p>Par exemple pour importer le <strong>moduleY</strong> qui serait un dossier parent <strong>subpackage1</strong>.</p>
  49. <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0341/">341</a>&nbsp;: Unification de try-except et try-finally</h2>
  50. <p>C'est exactement ce dont j'ai besoin en ce moment, en effet j'utilise <strong>finally</strong> pour fermer les fichiers ouverts dans tous les cas et du coup j'ai quelque chose qui ressemble à&nbsp;:</p>
  51. <pre>f = None
  52. try:
  53. try:
  54. f = open(filename)
  55. text = f.read()
  56. except IOError:
  57. print 'An error occured'
  58. finally:
  59. if f:
  60. f.close()</pre>
  61. <p>Et c'est vraiment lourd, simplement car try-except-finally n'est pas possible actuellement, c'est ce que propose ce <abbr title="Python Enhancement Proposals">PEP</abbr> et ce sera donc réglé avec Python 2.5, ouf&nbsp;!</p>
  62. <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0342/">342</a>&nbsp;: Coroutines par générateurs améliorés</h2>
  63. <p>Énormément d'améliorations relatives aux générateurs, ce serait trop long de tout décrire ici. En plus je n'en ai pas compris la moitié...</p>
  64. <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0343/">343</a>&nbsp;: Le mot-clé «&nbsp;with »</h2>
  65. <p><strong>with</strong> permet d'effectuer une opération sur un objet, par exeple dans le cas d'un fichier il permettra de le lire sans avoir à le fermer à la fin&nbsp;:</p>
  66. <pre>with open(filename) as f:
  67. f.read()</pre>
  68. <p>Cette syntaxe permettra de simplifier les ouvertures fermetures de fichiers sans avoir à gérer ça avec des exceptions. Elle sera aussi très utile en cas de vérrou à placer&nbsp;:</p>
  69. <pre>def locked(lock):
  70. lock.acquire()
  71. try:
  72. # mon opération
  73. finally:
  74. lock.release()</pre>
  75. <p>Deviendra&nbsp;:</p>
  76. <pre>with locked(myLock):
  77. # mon opération</pre>
  78. <p>C'est aussi une amélioration qui me servirait bien en ce moment ça...</p>
  79. <h2>Conclusion</h2>
  80. <p>Toutes ces améliorations sont très frustrantes car c'est exactement ce dont j'ai besoin <strong>maintenant</strong>&nbsp;! Vivement septembre.</p>
  81. <p>Et pour fini <strong>lambda</strong> est <a href="http://mail.python.org/pipermail/python-dev/2006-February/060415.html">conservé, au grand regret de Guido...</a> et cElementTree est inséré dans la bibliothèque standard.</p>
  82. <p><strong>[Bonus]</strong>&nbsp;: une vidéo à voir absolument qui s'intitule <a href="http://oodt.jpl.nasa.gov/better-web-app.mov">Better Web App</a> (378.5mo, 36 minutes, anglais) et qui compare différent Web Frameworks (<abbr title="Ruby on Rails">RoR</abbr>, Zope/Plone, TurboGears et Django) et fourni en conclusion un tableau récapitulatif intéressant&nbsp;:</p>
  83. <p><img src="/static/david/biologeek/images/better_web_app.jpg" alt="Tableau comparatif entre les Web Frameworks" style="display:block; margin:0 auto;" /></p>
  84. <p><strong>[Edit du 06.03.06]</strong>&nbsp;: La home de <a href="http://www.python.org/">Python.org</a> est en pleine mue \o/ (en passant un <a href="http://linuxgazette.net/124/orr.html">lien intéressant</a> au sujet des nouveautés de Python 2.5).</p>
  85. <p><strong>[Edit du 11.03.06]</strong>&nbsp;: Le <abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0356/">356</a> résume tout ça et comprend le calendrier de développement (encore un bonus, l'<a href="http://www.eweek.com/article2/0,1895,1934746,00.asp">interview de <abbr title="Guido van Rossum">GvR</abbr> sur eweek</a>).</p>
  86. <p><strong>[Edit du 22.06.06]</strong>&nbsp;: L'annonce de <a href="http://linuxfr.org/~linuxcode/21967.html">Python 2.5 beta 1</a> sur dlfp qui est complétée de nombreux exemples (cette fois en bonus <a href="http://doxdesk.com/img/software/py/icons2.png">de beaux icônes</a> :-)).</p>