Python İteratorler

Python'da iteratorler, üzerinde gezinebileceğimiz verileri barındıran nesnelerdir. Yani iteratorler, bazı metotlar yardımıyla gezilebilen listelerdir diyebiliriz.

Yazıya başlamadan önce iterable ve iterator arasındaki farktan bahsedelim.(Bu arada, iterable ve iterator kelimeleri için tam Türkçe karşılık bulamadığım için tüm yazı boyunca bunları olduğu gibi kullanmaya devam edeceğim, bu yüzden mazur görün) Karakter dizileri,liste,demet,sözlük vs birer iterable iken, iterator ise bunlar üzerinde gezinme imkanı veren bir nesnedir. Yani iterable tipi belirtirken, iterator nesneyi belirtir. İterable nesneler üzerine iterasyon yapabiliriz. Bol iter'li yazı oldu, birazdan örneklerle beraber olayı daha iyi anlayacağımızı umuyorum.

Yukarıda da saydığım gibi, Python'da çoğu şey iterable'dir. Ve bunlar __iter__() isimli bir metot içerir. Görmek için şöyle bir şey yazabiliriz



Çıktıyı incelerseniz __iter__() metodunu görebilirsiniz. İşte bu metot, bize bir iterator nesnesi döndürür. Biz de bu nesneyi kullanarak listede gezinebiliriz. Python'da kullandığımız for döngüsü de önce iterable nesnenin __iter__() metodunu çalıştırır ve iterasyon nesnesini elde ettikten sonra bu nesne ile listede gezinti yapar, ta ki listenin sonuna kadar. Peki iterasyon nesnesiyle gezinti nasıl yapılır?

Tabiki de iterasyon nesnesinin __next__() metodunu kullanarak. İsterseniz bir örnek yapalım



Gördüğünüz gibi, __next__() metodu bize bir sonraki elemanı verir. Eğer listenin sonuna geldiğinizde hala kullanmaya çalışırsanız StopIteration hatası alacaksınız.

İterasyon nesnesini elde etmenin ve gezinmenin bir başka yolu daha var. iter() ve next() gömülü fonksiyonlarını kullanmak. Yukarıdaki örneği bir de şöyle yazalım



Eğer biz de kendimize ait bir iterable tip oluşturmak istersek, oluşturacağımız sınıfta __iter__ ve __next__ metodlarını override etmeliyiz. Basit bir örnek yapalım.



Yukarıdaki program, 20'e kadar olan çift sayıları ekrana yazar. for döngüsü, sınıfımızın __iter__ ve __next__ metodlarını çağırıp değerleri ekrana yazdıracaktır. Bir başka örnek daha yapalım ve konuyu bitirelim. Bu örnekte iterasyon ile kullanabileceğimiz bir Fibonacci sınıfı yazalım, ekrana ilk 10 fibonacci sayısını yazsın.



Bir başka yazıda buluşmak dileğiyle Allah'a emanet olun..

Hiç yorum yok:

Yorum Gönder