Was ist bei der Verwendung der gleichen Variablen in zwei Ebenen-Schleifen in Python passiert?

7

Ich teste den folgenden Code:

%Vor%

und die Ausgabe ist:

%Vor%

Ich verstehe nicht, warum in der äußeren Schleife i 4 ist, aber die äußere Schleife noch 3 mal läuft. Es scheint, dass die Variable i in der print "outer i: %d"%(i) -Zeile die i in der inneren Schleife ist, aber wenn sie zu for i in range(3) geht, benutzt sie das i in der äußeren Schleife.

Jeder kann das erklären? Es ist jetzt ein wenig verwirrend für mich.

    
ningyuwhut 17.11.2017, 10:01
quelle

6 Antworten

13

Es ist dasselbe i , Python hat keinen Blockbereich . Zu Beginn jeder for-Schleife-Iteration weisen Sie den nächsten Wert im Iterator i zu. Python for-Schleifen sind nicht wie C / Java for-Schleifen, sie sind foreach Schleifen. Das fahre fort, bis der Iterator erschöpft ist (oder du irgendwie break outest). Eine for-Schleife entspricht der folgenden while-Schleife:

%Vor%

Also ist Ihre geschachtelte Schleife das Äquivalent dazu:

%Vor%

Beachten Sie, dass eine C / Java-for-Schleife, z. B.:

%Vor%

wäre in Python:

%Vor%

Mit anderen Worten, der classic-for-loop hängt von i ab, dh die Abbruchbedingung hängt vom Wert von i ab. In einer for-each-Schleife hängt die Abbruchbedingung jedoch vom Iterator ab. Und es spielt keine Rolle, was Sie mit der Variable im Body tun. Zu Beginn jeder Iteration wird ihr der nächste Wert des Iterators zugewiesen.

    
juanpa.arrivillaga 17.11.2017 10:12
quelle
6

In der inneren Schleife weisen Sie i eine andere Variable zu. Da es sich um dieselbe Variable handelt, wird immer 4 (der letzte Wert, der in der inneren Schleife zugewiesen wurde) ausgegeben. Wenn Sie jedoch zur nächsten Iteration der äußeren Schleife gehen, wird sie auf den nächsten Wert gesetzt (d. H. 2 für die zweite äußere Schleife). Sie sollten die äußere Schleife vor der inneren Schleife drucken, um den Effekt deutlicher zu sehen:

%Vor%     
mrCarnivore 17.11.2017 10:07
quelle
3

Beachten Sie, dass die Ausgabe immer

ist %Vor%

für jede äußere Schleife.

Das Programm nimmt den endgültigen Wert von i in jeder Iteration an.

ie. Wenn die äußere Schleife die Ausführung startet, ist i entweder 0, 1 oder 2, aber der Wert von i wird in der inneren for-Schleife geändert, die gedruckt wird.

Aktualisierung:

%Vor%

Ausgabe

%Vor%     
Van Peer 17.11.2017 10:06
quelle
2

Es gibt nur ein i , nicht zwei. Wenn die innere Schleife eingegeben wird, ändert sie i und ändert sie solange, bis die innere Schleife beendet ist. Die nächste Iteration der äußeren Schleife setzt dann i auf den nächsten Wert in ihrem Bereich, aber Sie sehen es nie, weil Sie sofort wieder die innere Schleife betreten, wobei sich i wieder ändert.

Das ist natürlich eine sehr schlechte Übung. Sie sollten die Variable niemals in einer for -Schleife ändern, solange diese Schleife aktiv ist.

    
Tom Karzes 17.11.2017 10:08
quelle
2

Es ist dasselbe, das ich in beiden Schleifen verwende. Wenn die äußeren Schleifen eine Chance bekommen, i zu drucken, wird immer der letzte zugewiesene Wert von der inneren Schleife erhalten.

    
heltonbiker 17.11.2017 10:08
quelle
1

Überprüfen Sie @ Heltonbiker Antwort:

%Vor%

Sie haben i data zur falschen Zeit (Ort) gelesen!

Wenn es ein einzelnes BUS oder Variable name gibt Sie müssen die Methode FIFO verwenden.

FIFO & lt; & lt; Hier Informationen

    
dsgdfg 17.11.2017 10:21
quelle

Tags und Links