Guido van Rossum
A nova implementação é muito parecida com o operador “match” fornecido em Scala, Rust e F#, que compara o resultado de uma expressão especificada com uma lista de padrões listados em blocos baseados no operador “case”. Ao contrário do operador “switch” disponível em C, Java e JavaScript, as expressões baseadas em “match” oferecem muito mais
def http_error(status):
status da correspondência:
caso 400:
retornar "Solicitação incorreta"
caso 401|403|404:
retornar "Não permitido"
caso 418:
retorne "Eu sou um bule de chá"
caso _:
retornar "Outra coisa"
Por exemplo, você pode descompactar objetos, tuplas, listas e sequências arbitrárias para vincular variáveis com base em valores existentes. É permitido definir modelos aninhados, usar condições “if” adicionais no modelo, usar máscaras (“[x, y, *rest]”), mapeamentos de chave/valor (por exemplo, {“largura de banda”: b, “latência ”: l} para extrair valores e dicionário de "largura de banda" e "latência"), extrair submodelos (operador ":="), usar constantes nomeadas no modelo. Nas aulas, é possível personalizar o comportamento de correspondência usando o método “__match__()”.
de classes de dados importar classe de dados
@dataclass
ponto de classe:
x:int
você:int
def onde está (ponto):
ponto que decide o jogo:
caso Ponto (0, 0):
imprimir("Origem")
caso Ponto (0, y):
imprimir(f"S={y}")
ponto de caso (x, 0):
imprimir(f"X={x}")
ponto de caso():
print("Em outro lugar")
caso _:
print("Nem um ponto")
ponto que decide o jogo:
caso Ponto (x, y) se x == y:
imprimir(f"Y=X em {x}")
ponto de caso (x, y):
print(f"Não está na diagonal")
VERMELHO, VERDE, AZUL = 0, 1, 2
combinar cor:
caso .RED:
print("Vejo vermelho!")
caso .VERDE:
print("A grama é verde")
caso .BLU
E:
print(“Estou me sentindo triste :(“)
Um conjunto foi preparado para revisão
Fonte: opennet.ru