Eigene Funktionen#

Wir haben im bisherigen Verlauf des Kurses schon viel von Funktionen gesprochen und auch schon selbst viele davon benutzt. In diesem Kapitel lernen wir, wie wir selbst solche Funktionen erstellen.

Funktionen ermöglichen es Code zu kleinen (oder großen) Paketen zusammenzufassen, damit wir diese Code-Pakete im Programm immer wieder verwenden können, ohne den Code selbst immer wieder aufschreiben zu müssen. Es sind kleine, innerhalb unseres Programmes ausführbare Unterprogramme.

Bisher haben wir v.a. sogenannte built-in-Funktionen verwendet, wie z.B. die Funktion type() oder len(). Dies sind Funktionen, welche standardmäßig immer innerhalb von Python verfügbar sind. Wir haben aber auch schon Funktionen aus Paketen wie dem Modul random verwendet. Alle Funktionen konnten wir so oft wir wollten verwenden, ohne uns über deren interne Funktionalität Gedanken zu machen. Das ist ziemlich praktisch und bequem. Genau das ist auch einer der Vorteile von Funktionen. Sie packen den Code zu Paketen zusammen, machen diesen so praktisch in verschiedenen Situationen anwendbar und verstecken bei der Anwendung die irrelevanten Details der Funktionsweise der Funktion d.h. den Code-Inhalt der Funktion. Allen Funktionen ist aber gemeinsam, dass sie irgendwann mal von irgendjemandem definiert bzw. programmiert wurden und intern eben wiederum aus Code bestehen. Auch die built-in-Funktionen sind eigentlich Code-Pakete, die sich irgendwann mal irgendjemand ausgedacht hat und beim Aufruf der Funktion im Hintergrund ausgeführt werden. In diesem Kapitel schauen wir “hinter die Kulissen” und erstellen unsere eigenen Funktionen.

Funktionen haben insgesamt sehr viele Vorteile und sind ein absolutes Muss beim Programmieren. Hier sind ein paar der Vorteile von Funktionen aufgelistet:

  • Reduktion von Wiederholung: Wir müssen Code nur einmal hinschreiben und können diesen dann immer wieder mittels Funktionsaufruf verwenden. Der Code wird dadurch kürzer und übersichtlicher.

  • Reduktion von Fehlern: Schreiben wir keine Funktionen, so müssten wir bei sich wiederholenden Problemen immer wieder denselben Code schreiben. Dabei entstehen Fehler z.B. beim “Herumkopieren” des Codes oder wenn man bestimmte Dinge ändern möchte und dies dann bei allen Stellen, wo man diesen Code verwendet, machen müsste.

  • Reduktion von Komplexität: Wir können Probleme in viele kleine Teilprobleme zerlegen und mit jeder Funktion eine kleine, für sich funktionierende Teillösungen entwickeln.

  • Bessere Lesbarkeit: Besteht ein Programm v.a. aus Funktionen, dann werden uns beim Lesen des Codes “irrelevante” Details erspart. Bei Bedarf können wir für die Details des Programms in die Funktionsdefinitionen schauen.

Übrigens

Im Folgenden lernen wir zwar genaugenommen nur wie wir allgemeine, freistehende Funktionen der Form function() definieren, fast alles was wir hier lernen, gilt aber auch für die “objektgebundenen” Methoden der Form object.method().