Python iterator adalah object yang berisi sejumlah nilai yang dapat dihitung. Iterator adalah object yang dapat ditelusuri (iterable), artinya Anda dapat menelusuri menggunakan loop atau perulangan semua nilainya satu per satu.
Secara teknis, dalam Python, iterator adalah object yang mengimplementasikan protokol iterator, yang terdiri dari fungsi __iter__()
dan __next__()
.
Iterator vs Iterable
List, tuple, dictionary, dan set adalah collection object yang iterable. Mereka adalah wadah atau koleksi object-object lain yang bisa mengembalikan iterator.
Semua object ini memiliki fungsi iter()
yang digunakan untuk mendapatkan iterator.
Contoh:
mytuple = ("apel", "pisang", "ceri")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
Output:
apel
pisang
ceri
Bahkan string adalah object yang bersifat iterable, dan dapat mengembalikan iterator.
Contoh:
mystr = "pisang"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
Output:
p
i
s
a
n
g
Perulangan Melalui Iterator
Kita juga bisa menggunakan for
loop untuk melakukan iterasi melalui object yang bersifat iterable.
Contoh:
mytuple = ("apel", "pisang", "ceri")
for x in mytuple:
print(x)
Output:
apel
pisang
ceri
Contoh:
mystr = "pisang"
for x in mystr:
print(x)
Output:
p
i
s
a
n
g
Loop for
sebenarnya membuat object iterator dan mengeksekusi fungsi next() untuk setiap loop.
Cara Membuat Iterator
Untuk membuat object/class sebagai iterator, Anda harus mengimplementasikan fungsi __iter__()
dan __next__()
pada object Anda.
Seperti yang telah Anda pelajari di bab Class/Object Python, semua class memiliki fungsi bernama __init__()
, yang memungkinkan Anda melakukan beberapa inisialisasi saat object sedang dibuat.
Fungsi __iter__()
bertindak serupa, Anda dapat melakukan operasi untuk membuat object iterator yang mengacu pada object yang Anda buat, fungsi ini harus selalu mengembalikan object iterator itu sendiri.
Fungsi __next__()
juga harus dibuat dan harus mengembalikan item berikutnya secara berurutan pada iterator yang mengacu pada object yang Anda buat.
Contoh:
Buat iterator yang mengembalikan angka, dimulai dengan 1, dan setiap urutan akan bertambah satu (mengembalikan 1,2,3,4,5 dll.)
class Angka:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = Angka()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
Output:
1
2
3
4
5
Menghentikan Iterasi
Contoh di atas akan berlanjut selamanya jika Anda hanya mengimplementasikan fungsi next().
Untuk mencegah iterasi berlangsung selamanya, kita dapat menggunakan pernyataan StopIteration
.
Dalam fungsi __next__()
, kita dapat menambahkan kondisi penghentian untuk memunculkan error jika iterasi dilakukan setelah beberapa kali.
Contoh:
Berhenti setelah 20 iterasi.
class Angka:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = Angka()
myiter = iter(myclass)
for x in myiter:
print(x)
Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Tutorial sebelumnya : Mempelajari Konsep Inheritance Pada Python
Tutorial setelahnya : Mempelajari Konsep Polimorfisme Pada Python
Semua Tutorial Python : Tutorial Python