title: Principales nouveautés dans Python 2.5 slug: principales-nouveautes-dans-python-25 date: 2006-03-04 14:11:30 type: post vignette: images/logos/python.png contextual_title1: Bonnes pratiques et astuces Python contextual_url1: 20080511-bonnes-pratiques-et-astuces-python contextual_title2: Benchmarks map, filter vs. list-comprehensions contextual_url2: 20061025-benchmarks-map-filter-vs-list-comprehensions contextual_title3: Python : lisibilité vs simplicité contextual_url3: 20060425-python-et-underscore
Je m'y prend un peu à l'avance (la sortie est prévue pour septembre 2006) mais Guido a apparement fait quelques annonces lors de Pycon qui viennent s'ajouter aux PEPs approuvés sur la page officielle. 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.
Voici la liste des PEPs acceptés par ordre de soumission :
Probablement pour remédier au difficilement compréhensible « and-or trick », même si Guido a jugé bon de laisser une syntaxe assez difficile pour des utilisations trop complexes intentionnellement (c'est vrai que le code devient vite illisible sinon).
Syntaxe : expression1 if condition else expression2
Exemples lisibles :
x = A if C else B x = lambda: A if C else B x = A if C else B if D else E
Exemples peu lisibles mais corrects :
if (A if C else B): [x for x in seq if (A if C else B)] A if (X if C else Y) else B (A if C else B) if D else E
Je sens que ça va faire fureur lors du « Annual Obfuscated Python Contest » !
Là je dois avouer que j'ai pas trop compris en quoi ça consistait mais c'est la première amélioration citée dans What's New in Python 2.5 donc j'imagine que c'est assez important, j'attend vos explications ;-).
Bon le titre est assez explicite, un exemple :
Metadata-Version: 1.1 Version: 1.0 Platform: Linux2 Supported-Platform: Ubuntu 5.10 Summary: Mon premier paquet ...
Voila qui devrait ravir les concepteurs de paquets.
Outre le fait de permettre un import sur plusieurs lignes :
from Tkinter import Tk, Frame, Button, Entry, \ LEFT, DISABLED, NORMAL, RIDGE, END
Pourra maintenant être déclaré ainsi :
from Tkinter import (Tk, Frame, Button, Entry, LEFT, DISABLED, NORMAL, RIDGE, END)
[Edit du 06.03.06] : comme le souligne tarek dans les commentaires, cette fonctionnalité est déjà implémentée dans python 2.4.
Cette amélioration permet aussi d'importer des modules relativement :
from ..subpackage1 import moduleY
Par exemple pour importer le moduleY qui serait un dossier parent subpackage1.
C'est exactement ce dont j'ai besoin en ce moment, en effet j'utilise finally pour fermer les fichiers ouverts dans tous les cas et du coup j'ai quelque chose qui ressemble à :
f = None try: try: f = open(filename) text = f.read() except IOError: print 'An error occured' finally: if f: f.close()
Et c'est vraiment lourd, simplement car try-except-finally n'est pas possible actuellement, c'est ce que propose ce PEP et ce sera donc réglé avec Python 2.5, ouf !
É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é...
with 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 :
with open(filename) as f: f.read()
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 :
def locked(lock): lock.acquire() try: # mon opération finally: lock.release()
Deviendra :
with locked(myLock): # mon opération
C'est aussi une amélioration qui me servirait bien en ce moment ça...
Toutes ces améliorations sont très frustrantes car c'est exactement ce dont j'ai besoin maintenant ! Vivement septembre.
Et pour fini lambda est conservé, au grand regret de Guido... et cElementTree est inséré dans la bibliothèque standard.
[Bonus] : une vidéo à voir absolument qui s'intitule Better Web App (378.5mo, 36 minutes, anglais) et qui compare différent Web Frameworks (RoR, Zope/Plone, TurboGears et Django) et fourni en conclusion un tableau récapitulatif intéressant :
[Edit du 06.03.06] : La home de Python.org est en pleine mue \o/ (en passant un lien intéressant au sujet des nouveautés de Python 2.5).
[Edit du 11.03.06] : Le PEP 356 résume tout ça et comprend le calendrier de développement (encore un bonus, l'interview de GvR sur eweek).
[Edit du 22.06.06] : L'annonce de Python 2.5 beta 1 sur dlfp qui est complétée de nombreux exemples (cette fois en bonus de beaux icônes :-)).