⊗pyPmFnCl 23 of 129 menu

Python'da Closure'lar

Closure (closure) terimiyle, bir fonksiyonun erişebildiği tüm dış değişkenlerle birlikte ifade edilmesi kastedilir.

Python'da "fonksiyon closure'ı" denildiğinde, çoğunlukla fonksiyonun kendisinden değil, tam olarak onun dış değişkenlerinden bahsedilir.

Diyelim ki içinde i değişkeninin tanımlandığı ve iç fonksiyon inner'ın olduğu aşağıdaki outer fonksiyonumuz var. Bu fonksiyonda i'ye bir eklenir. i değişkeninin doğru çalışması için, nonlocal ifadesini ekliyoruz:

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

Şimdi dış fonksiyonu res değişkenine atayalım ve parantezlerle çağıralım:

res = outer() res() # 1 yazdırır

res'i birkaç kez çağıralım. Kod her çalıştıktan sonra i sayacı bir birim artacak:

res() # 2 yazdırır res() # 3 yazdırır res() # 4 yazdırır

Ancak burada önemli bir nüans var - outer fonksiyonunun her çağrılışı kendi sayacını artıracaktır. İlk outer çağrısını res1 değişkenine, ikinci çağrıyı ise res2 değişkenine atayalım. Ardından bunları sırayla konsola yazdıralım:

res1 = outer() res1() # 1 yazdırır res1() # 2 yazdırır res1() # 3 yazdırır res2 = outer() res2() # 1 yazdırır res2() # 2 yazdırır res2() # 3 yazdırır

Aşağıdaki kod verilmiştir:

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 yazdırılacağını söyleyin.

Her çağrıldığında bir sonraki Fibonacci sayısını verecek bir fonksiyon yapın.

Bir aralıkta rastgele bir tamsayı verecek, ancak arka arkaya iki kez aynı sayının gelmeyeceği bir fonksiyon yapın.

Türkçe
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenЎзбекOʻzbekTiếng Việt
Web sitesinin çalışması, analiz ve kişiselleştirme için çerezleri kullanıyoruz. Veri işleme, Gizlilik Politikası'na uygun olarak gerçekleşir.
tümünü kabul et özelleştir reddet