လွယ်လွယ်ပြောရရင် lambda ဆိုတာ Python မှာ function အသေးလေးကို တစ်ကြောင်းထဲ ရေးတဲ့ နည်းလမ်း။ Function အကြီးကြီး ရေးစရာ မလိုဘဲ “ဒီတွက်ချက်မှုလေး ခဏ လုပ်ပေးပါ” ဆိုတဲ့ စာတိုလေး ပို့သလိုပဲ။
ပုံမှန် function ရေးရင် ဒီလိုရေးတယ်။
def double(x):
return x * 2
Lambda နဲ့ဆို တစ်ကြောင်းတည်း။
double = lambda x: x * 2
နှစ်ခုလုံး အတူတူပဲ အလုပ်လုပ်တယ် — double(5) လို့ ခေါ်ရင် ၁၀ ရတယ်။ ကွာခြားတာက lambda ကို နာမည်ပေးစရာ မလိုဘူး၊ def လည်း မလိုဘူး၊ return လည်း မရေးရဘူး။ lambda ပြီးရင် parameter၊ ပြီးရင် ကော်လံ (:)၊ ပြီးရင် ပြန်ပေးမယ့် တွက်ချက်မှု — ဒါပဲ။
ဒါကို ဥပမာနဲ့ ပြောရရင် စာအုပ်ကြီး vs sticky note လိုပဲ။ ပုံမှန် function က စာအုပ်တစ်အုပ် — နာမည်၊ အဖုံး၊ အခန်းတွေ ပါတယ်။ Lambda က sticky note — လိုတဲ့ စာတစ်ကြောင်းပဲ ရေးပြီး ကပ်ထားတာ။ စာတစ်ကြောင်းတည်းနဲ့ ရတဲ့ အလုပ်ကို စာအုပ်ကြီး ထုတ်စရာ မလိုဘူးလေ။
Lambda တကယ် တောက်ပတဲ့ နေရာက တခြား function ထဲကို “ခဏသုံး” ထည့်ပေးရတဲ့ နေရာတွေ။ ဥပမာ list တစ်ခုကို စီချင်တယ်။
students = [("Aung", 85), ("May", 92), ("Ko", 78)]
students.sort(key=lambda s: s[1])
ဒီမှာ lambda s: s[1] ဆိုတာက “အမှတ်နဲ့ စီပါ” လို့ ပြောတဲ့ စာတိုလေး။ ဒီအတွက် def get_score(s): return s[1] ဆိုပြီး function သပ်သပ် ရေးနေစရာ မလိုဘူး။
နောက် ဥပမာ — map နဲ့ filter နဲ့ တွဲသုံးတာ။
nums = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, nums)) # [2, 4, 6, 8, 10]
evens = list(filter(lambda x: x % 2 == 0, nums)) # [2, 4]
map က “တစ်ခုချင်းစီကို ဒီအတိုင်း ပြောင်း”၊ filter က “ဒီစည်းကမ်းနဲ့ ကိုက်တာပဲ ရွေး” — lambda က အဲဒီ စည်းကမ်းလေးကို တစ်ကြောင်းထဲ ပြောပြတာ။
ဒါပေမယ့် lambda မှာ ကန့်သတ်ချက် ရှိတယ် — expression တစ်ခုပဲ ရေးလို့ရတယ်။ ဆိုလိုတာက if စာကြောင်းတွေ၊ loop တွေ၊ print နှစ်ကြောင်း — ဒါတွေ ထည့်လို့ မရဘူး။ တွက်ချက်မှုတစ်ခု၊ ရလဒ်တစ်ခု — ဒါပဲ။ (if-else ကို တစ်ကြောင်းထဲ x if x > 0 else 0 လို ရေးလို့တော့ ရတယ်။)
ဘယ်အချိန်သုံးသင့်လဲ၊ ဘယ်အချိန် မသုံးသင့်လဲ —
သုံးသင့်တာ — sort(key=...)၊ map၊ filter၊ sorted လို နေရာမှာ တစ်ခါသုံး logic လေး ထည့်ချင်ရင်
မသုံးသင့်တာ — logic က နှစ်ကြောင်းထက် ရှည်လာရင်၊ တခြားနေရာကပါ ပြန်သုံးမယ့် function ဆို ပုံမှန် def နဲ့ပဲ ရေး။ Lambda ကို အတင်း ရှည်အောင် ရေးရင် ဖတ်ရခက်သွားတယ်
ကျွန်တော် အရင်က lambda ကို “ထူးဆန်းတဲ့ syntax” လို့ ထင်ခဲ့တယ်။ တကယ်က အတွေးက ရိုးရှင်းတယ် — function ဆိုတာ နာမည်ကြီးကြီး ပေးရမယ့် အရာချည်းပဲ မဟုတ်ဘူး။ တစ်ခါသုံး စာတိုလေးလည်း function ပဲ။ Python က အဲဒါကို တစ်ကြောင်းထဲ ရေးခွင့်ပေးထားတာ။
ဒီနေ့ sorted() တစ်ခု စမ်းကြည့်ပါ — key=lambda x: ... လေး ထည့်ပြီး ကိုယ်လိုချင်တဲ့ အတိုင်း စီခိုင်းကြည့်။ လက်တွေ့သုံးကြည့်မှ lambda ရဲ့ အရသာ သိမယ်။ 🙂