Wenn ich in einer Funktion eine globale Variable erstelle, wie kann ich diese Variable in einer anderen Funktion verwenden?
Mit der folgenden Funktion können wir ein Global 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'
Wenn Sie eine Funktion schreiben, wird ihr Code nicht tatsächlich ausgeführt. Wir rufen also die create_global_variable
Funktion:
>>> create_global_variable()
Verwendung von Globals ohne Änderung
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 richten, müssen Sie erneut das Schlüsselwort global verwenden:
def change_global_variable():
global global_variable
global_variable = 'Bar'
Beachten Sie, dass nach dem Schreiben dieser Funktion der Code, der sie tatsächlich ändert, noch nicht ausgeführt wurde:
>>> use_global_variable()
'Foo!!!'
Also nach dem Aufruf der Funktion:
>>> change_global_variable()
können wir sehen, dass die globale Variable geändert wurde. Die global_variable
name zeigt nun auf 'Bar'
:
>>> use_global_variable()
'Bar!!!'
Beachten Sie, dass "global" in Python nicht wirklich global ist - es ist nur global für die Modulebene. Es ist also nur für Funktionen verfügbar, die in den Modulen geschrieben wurden, in denen es global ist. Funktionen merken sich das Modul, in dem sie geschrieben wurden. Wenn sie also in andere Module exportiert werden, suchen sie weiterhin in dem Modul, in dem sie erstellt wurden, nach globalen Variablen.
Lokale Variablen mit demselben Namen
Wenn Sie eine lokale Variable mit demselben Namen erstellen, überschattet diese eine globale Variable:
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!!!'
Aber die Verwendung dieser falsch benannten lokalen Variablen ändert die globale Variable nicht:
>>> use_global_variable()
'Bar!!!'
Beachten Sie, dass Sie es vermeiden sollten, lokale Variablen mit demselben Namen wie globale Variablen zu verwenden, es sei denn, Sie wissen genau, was Sie tun, und haben einen sehr guten Grund dafür. Ein solcher Grund ist mir noch nicht begegnet.
Das gleiche Verhalten zeigt sich im Unterricht
In einem Folgekommentar wird gefragt:
Was ist zu tun, wenn ich eine globale Variable in einer Funktion innerhalb einer Klasse erstellen und diese Variable in einer anderen Funktion innerhalb einer anderen Klasse verwenden möchte?
Hier zeige ich, dass wir in Methoden das gleiche Verhalten wie in regulären Funktionen erhalten:
class Foo:
def foo(self):
global global_variable
global_variable = 'Foo'
class Bar:
def bar(self):
return global_variable + '!!!'
Foo().foo()
Und jetzt:
>>> Bar().bar()
'Foo!!!'
Ich würde jedoch vorschlagen, statt globaler Variablen Klassenattribute zu verwenden, um den Modul-Namensraum nicht zu überfrachten. Beachten Sie auch, dass wir nicht self
Argumente hier - dies könnten Klassenmethoden sein (praktisch, wenn man das Klassenattribut von der üblichen cls
Argument) oder statische Methoden (kein self
o cls
).
0 Stimmen
Unabhängig davon, wo Sie "global" vor dem Variablennamen erwähnt haben, kann sie überall wie eine normale lokale Variable verwendet werden, sobald Python sie als mit dem Schlüsselwort "global" gelesen hat. Aber es ist eine sehr schlechte Idee, es sei denn, die Variable ist für das gesamte Projekt gemeinsam. Zum Beispiel: project_name, database_url