Ana içeriğe atla

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..

Yorumlar

Bu blogdaki popüler yayınlar

Python Subprocess

subprocess modülü, yeni bir process oluşturmayı sağlayan, bunların girdi-çıktılarını ele alma imkânı veren ve dönüş kodlarını almayı sağlayan bir modüldür. Yani daha basit bir şekilde, program içinde program çalıştırmaya imkan veren bir modüldür. Subprocess Modülünün Kullanımı subprocess basit bazı process'leri kullanmak için birkaç tane fonksiyon sunuyor. Daha karmaşık bir process çalıştırmak isterseniz, Popen sınıfını kullanabilirsiniz. Bunlara detaylı bir şekilde değinmeye çalışacağız. Şimdi basit fonksiyonları inceleyelim

Infix to postfix dönüşümü

Infix to postfix dönüşümü, operatorün ortada olduğu a+b yazım şeklini operatorün sonda olduğu ab+ yazım şekline dönüştürme işlemidir. Bu yazıda iki şekilde dönüşümden bahsedeceğim:   1) Stack yapısı kullanarak dönüştürme 2) Kağıt üstünde el ile dönüştürme    Infix gösterimi, bizler için kolay bir gösterim olsa da makineler için öyle değildir. İfadeyi soldan sağa doğru okurken a + b * c işleminde önce b ile c yi çarpıp sonra da a ile toplamayı kolay bir şekilde yapabiliriz çünkü bizim ifadeyi sıra ile soldan sağa adım adım giderek okuma zorunluluğumuz yok. Önce b*c nin öncelikle olduğunu görerek oradan başlar, sonra a ile kolayca toplarız.

Python Soket Programlama

Merhaba arkadaşlar. Bugün sizlerle birlikte Python'da socket programlama yapacağız. Bunun için Python da socket kütüphanesini kullanacağız. Peki nedir bu socket programlama? Soket programlama, sizin iki program arası yada iki bilgisayar arası iletişim kurmanızı sağlar. İşte bizde bugün iki programımızı birbiri ile haberleştireceğiz. Bunun için elimizde iki program olacak. Birinci program,mesaj bekleyen program olacak, diğeri ise mesaj gönderen program.