Guido van Rossum က Python တွင် ပုံစံတူ အော်ပရေတာများကို ပေါင်းထည့်ရန် အဆိုပြုခဲ့သည်။

Guido van Rossum မိတ်ဆက်ပေးခဲ့သည် ရပ်ရွာသုံးသပ်ချက်အတွက် မူကြမ်း သတ်မှတ်ချက်များ Python ရှိ ပုံစံကိုက်ညီသော အော်ပရေတာများ (ကိုက်ညီမှုနှင့် အမှုကိစ္စ) ကို အကောင်အထည်ဖော်ရန်အတွက်။ ပုံစံကိုက်ညီသော အော်ပရေတာများကို ထည့်သွင်းရန် အဆိုပြုချက်များကို ၂၀၀၁ နှင့် ၂၀၀၆ တွင် ထုတ်ပြန်ထားပြီးဖြစ်သည် (pep-0275, pep-3103) ဒါပေမယ့် ကိုက်ညီတဲ့ ကွင်းဆက်တွေကို စုစည်းဖို့အတွက် "if ... elif ...else" ကို အကောင်းဆုံးဖြစ်အောင် ဖန်တီးရာမှာ ငြင်းပယ်ခံခဲ့ရပါတယ်။

အကောင်အထည်ဖော်မှုအသစ်သည် Scala၊ Rust နှင့် F# တွင် ပေးထားသည့် "match" အော်ပရေတာနှင့် တူသည်၊ ၎င်းသည် သတ်မှတ်ထားသော စကားရပ်တစ်ခု၏ ရလဒ်ကို "case" အော်ပရေတာပေါ်တွင် အခြေခံထားသော လုပ်ကွက်များတွင် ဖော်ပြထားသော ပုံစံများစာရင်းနှင့် နှိုင်းယှဉ်ပါသည်။ C၊ Java၊ နှင့် JavaScript တို့တွင် ရရှိနိုင်သော "switch" အော်ပရေတာများနှင့် မတူဘဲ၊ "match"-based expressions များက ပိုမိုပေးဆောင်သည် ကျယ်ပြန့်လုပ်ဆောင်နိုင်စွမ်း. အဆိုပြုထားသောအော်ပရေတာများသည် ကုဒ်၏ဖတ်နိုင်မှုကို မြှင့်တင်ပေးမည်ဖြစ်ပြီး၊ မတရားသော Python အရာဝတ္ထုများနှင့် အမှားရှာပြင်ခြင်းတို့ကို ရိုးရှင်းစေကာ သက်တမ်းတိုးနိုင်ခြေကြောင့် ကုဒ်၏ယုံကြည်စိတ်ချရမှုကိုလည်း တိုးမြင့်စေမည်ဖြစ်ကြောင်း မှတ်သားရပါသည်။ static အမျိုးအစားစစ်ဆေးခြင်း။.

def http_error(အခြေအနေ)-
ကိုက်ညီမှုအခြေအနေ
အမှု 400:
"မကောင်းတဲ့ တောင်းဆိုချက်" ကို ပြန်ပေးပါ
အမှုတွဲ 401|403|404-
"ခွင့်မပြုဘူး"
အမှု 418:
"ငါက လက်ဖက်ရည်ခွက်ပါ"
case_:
"အခြားတစ်ခုခု" ပြန်လာပါ

