Sentencia match de Python

Python3 条件控制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: useifpara agregar condiciones adicionales.

Ejemplo

Ejemplo 1: Uso básico (similar a switch)

Ejemplo

# La versión de Python requiere 3.10+
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:

  1. case _Es un comodín, coincide con todos los casos no coincidentes.
  2. Similar a default en switch-case.

Ejemplo 2: Coincidencia de múltiples valores

Ejemplo

# Múltiples valores coinciden con el mismo resultado
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

# Coincidencia de patrones de diccionario
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

# Coincidencia de patrones con condiciones
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.


Python3 条件控制Control de condiciones en Python3

Otras extensiones