Resim

Yineleyiciler (Iterators)

Yineleyiciler (Iterators): __iter__ ve __next__

Python'da Yineleme Nasıl Çalışır?

Python'da bir liste, tuple veya dize üzerinde for döngüsü kullandığınızda, bu döngünün arka planda nasıl çalıştığını sağlayan gizli bir protokol vardır: Yineleme Protokolü (Iteration Protocol).

Bu protokol, programın, büyük bir koleksiyondaki öğeleri bir kerede belleğe yüklemek yerine, yalnızca ihtiyaç duyulduğunda tek tek (bir sonraki öğeyi) çekmesini sağlar.

Bu protokolün iki temel oyuncusu vardır: iter() ve next().

1. iter() Fonksiyonu: Yineleyiciyi Başlatma

iter() yerleşik fonksiyonu, döngüye sokulabilir (Iterable) bir nesneyi alarak, onun üzerinde döngü kurmamızı sağlayan bir Yineleyici (Iterator) nesnesi döndürür.

  • Ne Yapar: Girdi olarak verilen nesnenin __iter__() özel (dunder) metodunu çağırır.

  • Sonuç: Bir yineleyici nesnesi elde edilir. Bu nesne, koleksiyondaki mevcut konumu (yani hangi öğede kaldığımızı) takip eder.

liste = ['a', 'b', 'c']
# 1. iter() çağrısı: Liste, Yineleyici Nesneye dönüşür.
iterator_nesnesi = iter(liste) 

# Yineleyici nesnesinin bellekteki konumu farklıdır:
# print(iterator_nesnesi) # <list_iterator object at 0x...>

Kendiniz Deneyebilirsiniz:

2. next() Fonksiyonu: Bir Sonraki Öğeyi Çekme

next() yerleşik fonksiyonu, yineleyici nesnesini alarak, koleksiyondan bir sonraki öğeyi çekmeyi sağlar ve imleci bir sonraki konuma taşır.

  • Ne Yapar: Yineleyici nesnesinin __next__() özel metodunu çağırır.

  • Amaç: Koleksiyondaki verileri sırayla tüketir.

# 'iterator_nesnesi' bir önceki adımdan geldi
# 2. next() çağrısı: İlk öğe çekilir.
ilk_oge = next(iterator_nesnesi)
print(ilk_oge) # Çıktı: a

# 3. next() çağrısı: İkinci öğe çekilir.
ikinci_oge = next(iterator_nesnesi)
print(ikinci_oge) # Çıktı: b

Kendiniz Deneyebilirsiniz:

3. Döngüyü Durdurma: StopIteration İstisnası

Yineleyicinin en kritik görevi, koleksiyonda artık başka bir öğe kalmadığında döngüyü durdurmaktır. Bunu, özel bir istisna fırlatarak yapar: StopIteration.

Bir for döngüsü, arka planda bu istisnayı sessizce yakalar ve programı çökertmeden döngüyü sonlandırır.

Manuel Örnek:

# 'a', 'b', 'c' zaten çekildi
print(next(iterator_nesnesi)) # Çıktı: c

# 4. next() çağrısı: Öğe kalmadı
# next(iterator_nesnesi) 
# Bu satır çalışsaydı: Hata: StopIteration

# for döngüsünün arkasındaki mantık:
# while True:
#     try:
#         oge = next(iterator_nesnesi)
#         # İşlemi yap...
#     except StopIteration:
#         break # Hata yakalanır ve döngüden çıkılır

Kendiniz Deneyebilirsiniz:

Özet: for Döngüsü Nasıl Çalışır?

Basit bir for oge in liste: döngüsü, arka planda şu adımları atar:

  1. iterator = iter(liste) çağrılır.

  2. while True: döngüsü başlar.

  3. Döngünün her adımında oge = next(iterator) çağrılır.

  4. next() StopIteration fırlattığında, döngü otomatik olarak sonlanır.

Bu temel mekaniği anlamak, size sadece listelerin değil, aynı zamanda Generator'ların ve büyük dosya okumalarının bellek dostu bir şekilde neden çalıştığını açıklar.

🔥 Python Kariyerinizi Hemen Başlatın!

Hemen kursumuza kaydolun ve bu güçlü araçları kullanarak profesyonel Python geliştiricisi olma yolunda ilk adımı atın. Kursumuzdaki uygulamalı modüller, sizi sadece bir yazılımcı adayı değil, hazır bir profesyonel haline getirecek. Python Eğitimini Udemy platformunda bulabilirsiniz.

[ Python Eğitimi Sıfırdan İleri Seviye ]

Tıklayın ve Python Eğitimine Hemen Kaydolun!

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?