⊗pyPmFnCl 23 of 129 menu

Python-da Qapanmalar

Qapanma (closure) anlayisi ile funksiya ve ona muraciet ede bilecek butun xarici deyiskenler nezerde tutulur.

Python-da, adeten "funksiya qapanmasi" deyilende, hemin funksiyanin ozu deyil, eksine onun xarici deyisenleri nezerde tutulur.

Tutaq ki, bizim outer adli bir funksiyamiz var, icinde i deyiseni elan edilib ve daxili inner funksiyasi var. Bu funksiyada i deyisenine bir vahid elave olunur. i deyiseninin duzgun işlemesi ucun, ona nonlocal instruksiyasini elave edirik:

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

Indi ise xarici funksiyani res deyisenine menimsedek ve onu moterize ile cagiraq:

res = outer() res() # 1 cap edecek

Gelin res-i bir nece defe cagirag. Kodu icra etdikden sonra her defe i sayaci bir vahid artacaq:

res() # 2 cap edecek res() # 3 cap edecek res() # 4 cap edecek

Lakin burada muehim bir nüans var - outer funksiyasinin her cagrilisi oz sayacini artiracaq. Gelin birinci outer cagirisini res1 deyisenine, ikinci cagirisi ise res2 deyisenine menimsedek. Sonra ise onlari ardicilliqla konsola cap edek:

res1 = outer() res1() # 1 cap edecek res1() # 2 cap edecek res1() # 3 cap edecek res2 = outer() res2() # 1 cap edecek res2() # 2 cap edecek res2() # 3 cap edecek

Asagidaki kod verilmisdir:

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

Konsola ne cap olunacaqini deyin.

Her cagrildiqda novbeti Fibonaççi ededini geri qaytaran bir funksiya yaradin.

Mueyyen bir araliqda tesadufi tam eded geri qaytaran, lakin ardicil iki defe eyni ededin olmamasini temin eden bir funksiya yaradin.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et