0Pricing
Python Academy · Ders

Yineleyici Protokolü

__iter__ ve __next__ işlevlerini anlayın

Yineleyici Protokolü, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Yineleme nedir?

Bir liste, dize veya sözlük üzerinde for döngüsü yazdığınızda Python, arka planda yineleyici protokolünü kullanır.

Üzerinde döngü oluşturabileceğiniz nesneye yinelenebilir denir. Değerleri gerçekten birer birer üreten nesneye ise yineleyici denir.

for ch in 'abc':
    print(ch)

iter() ve next()

Yinelemeyi iki yerleşik işlev yönetir:

  • iter(obj), yinelenebilir nesneden yineleyicisini ister.
  • next(it), yineleyiciden sonraki değeri ister.

Başka değer kalmadığında next(), StopIteration oluşturur.

it = iter([10, 20, 30])
print(next(it))
print(next(it))
print(next(it))

StopIteration

next() işlevini gerekenden bir kez fazla çağırmak StopIteration oluşturur. for döngüsü bunu otomatik olarak yakalar ve düzgün biçimde durur.

it = iter([1])
print(next(it))
try:
    next(it)
except StopIteration:
    print('No more items')

İki çift alt çizgi yöntemi

Kendi yineleyicinizi oluşturmak için iki yöntem uygulayın:

  • __iter__, yineleyici nesnesinin kendisini döndürür.
  • __next__, sonraki değeri döndürür veya StopIteration oluşturur.
class Count:
    def __init__(self, n):
        self.i = 0
        self.n = n
    def __iter__(self):
        return self
    def __next__(self):
        if self.i >= self.n:
            raise StopIteration
        self.i += 1
        return self.i

for x in Count(3):
    print(x)

Yinelenebilir ile yineleyici karşılaştırması

Bir yinelenebilir nesnenin yalnızca __iter__ özelliğine sahip olması yeterlidir. Bir yineleyici ise hem __iter__ hem de __next__ özelliğine sahip olmalıdır.

Listeler yinelenebilirdir ancak yineleyici değildir: iter() işlevinin her çağrısı yeni bir yineleyici verir.

nums = [1, 2, 3]
print(iter(nums) is iter(nums))
it = iter(nums)
print(it is iter(it))

Yineleyiciler bir kez tüketilir

Bir yineleyici yalnızca bir kez tüketilebilir. Sona ulaştıktan sonra boş kalır. Yeniden döngü oluşturmak için yeni bir yineleyici oluşturun.

it = iter([1, 2])
print(list(it))
print(list(it))

Aralık benzeri bir yineleyici

Basit bir sayaç gibi davranan özel bir yineleyici oluşturalım. Durumun örnek içinde tutulduğuna dikkat edin.

class EvenUpTo:
    def __init__(self, limit):
        self.cur = 0
        self.limit = limit
    def __iter__(self):
        return self
    def __next__(self):
        if self.cur > self.limit:
            raise StopIteration
        value = self.cur
        self.cur += 2
        return value

print(list(EvenUpTo(8)))

Yinelenebilir ile yineleyiciyi ayırma

Daha temiz bir tasarımda kapsayıcı ile yineleyici ayrı tutulur; böylece kapsayıcı üzerinde birçok kez döngü oluşturulabilir.

class Bag:
    def __init__(self, items):
        self.items = items
    def __iter__(self):
        return BagIterator(self.items)

class BagIterator:
    def __init__(self, items):
        self.items = items
        self.i = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.i >= len(self.items):
            raise StopIteration
        v = self.items[self.i]
        self.i += 1
        return v

b = Bag(['x', 'y'])
print(list(b))
print(list(b))

Varsayılan değerle next() kullanma

next(it, default), yineleyici boş olduğunda StopIteration oluşturmak yerine varsayılan değeri döndürür. Güvenli bir ön izleme için kullanışlıdır.

it = iter([42])
print(next(it, 'done'))
print(next(it, 'done'))

Yineleyiciler belleği verimli kullanır

Yineleyiciler her seferinde tek bir öğe verir; bu nedenle tüm diziyi bellekte tutmaları gerekmez. Çok büyük, hatta sonsuz akışlara ölçeklenebilmelerinin nedeni budur.

class Naturals:
    def __init__(self):
        self.n = 0
    def __iter__(self):
        return self
    def __next__(self):
        self.n += 1
        return self.n

it = iter(Naturals())
print(next(it), next(it), next(it))

Yineleyicileri Tüketen Yerleşik İşlevler

Birçok yerleşik işlev her türlü yineleyiciyi kabul eder: sum, max, min, sorted, list, tuple. StopIteration oluşana kadar değerleri çekerler.

class Count:
    def __init__(self, n):
        self.i = 0
        self.n = n
    def __iter__(self):
        return self
    def __next__(self):
        if self.i >= self.n:
            raise StopIteration
        self.i += 1
        return self.i

print(sum(Count(5)))
print(max(Count(5)))

Hızlı Kontrol

Yineleyici protokolünü anlayıp anlamadığınızı sınayın.

Özet

Yineleyici protokolünü öğrendiniz:

  • iter() bir yineleyici alır; next() değerleri çeker.
  • StopIteration sona gelindiğini bildirir ve for bunu yönetir.
  • Özel yineleyiciler __iter__ ve __next__ yöntemlerini uygular.
  • Yineleyiciler tek kullanımlıktır ve bellek dostudur.

Sırada, yineleyicileri Python'un sizin için yield ile yazmasını sağlayacaksınız.

Sıkça Sorulan Sorular

“Yineleyici Protokolü” dersi ücretsiz mi?

Evet — “Yineleyici Protokolü” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“Yineleyici Protokolü” dersinde ne öğreneceğim?

__iter__ ve __next__ işlevlerini anlayın Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Yineleyici Protokolü” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yineleyici Protokolü
  2. Üreteç İşlevleri
  3. Üreteç İfadeleri
  4. yield from ve Yetkilendirme
← Python Academy Sayfasına Dön