Yazdığım fonksiyon tekrar çağrıldığında içerde çağırmış oldğum list boşaltılıyor

merhaba arkadaşlar bir fonksiyon oluşturdum ve içerisinde de boş bir list tanımladım. bu liste fonksiyon içinde eleman append ediyorum fakat doğal olarak fonksiyon her çağrıldığında içerde tanımlamış olduğum list boşaltılıyor. Listi fonksiyon içersinde tanımlamam lazım global olarak veya fonksiyon parametresi olarak listi dişarıdan çekmeye çalıiştığımda işler baya uzayacak. içerde oluşturduğum list elemanarını tutmanın bir yolu varmı. teşekkürler

Merhaba. Yapmaya çalıştığınız şeyi açıklarsanız daha kolay yardım edebiliriz ama şöyle bir şey yapılabilir:

def fonksiyonu_oluştur():
    liste = []
    def fonksiyon(n):
        liste.append(n)
        print(liste)
    return fonksiyon

fonksiyon = fonksiyonu_oluştur()

fonksiyon(1)
fonksiyon(3)
fonksiyon(2)
2 Beğeni

Bunun için bir kaç yöntem var.

1) Sınıf kullanmak.

class Sinif:
    def __init__(self):
        self.liste = []

    def fonksiyon(self):
        self.liste.append(0)


Sinif = Sinif()     
for n in range(5):
    Sinif.fonksiyon()
    print(Sinif.liste)

2) Parametre ve return kullanmak.

def fonksiyon(liste):
liste.append(0)
return liste

liste = []
for n in range(5):
liste = fonksiyon(liste)
print(liste)

3) Özyineleme Fonksiyonu Kullanmak.

def fonksiyon(liste):
    liste.append(0)
    if len(liste) == 5:
        return liste
    else:
        return fonksiyon(liste)

liste = []
liste = fonksiyon(liste)
print(liste)

4) Global hale getirmek.

liste = []
    def fonksiyon():
        global liste
        liste.append(0)

    for n in range(5):
        fonksiyon()
        print(liste)

Her birinin çıktısı en sonunda [0, 0, 0, 0, 0] olacaktır.

yerel değişkenleri fonksiyonun dışına taşımak için genellikle return kullanırız.
Eğer sınıfta olduğu gibi tek bir listeyi pek çok fonksiyon içerisinde kullanmak istiyorsanız global daha elverişli olacaktır. Ya da doğrudan sınıf oluşturulabilir.

2 Beğeni

C’deki static degiskenler. Her projede en az bir kere karsima cikiyorlar ve her seferinde ayni cirkin alternatiflerden birini secmek zorunda kaliyorum. (Cogu yukarda var) Sinif disi fonksiyonlarda en cok kullandigim, degiskeni fonksiyon objesine baglamak:

def count():
	count._last_num += 1
	print(count._last_num)
count._last_num = 0

Sinif icinde nasil yapiliyor bilmiyorum bile. Ugrasmayip member tanimliyorum.