ဥပမာအားဖြင့်၊ သင်သည် ရှိပြီးသားတန်ဖိုးများကို အခြေခံ၍ ကိန်းရှင်များကို ချည်နှောင်ရန်အတွက် အရာဝတ္ထုများ၊ tuples၊ lists နှင့် မထင်သလို sequenceများကို ထုပ်ပိုးနိုင်ပါသည်။ ၎င်းအား ပေါင်းစပ်ထားသော နမူနာပုံစံများကို သတ်မှတ်ရန်၊ နမူနာတွင် နောက်ထပ် “if” အခြေအနေများကို အသုံးပြုရန်၊ မျက်နှာဖုံးများ (“[x, y, *rest]”), သော့/တန်ဖိုးများကို ပုံဖော်ခြင်း (ဥပမာ၊ {“bandwidth”: b, “latency ”:l} မှ "bandwidth" နှင့် "latency" တန်ဖိုးများနှင့် အဘိဓာန်များကို ထုတ်ယူရန်၊ ထုတ်ယူထားသော ပုံစံခွဲများ (":=" operator)၊ template တွင် အမည်ရှိသော ကိန်းသေများကို အသုံးပြုပါ။ အတန်းများတွင်၊ "__match__()" နည်းလမ်းကို အသုံးပြု၍ ကိုက်ညီသောအပြုအမူကို စိတ်ကြိုက်ပြင်ဆင်နိုင်သည်။

dataclasses မှ dataclass ကိုတင်သွင်းပါ။

@dataclass
အတန်းအမှတ်-
x:int
y:int

def whereis(အမှတ်):
ပွဲစဉ်အမှတ်-
အမှုအမှတ်(0, 0):
print("မူရင်း")
အမှုအမှတ်(0၊ y):
print(f"Y={y}")
အမှုအမှတ်(x၊ 0)။
print(f"X={x}")
အမှုအမှတ်():
print("အခြားတစ်နေရာ")
case_:
print("အမှတ်မဟုတ်")

ပွဲစဉ်အမှတ်-
case Point(x၊ y) if x == y:
print(f"Y=Xမှာ {x}")
ဖြစ်ရပ်အမှတ်(x၊ y):
print(f"ထောင့်ဖြတ်ပေါ်တွင်မဟုတ်ပါ")

အနီရောင်၊ အစိမ်း၊ အပြာ = 0၊ 1၊ 2
ကိုက်ညီသောအရောင်
ဖြစ်ရပ်မှန် .RED:
print("အနီရောင်မြင်ရတယ်!")
ကိစ္စ။GREEN:
ပုံနှိပ်ခြင်း ("မြက်စိမ်းသည်")
case .BLU
E:
print(“ကျွန်တော် ပြာတွေ ခံစားရတယ် :(“)

အတွဲတစ်ခုကို ပြန်လည်သုံးသပ်ရန် ပြင်ဆင်ထားပါသည်။ ဖာထေးမှုများ စမ်းသပ်မှုနှင့်အတူ အကောင်အထည်ဖော်ခြင်း။ အဆိုပြုထားသော specification ဖြစ်သော်လည်း နောက်ဆုံးဗားရှင်းမှာ ရှိနေဆဲဖြစ်သည်။ ဆွေးနွေးခဲ့ကြသည်။ ဥပမာအားဖြင့်, ကမ်းလှမ်းသည်။ မူရင်းတန်ဖိုးအတွက် "case _:" ဟူသော စကားရပ်အစား၊ အခြားအကြောင်းအရာများတွင် "_" ကို ယာယီကိန်းရှင်အဖြစ် အသုံးပြုသောကြောင့် သော့ချက်စာလုံး "else:" သို့မဟုတ် "default:" ကို အသုံးပြုပါ။ ထို့အပြင် “if… elif…else” constructs အတွက် အသုံးပြုသည့် စကားလုံးအသုံးအနှုန်းအသစ်များကို bytecode အဖြစ် ဘာသာပြန်ဆိုခြင်းအပေါ် အခြေခံထားသည့် အတွင်းအဖွဲ့အစည်းသည် မေးခွန်းထုတ်စရာဖြစ်ပြီး၊ အလွန်ကြီးမားသော နှိုင်းယှဉ်မှုများကို လုပ်ဆောင်သည့်အခါ အလိုရှိသော စွမ်းဆောင်ရည်ကို ပေးစွမ်းမည်မဟုတ်ပါ။

source: opennet.ru

မှတ်ချက် Add