2011-01-13 26 views
1

ich Probleme habe mit globalen Variablen in Python ...Python globale Variable Probleme

In meinem Programm, ich habe zwei globale Variablen deklariert, globale SYNC_DATA und global SYNC_TOTAL_SIZE

nun in einem meiner Funktionen, kann ich die globale Variable SYNC_DATA verwenden, ohne sie in der Funktion wieder als global zu deklarieren; Allerdings kann ich die andere globale Variable SYNC_TOTAL_SIZE nicht auf die gleiche Weise verwenden. Ich muss das letztere als global in der Funktion erklären, um es wieder zu verwenden. Ich erhalte diesen Fehler, wenn ich ihn verwende, ohne mich in der Funktion als global zu deklarieren - "UnboundLocalError: lokale Variable 'SYNC_TOTAL_SIZE' vor der Zuweisung referenziert"

Warum kann ich manchmal auf globale Variablen zugreifen, ohne sie als global in Funktionen zu deklarieren? und manchmal nicht? Und warum müssen wir es in der Funktion erneut als global deklarieren, wenn es am Anfang schon einmal deklariert ist ... Warum überprüft die Funktion nicht einfach die Variable im globalen Namespace, wenn sie sie nicht findet sein Namensraum direkt?

Antwort

6

Angenommen SYNC_TOTAL_SIZE wird nicht als lokale Variable deklariert. Es hängt davon ab, welche Operationen Sie für globale Variablen ausführen. Wenn Sie nur die globale Variable lesen, müssen Sie sie nicht als global deklarieren. Wenn Sie jedoch den Wert der globalen Variablen ändern, müssen Sie sie mit global deklarieren.

+0

Dies funktionierte ... Ich habe den Wert von SYNC_TOTAL_SIZE in dieser Funktion geändert, während ich gerade SYNC_DATA in der anderen Funktion gelesen hatte, also erlaubte es mir, es als global zu deklarieren. Vielen Dank. –

0

Weil SYNC_TOTAL_SIZE wahrscheinlich irgendwo anders in diesem Code als nicht-global verwendet wird, was Python dazu bringt, es zu finden und zu denken, dass es nicht global ist. Ein anderer Grund könnte sein, dass Sie es nur in einer bestimmten Funktion gelesen haben und daher keine global Deklaration benötigen (siehe this question für weitere Details). Stellen Sie für eine genaue Diagnose ein minimales Code-Snippet bereit, das Ihr Problem veranschaulicht.

Der Rat ist, immer zu sagen global, wenn Sie es meinen.