koddla

Yazılımcıları bilgi ile güçlendirir.

Closure

Python’da closure’lar işlev çağrıları tarafından oluşturulurlar. Burada, makeInc için bir çağrı yapmak inc içerisindeki x için bir “bağlantı” oluşturur. Her çağrı, bu işlevin yeni bir örneğini oluşturur, ancak her x örneği farklı bir bağlantıya sahiptir. Aşağıdaki örneğe bakalım:

def makeInc(x):
  def inc(y):
     # x, inc'in tanımı ile bağlantılı 
     return y + x

  return inc

incOne = makeInc(1)
incFive = makeInc(5)

incOne(5) # dönüt 6
incFive(5) # dönüt 10

Düzenli bir closure’da, iç işlev kendisini çevreleyen işlevin tüm değişkenlerini tamamen devralır. Ancak, bu yapıda, iç işlevin devralınan değişkenlerde yalnızca okuma erişimine sahiptir. Dolayısıyla bu değerlere atama yapamayacağını unutmayın.

def makeInc(x):
  def inc(y):
     # x'i değiştirmeye iznimiz yok
     x += y  
     return x

  return inc

incOne = makeInc(1)
incOne(5) # UnboundLocalError: x tanımlanmadan çağrıldı

Python 3, iç içe geçmiş işlevlerle tam bir kapsama gerçekleştirmek için nonlocal ifadesini sunar.

def makeInc(x):
  def inc(y):
     nonlocal x
     # x'i yeniden tanımlamak artık mümkün
     x += y  
     return x

  return inc

incOne = makeInc(1)
incOne(5) # Dönüt 6

Bir yanıt yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top