Guido van Rossum
Nová implementace je podobná operátoru "match" poskytovanému v Scala, Rust a F#, který porovnává výsledek zadaného výrazu se seznamem vzorů uvedených v blocích na základě operátoru "case". Na rozdíl od operátoru „switch“ dostupného v jazycích C, Java a JavaScript nabízejí výrazy založené na „match“ mnohem více
def http_error(stav):
stav zápasu:
případ 400:
vrátit "Špatný požadavek"
případ 401|403|404:
vrátit "Není povoleno"
případ 418:
návrat "Jsem čajník"
pouzdro_:
vrátit "něco jiného"
Můžete například rozbalit objekty, n-tice, seznamy a libovolné sekvence a svázat proměnné na základě existujících hodnot. Je povoleno definovat vnořené šablony, používat další podmínky „if“ v šabloně, používat masky („[x, y, *rest]“), mapování klíč/hodnota (například {„šířka pásma“: b, „latence ”: l} pro extrahování hodnot "šířky pásma" a "latence" a slovníku, extrahování podšablon (operátor ":="), použití pojmenovaných konstant v šabloně. Ve třídách je možné přizpůsobit chování shody pomocí metody „__match__()“.
z datových tříd importovat datovou třídu
@dataclass
bod třídy:
x:int
y:int
def whereis(bod):
zápasový bod:
případový bod(0, 0):
tisk ("původ")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
případový bod():
tisk ("Někde jinde")
pouzdro_:
tisknout ("To není bod")
zápasový bod:
case Point(x, y) if x == y:
print(f"Y=X v {x}")
případ Point(x, y):
print(f"Ne na diagonále")
ČERVENÁ, ZELENÁ, MODRÁ = 0, 1, 2
odpovídat barvě:
pouzdro .RED:
tisk ("Vidím červeně!")
pouzdro .ZELENÁ:
tisk ("tráva je zelená")
pouzdro .BLU
E:
tisk („Cítím blues :(“)
Sada byla připravena ke kontrole
Zdroj: opennet.ru