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 veyaStopIterationoluş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.StopIterationsona gelindiğini bildirir veforbunu 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
- Yineleyici Protokolü
- Üreteç İşlevleri
- Üreteç İfadeleri
- yield from ve Yetkilendirme