Guido van Rossum
La nova implementació s'assembla molt a l'operador "coincidència" proporcionat a Scala, Rust i F#, que compara el resultat d'una expressió especificada amb una llista de patrons llistats en blocs basats en l'operador "cas". A diferència de l'operador "switch" disponible en C, Java i JavaScript, les expressions basades en "concordança" ofereixen molt més
def http_error(estat):
estat de coincidència:
cas 400:
retornar "Petició incorrecta"
cas 401|403|404:
retornar "No permès"
cas 418:
retornar "Sóc una tetera"
Caixa_:
retornar "Alguna cosa més"
Per exemple, podeu desempaquetar objectes, tuples, llistes i seqüències arbitràries per enllaçar variables basades en valors existents. Es permet definir plantilles imbricades, utilitzar condicions addicionals "si" a la plantilla, utilitzar màscares ("[x, y, *rest]"), mapes clau/valor (per exemple, {"amplada de banda": b, "latencia") ”: l} per extreure valors i diccionari d'"amplada de banda" i "latencia", extreu subplantilles ("operador:="), utilitzeu constants anomenades a la plantilla. A les classes, és possible personalitzar el comportament de concordança mitjançant el mètode "__match__()".
de classes de dades importar classe de dades
@dataclass
Punt de classe:
x:int
y:int
def whereis(punt):
punt de partit:
cas Punt (0, 0):
print("Origen")
cas Punt(0, y):
imprimir(f"Y={y}")
cas Punt (x, 0):
imprimir(f"X={x}")
Case Point():
print("En un altre lloc")
Caixa_:
print("No és un punt")
punt de partit:
cas Punt(x, y) si x == y:
imprimir(f"Y=X a {x}")
cas Punt (x, y):
print(f"No a la diagonal")
VERMELL, VERD, BLAU = 0, 1, 2
coincideix amb el color:
cas .VERMELL:
print("Veig vermell!")
estoig .VERD:
print("L'herba és verda")
cas .BLU
E:
print(“Estic sentint el blues :(“)
S'ha preparat un conjunt per a la seva revisió
Font: opennet.ru