Python သည် စာကြောင်းတစ်ခုတည်းတွင် if statement ကဲ့သို့ လုပ်ငန်းစဉ်တစ်ခုကို ဖော်ပြနိုင်သည့် ternary operators (conditional operators) ဟုခေါ်သော စာရေးပုံစံတစ်ခုရှိသည်။
နမူနာကုဒ်နှင့်အတူ အောက်ပါတို့ကို ဤနေရာတွင် ရှင်းပြထားသည်။
- ternary operator များ၏အခြေခံရေးသားမှု
if ... elif ... else ...
ဒါကို တစ်ကြောင်းတည်းနဲ့ ဖော်ပြပါ။- List Comprehensive Notation နှင့် Ternary Operator များကို ပေါင်းစပ်ခြင်း။
- အမည်မသိလုပ်ဆောင်ချက်များ (lambda အသုံးအနှုန်းများ) နှင့် ternary အော်ပရေတာများ ပေါင်းစပ်ခြင်း။
ပုံမှန် if statement နှင့်ပတ်သက်သည့် နောက်ထပ်အချက်အလက်များအတွက် အောက်ပါဆောင်းပါးကို ကြည့်ပါ။
ternary operator များ၏အခြေခံရေးသားမှု
Python တွင် ternary operator ကို အောက်ပါအတိုင်း ရေးသားနိုင်ပါသည်။
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
အခြေအနေများအလိုက် တန်ဖိုးများကို ပြောင်းလိုပါက တန်ဖိုးတစ်ခုစီကို ၎င်းအတိုင်းရေးပါ။
Value to return if conditional expression is true if conditional expression else Value to return if conditional expression is false
a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd
a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even
အခြေအနေများအလိုက် လုပ်ဆောင်ခြင်းကို ပြောင်းလိုပါက ဖော်ပြချက်တစ်ခုစီကို ဖော်ပြပါ။
a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3
a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4
တန်ဖိုးကို ပြန်မပေးသော စကားရပ်များ (None ကို ပြန်ပေးသည့် စကားရပ်များ) ကိုလည်း လက်ခံနိုင်သည်။ အခြေအနေပေါ် မူတည်၍ စကားရပ်များထဲမှ တစ်ခုကို အကဲဖြတ်ပြီး လုပ်ငန်းစဉ်ကို လုပ်ဆောင်သည်။
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
ပုံမှန် if statement နဲ့ရေးထားတဲ့ အောက်ပါကုဒ်နဲ့ ညီမျှပါတယ်။
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
ယုတ္တိတန်သော အော်ပရေတာများ (နှင့်၊ သို့မဟုတ်၊ စသည်) ကို အသုံးပြု၍ များစွာသော အခြေအနေဆိုင်ရာ ဖော်ပြချက်များကိုလည်း ပေါင်းစပ်နိုင်သည်။
a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even
a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd
if ... elif ... else ...တစ်ကြောင်းဖော်ပြချက်
if ... elif ... else ...
စာကြောင်းတစ်ကြောင်းတည်းတွင် ဤအရာကိုရေးရန် အထူးနည်းလမ်းမရှိပါ။ သို့သော်၊ ternary operator ၏ conditional expression သည် မှားယွင်းသောအခါ အကဲဖြတ်သည့် expression တွင် အခြားသော ternary operator ကိုအသုံးပြုခြင်းဖြင့် ၎င်းကို သိရှိနိုင်သည်။ ternary အော်ပရေတာများ၏ အသိုက်လုပ်သည့်ပုံ။
သို့သော်လည်း ၎င်းသည် ဖတ်ရှုနိုင်မှုကို လျော့နည်းစေသောကြောင့် ၎င်းကို အကျယ်တဝင့် မသုံးခြင်းသည် အကောင်းဆုံးဖြစ်နိုင်သည်။
a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive
a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
အောက်ပါအခြေအနေဆိုင်ရာအသုံးအနှုန်းကို အောက်ပါနည်းလမ်းနှစ်ခုဖြင့် အဓိပ္ပာယ်ဖွင့်ဆိုနိုင်သော်လည်း ယခင် (1) အဖြစ် သတ်မှတ်သည်။
A if condition 1 else B if condition 2 else C
1. A if condition 1 else ( B if condition 2 else C )
2. ( A if condition 1 else B ) if condition 2 else C
တိကျသော ဥပမာတစ်ခုသည် အောက်ပါအတိုင်းဖြစ်သည်။ ပထမအသုံးအနှုန်းကို ဒုတိယစကားအဖြစ် မှတ်ယူသည်။
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative
result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero
List Comprehensive Notation နှင့် Ternary Operator များကို ပေါင်းစပ်ခြင်း။
ternary operator ၏ အသုံးဝင်ပုံသည် list comprehension notation တွင် စာရင်းများကို လုပ်ဆောင်သည့်အခါ ဖြစ်သည်။
ternary operator နှင့် list comprehension notation တို့ကို ပေါင်းစပ်ခြင်းဖြင့်၊ စာရင်းတစ်ခု၏ အစိတ်အပိုင်းများကို အစားထိုးရန် သို့မဟုတ် အခြေအနေများပေါ်မူတည်၍ အခြားလုပ်ဆောင်မှုအချို့ကို လုပ်ဆောင်နိုင်သည်။
l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
list comprehension notation ဆိုင်ရာ နောက်ထပ်အချက်အလက်များအတွက်၊ အောက်ပါဆောင်းပါးကို ကြည့်ပါ။
အမည်မသိလုပ်ဆောင်ချက်များ (lambda အသုံးအနှုန်းများ) နှင့် ternary အော်ပရေတာများ ပေါင်းစပ်ခြင်း။
အမည်မသိလုပ်ဆောင်ချက် (lambda စကားရပ်) တွင်ပင် အတိုချုပ်ဖော်ပြနိုင်သည့် ternary operator သည် အသုံးဝင်သည်။
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
တာနရီအော်ပရေတာနှင့် မသက်ဆိုင်သော်လည်း၊ အထက်ဥပမာသည် lambda စကားရပ်သို့ အမည်တစ်ခု သတ်မှတ်ပေးကြောင်း သတိပြုပါ။ ထို့ကြောင့်၊ Python ၏ coding convention PEP8 ကဲ့သို့သော အလိုအလျောက်စစ်ဆေးသည့်ကိရိယာများသည် သတိပေးချက်တစ်ခုထုတ်ပေးနိုင်သည်။
အဘယ်ကြောင့်ဆိုသော် PEP8 သည် လုပ်ငန်းဆောင်တာများသို့ အမည်များသတ်မှတ်ရာတွင် def အသုံးပြုရန် အကြံပြုထားသောကြောင့်ဖြစ်သည်။
PEP8 ၏သဘောတရားမှာ အောက်ပါအတိုင်းဖြစ်သည်။
- Lambda အသုံးအနှုန်းများကို အမည်မဖော်ဘဲ အငြင်းအခုံများအဖြစ် ခေါ်ဆိုနိုင်သော အရာများကို ပေးပို့ရန်အတွက် အသုံးပြုပါသည်။
- lambda အသုံးအနှုန်းများတွင်၊ အမည်ဖြင့်သတ်မှတ်ရန် def ကိုသုံးပါ။