Resim

Python Generators (Üreteçler)

Python Generators (Üreteçler): Tembel İterasyon ve Bellek Verimliliği

Belleği Akıllıca Kullanma

Merhaba! Şimdiye kadar öğrendiğimiz gibi, Listeler veya Tuple'lar gibi standart koleksiyonlar, oluşturuldukları anda tüm veriyi bellekte tutar. Bu, yüzlerce veya binlerce öğe için sorun değilken, milyonlarca veya milyarlarca öğe içeren veri kümelerinde (büyük dosyalar, sonsuz veri akışları) ciddi bellek sorunlarına yol açabilir.

Generators (Üreteçler), bu sorunu çözmek için tasarlanmıştır.

Generator: Bir defada tüm veriyi belleğe yüklemek yerine, yalnızca istendiğinde ve birer birer değer üreten, özel bir tür yinelenebilir (iterable) nesnedir.

Generators, geleneksel fonksiyonlar gibi tanımlanır, ancak return yerine yield anahtar kelimesini kullanır.


1. yield Anahtar Kelimesinin Gücü

Generator fonksiyonlarını sıradan fonksiyonlardan ayıran tek şey yield anahtar kelimesidir.

Çalışma Prensibi:

  1. Bir generator fonksiyonu çağrıldığında, içindeki kod hemen çalışmaz. Bunun yerine bir generator nesnesi döndürülür.

  2. for döngüsü gibi bir iterasyon başladığında, kod yield satırına kadar çalışır.

  3. yield o anki değeri döndürür ve fonksiyonun durumunu (state) askıya alır. Tüm yerel değişkenler ve kodun konumu kaydedilir.

  4. Bir sonraki değer istendiğinde (döngü bir sonraki adıma geçtiğinde), fonksiyon kaldığı yerden devam eder ve bir sonraki yield'e ulaşana kadar çalışır.

  5. Fonksiyon bittiğinde veya return ile karşılaşınca iterasyon sonlanır.

  • Örnek: Basit Bir Generator

    def sayi_uretec():
        print("İlk değer üretiliyor...")
        yield 1
        print("İkinci değer üretiliyor...")
        yield 2
        print("Üçüncü değer üretiliyor...")
        yield 3
    # 1. Generator nesnesi oluşturulur (Kod henüz çalışmaz)
    uretec = sayi_uretec()
    # 2. for döngüsü başladığında kod çalışmaya başlar 
    (Tembel İterasyon)
    for sayi in uretec:
        print(f"Çekilen Sayı: {sayi}")
    
    # Çıktı, adım adım ve sadece istendiğinde oluşur:
    # İlk değer üretiliyor...
    # Çekilen Sayı: 1
    # İkinci değer üretiliyor...
    # Çekilen Sayı: 2
    # Üçüncü değer üretiliyor...
    # Çekilen Sayı: 3
    

Kendiniz Deneyebilirsiniz:


2. Generator İfadeleri (Generator Expressions)

List Comprehension'a (Liste Oluşturma İfadesi) benzer şekilde, tek satırda küçük generator'lar oluşturabiliriz. Bu, köşeli parantez ([]) yerine parantez (()) kullanılarak yapılır.

  • Karşılaştırma:

Liste Oluşturma (List Comprehension)Generator İfadesi (Generator Expression)
[x * 2 for x in range(1000000)](x * 2 for x in range(1000000))
Hemen Hesaplar ve tüm sonucu belleğe yükler.Tembeldir, değeri sadece istendiğinde üretir. Bellek dostudur.
# 1'den 10'a kadar kareleri üreten generator ifadesi
kare_ureteci = (x**2 for x in range(1, 11))
# İstenildiğinde değer çekme
print(next(kare_ureteci)) # Çıktı: 1 (İlk değeri üretir)
print(next(kare_ureteci)) # Çıktı: 4 (İkinci değeri üretir)
# Kalanını bir for döngüsüyle de çekebiliriz
for kare in kare_ureteci:
    print(kare)

Kendiniz Deneyebilirsiniz:


3. Kullanım Alanları ve Faydaları

Generators, özellikle aşağıdaki senaryolarda hayat kurtarıcıdır:

SenaryoFayda
Büyük DosyalarBir dosyayı satır satır okurken (örneğin log dosyaları), dosyanın tamamını belleğe yüklememek için kullanılır.
Sonsuz VeriFibonacci serisi gibi matematiksel olarak sonsuz olabilecek veri akışlarını yönetmek için kullanılır (bellekte taşma yapmaz).
PerformansVerinin sadece küçük bir kısmına ihtiyaç duyuluyorsa, tüm veri setini üretme ve yükleme süresinden tasarruf sağlar.

Generator Erdemdir

Python Generators, özellikle profesyonel ve büyük ölçekli uygulamalarda kaynakları verimli kullanmanın anahtarıdır. yield anahtar kelimesi, bir fonksiyonu yalnızca bir hesaplayıcıdan, bir veri akışı yöneticiye dönüştürür. Bellek sınırlamalarıyla uğraşmadan sonsuz veri veya devasa dosyalar üzerinde çalışmak istiyorsanız, Generator'lar en iyi dostunuzdur.

🔥 Python Kariyerinizi Hemen Başlatın!

Hemen kursumuza kaydolun ve bu güçlü araçları kullanarak profesyonel Python geliştiricisi olma yolunda ilk adımı atın. Kursumuzdaki uygulamalı modüller, sizi sadece bir yazılımcı adayı değil, hazır bir profesyonel haline getirecek. Python Eğitimini Udemy platformunda bulabilirsiniz.

[ Python Eğitimi Sıfırdan İleri Seviye ]

Tıklayın ve Python Eğitimine Hemen Kaydolun!

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?