Python 3.9, tour d’horizon
Python 3.9 vient d’être annoncé le 6 Octobre 2020. Cette version amène plusieurs fonctionnalités très prometteuses. Corrige des bugs et se positionne par rapport à l’avenir du langage. A Cyrès, nous constatons une augmentation des développements Python, que ce soit dans le domaine du Big Data, des containeurs ou DevOps, Des implémentations d’architectures Lambda pour des traitements, peuvent être créées en Python.
Faisons le tour des fonctionnalités majeures les plus intéressantes !
Nouveau parser
Peut-être l’avancée majeure de cette version, la 3.9 propose un nouveau parser basé sur PEG, qui se veut plus flexible, plus performant et plus complet que l’ancien parser LL(1)
Quelques infos sur la différence entre les deux parser : https://stackoverflow.com/questions/8816759/ll-versus-peg-parsers-what-is-the-difference
Disponible dans la 3.9, il est annoncé que la flexibilité et toute la puissance se constatera dans la version à venir 3.10.
Lien de la doc : https://www.python.org/dev/peps/pep-0617
Amélioration des performances
En plus de bénéficier d’un nouveau parser, cette version utilise maintenant le protocole VectorCall. Il permet de minimiser ou éliminer les objets temporaires. Dans l’ancienne implémentation il était nécessaire de passer par des tuples intermédiaires lors des appels internes, ce qui baissait les performances d’exécution.
Lien de la doc : https://www.python.org/dev/peps/pep-0590
Merge et mise à jour des dictionnaires
Il est maintenant possible de merge simplement deux dictionnaires. Si des clefs existent dans les deux, alors elles seront mises à jour. On peut également ajouter des clefs à un dictionnaire à partir d’un autre dictionnaire.
L’opérateur « | » sert donc à merger :
L’opérateur « |= » sert à mettre à jour :
Lien de la doc : https://www.python.org/dev/peps/pep-0584/
Gestion des chaines de caractère
« str.removeprefix(substring: string) » permet de supprimer le prefix d’une chaine de caractère plus simplement que dans les versions précédentes.
La méthode « str.removesuffix(substring: string) » quant à elle supprime le suffix.
Cette nouvelle approche permet :
- D’être moins dépendant de l’implémentation utilisateure, calcul de la longueur via ‘len’
- Plus performant, pas d’appel à ‘len’
- Plus descriptif et beaucoup plus lisible
Lien de la doc : https://www.python.org/dev/peps/pep-0616/
Typage des variables pour les objets génériques
Python est connu pour ne pas avoir à se soucier explicitement du type des variables. Depuis la 3.5 il est possible de spécifier le type, pas forcément des plus clair comme méthode… Maintenant avec Python 3.9, il est possible de spécifier cela avec une forme assez simple et lisible :
Lien de la doc : https://www.python.org/dev/peps/pep-0585/
Et plus encore
Cette nouvelle version intègre également :
- Améliorations dans la bibliothèque de méthode mathématique (gcd, nextafter, ulp et lcm)
- Gestion du scope IPv6 (contribution de Oleksandr Pavliuk, https://bugs.python.org/issue34788)
- Nouveaux modules : Zoneinfo (https://www.python.org/dev/peps/pep-0615)
- Gestion des graphs améliorée (https://docs.python.org/3.9/library/graphlib.html#module-graphlib)
Liste des améliorations des modules : https://docs.python.org/3.9/whatsnew/3.9.html#improved-modules
Cette nouvelle release annonce du changement, des performances, de la lisibilité et des améliorations pratiques. Avec un nouveau cycle de release annuel, la communauté Python ne cesse d’aller de l’avant, hâte de voir ce qu’ils nous réservent pour la suite ! En espérant que les applicatifs suivent pour supporter cette version 3.9.