Guido van Rossum stelde foar taheakjen fan patroan oerienkommende operators oan Python

Guido van Rossum yntrodusearre ûntwerp foar mienskip review spesifikaasjes foar it útfieren fan patroan oerienkommende operators (oerienkomst en gefal) yn Python. Dêrby moat opmurken wurde dat foarstellen om patroan oerienkommende operators ta te foegjen binne al publisearre yn 2001 en 2006 (pep-0275, pep-3103), mar waarden ôfwiisd yn it foardiel fan it optimalisearjen fan it "as ... elif ... else" konstruksje foar it kompilearjen fan oerienkommende keatlingen.

De nije ymplemintaasje is in protte as de "wedstriid" operator foarsjoen yn Scala, Rust, en F #, dy't fergeliket it resultaat fan in spesifisearre útdrukking mei in list fan patroanen neamd yn blokken basearre op de "case" operator. Oars as de "switch"-operator beskikber yn C, Java en JavaScript, biede "match"-basearre útdrukkingen folle mear brede funksjonaliteit. It wurdt opmurken dat de foarstelde operators sille ferbetterje de lêsberens fan 'e koade, ferienfâldigje de fergeliking fan willekeurige Python-objekten en debuggen, en ek fergrutsjen de betrouberens fan de koade troch de mooglikheid fan útwreide statyske type kontrôle.

def http_error(status):
wedstriid status:
saak 400:
werom "Min fersyk"
saak 401|403|404:
werom "Net tastien"
saak 418:
werom "Ik bin in teepot"
rjochtsaak_:
werom "Eat oars"

Jo kinne bygelyks objekten, tuples, listen en willekeurige sekwinsjes útpakke om fariabelen te binen basearre op besteande wearden. It is tastien om geneste sjabloanen te definiearjen, ekstra "as"-betingsten yn 'e sjabloan te brûken, maskers brûke ("[x, y, *rest]"), kaai-/wearde-mappings (bygelyks {"bânbreedte": b, "latency" ”: l} om "bânbreedte" en "latency" wearden en wurdboek te ekstrahearjen), subsjabloanen ekstrahearje (":=" operator), brûke neamde konstanten yn sjabloan. Yn klassen is it mooglik om oerienkommende gedrach oan te passen mei de metoade "__match__ ()".

fan dataklassen ymportearje dataklasse

@dataklasse
klasse punt:
x: ynt
y: ynt

def whereis (punt):
wedstriidpunt:
gefal Punt (0, 0):
print ("Oarsprong")
gefal Punt (0, y):
print(f"Y={y}")
gefal Punt (x, 0):
print(f"X={x}")
saakpunt():
print("Ergens anders")
rjochtsaak_:
print ("Gjin punt")

wedstriidpunt:
gefal Punt (x, y) as x == y:
print(f"Y=X at {x}")
gefal Punt (x, y):
print(f"Net op de diagonaal")

RED, GREEN, BLAUW = 0, 1, 2
oerien mei kleur:
gefal .RED:
print ("Ik sjoch read!")
gefal .GREEN:
print ("Gêrs is grien")
gefal .BLU
E:
print(“I'm feeling the blues:(“)

In set is taret foar beoardieling patches mei eksperimintele útfiering foarstelde spesifikaasje, mar de definitive ferzje is noch besprutsen. Bygelyks oanbean Ynstee fan de útdrukking "gefal _:" foar de standertwearde, brûk it kaaiwurd "oars:" of "standert:", om't "_" yn oare konteksten brûkt wurdt as tydlike fariabele. Ek twifelich is de ynterne organisaasje, dy't basearre is op it oersetten fan nije útdrukkingen yn bytekoade fergelykber mei dy brûkt foar "as ... elif ... else" konstruksjes, dy't net de winske prestaasjes leverje by it ferwurkjen fan heul grutte sets fan fergelikingen.

Boarne: opennet.ru

Add a comment