13.1. Iterators

Iterators, Python’a iterasyon özelliği kazandıran bir nesnedir. Verileri döndüren nesne her seferinde bir öğe döndürür. Iterators, Pyhton programlama dilinde döngüler, liste, tüple ve generators gibi noktalarda karşımıza çıkar. 

Python iterators nesnesi, __iter__() ve __next__() iki özel metot içerir. Bu metotlardan bir değer alabilirsek iterator özelliğindeki bir nesne içinde olduğumuzu gösterir. Örneğin Python’da liste, tuple ve string bu özelliğe sahiptir.

13.1.1. Bir iteratorle veriyi dolaşma

Bir iterator’ün tüm öğelerini manuel olarak dolaşmak için next() fonksiyonu kullanılır. En son veriye ulaştığımızda başka bir veri yoksa StopIteration exception’ı üretilir. Örneğin,

Bu işlemi yapmanın bilinen yolu for döngüsü kullanmaktır. For döngüsü ile liste, tüple, dosya, string gibi veri türleri dolaşılabilir. Basit bir örnekle hatırlayalım:

Aslında for olsun while oldun, iterator nesnesini kullanılır.

13.1.2. Kendimize ait bir iterator sınıfı

Verilen bir sayıya kadar olan sayıların küplerini bulan bir iterator sınıfı yapalım ve bu sınıfı hem next() metodu ile hem de for döngüsü ile dolaşalım. Öncelikle küp alma fonksiyonu:

13.1.3. Sonsuz döngülü bir iterator sınıfı

Bir önceki örnekte belli bir n sayısına kadar sınıf belirlemiştik. Bu örnekte sınırları kaldırıyoruz:

Sonsuz döngü olduğu için döngü kullanırken dikkatli olun. Iterator kullanmanın en güzel yanı kaynaklardan tasarruf etmektir. Normal şartlarda tüm çift sayıları bir bellek alanında saklamak çok maliyetlidir. Iterator’ler sayesinde sadece ufak bir bellek bölgesi ile (sınıf için açılmış nesne kadar) tüm sayılara erişmek mümkündür. Ancak listedeki gibi tüm sayılar elimizde değildir. Örneğin 790 posizyonunda bulunan kaydı çek dediğiniz 791 defa next metodunu çalıştırmanız gerekir.