Python'da Jeneratörler Nasıl Kullanılır (verim bildirimi)
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.
Genel Bakış
Büyük veri kümeleri, günlük dosyaları veya sonsuz veri akışlarıyla çalışırken, tüm öğeleri aynı anda belleğe yüklemek (büyük bir listeyi döndürmek gibi), sistem RAM'ini kolayca tüketebilir ve uygulamanızı çökertebilir. Python harika, bellek açısından verimli bir çözüm sunuyor: Jeneratörler.
Jeneratör, tembel bir yineleyici döndüren özel bir fonksiyon türüdür. Tüm değerleri bir kerede hesaplayıp döndürmek yerine, bir oluşturucu istendiği gibi değerleri tek tek üretir. Temel fark "verim" ifadesidir. Bir üreteç işlevi "verim"i çağırdığında, yürütme durumunu (değişkenler, talimat işaretçisi) duraklatır ve elde edilen değeri döndürür. Bir sonraki değer istendiğinde fonksiyon tam olarak kaldığı yerden devam eder.
Jeneratör hesaplamaları tembel bir şekilde yürütüldüğünden, veri kümesi boyutundan bağımsız olarak neredeyse sıfır bellek kullanırlar. Python ayrıca, tam işlevleri bildirmeden hafif satır içi oluşturucular oluşturmak için parantez içindeki "(verideki x için x)" sözdizimini kullanan oluşturucu ifadelerini de destekler.
Kod ve Yürütme Çıkışı
Bu komut dosyası, verim ifadesi ve oluşturucu ifadeleriyle oluşturucu işlevlerini kullanarak dizi oluşturmayı gösterir.
# 1. Generator function using yield
def count_up_to(limit):
count = 1
while count <= limit:
yield count
count += 1
# Instantiating the generator
counter = count_up_to(3)
print("Memory safe generator instantiated.")
# Fetching values manually
print("Next 1:", next(counter))
print("Next 2:", next(counter))
print("Next 3:", next(counter))
# 2. Iterating with a for loop (automatically handles StopIteration)
print("\n--- Looping over generator ---")
for num in count_up_to(4):
print("Num:", num)
# 3. Generator expression (Shorthand syntax)
squares_gen = (x**2 for x in range(1, 4))
print("\nGenerator expression elements:")
print(list(squares_gen)) # Cast to list to print all elementsMemory safe generator instantiated.
Next 1: 1
Next 2: 2
Next 3: 3
--- Looping over generator ---
Num: 1
Num: 2
Num: 3
Num: 4
Generator expression elements:
[1, 4, 9]Adım Adım Uygulama
- Standart def anahtar sözcüğünü kullanarak bir işlev tanımlayın.
- Verim değerlerini yineleyici akışına geri döndürmek yerine getiri anahtar sözcüğünü kullanın.
- Değerleri çıkarmak için for döngüsü kullanarak jeneratör üzerinde yineleme yapın veya yerleşik next(gen) fonksiyonunu çağırın.
- Basit, satır içi tembel dönüşümler için oluşturucu ifadeleri (parantez kullanarak) kullanın.
Sıkça Sorulan Sorular
Jeneratörlerin listelere göre temel avantajı nedir?
Bellek verimliliği. Listeler tüm öğeleri aynı anda RAM'de depolarken, oluşturucular öğeleri isteğe bağlı olarak tek tek üreterek sisteminizin toplam belleğinden daha büyük veri kümelerini işlemenize olanak tanır.
Bir jeneratörde öğe kalmadığında ne olur?
Python bir StopIteration istisnası oluşturur. Bir for döngüsü, döngüden sorunsuz bir şekilde çıkmak için bu istisnayı otomatik olarak yakalar, ancak tükenmiş bir oluşturucuda next() öğesinin manuel olarak çağrılması, istisnayı atacaktır.
İlgili Konular
Python'da liste kavramalarını nasıl kullanacağınızı öğrenin. Kısa döngüler yazın, koşullu filtreler uygulayın ve temiz görsel sözdizimiyle matrisler oluşturun.
Python'da İçerik Yöneticileri Nasıl KullanılırBağlam yöneticilerinin Python'da nasıl çalıştığını öğrenin. With ifadesinde ustalaşın, sistem kaynaklarını yönetin ve özel içerik yöneticileri yazın.
Önerilen Python Kaynakları
İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.
Python Jeneratörleri
Ç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.
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.