Funktionen in Python

Aktualisiert am 10. April 2021

Unter einer Funktion versteht man ein Programmkonstrukt, mit dem Code dergestalt strukturiert werden kann, dass er wiederverwendbar wird.

Funktionen beginnen mit dem Schlüsselwort def, gefolgt vom Funktionsnamen und etwaigen Parametern in runden Klammern. Die Zeile muss zwingend mit einem Doppelpunkt beendet werden. Dieser Teil der Funktion wird als Funktionskopf bezeichnet.

def addieren():

In der folgenden Zeile, die eingerückt sein muss, folgt der Funktionskörper. Er enthält den Code, der bei Aufruf der Funktion ausgeführt wird.

def addieren():
    print(2 + 2)

Durch den Aufruf dieser Funktion mit addieren() wird der Code ausgeführt, in diesem Fall also als Ergebnis der Addition von 2 + 2 der Wert 4 angezeigt:

def addieren():
    print(2 + 2)

addieren()
4

Das Ergebnis könnte auch mit return zurückgeben werden:

def addieren():
    return 2 + 2

ergebnis = addieren()
print(ergebnis)
4

Der zurückgegebene Wert wird hier der Variablen ergebnis zugewiesen und anschließend mit der Funktion print() ausgegeben.

Parameter

Wie bereits erwähnt, werden etwaige Parameter innerhalb der runden Klammern aufgeführt. Im folgenden Beispiel wird die Funktion addieren() dergestalt geändert, dass an sie beim Aufruf zwei Argumente übergeben werden können. Damit dies funktioniert, werden die Parameter x und y hinzugefügt.

def addieren(x, y):
    return x + y

ergebnis = addieren(2, 2)
print(ergebnis)
4

Als Ergebnis wird wiederum 4 ausgegeben. Durch die Verwendung von Parametern ist man jetzt aber flexibler, besteht soch die Möglichkeit, andere Werte als Argumente an die Funktion zu übergeben. Der Code wird somit noch wiederverwendbarer. Man spricht hierbei übrigens von positional arguments (auch als required arguments bezeichnet).

Keyword Arguments

In Python besteht darüber hinaus die Möglichkeit keyword arguments zu verwenden. Das bedeutet, dass einem Parameter ein Standardwert zugewiesen wird. Sollte kein entsprechner Wert als Argument übergeben werden, wird der Standardwert verwendet. Im folgenden Beispiel wird y der Wert 52 zugewiesen. Da beim Aufruf der Funktion kein Wert für y übergeben wird, ist eben dieser Wert 52 der zweite Operand für die Addition x + y. Das Ergebnis lautet dementsprechend 62.

def addieren(x, y=52):
    return x + y

ergebnis = addieren(10)
print(ergebnis)
62

Das Verwenden von keyword arguments lässt auch eine andere Reihenfolge der Argumente beim Aufruf der Funktion zu. Schließlich kann der Interpreter die Werte anhand der Schlüsselwörter zuordnen.

def addieren(x=2, y=52):
    return x + y

ergebnis = addieren(y=12, x=12)
print(ergebnis)

Type Annotation

Standardmäßig muss man in Python nicht den Datentyp angeben. Dies kann aber – gerade bei sehr großen Projekten – zur Unübersichtlichkeit führen. Deshalb besteht seit Python 3.5 optional die Möglichkeit, den Datentyp anzugeben.

def addieren(x: int, y: int) -> int:
    return x + y

ergebnis = addieren(28, 2)
print(ergebnis)
30

Diese type annotations führen aber nicht dazu, dass zur Laufzeit des Programms ein Fehler für den Fall angezeigt wird, dass ein anderer Datentyp als angegeben verwendet wird. Denn derartige Angaben werden vom Interpreter ignoriert. Nachfolgender Code wird also ohne Beanstandungen ausgeführt:

def addieren(x: int, y: int) -> int:
    return x + y

ergebnis = addieren(28, 2.1)
print(ergebnis)
30.1  # -> Datentyp float

Die Angabe von Datentypen soll lediglich die Lesbarkeit des Codes verbessern.

Funktion als Parameter

In Python sind Funktionen Objekte erster Klasse. Das bedeutet, dass mit ihnen verfahren werden kann wie mit anderen Objekten (z.B. int oder str). So kann eine Funktion beispielsweise Bestandteil einer Parameterliste sein. Betrachten wird dazu folgende einfache Funktion:

def add_numbers(num1, num2):
    return num1 + num2

Nun kommt eine zweite Funktion hinzu, die als ersten Parameter eine Funktion akzeptiert:

def add_values(func, arg1, arg2):
    result = func(arg1, arg2)
    return result

Jetzt wird add_values()aufgerufen und das Ergebnis der Variablen sum zugewiesen. Als erstes Argument wird dieser Funktion die Funktion add_numbers() übergeben. Die print()-Funktion zeigt schließlich das Ergebnis der Addition an:

sum = add_values(add_numbers, 2, 20)
print(f"Ergebnis: {sum}")
Ergebnis: 22