Python 迭代器

Python 迭代器

迭代器 bir nesnedir ve değerlerin sayısını tutar.

迭代器 dolaşabilir nesnelerdir, bu da tüm değerleri dolaşabileceğiniz anlamına gelir.

Teknik olarak, Python'da, dolaşıcı protokolünü gerçekleştiren nesnelerdir, bu nesneler __iter__() ve __next__().

迭代器 VS 可迭代的 nesne (Iterable)

listeler, dizgeler, sözlükler ve kümeler dolaşabilir nesnelerdir. Bu dolaşabilir konteynerler, dolaşıcılar (Iterator) alabilirsiniz.

Bütün bu nesneler, dolaşıcıları almak için iter() Yöntem:

Örnek

Dizgeden bir dolaşıcı döndür ve her değeri yazdırın:

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))

Örnek Çalıştır

Hatta dizge de dolaşabilir nesnelerdir ve dolaşıcı döndürebilir:

Örnek

Dizge de dolaşabilir nesnelerdir ve karakter dizisini içerir:

mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

Örnek Çalıştır

迭代器 dolaşma

Ayrıca, for döngüsünü kullanarak dolaşabiliriz:

Örnek

Dizge değerlerini dolaşma:

mytuple = ("apple", "banana", "cherry")
for x in mytuple:
  print(x)

Örnek Çalıştır

Örnek

Dizge içindeki karakterleri dolaşma:

mystr = "banana"
for x in mystr:
  print(x)

Örnek Çalıştır

İpucu:for döngüsü, bir迭代器 nesnesi oluşturur ve her döngüde next() adında bir yöntem içerir.

迭代器 oluşturma

Nesne/sınıfı bir迭代器 olarak oluşturmak için nesneye __iter__() ve __next__() adında bir yöntem içerir.

Python sınıf/nesne bölümünde öğrendiğiniz gibi, tüm sınıflar adı __init__() Objeyi oluştururken bazı başlangıç ayarlarını yapmanıza izin veren bir fonksiyon.

__iter__() Metodun etkisi benzerdir, işlemleri (init gibi) gerçekleştirebilirsiniz, ancak her zaman迭代器 nesnesini döndürmek zorundasınız.

__next__() Metod, aynı zamanda işlemleri de gerçekleştirmenizi sağlar ve dizideki bir sonraki projeyi döndürmek zorundadır.

Örnek

Sayıları döndüren bir迭代器 oluşturun, 1'den başlar ve her dizi 1 artar (1, 2, 3, 4, 5 vb. döndürür):

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

Örnek Çalıştır

StopIteration

yeterli next() ifadesini kullanabiliriz veya for döngüsünde kullanarak, yukarıdaki örnek sonsuza kadar devam edecektir.

Döngü sonsuza kadar devam etmesini önlemek için StopIteration ifadesi.

if __next__() Metod içinde, döngü belirli bir sayıda tamamlanırsa, bir sonlandırma koşulu ekleyebiliriz ve hata tetikleyebiliriz:

Örnek

20 tane döngü sonunda durma:

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)

Örnek Çalıştır