In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erklärung von Iterator- und Generatorinstanzen in Python vorgestellt. Freunde, die sie benötigen, können sich auf
Detaillierte Erklärung von Iterator- und Generatorinstanzen in Python beziehen
Dieser Artikel fasst einige verwandte Kenntnisse über Iteratoren und Generatoren in Python zusammen, indem er sich wie folgt auf verschiedene Anwendungsszenarien und ihre Lösungen konzentriert:
1. Iteratoren manuell durchlaufen
Anwendungsszenario: Sie möchten alle Elemente in einem iterierbaren Objekt durchlaufen, aber keine for-Schleife verwenden.
Lösung: Verwenden Sie die Funktion next() und Catching die StopIteration-Ausnahme
def manual_iter(): with open('/etc/passwd') as f: try: while True: line=next(f) if line is None: break print(line,end='') except StopIteration: pass
#test case items=[1,2,3] it=iter(items) next(it) next(it) next(it)
2. Agent-Iteration
Anwendungsszenario: Sie möchten Iterationsoperationen direkt an einem Containerobjekt ausführen, das eine Liste, ein Tupel oder ein anderes iterierbares Objekt enthält.
Lösung: Definieren Sie eine iter()-Methode, um die Iterationsoperation an das darin enthaltene Objekt weiterzuleiten der Container
Beispiel:
class Node: def init(self,value): self._value=value self._children=[] def repr(self): return 'Node({!r})'.fromat(self._value) def add_child(self,node): self._children.append(node) def iter(self): #将迭代请求传递给内部的_children属性 return iter(self._children)
#test case if name='main': root=Node(0) child1=Node(1) child2=Nide(2) root.add_child(child1) root.add_child(child2) for ch in root: print(ch)
3. Iteration umkehren
Anwendungsszenario: Sie möchten eine Sequenz umgekehrt iterieren
Lösung: Verwenden Sie die integrierte Funktion reversed() oder passen Sie sie an. Implementieren Sie reversed() auf der Klasse 🎜>
4. Selektive Iteration
a=[1,2,3,4] for x in reversed(a): print(x) #4 3 2 1 f=open('somefile') for line in reversed(list(f)): print(line,end='') #test case for rr in reversed(Countdown(30)): print(rr) for rr in Countdown(30): print(rr)
Lösung: itertools.dropwhile() verwenden
Beispiel 1
class Countdown: def init(self,start): self.start=start #常规迭代 def iter(self): n=self.start while n > 0: yield n n -= 1 #反向迭代 def reversed(self): n=1 while n <= self.start: yield n n +=1
Beispiel 2
5. Mehrere Sequenzen gleichzeitig iterieren
with open('/etc/passwd') as f: for line in f: print(line,end='')
Lösung: Verwenden Sie die zip()-Funktion
from itertools import dropwhile with open('/etc/passwd') as f: for line in dropwhile(lambda line:line.startwith('#'),f): print(line,end='')
Anwendungsszenarien: Gesucht um den gleichen Vorgang an mehreren Objekten auszuführen, aber diese Objekte befinden sich in unterschiedlichen Containern
Lösung: Verwenden Sie die Funktion itertool.chain()
7. Verschachtelte Sequenz erweitern
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Iterator- und Generatorinstanzen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!