Generator Ne Demek?
Yayın: · Son güncelleme:
Generator Ne Demek? Kısaca
Generator, programlamada değerleri bir kerede liste hâlinde değil, her istendiğinde birer birer üreten özel fonksiyondur. Python'da yield anahtar sözcüğüyle yazılır ve büyük veriyi az bellekle işlemeyi sağlar.

Generator ne demek?
Generator, "üreteç" anlamına gelir ve tembel (lazy) çalışan bir fonksiyondur. Normal bir fonksiyon return ile tek bir sonuç döndürüp biter. Generator ise yield ile bir değer verir, durur ve bir sonraki değer istendiğinde kaldığı yerden devam eder.
Her generator aynı zamanda bir iterator'dır. Bu yüzden for döngüsüyle doğrudan dolaşılabilir. Python ve JavaScript (function* sözdizimi) en bilinen örneklerdir.
Nasıl çalışır?
Varsayımsal bir Python örneği:
def kare_sayilar(n):
for i in range(1, n + 1):
yield i * i
kare_sayilar(1000000) çağrısı bir milyon sayıyı hemen hesaplamaz. Döngü her istediğinde yalnız sıradaki kareyi üretir. Aynı işi liste ile yapsaydınız bir milyon sayının tamamı önce belleğe yazılırdı.
Kısa bir yazım da vardır. (x * x for x in range(10)) ifadesi, köşeli parantez yerine normal parantez kullandığı için liste değil generator üretir.
Ne zaman kullanılır?
Generator'lar, sonu belli olmayan ya da çok büyük veri akışlarında parlar. Büyük bir CSV dosyasını satır satır işlemek, bir API'den sayfa sayfa veri çekmek ya da sonsuz bir sayı dizisi üretmek tipik kullanım alanlarıdır.
İki noktaya dikkat edin. Generator tek kullanımlıktır, sonuna gelindiğinde tekrar dolaşılmaz. Değerlerin uzunluğunu len() ile öğrenemez, belirli bir elemana indeksle erişemezsiniz. Bu işlemlere ihtiyacınız varsa list() ile listeye çevirmeniz gerekir, ama o zaman bellek avantajı kaybolur.
Sıkça Sorulan Sorular
yield ile return arasındaki fark nedir?
return fonksiyonu tamamen bitirir ve tek bir değer döndürür. yield ise bir değer verip fonksiyonu duraklatır. Bir sonraki istekte fonksiyon kaldığı satırdan devam eder.
Generator her zaman listeden hızlı mıdır?
Hayır. Küçük veri setlerinde fark ihmal edilebilir, hatta liste biraz daha hızlı olabilir. Generator'ın asıl avantajı hız değil, büyük veride bellek tasarrufudur.