Mengimplementasikan __next__()
Pelajaran 5 dari 13 dalam kursus Iterator Python di Coddy.
Method __next__() adalah bagian penting dalam membuat iterator kustom di Python. Method ini menentukan cara mengambil item berikutnya dalam urutan iterasi. Saat mengimplementasikan __next__(), kamu mengendalikan perilaku iterator, menentukan nilai yang dihasilkannya dan kapan iterator harus berhenti.
Tujuan __next__()
Method __next__() memiliki dua tujuan utama:
- Mengembalikan item berikutnya dalam urutan
- Memunculkan exception
StopIterationsaat tidak ada item lagi
Mengimplementasikan __next__()
Berikut struktur dasar untuk mengimplementasikan __next__():
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
result = self.data[self.index]
self.index += 1
return result
Aspek Utama __next__()
- Pengelolaan Status: Lacak status iterasi saat ini, misalnya dengan menggunakan indeks.
- Mengembalikan Item Berikutnya: Tentukan dan kembalikan item berikutnya dalam urutan.
- StopIteration: Munculkan
StopIterationsaat tidak ada item lagi. - Efek Samping: Perbarui status internal yang diperlukan untuk iterasi berikutnya.
Contoh: Iterator Rentang Kustom
Berikut contoh iterator kustom yang meniru versi sederhana dari range()</function> milik Python:</p>
<pre><code class="language-python">class CustomRange:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
result = self.current
self.current += 1
return result
# Menggunakan iterator range buatanmu
for num in CustomRange(1, 5):
print(num) # Output: 1, 2, 3, 4
Dalam contoh ini, __next__() mengembalikan angka saat ini dan menambah nilainya untuk iterasi berikutnya, lalu memunculkan StopIteration saat mencapai nilai akhir.
Dengan mengimplementasikan __next__(), kamu menentukan perilaku inti iterator sehingga iterator dapat bekerja dengan lancar bersama mekanisme iterasi Python, seperti perulangan for dan fungsi next().
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Tantangan
MudahBuat class iterator kustom bernama FibonacciIterator yang menghasilkan bilangan Fibonacci hingga batas tertentu. Urutan Fibonacci dimulai dengan 0 dan 1, dan setiap bilangan berikutnya merupakan jumlah dari dua bilangan sebelumnya.
Kamu diberikan hal berikut:
- Bilangan bulat
limitsebagai input
Class FibonacciIterator-mu harus:
- Menerapkan method
__next__()untuk menghasilkan bilangan Fibonacci berikutnya - Menghentikan perulangan ketika bilangan Fibonacci berikutnya akan melebihi batas yang diberikan
- Menghasilkan exception
StopIterationketika urutannya habis
Setelah menerapkan class FibonacciIterator, buat sebuah instance dengan menggunakan batas input, lalu cetak setiap bilangan Fibonacci yang dihasilkan pada baris baru.
Input akan diberikan sebagai string yang mewakili bilangan bulat.
Coba sendiri
# Baca input
limit = int(input())
class FibonacciIterator:
def __init__(self, limit):
self.limit = limit
self.a, self.b = 0, 1
def __iter__(self):
return self
def __next__(self):
# TODO: Implementasikan method __next__()
# Hasilkan bilangan Fibonacci berikutnya
# Bangkitkan StopIteration saat deret sudah habis
pass
# Buat instance dari FibonacciIterator
fib_iterator = FibonacciIterator(limit)
# TODO: Telusuri deret Fibonacci dan cetak setiap bilangannya
# Note: Pastikan kamu mencetak setiap bilangan Fibonacci agar lolos kasus ujiSemua pelajaran di Iterator Python
2Membuat Iterator Kustom
Mengimplementasikan __iter__()Mengimplementasikan __next__()Iterator Tak TerbatasLatihan sendiri: Compiler Python online