• Accueil
  • Nos Formations
  • La Dream Team
  • Le Blog
  • Contact

Python 3.9 en 3 nouveautés

Par Abdel   ·   le 11 novembre 2020   ·     3 min
Catégories
  • Toutes les catégories
  • Autres actus
  • Formation
    • Tout
    • Financement
  • Macademia
    • Tout
    • Life
  • Technos
    • Tout
    • Angular
    • Développement web
    • HTML
    • JavaScript
    • Python
    • React
    • Symfony
    • Vue.js
  • La version 3.9 de Python a été publiée le 5 octobre 2020, apportant comme chaque mise-à-jour son lot de nouveautés, aussi bien en terme d'améliorations de l'interpréteur CPython, qu'au niveau de la syntaxe.

    Plébiscité pour sa syntaxe simple et épurée, Python n'en demeure pas moins un langage puissant, permettant de réaliser des opérations complexes en un minimum d'instructions.

    Un mois après sa sortie, petit tour d'horizon de trois principales nouveautés syntaxiques, dont l'une particulièrement attendue par les développeurs.

    L'opérateur d'union de dict

    Il existait jusqu'ici plusieurs manières différentes de fusionner deux dict en Python, parmi elles :

    • La méthode dict1.update(dict2), permettant de dupliquer le contenu du dict2 dans le dictionnaire dict1, et mettre à jour les valeurs correspondant aux clés existantes dans dict1 dans le cas où celles-ci sont présentes également dans dict2.

    Cette méthode, la plus utilisée jusqu'ici, présente l'inconvénient de modifier le dictionnaire dict1. Une astuce consiste à travailler sur une copie de ce dictionnaire.

    • La déstructuration / fusion de dictionnaires : {**dict1, **dict2}, permettant de créer un nouveau dictionnaire à partir des clés et des valeurs de dict1 et dict2, les valeurs des clés éventuellement identiques seront écrasées par celles de dict2.

    Cette méthode est plus efficace, mais peu esthétique et lisible, elle est difficilement compréhensible par des débutants notamment.

    La PEP 584 a introduit un nouvel opérateur d'union de dictionnaires : la barre verticale | qui vient compléter ces deux solutions existantes.

    dict1 = {'pomme': 2.29, 'poire': 1.99, 'peche': 3.19}
    dict2 = {'pasteque': 2.99, 'papaye': 4.19, 'pomme': 1.89}
    dict3 = dict1 | dict2
    print(dict3)
    # {'pomme': 1.89, 'poire': 1.99, 'peche': 3.19, 'pasteque': 2.99, 'papaye': 4.19}

    Un nouveau dictionnaire est retourné suite à cette union. Les clés du dictionnaire se trouvant à droite de l'opérateur écrasent celles déjà présentes dans le dictionnaire de gauche.

    L'opérateur |= joue le même rôle que la méthode update() :

    dict1 = {'pomme': 2.29, 'poire': 1.99, 'peche': 3.19}
    dict2 = {'pasteque': 2.99, 'papaye': 4.19, 'pomme': 1.89}
    dict1 |= dict2
    print(dict1)
    # {'pomme': 1.89, 'poire': 1.99, 'peche': 3.19, 'pasteque': 2.99, 'papaye': 4.19}

    À noter que comme l'opérateur += pour les list, cette opération ne modifie pas la référence de l'objet dict1.

    Pourquoi ne pas avoir utilisé simplement l'opérateur de concaténation +, comme cela est déjà le cas pour les list et les tuple 🤔 ?

    Cette idée fut initialement proposée, mais a suscité la controverse au sein de la communauté de développeurs Python et a fini par être rejetée.

    En effet, il ne s'agit pas véritablement de concaténation qui est réalisée ici, plus plutôt "d'union". On ne se contente pas simplement de fusionner les dictionnaires, on met également à jour les clés identiques. D'où l'idée de créer un opérateur spécifique.

    Nouvelles méthodes sur les chaînes de caractères

    Le type str s'est vu enrichir de deux nouvelles méthodes d'opération sur les chaînes de caractères : removeprefix() et removesuffix() (PEP 616).

    Très simplement, ces méthodes suppriment le texte passé en paramètre, si celui-ci se trouve en préfixe / suffixe de la chaîne de caractères. Le type str étant immuable, ces méthodes ne modifient pas la chaîne de caractères, mais retourne la chaîne éventuellement raccourcie.

    Quelques exemples fournis par la documentation :

    chaine = 'TestHook'.removeprefix('Test')
    print(chaine)
    # 'Hook'
    
    chaine = 'BaseTestCase'.removeprefix('Test')
    print(chaine)
    # 'BaseTestCase'
    
    chaine = 'MiscTests'.removesuffix('Tests')
    print(chaine)
    # 'Misc'
    
    chaine = 'TmpDirMixin'.removesuffix('Tests')
    print(chaine)
    # 'TmpDirMixin'

    Utilisation des types génériques pour les types hints

    Introduits avec la version 3.5, les types hints continuent d'être améliorés au fil des mises-à-jour.

    Pour rappel, il s'agit simplement d'indications de type ne remettant nullement en cause la nature implicite et dynamique du typage en Python. Elle précisent seulement le type de donnée qu'une variable devrait contenir, mais n'effectuent pas de vérification. Les IDE peuvent afficher des avertissement si le type n'est pas respecté, mais rien de plus. Ils peuvent cependant être exploités par des librairies externes, ou à l'aide de décorateurs.

    Avec des types hints, on peut indiquer d'une variable devrait contenir une list de str, ou bien un tuple de tuple de dict, ainsi de suite ... Cependant, cette prise en charge était jusqu'ici partielle, et nécessitait bien souvent des imports à partir du module typing.

    La PEP 585 a amélioré la syntaxe, et l'utilisation du module typing n'est désormais plus nécessaire : il suffit simplement d'indiquer le type natif.

    Un exemple pour illustrer : je souhaite indiquer une variable devrait contenir une list de int.

    Avant Python 3.9 :

    from typing import List
    
    ma_liste: List[int] = [1, 2, 3, 4]

    Avec Python 3.9 :

    ma_liste: list[int] = [1, 2, 3, 4]

    Beaucoup plus simple, non ? 😉

    Quoi d'autre ?

    La version 3.9 a apporté d'autres nouveautés.

    En terme de syntaxe notamment, l'écriture de décorateurs a été légèrement simplifiée.

    La communauté de développeurs a adopté un rythme de publication annuel : jusqu'ici les différentes versions Python 3 étaient publiées selon un cycle relativement aléatoire (9 versions en 12 ans). Désormais, chaque nouvelle version sera disponible aux alentours du mois d'octobre. On peut donc s'attendre à une version 3.10 en octobre 2021. Eh oui, pas de version 4 attendue pour le moment !

    La liste complète des nouveautés est disponible sur la documentation officielle.

    Et vous, quelle nouveauté vous semble la plus utile ?

    # Sommaire
    L'opérateur d'union de dict
    Nouvelles méthodes sur les chaînes de caractères
    Utilisation des types génériques pour les types hints
    Quoi d'autre ?

    Macademia

    Organisme de formation à Antibes - Sophia Antipolis

    Développeur débutant ou confirmé, chef de projet, trouvez la formation qui vous convient

    • Mentions légales

    Liens rapides

    • Accueil
    • Nos Formations
    • Financement
    • Qui sommes-nous ?
    • Foire aux questions
    • Contact

    Contact

    • 7 Chemin Valentin
      06600 Antibes
    • 04 93 34 15 13

      07 66 16 15 16

    • hey@macademia.fr
    certification DataDockcertification Pole Emploi
    certification ENI
    © 2021 Macademia - Tous droits réservés