Exkurs - lokale / globale Variablen in Python
Erzeugung von Variablen
Ob eine Variable lokal oder global ist, entscheidet sich, wo sie eingeführt wird, bzw. wie sie deklariert wird.
Im folgenden Programm ist beispielsweise die Variable zahl
eine globale Variable, da sie im
Hauptprogramm durch die Zuweisung zahl = 3
erzeugt wird.
Die Variable d
ist dagegen eine lokale Variable, da sie im
Unterprogramm heron
durch die Zuweisung d = x - y
oder die Zuweisung d = y - x
erzeugt wird.
def heron(a, x, y):
x = (x + y) / 2
y = a / x
if x > y:
d = x - y
else:
d = y - x
return (x, y, d)
# Zahl, deren Wurzel bestimmt werden soll
zahl = 3
# Genauigkeit
genauigkeit = 0.001
# Seitenlaengen des Ausgangsrechtecks
(laenge, breite) = (zahl, 1)
# Betrag der Differenz der Seitelaengen
differenz = zahl - 1
while differenz > genauigkeit:
(laenge, breite, differenz) = heron(zahl, laenge, breite)
# Ausgabe der Naeherungswerte
print(laenge, breite)
Auf eine globale Variable kann in einem Unterprogramm lesend zugegriffen werden, sofern keine
gleichnamige lokale Variable existiert. Diese Situation findet man im folgenden Programm wieder:
Auf die Variable a
wird im Unterprogramm heron
lesend zugegriffen.
def heron(x, y):
x = (x + y) / 2
y = a / x
return (x, y)
# Zahl, deren Wurzel bestimmt werden soll
a = 3
# Genauigkeit
genauigkeit = 0.001
# Seitenlaengen des Ausgangsrechtecks
(laenge, breite) = (a, 1)
# Betrag der Differenz der Seitelaengen
differenz = a - 1
while differenz > genauigkeit:
(laenge, breite) = heron(laenge, breite)
if laenge > breite:
differenz = laenge - breite
else:
differenz = breite - laenge
# Ausgabe der Naeherungswerte
print(laenge, breite)
Auch wenn ein solcher Zugriff möglich ist, so sollte man ihn in aller Regel vermeiden.
Der Wert einer globale Variable kann in einem Unterprogramm nur dann verändert werden, wenn
sie dort explizit als globale Variable vereinbart ist. Im folgenden Programm wird die Variable
differenz
im Unterprogramm heron
auf diese Weise behandelt.
def heron(x, y):
global differenz
x = (x + y) / 2
y = a / x
if x > y:
differenz = x - y
else:
differenz = y - x
return (x, y)
# Zahl, deren Wurzel bestimmt werden soll
a = 3
# Genauigkeit
genauigkeit = 0.001
# Seitenlaengen des Ausgangsrechtecks
(laenge, breite) = (a, 1)
# Betrag der Differenz der Seitelaengen
differenz = a - 1
while differenz > genauigkeit:
(laenge, breite) = heron(laenge, breite)
# Ausgabe der Naeherungswerte
print(laenge, breite)
Würde man im obigen Programm die Vereinbarung global differenz
weglassen,
so gäbe es neben der globalen Variblen differenz
auch eine gleichnamige lokale Variable
differenz
. Die Veränderung des Werts der lokalen Variablen würde sich dann nicht auf die
globale Variable auswirken.
Beachte, dass man in der Regel die Veränderung der Werte von globalen Variablen innerhalb von Unterprogrammen vermeidet.
Die Gesamtheit aller lokalen und globalen Variablen kann man sich in Python mit Anweisungen
der Gestalt print(locals())
und
print(globals())
anzeigen lassen.