Guido van Rossum
A nova implementación é moi parecida ao operador "coincidir" proporcionado en Scala, Rust e F#, que compara o resultado dunha expresión especificada cunha lista de patróns listados en bloques baseados no operador "case". A diferenza do operador "switch" dispoñible en C, Java e JavaScript, as expresións baseadas en "coincidencia" ofrecen moito máis
def http_error(estado):
estado de coincidencia:
caso 400:
devolver "Petición incorrecta"
caso 401|403|404:
devolver "Non permitido"
caso 418:
volver "Eu son unha tetera"
caso_:
devolver "Algo máis"
Por exemplo, pode desempaquetar obxectos, tuplas, listas e secuencias arbitrarias para vincular variables en función dos valores existentes. Permítese definir modelos anidados, usar condicións adicionais "se" no modelo, usar máscaras ("[x, y, *rest]"), asignacións clave/valor (por exemplo, {"bandwidth": b, "latency") ”: l} para extraer valores de "ancho de banda" e "latencia" e dicionario), extraer submodelos ("operador:="), usar constantes nomeadas no modelo. Nas clases, é posible personalizar o comportamento de coincidencia usando o método "__match__()".
desde dataclasses importar dataclass
@dataclass
Punto de clase:
x:int
y:int
def whereis (punto):
punto de coincidencia:
Punto do caso (0, 0):
print("Orixe")
Punto do caso (0, y):
imprimir(f"Y={y}")
Punto do caso (x, 0):
imprimir(f"X={x}")
punto de caso():
print("Outro lugar")
caso_:
print("Non é un punto")
punto de coincidencia:
caso Punto(x, y) se x == y:
imprimir(f"Y=X en {x}")
caso Punto (x, y):
print(f"Non na diagonal")
VERMELLO, VERDE, AZUL = 0, 1, 2
combinar cor:
caso .VERMELLO:
print("Vexo vermello!")
caso .VERDE:
print("A herba é verde")
caso .BLU
E:
print("Sinto o blues :(")
Preparouse un conxunto para a súa revisión
Fonte: opennet.ru