Python Iterator

Python Iterator

Ang iterator ay isang bagay na naglalaman ng bilang ng maaaring bilangin na halaga.

Ang iterator ay isang maaaring ipasok na bagay, na nangangahulugang maaari mong magpasukan sa lahat ng halaga.

Technically habang ang Python, ang iterator ay isang bagay na nagpapatupad ng iterator protocol, na naglalaman ng mga method __iter__() at __next__().

Iterator VS Maaaring ipasok na bagay (Iterable)

list, tuple, dictionary at set ay maaaring ipasok na bagay. Sila ay maaaring ipasok na mga bagay, mula saan maaari mong kakuha ng iterator (Iterator).

Lahat ng mga bagay na ito ay mayroong paraan na makuha ang iterator iter() Method:

Halimbawa

Ibigay ang isang iterator mula sa tuple at iprint ang bawat halaga:

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

Run Halimbawa

Kahit ang string ay maaaring ipasok na bagay, at maaaring ibigay ang iterator:

Halimbawa

Ang string ay maaaring ipasok na bagay, na naglalaman ng isang serye ng mga character:

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

Run Halimbawa

Pasukan sa iterator

Maaari din nating gamitin ang for loop upang magpasukan sa maaaring ipasok na bagay:

Halimbawa

Ito ay nag-iterasyon sa mga halaga ng tuple:

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

Run Halimbawa

Halimbawa

Ito ay nag-iterasyon sa mga character ng string:

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

Run Halimbawa

Tipan:Ang for loop ay gumagawa ng isang bagay na iterator at gawin para sa bawat ekspasyon next() method.

paglilikha ng iterator

Para sa pagkakalikha ng bagay/klase bilang iterator, dapat na maisakop ng bagay ang __iter__() at __next__() method.

Tulad ng nakikita mo sa kabanata ng Python class/object, lahat ng klase ay may pangalang __init__() Ang function na nagbibigay ng kapangyarihan sa iyo na gumawa ng ilang inisyal na pagluluklok kapag gumagawa ng mga bagay.

__iter__() Ang paraan ay may magkaparehong ginagamit, maaari kang gumawa ng operasyon (inisyasyon at iba pa), ngunit dapat palaging ito ay mabalik sa parehong tagapagpadala ng object.

__next__() Ang paraan ay nagbibigay-daan din sa iyo na gumawa ng operasyon, at dapat ito ay mababalik sa susunod na bagay sa sequence.

Halimbawa

Makakapagpalabas ng isang tagapagpadala ng numero na nagbabalik ng numero, mula 1, na bawasan ang bawas sa bawas (nagbabalik ng 1, 2, 3, 4, 5 at iba pa):

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

Run Halimbawa

StopIteration

Kung mayroon kang sapat na next() pahintulot, o gamitin ito sa loob ng for loop, kung gayon ay ang halimbawa ay magpatuloy na magpatuloy.

Upang maiwasan na magpatuloy ang pag-iterasyon, maaari naming gamitin ang StopIteration pahintulot.

Sa __next__() Sa mga paraan, kung nakumpleto na ng pag-iterasyon ang itinalagang bilang, maaari naming magdagdag ng isang tuntunin ng paghinto upang itakda ang pagkakaroon ng error:

Halimbawa

Hihinto pagkatapos ng 20 na pag-iterasyon:

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
  def __next__(self):
    kung 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)

Run Halimbawa