Im Laufe dieser Tutorial-Reihe haben wir bereits immer wieder Python Funktionen verwendet (z.B. die print-Funktion). Diese kannst du zwar schon anwenden, aber du weißt vermutlich noch nicht, was sich hinter dem Konzept von Funktionen verbirgt. Genau das werden wir uns nun in diesem Blog-Artikel ansehen. Neben dem Konzept von Python Funktionen wirst du auch erfahren, wie du diese selbst programmieren kannst.
Inhaltsverzeichnis
1. Was sind Python Funktionen?
Funktionen ermöglichen es uns, den Code innerhalb unserer Programme besser zu strukturieren. So können wir einzelne Funktionalitäten unseres Programms in jeweils unterschiedliche Funktionen auslagern.
Eine Funktion kann man sich als eine Art Unterprogramm vorstellen, welches man über den entsprechenden Funktionsnamen aufrufen kann. Wenn das erfolgt, werden alle Anweisungen der Funktion der Reihe nach ausgeführt. Anschließend wird der Programmverlauf ganz normal fortgesetzt.
2. Die print-Funktion
Ein bekanntes Beispiel, welches wir innerhalb der vergangenen Beiträge bereits des Öfteren gesehen haben, ist die print-Funktion. Bei dieser handelt es sich um eine sogenannte Built-in Funktion von Python. Das bedeutet anders gesagt, dass wir diese nicht selbst programmieren müssen, sondern diese seitens Python bereits zur Verfügung gestellt wird.
Wir könnten diese print-Funktion beispielhaft aufrufen und dabei den String „Das ist eine Ausgabe“ übergeben. Mit der Ausführung dieses Programms erhalten wir nachfolgende Ausgabe:
Das bedeutet konkrekt: Die print-Funktion führt, nachdem wir sie aufgerufen haben, im Hintergrund zahlreiche Anweisungen aus. Diese sorgen dafür, dass eine Ausgabe auf der Konsole ermöglicht wird. Eine Konsolenausgabe an sich ist also auch ein kleines Unterprogramm.
Wir müssen die komplexe Logik, die sich hinter der print-Funktion verbirgt, also nicht jedes Mal selbst programmieren. Stattdessen können wir einfach nur die print-Funktion aufrufen, die diese Arbeit dann für uns im Hintergrund durch ein kleines Unterprogramm erledigt.
Das heißt: Man muss den Code, der im Hintergrund durch die print-Funktion ausgeführt wird, nicht einmal verstehen. Wichtig zu wissen ist nur, was die Python Funktion uns nach dem Aufruf zurückliefert. Im aktuellen Beispiel ist das eben eine Ausgabe auf der Konsole.
3. Eigene Funktionen definieren
Neben den Built-in Funktionen wie etwa der print- oder der type-Funktion ist es nun aber auch von großer Bedeutung zu wissen, wie man in Python Funktionen selbst innerhalb eines Programms definieren kann.
Wie das genau funktioniert, sehen wir uns nun einmal genauer an. Für die Definition einer Funktion gibt es mehrere Möglichkeiten. In diesem Artikel sehen wir uns zunächst die einfachste Form an.
Eingeleitet wird eine Funktionsdefinition immer durch das Schlüsselwort "def". Daraufhin folgt dann der Bezeichner der Funktion, welchen wir wieder wie gewohnt frei wählen können.
Für den Bezeichner einer Python Funktion gelten die gleichen Regeln wie für Variablen-Bezeichner.
In unserem Beispiel nennen wir die Funktion say_hello. Nach dem Bezeichner folgen ein rundes Klammerpaar und ein Doppelpunkt. Nun schreiben wir darunter eingerückt den sogenannten Funktionskörper. Genau wie bei einer if-Anweisung oder einer Schleife führt das Programm sämtlichen Code beim Aufruf der Funktion aus, der eingerückt unter dem Funktionskopf steht und somit Teil des Funktionskörpers ist.
In den Funktionskörper schreiben wir nun einmal die folgenden zwei Anweisungen hinein:
Damit haben wir auch schon eine erste Funktion definiert!
4. Funktionen aufrufen
Führen wir das Programm nun aus, müssen wir allerdings feststellen, dass zunächst einmal nichts passiert. Das liegt daran, dass wir die Funktion zwar definiert, aber noch nicht aufgerufen haben.
Mit der Definition der Funktion haben wir mit anderen Worten lediglich den Ablaufplan vorgegeben. Um diesen ausführen zu lassen, müssen wir in Python Funktionen aufrufen. Das gelingt, indem wir den Bezeichner der Funktion angeben und das runde Klammerpaar anhängen:
Führen wir das Programm nun aus, sehen wir, dass nun tatsächlich die Funktion aufgerufen wird:
Der Ablauf sieht nun folgendermaßen aus:
Das Programm startet und sieht, dass zunächst eine Funktion definiert wird. Hat das Programm also die Funktionsdefinition erkannt, kann es die Funktion ab dieser Stelle zu jedem beliebigen Zeitpunkt im Programm aufrufen. In der letzten Anweisung des aktuellen Programms setzen wir das direkt um.
Sobald diese Funktion nun aufgerufen wird, springt die Programmausführung in den Funktionskörper der aufgerufenen Funktion und arbeitet diesen Zeile für Zeile ab.
Zuerst gibt das Programm also „Hallo Hendrik“ aus und anschließend „Willkommen zurück“. Sobald die Funktion vollständig abgearbeitet wurde, geht es im Programm direkt nach dem Funktionsaufruf weiter.
Da in diesem Fall keine weitere Anweisung mehr folgt, beendet sich das Programm. Nun könnte man auch eine weitere print-Funktion in den Code setzen und die say_hello-Funktion anschließend erneut aufrufen.
Beim Ausführen des Programms erkennt dieses wieder die Funktionsdefinition, ruft diese auf und arbeitet die Anweisungen ab. Anschließend erzeugt es durch die print-Funktion die Ausgabe „Test“ und ruft die Funktion say_hello nochmals auf:
An dieser Stelle weißt du nun, wie du auf einfachste Art und Weise in Python Funktionen definieren kannst. Das Ganze ist allerdings noch ziemlich statisch, da die Funktion say_hello bisher lediglich „Hendrik“ begrüßt. Würden wir eine weitere Person grüßen wollen, dann müssten wir für diese Person eine weitere Funktion implementieren.
Dies können wir vermeiden, indem wir innerhalb der Funktionen mit sogenannten Parametern arbeiten. Wie das genau funktioniert, erfährst du detailliert im nächsten Blogartikel.