مفهوم الم迭代ر في Python

مفهوم الم迭代ر في Python

الم迭代ر هو كائن يحتوي على عدد قابلة للعد من القيم.

الم迭代ر هو عنصر قابل للإ迭代، مما يعني أنه يمكنك استكشاف جميع القيم.

من الناحية التقنية، في Python، الم迭代ر هو كائن يحتوي على بروتوكول الم迭代ر، يحتوي على __iter__() و __next__().

مفهوم الم迭代ر VS العنصر القابل للإ迭代 (Iterable)

القوائم والمكونات، الملفات والمجموعات القابلة للإ迭代. إنها كؤوس قابلة للإ迭代، يمكنك الحصول منها على الم迭代ر (Iterator).

جميع هذه الكائنات تحتوي على طريقة للحصول على الم迭代ر iter() الطريقة:

实例

من التكوين عودة إلى الم迭代ر، وطباعة كل قيمة:

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

运行实例

حتى النصوص أيضًا كائنات قابلة للإ迭代، يمكنها العودة إلى الم迭代ر:

实例

النصوص أيضًا كائنات قابلة للإ迭代، تحتوي على سلسلة من الحروف:

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

运行实例

استكشاف الم迭代ر

يمكننا أيضًا استخدام حلقة for لاستكشاف العناصر القابلة للإ迭代:

实例

التحويل إلى القيم الموجودة في التكوين:

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

运行实例

实例

التحويل إلى حروف النص الموجودة في النص:

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

运行实例

نصيحة:for 循环 في الواقع يخلق كائنًا متاحًا للإ迭代، ويقوم بتنفيذ next() الوظيفة.

إنشاء الم迭代ر

لإنشاء كائن/فئة كم迭代ر، يجب تنفيذ __iter__() و __next__() الوظيفة.

كما تعلمت في فصل Python 类/كائن، جميع الكلاسات تحتوي على اسم __init__() الوظيفة، التي تسمح لك بعمل بعض التوليد عند إنشاء الكائن.

__iter__() 方法的作用相似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。

__next__() 方法也允许您执行操作,并且必须返回序列中的下一个项目。

实例

创建一个返回数字的迭代器,从 1 开始,每个序列将增加 1(返回 1、2、3、4、5 等):

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))

运行实例

StopIteration

如果你有足够的 next() 语句,或者在 for 循环中使用,则上面的例子将永远进行下去。

为了防止迭代永远进行,我们可以使用 StopIteration 语句。

__next__() 方法中,如果迭代完成指定的次数,我们可以添加一个终止条件来引发错误:

实例

在 20 个迭代之后停止:

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)

运行实例