De Guido van Rossum huet proposéiert Muster passend Betreiber op Python ze addéieren

Guido van Rossum agefouert Entworf fir Communautéit review Spezifikatioune fir Muster passend Betreiber (Match a Fall) am Python ëmzesetzen. Et sollt bemierkt ginn datt Virschléi fir Muster passend Betreiber ze addéieren schonn am Joer 2001 an 2006 publizéiert goufen (pep-0275, pep-3103), awer goufen ofgeleent zugonschte vun der Optimisatioun vum "wann ... elif ... else" Konstrukt fir passende Ketten ze kompiléieren.

Déi nei Implementatioun ass vill wéi de "Match" Bedreiwer, deen a Scala, Rust, a F # geliwwert gëtt, deen d'Resultat vun engem spezifizéierte Ausdrock vergläicht mat enger Lëscht vu Musteren, déi a Blocken opgezielt sinn, baséiert op dem "Fall" Bedreiwer. Am Géigesaz zum "Switch" Bedreiwer verfügbar an C, Java a JavaScript, bidden "Match"-baséiert Ausdréck vill méi breet Funktionalitéit. Et gëtt bemierkt datt déi proposéiert Betreiber d'Liesbarkeet vum Code verbesseren, de Verglach vun arbiträren Python-Objeten an Debugging vereinfachen, an och d'Zouverlässegkeet vum Code erhéijen wéinst der Méiglechkeet fir verlängert ze ginn. statesch Typ Kontroll.

def http_error(status):
Match Status:
Fall 400:
zréck "Schlecht Ufro"
Fall 401|403|404:
zréck "Net erlaabt"
Fall 418:
zréck "Ech sinn en Teapot"
Fall_:
zréck "Eppes anescht"

Zum Beispill kënnt Dir Objeten, Tupelen, Lëschten an arbiträr Sequenzen auspacken fir Variabelen op Basis vu existente Wäerter ze binden. Et ass erlaabt nestet Templates ze definéieren, zousätzlech "wann" Bedéngungen an der Schabloun ze benotzen, Masken benotzen ("[x, y, *rest]"), Schlëssel-/Wäertmappingen (zum Beispill {"Bandwidth": b, "latency" ”: l} fir "Bandbreedung" an "Latenz" Wäerter an Dictionnaire ze extrahieren), Subtemplates extrahieren (":=" Bedreiwer), benotzt genannt Konstanten an der Schabloun. A Klassen ass et méiglech passende Verhalen mat der Method "__match__ ()" ze personaliséieren.

aus dataclasses importéieren dataclass

@dataclass
Klass Punkt:
x: eng
y: eng

def whereis (Punkt):
Match Punkt:
Fall Punkt (0, 0):
print ("Origine")
Fall Punkt (0, y):
print(f"Y={y}")
Fall Punkt (x, 0):
print(f"X={x}")
Fall Punkt():
print ("Säit anescht")
Fall_:
print ("Net e Punkt")

Match Punkt:
Fall Punkt(x, y) wann x == y:
print(f"Y=X bei {x}")
Fall Punkt (x, y):
print(f"Net op der Diagonal")

ROUT, GRÉNG, BLOU = 0, 1, 2
Match Faarf:
Fall .RED:
print ("Ech gesinn rout!")
Fall .GREEN:
print ("Gras ass gréng")
Fall .BLU
E:
print ("Ech fille de Blues :(")

E Set gouf fir Iwwerpréiwung virbereet Flecken mat experimentellen Ëmsetzung proposéiert Spezifizéierung, awer déi definitiv Versioun ass nach ëmmer diskutéiert. Zum Beispill offréiert Amplaz vum Ausdrock "Fall _:" fir de Standardwäert, benotzt d'Schlësselwuert "soss:" oder "Default:", well "_" an anere Kontexter als temporär Variabel benotzt gëtt. Zweifelhaft ass och d'intern Organisatioun, déi baséiert op der Iwwersetzung vun neien Ausdréck an Bytecode ähnlech wéi dee benotzt fir "wann ... elif ... else" Konstruktiounen, déi net déi gewënscht Leeschtung liwweren wann Dir ganz grouss Sätz vu Vergläicher veraarbecht.

Source: opennet.ru

Setzt e Commentaire