Yield fonksiyonu döngüyü durdururmu?

def cycle(iterable):
    # cycle('ABCD') --> A B C D A B C D A B C D ...
    saved = []

    for element in iterable:
        
        yield element
        print(element, "element")

        saved.append(element)
    while saved:
        for element in saved:
              yield element



b = cycle("ABC")

print(next(b))

print(next(b))

"""
çıktı:
A
A element
B
[Finished in 0.2s]
"""

bu kodda döngüyü durdurmuş gibi yoksa başka bir şey mi?

Siz kodunuzda b generatörünü sadece iki defa iterate ediyorsunuz, sonra da program bitiyor. Çünkü başka kod yazmamışsınız. for döngüsü iterable tükenene kadar işlemi devam ettirir:

b=cycle("ABC")

for i in b:
	print(i)

Tabii bu kodda iterable hiç bitmiyor :smiley:

benim sorduğum yield metodu döngüyü duraksatıyor mu ?
aslında ben yanlış sormuş olabilirim :smile:
koda bakarsak ilk print(next(b)) metodu ile yazdırdık ama fark ederseniz
yukardaki fonksiyonumuzda yield element den sonra print(element, "element") fonksiyonu var ama fonksiyon o kodu işletmemiş (ilk print(next(b)) de ) bende diyorumki Generator ler bellekte yer kaplamadan işlerini yapmalarının sebebi bumudur yani döngüyü durdurmalarımı ? (bir sonraki değeri döndürmeden durmaları mı ?)

next fonksiyonu kendisine verilen generatörü herhangi bir yield'e denk gelene kadar çalıştırır, yield ile karşılaştırdığında değer döndürür. Ve generatör de durmuş olur.

üzgünüm anlayamadım biraz daha basitçe anlatabilirmisiniz

next(b) dediğimizde b generatörü en son kaldığı yerden çalışmaya devam (eğer bu ilk yinelememiz ise en baştan başlamış olur). b generatörü çalışırken bir yield'e denk gelindiğinde b'nin çalışması durur, next fonksiyonu da yield'den sonra yazılan değeri döndürür. Eğer bir değer yazılmadı ise aynı returndaki gibi None döndürür.

Çok saolun anladım aslında mantıken benim dediğimle aynı değilmi ?

Yani sayılır.

Ama yer kaplıyorlar, generatörün kullandığı değişkenler bir yerde saklanmalı. Sadece gerektiğinde yeni bir değişken oluşturmak yerine var olan değişkeni değiştiriyorlar-kullanıyorlar.

çok saolun anladım teşekkür ederim