Extended Unpacking
25 Apr 2020 / 4 min read
Extented unpacking ဆိုသည်မှာ ကျွန်တော်တို့ တည်ဆောက်ထားသော list တစ်ခုကို assgin လုပ်မည်။ သို့သော် assgin လုပ်မည့် object နှင့် variable နှစ်ခုသည် အရေအတွက် မတူညီ၍ မျှခြေမညီသောအခါတွင် ကျွန်တော်တို့သည် unpacking လုပ်ရန် အခက်တွေ့မည် ဖြစ်သည်။ သို့သော် extended unpacking နည်းဖြင့် ဆိုလျှင် ဤပြဿနာကို ရှင်းနိုင်မည် ဖြစ်သည်။ extened unpacking ကို ကျွန်တော်တို့သည် သုံးရန် အတွက် * (start expesstion) နှင့် တွဲရ အသုံးပြုရသည်။ ဥပမာအားဖြင့် ပြရသော်
a,b=[1,2,3,4,5,6,7]
print(a)
print(b)
ယခု ကုဒ်ကို ကျွန်တော်တို့ run ကြည့်မည် ဆိုက error တက်မည်ဖြစ်သည်။ အဘယ်ကြောင့်ဆိုသော် ကျွန်တော်တို့ unpacking လုပ်မည့် object နှင့် variable နှစ်ခုသည် အရေအတွက် မတူညီ၍ဖြစ်သည်။ အကယ်၍ variable နှစ်ခုတည်းသာ ဆိုပါက အလုပ်လုပ်မည်ဖြစ်သည်။ သို့သော် ၎င်းကို ကျွန်တော်တို့ extended unpacking နည်းသုံး၍ ရှင်းပါမည်။
a,*b=[1,2,3,4,5,6,7]
print(a)
print(b)
ယခုကုဒ် တွင် a ကို variable 1 နှင့် assgin လုပ်သွားမည်ဖြစ်ပြီး ကျန်သော variable အတွက်မူ object b တစ်ခုတည်းဖြင့် မလောက်ပေ။ ထို့ကြောင့် object b ကို * (start expesstion) တွဲကာ ကျန် variableများ ဖြင့် assgin လုပ်ပါသည်။ အဆိုပါ ကုဒ်ကို run မည်ဆိုပါက အောက်ပါ အတိုင်း ရလဒ် ထွက်လာမည် ဖြစ်သည်။ကျွန်တော်တို့ * (start expesstion) တွဲထားသော b ၏ ရလဒ်သည် list အနေဖြင့် ထွက်လာသည်ကို မြင်တွေ့ရမည် ဖြစ်သည်။
Result
1
[2, 3, 4, 5, 6, 7]
ကျွန်တော်တို့သည် extended unpacking ကို ဤကဲ့သို့ ညီမျှခြင်း၏ ဘယ်ဘက်ခြမ်းမှာ သာမက ညီမျှခြင်း၏ ညာဘက်ခြမ်းတွင်လည်း သုံး၍ ရသည်။ ကျွန်တော်တို့သည် extened unpacking ကို list နှင့် tuple တို့တွင်လည်း *
တစ်ခုတည်းဖြင့် သုံးလို့ရနိုင်သလို dicitionary တွင်မူ *
တစ်လုံးတည်းဖြင့် မရဘဲ **
နှစ်လုံးဖြင့် အသုံးပြုလို့ရသည်။ အဘယ်ကြောင့် ဆိုသော် dicitionary တွင် key နှင့် value ရှိသောကြောင့် ဖြစ်သည်။ အကယ်၍ ကျွန်တော်တို့ *
တစ်လုံးတည်းသာ သုံး၍ ထုတ်ပါက key သာ ထွက်လာမှာ ဖြစ်ပြီး value ထွက်လာမည် မဟုတ်ပေ။ ထို့ကြောင့် ကျွန်တော်တို့သည် dicitionary တွင် **
နှစ်လုံး သုံးရခြင်း ဖြစ်သည်။ နောက်တစ်ချက်မှာ ကျွန်တော်တို့သည် *
(start expesstion) ကို ညီမျှခြင်း၏ ဘယ်ဘက် သာမက ညာဘက်တွင် နှစ်ဘက်စလုံး’ သုံး၍ ရသော်များလည်း ချွင်းချွက်အနေဖြင့် *
(start expesstion) နှစ်လုံး ဆိုပါက ညီမျှခြင်း၏ ညာဘက်ခြမ်းတွင်သာ သုံး၍ ရမည် ဖြစ်သည်။
ကျွန်တော်တို့ အောက် ပထမ ဇယား ပါ program အား run ၍ ထွက်လာသော ရလဒ်ကို ကြည့်ပါက list တစ်ခုတည်းတွင် list နှစ်ခု ရှိနေသည် ကို တွေ့ရမည် ဖြစ်သည်။ ၎င်းအား ကျွန်တော်တို့ တစ်ခုတည်း ဖြစ်သွားအောင် လုပ်ပါမည်။ c = [a,b]
တွင် c = [*a,*b]
ဖြင့် *
(start expesstion) သုံးကာ run ကြည့်ပါက ရလဒ်သည် တစ်ခုတည်း ဖြစ်သွားသည်ကို ဒုတိယ ဇယား တွင်တွေ့ရမည် ဖြစ်သည်။
Program a = [1,2,3] b = [4,5,6] c = [a,b] print(c) Result [[1, 2, 3], [4, 5, 6]] | Program a = [1,2,3] b = [4,5,6] c = [*a,*b] print(c) Result [1, 2, 3 , 4, 5, 6] |
---|
နောက်တစ်ခုမှာ ကျွန်တော်တို့ *(start expesstion) ကို သုံးရင် တစ်ခုတည်းသာ သုံး၍ ရနေခြင်းဖြစ်သည်။ ဆိုလိုသည်မှာ အောက်ဖော်ပြ ဇယား ပထမအကွက်တွင် ကျွန်တော်တို့သည် ညီမျှခြင်း၏ ဘယ်ဘက်ခြမ်းတွင် *
(start expesstion) ကို object b တွင်လည်းကောင်း ၊ object e တွင်လည်းကောင်း သုံးထားသည် ကို မြင်ရမည် ဖြစ်သည်။ သို့သော် အဆိုပါ ကုဒ်အား run ကြည့်ပါက erro တက်မည် ဖြစ်သည်။
ထို့ကြောင့် ကျွန်တော်တို့ နှစ်ခါ သုံးလိုပါက ဒုတိယဇယားကွက်ပါ အတိုင်း () ဖြင့် သုံး၍ ရနိုင်ပေသည်။
Program a,b,*c,d,*e=[1,2,'green',3,'hacker'] print(a) print(b) print(c) print(d) print(e) Result erro | Program a,b,(*c,d),*e=[1,2,'green',3,'hacker'] print(a) print(b) print(c) print(d) print(e) Result 1 2 ['g', 'r', 'e', 'e'] n [3, 'hacker'] |
---|