Guido van Rossum dia nanolo-kevitra ny hampiditra mpandraharaha mifanandrify amin'ny lamina amin'ny Python

Guido van Rossum nanaiky drafitra ho an'ny fandinihana ny fiaraha-monina fepetra arahana amin'ny fampiharana ireo mpandraharaha mifanandrify (match sy case) amin'ny Python. Marihina fa efa nivoaka tamin'ny taona 2001 sy 2006 ny tolo-kevitra hanampiana ireo mpandraharaha mifanandrify amin'ny modely (pep-0275, pep-3103), fa nolavina noho ny fanatsarana ny “if ... elif ... else” ho an'ny fanangonana rojo mifanentana.

Ny fampiharana vaovao dia mitovy amin'ny mpandraharaha "match" omena ao amin'ny Scala, Rust, ary F #, izay mampitaha ny vokatry ny fanehoan-kevitra voafaritra miaraka amin'ny lisitry ny lamina voatanisa ao anaty sakana mifototra amin'ny mpandraharaha "tranga". Tsy toy ny mpandraharaha "switch" misy amin'ny C, Java, ary JavaScript, ny fomba fiteny mifototra amin'ny "match" dia manolotra betsaka kokoa malalaka fiasa. Marihina fa ireo mpandraharaha natolotra dia hanatsara ny famakian-teny ny kaody, hanamora ny fampitahana ireo zavatra Python tsy misy dikany sy ny debugging, ary hampitombo ny fahatokisana ny kaody noho ny mety hisian'ny fanitarana. fanamarinana karazana static.

def http_error(status):
sata lalao:
tranga 400:
avereno "Fangatahana ratsy"
tranga 401|403|404:
miverina "Tsy azo atao"
tranga 418:
miverena "teapot aho"
tranga_:
miverina "zavatra hafa"

Ohatra, azonao atao ny mamaha zavatra, tuples, lisitra, ary filaharana tsy misy dikany mba hamehezana ny fari-piainana mifototra amin'ny sanda efa misy. Azo atao ny mamaritra ny maodely misy akany, mampiasa fepetra fanampiny "raha" ao amin'ny môdely, mampiasa saron-tava ("[x, y, *rest]"), fanalahidin'ny sarintany (ohatra, {"bandwidth": b, "latency ”: l} hanesorana ny soatoavina "bandwidth" sy "latency" ary rakibolana), alaivo ny subtemplates (":=" operator), ampiasao ny antsoina hoe constants amin'ny template. Ao an-dakilasy, azo atao ny mampifanaraka ny fitondran-tena mifanaraka amin'ny fampiasana ny fomba "__match__()".

avy amin'ny dataclasses import dataclass

@dataclass
teboka kilasy:
x:int
y:int

def whereis (point):
teboka mifanandrify:
tranga teboka(0, 0):
print ("Origin")
teboka tranga(0, y):
print(f"Y={y}")
teboka tranga(x, 0):
print(f"X={x}")
Case Point ():
print ("Any an-kafa")
tranga_:
print ("Tsy teboka")

teboka mifanandrify:
tranga Point(x, y) raha x == y:
print(f"Y=X amin'ny {x}")
teboka tranga (x, y):
print(f"Tsy eo amin'ny diagonaly")

Mena, Maitso, Manga = 0, 1, 2
loko mifanaraka:
tranga .mena:
print ("Mahita mena aho!")
tranga . MAITSO:
print("maitso ny ahitra")
tranga .BLU
E:
print(“Tsapako ny blues :(“)

Nisy andiana nomanina hojerena tampina miaraka amin'ny fanandramana fanatanterahana soso-kevitra natolotra, fa ny dikan farany dia mbola niresaka. Ohatra nanatitra Ho solon'ny teny hoe "tranga _:" ho an'ny sandan'ny default, ampiasao ny teny fanalahidy "else:" na "default:", satria "_" amin'ny toe-javatra hafa dia ampiasaina ho miovaova vonjimaika. Mampametra-panontaniana ihany koa ny fandaminana anatiny, izay mifototra amin'ny fandikana teny vaovao ho amin'ny bytecode mitovy amin'ilay ampiasaina amin'ny fananganana "raha ... elif ... else", izay tsy hanome ny fampisehoana irina rehefa manamboatra andiana fampitahana tena goavana.

Source: opennet.ru

Add a comment