Python’da İteratörler ve Generatörler (Iterators and Generators)

Bu makalemizde Python’da İteratörler ve Generatörler konusunu anlatıyor olacağım. İteratörler Python’da iteratorler, veri koleksiyonlarında dolaşmak ve elemanları tek tek işlemek için kullanılan bir kavramdır. Bir iterator, bir nesne üzerinde sıralı bir şekilde ilerleyebilme yeteneğine sahip olan ve next() fonksiyonunu kullanarak bir sonraki elemana erişmemizi sağlayan bir objedir. Python’da iteratorlerle çalışmak için iter() ve next() fonksiyonlarını kullanırız. iter() fonksiyonu, bir veri koleksiyonunu veya bir nesneyi iterator olarak dönüştürmemizi sağlar. next() fonksiyonu ise bir iterator üzerinde ilerleyerek bir sonraki elemana erişir ve eğer son elemana ulaşılmışsa bir StopIteration hatası fırlatır. Bir iteratorün önemli avantajlarından biri, bellek verimliliğidir. İteratörler, veri koleksiyonunu tamamen belleğe yüklemek yerine elemanları tek tek işlerler. Bu, büyük veri koleksiyonlarıyla çalışırken bellek kullanımını minimize etmemize yardımcı olur. İteratörlerin bir diğer önemi, for döngülerinde kullanılmalarıdır. for döngüsü, bir iterator üzerinde otomatik olarak next() fonksiyonunu çağırarak elemanlara erişir ve döngüyü sonlandırır. Böylece, iteratorler sayesinde döngülerimizi daha verimli bir şekilde yönetebiliriz. listem=[1,2,3,4,5] itereEtme=iter(listem) […]

Python’da İteratörler ve Generatörler (Iterators and Generators)

Bu makalemizde Python’da İteratörler ve Generatörler konusunu anlatıyor olacağım.

İteratörler

Python’da iteratorler, veri koleksiyonlarında dolaşmak ve elemanları tek tek işlemek için kullanılan bir kavramdır. Bir iterator, bir nesne üzerinde sıralı bir şekilde ilerleyebilme yeteneğine sahip olan ve next() fonksiyonunu kullanarak bir sonraki elemana erişmemizi sağlayan bir objedir.

Python’da iteratorlerle çalışmak için iter() ve next() fonksiyonlarını kullanırız. iter() fonksiyonu, bir veri koleksiyonunu veya bir nesneyi iterator olarak dönüştürmemizi sağlar. next() fonksiyonu ise bir iterator üzerinde ilerleyerek bir sonraki elemana erişir ve eğer son elemana ulaşılmışsa bir StopIteration hatası fırlatır.

Bir iteratorün önemli avantajlarından biri, bellek verimliliğidir. İteratörler, veri koleksiyonunu tamamen belleğe yüklemek yerine elemanları tek tek işlerler. Bu, büyük veri koleksiyonlarıyla çalışırken bellek kullanımını minimize etmemize yardımcı olur.

İteratörlerin bir diğer önemi, for döngülerinde kullanılmalarıdır. for döngüsü, bir iterator üzerinde otomatik olarak next() fonksiyonunu çağırarak elemanlara erişir ve döngüyü sonlandırır. Böylece, iteratorler sayesinde döngülerimizi daha verimli bir şekilde yönetebiliriz.

listem=[1,2,3,4,5]
itereEtme=iter(listem)

print(next(itereEtme))  #1
print(next(itereEtme))  #2
print(next(itereEtme))  #3
print(next(itereEtme))  #4
print(next(itereEtme))  #5

 

Kodumuzun ekran çıktısı aşağıdaki gibidir:

Yukarıdaki örnekte, listem adlı bir liste oluşturduk ve iter() fonksiyonunu kullanarak iterEtme adlı bir iterator oluşturduk. Ardından, next() fonksiyonunu kullanarak her çağrıda bir sonraki elemana eriştik.

Iteratorler, for döngüsüyle birlikte de kullanılabilir:

listem=[1,2,3,4,5]
for iterEtme in listem:
    print(iterEtme)

 

Kodumuzun ekran çıktısı aşağıdaki gibidir:

Bu for döngüsü, listenin her elemanını tek tek dolaşır ve ekrana yazdırır. Arkada, döngü iter() fonksiyonunu kullanarak listenin üzerinde bir iterator oluşturur ve next() fonksiyonunu çağırarak her elemana erişir.

 

Özetlemek gerekirse, iteratorler Python’da veri koleksiyonlarıyla etkileşim kurmak için kullanılan güçlü bir araçtır. Iteratorler, bellek verimliliği sağlar ve for döngüleriyle birlikte kullanıldığında kodun daha okunaklı ve sade olmasını sağlar.

 

