Python 3.10: Quelles nouveautés

La sortie de Python 3.10 se rapproche, il est donc temps de faire un tour avec la nouvelle version de Python et voir quelles nouvelles fonctionnalités impressionnantes viendront avec cette nouvelle version. La nouvelle version de python est arrivée avec de nombreuses fonctionnalités. Dans cet article, je vais vous montrer le plus important d’entre eux.

Opérateur Union

Au lieu d’utiliser typing.union pour exprimer la syntaxe « type X ou type Y »,la nouvelle version de python introduit le nouvel opérateur syndical de type X | Y. Ce nouvel opérateur nous permet de coder plus proprement et plus efficacement.

Ancienne Version:

from typing import Union
def square(number: Union[int, float]) -> Union[int, float]:
    return number ** 2
isinstance('3', int | str)

Nouvelle version:

def square(number: int | float) -> int | float:
    return number ** 2
isinstance('3', int | str)

L’annotation de TypeAlias

Le concept d’annotation TypeAlias a été introduit pour la première fois dans la version 3.5. Une réimplémentation de ce concept sera présentée dans la version 3.10. La raison principale de cette réimplémentation est que l’ancien concept est très difficile de distinguer entre les TypeAlias et les affectations ordinaires. Voir l’exemple suivant :

Ancienne Version:

StrCache = 'Cache[str]'  # un type alias
LOG_PREFIX = 'LOG[DEBUG]'  # un module constant

Nouvelle version:

StrCache: TypeAlias = 'Cache[str]'  # un type alias
LOG_PREFIX = 'LOG[DEBUG]'  # un module constant

Meilleurs messages d’erreur dans le “Parser Error”

Supposons que vous voulez écrire un code qui manipule par exemple un dictionnaire (ou tuple , liste ou ensemble ) et vous oubliez de fermer les parenthèses (ou les parenthèses). Si vous travaillez avec python 3, lorsque vous exécutez votre code, l’interprète affichera une erreur de syntaxe comme celle-ci « SyntaxError : EOF inattendu ».
Toutefois, avec cette nouvelle version, lorsque vous essayez d’analyser le code qui contient des parenthèses ou des parenthèses non fermées, l’interprète affiche une erreur plus informative avec l’emplacement de la parenthèse ou des parenthèses non fermées.

Ancienne Version:

File "example.py", line 3
some_other_code = foo()
                ^
SyntaxError: invalid syntax

Nouvelle version:

File "example.py", line 1
expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
           ^
SyntaxError: '{' was never closed

Les clause match et case

Nous pouvons dire que la fonctionnalité la plus importante sera introduite dans ce nouveau Python 3.10 les deux clauses match et case. Les modèles peuvent être des séquences, des cartographies, des types de données primitifs ainsi que des instances de classe.

Pour plus de clarté, veuillez voir les exemples suivants:

Exemple 1 :

def func(x):
    match x:
        case "x1":
            return "x1 .."
        case "x2":
            return "x2"
        case "x3" | "x4":  #  `|` équivalent à ou
            return "Yay, "
        case _:
            return "Just another x..."

Exemple 2 :

def func(X):  # X = (x, y, z)
    # point est un tuple de la forme (x, y) 
    match point:
        case (0, 0):
            print("Origine")
        case (0, y):
            print(f"Y={y}")
        case (x, 0):
            print(f"X={x}")
        case (x, y):
            print(f"X={x}, Y={y}")
        case _:
            raise ValueError("n'est pas un point")

Exemple 3 :

class Point:
    x: int
    y: int

    def location(point):
        match point:
            case Point(x=0, y=0):
                print("Origine est l'mplacement du point.")
            case Point(x=0, y=y):
                print(f"Y={y} et le point est sur l'axe des y.")
            case Point(x=x, y=0):
                print(f"X={x} et le point est sur l'axe des x.")
            case Point():
                print("point est situé ailleurs sur le plan.")
            case _:
                print("N'est pas un point")

Exemple 4 :

Nous pouvons ajouter une clause if à un modèle, appelé un garde. Si le garde est faux, match passe à essayer le bloc de cas suivant. Notez que la capture de valeur a lieu avant que le garde ne soit évalué :

match point:
    case Point(x, y) if x == y:
        print(f"Le point est situé sur la diagonale Y=X en {x}.")
    case Point(x, y):
        print(f"Point n'est pas sur la diagonale.")

Exemple 5 : Les motifs imbriqués

peuvent être imbriqués de façon arbitraire. Par exemple, si nos données sont une courte liste de points, elles peuvent être appariées de la manière suivante :

match points:
    case []:
        print("aucun point dans la liste.")
    case [Point(0, 0)]:
        print("L'origine est le seule point de la liste.")
    case [Point(x, y)]:
        print(f"un seule point {x}, {y} est dans la liste.")
    case [Point(0, y1), Point(0, y2)]:
        print(f"Deux points sur l'axe des Y en {y1}, {y2} sonts dans la liste.")
    case _:
        print("Autre chose trouvé dans la liste.")

Conclusion

Python 3.10 apporte de nombreuses nouvelles fonctionnalités intéressantes, mais comme il s’agit d’une version alpha (pas encore stable), il est encore loin d’être entièrement testé et prêt pour la production. Il n’est donc pas recommandé de commencer à l’utiliser immédiatement.

Référence pour plus de détails: Python Release Python 3.10.0a6 | Python.org

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Résoudre : *
9 ⁄ 3 =