Burada verilen örnekte index out hatası neden vermemektedir?
def azalt(s):
if len(s) < 1:
return s
else:
print(s)
return azalt(s[1:])
print(azalt('istihza'))
s değişkeninin uzunluğu 1’den küçükse return s yapmakta dolayısıyla s değişkeninin uzunluğu 1 ise else bloğu çalışacak demektir fakat else bloğunda return azalt(s[1:]) kodu geçmekte. s parametresinin uzunluğu 1 iken s[1:]’ e nasıl erişiyor index out hatası vermesi gerekmiyor mu?
Slicing, direkt indekslemeden farklı bir işleyişe sahip, şu cevap çok iyi anlatıyor:
https://stackoverflow.com/a/22951149/9332187
Meâlen anladığım şu:
Slicing operasyonu sonucu bir liste döndürülmeye çalışılıyor. Eğer slicing’de kullanılan indeksler slice edilen objenin (__getitem__
'i olan objeler) “dışında” kalıyorsa, “objenin boş hali” döndürülüyor (böyle tercih edilmiş). Slice edilen liste ise []
, tuple ise ()
, string ise ""
gibi.
Direkt indekslemede ise “boş” eleman döndürmek uygun olmuyor, çünkü (aşağı yukarı) ne döndürse slice edilen objede bulunma ihtimali oluyor ve karışıklığa yol açabiliyor.
Bana kalırsa (kalmaz tabii) string özelinde direkt indekslemede sınırı aştığımızda empty string döndürülebilirmiş zira string’i oluşturan elemanlar da birer string.
3 Beğeni