Özel Yineleyiciler

Python'da Orta Düzey Nesne Yönelimli Programlama

Jake Roach

Data Engineer

Yineleyiciler

Nesne koleksiyonunun veya veri akışının gezilmesini sağlayan ve her seferinde bir öğe döndüren sınıflar

  • list, tuple gibidir, ancak farklı davranır
  • Gezinme, dönüştürme, üretme
  • for döngüleriyle üzerinde döngü kurulur
  • next() işlevi

$$

Yineleyici protokolü...

# Koleksiyon
chuck = NameIterator("Charles Carmicheal")
for letter in chuck:
    print(letter)
C
h
u
...
# Veri akışı
fun_game = DiceGame(rolls=3)
next(fun_game)  # ... vb.
4
Python'da Orta Düzey Nesne Yönelimli Programlama

Yineleyici protokolü

__iter__()

  • Bir yineleyici döndürür; burada kendisine bir başvuru
  • ... return self

$$

__next__()

  • Koleksiyondaki veya veri akışındaki sonraki değeri döndürür
  • Yineleme, dönüştürme ve üretim burada gerçekleşir

$$

Bir sınıfın yineleyici sayılması için hem __iter__() hem de __next__() tanımlanmalıdır!

Python'da Orta Düzey Nesne Yönelimli Programlama

Örnek yineleyici

class CoinFlips:
    def __init__(self, number_of_flips):
        self.number_of_flips = number_of_flips  # Toplam atış sayısını saklayın
        self.counter = 0

    def __iter__(self):
        return self  # Yineleyicinin kendisini döndürün

    # Sıradaki parayı atın, çıktıyı döndürün
    def __next__(self):
        if self.counter < self.number_of_flips:
            self.counter += 1
            return random.choice(["H", "T"])
Python'da Orta Düzey Nesne Yönelimli Programlama

Bir örnek yineleyici kullanma

three_flips = CoinFlips(3)

# Parayı üç kez atın
next(three_flips)
next(three_flips)
next(three_flips)
H
H
T
Python'da Orta Düzey Nesne Yönelimli Programlama

Bir yineleyicide döngüleme

three_flips = CoinFlips(3)

# Şimdi, yineleyicideki her öğeyi döngüleyin
for flip in three_flips:
    print(flip)
T
H
T
None
None
None
...
Python'da Orta Düzey Nesne Yönelimli Programlama

StopIteration

...
    def __next__(self):
        # Sadece para "number_of_flips" kez atılmadıysa yapın
        if self.counter < self.number_of_flips:
            self.counter += 1
            return random.choice(["H", "T"])

        else:  # Aksi halde StopIteration ile durdurun
            raise StopIteration
  • Koleksiyonların/veri akışının sonunu bildirir
  • Sonsuz döngüleri önler
  • Yönetmesi kolay
Python'da Orta Düzey Nesne Yönelimli Programlama

Bir yineleyicide döngüleme

three_flips = CoinFlips(3)

# Şimdi, yineleyicideki her öğeyi döngüleyin
for flip in three_flips:
    print(flip)
H
T
H
Python'da Orta Düzey Nesne Yönelimli Programlama

StopIteration istisnalarını yönetme

while True:
    try:
        next(three_flips)  # three_flips'in bir sonraki öğesini çekin

    # stop iteration istisnasını yakalayın
    except StopIteration:
        print("Tüm para atışları tamamlandı!")
        break
H
H
H
Tüm para atışları tamamlandı!
Python'da Orta Düzey Nesne Yönelimli Programlama

Ayo berlatih!

Python'da Orta Düzey Nesne Yönelimli Programlama

Preparing Video For Download...