Guido van Rossum ngusulkeun nambahkeun operator cocog pola pikeun Python

Guido van Rossum ngenalkeun draf pikeun review masarakat spésifikasi pikeun nerapkeun operator cocog pola (cocog jeung kasus) dina Python. Ieu kudu dicatet yén usulan pikeun nambahkeun operator cocog pola geus diterbitkeun taun 2001 jeung 2006 (pép-0275, pép-3103), tapi ditolak dina ni'mat optimizing nu "lamun ... elif ... sejenna" ngawangun pikeun compiling ranté cocog.

Palaksanaan énggal sapertos operator "cocok" anu disayogikeun dina Scala, Rust, sareng F #, anu ngabandingkeun hasil éksprési anu ditangtukeun sareng daptar pola anu didaptarkeun dina blok dumasar kana operator "kasus". Beda sareng operator "switch" anu aya dina C, Java, sareng JavaScript, ekspresi dumasar "cocok" nawiskeun langkung seueur. fungsionalitas lega. Perhatikeun yén operator anu diusulkeun bakal ningkatkeun kabacaan kode, nyederhanakeun ngabandingkeun objék Python sawenang sareng debugging, sareng ogé ningkatkeun réliabilitas kode berkat kamungkinan ngalegaan. mariksa tipe statik.

def http_error(status):
status pertandingan:
kasus 400:
balikkeun "Paménta goréng"
kasus 401|403|404:
balikkeun "Teu diwenangkeun"
kasus 418:
balik "Abdi teh teko"
kasus_:
balik deui "Lain"

Contona, anjeun tiasa ngabongkar obyék, tuples, daptar, sareng sekuen sawenang-wenang pikeun ngabeungkeut variabel dumasar kana nilai anu aya. Diidinan pikeun ngartikeun témplat nested, nganggo tambahan "upami" kaayaan dina citakan, nganggo masker ("[x, y, *rest]"), pemetaan konci / nilai (contona, {"bandwidth": b, "latency ”: l} pikeun nimba nilai "bandwidth" sareng "latency" sareng kamus), ekstrak subtemplates (":=" operator), nganggo konstanta anu dingaranan dina citakan. Dina kelas, kasebut nyaéta dimungkinkeun pikeun ngaluyukeun kabiasaan cocog ngagunakeun métode "__match__()".

ti dataclasses impor dataclass

@dataclass
Titik kelas:
x: inuh
y: int

def whereis (titik):
titik pertandingan:
titik kasus (0, 0):
print ("Asal")
titik titik(0, y):
print(f"Y={y}")
Titik kasus(x, 0):
nyitak(f"X={x}")
titik kasus ():
print ("Di tempat séjén")
kasus_:
print ("Henteu titik")

titik pertandingan:
titik titik (x, y) lamun x == y:
print(f"Y=X dina {x}")
Titik (x, y):
print(f"Henteu dina diagonal")

BEUREUM, HÉJÉ, BIRU = 0, 1, 2
warna cocog:
kasus .BEureum:
print ("Kuring ningali beureum!")
kasus .héjo:
print("Jukut téh héjo")
kasus .BLU
E:
print("Kuring ngarasa blues :(")

Hiji set geus disiapkeun keur review tambalan kalawan ékspérimén palaksanaan spésifikasi diusulkeun, tapi versi final masih dibahas. Salaku conto ditawarkeun Gantina éksprési "kasus _:" pikeun nilai standar, make kecap konci "lain:" atawa "standar:", saprak "_" dina konteks séjén dipaké salaku variabel samentara. Ogé questionable nyaéta organisasi internal, nu dumasar kana narjamahkeun éksprési anyar kana bytecode sarupa nu dipaké pikeun "lamun ... elif ... sejenna" constructs, nu moal nyadiakeun kinerja nu dipikahoyong nalika ngolah set pisan badag tina babandinganana.

sumber: opennet.ru

Tambahkeun komentar