Python'da yield Özelliğinin Kullanımı
Python yield
Özelliği
Python’da yield
anahtar kelimesi, fonksiyonların değer üretip duraklatılmasını sağlayan ve bu sayede bir iterator yaratan bir yapıdır. yield
anahtar kelimesi, fonksiyonları birer jeneratöre dönüştürerek her çağrıldığında bir değer döndüren ve durduğu yerden devam edebilen fonksiyonlar oluşturur.
yield
ile Fonksiyonlar
Normal bir fonksiyonda return
ifadesi kullanıldığında, fonksiyon bir değer döndürür ve biter. Ancak yield
kullanıldığında, fonksiyon bir değer döndürür ve kaldığı yerden çalışmaya devam eder. Jeneratörler, belleği daha verimli kullanmak için tercih edilir çünkü tüm sonuçları aynı anda bellekte tutmak yerine ihtiyaca göre üretirler.
Örnek:
Çıktı:
Bu örnekte, yield
her bir adımda bir sayı üretir ve duraklatır.
yield
ve Jeneratörlerin Avantajları
Jeneratörler, büyük veri setleriyle çalışırken veya hesaplamaları adım adım yapmak istendiğinde avantaj sağlar. Büyük bir listeyi veya veriyi bellekte tutmak yerine, yield
kullanarak sadece gerekli olan veriler üretilebilir.
Bellek Verimliliği:
Bu sayede milyonlarca öğe aynı anda bellekte tutulmaz, sadece gerekli olan öğe üretilir.
Jeneratörlerin Durumu Korumak
Jeneratörler, kaldıkları yeri hatırlama yeteneğine sahiptir. Yani yield
kullanılarak duraklatılan fonksiyon, bir sonraki çağrıda kaldığı yerden devam eder.
Örnek:
Çıktı:
Burada fonksiyon her yield
ifadesinde duraklar ve sonraki next()
çağrısı ile kaldığı yerden devam eder.
yield
ve return
Farkı
return
, bir fonksiyonun çalışmasını sonlandırırken yield
, fonksiyonu duraklatır ve daha sonra kaldığı yerden devam etmesini sağlar. Aynı fonksiyon içinde hem yield
hem return
kullanılabilir, ancak return
, jeneratörün sonunu belirtir.
Örnek:
Çıktı:
return
ifadesi çalıştığında jeneratör sona erer ve sonraki yield
çalışmaz.
Sonsuz Jeneratörler
yield
, sonsuz döngülerde de kullanılabilir. Bu şekilde bir jeneratör, talep üzerine sınırsız sayıda değer üretebilir.
Örnek:
Bu örnekte, while True
döngüsü ile jeneratör sonsuz bir şekilde sayı üretmeye devam eder.
yield
from
Python 3.3 ile birlikte gelen yield from
ifadesi, başka bir jeneratörden değerleri doğrudan delege etmek için kullanılır. Bu, özellikle jeneratörler arasında değerleri zincirlemek için kullanışlıdır.
Örnek:
Çıktı:
Bu örnekte, yield from
, alt_jeneratör
fonksiyonundaki değerleri doğrudan ana jeneratöre delege eder.
Sonuç
yield
anahtar kelimesi, Python’da jeneratörler oluşturmanın en temel yoludur. Jeneratörler, belleği verimli kullanarak büyük veri setleriyle çalışmak veya sonsuz veri akışlarını işlemek için oldukça faydalıdır. Ayrıca yield
ile fonksiyonların duraklatılıp kaldığı yerden devam etmesi sağlanabilir, bu da onları güçlü bir araç haline getirir.