Avant d’aller plus loin dans le sujet, il est important de noter que les versions mineures précédentes de Python 3 contenaient encore quelques fonctions pour la rétrocompatibilité avec Python 2.7. Mais depuis l'arrêt officiel du support de Python 2.7 et à partir de Python 3.9, de nombreuses fonctions seront supprimées ou seront marquées comme obsolètes. Il s’agit d’une information à prendre en compte lorsque vous souhaiteriez passer de la version 2.7 à la version 3.9. Les différences notables entre Python 3.8 et les versions alpha de Python 3.9 publiées sont :
Construire des types génériques dans les collections standard
Si vous avez travaillé avec les langages Java ou C#, vous connaissez la notion de types génériques. Ce sont généralement des collections qui peuvent être paramétrées avec le type qu'elles contiennent. Par exemple, en C#, vous pouvez définir une liste comme celle-ci : var exampleList = new List<string>(). Ce qui signifie que vous créez une liste de chaînes de caractères.
Maintenant, Python introduit ce genre de fonctionnalité dans le module de saisie. Fondamentalement, les outils ainsi que les vérificateurs de type et les linters sont modifiés pour reconnaître les collections standard comme des types génériques. Cela signifie que vous n'avez pas besoin d'importer les types en majuscules correspondants (par exemple, List) à la saisie. En bref, cette fonctionnalité supprime la nécessité d'une hiérarchie de types parallèle dans le module de saisie et facilite les annotations du programme.
Analyseur PEG
Cette nouvelle fonctionnalité n'affecte pas autant les développeurs. Cela pourrait être intéressant pour les ingénieurs qui s'intéressent aux compilateurs. Jusqu'à présent, Python utilisait un analyseur basé sur LL(1) et toute la grammaire Python était en quelque sorte construite autour de cet analyseur. L'analyseur LL(1) est un analyseur descendant qui analyse l'entrée de gauche à droite.
Tout d'abord, il effectue une dérivation de la phrase vers la gauche, avec un seul jeton de regard. Il crée ainsi un tableau qui contient des transitions codées entre tous les états possibles de l'analyseur, le tableau d'analyse. En raison de la nature de Python et des limitations de LL(1), certains hacks ont été introduits dans le langage. C'est pour cela qu’un nouvel analyseur basé sur le PEG (Parsing Expression Grammar) est utilisé dans Python 3.9. La différence entre la grammaire PEG et LL(1) est que la grammaire PEG reflète la manière dont l'analyseur fonctionnera lors de l'analyse.
Ordre topologique
Si vous travaillez avec des graphiques, alors vous allez trouver cette fonctionnalité intéressante et utile. Une nouvelle classe TopologicalSorter est ajoutée au module functools. Cette classe effectue l'ordonnancement topologique du graphique. Pour faire quelque chose comme cela avec les versions précédentes de Python, vous devriez l'implémenter vous-même en vous servant des algorithmes comme une recherche en profondeur ou l'algorithme de Khan. Un autre avantage de cette fonctionnalité est qu'elle permet le tri parallèle des nœuds, même s'ils sont ajoutés un par un.
Dans ce cas, vous créez TopologicalSorter avec un graphe initial optionnel et vous ajoutez ensuite des nœuds supplémentaires au graphe. Vous utiliserez les méthodes prepare, is_active et get_ready pour traiter chaque nœud, puis vous utiliserez la méthode done pour indiquer que le nœud est ajouté et que le graphe est trié.
Nouvelles méthodes de calcul et d'analyse des chaînes de caractères
Des modules tels que les chaînes de caractères et les mathématiques sont également étendus avec quelques fonctions utiles en Python 3.9. Le module string a deux nouvelles méthodes : removeprefix et removesuffix. Celles-ci permettent de supprimer facilement un préfixe ou un suffixe inutile d'une chaîne de caractères. Les modules bytes, bytearray, et collections.UserString sont étendus avec les mêmes méthodes. D’autres méthodes comme math.gdc et math.ldc, pour calculer respectivement le plus grand diviseur commun et le plus petit multiple commun, sont maintenant étendues de sorte qu'elles reçoivent plus de deux paramètres.
En outre, de nouvelles méthodes ont été ajoutées au module mathématique :
- nextafter(a, b) qui retourne le prochain nombre flottant après a allant vers b ;
- ulp(a) qui retourne la valeur du bit le moins significatif d'un flottant. ULP signifie “Unit in the Last Place” et est utilisé comme mesure de précision dans les calculs numériques ;
- etc.
Il ne s’agit là que de quelques fonctionnalités prévues pour être livrées avec Python 3.9. Certaines de ces fonctionnalités se traduisent par un code plus propre et plus compréhensible, tandis que d'autres pourraient recadrer l’état d'esprit sur la grammaire Python. Vous pouvez vous référer à la documentation officielle pour en savoir plus sur ces diverses fonctionnalités et voir ce que la nouvelle version apporte d'autre.
Sources : Python 3.9.0a5, Python 3.9.0a6
Et vous ?
Que pensez-vous des nouveautés prévues pour Python 3.9 ?
Quelles autres fonctionnalités souhaiteriez-vous avoir dans Python 3.9 ?
Voir aussi
Python 3.8.0 est publié avec la prise en charge des expressions d'affectation (l'opérateur de morse « := ») et les paramètres de position uniquement
Python 3.8.0 : la première version bêta est publiée avec une API C pour améliorer la configuration de l'initialisation
Une première version alpha de Python 3.8 est publiée. Voici un tour d'horizon des nouveautés de cette version