Python 迭代器

Python 迭代器

迭代器是一种对象,该对象包含值的可计数数字。

迭代器是可迭代的对象,这意味着您可以遍历所有值。

从技术上讲,在 Python 中,迭代器是实现迭代器协议的对象,它包含方法 __iter__()__next__()

迭代器 VS 可迭代对象(Iterable)

列表、元组、字典和集合都是可迭代的对象。它们是可迭代的容器,您可以从中获取迭代器(Iterator)。

所有这些对象都有用于获取迭代器的 iter() 方法:

Contoh

从元组返回一个迭代器,并打印每个值:

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

Jalankan Contoh

甚至连字符串都是可迭代的对象,并且可以返回迭代器:

Contoh

字符串也是可迭代的对象,包含一系列字符:

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

Jalankan Contoh

遍历迭代器

我们也可以使用 for 循环遍历可迭代对象:

Contoh

迭代元组的值:

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

Jalankan Contoh

Contoh

迭代字符串中的字符:

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

Jalankan Contoh

提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。

创建迭代器

要把对象/类创建为迭代器,必须为对象实现 __iter__()__next__() 方法。

正如你在 Python 类/对象 一章中学到的,所有类都有名为 __init__() 函数,它允许你在创建对象时进行一些初始化。

__iter__() Fungsi ini memiliki fungsi yang sama, Anda dapat melaksanakan operasi (inisialisasi dll), tetapi harus selalu mengembalikan objek iterator sendiri.

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

Contoh

Buat iterator 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 Contoh

StopIteration

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

Untuk menghindari iterasi yang berkelanjutan, kita dapat menggunakan StopIteration pernyataan.

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

Contoh

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 Contoh