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,listeparametresilolacak şekilde çağırdık. -
l’nin tipi liste olduğu içinelsesatırına gidildi. -
liste’nin0. indeksinde yer alan değer[1, 2]. Bu değerdüz_liste_yapfonksiyonuna 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, yineelsedurumuna 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_yapfonksiyonuna parametre olarak verilmişti. O halde liste şuna benzeyecek[2]. Bu da bir liste olduğu için,elsesatı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 
