CodeBlanks Logo Icon CodeBlanks

send ve throw

send() ve throw() ile generator etkileşimini öğrenirsin.

send metodu

Bir üreteç dışarıdan değer alabilir. g.send(deger) çağrısı, üretecin beklediği yield ifadesine değer gönderir ve bir sonraki yield'e kadar ilerletir. Bu, üreteçleri esnek eşyordam (coroutine) gibi kullanmayı sağlar.

Örnek: v = yield total. g.send(5) çağrısı v'ye 5 atar. İlk send'den önce next(g) çağrısı yapılarak üreteç ilk yield'e ilerletilmelidir; bu işleme priming denir.

throw metodu

g.throw(Exception) çağrısı, üretecin beklediği yield noktasında bir istisna fırlatır. Üreteç bu istisnayı try/except ile yakalayabilir ya da yukarı yayabilir.

Örnek: üreteç try:\n v = yield total\nexcept ValueError:\n print("hata") gövdesine sahipse, g.throw(ValueError) çağrısı except bloğunu çalıştırır. Bu, üreteci dışarıdan hata sinyali vermek için kullanılır; özellikle uzun süren işlerde iptal ya da durum değişimi için pratiktir.

Uygulama acc üreteci ve send

def acc(): fonksiyonunu tanımla. Gövdede total = 0 yaz; while True: döngüsü aç; içinde v = yield total ve if v is not None: total += v yaz. g = acc() ile örnek oluştur, next(g) ile başlat. print(g.send(5)) ve print(g.send(10)) ile iki değer gönder ve sonucu yazdır.

Başlangıç kodu

main.py
# acc üreteci ve send ile değer topla

Örnek çözüm

main.py
# acc üreteci ve send ile değer topla
def acc():
    total = 0
    while True:
        v = yield total
        if v is not None:
            total += v

g = acc()
next(g)
print(g.send(5))
print(g.send(10))

Beklenen çıktı

5
15

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 send ve throw parçalarını eşleştir

Kavram Anlamı
send Değer gönderir
throw Hata fırlatır
next(g) Başlatma
v = yield Değer alımı

2 send çağrısından önce ne yapılır?

  • Üreteç silinir
  • next(g) ile başlatılır Doğru cevap
  • throw çağrılır
  • close çağrılır

Açıklama: Next(g) ile başlatılır. Bu işlem priming olarak bilinir.

3 send çağrısı

Soru
g = acc()
next(g)
print(g.____(5))
Cevap
g = acc()
next(g)
print(g.send(5))

Açıklama: g.send(5) üretece 5 gönderir.

Orta seviye bölümündeki tüm dersler