Iterator Python

Iterator Python

Iterator adalah objek yang berisi jumlah nilai yang dapat dihitung.

Iterator adalah objek yang dapat diulangi, artinya Anda dapat melintasi semua nilai.

Secara teknis, dalam Python, sebuah iterator adalah objek yang mengimplementasikan protokol iterator, yang terdiri dari metode __iter__() dan __next__().

Iterator vs Iterable

Daftar, tupel, kamus, dan set adalah semua objek yang dapat diubah. Ini adalah wadah yang dapat Anda gunakan untuk mendapatkan iterator.

Semua objek ini memiliki iter()metode yang digunakan untuk mendapatkan iterator:

Contoh

Kembalikan iterator dari tuple, dan cetak setiap nilai:

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

Bahkan string adalah objek yang dapat diubah, dan dapat mengembalikan iterator:

Contoh

String juga merupakan objek yang dapat diubah, yang berisi urutan karakter:

myit = iter(mystr)

print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

Looping Melalui Iterator

Kita juga bisa menggunakan forloop untuk beralih melalui objek yang dapat diulang:

Contoh

Iterasi nilai-nilai tuple:

mytuple = ("apple", "banana", "cherry")

for x in mytuple:
  print(x)

Contoh

Iterasi karakter string:

mystr = "banana"

for x in mystr:
  print(x)

Loop for benar-benar menciptakan sebuah objek iterator dan mengeksekusi metode () berikutnya untuk setiap loop.

Membuat Iterator

Untuk membuat objek / kelas sebagai iterator, kamu harus mengimplementasikan metode __iter__() dan objek __next__() kamu.

semua kelas memiliki fungsi yang disebut __init__(), yang memungkinkan kamu melakukan inisialisasi ketika objek sedang dibuat.

Metode __iter__() bertindak serupa, kamu dapat melakukan operasi (menginisialisasi dll), tetapi harus selalu kembali objek iterator sendiri.

Metode __next__() ini juga memungkinkan kamu untuk melakukan operasi, dan harus kembali item berikutnya dalam urutan.

Contoh

Membuat iterator yang mengembalikan angka, dimulai dengan 1, dan setiap urutan akan bertambah satu (mengembalikan 1,2,3,4,5 dll.):

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    x = self.a
    self.a += 1
    return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

Stop Iteration

Contoh di atas akan berlanjut selamanya jika kamu memiliki cukup banyak pernyataan () berikutnya, atau jika itu digunakan dalam satu lingkaran for

Untuk mencegah iterasi berjalan selamanya, kita dapat menggunakan pernyataan StopI teration itu.

Dalam metode __next__() ini, kita dapat menambahkan kondisi terminating untuk meningkatkan kesalahan jika iterasi dilakukan beberapa kali:

Contoh

Menghentikan setelah 20 iterasi:

class MyNumbers:
  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 = MyNumbers()
myiter = iter(myclass)

for x in myiter:
  print(x)