Variablen¶
Lokale Variablen¶
Hier kehren wir zur Definition von fact
vom Anfang dieses
Funktionen-Kapitels zurück:
def fact(n):
"""Return the factorial of the given number."""
f = 1
while n > 0:
f = f * n
n = n - 1
return f
Sowohl die Variablen f
als auch n
sind lokal für einen bestimmten Aufruf
der Funktion fact
; Änderungen an ihnen, die während der Ausführung der
Funktion vorgenommen werden, haben keine Auswirkungen auf Variablen außerhalb
der Funktion. Alle Variablen in der Parameter-Liste einer Funktion und alle
Variablen, die innerhalb einer Funktion durch eine Zuweisung erzeugt werden, wie
z.B. f = 1
, sind für die Funktion lokal:
>>> fact(3)
6
>>> f
Traceback (most recent call last):
File "<python-input-27>", line 1, in <module>
f
NameError: name 'f' is not defined
>>> n
Traceback (most recent call last):
File "<python-input-28>", line 1, in <module>
n
NameError: name 'n' is not defined
Globale Variablen¶
Ihr könnt eine Variable explizit zu einer globalen Variable machen, indem ihr sie mit der global-Anweisung deklariert, bevor sie verwendet wird. Globale Variablen können von der Funktion angesprochen und geändert werden. Sie existieren außerhalb der Funktion und können auch von anderen Funktionen, die sie als global deklarieren, oder von Code, der sich nicht innerhalb einer Funktion befindet, aufgerufen und geändert werden. Hier ein Beispiel, das den Unterschied zwischen lokalen und globalen Variablen verdeutlicht:
def my_func():
global x
x = 1
y = 2
>>> x = 3
>>> y = 4
>>> my_func()
>>> x
1
>>> y
4
In diesem Beispiel wird eine Funktion definiert, die x
als globale Variable
und y
als lokale Variable behandelt und versucht, sowohl x
als auch
y
zu ändern. Die Zuweisung an x
innerhalb von my_func
ist eine
Zuweisung an die globale Variable x
, die auch außerhalb von my_func
existiert. Da x
in my_func
als global bezeichnet wird, ändert die
Zuweisung diese globale Variable so, dass sie den Wert 1
anstelle des Wertes
3
beibehält. Dasselbe gilt jedoch nicht für y
; die lokale Variable y
innerhalb von my_func
verweist zunächst auf denselben Wert wie die Variable
y
außerhalb von my_func
, aber die Zuweisung bewirkt, dass y
auf
einen neuen Wert verweist, der für die Funktion my_func
lokal ist.
Nicht-lokale Variablen¶
Während global für eine Variable der obersten Ebene verwendet wird, bezieht sich nonlocal auf jede Variable in einem umschließenden Bereich:
def enclosing():
x = "Enclosing function variable"
def enclosed():
nonlocal x
x = "Enclosed function variable"
enclosed()
print(x)
>>> enclosing()
Enclosed function variable
Siehe auch
Checks¶
Angenommen,
x = 1
,func()
setze die lokale Variablex
auf2
undgfunc()
die globale Variablex
auf3
, welchen Wert nimmtx
an, nachdemfunc()
undgfunc()
durchlaufen wurden?