Գվիդո վան Ռոսսումն առաջարկեց Python-ին ավելացնել օրինաչափությունների համապատասխանող օպերատորներ

Գուիդո վան Ռոսում ներկայացրեց նախագիծը համայնքային քննարկման համար բնութագրերը Python-ում նախշերի համապատասխանեցման օպերատորներ (համապատասխանություն և դեպք/պատկեր) իրականացնելու համար։ Պետք է նշել, որ նախշերի համապատասխանեցման օպերատորներ ավելացնելու առաջարկները արդեն հրապարակվել էին 2001 և 2006 թվականներին (պեպ-0275, պեպ-3103), սակայն մերժվեցին՝ հօգուտ համապատասխան շղթաներ կառուցելու համար «եթե … էլիֆ … այլապես» կոնստրուկտի օպտիմալացման։

Նոր իրականացումը շատ նման է Scala-ի, Rust-ի և F#-ի կողմից տրամադրված համապատասխանության օպերատորին, որը համեմատում է նշված արտահայտության արդյունքը դեպքի վրա հիմնված բլոկներում թվարկված օրինաչափությունների ցանկի հետ: Ի տարբերություն C, Java և JavaScript լեզուներում առկա անջատիչի օպերատորի, համապատասխանության վրա հիմնված արտահայտությունները շատ ավելին են առաջարկում: լայն ֆունկցիոնալությունՆշվում է, որ առաջարկվող օպերատորները կբարելավեն կոդի ընթեռնելիությունը, կպարզեցնեն կամայական Python օբյեկտների համեմատությունը և վրիպազերծումը, ինչպես նաև կբարձրացնեն կոդի հուսալիությունը՝ ընդլայնված հնարավորության շնորհիվ։ ստատիկ տիպի ստուգում.

սահմանել http_error(կարգավիճակ):
խաղի կարգավիճակը՝
գործ 400:
վերադարձնել «Սխալ հարցում»
գործ 401|403|404:
վերադարձնել «Չի թույլատրվում»
գործ 418:
վերադարձնել «Ես թեյաման եմ»
դեպք _:
վերադարձնել «Ինչ-որ այլ բան»

Օրինակ, հնարավոր է բացել օբյեկտները, զույգերը, ցուցակները և կամայական հաջորդականությունները՝ առկա արժեքների հիման վրա փոփոխականներ կապելու համար: Հնարավոր է սահմանել ներդրված ձևանմուշներ, ձևանմուշում օգտագործել լրացուցիչ «եթե» պայմաններ, կիրառել դիմակներ («[x, y, *rest]»), կապել բանալի/արժեք զույգերը (օրինակ՝ {"bandwidth": b, "latency": l}՝ «bandwidth» և «latency» արժեքները և բառարանը արդյունահանելու համար), արդյունահանել ենթաձևանմուշներ («:=» օպերատորը) և օգտագործել անվանված հաստատուններ ձևանմուշում: Դասերում հնարավոր է հարմարեցնել համապատասխանության վարքագիծը՝ օգտագործելով «__match__()» մեթոդը:

տվյալների դասերից ներմուծել տվյալների դաս

@տվյալների դաս
Դասի կետ՝
x:int
y:int

որտեղ(կետ):
խաղի կետ՝
դեպքի կետ(0, 0):
տպել («Ծագում»)
դեպքի կետ(0, y):
տպել(f»Y={y}»)
դեպքի կետ(x, 0):
տպել(f»X={x}»)
դեպքի կետ():
տպել («Այլ տեղ»)
դեպք _:
տպել("Կետ չկա")

խաղի կետ՝
դեպքի կետ(x, y) եթե x == y:
տպել(f»Y=X {x}-ում»)
դեպքի կետ(x, y):
տպել(f"Ոչ անկյունագծի վրա")

Կարմիր, Կանաչ, Կապույտ = 0, 1, 2
համապատասխանության գույն՝
դեպք .RED:
տպել («Ես կարմիր եմ տեսնում!»)
պատյան .ԿԱՆԱՉ:
տպել («Խոտը կանաչ է»)
պատյան .ԿԱՊՈՒՅՏ
E:
տպել («Ես տխուր եմ :(»)

Վերանայման համար պատրաստվել է նյութերի մի շարք։ կարկատաններ փորձարարական իրականացում առաջարկվող սպեցիֆիկացիան, բայց վերջնական տարբերակը դեռևս քննարկվել է. Օրինակ, առաջարկվել է «case _:» արտահայտության փոխարեն որպես լռելյայն արժեք օգտագործեք «else:» կամ «default:» բանալի բառը, քանի որ «_»-ն այլ համատեքստերում օգտագործվում է որպես ժամանակավոր փոփոխական: Բացի այդ, ներքին կազմակերպումը, որը հիմնված է նոր արտահայտությունները բայթկոդի թարգմանելու վրա, նման է «if ... elif ... else» կոնստրուկտների համար օգտագործվողին, հարցեր է առաջացնում, որոնք չեն ապահովի ցանկալի արդյունավետությունը համեմատությունների շատ մեծ հավաքածուներ մշակելիս:

Source: opennet.ru

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster