Sortie de Python 2.5 - Python - Programmation
Marsh Posté le 19-09-2006 à 22:39:31
Super sympa cette review
Ya que du bon dans cette version
Marsh Posté le 20-09-2006 à 14:11:16
masklinn a écrit : |
à vue de nez, on dirait un équivalent du mot clé using de C# non ?
Marsh Posté le 20-09-2006 à 14:15:33
ReplyMarsh Posté le 20-09-2006 à 15:17:44
Taz a écrit : bof, C# n'a rien inventé. Mais c'est pareil, ou comme les blocks en ruby, etc |
Ou comme une variation sur unwind-protect en common lisp oui.
Marsh Posté le 19-09-2006 à 19:37:35
http://www.python.org/download/releases/2.5/
Points d'intérêt:
PEP 341 - TRY/CATCH/FINALLY
Jusqu'ici, on pouvait utiliser soit try/except (pour catcher les erreurs) soit try/finally (pour avoir un bloc toujours exécuté).
Contrairement à Java, il n'était par contre pas possible d'avoir try/catch/finally dans le même bloc (l'idiôme consistait en l'utilisation d'un try/except à l'intérieur d'un try/finally)
Avec Python 2.5 ont peut maintenant avoir un vrai bloc try/except/finally sans aucun problème
Exemple:
Python 2.4
Python 2.5:
Pas un gain terrifiant, mais une simplification et une clarification notable du code
PEP 308 - Conditional Expressions
L'"opérateur ternaire" des dérivés du C (query?true_exp:false_exp) a maintenant un équivalent Python.
La syntaxe choisie par le BDFL est la suivante:
Cette syntaxe à première vue étrange a été choisie en essayant de l'appliquer dans la module de la stdlib et en en observant la lisibilité:
À noter qu'il est possible d'entourer cette expression avec des parenthèse, et qu'il est conseillé de le faire pour des raisons de style et de clarté, ainsi que pour éviter certains cas syntaxique ambigu (principalement lors de l'utilisation de lambdas).
Utiliser, donc,
PEP 309 - Partial Function Application (currying)
Les utilisateurs de langages fonctionnels (à la Haskell) connaissent déjà cet usage, consistant à appeler une fonction avec moins de paramètre que nécessaires, et à récupérer une fonction auxquels ces arguments ont été pré-appliqués (d'où le nom d'application partielle).
La fonction `partial` du module `functools`* permet exactement cet usage:
(*): functools est un nouveau module dédié aux constructs fonctionnels qui apparaîtront dans Python dans le futur. Actuellement, il contient également une fonction update_wrapper et une fonction wraps ayant pour but de simplifier la création de décorateurs)
PEP 328 - imports absolus et relatifs
Pas trop regardé, pas encore compris.
Ce comportement est de toute façon optionnel (from __future__ import absolute_import) actuellement.
Il deviendra le défaut dans une version future (probablement Python 2.7), je vous conseille donc tout de même de le comprendre.
PEP 338 - Exécuter un module en tant que script
Amélioration du switch -m
PEP 342 - Nouvelles fonctionalités des générateurs
PEP 352 - Exceptions en tant que new-style classes
La hiérarchie des exceptions built-in démarre maintenant à BaseException, dont héritent KeyboardInterrupt, SystemExit et Exception, elle même racine pour toutes les exceptions du système. Il est également déprécié de thrower une chaîne de caractère, et un warning sera à présent généré.
Ceci permet à présent de catcher toutes les exceptions sauf KeyboardInterrupt et SystemExit (qui devraient être relancées en permanence) en utilisant simplement `except Exception` au lieu d'un simple `except`. Dans le futur, toutes les exceptions throwées devront hériter de BaseException ou ses descendants (e.g. Exception), au maximum pour Python 3.0 et probablement bien avant. Il est donc conseillé de commencer dès maintenant à faire hériter vos exceptions d'Exception ou BaseException.
PEP 353 - ssize_t
Les index python sont maintenant implémentés en utilisant ssize_t, ce qui permet d'augmenter drastiquement les capacités des conteneurs Python sur les plateformes 64bits (aucun changement en 32b)
PEP 357 - __index__ et slices
NumPy définissant des types entiers signés et non signés sur 8, 16, 32 et 64bits, il était intéressant de pouvoir utiliser ces types comme index de slices (entre autres). Aucun moyen de le faire n'existant et les slices ne pouvant utiliser la méthode `__int__` existante (dans la mesure où elle est implémentée par les floats, qui ne sont pas censés pouvoir indexer des slices).
La méthode `__index__` a donc été créé. Elle doit renvoyer un int ou un long python et permet d'utiliser n'importe quel objet comme index de slice.
PEP 343 - WITH statements
WITH est une fonctionalité optionnelle pour Python 2.5 disponible via from __future__ import with_statement. WITH sera activé par défaut dans Python 2.6
Il a pour but de simplifier et clarifier un certain nombre de constructions python utilisant auparavant try/finally en permettant d'enserrer des blocs de code avec des fonctionalités de nettoyage, par exemple un block locké (le lock est acquis au niveau du with et automatiquement relâché quand on en sort), une lecture de fichier (le fichier est ouvert avec le with et automatiquement fermé à la fin du with), ...
Un certain nombre d'objets Python supportent déjà WITH, principalement les objets fichiers et les locks:
Il est naturellement possible de créer ses propres contextes pour le statement WITH. La chose étant quelque peu complexe, je ne peux pas partir dans une description longue ici même. Prière de lire la doc (http://docs.python.org/dev/whatsnew/pep-343.html, http://docs.python.org/dev/lib/module-contextlib.html)
Nouveaux modules de la stdlib (dans la logique "Best of Breed" de Python, certains existaient déjà et ont simplement été mergés dans la stdlib)
(en plus de functools et contextlib)
Autres changements
Optimisations
Un bon nombre d'optimizations ayant vu le jour à la suite du spring NeedForSpeed de Rekjavik, il est intéressant de les lister ici
Voila voila, c'est tout pour cette fois, Python 2.5 est considéré stable et près à être utilisé en prod, amusez vous bien
(et je vous conseille vraiment de jeter un coup d'oeil à WITH, ce n'est pas simple mais ça vaut vraiment le coup)
Message édité par masklinn le 19-09-2006 à 19:44:20
---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody