Guido van Rossum
Uus teostus sarnaneb paljuski Scala, Rust ja F# pakutavale operaatorile "match", mis võrdleb määratud avaldise tulemust plokkides loetletud mustrite loendiga operaatori "case" alusel. Erinevalt C-s, Java-s ja JavaScriptis saadaolevast operaatorist "switch" pakuvad "match"-põhised avaldised palju rohkem
def http_error(status):
vaste olek:
juhtum 400:
tagasta "halb taotlus"
juhtum 401|403|404:
tagasta "Pole lubatud"
juhtum 418:
tagasta "ma olen teekann"
juhtum_:
tagasta "midagi muud"
Näiteks saate olemasolevate väärtuste alusel muutujate sidumiseks lahti pakkida objekte, kortereid, loendeid ja suvalisi jadasid. Lubatud on defineerida pesastatud malle, kasutada mallis täiendavaid "if" tingimusi, kasutada maske ("[x, y, *rest]"), võtme/väärtuse vastendusi (näiteks {"bandwidth": b, "latency" ”: l} "ribalaiuse" ja "latentsuse" väärtuste ja sõnastiku eraldamiseks, alammallide ekstraktimiseks (operaator ":="), kasutage mallis nimega konstante. Klassides on võimalik sobitamiskäitumist kohandada kasutades meetodit “__match__()”.
andmeklassidest impordi andmeklassi
@andmeklass
klassi punkt:
x:int
y:int
def whereis(punkt):
mängupunkt:
juhtumipunkt(0, 0):
print ("Päritolu")
juhtumipunkt(0, y):
print(f"Y={y}")
Juhtumi punkt(x, 0):
print(f"X={x}")
case Point():
print ("Kusagil mujal")
juhtum_:
print ("Pole mõtet")
mängupunkt:
juhtum Punkt(x, y), kui x == y:
print(f"Y=X kell {x}")
juhtumipunkt(x, y):
print(f"Ei ole diagonaalis")
PUNANE, ROHELINE, SININE = 0, 1, 2
sobitada värv:
ümbris .PUNANE:
print ("Ma näen punast!")
ümbris .ROHELINE:
print ("Rohi on roheline")
ümbris .BLU
E:
print("Ma tunnen bluusi :(")
Ülevaatamiseks on komplekt ette valmistatud
Allikas: opennet.ru