Python 迭代器

Python 迭代器

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

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

Daga techniki, a Python, kewaye fariya yana da hukuncin kewaye fariya, wanda ke cikin hukuncin kewaye fariya, wanda ke cikin __iter__() da __next__().

Iterator VS kewaye fariya (Iterable)

List, tuple, dictionary da collection suna da amfani da kewaye fariya. Ana calla su a kewaye fariya, kuma zai iya samun kewaye fariya (Iterator).

Doka doka na wa wa kewaye fariya: iter() Hukumanci:

Tashin

Ka kewaye fariya daga nau'in fariya, kuma ya bada sabon nau'in fariya:

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

Sake Karrama Tashin

Kodayake littafin kuma yana da amfani da kewaye fariya, kuma zai iya kafa kewaye fariya:

Tashin

Littafin kuma yana da amfani da kewaye fariya, wanda ke cikin kewaye fariya:

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

Sake Karrama Tashin

ka kewaye fariya

A halin yanzu, a kewaye fariya wanda ke cikin kewaye fariya:

Tashin

ka kewaye fariya nau'in fariya:

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

Sake Karrama Tashin

Tashin

ka kewaye fariya littafin da ke cikin fariya:

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

Sake Karrama Tashin

Tip:for a gudanarwa ka kewaye fariya kuma ya kafa kewaye fariya na fariya ga kowane aiki gudanarwa next() hukumanci.

ka kewaye fariya

Doni samun object/class a kafin yin samun kaiwa kewaye, ya kamata ina yin amfani da __iter__() da __next__() hukumanci.

Daga kamar yadda a ka ta ce ta amfani da Python class/object a babban wasan kwarewa, kowane class su da sunan __init__() funtan, wanda ka ya kada kafin yin fariya wanda ya kewaye kada a kafin yin samun kaiwa object.

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

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

Tashin

创建一个返回数字的迭代器,从 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))

Sake Karrama Tashin

StopIteration

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

为了防止迭代永远进行,我们可以使用 StopIteration sauyi.

da __next__() Dake kuma, idan iteration ya kammala kowane yawan, ake yi imanin yin hanyar zuriyar ra'ayi:

Tashin

A kammala 20 iteration:

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)

Sake Karrama Tashin