İçeriğe geç
parazade

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 nedir?
İçindekiler
  1. Generator ne demek?
  2. Nasıl çalışır?
  3. Ne zaman kullanılır?

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.

İlgili terimler

IteratorIterator (yineleyici), bir liste ya da koleksiyonun elemanlarına sırayla, birer birer erişmeyi sağlayan nesnedir. Her çağrıda bir sonraki elemanı verir ve elemanlar bittiğinde bunu bildirir.Fonksiyon(Function)Fonksiyon, programlamada belirli bir işi yapan, isim verilmiş ve gerektiğinde tekrar tekrar çağrılabilen kod bloğudur. Girdi olarak parametre alabilir ve geriye bir değer döndürebilir.PythonPython, okunabilir ve sade sözdizimiyle bilinen, genel amaçlı, açık kaynaklı bir programlama dilidir. Veri bilimi, yapay zekâ, otomasyon ve web geliştirmede en yaygın kullanılan dillerden biridir.Bellek Yönetimi(Memory Management)Bellek yönetimi, bir programın çalışırken ihtiyaç duyduğu belleği ayırma, kullanma ve işi bitince geri verme sürecidir. Bu iş dile göre ya geliştirici tarafından elle ya da çöp toplayıcı gibi otomatik mekanizmalarla yapılır.JavaScriptJavaScript, web sayfalarına buton tıklaması, form doğrulama ve anlık güncelleme gibi etkileşimler kazandıran, tarayıcıların yanı sıra Node.js ile sunucuda da çalışabilen yaygın bir programlama dilidir.Döngü(Loop)Döngü (loop), programlamada bir kod bloğunu belirli sayıda ya da bir koşul sağlandığı sürece tekrar tekrar çalıştıran yapıdır. En yaygın türleri for ve while döngüleridir.Liste(List)Liste (list), programlamada birden fazla değeri sıralı tutan, eleman eklenip çıkarılabilen ve değiştirilebilen veri yapısıdır. Python'da köşeli parantezle yazılır: `meyveler = ["elma", "armut"]`.