Guido van Rossum
Nová implementácia je veľmi podobná operátoru "match" poskytovanému v Scala, Rust a F#, ktorý porovnáva výsledok zadaného výrazu so zoznamom vzorov uvedených v blokoch na základe operátora "case". Na rozdiel od operátora „switch“ dostupného v jazykoch C, Java a JavaScript, výrazy založené na „zhode“ ponúkajú oveľa viac
def http_error(stav):
stav zápasu:
prípad 400:
vrátiť "zlá požiadavka"
prípad 401|403|404:
vrátiť "Nie je povolené"
prípad 418:
návrat "som čajník"
prípad_:
vrátiť "niečo iné"
Môžete napríklad rozbaliť objekty, n-tice, zoznamy a ľubovoľné sekvencie a naviazať premenné na základe existujúcich hodnôt. Je povolené definovať vnorené šablóny, používať ďalšie podmienky „if“ v šablóne, používať masky („[x, y, *rest]“), mapovania kľúč/hodnota (napríklad {„šírka pásma“: b, „latencia ”: l} na extrahovanie hodnôt "šírky pásma" a "latencie" a slovníka, extrahovanie podšablón (operátor ":="), použitie pomenovaných konštánt v šablóne. V triedach je možné prispôsobiť správanie zhody pomocou metódy „__match__()“.
z dataclasses importovať dataclass
@dataclass
bod triedy:
x:int
y:int
def whereis(bod):
bod za zápas:
case Point(0, 0):
vytlačiť ("Pôvod")
case Point(0, y):
print(f"Y={y}")
bod prípadu (x, 0):
print(f"X={x}")
bod prípadu():
vytlačiť ("Niekde inde")
prípad_:
vytlačiť ("To nie je bod")
bod za zápas:
case Point(x, y) ak x == y:
print(f"Y=X pri {x}")
bod prípadu (x, y):
print(f"Nie na diagonále")
ČERVENÁ, ZELENÁ, MODRÁ = 0, 1, 2
zodpovedať farbe:
puzdro .RED:
vytlačiť ("Vidím červené!")
puzdro .GREEN:
tlač ("tráva je zelená")
puzdro .BLU
E:
tlač („Cítim blues :(“)
Súprava bola pripravená na kontrolu
Zdroj: opennet.ru