Understanding *args and **kwargs in python

2519 views Dec 04, 2024

ကျွန်တော်တို့ ဒီနေ့မှာတော့ *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) မျိုးဖြစ်ပါသည်။ကျေးဇူးတင်ပါတယ်။