Neden koyalim?
s yerine sayici() koyarak gorebiliriz:
sayici()()
Yani bu ikincisi, fonksiyonun dondurdugu fonksiyonu cagiriyor.
Goremiyoruz:
def sayıcı():
sayı = 0
def say():
nonlocal sayı
sayı += 1
return sayı
return say
print(sayıcı())
print(sayıcı())
print(sayıcı())
<function sayıcı.<locals>.say at 0x7f868f52ad40>
<function sayıcı.<locals>.say at 0x7f868f52ad40>
<function sayıcı.<locals>.say at 0x7f868f52ad40>
(bkz: Soru Sorarken Sıkça Düşülen Hatalar / #6)
![]()
Evet ama s = fonk() deyip s(); s(); s() yazmak ayni sey degil. fonk 1, dondurdugu 3 kere cagriliyor. fonk()(); fonk()(); fonk()() yapinca fonk 3 kere, her dondurdugu de birer kere cagriliyor.
Soru veya tartisma esnasinda “tek parantezle” gibi (yanlis) terimler turetmek yerine hepimizin ortak dili olan python’u kullanirsak herkesin isi kolaylasir. Burada demeye calistiginiz sey fonk’un sayi return etmemesi, print(fonk())'un sayi yazmamasi mi?
s’in bir degeri var. s bir closure (calismasi yarim kalmis fonksiyon denebilir). Icinde her seyi tutabilir. Bu ornekte sayi degiskenini tutuyor.