Python Jeneratörleri: Bellek Açısından Verimli Yineleyiciler
Çok büyük veri kümelerini minimum bellek alanıyla işlemek için Python oluşturucularını ve verim ifadelerini nasıl kullanacağınızı öğrenin. Ana oluşturucu ifadeleri.
Genel Bakış
Binlerce veya milyonlarca kaydı işleyen kod yazarken bellek yönetimi kritik hale gelir. Veri kümesinin tamamını bir listeye yüklerseniz, RAM'inizin bitmesi ve sunucunun çökmesi riskiyle karşı karşıya kalırsınız. Python Jeneratörleri, isteğe bağlı olarak veri akışı sağlayan bir mekanizma sağlayarak bu sorunu çözer. Veri setinin tamamını bir kerede hesaplamak ve hafızada saklamak yerine, bir oluşturucu her seferinde bir öğe üretir, onu arayana verir ve bir sonraki öğe istenene kadar yürütülmesini duraklatır.
Jeneratörler normal işlevler gibi tanımlanır, ancak 'dönüş' yerine 'verim' anahtar kelimesini kullanırlar. Bir üreteç işlevi çağrıldığında, işlevin dahili ifadelerini yürütmeden bir üreteç yineleyici nesnesi döndürür. Arayan kişi jeneratörde "next()"i çağırdığında (veya bunun üzerinden döngü yaptığında), işlev "verim"e ulaşana kadar yürütülür. Bu noktada oluşturucu değeri verir, yerel değişkenlerini kaydeder ve yürütmeyi askıya alır. Tekrar arandığında kaldığı yerden devam eder.
Ayrıca, liste kavramalarıyla aynı söz dizimini kullanan ancak parantez '[...]' yerine parantez '(...)' içine alınmış oluşturucu ifadeleri kullanarak oluşturucular oluşturabilirsiniz. Bu, liste kavramalarını bellek açısından verimli yineleyicilerle değiştirmeyi inanılmaz derecede kolaylaştırır. Büyük bellek tahsislerinden kaçınan jeneratörler, büyük günlüklerle çalışmak, veritabanlarından veri akışı yapmak veya sonsuz uzunluktaki matematiksel diziler üzerinde hesaplamalar yapmak için vazgeçilmezdir.
Kod ve Yürütme Çıkışı
Fibonacci sayılarını ve hafıza açısından verimli bir oluşturucu ifadesini veren özel bir oluşturucu.
def fibonacci_generator(limit):
"""Yields Fibonacci numbers up to the limit."""
a, b = 0, 1
count = 0
while count < limit:
yield a
a, b = b, a + b
count += 1
# Instantiate generator
fib = fibonacci_generator(5)
print("--- Using Generator Function ---")
for num in fib:
print(num)
# Generator expression (squares of numbers)
squares_gen = (x**2 for x in range(1, 1000000))
print("\n--- Using Generator Expression ---")
print(next(squares_gen))
print(next(squares_gen))
print(next(squares_gen))--- Using Generator Function ---
0
1
1
2
3
--- Using Generator Expression ---
1
4
9Adım Adım Uygulama
- RAM için fazla büyük olan dosyaları satır satır okuma
- Sonsuz sayıda kimlik veya matematik rakamı dizisi oluşturma
- API çağrılarını işlemek için veritabanı kayıtlarını toplu olarak yayınlama
Sıkça Sorulan Sorular
Verim ve getiri arasındaki fark nedir?
return işlevi tamamen sonlandırır. verim bir değer verir ve işlevi duraklatır, istendiğinde devam edebilmesi için durumunu kaydeder.
Bir jeneratörde öğe kalmadığında ne olur?
Bir StopIteration istisnası oluşturur. Bir 'for' döngüsü altında Python, döngüyü temiz bir şekilde sonlandırmak için bu istisnayı otomatik olarak keser.
İlgili Konular
Veriler üzerinde yineleme yapmak için Python döngülerini nasıl kullanacağınızı öğrenin. Etkileşimli örneklerle for döngüleri, while döngüleri, kesme, devam etme ve döngü en iyi uygulamaları konusunda uzmanlaşın.
Python KavramalarıDaha temiz, daha hızlı Python yazın. Pratik örnekler, filtreleme koşulları ve iç içe geçmiş döngülerle ana liste, sözlük ve küme kavramaları.
Python ItertoolsPython'un itertools modülünü öğrenin. Sonsuz yineleyiciler, kombinasyonlar, permütasyonlar, gruplama ve bellek açısından verimli veri işleme konusunda uzmanlaşın.
Önerilen Python Kaynakları
İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.
Python'da Jeneratörler Nasıl Kullanılır
Python'da jeneratörlerin nasıl yazılacağını öğrenin. Getiri anahtar kelimesini, tembel değerlendirmeyi, bellek optimizasyonunu anlayın ve oluşturucuları liste yapılarıyla karşılaştırın.
Python String Yöntemleri Hile Sayfası
Python dize manipülasyonu için eksiksiz bir başvuru kılavuzu. Dize özelliklerini biçimlendirme, arama, bölme, değiştirme ve denetleme konusunda uzmanlaşın.
Python vs JavaScript: Hangi Programlama Dili En İyisidir?
Python ve JavaScript arasında kapsamlı bir karşılaştırma. Sözdizimi farklılıklarını, performansı, kullanım örneklerini (arka uç ve ön uç) ve kodlama örneklerini keşfedin.