Guido van Rossum ippropona li żżid operaturi ta' tqabbil tal-mudelli ma' Python

Guido van Rossum daħħal abbozz għal reviżjoni tal-komunità speċifikazzjonijiet għall-implimentazzjoni ta' operaturi ta' tqabbil tal-mudelli (match u case) f'Python. Ta’ min jinnota li proposti biex jiżdiedu operaturi ta’ tqabbil tal-mudelli diġà ġew ippubblikati fl-2001 u l-2006 (pep-0275, pep-3103), iżda ġew miċħuda favur l-ottimizzazzjoni tal-kostruzzjoni "jekk ... elif ... inkella" għall-kompilazzjoni ta 'ktajjen ta' tqabbil.

L-implimentazzjoni l-ġdida hija ħafna bħall-operatur "taqbil" ipprovdut fi Scala, Rust, u F#, li jqabbel ir-riżultat ta 'espressjoni speċifikata ma' lista ta 'mudelli elenkati fi blokki bbażati fuq l-operatur "każ". B'differenza mill-operatur "swiċċ" disponibbli f'C, Java, u JavaScript, espressjonijiet ibbażati fuq "taqbil" joffru ħafna aktar funzjonalità wiesgħa. Huwa nnutat li l-operaturi proposti se jtejbu l-leġibbiltà tal-kodiċi, jissimplifikaw it-tqabbil ta 'oġġetti Python arbitrarji u debugging, u jżidu wkoll l-affidabbiltà tal-kodiċi grazzi għall-possibbiltà ta' estiża verifika tat-tip statiku.

def http_error(status):
status tal-logħba:
każ 400:
ritorn "Talba ħażina"
każ 401|403|404:
ritorn "Mhux permess"
każ 418:
ritorn "Jien teapot"
każ_:
ritorn "Xaġa oħra"

Pereżempju, tista' tneħħi l-ippakkjar ta' oġġetti, tuples, listi, u sekwenzi arbitrarji biex torbot varjabbli bbażati fuq valuri eżistenti. Huwa permess li jiġu definiti mudelli nested, tuża kundizzjonijiet addizzjonali "jekk" fil-mudell, tuża maskri ("[x, y, *mistrieħ]"), mappings taċ-ċavetta/valur (per eżempju, {"bandwidth": b, "latency" ”: l} biex jiġu estratti l-valuri u d-dizzjunarju "bandwidth" u "latency", estratti sottotemplates (":=" operatur), uża kostanti msemmija fil-mudell. Fil-klassijiet, huwa possibbli li tippersonalizza l-imġiba ta 'tqabbil bl-użu tal-metodu "__match__()".

minn dataclasses importazzjoni dataclass

@dataclass
klassi Punt:
x:int
y:int

def whereis(punt):
punt ta' partita:
każ Punt(0, 0):
print("Oriġini")
każ Punt(0, y):
print(f"Y={y}")
każ Punt(x, 0):
print(f"X={x}")
każ Punt():
print("X'imkien ieħor")
każ_:
print("Mhux punt")

punt ta' partita:
każ Punt(x, y) jekk x == y:
print(f"Y=X f'{x}")
każ Punt(x, y):
print(f"Mhux fuq id-dijagonali")

AĦMAR, AĦDAR, BLUE = 0, 1, 2
taqbel bil-kulur:
każ .RED:
print("Nara aħmar!")
każ .AĦDAR:
print ("Il-ħaxix huwa aħdar")
każ .BLU
E:
print(“Qed inħoss il-blu :(“)

Ġie ppreparat sett għar-reviżjoni irqajja ma sperimentali implimentazzjoni speċifikazzjoni proposta, iżda l-verżjoni finali għadha diskuss. Pereżempju offruti Minflok l-espressjoni "każ _:" għall-valur default, uża l-kelma prinċipali "else:" jew "default:", peress li "_" f'kuntesti oħra tintuża bħala varjabbli temporanja. Huwa dubjuż ukoll l-organizzazzjoni interna, li hija bbażata fuq it-traduzzjoni ta 'espressjonijiet ġodda f'bytecode simili għal dik użata għal kostruzzjonijiet "jekk ... elif ... inkella", li mhux se jipprovdu l-prestazzjoni mixtieqa meta jiġu pproċessati settijiet kbar ħafna ta' paraguni.

Sors: opennet.ru

Żid kumment