Funktionsaufruf aktualisiert globale Variable nicht
Diese Frage untersucht eine Programmierherausforderung, bei der eine globale Variable, die ursprünglich als „Falsch“ zugewiesen wurde, nicht aktualisiert wird. t wird aktualisiert, wenn innerhalb einer Funktion darauf verwiesen wird. Obwohl die Funktion den Wert der globalen Variablen ändert, wird die Schleife des Hauptprogramms weiter ausgeführt, was zu einer Endlosschleife führt. Um dieses Problem zu verstehen, muss man sich mit dem Konzept von Namespaces und Variablenbereich befassen.
Namespace und Variablenbereich
Bei der Programmierung erstellt jede Funktion und jedes Modul seinen eigenen Namespace. Ein Namespace ist eine Sammlung von Namen (Variablen, Funktionen usw.), die innerhalb dieses Bereichs bekannt und zugänglich sind. Wenn einer Variablen innerhalb einer Funktion ein Wert zugewiesen wird, wird eine neue Variable im Namensraum der Funktion erstellt, auch wenn eine globale Variable mit demselben Namen vorhanden ist.
Verwenden globaler Variablen
Wenn in diesem Fall innerhalb der Funktion auf eine globale Variable namens „done“ verwiesen wird, wird eine neue lokale Variable mit demselben Namen im Namensraum der Funktion erstellt. Dieses lokale „erledigt“ unterscheidet sich vom globalen „erledigt“. Das Ändern des lokalen „done“ hat keine Auswirkung auf die globale Variable.
Lösung
Um dies zu umgehen, muss das globale Schlüsselwort verwendet werden, um explizit auf die globale Variable darin zu verweisen die Funktion. Durch die Verwendung von global done weist die Funktion den Interpreter an, auf die globale Variable „done“ zuzugreifen, anstatt eine neue lokale Variable zu erstellen.
Geänderter Code
Um das Problem zu beheben , die Funktion kann wie folgt geändert werden:
def function():
global done
for loop:
code
if not comply:
done = True
Explanation
Mit global done wird eine Verbindung zwischen der in der Funktion verwendeten Variablen und der globalen Variable hergestellt. Wenn die Funktion den Wert von done ändert, aktualisiert sie dieselbe globale Variable, auf die ursprünglich verwiesen wurde. Dadurch wird sichergestellt, dass die While-Schleife des Hauptprogramms wie vorgesehen beendet wird, wenn die Funktion done auf True setzt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3