Comment Python 3.9 a corrigé les décorateurs et amélioré les dictionnaires

  • FrançaisFrançais



  • Ceci est le dixième d’une série d’articles sur les fonctionnalités apparues pour la première fois dans une version de Python 3.x. Certaines de ces versions existent depuis un certain temps. Python 3.9 a été publié pour la première fois en 2020 avec de nouvelles fonctionnalités intéressantes qui sont encore sous-utilisées. En voici trois.

    Ajouter des dictionnaires

    Supposons que vous ayez un dictionnaire avec des «valeurs par défaut» et que vous souhaitiez le mettre à jour avec des paramètres. Avant Python 3.9, la meilleure option était de copier le dictionnaire par défaut, puis d’utiliser le .update() méthode.

    Python 3.9 a introduit l’opérateur union dans les dictionnaires:

    defaults = dict(who="someone", where="somewhere")
    params = dict(where="our town", when="today")
    defaults | params

        {'who': 'someone', 'where': 'our town', 'when': 'today'}

    Notez que l’ordre compte. Dans ce cas, le where valeur de params remplace la valeur par défaut, comme il se doit.

    Suppression des préfixes

    Si vous avez effectué une analyse ou un nettoyage de texte ad hoc avec Python, vous aurez écrit du code comme:

    def process_pricing_line(line):
        if line.startswith("pricing:"):
            return line[len("pricing:"):]
        return line
    process_pricing_line("pricing:20")

        '20'

    Ce type de code est sujet aux erreurs. Par exemple, si la chaîne n’est pas copiée correctement sur la ligne suivante, le prix deviendra 0 à la place de 20, et cela se produira silencieusement.

    Depuis Python 3.9, les chaînes ont un .lstrip() méthode:

    "pricing:20".lstrip("pricing:")
        '20'

    Expressions de décorateurs arbitraires

    Auparavant, les règles sur les expressions autorisées dans un décorateur étaient sous-documentées et difficiles à comprendre. Par exemple, tandis que:

    @item.thing
    def foo():
        pass

    est valide, et:

    @item.thing()
    def foo():
        pass

    est valide, le même:

    @item().thing
    def foo():
        pass

    produit une erreur de syntaxe.

    À partir de Python 3.9, toute expression est valide en tant que décorateur:

    from unittest import mock

    item = mock.MagicMock()

    @item().thing
    def foo():
        pass
    print(item.return_value.thing.call_args[0][0])

        <function foo at 0x7f3733897040>

    Bien que s’en tenir à des expressions simples dans la ligne du décorateur soit toujours une bonne idée, c’est maintenant une décision humaine, plutôt que l’option de l’analyseur Python.

    Bienvenue en 2020

    Python 3.9 a été publié il y a environ un an, mais certaines des fonctionnalités qui sont apparues pour la première fois dans cette version sont intéressantes et sous-utilisées. Ajoutez-les à votre boîte à outils si vous ne l’avez pas déjà fait.

    Source

    N'oubliez pas de voter pour cet article !
    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading...

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée.