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..

1
Yorumlar

avatar
1 Comment threads
0 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
B3mB4m Recent comment authors
En Yeniler Eskiler Beğenilenler
B3mB4m
Ziyaretçi
B3mB4m

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