Sentencia match de Python
Control de condiciones en Python3
matches una declaración de coincidencia de patrones estructurales introducida en Python 3.10, similar a la de otros lenguajesswitch-case, pero es más potente.
La declaración match puede coincidir con patrones de estructuras de datos, no solo valores constantes, sino también patrones complejos como tipos, secuencias, diccionarios, etc.
Definición de la palabra: matchSignifica 'coincidir' (match), se usa para la coincidencia de patrones.
Sintaxis básica y parámetros
La declaración match es una nueva característica de Python 3.10+, utilizada para reemplazar las complejas estructuras de múltiples ramas if-elif.
Formato de sintaxis
match 变量:
case 模式1:
代码块1
case 模式2:
代码块2
case _:
默认代码块
Tipos de patrones
- Patrón constante: coincide con un valor específico.
- Patrón comodín:
case _Coincide con cualquier valor, equivalente a default. - Patrón de tipo: coincide con el tipo de dato.
- Patrón de secuencia: coincide con secuencias como listas, tuplas, etc.
- Patrón de diccionario: coincide con diccionarios.
- Patrón con condiciones: use
ifpara agregar condiciones adicionales.
Ejemplo
Ejemplo 1: Uso básico (similar a switch)
Ejemplo
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)) # Salida: OK
print(http_status(404)) # Salida: Not Found
print(http_status(999)) # Salida: Unknown
Resultado esperado:
OK Not Found Unknown
Análisis del código:
case _Es un comodín, coincide con todos los casos no coincidentes.- Similar a default en switch-case.
Ejemplo 2: Coincidencia de múltiples valores
Ejemplo
def color_name(code):
match code:
case "r" | "R":
return Rojo
case "g" | "G":
return Verde
case "b" | "B":
return Azul
case _:
return Desconocido
print(color_name("r")) # Salida: Rojo
print(color_name("G")) # Salida: Verde
print(color_name("x")) # Salida: Desconocido
[/mycode]</div>
</div>
<p><strong>Resultado esperado:</strong></p>
<pre>Rojo
Verde
Desconocido
</pre>
<p>Usando<code>|</code>se pueden combinar varios valores en el mismo case.</p>
<h3>Ejemplo3: Coincidencia de patrones de secuencia</h3>
<div class="example">
<h2 class="example">Ejemplo</h2>
<div class="example_code">[mycode4 type="python"]
# Coincidencia de patrones de secuencia
def describe_point(point):
match point:
case (0, 0):
return Origen
case (x, 0):
return fPunto en el eje X ({x}, 0)
case (0, y):
return fPunto en el eje Y (0, {y})
case (x, y):
return fPunto en el plano ({x}, {y})
case _:
return Coordenadas no válidas
print(describe_point((0, 0))) # Salida: Origen
print(describe_point((5, 0))) # Salida: Punto en el eje X (5, 0)
print(describe_point((3, 4))) # Salida: Punto en el plano (3, 4)
Resultado esperado:
原点 X轴上的点 (5, 0) 平面上的点 (3, 4)
match puede desestructurar tuplas/listas, extrayendo sus valores.
Ejemplo 4: Coincidencia de patrones de diccionario
Ejemplo
def process_user(user):
match user:
case {"name": name, "age": age}:
return fUsuario: {name}, Edad: {age}
case {"name": name}:
return fUsuario: {name}
case _:
return Usuario no válido
print(process_user({"name": "Tom", "age": 20}))
print(process_user({"name": "Jerry"}))
print(process_user({"role": "admin"}))
Resultado esperado:
Usuario: Tom, 年龄: 20 Usuario: Jerry 无效用户
El patrón de diccionario puede extraer los valores de claves específicas.
Ejemplo 5: Patrones con condiciones
Ejemplo
def classify_number(n):
match n:
case n if n > 0:
return fPositivo ({n})
case n if n < 0:
return fNegativo ({n})
case 0:
return Cero
print(classify_number(10)) # Salida: Positivo (10)
print(classify_number(-5)) # Salida: Negativo (-5)
print(classify_number(0)) # Salida: Cero
# Condiciones complejas
def describe_list(lst):
match lst:
case []:
return Lista vacía
case [x]:
return fElemento único: {x}
case [x, y]:
return fDos elementos: {x}, {y}
case [x, *rest]:
return fPrimero: {x}, Resto: {rest}
print(describe_list([]))
print(describe_list([1]))
print(describe_list([1, 2, 3, 4]))
Resultado esperado:
正数 (10) 负数 (-5) 零 空列表 单个元素: 1 第一个: 1, 其余: [2, 3, 4]
Usandocase 变量 if 条件se pueden agregar condiciones adicionales de coincidencia.
Otras extensiones