Merhaba. Fırat Özgül’ün kitabından kendi kendime python öğreniyorum. Harika bir kitap ve genelde çok iyi açıklıyor. Fakat özyinelemeli fonksiyonlarda aşağıdaki örnekte ikinci return’den sonraki kısmın nasıl çalıştığını anlayamadım. Acaba açıklayabilme imkânınız var mıdır? Şimdiden teşekkür ederim
Merhaba, hoş geldiniz.
Öncelikle, kodları resim olarak değil de, kod görünümünde paylaşırsanız daha iyi olur.
Sorunuza geçecek olursak:
def düz_liste_yap(liste):
if not isinstance(liste, list):
return [liste]
elif not liste:
return []
else:
return düz_liste_yap(liste[0]) + düz_liste_yap(liste[1:])
l = [[1, 2], [3, 4]]
print(düz_liste_yap(l))
Yukarıdaki kodların nasıl çalıştığını açıklamaya çalışayım:
-
düz_liste_yap(l)
ile fonksiyonu,liste
parametresil
olacak şekilde çağırdık. -
l
’nin tipi liste olduğu içinelse
satırına gidildi. -
liste
’nin0
. indeksinde yer alan değer[1, 2]
. Bu değerdüz_liste_yap
fonksiyonuna argüman olarak verildi ve fonksiyon tekrar çağrıldı.düz_liste_yap(liste[1:])
ifadesi için ise dördüncü maddeye bakın.[1, 2]
bir liste olduğu için, yineelse
durumuna gidildi. Bu listenin0
. indeksinde yer alan değer1
. Bu değer bir liste değil. O halde değer[1]
şeklinde geri dönecek.[1, 2]
listesinin ilk elemanı hariç geri kalan elemanları dadüz_liste_yap
fonksiyonuna parametre olarak verilmişti. O halde liste şuna benzeyecek[2]
. Bu da bir liste olduğu için,else
satırına gidilir. Bu listenin0
. indeksinde yer alan sayı2
. Ve bu değer bir sayı. O halde geri dönen değer[2]
olacak.2
’yi de çıkardığımızda, geri kalan şey boş bir liste, bu durumda dönen değer, boş bir liste olur. Şu ana kadar[1] + [2] + []
geri döndü.
-
+
operatörünün sağında yer alan ifade şuydu:düz_liste_yap(liste[1:])
. Buradakiliste[1:]
ifadesinin değeri[3, 4]
. Ve 3. madde’nin alt maddesinde anlattığım aşamaların hepsi bu değerler için de tekrarlanır.
Ve sonuç olarak şöyle bir sonuç elde edersiniz.
[1] + [2] + [] + [3] + [4] + []
. Bu da [1, 2, 3, 4]
listesine eşittir.
Tam olarak aydınlatıcı oldu. Çok teşekkür ederim