Python Tutorial, Teil 4 Funktionen mit Python programmieren
Mit dem Erstellen erster einfacher Funktionen und ihrem wesentlichen Kern haben wir uns bereits vertraut gemacht. Um komplexere Python-Programme schreiben zu können, müssen wir uns aber noch eingehender mit Funktionen und Methoden befassen.
Anbieter zum Thema

Wie wir im dritten Teil dieses Tutorials gesehen haben, kann der Funktionskörper wahlweise keine, eine oder auch mehrere return-Anweisungen enthalten. Diese können an beliebiger Position des Funktionskörpers stehen.
Jede return-Anweisung beendet den Funktionsaufruf und liefert das Ergebnis desjenigen Ausdrucks, der hinter der return-Anweisung steht, an die aufrufende Stelle zurück. Wird das Ende eines Funktionskörpers erreicht, ohne dass der Interpreter auf eine return-Anweisung gestoßen ist, endet der Funktionsaufruf und es wird der Wert „none“ zurückgegeben.
Die richtigen Argumente
Unter Python lassen sich Funktionen mit einer variablen Zahl von Argumenten definieren. Konkret kennt Python hierfür drei verschiedene Methoden, die sich auch miteinander kombinieren lassen. So kann man in Python jede Funktion wahlweise
- nur mit dem vorgeschriebenen Parameter
- mit einem zusätzlichen (optionalen) Argument
- oder durch Übergeben aller Argumente aufrufen.
Am häufigsten wird die Variante verwendet, einen Standardwert für ein oder mehrere Argumente anzugeben. Das sind dann die (beim Aufruf) optionalen Argumente. Man erhält dann eine Funktion, die sich auch mit weniger Parametern aufrufen lässt, als per Definition benötigt werden. Im Bild findet sich ein Beispiel für eine Funktion mit Standard-Parameter.
Dieser optionale Parameter, auch Default-Parameter genannt, ist ein Argument, das beim Aufruf der Funktion nicht explizit angegeben werden muss. In einem solchen Fall setzt der Interpreter Default-Werte für solche Argumente ein. Folgende Funktion, die eine Message-of-the-Day anzeigt, soll dies verdeutlichen.
Keyword-Parameter
So genannte Schüsselwort-Parameter stellen eine weitere alternative Möglichkeit zum Aufrufen einer Funktion zur Verfügung. Art und Weise der Funktionsdefinition bleiben indes gleicht. Schlüsselwort-Parameter dürfen nur solche Argumente sein, die nicht schon als Positionsargumente benutzt wurden. Hierbei akzeptiert mindestens ein Argument mehrere optionale Argumente, sodass die Funktion dann in mehreren Varianten aufgerufen werden kann.
Anders ausgedrückt: beim Aufruf einer Funktion müssen Schlüsselwort-Argumente stets nach positionsabhängigen Argumenten stehen. Zudem müssen sämtliche übergebenen Schlüsselwort-Parameter stets zu einem der Argumente passen, welche die Funktion akzeptiert; die Reihenfolge ist dabei allerdings egal. Das gilt auch für nicht-optionale Argumente. Letztlich darf kein Argument mehr als einen Wert zugewiesen bekommen. Die Syntax bei Schlüsselwert-Argumenten lautet …
def my_function (arg1, arg2, **kw-args)
Jedes Keyword-Argument, das man in die Funktion leitet, wird dann quasi in ein „Wörterbuch“ mit den Namen „kw-args“ gepackt.
Das Untersuchen der Schlüssel im Wörterbuch zur Laufzeit erfolgt dann mit …
def my_function(**kw-args):
print str(kw-args)
my_function(x=5, y="abc")
{'x': 5, 'y': 'abc'}
Beliebige Anzahl von Argumenten
In der Praxis kommt es nämlich durchaus häufiger vor, dass die Anzahl der beim Aufruf benötigten Argumente vorab gar nicht bekannt ist. Auch ein solches Szenario lässt sich in Python mit Hilfe so genannter Tupel-Referenzen umsetzen. Hierbei wird dem letzten Parameter ein „*“ vorangestellt. Werfen wir einen Blick auf folgende einfache Python-Funktion, welche die (arithmetische) Summe aller gegebenen Argumente berechnet, wo bei die Anzahl der übergebenen Argumente beliebig, bzw. flexibel sein soll:
def summe (*args):
sum = 0
for x in args:
sum += x
return x
Die Funktion lässt sich jetzt mit einer beliebigen Anzahl von Parametern aufrufen, wie z. B.
print(summe(12,45,69,1246))
print(summe(123,12,79))
print(summe(79))
print(summe())
Das Angeben und Verwenden von Funktions-Argumenten kurz zusammengefasst:
- Funktions-Argumente lassen sich sehr flexibel angeben.
- Die Reihenfolge der Argumente ist nicht fest vorgeschrieben.
- Nur die Argumente, die benötigt werden, können angegeben werden.
In sehr einfacher Form lässt sich das eben Gesagte wie folgt in Form von Code verifizieren:
def myfunction (a=2,b=4,c=5):
print(“a=”,a, “b=”,b, “c=”,c)
Nun ruft man die Funktion in verschiedenen Varianten auf und verifiziert das Ergebnis:
- myfunction (20,50) liefert a=20, b=50, c=5 (offensichtlich ist c ein Default-Parameter)
- myfunction (10,c=200) liefert a=10, b=4, c=200 (offensichtlich ist b ein Default-Parameter und c ein Positions-Parameter)
- myfunction (c=70, a=40) liefert a=40, b=4, c=70 (offensichtlich werden a und c als Positions-Parameter unabhängig von ihrer Aufrufreihenfolge zurück geliefert, b hat wieder seinen Default-Wert.
- myfunction (c=5) liefert a=2, b=4, c=5, denn a und b sind hier wieder Default-Argumente und schließlich liefert
- myfunction() eigentlich „none“, none wird aber nicht explizit ausgegeben.
(ID:45188275)