Path: blob/master/Pythondaki Iteratorlar ve Generatorlar/Iteratorlerin Oluşturulması ve Kullanılması.ipynb
765 views
Iteratorların Oluşturulması ve Kullanılması
Bu konuda iteratorları oluşturmayı, kullanmayı ve kendi objelerimizi iterable (üzerinde gezinilebilecek) olarak nasıl yazarız öğrenmeye çalışacağız. İlk olarak iteratorlar nedir anlamaya çalışalım
Iteratorlar nedir?
Iteratorlar aslında Pythonda çoğu yerde biz görmesek de kullanılır. Iteratorlar özellikle for döngülerinde , list comprehensionlarında, ve bir sonraki derste göreceğimiz generatorlarda karşımıza çıkar.
Iteratorlar en genel anlamıyla üzerinde gezinilebilecek bir objedir ve bu obje her seferinde bir tane eleman döner.
Pythonda kendisinden iterator oluşturabileceğimiz her obje iterable bir objedir.. Örneğin, demetlerden,listelerden ve stringlerden oluşturduğumuz bütün objeler iterable bir objedir.
Bir objenin iterable olması için hazır metodlar olan _iter()_ ve _next()_ metodlarını mutlaka tanımlaması gerekir.
Iterator oluşturma
Bir iterator objesini , iterable bir objeden (liste,demet,string vs) oluşturmak için Pythonda iter() fonksiyonunu kullanıyoruz ve bu objenin bir sonraki elemanını almak için next() fonksiyonu kullanıyoruz.
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-75-9aa5c89bf87c> in <module>()
----> 1 next(iterator) # Eleman kalmadığı için "StopIteration" hatası
StopIteration:
İşte iterable bir objeden bir iterator'ı bu şekilde oluşturup, next() fonksiyonuyla objenin sıradaki elemanını alabiliyoruz. Ancak eleman kalmayınca StopIteration hatasını alıyoruz. İşte iteratorların kullanımı bu şekildedir. Aslında biz farketmesek de Pythondaki for döngüleri aslında bir objenin üzerinde gezinirken iteratorları kullanır.
Aslında for döngülerinin iç yapısı şu şekildedir;
Kendi Iterable Objelerimizi Oluşturmak
Peki biz kendi oluşturduğumuz veritiplerini nasıl iterable yapacağız ? Bunun için oluşturacağımız sınıfların mutlaka _iter()_ ve _next()_ metodlarını tanımlaması gereklidir. Şimdi bir tane kumanda sınıfı oluşturalım ve bu sınıfı iterable yapalım.
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-87-3733e97f93d6> in <module>()
----> 1 next(iterator)
<ipython-input-78-369bc7ea5e2a> in __next__(self)
12 else:
13 self.index = -1
---> 14 raise StopIteration
StopIteration:
Güzel ! Objemizi iterable yapmayı başardık. Objemiz iterable olduğuna göre artık for döngüsüyle üzerinde gezinebiliriz.
İşte Pythonda iteratorların kullanımı bu şekilde ! Artık iterator kullanmayı ve kendi objelerimizi iterable yapmayı biliyoruz.