Heim > Artikel > Backend-Entwicklung > Warum wirkt sich das Ändern der Iterationsvariablen einer For-Schleife nicht auf nachfolgende Iterationen in Python aus?
Manipulation von Iterationsvariablen in der For-Schleife von Python: Warum sich Änderungen nicht auf nachfolgende Iterationen auswirken
In Python werden For-Schleifen häufig zum Iterieren verwendet über eine Folge von Werten. Ein häufiges Missverständnis besteht jedoch darin, dass das Ändern der Iterationsvariablen während der Schleife Auswirkungen auf nachfolgende Iterationen haben kann.
Das Problem
Bedenken Sie den folgenden Python-Codeausschnitt:
for i in range(0, 10): if i == 5: i += 3 print(i)
Wenn Sie diesen Code ausführen, können Sie mit einer Ausgabe rechnen sein:
0 1 2 3 4 8 9
Stattdessen wird jedoch Folgendes erzeugt:
0 1 2 3 4 8 6 7 8 9
Erklärung
Der Grund für dieses unerwartete Verhalten liegt in wie For-Schleifen in Python funktionieren. Anders als in einigen anderen Sprachen wie C erstellt Python keinen neuen Bereich für Variablen innerhalb der Schleife. Stattdessen wird die Iterationsvariable erneut an jeden Wert in der Sequenz gebunden.
Im angegebenen Code wird der Iterator i jeder Zahl in der Sequenz range(0, 10) zugewiesen. Wenn Sie i innerhalb der Schleife ändern, ändern Sie nur den aktuellen Wert des Iterators, nicht die Sequenz selbst. Die nachfolgenden Iterationen verwenden weiterhin die ursprünglichen Werte in der Sequenz, weshalb Sie die unerwartete Ausgabe sehen.
Die Abhilfe
Um das gewünschte Verhalten zu erreichen, müssen Sie die Iteration ändern Da sich die Variable auf nachfolgende Iterationen auswirkt, können Sie stattdessen eine While-Schleife verwenden. While-Schleifen ermöglichen es Ihnen, die Iterationsvariable innerhalb der Schleife selbst manuell zu erhöhen oder zu ändern:
i = 0 while i < 10: # do stuff and manipulate `i` as much as you like if i == 5: i += 3 print(i) # don't forget to increment `i` manually i += 1
Dieser Code erzeugt die erwartete Ausgabe:
0 1 2 3 4 8 9
Das obige ist der detaillierte Inhalt vonWarum wirkt sich das Ändern der Iterationsvariablen einer For-Schleife nicht auf nachfolgende Iterationen in Python aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!