Guido van Rossum lagði til að bæta mynstursamsvörun rekstraraðila við Python

Guido van Rossum kynnt drög til samfélagsskoðunar forskrift til að útfæra mynstursamsvörun rekstraraðila (samsvörun og mál) í Python. Það skal tekið fram að tillögur um að bæta við mynstursamsvörun rekstraraðila hafa þegar verið birtar á árunum 2001 og 2006 (pep-0275, pep-3103), en var hafnað í þágu þess að hagræða „ef ... elif ... else“ til að setja saman samsvarandi keðjur.

Nýja útfærslan er mjög lík "samsvörun" rekstraraðilanum sem gefin er upp í Scala, Rust og F#, sem ber saman niðurstöðu tiltekinnar tjáningar við lista yfir mynstur sem skráð eru í kubbum byggt á "case" rekstraraðilanum. Ólíkt „switch“ stjórnandanum sem er fáanlegur í C, Java og JavaScript, bjóða „samsvörun“ byggðar tjáningar miklu meira breiður virkni. Það er tekið fram að fyrirhugaðir rekstraraðilar munu bæta læsileika kóðans, einfalda samanburð á handahófskenndum Python hlutum og villuleit og einnig auka áreiðanleika kóðans vegna möguleika á framlengdum kyrrstöðugerð eftirlit.

def http_error (staða):
staða leiks:
mál 400:
skila "Slæm beiðni"
mál 401|403|404:
skila "Ekki leyft"
mál 418:
skila "Ég er tepotti"
Málið_:
skila "Eitthvað annað"

Til dæmis geturðu pakkað niður hlutum, túllum, listum og handahófskenndum röðum til að binda breytur byggðar á gildandi gildum. Það er leyfilegt að skilgreina hreiður sniðmát, nota viðbótar „ef“ skilyrði í sniðmátinu, nota grímur („[x, y, *rest]“), lykla-/gildavörp (til dæmis {“bandwidth”: b, „latency“ ”: l} til að draga út „bandbreidd“ og „leynd“ gildi og orðabók), draga út undirsniðmát (":=" rekstraraðila), notaðu nafngreinda fasta í sniðmátinu. Í flokkum er hægt að sérsníða samsvörunarhegðun með því að nota „__match__()“ aðferðina.

frá gagnaflokkum flytja inn gagnaflokk

@gagnaflokkur
flokkspunktur:
x: int
y:int

def whereis (punktur):
mótspunktur:
Case Point(0, 0):
print ("Uppruni")
tilvikspunktur (0, y):
print(f"Y={y}")
tilvikspunktur(x, 0):
print(f"X={x}")
Case Point():
print("Einhvers staðar annars staðar")
Málið_:
print("Ekki punktur")

mótspunktur:
fallpunktur(x, y) ef x == y:
print(f"Y=X at {x}")
tilvikspunktur (x, y):
print(f"Ekki á ská")

RAUTT, GRÆNT, BLÁR = 0, 1, 2
passa lit:
hulstur .RED:
print("Ég sé rautt!")
tilfelli .GRÆN:
print("Gras er grænt")
tilfelli .BLU
E:
print(“Ég er að fíla blúsinn :(“)

Sett hefur verið útbúið til endurskoðunar plástra með tilraunastarfsemi framkvæmd fyrirhuguð forskrift, en endanleg útgáfa er enn rætt. Til dæmis, boðið upp á Í stað orðtaksins "case _:" fyrir sjálfgefið gildi, notaðu lykilorðið "else:" eða "default:", þar sem "_" í öðru samhengi er notað sem tímabundin breyta. Innra skipulag er einnig vafasamt, sem byggir á því að þýða nýjar orðasambönd í bækikóða svipað því sem notað er fyrir „ef ... elif ... else“ smíðar, sem mun ekki veita tilætluðum árangri þegar unnið er úr mjög stórum samanburðarhópum.

Heimild: opennet.ru

Bæta við athugasemd