Gisugyot ni Guido van Rossum ang pagdugang sa mga operator sa pagpares sa pattern sa Python

Guido van Rossum gipaila draft para sa pagrepaso sa komunidad mga detalye para sa pagpatuman sa pattern matching operators (match ug case) sa Python. Kini kinahanglan nga matikdan nga ang mga sugyot sa pagdugang sa mga operator sa pagpares sa pattern na-publish na sa 2001 ug 2006 (pep-0275, pep-3103), apan gisalikway pabor sa pag-optimize sa “if ... elif ... else” construct para sa pag-compile sa matching chain.

Ang bag-ong pagpatuman sama ra sa operator nga "match" nga gihatag sa Scala, Rust, ug F#, nga nagtandi sa resulta sa usa ka espesipikong ekspresyon sa usa ka lista sa mga pattern nga gilista sa mga bloke base sa "case" operator. Dili sama sa "switch" nga operator nga anaa sa C, Java, ug JavaScript, ang "match"-based nga mga ekspresyon nagtanyag og daghan pa. lapad nga pagpaandar. Namatikdan nga ang gisugyot nga mga operator magpauswag sa pagkabasa sa code, pasimplehon ang pagtandi sa arbitraryong mga butang sa Python ug pag-debug, ug dugangan usab ang pagkakasaligan sa code salamat sa posibilidad nga mapalawig. static type nga pagsusi.

def http_error(status):
kahimtang sa duwa:
kaso 400:
ibalik ang "Bad request"
kaso 401|403|404:
balik "Dili gitugotan"
kaso 418:
balik "Ako usa ka teapot"
kaso_:
ibalik ang "Laing butang"

Pananglitan, mahimo nimong i-unpack ang mga butang, tuple, lista, ug arbitraryong mga han-ay aron mabugkos ang mga variable base sa naa na nga mga kantidad. Gitugotan ang paghubit sa mga nested templates, paggamit ug dugang nga “kon” nga kondisyon sa template, paggamit og mga maskara (“[x, y, *rest]”), key/value mappings (pananglitan, {“bandwidth”: b, “latency ”: l} aron makuha ang "bandwidth" ug "latency" nga mga kantidad ug diksyonaryo), kuhaa ang mga subtemplates (":=" operator), gamita ang ginganlan nga mga constant sa template. Sa mga klase, posible nga ipasibo ang pagkaparehas nga pamatasan gamit ang "__match__()" nga pamaagi.

gikan sa dataclasses import dataclass

@dataclass
Punto sa klase:
x: int
y: int

def whereis(punto):
match point:
punto sa kaso(0, 0):
print("Gigikanan")
punto sa kaso(0, y):
print(f"Y={y}")
punto sa kaso(x, 0):
print(f"X={x}")
punto sa kaso ():
print ("Sa laing dapit")
kaso_:
print ("Dili usa ka punto")

match point:
case Point(x, y) kung x == y:
print(f"Y=X sa {x}")
punto sa kaso(x, y):
print(f"Wala sa diagonal")

PULA, BERDE, Asul = 0, 1, 2
tugma nga kolor:
kaso .PULANG:
print("Nakita nako ang pula!")
kaso .BERDE:
print("Ang sagbot berde")
kaso .BLU
E:
print("Gibati nako ang mga blues :(")

Usa ka set ang giandam alang sa pagrepaso mga patsa uban sa eksperimento pagpatuman gisugyot nga detalye, apan ang katapusan nga bersyon mao gihapon gihisgutan. Pananglitan gitanyag Imbes sa ekspresyong "case _:" para sa default value, gamita ang keyword nga "else:" o "default:", tungod kay ang "_" sa ubang konteksto gigamit isip temporaryo nga variable. Ang kwestyonable usab mao ang internal nga organisasyon, nga gibase sa paghubad sa bag-ong mga ekspresyon ngadto sa bytecode susama sa gigamit alang sa "kon ... elif ... else" constructs, nga dili makahatag sa gitinguha nga performance sa diha nga pagproseso sa dako kaayo nga mga hugpong sa mga pagtandi.

Source: opennet.ru

Idugang sa usa ka comment