Python dilini kullananlar için çok büyük kolaylıklar sağlayan "generators" komutlarının ne işe yaradığını ve nasıl kullanıldığını anlatıcağız

Yazılımcılar kodlama sırasında sıralı verilerden sık sık yararlanıyorlar. Bu sayede veriler kolay bir şekilde kullanılabiliyor ve zaman zaman da veritabanlarında tutuluyor. Ancak bu durum her zaman için faydalı olmuyor. Sıralı verilerde bulunan öğelerin adetleri ön görülemez. Zaman zaman makul sayılarda öğeler varken kimi zamansa çok sayıda öğe depolanabiliyor ve bu da yapılan uygulamanın performansında etkili olur. Şimdi, sıralı verilerden ve listelerden oluşan bir kod örneğini inceleyelim.

def scale_to_log10(till_number):  
log10_number_seq = []  
for num in range(1, till_number):  
log10_number_seq.append(math.log10(num))  
return log10_number_seq

Bu kod, görüldüğü üzere fazlasıyla kısa gibi görünebilir. Ancak kod satırları arasında bulunan "range" komutu, sürekli bir döngü oluşturur.  Döngü, sonsuz bir bellek alanında sorun çıkarmadan çalışabilir ancak döngünün boyutu artıkça  işler tamamen karışacaktır. Örnek vermek gerekirse bu döngü 4 GB'lik bir boyuta sahip olabilir. Ancak ayrılan bellek 2 GB olursa sistem çökecek ve işlem yarıda kalacaktır. İşte tam da bu noktada generators komutlarından faydalanılıyor. Geliştiriciler, generators komutlarını kullanarak sadece ihtiyaç olduğu zaman bu döngünün içerisine giriyorlar ve bu da RAM ve işlemci kullanımını doğrudan etkiliyor. Bu yöntem sayesinde uygulamalar, daha rahat bir şekilde çalışıyorlar ve herhangi bir çökme durumu yaşanmıyor.

Şimdi de geliştiricilerin, bu komutları nasıl kullandıklarına bakalım;

def scale_to_log10(till_number):  
for num in xrange(till_number):  
yield math.log10(num)

Bu kod parçacığı aslımda bir önceki le aynı işlevi görüyor. Sadece bu kodun öğeleri işletme biçimi biraz daha değişik. İkinci koddaki ufak farklar, kod kesitinin sadece o an işlenen öğeyi belleğe aktarılmasını sağlıyor. Bu sayede gereksiz bellek kullanımı engellenerek daha stabil işlemlere olanak sağlıyoruz.