Bu alternatif işlev türünün bellek alanını azaltmanıza nasıl yardımcı olabileceğini öğrenin.
Bir günlük dosyasından satırlar okuyorsanız veya uzun bir öğe listesini işliyorsanız, seçeneklerden biri tüm veriyi belleğe yüklemektir. Ancak bu yaklaşım çok fazla bellek kullanabilir ve performansı engelleyebilir. Jeneratörler değerli bir çözüm sunar.
Jeneratörler, tüm verileri aynı anda belleğe yükleme ihtiyacını ortadan kaldırır. Büyük veri kümelerini, sonsuz dizileri veya bellek verimliliğinin çok önemli olduğu herhangi bir senaryoyu işlerken kullanışlıdırlar.
Jeneratörler Nelerdir?
Oluşturucu, bir dizi değer üzerinde yineleme yapmanızı sağlayan özel bir işlevdir. Tam bir veri kümesi döndürmek yerine, her seferinde tek bir değer üretir veya üretirler. Bu onları büyük veya sınırsız veri dizileriyle çalışırken verimli kılar.
A düzenli Python işlevi genellikle bir değer hesaplar ve onu döndürür. Ancak jeneratörler farklı çalışıyor. Her getiri arasında yürütmeyi duraklatıp devam ettirerek zaman içinde birden fazla değer elde edebilirler.
Normal işlevler ile üreteçler arasındaki temel ayrım, geri dönmek bir sonuç üretmek için anahtar kelimeyi kullanır, jeneratörler teslim olmak.
Jeneratör Nasıl Oluşturulur
Bir jeneratör oluşturmak için geri dönmek beyanı kullanın teslim olmak fonksiyon içindeki ifade. teslim olmak anahtar sözcüğü yalnızca işleve bir değer döndürme talimatını vermekle kalmaz, aynı zamanda durumunu kaydetmesine de olanak tanıyarak gelecekte yeniden başlatılmasına olanak tanır.
İşte basit bir jeneratör fonksiyonunun bir örneği:
defnumeric_generator():
yield1
yield2
yield3
gen = numeric_generator()
Bu üreteç işlevi 1'den 3'e kadar sayısal değerler verir.
teslim olmak deyimi, bir sonraki değeri talep ettiğinizde devam etmek için çağrılar arasında yerel değişkenleri koruyarak işlevin durumunu kaydeder.
Bir değişkene jeneratör işlevi atamak, üzerinde çalışabileceğiniz bir jeneratör nesnesi oluşturur.
Jeneratörlerle Çalışmak
Jeneratörlerin birden fazla uygulaması vardır. Onları kullanabilirsin for döngülerinde veya liste anlayışları dahilindeve diğer yinelenebilir yapılar. Jeneratörler aynı zamanda işlevler için argüman görevi görebilir.
Bir oluşturucu oluşturduğunuzda for döngüsünü kullanarak bunun üzerinde yineleme yapabilirsiniz:
for i in numeric_generator():
print(i)
Ayrıca şunları da kullanabilirsiniz: Sonraki Değerleri tek tek alma işlevi:
print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3
Bu size jeneratör nesnesi üzerinde daha fazla kontrol sağlar.
Jeneratörler durumlarını takip edebilir. Bir fonksiyondaki her verim ifadesi bir kontrol noktası gibi davranır. aradığınızda Sonraki() Jeneratör nesnesindeki fonksiyon, yürütme önceki verim noktasından başlar.
Ayrıca değerleri kullanarak bir jeneratöre de aktarabilirsiniz. Göndermek():
defgenerator_with_send():
# First yield: Receive a value
x = yield
print(f"Received: {x}")# Second yield: Receive another value
y = yield
print(f"Received: {y}")# Third yield: Yield the sum
yield x + ygen = generator_with_send()
# Start generator and reach first yield
next(gen)# Send 10 into generator, received at first yield
result = gen.send(10)# Send 5 into generator, received at second yield
result = gen.send(5)
# Print result of third yield
print(result)
Göndermek() yöntemi, jeneratörden değerleri almanıza ve değerleri jeneratör işlevine geri göndermenize, etkin bir şekilde duraklatmanıza ve yürütülmesini kontrol etmenize olanak sağlar. Göndermek() Bu yöntem, eşyordamlar yazarken veya jeneratörleri ileri düzey amaçlar için kullanırken kullanışlıdır.
Oluşturucu İfadelerini Kullanma
Jeneratör ifadeleri, basit ve anonim bir jeneratör oluşturmanın kısa bir yolunu sağlar. Liste anlamalarına benzerler ancak parantez yerine parantez kullanırlar.
İşte bir örnek:
gen = (i**2for i in range(10))
for x in gen:
print(x)
Kod, 0'dan 9'a kadar olan sayıların karelerini veren bir oluşturucu ifade oluşturur. Jeneratör ifadeleri tembel bir şekilde bir değer dizisi oluşturmak için idealdir.
Veri İşleme için Jeneratörlerin Kullanımı
Python oluşturucuları, her şeyi bellekte tutmadan veri akışlarını tanımlamanın ve yineleyiciler oluşturmanın kullanışlı bir yoludur. Jeneratörleri kullanmayı öğrenerek, zorlu veri işleme görevlerinin üstesinden gelmeyi kolaylaştırarak programlamanızı önemli ölçüde geliştirebilirsiniz.
Bir dahaki sefere büyük veri kümeleriyle çalıştığınızda, oluşturucuları aklınızda bulundurun ve emek yoğun görevleri onlara devredin, böylece kodunuzun duyarlı ve verimli kalmasını sağlayın.