Iterator Python

Iterator Python

Iterator adalah objek yang mengandung bilangan yang dapat dihitung nilai.

Iterator adalah objek yang dapat dievaluasi, yang berarti Anda dapat mengelilinginya semua nilai.

Tekniknya, di Python, iterator adalah objek yang melaksanakan protokol iterator, yang mengandung metode __iter__() dan __next__().

Iterator VS Objek yang Dapat Dievaluasi (Iterable)

daftar, tuple, kamus, dan koleksi adalah objek yang dapat dievaluasi. Mereka adalah wadah yang dapat dievaluasi, dari mana Anda dapat memperoleh iterator (Iterator).

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

Instansia

Mengembalikan iterator dari tuple dan mencetak setiap nilai:

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

Jalankan Instansia

bahkan string juga adalah objek yang dapat dievaluasi dan dapat mengembalikan iterator:

Instansia

String juga adalah objek yang dapat dievaluasi, berisi sekumpulan karakter:

mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

Jalankan Instansia

Mengelilingi iterator

Kami juga dapat menggunakan perulangan for untuk mengelilingi objek yang dapat dievaluasi:

Instansia

Iterasi nilai tuple:

mytuple = ("apple", "banana", "cherry")
for x in mytuple:
  print(x)

Jalankan Instansia

Instansia

Iterasi karakter dalam string:

mystr = "banana"
for x in mystr:
  print(x)

Jalankan Instansia

Petunjuk:for perulangan sebenarnya membuat objek iterator dan melaksanakan setiap eksekusi perulangan next() metode.

membuat iterator

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

Seperti yang Anda pelajari di bab Klas/Objek Python, semua kelas memiliki nama __init__() Fungsi, yang memungkinkan Anda melakukan beberapa inisialisasi saat membuat objek.

__iter__() Fungsi metode ini mirip, Anda dapat melaksanakan operasi (inisialisasi dll), tetapi harus selalu mengembalikan objek iterasi sendiri.

__next__() Metode ini juga memungkinkan Anda melaksanakan operasi, dan harus mengembalikan objek iterasi berikutnya di dalam urutan.

Instansia

Buat pengembalikan iterasi yang mengembalikan angka, dimulai dari 1, setiap urutan akan bertambah 1 (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))

Jalankan Instansia

StopIteration

jika Anda punya cukup next() pernyataan, atau di dalam lingkaran for, contoh di atas akan berlanjut selamanya.

Untuk mencegah iterasi selamanya, kita dapat menggunakan StopIteration pernyataan.

di __next__() Dalam metode, jika iterasi selesai mencapai jumlah yang ditentukan, kita dapat menambahkan kondisi penghentian untuk memicu kesalahan:

Instansia

Berhenti setelah 20 iterasi:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
  def __next__(self):
    jika self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
untuk x di myiter:
  print(x)

Jalankan Instansia