Guido van Rossum ngajokaken nambah operator cocog pola kanggo Python

Guido van Rossum ngenalake draf kanggo review masyarakat spesifikasi kanggo ngleksanakake operator cocog pola (cocog lan cilik) ing Python. Perlu dicathet menawa proposal kanggo nambah operator pencocokan pola wis diterbitake ing 2001 lan 2006 (pep-0275, pep-3103), nanging ditolak kanggo ngoptimalake konstruksi "yen ... elif ... liya" kanggo nyusun rantai sing cocog.

Implementasi anyar kaya operator "cocok" sing kasedhiya ing Scala, Rust, lan F #, sing mbandhingake asil ekspresi sing ditemtokake karo dhaptar pola sing didaftar ing blok adhedhasar operator "kasus". Ora kaya operator "switch" sing kasedhiya ing C, Java, lan JavaScript, ekspresi adhedhasar "cocok" nawakake luwih akeh. fungsi sudhut. Wigati dicathet menawa operator sing diusulake bakal nambah keterbacaan kode kasebut, nyederhanakake perbandingan obyek lan debugging Python sing sewenang-wenang, lan uga nambah linuwih kode kasebut amarga bisa ditambahi. mriksa jinis statis.

def http_error(status):
status pertandingan:
kasus 400:
bali "Panjaluk ala"
kasus 401|403|404:
bali "Ora diijini"
kasus 418:
bali "aku teko"
kasus_:
bali "Soko liyane"

Contone, sampeyan bisa mbongkar obyek, tuple, dhaptar, lan urutan sewenang-wenang kanggo ngiket variabel adhedhasar nilai sing ana. Diijini kanggo nemtokake cithakan nested, nggunakake tambahan "yen" kahanan ing cithakan, nggunakake topeng ("[x, y, *rest]"), kunci / pemetaan nilai (contone, {"bandwidth": b, "latensi ”: l} kanggo ngekstrak nilai "bandwidth" lan "latensi" lan kamus), ekstrak subtemplates (":=" operator), gunakake konstanta sing dijenengi ing cithakan. Ing kelas, iku bisa kanggo ngatur prilaku cocog nggunakake "__match__()" cara.

saka dataclasses ngimpor dataclass

@kelas data
Titik kelas:
x: ing
y: ing

def whereis (titik):
titik cocog:
Titik kasus (0, 0):
print("Asal")
Titik kasus (0, y):
print(f"Y={y}")
Titik kasus (x, 0):
print(f"X={x}")
titik kasus ():
print("Ing endi wae")
kasus_:
print("Ora ana titik")

titik cocog:
kasus Titik(x, y) yen x == y:
print(f"Y=X ing {x}")
Titik kasus (x, y):
print(f"Ora ana ing diagonal")

RED, Ijo, BIRU = 0, 1, 2
warna sing cocog:
kasus .RED:
print("Aku weruh abang!")
kasus .Ijo:
print("Suket ijo")
kasus .BLU
E:
print("Aku ngrasakake blues :(")

A set wis disiapake kanggo review tambalan kanthi eksperimen implementasine specification ngajokaken, nanging versi final isih rembugan. Contone, ditawani Tinimbang ekspresi "kasus _:" kanggo nilai standar, gunakake tembung kunci "else:" utawa "standar:", amarga "_" ing konteks liyane digunakake minangka variabel sauntara. Uga bisa dipertanyakan yaiku organisasi internal, sing adhedhasar nerjemahake ekspresi anyar menyang bytecode sing padha karo sing digunakake kanggo konstruksi "yen ... elif ... liya", sing ora bakal menehi kinerja sing dikarepake nalika ngolah set perbandingan sing gedhe banget.

Source: opennet.ru

Add a comment