Python’da Generator Fonksiyonlar

Generator fonksiyonlar; duraklayarak bir veri dönen ve bir daha çağrıldığında kaldığı yerden devam eden fonksiyonlardır. Büyük veri setlerinde bütün veriyi bellekte(memory) tutmadan çağrıldıkça döndürerek avantaj sağlayabilir.

Söz dizimi olarak normal bir fonksiyondan farkı yoktur, fazlalık olarak veri döndürmek için return yerine yield anahtar kelimesini kullanırız.

Bu basit örnekte kodumuz yield satırına geldiğinde duracak ve num değişkenini döndürür. gerisay() tekrar çağırıldığında num -= 1 kodunu çalıştırarak devam eder. Peki bu fonksiyonu nasıl çağıracağız. Son satırda tipini yazdırdığımız bestenSay değişkeni bir generator nesnesidir. Generator nesnelerinin kaldığı sıradan devam etmesi yada çalışmaya başlaması için next() fonksiyonu içine parametre olarak vermemiz gerekir.

Next ile ilk çağırışımızda fonksiyon en baştan başlayarak ilerler ta ki yield görene kadar. Burada fonksiyon içindeki durum tutularak yield önündeki değer döndürülür, daha sonraki next çağırımında bu durum ile kod çalışmaya devam eder. Artık bir yield kalmadığında yani fonksiyonun sonuna geldiğimizde StopIteration Exception’ı dönecektir.

Bir başka çağırma yöntemi de for .. in anahtar kelimeleri iledir. Burada generator fonksiyonumuz bitene kadar döngü işleyecektir.

List veri tiplerinde olduğu gibi Generator’lar içinde satır için bir tanımlama yapılabilir.

List’e karşı bellek üzerinde olan bu avantaj hız dezavantajı olarak geri döner. List kullanımı bellek hassasiyeti yok ise daha hızlıdır.

Bir Cevap Yazın