URL: https://linuxfr.org/news/python-3-3-est-sorti Title: Python 3.3 est sorti Authors: Xavier Combelle fero14041, lolop, Davy Defaud, Nÿco, GeneralZod, baud123, Emmanuel C, Victor STINNER, detail_pratique, crep4ever, jcr83, Maxime, El Titi, Antoine, Amine "nh2" Brikci-Nigassa, Florent Zara et FlashCode Date: 2012年02月27日T13:23:58+01:00 License: CC By-SA Tags: Score: 61 La version 3.3 de Python est sortie ce 29 septembre. Pour rappel, [_Python_](http://fr.wikipedia.org/wiki/Python_%28langage%29) « est un langage de programmation multi‐paradigme. Il favorise la programmation impérative structurée et orientée objet. Il est doté d’un typage dynamique fort, d’une gestion automatique de la mémoire par ramasse‐miettes et d’un système de gestion d’exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl ». Merci Wikipédia. Cette version 3.3 est donc la nouvelle version de production de la branche 3. Elle cohabite avec la version 2.7.3 de la branche 2.7. Cette nouvelle version apporte, entre autres, les fonctionnalités suivantes : - amélioration de la syntaxe des générateurs ; - un module ___venv___ capable de créer des environnement Python virtuels, tout comme [_VirtualEnv_](http://www.virtualenv.org/) ; - revue du stockage interne des caractères, ce qui permet d’économiser de la mémoire ; - nouvelle façon de définir et placer les paquets d’un projet Python ; - des améliorations concernant l’API du module `os`, ainsi qu’une remise à plat des `Exceptions` concernant les entrées‐sorties ; - amélioration de l’intégration Windows ; - fonction de hachage aléatoire activée par défaut (permettant de se prémunir contre l’attaque des dictionnaires et des tables de hachage) ; - et bien d’autres... *Retrouvez en seconde partie de dépêche une liste plus complète des nouveautés.* NdA : Merci à _FlashCode_, Antoine, Victor Stinner, Laurent Pointal, Emmanuel C, _jcr83_, Amine _« nh2 »_ Brikci‐Nigassa, _GeneralZod_, _crep4ever_, _Nÿco_ et _Le Cancre Las_ pour leur participation active à cette rédaction en collaboration. ---- [What’s New In Python 3.3](http://docs.python.org/py3k/whatsnew/3.3.html) [Entretien DLFP d’avril 2011 avec des développeurs Python](http://linuxfr.org/news/entretien-avec-les-d%C3%A9veloppeurs-python-francophones) [Annonce officielle et téléchargement](http://python.org/download/releases/3.3.0/) [Présentation « Nouveautés de Python 3.3 » par Victor Stinner lors de Pycon FR 2012](https://github.com/haypo/conf/blob/master/2012-PyconFR-Paris/python33/python33.pdf?raw=true) ---- # Nouveautés de Python 3.3 ## [PEP 380](http://www.python.org/dev/peps/pep-0380/) — Générateurs La nouvelle syntaxe `yield from ` permet à un générateur de renvoyer directement les valeurs d’un autre générateur. Cette nouvelle construction autorise le chaînage de générateurs (et plus généralement d’itérateurs), simplement. Cela permettra d’écrire des générateurs, dont le code se trouve découpé dans plusieurs fonctions, elles‐mêmes génératrices (et évitera d’avoir de trop grosses fonctions monolithiques dédiées à cette tâche). ## [PEP 405](http://www.python.org/dev/peps/pep-0405/) — VirtualEnv Le nouveau module `venv` permet la création d’environnements virtuels Python à la manière du célèbre [_virtualenv_](http://www.virtualenv.org/) de [Ian Bicking](http://blog.ianbicking.org/). Un environnement virtuel est une installation isolée de Python dans un répertoire spécifique du système de fichiers, comprenant son propre interpréteur, ses propres paquets et scripts, avec un éventuel lien vers l’installation du système. Du fait de la prise en compte par les développeurs de cet usage, il sera maintenant plus simple de manipuler ces environnements, avec de futurs outils sans doute mieux intégrés. À cet effet, une nouvelle commande a été introduite : `pyvenv`. ## [PEP 3155](http://www.python.org/dev/peps/pep-3155/) Les fonctions et les classes ont un nouvel attribut `__qualname__` représentant le chemin depuis le module de plus haut niveau jusqu’à leur définition. ## Compression * **lzma** : le nouveau module `lzma` fournit la compression et la décompression utilisant l’algorithme [LZMA](http://fr.wikipedia.org/wiki/LZMA "Définition Wikipédia") (algorithme de [7-zip](http://www.7-zip.org/)), incluant la prise en charge des formats de fichier `.xz` et `.lzma` ; * **bz2** : le module `bz2` a été complètement réécrit, et gère désormais tout objet offrant une interface de type fichier. Il gère également la compression et la décompression en parallèle des flux. ## [PEP 417](http://www.python.org/dev/peps/pep-0417/) Tests unitaires Le _framework_ de tests unitaires `unittest`, inclus dans la bibliothèque standard, a été enrichi d’un module de mock : `unittest.mock`. Les objets factices ([_Mock Objects_](http://fr.wikipedia.org/wiki/Mock_%28programmation_orient%C3%A9e_objet%29)) permettent de simuler le comportement des objets dans certaines conditions. Cette technique facilite l’écriture des tests unitaires et peut également accélérer leur exécution dans certains cas. ## Fonction sendfile Le module `os` dispose d’une nouvelle fonction `sendfile()` qui fournit une manière efficace _zero‐copy_, permettant de copier les données d’un descripteur de fichier (ou _socket_) à un autre. L’expression _« zero‐copy »_ fait référence au fait que toute la copie entre les deux descripteurs est entièrement effectuée par le noyau, sans passage par l’espace utilisateur. `sendfile()` est utile pour copier efficacement le contenu d’un fichier du disque vers une _socket_ réseau, par exemple pour envoyer un fichier à un pair. À noter que l’appel système `sendfile()` n’étant pas normalisé, l’utilisation de cette nouvelle fonction sera dépendante des contraintes de la plate‐forme (tous les types de descripteurs de fichiers ne sont pas admis en entrée comme en sortie, par exemple). Voir la page _man_ de l’appel système sous‐jacent pour plus de détails. ## [PEP 393](http://www.python.org/dev/peps/pep-0393/) — Stockage des chaînes de caractères Le stockage des chaînes de caractères a été optimisé. Pour toute chaîne, une taille fixe de 1, 2 ou 4 octets par caractère est dorénavant utilisée, selon le plus haut _codepoint_ stocké dans celle‐ci. Par exemple, les chaînes ne contenant que de l’ASCII (codes 0 à 127) n’utilisent ainsi qu’un octet par caractère, les chaînes en `latin1` et `latin9`, deux octets. L’utilisation mémoire est deux à trois fois meilleure par rapport à Python 3.2 et se rapproche des performances de Python 2.7. ## [PEP 414](http://www.python.org/dev/peps/pep-0414/) — Transition Unicode Py2 vers Py3 La notation `u"texte"`, qui est utilisée dans Python 2.x, pour dénoter des littéraux chaînes Unicode, est de retour dans Python 3.3 afin de faciliter l’écriture de code fonctionnant sur des versions 2 et 3 de Python. Cette PEP a été proposée par [Armin Ronacher](http://lucumr.pocoo.org/), et acceptée en moins de 15 jours. ## Standardisation de la procédure d’importation `import` est implémenté à l’aide du module `importlib`, ce qui, à terme, devrait éliminer les différences de comportement entre les diverses implémentations. De même, l’importation des modules utilise maintenant un verrou par module et n’est plus global pour l’importation de tous les modules. ## [PEP 3144](http://www.python.org/dev/peps/pep-3144/) — Gestion des adresses IP Le nouveau module `ipaddress` permet de manipuler des adresses IPv4 et IPv6. Il est basé sur le module `ipaddr-py` de Google. ## [PEP 3151](http://www.python.org/dev/peps/pep-3151/) — Exceptions entrées‐sorties La hiérarchie des exceptions liées à l’OS et aux entrées‐sorties a été simplifiée. Désormais, elles dérivent toutes de `OSError` (`IOError`, `EnvironmentError`, etc., restent pour la compatibilité et sont des alias d’`OSError`) et sont typées plus finement pour connaître le type exact de l’erreur. Par exemple, ouvrir un fichier inexistant lève l’exception `FileNotFoundError`. ## [PEP 397](http://www.python.org/dev/peps/pep-0397/) — Lanceur Python pour Windows Un lanceur Python pour Windows fait son arrivée, se basant sur le [_shebang_](http://fr.wikipedia.org/wiki/_shebang_ "Définition Wikipédia") placé en tête des modules Python pour identifier la version de l’interpréteur à utiliser (comme sous les Unix), avec deux lanceurs (comme il y avait un `python.exe` et un `pythonw.exe`) permettant de démarrer Python avec ou sans la console (scripts en `.py` ou `.pyw`). Le lanceur est installé dans le répertoire de Windows (et est donc automatiquement dans le `PATH` qui liste les exécutables – mais nécessite des droits d’administration pour être installé). ## [PEP 418](http://www.python.org/dev/peps/pep-0418/) — Fonctions de gestion du temps Nouvelles fonctions de mesure du temps apparaissent dans le module `time` : `monotonic()` (non touchée par des ajustements de l’horloge, par exemple par NTP), `perf_counter()` (temps précis), `process_time()` (consommation de temps processeur utilisateur et système pour le processus). ## [PEP 420](http://www.python.org/dev/peps/pep-0420/) — Empaquetage Un module Python, sous forme de répertoire, n’a plus besoin de la présence d’un fichier `__init__.py` en son sein pour obtenir le statut de module. De plus, il peut être réparti sur plusieurs dossiers. ## [PEP 362](http://www.python.org/dev/peps/pep-0362/) — inspect.getsignature() `inspect.getsignature()` offre un format simple et standard pour lire la signature d’une fonction (notamment ses arguments). ## Module décimal Le module `decimal` a été réécrit en C et est maintenant jusqu’à 120 fois plus rapide pour les applications qui utilisent intensément les décimales. ## Module os La plupart des fonctions du module `os` prenant un nom de fichier en paramètre acceptent maintenant un descripteur de fichier, quand le système de fichiers le supporte. Ceci permet de se prémunir des attaques de type _symlink attack_, la fonction `shutil.rmtree()` est maintenant sûre. ## Fonctions de hachage Le _hash randomization_ est activé par défaut. Il limite les _exploits_ liés aux collisions dans les fonctions de hachage. Voir le courriel http://mail.python.org/pipermail/python-dev/2011-December/115116.html pour plus de détails. ## Gestionnaire d’erreur faulthandler Un nouveau module [`faulthandler`](http://docs.python.org/py3k/library/faulthandler.html) permet d’afficher le _traceback_ Python (pile d’appels) lors d’un crash. ## Divers * ajout du mode **_x_** à la fonction `open()`. `open("fichier.txt", "x")` crée le fichier ou échoue s’il existe déjà (création **atomique** du fichier) ; * `print("Affiche moi ça immédiatement !", flush=True, end="")` écrit directement la chaîne dans la console (en vidant le cache) ; * les méthodes `subprocess.Popen.communicate()` et `threading.Lock.acquire()` acceptent désormais un argument optionnel `timeout`, facilitant la programmation concurrentielle ; * nouvelle méthode `datetime.datetime.timestamp()` qui convertit un `timestamp` au format _Epoch_, l’inverse de `datetime.datetime.fromtimestamp(epoch)`. On constate avec cette nouvelle version de Python 3 un **allègement de la consommation mémoire**, grâce au nouveau stockage des chaînes Unicode et grâce aux dictionnaires d’attributs — PEP [393](http://www.python.org/dev/peps/pep-0393/) et [412](http://www.python.org/dev/peps/pep-0412/) respectivement. **Note :** les [PEP](http://www.python.org/dev/peps/), ou _Python Enhancement Proposals_ sont les documents proposés à la communauté pour les changements / améliorations dans le langage et les bibliothèques, un peu comme les RFC pour les protocoles de l’Internet. Le [PEP 001](http://www.python.org/dev/peps/pep-0001/) décrit cette organisation. Enfin, à l’occasion de cette nouvelle sortie, le thème de la documentation a été entièrement revu, avec des couleurs plus neutres : comparez [le thème pour la branche 3._x_](http://docs.python.org/py3k/) à [celui de la branche 2._x_](http://docs.python.org/).

AltStyle によって変換されたページ (->オリジナル) /