Blogger Jateng

Iterator dan Generator: Teknik Iterasi Tingkat Lanjut

Iterasi adalah konsep yang digunakan dalam pemrograman, biasanya untuk memproses urutan, kumpulan atau aliran data. Meskipun konstruksi yang lebih sederhana seperti loop dapat digunakan untuk sebagian besar kasus, ada teknik yang lebih canggih seperti iterator dan generator yang menawarkan lebih banyak fleksibilitas, efisiensi, dan kontrol. Artikel ini menjelaskan alat-alat canggih ini, fitur-fiturnya, manfaat & kasus penggunaannya.

Memahami Iterator

Iterator adalah sebuah objek yang memungkinkan untuk menelusuri sebuah urutan satu per satu. Iterator dibangun ke dalam bahasa inti Python, mengikuti protokol iterator - sebuah objek harus mengimplementasikan dua metode:

  1. iter(): Mengembalikan objek yang sama dengan yang dikembalikan oleh iterator.
  2. next(): Mengembalikan nilai berikutnya dalam urutan atau membangkitkan StopIterasi ketika urutan habis

Berikut adalah contoh sederhana:

my_list = [1, 2, 3]

iterator = iter(my_list)  # Create an iterator


print(next(iterator))  # Outputs: 1

print(next(iterator))  # Outputs: 2

print(next(iterator))  # Outputs: 3

Iterator memberi Anda banyak kendali atas iterasi dan memiliki kontrol lebih besar atas memori serta Anda tidak memuat seluruh urutan ke dalam memori sekaligus. Iterator sangat bermanfaat terutama saat menangani kumpulan data atau aliran yang besar.

sumber: medium.com

Iterator Khusus

berguna untuk membuat kelas iterator kustom dengan mengimplementasikan metode iter dan metode selanjutnya Berikut adalah contoh sederhana dari iterator kustom yang menghasilkan kuadrat:

class SquareIterator:

    def __init__(self, max_num):

        self.max_num = max_num

        self.current = 0


    def __iter__(self):

        return self


    def __next__(self):

        if self.current >= self.max_num:

            raise StopIteration

        result = self.current ** 2

        self.current += 1

        return result


squares = SquareIterator(5)

for square in squares:

    print(square)  # Outputs: 0, 1, 4, 9, 16

Iterator khusus seperti ini memungkinkan Anda menyediakan antarmuka yang bersih dan intuitif untuk iterasi sambil merangkum banyak logika dan status kompleks yang mendukung iterasi yang sebenarnya.

Memperkenalkan Generator

Meskipun iteratornya sangat sederhana, menulis kelas khusus bisa jadi sedikit bertele-tele. Masukkan generator: metode yang lebih efisien untuk membuat iterator berkat pernyataan hasil dari Python. Fungsi generator menghasilkan nilai satu per satu, berhenti mengeksekusi pada setiap hasil dan melanjutkannya pada pemanggilan berikutnya.

Berikut ini sebuah contoh:

def square_generator(max_num):

    for num in range(max_num):

        yield num ** 2


for square in square_generator(5):

    print(square)  # Outputs: 0, 1, 4, 9, 16

Generator menyediakan cara yang sederhana dan mudah dibaca untuk membuat iterator tanpa overhead dari kelas khusus. Eksekusi dilanjutkan dari pernyataan hasil terakhir setiap kali fungsi next() dari generator dipanggil.

Ekspresi Generator

Selain pemahaman daftar, Python memiliki ekspresi generator, yang mirip dengan sintaks tetapi menggunakan tanda kurung sebagai pengganti tanda kurung seperti yang ditunjukkan pada contoh berikut ini, yang menghasilkan kode yang lebih mudah dibaca dan ringkas. Berikut adalah contohnya:

squares = (x ** 2 for x in range(5))

print(list(squares))  # Outputs: [0, 1, 4, 9, 16]

Ekspresi generator digunakan untuk kasus-kasus sederhana, sebaris, dan hemat memori, menghasilkan item-itemnya secara perlahan. 

Keuntungan dari Iterator dan Generator

  1. Efisiensi Memori: Karena iterator dan generator menghasilkan item satu per satu, mereka ideal untuk memproses kumpulan data yang besar atau hampir tak terbatas tanpa menghabiskan memori secara berlebihan.
  2. Evaluasi Malas: Iterator menghitung item hanya ketika ada permintaan, item yang tidak pernah diminta tidak akan dihitung, sehingga dapat meningkatkan kinerja.
  3. Modularitas: Mengenkapsulasi logika iterasi Anda di dalam iterator atau generator mendorong terciptanya kode yang dapat digunakan kembali, dipelihara, dan diuji.
  4. Urutan Tak Terbatas: Generator dapat digunakan untuk merepresentasikan urutan tak terbatas seperti deretan bilangan Fibonacci atau bilangan prima yang tak terbatas.

Contoh: Generator Fibonacci

Berikut adalah generator deret fibonacci yang tak terbatas:

def fibonacci():

    a, b = 0, 1

    while True:

        yield a

        a, b = b, a + b


fib_gen = fibonacci()

for _ in range(10):

    print(next(fib_gen))  # Outputs: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34

Kasus Penggunaan Dunia Nyata

  • Pemrosesan Data: Membaca file besar atau memproses aliran data real-time
  • Pengikisan Web: Menghasilkan hasil secara bertahap dari skrip pengikisan web.
  • Simulasi: Membuat simulasi dengan membuat urutan langkah alih-alih melakukan prakomputasi seluruh proses.
  • Pipelines: Membangun pipeline data di mana setiap tahap memproses data secara perlahan.


Kesimpulan

Fitur-fitur ini adalah fitur yang kuat untuk mengimplementasikan iterasi tingkat lanjut. Dan mereka memberikan keanggunan, efisiensi, dan skala: Mereka adalah landasan pendekatan Python terhadap data. Pola kode lain dapat digunakan untuk menulis kode yang lebih bersih, lebih efisien, dan lebih ekspresif saat menyelesaikan banyak masalah.


kembali ke>>>>  Memahami ES6: Fitur Baru dalam JavaScript