Heim > Backend-Entwicklung > Python-Tutorial > Beispiel einer Methode zur Implementierung eines Iterators in Python

Beispiel einer Methode zur Implementierung eines Iterators in Python

高洛峰
Freigeben: 2017-02-23 15:47:22
Original
1885 Leute haben es durchsucht

Ü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 # 返还金额
Nach dem Login kopieren

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)]
Nach dem Login kopieren

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:

Beispiel einer Methode zur Implementierung eines Iterators in Python

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:

  1. iterable – implementiert nur __iter__-Objekte

  2. 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
Nach dem Login kopieren

Das Ergebnis ist wie folgt:

Beispiel einer Methode zur Implementierung eines Iterators in Python

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]
Nach dem Login kopieren

Das laufende Ergebnis ist wie folgt:

Beispiel einer Methode zur Implementierung eines Iterators in Python

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage