Python #9: Funktionen

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.

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, zbsp. print, str, len usw. Unsere neue Funktion „ausgabe“ rufen wir nun wiefolgt 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, das 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 das 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 zbsp. 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!")

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.