Instruction match en Python
matchest une instruction de correspondance de motifs structurelle introduite dans Python 3.10, similaire à celle d'autres langagesswitch-case, mais plus puissante.
L'instruction match peut faire correspondre des motifs dans des structures de données ; non seulement des valeurs constantes, mais aussi des motifs complexes tels que des types, des séquences, des dictionnaires.
Signification du mot: matchSignifie « correspondre », utilisé pour la correspondance de motifs.
Syntaxe de base et paramètres
L'instruction match est une nouvelle fonctionnalité de Python 3.10+, utilisée pour remplacer les structures complexes à branches multiples if-elif.
Format de syntaxe
match 变量:
case 模式1:
代码块1
case 模式2:
代码块2
case _:
默认代码块
Types de motifs
- Motif constant: correspond à une valeur spécifique.
- Motif joker:
case _Correspond à n'importe quelle valeur, équivalent au cas par défaut. - Motif de type: correspond aux types de données.
- Motif de séquence: correspond aux séquences telles que les listes, les tuples.
- Motif de dictionnaire: correspond aux dictionnaires.
- Motif avec conditions: utilisez
ifpour ajouter des conditions supplémentaires.
Exemples
Exemple 1 : Utilisation de base (similaire à switch)
Exemple
def http_status(status):
match status:
case 200:
return "OK"
case 404:
return "Not Found"
case 500:
return "Server Error"
case _:
return "Unknown"
print(http_status(200)) # Sortie : OK
print(http_status(404)) # Sortie : Non trouvé
print(http_status(999)) # Sortie : Inconnu
Sortie attendue :
OK Not Found Unknown
Analyse du code :
case _est un joker qui correspond à tous les cas non correspondants.- Similaire à default dans switch-case.
Exemple 2 : Correspondance de valeurs multiples
Exemple
def color_name(code):
match code:
case "r" | "R":
return "red"
case "g" | "G":
return "green"
case "b" | "B":
return "blue"
case _:
return "unknown"
print(color_name("r")) # Sortie : red
print(color_name("G")) # Sortie : green
print(color_name("x")) # Sortie : unknown
[/mycode]</div>
</div>
<p><strong>Sortie attendue :</strong></p>
<pre>red
green
unknown
</pre>
<p>L'utilisation de<code>|</code>permet de combiner plusieurs valeurs dans le même cas.</p>
<h3>Exemple3: Filtrage par motif de séquence</h3>
<div class="example">
<h2 class="example">Exemple</h2>
<div class="example_code">[mycode4 type="python"]
# Filtrage par motif de séquence
def describe_point(point):
match point:
case (0, 0):
return "origine"
case (x, 0):
return f"Point sur l'axe des X ({x}, 0)"
case (0, y):
return f"Point sur l'axe des Y (0, {y})"
case (x, y):
return f"Point sur le plan ({x}, {y})"
case _:
return "coordonnées invalides"
print(describe_point((0, 0))) # Sortie : origine
print(describe_point((5, 0))) # Sortie : Point sur l'axe des X (5, 0)
print(describe_point((3, 4))) # Sortie : Point sur le plan (3, 4)
Sortie attendue :
原点 X轴上的点 (5, 0) 平面上的点 (3, 4)
match peut déstructurer des tuples/listes et en extraire les valeurs.
Exemple 4 : Filtrage par motif de dictionnaire
Exemple
def process_user(user):
match user:
case {"name": name, "age": age}:
return f"Utilisateur : {name}, Âge : {age}"
case {"name": name}:
return f"Utilisateur : {name}"
case _:
return "utilisateur invalide"
print(process_user({"name": "Tom", "age": 20}))
print(process_user({"name": "Jerry"}))
print(process_user({"role": "admin"}))
Sortie attendue :
User: Tom, 年龄: 20 User: Jerry 无效用户
Les motifs de dictionnaire peuvent extraire les valeurs de clés spécifiques.
Exemple 5 : Motifs avec conditions
Exemple
def classify_number(n):
match n:
case n if n > 0:
return f"nombre positif ({n})"
case n if n < 0:
return f"nombre négatif ({n})"
case 0:
return "zéro"
print(classify_number(10)) # Sortie : nombre positif (10)
print(classify_number(-5)) # Sortie : nombre négatif (-5)
print(classify_number(0)) # Sortie : zéro
# Conditions complexes
def describe_list(lst):
match lst:
case []:
return "liste vide"
case [x]:
return f"élément unique : {x}"
case [x, y]:
return f"deux éléments : {x}, {y}"
case [x, *rest]:
return f"premier : {x}, reste : {rest}"
print(describe_list([]))
print(describe_list([1]))
print(describe_list([1, 2, 3, 4]))
Sortie attendue :
正数 (10) 负数 (-5) 零 空列表 单个元素: 1 第一个: 1, 其余: [2, 3, 4]
Utilisationcase 变量 if 条件Vous pouvez ajouter des conditions de correspondance supplémentaires.
Autres extensions
Contrôle conditionnel Python3