Pythonda Nested (İç içe fonksiyonlar) da anlamadığım kısım

Cevap yazıp yardımcı olan herkese teşekkür ederim.

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)

:+1:

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.

1 Beğeni

Kafamın karışmasına sebep olan şey closure dediğiniz şeyi bilmiyor olmammış onun ne iş yaptığını bilmeyince tabi s = fonk() un anlamının sadece her seferinde uzun uzun fonk() fonk()yazmaktansa kısaltma için s() s() kullanıldığını zannediyordum ayrıca bugüne kadar fonksiyona ulasmak için parantez koyulmasının şart olduğunu sanıyordum şuan neyi bilmediğimi öğrendiğim için sıkıntı kalmadı

burada return say yerine return say() yazıp sayıcı() olarak çağırınca 1 1 1 1 veriyor

Yardımcı olduğunuz için teşekkür ederim.