Global erstelllte global Variable nicht gleich Global
-
Ich verstehe hier was bei Python nicht.
Wieso wenn ich
global data data = None
mache, wird dann nicht eben erstellte Variable in
def funk(): data = ""
genutzt, sondern die Variable in def funk() noch einmal neu erstellt?
Wenn ich an vielen Orten globale Variablen erst in den
def
s per
global
erstelle, ist das doch eine hohe verwirrungsgefahr, wenn dann eine globale Variable aus einer def irgendwo global benutzt wird.
Kann man in Python vielleicht erst
def
s mit globalen Variablen bekanntmachen? Etwas so:
def Name(): global Name global Name
Und erst anderswo richtig
def Name(): print "" Andere = ""
machen?
-
Dein Beitrag ist etwas konfus.
Deshalb nur eine kurze Erklaerung zu globalen Variablen in Python.
Eine Zuweisung zu einer Variablen gilt immer fuer den aktuellen Scope.
foo="" def test(): foo="bar"
Hier wird in test ein lokales foo erstellt. Denn Zuweisung wirkt immer auf dem engsten Scope. Um nun dem globalen foo etwas zuweisen zu koennen, muss man das explizit angeben:
def test(): global foo foo="bar"
Damit wird explizit gesagt, dass foo in einem anderen Scope lebt und dieser verwendet werden soll.
Was das ganze etwas verwirrend macht ist, dass lesen von Variablen aber sehr wohl in den naechst hoeheren Scope weiter sucht. Sprich
foo="bar" def test(): print foo
wuerde "bar" ausgeben.
Die Idee von Python ist die, dass man nicht aus versehen globale Variablen ueberschreiben kann. Man kann aber ohne Probleme von ihnen lesen.
Zur absicherung ist folgendes uebrigens nicht legal"
foo="bar" def test(): print foo foo="baz"
da foo="baz" eine Zuweisung ist, wird im lokalen Scope ein foo erstellt und print foo bezieht sich nun darauf. Und es kommt der Fehler dass von foo gelesen wird, bevor etwas zugewiesen war.
Ich hoffe damit ist deine Frage - die ich leider nicht verstanden habe - beantwortet. Wenn nicht, frag einfach nochmal