Funktionen sind ein wesentlicher Bestandteil der objektorientierten Programmierung (dazu folgt später ein separater Beitrag) und dienen unter anderem dazu den Quellcode zu strukturieren.
Nehmen wir folgenden Quellcode:
a = 1 b = 2 print(a+b) a = 4 b = 6 print(a+b) a = 8 b = 9 print(a+b)
In diesem Stück Code wird die Addition zweier Zahlen (a & b) ausgeführt.
Da ich hier jedoch mehrmals Addieren möchte, muss der Quellcode immer wiederholt werden. Diese Dopplung von Code ist nicht sehr schön und macht den gesamten Quellcode schnell unübersichtlich und unnötig lang. Und genau hier können wir eine Funktion nutzen, um diesen Code zu vereinfachen.
Inhaltsverzeichnis
Wie erzeugt man eine Funktion?
Eine Funktion erzeugt man mit dem Schlüsselwort “def”. Nach dem Schlüsselwort folgt ein Name für die Funktion und zusätzlich die runden Klammern gefolgt von einem Doppelpunkt.
def ein_funktionsname():
Als Funktionsname kann man eine beliebige Zeichenkette wählen, jedoch darf diese nicht mit einer Zahl beginnen. Macht man dieses trotzdem erhält man vom Interpreter folgende Fehlermeldung:
def 1test(): ^ SyntaxError: invalid syntax
Der Name einer Funktion sollte im Idealfall immer das Repräsentieren, was die Funktion macht, d.h. wenn in dieser Funktion eine Addition zweier oder mehrerer Zahlen durchgeführt wird so sollte diese dann mit “addition” benannt werden. Des Weiteren sollte eine Funktion genau eine Aufgabe übernehmen und wenn mehr zutun ist, kann man dieses ja in andere Funktionen auslagern. Auch solle eine Funktion nicht zu lang werden, als Richtwert nimmt man immer eine Bildschirmhöhe.
Als Erstes schreiben wir eine Funktion, welche uns mit dem Befehl “print” mehrere Ausgaben auf der Konsole erzeugt.
def ausgabe(): for i in range(0,10): print("Hallo Welt!")
Aufrufen einer Funktion
In den Beiträgen zuvor haben wir bereits Funktionen genutzt, Bsp. print, str, len usw. Unsere neue Funktion “ausgabe” rufen wir nun wie folgt auf:
ausgabe()
Mit den Klammern “sagen” wir dem Interpreter das wir die Funktion “ausgabe” aufrufen möchten (andernfalls würde dieses als Variable erkannt).
def ausgabe(): for i in range(0,10): print("Hallo Welt!") ausgabe()
Wir erhalten also folgende Ausgabe:
Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt!
Wichtig ist, dass die Definition der Funktion VOR dem Aufrufen der Funktion steht, ansonsten erhält man folgende Fehlermeldung:
NameError: name 'addition' is not defined
Dies bedeutet das der Interpreter den Namen der Funktion “addition” zu dem Zeitpunkt wo die Zeile ausgeführt wird nicht kennt. Dieses liegt daran, dass die definition ja erst zum Schluss erfolgt.
Definieren von Funktionsparameter
Einer Funktion kann in den runden Klammern zusätzlich Funktionsparameter übergeben werden.
def ausgabe(text): for i in range(0,10): print(text) ausgabe("Hallo Welt!")
Hier habe ich nun die Funktion angepasst nun ist diese noch vielseitiger zu verwenden da die Funktion “ausgabe” nun mit mehreren Texten bedient werden kann.
ausgabe("Hallo Welt!") ausgabe("Dies ist ein Text!")
Möchte man mehr als einen Funktionsparameter verwenden, so kann man diese mit einem Komma getrennt erstellen.
def eine_funktion(param1, param2, paramN):
Nun können wir unsere Additionsaufgaben vom Anfang erneut anschauen und wissen nun wie wir dieses verbessern können:
def addition(a,b): print(a+b) addition(1,2) addition(4,6) addition(8,9)
optionale Funktionsparameter
Nachdem wir nun eine Funktion mit einem oder mehreren Funktionsparametern definiert haben, wollen wir diese nun vorbelegen. Dieses sind dann die optionalen Funktionsparameter. Es ist bei der Verwendung von optionalen Funktionsparametern wichtig das diese NACH den nicht optionalen Funktionsparametern folgen.
def addition(a,b=1):
Macht man dieses nicht so erhält man die Fehlermeldung:
def addition(a=1,b): ^ SyntaxError: non-default argument follows default argument
Möchte man also den Funktionsparameter “a” vorbelegen so muss man diese beiden Funktionsparameter tauschen.
Das ergibt an der Funktion “addition” jedoch wenig sinn.
Wenn wir Bsp. die mathematische Funktion des quadrieren (zbsp. 9²) nutzen wollen:
def quadriere(zahl, exponent): ergebnis = zahl for i in range(1, exponent): ergebnis = ergebnis * zahl print(ergebnis) quadriere(9,2)
Als Ausgabe erhalten wir den Wert “81”. Jedoch können wir als Exponenten auch einen anderen Wert als “2” wählen oder aber wir definieren, wenn kein Exponent angegeben wird, dann wird immer der Wert “2” gesetzt.
def quadriere(zahl, exponent=2):
definieren unendlicher Funktionsparameter
Man kann auch unendlich viele Funktionsparameter definieren, dazu erzeugt man einen einfachen Parameter und setzt vor diesem ein Stern (*). Dieser Parameter wird dann auch Tupel-Referenz genannt und repräsentiert eine Liste.
def eineFunktion(a,b, *vielemehr):
Wenn wir nun die Funktion wiefolgt aufrufen würden:
eineFunktion("Dies", "ist", "ein", "Test", "mit", "ganz", "vielen", "Funktionsparametern!")
Dann haben wir den Funktionsparameter “a” mit “Dies” belegt sowie “b” mit “ist”, die restlichen übergebenen Werte werden in einer Liste zusammen gefasst und können mit dem Index abgerufen werden.
def eineFunktion(a,b, *vielemehr): print(a,b, " ".join(vielemehr), sep=" ") eineFunktion("Dies", "ist", "ein", "Test", "mit", "ganz", "vielen", "Funktionsparametern!")
1 thought on “Python #9: Funktionen”