Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités

    À venir dans Python 3.9 : construction des types génériques dans les collections standard
    Python 3.9, la prochaine version du langage Python : construction des types génériques dans les collections standard,
    et un analyseur PEG pour CPython

    Python 3.8 a été publié en octobre dernier et les travaux sur la version 3.9 du langage ont déjà commencé. Python 3.9 est prévue pour arriver en octobre 2020, mais des aperçus sont déjà disponibles et permettent d’avoir une idée brève des fonctionnalités et des améliorations qui pourraient être introduites dans cette version. La dernière version alpha, la 3.9.0a6, a été publiée vers la fin du mois d’avril et apporte des fonctionnalités qui, pour la plupart, rendront le code Python plus propre. Voici certaines des choses auxquelles l’on peut s’attendre dans Python 3.9.

    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
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Expert confirmé
    En Python, j'utilise le typage statique. Du coup, je fais souvent des imports du module typing.
    Avec PEP 585 qui permet de remplacer, par exemple, Dict[str, List[int]] par dict[str, list[int]], certains imports de typing ne seront plus nécessaires et d'autres pourront être remplacés par des imports d'autres modules (surtout collections.abc). Pourquoi pas.

    Et puis je lis :
    The deprecated functionality will be removed from the typing module in the first Python version released 5 years after the release of Python 3.9.0.
    Et BAM, dans ma tronche. Le changement ne sera pas facultatif. Il y aura du code à migrer obligatoirement avant une version ultérieure.