Гуидо ван Россум Python-д загвар тохирох операторуудыг нэмэхийг санал болгосон

Гидо ван Россум танилцуулав олон нийтийн хэлэлцүүлэгт зориулсан төсөл техникийн үзүүлэлтүүд Python дээр загвар тааруулах операторуудыг (тохиолдол ба жижиг) хэрэгжүүлэхэд зориулагдсан. Загварт тохирох операторуудыг нэмэх саналыг 2001, 2006 онд аль хэдийн нийтэлсэн гэдгийг тэмдэглэх нь зүйтэй (пеп-0275, пеп-3103), гэхдээ тохирох хэлхээг эмхэтгэхийн тулд “if ... elif ... else” бүтцийг оновчтой болгохыг дэмжсэнээс татгалзсан.

Шинэ хэрэгжүүлэлт нь Scala, Rust, F# дээр өгөгдсөн "match" оператортой маш төстэй бөгөөд заасан илэрхийллийн үр дүнг "case" оператор дээр үндэслэн блокуудад жагсаасан загваруудын жагсаалттай харьцуулдаг. C, Java болон JavaScript-д байдаг "шилжүүлэх" оператороос ялгаатай нь "тохирох"-д суурилсан илэрхийллүүд нь илүү их зүйлийг санал болгодог. өргөн ажиллагаатай. Санал болгож буй операторууд нь кодын уншигдах чадварыг сайжруулж, дурын Python объектуудыг харьцуулах, дибаг хийхийг хялбаршуулж, өргөтгөх боломжийн ачаар кодын найдвартай байдлыг нэмэгдүүлэх болно гэж тэмдэглэжээ. статик төрлийг шалгах.

def http_error(статус):
тохирох байдал:
хэрэг 400:
"Муу хүсэлт"-ийг буцаах
тохиолдол 401|403|404:
"Зөвшөөрөгдөөгүй" гэж буцаах
хэрэг 418:
"Би цайны аяга" гэж буцах
тохиолдол_:
"Өөр зүйл" гэж буцаах

Жишээлбэл, та одоо байгаа утгууд дээр тулгуурлан хувьсагчдыг холбохын тулд объект, залгуур, жагсаалт, дурын дарааллыг задалж болно. Оруулсан загваруудыг тодорхойлох, загварт нэмэлт "хэрэв" нөхцөлийг ашиглах, маск ("[x, y, *rest]"), түлхүүр/утгын зураглал (жишээ нь, {"зурвасын өргөн": b, "хоцролт" зэргийг ашиглахыг зөвшөөрнө. ”: l} "зурвасын өргөн" болон "хоцролт" утгууд болон толь бичгийг задлах), дэд загваруудыг задлах (":=" оператор), загварт нэрлэгдсэн тогтмолуудыг ашиглах. Хичээл дээр "__match__()" аргыг ашиглан тохирох зан төлөвийг өөрчлөх боломжтой.

өгөгдлийн ангиас импортын дата анги

@өгөгдлийн анги
ангийн оноо:
x:int
y:int

def whereis(цэг):
хожлын оноо:
case Point(0, 0):
хэвлэх("Гарал үүсэл")
case Point(0, y):
хэвлэх(f"Y={y}")
case Point(x, 0):
хэвлэх(f"X={x}")
case Point():
хэвлэх("Өөр газар")
тохиолдол_:
хэвлэх("Цэг биш")

хожлын оноо:
case Point(x, y) хэрэв x == y:
хэвлэх(f"Y=X {x}")
тохиолдол Цэг(x, y):
хэвлэх(f"Диагональ дээр биш")

УЛААН, НОГООН, ЦЭНХЭР = 0, 1, 2
тохирох өнгө:
тохиолдол .RED:
хэвлэх("Би улаан харагдаж байна!")
тохиолдол .НОГООН:
хэвлэх("Өвс ногоон")
тохиолдол .BLU
E:
хэвлэх("Надад блюз мэдрэгдэж байна :(")

Шалгалтанд зориулж багц бэлдсэн засварууд туршилтын хамт хэрэгжилт санал болгож буй техникийн үзүүлэлт боловч эцсийн хувилбар хэвээр байна хэлэлцсэн. Жишээлбэл, санал болгосон Өгөгдмөл утгын хувьд "case _:" гэсэн илэрхийллийн оронд "else:" эсвэл "default:" гэсэн түлхүүр үгийг ашиглана уу, учир нь бусад контекст дэх "_" нь түр зуурын хувьсагчаар ашиглагддаг. "Хэрэв ... elif ... else" бүтэцтэй төстэй шинэ илэрхийллүүдийг байт код руу хөрвүүлэхэд үндэслэсэн дотоод зохион байгуулалт нь бас эргэлзээтэй бөгөөд энэ нь маш том харьцуулалтын багцыг боловсруулахад хүссэн гүйцэтгэлийг өгөхгүй.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх