web-dev-qa-db-de.com

Richtige Verwendung globaler Variablen in Python 3

Welches ist die richtige Verwendung globaler Variablen in Python 3 ?:

1) Geben Sie global VAR_NAME Einmal im Kernskript an (nicht innerhalb einer Funktion) und verweisen Sie dann einfach auf die Variable als VAR_NAME An allen anderen Stellen

2) Geben Sie in jeder Funktion, die die globale Variable verwendet, einmal global VAR_NAME An und verweisen Sie dann für den Rest der Funktion und innerhalb des Kernskripts selbst einfach auf die Variable als VAR_NAME

39
Eden Crow

Im ersten Fall ist das globale Schlüsselwort sinnlos, das ist also nicht korrekt. Wenn Sie eine Variable auf Modulebene definieren, wird sie zu einer globalen Variablen. Sie benötigen kein globales Schlüsselwort.

Das zweite Beispiel ist die korrekte Verwendung.

Die gebräuchlichste Verwendung für globale Variablen ist jedoch, dass das Schlüsselwort global an keiner Stelle verwendet wird. Das globale Schlüsselwort wird nur benötigt, wenn Sie die globalen Variablen in der Funktion/Methode neu zuweisen möchten.

55
Lennart Regebro

Sie müssen das Schlüsselwort global in einer Funktion verwenden, wenn Sie die globale Variable auf eine Weise verwenden, die andernfalls als Zuweisung zu einer lokalen Variablen interpretiert würde. Ohne das Schlüsselwort global erstellen Sie eine lokale Variable, die das globale Schlüsselwort im Funktionsumfang verbirgt.

Hier einige Beispiele:

global_var = 1

def example1():
    # global keyword is not needed, local_var will be set to 1.
    local_var = global_var

def example2():
    # global keyword is needed, if you want to set global_var,
    # otherwise you will create a local variable.
    global_var = 2

def example3():
    # Without using the global keyword, this is an error.
    # It's an attempt to reference a local variable that has not been declared.
    global_var += 1
44
Dan Gerhardsson

"auf eine Weise, die sonst als Zuweisung zu einer lokalen Variablen interpretiert würde" --- ja, aber hier ist ein subtiles Detail:

------------------- Fehler: Lokale Variable 'c', auf die vor der Zuweisung verwiesen wird

def work():
  c += 3

c = 0

work()
print(c)

------------------- Fehler: Lokale Variable 'c', auf die vor der Zuweisung verwiesen wird

c = 0

def work():
  c += 3

work()
print(c)

------------------- druckt [3]

def work():
  c.append(3)

c = []

work()
print(c)

------------------- druckt [3]

c = []

def work():
  c.append(3)

work()
print(c)
6
Boris T

Der Hauptunterschied zwischen den ersten beiden Fällen und den nächsten beiden Fällen in der obigen Antwort müsste die Tatsache sein, dass die Liste veränderlich ist. In Fällen wie a = 1 zeigt ein Zeiger auf die Stelle, an der sich 1 befindet, und wenn Sie a = 2 sagen, verschiebt sich der Zeiger.

Für den Fall von veränderlichen Objekten wird ein Speicherort zugewiesen, und wenn Methoden wie Anhängen verwendet werden, treten Änderungen am Speicherort selbst auf, und daher wird der Wert der veränderlichen Referenzen global geändert.

Die große Frage ist nun, wie die Funktion weiß, ob die Variable, die wir ändern, global oder lokal ist, da wir die globale Variable anscheinend ändern können, wenn sie veränderbar ist, und nicht, wenn sie nicht veränderbar ist (Die Funktion erkennt dies ebenfalls nicht als globale Variable)

1
Sharath