Scope / Geltungsbereich¶
Scope ist die Bezeichnung für den Geltungsbereich, d.h. wo kann welche Variable verwendet werden, wo ist sie gültig ?
Variablen, die innerhalb einer Funktion erstellt (=definiert) wurden, sind lokale Variablen. Das bedeutet, dass diese Variable nur innerhalb der Funktion verwendet werden kann. Genauer gesagt, existiert die Variable auch nur zur Laufzeit, also für die Zeit, bei der die Funktion abgearbeitet wird.
def foo():
# Eine lokale Variable
innen = "green"
foo()
print(innen)
# führt zu dem Fehler: name 'innen' is not defined
Variablen, die aber außerhalb von Funktionen, und damit also 'ganz links' im Programmcode stehen, heißen globale Variablen.
Diese Variablen können grundsätzlich überall verwendet werden, sie sollten aber nur sehr gezielt und möglichst wenig verwendet werden.
def foo():
print("Aussen", aussen)
# Eine globale Variable
aussen = "red"
foo()
Der Kritikpunkt an dieser Funktion ist die unsaubere Schnittstelle, denn sie verlässt
sich darauf, dass es eine Variable aussen gibt. Gibt es aber keine Variable mit diesem Namen,
stürzt das Programm mit einem Laufzeitfehler ab. Stattdessen hätte problemlos
ein Parameter verwendet werden können.
Ausserdem können Variablennamen versehentlich überschrieben werden, was möglicherweise zu schweren Fehlern führen kann.
Auch hier lässt uns also Python große Freiheiten, aber im Sinne von einem sicheren, gut verständlichen und gut wartbaren Programmcode sollten globale Variablen nur sehr sparsam und wohlüberlegt verwendet werden.
Manchmal werden globale Variablen benutzt, wenn ein bestimmter Wert an sehr vielen Stellen benötigt wird, aber immer gleich bleiben soll. So etwas wird als Konstante bezeichnet und häufig, ungeachtet der allgemeinen Regeln, komplett großgeschrieben.
def foo():
distance = 9 * UNIT
# Eine Konstante
UNIT = 20
foo()
Ein weiterführendes Thema, sind dann Namensräume, d.h. der lokale und der globale Namensraum, die aber hier nicht besprochen werden.