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.

X

Fehler melden

X

Suche