Python(3.9.1) Generator Kavramı

generators

Python (3.9.1) Generator

  • Bu yazıda Python'daki (3.9.1) generator kavramını anlamaya çalışacağız.
  • Generator'lar farklı veri tiplerine(integer, float, string, boolean) sahip değerler dizgesi(sequence) üretirler.
  • Generator'lar bir veri dizgisi(sequence) ürettiği için iterate edilebilir
  • Bir fonksiyonda(methodda) yield anahtar kelimesi kullanarak ya da list comprehension yapısı ile generator oluşturulabilir.
  • Generator tüm veriyi hafızada(memory) tutmaz.
  • Generator tipindeki bir fonksiyon 1 kere çalışır ve duraklar, iterate edebildiğiniz için fonksiyonu tekrar çağırdığınızda çalışır ve tekrar duraklar.
  • Iterasyon bittiği halde çağırmaya çalışırsanız StopIteration exception alırsınız.
  • Generator tipinden list tipine verinizi dönüştürürseniz performans kaybı yaşarsınız.
  • Iterate edebildiğiniz için generator'daki verilere next() fonksiyonu ile erişebilirsiniz.
  • Generator exhausted(tükenmiş) olduktan sonra tekrar üzerinde iterate edemezsiniz.

Örnekler

ornek1.py

Verilere erisim 1. yontem

ornek2.py

  • Çok fazla sayıda verilerle işlem yaptığımızda bütün verilerin işlenmesinin bitmesini beklemek yerine generator yapısını kullanarak zaman ve performans açısından kazançlı çıkabiliyoruz.

ornek3.py

  • Generator veri yapıları list veri yapılarına göre daha performanslıdır. Yukarıdaki örneği çalıştırınca aşağıdaki sonuçları alıyoruz. Aradaki hız farkını görebilirsiniz.

Corey Schafer Kod Örneği Çıktısı

  • Görüldüğü gibi listeler hafızada daha çok alan kapladığı gibi generator'lere göre daha yavaş çalışmaktadır.

Kaynaklar

  1. YouTube "Barış Şimşek Python Generators1 Türkçe"
  2. YouTube "Corey Schafer Python Generators"

Yorumlar