Python’da Iterator ve Generator Mantığı
Generator’u anlamak için öncelikle Iterator’un ne iş yaptığını bilmek gerekiyor. Bu nedenle ilk önce Iterator’ı açıklayalım.
Iterator
Iterator, bir dizi ya da koleksiyon üzerinde gezinmek için kullanılan bir araçtır. Iterator’lar, bu koleksiyonların her bir elemanını tek tek döndürür ve her seferinde bir sonraki elemana geçer. Bir Iterator, koleksiyondaki elemanları sonradan eklemek ya da değiştirmek gibi bir işlem yapmaz, sadece koleksiyon üzerinde gezinir. (e.g. for döngüsü)
Yukarıdaki örnekte, iter()
fonksiyonu ile my_list
listesinden bir iterator oluşturuyoruz. Daha sonra next()
fonksiyonu ile bu iterator üzerinde gezinerek koleksiyondaki elemanları döndürüyoruz.
Generator
Generator (üreteç), dinamik olarak elemanlar üretmek için kullanılan bir fonksiyondur. Generator’lar, fonksiyon çağrıldığında çalışmaya başlar, ancak tüm elemanları önceden üretmezler. Bunun yerine, elemanlar yalnızca talep edildiğinde üretilir ve bir kez üretildikten sonra bir daha hatırlanmazlar. Bu sayede bellek kullanımı daha verimlidir.
Yukarıdaki örnekte, my_generator()
fonksiyonunu kullanarak bir generator oluşturuyoruz. Generator, yield
anahtar kelimesi ile elemanları üretir. Daha sonra next()
fonksiyonu ile bu generator üzerinde gezinerek elemanları döndürüyoruz.
Peki neden GENERATOR kullanırız?
Generator’lar, bellek kullanımını azalttıkları için, büyük veri setleriyle çalışırken çok yararlı olabilirler. Örneğin, bir dosyada birçok satırı işlemek istediğimizde, tüm satırları belleğe yükleyerek işlemek yerine, bir satır üretip işleyen bir generator oluşturabiliriz.
Yukarıdaki örnekte, process_lines()
adlı bir generator fonksiyonu oluşturuyoruz. Bu fonksiyon, belirtilen dosyadaki her satırı okuyarak yield
anahtar kelimesiyle birer birer döndürür. Daha sonra, for
döngüsüyle her satırı işleyebiliriz.
Generator’lar ayrıca, bir döngü sırasında ara vermek, devam etmek veya durdurmak için de kullanılabilirler. Bu, bazı koşullar yerine geldiğinde generator’ın durmasını veya devam etmesini sağlayarak daha dinamik bir yaklaşım sunar.
Özet olarak;
Iterator’lar, bir koleksiyon üzerinde gezinmek için kullanılırken, Generator’lar dinamik olarak elemanlar üretmek için kullanılır. Her ikisi de Python programlamasında çok yaygın bir şekilde kullanılır ve büyük veri kümeleriyle çalışırken performansı artırır.