Guido van Rossum
La nouvelle implémentation ressemble beaucoup à l'opérateur « match » fourni dans Scala, Rust et F#, qui compare le résultat d'une expression spécifiée avec une liste de modèles répertoriés dans des blocs basés sur l'opérateur « case ». Contrairement à l'opérateur « switch » disponible en C, Java et JavaScript, les expressions basées sur « match » offrent bien plus
def http_error (statut) :
statut du match :
cas 400:
renvoyer "Mauvaise demande"
cas 401|403|404 :
retourner "Non autorisé"
cas 418:
revenir "Je suis une théière"
cas _:
retourner "Autre chose"
Par exemple, vous pouvez décompresser des objets, des tuples, des listes et des séquences arbitraires pour lier des variables en fonction de valeurs existantes. Il est permis de définir des modèles imbriqués, d'utiliser des conditions « if » supplémentaires dans le modèle, d'utiliser des masques (« [x, y, *rest] »), des mappages clé/valeur (par exemple, {« bande passante » : b, « latence » ”: l} pour extraire les valeurs de « bande passante » et de « latence » et le dictionnaire), extraire les sous-modèles (opérateur :="), utiliser les constantes nommées dans le modèle. Dans les classes, il est possible de personnaliser le comportement de correspondance à l'aide de la méthode « __match__() ».
à partir des classes de données importer une classe de données
@classededonnées
Point de classe :
x:int
y:int
def où est (point):
balle de match:
cas Point(0, 0):
print("Origine")
cas Point(0, y):
imprimer(f"Y={y}")
cas Point(x, 0):
imprimer(f"X={x}")
Point de cas() :
print("Ailleurs")
cas _:
print("Pas un point")
balle de match:
cas Point(x, y) si x == y :
print(f"Y=X à {x}")
cas Point(x, y):
print(f"Pas sur la diagonale")
ROUGE, VERT, BLEU = 0, 1, 2
correspondre à la couleur :
cas .RED :
print("Je vois rouge!")
cas .VERT :
print("L'herbe est verte")
cas .BLU
E:
print("J'ai le blues :(")
Un ensemble a été préparé pour examen
Source: opennet.ru