⊗pyPmFnCl 23 of 129 menu

Python တွင် Closure များ

Closure (closure) ဆိုသည်မှာ လုပ်ဆောင်ချက်တစ်ခုနှင့် ၎င်းရရှိနိုင်သော ပြင်ပကိန်းရှင်များ အားလုံးပါဝင်သည်ကို ဆိုလိုသည်။

Python တွင် "လုပ်ဆောင်ချက်၏ closure" ဟု ပြောသောအခါ များသောအားဖြင့် ထိုလုပ်ဆောင်ချက်ကိုယ်တိုင်ကို မဟုတ်ဘဲ ၎င်း၏ ပြင်ပကိန်းရှင်များကိုသာ ရည်ညွှန်းလေ့ရှိသည်။

ကျွန်ုပ်တို့တွင် outer လုပ်ဆောင်ချက်တစ်ခုရှိပြီး ၎င်းထဲတွင် i ဟူသော ကိန်းရှင်ကို ကြေညာထားကာ အတွင်းပိုင်း inner လုပ်ဆောင်ချက်ရှိသည်ဆိုပါစို့။ ၎င်းထဲတွင် i ကို တစ်ထပ်တိုးပေါင်းမည်။ i ကိန်းရှင် မှန်ကန်စွာအလုပ်လုပ်စေရန် nonlocal ညွှန်ကြားချက်ကို ၎င်းထဲသို့ ထည့်ပေးပါမည်။

def outer(): i = 0 def inner(): nonlocal i i += 1 print(i) return inner

ယခု အပြင်ဘက်လုပ်ဆောင်ချက်ကို res ဟူသော ကိန်းရှင်ထဲသို့ ထည့်ပြီး ၎င်းကို ကွင်းစကွင်းပိတ်များဖြင့် ခေါ်ယူကြည့်ပါမည်။

res = outer() res() # ၁ ကို ပြသမည်

res ကို အကြိမ်အနည်းငယ် ခေါ်ယူကြည့်ပါစို့။ ကုဒ်အား လုပ်ဆောင်ပြီးနောက် တစ်ကြိမ်စီတိုင်းတွင် i ရေတွက်ကိန်းသည် တစ်ထပ်တိုးသွားမည်။

res() # ၂ ကို ပြသမည် res() # ၃ ကို ပြသမည် res() # ၄ ကို ပြသမည်

သို့သော် ဤတွင် အရေးကြီးသော အချက်တစ်ခုရှိသည် - outer လုပ်ဆောင်ချက်ကို ခေါ်ယူတိုင်းသည် ၎င်း၏ ကိုယ်ပိုင်ရေတွက်ကိန်းကို တိုးမြှင့်ပေးမည်။ outer ကို ပထမအကြိမ်ခေါ်ယူခြင်းအား res1 ကိန်းရှင်ထဲသို့ သိမ်းဆည်းပြီး ဒုတိယအကြိမ်ခေါ်ယူခြင်းအား res2 ထဲသို့ သိမ်းဆည်းပါစို့။ ထို့နောက် ၎င်းတို့ကို အစဉ်လိုက် ကွန်ဆိုးထဲသို့ ပြသပါမည်။

res1 = outer() res1() # ၁ ကို ပြသမည် res1() # ၂ ကို ပြသမည် res1() # ၃ ကို ပြသမည် res2 = outer() res2() # ၁ ကို ပြသမည် res2() # ၂ ကို ပြသမည် res2() # ၃ ကို ပြသမည်

အောက်ပါကုဒ်ကို ပေးထားသည်။

def outer(): i = 10 def inner(): nonlocal i i -= 2 print(i) return inner res1 = outer() res1() res1() res2 = outer() res2() res2() res2()

ကွန်ဆိုးထဲတွင် ဘာပြသမည်နည်း ပြောပြပါ။

ခေါ်ယူတိုင်း နောက် Fibonacci ဂဏန်းကို ပြသမည့် လုပ်ဆောင်ချက်တစ်ခု ဖန်တီးပါ။

ပေးထားသော အတိုင်းအတာအတွင်း ကျပန်းကိန်းပြည့်တစ်ခုကို ထုတ်ပေးမည့် လုပ်ဆောင်ချက်တစ်ခု ဖန်တီးပါ၊ သို့သော် ထပ်တိုက်တူညီသောကိန်းများ မရှိစေရပါ။

မြန်မာ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
ဝက်ဘ်ဆိုက် လုပ်ဆောင်ခြင်း၊ ဆန်းစစ်လေ့လာခြင်းနှင့် ပုဂ္ဂလိကပြုပြင်ခြင်းအတွက် ကျွန်ုပ်တို့သည် cookie များကို အသုံးပြုပါသည်။ ဒေတာများကို ပြုပြင်ခြင်းသည် ကိုယ်ရေးကိုယ်တာ မူဝါဒအတိုင်း ဖြစ်ပါသည်။
အားလုံးလက်ခံရန် ပြင်ဆင်ရန် ငြင်းပယ်ရန်