Übersicht
Iteratoren sind eine Möglichkeit, auf die Elemente einer Sammlung zuzugreifen. Das Iteratorobjekt beginnt mit dem Zugriff vom ersten Element der Sammlung, bis auf alle Elemente zugegriffen wurde. Iteratoren können nur vorwärts und nicht rückwärts gehen.
Lazy Evaluation oder Lazy Evaluation (Lazy Evaluation)
Iteratoren erfordern nicht, dass Sie alle Elemente im gesamten Iterationsprozess im Voraus vorbereiten. Ein Element wird nur ausgewertet, wenn zu ihm iteriert wird. Davor oder danach existiert das Element möglicherweise nicht oder wird zerstört. Aufgrund dieser Funktion eignet es sich besonders zum Durchsuchen großer oder unendlicher Sammlungen.
Heute habe ich eine Entitätsklasse erstellt, ungefähr wie folgt:
class Account(): def __init__(self, account_name, account_type, account_cost, return_amount=0): self.account_name = account_name # 账户名 self.account_type = account_type # 账户类型 self.account_cost = account_cost # 月结费用 self.return_amount = return_amount # 返还金额
Dann erstellen Sie eine Entitätsliste:
accounts = [Account("张三", "年费用户", 450.00, 50), Account("李四", "月结用户", 100.00), Account("杨不悔", "月结用户", 190.00, 25), Account("任我行", "月结用户", 70.00, 10), Account("凌未风", "年费用户", 400.00, 40)]
Ich möchte die Funktion next()
ausführen, also „next“, wenn nötig, um das nächste Element abzurufen in der Liste ein Element.
Testen Sie es direkt:
Es stellt sich heraus, dass List die Funktion next()
nicht unterstützt. Derzeit ist List nur ein iterierbarer und kein Iterator.
Der Unterschied zwischen iterable und iterator ist wie folgt:
iterable – implementiert nur __iter__-Objekte
iterator – ein Objekt, das sowohl die Methoden __iter__ als auch __next__ implementiert.
Unter anderem gibt __iter__
das Iteratorobjekt zurück und __next__
gibt das nächste Element des Iterationsprozesses zurück.
1. Machen Sie die Liste zu einem Iterator
Um die vorherige Kontenliste zu einem Iterator zu machen, genügt eine einfache iter()
-Funktion:
accounts_iterator = iter(accounts) (next(accounts_iterator)).account_name
Das Ergebnis ist wie folgt:
So eine einfache Funktion, ich denke, es gibt noch viele Pythons Entwickler Wissen Sie nicht?
2. Benutzerdefiniertes Iteratorobjekt
Wie definiere ich im Hinblick auf die Erweiterung mein eigenes Iteratorobjekt? Tatsächlich bedeutet es, die Methoden __iter__
und __next__
gemäß der obigen Definition zu implementieren.
Als nächstes definieren wir eine AccountIterator-Klasse:
class AccountIterator(): def __init__(self, accounts): self.accounts = accounts # 账户集合 self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.accounts): raise StopIteration("到头了...") else: self.index += 1 return self.accounts[self.index-1]
Das laufende Ergebnis ist wie folgt:
Nach einer Weile des Herumwerfens wurde die Funktion next() realisiert. Python hat viele unerwartete Funktionen, die noch darauf warten, dass wir sie weiter erforschen. Vielleicht ist das der Charme und die Geekigkeit von Python.
Weitere Beispiele für Methoden zur Implementierung von Iteratoren in Python und verwandte Artikel finden Sie auf der chinesischen PHP-Website!