Python Yineleyiciler
Python Yineleyiciler
Yineleyici, sayılabilir sayıda değer içeren bir nesnedir.
Yineleyici, yinelenebilen bir nesnedir, yani tüm değerler arasında geçiş yapabilirsiniz.
Teknik olarak, Python'da bir yineleyici, yöntemlerden oluşan yineleyici protokolünü uygulayan bir nesnedir __iter__()
ve __next__()
.
Yineleyici ve Yinelenebilir
Listeler, demetler, sözlükler ve kümelerin tümü yinelenebilir nesnelerdir. Bir yineleyici alabileceğiniz yinelenebilir kaplardır .
Tüm bu nesnelerin iter()
bir yineleyici elde etmek için kullanılan bir yöntemi vardır:
Örnek
Tuple'dan bir yineleyici döndürün ve her değeri yazdırın:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
Dizeler bile yinelenebilir nesnelerdir ve bir yineleyici döndürebilir:
Örnek
Dizeler ayrıca bir dizi karakter içeren yinelenebilir nesnelerdir:
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
Yineleyici Üzerinden Döngü Yapmak
for
Yinelenebilir bir nesneyi yinelemek için bir döngü de kullanabiliriz :
Örnek
Bir demetin değerlerini yineleyin:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
Örnek
Bir dizenin karakterlerini yineleyin:
mystr = "banana"
for x in mystr:
print(x)
Döngü aslında bir yineleyici nesne oluşturur ve for
her döngü için next() yöntemini yürütür.
Yineleyici Oluştur
Yineleyici olarak bir nesne/sınıf oluşturmak için yöntemleri
__iter__()
ve
__next__()
nesnenize uygulamanız gerekir.
Python Sınıfları/Nesneleri bölümünde öğrendiğiniz gibi , tüm sınıfların
__init__()
, nesne oluşturulurken bazı başlatma işlemleri yapmanıza olanak sağlayan adlı bir işlevi vardır.
Yöntem __iter__()
benzer davranır, işlemler yapabilirsiniz (başlatma vb.), ancak her zaman yineleyici nesnenin kendisini döndürmeniz gerekir.
Yöntem __next__()
ayrıca işlem yapmanıza izin verir ve sıradaki bir sonraki öğeyi döndürmesi gerekir.
Örnek
1 ile başlayan sayıları döndüren bir yineleyici oluşturun ve her dizi bir artacaktır (1,2,3,4,5 vb. döndürerek):
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
StopYineleme
Yeterli next() ifadeniz varsa veya bir
for
döngüde kullanılmışsa, yukarıdaki örnek sonsuza kadar devam eder.
İterasyonun sonsuza kadar devam etmesini önlemek için
StopIteration
ifadeyi kullanabiliriz.
Yöntemde __next__()
, yineleme belirli sayıda yapılırsa bir hata oluşturmak için bir sonlandırma koşulu ekleyebiliriz:
Örnek
20 yinelemeden sonra dur:
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass =
MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)