Gvido van Rosums melnraksts sabiedrÄ«bas izskatīŔanai lai ieviestu modeļu saskaÅoÅ”anas operatorus (match un case) Python valodÄ. JÄatzÄ«mÄ, ka priekÅ”likumi modeļu saskaÅoÅ”anas operatoru pievienoÅ”anai jau tika publicÄti 2001. un 2006. gadÄ (, ), bet tika noraidÄ«ti par labu konstrukcijas "if ... elif ... else" optimizÄÅ”anai, lai izveidotu atbilstoÅ”as āāÄ·Ädes.
JaunÄ ievieÅ”ana ir ļoti lÄ«dzÄ«ga Scala, Rust un F# nodroÅ”inÄtajam "match" operatoram, kas salÄ«dzina norÄdÄ«tÄs izteiksmes rezultÄtu ar modeļu sarakstu, kas norÄdÄ«ts uz gadÄ«jumiem balstÄ«tos blokos. AtŔķirÄ«bÄ no "switch" operatora, kas pieejams C, Java un JavaScript valodÄs, uz "match" balstÄ«tas izteiksmes piedÄvÄ daudz vairÄk. Tiek atzÄ«mÄts, ka piedÄvÄtie operatori uzlabos koda lasÄmÄ«bu, vienkÄrÅ”os patvaļīgu Python objektu salÄ«dzinÄÅ”anu un atkļūdoÅ”anu, kÄ arÄ« palielinÄs koda uzticamÄ«bu, pateicoties iespÄjai paplaÅ”inÄt .
def http_error(statuss):
spÄles statuss:
400 gadījums:
atgriezt "Nederīgs pieprasījums"
401.|403.|404. lieta:
atgriezt "Nav atļauts"
418 gadījums:
atgriezt "Esmu tÄjkanna"
gadījums _:
atgriezt "Kaut kas cits"
PiemÄram, ir iespÄjams izpakot objektus, kortežus, sarakstus un patvaļīgas secÄ«bas, lai saistÄ«tu mainÄ«gos, pamatojoties uz esoÅ”ajÄm vÄrtÄ«bÄm. Ir iespÄjams definÄt ligzdotas veidnes, izmantot papildu "if" nosacÄ«jumus veidnÄ, lietot maskas ("[x, y, *rest]"), kartÄt atslÄgu/vÄrtÄ«bu pÄrus (piemÄram, {"bandwidth": b, "latency": l}, lai iegÅ«tu "bandwidth" un "latency" vÄrtÄ«bas āāun vÄrdnÄ«cu), iegÅ«t apakÅ”veidnes (operators ":=") un izmantot nosauktas konstantes veidnÄ. AtbilstÄ«bas uzvedÄ«bu var pielÄgot klasÄs, izmantojot metodi "__match__()".
no datu klasÄm importÄt datu klasi
@dataclass
klases punkts:
x: int
y: int
def whereis(punkts):
spÄles punkts:
gadījuma punkts (0, 0):
print("Izcelsme")
gadījums Punkts(0, y):
izdrukÄt(fĀ»Y={y}Ā»)
gadījuma punkts(x, 0):
izdrukÄt(fĀ»X={x}Ā»)
gadījuma punkts():
drukÄt("Kaut kur citur")
gadījums _:
print("Nav punkta")
spÄles punkts:
gadījuma punkts(x, y), ja x == y:
drukÄt(fĀ»Y=X pie {x}Ā»)
gadījuma punkts(x, y):
print(f"Nav pa diagonÄli")
SARKANS, ZAĻŠ, ZILS = 0, 1, 2
atbilstÄ«bas krÄsa:
lieta .RED:
drukÄt("Es redzu sarkanu!")
gadījums .ZAĻŠ:
drukÄt("ZÄle ir zaļa")
lieta .BLU
E:
drukÄt(āMan ir skumji :(ā)
PÄrskatīŔanai ir sagatavots materiÄlu komplekts. ar eksperimentÄlu ierosinÄtÄ specifikÄcija, bet galÄ«gÄ versija joprojÄm ir . PiemÄram, NoklusÄjuma vÄrtÄ«bas vietÄ izteiksmes "case _:" vietÄ izmantojiet atslÄgvÄrdu "else:" vai "default:", jo citos kontekstos "_" tiek izmantots kÄ pagaidu mainÄ«gais. IekÅ”ÄjÄ organizÄcija, kas balstÄ«ta uz jaunu izteiksmju tulkoÅ”anu baitkodÄ, kas ir lÄ«dzÄ«gs tam, ko izmanto "if...elif...else" konstrukcijÄm, rada arÄ« jautÄjumus, kas nenodroÅ”inÄs vÄlamo veiktspÄju, apstrÄdÄjot ļoti lielus salÄ«dzinÄjumu kopumus.
Avots: opennet.ru
