⊗pyPmFnCl 23 of 129 menu

Pythonda Yopilishlar

Yopilish (closure) deb funksiya bilan birga unga kirish mumkin bo‘lgan barcha tashqi o‘zgaruvchilar tushuniladi.

Pythonda ko‘pincha, "funksiya yopilishi" deyilganda, o‘sha funksiyaning o‘zi emas, balki aynan uning tashqi o‘zgaruvchilari nazarda tutiladi.

Faraz qilaylik, bizda outer deb nomlangan funksiya mavjud bo‘lib, unda i o‘zgaruvchisi va inner ichki funksiyasi e’lon qilingan. Undagi i o‘zgaruvchisiga bir qo‘shiladi. i o‘zgaruvchisi to‘g‘ri ishlashi uchun, unga nonlocal instruksiyasini qo‘shamiz:

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

Endi tashqi funksiyani res o‘zgaruvchisiga joylashtiramiz va uni qavslar bilan chaqiramiz:

res = outer() res() # 1 chiqadi

Keling, res ni bir necha marta chaqiraylik. Kod bajarilgandan so‘ng, har safar i hisoblagichi bittaga oshadi:

res() # 2 chiqadi res() # 3 chiqadi res() # 4 chiqadi

Biroq, bu yerda muhim nuans bor - outer funksiyasini har bir chaqirishi o‘z hisoblagichini oshiradi. Keling, birinchi outer chaqiruvini res1 o‘zgaruvchisiga, ikkinchi chaqiruvni esa res2 o‘zgaruvchisiga joylashtiraylik. Keyin ularni ketma-ket konsolga chiqaramiz:

res1 = outer() res1() # 1 chiqadi res1() # 2 chiqadi res1() # 3 chiqadi res2 = outer() res2() # 1 chiqadi res2() # 2 chiqadi res2() # 3 chiqadi

Quyidagi kod berilgan:

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

Konsolda nima chiqishini aytib bering.

Har chaqiruvi keyingi Fibonachchi sonini chiqaradigan funksiya yarating.

Oraliqda tasodifiy butun son chiqaradigan, lekin ketma-ket ikkita bir xil son bo‘lmasligi kerak bo‘lgan funksiya yarating.

Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish