Python Academy · Pelajaran

Protokol Iterator

Pahami __iter__ dan __next__

Pelajaran 1 dari 413 langkah

Protokol Iterator adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Apa Itu Iterasi?

Setiap kali Anda menulis loop for pada daftar, string, atau kamus, Python menggunakan protokol iterasi di balik layar.

Objek yang dapat Anda gunakan dalam loop disebut objek yang dapat diiterasi. Hal yang benar-benar menghasilkan nilai satu per satu disebut pengiterasi.

for ch in 'abc':
    print(ch)

iter() dan next()

Dua fungsi bawaan menggerakkan iterasi:

  • iter(obj) meminta pengiterasi dari objek yang dapat diiterasi.
  • next(it) meminta nilai berikutnya dari pengiterasi.

Jika tidak ada nilai lagi, next() memunculkan StopIteration.

it = iter([10, 20, 30])
print(next(it))
print(next(it))
print(next(it))

StopIteration

Memanggil next() satu kali terlalu banyak akan memunculkan StopIteration. Loop for menangkapnya secara otomatis dan berhenti dengan rapi.

it = iter([1])
print(next(it))
try:
    next(it)
except StopIteration:
    print('No more items')

Dua metode khusus

Untuk membuat pengiterasi sendiri, Anda menerapkan dua metode:

  • __iter__ mengembalikan objek pengiterasi itu sendiri.
  • __next__ mengembalikan nilai berikutnya atau memunculkan StopIteration.
class Count:
    def __init__(self, n):
        self.i = 0
        self.n = n
    def __iter__(self):
        return self
    def __next__(self):
        if self.i >= self.n:
            raise StopIteration
        self.i += 1
        return self.i

for x in Count(3):
    print(x)

Objek yang Dapat Diiterasi dan Pengiterasi

Objek yang dapat diiterasi hanya memerlukan __iter__. Pengiterasi memerlukan __iter__ dan __next__.

Daftar dapat diiterasi tetapi bukan pengiterasi: setiap pemanggilan iter() menghasilkan pengiterasi baru.

nums = [1, 2, 3]
print(iter(nums) is iter(nums))
it = iter(nums)
print(it is iter(it))

Pengiterasi Hanya Dapat Dihabiskan Sekali

Pengiterasi hanya dapat digunakan satu kali. Setelah mencapai akhir, pengiterasi tetap kosong. Untuk melakukan loop lagi, buat pengiterasi baru.

it = iter([1, 2])
print(list(it))
print(list(it))

Pengiterasi seperti Rentang

Mari kita buat pengiterasi khusus yang berperilaku seperti penghitung sederhana. Perhatikan bahwa status berada dalam instans.

class EvenUpTo:
    def __init__(self, limit):
        self.cur = 0
        self.limit = limit
    def __iter__(self):
        return self
    def __next__(self):
        if self.cur > self.limit:
            raise StopIteration
        value = self.cur
        self.cur += 2
        return value

print(list(EvenUpTo(8)))

Memisahkan Objek yang Dapat Diiterasi dan Pengiterasi

Desain yang lebih rapi memisahkan wadah dan pengiterasi, sehingga wadah dapat digunakan dalam loop berkali-kali.

class Bag:
    def __init__(self, items):
        self.items = items
    def __iter__(self):
        return BagIterator(self.items)

class BagIterator:
    def __init__(self, items):
        self.items = items
        self.i = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.i >= len(self.items):
            raise StopIteration
        v = self.items[self.i]
        self.i += 1
        return v

b = Bag(['x', 'y'])
print(list(b))
print(list(b))

Menggunakan next() dengan Nilai Bawaan

next(it, default) mengembalikan nilai bawaan alih-alih memunculkan StopIteration saat pengiterasi kosong. Berguna untuk mengintip dengan aman.

it = iter([42])
print(next(it, 'done'))
print(next(it, 'done'))

Pengiterasi Hemat Memori

Pengiterasi menghasilkan satu item setiap kali, sehingga tidak perlu menyimpan seluruh urutan dalam memori. Inilah alasan pengiterasi dapat digunakan untuk aliran yang sangat besar atau bahkan tidak terbatas.

class Naturals:
    def __init__(self):
        self.n = 0
    def __iter__(self):
        return self
    def __next__(self):
        self.n += 1
        return self.n

it = iter(Naturals())
print(next(it), next(it), next(it))

Fungsi Bawaan yang Mengonsumsi Iterator

Banyak fungsi bawaan menerima iterator apa pun: sum, max, min, sorted, list, tuple. Fungsi-fungsi tersebut mengambil nilai hingga StopIteration.

class Count:
    def __init__(self, n):
        self.i = 0
        self.n = n
    def __iter__(self):
        return self
    def __next__(self):
        if self.i >= self.n:
            raise StopIteration
        self.i += 1
        return self.i

print(sum(Count(5)))
print(max(Count(5)))

Pemeriksaan Singkat

Uji pemahaman Anda tentang protokol iterator.

Ringkasan

Anda telah mempelajari protokol iterator:

  • iter() mendapatkan iterator; next() mengambil nilai.
  • StopIteration menandakan akhir iterasi dan for menanganinya.
  • Iterator khusus mengimplementasikan __iter__ dan __next__.
  • Iterator hanya dapat digunakan sekali dan hemat memori.

Selanjutnya, Anda akan membiarkan Python menuliskan iterator untuk Anda dengan yield.

Gratis untuk memulai

Belajar Python dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
76
Pelajaran
320

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Protokol Iterator” gratis?

Ya — teks lengkap “Protokol Iterator” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Protokol Iterator”?

Pahami __iter__ dan __next__ Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Protokol Iterator” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Protokol Iterator
  2. Fungsi Generator
  3. Ekspresi Generator
  4. yield from dan Delegasi
← Kembali ke Python Academy