Προτεινόμενη εκμάθηση:

Προτεινόμενη εκμάθηση:

Python διαδραστικός αριθμητής

Ο διαδραστικός αριθμητής είναι ένα αντικείμενο που περιέχει τον αριθμητή των τιμών του.

Τεχ尼克ώς, στον Python, ο διαδραστικός αριθμητής είναι το αντικείμενο που υλοποιεί το protokόλο διαδραστικού αριθμητή, το οποίο περιέχει τις μεθόδους __iter__() και __next__().

Διαδραστικός αριθμητής VS Διαδραστικό αντικείμενο (Iterable)

Λίστες, tuples, δictionαρια και συλλογές είναι διαδραστικά αντικείμενα. Είναι διαδραστικοί κουτί, από τα οποία μπορείτε να αποκτήσετε διαδραστικούς αριθμητές (Iterator).

Όλα αυτά τα αντικείμενα έχουν μια μέθοδο για την απόκτηση διαδραστικού αριθμητή iter() Μέθοδος:

Παράδειγμα

Επιστροφή διαδραστικού αριθμητή από την tuple και εκτύπωση κάθε τιμής:

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 για να διαδραματίσουμε διαδραστικά αντικείμενα:

Παράδειγμα

Διαδραστική τιμή της τύπου tuple:

mytuple = ("apple", "banana", "cherry")
για x σε mytuple:
  print(x)

Εκτέλεση Παραδείγματος

Παράδειγμα

Διαδραστική σειρά χαρακτήρων της字符串:

mystr = "banana"
για x σε 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)

Εκτέλεση Παραδείγματος