Wenn du eine Variable in Python erstellst, ist sie nicht überall in deinem Programm verfügbar. Der Gültigkeitsbereich (englisch: scope) einer Variable legt fest, von wo aus du auf sie zugreifen kannst. Wenn du das nicht verstehst, kann dein Programm sich auf seltsame Weise verhalten oder Fehler produzieren, die schwer zu finden sind.
Lokaler Gültigkeitsbereich
Eine Variable, die innerhalb einer Funktion definiert wird, hat einen lokalen Gültigkeitsbereich. Sie existiert nur, solange die Funktion ausgeführt wird, und verschwindet danach wieder.
def berechne_flaeche(breite, hoehe):
flaeche = breite * hoehe # lokale Variable
return flaeche
berechne_flaeche(5, 3)
print(flaeche) # Fehler! 'flaeche' existiert hier nicht
Die Variable flaeche ist nur innerhalb von berechne_flaeche sichtbar. Außerhalb der Funktion kennt Python sie nicht.
Globaler Gültigkeitsbereich
Eine Variable, die außerhalb aller Funktionen definiert wird, hat einen globalen Gültigkeitsbereich. Sie ist im gesamten Programm sichtbar.
spielerpunkte = 0 # globale Variable
def punkte_hinzufuegen(anzahl):
print(f"Aktuelle Punkte: {spielerpunkte}") # lesbar, kein Problem
punkte_hinzufuegen(10)
Du kannst eine globale Variable in einer Funktion lesen, ohne sie zu deklarieren. Wenn du sie jedoch verändern möchtest, musst du das Schlüsselwort global verwenden — andernfalls erstellt Python einfach eine neue lokale Variable mit demselben Namen.
Globale Variable in einer Funktion ändern
punkte = 0 # global
def tor_schiessen():
global punkte # Python anweisen, die globale Variable zu verwenden
punkte += 1
tor_schiessen()
tor_schiessen()
print(punkte) # 2
Ohne global punkte würde Python eine neue lokale Variable punkte erstellen, und die globale Variable bliebe unverändert bei 0.
Es ist generell besser, globale Variablen zu vermeiden und stattdessen Rückgabewerte zu nutzen. Globale Variablen können schwer nachzuverfolgen sein, wenn dein Programm größer wird.
Warum ist das wichtig?
Betrachte dieses Beispiel mit zwei Funktionen, die denselben Variablennamen verwenden:
def funktion_a():
zahl = 10 # lokal in funktion_a
print(f"In A: {zahl}")
def funktion_b():
zahl = 99 # lokal in funktion_b, unabhängig von funktion_a
print(f"In B: {zahl}")
funktion_a() # In A: 10
funktion_b() # In B: 99
Jede Funktion hat ihre eigene zahl-Variable. Sie beeinflussen sich gegenseitig nicht — das ist einer der Vorteile des lokalen Gültigkeitsbereichs.
Wenn du eine Variable benennst, die genauso heißt wie eine globale Variable, und sie in einer Funktion verwendest, ohne global zu deklarieren, kann das zu verwirrenden Fehlern führen. Python behandelt sie als komplett getrennte Variablen.
Zusammenfassung
| Gültigkeitsbereich | Wo definiert | Wo sichtbar |
|---|---|---|
| Lokal | Innerhalb einer Funktion | Nur in dieser Funktion |
| Global | Außerhalb aller Funktionen | Im gesamten Programm |
Übungsaufgaben
Was gibt der folgende Code aus, und warum? def test(): x = 5 / test() / print(x)
Antwort anzeigen
Ein Schüler möchte eine globale Variable 'leben' in einer Funktion um 1 verringern. Er schreibt: def verliere_leben(): leben -= 1. Was fehlt und warum?