Python’da üreteçler (generators) ve yield komutu

Bu yazımda Python’da üreteçleri ve yield komutunu birkaç küçük örnek üzerinden anlatmaya çalışacağım. Öncelikle yineleme (iteration) kavramından bahsetmek istiyorum. Örneğin bir list yarattığımızda, elemanlarına teker teker ulaşmak yerine, bu işlemi bir döngü vasıtasıyla yaparsak yineleme yapmış oluruz. Kısa bir örnek;

Burada listem isimli bir list yarattık ve elemanlarını bir döngü vasıtasıyla ekrana yazdık. Kodun çıktısı şu şekilde olacaktır;

Yinelemeli araçlar gayet kullanışlıdır. Bu basit örnek sayesinde üreteçleri daha iyi anlayabileceğiz.

 

Artık üreteçlere (generators) geçebiliriz. Üreteçler birer yineleyicidirler (iterator). Farkları ise değerleri hafızada kayıtlı tutmak yerine işlemin gerçekleştiği anda üretmeleri. Bir örnekle pekiştirelim;

Bu örnekte ilk olarak içinde 3 tane “ucbirim.com” elemanı olan bir liste yarattık ve onu önce liste şeklinde sonra da yinelemeli bir şekilde ekrana yazdırdık. Peşinden aynı kod parçasını “[ ]” işaretleri yerine “( )” işaretlerini kullanarak tekrar yazdık ve bir üreteç oluşturmuş olduk. Bu kodun çıktısı aşağıdaki gibidir;

Dikkat edilirse, üreteç direkt olarak print komutuyla ekrana yazılmak istendiğinde, list’de olduğu gibi bir sonuç alamadık çünkü daha önce söylediğim gibi üreteçler değerleri hafızada tutmuyor. Devamında dikkat edilirse istediğimiz değerleri yinelemeli olarak üretebildik.

 

Son olarak yield komutundan bahsetmek istiyorum. Yield komutu return komutuna benzer fakat farklı olarak bir değer yerine üreteç döndürür. Bir örnek kurgulayalım. Bir üreteç döndüren bir fonksiyon ile e sayısının 0’dan 9’a üstlerini ekrana basalım;

Yukarıdaki örnekte bir sayının üstünü alabilmek ve e sayısının değerini kullanabilmek için önce math kütüphanesini import ettim. Fonksiyonun içinde 0’dan 9’a kadar olan sayılarla oluşmuş bir liste oluşturdum. Peşinden listem’deki elemanlarla e sayısının üstünü üreteç olarak döndürdüm. Unutmayalım, eğer for döngüsünden önce print uretec yazsaydım yine hata alacaktım. Programın çıktısı aşağıdaki gibidir.

Bir sonraki yazımda, uretec kullanarak basit bir şifre oluşturucu nasıl yazabiliriz konusunu anlatmaya çalışacağım. Uçbirim’den ayrılmayın..

guest
1 Yorum
En Yeniler
Eskiler Beğenilenler
Inline Feedbacks
View all comments
B3mB4m
B3mB4m
8 yıl önce

Python’un belli bir alanda en önemli gücüdür, konunun ciddiyetini anlayana tabi 🙂