Mhol Guido van Rossum oibreoirí meaitseála patrún a chur le Python

Guido van Rossum tugadh isteach dréacht le haghaidh athbhreithniú pobail sonraíochtaí chun oibreoirí meaitseála patrún a chur i bhfeidhm (meaitseáil agus cás) i Python. Ba cheart a thabhairt faoi deara go bhfuil tograí chun oibreoirí a chomhoiriúnaíonn patrúin a chur leis foilsithe cheana in 2001 agus in 2006 (peip-0275, peip-3103), ach diúltaíodh dóibh i bhfabhar an tógáil “má ... elif ... eile” a bharrfheabhsú chun slabhraí meaitseála a thiomsú.

Tá an cur i bhfeidhm nua mórán cosúil leis an oibreoir "meaitseáil" a chuirtear ar fáil i Scala, Rust, agus F#, a dhéanann comparáid idir toradh slonn sonraithe le liosta de na patrúin atá liostaithe i mbloic bunaithe ar an oibreoir "cás". Murab ionann agus an t-oibreoir "lasc" atá ar fáil in C, Java, agus JavaScript, cuireann sloinn atá bunaithe ar "mheaitseáil" i bhfad níos mó ar fáil feidhmiúlacht leathan. Tugtar faoi deara go bhfeabhsóidh na hoibreoirí atá beartaithe inléiteacht an chóid, go simpleoidh siad comparáid idir rudaí agus dífhabhtaithe Python treallach, agus go méadóidh siad freisin iontaofacht an chóid a bhuíochas leis an bhféidearthacht go leathnófar é. seiceáil cineál statach.

def http_error(stádas):
stádas meaitseála:
cás 400:
seol ar ais "Drochiarratas"
cás 401|403|404:
ar ais "Ní cheadaítear"
cás 418:
ar ais "Is teapot mé"
cás_:
ar ais "rud éigin eile"

Mar shampla, is féidir leat rudaí, tuples, liostaí, agus seichimh treallach a dhíphacáil chun athróga a cheangal bunaithe ar luachanna atá ann cheana féin. Tá sé ceadaithe teimpléid neadaithe a shainiú, coinníollacha breise “má” a úsáid sa teimpléad, maisc a úsáid (“[x, y, *rest]”), mapálacha eochair/luacha (mar shampla, {“bandaleithead”: b, “latency ” : l} chun luachanna agus foclóir "bandaleithead" agus "latency" a bhaint as), fotheimpléid a bhaint as (":=" oibreoir), bain úsáid as tairisigh ainmnithe sa teimpléad. Sna ranganna, is féidir iompar meaitseála a shaincheapadh leis an modh “__match__()”.

ó dataclasses allmhairiú rang sonraí

@aicme sonraí
pointe ranga:
x:int
y:int

def whereis(point):
pointe cluiche:
cásphointe(0, 0):
cló ("Origin")
cás pointe(0, y):
print(f"Y={y}")
cás Pointe(x, 0):
print(f"X={x}")
cásphointe():
print ("Áit éigin eile")
cás_:
cló ("Ní pointe")

pointe cluiche:
cás Pointe(x, y) má tá x == y:
print(f"Y=X ag {x}")
cás Pointe(x, y):
cló(f"Ní ar an trasnánach")

DEARG, GLAS, GORM = 0, 1, 2
dath a mheaitseáil:
cás .RED:
print ("Feicim dearg!")
cás .GREEN:
cló ("Tá féar glas")
cás .BLU
E:
print(“Táim ag mothú na gormacha :(”)

Tá sraith ullmhaithe le haghaidh athbhreithnithe paistí le turgnamhach chur i bhfeidhm sonraíocht atá beartaithe, ach tá an leagan deiridh fós pléadh. Mar shampla tairgeadh In ionad na slonn "cás _:" don luach réamhshocraithe, úsáid an eochairfhocal "eile:" nó "réamhshocraithe:", ós rud é go n-úsáidtear "_" i gcomhthéacsanna eile mar athróg shealadach. Tá amhras freisin ar an eagraíocht inmheánach, atá bunaithe ar nathanna cainte nua a aistriú go bytecode cosúil leis an gceann a úsáidtear le haghaidh tógálacha “má ... elif ... eile”, nach soláthróidh an fheidhmíocht inmhianaithe agus tacair an-mhór comparáidí á bpróiseáil.

Foinse: oscailtenet.ru

Add a comment