Wie kann ich diese Variable in einer anderen Funktion verwenden, wenn ich in einer Funktion eine globale Variable erstelle?
Wir können eine globale mit der folgenden Funktion erstellen:
def create_global_variable():
global global_variable # must declare it to be a global first
# modifications are thus reflected on the module's global scope
global_variable = 'Foo'
Beim Schreiben einer Funktion wird der Code nicht ausgeführt. Also nennen wir die create_global_variable
Funktion:
>>> create_global_variable()
Globale ohne Änderung verwenden
Sie können es einfach verwenden, solange Sie nicht erwarten, das Objekt zu ändern, auf das es zeigt:
Zum Beispiel,
def use_global_variable():
return global_variable + '!!!'
und jetzt können wir die globale Variable verwenden:
>>> use_global_variable()
'Foo!!!'
Änderung der globalen Variablen innerhalb einer Funktion
Um die globale Variable auf ein anderes Objekt zu verweisen, müssen Sie das globale Schlüsselwort erneut verwenden:
def change_global_variable():
global global_variable
global_variable = 'Bar'
Beachten Sie, dass nach dem Schreiben dieser Funktion der tatsächlich geänderte Code immer noch nicht ausgeführt wurde:
>>> use_global_variable()
'Foo!!!'
Also nach dem Aufruf der Funktion:
>>> change_global_variable()
Wir können sehen, dass die globale Variable geändert wurde. Der global_variable
Name zeigt jetzt auf 'Bar'
:
>>> use_global_variable()
'Bar!!!'
Beachten Sie, dass "global" in Python nicht wirklich global ist - es ist nur global auf Modulebene. Es steht also nur Funktionen zur Verfügung, die in den Modulen geschrieben sind, in denen es global ist. Funktionen merken sich das Modul, in das sie geschrieben wurden. Wenn sie also in andere Module exportiert werden, suchen sie immer noch in dem Modul, in dem sie erstellt wurden, um globale Variablen zu finden.
Lokale Variablen mit demselben Namen
Wenn Sie eine lokale Variable mit demselben Namen erstellen, wird eine globale Variable überschattet:
def use_local_with_same_name_as_global():
# bad name for a local variable, though.
global_variable = 'Baz'
return global_variable + '!!!'
>>> use_local_with_same_name_as_global()
'Baz!!!'
Die Verwendung dieser falsch benannten lokalen Variablen ändert jedoch nichts an der globalen Variablen:
>>> use_global_variable()
'Bar!!!'
Beachten Sie, dass Sie die Verwendung lokaler Variablen mit denselben Namen wie Globals vermeiden sollten, es sei denn, Sie wissen genau, was Sie tun, und haben einen sehr guten Grund dafür. Auf einen solchen Grund bin ich noch nicht gestoßen.
Wir bekommen das gleiche Verhalten im Unterricht
Ein folgender Kommentar fragt:
Was tun, wenn ich eine globale Variable innerhalb einer Funktion innerhalb einer Klasse erstellen und diese Variable innerhalb einer anderen Funktion innerhalb einer anderen Klasse verwenden möchte?
Hier zeige ich, dass wir bei Methoden dasselbe Verhalten haben wie bei regulären Funktionen:
class Foo:
def foo(self):
global global_variable
global_variable = 'Foo'
class Bar:
def bar(self):
return global_variable + '!!!'
Foo().foo()
Und nun:
>>> Bar().bar()
'Foo!!!'
Ich würde jedoch vorschlagen, anstelle globaler Variablen Klassenattribute zu verwenden, um eine Überlastung des Modul-Namespace zu vermeiden. Beachten Sie auch, dass wir hier keine self
Argumente verwenden - dies können Klassenmethoden (praktisch, wenn das Klassenattribut vom üblichen cls
Argument mutiert wird ) oder statische Methoden (no self
oder cls
) sein.