Iterator Tak Terbatas
Pelajaran 6 dari 13 dalam kursus Iterator Python di Coddy.
Iterator tak terbatas adalah tipe iterator khusus di Python yang dapat menghasilkan urutan nilai tanpa akhir. Berbeda dengan iterator terbatas yang pada akhirnya memunculkan exception StopIteration, iterator tak terbatas terus menghasilkan nilai tanpa batas.
Karakteristik Iterator Tak Terbatas
- Iterator ini tidak pernah memunculkan exception
StopIteration. - Iterator ini dapat berguna untuk menghasilkan urutan berkelanjutan atau menyimulasikan aliran data tanpa akhir.
- Kamu harus berhati-hati agar tidak membuat perulangan tanpa akhir saat menggunakannya.
Membuat Iterator Tak Terbatas
Berikut contoh sederhana iterator tak terbatas yang menghasilkan urutan bilangan bulat tanpa akhir:
class InfiniteCounter:
def __init__(self, start=0):
self.count = start
def __iter__(self):
return self
def __next__(self):
current = self.count
self.count += 1
return current
# Penggunaan
counter = InfiniteCounter()
for i in counter:
print(i)
if i >= 5:
break # Cegah perulangan tanpa henti
Dalam contoh ini, class InfiniteCounter akan terus menghasilkan angka tanpa batas. Kita menggunakan pernyataan break untuk menghentikan iterasi setelah kondisi tertentu terpenuhi.
Iterator Tak Terbatas Bawaan
Module itertools Python menyediakan beberapa iterator tak terbatas yang berguna:
itertools.count(start, step): Menghitung naik tanpa batas dari nilai awalitertools.cycle(iterable): Mengulang iterable tanpa batasitertools.repeat(elem, [n]): Mengulang sebuah elemen tanpa batas atau sebanyak n kali
Contoh menggunakan itertools.count():
from itertools import count
for i in count(10):
print(i)
if i >= 15:
break
# output: 10, 11, 12, 13, 14, 15
Peringatan dan Praktik Terbaik
- Selalu sediakan cara untuk keluar dari perulangan yang melibatkan iterator tak terbatas agar program tidak macet.
- Gunakan iterator tak terbatas dengan bijak dan hanya saat diperlukan.
- Pertimbangkan untuk menggunakan fungsi generator demi menghasilkan urutan tak terbatas yang lebih hemat memori.
Iterator tak terbatas menyediakan alat yang ampuh untuk skenario yang memerlukan pembuatan atau pemrosesan data berkelanjutan, tetapi gunakan dengan hati-hati agar programmu berperilaku sesuai harapan.
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 tak terbatas bernama CyclicCounter yang berulang kali melewati rentang angka tertentu tanpa batas. Iterator harus dimulai dari angka yang ditentukan dan kembali ke angka tersebut setelah mencapai akhir rentang.
Kamu diberikan:
- Dua bilangan bulat sebagai input:
startdanend(inklusif)
Class CyclicCounter-mu harus:
- Mengimplementasikan method
__iter__()dan__next__() - Menghasilkan angka dari
starthinggaend(inklusif) - Setelah mencapai
end, kembali kestartdan terus berjalan tanpa batas
Setelah mengimplementasikan class CyclicCounter, buat instance-nya menggunakan nilai input. Lalu, gunakan perulangan untuk mencetak 10 angka pertama yang dihasilkan iterator, masing-masing pada baris baru.
Input akan diberikan sebagai dua bilangan bulat yang dipisahkan oleh spasi, yang mewakili start dan end.
Coba sendiri
# Baca input
start, end = map(int, input().split())
class CyclicCounter:
def __init__(self, start, end):
self.start = start
self.end = end
self.current = start
def __iter__(self):
return self
# TODO: Implementasikan method __next__()
# Buat instance dari CyclicCounter
counter = CyclicCounter(start, end)
# TODO: Gunakan perulangan untuk mencetak 10 angka pertama yang dihasilkan iterator
# Ingat, cetak setiap angka pada baris baruSemua pelajaran di Iterator Python
2Membuat Iterator Kustom
Mengimplementasikan __iter__()Mengimplementasikan __next__()Iterator Tak TerbatasLatihan sendiri: Compiler Python online