Generatörler


Generatörler Python’da veri koleksiyonlarını yaratmak için kullanılan işlevlerdir. Generatörler, bir değer üretirken bellekte tam bir koleksiyon oluşturmak yerine, değerleri adım adım hesaplar ve çağırıldığında bu değerleri verir. Böylece, bellek kullanımını minimize ederek verimli bir şekilde çalışmamızı sağlarlar.

Generatörler, fonksiyonlarla benzer bir sözdizimine sahiptir. Ancak, değerleri return ifadesi yerine yield ifadesiyle döndürürler. yield ifadesi, bir değeri üretir ve generatörün durumunu geçici olarak dondurur. Daha sonra generatör çağrıldığında, durum kaldığı yerden devam eder ve bir sonraki değeri üretir.

Şimdi bu konuyu fibonacci işlemiyle anlatalım:

 

def fibo():
    x,y=0,1
    while True:
        yield x
        x,y=y,x+y

fibonacciSayi=fibo()

print(next(fibonacciSayi)) #0
print(next(fibonacciSayi)) #1
print(next(fibonacciSayi)) #1
print(next(fibonacciSayi)) #2
print(next(fibonacciSayi)) #3
print(next(fibonacciSayi)) #5

 

Kodumuzun ekran çıktısı aşağıdaki gibidir:

Yukarıdaki örnekte, fibo() adlı bir generatör işlevi tanımladık. Bu işlev, sonsuz bir Fibonacci dizisi üretir. Her yield ifadesi, bir Fibonacci sayısını üretir ve generatörün durumunu geçici olarak dondurur. Ardından, next() fonksiyonunu kullanarak generatörden bir sonraki değeri alırız.

Generatörleri for döngüsüyle de kullanabiliriz:

def fibo():
    x,y=0,1
    while True:
        yield x
        x,y=y,x+y

fiboSayilarim=fibo()

for i in range(5):
    print(next(fiboSayilarim))

 

Kodumuzun ekran çıktısı aşağıdaki gibidir:

Bu örnekte, for döngüsü generatörün her bir değerini alır ve ekrana yazdırır. Döngü, belirli bir sayıda tekrar eder ve generatörün sonsuz bir şekilde çalışmasını engeller.

Generatörlerin en önemli avantajlarından biri, bellek verimliliğidir. Generatörler, sadece bir sonraki değeri hesaplayıp döndürdüğü için bellekte sadece bir değeri tutarlar. Bu özellik, büyük veri koleksiyonlarıyla çalışırken hafızadan tasarruf etmemizi sağlar.

Generatörler, veri koleksiyonlarının dinamik olarak oluşturulmasını sağlar ve hesaplama sürecini daha etkin hale getirir. Özellikle büyük veri kümeleri veya sonsuz veri akışlarıyla çalışırken generatörler kullanmak oldukça faydalı olabilir.

Benzer Yazılar

Gui Dersleri #8 | LabelFrame kullanımı ve TopLevel kullanımı

Python 7 ay önce

Arkadaşlar merhaba bu makalemizde sizlere python’da LabelFrame kullanımı ve TopLevel kullanımının nasıl yappacağımızı anlatacağım.  Ayrıca size bu konu hakkında çektiğim video’yu bırakıyorum isteyen video izler isteyen aşağıdaki makaleyi okur. Şimdiden iyi seyirler ve iyi okumalar dilerim. ☺ LabelFrame kullanımı : LabelFrame widget’ı, bir çerçeve içindeki bir etiketle birlikte bir grup widget’ı oluşturmanıza olanak tanır. LabelFrame widget’ı, bir Frame widget’ının özelliklerine sahiptir ve ayrıca bir başlık etiketi içerir. Bu widget’lar, diğer widget’ları gruplandırmak için kullanılabilir. from tkinter import* pencere=Tk() pencere.title("label Frame örneği") pencere.geometry("400×300+200+200") kisi_bilgileri=LabelFrame(pencere,text="nüfus örneği", width=300,height=200) kisi_bilgileri.pack(pady=30) kisi_ad=Label(kisi_bilgileri,text="ad soyad") kisi_ad.place(x=20,y=20) kisi_ad_giris=Entry(kisi_bilgileri) kisi_ad_giris.place(x=120,y=20) pencere.mainloop()   yukarıdaki kodumuzda görüleceği üzere formlarda widgetların daha düzenli görünmesini sağlayan labelFrame’mizi  kisi_bilgileri=LabelFrame(pencere,text=”nüfus örneği”, width=300,height=200) şeklinde yükseklik ve genişlik değerleri vererek tanımladık. Bundan sonra ise ekleyeceğimiz widgetları pencere üzerinde tanımlamak yerine kisi_ad=Label(kisi_bilgileri,text=”ad soyad”) buradaki gibi kisi_bilgileri adında tanımladığım LabelFrame değişkeni üzerine eklediğimizi belirtiyoruz. kisi_ad_giris.place(x=120,y=20) burada da Entry nesnesini place özelliği ile x ve y değerlerini vererek konumlandırıyoruz. kodumuzun ekran […]

Python Dersleri | Bayrama özel uygulama yapımı

Python 8 ay önce

Arkadaşlar Merhabalar bugunkü makalemizde bayramda aklıma gelen bir uygulama senaryosunu gerçekleştirmesini size anlatıyor olacağım. Bayramda vakit ayırıp bunu yeni gerçekleştirdim umarım beğenirsiniz. Bayramınızı kutluyorum şimdiden iyi seyirler ve iyi okumalar dilerim. def __init__(self): Burada yapıcı(constructor ) fonksiyonumuzu tanımladık self belirteci  ile burada attribute’lar ve fonksiyonlara ulaşıyor oalcağız. self.pencere = tk.Tk() self.pencere.title("Bayram Uygulaması") self.pencere.geometry("500×400+500+300") burada pencere ayarlamasınız yaptık. self.soru1=tk.Label(self.pencere,text="1. Mezarlık ziyareti yapıldı mı?") self.soru1.grid(row=0,column=0) self.evet1=tk.Button(self.pencere,text="Evet",command=self.mezarlikEvet) self.evet1.grid(row=0,column=1) burada soru etkietimizi ve yanlarından evet ve hayır butonlarını ekledik burada grid(row,column) yapısına değinecek olursak elemanlarımı grid şeklinde bize yerleştirmemizi sağlayacaktır. def mezarlikEvet(self): self.skor+=20 self.evet1.config(state="disabled") self.hayir1.config(state="disabled") self.guncelle() def mezarlikHayir(self): self.evet1.config(state="disabled") self.hayir1.config(state="disabled") self.guncelle() burada ise buttonlarımızın command parametresine karşılık gelen fonksiyonlarımızı doldurduk. if(self.skor>=80): sonuc = "Neredeyse tüm görevleri yapmışssın helal sana be!🎊🎇 " elif(self.skor>=60 and self.skor<80): sonuc = "Kurban bayramının gerekliliklerini orta düzeyde karşılıyorsun. 😊" elif(self.skor>50 and self.skor<60): sonuc = "kurban bayramının olması gerektiği gibi değil maelesef 😔" else: sonuc = "olmaz öyle kardeşim böyle bayramda […]

Gui Dersleri #7 | Canvas kullanımı, Scale kullanımı ve Scrollbar kullanımı ile ilgili işlemler

Python 8 ay önce

Arkadaşlar merhaba bu makalemizde sizlere Canvas(Tuval) kullanımı, Scale(ölçek) kullanımı ve Scrollbar(Kaydırma çubuğu) kullanımının nasıl oluşturacağını anlatıyor olacağım ve bunlarla ilgili örnek uygulama yapacağım. Ayrıca size bununla ilgili yukarıda bir örnek video bırakıyorum isteyen video izler isteyen aşağıdaki makaleyi okur. Şimdiden iyi seyirler ve iyi okumalar dilerim. ☺ Canvas(Tuval) kullanımı: Canvas widgeti, Tkinter’da kullanılan bir çizim alanıdır. Bu widgeti kullanarak grafikler, şekiller, metinler ve diğer çizim öğelerini ekrana çizebilirsiniz. Canvas, çeşitli interaktif grafik uygulamaları ve veri görselleştirme için kullanışlıdır. from tkinter import* pencere=Tk() pencere.geometry("300×300+200+200") pencere.title("Canvas örneği") canvas1=Canvas(width=300,height=300,background="gray",highlightthickness=2) canvas1.pack() canvas1.create_rectangle(50,50,100,100,fill="blue") canvas1.create_oval(60,60,150,150,fill="red") canvas1.create_text(50,30,text="merhaba",font="courier 15",fill="yellow") pencere.mainloop()   Bu örnekte, Canvas sınıfını kullanarak bir tuval oluşturuyoruz. width ve height parametreleri tuvalin boyutlarını belirtir. create_rectangle() ve create_oval() metotlarıyla dikdörtgen ve elips gibi çizimler yapabiliriz. Ayrıca create_text() metoduyla da belirtilen özellikte bir text yazısı yazar. Kodlarımızın ekran çıktısı aşağıdaki gibidir:   Scale(Ölçek) kullanımı Scale widgeti, Tkinter’da kullanılan bir kaydırma çubuğu bileşenidir. Kullanıcının bir aralıktaki bir değeri seçmesini […]

0 Yorum

Yorum Yaz

Rastgele