Gvido van Rosums ierosināja Python pievienot modeļu saskaņoÅ”anas operatorus

Gvido van Rosums ieviesa melnraksts sabiedrÄ«bas izskatīŔanai specifikācijas 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ā (pep-0275, pep-3103), 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. plaÅ”a funkcionalitāteTiek 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 statiskā tipa pārbaude.

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. ielāpus ar eksperimentālu Ä«stenoÅ”anu ierosinātā specifikācija, bet galÄ«gā versija joprojām ir apspriests. Piemēram, piedāvāja 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

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster