Lokale Variablen
In einer Funktion kannst du Variablen erstellen, genau wie überall sonst. Aber eine solche Variable gibt es nur innerhalb der Funktion: Sie wird erzeugt, wenn die Funktion läuft, und verschwindet, wenn die Funktion endet. Außerhalb der Funktion kennt Python sie nicht:
def gruss_ausgeben():
nachricht = "Hallo!"
print(nachricht)
gruss_ausgeben()
print(nachricht)Das gibt aus:
Hallo!
Traceback (most recent call last):
File "<exec>", line 6, in <module>
NameError: name 'nachricht' is not definedDer Aufruf gruss_ausgeben() hat funktioniert, aber die letzte Zeile sucht nachricht außerhalb der Funktion, wo es sie nicht gibt. Mit Parametern ist es genauso: Sie existieren nur innerhalb ihrer Funktion.
Der Teil eines Programms, in dem eine Variable existiert, heißt ihr Gültigkeitsbereich (englisch scope). Eine Variable, die in einer Funktion erstellt wird, ist lokal: Sie gehört nur zu dieser Funktion. Eine Variable, die außerhalb aller Funktionen erstellt wird, kann im ganzen Programm verwendet werden, auch in Funktionen:
ladenname = "Tierecke"
def etikett_ausgeben(produkt):
print(f"{ladenname}: {produkt}")
etikett_ausgeben("Hundefutter")Das gibt aus:
Tierecke: HundefutterWarum ist es nützlich, dass lokale Variablen in ihren Funktionen bleiben?
- Funktionen kommen sich nicht in die Quere. Zwei Funktionen können jeweils eine Variable namens
gesamthaben, und das sind zwei verschiedene Variablen: Wenn du die eine änderst, ändert sich die andere nicht. - Um eine Funktion zu benutzen, musst du nur wissen, was du ihr gibst (die Argumente) und was sie zurückgibt (den Rückgabewert). Wie sie innen arbeitet, ist ihre eigene Sache.
- Jeder Aufruf beginnt von vorn: Die Variablen der Funktion werden neu erstellt, und nichts vom vorigen Aufruf bleibt übrig.
Eine Funktion kann eine Variable von außen lesen, aber nicht einfach ändern. Wenn du innerhalb einer Funktion einer Variablen einen Wert zuweist, erstellt Python eine neue lokale Variable, auch wenn es außen eine mit demselben Namen gibt:
punkte = 10
def punkte_zuruecksetzen():
punkte = 0
punkte_zuruecksetzen()
print(punkte)Das gibt aus:
10Die Funktion hat ihre eigene lokale Variable punkte erstellt und auf 0 gesetzt, aber die punkte außerhalb blieben 10. (Und punkte += 1 innerhalb der Funktion würde sogar mit einem Fehler enden, UnboundLocalError.)
Die Regel ist also einfach: Werte gehen über die Parameter in eine Funktion hinein und kommen mit return heraus. Wenn du einen Wert aus dem Inneren einer Funktion brauchst, greife nicht nach ihrer Variablen. Gib den Wert zurück und speichere ihn dort, wo du die Funktion aufrufst.
So schreibst du es:
Anweisungen
- 1
Das Programm endet mit dem Fehler
NameError: name 'gesamt' is not defined, weilgesamtnur innerhalb der Funktion existiert. Korrigiere das: Gibgesamtaus der Funktion zurück. Speichere unterhalb der Funktion das Ergebnis des Aufrufsgesamtpreis(25, 4)in einer Variablenrechnungund gibrechnungstattgesamtaus. Das Programm gibt100aus. - 2
Jede Bestellung kostet zusätzlich
5für die Lieferung. Gib der Funktion einen dritten Parameterlieferungmit dem Standardwert5und addiere ihn innerhalb der Funktion zum Gesamtpreis. Das Programm gibt dann105aus.