Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erklärung, wie die for-Schleife in Python funktioniert
Wenn Sie sich über die for-Schleife in Python nicht im Klaren sind, empfehle ich Ihnen, diesen Artikel zu lesen. Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zur Funktionsweise der for-Schleife in Python ein Sehr detailliert und hat einen gewissen Referenz- und Lernwert für alle Freunde, die es brauchen, können einen Blick darauf werfen.
Vorwort
for...in ist die von Python-Programmierern am häufigsten verwendete Anweisung. Die for-Schleife wird zum Durchlaufen des Containers Objekt, diese Objekte können Listen, Tupel, Wörterbücher, Mengen, Dateien oder sogar benutzerdefinierte Klassen oder Funktionen sein, zum Beispiel:
wirkt auf Liste
>>> for elem in [1,2,3]: ... print(elem) ... 1 2 3wirkt auf Tupel
>>> for i in ("zhang", "san", 30): ... print(i) ... zhang san 30wirkt auf
>>> for c in "abc": ... print(c) ... a b cwirkt auf die Sammlung
>>> for i in {"a","b","c"}: ... print(i) ... b a cWirkt nach Wörterbuch
>>> for k in {"age":10, "name":"wang"}: ... print(k) ... age nameWirkt nach Akte
>>> for line in open("requirement.txt"): ... print(line, end="") ... Fabric==1.12.0 Markdown==2.6.7
Die for-Schleife ist der Prozess der Iteration des Containers. Was ist Iteration? Bei der Iteration werden Elemente nacheinander aus einem Containerobjekt gelesen, bis sich keine Elemente mehr im Container befinden. Welche Objekte unterstützen also iterative Operationen? Kann jedes Objekt verwendet werden? Versuchen Sie zunächst, eine Klasse anzupassen, und prüfen Sie, ob sie funktioniert:
>>> class MyRange: ... def init(self, num): ... self.num = num ... >>> for i in MyRange(10): ... print(i) ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'MyRange' object is not iterable
Iterierbare Objekte müssen die Iter-Methode implementieren und einen Iterator zurückgeben. Iteratoren müssen nur die nächste Methode implementieren. Lassen Sie uns nun überprüfen, warum die Liste die Iteration unterstützt:
>>> x = [1,2,3] >>> its = x.iter() # x有此方法,说明列表是可迭代对象 >>> its <list_iterator object at 0x100f32198> >>> its.next() # its有此方法,说明its是迭代器 1 >>> its.next() 2 >>> its.next() 3 >>> its.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIterationWie funktioniert also die for-Anweisungsschleife? Ich fürchte, Sie haben es jetzt erraten:
StopIteration behandelt diese Ausnahme selbst und macht sie nicht sichtbar an Entwickler
Dasselbe gilt für Tupel, Wörterbücher und Zeichenfolgen. Nachdem wir das Ausführungsprinzip von for verstanden haben, können wir unsere implementieren eigene Iteratoren zur Verwendung in for-Schleifen.
Der vorherige MyRange-Fehler liegt daran, dass diese beiden Methoden nicht im Iteratorprotokoll implementiert sind. Jetzt weiter verbessern:
class MyRange: def init(self, num): self.i = 0 self.num = num def iter(self): return self def next(self): if self.i < self.num: i = self.i self.i += 1 return i else: # 达到某个条件时必须抛出此异常,否则会无止境地迭代下去 raise StopIteration()
for i in MyRange(3): print(i) # 输出 0 1 2
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie die for-Schleife in Python funktioniert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!