Гвидо ван Россум пешниҳод кард, ки ба Python операторҳои мувофиқи намуна илова карда шаванд

Гидо ван Россум муаррифӣ кард лоиҳа барои баррасии ҷомеа хусусиятҳои барои татбиқи операторҳои мувофиқати намуна (гӯгирд ва парванда) дар Python. Бояд қайд кард, ки пешниҳодҳо оид ба илова кардани операторҳои мутобиқсозии намуна аллакай дар солҳои 2001 ва 2006 нашр шуда буданд (пеп-0275, пеп-3103), аммо ба тарафдории оптимизатсияи сохтори "агар ... elif ... else" барои тартиб додани занҷирҳои мувофиқ рад карда шуданд.

Амалисозии нав ба оператори "мутобиқшавӣ"-и дар Scala, Rust ва F# пешниҳодшуда хеле монанд аст, ки натиҷаи ифодаи мушаххасро бо рӯйхати намунаҳое, ки дар блокҳо дар асоси оператори "case" номбар шудаанд, муқоиса мекунад. Баръакси оператори "гузариш" дар C, Java ва JavaScript мавҷуд аст, ифодаҳои ба "мутобиқшавӣ" асосёфта хеле бештарро пешниҳод мекунанд функсияи васеъ. Қайд карда мешавад, ки операторҳои пешниҳодшуда хониши рамзро беҳтар мекунанд, муқоисаи объектҳои худсаронаи Python ва ислоҳи хатогиҳоро содда мекунанд ва инчунин эътимоднокии кодро ба туфайли имкони васеъ кардани санҷиши намуди статикӣ.

def http_error(status):
ҳолати мувофиқат:
парвандаи 400:
баргардонидани "Дархости бад"
парванда 401|403|404:
баргардонидани "Иҷозат дода намешавад"
парвандаи 418:
баргаштан "Ман чойник ҳастам"
парванда_:
баргардонидани "чизи дигар"

Масалан, шумо метавонед объектҳо, наворҳо, рӯйхатҳо ва пайдарпайии ихтиёриро кушоед, то тағирёбандаҳоро дар асоси арзишҳои мавҷуда пайваст кунед. Муайян кардани қолабҳои лона гузошташуда, истифодаи шартҳои иловагии “агар” дар қолаб, истифодаи ниқобҳо (“[x, y, *rest]”), харитасозии калидҳо/арзишҳо (масалан, {“барои фарохмаҷро”: b, “latency” иҷозат дода мешавад. ”: l} барои истихроҷи арзишҳо ва луғати "маҷрои фарохмаҷро" ва "таҳқирӣ"), зершаблонҳоро ҷудо кунед (":=" оператор), константаҳои номбаршударо дар қолаб истифода баред. Дар синфҳо, бо истифода аз усули "__match__()" рафтори мувофиқро танзим кардан мумкин аст.

аз маълумот синфҳои воридоти додаҳо

@dataclass
Нуқтаи синф:
x: int
y:int

def whereis (нуқта):
нуқтаи мувофиқат:
Нуктаи парванда(0, 0):
чоп («Пайдоман»)
Нуктаи парванда(0, y):
чоп (f"Y={y}")
Нуктаи ҳолат(x, 0):
чоп (f"X={x}")
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

Илова Эзоҳ