గైడో వాన్ రోసమ్ పైథాన్‌కు ప్యాటర్న్ మ్యాచింగ్ ఆపరేటర్‌లను జోడించాలని ప్రతిపాదించారు

గైడో వాన్ రోస్సమ్ సమర్పించిన సంఘం సమీక్ష కోసం ముసాయిదా లక్షణాలు పైథాన్‌లో ప్యాటర్న్ మ్యాచింగ్ ఆపరేటర్‌లను (మ్యాచ్ మరియు కేస్) అమలు చేయడం కోసం. నమూనా మ్యాచింగ్ ఆపరేటర్‌లను జోడించే ప్రతిపాదనలు ఇప్పటికే 2001 మరియు 2006లో ప్రచురించబడిందని గమనించాలి (pep-0275, pep-3103), కానీ సరిపోలే గొలుసులను కంపైల్ చేయడానికి “if ... elif ... else” నిర్మాణాన్ని ఆప్టిమైజ్ చేయడానికి అనుకూలంగా తిరస్కరించబడింది.

కొత్త అమలు అనేది స్కాలా, రస్ట్ మరియు F#లో అందించబడిన "మ్యాచ్" ఆపరేటర్ లాగా ఉంటుంది, ఇది "కేస్" ఆపరేటర్ ఆధారంగా బ్లాక్‌లలో జాబితా చేయబడిన నమూనాల జాబితాతో పేర్కొన్న వ్యక్తీకరణ ఫలితాన్ని పోల్చి చూస్తుంది. C, Java మరియు JavaScriptలో అందుబాటులో ఉన్న "స్విచ్" ఆపరేటర్ వలె కాకుండా, "మ్యాచ్"-ఆధారిత వ్యక్తీకరణలు చాలా ఎక్కువ అందిస్తాయి విస్తృత కార్యాచరణ. ప్రతిపాదిత ఆపరేటర్లు కోడ్ యొక్క రీడబిలిటీని మెరుగుపరుస్తారని, ఏకపక్ష పైథాన్ వస్తువులు మరియు డీబగ్గింగ్ యొక్క పోలికను సులభతరం చేస్తారని మరియు పొడిగించిన అవకాశం కారణంగా కోడ్ యొక్క విశ్వసనీయతను కూడా పెంచుతుందని గుర్తించబడింది. స్టాటిక్ రకం తనిఖీ.

def http_error(status):
మ్యాచ్ స్థితి:
కేసు 400:
"చెడు అభ్యర్థన"ని తిరిగి ఇవ్వండి
కేసు 401|403|404:
తిరిగి "అనుమతించబడలేదు"
కేసు 418:
"నేను టీపాట్" అని తిరిగి వెళ్ళు
కేసు_:
"మరేదో" తిరిగి ఇవ్వు

ఉదాహరణకు, మీరు ఇప్పటికే ఉన్న విలువల ఆధారంగా వేరియబుల్‌లను బైండ్ చేయడానికి ఆబ్జెక్ట్‌లు, టుపుల్స్, లిస్ట్‌లు మరియు ఏకపక్ష సీక్వెన్స్‌లను అన్‌ప్యాక్ చేయవచ్చు. ఇది సమూహ టెంప్లేట్‌లను నిర్వచించడానికి, టెంప్లేట్‌లో అదనపు “if” షరతులను ఉపయోగించడానికి, ముసుగులు (“[x, y, *rest]”), కీ/విలువ మ్యాపింగ్‌లను (ఉదాహరణకు, {“బ్యాండ్‌విడ్త్”: b, “latency) ఉపయోగించడానికి అనుమతించబడుతుంది. ”: l} "బ్యాండ్‌విడ్త్" మరియు "లేటెన్సీ" విలువలు మరియు నిఘంటువును సంగ్రహించడానికి, ఉపటెంప్లేట్‌లను సంగ్రహించడానికి (":=" ఆపరేటర్), టెంప్లేట్‌లో పేరున్న స్థిరాంకాలను ఉపయోగించండి. తరగతులలో, “__match__()” పద్ధతిని ఉపయోగించి సరిపోలే ప్రవర్తనను అనుకూలీకరించడం సాధ్యమవుతుంది.

డేటాక్లాసెస్ నుండి డేటాక్లాస్ దిగుమతి

@డేటాక్లాస్
క్లాస్ పాయింట్:
x:int
y:int

def whereis(పాయింట్):
మ్యాచ్ పాయింట్:
కేస్ పాయింట్(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:
ప్రింట్ ("నాకు ఎరుపు రంగు కనిపిస్తుంది!")
కేసు .GREEN:
ప్రింట్ ("గడ్డి ఆకుపచ్చగా ఉంటుంది")
కేసు .BLU
E:
ప్రింట్ (“నేను బ్లూస్‌ని అనుభవిస్తున్నాను :(“)

సమీక్ష కోసం ఒక సెట్‌ను సిద్ధం చేశారు పాచెస్ ప్రయోగాత్మకంగా అమలు ప్రతిపాదిత స్పెసిఫికేషన్, కానీ చివరి వెర్షన్ ఇప్పటికీ ఉంది చర్చించారు. ఉదాహరణకు ఇచ్చింది డిఫాల్ట్ విలువ కోసం "case _:" అనే వ్యక్తీకరణకు బదులుగా, "else:" లేదా "default:" అనే కీవర్డ్‌ని ఉపయోగించండి, ఎందుకంటే ఇతర సందర్భాలలో "_" తాత్కాలిక వేరియబుల్‌గా ఉపయోగించబడుతుంది. "if ... elif ... else" నిర్మాణాల కోసం ఉపయోగించిన మాదిరిగానే కొత్త వ్యక్తీకరణలను బైట్‌కోడ్‌లోకి అనువదించడంపై ఆధారపడిన అంతర్గత సంస్థ కూడా సందేహాస్పదంగా ఉంది, ఇది చాలా పెద్ద పోలికలను ప్రాసెస్ చేసేటప్పుడు కావలసిన పనితీరును అందించదు.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి