Python'da Yineleyiciler
Bu makale, Python'daki yineleyicileri açıklar.
YouTube Video
Python'da Yineleyiciler
Genel Bakış
Python'da yineleyici, liste, demet veya sözlük gibi koleksiyonların elemanlarını tek tek işlemek için temel bir mekanizmadır.
Yineleyici Nedir?
Yineleyici, elemanları birer birer döndürebilen bir nesnedir. Python'da bir nesne, aşağıdaki iki koşulu sağlıyorsa yineleyici olarak kabul edilir:.
__iter__()metoduna sahip olup kendisini döndürür.__next__()metoduna sahip olup bir sonraki elemanı döndürür. Daha fazla eleman kalmadığındaStopIterationhatası oluşturur.
1iterator = iter([1, 2, 3])
2print(next(iterator)) # 1
3print(next(iterator)) # 2
4print(next(iterator)) # 3
5# print(next(iterator)) # StopIteration occurs- Bu kodda, bir listeyi yineleyiciye dönüştürmek için
iter()fonksiyonu kullanılır ve her bir öğeyi tek tek almak ve göstermek içinnext()fonksiyonu kullanılır.
Yinelenebilir (Iterable) ile Farkı
Yinelenebilir, __iter__() metodunu uygulayan ve for döngüsünde kullanılabilen bir nesnedir. Listeler ve demetler (tuple), yinelenebilir örneklerdir.
1nums = [10, 20, 30]
2it = iter(nums) # Get an iterator from the iterable
3print(next(it)) # 10- Bu kod, bir liste gibi yinelenebilir bir nesneden yineleyici elde etmenin ve
next()kullanarak öğeleri sırayla almanın bir örneğidir.
Nasıl kontrol edilir:
1from collections.abc import Iterable, Iterator
2
3nums = [10, 20, 30]
4it = iter(nums)
5
6print(isinstance(nums, Iterable)) # True
7print(isinstance(nums, Iterator)) # False
8print(isinstance(it, Iterator)) # True- Bu kod,
nums'un yinelenebilir (iterable) olduğunu ancak bir yineleyici (iterator) olmadığını, buna karşılıkiter(nums)ile elde edilenit'nin ise bir yineleyici olduğunu doğrulamaktadır.
for Döngüleri ile Yineleyiciler Arasındaki İlişki
Python'daki for döngüsü içsel olarak şu şekilde çalışır:.
1nums = [1, 2, 3]
2iterator = iter(nums)
3while True:
4 try:
5 value = next(iterator)
6 print(value)
7 except StopIteration:
8 break- Görüldüğü gibi,
fordöngüsü yinelemeyi gerçekleştirmek için örtük olarak bir yineleyici kullanır.
Özel Bir Yineleyici Oluşturma
Bir sınıf kullanarak özel bir yineleyici oluşturabilirsiniz.
1class Countdown:
2 def __init__(self, start):
3 self.current = start
4
5 def __iter__(self):
6 return self
7
8 def __next__(self):
9 if self.current <= 0:
10 raise StopIteration
11 value = self.current
12 self.current -= 1
13 return value
14
15for num in Countdown(3):
16 print(num) # 3, 2, 1- Bu kod,
Countdownsınıfını kullanarak geriye doğru sayan özel bir yineleyici tanımlar ve birfordöngüsü ile 3'ten 1'e kadar olan sayıları yazdırır.
Yineleyici ile Üreteç (Generator) Arasındaki Farklar ve Ne Zaman Hangisi Kullanılır
Üreteçler (generators), yineleyicilere benzer işlevler sunar. Yineleyicileri daha özlü bir şekilde tanımlamanıza olanak tanırlar.
1def countdown(n):
2 while n > 0:
3 yield n
4 n -= 1
5
6for i in countdown(3):
7 print(i) # 3, 2, 1- Bu kod,
yieldkullanarak geriye doğru sayan bir jeneratör fonksiyonu tanımlar ve birfordöngüsü ile 3'ten 1'e kadar olan sayıları yazdırır.
Yineleyici (Sınıf) ile Üreteç (Fonksiyon) Arasındaki Farklar
Yineleyiciler (sınıflar) ile jeneratörler (fonksiyonlar) arasında aşağıdaki farklar vardır:.
| Özellik | Yineleyici (Sınıf) | Üreteç (Fonksiyon) |
|---|---|---|
| Tanım | __iter__() + __next__() |
yield kullanan fonksiyon |
| Durum Yönetimi | Manuel olarak nitelik yönetimi gerekir | Durumu otomatik olarak korur |
| Okunabilirlik | Karmaşık hale gelebilir | Basit ve anlaşılır |
-
Tanımlanış Şekillerindeki Fark Bir yineleyici, manuel olarak iki metodun yazılmasıyla tanımlanır:
__iter__()ve__next__(). Buna karşılık, bir üreteç (generator) sadeceyieldanahtar kelimesini kullanan bir fonksiyondur ve bu da kodun çok daha basit olmasını sağlar. -
Durum Yönetimindeki Fark Yineleyicide, mevcut durumu ve ilerlemeyi değişkenler kullanarak manuel olarak yönetmeniz gerekir. Üreteçler ise, kendi durumlarını Python içinde otomatik olarak korurlar ve bu da manuel çabayı azaltır.
-
Kodun Okunabilirliği Yineleyiciler, birden fazla metod ve manuel durum yönetimi gerektirdiğinden karmaşık hale gelebilirler. Buna karşılık, üreteçler sade bir sözdizimi kullanır, bu da onları yeni başlayanlar için bile anlaşılır kılar.
Yineleyiciler İçin Standart Kütüphane: itertools
itertools, Python'un standart bir kütüphanesi olarak yineleyicilerle çalışmak için güçlü araçlar sağlar.
1import itertools
2
3for x in itertools.count(10, 2): # 10, 12, 14, ...
4 if x > 20:
5 break
6 print(x)- Ayrıca
cycle,repeat,chain,isliceveteegibi birçok başka fonksiyon da içerir.
Yineleyici Kullanım Durumları
Yineleyicilerin kullanım durumları şunlardır:.
- Dosya Satırlarını İşleme: Dosyadan satırları birer birer yineleyici olarak okuyun.
- Bellek Verimli İşleme: Büyük miktarda veriyi sırayla işleyin.
- Sonsuz Diziler Temsil Etme:
itertools.count()gibi fonksiyonları kullanın.
Özet
- Yineleyici, bir sonraki değeri ardışık olarak alabilen bir nesnedir.
__iter__()ve__next__()tanımlayarak özel bir yineleyici oluşturabilirsiniz.- Onlar,
fordöngüleri veyanext()fonksiyonu ile otomatik olarak yönetilirler. - Üreteçler veya
itertoolskullanmak, daha verimli işlemeyi sağlar.
Yineleyicileri kullanarak, büyük miktardaki veriyi bellek açısından verimli ve sıralı bir şekilde işleyebilir, kontrol edilebilir durum yönetimi ile program performansını artırabilirsiniz.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.