Python'da Yineleyiciler

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ığında StopIteration 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çin next() 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ık iter(nums) ile elde edilen it'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 bir for 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 bir for 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) sadece yield 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 ve tee 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 veya next() 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.

YouTube Video