ကျွန်တော်တို့ ဒီနေ့မှာတော့ *args နဲ့ **kwargs က ဘာကွာလဲ ဘယ်လိုအသုံးပြုတယ်ကို ပြောပြ သွားပါမယ်။ဒီနေ့ ပို့စ်ကိုလာဖတ်တယ်ဆိုတော့ python function ကို ဘယ်လိုရေးရမယ်တော့ သိပြီးပြီလို့ယုံကြည်ပါတယ်။
*args
*args သည် args ဆိုသည့်အတိုင်း argument တွေကို လက်ခံပါတယ်။အောက်က example ကိုကြည့်ကြည့်ပါ။
>>> def total(a,b,c):
... result = a + b + c
... return result
...
>>> total(1,2,3)
6
ဒီနေရာမှာ ကျွန်တော်တို့ a,b,c ဆိုတာတွေကို function က လက်ခံပြီး result ကို ပြန်ပို့ပေးပါတယ်။ အဲ့တော့ ဒီနေရာမှာ ကျွန်တော်တို့ 1 2 3 ကိုပေါ်းထားတာတွေ့ရမှာပါ။ကျွန်တော်က အကယ်လို့ ၁ ၂ ၃ ၄ ဆိုပြီးပေါင်းချင်တယ်ဆို
>>> total(1,2,3,4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: total() takes 3 positional arguments but 4 were given
Error တက်လာတာမြင်ရမှာပါ။အဲ့တော့ ကျွန်တော်တို့ ဘယ်လိုဖြေရှင်းကြလဲဆို
>>> def total(*args):
... result = sum([x for x in args])
... return result
...
>>> total(1,2,3,4)
10
args သည် ထည့်သမျှအားလုံးကို လက်ခံပါတယ်။အဲ့တာကြောင့်မို့ ကျွန်တော်တို့ ထည့်သမျှကို ပေါင်းပြီး ပြန်ပို့ပေးတာပါ။ဒီနေရာမှာ args လို့ပဲ ဘာလို့သုံးကြတာလဲဆို ရေးနေတဲ့ code ကို တိုအောင်လုပ်ပြီး သုံးရအဆင်ပြေအောင်လုပ်ထားတာပါ။အဲ့တော့ မိတ်ဆွေ function ထဲကို ထည့်သမျှကို *args နဲ့လက်ခံလို့ရပါတယ်။
Note
* သည် ထည့်လိုက်တဲ့ values တွေကို unpacking လုပ်ပေးတာပါ။ဒီနေရာမှာ args သည် list မဟုတ်ပါ။tuple သာဖြစ်ပါတယ်။args ပဲသုံးရမယ်လဲမဟုတ်ပါ *mgmg စသည်ဖြင့်လဲ သုံးလို့ရပါတယ်။
**kwargs
**kwargs ကတော့ kw ဆိုတဲ့အတိုင်း keyword ရယ် value ရယ် လက်ခံပါတယ်။dictionary လိုပေါ့။
>>> def testKwargs(**kwargs):
... print(type(kwargs))
... for key,value in kwargs.items():
... print("KEY",key)
... print("Value",value)
...
>>> testKwargs(x=10,y=11,z=12)
<class 'dict'>
KEY x
Value 10
KEY y
Value 11
KEY z
Value 12
Example ကိုကြည့်လိုက်မယ်ဆို dictionary အနေနဲ့လက်ခံပါတယ်။ကျန်တာကတော့ ကိုအသုံးချပုံပေါ်မူတည်ပါတယ်။
ဒီမှာသိရမှာပါ * သည် tuple အနေနဲ့ ** သည် dictionary အနေနဲ့ unpack လုပ်ပေးပါတယ်။name ကအဓိကမဟုတ်ပါဘူး။kwargs နေရာမှာ mgmg ဆိုလဲရပါတယ်။သိထားရမှာ * ပြီးမှ ** ကိုသုံးသင့်ပါတယ်။ဥပမာ total(x,y,*args,**kwargs) မျိုးဖြစ်ပါသည်။ကျေးဇူးတင်ပါတယ်။