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ığındaStopIteration
hatası 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,
for
dö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,
Countdown
sınıfını kullanarak geriye doğru sayan özel bir yineleyici tanımlar ve birfor
dö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,
yield
kullanarak geriye doğru sayan bir jeneratör fonksiyonu tanımlar ve birfor
dö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) sadeceyield
anahtar 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
,islice
vetee
gibi 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,
for
döngüleri veyanext()
fonksiyonu ile otomatik olarak yönetilirler. - Üreteçler veya
itertools
kullanmak, 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.