Python’da Temel Bir Iterator
Oluşturma
Python’da iteratörler, bir veri yapısının temelinde doğrudan çalışmadan bir değerler koleksiyonunda dolaşmanıza olanak tanır. Liste, küme veya özel nesnelerle uğraşıyor olsanız da, kendi iterator’unuzu oluşturmayı anlamak son derece faydalı olabilir.
Bu blog yazısında, Example
adlı örnek bir sınıf kullanarak temel bir iterator nasıl oluşturulur bunu tartışacağız ve ardından bir jeneratör kullanarak daha basit bir uygulamayı keşfedeceğiz.
Iterator Nedir?
Iterator, iterator protokolüne uyan bir nesnedir. Bu, iki temel yöntemi sağlaması gerektiği anlamına gelir:
__iter__()
: Bu yöntem, iterator nesnesinin kendisini döndürür.__next__()
: Bu yöntem, koleksiyondan bir sonraki değeri döndürür. Daha fazla öğe kalmadığında,StopIteration
istisnası fırlatır.
Bu yöntemler, elemanları bir döngü içinde yinelemeyi kolaylaştırır.
Temel Bir Iterator Oluşturma
Bir iterator oluşturma sürecini adım adım inceleyelim.
Adım 1: Sınıfı Tanımlayın
Example
adında bir sınıf tanımlayarak başlayacağız. Bu sınıf, bir değerler listesi alacak ve bunları iterator üzerinden dışa aktaracaktır.
class Example:
def __init__(self, values):
self.values = values
Adım 2: Iterator Yöntemlerini Uygulayın
Şimdi, Example
sınıfında __iter__
ve __next__
yöntemlerini uygulayalım.
class Example:
def __init__(self, values):
self.values = values
def __iter__(self):
self.index = 0 # İndeksi başlat
return self
def __next__(self):
if self.index < len(self.values):
result = self.values[self.index]
self.index += 1 # Bir sonraki indeks'e geç
return result
else:
raise StopIteration # Döndürülecek başka değer yok
Adım 3: Iterator’ü Kullanın
Artık Example
sınıfının bir örneğini oluşturabilir ve değerleri üzerinden şöyle döngüyle geçebilirsiniz:
e = Example([1, 2, 3])
for value in e:
print("Örnek nesne şunları içeriyor:", value)
Bu kod aşağıdaki çıktıyı verecektir:
Örnek nesne şunları içeriyor: 1
Örnek nesne şunları içeriyor: 2
Örnek nesne şunları içeriyor: 3
Bir Sayıcı Iterator Oluşturma
Kavramı daha iyi açıklamak için, belirli bir düşük sayıdan yüksek sayıya kadar sayan basit bir Counter
iterator’u oluşturalım.
Sayıcı Sınıfı
Counter
iterator’unu şu şekilde inşa edebilirsiniz:
class Counter:
def __init__(self, low, high):
self.current = low - 1
self.high = high
def __iter__(self):
return self
def __next__(self):
self.current += 1
if self.current < self.high:
return self.current
raise StopIteration
Sayıcıyı Kullanma
Counter
sınıfını şu şekilde kullanabilirsiniz:
for c in Counter(3, 9):
print(c)
Bu aşağıdaki çıktıyı verecektir:
3
4
5
6
7
8
Alternatif Bir Yaklaşım: Jeneratörler Kullanma
Yukarıdaki iterator sınıfları faydalı olmakla birlikte, bir jeneratör uygulamak daha da basit olabilir. Jeneratörler, sizin için durumu ve yineleme protokolünü otomatik olarak yönetir.
Bir sayıcıyı jeneratör olarak nasıl oluşturabileceğinizi görelim:
def counter(low, high):
current = low
while current < high:
yield current
current += 1
for c in counter(3, 9):
print(c)
Çıktı aynı kalsa da, jeneratör yaklaşımı kodunuzu daha temiz ve bakımını kolay hale getirir.
Sonuç
Python’da iteratörler oluşturmak, kendi döngü davranışınızı tanımlamanıza ve nesnelerin değerlerini nasıl dışa aktardığını manipüle etmenize olanak tanır. __iter__()
ve __next__()
yöntemlerini uygulayarak özel bir yineleme deneyimi sunabilirsiniz. Ayrıca, jeneratör kullanmak süreci basitleştirir, zaman kazandırır ve karmaşıklığı azaltır.
Bu konu hakkında daha fazla bilgi için David Mertz’in Iterators and Simple Generators makalesini kontrol edebilirsiniz.
Artık Python’da iteratörler oluşturma konusunda temel bir anlayışa sahip olduğunuza göre, bu kavramları kendi projelerinizde uygulamaya başlayabilirsiniz!